okengine 0.2.6 → 0.3.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (681) hide show
  1. package/AGENTS.md +33 -30
  2. package/README.md +74 -340
  3. package/{spec/manifest.v1.schema.json → manifest.v1.schema.json} +40 -9
  4. package/package.json +47 -44
  5. package/site/content/docs/ai/llms-txt.mdx +54 -0
  6. package/site/content/docs/ai/mcp.mdx +123 -0
  7. package/site/content/docs/ai/meta.json +5 -0
  8. package/site/content/docs/ai/skills.mdx +53 -0
  9. package/site/content/docs/console/access.mdx +29 -0
  10. package/site/content/docs/console/ai.mdx +35 -0
  11. package/site/content/docs/console/architecture.mdx +35 -0
  12. package/site/content/docs/console/channels.mdx +37 -0
  13. package/site/content/docs/console/clock.mdx +31 -0
  14. package/site/content/docs/console/flows.mdx +31 -0
  15. package/site/content/docs/console/gates.mdx +35 -0
  16. package/site/content/docs/console/manifest-diff.mdx +34 -0
  17. package/site/content/docs/console/meta.json +23 -0
  18. package/site/content/docs/console/overview.mdx +40 -0
  19. package/site/content/docs/console/plugins.mdx +41 -0
  20. package/site/content/docs/console/privacy.mdx +32 -0
  21. package/site/content/docs/console/runs.mdx +40 -0
  22. package/site/content/docs/console/signals.mdx +31 -0
  23. package/site/content/docs/console/store.mdx +32 -0
  24. package/site/content/docs/console/tenancy.mdx +32 -0
  25. package/site/content/docs/console/traces.mdx +34 -0
  26. package/site/content/docs/console/vault.mdx +37 -0
  27. package/site/content/docs/elements/ai.mdx +180 -0
  28. package/site/content/docs/elements/channel.mdx +167 -0
  29. package/site/content/docs/elements/clock.mdx +182 -0
  30. package/site/content/docs/elements/flow.mdx +288 -0
  31. package/site/content/docs/elements/gate.mdx +171 -0
  32. package/site/content/docs/elements/meta.json +5 -0
  33. package/site/content/docs/elements/signal.mdx +171 -0
  34. package/site/content/docs/elements/store.mdx +320 -0
  35. package/site/content/docs/elements/vault.mdx +263 -0
  36. package/site/content/docs/get-started/basic-usage.mdx +124 -0
  37. package/site/content/docs/get-started/comparison.mdx +65 -0
  38. package/site/content/docs/get-started/installation.mdx +113 -0
  39. package/site/content/docs/get-started/introduction.mdx +123 -0
  40. package/site/content/docs/get-started/meta.json +5 -0
  41. package/site/content/docs/index.mdx +63 -0
  42. package/site/content/docs/meta.json +5 -0
  43. package/site/content/docs/plugins/compression.mdx +60 -0
  44. package/site/content/docs/plugins/cors.mdx +92 -0
  45. package/site/content/docs/plugins/csrf.mdx +96 -0
  46. package/site/content/docs/plugins/ip-allowlist.mdx +92 -0
  47. package/site/content/docs/plugins/maintenance-mode.mdx +101 -0
  48. package/site/content/docs/plugins/meta.json +15 -0
  49. package/site/content/docs/plugins/security-headers.mdx +136 -0
  50. package/site/content/docs/reference/cli.md +101 -0
  51. package/site/content/docs/reference/configuration.mdx +159 -0
  52. package/site/content/docs/reference/environment-variables.mdx +87 -0
  53. package/site/content/docs/reference/errors.mdx +80 -0
  54. package/site/content/docs/reference/fx.mdx +117 -0
  55. package/site/content/docs/reference/meta.json +5 -0
  56. package/site/content/docs/reference/plugins.mdx +249 -0
  57. package/site/content/docs/reference/security.md +63 -0
  58. package/src/auth/api-keys.ts +2 -5
  59. package/src/auth/attenuation.ts +2 -6
  60. package/src/auth/auth.test.ts +56 -31
  61. package/src/auth/invoke-as.ts +1 -3
  62. package/src/auth/operator.ts +8 -26
  63. package/src/auth/planes.ts +2 -7
  64. package/src/auth/plugin.ts +4 -7
  65. package/src/auth/roles.ts +1 -5
  66. package/src/auth/sessions.ts +10 -39
  67. package/src/cli/args.ts +1 -5
  68. package/src/cli/ask-dev-mode.ts +40 -0
  69. package/src/cli/build.ts +1 -2
  70. package/src/cli/client-add.test.ts +8 -15
  71. package/src/cli/client-add.ts +5 -14
  72. package/src/cli/completion.test.ts +1 -5
  73. package/src/cli/completion.ts +4 -17
  74. package/src/cli/db-auto-push.test.ts +64 -0
  75. package/src/cli/db-auto-push.ts +72 -0
  76. package/src/cli/db.test.ts +189 -0
  77. package/src/cli/db.ts +456 -0
  78. package/src/cli/dev-app-runner.ts +2 -8
  79. package/src/cli/dev-db-push.test.ts +193 -0
  80. package/src/cli/dev-mode.test.ts +45 -0
  81. package/src/cli/dev-mode.ts +78 -0
  82. package/src/cli/dev-schema-sync.test.ts +66 -0
  83. package/src/cli/dev-schema-sync.ts +139 -0
  84. package/src/cli/dev.test.ts +264 -15
  85. package/src/cli/dev.ts +355 -139
  86. package/src/cli/doc-staleness.test.ts +69 -0
  87. package/src/cli/docker-cli.test.ts +27 -8
  88. package/src/cli/docker.ts +11 -3
  89. package/src/cli/doctor-diff.test.ts +1 -5
  90. package/src/cli/doctor-diff.ts +17 -46
  91. package/src/cli/doctor-pii.ts +2 -7
  92. package/src/cli/doctor.test.ts +26 -4
  93. package/src/cli/doctor.ts +35 -11
  94. package/src/cli/drizzle-env.test.ts +67 -0
  95. package/src/cli/drizzle-env.ts +78 -0
  96. package/src/cli/ensure-drizzle-config.ts +50 -0
  97. package/src/cli/eval.ts +4 -14
  98. package/src/cli/gates-list.ts +1 -4
  99. package/src/cli/hero-meta.test.ts +17 -19
  100. package/src/cli/hero-meta.ts +20 -30
  101. package/src/cli/images.ts +3 -8
  102. package/src/cli/index.ts +11 -2
  103. package/src/cli/load-config.images.test.ts +14 -14
  104. package/src/cli/load-config.ts +47 -47
  105. package/src/cli/mcp-from-console.ts +1 -4
  106. package/src/cli/mode.ts +65 -0
  107. package/src/cli/openbao-bootstrap.test.ts +147 -0
  108. package/src/cli/openbao-bootstrap.ts +280 -0
  109. package/src/cli/openbao-restart.integration.test.ts +136 -0
  110. package/src/cli/ports.test.ts +7 -14
  111. package/src/cli/ports.ts +7 -5
  112. package/src/cli/privacy-erase.ts +1 -3
  113. package/src/cli/registry.ts +75 -25
  114. package/src/cli/resolve-dev-sql-env.test.ts +48 -0
  115. package/src/cli/resolve-dev-sql-env.ts +42 -0
  116. package/src/cli/schema.ts +3 -10
  117. package/src/cli/stack.ts +8 -10
  118. package/src/cli/start.ts +4 -15
  119. package/src/cli/upgrade.ts +1 -4
  120. package/src/cli/vault-cmd.ts +63 -0
  121. package/src/client/budget-entry.ts +1 -6
  122. package/src/client/create.test.ts +6 -12
  123. package/src/client/create.ts +2 -8
  124. package/src/client/errors.ts +1 -4
  125. package/src/client/index.ts +1 -6
  126. package/src/client/notes-contract.test.ts +4 -13
  127. package/src/client/transport.ts +9 -30
  128. package/src/client/types.ts +15 -30
  129. package/src/compiler/aot.test.ts +2 -9
  130. package/src/compiler/aot.ts +1 -4
  131. package/src/compiler/differential.test.ts +3 -11
  132. package/src/compiler/dynamic.ts +1 -4
  133. package/src/compiler/effects-infer.ts +8 -34
  134. package/src/compiler/emit.ts +1 -3
  135. package/src/compiler/extract.test.ts +136 -30
  136. package/src/compiler/extract.ts +485 -157
  137. package/src/compiler/fixtures/skyport/oke.config.ts +3 -3
  138. package/src/compiler/fixtures/skyport/src/flows/bookings/index.ts +7 -3
  139. package/src/compiler/fixtures/skyport/src/flows/payments/index.ts +1 -3
  140. package/src/compiler/fixtures/skyport/src/flows/support/index.ts +4 -1
  141. package/src/compiler/fixtures/skyport.expected.json +24 -83
  142. package/src/compiler/fixtures/triggers/five-triggers.ts +1 -2
  143. package/src/compiler/http-parse.ts +2 -9
  144. package/src/compiler/index.ts +1 -5
  145. package/src/compiler/response.ts +16 -7
  146. package/src/compiler/sucrose.ts +11 -31
  147. package/src/config/define-config.test.ts +55 -34
  148. package/src/config/index.ts +177 -46
  149. package/src/config/resolve-driver.test.ts +28 -17
  150. package/src/console/budget.test.ts +1 -4
  151. package/src/console/index.ts +1 -4
  152. package/src/console/server/access.test.ts +15 -43
  153. package/src/console/server/access.ts +19 -49
  154. package/src/console/server/ai.test.ts +3 -11
  155. package/src/console/server/ai.ts +23 -46
  156. package/src/console/server/app.ts +16 -45
  157. package/src/console/server/auth-rate.test.ts +4 -12
  158. package/src/console/server/bind.ts +1 -5
  159. package/src/console/server/channels.test.ts +2 -6
  160. package/src/console/server/channels.ts +10 -35
  161. package/src/console/server/claim.ts +2 -8
  162. package/src/console/server/clock.test.ts +2 -6
  163. package/src/console/server/clock.ts +8 -26
  164. package/src/console/server/console.test.ts +1 -3
  165. package/src/console/server/diff.test.ts +5 -17
  166. package/src/console/server/diff.ts +10 -31
  167. package/src/console/server/dry-run.audit.test.ts +2 -8
  168. package/src/console/server/flows.ts +64 -233
  169. package/src/console/server/gates.test.ts +14 -50
  170. package/src/console/server/gates.ts +13 -48
  171. package/src/console/server/index.ts +2 -9
  172. package/src/console/server/live.ts +3 -12
  173. package/src/console/server/operator-db.test.ts +4 -15
  174. package/src/console/server/operator-db.ts +13 -32
  175. package/src/console/server/plugin.ts +50 -53
  176. package/src/console/server/plugins.test.ts +2 -6
  177. package/src/console/server/plugins.ts +17 -56
  178. package/src/console/server/runs-pii.ts +2 -7
  179. package/src/console/server/security.gate.test.ts +18 -40
  180. package/src/console/server/serve.ts +10 -25
  181. package/src/console/server/signals.test.ts +1 -3
  182. package/src/console/server/signals.ts +17 -40
  183. package/src/console/server/state.ts +21 -59
  184. package/src/console/server/store.test.ts +20 -22
  185. package/src/console/server/store.ts +31 -76
  186. package/src/console/server/vault.test.ts +12 -29
  187. package/src/console/server/vault.ts +44 -66
  188. package/src/console/ui/access/AccessA11yView.tsx +6 -21
  189. package/src/console/ui/access/a11y.test.tsx +3 -12
  190. package/src/console/ui/access/acknowledgement.test.ts +1 -4
  191. package/src/console/ui/access/acknowledgement.ts +1 -3
  192. package/src/console/ui/access/blast-radius.ts +1 -3
  193. package/src/console/ui/access/confirmation.test.ts +1 -5
  194. package/src/console/ui/access/confirmation.ts +1 -4
  195. package/src/console/ui/access/fixture.ts +1 -5
  196. package/src/console/ui/access/grantable.test.ts +1 -3
  197. package/src/console/ui/access/grantable.ts +2 -7
  198. package/src/console/ui/access/index.ts +2 -9
  199. package/src/console/ui/access/provenance.test.ts +1 -3
  200. package/src/console/ui/access/provenance.ts +2 -6
  201. package/src/console/ui/access/search.test.ts +1 -5
  202. package/src/console/ui/access/search.ts +2 -6
  203. package/src/console/ui/ai/AiA11yView.tsx +6 -17
  204. package/src/console/ui/ai/a11y.test.tsx +2 -5
  205. package/src/console/ui/ai/fixture.ts +2 -7
  206. package/src/console/ui/ai/format.ts +1 -3
  207. package/src/console/ui/ai/group.test.ts +1 -3
  208. package/src/console/ui/ai/group.ts +4 -12
  209. package/src/console/ui/ai/index.ts +2 -9
  210. package/src/console/ui/ai/promotion.test.ts +2 -7
  211. package/src/console/ui/ai/promotion.ts +4 -13
  212. package/src/console/ui/ai/search.test.ts +2 -11
  213. package/src/console/ui/ai/search.ts +3 -13
  214. package/src/console/ui/ai/types.ts +1 -8
  215. package/src/console/ui/architecture/ArchitectureA11yView.tsx +8 -29
  216. package/src/console/ui/architecture/a11y.test.tsx +1 -2
  217. package/src/console/ui/architecture/declared.ts +1 -5
  218. package/src/console/ui/architecture/index.ts +7 -35
  219. package/src/console/ui/architecture/layout.ts +1 -3
  220. package/src/console/ui/architecture/pathologies.ts +10 -19
  221. package/src/console/ui/architecture/search.ts +6 -15
  222. package/src/console/ui/architecture/traffic.ts +4 -14
  223. package/src/console/ui/architecture/types.ts +2 -10
  224. package/src/console/ui/architecture/view.test.ts +7 -19
  225. package/src/console/ui/architecture/view.ts +9 -36
  226. package/src/console/ui/channels/ChannelsA11yView.tsx +4 -13
  227. package/src/console/ui/channels/a11y.test.tsx +1 -2
  228. package/src/console/ui/channels/confirmation.test.ts +1 -4
  229. package/src/console/ui/channels/confirmation.ts +1 -4
  230. package/src/console/ui/channels/findings.ts +1 -5
  231. package/src/console/ui/channels/index.ts +2 -8
  232. package/src/console/ui/channels/locale.test.ts +1 -3
  233. package/src/console/ui/channels/locale.ts +2 -8
  234. package/src/console/ui/channels/search.ts +4 -13
  235. package/src/console/ui/channels/taxonomy.ts +1 -3
  236. package/src/console/ui/clock/ClockA11yView.tsx +9 -26
  237. package/src/console/ui/clock/a11y.test.tsx +2 -5
  238. package/src/console/ui/clock/confirmation.test.ts +1 -3
  239. package/src/console/ui/clock/confirmation.ts +1 -4
  240. package/src/console/ui/clock/findings.ts +1 -4
  241. package/src/console/ui/clock/health.ts +2 -7
  242. package/src/console/ui/clock/index.ts +2 -10
  243. package/src/console/ui/clock/search.test.ts +1 -3
  244. package/src/console/ui/clock/search.ts +2 -6
  245. package/src/console/ui/clock/timeline.test.ts +1 -3
  246. package/src/console/ui/clock/waiting-on.test.ts +1 -5
  247. package/src/console/ui/clock/waiting-on.ts +2 -7
  248. package/src/console/ui/diff/DiffA11yView.tsx +8 -17
  249. package/src/console/ui/diff/a11y.test.tsx +2 -5
  250. package/src/console/ui/diff/group.test.ts +3 -13
  251. package/src/console/ui/diff/group.ts +2 -8
  252. package/src/console/ui/diff/index.ts +2 -8
  253. package/src/console/ui/diff/search.test.ts +1 -5
  254. package/src/console/ui/diff/search.ts +4 -16
  255. package/src/console/ui/diff/summary.ts +1 -2
  256. package/src/console/ui/dist/assets/{index-Dy4jht9P.js → index-BWo8R7NR.js} +2 -2
  257. package/src/console/ui/dist/assets/{panel-access-Dd37LU2c.js → panel-access-C0J2D-a2.js} +1 -1
  258. package/src/console/ui/dist/assets/{panel-ai-CC7LR6-J.js → panel-ai-D_m6WQI8.js} +1 -1
  259. package/src/console/ui/dist/assets/{panel-architecture-B5b3iKCz.js → panel-architecture-CKnXFyUx.js} +1 -1
  260. package/src/console/ui/dist/assets/{panel-channels-CeNjTKXp.js → panel-channels-BOmQ-onL.js} +1 -1
  261. package/src/console/ui/dist/assets/{panel-clock-DgFTLoHV.js → panel-clock-giAq0Ccv.js} +1 -1
  262. package/src/console/ui/dist/assets/{panel-diff-DxehccqB.js → panel-diff-cdonmH8c.js} +1 -1
  263. package/src/console/ui/dist/assets/{panel-flows-BtrVn-Eg.js → panel-flows-DlCU5zjA.js} +2 -2
  264. package/src/console/ui/dist/assets/{panel-gates-Z9MKRGdH.js → panel-gates-XclZxWD5.js} +1 -1
  265. package/src/console/ui/dist/assets/{panel-overview-Dt_AeXgd.js → panel-overview-BznEOTnb.js} +1 -1
  266. package/src/console/ui/dist/assets/{panel-plugins-DWd0TowH.js → panel-plugins-CcGM1g64.js} +1 -1
  267. package/src/console/ui/dist/assets/{panel-runs-DGstFHeq.js → panel-runs-CGWNHLR4.js} +1 -1
  268. package/src/console/ui/dist/assets/{panel-signals-DzEa2Fnt.js → panel-signals-CNywkdak.js} +1 -1
  269. package/src/console/ui/dist/assets/{panel-store-BJkbNgxx.js → panel-store-KmTbFHMH.js} +1 -1
  270. package/src/console/ui/dist/assets/{panel-traces-BaRVO3gM.js → panel-traces-DBLx2ilD.js} +1 -1
  271. package/src/console/ui/dist/assets/panel-vault-CEnFc0dk.js +1 -0
  272. package/src/console/ui/dist/index.html +1 -1
  273. package/src/console/ui/flows/FlowsA11yView.tsx +7 -22
  274. package/src/console/ui/flows/a11y.test.tsx +2 -8
  275. package/src/console/ui/flows/buffer.test.ts +3 -11
  276. package/src/console/ui/flows/buffer.ts +4 -11
  277. package/src/console/ui/flows/confirmation.ts +1 -3
  278. package/src/console/ui/flows/contract.test.ts +3 -7
  279. package/src/console/ui/flows/contract.ts +12 -36
  280. package/src/console/ui/flows/graph.test.ts +3 -11
  281. package/src/console/ui/flows/graph.ts +5 -15
  282. package/src/console/ui/flows/index.ts +1 -6
  283. package/src/console/ui/flows/save-as-test.ts +1 -3
  284. package/src/console/ui/flows/search.ts +8 -25
  285. package/src/console/ui/flows/tiers.ts +2 -9
  286. package/src/console/ui/gates/GatesA11yView.tsx +4 -13
  287. package/src/console/ui/gates/a11y.test.tsx +2 -5
  288. package/src/console/ui/gates/audit.ts +1 -3
  289. package/src/console/ui/gates/denial.test.ts +1 -3
  290. package/src/console/ui/gates/denial.ts +4 -12
  291. package/src/console/ui/gates/findings.ts +1 -3
  292. package/src/console/ui/gates/group.test.ts +3 -3
  293. package/src/console/ui/gates/group.ts +3 -11
  294. package/src/console/ui/gates/index.ts +2 -10
  295. package/src/console/ui/gates/search.ts +3 -10
  296. package/src/console/ui/overview/OverviewA11yView.tsx +9 -27
  297. package/src/console/ui/overview/a11y.test.tsx +1 -2
  298. package/src/console/ui/overview/busiest.ts +1 -3
  299. package/src/console/ui/overview/compose.ts +1 -13
  300. package/src/console/ui/overview/cost.ts +34 -38
  301. package/src/console/ui/overview/fixture.ts +21 -26
  302. package/src/console/ui/overview/golden.ts +4 -14
  303. package/src/console/ui/overview/index.ts +2 -9
  304. package/src/console/ui/overview/rank.test.ts +3 -10
  305. package/src/console/ui/overview/rank.ts +2 -7
  306. package/src/console/ui/overview/slo.test.ts +5 -9
  307. package/src/console/ui/overview/slo.ts +6 -23
  308. package/src/console/ui/overview/verdict.ts +3 -10
  309. package/src/console/ui/plugins/PluginsA11yView.tsx +8 -18
  310. package/src/console/ui/plugins/a11y.test.tsx +1 -2
  311. package/src/console/ui/plugins/fixture.ts +2 -4
  312. package/src/console/ui/plugins/group.test.ts +1 -3
  313. package/src/console/ui/plugins/group.ts +1 -6
  314. package/src/console/ui/plugins/index.ts +3 -13
  315. package/src/console/ui/plugins/search.ts +7 -19
  316. package/src/console/ui/runs/RunsA11yView.tsx +5 -20
  317. package/src/console/ui/runs/a11y.test.tsx +2 -5
  318. package/src/console/ui/runs/explain.ts +2 -6
  319. package/src/console/ui/runs/group.ts +3 -12
  320. package/src/console/ui/runs/histogram.test.ts +2 -11
  321. package/src/console/ui/runs/histogram.ts +1 -4
  322. package/src/console/ui/runs/index.ts +4 -18
  323. package/src/console/ui/runs/project.ts +2 -6
  324. package/src/console/ui/runs/query.test.ts +1 -3
  325. package/src/console/ui/runs/query.ts +12 -35
  326. package/src/console/ui/runs/search.ts +5 -19
  327. package/src/console/ui/runs/trace-link.test.ts +2 -6
  328. package/src/console/ui/runs/trace-link.ts +4 -16
  329. package/src/console/ui/runs/types.ts +1 -3
  330. package/src/console/ui/shell/App.tsx +2 -10
  331. package/src/console/ui/shell/client.ts +22 -115
  332. package/src/console/ui/shell/components/ui.tsx +1 -4
  333. package/src/console/ui/shell/layout/Shell.tsx +2 -4
  334. package/src/console/ui/shell/main.tsx +31 -96
  335. package/src/console/ui/shell/panels/access/AccessPanel.tsx +34 -98
  336. package/src/console/ui/shell/panels/ai/AiPanel.tsx +35 -106
  337. package/src/console/ui/shell/panels/architecture/ArchitecturePanel.tsx +18 -66
  338. package/src/console/ui/shell/panels/channels/ChannelsPanel.tsx +20 -57
  339. package/src/console/ui/shell/panels/clock/ClockPanel.tsx +22 -54
  340. package/src/console/ui/shell/panels/diff/DiffPanel.tsx +20 -61
  341. package/src/console/ui/shell/panels/flows/ContractEditor.tsx +6 -23
  342. package/src/console/ui/shell/panels/flows/FlowDrawer.tsx +13 -28
  343. package/src/console/ui/shell/panels/flows/FlowsPanel.tsx +9 -29
  344. package/src/console/ui/shell/panels/gates/GatesPanel.tsx +24 -80
  345. package/src/console/ui/shell/panels/overview/OverviewPanel.tsx +20 -58
  346. package/src/console/ui/shell/panels/plugins/PluginsPanel.tsx +16 -41
  347. package/src/console/ui/shell/panels/runs/RunsPanel.tsx +31 -99
  348. package/src/console/ui/shell/panels/signals/SignalsPanel.tsx +38 -101
  349. package/src/console/ui/shell/panels/store/StorePanel.tsx +27 -66
  350. package/src/console/ui/shell/panels/traces/TracesPanel.tsx +28 -89
  351. package/src/console/ui/shell/panels/vault/VaultPanel.tsx +22 -53
  352. package/src/console/ui/shell/setup/Wizard.tsx +3 -5
  353. package/src/console/ui/shell/styles.css +1 -2
  354. package/src/console/ui/signals/SignalsA11yView.tsx +9 -33
  355. package/src/console/ui/signals/a11y.test.tsx +2 -5
  356. package/src/console/ui/signals/confirmation.test.ts +1 -5
  357. package/src/console/ui/signals/confirmation.ts +2 -6
  358. package/src/console/ui/signals/dry-run.ts +1 -3
  359. package/src/console/ui/signals/durable.ts +1 -3
  360. package/src/console/ui/signals/findings.ts +1 -3
  361. package/src/console/ui/signals/group.test.ts +2 -8
  362. package/src/console/ui/signals/group.ts +2 -10
  363. package/src/console/ui/signals/index.ts +1 -4
  364. package/src/console/ui/signals/monitor.ts +2 -7
  365. package/src/console/ui/signals/schema-form.test.ts +3 -14
  366. package/src/console/ui/signals/schema-form.ts +1 -4
  367. package/src/console/ui/signals/search.ts +4 -13
  368. package/src/console/ui/store/StoreA11yView.tsx +3 -9
  369. package/src/console/ui/store/a11y.test.tsx +2 -5
  370. package/src/console/ui/store/confirmation.test.ts +1 -3
  371. package/src/console/ui/store/confirmation.ts +1 -4
  372. package/src/console/ui/store/dry-run.ts +2 -5
  373. package/src/console/ui/store/fixture.ts +1 -2
  374. package/src/console/ui/store/group.test.ts +1 -6
  375. package/src/console/ui/store/group.ts +1 -4
  376. package/src/console/ui/store/index.ts +1 -5
  377. package/src/console/ui/store/search.ts +2 -6
  378. package/src/console/ui/store/will-not-fire.ts +1 -2
  379. package/src/console/ui/traces/TracesA11yView.tsx +10 -29
  380. package/src/console/ui/traces/a11y.test.tsx +1 -2
  381. package/src/console/ui/traces/chain.test.ts +5 -19
  382. package/src/console/ui/traces/chain.ts +1 -3
  383. package/src/console/ui/traces/critical-path.test.ts +1 -3
  384. package/src/console/ui/traces/critical-path.ts +2 -6
  385. package/src/console/ui/traces/filter.test.ts +2 -6
  386. package/src/console/ui/traces/filter.ts +5 -13
  387. package/src/console/ui/traces/fold.test.ts +4 -12
  388. package/src/console/ui/traces/fold.ts +1 -3
  389. package/src/console/ui/traces/mini.ts +1 -3
  390. package/src/console/ui/traces/replay.test.ts +1 -3
  391. package/src/console/ui/traces/replay.ts +1 -3
  392. package/src/console/ui/traces/sampling.ts +1 -4
  393. package/src/console/ui/traces/search.ts +4 -17
  394. package/src/console/ui/traces/tier.ts +1 -3
  395. package/src/console/ui/vault/VaultA11yView.tsx +5 -17
  396. package/src/console/ui/vault/a11y.test.tsx +1 -2
  397. package/src/console/ui/vault/blast-radius.ts +1 -3
  398. package/src/console/ui/vault/confirmation.test.ts +1 -5
  399. package/src/console/ui/vault/confirmation.ts +1 -4
  400. package/src/console/ui/vault/dormant.test.ts +1 -4
  401. package/src/console/ui/vault/export-safe.test.ts +1 -5
  402. package/src/console/ui/vault/export-safe.ts +1 -4
  403. package/src/console/ui/vault/fixture.ts +3 -3
  404. package/src/console/ui/vault/group.ts +1 -2
  405. package/src/console/ui/vault/index.ts +2 -10
  406. package/src/console/ui/vault/search.ts +2 -6
  407. package/src/console/ui/vault/types.ts +1 -1
  408. package/src/console/xss.gate.test.ts +1 -3
  409. package/src/docker/compose.ts +215 -27
  410. package/src/docker/derive.ts +6 -14
  411. package/src/docker/docker.test.ts +118 -15
  412. package/src/docker/dockerfile.integration.test.ts +12 -21
  413. package/src/docker/helpers.ts +5 -4
  414. package/src/docker/index.ts +9 -6
  415. package/src/docker/pin.ts +1 -9
  416. package/src/docker/recipes/index.ts +6 -6
  417. package/src/docker/recipes/mailpit.ts +22 -0
  418. package/src/docker/recipes/openbao.ts +47 -0
  419. package/src/docker/recipes/postgres.ts +17 -6
  420. package/src/docker/recipes/redis.ts +11 -2
  421. package/src/docker/recipes/rustfs.ts +32 -0
  422. package/src/docker/stack-id.test.ts +73 -5
  423. package/src/docker/stack-id.ts +124 -33
  424. package/src/docker/stack.integration.test.ts +6 -21
  425. package/src/docker/stack.ts +36 -4
  426. package/src/docker/types.ts +16 -4
  427. package/src/docs-origin.ts +4 -4
  428. package/src/drivers/ai-anthropic.ts +5 -14
  429. package/src/drivers/ai-mock.ts +2 -5
  430. package/src/drivers/ai-openai-compatible.ts +4 -10
  431. package/src/drivers/ai-providers.test.ts +6 -13
  432. package/src/drivers/bun-native-completeness.test.ts +6 -15
  433. package/src/drivers/channel-console.ts +6 -7
  434. package/src/drivers/channel-fcm.ts +20 -30
  435. package/src/drivers/channel-resend.ts +1 -3
  436. package/src/drivers/channel-smtp.ts +2 -6
  437. package/src/drivers/channel-types.ts +2 -12
  438. package/src/drivers/channel-unifonic.ts +2 -6
  439. package/src/drivers/channel-wa-cloud.ts +2 -6
  440. package/src/drivers/channel-webpush.ts +21 -60
  441. package/src/drivers/conformance.test.ts +2 -10
  442. package/src/drivers/conformance.ts +8 -21
  443. package/src/drivers/drizzle-dialect.test.ts +20 -0
  444. package/src/drivers/drizzle-dialect.ts +37 -0
  445. package/src/drivers/fs.ts +2 -8
  446. package/src/drivers/index.ts +12 -57
  447. package/src/drivers/memory.ts +287 -75
  448. package/src/drivers/pgvector.ts +7 -11
  449. package/src/drivers/postgres.ts +7 -13
  450. package/src/drivers/redis.ts +13 -37
  451. package/src/drivers/s3.ts +15 -18
  452. package/src/drivers/signal-engine.ts +12 -49
  453. package/src/drivers/signal-memory.ts +2 -8
  454. package/src/drivers/signal-nats.ts +4 -9
  455. package/src/drivers/signal-postgres.ts +62 -129
  456. package/src/drivers/signal-redis.ts +7 -21
  457. package/src/drivers/signal-types.ts +1 -4
  458. package/src/drivers/sqlite.ts +3 -12
  459. package/src/drivers/types.ts +4 -23
  460. package/src/drivers/vault-driver-removal.test.ts +55 -0
  461. package/src/drivers/vault-env.ts +2 -6
  462. package/src/drivers/vault-infisical.ts +1 -5
  463. package/src/drivers/vault-managed.ts +1 -5
  464. package/src/drivers/vault-memory.ts +1 -5
  465. package/src/drivers/vault-openbao.test.ts +97 -0
  466. package/src/drivers/vault-openbao.ts +103 -40
  467. package/src/drivers/vault-types.ts +3 -16
  468. package/src/elements/ai/declare.ts +4 -14
  469. package/src/elements/ai/eval.ts +2 -6
  470. package/src/elements/ai/pii.ts +1 -3
  471. package/src/elements/ai/runtime.ts +12 -50
  472. package/src/elements/ai/schema.ts +4 -15
  473. package/src/elements/ai.test.ts +13 -24
  474. package/src/elements/ai.ts +1 -5
  475. package/src/elements/channel/consent.ts +3 -12
  476. package/src/elements/channel/costs.ts +4 -15
  477. package/src/elements/channel/declare.ts +1 -4
  478. package/src/elements/channel/email-auth.ts +1 -4
  479. package/src/elements/channel/locale.ts +2 -10
  480. package/src/elements/channel/mask.ts +1 -3
  481. package/src/elements/channel/mime.ts +2 -12
  482. package/src/elements/channel/outcomes.test.ts +1 -5
  483. package/src/elements/channel/outcomes.ts +5 -15
  484. package/src/elements/channel/receipts.ts +2 -7
  485. package/src/elements/channel/runtime.ts +28 -74
  486. package/src/elements/channel/suppression.ts +8 -14
  487. package/src/elements/channel.test.ts +8 -31
  488. package/src/elements/channel.ts +3 -14
  489. package/src/elements/clock/actions.ts +6 -18
  490. package/src/elements/clock/declare.ts +1 -3
  491. package/src/elements/clock/dst.ts +1 -5
  492. package/src/elements/clock/durable.ts +4 -16
  493. package/src/elements/clock/health.ts +2 -7
  494. package/src/elements/clock/leader.ts +2 -9
  495. package/src/elements/clock/reconcile.ts +4 -15
  496. package/src/elements/clock/runtime.ts +2 -5
  497. package/src/elements/clock/schedule.ts +4 -20
  498. package/src/elements/clock.test.ts +2 -7
  499. package/src/elements/clock.ts +5 -23
  500. package/src/elements/gate/permissions.ts +1 -4
  501. package/src/elements/gate/runtime.ts +7 -28
  502. package/src/elements/gate.ts +1 -5
  503. package/src/elements/index.ts +9 -7
  504. package/src/elements/signal/declare.ts +2 -7
  505. package/src/elements/signal/reconcile.test.ts +1 -4
  506. package/src/elements/signal/runtime.ts +1 -3
  507. package/src/elements/signal.test.ts +3 -15
  508. package/src/elements/signal.ts +2 -8
  509. package/src/elements/store/cache.test.ts +46 -0
  510. package/src/elements/store/cache.ts +3 -11
  511. package/src/elements/store/classify.ts +5 -22
  512. package/src/elements/store/declare.ts +11 -17
  513. package/src/elements/store/domain-ddl.test.ts +86 -0
  514. package/src/elements/store/emit-drizzle.ts +363 -0
  515. package/src/elements/store/files-policy.test.ts +1 -5
  516. package/src/elements/store/files-policy.ts +4 -12
  517. package/src/elements/store/load-plugin-tables.ts +103 -0
  518. package/src/elements/store/missing-relation.test.ts +83 -0
  519. package/src/elements/store/missing-relation.ts +38 -0
  520. package/src/elements/store/replica.ts +1 -4
  521. package/src/elements/store/resource-list-docs.fixture.ts +56 -0
  522. package/src/elements/store/resource-list-docs.test.ts +79 -0
  523. package/src/elements/store/resource.test.ts +253 -0
  524. package/src/elements/store/resource.ts +786 -0
  525. package/src/elements/store/runtime.ts +25 -28
  526. package/src/elements/store/schema-decl.test.ts +227 -0
  527. package/src/elements/store/schema-decl.ts +516 -0
  528. package/src/elements/store/sql-condition.test.ts +132 -0
  529. package/src/elements/store/sql-condition.ts +293 -65
  530. package/src/elements/store/sql-session.test.ts +135 -0
  531. package/src/elements/store/sql-session.ts +241 -84
  532. package/src/elements/store/table.ts +69 -23
  533. package/src/elements/store.test.ts +17 -39
  534. package/src/elements/store.ts +53 -31
  535. package/src/elements/vault/chain.ts +34 -0
  536. package/src/elements/vault/declare.ts +22 -32
  537. package/src/elements/vault/fingerprint.ts +2 -7
  538. package/src/elements/vault/redact.ts +2 -6
  539. package/src/elements/vault/runtime.ts +19 -33
  540. package/src/elements/vault.test.ts +12 -55
  541. package/src/elements/vault.ts +9 -13
  542. package/src/index.ts +5 -2
  543. package/src/kernel/adopt-routes.ts +15 -29
  544. package/src/kernel/app.ts +92 -118
  545. package/src/kernel/auth-resolve.ts +2 -9
  546. package/src/kernel/boot-bind/ai.ts +1 -4
  547. package/src/kernel/boot-bind/channel.test.ts +60 -0
  548. package/src/kernel/boot-bind/channel.ts +61 -5
  549. package/src/kernel/boot-bind/clock.ts +2 -6
  550. package/src/kernel/boot-bind/gate.ts +2 -8
  551. package/src/kernel/boot-bind/runs.ts +1 -3
  552. package/src/kernel/boot-bind/signal.ts +3 -10
  553. package/src/kernel/boot-bind/store.test.ts +27 -18
  554. package/src/kernel/boot-bind/store.ts +93 -52
  555. package/src/kernel/boot-bind/vault.ts +2 -8
  556. package/src/kernel/boot.test.ts +4 -10
  557. package/src/kernel/boot.ts +30 -77
  558. package/src/kernel/budget.test.ts +1 -3
  559. package/src/kernel/capability.ts +3 -10
  560. package/src/kernel/dry-run.test.ts +1 -4
  561. package/src/kernel/dry-run.ts +3 -11
  562. package/src/kernel/edge.test.ts +68 -0
  563. package/src/kernel/effects.test.ts +1 -5
  564. package/src/kernel/effects.ts +4 -11
  565. package/src/kernel/errors.registry.test.ts +2 -8
  566. package/src/kernel/errors.ts +23 -32
  567. package/src/kernel/flow.test.ts +12 -25
  568. package/src/kernel/flow.ts +13 -25
  569. package/src/kernel/fx.test.ts +31 -40
  570. package/src/kernel/fx.ts +135 -90
  571. package/src/kernel/hook-timing.test.ts +3 -6
  572. package/src/kernel/hook-timing.ts +5 -14
  573. package/src/kernel/hooks.test.ts +43 -10
  574. package/src/kernel/hooks.ts +25 -12
  575. package/src/kernel/index.ts +11 -17
  576. package/src/kernel/journal.ts +7 -31
  577. package/src/kernel/on.ts +45 -9
  578. package/src/kernel/pipeline.test.ts +10 -19
  579. package/src/kernel/pipeline.ts +5 -17
  580. package/src/kernel/plug.ts +4 -11
  581. package/src/kernel/plugin/conflicts.test.ts +13 -25
  582. package/src/kernel/plugin/decorate.test.ts +8 -13
  583. package/src/kernel/plugin/scoping.test.ts +4 -11
  584. package/src/kernel/plugin.ts +81 -27
  585. package/src/kernel/registry-isolation.test.ts +74 -0
  586. package/src/kernel/registry.ts +102 -30
  587. package/src/kernel/router.test.ts +15 -13
  588. package/src/kernel/router.ts +9 -29
  589. package/src/kernel/routing-budget.test.ts +1 -3
  590. package/src/kernel/run-telemetry.ts +1 -3
  591. package/src/kernel/triggers.ts +63 -21
  592. package/src/manifest/diff.test.ts +26 -91
  593. package/src/manifest/diff.ts +95 -225
  594. package/src/manifest/fixtures/skyport.excerpt.json +1 -1
  595. package/src/manifest/fixtures/skyport.manifest.json +1 -1
  596. package/src/manifest/index.ts +3 -10
  597. package/src/manifest/types.ts +30 -6
  598. package/src/manifest/undeclared.test.ts +4 -12
  599. package/src/manifest/undeclared.ts +1 -2
  600. package/src/manifest/validate.test.ts +2 -6
  601. package/src/manifest/validate.ts +5 -15
  602. package/src/mcp/authorization.ts +8 -27
  603. package/src/mcp/confirmation.ts +3 -10
  604. package/src/mcp/data.ts +2 -6
  605. package/src/mcp/docs-index.ts +4 -7
  606. package/src/mcp/docs-mcp.test.ts +3 -12
  607. package/src/mcp/docs-server.ts +7 -27
  608. package/src/mcp/docs-tools.ts +2 -6
  609. package/src/mcp/index.ts +1 -6
  610. package/src/mcp/injection.gate.test.ts +4 -18
  611. package/src/mcp/mcp.test.ts +18 -49
  612. package/src/mcp/protocol.ts +3 -10
  613. package/src/mcp/server.ts +11 -52
  614. package/src/mcp/session.ts +4 -14
  615. package/src/mcp/tools.ts +14 -50
  616. package/src/plugins/catalogue.test.ts +3 -7
  617. package/src/plugins/catalogue.ts +1 -3
  618. package/src/plugins/compression.test.ts +127 -0
  619. package/src/plugins/compression.ts +94 -0
  620. package/src/plugins/config-source.test.ts +204 -0
  621. package/src/plugins/config-source.ts +209 -0
  622. package/src/plugins/cors.test.ts +138 -0
  623. package/src/plugins/cors.ts +129 -0
  624. package/src/plugins/csrf.test.ts +102 -0
  625. package/src/plugins/csrf.ts +86 -0
  626. package/src/plugins/headers.ts +54 -0
  627. package/src/plugins/index.ts +26 -0
  628. package/src/plugins/ip-allowlist.test.ts +105 -0
  629. package/src/plugins/ip-allowlist.ts +76 -0
  630. package/src/plugins/maintenance-mode.test.ts +91 -0
  631. package/src/plugins/maintenance-mode.ts +85 -0
  632. package/src/plugins/node-import-scan.ts +2 -5
  633. package/src/plugins/security-headers.test.ts +243 -0
  634. package/src/plugins/security-headers.ts +255 -0
  635. package/src/plugins/supply-chain.ts +5 -17
  636. package/src/release/exports.ts +3 -8
  637. package/src/release/measure.exports.test.ts +1 -3
  638. package/src/release/measure.ts +16 -45
  639. package/src/runs/bench.test.ts +1 -3
  640. package/src/runs/collect.ts +8 -25
  641. package/src/runs/drivers/clickhouse.ts +2 -9
  642. package/src/runs/drivers/files.ts +9 -31
  643. package/src/runs/drivers/memory.ts +5 -22
  644. package/src/runs/drivers/postgres.ts +8 -20
  645. package/src/runs/duckdb.ts +2 -8
  646. package/src/runs/index.ts +3 -14
  647. package/src/runs/outlier.ts +3 -10
  648. package/src/runs/parquet.ts +8 -26
  649. package/src/runs/privacy.ts +2 -8
  650. package/src/runs/runs.test.ts +3 -9
  651. package/src/runs/runtime.ts +7 -32
  652. package/src/runs/shred.ts +10 -29
  653. package/src/runs/types.ts +1 -4
  654. package/src/runtime/bun.ts +4 -15
  655. package/src/runtime/cold-start.bench.ts +1 -3
  656. package/src/runtime/dev-request-log.test.ts +1 -4
  657. package/src/runtime/dev-request-log.ts +1 -4
  658. package/src/runtime/index.ts +1 -6
  659. package/src/runtime/primitives.ts +5 -4
  660. package/src/runtime/security.ts +3 -13
  661. package/src/runtime/serve.test.ts +4 -7
  662. package/src/runtime/types.ts +1 -4
  663. package/src/runtime/web-standard.ts +3 -15
  664. package/src/term.test.ts +4 -6
  665. package/src/term.ts +49 -98
  666. package/src/test/create-test-app.test.ts +4 -14
  667. package/src/test/create-test-app.ts +27 -33
  668. package/src/test/provisions.integration.test.ts +3 -11
  669. package/src/upgrade/codemods.test.ts +25 -6
  670. package/src/upgrade/codemods.ts +116 -3
  671. package/src/validation/standard-schema.test.ts +2 -5
  672. package/src/validation/standard-schema.ts +13 -33
  673. package/docs/spec/console.md +0 -739
  674. package/docs/spec/example.md +0 -1196
  675. package/docs/spec/four-applications.md +0 -1195
  676. package/docs/spec/unified-theory.md +0 -489
  677. package/src/cli/doc-drift.test.ts +0 -146
  678. package/src/cli/doc-drift.ts +0 -430
  679. package/src/cli/doctor-diff-examples.ts +0 -92
  680. package/src/console/ui/dist/assets/panel-vault-BbfWdox0.js +0 -1
  681. package/src/drivers/vault-sops.ts +0 -271
@@ -0,0 +1,136 @@
1
+ ---
2
+ title: "Security Headers"
3
+ description: "Official plugin — the complete secure-headers set on every HTTP response, failures included. Full helmet.js parity with API-first defaults, a CSP builder with report-only mode, and live DB-driven config."
4
+ icon: "ShieldCheck"
5
+ source: "src/plugins/security-headers.ts"
6
+ ---
7
+
8
+ `securityHeaders()` stamps security headers on **every** HTTP flow response — successes, failures, and short-circuits alike, because it runs at `onResponse`, the last pipeline stage. An explicit value your app already set is never overridden unless you ask for it.
9
+
10
+ ## Quick start
11
+
12
+ ```typescript title="src/app.ts"
13
+ import { oke } from "okengine";
14
+ import { securityHeaders } from "okengine/plugins";
15
+
16
+ export const app = oke({ name: "shop", env: "dev" }).plug(securityHeaders());
17
+ ```
18
+
19
+ Every HTTP response now carries:
20
+
21
+ | Header | Value |
22
+ | ----------------------------------- | ------------- |
23
+ | `X-Content-Type-Options` | `nosniff` |
24
+ | `X-Frame-Options` | `DENY` |
25
+ | `Referrer-Policy` | `no-referrer` |
26
+ | `Origin-Agent-Cluster` | `?1` |
27
+ | `X-DNS-Prefetch-Control` | `off` |
28
+ | `X-Download-Options` | `noopen` |
29
+ | `X-Permitted-Cross-Domain-Policies` | `none` |
30
+ | `X-XSS-Protection` | `0` |
31
+ | `X-Powered-By` | removed |
32
+
33
+ ## Helmet parity
34
+
35
+ Every [helmet.js](https://helmet.js.org/) middleware maps to an option here — same defaults wherever helmet's default is safe for an API, plus three deliberate deviations marked `opt-in`:
36
+
37
+ | Helmet middleware | This plugin | Default match? |
38
+ | ------------------------------- | ----------------------------------------------------------------------------------------- | --------------------------------------------------------------------------- |
39
+ | `contentSecurityPolicy` | `contentSecurityPolicy` — string **or** `{ directives, useDefaults, reportOnly }` builder | Same default directives; ours is opt-in like helmet's structure suggests |
40
+ | `crossOriginEmbedderPolicy` | `crossOriginEmbedderPolicy` | Yes — off unless set |
41
+ | `crossOriginOpenerPolicy` | `crossOriginOpenerPolicy` | **opt-in** — helmet's `same-origin` default breaks cross-origin API clients |
42
+ | `crossOriginResourcePolicy` | `crossOriginResourcePolicy` | **opt-in** — same API rationale |
43
+ | `originAgentCluster` | `originAgentCluster` | Yes — `?1` |
44
+ | `referrerPolicy` | `referrerPolicy` | Yes — `no-referrer` |
45
+ | `strictTransportSecurity` | `hsts` | **opt-in** — HSTS is sticky; never on plain-HTTP local dev |
46
+ | `xContentTypeOptions` | always on | Yes — `nosniff` |
47
+ | `xDnsPrefetchControl` | `dnsPrefetchControl` | Yes — `off`; `{ allow: true }` → `on` |
48
+ | `xDownloadOptions` | `downloadOptions` | Yes — `noopen` |
49
+ | `xFrameOptions` | `frameOptions` | Yes — stricter: `DENY` over helmet's `SAMEORIGIN` |
50
+ | `xPermittedCrossDomainPolicies` | `permittedCrossDomainPolicies` | Yes — `none` |
51
+ | `xPoweredBy` | `poweredBy` | Yes — removed; a string sets a decoy value |
52
+ | `xXssProtection` | `xssProtection` | Yes — `0` (disables the legacy buggy auditor) |
53
+
54
+ Beyond parity: headers land on **failures too** (helmet middleware ordering bugs are a classic Express footgun), app-set values win by default, and every option can be driven live from the database (below).
55
+
56
+ ## Options
57
+
58
+ | Option | Type | Default | Does |
59
+ | ------------------------------ | ---------------------------------------------------------------- | --------------- | ---------------------------------------------------------------------------------------- |
60
+ | `contentSecurityPolicy` | `string` · `{ directives, useDefaults?, reportOnly? }` | — (omitted) | CSP header; object form merges over helmet's default directives, camelCase or kebab keys |
61
+ | `frameOptions` | `"DENY"` · `"SAMEORIGIN"` | `"DENY"` | `X-Frame-Options` value |
62
+ | `referrerPolicy` | `string` | `"no-referrer"` | `Referrer-Policy` value |
63
+ | `hsts` | `boolean` · `{ maxAge?, includeSubDomains?, preload? }` | `false` | `Strict-Transport-Security` — `true` = one year |
64
+ | `permissionsPolicy` | `string` | — (omitted) | `Permissions-Policy` value |
65
+ | `crossOriginOpenerPolicy` | `"same-origin"` · `"same-origin-allow-popups"` · `"unsafe-none"` | — (omitted) | `Cross-Origin-Opener-Policy` value |
66
+ | `crossOriginResourcePolicy` | `"same-origin"` · `"same-site"` · `"cross-origin"` | — (omitted) | `Cross-Origin-Resource-Policy` value |
67
+ | `crossOriginEmbedderPolicy` | `"require-corp"` · `"credentialless"` | — (omitted) | `Cross-Origin-Embedder-Policy` value |
68
+ | `originAgentCluster` | `boolean` | `true` | `Origin-Agent-Cluster: ?1` — `false` omits |
69
+ | `dnsPrefetchControl` | `boolean` · `{ allow: boolean }` | `true` → `off` | `X-DNS-Prefetch-Control`; `false` omits |
70
+ | `downloadOptions` | `boolean` | `true` | `X-Download-Options: noopen` — `false` omits |
71
+ | `permittedCrossDomainPolicies` | `"none"` · `"master-only"` · `"by-content-type"` · `"all"` | `"none"` | `X-Permitted-Cross-Domain-Policies` value |
72
+ | `poweredBy` | `boolean` · `string` | `true` | `true` removes `X-Powered-By`, a string sets a decoy, `false` keeps the app's |
73
+ | `xssProtection` | `boolean` | `true` | `X-XSS-Protection: 0` — `false` omits |
74
+ | `override` | `boolean` | `false` | Replace values the app set explicitly |
75
+
76
+ ```typescript
77
+ .plug(
78
+ securityHeaders({
79
+ contentSecurityPolicy: {
80
+ directives: { scriptSrc: ["'self'", "https://cdn.example.com"] }, // merged over the defaults
81
+ reportOnly: true, // Content-Security-Policy-Report-Only while you tune
82
+ },
83
+ hsts: { maxAge: 63072000, includeSubDomains: true },
84
+ permissionsPolicy: "camera=(), microphone=()",
85
+ }),
86
+ )
87
+ ```
88
+
89
+ <Callout type="warn">
90
+ HSTS is off by default because it is **sticky** — once a browser sees it, it insists on HTTPS for
91
+ the whole `max-age`. Enable it only on deployments that already serve HTTPS (never on plain-HTTP
92
+ local dev). The same caution applies to `upgrade-insecure-requests` in the default CSP.
93
+ </Callout>
94
+
95
+ ## Runtime configuration
96
+
97
+ Header policy is exactly the config you want to flip without a redeploy — enable HSTS the day HTTPS lands, tighten the CSP after an audit. Pass a `configSource()` and options follow the database within one sync interval:
98
+
99
+ ```typescript
100
+ const headers = configSource({
101
+ plugin: "security-headers",
102
+ code: { hsts: false }, // safe floor for local dev
103
+ db: { store: db },
104
+ kv: cache,
105
+ });
106
+ on(every("30s"), headers.sync());
107
+ export const app = oke({ name: "shop", env: "dev" }).plug(securityHeaders(headers));
108
+ ```
109
+
110
+ ```sql
111
+ INSERT INTO security_headers_config ("key", "value")
112
+ VALUES ('config', '{"hsts": true}');
113
+ ```
114
+
115
+ See [Plugins → Runtime configuration](/docs/reference/plugins#runtime-configuration-code-or-db) for the full contract.
116
+
117
+ ## Notes
118
+
119
+ | Behavior | Detail |
120
+ | ----------------- | --------------------------------------------------------------------- |
121
+ | Failures included | `onResponse` runs after `onError` — denials get the same headers |
122
+ | App wins | A header set earlier (app hook, flow) is kept unless `override: true` |
123
+ | Non-HTTP triggers | No-op — nothing to stamp outside HTTP |
124
+ | Scope | Flow responses — infra routes (`/_oke/*`, 404s) bypass the pipeline |
125
+
126
+ ## Next
127
+
128
+ <Cards>
129
+ <Card title="CORS" description="Cross-origin rules at the edge." href="/docs/plugins/cors" />
130
+ <Card title="CSRF" description="Block cross-site state changes." href="/docs/plugins/csrf" />
131
+ <Card
132
+ title="Plugin API"
133
+ description="Runtime configuration contract."
134
+ href="/docs/reference/plugins"
135
+ />
136
+ </Cards>
@@ -0,0 +1,101 @@
1
+ ---
2
+ title: "CLI Reference"
3
+ description: "oke and create-oke — everyday commands and flags."
4
+ icon: "Terminal"
5
+ source: "docs/cli.md"
6
+ ---
7
+
8
+ ### Commands
9
+
10
+ ```bash
11
+ bun add okengine # ONE package
12
+
13
+ oke dev # watch · hot reload · Console :6533 · app :6530 · MCP :6535 · docs MCP :6536
14
+ # → client types + domain schema push on save (local)
15
+ oke dev --local # -l session-only local (in-memory; never writes .oke/mode)
16
+ oke dev --no-db-push # opt out of auto oke db push on schema change
17
+ oke dev --docker # -d infra compose under docker/ (no app container; host Bun)
18
+ oke dev -d store.sql,signal # partial: only these roles get real backends
19
+ oke mode local|docker # get/set default oke dev mode (saved in .oke/mode)
20
+
21
+ oke start # runs exactly what production runs (this is the Docker CMD)
22
+ oke doctor # verify secrets, ports, drivers, tenancy, schema drift
23
+ oke stack # preview resolved images/tags/ports — writes nothing
24
+
25
+ oke schema generate # core + plugin stubs → schema/oke.ts (--check in CI)
26
+ oke db push # domain schema.ts → live local DB (dev; drizzle-kit)
27
+ oke db generate # versioned SQL under drizzle/ (review)
28
+ oke db migrate # apply migrations (explicit; never auto in prod)
29
+ oke vault set STRIPE_KEY # also: list · import .env · key rotate
30
+ oke client add <url> # types for a separate frontend repo
31
+
32
+ oke docker # docker/Dockerfile + docker/compose.<role>.yml · …
33
+ oke docker --prod # healthchecks, volumes, limits, secret refs, deploy.replicas
34
+ oke images pin # tags → digests in oke.images.lock
35
+
36
+ oke build --target edge # < 15 kB kernel profile
37
+ oke eval # run prompt eval sets; fails CI on regression
38
+ oke branch prod --at "yesterday" # fork journaled state into a sandbox
39
+ oke privacy erase --subject <id> # crypto-shredding: deletes the key, not the terabytes
40
+ oke upgrade # run codemods for a breaking change, print the diff
41
+ ```
42
+
43
+ In development, app, Console, MCP, and docs MCP prefer the canonical ports and move upward
44
+ when occupied. Docker infrastructure uses stable per-project offsets in disjoint ranges for
45
+ each built-in service, preventing one service's offset port from overlapping another's.
46
+
47
+ ### Additional commands
48
+
49
+ ```bash
50
+ oke doctor --diff # CI gate: undeclared Manifest contract breaks
51
+ oke doctor --json # -j JSON on stdout; hints on stderr (agents / MCP)
52
+ oke stack --json # -j
53
+ oke images list # recipe · image · tag · digest · size (--json|-j)
54
+ oke gates list # Module:Action catalogue (--json|-j)
55
+ ```
56
+
57
+ ### Shell completion
58
+
59
+ Generated from the command registry — not a hand-maintained script:
60
+
61
+ ```bash
62
+ eval "$(oke completion bash)"
63
+ eval "$(oke completion zsh)"
64
+ oke completion fish | source
65
+ ```
66
+
67
+ ### Short flags
68
+
69
+ Long form is canonical in docs; short form is convenience only. Shared letters follow git’s pattern (different meanings on different subcommands — e.g. `-c` is `--check` on `schema generate`, `--config` on `stack` / `docker` / `images`).
70
+
71
+ | Long | Short | Where |
72
+ | -------------------- | ----- | ---------------------------------------------- |
73
+ | `--local` | `-l` | `dev` |
74
+ | `--docker` | `-d` | `dev` |
75
+ | `--no-db-push` | | `dev` |
76
+ | `--prod` | `-p` | `docker` |
77
+ | `--port` | `-p` | `start` |
78
+ | `--check` | `-c` | `schema generate` |
79
+ | `--config` | `-c` | `stack`, `docker`, `images`, `db *` (drizzle) |
80
+ | `--apply` | `-a` | `upgrade` |
81
+ | `--at` | `-a` | `branch` |
82
+ | `--after` | `-a` | `doctor --diff` |
83
+ | `--target` | `-t` | `build` |
84
+ | `--diff` | | `doctor` |
85
+ | `--json` | `-j` | `doctor`, `stack`, `images list`, `gates list` |
86
+ | `--manifest` | `-m` | most Manifest readers |
87
+ | `--entry` | `-e` | `dev`, `start`, `build` |
88
+ | `--out` / `--outdir` | `-o` | writers |
89
+ | `--subject` | `-s` | `privacy erase` |
90
+ | `--before` | `-b` | `doctor --diff` |
91
+ | `--base` | `-B` | `doctor --diff` |
92
+
93
+ ### Exit codes
94
+
95
+ | Exit | Meaning |
96
+ | ----- | ------------------------------------- |
97
+ | **0** | success |
98
+ | **1** | usage / validation |
99
+ | **2** | runtime / environment / check failure |
100
+
101
+ `oke help` prints the same flag and exit-code tables.
@@ -0,0 +1,159 @@
1
+ ---
2
+ title: "Configuration"
3
+ description: "Every option in oke.config.ts — drivers per environment, images, i18n, tenancy, privacy, db sync, topology, ports, and console."
4
+ icon: "Settings2"
5
+ ---
6
+
7
+ Complete reference for `oke.config.ts`. Every option below is verified against `defineConfig`; the four environment keys everywhere are `local` · `docker` · `test` · `prod`.
8
+
9
+ ```typescript title="oke.config.ts"
10
+ import { defineConfig } from "okengine/config";
11
+
12
+ export default defineConfig({
13
+ // options below
14
+ });
15
+ ```
16
+
17
+ ## drivers
18
+
19
+ Which backend each element talks to, per environment. A value is either a driver id string or a rich object:
20
+
21
+ ```typescript
22
+ drivers: {
23
+ store: {
24
+ sql: { local: "sqlite", docker: "postgres", test: "memory", prod: "postgres" },
25
+ kv: { local: "memory", docker: "redis", test: "memory", prod: "redis" },
26
+ files: { local: "fs", docker: "s3", test: "memory", prod: "s3" },
27
+ },
28
+ signal: { local: "memory", docker: "postgres", test: "memory", prod: "postgres" },
29
+ clock: { local: "memory", docker: "postgres", test: "frozen", prod: "postgres" },
30
+ vault: { local: "dotenv", docker: "openbao", test: "memory", prod: "openbao" },
31
+ channel: {
32
+ email: { local: "console", docker: "smtp", test: "console", prod: "smtp" },
33
+ },
34
+ },
35
+ ```
36
+
37
+ | Key | Shape | Driver ids (verified) |
38
+ | ------------------ | -------------- | ---------------------------------------------------------------------------- |
39
+ | `store.sql` | env driver map | `sqlite` · `postgres` · `memory` |
40
+ | `store.kv` | env driver map | `memory` · `redis` |
41
+ | `store.files` | env driver map | `memory` · `fs` · `s3` |
42
+ | `store.index` | env driver map | `memory` · `pgvector` |
43
+ | `signal` | env driver map | `memory` · `postgres` · `redis` · `nats` |
44
+ | `clock` | env driver map | `memory` · `postgres` · `frozen` |
45
+ | `vault` | env driver map | `dotenv` · `openbao` · `memory` |
46
+ | `channel.email` | env driver map | `console` · `smtp` · `resend` |
47
+ | `channel.sms` | env driver map | `console` · `unifonic` |
48
+ | `channel.whatsapp` | env driver map | medium declared; drivers added per provider |
49
+ | `channel.push` | env driver map | medium declared; drivers added per provider |
50
+ | `ai` | env driver map | `mock` · `anthropic` · `openai-compatible` · `bedrock` · `vertex` · `ollama` |
51
+ | `runs` | env driver map | runs-store driver (distinct from top-level `runs`) |
52
+ | `prod` | `string[]` | flat protocol list for the Manifest — nested maps are preferred |
53
+
54
+ When `docker` is omitted it inherits the `prod` driver. The rich object form adds connection detail:
55
+
56
+ ```typescript
57
+ sql: {
58
+ prod: { driver: "postgres", pool: { max: 20 }, replicas: ["postgres://ro-1/db"] },
59
+ },
60
+ ```
61
+
62
+ | Field | Type | Meaning |
63
+ | ---------- | ----------------- | ------------------------------------------- |
64
+ | `url` | connection string | Overrides the env-var resolution |
65
+ | `pool` | `{ max?, min? }` | SQL pool sizing |
66
+ | `replicas` | `string[]` | Read-only routing targets (read flows only) |
67
+
68
+ ## images
69
+
70
+ Container image pins keyed by element role — vendor choice lives here, never in driver ids:
71
+
72
+ ```typescript
73
+ images: {
74
+ "store.sql": "postgres:18",
75
+ "store.kv": "redis:8",
76
+ "store.files": "rustfs/rustfs:1.0.0-beta.11",
77
+ "channel.email": "axllent/mailpit:v1.22.3",
78
+ vault: "openbao/openbao:2.6.1",
79
+ },
80
+ ```
81
+
82
+ ## i18n
83
+
84
+ | Option | Type | Default | Meaning |
85
+ | --------- | ---------- | ------- | ------------------------------------------- |
86
+ | `locales` | `string[]` | — | Supported locales |
87
+ | `default` | string | — | Fallback locale (channel templates, `fx.t`) |
88
+ | `dir` | record | — | Per-locale direction: `"ltr"` \| `"rtl"` |
89
+
90
+ ```typescript
91
+ i18n: { locales: ["en", "ar"], default: "en", dir: { ar: "rtl" } },
92
+ ```
93
+
94
+ ## tenancy
95
+
96
+ Multi-tenant isolation policy.
97
+
98
+ | Option | Type | Meaning |
99
+ | ----------- | --------------------------------- | ---------------------------------------- |
100
+ | `isolation` | `"row" \| "schema" \| "database"` | How tenants are separated in the store |
101
+ | `resolve` | string \| function | Tenant resolver — reads `ctx.auth.orgId` |
102
+
103
+ ## privacy
104
+
105
+ Presence of this block turns the CORE privacy tooling on in the Console — masking, classification surfaces. It is not a `.plug()` call.
106
+
107
+ ```typescript
108
+ privacy: {},
109
+ ```
110
+
111
+ ## runs
112
+
113
+ Runs retention and redaction at the config surface — **not** the same key as `drivers.runs`.
114
+
115
+ | Option | Type | Meaning |
116
+ | -------- | ------------------------ | ----------------------------------------------------- |
117
+ | `redact` | `Record<string, string>` | Field → retention duration; presence turns privacy on |
118
+
119
+ ## db
120
+
121
+ Domain schema sync for `oke db push | generate | migrate` (Drizzle). Unrelated to `oke schema generate`.
122
+
123
+ | Option | Default | Meaning |
124
+ | ----------- | --------------------------- | --------------------------------------------------------------------------- |
125
+ | `autoPush` | `true` (local only) | Auto-run `db push` on schema change in `oke dev`; forced off in docker/prod |
126
+ | `config` | `"drizzle.config.ts"` | Path to the drizzle-kit config |
127
+ | `declare` | `"src/schema.decl.ts"` | Abstract schema module (`store.schema.table` exports) |
128
+ | `generated` | `"src/schema.generated.ts"` | Where `oke db` emits dialect Drizzle |
129
+ | `entry` | `src/app.ts` | App entry for collecting plugin table contributions |
130
+
131
+ ## topology
132
+
133
+ | Value | Meaning |
134
+ | ------------ | ------------------------------------------------ |
135
+ | `"monolith"` | One process serves everything (default posture) |
136
+ | `"services"` | Split deployment units derived from the Manifest |
137
+
138
+ ## ports
139
+
140
+ | Option | Default | Surface |
141
+ | --------- | ------- | ------- |
142
+ | `app` | `6530` | App |
143
+ | `console` | `6533` | Console |
144
+ | `mcp` | `6535` | MCP |
145
+
146
+ ## console
147
+
148
+ Production Console exposure.
149
+
150
+ | Option | Type | Default | Meaning |
151
+ | -------------- | ------------------------------------ | ------- | ------------------------- |
152
+ | `prod.enabled` | boolean | — | Serve the Console in prod |
153
+ | `prod.auth` | `"required" \| "optional" \| "none"` | — | Access requirement |
154
+
155
+ ## Learn more
156
+
157
+ - [CLI Reference](/docs/reference/cli) — `oke dev` · `oke db` · `oke docker`
158
+ - [Environment Variables](/docs/reference/environment-variables) — URL and secret resolution
159
+ - [Store](/docs/elements/store) — what the store drivers back
@@ -0,0 +1,87 @@
1
+ ---
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"
5
+ ---
6
+
7
+ OKE reads environment variables at boot for connection detail and secrets — never for behavior you could declare in `oke.config.ts`. In docker mode these are written for you into `docker/.env.docker`; this page is the full map.
8
+
9
+ <Callout title="Precedence">
10
+ For anything with both an `OKE_*` variable and a conventional one (like `DATABASE_URL`), the
11
+ conventional variable wins first, then the `OKE_*` form, then the built-in default.
12
+ </Callout>
13
+
14
+ ## SQL store
15
+
16
+ | Variable | Used for | Default when unset |
17
+ | ------------------- | ---------------------------------------------------- | ------------------------------- |
18
+ | `DATABASE_URL` | Postgres connection (`postgres` driver, drizzle-kit) | `postgres://localhost:5432/oke` |
19
+ | `OKE_STORE_SQL_URL` | Explicit SQL URL override | — |
20
+ | `OKE_SQLITE_URL` | SQLite file path (`sqlite` driver) | `.oke/app.sqlite` |
21
+ | `OKE_SQL_DRIVER` | Force the sql driver id at boot | config map |
22
+
23
+ ## KV store
24
+
25
+ | Variable | Used for | Default when unset |
26
+ | ------------------ | ------------------------ | ------------------ |
27
+ | `REDIS_URL` | Redis connection | driver default |
28
+ | `OKE_STORE_KV_URL` | Explicit KV URL override | — |
29
+ | `OKE_KV_DRIVER` | Force the kv driver id | config map |
30
+
31
+ ## Files store
32
+
33
+ | Variable | Used for | Default when unset |
34
+ | ---------------------- | -------------------------------- | ------------------ |
35
+ | `S3_BUCKET` | Bucket name (`s3` driver) | — |
36
+ | `S3_ENDPOINT` | S3-compatible endpoint (RustFS) | — |
37
+ | `S3_ACCESS_KEY_ID` | Access key | — |
38
+ | `S3_SECRET_ACCESS_KEY` | Secret key | — |
39
+ | `S3_REGION` | Region | — |
40
+ | `S3_SESSION_TOKEN` | Session token (temporary creds) | — |
41
+ | `OKE_STORE_FILES_DB` | Explicit files location override | — |
42
+ | `OKE_FILES_DRIVER` | Force the files driver id | config map |
43
+
44
+ ## Vault (OpenBao)
45
+
46
+ Written by the first-boot bootstrap; you normally only set these when pointing at an external vault.
47
+
48
+ | Variable | Used for | Default when unset |
49
+ | ----------------- | --------------------------- | ------------------ |
50
+ | `OKE_VAULT_URL` | OpenBao base URL | — |
51
+ | `OKE_VAULT_TOKEN` | App token (least-privilege) | — |
52
+ | `OKE_VAULT_MOUNT` | KV v2 mount path | `"secret"` |
53
+
54
+ ## Channel (email)
55
+
56
+ | Variable | Used for |
57
+ | ----------------------- | ----------------------------------------- |
58
+ | `SMTP_URL` | Full SMTP connection string (`smtp://…`) |
59
+ | `SMTP_USER` | Overrides the user embedded in `SMTP_URL` |
60
+ | `SMTP_PASSWORD` | Overrides the password in `SMTP_URL` |
61
+ | `OKE_CHANNEL_EMAIL_URL` | OKE-specific alternative to `SMTP_URL` |
62
+
63
+ ## AI providers
64
+
65
+ | Variable | Used for |
66
+ | ------------------- | --------------------------------------- |
67
+ | `ANTHROPIC_API_KEY` | `anthropic` driver credential |
68
+ | `ANTHROPIC_MODEL` | Model override for the anthropic driver |
69
+ | `OPENAI_API_KEY` | `openai-compatible` driver credential |
70
+
71
+ ## Framework behavior
72
+
73
+ | Variable | Used for |
74
+ | --------------------- | ------------------------------------------------------------- |
75
+ | `OKE_DOCKER` | `"1"` marks docker mode (set by the CLI, not by you) |
76
+ | `OKE_DB_AUTO_PUSH` | Overrides `db.autoPush` at boot |
77
+ | `OKE_DRIZZLE_DIALECT` | `"sqlite"` \| `"postgresql"` for generated drizzle config |
78
+ | `OKE_DEV_REQUEST_LOG` | `"1"` logs requests during `oke dev` (set by the CLI) |
79
+ | `OKE_CONSOLE_SECRET` | Console session secret — set explicitly in production |
80
+ | `PORT` | App port in production containers (default `6530`) |
81
+ | `NODE_ENV` | `"production"` switches the Console to its production posture |
82
+
83
+ ## Learn more
84
+
85
+ - [Configuration](/docs/reference/configuration) — the declarative side of the same knobs
86
+ - [Vault](/docs/elements/vault) — how `OKE_VAULT_*` gets minted on first boot
87
+ - [CLI Reference](/docs/reference/cli) — which commands write these for you
@@ -0,0 +1,80 @@
1
+ ---
2
+ title: "Errors"
3
+ description: "Every error OKE produces — permanent OKE codes with fixes, gate denials, and subsystem errors, with what to do about each."
4
+ icon: "OctagonAlert"
5
+ ---
6
+
7
+ OKE has two error families, and confusing them is the most common mistake: **failures are values** a flow returns (`{ data: null, error: { code, data } }` — clients switch on `error.code`), while **framework errors are thrown** for invariant violations and carry a permanent numeric code, a cause, and a fix.
8
+
9
+ ```text
10
+ OKE1101 domain table not found — migrations have not been applied.
11
+ → run `oke db migrate` against this environment.
12
+ https://oke.omqkhafi.dev/e/1101
13
+ ```
14
+
15
+ Codes are permanent once published — you can match on them safely across upgrades.
16
+
17
+ ## OKE numeric codes
18
+
19
+ | Code | Name | Cause | Fix |
20
+ | ------ | ----------------- | ------------------------------------------------ | ----------------------------------------------- |
21
+ | `1001` | undeclared read | Flow reads a resource not in `effects.reads` | Add it to the flow's `effects.reads` |
22
+ | `1002` | undeclared write | Flow writes a resource not in `effects.writes` | Add it to the flow's `effects.writes` |
23
+ | `1003` | undeclared emit | Flow emits a signal not in `effects.emits` | Add it to the flow's `effects.emits` |
24
+ | `1004` | undeclared send | Flow sends a template not in `effects.sends` | Add it to the flow's `effects.sends` |
25
+ | `1005` | undeclared ask | Flow asks a prompt not in `effects.asks` | Add it to the flow's `effects.asks` |
26
+ | `1006` | undeclared secret | Flow reads a secret not in `effects.secrets` | Add it to the flow's `effects.secrets` |
27
+ | `1007` | undeclared call | Flow calls a flow not in `effects.calls` | Add it to the flow's `effects.calls` |
28
+ | `1042` | orphan emit | Emitted signal has no subscriber | Add `on(signal, …)` or declare `optional: true` |
29
+ | `1101` | schema missing | Domain table absent in docker/prod — no auto-DDL | Run `oke db migrate` against this environment |
30
+
31
+ <Callout title="Effects are usually inferred">
32
+ The 1001–1007 family exists for flows that declare effects explicitly. Most apps never write an
33
+ `effects` block — inference covers them — so seeing one of these means an explicit declaration
34
+ drifted from the code.
35
+ </Callout>
36
+
37
+ ## Gate denials (typed failures)
38
+
39
+ Returned, not thrown — the request never reached `do`:
40
+
41
+ | Code | When | Payload |
42
+ | -------------- | -------------------------------------------- | ---------------- |
43
+ | `Unauthorized` | Policy denied, request not authenticated | — |
44
+ | `Forbidden` | Policy denied, authenticated but not allowed | `gate`, `reason` |
45
+ | `RateLimited` | Rate gate budget exhausted | `retryAfterMs` |
46
+
47
+ ## Framework validation failures
48
+
49
+ | Code | When |
50
+ | ----------------- | ------------------------------------------------------------------------------------------ |
51
+ | `ValidationError` | Input failed the `in` schema, or a list param isn't whitelisted (`unknown list param "x"`) |
52
+ | `NotFound` | A `store.resource` get/update/remove hit a missing row |
53
+
54
+ ## Subsystem errors
55
+
56
+ Thrown by specific subsystems — each names its own cause:
57
+
58
+ | Error | Thrown when | What to do |
59
+ | ----------------------------- | ------------------------------------------------------------------ | ------------------------------------------------------- |
60
+ | `VaultBootError` | A vault contract has no value in any resolution layer | Set the missing names — the error lists every gap |
61
+ | `OpenBaoUnavailableError` | Vault driver can't reach OpenBao, or it's sealed, in docker/prod | Restore the vault or unseal it — never silently skipped |
62
+ | `OpenBaoBootstrapError` | First-boot init/unseal failed, or key material is missing/unsafe | Read the message — it names the exact failing step |
63
+ | `AiPiiBuildError` | Build: a flow sends PII fields to a third-party model | Drop the fields or add `allowPii: true` — fields named |
64
+ | `AiSchemaValidationError` | A model response failed the prompt's `out` schema | Fix the prompt or the schema — response didn't conform |
65
+ | `ScheduleNotOverridableError` | Console tried to edit a clock declared without `overridable: true` | Declare it overridable and redeploy |
66
+ | `ClockResourceNotFoundError` | Console action targeted an unknown clock name | Check the name against your `clock()` declarations |
67
+ | `DryRunWriteIsolationError` | A write attempted inside a dry run | Dry runs never write — use a real run |
68
+ | `ManifestValidationError` | The compiled Manifest failed schema validation | Re-run the build; the error names the offending entry |
69
+ | `CrossPlaneError` | A user-plane token was used on the operator plane (or vice versa) | Use the correct principal for the plane |
70
+ | `AttenuationError` | A token was used beyond its attenuated scope | Re-issue with the needed scope |
71
+ | `SessionError` | Session token invalid, expired, or malformed | Re-authenticate |
72
+ | `OperatorError` | Operator-plane operation failed its checks | Error message names the failed check |
73
+ | `AccessGrantError` | Console access grant rejected | Re-request access with a valid grant |
74
+ | `UnsupportedPathError` | A route path shape the router can't compile | Simplify the path pattern |
75
+
76
+ ## Learn more
77
+
78
+ - [Flow](/docs/elements/flow) — `fx.fail` and the response envelope
79
+ - [Gate](/docs/elements/gate) — where the three denials come from
80
+ - [CLI Reference](/docs/reference/cli) — `oke db migrate` and friends