okengine 0.18.4 → 0.19.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (512) hide show
  1. package/AGENTS.md +18 -10
  2. package/README.md +2 -2
  3. package/package.json +51 -50
  4. package/site/content/docs/ai/index.mdx +25 -6
  5. package/site/content/docs/ai/llms-txt.mdx +1 -1
  6. package/site/content/docs/ai/meta.json +1 -1
  7. package/site/content/docs/ai/skills.mdx +4 -1
  8. package/site/content/docs/ai/try-it.mdx +58 -0
  9. package/site/content/docs/client/auth.mdx +208 -0
  10. package/site/content/docs/client/calling.mdx +451 -0
  11. package/site/content/docs/client/index.mdx +209 -0
  12. package/site/content/docs/client/live.mdx +234 -0
  13. package/site/content/docs/client/meta.json +5 -0
  14. package/site/content/docs/client/react.mdx +249 -0
  15. package/site/content/docs/elements/ai/agents.mdx +232 -0
  16. package/site/content/docs/elements/ai/index.mdx +341 -0
  17. package/site/content/docs/elements/ai/mcp.mdx +275 -0
  18. package/site/content/docs/elements/ai/meta.json +5 -0
  19. package/site/content/docs/elements/ai/models.mdx +283 -0
  20. package/site/content/docs/elements/ai/prompts.mdx +256 -0
  21. package/site/content/docs/elements/channel/email.mdx +266 -0
  22. package/site/content/docs/elements/channel/index.mdx +344 -0
  23. package/site/content/docs/elements/channel/meta.json +5 -0
  24. package/site/content/docs/elements/channel/push.mdx +218 -0
  25. package/site/content/docs/elements/channel/receipts.mdx +206 -0
  26. package/site/content/docs/elements/channel/sms.mdx +264 -0
  27. package/site/content/docs/elements/channel/whatsapp.mdx +220 -0
  28. package/site/content/docs/elements/clock/index.mdx +300 -0
  29. package/site/content/docs/elements/clock/meta.json +5 -0
  30. package/site/content/docs/elements/clock/schedules.mdx +508 -0
  31. package/site/content/docs/elements/clock/sleep.mdx +445 -0
  32. package/site/content/docs/elements/flow/consumers.mdx +707 -0
  33. package/site/content/docs/elements/flow/http.mdx +1080 -0
  34. package/site/content/docs/elements/flow/index.mdx +618 -0
  35. package/site/content/docs/elements/flow/meta.json +5 -0
  36. package/site/content/docs/elements/flow/routing.mdx +559 -0
  37. package/site/content/docs/elements/flow/workflows.mdx +640 -0
  38. package/site/content/docs/elements/gate/auth.mdx +371 -0
  39. package/site/content/docs/elements/gate/authorization.mdx +298 -0
  40. package/site/content/docs/elements/gate/index.mdx +418 -0
  41. package/site/content/docs/elements/gate/meta.json +5 -0
  42. package/site/content/docs/elements/gate/rate-limits.mdx +365 -0
  43. package/site/content/docs/elements/gate/rls.mdx +303 -0
  44. package/site/content/docs/elements/gate/tenancy.mdx +372 -0
  45. package/site/content/docs/elements/index.mdx +52 -11
  46. package/site/content/docs/elements/signal/broadcast.mdx +517 -0
  47. package/site/content/docs/elements/signal/index.mdx +352 -0
  48. package/site/content/docs/elements/signal/live.mdx +590 -0
  49. package/site/content/docs/elements/signal/meta.json +5 -0
  50. package/site/content/docs/elements/signal/once.mdx +596 -0
  51. package/site/content/docs/elements/store/files.mdx +659 -0
  52. package/site/content/docs/elements/store/index.mdx +310 -0
  53. package/site/content/docs/elements/store/kv.mdx +629 -0
  54. package/site/content/docs/elements/store/meta.json +5 -0
  55. package/site/content/docs/elements/store/search.mdx +946 -0
  56. package/site/content/docs/elements/store/sql.mdx +937 -0
  57. package/site/content/docs/elements/vault/config.mdx +256 -0
  58. package/site/content/docs/elements/vault/index.mdx +356 -0
  59. package/site/content/docs/elements/vault/meta.json +5 -0
  60. package/site/content/docs/elements/vault/rotation.mdx +273 -0
  61. package/site/content/docs/elements/vault/secrets.mdx +285 -0
  62. package/site/content/docs/index.mdx +78 -30
  63. package/site/content/docs/meta.json +11 -8
  64. package/site/content/docs/plugins/cors.mdx +2 -1
  65. package/site/content/docs/plugins/csrf.mdx +4 -1
  66. package/site/content/docs/plugins/headers.mdx +2 -1
  67. package/site/content/docs/plugins/ip-allowlist.mdx +2 -1
  68. package/site/content/docs/plugins/magic-link.mdx +6 -0
  69. package/site/content/docs/plugins/maintenance-mode.mdx +2 -1
  70. package/site/content/docs/plugins/oauth.mdx +1 -1
  71. package/site/content/docs/plugins/otp.mdx +12 -1
  72. package/site/content/docs/plugins/passkey.mdx +39 -15
  73. package/site/content/docs/plugins/two-factor.mdx +91 -34
  74. package/site/content/docs/plugins/username.mdx +1 -1
  75. package/site/content/docs/recipes/caddy.mdx +3 -3
  76. package/site/content/docs/recipes/index.mdx +18 -28
  77. package/site/content/docs/recipes/mailpit.mdx +1 -1
  78. package/site/content/docs/recipes/meilisearch.mdx +3 -3
  79. package/site/content/docs/recipes/meta.json +1 -4
  80. package/site/content/docs/recipes/nginx.mdx +2 -2
  81. package/site/content/docs/recipes/openrouter.mdx +283 -0
  82. package/site/content/docs/recipes/pgdog.mdx +3 -3
  83. package/site/content/docs/recipes/postgres.mdx +1 -2
  84. package/site/content/docs/recipes/rustfs.mdx +2 -2
  85. package/site/content/docs/recipes/traefik.mdx +3 -3
  86. package/site/content/docs/reference/cli.mdx +231 -0
  87. package/site/content/docs/reference/configuration.mdx +30 -10
  88. package/site/content/docs/reference/environment-variables.mdx +93 -20
  89. package/site/content/docs/reference/errors.mdx +132 -29
  90. package/site/content/docs/reference/fx.mdx +137 -73
  91. package/site/content/docs/reference/index.mdx +13 -21
  92. package/site/content/docs/reference/meta.json +4 -5
  93. package/site/content/docs/reference/okid.mdx +42 -17
  94. package/site/content/docs/reference/plugins.mdx +4 -3
  95. package/site/content/docs/reference/security.mdx +197 -0
  96. package/site/content/docs/understand/meta.json +5 -0
  97. package/site/content/docs/understand/the-anatomy.mdx +132 -0
  98. package/site/content/docs/understand/the-model.mdx +32 -0
  99. package/site/content/docs/understand/the-problem.mdx +74 -0
  100. package/site/content/docs/understand/the-vocabulary.mdx +26 -0
  101. package/src/auth/api-keys.ts +2 -1
  102. package/src/auth/bindings.ts +64 -16
  103. package/src/auth/gate-auth.test.ts +6 -1
  104. package/src/auth/identity.ts +152 -5
  105. package/src/auth/index.ts +29 -0
  106. package/src/auth/invites.ts +2 -1
  107. package/src/auth/method-context.ts +41 -0
  108. package/src/auth/oauth-as/crypto.ts +2 -1
  109. package/src/auth/oauth-as/stores.ts +2 -1
  110. package/src/auth/operator.ts +2 -1
  111. package/src/auth/sessions-jwt.test.ts +77 -0
  112. package/src/auth/sessions.ts +20 -4
  113. package/src/auth/tenants.ts +3 -2
  114. package/src/auth/two-factor-challenge.test.ts +61 -0
  115. package/src/auth/two-factor-challenge.ts +284 -0
  116. package/src/auth/verification.ts +5 -0
  117. package/src/bench/REPORT.md +49 -0
  118. package/src/bench/g03-signal-once.bench.ts +1 -1
  119. package/src/bench/g10-observability-contention.bench.ts +1 -1
  120. package/src/bench/g17-hybrid-search.bench.ts +572 -0
  121. package/src/bench/load-app.ts +2 -10
  122. package/src/cli/ai-setup/ai-setup.test.ts +331 -42
  123. package/src/cli/ai-setup/apply.ts +294 -52
  124. package/src/cli/ai-setup/catalog.ts +238 -1342
  125. package/src/cli/ai-setup/index.ts +14 -99
  126. package/src/cli/ai-setup/prompts.ts +60 -443
  127. package/src/cli/ask-seed.test.ts +96 -0
  128. package/src/cli/ask-seed.ts +82 -0
  129. package/src/cli/ask-vault-gaps.test.ts +84 -0
  130. package/src/cli/ask-vault-gaps.ts +146 -0
  131. package/src/cli/build.ts +2 -2
  132. package/src/cli/client-add.test.ts +26 -1
  133. package/src/cli/client-add.ts +106 -27
  134. package/src/cli/competitor-mention-removal.test.ts +1 -1
  135. package/src/cli/db-seed.ts +2 -0
  136. package/src/cli/db.ts +150 -11
  137. package/src/cli/dev.ts +119 -211
  138. package/src/cli/docker-clean.ts +2 -2
  139. package/src/cli/docker-cli.test.ts +1 -1
  140. package/src/cli/doctor-diff.ts +4 -2
  141. package/src/cli/doctor-pii.test.ts +1 -1
  142. package/src/cli/doctor.ts +14 -1
  143. package/src/cli/hero-meta.test.ts +4 -2
  144. package/src/cli/load-config.images.test.ts +8 -10
  145. package/src/cli/load-config.ts +1 -1
  146. package/src/cli/registry.ts +22 -10
  147. package/src/cli/replay.ts +3 -1
  148. package/src/cli/start.ts +1 -1
  149. package/src/cli/tui/keys.ts +2 -3
  150. package/src/client/auth/cookies.ts +74 -0
  151. package/src/client/auth/create-auth-client.ts +636 -0
  152. package/src/client/auth/denials.ts +99 -0
  153. package/src/client/auth/session.ts +283 -0
  154. package/src/client/auth.test.ts +251 -0
  155. package/src/client/auth.ts +39 -114
  156. package/src/client/create-with-session.ts +245 -0
  157. package/src/client/create.ts +51 -5
  158. package/src/client/index.ts +11 -1
  159. package/src/client/live.ts +11 -79
  160. package/src/client/notes-contract.test.ts +5 -10
  161. package/src/client/sse.ts +137 -0
  162. package/src/client/stream.ts +147 -0
  163. package/src/client/transport.test.ts +32 -0
  164. package/src/client/transport.ts +123 -26
  165. package/src/client/types.ts +118 -14
  166. package/src/client-react/index.ts +185 -24
  167. package/src/client-react/use-live-query.ts +13 -3
  168. package/src/compiler/aot.test.ts +7 -4
  169. package/src/compiler/effects-embed.test.ts +56 -0
  170. package/src/compiler/effects-fetch.test.ts +43 -0
  171. package/src/compiler/effects-infer.ts +58 -2
  172. package/src/compiler/extract.test.ts +258 -44
  173. package/src/compiler/extract.ts +566 -48
  174. package/src/compiler/fixtures/skyport/src/flows/bookings/index.ts +7 -4
  175. package/src/compiler/fixtures/skyport/src/flows/bookings/signals.ts +2 -8
  176. package/src/compiler/fixtures/skyport.expected.json +4 -4
  177. package/src/compiler/fixtures/triggers/five-triggers.ts +14 -10
  178. package/src/compiler/response.ts +2 -2
  179. package/src/compiler/search-writer-isolation.test.ts +40 -0
  180. package/src/config/index.ts +11 -0
  181. package/src/console/server/app.ts +17 -23
  182. package/src/console/server/bind.ts +4 -0
  183. package/src/console/server/console.test.ts +2 -2
  184. package/src/console/server/flows-invoke.test.ts +50 -34
  185. package/src/console/server/flows.ts +436 -255
  186. package/src/console/server/runs-ingest.test.ts +6 -3
  187. package/src/console/server/serve.ts +1 -1
  188. package/src/console/server/signals.test.ts +1 -5
  189. package/src/console/server/signals.ts +8 -6
  190. package/src/console/server/state.ts +6 -1
  191. package/src/console/server/store.ts +1 -1
  192. package/src/console/ui-next/dist/assets/FileExportIcon-Ck-5od4R.js +1 -0
  193. package/src/console/ui-next/dist/assets/MoreHorizontalCircle01Icon-gMNGsE37.js +1 -0
  194. package/src/console/ui-next/dist/assets/PlusSignIcon-CwG3nxfu.js +1 -0
  195. package/src/console/ui-next/dist/assets/UnavailableIcon-D9cvHVPr.js +1 -0
  196. package/src/console/ui-next/dist/assets/UserIcon-DaE2PB5_.js +1 -0
  197. package/src/console/ui-next/dist/assets/access-page-DFeymU07.js +4 -0
  198. package/src/console/ui-next/dist/assets/agent-disclosure-U1rdfblp.js +1 -0
  199. package/src/console/ui-next/dist/assets/cache-glyph-BeFJeqBG.js +1 -0
  200. package/src/console/ui-next/dist/assets/call-pii-button-CVAONPii.js +1 -0
  201. package/src/console/ui-next/dist/assets/collapsible-D2A6NJ-3.js +1 -0
  202. package/src/console/ui-next/dist/assets/copy-inline-button-CAYD18cr.js +1 -0
  203. package/src/console/ui-next/dist/assets/dagre.esm-B1_XeuLP.js +1 -0
  204. package/src/console/ui-next/dist/assets/detail-header-DVWNjWjg.js +1 -0
  205. package/src/console/ui-next/dist/assets/dropdown-menu-4h2LOVXM.js +1 -0
  206. package/src/console/ui-next/dist/assets/duration-tone-Cgk_h5ja.js +9 -0
  207. package/src/console/ui-next/dist/assets/element-icons-BI8cJgdh.js +1 -0
  208. package/src/console/ui-next/dist/assets/explorer-empty-CJs5A-wm.js +1 -0
  209. package/src/console/ui-next/dist/assets/flows-page-Dss7941e.js +1 -0
  210. package/src/console/ui-next/dist/assets/highlighted-json-MYZQtRnw.js +154 -0
  211. package/src/console/ui-next/dist/assets/http-method-Jrh39p7A.js +1 -0
  212. package/src/console/ui-next/dist/assets/index-D0zS5rKO.css +2 -0
  213. package/src/console/ui-next/dist/assets/index-DXP2dBIF.js +63 -0
  214. package/src/console/ui-next/dist/assets/observability-page-HvolXxTI.js +4 -0
  215. package/src/console/ui-next/dist/assets/react-dom-Ddte4I-Q.js +9 -0
  216. package/src/console/ui-next/dist/assets/replica-lag-CSh2dzrb.js +18 -0
  217. package/src/console/ui-next/dist/assets/request-meta-BatF8KrK.js +1 -0
  218. package/src/console/ui-next/dist/assets/shortcut-keys-3ILd8oGn.js +1 -0
  219. package/src/console/ui-next/dist/assets/{sql-BskegiFM.js → sql-BsFa4tDR.js} +1 -1
  220. package/src/console/ui-next/dist/assets/store-page-eiKiHnNe.js +41 -0
  221. package/src/console/ui-next/dist/assets/trace-detail-sheet-CZkMeKS-.js +2 -0
  222. package/src/console/ui-next/dist/assets/tree-expand-toggle-CW8y5A2h.js +55 -0
  223. package/src/console/ui-next/dist/assets/units-page-B_RWJrEO.js +1 -0
  224. package/src/console/ui-next/dist/assets/{use-vault-list-uk4WVboC.js → use-vault-list-CT4-gajj.js} +1 -1
  225. package/src/console/ui-next/dist/assets/vault-page-CWrg-A68.js +2 -0
  226. package/src/console/ui-next/dist/assets/xyflow-CSyC6ryz.css +1 -0
  227. package/src/console/ui-next/dist/assets/xyflow-yApv7D4e.js +7 -0
  228. package/src/console/ui-next/dist/index.html +6 -13
  229. package/src/console/ui-next/seed-invoke-host.ts +21 -18
  230. package/src/console/ui-next/src/client.ts +7 -2
  231. package/src/console/ui-next/src/features/flows/graph/element-map.ts +2 -0
  232. package/src/console/ui-next/src/features/flows/traces/effect-kind.ts +12 -2
  233. package/src/console/ui-next/src/features/flows/traces/effect-summary.ts +4 -0
  234. package/src/console/ui-next/src/features/flows/traces/trace-detail-sheet.tsx +8 -0
  235. package/src/console/ui-next/src/features/flows/traces/waterfall-bars.ts +4 -0
  236. package/src/console/ui-next/src/features/flows/traces/waterfall-tooltip.ts +9 -3
  237. package/src/console/ui-next/src/features/store/detail/reveal-cell.tsx +7 -11
  238. package/src/console/ui-next/src/features/store/detail/store-row-detail-sheet.tsx +2 -2
  239. package/src/console/ui-next/src/features/store/lib/fields-from-table.ts +2 -0
  240. package/src/console/ui-next/src/features/store/lib/grid-model.test.ts +25 -1
  241. package/src/console/ui-next/src/features/store/lib/grid-model.ts +36 -1
  242. package/src/console/ui-next/src/features/store/query/query-results.tsx +3 -3
  243. package/src/console/ui-next/src/features/units/detail/effects-summary.tsx +2 -0
  244. package/src/console/ui-next/src/features/units/lib/call-read-safe.ts +3 -1
  245. package/src/console/ui-next/src/features/units/lib/fields-from-schema.ts +6 -0
  246. package/src/docker/ai-model-status.test.ts +1 -12
  247. package/src/docker/ai-model-status.ts +10 -38
  248. package/src/docker/compose-up.test.ts +100 -0
  249. package/src/docker/compose-up.ts +292 -0
  250. package/src/docker/compose.ts +4 -14
  251. package/src/docker/derive.ts +9 -34
  252. package/src/docker/docker.test.ts +16 -261
  253. package/src/docker/images-config.test.ts +13 -25
  254. package/src/docker/index.ts +1 -24
  255. package/src/docker/recipes/index.ts +0 -23
  256. package/src/docker/recipes/pgdog.ts +6 -4
  257. package/src/docker/stack-id.test.ts +2 -2
  258. package/src/docker/stack-id.ts +0 -1
  259. package/src/docker/types.ts +2 -2
  260. package/src/drivers/ai-anthropic.ts +10 -0
  261. package/src/drivers/ai-openai-compatible.ts +34 -7
  262. package/src/drivers/ai-providers.test.ts +0 -107
  263. package/src/drivers/ai-stream.test.ts +0 -34
  264. package/src/drivers/ai-types.ts +17 -8
  265. package/src/drivers/channel-fcm.ts +6 -1
  266. package/src/drivers/channel-msegat.ts +6 -1
  267. package/src/drivers/channel-resend.ts +5 -1
  268. package/src/drivers/channel-smtp.ts +5 -1
  269. package/src/drivers/channel-sndr.ts +10 -1
  270. package/src/drivers/channel-taqnyat-mail.ts +5 -1
  271. package/src/drivers/channel-taqnyat-whatsapp.ts +6 -1
  272. package/src/drivers/channel-taqnyat.ts +6 -1
  273. package/src/drivers/channel-types.ts +10 -0
  274. package/src/drivers/channel-unifonic.ts +6 -1
  275. package/src/drivers/channel-wa-cloud.ts +6 -1
  276. package/src/drivers/channel-webpush.ts +6 -1
  277. package/src/drivers/external.ts +33 -0
  278. package/src/drivers/index.ts +0 -10
  279. package/src/drivers/meilisearch.ts +6 -0
  280. package/src/drivers/oauth-types.ts +4 -0
  281. package/src/drivers/postgres.test.ts +74 -3
  282. package/src/drivers/postgres.ts +175 -6
  283. package/src/drivers/signal-types.ts +5 -5
  284. package/src/drivers/types.ts +7 -0
  285. package/src/drivers/vault-types.ts +5 -0
  286. package/src/elements/ai/declare.ts +17 -4
  287. package/src/elements/ai/eval.ts +1 -1
  288. package/src/elements/ai/mcp-http.ts +1 -1
  289. package/src/elements/ai/pii.ts +1 -1
  290. package/src/elements/ai/providers.test.ts +289 -0
  291. package/src/elements/ai/providers.ts +169 -0
  292. package/src/elements/ai/runtime.ts +68 -5
  293. package/src/elements/ai/schema.ts +2 -2
  294. package/src/elements/ai.test.ts +7 -7
  295. package/src/elements/ai.ts +17 -1
  296. package/src/elements/channel/runtime.ts +105 -12
  297. package/src/elements/clock/cron-fields.test.ts +144 -0
  298. package/src/elements/clock/cron-fields.ts +185 -0
  299. package/src/elements/clock/declare.ts +247 -3
  300. package/src/elements/clock.ts +21 -1
  301. package/src/elements/index.ts +15 -0
  302. package/src/elements/signal/chaos-child.ts +1 -2
  303. package/src/elements/signal/declare.ts +65 -37
  304. package/src/elements/signal/delivery-modes.test.ts +11 -31
  305. package/src/elements/signal/dry-run-replay.test.ts +1 -7
  306. package/src/elements/signal/dry-run-write-isolation.test.ts +1 -7
  307. package/src/elements/signal/key-ordering.test.ts +6 -26
  308. package/src/elements/signal/lease-reclaim.test.ts +2 -6
  309. package/src/elements/signal/optional-emit.test.ts +6 -9
  310. package/src/elements/signal/order-lifecycle.test.ts +4 -17
  311. package/src/elements/signal/orphan-messages.test.ts +4 -15
  312. package/src/elements/signal/reconcile.test.ts +2 -2
  313. package/src/elements/signal/runtime.ts +1 -1
  314. package/src/elements/signal/schema-emit.test.ts +4 -8
  315. package/src/elements/signal.test.ts +24 -49
  316. package/src/elements/signal.ts +9 -2
  317. package/src/elements/store/domain-ddl.test.ts +1 -1
  318. package/src/elements/store/live-http.test.ts +9 -4
  319. package/src/elements/store/prepare-row.test.ts +123 -0
  320. package/src/elements/store/resource.ts +43 -12
  321. package/src/elements/store/schema-decl.ts +117 -0
  322. package/src/elements/store/search-backfill.ts +205 -0
  323. package/src/elements/store/search-bind.ts +66 -0
  324. package/src/elements/store/search-bm25.ts +78 -0
  325. package/src/elements/store/search-ddl.ts +156 -0
  326. package/src/elements/store/search-embed-flow.ts +141 -0
  327. package/src/elements/store/search-errors.ts +34 -0
  328. package/src/elements/store/search-fusion.ts +112 -0
  329. package/src/elements/store/search-lsh.ts +179 -0
  330. package/src/elements/store/search-runtime.ts +300 -0
  331. package/src/elements/store/search.test.ts +144 -0
  332. package/src/elements/store/sql-session.test.ts +1 -0
  333. package/src/elements/store/sql-session.ts +83 -3
  334. package/src/elements/store/table.ts +23 -2
  335. package/src/elements/store/upsert-app.test.ts +1 -3
  336. package/src/elements/store.ts +50 -0
  337. package/src/full.ts +4 -2
  338. package/src/http.ts +4 -1
  339. package/src/i18n/catalogs/ar.ts +14 -6
  340. package/src/i18n/catalogs/en.ts +14 -6
  341. package/src/index.ts +6 -1
  342. package/src/kernel/adopt-barrel-fresh.test.ts +7 -7
  343. package/src/kernel/adopt-routes.ts +9 -1
  344. package/src/kernel/app-auth.ts +5 -0
  345. package/src/kernel/app.ts +102 -9
  346. package/src/kernel/auto-cache.test.ts +6 -12
  347. package/src/kernel/auto-registry.test.ts +3 -3
  348. package/src/kernel/boot-bind/ai.test.ts +22 -19
  349. package/src/kernel/boot-bind/ai.ts +5 -43
  350. package/src/kernel/boot-bind/clock.ts +23 -5
  351. package/src/kernel/boot-bind/honor-config.test.ts +4 -4
  352. package/src/kernel/boot.test.ts +11 -6
  353. package/src/kernel/boot.ts +66 -16
  354. package/src/kernel/boundary-contract.ts +93 -0
  355. package/src/kernel/budget.test.ts +1 -1
  356. package/src/kernel/call.ts +89 -0
  357. package/src/kernel/capability.ts +6 -0
  358. package/src/kernel/client-descriptor.ts +123 -0
  359. package/src/kernel/clock-timezone.test.ts +80 -0
  360. package/src/kernel/correlation.test.ts +1 -1
  361. package/src/kernel/dry-run.ts +11 -8
  362. package/src/kernel/effects-stamping.test.ts +42 -9
  363. package/src/kernel/effects.test.ts +4 -2
  364. package/src/kernel/effects.ts +51 -9
  365. package/src/kernel/errors-channel.ts +17 -0
  366. package/src/kernel/errors-live-resume.ts +3 -2
  367. package/src/kernel/errors-tenant.ts +7 -4
  368. package/src/kernel/errors.registry-helpers.ts +96 -0
  369. package/src/kernel/errors.registry.test.ts +139 -25
  370. package/src/kernel/errors.ts +102 -23
  371. package/src/kernel/external-effects.test.ts +196 -0
  372. package/src/kernel/flow.test.ts +13 -4
  373. package/src/kernel/flow.ts +69 -71
  374. package/src/kernel/fx-ask-telemetry.test.ts +2 -2
  375. package/src/kernel/fx-dead-letters.test.ts +3 -3
  376. package/src/kernel/fx-fetch.ts +55 -0
  377. package/src/kernel/fx-live-stream.ts +2 -2
  378. package/src/kernel/fx-live.test.ts +8 -8
  379. package/src/kernel/fx.test.ts +17 -11
  380. package/src/kernel/fx.ts +180 -57
  381. package/src/kernel/horizontal-child.ts +1 -1
  382. package/src/kernel/http-query.test.ts +3 -6
  383. package/src/kernel/index.ts +13 -3
  384. package/src/kernel/instance-id.ts +1 -1
  385. package/src/kernel/instances.test.ts +40 -0
  386. package/src/kernel/instances.ts +47 -9
  387. package/src/kernel/live-http.test.ts +6 -7
  388. package/src/kernel/live-http.ts +6 -2
  389. package/src/kernel/live-resume.test.ts +1 -1
  390. package/src/kernel/mcp-tool.test.ts +3 -3
  391. package/src/kernel/on.ts +98 -4
  392. package/src/kernel/pipeline.test.ts +12 -15
  393. package/src/kernel/plugin-elements.test.ts +1 -1
  394. package/src/kernel/stamp-http.test.ts +3 -3
  395. package/src/kernel/triggers.ts +210 -95
  396. package/src/kernel-entry.ts +0 -1
  397. package/src/manifest/diff.ts +11 -1
  398. package/src/manifest/fixtures/skyport.excerpt.json +1 -1
  399. package/src/manifest/types.ts +46 -2
  400. package/src/mcp/docs-index.ts +3 -3
  401. package/src/mcp/docs-mcp.test.ts +2 -2
  402. package/src/mcp/docs-tools.ts +1 -1
  403. package/src/okid.test.ts +56 -0
  404. package/src/okid.ts +55 -11
  405. package/src/plugins/anonymous.ts +8 -4
  406. package/src/plugins/auth/shared.ts +27 -3
  407. package/src/plugins/auth-delivery.mailpit.integration.test.ts +1 -1
  408. package/src/plugins/auth-methods.security.test.ts +561 -23
  409. package/src/plugins/config-source.ts +1 -1
  410. package/src/plugins/csrf.test.ts +65 -0
  411. package/src/plugins/index.ts +2 -0
  412. package/src/plugins/magic-link.ts +36 -16
  413. package/src/plugins/oauth/shared.ts +3 -1
  414. package/src/plugins/oauth.ts +22 -14
  415. package/src/plugins/otp.ts +37 -21
  416. package/src/plugins/passkey-webauthn.ts +9 -6
  417. package/src/plugins/passkey.ts +98 -26
  418. package/src/plugins/pre-account-hijack.test.ts +223 -0
  419. package/src/plugins/two-factor.ts +466 -37
  420. package/src/plugins/username.ts +19 -7
  421. package/src/release/build-lib.ts +1 -0
  422. package/src/release/limits.ts +2 -2
  423. package/src/release/measure.ts +1 -1
  424. package/src/runs/collect.test.ts +0 -2
  425. package/src/runtime/json-code-block.test.ts +250 -20
  426. package/src/runtime/json-code-block.ts +1261 -41
  427. package/src/term.test.ts +1 -1
  428. package/src/test/create-test-app.test.ts +12 -12
  429. package/src/test/live-signals.test.ts +6 -6
  430. package/src/test/provisions.integration.test.ts +10 -14
  431. package/src/test/reset-element-registries.ts +1 -1
  432. package/src/test/tenant-isolation.test.ts +12 -6
  433. package/site/content/docs/deployment/docker-swarm.mdx +0 -164
  434. package/site/content/docs/deployment/docker.mdx +0 -227
  435. package/site/content/docs/deployment/index.mdx +0 -83
  436. package/site/content/docs/deployment/kubernetes.mdx +0 -176
  437. package/site/content/docs/deployment/meta.json +0 -5
  438. package/site/content/docs/deployment/reverse-proxy.mdx +0 -234
  439. package/site/content/docs/elements/ai.mdx +0 -385
  440. package/site/content/docs/elements/channel.mdx +0 -346
  441. package/site/content/docs/elements/clock.mdx +0 -244
  442. package/site/content/docs/elements/flow.mdx +0 -420
  443. package/site/content/docs/elements/gate.mdx +0 -436
  444. package/site/content/docs/elements/signal.mdx +0 -380
  445. package/site/content/docs/elements/store.mdx +0 -1099
  446. package/site/content/docs/elements/vault.mdx +0 -405
  447. package/site/content/docs/get-started/basic-usage.mdx +0 -173
  448. package/site/content/docs/get-started/index.mdx +0 -43
  449. package/site/content/docs/get-started/installation.mdx +0 -220
  450. package/site/content/docs/get-started/introduction.mdx +0 -132
  451. package/site/content/docs/get-started/meta.json +0 -13
  452. package/site/content/docs/get-started/project-structure.mdx +0 -925
  453. package/site/content/docs/get-started/testing.mdx +0 -328
  454. package/site/content/docs/get-started/why.mdx +0 -162
  455. package/site/content/docs/recipes/llama-cpp.mdx +0 -151
  456. package/site/content/docs/recipes/ollama.mdx +0 -142
  457. package/site/content/docs/recipes/sglang.mdx +0 -105
  458. package/site/content/docs/recipes/vllm.mdx +0 -106
  459. package/site/content/docs/reference/cli.md +0 -232
  460. package/site/content/docs/reference/client.mdx +0 -469
  461. package/site/content/docs/reference/security.md +0 -74
  462. package/src/cli/ai-setup/detect-ollama.ts +0 -213
  463. package/src/cli/ai-setup/recommend.test.ts +0 -225
  464. package/src/cli/ai-setup/recommend.ts +0 -225
  465. package/src/cli/dev-controls.test.ts +0 -122
  466. package/src/cli/dev-controls.ts +0 -164
  467. package/src/cli/tui/DevLive.tsx +0 -126
  468. package/src/console/ui-next/dist/assets/access-page-De7Lc2JC.js +0 -4
  469. package/src/console/ui-next/dist/assets/agent-disclosure-BP0Y0Sux.js +0 -1
  470. package/src/console/ui-next/dist/assets/cache-glyph-B5X-NM0-.js +0 -1
  471. package/src/console/ui-next/dist/assets/call-pii-button-ChAUiLo9.js +0 -1
  472. package/src/console/ui-next/dist/assets/collapsible-DGnOM2ph.js +0 -1
  473. package/src/console/ui-next/dist/assets/copy-inline-button-DBHhgHKP.js +0 -1
  474. package/src/console/ui-next/dist/assets/dagre.esm-ZwcdTuZZ.js +0 -1
  475. package/src/console/ui-next/dist/assets/detail-header-DhHM1iaZ.js +0 -1
  476. package/src/console/ui-next/dist/assets/dropdown-menu-_NjTEo5_.js +0 -1
  477. package/src/console/ui-next/dist/assets/duration-tone-sC3lGABz.js +0 -9
  478. package/src/console/ui-next/dist/assets/element-icons-BVXtRyd3.js +0 -1
  479. package/src/console/ui-next/dist/assets/explorer-empty-2uIhBu0_.js +0 -1
  480. package/src/console/ui-next/dist/assets/flows-page-RGy7VEA_.js +0 -1
  481. package/src/console/ui-next/dist/assets/highlighted-json-Awq7gYdu.js +0 -154
  482. package/src/console/ui-next/dist/assets/http-method-_UHM2ODJ.js +0 -1
  483. package/src/console/ui-next/dist/assets/index-Ck88Jmv8.css +0 -2
  484. package/src/console/ui-next/dist/assets/index-_rgpdVzo.js +0 -66
  485. package/src/console/ui-next/dist/assets/link-BX6Vqztd.js +0 -1
  486. package/src/console/ui-next/dist/assets/observability-page-Ds6pcnh-.js +0 -4
  487. package/src/console/ui-next/dist/assets/preload-helper-oH4irX4C.js +0 -1
  488. package/src/console/ui-next/dist/assets/react-D8E3mtu1.js +0 -1
  489. package/src/console/ui-next/dist/assets/react-dom-Bph1y7z7.js +0 -9
  490. package/src/console/ui-next/dist/assets/replica-lag-DKRrbvdo.js +0 -18
  491. package/src/console/ui-next/dist/assets/request-meta-DV0ywz7t.js +0 -1
  492. package/src/console/ui-next/dist/assets/shortcut-JQIZlWfm.js +0 -1
  493. package/src/console/ui-next/dist/assets/shortcut-keys-DKxNTe_m.js +0 -1
  494. package/src/console/ui-next/dist/assets/skeleton-D-czQJT6.js +0 -1
  495. package/src/console/ui-next/dist/assets/store-page-02xOiqIK.js +0 -41
  496. package/src/console/ui-next/dist/assets/trace-detail-sheet-B09O8rA6.js +0 -2
  497. package/src/console/ui-next/dist/assets/tree-expand-toggle-BtyhmWb4.js +0 -55
  498. package/src/console/ui-next/dist/assets/units-page-4rHOePuE.js +0 -1
  499. package/src/console/ui-next/dist/assets/useMutation-B8EO02Ej.js +0 -1
  500. package/src/console/ui-next/dist/assets/useRender-BE2A9BWC.js +0 -1
  501. package/src/console/ui-next/dist/assets/vault-page-DISPgxLM.js +0 -2
  502. package/src/console/ui-next/dist/assets/xyflow-D7n4g6go.js +0 -7
  503. package/src/console/ui-next/dist/assets/xyflow-DZ0Ws1xk.css +0 -1
  504. package/src/docker/ollama-pull.ts +0 -232
  505. package/src/docker/recipes/llama-cpp.ts +0 -298
  506. package/src/docker/recipes/ollama.ts +0 -44
  507. package/src/docker/recipes/sglang.ts +0 -55
  508. package/src/docker/recipes/vllm.ts +0 -44
  509. package/src/drivers/ai-ollama-tools.integration.test.ts +0 -109
  510. package/src/drivers/ai-ollama.integration.test.ts +0 -184
  511. package/src/drivers/ai-ollama.ts +0 -389
  512. package/src/drivers/ollama.ts +0 -14
@@ -0,0 +1,231 @@
1
+ ---
2
+ title: "CLI"
3
+ description: "oke and create-oke commands — scaffold, develop, ship, and operate an okengine app."
4
+ icon: "Terminal"
5
+ source: "docs/spec/unified-theory.md"
6
+ ---
7
+
8
+ The CLI is how you scaffold, run, and operate an app. `create-oke` writes the project;
9
+ `oke` is the day-to-day binary (dev loop, schema, vault, docker, doctor).
10
+
11
+ For developers who already know the model — look up a command, its flags, and what it
12
+ writes.
13
+
14
+ <Callout title="The one rule">
15
+ Prefer the CLI for environment wiring (`oke dev`, `oke db`, `oke docker`). Put behavior in Flows
16
+ and `oke.config.ts` — never invent a ninth element or hand-edit the Manifest.
17
+ </Callout>
18
+
19
+ ## Smallest Example
20
+
21
+ <Steps>
22
+
23
+ <Step>
24
+ ### Scaffold an app
25
+
26
+ ```bash
27
+ bunx create-oke@latest notes --yes
28
+ cd notes
29
+ ```
30
+
31
+ </Step>
32
+
33
+ <Step>
34
+ ### Run the dev loop
35
+
36
+ ```bash
37
+ oke dev
38
+ ```
39
+
40
+ Compose comes up (pull / create / start progress streams into the boot status
41
+ lines), the backend listens on **6530**, Console on **6533**, app MCP on **6535**,
42
+ docs MCP on **6536**. Open `http://localhost:6533`. Quit with **Ctrl+C**.
43
+
44
+ On a TTY, after schema push, `oke dev` also:
45
+
46
+ 1. Prompts one-by-one for any Vault boot gaps (writes `.env.local`) — e.g.
47
+ `OPENROUTER_API_KEY` when create-oke / `oke ai setup` / Keel declared the
48
+ OpenRouter contract without a value.
49
+ 2. Asks to run `oke db seed` when a seed module exists and `.oke/state.json` has
50
+ not recorded that seed identity yet. Run `oke db seed` anytime later.
51
+
52
+ </Step>
53
+
54
+ </Steps>
55
+
56
+ ## Progressive Patterns
57
+
58
+ <Tabs items={["Daily", "Schema", "Ship", "Scaffold"]}>
59
+
60
+ <Tab value="Daily">
61
+
62
+ ```bash
63
+ oke dev # watch · Console · client types · Docker Compose
64
+ oke test # bun test with PGLite posture
65
+ oke doctor # secrets · ports · schema drift
66
+ oke doctor --diff # CI gate: undeclared contract breaks
67
+ ```
68
+
69
+ </Tab>
70
+
71
+ <Tab value="Schema">
72
+
73
+ ```bash
74
+ oke db push # sync domain schema (dev; auto under oke dev)
75
+ oke db generate # versioned SQL under drizzle/
76
+ oke db migrate # apply migrations (prod)
77
+ oke schema generate # core + plugin stub → .oke/schema/oke.ts
78
+ ```
79
+
80
+ **Consequence:** `oke schema generate` is not `oke db generate`. The first writes the
81
+ framework stub; the second emits your app's Drizzle migrations.
82
+
83
+ </Tab>
84
+
85
+ <Tab value="Ship">
86
+
87
+ ```bash
88
+ oke docker --prod # derive production Compose
89
+ oke build --target bun # tree-shaken bundle
90
+ oke start # production entry (Docker CMD)
91
+ ```
92
+
93
+ </Tab>
94
+
95
+ <Tab value="Scaffold">
96
+
97
+ ```bash
98
+ bunx create-oke@latest my-app --yes
99
+ bunx create-oke@latest my-app -t advanced --locales ar --proxy caddy
100
+ bunx create-oke@latest # interactive (TTY only)
101
+ ```
102
+
103
+ </Tab>
104
+
105
+ </Tabs>
106
+
107
+ ## Port Map
108
+
109
+ | Port | Surface | Who starts it |
110
+ | -------- | -------------------- | ----------------------- |
111
+ | **6530** | Backend API | `oke dev` / `oke start` |
112
+ | **6533** | Developer Console | `oke dev` |
113
+ | **6535** | App MCP | `oke dev` |
114
+ | **6536** | Docs MCP (read-only) | `oke dev` |
115
+
116
+ Override app / console / mcp listen ports in `oke.config.ts` `ports` — see
117
+ [Configuration](/docs/reference/configuration#ports).
118
+
119
+ ## `oke` Commands
120
+
121
+ | Command | Purpose | Key flags / subs |
122
+ | ------------ | ------------------------------------------------------------ | --------------------------------------------------------------------------------------------------------------------------------------------------------- |
123
+ | `dev` | Watch · hot reload · Console · client types (Docker Compose) | `--docker\|-d [roles]`, `--no-db-push`, `--entry\|-e` |
124
+ | `test` | Run bun test with PGLite test posture | |
125
+ | `start` | Production entry (Docker CMD) | `--entry\|-e`, `--port\|-p` |
126
+ | `doctor` | Secrets · ports · stub/domain schema drift | `--manifest`, `--diff`, `--before`, `--after`, `--base`, `--json` |
127
+ | `stack` | Preview images / tags / ports (writes nothing) | `--config`, `--json` |
128
+ | `schema` | Core + plugin tables → `.oke/schema/oke.ts` | `generate` (`--check`, `--manifest`, `--out`) |
129
+ | `db` | Domain schema | `push` · `generate` · `migrate` · `seed` · `studio` · `search-backfill` |
130
+ | `client` | Ambient types for a separate frontend repo | `add <url>` (`--out`) |
131
+ | `vault` | Secrets | `set` · `list` · `import` · `key` · `init` · `status` · `seal` · `unseal` · `rotate` · `rotate-master` · `audit` · `purge-expired` · `backup` · `restore` |
132
+ | `docker` | Derive compose · clean leftover stacks | `--prod\|-p`, `--out`, `--config`, `--manifest`; sub `clean` |
133
+ | `images` | List / pin digests | `list` · `pin` |
134
+ | `build` | Tree-shaken bundle | `--target\|-t bun\|node\|edge`, `--entry`, `--outdir` |
135
+ | `eval` | Prompt eval sets (CI gate) | `--manifest` |
136
+ | `ai` | Configure AI driver + models | `setup` (`--provider`, `--chat`, `--vision`, `--embed`, `--yes`) |
137
+ | `branch` | Fork journaled state | `<name>`, `--at\|-a` |
138
+ | `replay` | Re-invoke a past Flow from Runs | `--request-id\|-r`, `--entry`, `--dry-run`, `--live` |
139
+ | `privacy` | Crypto-shred subject data | `erase` (`--subject\|-s`) |
140
+ | `upgrade` | Breaking-change codemods + diff | `--apply\|-a` |
141
+ | `console` | Console helpers | `claim-code` (`--json`) |
142
+ | `gates` | Gate catalogue from Manifest | `list` (`--manifest`, `--json`) |
143
+ | `completion` | Shell completion script | `bash` · `zsh` · `fish` |
144
+ | `mode` | **Deprecated** — `oke dev` always uses Docker Compose | `--help` |
145
+
146
+ Bare `oke` (TTY) opens the interactive board; `oke --help` prints the catalogue.
147
+
148
+ ### `oke db` detail
149
+
150
+ Shared flags on push / generate / migrate / studio: `--config\|-c`, `--env name`
151
+ (`dev` · `test` · `prod`). Seed adds `--force`, `--entry`. Search-backfill adds
152
+ `--batch n` and a `<table>` positional.
153
+
154
+ ```bash
155
+ oke db push --env dev
156
+ oke db migrate --env prod
157
+ oke db seed --force
158
+ oke db search-backfill notes --batch 500
159
+ ```
160
+
161
+ ## `create-oke`
162
+
163
+ | Flag | Meaning |
164
+ | -------------------------------- | --------------------------------------------------------- |
165
+ | `-t, --template <id>` | `standard` (default) or `advanced` |
166
+ | `--sql <id>` | Store SQL dialect — only `postgres` (test stays `pglite`) |
167
+ | `-y, --yes` | No prompts; defaults + bun install (no `oke dev`) |
168
+ | `--install` / `--no-install` | Run or skip `bun install` after scaffold |
169
+ | `--agents-md` / `--no-agents-md` | Write `AGENTS.md` (default on) |
170
+ | `--ai` / `--no-ai` / `--ai skip` | Configure or skip AI setup |
171
+ | `--locales <tags>` | Extra languages beyond English (e.g. `ar` or `ar,fr`) |
172
+ | `--pgdog` / `--no-pgdog` | Pin PgDog in front of Postgres |
173
+ | `--proxy <id>` / `--no-proxy` | `none` · `caddy` · `traefik` · `nginx` |
174
+ | `-h, --help` | Show help |
175
+
176
+ ## Troubleshooting
177
+
178
+ <Accordions>
179
+
180
+ <Accordion title="oke start: no entry found">
181
+ Set `package.json` `okengine.entry` or `main`, pass `--entry`, or keep a conventional
182
+ `src/app.ts`. Production imports that module; the app must call `createBunRuntime().serve` itself.
183
+ </Accordion>
184
+
185
+ <Accordion title="Confusion: oke schema generate vs oke db generate">
186
+ `oke schema generate` emits framework / plugin stub tables under `.oke/schema/`. `oke db generate`
187
+ emits versioned domain SQL via Drizzle. Use `db` for your app tables; use `schema` when the stub
188
+ drifted after a plugin change.
189
+ </Accordion>
190
+
191
+ <Accordion title="oke mode still in muscle memory">
192
+ `oke mode` is deprecated. `oke dev` always starts Docker Compose. There is no soft-compat for old
193
+ `local` / `docker` env map keys — rename to `dev` / `test` / `prod` in
194
+ [Configuration](/docs/reference/configuration).
195
+ </Accordion>
196
+
197
+ <Accordion title="OKE1110 after deploy">
198
+ Domain tables are missing in prod (no auto-DDL). Run `oke db migrate` against that environment —
199
+ see [Errors](/docs/reference/errors).
200
+ </Accordion>
201
+
202
+ <Accordion title="Claim code missing for first Console operator">
203
+ The setup claim code prints on the `oke dev` TTY board and is mirrored to gitignored
204
+ `.oke/claim-code`. Run `oke console claim-code` while setup is open.
205
+ </Accordion>
206
+
207
+ </Accordions>
208
+
209
+ ## Learn more
210
+
211
+ - [Configuration](/docs/reference/configuration) — `oke.config.ts` drivers and ports
212
+ - [Environment Variables](/docs/reference/environment-variables) — what Compose writes
213
+ - [Security](/docs/reference/security) — Host / Origin / `allowedHosts`
214
+ - [The Model](/docs/understand/the-model) — one contract; `oke doctor --diff` reviews it
215
+ - [Vault](/docs/elements/vault) — `oke vault` rotate / unseal
216
+
217
+ ## Next
218
+
219
+ <Cards>
220
+ <Card
221
+ title="Configuration"
222
+ description="Every option in oke.config.ts."
223
+ href="/docs/reference/configuration"
224
+ />
225
+ <Card
226
+ title="Security"
227
+ description="Host, Origin, planes, and MCP posture."
228
+ href="/docs/reference/security"
229
+ />
230
+ <Card title="Client" description="Typed createClient for your flows." href="/docs/client" />
231
+ </Cards>
@@ -2,6 +2,7 @@
2
2
  title: "Configuration"
3
3
  description: "Every option in oke.config.ts — three environments (dev · test · prod), drivers, images, i18n, tenancy, privacy, db sync, topology, ports, and console."
4
4
  icon: "Settings2"
5
+ source: "docs/spec/unified-theory.md"
5
6
  ---
6
7
 
7
8
  Complete reference for `oke.config.ts`. Options below match `defineConfig`. Driver maps use three keys: **dev** · **test** · **prod**.
@@ -14,9 +15,9 @@ export default defineConfig({
14
15
  });
15
16
  ```
16
17
 
17
- <Callout title="Philosophy">
18
- We test on what we deploy. Local development runs the same stack as production via Docker. Tests
19
- use PGLite for speed without sacrificing Postgres correctness.
18
+ <Callout title="The one rule">
19
+ Pin drivers and images in `oke.config.ts` for `dev` · `test` · `prod`. We test on what we deploy:
20
+ Docker-first local stack, PGLite for tests, same protocol ids in production.
20
21
  </Callout>
21
22
 
22
23
  ## Environments
@@ -116,7 +117,7 @@ Built-in defaults (`DRIVER_DEFAULTS`) when a key is omitted:
116
117
  | `channel.sms` | env driver map | `console` · `taqnyat` · `msegat` · `unifonic` |
117
118
  | `channel.whatsapp` | env driver map | `console` · `wa-cloud` |
118
119
  | `channel.push` | env driver map | `console` · `webpush` · `fcm` |
119
- | `ai` | env driver map | `mock` · `anthropic` · `openai-compatible` · `bedrock` · `vertex` · `ollama` |
120
+ | `ai` | env driver map | `mock` · `anthropic` · `openai-compatible` · `bedrock` · `vertex` |
120
121
  | `runs` | env driver map | `memory` · `files` (Parquet + DuckDB at `.oke/runs`) · `postgres` · `clickhouse` |
121
122
  | `prod` | `string[]` | flat protocol list for the Manifest — nested maps are preferred |
122
123
 
@@ -150,11 +151,10 @@ images: {
150
151
  store: {
151
152
  sql: "postgres:18-alpine",
152
153
  kv: "redis:8-alpine",
153
- files: "rustfs/rustfs:1.0.0-rc.2",
154
+ files: "rustfs/rustfs:1.0.0-rc.5",
154
155
  },
155
- channel: { email: "axllent/mailpit:v1.30.7" },
156
- pgdog: "ghcr.io/pgdogdev/pgdog:v0.1.53",
157
- // ai: "ghcr.io/ggml-org/llama.cpp:server-b10450",
156
+ channel: { email: "axllent/mailpit:v1.31.1" },
157
+ pgdog: "ghcr.io/pgdogdev/pgdog:v0.1.57",
158
158
  // proxy: "caddy:2-alpine",
159
159
  },
160
160
  ```
@@ -163,7 +163,10 @@ Omitted image keys mean no container for that role. When both `store.sql` and `p
163
163
 
164
164
  For `store.kv`, pin Redis (default), Valkey, or Dragonfly — driver id stays `redis`.
165
165
  `{ durable: true }` KV lives in SQL (`oke_kv` on `DATABASE_URL`), not a second Redis image.
166
- For `ai`, see [Recipes · AI](/docs/recipes#ai-local--self-hosted). For `proxy`, see [Reverse proxy](/docs/deployment/reverse-proxy).
166
+
167
+ Compose does not manage AI inference — [OpenRouter](/docs/recipes/openrouter) or BYO
168
+ `OKE_AI_URL` ([Models](/docs/elements/ai/models)). For `proxy`, see [Caddy](/docs/recipes/caddy),
169
+ [Traefik](/docs/recipes/traefik), or [nginx](/docs/recipes/nginx).
167
170
 
168
171
  ## i18n
169
172
 
@@ -267,6 +270,23 @@ Domain schema sync for `oke db push | generate | migrate` (Drizzle). Unrelated t
267
270
 
268
271
  ## Learn more
269
272
 
270
- - [CLI Reference](/docs/reference/cli) — `oke dev` · `oke test` · `oke db`
273
+ - [CLI](/docs/reference/cli) — `oke dev` · `oke test` · `oke db`
271
274
  - [Environment Variables](/docs/reference/environment-variables) — URL and secret resolution
272
275
  - [Store](/docs/elements/store) — what the store drivers back
276
+ - [i18n](/docs/reference/i18n) — locale catalogs beyond the config block
277
+
278
+ ## Next
279
+
280
+ <Cards>
281
+ <Card
282
+ title="Environment Variables"
283
+ description="URLs and secrets Compose writes."
284
+ href="/docs/reference/environment-variables"
285
+ />
286
+ <Card title="CLI" description="Commands that honor this config." href="/docs/reference/cli" />
287
+ <Card
288
+ title="Security"
289
+ description="Host, Origin, planes, and MCP ports."
290
+ href="/docs/reference/security"
291
+ />
292
+ </Cards>
@@ -1,12 +1,51 @@
1
1
  ---
2
2
  title: "Environment Variables"
3
- description: "Every environment variable OKE reads — connection URLs, driver overrides, secrets, and CLI flags, grouped by what they configure."
4
- icon: "Terminal"
3
+ description: "Every environment variable OKE reads — connection URLs, driver overrides, secrets, and CLI flags."
4
+ icon: "Variable"
5
+ source: "docs/spec/unified-theory.md"
5
6
  ---
6
7
 
7
- OKE reads environment variables at boot for connection detail and secrets — never for behavior you could declare in `oke.config.ts`. Under `oke dev`, Compose writes these into `.env.local`; this page is the full map.
8
+ OKE reads environment variables at boot for connection detail and secrets — never for
9
+ behavior you could declare in `oke.config.ts`. Under `oke dev`, Compose writes these
10
+ into `.env.local`; this page is the full map.
8
11
 
9
- <Callout title="Precedence">
12
+ <Callout title="The one rule">
13
+ Put drivers, images, and locale lists in `oke.config.ts`. Use env vars for URLs, credentials, and
14
+ runtime posture the host injects — not for inventing new behavior.
15
+ </Callout>
16
+
17
+ ## Smallest Example
18
+
19
+ <Steps>
20
+
21
+ <Step>
22
+ ### Let Compose write the map
23
+
24
+ ```bash
25
+ oke dev
26
+ ```
27
+
28
+ Compose fills `.env.local` with `DATABASE_URL`, Redis, S3, and vault keys for the
29
+ pinned images.
30
+
31
+ </Step>
32
+
33
+ <Step>
34
+ ### Override one URL when needed
35
+
36
+ ```bash
37
+ export DATABASE_URL=postgres://user:pass@db:5432/oke
38
+ ```
39
+
40
+ Conventional names win over `OKE_*` aliases, then built-in defaults.
41
+
42
+ </Step>
43
+
44
+ </Steps>
45
+
46
+ ## Precedence
47
+
48
+ <Callout title="Resolution order">
10
49
  For anything with both an `OKE_*` variable and a conventional one (like `DATABASE_URL`), the
11
50
  conventional variable wins first, then the `OKE_*` form, then the built-in default.
12
51
  </Callout>
@@ -101,10 +140,11 @@ Read when `drivers.channel.sms` resolves to that driver id (`console` opens noth
101
140
  WhatsApp (`wa-cloud`) and push (`webpush` / `fcm`) are not opened from env at
102
141
  boot — pass them on `BootOptions.channel.drivers` with their open options.
103
142
 
104
- ## Live test gates (opt-in)
143
+ ## Live test gates (opt-in, contributors)
105
144
 
106
- Provider-quota-burning live suites are double-gated: the medium flag **plus** that
107
- provider's real credentials — credentials alone never send.
145
+ Provider-quota-burning live suites in the okengine repo are double-gated: the
146
+ medium flag **plus** that provider's real credentials — credentials alone never
147
+ send. App projects can ignore these.
108
148
 
109
149
  | Variable | Used for |
110
150
  | ---------------- | --------------------------------------------------------- |
@@ -113,18 +153,17 @@ provider's real credentials — credentials alone never send.
113
153
 
114
154
  ## AI providers
115
155
 
116
- | Variable | Used for | Default when unset |
117
- | --------------------- | ------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------- |
118
- | `ANTHROPIC_API_KEY` | `anthropic` driver credential | — |
119
- | `ANTHROPIC_MODEL` | Model override for the anthropic driver | — |
120
- | `OPENAI_API_KEY` | `openai-compatible` driver credential | — |
121
- | `OPENAI_BASE_URL` | `openai-compatible` base URL | OpenAI cloud |
122
- | `OKE_AI_DRIVER` | Force the AI driver id (honoured under Compose / `oke dev`) | config map |
123
- | `OKE_AI_URL` | Local / openai-compatible base URL | `http://127.0.0.1:8080/v1` (llama.cpp) · `http://127.0.0.1:11434` (ollama) |
124
- | `OKE_AI_MODEL` | Default model id — Docker Hub `ai/` for llama.cpp; Ollama library tag for ollama; HF id for vLLM/SGLang | `granite3.3:2b` (llama.cpp) / `qwen3.5:9b` (ollama) |
125
- | `OKE_AI_VISION_MODEL` | Vision model id written by `oke ai setup` (logical `ai.model("vision")`) | — |
126
- | `OKE_AI_EMBED_MODEL` | Embedding model id written by `oke ai setup` | — |
127
- | `OLLAMA_HOST` | Alternate Ollama host (`host:port` or URL) when `OKE_AI_URL` is unset | — |
156
+ | Variable | Used for | Default when unset |
157
+ | --------------------- | --------------------------------------------------------------------------------------- | ------------------ |
158
+ | `ANTHROPIC_API_KEY` | `anthropic` driver credential | — |
159
+ | `ANTHROPIC_MODEL` | Model override for the anthropic driver | — |
160
+ | `OPENAI_API_KEY` | `openai-compatible` driver credential | — |
161
+ | `OPENAI_BASE_URL` | `openai-compatible` base URL | OpenAI cloud |
162
+ | `OKE_AI_DRIVER` | Force the AI driver id (honoured under Compose / `oke dev`) | config map |
163
+ | `OKE_AI_URL` | openai-compatible base URL (must end in `/v1`) BYO; Compose does not manage inference | — |
164
+ | `OKE_AI_MODEL` | Default model id for openai-compatible / setup bindings | |
165
+ | `OKE_AI_VISION_MODEL` | Vision model id written by `oke ai setup` (logical `ai.model("vision")`) | — |
166
+ | `OKE_AI_EMBED_MODEL` | Embedding model id written by `oke ai setup` | — |
128
167
 
129
168
  ## Framework behavior
130
169
 
@@ -145,8 +184,42 @@ Console operator rows are **not** stored in `.oke/console.sqlite`. With `DATABAS
145
184
  `OKE_STORE_SQL_URL`) they live in Postgres schema `oke_console`. Without a Postgres URL,
146
185
  Console uses PGlite under `.oke/console-pg` for local reopen durability.
147
186
 
187
+ ## Troubleshooting
188
+
189
+ <Accordions>
190
+
191
+ <Accordion title="Compose did not write .env.local">
192
+ Run `oke dev` (not a bare `bun` entry) so Compose posture sets `OKE_DOCKER=1` and writes
193
+ connection URLs. Confirm `images` pins exist in [Configuration](/docs/reference/configuration).
194
+ </Accordion>
195
+
196
+ <Accordion title="Vault sealed / missing master key">
197
+ Built-in vault needs `OKE_VAULT_MASTER_KEY` (or `oke vault unseal`). See
198
+ [Vault](/docs/elements/vault).
199
+ </Accordion>
200
+
201
+ <Accordion title="Console operator store missing">
202
+ Operator rows need `DATABASE_URL` or `OKE_STORE_SQL_URL` (schema `oke_console`). Without Postgres,
203
+ Console uses PGlite under `.oke/console-pg`.
204
+ </Accordion>
205
+
206
+ </Accordions>
207
+
148
208
  ## Learn more
149
209
 
150
210
  - [Configuration](/docs/reference/configuration) — the declarative side of the same knobs
151
211
  - [Vault](/docs/elements/vault) — how `OKE_VAULT_*` gets minted on first boot
152
- - [CLI Reference](/docs/reference/cli) — which commands write these for you
212
+ - [CLI](/docs/reference/cli) — which commands write these for you
213
+ - [Security](/docs/reference/security) — `OKE_CONSOLE_SECRET`
214
+
215
+ ## Next
216
+
217
+ <Cards>
218
+ <Card
219
+ title="Configuration"
220
+ description="Drivers and images in oke.config.ts."
221
+ href="/docs/reference/configuration"
222
+ />
223
+ <Card title="CLI" description="oke dev writes the env map." href="/docs/reference/cli" />
224
+ <Card title="Vault" description="Master key and managed providers." href="/docs/elements/vault" />
225
+ </Cards>