okengine 0.2.5 → 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 +46 -38
  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
@@ -2,48 +2,39 @@
2
2
  * Lazy store binder — loaded only when Store is declared.
3
3
  */
4
4
 
5
- import {
6
- resolveDriverId,
7
- type ConfigEnv,
8
- } from "../../config/index.ts";
5
+ import { resolveDomainDdlMode, resolveDriverId, type ConfigEnv } from "../../config/index.ts";
9
6
  import { memoryDrivers } from "../../drivers/memory.ts";
10
7
  import { postgresDriver } from "../../drivers/postgres.ts";
11
8
  import { redisDriver } from "../../drivers/redis.ts";
12
9
  import { sqliteDriver } from "../../drivers/sqlite.ts";
13
10
  import type { KvDriver, SqlDriver } from "../../drivers/types.ts";
14
- import {
15
- createStoreRuntime,
16
- type StoreRuntime,
17
- } from "../../elements/store.ts";
11
+ import { createStoreRuntime, type StoreRuntime } from "../../elements/store.ts";
18
12
  import type { StoreDecl } from "../../elements/store/declare.ts";
19
13
  import type { BootOptions } from "../boot.ts"; // type-only — no cycle at runtime
20
14
 
21
15
  /**
22
16
  * Construct a Store runtime and register facet declarations.
23
17
  *
24
- * In stack mode (`env === "stack"` / `OKE_STACK=1`), SQL/KV resolve from the
25
- * `stack` driver map (falling back to `prod`) and URLs from `.env.stack`.
18
+ * In docker mode (`env === "docker"` / `OKE_DOCKER=1`), SQL/KV resolve from the
19
+ * `docker` driver map (falling back to `prod`) and URLs from `docker/.env.docker`.
26
20
  *
27
21
  * @param options - Boot options
28
22
  * @param env - Active environment
29
23
  * @param now - Clock
30
- * @param stack - Prefer compose URLs when opening postgres/redis
24
+ * @param docker - Prefer compose URLs when opening postgres/redis
31
25
  */
32
26
  export function bindStore(
33
27
  options: BootOptions,
34
28
  env: ConfigEnv,
35
29
  now: () => number,
36
- stack = false,
30
+ docker = false,
37
31
  ): StoreRuntime {
38
- const sqlId = resolveSqlDriverId(options, env, stack);
39
- const kvId = resolveKvDriverId(options, env, stack);
40
- const sqlUrl = sqlUrlFor(sqlId, stack);
41
- const kvUrl = kvUrlFor(kvId, stack);
32
+ const sqlId = resolveSqlDriverId(options, env, docker);
33
+ const kvId = resolveKvDriverId(options, env, docker);
34
+ const sqlUrl = sqlUrlFor(sqlId, docker);
35
+ const kvUrl = kvUrlFor(kvId, docker);
42
36
 
43
- const sqlBindings: Record<
44
- string,
45
- { name: string; primary: { url: string } }
46
- > = {};
37
+ const sqlBindings: Record<string, { name: string; primary: { url: string } }> = {};
47
38
  const kvBindings: Record<string, { url?: string }> = {};
48
39
 
49
40
  for (const decl of options.stores ?? []) {
@@ -57,6 +48,9 @@ export function bindStore(
57
48
  }
58
49
  }
59
50
 
51
+ const autoPush = resolveAutoPush(options);
52
+ const domainDdl = resolveDomainDdlMode(env, autoPush);
53
+
60
54
  const store = createStoreRuntime({
61
55
  drivers: {
62
56
  sql: sqlDriverFor(sqlId),
@@ -67,6 +61,7 @@ export function bindStore(
67
61
  sql: sqlBindings,
68
62
  kv: kvBindings,
69
63
  now,
64
+ domainDdl,
70
65
  });
71
66
  for (const decl of options.stores ?? []) {
72
67
  store.register?.(decl);
@@ -74,38 +69,42 @@ export function bindStore(
74
69
  return store;
75
70
  }
76
71
 
72
+ /**
73
+ * Effective `db.autoPush` — config default true; `OKE_DB_AUTO_PUSH=0` opts out.
74
+ *
75
+ * @param options - Boot options
76
+ */
77
+ function resolveAutoPush(options: BootOptions): boolean {
78
+ const fromEnv = process.env.OKE_DB_AUTO_PUSH?.trim();
79
+ if (fromEnv === "0" || fromEnv === "false") return false;
80
+ if (fromEnv === "1" || fromEnv === "true") return true;
81
+ return options.config?.db?.autoPush !== false;
82
+ }
83
+
77
84
  /**
78
85
  * @param options - Boot options
79
86
  * @param env - Active env
80
- * @param stack - Stack mode
87
+ * @param docker - Docker mode
81
88
  */
82
- export function resolveSqlDriverId(
83
- options: BootOptions,
84
- env: ConfigEnv,
85
- stack: boolean,
86
- ): string {
89
+ export function resolveSqlDriverId(options: BootOptions, env: ConfigEnv, docker: boolean): string {
87
90
  const fromEnv = process.env.OKE_SQL_DRIVER?.trim();
88
- if (stack && fromEnv) return fromEnv;
91
+ if (docker && fromEnv) return fromEnv;
89
92
  const resolved = resolveDriverId(options.config?.drivers?.store?.sql, env);
90
93
  if (resolved) return resolved;
91
- return stack ? "postgres" : "memory";
94
+ return docker ? "postgres" : "memory";
92
95
  }
93
96
 
94
97
  /**
95
98
  * @param options - Boot options
96
99
  * @param env - Active env
97
- * @param stack - Stack mode
100
+ * @param docker - Docker mode
98
101
  */
99
- export function resolveKvDriverId(
100
- options: BootOptions,
101
- env: ConfigEnv,
102
- stack: boolean,
103
- ): string {
102
+ export function resolveKvDriverId(options: BootOptions, env: ConfigEnv, docker: boolean): string {
104
103
  const fromEnv = process.env.OKE_KV_DRIVER?.trim();
105
- if (stack && fromEnv) return fromEnv;
104
+ if (docker && fromEnv) return fromEnv;
106
105
  const resolved = resolveDriverId(options.config?.drivers?.store?.kv, env);
107
106
  if (resolved) return resolved;
108
- return stack ? "redis" : "memory";
107
+ return docker ? "redis" : "memory";
109
108
  }
110
109
 
111
110
  function sqlDriverFor(id: string): SqlDriver {
@@ -132,14 +131,13 @@ function kvDriverFor(id: string): KvDriver {
132
131
  }
133
132
  }
134
133
 
135
- function sqlUrlFor(sqlId: string, stack: boolean): string {
134
+ function sqlUrlFor(sqlId: string, docker: boolean): string {
136
135
  if (sqlId === "postgres") {
137
- const url =
138
- process.env.DATABASE_URL ?? process.env.OKE_STORE_SQL_URL ?? undefined;
136
+ const url = process.env.DATABASE_URL ?? process.env.OKE_STORE_SQL_URL ?? undefined;
139
137
  if (!url) {
140
138
  throw new Error(
141
- stack
142
- ? "oke boot: postgres driver needs DATABASE_URL (did `oke dev -s` write .env.stack?)"
139
+ docker
140
+ ? "oke boot: postgres driver needs DATABASE_URL (did `oke dev -d` write docker/.env.docker?)"
143
141
  : "oke boot: postgres driver needs DATABASE_URL",
144
142
  );
145
143
  }
@@ -151,27 +149,23 @@ function sqlUrlFor(sqlId: string, stack: boolean): string {
151
149
  return ":memory:";
152
150
  }
153
151
 
154
- function kvUrlFor(kvId: string, stack: boolean): string | undefined {
152
+ function kvUrlFor(kvId: string, docker: boolean): string | undefined {
155
153
  if (kvId !== "redis") return undefined;
156
154
  const url = process.env.REDIS_URL ?? process.env.OKE_STORE_KV_URL ?? undefined;
157
155
  if (!url) {
158
156
  throw new Error(
159
- stack
160
- ? "oke boot: redis driver needs REDIS_URL (did `oke dev -s` write .env.stack?)"
157
+ docker
158
+ ? "oke boot: redis driver needs REDIS_URL (did `oke dev -d` write docker/.env.docker?)"
161
159
  : "oke boot: redis driver needs REDIS_URL",
162
160
  );
163
161
  }
164
162
  return url;
165
163
  }
166
164
 
167
- function isSqlDecl(
168
- decl: StoreDecl,
169
- ): decl is Extract<StoreDecl, { facet: "sql" }> {
165
+ function isSqlDecl(decl: StoreDecl): decl is Extract<StoreDecl, { facet: "sql" }> {
170
166
  return decl.facet === "sql";
171
167
  }
172
168
 
173
- function isKvDecl(
174
- decl: StoreDecl,
175
- ): decl is Extract<StoreDecl, { facet: "kv" }> {
169
+ function isKvDecl(decl: StoreDecl): decl is Extract<StoreDecl, { facet: "kv" }> {
176
170
  return decl.facet === "kv";
177
171
  }
@@ -3,10 +3,7 @@
3
3
  */
4
4
 
5
5
  import { memoryVaultDriver } from "../../drivers/vault-memory.ts";
6
- import {
7
- createVaultRuntime,
8
- type VaultRuntime,
9
- } from "../../elements/vault.ts";
6
+ import { createVaultRuntime, type VaultRuntime } from "../../elements/vault.ts";
10
7
  import type { ConfigEnv } from "../../config/index.ts";
11
8
  import type { BootOptions } from "../boot.ts";
12
9
 
@@ -16,10 +13,7 @@ import type { BootOptions } from "../boot.ts";
16
13
  * @param options - Boot options
17
14
  * @param env - Active environment
18
15
  */
19
- export async function bindVault(
20
- options: BootOptions,
21
- env: ConfigEnv,
22
- ): Promise<VaultRuntime> {
16
+ export async function bindVault(options: BootOptions, env: ConfigEnv): Promise<VaultRuntime> {
23
17
  const vaultSecrets = options.vault?.secrets ?? options.secrets ?? [];
24
18
  const vault = createVaultRuntime({
25
19
  secrets: vaultSecrets,
@@ -38,10 +38,7 @@ describe("boot — vault gaps", () => {
38
38
  } catch (err) {
39
39
  expect(err).toBeInstanceOf(VaultBootError);
40
40
  const boot = err as VaultBootError;
41
- expect(boot.gaps.map((g) => g.name).sort()).toEqual([
42
- "DATABASE_URL",
43
- "STRIPE_KEY",
44
- ]);
41
+ expect(boot.gaps.map((g) => g.name).sort()).toEqual(["DATABASE_URL", "STRIPE_KEY"]);
45
42
  expect(boot.message).toContain("STRIPE_KEY");
46
43
  expect(boot.message).toContain("DATABASE_URL");
47
44
  }
@@ -206,9 +203,7 @@ describe("boot — HTTP gate wiring lives behind boot", () => {
206
203
  }),
207
204
  );
208
205
  const app = oke({ name: "legacy" });
209
- const res = await app.fetch(
210
- new Request("http://localhost/ping", { method: "GET" }),
211
- );
206
+ const res = await app.fetch(new Request("http://localhost/ping", { method: "GET" }));
212
207
  expect(res.status).toBe(200);
213
208
  });
214
209
  });
@@ -234,10 +229,10 @@ describe("boot — cron autostart via real timer loop", () => {
234
229
  }),
235
230
  );
236
231
 
237
- // env: "dev" → startScheduler defaults ON. No createTestApp / advance.
232
+ // env: "local" → startScheduler defaults ON. No createTestApp / advance.
238
233
  const app = oke({
239
234
  name: "cron-autostart",
240
- env: "dev",
235
+ env: "local",
241
236
  schedulerIntervalMs: 1000,
242
237
  });
243
238
  await app.boot();
@@ -22,43 +22,19 @@
22
22
  */
23
23
 
24
24
  import type { ConfigEnv, OkeConfig } from "../config/index.ts";
25
- import type {
26
- AiRuntime,
27
- CreateAiRuntimeOptions,
28
- } from "../elements/ai.ts";
29
- import type {
30
- ChannelRuntime,
31
- CreateChannelRuntimeOptions,
32
- } from "../elements/channel.ts";
33
- import type {
34
- ClockDecl,
35
- ClockRuntime,
36
- } from "../elements/clock.ts";
37
- import type {
38
- GateDecl,
39
- GateRuntime,
40
- } from "../elements/gate.ts";
41
- import type {
42
- SignalDecl,
43
- SignalRuntime,
44
- } from "../elements/signal.ts";
45
- import type {
46
- StoreDecl,
47
- StoreRuntime,
48
- } from "../elements/store.ts";
25
+ import type { AiRuntime, CreateAiRuntimeOptions } from "../elements/ai.ts";
26
+ import type { ChannelRuntime, CreateChannelRuntimeOptions } from "../elements/channel.ts";
27
+ import type { ClockDecl, ClockRuntime } from "../elements/clock.ts";
28
+ import type { GateDecl, GateRuntime } from "../elements/gate.ts";
29
+ import type { SignalDecl, SignalRuntime } from "../elements/signal.ts";
30
+ import type { StoreDecl, StoreRuntime } from "../elements/store.ts";
49
31
  import type {
50
32
  CreateVaultRuntimeOptions,
51
33
  VaultRuntime,
52
34
  VaultSecretDecl,
53
35
  } from "../elements/vault.ts";
54
- import type {
55
- CreateRunsRuntimeOptions,
56
- RunsRuntime,
57
- } from "../runs/index.ts";
58
- import {
59
- createCapabilityToken,
60
- type CapabilityToken,
61
- } from "./capability.ts";
36
+ import type { CreateRunsRuntimeOptions, RunsRuntime } from "../runs/index.ts";
37
+ import { createCapabilityToken, type CapabilityToken } from "./capability.ts";
62
38
  import type { AnyFlowDef } from "./flow.ts";
63
39
  import type { Binding } from "./on.ts";
64
40
 
@@ -77,16 +53,16 @@ export interface ElementRuntimes {
77
53
  /** Declarations + options consumed by {@link bootApplication}. */
78
54
  export interface BootOptions {
79
55
  /**
80
- * Active environment (defaults to `dev`, or `stack` when
81
- * {@link stack} / `OKE_STACK=1`).
56
+ * Active environment (defaults to `local`, or `docker` when
57
+ * {@link docker} / `OKE_DOCKER=1`).
82
58
  */
83
59
  readonly env?: ConfigEnv;
84
60
  /**
85
- * Local-server mode (`oke dev -s` / `OKE_STACK=1`): force driver maps to the
86
- * `stack` profile and prefer compose URLs (`.env.stack`).
87
- * When unset, derived from `process.env.OKE_STACK`.
61
+ * Docker mode (`oke dev -d` / `OKE_DOCKER=1`): force driver maps to the
62
+ * `docker` profile and prefer compose URLs (`docker/.env.docker`).
63
+ * When unset, derived from `process.env.OKE_DOCKER`.
88
64
  */
89
- readonly stack?: boolean;
65
+ readonly docker?: boolean;
90
66
  /** Optional `oke.config.ts` document. */
91
67
  readonly config?: OkeConfig;
92
68
  /** Pre-built runtimes (skip construction when present). */
@@ -127,10 +103,7 @@ export interface BootOptions {
127
103
  * @param signal - Signal name
128
104
  * @param payload - Payload
129
105
  */
130
- readonly onSignal?: (
131
- signal: string,
132
- payload: unknown,
133
- ) => void | Promise<void>;
106
+ readonly onSignal?: (signal: string, payload: unknown) => void | Promise<void>;
134
107
  /** Injectable clock for test / frozen harnesses. */
135
108
  readonly now?: () => number;
136
109
  /** Instance id for leader election. */
@@ -185,8 +158,7 @@ export interface ElementNeeds {
185
158
  export function resolveElementNeeds(options: BootOptions): ElementNeeds {
186
159
  const pre = options.elements ?? {};
187
160
  let vault =
188
- pre.vault !== undefined ||
189
- (options.vault?.secrets ?? options.secrets ?? []).length > 0;
161
+ pre.vault !== undefined || (options.vault?.secrets ?? options.secrets ?? []).length > 0;
190
162
  let store = pre.store !== undefined || (options.stores?.length ?? 0) > 0;
191
163
  let signal = pre.signal !== undefined || (options.signals?.length ?? 0) > 0;
192
164
  let clock = pre.clock !== undefined || (options.clocks?.length ?? 0) > 0;
@@ -224,10 +196,7 @@ export function resolveElementNeeds(options: BootOptions): ElementNeeds {
224
196
 
225
197
  // AI agents share the gate runtime for tool checks.
226
198
  if (ai) gate = true;
227
- if (
228
- options.onSignal &&
229
- (options.bindings ?? []).some((b) => b.trigger.kind === "signal")
230
- ) {
199
+ if (options.onSignal && (options.bindings ?? []).some((b) => b.trigger.kind === "signal")) {
231
200
  signal = true;
232
201
  }
233
202
 
@@ -251,15 +220,12 @@ async function loadBind<T>(name: string): Promise<T> {
251
220
  *
252
221
  * @param options - Declarations, config, pre-built runtimes
253
222
  */
254
- export async function bootApplication(
255
- input: BootOptions = {},
256
- ): Promise<BootResult> {
257
- const stack =
258
- input.stack === true ||
259
- (input.stack !== false && process.env.OKE_STACK === "1");
260
- // `-s` always selects the `stack` driver profile — not a mix of test/dev +
223
+ export async function bootApplication(input: BootOptions = {}): Promise<BootResult> {
224
+ const docker =
225
+ input.docker === true || (input.docker !== false && process.env.OKE_DOCKER === "1");
226
+ // `-d` always selects the `docker` driver profile — not a mix of test/local +
261
227
  // prod store overrides (templates often pin `env: "test"` for harnesses).
262
- const env: ConfigEnv = stack ? "stack" : (input.env ?? "dev");
228
+ const env: ConfigEnv = docker ? "docker" : (input.env ?? "local");
263
229
  let config = input.config;
264
230
  if (config === undefined) {
265
231
  try {
@@ -269,7 +235,7 @@ export async function bootApplication(
269
235
  config = undefined;
270
236
  }
271
237
  }
272
- const options: BootOptions = { ...input, config, env, stack };
238
+ const options: BootOptions = { ...input, config, env, docker };
273
239
  const pre = options.elements ?? {};
274
240
  const now = options.now ?? (() => Date.now());
275
241
  const needs = resolveElementNeeds(options);
@@ -278,9 +244,7 @@ export async function bootApplication(
278
244
  let vault = pre.vault;
279
245
  if (needs.vault) {
280
246
  if (!vault) {
281
- const { bindVault } = await loadBind<
282
- typeof import("./boot-bind/vault.ts")
283
- >("vault");
247
+ const { bindVault } = await loadBind<typeof import("./boot-bind/vault.ts")>("vault");
284
248
  vault = await bindVault(options, env);
285
249
  } else if (!vault.booted) {
286
250
  await vault.boot();
@@ -347,11 +311,7 @@ export async function bootApplication(
347
311
  }),
348
312
  );
349
313
  }
350
- if (
351
- needs.runs &&
352
- !pre.runs &&
353
- !(options.runs && isRunsRuntime(options.runs))
354
- ) {
314
+ if (needs.runs && !pre.runs && !(options.runs && isRunsRuntime(options.runs))) {
355
315
  binderLoads.push(
356
316
  loadBind<RunsBind>("runs").then((m) => {
357
317
  runsBind = m;
@@ -364,7 +324,7 @@ export async function bootApplication(
364
324
  let store = pre.store;
365
325
  if (needs.store) {
366
326
  if (!store) {
367
- store = storeBind!.bindStore(options, env, now, stack);
327
+ store = storeBind!.bindStore(options, env, now, docker);
368
328
  } else {
369
329
  for (const decl of options.stores ?? []) {
370
330
  store.register?.(decl);
@@ -431,10 +391,7 @@ export async function bootApplication(
431
391
  runs = options.runs;
432
392
  if (!runs.store) await runs.open();
433
393
  } else {
434
- const runsOpts =
435
- options.runs && !isRunsRuntime(options.runs)
436
- ? options.runs
437
- : undefined;
394
+ const runsOpts = options.runs && !isRunsRuntime(options.runs) ? options.runs : undefined;
438
395
  runs = await runsBind!.bindRuns(runsOpts);
439
396
  }
440
397
  } else if (!runs.store) {
@@ -479,9 +436,7 @@ export async function bootApplication(
479
436
  *
480
437
  * @param flows - Adopted flows
481
438
  */
482
- export function mintCapabilities(
483
- flows: readonly AnyFlowDef[],
484
- ): Map<string, CapabilityToken> {
439
+ export function mintCapabilities(flows: readonly AnyFlowDef[]): Map<string, CapabilityToken> {
485
440
  const map = new Map<string, CapabilityToken>();
486
441
  for (const f of flows) {
487
442
  map.set(f.name, createCapabilityToken(f.name, f.effects));
@@ -489,9 +444,7 @@ export function mintCapabilities(
489
444
  return map;
490
445
  }
491
446
 
492
- function isRunsRuntime(
493
- value: RunsRuntime | CreateRunsRuntimeOptions,
494
- ): value is RunsRuntime {
447
+ function isRunsRuntime(value: RunsRuntime | CreateRunsRuntimeOptions): value is RunsRuntime {
495
448
  return (
496
449
  typeof value === "object" &&
497
450
  value !== null &&
@@ -10,9 +10,7 @@ import { measureKernelEdgeGzipBytes } from "../release/measure.ts";
10
10
  describe("kernel edge bundle budget", () => {
11
11
  test(`edge profile < ${KERNEL_EDGE_BUDGET_BYTES} bytes gzipped`, async () => {
12
12
  const size = await measureKernelEdgeGzipBytes();
13
- console.log(
14
- `kernel edge gzip=${size} budget=${KERNEL_EDGE_BUDGET_BYTES}`,
15
- );
13
+ console.log(`kernel edge gzip=${size} budget=${KERNEL_EDGE_BUDGET_BYTES}`);
16
14
  expect(size).toBeGreaterThan(0);
17
15
  expect(size).toBeLessThan(KERNEL_EDGE_BUDGET_BYTES);
18
16
  });
@@ -11,9 +11,7 @@ import type { EffectKind } from "./effects.ts";
11
11
  import { OKE_ERRORS, throwOke } from "./errors.ts";
12
12
 
13
13
  /** Maps effect kind → the undeclared-access registry key. */
14
- const UNDECLARED_KEY: Readonly<
15
- Record<EffectKind, keyof typeof OKE_ERRORS>
16
- > = {
14
+ const UNDECLARED_KEY: Readonly<Record<EffectKind, keyof typeof OKE_ERRORS>> = {
17
15
  read: "UNDECLARED_READ",
18
16
  write: "UNDECLARED_WRITE",
19
17
  emit: "UNDECLARED_EMIT",
@@ -24,9 +22,7 @@ const UNDECLARED_KEY: Readonly<
24
22
  };
25
23
 
26
24
  /** Maps effect kind → the corresponding `Effects` field. */
27
- const EFFECTS_FIELD: Readonly<
28
- Record<EffectKind, keyof Effects>
29
- > = {
25
+ const EFFECTS_FIELD: Readonly<Record<EffectKind, keyof Effects>> = {
30
26
  read: "reads",
31
27
  write: "writes",
32
28
  emit: "emits",
@@ -72,10 +68,7 @@ export interface CapabilityToken {
72
68
  * @param flow - Flow id (used in error messages)
73
69
  * @param declared - Declared effect surface, or `undefined` for open
74
70
  */
75
- export function createCapabilityToken(
76
- flow: string,
77
- declared?: Effects,
78
- ): CapabilityToken {
71
+ export function createCapabilityToken(flow: string, declared?: Effects): CapabilityToken {
79
72
  const open = declared === undefined;
80
73
  const effects = declared ?? {};
81
74
  const sets: Record<EffectKind, ReadonlySet<string>> = {
@@ -1,9 +1,6 @@
1
1
  import { describe, expect, test } from "bun:test";
2
2
  import type { ChannelRuntime } from "../elements/channel/runtime.ts";
3
- import {
4
- isDryRun,
5
- withDryRun,
6
- } from "./dry-run.ts";
3
+ import { isDryRun, withDryRun } from "./dry-run.ts";
7
4
  import { createFx, type FxStubStoreHandle } from "./fx.ts";
8
5
 
9
6
  describe("fx dry-run stubbing", () => {
@@ -94,10 +94,7 @@ export function setDryRunMessageId(messageId: string): void {
94
94
  * @param kind - Irreversible kind
95
95
  * @param resource - Template / prompt name
96
96
  */
97
- export function recordWouldHaveFired(
98
- kind: "send" | "ask",
99
- resource: string,
100
- ): void {
97
+ export function recordWouldHaveFired(kind: "send" | "ask", resource: string): void {
101
98
  const ctx = storage.getStore();
102
99
  if (!ctx) return;
103
100
  ctx.wouldHaveFired.push({
@@ -115,19 +112,14 @@ export function recordWouldHaveFired(
115
112
  * @param ref - Store resource ref (`sql:inventory`, …)
116
113
  * @param table - Live in-memory table Map
117
114
  */
118
- export function touchDryRunStore(
119
- ref: string,
120
- table: Map<string, unknown>,
121
- ): void {
115
+ export function touchDryRunStore(ref: string, table: Map<string, unknown>): void {
122
116
  const ctx = storage.getStore();
123
117
  if (!ctx) return;
124
118
  if (ctx.storeSnapshots.has(ref)) return;
125
119
  ctx.storeRefs.set(ref, table);
126
120
  ctx.storeSnapshots.set(
127
121
  ref,
128
- new Map(
129
- [...table.entries()].map(([k, v]) => [k, structuredClone(v)]),
130
- ),
122
+ new Map([...table.entries()].map(([k, v]) => [k, structuredClone(v)])),
131
123
  );
132
124
  }
133
125
 
@@ -46,11 +46,7 @@ describe("effects — ledger", () => {
46
46
  });
47
47
 
48
48
  expect(ledger.entries).toHaveLength(3);
49
- expect(ledger.entries.map((e) => e.kind)).toEqual([
50
- "read",
51
- "write",
52
- "emit",
53
- ]);
49
+ expect(ledger.entries.map((e) => e.kind)).toEqual(["read", "write", "emit"]);
54
50
  expect(ledger.entries[0]).toMatchObject({
55
51
  kind: "read",
56
52
  resource: "sql:bookings",
@@ -6,14 +6,7 @@
6
6
  */
7
7
 
8
8
  /** The seven load-bearing effect kinds (manifest `effects` keys, singular). */
9
- export type EffectKind =
10
- | "read"
11
- | "write"
12
- | "emit"
13
- | "send"
14
- | "ask"
15
- | "secret"
16
- | "call";
9
+ export type EffectKind = "read" | "write" | "emit" | "send" | "ask" | "secret" | "call";
17
10
 
18
11
  /**
19
12
  * Reversibility tier — console §9.1 ranking, applied to all seven kinds.
@@ -135,6 +128,6 @@ export async function recordEffect<T>(
135
128
  export const EFFECT_KIND_TIERS: ReadonlyArray<{
136
129
  kind: EffectKind;
137
130
  reversibility: ReversibilityTier;
138
- }> = (
139
- Object.entries(TIER_BY_KIND) as Array<[EffectKind, ReversibilityTier]>
140
- ).map(([kind, reversibility]) => ({ kind, reversibility }));
131
+ }> = (Object.entries(TIER_BY_KIND) as Array<[EffectKind, ReversibilityTier]>).map(
132
+ ([kind, reversibility]) => ({ kind, reversibility }),
133
+ );
@@ -6,11 +6,7 @@
6
6
  */
7
7
 
8
8
  import { describe, expect, test } from "bun:test";
9
- import {
10
- OKE_ERRORS,
11
- OkeError,
12
- type OkeErrorDefinition,
13
- } from "./errors.ts";
9
+ import { OKE_ERRORS, OkeError, type OkeErrorDefinition } from "./errors.ts";
14
10
 
15
11
  describe("OKE error-code registry", () => {
16
12
  test("every code is unique", () => {
@@ -30,9 +26,7 @@ describe("OKE error-code registry", () => {
30
26
  test("OkeError docsUrl matches docs origin /e/{code}", () => {
31
27
  for (const def of Object.values(OKE_ERRORS) as OkeErrorDefinition[]) {
32
28
  const err = new OkeError(def);
33
- expect(err.docsUrl).toBe(
34
- `https://okengine.vercel.app/e/${def.code}`,
35
- );
29
+ expect(err.docsUrl).toBe(`https://okengine.vercel.app/e/${def.code}`);
36
30
  expect(err.message).toContain(err.docsUrl);
37
31
  expect(err.message).toContain(`OKE${def.code}`);
38
32
  expect(err.message).toContain("→");