okengine 0.2.5 → 0.2.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (584) hide show
  1. package/AGENTS.md +24 -23
  2. package/README.md +52 -346
  3. package/docs/spec/console.md +165 -142
  4. package/docs/spec/example.md +490 -312
  5. package/docs/spec/four-applications.md +495 -314
  6. package/docs/spec/unified-theory.md +184 -175
  7. package/package.json +46 -38
  8. package/spec/manifest.v1.schema.json +40 -9
  9. package/src/auth/api-keys.ts +2 -5
  10. package/src/auth/attenuation.ts +2 -6
  11. package/src/auth/auth.test.ts +53 -31
  12. package/src/auth/invoke-as.ts +1 -3
  13. package/src/auth/operator.ts +8 -26
  14. package/src/auth/planes.ts +2 -7
  15. package/src/auth/plugin.ts +4 -7
  16. package/src/auth/roles.ts +1 -5
  17. package/src/auth/sessions.ts +10 -39
  18. package/src/cli/args.ts +1 -5
  19. package/src/cli/ask-dev-mode.ts +40 -0
  20. package/src/cli/build.ts +1 -2
  21. package/src/cli/client-add.test.ts +8 -15
  22. package/src/cli/client-add.ts +5 -14
  23. package/src/cli/completion.test.ts +1 -5
  24. package/src/cli/completion.ts +4 -17
  25. package/src/cli/db-auto-push.test.ts +64 -0
  26. package/src/cli/db-auto-push.ts +72 -0
  27. package/src/cli/db.test.ts +189 -0
  28. package/src/cli/db.ts +386 -0
  29. package/src/cli/dev-app-runner.ts +2 -8
  30. package/src/cli/dev-db-push.test.ts +163 -0
  31. package/src/cli/dev-mode.test.ts +45 -0
  32. package/src/cli/dev-mode.ts +78 -0
  33. package/src/cli/dev.test.ts +148 -21
  34. package/src/cli/dev.ts +208 -134
  35. package/src/cli/doc-drift.test.ts +3 -2
  36. package/src/cli/doc-drift.ts +21 -50
  37. package/src/cli/doc-staleness.test.ts +69 -0
  38. package/src/cli/docker-cli.test.ts +7 -8
  39. package/src/cli/docker.ts +1 -3
  40. package/src/cli/doctor-diff-examples.ts +1 -3
  41. package/src/cli/doctor-diff.test.ts +1 -5
  42. package/src/cli/doctor-diff.ts +17 -46
  43. package/src/cli/doctor-pii.ts +2 -7
  44. package/src/cli/doctor.test.ts +26 -4
  45. package/src/cli/doctor.ts +35 -11
  46. package/src/cli/eval.ts +4 -14
  47. package/src/cli/gates-list.ts +1 -4
  48. package/src/cli/hero-meta.test.ts +17 -19
  49. package/src/cli/hero-meta.ts +20 -30
  50. package/src/cli/images.ts +3 -8
  51. package/src/cli/index.ts +11 -2
  52. package/src/cli/load-config.images.test.ts +14 -14
  53. package/src/cli/load-config.ts +41 -47
  54. package/src/cli/mcp-from-console.ts +1 -4
  55. package/src/cli/mode.ts +45 -0
  56. package/src/cli/ports.test.ts +4 -13
  57. package/src/cli/ports.ts +1 -3
  58. package/src/cli/privacy-erase.ts +1 -3
  59. package/src/cli/registry.ts +75 -25
  60. package/src/cli/schema.ts +3 -10
  61. package/src/cli/stack.ts +2 -7
  62. package/src/cli/start.ts +4 -15
  63. package/src/cli/upgrade.ts +1 -4
  64. package/src/client/budget-entry.ts +1 -6
  65. package/src/client/create.test.ts +6 -12
  66. package/src/client/create.ts +2 -8
  67. package/src/client/errors.ts +1 -4
  68. package/src/client/index.ts +1 -6
  69. package/src/client/notes-contract.test.ts +4 -13
  70. package/src/client/transport.ts +9 -30
  71. package/src/client/types.ts +8 -29
  72. package/src/compiler/aot.test.ts +2 -9
  73. package/src/compiler/aot.ts +1 -4
  74. package/src/compiler/differential.test.ts +3 -11
  75. package/src/compiler/dynamic.ts +1 -4
  76. package/src/compiler/effects-infer.ts +8 -34
  77. package/src/compiler/emit.ts +1 -3
  78. package/src/compiler/extract.test.ts +96 -30
  79. package/src/compiler/extract.ts +362 -156
  80. package/src/compiler/fixtures/skyport/oke.config.ts +1 -1
  81. package/src/compiler/fixtures/skyport/src/flows/bookings/index.ts +7 -3
  82. package/src/compiler/fixtures/skyport/src/flows/payments/index.ts +1 -3
  83. package/src/compiler/fixtures/skyport/src/flows/support/index.ts +4 -1
  84. package/src/compiler/fixtures/skyport.expected.json +24 -83
  85. package/src/compiler/fixtures/triggers/five-triggers.ts +1 -2
  86. package/src/compiler/http-parse.ts +2 -9
  87. package/src/compiler/index.ts +1 -5
  88. package/src/compiler/response.ts +4 -7
  89. package/src/compiler/sucrose.ts +11 -31
  90. package/src/config/define-config.test.ts +57 -34
  91. package/src/config/index.ts +181 -37
  92. package/src/config/resolve-driver.test.ts +28 -17
  93. package/src/console/budget.test.ts +1 -4
  94. package/src/console/index.ts +1 -4
  95. package/src/console/server/access.test.ts +15 -43
  96. package/src/console/server/access.ts +19 -49
  97. package/src/console/server/ai.test.ts +3 -11
  98. package/src/console/server/ai.ts +23 -46
  99. package/src/console/server/app.ts +14 -45
  100. package/src/console/server/auth-rate.test.ts +4 -12
  101. package/src/console/server/bind.ts +1 -5
  102. package/src/console/server/channels.test.ts +2 -6
  103. package/src/console/server/channels.ts +10 -35
  104. package/src/console/server/claim.ts +2 -8
  105. package/src/console/server/clock.test.ts +2 -6
  106. package/src/console/server/clock.ts +8 -26
  107. package/src/console/server/console.test.ts +1 -3
  108. package/src/console/server/diff.test.ts +5 -17
  109. package/src/console/server/diff.ts +10 -31
  110. package/src/console/server/dry-run.audit.test.ts +2 -8
  111. package/src/console/server/flows.ts +64 -233
  112. package/src/console/server/gates.test.ts +14 -50
  113. package/src/console/server/gates.ts +13 -48
  114. package/src/console/server/index.ts +2 -9
  115. package/src/console/server/live.ts +3 -12
  116. package/src/console/server/operator-db.test.ts +4 -15
  117. package/src/console/server/operator-db.ts +13 -32
  118. package/src/console/server/plugin.ts +50 -53
  119. package/src/console/server/plugins.test.ts +2 -6
  120. package/src/console/server/plugins.ts +17 -56
  121. package/src/console/server/runs-pii.ts +2 -7
  122. package/src/console/server/security.gate.test.ts +18 -40
  123. package/src/console/server/serve.ts +10 -25
  124. package/src/console/server/signals.test.ts +1 -3
  125. package/src/console/server/signals.ts +17 -40
  126. package/src/console/server/state.ts +21 -59
  127. package/src/console/server/store.test.ts +20 -22
  128. package/src/console/server/store.ts +31 -76
  129. package/src/console/server/vault.test.ts +12 -29
  130. package/src/console/server/vault.ts +23 -60
  131. package/src/console/ui/access/AccessA11yView.tsx +6 -21
  132. package/src/console/ui/access/a11y.test.tsx +3 -12
  133. package/src/console/ui/access/acknowledgement.test.ts +1 -4
  134. package/src/console/ui/access/acknowledgement.ts +1 -3
  135. package/src/console/ui/access/blast-radius.ts +1 -3
  136. package/src/console/ui/access/confirmation.test.ts +1 -5
  137. package/src/console/ui/access/confirmation.ts +1 -4
  138. package/src/console/ui/access/fixture.ts +1 -5
  139. package/src/console/ui/access/grantable.test.ts +1 -3
  140. package/src/console/ui/access/grantable.ts +2 -7
  141. package/src/console/ui/access/index.ts +2 -9
  142. package/src/console/ui/access/provenance.test.ts +1 -3
  143. package/src/console/ui/access/provenance.ts +2 -6
  144. package/src/console/ui/access/search.test.ts +1 -5
  145. package/src/console/ui/access/search.ts +2 -6
  146. package/src/console/ui/ai/AiA11yView.tsx +6 -17
  147. package/src/console/ui/ai/a11y.test.tsx +2 -5
  148. package/src/console/ui/ai/fixture.ts +2 -7
  149. package/src/console/ui/ai/format.ts +1 -3
  150. package/src/console/ui/ai/group.test.ts +1 -3
  151. package/src/console/ui/ai/group.ts +4 -12
  152. package/src/console/ui/ai/index.ts +2 -9
  153. package/src/console/ui/ai/promotion.test.ts +2 -7
  154. package/src/console/ui/ai/promotion.ts +4 -13
  155. package/src/console/ui/ai/search.test.ts +2 -11
  156. package/src/console/ui/ai/search.ts +3 -13
  157. package/src/console/ui/ai/types.ts +1 -8
  158. package/src/console/ui/architecture/ArchitectureA11yView.tsx +8 -29
  159. package/src/console/ui/architecture/a11y.test.tsx +1 -2
  160. package/src/console/ui/architecture/declared.ts +1 -5
  161. package/src/console/ui/architecture/index.ts +7 -35
  162. package/src/console/ui/architecture/layout.ts +1 -3
  163. package/src/console/ui/architecture/pathologies.ts +10 -19
  164. package/src/console/ui/architecture/search.ts +6 -15
  165. package/src/console/ui/architecture/traffic.ts +4 -14
  166. package/src/console/ui/architecture/types.ts +2 -10
  167. package/src/console/ui/architecture/view.test.ts +7 -19
  168. package/src/console/ui/architecture/view.ts +9 -36
  169. package/src/console/ui/channels/ChannelsA11yView.tsx +4 -13
  170. package/src/console/ui/channels/a11y.test.tsx +1 -2
  171. package/src/console/ui/channels/confirmation.test.ts +1 -4
  172. package/src/console/ui/channels/confirmation.ts +1 -4
  173. package/src/console/ui/channels/findings.ts +1 -5
  174. package/src/console/ui/channels/index.ts +2 -8
  175. package/src/console/ui/channels/locale.test.ts +1 -3
  176. package/src/console/ui/channels/locale.ts +2 -8
  177. package/src/console/ui/channels/search.ts +4 -13
  178. package/src/console/ui/channels/taxonomy.ts +1 -3
  179. package/src/console/ui/clock/ClockA11yView.tsx +9 -26
  180. package/src/console/ui/clock/a11y.test.tsx +2 -5
  181. package/src/console/ui/clock/confirmation.test.ts +1 -3
  182. package/src/console/ui/clock/confirmation.ts +1 -4
  183. package/src/console/ui/clock/findings.ts +1 -4
  184. package/src/console/ui/clock/health.ts +2 -7
  185. package/src/console/ui/clock/index.ts +2 -10
  186. package/src/console/ui/clock/search.test.ts +1 -3
  187. package/src/console/ui/clock/search.ts +2 -6
  188. package/src/console/ui/clock/timeline.test.ts +1 -3
  189. package/src/console/ui/clock/waiting-on.test.ts +1 -5
  190. package/src/console/ui/clock/waiting-on.ts +2 -7
  191. package/src/console/ui/diff/DiffA11yView.tsx +8 -17
  192. package/src/console/ui/diff/a11y.test.tsx +2 -5
  193. package/src/console/ui/diff/group.test.ts +3 -13
  194. package/src/console/ui/diff/group.ts +2 -8
  195. package/src/console/ui/diff/index.ts +2 -8
  196. package/src/console/ui/diff/search.test.ts +1 -5
  197. package/src/console/ui/diff/search.ts +4 -16
  198. package/src/console/ui/diff/summary.ts +1 -2
  199. package/src/console/ui/dist/assets/{index-Dy4jht9P.js → index-BWo8R7NR.js} +2 -2
  200. package/src/console/ui/dist/assets/{panel-access-Dd37LU2c.js → panel-access-C0J2D-a2.js} +1 -1
  201. package/src/console/ui/dist/assets/{panel-ai-CC7LR6-J.js → panel-ai-D_m6WQI8.js} +1 -1
  202. package/src/console/ui/dist/assets/{panel-architecture-B5b3iKCz.js → panel-architecture-CKnXFyUx.js} +1 -1
  203. package/src/console/ui/dist/assets/{panel-channels-CeNjTKXp.js → panel-channels-BOmQ-onL.js} +1 -1
  204. package/src/console/ui/dist/assets/{panel-clock-DgFTLoHV.js → panel-clock-giAq0Ccv.js} +1 -1
  205. package/src/console/ui/dist/assets/{panel-diff-DxehccqB.js → panel-diff-cdonmH8c.js} +1 -1
  206. package/src/console/ui/dist/assets/{panel-flows-BtrVn-Eg.js → panel-flows-DlCU5zjA.js} +2 -2
  207. package/src/console/ui/dist/assets/{panel-gates-Z9MKRGdH.js → panel-gates-XclZxWD5.js} +1 -1
  208. package/src/console/ui/dist/assets/{panel-overview-Dt_AeXgd.js → panel-overview-BznEOTnb.js} +1 -1
  209. package/src/console/ui/dist/assets/{panel-plugins-DWd0TowH.js → panel-plugins-CcGM1g64.js} +1 -1
  210. package/src/console/ui/dist/assets/{panel-runs-DGstFHeq.js → panel-runs-CGWNHLR4.js} +1 -1
  211. package/src/console/ui/dist/assets/{panel-signals-DzEa2Fnt.js → panel-signals-CNywkdak.js} +1 -1
  212. package/src/console/ui/dist/assets/{panel-store-BJkbNgxx.js → panel-store-KmTbFHMH.js} +1 -1
  213. package/src/console/ui/dist/assets/{panel-traces-BaRVO3gM.js → panel-traces-DBLx2ilD.js} +1 -1
  214. package/src/console/ui/dist/assets/panel-vault-CEnFc0dk.js +1 -0
  215. package/src/console/ui/dist/index.html +1 -1
  216. package/src/console/ui/flows/FlowsA11yView.tsx +7 -22
  217. package/src/console/ui/flows/a11y.test.tsx +2 -8
  218. package/src/console/ui/flows/buffer.test.ts +3 -11
  219. package/src/console/ui/flows/buffer.ts +4 -11
  220. package/src/console/ui/flows/confirmation.ts +1 -3
  221. package/src/console/ui/flows/contract.test.ts +3 -7
  222. package/src/console/ui/flows/contract.ts +12 -36
  223. package/src/console/ui/flows/graph.test.ts +3 -11
  224. package/src/console/ui/flows/graph.ts +5 -15
  225. package/src/console/ui/flows/index.ts +1 -6
  226. package/src/console/ui/flows/save-as-test.ts +1 -3
  227. package/src/console/ui/flows/search.ts +8 -25
  228. package/src/console/ui/flows/tiers.ts +2 -9
  229. package/src/console/ui/gates/GatesA11yView.tsx +4 -13
  230. package/src/console/ui/gates/a11y.test.tsx +2 -5
  231. package/src/console/ui/gates/audit.ts +1 -3
  232. package/src/console/ui/gates/denial.test.ts +1 -3
  233. package/src/console/ui/gates/denial.ts +4 -12
  234. package/src/console/ui/gates/findings.ts +1 -3
  235. package/src/console/ui/gates/group.test.ts +3 -3
  236. package/src/console/ui/gates/group.ts +3 -11
  237. package/src/console/ui/gates/index.ts +2 -10
  238. package/src/console/ui/gates/search.ts +3 -10
  239. package/src/console/ui/overview/OverviewA11yView.tsx +9 -27
  240. package/src/console/ui/overview/a11y.test.tsx +1 -2
  241. package/src/console/ui/overview/busiest.ts +1 -3
  242. package/src/console/ui/overview/compose.ts +1 -13
  243. package/src/console/ui/overview/cost.ts +34 -38
  244. package/src/console/ui/overview/fixture.ts +21 -26
  245. package/src/console/ui/overview/golden.ts +4 -14
  246. package/src/console/ui/overview/index.ts +2 -9
  247. package/src/console/ui/overview/rank.test.ts +3 -10
  248. package/src/console/ui/overview/rank.ts +2 -7
  249. package/src/console/ui/overview/slo.test.ts +5 -9
  250. package/src/console/ui/overview/slo.ts +6 -23
  251. package/src/console/ui/overview/verdict.ts +3 -10
  252. package/src/console/ui/plugins/PluginsA11yView.tsx +8 -18
  253. package/src/console/ui/plugins/a11y.test.tsx +1 -2
  254. package/src/console/ui/plugins/fixture.ts +2 -4
  255. package/src/console/ui/plugins/group.test.ts +1 -3
  256. package/src/console/ui/plugins/group.ts +1 -6
  257. package/src/console/ui/plugins/index.ts +3 -13
  258. package/src/console/ui/plugins/search.ts +7 -19
  259. package/src/console/ui/runs/RunsA11yView.tsx +5 -20
  260. package/src/console/ui/runs/a11y.test.tsx +2 -5
  261. package/src/console/ui/runs/explain.ts +2 -6
  262. package/src/console/ui/runs/group.ts +3 -12
  263. package/src/console/ui/runs/histogram.test.ts +2 -11
  264. package/src/console/ui/runs/histogram.ts +1 -4
  265. package/src/console/ui/runs/index.ts +4 -18
  266. package/src/console/ui/runs/project.ts +2 -6
  267. package/src/console/ui/runs/query.test.ts +1 -3
  268. package/src/console/ui/runs/query.ts +12 -35
  269. package/src/console/ui/runs/search.ts +5 -19
  270. package/src/console/ui/runs/trace-link.test.ts +2 -6
  271. package/src/console/ui/runs/trace-link.ts +4 -16
  272. package/src/console/ui/runs/types.ts +1 -3
  273. package/src/console/ui/shell/App.tsx +2 -10
  274. package/src/console/ui/shell/client.ts +22 -115
  275. package/src/console/ui/shell/components/ui.tsx +1 -4
  276. package/src/console/ui/shell/layout/Shell.tsx +2 -4
  277. package/src/console/ui/shell/main.tsx +31 -96
  278. package/src/console/ui/shell/panels/access/AccessPanel.tsx +34 -98
  279. package/src/console/ui/shell/panels/ai/AiPanel.tsx +35 -106
  280. package/src/console/ui/shell/panels/architecture/ArchitecturePanel.tsx +18 -66
  281. package/src/console/ui/shell/panels/channels/ChannelsPanel.tsx +20 -57
  282. package/src/console/ui/shell/panels/clock/ClockPanel.tsx +22 -54
  283. package/src/console/ui/shell/panels/diff/DiffPanel.tsx +20 -61
  284. package/src/console/ui/shell/panels/flows/ContractEditor.tsx +6 -23
  285. package/src/console/ui/shell/panels/flows/FlowDrawer.tsx +13 -28
  286. package/src/console/ui/shell/panels/flows/FlowsPanel.tsx +9 -29
  287. package/src/console/ui/shell/panels/gates/GatesPanel.tsx +24 -80
  288. package/src/console/ui/shell/panels/overview/OverviewPanel.tsx +20 -58
  289. package/src/console/ui/shell/panels/plugins/PluginsPanel.tsx +16 -41
  290. package/src/console/ui/shell/panels/runs/RunsPanel.tsx +31 -99
  291. package/src/console/ui/shell/panels/signals/SignalsPanel.tsx +38 -101
  292. package/src/console/ui/shell/panels/store/StorePanel.tsx +27 -66
  293. package/src/console/ui/shell/panels/traces/TracesPanel.tsx +28 -89
  294. package/src/console/ui/shell/panels/vault/VaultPanel.tsx +22 -53
  295. package/src/console/ui/shell/setup/Wizard.tsx +3 -5
  296. package/src/console/ui/shell/styles.css +1 -2
  297. package/src/console/ui/signals/SignalsA11yView.tsx +9 -33
  298. package/src/console/ui/signals/a11y.test.tsx +2 -5
  299. package/src/console/ui/signals/confirmation.test.ts +1 -5
  300. package/src/console/ui/signals/confirmation.ts +2 -6
  301. package/src/console/ui/signals/dry-run.ts +1 -3
  302. package/src/console/ui/signals/durable.ts +1 -3
  303. package/src/console/ui/signals/findings.ts +1 -3
  304. package/src/console/ui/signals/group.test.ts +2 -8
  305. package/src/console/ui/signals/group.ts +2 -10
  306. package/src/console/ui/signals/index.ts +1 -4
  307. package/src/console/ui/signals/monitor.ts +2 -7
  308. package/src/console/ui/signals/schema-form.test.ts +3 -14
  309. package/src/console/ui/signals/schema-form.ts +1 -4
  310. package/src/console/ui/signals/search.ts +4 -13
  311. package/src/console/ui/store/StoreA11yView.tsx +3 -9
  312. package/src/console/ui/store/a11y.test.tsx +2 -5
  313. package/src/console/ui/store/confirmation.test.ts +1 -3
  314. package/src/console/ui/store/confirmation.ts +1 -4
  315. package/src/console/ui/store/dry-run.ts +2 -5
  316. package/src/console/ui/store/fixture.ts +1 -2
  317. package/src/console/ui/store/group.test.ts +1 -6
  318. package/src/console/ui/store/group.ts +1 -4
  319. package/src/console/ui/store/index.ts +1 -5
  320. package/src/console/ui/store/search.ts +2 -6
  321. package/src/console/ui/store/will-not-fire.ts +1 -2
  322. package/src/console/ui/traces/TracesA11yView.tsx +10 -29
  323. package/src/console/ui/traces/a11y.test.tsx +1 -2
  324. package/src/console/ui/traces/chain.test.ts +5 -19
  325. package/src/console/ui/traces/chain.ts +1 -3
  326. package/src/console/ui/traces/critical-path.test.ts +1 -3
  327. package/src/console/ui/traces/critical-path.ts +2 -6
  328. package/src/console/ui/traces/filter.test.ts +2 -6
  329. package/src/console/ui/traces/filter.ts +5 -13
  330. package/src/console/ui/traces/fold.test.ts +4 -12
  331. package/src/console/ui/traces/fold.ts +1 -3
  332. package/src/console/ui/traces/mini.ts +1 -3
  333. package/src/console/ui/traces/replay.test.ts +1 -3
  334. package/src/console/ui/traces/replay.ts +1 -3
  335. package/src/console/ui/traces/sampling.ts +1 -4
  336. package/src/console/ui/traces/search.ts +4 -17
  337. package/src/console/ui/traces/tier.ts +1 -3
  338. package/src/console/ui/vault/VaultA11yView.tsx +5 -17
  339. package/src/console/ui/vault/a11y.test.tsx +1 -2
  340. package/src/console/ui/vault/blast-radius.ts +1 -3
  341. package/src/console/ui/vault/confirmation.test.ts +1 -5
  342. package/src/console/ui/vault/confirmation.ts +1 -4
  343. package/src/console/ui/vault/dormant.test.ts +1 -4
  344. package/src/console/ui/vault/export-safe.test.ts +1 -5
  345. package/src/console/ui/vault/export-safe.ts +1 -4
  346. package/src/console/ui/vault/fixture.ts +3 -3
  347. package/src/console/ui/vault/group.ts +1 -2
  348. package/src/console/ui/vault/index.ts +2 -10
  349. package/src/console/ui/vault/search.ts +2 -6
  350. package/src/console/ui/vault/types.ts +1 -1
  351. package/src/console/xss.gate.test.ts +1 -3
  352. package/src/docker/compose.ts +112 -20
  353. package/src/docker/derive.ts +5 -19
  354. package/src/docker/docker.test.ts +15 -15
  355. package/src/docker/dockerfile.integration.test.ts +12 -21
  356. package/src/docker/helpers.ts +5 -4
  357. package/src/docker/index.ts +4 -11
  358. package/src/docker/pin.ts +1 -9
  359. package/src/docker/recipes/index.ts +5 -6
  360. package/src/docker/recipes/mailpit.ts +22 -0
  361. package/src/docker/recipes/postgres.ts +17 -6
  362. package/src/docker/recipes/redis.ts +6 -1
  363. package/src/docker/recipes/rustfs.ts +33 -0
  364. package/src/docker/stack-id.test.ts +33 -0
  365. package/src/docker/stack-id.ts +25 -13
  366. package/src/docker/stack.integration.test.ts +6 -21
  367. package/src/docker/types.ts +13 -4
  368. package/src/drivers/ai-anthropic.ts +5 -14
  369. package/src/drivers/ai-mock.ts +2 -5
  370. package/src/drivers/ai-openai-compatible.ts +4 -10
  371. package/src/drivers/ai-providers.test.ts +6 -13
  372. package/src/drivers/bun-native-completeness.test.ts +6 -15
  373. package/src/drivers/channel-console.ts +6 -7
  374. package/src/drivers/channel-fcm.ts +20 -30
  375. package/src/drivers/channel-resend.ts +1 -3
  376. package/src/drivers/channel-smtp.ts +2 -6
  377. package/src/drivers/channel-types.ts +2 -12
  378. package/src/drivers/channel-unifonic.ts +2 -6
  379. package/src/drivers/channel-wa-cloud.ts +2 -6
  380. package/src/drivers/channel-webpush.ts +21 -60
  381. package/src/drivers/conformance.test.ts +2 -10
  382. package/src/drivers/conformance.ts +8 -21
  383. package/src/drivers/fs.ts +2 -8
  384. package/src/drivers/index.ts +12 -56
  385. package/src/drivers/memory.ts +14 -41
  386. package/src/drivers/pgvector.ts +7 -11
  387. package/src/drivers/postgres.ts +7 -13
  388. package/src/drivers/redis.ts +13 -37
  389. package/src/drivers/s3.ts +5 -17
  390. package/src/drivers/signal-engine.ts +12 -49
  391. package/src/drivers/signal-memory.ts +2 -8
  392. package/src/drivers/signal-nats.ts +4 -9
  393. package/src/drivers/signal-postgres.ts +62 -129
  394. package/src/drivers/signal-redis.ts +7 -21
  395. package/src/drivers/signal-types.ts +1 -4
  396. package/src/drivers/sqlite.ts +3 -12
  397. package/src/drivers/types.ts +4 -23
  398. package/src/drivers/vault-env.ts +2 -6
  399. package/src/drivers/vault-infisical.ts +1 -5
  400. package/src/drivers/vault-managed.ts +1 -5
  401. package/src/drivers/vault-memory.ts +1 -5
  402. package/src/drivers/vault-openbao.ts +1 -5
  403. package/src/drivers/vault-sops.ts +10 -35
  404. package/src/drivers/vault-types.ts +1 -7
  405. package/src/elements/ai/declare.ts +4 -14
  406. package/src/elements/ai/eval.ts +2 -6
  407. package/src/elements/ai/pii.ts +1 -3
  408. package/src/elements/ai/runtime.ts +12 -50
  409. package/src/elements/ai/schema.ts +4 -15
  410. package/src/elements/ai.test.ts +13 -24
  411. package/src/elements/ai.ts +1 -5
  412. package/src/elements/channel/consent.ts +3 -12
  413. package/src/elements/channel/costs.ts +4 -15
  414. package/src/elements/channel/declare.ts +1 -4
  415. package/src/elements/channel/email-auth.ts +1 -4
  416. package/src/elements/channel/locale.ts +2 -10
  417. package/src/elements/channel/mask.ts +1 -3
  418. package/src/elements/channel/mime.ts +2 -12
  419. package/src/elements/channel/outcomes.test.ts +1 -5
  420. package/src/elements/channel/outcomes.ts +5 -15
  421. package/src/elements/channel/receipts.ts +2 -7
  422. package/src/elements/channel/runtime.ts +28 -74
  423. package/src/elements/channel/suppression.ts +8 -14
  424. package/src/elements/channel.test.ts +8 -31
  425. package/src/elements/channel.ts +3 -14
  426. package/src/elements/clock/actions.ts +6 -18
  427. package/src/elements/clock/declare.ts +1 -3
  428. package/src/elements/clock/dst.ts +1 -5
  429. package/src/elements/clock/durable.ts +4 -16
  430. package/src/elements/clock/health.ts +2 -7
  431. package/src/elements/clock/leader.ts +2 -9
  432. package/src/elements/clock/reconcile.ts +4 -15
  433. package/src/elements/clock/runtime.ts +2 -5
  434. package/src/elements/clock/schedule.ts +4 -20
  435. package/src/elements/clock.test.ts +2 -7
  436. package/src/elements/clock.ts +5 -23
  437. package/src/elements/gate/permissions.ts +1 -4
  438. package/src/elements/gate/runtime.ts +7 -28
  439. package/src/elements/gate.ts +1 -5
  440. package/src/elements/index.ts +9 -7
  441. package/src/elements/signal/declare.ts +2 -7
  442. package/src/elements/signal/reconcile.test.ts +1 -4
  443. package/src/elements/signal/runtime.ts +1 -3
  444. package/src/elements/signal.test.ts +3 -15
  445. package/src/elements/signal.ts +2 -8
  446. package/src/elements/store/cache.test.ts +46 -0
  447. package/src/elements/store/cache.ts +3 -11
  448. package/src/elements/store/classify.ts +5 -22
  449. package/src/elements/store/declare.ts +8 -17
  450. package/src/elements/store/domain-ddl.test.ts +86 -0
  451. package/src/elements/store/emit-drizzle.ts +363 -0
  452. package/src/elements/store/files-policy.test.ts +1 -5
  453. package/src/elements/store/files-policy.ts +4 -12
  454. package/src/elements/store/load-plugin-tables.ts +103 -0
  455. package/src/elements/store/missing-relation.test.ts +83 -0
  456. package/src/elements/store/missing-relation.ts +38 -0
  457. package/src/elements/store/replica.ts +1 -4
  458. package/src/elements/store/runtime.ts +25 -28
  459. package/src/elements/store/schema-decl.test.ts +227 -0
  460. package/src/elements/store/schema-decl.ts +516 -0
  461. package/src/elements/store/sql-condition.ts +11 -21
  462. package/src/elements/store/sql-session.test.ts +50 -0
  463. package/src/elements/store/sql-session.ts +60 -63
  464. package/src/elements/store/table.ts +35 -19
  465. package/src/elements/store.test.ts +17 -39
  466. package/src/elements/store.ts +37 -31
  467. package/src/elements/vault/chain.ts +34 -0
  468. package/src/elements/vault/declare.ts +22 -32
  469. package/src/elements/vault/fingerprint.ts +2 -7
  470. package/src/elements/vault/redact.ts +2 -6
  471. package/src/elements/vault/runtime.ts +18 -32
  472. package/src/elements/vault.test.ts +12 -28
  473. package/src/elements/vault.ts +8 -12
  474. package/src/index.ts +5 -2
  475. package/src/kernel/adopt-routes.ts +15 -29
  476. package/src/kernel/app.ts +34 -94
  477. package/src/kernel/auth-resolve.ts +2 -9
  478. package/src/kernel/boot-bind/ai.ts +1 -4
  479. package/src/kernel/boot-bind/channel.ts +2 -8
  480. package/src/kernel/boot-bind/clock.ts +2 -6
  481. package/src/kernel/boot-bind/gate.ts +2 -8
  482. package/src/kernel/boot-bind/runs.ts +1 -3
  483. package/src/kernel/boot-bind/signal.ts +3 -10
  484. package/src/kernel/boot-bind/store.test.ts +17 -17
  485. package/src/kernel/boot-bind/store.ts +44 -50
  486. package/src/kernel/boot-bind/vault.ts +2 -8
  487. package/src/kernel/boot.test.ts +4 -9
  488. package/src/kernel/boot.ts +29 -76
  489. package/src/kernel/budget.test.ts +1 -3
  490. package/src/kernel/capability.ts +3 -10
  491. package/src/kernel/dry-run.test.ts +1 -4
  492. package/src/kernel/dry-run.ts +3 -11
  493. package/src/kernel/effects.test.ts +1 -5
  494. package/src/kernel/effects.ts +4 -11
  495. package/src/kernel/errors.registry.test.ts +2 -8
  496. package/src/kernel/errors.ts +23 -32
  497. package/src/kernel/flow.test.ts +12 -25
  498. package/src/kernel/flow.ts +5 -25
  499. package/src/kernel/fx.test.ts +15 -44
  500. package/src/kernel/fx.ts +27 -79
  501. package/src/kernel/hook-timing.test.ts +3 -6
  502. package/src/kernel/hook-timing.ts +5 -14
  503. package/src/kernel/hooks.test.ts +10 -10
  504. package/src/kernel/hooks.ts +3 -12
  505. package/src/kernel/index.ts +4 -17
  506. package/src/kernel/journal.ts +7 -31
  507. package/src/kernel/on.ts +1 -6
  508. package/src/kernel/pipeline.test.ts +10 -19
  509. package/src/kernel/pipeline.ts +5 -17
  510. package/src/kernel/plug.ts +4 -11
  511. package/src/kernel/plugin/conflicts.test.ts +13 -25
  512. package/src/kernel/plugin/decorate.test.ts +8 -13
  513. package/src/kernel/plugin/scoping.test.ts +4 -11
  514. package/src/kernel/plugin.ts +48 -24
  515. package/src/kernel/registry.ts +80 -29
  516. package/src/kernel/router.test.ts +15 -13
  517. package/src/kernel/router.ts +9 -29
  518. package/src/kernel/routing-budget.test.ts +1 -3
  519. package/src/kernel/run-telemetry.ts +1 -3
  520. package/src/kernel/triggers.ts +4 -21
  521. package/src/manifest/diff.test.ts +26 -91
  522. package/src/manifest/diff.ts +95 -225
  523. package/src/manifest/index.ts +2 -9
  524. package/src/manifest/types.ts +29 -5
  525. package/src/manifest/undeclared.test.ts +4 -12
  526. package/src/manifest/undeclared.ts +1 -2
  527. package/src/manifest/validate.test.ts +2 -6
  528. package/src/manifest/validate.ts +4 -14
  529. package/src/mcp/authorization.ts +8 -27
  530. package/src/mcp/confirmation.ts +3 -10
  531. package/src/mcp/data.ts +2 -6
  532. package/src/mcp/docs-index.ts +4 -7
  533. package/src/mcp/docs-mcp.test.ts +3 -12
  534. package/src/mcp/docs-server.ts +7 -27
  535. package/src/mcp/docs-tools.ts +2 -6
  536. package/src/mcp/index.ts +1 -6
  537. package/src/mcp/injection.gate.test.ts +4 -18
  538. package/src/mcp/mcp.test.ts +18 -49
  539. package/src/mcp/protocol.ts +3 -10
  540. package/src/mcp/server.ts +11 -52
  541. package/src/mcp/session.ts +4 -14
  542. package/src/mcp/tools.ts +14 -50
  543. package/src/plugins/catalogue.test.ts +3 -7
  544. package/src/plugins/catalogue.ts +1 -3
  545. package/src/plugins/node-import-scan.ts +2 -5
  546. package/src/plugins/supply-chain.ts +5 -17
  547. package/src/release/exports.ts +3 -8
  548. package/src/release/measure.exports.test.ts +1 -3
  549. package/src/release/measure.ts +15 -43
  550. package/src/runs/bench.test.ts +1 -3
  551. package/src/runs/collect.ts +8 -25
  552. package/src/runs/drivers/clickhouse.ts +2 -9
  553. package/src/runs/drivers/files.ts +9 -31
  554. package/src/runs/drivers/memory.ts +5 -22
  555. package/src/runs/drivers/postgres.ts +8 -20
  556. package/src/runs/duckdb.ts +2 -8
  557. package/src/runs/index.ts +3 -14
  558. package/src/runs/outlier.ts +3 -10
  559. package/src/runs/parquet.ts +8 -26
  560. package/src/runs/privacy.ts +2 -8
  561. package/src/runs/runs.test.ts +3 -9
  562. package/src/runs/runtime.ts +7 -32
  563. package/src/runs/shred.ts +10 -29
  564. package/src/runs/types.ts +1 -4
  565. package/src/runtime/bun.ts +4 -15
  566. package/src/runtime/cold-start.bench.ts +1 -3
  567. package/src/runtime/dev-request-log.test.ts +1 -4
  568. package/src/runtime/dev-request-log.ts +1 -4
  569. package/src/runtime/index.ts +1 -6
  570. package/src/runtime/primitives.ts +5 -4
  571. package/src/runtime/security.ts +3 -13
  572. package/src/runtime/serve.test.ts +4 -7
  573. package/src/runtime/types.ts +1 -4
  574. package/src/runtime/web-standard.ts +3 -15
  575. package/src/term.test.ts +4 -6
  576. package/src/term.ts +49 -98
  577. package/src/test/create-test-app.test.ts +4 -14
  578. package/src/test/create-test-app.ts +13 -31
  579. package/src/test/provisions.integration.test.ts +3 -11
  580. package/src/upgrade/codemods.test.ts +25 -6
  581. package/src/upgrade/codemods.ts +116 -3
  582. package/src/validation/standard-schema.test.ts +2 -5
  583. package/src/validation/standard-schema.ts +13 -33
  584. package/src/console/ui/dist/assets/panel-vault-BbfWdox0.js +0 -1
package/AGENTS.md CHANGED
@@ -14,16 +14,16 @@ There are no separate species called endpoints, handlers, consumers, jobs, subsc
14
14
 
15
15
  ## The eight elements
16
16
 
17
- | Element | Essence |
18
- |---|---|
19
- | **Flow** | behavior |
20
- | **Signal** | data in motion |
21
- | **Store** | data at rest (`sql` · `kv` · `files` · `index`) |
22
- | **Clock** | time |
23
- | **Gate** | permission to act |
24
- | **Vault** | protected knowledge |
25
- | **Channel** | reaching humans |
26
- | **AI** | reaching machine intelligence |
17
+ | Element | Essence |
18
+ | ----------- | ----------------------------------------------- |
19
+ | **Flow** | behavior |
20
+ | **Signal** | data in motion |
21
+ | **Store** | data at rest (`sql` · `kv` · `files` · `index`) |
22
+ | **Clock** | time |
23
+ | **Gate** | permission to act |
24
+ | **Vault** | protected knowledge |
25
+ | **Channel** | reaching humans |
26
+ | **AI** | reaching machine intelligence |
27
27
 
28
28
  An element earns its place only if it has irreducible physics. New infrastructure becomes a new **driver** for an existing element — never a ninth element.
29
29
 
@@ -53,28 +53,29 @@ A direct `node:` import (or any other side-channel I/O) in element or flow code
53
53
 
54
54
  ## Ports
55
55
 
56
- | Port | Surface |
57
- |---|---|
58
- | **6530** | App |
56
+ | Port | Surface |
57
+ | -------- | ------- |
58
+ | **6530** | App |
59
59
  | **6533** | Console |
60
- | **6535** | MCP |
60
+ | **6535** | MCP |
61
61
 
62
62
  Mnemonic: O·K·E = 6·5·3.
63
63
 
64
64
  ## Budgets
65
65
 
66
- | Budget | Limit |
67
- |---|---|
66
+ | Budget | Limit |
67
+ | --------------------- | ------- |
68
68
  | Kernel (edge profile) | < 15 kB |
69
- | Client runtime | < 3 kB |
70
- | Cold start on Bun | < 75 ms |
71
- | p99 routing overhead | < 1 ms |
69
+ | Client runtime | < 3 kB |
70
+ | Cold start on Bun | < 75 ms |
71
+ | p99 routing overhead | < 1 ms |
72
72
 
73
73
  A regression fails the build. Claims we cannot measure, we do not make.
74
74
 
75
75
  ## Package shape
76
76
 
77
77
  Published packages:
78
+
78
79
  - `okengine` — framework. Subpath exports: `.`, `./client`, `./test`, `./config`, `./auth`, `./drivers/*`. `"sideEffects": false`. CLI binary: `oke`.
79
80
  - `create-oke` — scaffold CLI (`bunx create-oke@latest <name>`). Lives in `packages/create-oke`; clean starters are `templates/*`, teaching apps stay in `examples/*` (`--from-example`).
80
81
 
@@ -82,10 +83,10 @@ Engine: Bun `>=1.3`.
82
83
 
83
84
  ## Spec authority
84
85
 
85
- | Spec | Path |
86
- |---|---|
87
- | Unified theory | `docs/spec/unified-theory.md` |
86
+ | Spec | Path |
87
+ | ----------------- | -------------------------------- |
88
+ | Unified theory | `docs/spec/unified-theory.md` |
88
89
  | Four applications | `docs/spec/four-applications.md` |
89
- | Console | `docs/spec/console.md` |
90
+ | Console | `docs/spec/console.md` |
90
91
 
91
92
  **If the spec is silent, stop and ask.**
package/README.md CHANGED
@@ -7,7 +7,7 @@
7
7
 
8
8
  # okengine
9
9
 
10
- *"Encore's batteries and dashboard, Elysia's speed and DX, Hono's portability without the Rust lock-in, the cloud gravity, or the source-available license."*
10
+ _"Stop gluing APIs, jobs, and queues into one backend. One law collapses them client, Console, and infra come free. Yours to host."_
11
11
 
12
12
  [![npm](https://img.shields.io/npm/v/okengine.svg)](https://www.npmjs.com/package/okengine)
13
13
  [![JSR](https://jsr.io/badges/@omqkhafi/okengine)](https://jsr.io/@omqkhafi/okengine)
@@ -15,372 +15,78 @@
15
15
  [![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](https://opensource.org/licenses/MIT)
16
16
  [![Bun >=1.3](https://img.shields.io/badge/Bun-%3E%3D1.3-black.svg)](https://bun.sh)
17
17
 
18
- **Framework:** [`okengine`](https://www.npmjs.com/package/okengine) · **CLI:** `oke` · **Scaffold:** [`create-oke`](https://www.npmjs.com/package/create-oke) · **Docs:** [okengine.vercel.app](https://okengine.vercel.app) · **License:** MIT
18
+ **Docs:** [okengine.vercel.app](https://okengine.vercel.app) · **Handbook:** [/docs](https://okengine.vercel.app/docs) · **CLI:** `oke` · **Scaffold:** [`create-oke`](https://www.npmjs.com/package/create-oke)
19
19
 
20
- ### Install
20
+ > [!WARNING]
21
+ > **Early development (`v0.x`) — not production-ready.**
22
+ >
23
+ > APIs, drivers, and tooling can change quickly, including **breaking changes**, until an initial stable release. Use for exploration and feedback — **not** production workloads yet.
21
24
 
22
- ```bash
23
- bun add okengine # npm (recommended — ships the `oke` CLI)
24
- bunx jsr add @omqkhafi/okengine # JSR — library API only
25
- bunx create-oke@latest my-app --template hello # scaffold from npm
26
- ```
27
- ---
28
-
29
- ## Start here
30
-
31
- Most backends are a pile of separate tools under one logo: a router, a queue library, a cron library, websockets, tracing. The pieces ship together; they do not follow from one idea. That is why docs sprawl and concepts never get removed.
32
-
33
- OKE starts from one sentence instead:
34
-
35
- > **Every backend behavior is a Flow:** `on(Trigger) → Effects`
36
-
37
- An HTTP route, a cron job, a queue consumer, a CDC hook — same shape. Triggers are typed values. Side effects go through `fx` (the only door to the outside world), so the compiler can see them.
25
+ ## Install
38
26
 
39
- Eight elements cover what a backend needs. Ten exports are the whole public vocabulary. Everything else is derived.
40
-
41
- ```typescript
42
- import { on, flow, signal, store, clock, gate, vault, channel, ai, plugin } from "okengine";
27
+ ```bash
28
+ bun add okengine # framework + `oke` CLI
29
+ bunx jsr add @omqkhafi/okengine # JSR — library API only
30
+ bunx create-oke@latest my-app --template hello # scaffold
43
31
  ```
44
32
 
45
- Batteries included for the Bun era: contract-first APIs, typed client, infrastructure primitives, Console, auth — pure TypeScript, MIT, self-hostable, no cloud lock-in. Handbook: [handbook](https://okengine.vercel.app/docs). Spec depth: [`docs/spec/unified-theory.md`](https://github.com/omqkhafi/okengine/blob/main/docs/spec/unified-theory.md).
46
-
47
- ---
48
-
49
- ## Run something in two minutes
33
+ ## Quick start
50
34
 
51
35
  ```bash
52
36
  bunx create-oke@latest my-app --template hello
53
37
  cd my-app
54
38
  oke dev
39
+ # or: oke mode docker && oke dev # compose infra · app on host Bun
55
40
  ```
56
41
 
57
- | Port | What |
58
- |---|---|
59
- | `:6530` | your app |
60
- | `:6533` | Console |
61
- | `:6535` | MCP (your live Manifest, for agents) |
62
-
63
- Mnemonic: **O·K·E = 6·5·3**. Docs MCP for the handbook is a separate surface on `:6536` (search/fetch only — see [Documentation](#documentation)).
64
-
65
- That scaffolds the **hello** starter — one flow, no Store, the fastest true "it works" moment. Default without `--template` is **standard** (full recommended file layout, empty scaffolding). Open the Console — flows, contracts, effects, and an architecture diagram are already there. Derived, not configured.
42
+ | Port | Surface |
43
+ | ------- | ------------------------------------------- |
44
+ | `:6530` | App |
45
+ | `:6533` | Console |
46
+ | `:6535` | MCP (live Manifest) |
47
+ | `:6536` | Docs MCP (handbook search/fetch, read-only) |
66
48
 
67
- Prefer a worked teaching app (business logic + comments)? Use `--from-example notes|linkly|provisions|skyport` instead.
49
+ Mnemonic: **O·K·E = 6·5·3**.
68
50
 
69
- ### The idea, in one file
51
+ Every backend behavior is a Flow: `on(Trigger) → Effects`. World access goes through `fx`.
70
52
 
71
- A flow is a trigger, contracts, and a `do` that only talks to the world through `fx`:
53
+ Store apps sync schema with `oke db push|generate|migrate` (local `oke dev`
54
+ auto-pushes). Prefer `store.schema.table` + `field.*` (see Linkly) or keep a
55
+ hand-written Drizzle `schema.ts`.
72
56
 
73
57
  ### `examples/notes/src/flows/notes/index.ts`
74
58
 
75
59
  ```typescript
76
- import { on, flow, http } from "okengine";
77
- import { createInsertSchema, createSelectSchema } from "drizzle-zod";
78
- import { z } from "zod";
79
- import { db } from "../../core";
80
- import { notes } from "../../schema";
81
-
82
- // Contracts derived from the schema — one source of truth, refined where the API is stricter
83
- const NewNote = createInsertSchema(notes, { title: (s) => s.min(1).max(120) })
84
- .omit({ id: true, createdAt: true });
85
- const Note = createSelectSchema(notes);
86
- const NoteId = z.object({ id: z.string() });
87
- const NotFound = z.object({});
88
-
89
- export const create = on(http.post("/notes"), flow({
90
- in: NewNote,
91
- out: NoteId,
92
- do: async (input, fx) => {
93
- const [note] = await fx.store(db).insert(notes).values(input).returning();
94
- return { id: note.id };
95
- },
96
- }));
97
- // effects → writes[sql:notes]
98
-
99
- export const list = on(http.get("/notes"), flow({
100
- out: Note.array(),
101
- do: (_, fx) => fx.store(db).select().from(notes),
102
- }));
103
- // effects → reads[sql:notes]
104
-
105
- export const get = on(http.get("/notes/:id"), flow({
106
- in: NoteId,
107
- out: Note,
108
- errors: { NotFound },
109
- do: async ({ id }, fx) => (await fx.store(db).findById(notes, id)) ?? fx.fail("NotFound", {}),
110
- }));
111
-
112
- export const remove = on(http.delete("/notes/:id"), flow({
113
- in: NoteId,
114
- errors: { NotFound },
115
- do: async ({ id }, fx) => {
116
- const deleted = await fx.store(db).delete(notes, id);
117
- if (!deleted) return fx.fail("NotFound", {});
118
- },
119
- }));
120
- ```
121
-
122
- Wire the unit into the app. The client needs only this type — no separate codegen:
123
-
124
- ### `examples/notes/src/app.ts`
125
-
126
- ```typescript
127
- import { oke } from "okengine";
128
- import * as notes from "./flows/notes";
129
-
130
- export const app = oke({ name: "notes" }).adopt({ notes });
131
-
132
- export type App = typeof app; // ← the client needs nothing else
60
+ export const create = on(
61
+ http.post("/notes"),
62
+ flow({
63
+ in: NewNote,
64
+ out: NoteId,
65
+ do: async (input, fx) => {
66
+ const [note] = await fx.store(db).insert(notes).values(input).returning();
67
+ return { id: note.id };
68
+ },
69
+ }),
70
+ );
133
71
  ```
134
72
 
135
- The rest of the scaffold is small and ordinary: `oke.config.ts` (drivers by protocol), `src/schema.ts` (Drizzle table), `src/core.ts` (`store.sql`). Full walkthrough: [`docs/spec/four-applications.md`](docs/spec/four-applications.md) · §1 Notes.
136
-
137
- ---
138
-
139
- ## How to learn (read in order)
140
-
141
- Start on the site if you want the handbook path: [Introduction](https://okengine.vercel.app/docs/get-started/introduction) → [Installation](https://okengine.vercel.app/docs/get-started/installation) → [Basic usage](https://okengine.vercel.app/docs/get-started/basic-usage).
142
-
143
- Each teaching app adds the smallest next set of ideas. Do not skip ahead.
144
-
145
- 1. **Notes** — `oke`, `on`, `flow`, `http`, `store.sql`, `fx`, typed errors, typed client
146
- → [`examples/notes`](examples/notes)
147
-
148
- 2. **Linkly** — `signal` (three delivery physics), `clock`, `gate`, triggers beyond HTTP, transactional emit
149
- → [`examples/linkly`](examples/linkly)
150
-
151
- 3. **Provisions** — durable flows, `vault`, `channel`, live queries, plugins, CDC, cache tiers
152
- → [`examples/provisions`](examples/provisions)
153
-
154
- 4. **Skyport** — `ai`, multi-tenancy, SLOs, distributed topology, scaling axes
155
- → [`examples/skyport`](examples/skyport)
156
-
157
- Same path in the spec: [`docs/spec/four-applications.md`](docs/spec/four-applications.md).
158
-
159
- ---
73
+ Full walkthrough: [Basic usage](https://okengine.vercel.app/docs/get-started/basic-usage) · teaching apps: [Learn](https://okengine.vercel.app/docs/learn/notes).
160
74
 
161
75
  ## Documentation
162
76
 
163
- - **Site** [okengine.vercel.app](https://okengine.vercel.app) (landing) · [handbook](https://okengine.vercel.app/docs) (handbook) · [changelog](https://okengine.vercel.app/changelog)
164
- - **Agents on the site** — [`/llms.txt`](https://okengine.vercel.app/llms.txt) index · [`/llms-full.txt`](https://okengine.vercel.app/llms-full.txt) full text · `/llms.mdx/docs/...` per-page markdown
165
- - **Docs MCP** — `:6536` · tools `oke.docs.search` / `oke.docs.get` (read-only; Host/Origin validated like the other surfaces)
166
- - **App MCP** `:6535` · live Manifest, schemas, effects, traces, Console-safe actions (Bearer + confirmation for writes)
167
- - **Canonical specs in-repo** — [`docs/spec/`](docs/spec) (unified theory, four applications, Console)
168
-
169
- ---
170
-
171
- ## The eight elements
172
-
173
- An element earns its place only if it has irreducible physics. New tech becomes a **driver**, never a ninth element.
174
-
175
- | Element | Essence | Replaces |
176
- |---|---|---|
177
- | **Flow** | behavior | endpoint, handler, consumer, job, workflow |
178
- | **Signal** | data in motion | queue, pub/sub, stream, websocket, SSE |
179
- | **Store** | data at rest | DB, cache, KV, files, search (`sql` · `kv` · `files` · `index`) |
180
- | **Clock** | time | cron, delay, timeout, durable sleep, TTL |
181
- | **Gate** | permission to act | auth, session, ABAC, rate limit, quota, flags |
182
- | **Vault** | protected knowledge | secrets, config, env |
183
- | **Channel** | reaching humans | email, SMS, WhatsApp, push |
184
- | **AI** | reaching machine intelligence | models, prompts, embeddings, agents, RAG |
185
-
186
- ---
187
-
188
- ## What the Manifest is for
189
-
190
- Your TypeScript compiles to `manifest.oke.json`. From that one artifact the rest is derived — client, docs, Console, security matrix, Docker, bundle, tests ([unified theory §8](docs/spec/unified-theory.md#8-the-manifest--the-100-year-artifact)):
191
-
192
- ```mermaid
193
- flowchart TD
194
- code["your code"] -->|compile| manifest["manifest.oke.json"]
195
- manifest --> client["typed client (+ live queries)"]
196
- manifest --> docs["OpenAPI + AsyncAPI + documentation"]
197
- manifest --> arch["architecture diagram (provably accurate — it IS the system)"]
198
- manifest --> console["Console panels, traces, explorers"]
199
- manifest --> mcp["MCP surface for AI agents"]
200
- manifest --> caps["least-privilege capability matrix"]
201
- manifest --> cache["cache invalidation keys"]
202
- manifest --> replica["replica read-routing plan"]
203
- manifest --> docker["Dockerfile + per-role compose files"]
204
- manifest --> bundle["tree-shaken bundle contents"]
205
- manifest --> harness["test harness wiring"]
206
- ```
207
-
208
- ---
209
-
210
- ## Console
211
-
212
- Seventeen panels on `:6533` (app `:6530`, MCP `:6535`): Overview, Flows, Signals, Store, Clock, Gates, Vault, Channels, AI, Architecture, Traces, Runs, Manifest Diff, Access, Plugins — plus Privacy and Tenancy when those plugins are plugged.
213
-
214
- Operator and user planes stay separate. Every Console action is a real flow through `fx`, so the audit log is the trace. Spec: [`docs/spec/console.md`](docs/spec/console.md) · handbook: [console handbook](https://okengine.vercel.app/docs/console/overview).
215
-
216
- ---
217
-
218
- ## How to deploy
219
-
220
- OKE is self-host first — no cloud lock-in. Production artefacts are **derived from the Manifest**, not hand-written: Dockerfile, per-role compose files, and the same entry production actually runs ([unified theory §8](docs/spec/unified-theory.md#8-the-manifest--the-100-year-artifact), [§18](docs/spec/unified-theory.md#18-three-scaling-axes-never-conflated)).
221
-
222
- 1. **Configure drivers and images** in `oke.config.ts` — drivers named after protocols; vendor images keyed by role (e.g. `store.sql`, `store.kv`).
223
- 2. **Check the machine** before you ship:
224
-
225
- ```bash
226
- oke doctor # secrets, ports, drivers, tenancy, schema drift
227
- oke doctor --json # -j agents / CI: JSON on stdout, hints on stderr
228
- oke stack # preview resolved images/tags/ports — writes nothing
229
- oke images list # recipe · image · tag · digest · size (writes nothing)
230
- ```
231
-
232
- 3. **Derive Docker / compose**, then pin digests so tags cannot drift:
233
-
234
- ```bash
235
- oke docker # writes under docker/ (Dockerfile + compose.<role>.yml · …)
236
- oke docker --prod # -p healthchecks, volumes, limits, secret refs, deploy.replicas
237
- oke images pin # tags → digests in oke.images.lock
238
- ```
239
-
240
- 4. **Run what production runs.** `oke start` is the Docker `CMD` — the same process locally and in the container:
241
-
242
- ```bash
243
- oke start # app on :6530 (Console :6533 stays on in prod, behind auth)
244
- ```
245
-
246
- Horizontal scale is the **Clone** axis: run N instances; `oke docker --prod` emits `deploy.replicas`. Split into one container per unit is the **topology** axis — code unchanged (`monolith` vs `services`). For a tiny edge bundle: `oke build --target edge` (`-t`; < 15 kB kernel profile).
247
-
248
- There is no separate “deploy to our cloud” product. You take the derived Dockerfile/compose and run them on whatever host you choose.
249
-
250
- ---
251
-
252
- ## CLI
253
-
254
- Everyday:
255
-
256
- ```bash
257
- bun add okengine # ONE package
258
-
259
- oke dev # watch · hot reload · Console :6533 · app :6530 · MCP :6535
260
- # → also auto-syncs client types on every save
261
- oke dev --stack # -s infra only under docker/ (Postgres/Redis/…); app stays on host Bun
262
- oke dev -s store.sql,store.kv # partial: only these roles get real backends
263
-
264
- oke start # runs exactly what production runs (this is the Docker CMD)
265
- oke doctor # verify secrets, ports, drivers, tenancy, schema drift
266
- oke doctor --diff # -d CI gate: undeclared Manifest contract breaks
267
- oke doctor --json # -j JSON on stdout; hints on stderr (agents / MCP)
268
- oke stack # preview resolved images/tags/ports — writes nothing
269
- oke stack --json # -j
270
- ```
271
-
272
- Schema, vault, client, Docker, build, eval, branch, privacy, upgrade:
273
-
274
- ```bash
275
- oke schema generate # core + plugin tables → schema/oke.ts (--check|-c in CI)
276
- oke vault set STRIPE_KEY # also: list · import .env · key rotate
277
- oke client add <url> # types for a separate frontend repo
278
-
279
- oke docker # artefacts under docker/ (Dockerfile + compose.<role>.yml · …)
280
- oke docker --prod # -p healthchecks, volumes, limits, secret refs, deploy.replicas
281
- oke images list # recipe · image · tag · digest · size (--json|-j)
282
- oke images pin # tags → digests in oke.images.lock
283
-
284
- oke build --target edge # -t < 15 kB kernel profile
285
- oke eval # run prompt eval sets; fails CI on regression
286
- oke branch prod --at "yesterday" # -a fork journaled state into a sandbox
287
- oke privacy erase --subject <id> # -s crypto-shredding: deletes the key, not the terabytes
288
- oke upgrade # dry-run codemods + diff; --apply|-a to write
289
- oke gates list # Module:Action catalogue (--json|-j)
290
- ```
291
-
292
- Shell completion (generated from the command registry — not a hand-maintained script):
293
-
294
- ```bash
295
- eval "$(oke completion bash)"
296
- eval "$(oke completion zsh)"
297
- oke completion fish | source
298
- ```
299
-
300
- 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`).
301
-
302
- | Long | Short | Where |
303
- |------|-------|--------|
304
- | `--stack` | `-s` | `dev` |
305
- | `--prod` | `-p` | `docker` |
306
- | `--port` | `-p` | `start` |
307
- | `--check` | `-c` | `schema generate` |
308
- | `--config` | `-c` | `stack`, `docker`, `images` |
309
- | `--apply` | `-a` | `upgrade` |
310
- | `--at` | `-a` | `branch` |
311
- | `--after` | `-a` | `doctor --diff` |
312
- | `--target` | `-t` | `build` |
313
- | `--diff` | `-d` | `doctor` |
314
- | `--json` | `-j` | `doctor`, `stack`, `images list`, `gates list` |
315
- | `--manifest` | `-m` | most Manifest readers |
316
- | `--entry` | `-e` | `dev`, `start`, `build` |
317
- | `--out` / `--outdir` | `-o` | writers |
318
- | `--subject` | `-s` | `privacy erase` |
319
- | `--before` | `-b` | `doctor --diff` |
320
- | `--base` | `-B` | `doctor --diff` |
321
-
322
- | Exit | Meaning |
323
- |------|---------|
324
- | **0** | success |
325
- | **1** | usage / validation |
326
- | **2** | runtime / environment / check failure |
327
-
328
- `oke help` prints the same flag and exit-code tables.
329
-
330
- ---
331
-
332
- ## Plugins and security
333
-
334
- `.plug()` attaches a plugin. Scope is the attachment point: `app.plug()` app-wide, `unit.plug()` one unit, `flow.plug()` one flow. No `global: true`, no inheritance rule — [unified theory §14](docs/spec/unified-theory.md#14-plugins--the-extensibility-law).
335
-
336
- The Console is treated as internet-facing even on localhost. Host header validation, Origin validation, and authentication are mandatory on `:6530`, `:6533`, and `:6535` ([console.md §10](docs/spec/console.md#10-security-posture)): two-plane auth (operator vs user), capability-scoped tokens. Docs MCP `:6536` uses the same Host/Origin checks and stays read-only (no Bearer writes).
337
-
338
- ---
339
-
340
- ## Why Bun, one package, MIT
341
-
342
- **Bun-first** — toolchain stays on latest (TypeScript 7, Bun, oxc): greenfield, speed is part of the promise. User floor stays conservative; adopted infra pins stable digests ([§11](docs/spec/unified-theory.md#11-always-latest--in-three-tiers)).
343
-
344
- **One package** — `okengine` with subpath exports, not a monorepo of many packages to assemble. Small enough to be *finished* ([§27](docs/spec/unified-theory.md#27-package-structure-one-published-package), [§29](docs/spec/unified-theory.md#29-why-this-survives-a-hundred-years)).
345
-
346
- **MIT** — no BSL/SSPL; self-host first; drivers as the community surface. Adopt what exists; bind through Bun’s native clients ([§9](docs/spec/unified-theory.md#9-adopt-dont-reinvent--but-bind-natively), [§16](docs/spec/unified-theory.md#16-the-default-table), [§29](docs/spec/unified-theory.md#29-why-this-survives-a-hundred-years)).
347
-
348
- ---
349
-
350
- ## Budgets
351
-
352
- Measured size and latency caps — see [`BUDGETS.md`](BUDGETS.md). Refresh with `bun run budgets`.
353
-
354
- ---
355
-
356
- ## Local framework link (try changes without publishing)
357
-
358
- To exercise a local `okengine` checkout inside an app (e.g. `oke-1`) without npm publish:
359
-
360
- ```bash
361
- # in the okengine repo
362
- bun link
363
- # if you changed the Console SPA:
364
- bun run build
365
-
366
- # in the app repo
367
- bun link okengine
368
- # edit okengine → restart `bun dev` in the app
369
- ```
370
-
371
- Alternatively set `"okengine": "file:../okengine"` in the app `package.json` and run `bun install`.
372
-
373
- ---
374
-
375
- ## Status
376
-
377
- Pre-1.0. Published on [npm](https://www.npmjs.com/package/okengine) and [JSR](https://jsr.io/@omqkhafi/okengine) (`okengine` + `create-oke`, lockstep). Docs at [okengine.vercel.app](https://okengine.vercel.app). MIT. No `CONTRIBUTING` yet — issues and PRs welcome.
378
-
379
- | Resource | Path |
380
- |---|---|
381
- | Docs site | [okengine.vercel.app](https://okengine.vercel.app) · [handbook](https://okengine.vercel.app/docs) · [changelog](https://okengine.vercel.app/changelog) |
382
- | Unified theory | [`docs/spec/unified-theory.md`](https://github.com/omqkhafi/okengine/blob/main/docs/spec/unified-theory.md) |
383
- | Four applications | [`docs/spec/four-applications.md`](https://github.com/omqkhafi/okengine/blob/main/docs/spec/four-applications.md) |
384
- | Console | [`docs/spec/console.md`](https://github.com/omqkhafi/okengine/blob/main/docs/spec/console.md) |
385
- | Scaffold | [`packages/create-oke`](https://github.com/omqkhafi/okengine/tree/main/packages/create-oke) |
386
- | Changelog source | [`docs/changelog.md`](docs/changelog.md) |
77
+ Everything beyond this page lives on the site and in-repo specs:
78
+
79
+ | Resource | Link |
80
+ | ----------------- | ------------------------------------------------------------------------------------------ |
81
+ | Docs site | [okengine.vercel.app](https://okengine.vercel.app) |
82
+ | Handbook | [/docs](https://okengine.vercel.app/docs) |
83
+ | Changelog | [/changelog](https://okengine.vercel.app/changelog) |
84
+ | Agents index | [/llms.txt](https://okengine.vercel.app/llms.txt) |
85
+ | Unified theory | [`docs/spec/unified-theory.md`](docs/spec/unified-theory.md) |
86
+ | Four applications | [`docs/spec/four-applications.md`](docs/spec/four-applications.md) |
87
+ | Console | [`docs/spec/console.md`](docs/spec/console.md) |
88
+ | CLI reference | [`docs/cli.md`](docs/cli.md) · [handbook](https://okengine.vercel.app/docs/cli) |
89
+ | Budgets | [`BUDGETS.md`](BUDGETS.md) |
90
+ | Contributing | [`CONTRIBUTING.md`](CONTRIBUTING.md) · [writing a driver](docs/guides/writing-a-driver.md) |
91
+
92
+ Pre-1.0. Published on [npm](https://www.npmjs.com/package/okengine) and [JSR](https://jsr.io/@omqkhafi/okengine). MIT.