okengine 0.2.6 → 0.2.8

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 (584) hide show
  1. package/AGENTS.md +24 -23
  2. package/README.md +52 -346
  3. package/docs/spec/console.md +165 -142
  4. package/docs/spec/example.md +490 -312
  5. package/docs/spec/four-applications.md +495 -314
  6. package/docs/spec/unified-theory.md +184 -175
  7. package/package.json +45 -37
  8. package/spec/manifest.v1.schema.json +40 -9
  9. package/src/auth/api-keys.ts +2 -5
  10. package/src/auth/attenuation.ts +2 -6
  11. package/src/auth/auth.test.ts +53 -31
  12. package/src/auth/invoke-as.ts +1 -3
  13. package/src/auth/operator.ts +8 -26
  14. package/src/auth/planes.ts +2 -7
  15. package/src/auth/plugin.ts +4 -7
  16. package/src/auth/roles.ts +1 -5
  17. package/src/auth/sessions.ts +10 -39
  18. package/src/cli/args.ts +1 -5
  19. package/src/cli/ask-dev-mode.ts +40 -0
  20. package/src/cli/build.ts +1 -2
  21. package/src/cli/client-add.test.ts +8 -15
  22. package/src/cli/client-add.ts +5 -14
  23. package/src/cli/completion.test.ts +1 -5
  24. package/src/cli/completion.ts +4 -17
  25. package/src/cli/db-auto-push.test.ts +64 -0
  26. package/src/cli/db-auto-push.ts +72 -0
  27. package/src/cli/db.test.ts +189 -0
  28. package/src/cli/db.ts +386 -0
  29. package/src/cli/dev-app-runner.ts +2 -8
  30. package/src/cli/dev-db-push.test.ts +163 -0
  31. package/src/cli/dev-mode.test.ts +45 -0
  32. package/src/cli/dev-mode.ts +78 -0
  33. package/src/cli/dev.test.ts +148 -21
  34. package/src/cli/dev.ts +208 -134
  35. package/src/cli/doc-drift.test.ts +3 -2
  36. package/src/cli/doc-drift.ts +21 -50
  37. package/src/cli/doc-staleness.test.ts +69 -0
  38. package/src/cli/docker-cli.test.ts +7 -8
  39. package/src/cli/docker.ts +1 -3
  40. package/src/cli/doctor-diff-examples.ts +1 -3
  41. package/src/cli/doctor-diff.test.ts +1 -5
  42. package/src/cli/doctor-diff.ts +17 -46
  43. package/src/cli/doctor-pii.ts +2 -7
  44. package/src/cli/doctor.test.ts +26 -4
  45. package/src/cli/doctor.ts +35 -11
  46. package/src/cli/eval.ts +4 -14
  47. package/src/cli/gates-list.ts +1 -4
  48. package/src/cli/hero-meta.test.ts +17 -19
  49. package/src/cli/hero-meta.ts +20 -30
  50. package/src/cli/images.ts +3 -8
  51. package/src/cli/index.ts +11 -2
  52. package/src/cli/load-config.images.test.ts +14 -14
  53. package/src/cli/load-config.ts +41 -47
  54. package/src/cli/mcp-from-console.ts +1 -4
  55. package/src/cli/mode.ts +45 -0
  56. package/src/cli/ports.test.ts +4 -13
  57. package/src/cli/ports.ts +1 -3
  58. package/src/cli/privacy-erase.ts +1 -3
  59. package/src/cli/registry.ts +75 -25
  60. package/src/cli/schema.ts +3 -10
  61. package/src/cli/stack.ts +2 -7
  62. package/src/cli/start.ts +4 -15
  63. package/src/cli/upgrade.ts +1 -4
  64. package/src/client/budget-entry.ts +1 -6
  65. package/src/client/create.test.ts +6 -12
  66. package/src/client/create.ts +2 -8
  67. package/src/client/errors.ts +1 -4
  68. package/src/client/index.ts +1 -6
  69. package/src/client/notes-contract.test.ts +4 -13
  70. package/src/client/transport.ts +9 -30
  71. package/src/client/types.ts +8 -29
  72. package/src/compiler/aot.test.ts +2 -9
  73. package/src/compiler/aot.ts +1 -4
  74. package/src/compiler/differential.test.ts +3 -11
  75. package/src/compiler/dynamic.ts +1 -4
  76. package/src/compiler/effects-infer.ts +8 -34
  77. package/src/compiler/emit.ts +1 -3
  78. package/src/compiler/extract.test.ts +96 -30
  79. package/src/compiler/extract.ts +362 -156
  80. package/src/compiler/fixtures/skyport/oke.config.ts +1 -1
  81. package/src/compiler/fixtures/skyport/src/flows/bookings/index.ts +7 -3
  82. package/src/compiler/fixtures/skyport/src/flows/payments/index.ts +1 -3
  83. package/src/compiler/fixtures/skyport/src/flows/support/index.ts +4 -1
  84. package/src/compiler/fixtures/skyport.expected.json +24 -83
  85. package/src/compiler/fixtures/triggers/five-triggers.ts +1 -2
  86. package/src/compiler/http-parse.ts +2 -9
  87. package/src/compiler/index.ts +1 -5
  88. package/src/compiler/response.ts +4 -7
  89. package/src/compiler/sucrose.ts +11 -31
  90. package/src/config/define-config.test.ts +57 -34
  91. package/src/config/index.ts +181 -37
  92. package/src/config/resolve-driver.test.ts +28 -17
  93. package/src/console/budget.test.ts +1 -4
  94. package/src/console/index.ts +1 -4
  95. package/src/console/server/access.test.ts +15 -43
  96. package/src/console/server/access.ts +19 -49
  97. package/src/console/server/ai.test.ts +3 -11
  98. package/src/console/server/ai.ts +23 -46
  99. package/src/console/server/app.ts +14 -45
  100. package/src/console/server/auth-rate.test.ts +4 -12
  101. package/src/console/server/bind.ts +1 -5
  102. package/src/console/server/channels.test.ts +2 -6
  103. package/src/console/server/channels.ts +10 -35
  104. package/src/console/server/claim.ts +2 -8
  105. package/src/console/server/clock.test.ts +2 -6
  106. package/src/console/server/clock.ts +8 -26
  107. package/src/console/server/console.test.ts +1 -3
  108. package/src/console/server/diff.test.ts +5 -17
  109. package/src/console/server/diff.ts +10 -31
  110. package/src/console/server/dry-run.audit.test.ts +2 -8
  111. package/src/console/server/flows.ts +64 -233
  112. package/src/console/server/gates.test.ts +14 -50
  113. package/src/console/server/gates.ts +13 -48
  114. package/src/console/server/index.ts +2 -9
  115. package/src/console/server/live.ts +3 -12
  116. package/src/console/server/operator-db.test.ts +4 -15
  117. package/src/console/server/operator-db.ts +13 -32
  118. package/src/console/server/plugin.ts +50 -53
  119. package/src/console/server/plugins.test.ts +2 -6
  120. package/src/console/server/plugins.ts +17 -56
  121. package/src/console/server/runs-pii.ts +2 -7
  122. package/src/console/server/security.gate.test.ts +18 -40
  123. package/src/console/server/serve.ts +10 -25
  124. package/src/console/server/signals.test.ts +1 -3
  125. package/src/console/server/signals.ts +17 -40
  126. package/src/console/server/state.ts +21 -59
  127. package/src/console/server/store.test.ts +20 -22
  128. package/src/console/server/store.ts +31 -76
  129. package/src/console/server/vault.test.ts +12 -29
  130. package/src/console/server/vault.ts +23 -60
  131. package/src/console/ui/access/AccessA11yView.tsx +6 -21
  132. package/src/console/ui/access/a11y.test.tsx +3 -12
  133. package/src/console/ui/access/acknowledgement.test.ts +1 -4
  134. package/src/console/ui/access/acknowledgement.ts +1 -3
  135. package/src/console/ui/access/blast-radius.ts +1 -3
  136. package/src/console/ui/access/confirmation.test.ts +1 -5
  137. package/src/console/ui/access/confirmation.ts +1 -4
  138. package/src/console/ui/access/fixture.ts +1 -5
  139. package/src/console/ui/access/grantable.test.ts +1 -3
  140. package/src/console/ui/access/grantable.ts +2 -7
  141. package/src/console/ui/access/index.ts +2 -9
  142. package/src/console/ui/access/provenance.test.ts +1 -3
  143. package/src/console/ui/access/provenance.ts +2 -6
  144. package/src/console/ui/access/search.test.ts +1 -5
  145. package/src/console/ui/access/search.ts +2 -6
  146. package/src/console/ui/ai/AiA11yView.tsx +6 -17
  147. package/src/console/ui/ai/a11y.test.tsx +2 -5
  148. package/src/console/ui/ai/fixture.ts +2 -7
  149. package/src/console/ui/ai/format.ts +1 -3
  150. package/src/console/ui/ai/group.test.ts +1 -3
  151. package/src/console/ui/ai/group.ts +4 -12
  152. package/src/console/ui/ai/index.ts +2 -9
  153. package/src/console/ui/ai/promotion.test.ts +2 -7
  154. package/src/console/ui/ai/promotion.ts +4 -13
  155. package/src/console/ui/ai/search.test.ts +2 -11
  156. package/src/console/ui/ai/search.ts +3 -13
  157. package/src/console/ui/ai/types.ts +1 -8
  158. package/src/console/ui/architecture/ArchitectureA11yView.tsx +8 -29
  159. package/src/console/ui/architecture/a11y.test.tsx +1 -2
  160. package/src/console/ui/architecture/declared.ts +1 -5
  161. package/src/console/ui/architecture/index.ts +7 -35
  162. package/src/console/ui/architecture/layout.ts +1 -3
  163. package/src/console/ui/architecture/pathologies.ts +10 -19
  164. package/src/console/ui/architecture/search.ts +6 -15
  165. package/src/console/ui/architecture/traffic.ts +4 -14
  166. package/src/console/ui/architecture/types.ts +2 -10
  167. package/src/console/ui/architecture/view.test.ts +7 -19
  168. package/src/console/ui/architecture/view.ts +9 -36
  169. package/src/console/ui/channels/ChannelsA11yView.tsx +4 -13
  170. package/src/console/ui/channels/a11y.test.tsx +1 -2
  171. package/src/console/ui/channels/confirmation.test.ts +1 -4
  172. package/src/console/ui/channels/confirmation.ts +1 -4
  173. package/src/console/ui/channels/findings.ts +1 -5
  174. package/src/console/ui/channels/index.ts +2 -8
  175. package/src/console/ui/channels/locale.test.ts +1 -3
  176. package/src/console/ui/channels/locale.ts +2 -8
  177. package/src/console/ui/channels/search.ts +4 -13
  178. package/src/console/ui/channels/taxonomy.ts +1 -3
  179. package/src/console/ui/clock/ClockA11yView.tsx +9 -26
  180. package/src/console/ui/clock/a11y.test.tsx +2 -5
  181. package/src/console/ui/clock/confirmation.test.ts +1 -3
  182. package/src/console/ui/clock/confirmation.ts +1 -4
  183. package/src/console/ui/clock/findings.ts +1 -4
  184. package/src/console/ui/clock/health.ts +2 -7
  185. package/src/console/ui/clock/index.ts +2 -10
  186. package/src/console/ui/clock/search.test.ts +1 -3
  187. package/src/console/ui/clock/search.ts +2 -6
  188. package/src/console/ui/clock/timeline.test.ts +1 -3
  189. package/src/console/ui/clock/waiting-on.test.ts +1 -5
  190. package/src/console/ui/clock/waiting-on.ts +2 -7
  191. package/src/console/ui/diff/DiffA11yView.tsx +8 -17
  192. package/src/console/ui/diff/a11y.test.tsx +2 -5
  193. package/src/console/ui/diff/group.test.ts +3 -13
  194. package/src/console/ui/diff/group.ts +2 -8
  195. package/src/console/ui/diff/index.ts +2 -8
  196. package/src/console/ui/diff/search.test.ts +1 -5
  197. package/src/console/ui/diff/search.ts +4 -16
  198. package/src/console/ui/diff/summary.ts +1 -2
  199. package/src/console/ui/dist/assets/{index-Dy4jht9P.js → index-BWo8R7NR.js} +2 -2
  200. package/src/console/ui/dist/assets/{panel-access-Dd37LU2c.js → panel-access-C0J2D-a2.js} +1 -1
  201. package/src/console/ui/dist/assets/{panel-ai-CC7LR6-J.js → panel-ai-D_m6WQI8.js} +1 -1
  202. package/src/console/ui/dist/assets/{panel-architecture-B5b3iKCz.js → panel-architecture-CKnXFyUx.js} +1 -1
  203. package/src/console/ui/dist/assets/{panel-channels-CeNjTKXp.js → panel-channels-BOmQ-onL.js} +1 -1
  204. package/src/console/ui/dist/assets/{panel-clock-DgFTLoHV.js → panel-clock-giAq0Ccv.js} +1 -1
  205. package/src/console/ui/dist/assets/{panel-diff-DxehccqB.js → panel-diff-cdonmH8c.js} +1 -1
  206. package/src/console/ui/dist/assets/{panel-flows-BtrVn-Eg.js → panel-flows-DlCU5zjA.js} +2 -2
  207. package/src/console/ui/dist/assets/{panel-gates-Z9MKRGdH.js → panel-gates-XclZxWD5.js} +1 -1
  208. package/src/console/ui/dist/assets/{panel-overview-Dt_AeXgd.js → panel-overview-BznEOTnb.js} +1 -1
  209. package/src/console/ui/dist/assets/{panel-plugins-DWd0TowH.js → panel-plugins-CcGM1g64.js} +1 -1
  210. package/src/console/ui/dist/assets/{panel-runs-DGstFHeq.js → panel-runs-CGWNHLR4.js} +1 -1
  211. package/src/console/ui/dist/assets/{panel-signals-DzEa2Fnt.js → panel-signals-CNywkdak.js} +1 -1
  212. package/src/console/ui/dist/assets/{panel-store-BJkbNgxx.js → panel-store-KmTbFHMH.js} +1 -1
  213. package/src/console/ui/dist/assets/{panel-traces-BaRVO3gM.js → panel-traces-DBLx2ilD.js} +1 -1
  214. package/src/console/ui/dist/assets/panel-vault-CEnFc0dk.js +1 -0
  215. package/src/console/ui/dist/index.html +1 -1
  216. package/src/console/ui/flows/FlowsA11yView.tsx +7 -22
  217. package/src/console/ui/flows/a11y.test.tsx +2 -8
  218. package/src/console/ui/flows/buffer.test.ts +3 -11
  219. package/src/console/ui/flows/buffer.ts +4 -11
  220. package/src/console/ui/flows/confirmation.ts +1 -3
  221. package/src/console/ui/flows/contract.test.ts +3 -7
  222. package/src/console/ui/flows/contract.ts +12 -36
  223. package/src/console/ui/flows/graph.test.ts +3 -11
  224. package/src/console/ui/flows/graph.ts +5 -15
  225. package/src/console/ui/flows/index.ts +1 -6
  226. package/src/console/ui/flows/save-as-test.ts +1 -3
  227. package/src/console/ui/flows/search.ts +8 -25
  228. package/src/console/ui/flows/tiers.ts +2 -9
  229. package/src/console/ui/gates/GatesA11yView.tsx +4 -13
  230. package/src/console/ui/gates/a11y.test.tsx +2 -5
  231. package/src/console/ui/gates/audit.ts +1 -3
  232. package/src/console/ui/gates/denial.test.ts +1 -3
  233. package/src/console/ui/gates/denial.ts +4 -12
  234. package/src/console/ui/gates/findings.ts +1 -3
  235. package/src/console/ui/gates/group.test.ts +3 -3
  236. package/src/console/ui/gates/group.ts +3 -11
  237. package/src/console/ui/gates/index.ts +2 -10
  238. package/src/console/ui/gates/search.ts +3 -10
  239. package/src/console/ui/overview/OverviewA11yView.tsx +9 -27
  240. package/src/console/ui/overview/a11y.test.tsx +1 -2
  241. package/src/console/ui/overview/busiest.ts +1 -3
  242. package/src/console/ui/overview/compose.ts +1 -13
  243. package/src/console/ui/overview/cost.ts +34 -38
  244. package/src/console/ui/overview/fixture.ts +21 -26
  245. package/src/console/ui/overview/golden.ts +4 -14
  246. package/src/console/ui/overview/index.ts +2 -9
  247. package/src/console/ui/overview/rank.test.ts +3 -10
  248. package/src/console/ui/overview/rank.ts +2 -7
  249. package/src/console/ui/overview/slo.test.ts +5 -9
  250. package/src/console/ui/overview/slo.ts +6 -23
  251. package/src/console/ui/overview/verdict.ts +3 -10
  252. package/src/console/ui/plugins/PluginsA11yView.tsx +8 -18
  253. package/src/console/ui/plugins/a11y.test.tsx +1 -2
  254. package/src/console/ui/plugins/fixture.ts +2 -4
  255. package/src/console/ui/plugins/group.test.ts +1 -3
  256. package/src/console/ui/plugins/group.ts +1 -6
  257. package/src/console/ui/plugins/index.ts +3 -13
  258. package/src/console/ui/plugins/search.ts +7 -19
  259. package/src/console/ui/runs/RunsA11yView.tsx +5 -20
  260. package/src/console/ui/runs/a11y.test.tsx +2 -5
  261. package/src/console/ui/runs/explain.ts +2 -6
  262. package/src/console/ui/runs/group.ts +3 -12
  263. package/src/console/ui/runs/histogram.test.ts +2 -11
  264. package/src/console/ui/runs/histogram.ts +1 -4
  265. package/src/console/ui/runs/index.ts +4 -18
  266. package/src/console/ui/runs/project.ts +2 -6
  267. package/src/console/ui/runs/query.test.ts +1 -3
  268. package/src/console/ui/runs/query.ts +12 -35
  269. package/src/console/ui/runs/search.ts +5 -19
  270. package/src/console/ui/runs/trace-link.test.ts +2 -6
  271. package/src/console/ui/runs/trace-link.ts +4 -16
  272. package/src/console/ui/runs/types.ts +1 -3
  273. package/src/console/ui/shell/App.tsx +2 -10
  274. package/src/console/ui/shell/client.ts +22 -115
  275. package/src/console/ui/shell/components/ui.tsx +1 -4
  276. package/src/console/ui/shell/layout/Shell.tsx +2 -4
  277. package/src/console/ui/shell/main.tsx +31 -96
  278. package/src/console/ui/shell/panels/access/AccessPanel.tsx +34 -98
  279. package/src/console/ui/shell/panels/ai/AiPanel.tsx +35 -106
  280. package/src/console/ui/shell/panels/architecture/ArchitecturePanel.tsx +18 -66
  281. package/src/console/ui/shell/panels/channels/ChannelsPanel.tsx +20 -57
  282. package/src/console/ui/shell/panels/clock/ClockPanel.tsx +22 -54
  283. package/src/console/ui/shell/panels/diff/DiffPanel.tsx +20 -61
  284. package/src/console/ui/shell/panels/flows/ContractEditor.tsx +6 -23
  285. package/src/console/ui/shell/panels/flows/FlowDrawer.tsx +13 -28
  286. package/src/console/ui/shell/panels/flows/FlowsPanel.tsx +9 -29
  287. package/src/console/ui/shell/panels/gates/GatesPanel.tsx +24 -80
  288. package/src/console/ui/shell/panels/overview/OverviewPanel.tsx +20 -58
  289. package/src/console/ui/shell/panels/plugins/PluginsPanel.tsx +16 -41
  290. package/src/console/ui/shell/panels/runs/RunsPanel.tsx +31 -99
  291. package/src/console/ui/shell/panels/signals/SignalsPanel.tsx +38 -101
  292. package/src/console/ui/shell/panels/store/StorePanel.tsx +27 -66
  293. package/src/console/ui/shell/panels/traces/TracesPanel.tsx +28 -89
  294. package/src/console/ui/shell/panels/vault/VaultPanel.tsx +22 -53
  295. package/src/console/ui/shell/setup/Wizard.tsx +3 -5
  296. package/src/console/ui/shell/styles.css +1 -2
  297. package/src/console/ui/signals/SignalsA11yView.tsx +9 -33
  298. package/src/console/ui/signals/a11y.test.tsx +2 -5
  299. package/src/console/ui/signals/confirmation.test.ts +1 -5
  300. package/src/console/ui/signals/confirmation.ts +2 -6
  301. package/src/console/ui/signals/dry-run.ts +1 -3
  302. package/src/console/ui/signals/durable.ts +1 -3
  303. package/src/console/ui/signals/findings.ts +1 -3
  304. package/src/console/ui/signals/group.test.ts +2 -8
  305. package/src/console/ui/signals/group.ts +2 -10
  306. package/src/console/ui/signals/index.ts +1 -4
  307. package/src/console/ui/signals/monitor.ts +2 -7
  308. package/src/console/ui/signals/schema-form.test.ts +3 -14
  309. package/src/console/ui/signals/schema-form.ts +1 -4
  310. package/src/console/ui/signals/search.ts +4 -13
  311. package/src/console/ui/store/StoreA11yView.tsx +3 -9
  312. package/src/console/ui/store/a11y.test.tsx +2 -5
  313. package/src/console/ui/store/confirmation.test.ts +1 -3
  314. package/src/console/ui/store/confirmation.ts +1 -4
  315. package/src/console/ui/store/dry-run.ts +2 -5
  316. package/src/console/ui/store/fixture.ts +1 -2
  317. package/src/console/ui/store/group.test.ts +1 -6
  318. package/src/console/ui/store/group.ts +1 -4
  319. package/src/console/ui/store/index.ts +1 -5
  320. package/src/console/ui/store/search.ts +2 -6
  321. package/src/console/ui/store/will-not-fire.ts +1 -2
  322. package/src/console/ui/traces/TracesA11yView.tsx +10 -29
  323. package/src/console/ui/traces/a11y.test.tsx +1 -2
  324. package/src/console/ui/traces/chain.test.ts +5 -19
  325. package/src/console/ui/traces/chain.ts +1 -3
  326. package/src/console/ui/traces/critical-path.test.ts +1 -3
  327. package/src/console/ui/traces/critical-path.ts +2 -6
  328. package/src/console/ui/traces/filter.test.ts +2 -6
  329. package/src/console/ui/traces/filter.ts +5 -13
  330. package/src/console/ui/traces/fold.test.ts +4 -12
  331. package/src/console/ui/traces/fold.ts +1 -3
  332. package/src/console/ui/traces/mini.ts +1 -3
  333. package/src/console/ui/traces/replay.test.ts +1 -3
  334. package/src/console/ui/traces/replay.ts +1 -3
  335. package/src/console/ui/traces/sampling.ts +1 -4
  336. package/src/console/ui/traces/search.ts +4 -17
  337. package/src/console/ui/traces/tier.ts +1 -3
  338. package/src/console/ui/vault/VaultA11yView.tsx +5 -17
  339. package/src/console/ui/vault/a11y.test.tsx +1 -2
  340. package/src/console/ui/vault/blast-radius.ts +1 -3
  341. package/src/console/ui/vault/confirmation.test.ts +1 -5
  342. package/src/console/ui/vault/confirmation.ts +1 -4
  343. package/src/console/ui/vault/dormant.test.ts +1 -4
  344. package/src/console/ui/vault/export-safe.test.ts +1 -5
  345. package/src/console/ui/vault/export-safe.ts +1 -4
  346. package/src/console/ui/vault/fixture.ts +3 -3
  347. package/src/console/ui/vault/group.ts +1 -2
  348. package/src/console/ui/vault/index.ts +2 -10
  349. package/src/console/ui/vault/search.ts +2 -6
  350. package/src/console/ui/vault/types.ts +1 -1
  351. package/src/console/xss.gate.test.ts +1 -3
  352. package/src/docker/compose.ts +112 -20
  353. package/src/docker/derive.ts +5 -19
  354. package/src/docker/docker.test.ts +15 -15
  355. package/src/docker/dockerfile.integration.test.ts +12 -21
  356. package/src/docker/helpers.ts +5 -4
  357. package/src/docker/index.ts +4 -11
  358. package/src/docker/pin.ts +1 -9
  359. package/src/docker/recipes/index.ts +5 -6
  360. package/src/docker/recipes/mailpit.ts +22 -0
  361. package/src/docker/recipes/postgres.ts +17 -6
  362. package/src/docker/recipes/redis.ts +6 -1
  363. package/src/docker/recipes/rustfs.ts +33 -0
  364. package/src/docker/stack-id.test.ts +33 -0
  365. package/src/docker/stack-id.ts +25 -13
  366. package/src/docker/stack.integration.test.ts +6 -21
  367. package/src/docker/types.ts +13 -4
  368. package/src/drivers/ai-anthropic.ts +5 -14
  369. package/src/drivers/ai-mock.ts +2 -5
  370. package/src/drivers/ai-openai-compatible.ts +4 -10
  371. package/src/drivers/ai-providers.test.ts +6 -13
  372. package/src/drivers/bun-native-completeness.test.ts +6 -15
  373. package/src/drivers/channel-console.ts +6 -7
  374. package/src/drivers/channel-fcm.ts +20 -30
  375. package/src/drivers/channel-resend.ts +1 -3
  376. package/src/drivers/channel-smtp.ts +2 -6
  377. package/src/drivers/channel-types.ts +2 -12
  378. package/src/drivers/channel-unifonic.ts +2 -6
  379. package/src/drivers/channel-wa-cloud.ts +2 -6
  380. package/src/drivers/channel-webpush.ts +21 -60
  381. package/src/drivers/conformance.test.ts +2 -10
  382. package/src/drivers/conformance.ts +8 -21
  383. package/src/drivers/fs.ts +2 -8
  384. package/src/drivers/index.ts +12 -56
  385. package/src/drivers/memory.ts +14 -41
  386. package/src/drivers/pgvector.ts +7 -11
  387. package/src/drivers/postgres.ts +7 -13
  388. package/src/drivers/redis.ts +13 -37
  389. package/src/drivers/s3.ts +5 -17
  390. package/src/drivers/signal-engine.ts +12 -49
  391. package/src/drivers/signal-memory.ts +2 -8
  392. package/src/drivers/signal-nats.ts +4 -9
  393. package/src/drivers/signal-postgres.ts +62 -129
  394. package/src/drivers/signal-redis.ts +7 -21
  395. package/src/drivers/signal-types.ts +1 -4
  396. package/src/drivers/sqlite.ts +3 -12
  397. package/src/drivers/types.ts +4 -23
  398. package/src/drivers/vault-env.ts +2 -6
  399. package/src/drivers/vault-infisical.ts +1 -5
  400. package/src/drivers/vault-managed.ts +1 -5
  401. package/src/drivers/vault-memory.ts +1 -5
  402. package/src/drivers/vault-openbao.ts +1 -5
  403. package/src/drivers/vault-sops.ts +10 -35
  404. package/src/drivers/vault-types.ts +1 -7
  405. package/src/elements/ai/declare.ts +4 -14
  406. package/src/elements/ai/eval.ts +2 -6
  407. package/src/elements/ai/pii.ts +1 -3
  408. package/src/elements/ai/runtime.ts +12 -50
  409. package/src/elements/ai/schema.ts +4 -15
  410. package/src/elements/ai.test.ts +13 -24
  411. package/src/elements/ai.ts +1 -5
  412. package/src/elements/channel/consent.ts +3 -12
  413. package/src/elements/channel/costs.ts +4 -15
  414. package/src/elements/channel/declare.ts +1 -4
  415. package/src/elements/channel/email-auth.ts +1 -4
  416. package/src/elements/channel/locale.ts +2 -10
  417. package/src/elements/channel/mask.ts +1 -3
  418. package/src/elements/channel/mime.ts +2 -12
  419. package/src/elements/channel/outcomes.test.ts +1 -5
  420. package/src/elements/channel/outcomes.ts +5 -15
  421. package/src/elements/channel/receipts.ts +2 -7
  422. package/src/elements/channel/runtime.ts +28 -74
  423. package/src/elements/channel/suppression.ts +8 -14
  424. package/src/elements/channel.test.ts +8 -31
  425. package/src/elements/channel.ts +3 -14
  426. package/src/elements/clock/actions.ts +6 -18
  427. package/src/elements/clock/declare.ts +1 -3
  428. package/src/elements/clock/dst.ts +1 -5
  429. package/src/elements/clock/durable.ts +4 -16
  430. package/src/elements/clock/health.ts +2 -7
  431. package/src/elements/clock/leader.ts +2 -9
  432. package/src/elements/clock/reconcile.ts +4 -15
  433. package/src/elements/clock/runtime.ts +2 -5
  434. package/src/elements/clock/schedule.ts +4 -20
  435. package/src/elements/clock.test.ts +2 -7
  436. package/src/elements/clock.ts +5 -23
  437. package/src/elements/gate/permissions.ts +1 -4
  438. package/src/elements/gate/runtime.ts +7 -28
  439. package/src/elements/gate.ts +1 -5
  440. package/src/elements/index.ts +9 -7
  441. package/src/elements/signal/declare.ts +2 -7
  442. package/src/elements/signal/reconcile.test.ts +1 -4
  443. package/src/elements/signal/runtime.ts +1 -3
  444. package/src/elements/signal.test.ts +3 -15
  445. package/src/elements/signal.ts +2 -8
  446. package/src/elements/store/cache.test.ts +46 -0
  447. package/src/elements/store/cache.ts +3 -11
  448. package/src/elements/store/classify.ts +5 -22
  449. package/src/elements/store/declare.ts +8 -17
  450. package/src/elements/store/domain-ddl.test.ts +86 -0
  451. package/src/elements/store/emit-drizzle.ts +363 -0
  452. package/src/elements/store/files-policy.test.ts +1 -5
  453. package/src/elements/store/files-policy.ts +4 -12
  454. package/src/elements/store/load-plugin-tables.ts +103 -0
  455. package/src/elements/store/missing-relation.test.ts +83 -0
  456. package/src/elements/store/missing-relation.ts +38 -0
  457. package/src/elements/store/replica.ts +1 -4
  458. package/src/elements/store/runtime.ts +25 -28
  459. package/src/elements/store/schema-decl.test.ts +227 -0
  460. package/src/elements/store/schema-decl.ts +516 -0
  461. package/src/elements/store/sql-condition.ts +11 -21
  462. package/src/elements/store/sql-session.test.ts +50 -0
  463. package/src/elements/store/sql-session.ts +60 -63
  464. package/src/elements/store/table.ts +35 -19
  465. package/src/elements/store.test.ts +17 -39
  466. package/src/elements/store.ts +37 -31
  467. package/src/elements/vault/chain.ts +34 -0
  468. package/src/elements/vault/declare.ts +22 -32
  469. package/src/elements/vault/fingerprint.ts +2 -7
  470. package/src/elements/vault/redact.ts +2 -6
  471. package/src/elements/vault/runtime.ts +18 -32
  472. package/src/elements/vault.test.ts +12 -28
  473. package/src/elements/vault.ts +8 -12
  474. package/src/index.ts +5 -2
  475. package/src/kernel/adopt-routes.ts +15 -29
  476. package/src/kernel/app.ts +34 -94
  477. package/src/kernel/auth-resolve.ts +2 -9
  478. package/src/kernel/boot-bind/ai.ts +1 -4
  479. package/src/kernel/boot-bind/channel.ts +2 -8
  480. package/src/kernel/boot-bind/clock.ts +2 -6
  481. package/src/kernel/boot-bind/gate.ts +2 -8
  482. package/src/kernel/boot-bind/runs.ts +1 -3
  483. package/src/kernel/boot-bind/signal.ts +3 -10
  484. package/src/kernel/boot-bind/store.test.ts +17 -17
  485. package/src/kernel/boot-bind/store.ts +44 -50
  486. package/src/kernel/boot-bind/vault.ts +2 -8
  487. package/src/kernel/boot.test.ts +4 -9
  488. package/src/kernel/boot.ts +29 -76
  489. package/src/kernel/budget.test.ts +1 -3
  490. package/src/kernel/capability.ts +3 -10
  491. package/src/kernel/dry-run.test.ts +1 -4
  492. package/src/kernel/dry-run.ts +3 -11
  493. package/src/kernel/effects.test.ts +1 -5
  494. package/src/kernel/effects.ts +4 -11
  495. package/src/kernel/errors.registry.test.ts +2 -8
  496. package/src/kernel/errors.ts +23 -32
  497. package/src/kernel/flow.test.ts +12 -25
  498. package/src/kernel/flow.ts +5 -25
  499. package/src/kernel/fx.test.ts +15 -44
  500. package/src/kernel/fx.ts +27 -79
  501. package/src/kernel/hook-timing.test.ts +3 -6
  502. package/src/kernel/hook-timing.ts +5 -14
  503. package/src/kernel/hooks.test.ts +10 -10
  504. package/src/kernel/hooks.ts +3 -12
  505. package/src/kernel/index.ts +4 -17
  506. package/src/kernel/journal.ts +7 -31
  507. package/src/kernel/on.ts +1 -6
  508. package/src/kernel/pipeline.test.ts +10 -19
  509. package/src/kernel/pipeline.ts +5 -17
  510. package/src/kernel/plug.ts +4 -11
  511. package/src/kernel/plugin/conflicts.test.ts +13 -25
  512. package/src/kernel/plugin/decorate.test.ts +8 -13
  513. package/src/kernel/plugin/scoping.test.ts +4 -11
  514. package/src/kernel/plugin.ts +48 -24
  515. package/src/kernel/registry.ts +80 -29
  516. package/src/kernel/router.test.ts +15 -13
  517. package/src/kernel/router.ts +9 -29
  518. package/src/kernel/routing-budget.test.ts +1 -3
  519. package/src/kernel/run-telemetry.ts +1 -3
  520. package/src/kernel/triggers.ts +4 -21
  521. package/src/manifest/diff.test.ts +26 -91
  522. package/src/manifest/diff.ts +95 -225
  523. package/src/manifest/index.ts +2 -9
  524. package/src/manifest/types.ts +29 -5
  525. package/src/manifest/undeclared.test.ts +4 -12
  526. package/src/manifest/undeclared.ts +1 -2
  527. package/src/manifest/validate.test.ts +2 -6
  528. package/src/manifest/validate.ts +4 -14
  529. package/src/mcp/authorization.ts +8 -27
  530. package/src/mcp/confirmation.ts +3 -10
  531. package/src/mcp/data.ts +2 -6
  532. package/src/mcp/docs-index.ts +4 -7
  533. package/src/mcp/docs-mcp.test.ts +3 -12
  534. package/src/mcp/docs-server.ts +7 -27
  535. package/src/mcp/docs-tools.ts +2 -6
  536. package/src/mcp/index.ts +1 -6
  537. package/src/mcp/injection.gate.test.ts +4 -18
  538. package/src/mcp/mcp.test.ts +18 -49
  539. package/src/mcp/protocol.ts +3 -10
  540. package/src/mcp/server.ts +11 -52
  541. package/src/mcp/session.ts +4 -14
  542. package/src/mcp/tools.ts +14 -50
  543. package/src/plugins/catalogue.test.ts +3 -7
  544. package/src/plugins/catalogue.ts +1 -3
  545. package/src/plugins/node-import-scan.ts +2 -5
  546. package/src/plugins/supply-chain.ts +5 -17
  547. package/src/release/exports.ts +3 -8
  548. package/src/release/measure.exports.test.ts +1 -3
  549. package/src/release/measure.ts +15 -43
  550. package/src/runs/bench.test.ts +1 -3
  551. package/src/runs/collect.ts +8 -25
  552. package/src/runs/drivers/clickhouse.ts +2 -9
  553. package/src/runs/drivers/files.ts +9 -31
  554. package/src/runs/drivers/memory.ts +5 -22
  555. package/src/runs/drivers/postgres.ts +8 -20
  556. package/src/runs/duckdb.ts +2 -8
  557. package/src/runs/index.ts +3 -14
  558. package/src/runs/outlier.ts +3 -10
  559. package/src/runs/parquet.ts +8 -26
  560. package/src/runs/privacy.ts +2 -8
  561. package/src/runs/runs.test.ts +3 -9
  562. package/src/runs/runtime.ts +7 -32
  563. package/src/runs/shred.ts +10 -29
  564. package/src/runs/types.ts +1 -4
  565. package/src/runtime/bun.ts +4 -15
  566. package/src/runtime/cold-start.bench.ts +1 -3
  567. package/src/runtime/dev-request-log.test.ts +1 -4
  568. package/src/runtime/dev-request-log.ts +1 -4
  569. package/src/runtime/index.ts +1 -6
  570. package/src/runtime/primitives.ts +5 -4
  571. package/src/runtime/security.ts +3 -13
  572. package/src/runtime/serve.test.ts +4 -7
  573. package/src/runtime/types.ts +1 -4
  574. package/src/runtime/web-standard.ts +3 -15
  575. package/src/term.test.ts +4 -6
  576. package/src/term.ts +49 -98
  577. package/src/test/create-test-app.test.ts +4 -14
  578. package/src/test/create-test-app.ts +13 -31
  579. package/src/test/provisions.integration.test.ts +3 -11
  580. package/src/upgrade/codemods.test.ts +25 -6
  581. package/src/upgrade/codemods.ts +116 -3
  582. package/src/validation/standard-schema.test.ts +2 -5
  583. package/src/validation/standard-schema.ts +13 -33
  584. package/src/console/ui/dist/assets/panel-vault-BbfWdox0.js +0 -1
package/src/kernel/app.ts CHANGED
@@ -32,10 +32,7 @@ import {
32
32
  type CreateAppAuthBindingOptions,
33
33
  } from "./auth-resolve.ts";
34
34
  import { runDurable } from "../elements/clock/durable.ts";
35
- import {
36
- isFlow,
37
- type AnyFlowDef,
38
- } from "./flow.ts";
35
+ import { isFlow, type AnyFlowDef } from "./flow.ts";
39
36
  import {
40
37
  createFxContext,
41
38
  resolveName,
@@ -80,16 +77,8 @@ import {
80
77
  type AccumulateDecorations,
81
78
  } from "./plug.ts";
82
79
  import type { PluginCapabilities, PluginDef } from "./plugin.ts";
83
- import {
84
- createPluginRegistry,
85
- type PluginRegistry,
86
- } from "./registry.ts";
87
- import {
88
- createRouter,
89
- type Router,
90
- type RouterPreset,
91
- type SmartRouter,
92
- } from "./router.ts";
80
+ import { createPluginRegistry, type PluginRegistry } from "./registry.ts";
81
+ import { createRouter, type Router, type RouterPreset, type SmartRouter } from "./router.ts";
93
82
  import type {
94
83
  CdcTrigger,
95
84
  EveryTrigger,
@@ -129,13 +118,13 @@ export interface OkeOptions {
129
118
  * subject key.
130
119
  */
131
120
  readonly archiveInputFields?: readonly string[];
132
- /** Active environment for {@link OkeApp.boot} (defaults to `dev`). */
121
+ /** Active environment for {@link OkeApp.boot} (defaults to `local`). */
133
122
  readonly env?: BootOptions["env"];
134
123
  /**
135
- * Local-server mode (`oke dev -s` / `OKE_STACK=1`) — force the `stack`
124
+ * Docker mode (`oke dev -d` / `OKE_DOCKER=1`) — force the `docker`
136
125
  * driver profile at boot.
137
126
  */
138
- readonly stack?: BootOptions["stack"];
127
+ readonly docker?: BootOptions["docker"];
139
128
  /** Optional `oke.config.ts` document consumed at boot. */
140
129
  readonly config?: BootOptions["config"];
141
130
  /** Pre-built element runtimes (skip construction at boot when present). */
@@ -209,9 +198,7 @@ export interface UnitHooks<D extends Record<string, unknown> = {}> {
209
198
  *
210
199
  * @param pluginDef - Plugin from {@link plugin}
211
200
  */
212
- plug<P extends PluginDef>(
213
- pluginDef: P,
214
- ): UnitHooks<AccumulateDecorations<D, P>>;
201
+ plug<P extends PluginDef>(pluginDef: P): UnitHooks<AccumulateDecorations<D, P>>;
215
202
  }
216
203
 
217
204
  /**
@@ -220,10 +207,7 @@ export interface UnitHooks<D extends Record<string, unknown> = {}> {
220
207
  * @typeParam D - Accumulated decoration types from app `.plug()`
221
208
  * @typeParam R - Accumulated client route map from `.adopt({ unit })`
222
209
  */
223
- export interface OkeApp<
224
- D extends Record<string, unknown> = {},
225
- R extends AppRouteMap = {},
226
- > {
210
+ export interface OkeApp<D extends Record<string, unknown> = {}, R extends AppRouteMap = {}> {
227
211
  /** App name. */
228
212
  readonly name: string;
229
213
  /** Whether AoT compilation is enabled. */
@@ -269,9 +253,7 @@ export interface OkeApp<
269
253
  *
270
254
  * @param pluginDef - Plugin from {@link plugin}
271
255
  */
272
- plug<P extends PluginDef>(
273
- pluginDef: P,
274
- ): OkeApp<AccumulateDecorations<D, P>, R>;
256
+ plug<P extends PluginDef>(pluginDef: P): OkeApp<AccumulateDecorations<D, P>, R>;
275
257
  /**
276
258
  * Captured plugin capabilities for the Manifest.
277
259
  */
@@ -357,10 +339,7 @@ export interface OkeApp<
357
339
  * @param signal - Signal name or handle
358
340
  * @param payload - Payload
359
341
  */
360
- dispatchSignal(
361
- signal: NamedRef,
362
- payload?: unknown,
363
- ): Promise<ExecuteResult[]>;
342
+ dispatchSignal(signal: NamedRef, payload?: unknown): Promise<ExecuteResult[]>;
364
343
  /**
365
344
  * Invoke all flows bound to an `every` interval.
366
345
  *
@@ -374,11 +353,7 @@ export interface OkeApp<
374
353
  * @param payload - before/after
375
354
  * @param column - Optional column filter
376
355
  */
377
- dispatchCdc(
378
- tableName: string,
379
- payload: CdcPayload,
380
- column?: string,
381
- ): Promise<ExecuteResult[]>;
356
+ dispatchCdc(tableName: string, payload: CdcPayload, column?: string): Promise<ExecuteResult[]>;
382
357
  /**
383
358
  * Call a flow by name/handle (same path as `fx.call`).
384
359
  *
@@ -408,10 +383,7 @@ export interface OkeApp<
408
383
  */
409
384
  export function oke(options: OkeOptions): OkeApp {
410
385
  const aot = options.aot !== false;
411
- const adopted: Binding[] = [
412
- ...listBindings(),
413
- ...(options.bindings ?? []),
414
- ];
386
+ const adopted: Binding[] = [...listBindings(), ...(options.bindings ?? [])];
415
387
  /** Retained for test harness / boot merges. */
416
388
  const $options = options;
417
389
 
@@ -459,7 +431,7 @@ export function oke(options: OkeOptions): OkeApp {
459
431
  // --- boot (vault → store → signal → clock → channel → AI → runs → caps) ---
460
432
  let bootResult: BootResult | undefined;
461
433
  let bootPromise: Promise<BootResult> | undefined;
462
- let bootEnv: BootOptions["env"] = options.env ?? "dev";
434
+ let bootEnv: BootOptions["env"] = options.env ?? "local";
463
435
  let authBinding: AppAuthBinding | undefined =
464
436
  options.auth !== undefined
465
437
  ? createAppAuthBinding({
@@ -490,10 +462,10 @@ export function oke(options: OkeOptions): OkeApp {
490
462
 
491
463
  async function doBoot(overrides?: Partial<BootOptions>): Promise<BootResult> {
492
464
  const { bootApplication } = await import("./boot.ts");
493
- bootEnv = overrides?.env ?? options.env ?? "dev";
465
+ bootEnv = overrides?.env ?? options.env ?? "local";
494
466
  const merged: BootOptions = {
495
467
  env: bootEnv,
496
- stack: overrides?.stack ?? options.stack,
468
+ docker: overrides?.docker ?? options.docker,
497
469
  config: overrides?.config ?? options.config,
498
470
  elements: overrides?.elements ?? options.elements,
499
471
  secrets: overrides?.secrets ?? options.secrets,
@@ -508,8 +480,7 @@ export function oke(options: OkeOptions): OkeApp {
508
480
  now: overrides?.now ?? options.fx?.now,
509
481
  instanceId: overrides?.instanceId,
510
482
  startScheduler: overrides?.startScheduler ?? options.startScheduler,
511
- schedulerIntervalMs:
512
- overrides?.schedulerIntervalMs ?? options.schedulerIntervalMs,
483
+ schedulerIntervalMs: overrides?.schedulerIntervalMs ?? options.schedulerIntervalMs,
513
484
  bindings: adopted,
514
485
  flows: [...flowsByName.values()],
515
486
  onCronFire: overrides?.onCronFire ?? handleCronFire,
@@ -542,9 +513,7 @@ export function oke(options: OkeOptions): OkeApp {
542
513
  return bootPromise;
543
514
  }
544
515
 
545
- function isRunsRuntimeLike(
546
- value: OkeOptions["runs"],
547
- ): value is RunsRuntime {
516
+ function isRunsRuntimeLike(value: OkeOptions["runs"]): value is RunsRuntime {
548
517
  return (
549
518
  typeof value === "object" &&
550
519
  value !== null &&
@@ -570,20 +539,11 @@ export function oke(options: OkeOptions): OkeApp {
570
539
 
571
540
  const booted = await ensureBoot();
572
541
 
573
- const unitBag =
574
- flowDef.unit !== undefined ? unitHooks.get(flowDef.unit) : undefined;
542
+ const unitBag = flowDef.unit !== undefined ? unitHooks.get(flowDef.unit) : undefined;
575
543
  // app (hooks + plugs) → unit (hooks + plugs) → flow (hooks + plugs)
576
544
  const composedHooks = mergeHooks(
577
- mergeHooks(
578
- appHooks,
579
- pluginRegistry.hooksAt("app", flowDef.unit, flowDef.name),
580
- undefined,
581
- ),
582
- mergeHooks(
583
- unitBag,
584
- pluginRegistry.hooksAt("unit", flowDef.unit, flowDef.name),
585
- undefined,
586
- ),
545
+ mergeHooks(appHooks, pluginRegistry.hooksAt("app", flowDef.unit, flowDef.name), undefined),
546
+ mergeHooks(unitBag, pluginRegistry.hooksAt("unit", flowDef.unit, flowDef.name), undefined),
587
547
  mergeHooks(
588
548
  flowDef.hooks as HookMap,
589
549
  pluginRegistry.hooksAt("flow", flowDef.unit, flowDef.name),
@@ -591,10 +551,7 @@ export function oke(options: OkeOptions): OkeApp {
591
551
  ),
592
552
  );
593
553
 
594
- const decorations = pluginRegistry.decorationsFor(
595
- flowDef.unit,
596
- flowDef.name,
597
- );
554
+ const decorations = pluginRegistry.decorationsFor(flowDef.unit, flowDef.name);
598
555
 
599
556
  const ctx: InvocationContext = {
600
557
  trigger,
@@ -631,10 +588,7 @@ export function oke(options: OkeOptions): OkeApp {
631
588
  // a real HTTP request in production mode.
632
589
  const testMode = bootEnv === "test";
633
590
  if (testMode) {
634
- applyPrincipal(
635
- principals,
636
- extras?.auth as ResolvedPrincipal | undefined,
637
- );
591
+ applyPrincipal(principals, extras?.auth as ResolvedPrincipal | undefined);
638
592
  applyPrincipal(principals, extras?.principal);
639
593
  if (extras?.operator) principals.operator.id = extras.operator.id;
640
594
  }
@@ -645,9 +599,7 @@ export function oke(options: OkeOptions): OkeApp {
645
599
  principals,
646
600
  telemetry,
647
601
  allowTestPrincipals: testMode,
648
- verifyBearer: binding
649
- ? (token) => verifyBearerToken(binding, token)
650
- : undefined,
602
+ verifyBearer: binding ? (token) => verifyBearerToken(binding, token) : undefined,
651
603
  });
652
604
 
653
605
  // Element hooks run first in the app-level onAuth/beforeHandle chain —
@@ -675,9 +627,7 @@ export function oke(options: OkeOptions): OkeApp {
675
627
  effects: flowDef.effects,
676
628
  runTelemetry: telemetry,
677
629
  now,
678
- ...(principals
679
- ? { auth: principals.auth as FxAuth, operator: principals.operator }
680
- : {}),
630
+ ...(principals ? { auth: principals.auth as FxAuth, operator: principals.operator } : {}),
681
631
  ...(capability ? { capability } : {}),
682
632
  ...(booted
683
633
  ? {
@@ -750,13 +700,9 @@ export function oke(options: OkeOptions): OkeApp {
750
700
  }
751
701
 
752
702
  const runsRuntime =
753
- booted?.runs ??
754
- (isRunsRuntimeLike(options.runs) ? options.runs : undefined);
703
+ booted?.runs ?? (isRunsRuntimeLike(options.runs) ? options.runs : undefined);
755
704
  if (runsRuntime) {
756
- const archiveCleartext = archiveFromInput(
757
- ctx.input,
758
- options.archiveInputFields,
759
- );
705
+ const archiveCleartext = archiveFromInput(ctx.input, options.archiveInputFields);
760
706
  await runsRuntime.record(
761
707
  {
762
708
  flow: flowDef,
@@ -936,8 +882,7 @@ export function oke(options: OkeOptions): OkeApp {
936
882
  if (parts.length >= 2) {
937
883
  const [unit, ...flowParts] = parts;
938
884
  const flowName = flowParts.join("/");
939
- const target =
940
- flowsByName.get(`${unit}.${flowName}`) ?? flowsByName.get(flowName);
885
+ const target = flowsByName.get(`${unit}.${flowName}`) ?? flowsByName.get(flowName);
941
886
  if (!target) {
942
887
  return respond(new Response("Not Found", { status: 404 }));
943
888
  }
@@ -986,12 +931,11 @@ export function oke(options: OkeOptions): OkeApp {
986
931
  input = undefined;
987
932
  }
988
933
 
989
- const result = await execute(
990
- binding.flow,
991
- input,
992
- binding.trigger,
993
- { request, params, validated },
994
- );
934
+ const result = await execute(binding.flow, input, binding.trigger, {
935
+ request,
936
+ params,
937
+ validated,
938
+ });
995
939
 
996
940
  return respond(encodeExecuteResult(result));
997
941
  },
@@ -1000,9 +944,7 @@ export function oke(options: OkeOptions): OkeApp {
1000
944
  const results: ExecuteResult[] = [];
1001
945
  for (const b of adopted) {
1002
946
  if (b.trigger.kind === "signal" && b.trigger.name === name) {
1003
- results.push(
1004
- await execute(b.flow, payload, b.trigger as SignalAsTrigger),
1005
- );
947
+ results.push(await execute(b.flow, payload, b.trigger as SignalAsTrigger));
1006
948
  }
1007
949
  }
1008
950
  return results;
@@ -1011,9 +953,7 @@ export function oke(options: OkeOptions): OkeApp {
1011
953
  const results: ExecuteResult[] = [];
1012
954
  for (const b of adopted) {
1013
955
  if (b.trigger.kind === "every" && b.trigger.interval === interval) {
1014
- results.push(
1015
- await execute(b.flow, undefined, b.trigger as EveryTrigger),
1016
- );
956
+ results.push(await execute(b.flow, undefined, b.trigger as EveryTrigger));
1017
957
  }
1018
958
  }
1019
959
  return results;
@@ -36,9 +36,7 @@ export interface CreateAppAuthBindingOptions {
36
36
  *
37
37
  * @param options - Secret + optional session store / clock
38
38
  */
39
- export function createAppAuthBinding(
40
- options: CreateAppAuthBindingOptions,
41
- ): AppAuthBinding {
39
+ export function createAppAuthBinding(options: CreateAppAuthBindingOptions): AppAuthBinding {
42
40
  return {
43
41
  secret: options.secret,
44
42
  sessions: options.sessions ?? createSessionStore(),
@@ -57,12 +55,7 @@ export async function verifyBearerToken(
57
55
  auth: AppAuthBinding,
58
56
  token: string,
59
57
  ): Promise<ResolvedPrincipal> {
60
- const claims = await verifyAccess(
61
- auth.sessions,
62
- auth.secret,
63
- token,
64
- auth.now,
65
- );
58
+ const claims = await verifyAccess(auth.sessions, auth.secret, token, auth.now);
66
59
  return claimsToPrincipal(claims);
67
60
  }
68
61
 
@@ -3,10 +3,7 @@
3
3
  */
4
4
 
5
5
  import { mockAiDriver } from "../../drivers/ai-mock.ts";
6
- import {
7
- createAiRuntime,
8
- type AiRuntime,
9
- } from "../../elements/ai.ts";
6
+ import { createAiRuntime, type AiRuntime } from "../../elements/ai.ts";
10
7
  import type { GateRuntime } from "../../elements/gate.ts";
11
8
  import type { BootOptions } from "../boot.ts";
12
9
 
@@ -3,10 +3,7 @@
3
3
  */
4
4
 
5
5
  import { openConsoleChannel } from "../../drivers/channel-console.ts";
6
- import {
7
- createChannelRuntime,
8
- type ChannelRuntime,
9
- } from "../../elements/channel.ts";
6
+ import { createChannelRuntime, type ChannelRuntime } from "../../elements/channel.ts";
10
7
  import type { BootOptions } from "../boot.ts";
11
8
 
12
9
  /**
@@ -15,10 +12,7 @@ import type { BootOptions } from "../boot.ts";
15
12
  * @param options - Boot options
16
13
  * @param now - Clock
17
14
  */
18
- export function bindChannel(
19
- options: BootOptions,
20
- now: () => number,
21
- ): ChannelRuntime {
15
+ export function bindChannel(options: BootOptions, now: () => number): ChannelRuntime {
22
16
  return createChannelRuntime({
23
17
  ...(options.channel ?? {}),
24
18
  drivers: options.channel?.drivers ?? [openConsoleChannel()],
@@ -9,10 +9,7 @@ import {
9
9
  type ClockDecl,
10
10
  type ClockRuntime,
11
11
  } from "../../elements/clock.ts";
12
- import {
13
- resolveDriverId,
14
- type ConfigEnv,
15
- } from "../../config/index.ts";
12
+ import { resolveDriverId, type ConfigEnv } from "../../config/index.ts";
16
13
  import type { BootOptions } from "../boot.ts";
17
14
 
18
15
  /** Result of binding a clock runtime. */
@@ -36,8 +33,7 @@ export async function bindClock(
36
33
  prebuilt?: ClockRuntime,
37
34
  ): Promise<BindClockResult> {
38
35
  const clockDriver =
39
- resolveDriverId(options.config?.drivers?.clock, env) ??
40
- (env === "test" ? "frozen" : "memory");
36
+ resolveDriverId(options.config?.drivers?.clock, env) ?? (env === "test" ? "frozen" : "memory");
41
37
  const clock =
42
38
  prebuilt ??
43
39
  (clockDriver === "frozen" || env === "test"
@@ -3,10 +3,7 @@
3
3
  */
4
4
 
5
5
  import { memoryDrivers } from "../../drivers/memory.ts";
6
- import {
7
- createGateRuntime,
8
- type GateRuntime,
9
- } from "../../elements/gate.ts";
6
+ import { createGateRuntime, type GateRuntime } from "../../elements/gate.ts";
10
7
  import type { BootOptions } from "../boot.ts";
11
8
 
12
9
  /**
@@ -15,10 +12,7 @@ import type { BootOptions } from "../boot.ts";
15
12
  * @param options - Boot options
16
13
  * @param now - Clock
17
14
  */
18
- export async function bindGate(
19
- options: BootOptions,
20
- now: () => number,
21
- ): Promise<GateRuntime> {
15
+ export async function bindGate(options: BootOptions, now: () => number): Promise<GateRuntime> {
22
16
  const kvNs = await memoryDrivers.kv.open({ name: "oke:gates" });
23
17
  return createGateRuntime({
24
18
  gates: options.gates ?? [],
@@ -14,9 +14,7 @@ import {
14
14
  *
15
15
  * @param options - Create options (when not already a runtime)
16
16
  */
17
- export async function bindRuns(
18
- options?: CreateRunsRuntimeOptions,
19
- ): Promise<RunsRuntime> {
17
+ export async function bindRuns(options?: CreateRunsRuntimeOptions): Promise<RunsRuntime> {
20
18
  const runs = createRunsRuntime({
21
19
  driver: options?.driver ?? memoryRunsDriver,
22
20
  ...(options ?? {}),
@@ -3,14 +3,8 @@
3
3
  */
4
4
 
5
5
  import { memorySignalDriver } from "../../drivers/signal-memory.ts";
6
- import {
7
- createSignalRuntime,
8
- type SignalRuntime,
9
- } from "../../elements/signal.ts";
10
- import {
11
- resolveDriverId,
12
- type ConfigEnv,
13
- } from "../../config/index.ts";
6
+ import { createSignalRuntime, type SignalRuntime } from "../../elements/signal.ts";
7
+ import { resolveDriverId, type ConfigEnv } from "../../config/index.ts";
14
8
  import type { BootOptions } from "../boot.ts";
15
9
 
16
10
  /**
@@ -25,8 +19,7 @@ export async function bindSignal(
25
19
  env: ConfigEnv,
26
20
  now: () => number,
27
21
  ): Promise<SignalRuntime> {
28
- const signalId =
29
- resolveDriverId(options.config?.drivers?.signal, env) ?? "memory";
22
+ const signalId = resolveDriverId(options.config?.drivers?.signal, env) ?? "memory";
30
23
  void signalId;
31
24
  const signal = createSignalRuntime({
32
25
  driver: memorySignalDriver,
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Store binder — stack profile (+ env overrides).
2
+ * Store binder — docker profile (+ env overrides).
3
3
  */
4
4
 
5
5
  import { afterEach, describe, expect, test } from "bun:test";
@@ -7,54 +7,54 @@ import { resolveKvDriverId, resolveSqlDriverId } from "./store.ts";
7
7
 
8
8
  describe("bindStore driver resolution", () => {
9
9
  const prev = {
10
- stack: process.env.OKE_STACK,
10
+ docker: process.env.OKE_DOCKER,
11
11
  sql: process.env.OKE_SQL_DRIVER,
12
12
  kv: process.env.OKE_KV_DRIVER,
13
13
  };
14
14
 
15
15
  afterEach(() => {
16
- if (prev.stack === undefined) delete process.env.OKE_STACK;
17
- else process.env.OKE_STACK = prev.stack;
16
+ if (prev.docker === undefined) delete process.env.OKE_DOCKER;
17
+ else process.env.OKE_DOCKER = prev.docker;
18
18
  if (prev.sql === undefined) delete process.env.OKE_SQL_DRIVER;
19
19
  else process.env.OKE_SQL_DRIVER = prev.sql;
20
20
  if (prev.kv === undefined) delete process.env.OKE_KV_DRIVER;
21
21
  else process.env.OKE_KV_DRIVER = prev.kv;
22
22
  });
23
23
 
24
- test("dev env keeps sqlite / memory from config", () => {
24
+ test("local env keeps sqlite / memory from config", () => {
25
25
  const options = {
26
26
  config: {
27
27
  drivers: {
28
28
  store: {
29
- sql: { dev: "sqlite", stack: "postgres", prod: "postgres" },
30
- kv: { dev: "memory", stack: "redis", prod: "redis" },
29
+ sql: { local: "sqlite", docker: "postgres", prod: "postgres" },
30
+ kv: { local: "memory", docker: "redis", prod: "redis" },
31
31
  },
32
32
  },
33
33
  },
34
34
  };
35
- expect(resolveSqlDriverId(options, "dev", false)).toBe("sqlite");
36
- expect(resolveKvDriverId(options, "dev", false)).toBe("memory");
35
+ expect(resolveSqlDriverId(options, "local", false)).toBe("sqlite");
36
+ expect(resolveKvDriverId(options, "local", false)).toBe("memory");
37
37
  });
38
38
 
39
- test("stack env uses stack profile (falls back to prod)", () => {
39
+ test("docker env uses docker profile (falls back to prod)", () => {
40
40
  const options = {
41
41
  config: {
42
42
  drivers: {
43
43
  store: {
44
- sql: { dev: "sqlite", stack: "postgres", prod: "postgres" },
45
- kv: { dev: "memory", prod: "redis" },
44
+ sql: { local: "sqlite", docker: "postgres", prod: "postgres" },
45
+ kv: { local: "memory", prod: "redis" },
46
46
  },
47
47
  },
48
48
  },
49
49
  };
50
- expect(resolveSqlDriverId(options, "stack", true)).toBe("postgres");
51
- expect(resolveKvDriverId(options, "stack", true)).toBe("redis");
50
+ expect(resolveSqlDriverId(options, "docker", true)).toBe("postgres");
51
+ expect(resolveKvDriverId(options, "docker", true)).toBe("redis");
52
52
  });
53
53
 
54
- test("stack mode honours OKE_*_DRIVER overrides", () => {
54
+ test("docker mode honours OKE_*_DRIVER overrides", () => {
55
55
  process.env.OKE_SQL_DRIVER = "postgres";
56
56
  process.env.OKE_KV_DRIVER = "redis";
57
- expect(resolveSqlDriverId({}, "stack", true)).toBe("postgres");
58
- expect(resolveKvDriverId({}, "stack", true)).toBe("redis");
57
+ expect(resolveSqlDriverId({}, "docker", true)).toBe("postgres");
58
+ expect(resolveKvDriverId({}, "docker", true)).toBe("redis");
59
59
  });
60
60
  });