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
@@ -41,10 +41,7 @@ export interface VaultSecretDecl {
41
41
  * @param name - Secret name
42
42
  * @param options - Description / rotate / schema / dev fallback
43
43
  */
44
- function declareSecret(
45
- name: string,
46
- options: VaultSecretOptions = {},
47
- ): VaultSecretDecl {
44
+ function declareSecret(name: string, options: VaultSecretOptions = {}): VaultSecretDecl {
48
45
  if (!name) {
49
46
  throw new TypeError("vault.secret: name is required");
50
47
  }
@@ -52,9 +49,7 @@ function declareSecret(
52
49
  kind: "secret",
53
50
  name,
54
51
  sensitive: options.sensitive ?? true,
55
- ...(options.description !== undefined
56
- ? { description: options.description }
57
- : {}),
52
+ ...(options.description !== undefined ? { description: options.description } : {}),
58
53
  ...(options.rotate !== undefined ? { rotate: options.rotate } : {}),
59
54
  ...(options.schema !== undefined ? { schema: options.schema } : {}),
60
55
  ...(options.dev !== undefined ? { dev: options.dev } : {}),
@@ -67,10 +62,7 @@ function declareSecret(
67
62
  * @param name - Config name
68
63
  * @param options - Description / schema / dev fallback
69
64
  */
70
- function declareConfig(
71
- name: string,
72
- options: VaultSecretOptions = {},
73
- ): VaultSecretDecl {
65
+ function declareConfig(name: string, options: VaultSecretOptions = {}): VaultSecretDecl {
74
66
  if (!name) {
75
67
  throw new TypeError("vault.config: name is required");
76
68
  }
@@ -78,9 +70,7 @@ function declareConfig(
78
70
  kind: "config",
79
71
  name,
80
72
  sensitive: options.sensitive ?? false,
81
- ...(options.description !== undefined
82
- ? { description: options.description }
83
- : {}),
73
+ ...(options.description !== undefined ? { description: options.description } : {}),
84
74
  ...(options.rotate !== undefined ? { rotate: options.rotate } : {}),
85
75
  ...(options.schema !== undefined ? { schema: options.schema } : {}),
86
76
  ...(options.dev !== undefined ? { dev: options.dev } : {}),
@@ -88,41 +78,41 @@ function declareConfig(
88
78
  }
89
79
 
90
80
  /**
91
- * Marker prefix for {@link vault.fromStack} dev fallbacks.
92
- * Resolved from `.env.stack` by `oke dev --stack` / vault boot.
81
+ * Marker prefix for {@link vault.fromDocker} local fallbacks.
82
+ * Resolved from `docker/.env.docker` by `oke dev --docker` / vault boot.
93
83
  */
94
- export const FROM_STACK_PREFIX = "__oke_from_stack__:";
84
+ export const FROM_DOCKER_PREFIX = "__oke_from_docker__:";
95
85
 
96
86
  /**
97
- * Dev fallback that reads the URL built by the image recipe for `role`.
87
+ * Local fallback that reads the URL built by the image recipe for `role`.
98
88
  * The kernel never sees the underlying env-var names — only the URL.
99
89
  *
100
90
  * @param role - Image role (`store.sql`, …)
101
91
  */
102
- export function fromStack(role: string): string {
103
- if (!role) throw new TypeError("vault.fromStack: role is required");
104
- return `${FROM_STACK_PREFIX}${role}`;
92
+ export function fromDocker(role: string): string {
93
+ if (!role) throw new TypeError("vault.fromDocker: role is required");
94
+ return `${FROM_DOCKER_PREFIX}${role}`;
105
95
  }
106
96
 
107
97
  /**
108
- * Whether a dev fallback is a {@link fromStack} marker.
98
+ * Whether a local fallback is a {@link fromDocker} marker.
109
99
  *
110
100
  * @param value - Candidate
111
101
  */
112
- export function isFromStack(value: string): boolean {
113
- return value.startsWith(FROM_STACK_PREFIX);
102
+ export function isFromDocker(value: string): boolean {
103
+ return value.startsWith(FROM_DOCKER_PREFIX);
114
104
  }
115
105
 
116
106
  /**
117
- * Role encoded in a {@link fromStack} marker.
107
+ * Role encoded in a {@link fromDocker} marker.
118
108
  *
119
- * @param value - Marker from {@link fromStack}
109
+ * @param value - Marker from {@link fromDocker}
120
110
  */
121
- export function fromStackRole(value: string): string {
122
- if (!isFromStack(value)) {
123
- throw new TypeError(`vault: not a fromStack marker: ${value}`);
111
+ export function fromDockerRole(value: string): string {
112
+ if (!isFromDocker(value)) {
113
+ throw new TypeError(`vault: not a fromDocker marker: ${value}`);
124
114
  }
125
- return value.slice(FROM_STACK_PREFIX.length);
115
+ return value.slice(FROM_DOCKER_PREFIX.length);
126
116
  }
127
117
 
128
118
  /**
@@ -135,9 +125,9 @@ export const vault: {
135
125
  (name: string, options?: VaultSecretOptions): VaultSecretDecl;
136
126
  secret(name: string, options?: VaultSecretOptions): VaultSecretDecl;
137
127
  config(name: string, options?: VaultSecretOptions): VaultSecretDecl;
138
- fromStack(role: string): string;
128
+ fromDocker(role: string): string;
139
129
  } = Object.assign(declareSecret, {
140
130
  secret: declareSecret,
141
131
  config: declareConfig,
142
- fromStack,
132
+ fromDocker,
143
133
  });
@@ -8,13 +8,8 @@
8
8
  * @param value - Cleartext secret
9
9
  */
10
10
  export async function fingerprintSecret(value: string): Promise<string> {
11
- const digest = await crypto.subtle.digest(
12
- "SHA-256",
13
- new TextEncoder().encode(value),
14
- );
15
- const hex = [...new Uint8Array(digest)]
16
- .map((b) => b.toString(16).padStart(2, "0"))
17
- .join("");
11
+ const digest = await crypto.subtle.digest("SHA-256", new TextEncoder().encode(value));
12
+ const hex = [...new Uint8Array(digest)].map((b) => b.toString(16).padStart(2, "0")).join("");
18
13
  return `sha256:${hex.slice(0, 16)}`;
19
14
  }
20
15
 
@@ -11,17 +11,13 @@ export const SECRET_MASK = "[redacted:secret]";
11
11
  *
12
12
  * @param secrets - Cleartext values currently loaded
13
13
  */
14
- export function createSecretRedactor(
15
- secrets: Iterable<string>,
16
- ): {
14
+ export function createSecretRedactor(secrets: Iterable<string>): {
17
15
  /** Redact a free-form string. */
18
16
  redactString(input: string): string;
19
17
  /** Deep-redact a JSON-like value. */
20
18
  redact(value: unknown): unknown;
21
19
  } {
22
- const values = [...secrets]
23
- .filter((v) => v.length > 0)
24
- .sort((a, b) => b.length - a.length);
20
+ const values = [...secrets].filter((v) => v.length > 0).sort((a, b) => b.length - a.length);
25
21
 
26
22
  function redactString(input: string): string {
27
23
  let out = input;
@@ -3,7 +3,7 @@
3
3
  */
4
4
 
5
5
  import type { VaultBag, VaultDriver } from "../../drivers/vault-types.ts";
6
- import { fromStackRole, isFromStack } from "./declare.ts";
6
+ import { fromDockerRole, isFromDocker } from "./declare.ts";
7
7
  import type { VaultSecretDecl } from "./declare.ts";
8
8
  import { fingerprintSecretSync } from "./fingerprint.ts";
9
9
  import { createSecretRedactor, SECRET_MASK } from "./redact.ts";
@@ -25,13 +25,8 @@ export class VaultBootError extends Error {
25
25
  * @param gaps - Missing secrets
26
26
  */
27
27
  constructor(gaps: readonly VaultGap[]) {
28
- const lines = gaps.map(
29
- (g) =>
30
- ` - ${g.name}${g.description ? `: ${g.description}` : ""}`,
31
- );
32
- super(
33
- `vault boot failed — ${gaps.length} missing secret(s):\n${lines.join("\n")}`,
34
- );
28
+ const lines = gaps.map((g) => ` - ${g.name}${g.description ? `: ${g.description}` : ""}`);
29
+ super(`vault boot failed — ${gaps.length} missing secret(s):\n${lines.join("\n")}`);
35
30
  this.name = "VaultBootError";
36
31
  this.gaps = gaps;
37
32
  }
@@ -39,12 +34,12 @@ export class VaultBootError extends Error {
39
34
 
40
35
  /**
41
36
  * Named layer in the resolution chain (console §9.8).
42
- * Spec order: process.env → .env.local → .env.stack → driver → dev-fallback.
37
+ * Spec order: process.env → .env.local → .env.docker → driver → dev-fallback.
43
38
  */
44
39
  export type VaultResolutionSource =
45
40
  | "process.env"
46
41
  | ".env.local"
47
- | ".env.stack"
42
+ | ".env.docker"
48
43
  | "driver"
49
44
  | "dev-fallback";
50
45
 
@@ -173,9 +168,7 @@ export interface VaultRuntime {
173
168
  *
174
169
  * @param options - Contracts + resolution chain
175
170
  */
176
- export function createVaultRuntime(
177
- options: CreateVaultRuntimeOptions = {},
178
- ): VaultRuntime {
171
+ export function createVaultRuntime(options: CreateVaultRuntimeOptions = {}): VaultRuntime {
179
172
  const contracts = new Map<string, VaultSecretDecl>();
180
173
  for (const s of options.secrets ?? []) {
181
174
  contracts.set(s.name, s);
@@ -236,9 +229,7 @@ export function createVaultRuntime(
236
229
  if (value === undefined || value.length === 0) {
237
230
  gaps.push({
238
231
  name: c.name,
239
- ...(c.description !== undefined
240
- ? { description: c.description }
241
- : {}),
232
+ ...(c.description !== undefined ? { description: c.description } : {}),
242
233
  });
243
234
  }
244
235
  }
@@ -384,17 +375,15 @@ export function createVaultRuntime(
384
375
  *
385
376
  * @param layer - Chain layer
386
377
  */
387
- export function resolveLayerSource(
388
- layer: VaultChainLayer,
389
- ): VaultResolutionSource {
378
+ export function resolveLayerSource(layer: VaultChainLayer): VaultResolutionSource {
390
379
  if (layer.source) return layer.source;
391
380
  const path = layer.options?.path;
392
381
  if (typeof path === "string") {
393
382
  if (path.endsWith(".env.local") || path.includes("/.env.local")) {
394
383
  return ".env.local";
395
384
  }
396
- if (path.endsWith(".env.stack") || path.includes("/.env.stack")) {
397
- return ".env.stack";
385
+ if (path.endsWith(".env.docker") || path.includes("/.env.docker")) {
386
+ return ".env.docker";
398
387
  }
399
388
  }
400
389
  if (layer.driver.id === "env" && path === undefined) {
@@ -404,25 +393,25 @@ export function resolveLayerSource(
404
393
  }
405
394
 
406
395
  /**
407
- * Resolve a `dev` fallback, expanding {@link import("./declare.ts").fromStack}
408
- * markers via stack env (`OKE_<ROLE>_URL`) without teaching the kernel
396
+ * Resolve a `dev` fallback, expanding {@link import("./declare.ts").fromDocker}
397
+ * markers via docker env (`OKE_<ROLE>_URL`) without teaching the kernel
409
398
  * image-specific env-var names.
410
399
  *
411
400
  * @param dev - Declared fallback
412
401
  */
413
402
  function resolveDevFallback(dev: string): string | undefined {
414
- if (!isFromStack(dev)) return dev;
415
- const role = fromStackRole(dev);
403
+ if (!isFromDocker(dev)) return dev;
404
+ const role = fromDockerRole(dev);
416
405
  const key = `OKE_${role.replaceAll(".", "_").toUpperCase()}_URL`;
417
406
  const fromEnv =
418
407
  (typeof Bun !== "undefined" ? Bun.env[key] : undefined) ??
419
408
  process.env[key] ??
420
409
  (role === "store.sql"
421
- ? (typeof Bun !== "undefined" ? Bun.env.DATABASE_URL : undefined) ??
422
- process.env.DATABASE_URL
410
+ ? ((typeof Bun !== "undefined" ? Bun.env.DATABASE_URL : undefined) ??
411
+ process.env.DATABASE_URL)
423
412
  : undefined);
424
413
  if (fromEnv && fromEnv.length > 0) return fromEnv;
425
- // Dev/test without `oke dev --stack`: still satisfy url-shaped contracts.
414
+ // Local/test without `oke dev --docker`: still satisfy url-shaped contracts.
426
415
  if (role === "store.sql") return "postgres://localhost/oke";
427
416
  return undefined;
428
417
  }
@@ -431,10 +420,7 @@ function resolveDevFallback(dev: string): string | undefined {
431
420
  * @param contracts - Declared contracts
432
421
  * @param name - Contract name
433
422
  */
434
- function isSensitiveName(
435
- contracts: ReadonlyMap<string, VaultSecretDecl>,
436
- name: string,
437
- ): boolean {
423
+ function isSensitiveName(contracts: ReadonlyMap<string, VaultSecretDecl>, name: string): boolean {
438
424
  const c = contracts.get(name);
439
425
  if (!c) return true;
440
426
  return c.sensitive;
@@ -43,27 +43,23 @@ describe("vault declaration", () => {
43
43
  expect(cfg.kind).toBe("config");
44
44
  expect(cfg.sensitive).toBe(false);
45
45
 
46
- const fromStack = vault.fromStack("store.sql");
47
- expect(fromStack).toStartWith("__oke_from_stack__:");
48
- const c = vault.secret("DATABASE_URL", { dev: fromStack });
49
- expect(c.dev).toBe(fromStack);
46
+ const fromDocker = vault.fromDocker("store.sql");
47
+ expect(fromDocker).toStartWith("__oke_from_docker__:");
48
+ const c = vault.secret("DATABASE_URL", { dev: fromDocker });
49
+ expect(c.dev).toBe(fromDocker);
50
50
  });
51
51
 
52
- test("fromStack resolves via OKE_<ROLE>_URL without env-var names in the kernel", async () => {
52
+ test("fromDocker resolves via OKE_<ROLE>_URL without env-var names in the kernel", async () => {
53
53
  const prev = process.env.OKE_STORE_SQL_URL;
54
54
  process.env.OKE_STORE_SQL_URL = "postgres://oke:x@127.0.0.1:5432/oke";
55
55
  try {
56
56
  const runtime = createVaultRuntime({
57
- secrets: [
58
- vault.secret("DATABASE_URL", { dev: vault.fromStack("store.sql") }),
59
- ],
57
+ secrets: [vault.secret("DATABASE_URL", { dev: vault.fromDocker("store.sql") })],
60
58
  chain: [],
61
59
  allowDevFallbacks: true,
62
60
  });
63
61
  await runtime.boot();
64
- expect(runtime.read("DATABASE_URL")).toBe(
65
- "postgres://oke:x@127.0.0.1:5432/oke",
66
- );
62
+ expect(runtime.read("DATABASE_URL")).toBe("postgres://oke:x@127.0.0.1:5432/oke");
67
63
  } finally {
68
64
  if (prev === undefined) delete process.env.OKE_STORE_SQL_URL;
69
65
  else process.env.OKE_STORE_SQL_URL = prev;
@@ -94,10 +90,7 @@ describe("boot lists every missing secret", () => {
94
90
  expect(err).toBeInstanceOf(VaultBootError);
95
91
  const boot = err as VaultBootError;
96
92
  expect(boot.gaps).toHaveLength(2);
97
- expect(boot.gaps.map((g) => g.name).sort()).toEqual([
98
- "DATABASE_URL",
99
- "STRIPE_KEY",
100
- ]);
93
+ expect(boot.gaps.map((g) => g.name).sort()).toEqual(["DATABASE_URL", "STRIPE_KEY"]);
101
94
  expect(boot.message).toContain("STRIPE_KEY");
102
95
  expect(boot.message).toContain("Payments gateway key");
103
96
  expect(boot.message).toContain("DATABASE_URL");
@@ -181,10 +174,7 @@ describe("resolution chain", () => {
181
174
 
182
175
  test("config cleartext is exposed; secrets are not", async () => {
183
176
  const runtime = createVaultRuntime({
184
- secrets: [
185
- vault.secret("STRIPE_KEY"),
186
- vault.config("PUBLIC_URL"),
187
- ],
177
+ secrets: [vault.secret("STRIPE_KEY"), vault.config("PUBLIC_URL")],
188
178
  chain: [
189
179
  {
190
180
  driver: memoryVaultDriver,
@@ -210,14 +200,11 @@ describe("redaction + fingerprints", () => {
210
200
  const secret = "sk_live_super_secret_value_do_not_leak";
211
201
  const runtime = createVaultRuntime({
212
202
  secrets: [vault("STRIPE_KEY")],
213
- chain: [
214
- { driver: memoryVaultDriver, options: { secrets: { STRIPE_KEY: secret } } },
215
- ],
203
+ chain: [{ driver: memoryVaultDriver, options: { secrets: { STRIPE_KEY: secret } } }],
216
204
  });
217
205
  await runtime.boot();
218
206
 
219
- const lines: Array<{ message: string; data?: Record<string, unknown> }> =
220
- [];
207
+ const lines: Array<{ message: string; data?: Record<string, unknown> }> = [];
221
208
  const { fx } = createFxContextWithVault(runtime, lines);
222
209
 
223
210
  const value = fx.vault("STRIPE_KEY");
@@ -256,10 +243,7 @@ describe("sops / age (Typage)", () => {
256
243
  test("decrypts SOPS JSON in-process with age-encryption", async () => {
257
244
  const identity = await age.generateIdentity();
258
245
  const recipient = await age.identityToRecipient(identity);
259
- const { json } = await buildSopsFixture(
260
- { STRIPE_KEY: "sk_sops_decrypted" },
261
- recipient,
262
- );
246
+ const { json } = await buildSopsFixture({ STRIPE_KEY: "sk_sops_decrypted" }, recipient);
263
247
 
264
248
  const runtime = createVaultRuntime({
265
249
  secrets: [vault("STRIPE_KEY")],
@@ -12,15 +12,12 @@
12
12
 
13
13
  export {
14
14
  vault,
15
- fromStack,
16
- FROM_STACK_PREFIX,
17
- isFromStack,
18
- fromStackRole,
19
- } from "./vault/declare.ts";
20
- export type {
21
- VaultSecretDecl,
22
- VaultSecretOptions,
15
+ fromDocker,
16
+ FROM_DOCKER_PREFIX,
17
+ isFromDocker,
18
+ fromDockerRole,
23
19
  } from "./vault/declare.ts";
20
+ export type { VaultSecretDecl, VaultSecretOptions } from "./vault/declare.ts";
24
21
 
25
22
  export {
26
23
  createVaultRuntime,
@@ -37,9 +34,8 @@ export type {
37
34
  VaultRuntime,
38
35
  } from "./vault/runtime.ts";
39
36
 
40
- export {
41
- fingerprintSecret,
42
- fingerprintSecretSync,
43
- } from "./vault/fingerprint.ts";
37
+ export { COMPOSE_ENV_REL, resolveComposeEnvPath } from "./vault/chain.ts";
38
+
39
+ export { fingerprintSecret, fingerprintSecretSync } from "./vault/fingerprint.ts";
44
40
 
45
41
  export { createSecretRedactor } from "./vault/redact.ts";
package/src/index.ts CHANGED
@@ -56,11 +56,14 @@ export {
56
56
  id,
57
57
  now,
58
58
  defineTable,
59
+ field,
59
60
  createStoreRuntime,
60
61
  type StoreDecl,
61
62
  type StoreRuntime,
62
63
  type SqlStoreHandle,
63
64
  type TableHandle,
65
+ type SchemaTableDecl,
66
+ type SchemaColumnDecl,
64
67
  } from "./elements/store.ts";
65
68
 
66
69
  export {
@@ -98,8 +101,8 @@ export {
98
101
 
99
102
  export {
100
103
  vault,
101
- fromStack,
102
- FROM_STACK_PREFIX,
104
+ fromDocker,
105
+ FROM_DOCKER_PREFIX,
103
106
  createVaultRuntime,
104
107
  VaultBootError,
105
108
  SECRET_MASK,
@@ -68,17 +68,12 @@ export type ErrorDataOf<E extends FlowErrorMap> = {
68
68
  *
69
69
  * @typeParam F - Flow definition
70
70
  */
71
- export type RouteFromFlow<F> = F extends FlowDef<
72
- infer I,
73
- infer O,
74
- infer E,
75
- any,
76
- infer T
77
- >
78
- ? [T] extends [HttpTrigger<infer M, infer P>]
79
- ? AppFlowRoute<I, O, ErrorDataOf<E>, M, P>
80
- : AppFlowRoute<I, O, ErrorDataOf<E>>
81
- : never;
71
+ export type RouteFromFlow<F> =
72
+ F extends FlowDef<infer I, infer O, infer E, any, infer T>
73
+ ? [T] extends [HttpTrigger<infer M, infer P>]
74
+ ? AppFlowRoute<I, O, ErrorDataOf<E>, M, P>
75
+ : AppFlowRoute<I, O, ErrorDataOf<E>>
76
+ : never;
82
77
 
83
78
  /**
84
79
  * Map a flow namespace (`{ create, get, … }`) to a unit route table.
@@ -115,12 +110,11 @@ export type RoutesFromAdoptArg<A> = A extends AnyFlowDef
115
110
  *
116
111
  * @typeParam Args - Adopt argument tuple
117
112
  */
118
- export type RoutesFromAdoptArgs<Args extends readonly unknown[]> =
119
- Args extends readonly []
120
- ? {}
121
- : Args extends readonly [infer H, ...infer T]
122
- ? RoutesFromAdoptArg<H> & RoutesFromAdoptArgs<T>
123
- : {};
113
+ export type RoutesFromAdoptArgs<Args extends readonly unknown[]> = Args extends readonly []
114
+ ? {}
115
+ : Args extends readonly [infer H, ...infer T]
116
+ ? RoutesFromAdoptArg<H> & RoutesFromAdoptArgs<T>
117
+ : {};
124
118
 
125
119
  /** Runtime leaf: method/path when the flow has an HTTP trigger. */
126
120
  export interface RuntimeFlowRoute {
@@ -141,8 +135,7 @@ export type RuntimeRouteMap = {
141
135
  * @param flowDef - Flow definition
142
136
  */
143
137
  export function runtimeRouteFromFlow(flowDef: AnyFlowDef): RuntimeFlowRoute {
144
- const trigger: Trigger | undefined =
145
- flowDef.$trigger ?? flowDef.triggers[0];
138
+ const trigger: Trigger | undefined = flowDef.$trigger ?? flowDef.triggers[0];
146
139
  if (trigger?.kind === "http") {
147
140
  return { method: trigger.method, path: trigger.path };
148
141
  }
@@ -156,10 +149,7 @@ export function runtimeRouteFromFlow(flowDef: AnyFlowDef): RuntimeFlowRoute {
156
149
  * @param into - Mutable route map to extend
157
150
  * @returns Flows discovered (for `fx.call` registration)
158
151
  */
159
- export function accumulateAdoptArgs(
160
- args: readonly unknown[],
161
- into: RuntimeRouteMap,
162
- ): AnyFlowDef[] {
152
+ export function accumulateAdoptArgs(args: readonly unknown[], into: RuntimeRouteMap): AnyFlowDef[] {
163
153
  const found: AnyFlowDef[] = [];
164
154
 
165
155
  for (const arg of args) {
@@ -169,9 +159,7 @@ export function accumulateAdoptArgs(
169
159
  }
170
160
  if (typeof arg !== "object" || arg === null) continue;
171
161
 
172
- for (const [unit, value] of Object.entries(
173
- arg as Record<string, unknown>,
174
- )) {
162
+ for (const [unit, value] of Object.entries(arg as Record<string, unknown>)) {
175
163
  if (isFlow(value)) {
176
164
  // Flat `{ create: flow }` without a unit wrapper — skip client map
177
165
  found.push(value);
@@ -180,9 +168,7 @@ export function accumulateAdoptArgs(
180
168
  if (typeof value !== "object" || value === null) continue;
181
169
 
182
170
  const unitBag = into[unit] ?? (into[unit] = {});
183
- for (const [flowName, flowDef] of Object.entries(
184
- value as Record<string, unknown>,
185
- )) {
171
+ for (const [flowName, flowDef] of Object.entries(value as Record<string, unknown>)) {
186
172
  if (!isFlow(flowDef)) continue;
187
173
  found.push(flowDef);
188
174
  unitBag[flowName] = runtimeRouteFromFlow(flowDef);