okengine 0.10.3 → 0.11.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (318) hide show
  1. package/package.json +76 -10
  2. package/site/content/docs/deployment/docker-swarm.mdx +48 -111
  3. package/site/content/docs/deployment/docker.mdx +43 -36
  4. package/site/content/docs/deployment/index.mdx +9 -9
  5. package/site/content/docs/deployment/kubernetes.mdx +4 -4
  6. package/site/content/docs/elements/ai.mdx +7 -7
  7. package/site/content/docs/elements/channel.mdx +9 -7
  8. package/site/content/docs/elements/clock.mdx +8 -8
  9. package/site/content/docs/elements/flow.mdx +46 -47
  10. package/site/content/docs/elements/gate.mdx +6 -5
  11. package/site/content/docs/elements/signal.mdx +2 -2
  12. package/site/content/docs/elements/store.mdx +71 -78
  13. package/site/content/docs/elements/vault.mdx +89 -70
  14. package/site/content/docs/get-started/basic-usage.mdx +8 -8
  15. package/site/content/docs/get-started/installation.mdx +36 -36
  16. package/site/content/docs/get-started/introduction.mdx +11 -0
  17. package/site/content/docs/get-started/why.mdx +2 -2
  18. package/site/content/docs/plugins/anonymous.mdx +1 -1
  19. package/site/content/docs/plugins/magic-link.mdx +11 -11
  20. package/site/content/docs/plugins/otp.mdx +2 -2
  21. package/site/content/docs/plugins/passkey.mdx +1 -1
  22. package/site/content/docs/plugins/two-factor.mdx +1 -1
  23. package/site/content/docs/plugins/username.mdx +1 -1
  24. package/site/content/docs/recipes/caddy.mdx +1 -1
  25. package/site/content/docs/recipes/cockroachdb.mdx +2 -2
  26. package/site/content/docs/recipes/dragonfly.mdx +1 -1
  27. package/site/content/docs/recipes/index.mdx +1 -2
  28. package/site/content/docs/recipes/llama-cpp.mdx +21 -23
  29. package/site/content/docs/recipes/mailpit.mdx +11 -11
  30. package/site/content/docs/recipes/meilisearch.mdx +10 -10
  31. package/site/content/docs/recipes/meta.json +0 -1
  32. package/site/content/docs/recipes/ollama.mdx +1 -1
  33. package/site/content/docs/recipes/pgdog.mdx +12 -9
  34. package/site/content/docs/recipes/postgres.mdx +3 -3
  35. package/site/content/docs/recipes/redis.mdx +2 -2
  36. package/site/content/docs/recipes/rustfs.mdx +10 -7
  37. package/site/content/docs/recipes/sglang.mdx +1 -1
  38. package/site/content/docs/recipes/supabase-docker.mdx +1 -1
  39. package/site/content/docs/recipes/timescale.mdx +2 -2
  40. package/site/content/docs/recipes/valkey.mdx +1 -1
  41. package/site/content/docs/recipes/vllm.mdx +1 -1
  42. package/site/content/docs/recipes/yugabytedb.mdx +2 -2
  43. package/site/content/docs/reference/cli.md +61 -38
  44. package/site/content/docs/reference/configuration.mdx +145 -70
  45. package/site/content/docs/reference/environment-variables.mdx +36 -28
  46. package/site/content/docs/reference/errors.mdx +28 -29
  47. package/site/content/docs/reference/fx.mdx +11 -4
  48. package/site/content/docs/reference/i18n.mdx +17 -6
  49. package/site/content/docs/reference/index.mdx +5 -0
  50. package/site/content/docs/reference/meta.json +1 -0
  51. package/site/content/docs/reference/migrating-environments.mdx +158 -0
  52. package/site/content/docs/reference/plugins.mdx +2 -2
  53. package/src/auth/gate-auth.test.ts +12 -10
  54. package/src/cli/ai-setup/ai-setup.test.ts +27 -15
  55. package/src/cli/ai-setup/apply.ts +111 -15
  56. package/src/cli/ai-setup/catalog.ts +3 -3
  57. package/src/cli/ai-setup/index.ts +1 -1
  58. package/src/cli/ai-setup/prompts.ts +1 -1
  59. package/src/cli/ai-setup/recommend.test.ts +1 -1
  60. package/src/cli/ask-seed.test.ts +3 -3
  61. package/src/cli/build.ts +1 -1
  62. package/src/cli/db-auto-push.test.ts +6 -3
  63. package/src/cli/db-auto-push.ts +7 -5
  64. package/src/cli/db-seed.ts +7 -8
  65. package/src/cli/db.test.ts +70 -71
  66. package/src/cli/db.ts +86 -12
  67. package/src/cli/dev-controller.test.ts +35 -0
  68. package/src/cli/dev-controller.ts +298 -0
  69. package/src/cli/dev-controls.ts +11 -65
  70. package/src/cli/dev-db-push.test.ts +47 -15
  71. package/src/cli/dev-schema-sync.test.ts +11 -11
  72. package/src/cli/dev-schema-sync.ts +10 -10
  73. package/src/cli/dev-session-lock.test.ts +106 -0
  74. package/src/cli/dev-session-lock.ts +209 -0
  75. package/src/cli/dev.test.ts +166 -121
  76. package/src/cli/dev.ts +138 -192
  77. package/src/cli/doc-staleness.test.ts +3 -6
  78. package/src/cli/docker-clean.test.ts +33 -1
  79. package/src/cli/docker-clean.ts +28 -33
  80. package/src/cli/docker-cli.test.ts +12 -11
  81. package/src/cli/docker.ts +95 -20
  82. package/src/cli/doctor.test.ts +40 -0
  83. package/src/cli/doctor.ts +55 -15
  84. package/src/cli/drizzle-env.test.ts +11 -13
  85. package/src/cli/drizzle-env.ts +18 -11
  86. package/src/cli/ensure-drizzle-config.ts +11 -14
  87. package/src/cli/hero-meta.test.ts +15 -15
  88. package/src/cli/hero-meta.ts +10 -9
  89. package/src/cli/index.ts +36 -6
  90. package/src/cli/load-config.images.test.ts +16 -12
  91. package/src/cli/load-config.source.test.ts +50 -0
  92. package/src/cli/load-config.ts +34 -28
  93. package/src/cli/meilisearch-local.ts +1 -2
  94. package/src/cli/mode.ts +7 -58
  95. package/src/cli/registry.ts +175 -19
  96. package/src/cli/resolve-dev-sql-env.test.ts +8 -16
  97. package/src/cli/resolve-dev-sql-env.ts +13 -15
  98. package/src/cli/safe-defaults.test.ts +28 -10
  99. package/src/cli/schema.ts +65 -16
  100. package/src/cli/test.ts +58 -0
  101. package/src/cli/tui/App.tsx +252 -0
  102. package/src/cli/tui/DevLive.tsx +116 -0
  103. package/src/cli/tui/components/ConfirmDialog.tsx +48 -0
  104. package/src/cli/tui/components/HeaderBar.tsx +67 -0
  105. package/src/cli/tui/components/LogStream.tsx +47 -0
  106. package/src/cli/tui/components/PanelCard.tsx +39 -0
  107. package/src/cli/tui/components/SelectRow.tsx +37 -0
  108. package/src/cli/tui/components/SlashPalette.tsx +172 -0
  109. package/src/cli/tui/components/Spinner.tsx +32 -0
  110. package/src/cli/tui/components/StatusBar.tsx +51 -0
  111. package/src/cli/tui/components/StatusDot.tsx +37 -0
  112. package/src/cli/tui/components/TabBar.tsx +49 -0
  113. package/src/cli/tui/components/Wordmark.tsx +43 -0
  114. package/src/cli/tui/format.ts +38 -0
  115. package/src/cli/tui/keys.test.ts +18 -0
  116. package/src/cli/tui/keys.ts +26 -0
  117. package/src/cli/tui/launch.test.ts +18 -0
  118. package/src/cli/tui/launch.ts +57 -0
  119. package/src/cli/tui/panels/Dashboard.tsx +201 -0
  120. package/src/cli/tui/panels/Database.tsx +198 -0
  121. package/src/cli/tui/panels/Dev.tsx +257 -0
  122. package/src/cli/tui/panels/Docker.tsx +357 -0
  123. package/src/cli/tui/panels/Navigator.test.ts +22 -0
  124. package/src/cli/tui/panels/Navigator.tsx +213 -0
  125. package/src/cli/tui/slash-catalog.test.ts +31 -0
  126. package/src/cli/tui/slash-catalog.ts +184 -0
  127. package/src/cli/tui/slash-run.ts +54 -0
  128. package/src/cli/tui/state/ports.ts +95 -0
  129. package/src/cli/tui/theme.ts +24 -0
  130. package/src/cli/vault-cmd.test.ts +402 -0
  131. package/src/cli/vault-cmd.ts +727 -69
  132. package/src/cli/vault-secure-input.test.ts +56 -0
  133. package/src/cli/vault-secure-input.ts +124 -0
  134. package/src/compiler/effects-infer.ts +7 -0
  135. package/src/compiler/fixtures/skyport/oke.config.ts +3 -3
  136. package/src/compiler/fixtures/skyport/src/flows/payments/index.ts +1 -1
  137. package/src/compiler/fixtures/skyport.expected.json +1 -1
  138. package/src/compiler-entry.ts +7 -0
  139. package/src/config/define-config.test.ts +111 -47
  140. package/src/config/driver-defaults.test.ts +16 -23
  141. package/src/config/driver-defaults.ts +33 -63
  142. package/src/config/index.ts +169 -144
  143. package/src/config/resolve-driver.test.ts +14 -19
  144. package/src/console/server/app.ts +4 -2
  145. package/src/console/server/console.test.ts +58 -1
  146. package/src/console/server/flows.ts +22 -2
  147. package/src/console/server/index.ts +3 -0
  148. package/src/console/server/operator-db.test.ts +55 -13
  149. package/src/console/server/operator-db.ts +305 -263
  150. package/src/console/server/serve.ts +16 -7
  151. package/src/console/server/state.ts +31 -9
  152. package/src/console/server/vault.test.ts +120 -5
  153. package/src/console/server/vault.ts +208 -12
  154. package/src/console/ui/dist/assets/{index-D-9KFce5.js → index--Y0Uaz-m.js} +2 -2
  155. package/src/console/ui/dist/assets/panel-vault-BkZdJPX8.js +1 -0
  156. package/src/console/ui/dist/assets/style-C3L349iZ.css +3 -0
  157. package/src/console/ui/dist/index.html +2 -2
  158. package/src/console/ui/shell/client.ts +16 -0
  159. package/src/console/ui/shell/panels/vault/VaultPanel.tsx +54 -1
  160. package/src/console/ui/vault/VaultA11yView.tsx +33 -1
  161. package/src/console/ui/vault/backend.test.ts +75 -0
  162. package/src/console/ui/vault/backend.ts +117 -0
  163. package/src/console/ui/vault/fixture.ts +21 -2
  164. package/src/console/ui/vault/index.ts +11 -1
  165. package/src/console/ui/vault/types.ts +26 -0
  166. package/src/docker/compose.ts +164 -61
  167. package/src/docker/derive.ts +106 -12
  168. package/src/docker/docker.test.ts +156 -110
  169. package/src/docker/helpers.ts +98 -0
  170. package/src/docker/images-config.test.ts +3 -8
  171. package/src/docker/index.ts +30 -5
  172. package/src/docker/recipes/index.ts +0 -3
  173. package/src/docker/recipes/llama-cpp.ts +4 -4
  174. package/src/docker/recipes/pgdog.ts +9 -2
  175. package/src/docker/resources.test.ts +71 -0
  176. package/src/docker/resources.ts +176 -0
  177. package/src/docker/stack-id.test.ts +11 -4
  178. package/src/docker/stack-id.ts +42 -32
  179. package/src/docker/stack.integration.test.ts +4 -15
  180. package/src/docker/types.ts +35 -3
  181. package/src/drivers/ai-ollama.integration.test.ts +2 -2
  182. package/src/drivers/conformance.test.ts +11 -12
  183. package/src/drivers/drizzle-dialect.test.ts +0 -4
  184. package/src/drivers/drizzle-dialect.ts +7 -13
  185. package/src/drivers/index.ts +24 -7
  186. package/src/drivers/journal-postgres.test.ts +3 -1
  187. package/src/drivers/journal-postgres.ts +4 -2
  188. package/src/drivers/meilisearch.ts +1 -1
  189. package/src/drivers/pglite.ts +28 -5
  190. package/src/drivers/types.ts +9 -11
  191. package/src/drivers/vault-aws-secrets-manager.test.ts +159 -0
  192. package/src/drivers/vault-aws-secrets-manager.ts +333 -0
  193. package/src/drivers/vault-builtin.test.ts +110 -0
  194. package/src/drivers/vault-builtin.ts +184 -0
  195. package/src/drivers/vault-driver-removal.test.ts +13 -0
  196. package/src/drivers/vault-managed.test.ts +95 -0
  197. package/src/drivers/vault-managed.ts +101 -25
  198. package/src/drivers/vault-types.ts +25 -5
  199. package/src/elements/ai/runtime.ts +1 -1
  200. package/src/elements/clock/chaos.test.ts +4 -1
  201. package/src/elements/clock/durable.ts +57 -4
  202. package/src/elements/clock.test.ts +13 -14
  203. package/src/elements/gate/constants.ts +18 -0
  204. package/src/elements/gate.test.ts +1 -1
  205. package/src/elements/gate.ts +2 -2
  206. package/src/elements/store/domain-ddl.test.ts +5 -12
  207. package/src/elements/store/emit-drizzle.ts +44 -19
  208. package/src/elements/store/index-boot.test.ts +15 -116
  209. package/src/elements/store/load-plugin-tables.ts +1 -1
  210. package/src/elements/store/resource-list-docs.fixture.ts +12 -6
  211. package/src/elements/store/resource-list-docs.test.ts +64 -44
  212. package/src/elements/store/resource.test.ts +17 -10
  213. package/src/elements/store/runtime.ts +9 -12
  214. package/src/elements/store/schema-decl.test.ts +16 -32
  215. package/src/elements/store/seed.test.ts +1 -2
  216. package/src/elements/store/seed.ts +7 -8
  217. package/src/elements/store/sql-condition.test.ts +2 -2
  218. package/src/elements/store/sql-session.test.ts +8 -10
  219. package/src/elements/store/sql-session.ts +10 -2
  220. package/src/elements/store.test.ts +13 -13
  221. package/src/elements/vault/audit.ts +233 -0
  222. package/src/elements/vault/boot-chain.test.ts +78 -0
  223. package/src/elements/vault/boot-chain.ts +43 -39
  224. package/src/elements/vault/builtin-adapter.test.ts +479 -0
  225. package/src/elements/vault/builtin-adapter.ts +1184 -0
  226. package/src/elements/vault/crypto.test.ts +237 -0
  227. package/src/elements/vault/crypto.ts +431 -0
  228. package/src/elements/vault/declare.ts +164 -3
  229. package/src/elements/vault/errors.ts +56 -0
  230. package/src/elements/vault/kms-unseal.test.ts +76 -0
  231. package/src/elements/vault/kms-unseal.ts +181 -0
  232. package/src/elements/vault/path.ts +90 -0
  233. package/src/elements/vault/resilience.test.ts +102 -0
  234. package/src/elements/vault/resilience.ts +107 -0
  235. package/src/elements/vault/runtime.ts +36 -4
  236. package/src/elements/vault/security-checklist.test.ts +130 -0
  237. package/src/elements/vault/storage.ts +448 -0
  238. package/src/elements/vault/types.ts +288 -0
  239. package/src/elements/vault/unseal.ts +150 -0
  240. package/src/elements/vault.test.ts +72 -4
  241. package/src/elements/vault.ts +91 -2
  242. package/src/full.ts +248 -0
  243. package/src/http.ts +41 -0
  244. package/src/i18n/interpolate-simple.ts +37 -0
  245. package/src/i18n/messages.ts +51 -4
  246. package/src/i18n-entry.ts +7 -0
  247. package/src/index.ts +35 -145
  248. package/src/journal-entry.ts +20 -0
  249. package/src/kernel/adopt-barrel-fresh.test.ts +25 -10
  250. package/src/kernel/app.ts +40 -42
  251. package/src/kernel/auto-registry.test.ts +2 -2
  252. package/src/kernel/boot-bind/ai.test.ts +5 -5
  253. package/src/kernel/boot-bind/ai.ts +2 -1
  254. package/src/kernel/boot-bind/channel.test.ts +6 -6
  255. package/src/kernel/boot-bind/channel.ts +3 -10
  256. package/src/kernel/boot-bind/clock.ts +2 -2
  257. package/src/kernel/boot-bind/gate.ts +5 -9
  258. package/src/kernel/boot-bind/honor-config.test.ts +42 -42
  259. package/src/kernel/boot-bind/journal.ts +2 -2
  260. package/src/kernel/boot-bind/store.test.ts +43 -44
  261. package/src/kernel/boot-bind/store.ts +16 -41
  262. package/src/kernel/boot-bind/vault.ts +16 -1
  263. package/src/kernel/boot.test.ts +12 -4
  264. package/src/kernel/boot.ts +31 -19
  265. package/src/kernel/budget-entry.ts +1 -1
  266. package/src/kernel/compensate.test.ts +288 -1
  267. package/src/kernel/compensate.ts +126 -0
  268. package/src/kernel/concurrency.test.ts +10 -9
  269. package/src/kernel/effects-stamping.test.ts +27 -2
  270. package/src/kernel/element-registries.ts +5 -3
  271. package/src/kernel/flow.ts +4 -2
  272. package/src/kernel/fx.test.ts +119 -3
  273. package/src/kernel/fx.ts +215 -40
  274. package/src/kernel/index.ts +14 -0
  275. package/src/kernel/journal.ts +130 -7
  276. package/src/kernel/pipeline.test.ts +20 -6
  277. package/src/kernel/redacted.test.ts +35 -0
  278. package/src/kernel/redacted.ts +24 -2
  279. package/src/kernel/router/create-default.ts +16 -0
  280. package/src/kernel/router/create-edge.ts +18 -0
  281. package/src/kernel/router/create.ts +23 -0
  282. package/src/kernel/router/index.ts +23 -0
  283. package/src/kernel/router/linear.ts +88 -0
  284. package/src/kernel/router/regexp.ts +188 -0
  285. package/src/kernel/router/smart.ts +120 -0
  286. package/src/kernel/router/trie.ts +108 -0
  287. package/src/kernel/router/types.ts +56 -0
  288. package/src/kernel/router.ts +18 -532
  289. package/src/kernel-entry.ts +43 -0
  290. package/src/manifest/fixtures/skyport.excerpt.json +1 -1
  291. package/src/manifest/fixtures/skyport.manifest.json +1 -1
  292. package/src/plugins/config-source.test.ts +7 -7
  293. package/src/release/build-lib.ts +58 -0
  294. package/src/release/exports.test.ts +4 -2
  295. package/src/release/exports.ts +30 -4
  296. package/src/release/measure.ts +101 -22
  297. package/src/runs/duckdb.ts +7 -2
  298. package/src/shared/optional-peer.ts +41 -0
  299. package/src/term.test.ts +3 -44
  300. package/src/test/create-test-app.ts +12 -0
  301. package/src/test/provisions.integration.test.ts +1 -1
  302. package/src/test/reset-element-registries.ts +2 -0
  303. package/src/upgrade/codemods.test.ts +7 -20
  304. package/src/upgrade/codemods.ts +93 -60
  305. package/site/content/docs/recipes/openbao.mdx +0 -141
  306. package/src/cli/ask-dev-mode.ts +0 -40
  307. package/src/cli/dev-mode.test.ts +0 -45
  308. package/src/cli/dev-mode.ts +0 -78
  309. package/src/cli/openbao-bootstrap.test.ts +0 -150
  310. package/src/cli/openbao-bootstrap.ts +0 -321
  311. package/src/cli/openbao-restart.integration.test.ts +0 -145
  312. package/src/console/ui/dist/assets/panel-vault-Za1GyJfM.js +0 -1
  313. package/src/console/ui/dist/assets/style-C8MxEWPd.css +0 -3
  314. package/src/docker/recipes/openbao.ts +0 -47
  315. package/src/drivers/libsql.ts +0 -179
  316. package/src/drivers/sqlite.ts +0 -44
  317. package/src/drivers/vault-openbao.test.ts +0 -97
  318. package/src/drivers/vault-openbao.ts +0 -143
package/src/full.ts ADDED
@@ -0,0 +1,248 @@
1
+ /**
2
+ * `okengine/full` — deprecated mega-barrel (pre-thin-root surface).
3
+ *
4
+ * Prefer `okengine` (thin) or `okengine/http` for new apps. This entry keeps
5
+ * the historical re-export graph for one minor line.
6
+ *
7
+ * @module
8
+ */
9
+
10
+ export {
11
+ oke,
12
+ on,
13
+ flow,
14
+ http,
15
+ every,
16
+ internal,
17
+ table,
18
+ fail,
19
+ createFx,
20
+ isFlow,
21
+ isFlowFailure,
22
+ plugin,
23
+ isPlugin,
24
+ bootApplication,
25
+ mintCapabilities,
26
+ gateDenialFailure,
27
+ journey,
28
+ unit,
29
+ rateLimit,
30
+ Redacted,
31
+ isRedacted,
32
+ maskRedactedDeep,
33
+ REDACTED_PLACEHOLDER,
34
+ PluginNeedsError,
35
+ assertPluginNeeds,
36
+ freezePrincipal,
37
+ installGracefulShutdown,
38
+ releaseInstanceLeases,
39
+ type OkeApp,
40
+ type OkeOptions,
41
+ type ReadyState,
42
+ type FlowDef,
43
+ type FlowFailure,
44
+ type FlowErrorValue,
45
+ type Fx,
46
+ type FxPrincipal,
47
+ type Binding,
48
+ type PluginDef,
49
+ type PluginCapabilities,
50
+ type BootOptions,
51
+ type BootResult,
52
+ type ElementRuntimes,
53
+ type JourneyDecl,
54
+ type UnitBag,
55
+ } from "./kernel/index.ts";
56
+
57
+ export {
58
+ store,
59
+ classify,
60
+ id,
61
+ now,
62
+ defineTable,
63
+ field,
64
+ defineSeed,
65
+ normalizeSeedFns,
66
+ resolveSeedCategory,
67
+ createStoreRuntime,
68
+ type StoreDecl,
69
+ type StoreRuntime,
70
+ type SqlStoreHandle,
71
+ type TableHandle,
72
+ type SchemaTableDecl,
73
+ type SchemaColumnDecl,
74
+ type SeedDef,
75
+ type SeedFn,
76
+ type SeedFns,
77
+ type SeedCategory,
78
+ type UpsertResult,
79
+ type UpsertStatus,
80
+ } from "./elements/store.ts";
81
+
82
+ export {
83
+ signal,
84
+ createSignalRuntime,
85
+ type SignalDecl,
86
+ type SignalOptions,
87
+ type SignalRuntime,
88
+ } from "./elements/signal.ts";
89
+
90
+ export {
91
+ clock,
92
+ createClockRuntime,
93
+ createTestClockRuntime,
94
+ createTimeTravel,
95
+ runDurable,
96
+ reconcileClocks,
97
+ detectDstAmbiguity,
98
+ type ClockDecl,
99
+ type ClockRuntime,
100
+ type TimeTravel,
101
+ type DurableResult,
102
+ } from "./elements/clock.ts";
103
+
104
+ export {
105
+ gate,
106
+ GATE_PUBLIC_NAME,
107
+ GateBootError,
108
+ assertHttpGatePosture,
109
+ createGateRuntime,
110
+ resolveGateConfig,
111
+ takeRate,
112
+ deriveModuleActions,
113
+ ALL_RATE_STRATEGIES,
114
+ type GateDecl,
115
+ type GateOptions,
116
+ type GatePostureGap,
117
+ type GateRuntime,
118
+ type RateOptions,
119
+ type ResolvedGateConfig,
120
+ } from "./elements/gate.ts";
121
+
122
+ export {
123
+ vault,
124
+ fromDocker,
125
+ FROM_DOCKER_PREFIX,
126
+ createVaultRuntime,
127
+ VaultBootError,
128
+ SECRET_MASK,
129
+ type VaultSecretDecl,
130
+ type VaultRuntime,
131
+ } from "./elements/vault.ts";
132
+
133
+ export {
134
+ channel,
135
+ createChannelRuntime,
136
+ createConsentStore,
137
+ createSuppressionStore,
138
+ createReceiptLedger,
139
+ type ChannelTemplateDecl,
140
+ type ChannelRuntime,
141
+ } from "./elements/channel.ts";
142
+
143
+ export {
144
+ ai,
145
+ createAiRuntime,
146
+ assertAllowPiiForAsk,
147
+ AiPiiBuildError,
148
+ AiSchemaValidationError,
149
+ runPromptEvals,
150
+ parseEvalJsonl,
151
+ type AiModelDecl,
152
+ type AiPromptDecl,
153
+ type AiAgentDecl,
154
+ type AiRuntime,
155
+ } from "./elements/ai.ts";
156
+
157
+ export {
158
+ createJournal,
159
+ createMemoryJournalStore,
160
+ createFileJournalStore,
161
+ hasJournalLease,
162
+ isJournalLeaseBusy,
163
+ JournalLeaseBusy,
164
+ JOURNAL_DEFAULT_LEASE_MS,
165
+ type Journal,
166
+ type JournalLeaseOptions,
167
+ type JournalLeaseStore,
168
+ type JournalStore,
169
+ type JournalRun,
170
+ } from "./kernel/journal.ts";
171
+
172
+ export {
173
+ validate,
174
+ isStandardSchema,
175
+ fromTypeBox,
176
+ VALIDATION_ERROR_CODE,
177
+ type StandardSchemaV1,
178
+ type SchemaInput,
179
+ type ValidationErrorData,
180
+ } from "./validation/index.ts";
181
+
182
+ export {
183
+ compileAot,
184
+ compileDynamic,
185
+ compileRoute,
186
+ sucrose,
187
+ type CompiledRoute,
188
+ type ContextInference,
189
+ } from "./compiler/index.ts";
190
+
191
+ export {
192
+ defineLocale,
193
+ defineMessages,
194
+ flattenMessages,
195
+ formatMessage,
196
+ getMessageCatalogs,
197
+ interpolateMessage,
198
+ isRtlLocale,
199
+ matchConfiguredLocale,
200
+ parseAcceptLanguage,
201
+ resolveFailureMessage,
202
+ resolveLocale,
203
+ runWithLocale,
204
+ translate,
205
+ type AppMessageKey,
206
+ type FlattenKeys,
207
+ type LocaleContext,
208
+ type MessageCatalog,
209
+ type MessageCatalogs,
210
+ type MessageTree,
211
+ type MessageValue,
212
+ type MessageValues,
213
+ type MessagesFor,
214
+ type Register,
215
+ } from "./i18n/index.ts";
216
+
217
+ export {
218
+ createBunRuntime,
219
+ createWebStandardRuntime,
220
+ APP_PORT,
221
+ CONSOLE_PORT,
222
+ MCP_PORT,
223
+ type Runtime,
224
+ type ServeOptions,
225
+ } from "./runtime/index.ts";
226
+ export {
227
+ createRunsRuntime,
228
+ collectWideEvent,
229
+ createRunTelemetry,
230
+ explainOutliers,
231
+ seedOutlierDataset,
232
+ privacyErase,
233
+ createMemorySubjectKeys,
234
+ subjectKeysFromVault,
235
+ archiveFields,
236
+ revealArchived,
237
+ eraseSubject,
238
+ SHREDDED,
239
+ filesRunsDriver,
240
+ memoryRunsDriver,
241
+ postgresRunsDriver,
242
+ clickhouseRunsDriver,
243
+ type RunsRuntime,
244
+ type WideEvent,
245
+ type CreateRunsRuntimeOptions,
246
+ type OutlierFinding,
247
+ type SubjectKeyVault,
248
+ } from "./runs/index.ts";
package/src/http.ts ADDED
@@ -0,0 +1,41 @@
1
+ /**
2
+ * `okengine/http` — slim HTTP app surface.
3
+ *
4
+ * Prefer this entry for HTTP-only apps so cold graphs stay on the edge
5
+ * router and avoid the mega-barrel (`okengine/full`).
6
+ *
7
+ * @example
8
+ * ```ts
9
+ * import { on, flow, http, gate, oke, createBunRuntime } from "okengine/http";
10
+ *
11
+ * on(http.get("/").gate(gate.public), flow("ping", { do: () => "Hi" }));
12
+ * const app = oke({ name: "ping" });
13
+ * createBunRuntime().serve(app);
14
+ * ```
15
+ *
16
+ * @module
17
+ */
18
+
19
+ export { on, listBindings, resetBindings, type Binding } from "./kernel/on.ts";
20
+ export { flow, isFlow, type FlowDef } from "./kernel/flow.ts";
21
+ export { http, every, internal } from "./kernel/triggers.ts";
22
+ export { gate, GATE_PUBLIC_NAME } from "./elements/gate/declare.ts";
23
+ export { fail, type FlowFailure } from "./kernel/errors.ts";
24
+ export { isFlowFailure } from "./kernel/hooks.ts";
25
+ export { plugin, isPlugin, type PluginDef } from "./kernel/plugin.ts";
26
+ export { createBunRuntime, APP_PORT, type Runtime, type ServeOptions } from "./runtime/index.ts";
27
+ export type { OkeApp, OkeOptions, ReadyState } from "./kernel/app.ts";
28
+
29
+ import { oke as okeCore, type OkeApp, type OkeOptions } from "./kernel/app.ts";
30
+
31
+ /**
32
+ * Create an HTTP-oriented app — defaults `router` to `"edge"` when omitted.
33
+ *
34
+ * @param options - Application options
35
+ */
36
+ export function oke(options: OkeOptions): OkeApp {
37
+ return okeCore({
38
+ ...options,
39
+ router: options.router ?? "edge",
40
+ });
41
+ }
@@ -0,0 +1,37 @@
1
+ /**
2
+ * Zero-dependency message interpolation for the cold path.
3
+ *
4
+ * Handles plain strings and simple `{name}` placeholders. ICU plural /
5
+ * select / rich-text go through {@link formatMessage} (FormatJS) when needed.
6
+ */
7
+
8
+ import type { MessageValues } from "./types.ts";
9
+
10
+ /** True when the template needs ICU MessageFormat (plural/select/rich tags). */
11
+ export function needsIcuFormat(message: string): boolean {
12
+ // plural/select: `{count, plural, …}` or `{gender, select, …}`
13
+ if (/\{[^{}]+,\s*(?:plural|select|selectordinal)\b/.test(message)) return true;
14
+ // rich-text tags: `<tag>…</tag>` or self-closing
15
+ if (/<\/?[A-Za-z][\w-]*/.test(message)) return true;
16
+ // number/date skeleton: `{n, number}` / `{d, date}`
17
+ if (/\{[^{}]+,\s*(?:number|date|time)\b/.test(message)) return true;
18
+ return false;
19
+ }
20
+
21
+ /**
22
+ * Replace simple `{name}` placeholders without FormatJS.
23
+ *
24
+ * @param message - Template
25
+ * @param values - Interpolation values
26
+ */
27
+ export function interpolateSimple(message: string, values?: MessageValues): string {
28
+ // Catalogs use ICU apostrophe escaping (`''` → `'`) even on the simple path.
29
+ const base = message.replaceAll("''", "'");
30
+ if (!values) return base;
31
+ return base.replace(/\{(\w+)\}/g, (match, name: string) => {
32
+ const value = values[name];
33
+ if (value === undefined || value === null) return match;
34
+ if (typeof value === "function") return match;
35
+ return String(value);
36
+ });
37
+ }
@@ -9,11 +9,58 @@
9
9
  * present; app keys override built-ins for the same locale/key.
10
10
  */
11
11
 
12
+ import { createRequire } from "node:module";
12
13
  import { builtinAr } from "./catalogs/ar.ts";
13
14
  import { builtinEn } from "./catalogs/en.ts";
14
- import { formatMessage } from "./format.ts";
15
+ import { interpolateSimple, needsIcuFormat } from "./interpolate-simple.ts";
15
16
  import type { MessageTree, MessageValues } from "./types.ts";
16
17
 
18
+ const requireFormat = createRequire(import.meta.url);
19
+
20
+ /** Cached FormatJS formatter (loaded on first ICU message). */
21
+ let formatMessageFn:
22
+ | ((message: string, locale: string, values?: MessageValues) => string)
23
+ | undefined;
24
+ let formatMessagePromise: Promise<typeof formatMessageFn> | undefined;
25
+
26
+ /**
27
+ * Ensure FormatJS {@link formatMessage} is loaded (call from boot when catalogs exist).
28
+ */
29
+ export async function preloadMessageFormat(): Promise<void> {
30
+ if (formatMessageFn) return;
31
+ formatMessagePromise ??= import("./format.ts").then((m) => {
32
+ formatMessageFn = m.formatMessage;
33
+ return formatMessageFn;
34
+ });
35
+ await formatMessagePromise;
36
+ }
37
+
38
+ /**
39
+ * Load FormatJS synchronously on the first ICU message (tests / pre-boot).
40
+ */
41
+ function ensureFormatMessageSync(): NonNullable<typeof formatMessageFn> {
42
+ if (formatMessageFn) return formatMessageFn;
43
+ const mod = requireFormat("./format.ts") as {
44
+ formatMessage: NonNullable<typeof formatMessageFn>;
45
+ };
46
+ formatMessageFn = mod.formatMessage;
47
+ return formatMessageFn;
48
+ }
49
+
50
+ /**
51
+ * Format a resolved message — simple `{name}` on the cold path; ICU via FormatJS.
52
+ *
53
+ * @param message - Template
54
+ * @param locale - BCP 47 locale
55
+ * @param values - Interpolation values
56
+ */
57
+ function formatResolved(message: string, locale: string, values?: MessageValues): string {
58
+ if (!needsIcuFormat(message)) {
59
+ return interpolateSimple(message, values);
60
+ }
61
+ return ensureFormatMessageSync()(message, locale, values);
62
+ }
63
+
17
64
  export type { MessageTree, MessageValues } from "./types.ts";
18
65
 
19
66
  /** Flat key → message map after {@link flattenMessages}. */
@@ -62,7 +109,7 @@ export function defineMessages<const T extends MessageTree>(messages: T): T {
62
109
  /**
63
110
  * Register (or replace) messages for a locale.
64
111
  *
65
- * Side-effect import from `src/locales/<locale>.ts` before boot.
112
+ * Load locale modules before boot (starter: `core.ts` `@/locales`).
66
113
  * Prefer `as const` / {@link defineMessages} on the default locale, then
67
114
  * `satisfies MessagesFor<typeof en>` on translations so keys stay aligned.
68
115
  *
@@ -134,10 +181,10 @@ export function translate(options: TranslateOptions): string {
134
181
  const { locale, defaultLocale, catalogs, key } = options;
135
182
  const values = options.values ?? options.params;
136
183
  const primary = catalogs[locale]?.[key];
137
- if (primary !== undefined) return formatMessage(primary, locale, values);
184
+ if (primary !== undefined) return formatResolved(primary, locale, values);
138
185
  if (locale !== defaultLocale) {
139
186
  const fallback = catalogs[defaultLocale]?.[key];
140
- if (fallback !== undefined) return formatMessage(fallback, defaultLocale, values);
187
+ if (fallback !== undefined) return formatResolved(fallback, defaultLocale, values);
141
188
  }
142
189
  if (values === undefined) return key;
143
190
  return `${key}:${JSON.stringify(values)}`;
@@ -0,0 +1,7 @@
1
+ /**
2
+ * `okengine/i18n` — ICU catalogs and locale helpers.
3
+ *
4
+ * @module
5
+ */
6
+
7
+ export * from "./i18n/index.ts";
package/src/index.ts CHANGED
@@ -1,12 +1,12 @@
1
1
  /**
2
- * `okengine` public entry — kernel surface used by apps and examples.
2
+ * `okengine` public entry — ten exports + HTTP runtime essentials.
3
3
  *
4
- * Full ten-export surface lands as elements ship; this entry exposes the
5
- * executable core (oke · on · flow · http · fx · contracts).
4
+ * Heavy surfaces live on subpaths: `okengine/full`, `okengine/runs`,
5
+ * `okengine/i18n`, `okengine/compiler`, `okengine/journal`, `okengine/http`.
6
6
  *
7
7
  * @example
8
8
  * ```ts
9
- * import { oke, on, flow, http } from "okengine";
9
+ * import { oke, on, flow, http, gate } from "okengine";
10
10
  *
11
11
  * export const app = oke({ name: "notes" });
12
12
  * ```
@@ -14,52 +14,28 @@
14
14
  * @module
15
15
  */
16
16
 
17
+ export { oke, type OkeApp, type OkeOptions, type ReadyState } from "./kernel/app.ts";
18
+ export { on, type Binding } from "./kernel/on.ts";
19
+ export { flow, isFlow, type FlowDef } from "./kernel/flow.ts";
20
+ export { http, every, internal, table } from "./kernel/triggers.ts";
21
+ export { fail, type FlowFailure, type FlowErrorValue } from "./kernel/errors.ts";
22
+ export { isFlowFailure } from "./kernel/hooks.ts";
23
+ export { plugin, isPlugin, type PluginDef, type PluginCapabilities } from "./kernel/plugin.ts";
24
+ export type { Fx, FxPrincipal, StepOptions } from "./kernel/fx.ts";
25
+
17
26
  export {
18
- oke,
19
- on,
20
- flow,
21
- http,
22
- every,
23
- internal,
24
- table,
25
- fail,
26
- createFx,
27
- isFlow,
28
- isFlowFailure,
29
- plugin,
30
- isPlugin,
31
- bootApplication,
32
- mintCapabilities,
33
- gateDenialFailure,
34
- journey,
35
- unit,
36
- rateLimit,
37
- Redacted,
38
- isRedacted,
39
- maskRedactedDeep,
40
- REDACTED_PLACEHOLDER,
41
- PluginNeedsError,
42
- assertPluginNeeds,
43
- freezePrincipal,
44
- installGracefulShutdown,
45
- releaseInstanceLeases,
46
- type OkeApp,
47
- type OkeOptions,
48
- type ReadyState,
49
- type FlowDef,
50
- type FlowFailure,
51
- type FlowErrorValue,
52
- type Fx,
53
- type FxPrincipal,
54
- type Binding,
55
- type PluginDef,
56
- type PluginCapabilities,
57
- type BootOptions,
58
- type BootResult,
59
- type ElementRuntimes,
60
- type JourneyDecl,
61
- type UnitBag,
62
- } from "./kernel/index.ts";
27
+ defineLocale,
28
+ defineMessages,
29
+ flattenMessages,
30
+ getMessageCatalogs,
31
+ matchConfiguredLocale,
32
+ translate,
33
+ type MessageCatalog,
34
+ type MessageCatalogs,
35
+ } from "./i18n/messages.ts";
36
+ export type { AppMessageKey, MessageTree, MessageValues, MessagesFor } from "./i18n/types.ts";
37
+ export { runWithLocale, type LocaleContext } from "./i18n/locale-context.ts";
38
+ export { isRtlLocale, parseAcceptLanguage, resolveLocale } from "./elements/channel/locale.ts";
63
39
 
64
40
  export {
65
41
  store,
@@ -111,20 +87,16 @@ export {
111
87
  export {
112
88
  gate,
113
89
  GATE_PUBLIC_NAME,
114
- GateBootError,
115
- assertHttpGatePosture,
116
- createGateRuntime,
117
- resolveGateConfig,
118
- takeRate,
119
- deriveModuleActions,
120
- ALL_RATE_STRATEGIES,
121
90
  type GateDecl,
122
- type GateOptions,
123
- type GatePostureGap,
124
- type GateRuntime,
125
91
  type RateOptions,
92
+ } from "./elements/gate/declare.ts";
93
+ export {
94
+ resolveGateConfig,
95
+ type GateOptions,
126
96
  type ResolvedGateConfig,
127
- } from "./elements/gate.ts";
97
+ } from "./elements/gate/config.ts";
98
+ export { GateBootError, assertHttpGatePosture, type GatePostureGap } from "./elements/gate/boot.ts";
99
+ export { DEFAULT_RATE_STRATEGY, ALL_RATE_STRATEGIES } from "./elements/gate/constants.ts";
128
100
 
129
101
  export {
130
102
  vault,
@@ -133,6 +105,9 @@ export {
133
105
  createVaultRuntime,
134
106
  VaultBootError,
135
107
  SECRET_MASK,
108
+ listRequiredEnvNames,
109
+ resetRequiredEnvNames,
110
+ type VaultEnvApi,
136
111
  type VaultSecretDecl,
137
112
  type VaultRuntime,
138
113
  } from "./elements/vault.ts";
@@ -161,95 +136,10 @@ export {
161
136
  type AiRuntime,
162
137
  } from "./elements/ai.ts";
163
138
 
164
- export {
165
- createJournal,
166
- createMemoryJournalStore,
167
- createFileJournalStore,
168
- hasJournalLease,
169
- isJournalLeaseBusy,
170
- JournalLeaseBusy,
171
- JOURNAL_DEFAULT_LEASE_MS,
172
- type Journal,
173
- type JournalLeaseOptions,
174
- type JournalLeaseStore,
175
- type JournalStore,
176
- type JournalRun,
177
- } from "./kernel/journal.ts";
178
-
179
- export {
180
- validate,
181
- isStandardSchema,
182
- fromTypeBox,
183
- VALIDATION_ERROR_CODE,
184
- type StandardSchemaV1,
185
- type SchemaInput,
186
- type ValidationErrorData,
187
- } from "./validation/index.ts";
188
-
189
- export {
190
- compileAot,
191
- compileDynamic,
192
- compileRoute,
193
- sucrose,
194
- type CompiledRoute,
195
- type ContextInference,
196
- } from "./compiler/index.ts";
197
-
198
- export {
199
- defineLocale,
200
- defineMessages,
201
- flattenMessages,
202
- formatMessage,
203
- getMessageCatalogs,
204
- interpolateMessage,
205
- isRtlLocale,
206
- matchConfiguredLocale,
207
- parseAcceptLanguage,
208
- resolveFailureMessage,
209
- resolveLocale,
210
- runWithLocale,
211
- translate,
212
- type AppMessageKey,
213
- type FlattenKeys,
214
- type LocaleContext,
215
- type MessageCatalog,
216
- type MessageCatalogs,
217
- type MessageTree,
218
- type MessageValue,
219
- type MessageValues,
220
- type MessagesFor,
221
- type Register,
222
- } from "./i18n/index.ts";
223
-
224
139
  export {
225
140
  createBunRuntime,
226
141
  createWebStandardRuntime,
227
142
  APP_PORT,
228
- CONSOLE_PORT,
229
- MCP_PORT,
230
143
  type Runtime,
231
144
  type ServeOptions,
232
145
  } from "./runtime/index.ts";
233
- export {
234
- createRunsRuntime,
235
- collectWideEvent,
236
- createRunTelemetry,
237
- explainOutliers,
238
- seedOutlierDataset,
239
- privacyErase,
240
- createMemorySubjectKeys,
241
- subjectKeysFromVault,
242
- archiveFields,
243
- revealArchived,
244
- eraseSubject,
245
- SHREDDED,
246
- filesRunsDriver,
247
- memoryRunsDriver,
248
- postgresRunsDriver,
249
- clickhouseRunsDriver,
250
- type RunsRuntime,
251
- type WideEvent,
252
- type CreateRunsRuntimeOptions,
253
- type OutlierFinding,
254
- type SubjectKeyVault,
255
- } from "./runs/index.ts";
@@ -0,0 +1,20 @@
1
+ /**
2
+ * `okengine/journal` — durable-run journal stores.
3
+ *
4
+ * @module
5
+ */
6
+
7
+ export {
8
+ createJournal,
9
+ createMemoryJournalStore,
10
+ createFileJournalStore,
11
+ hasJournalLease,
12
+ isJournalLeaseBusy,
13
+ JournalLeaseBusy,
14
+ JOURNAL_DEFAULT_LEASE_MS,
15
+ type Journal,
16
+ type JournalLeaseOptions,
17
+ type JournalLeaseStore,
18
+ type JournalStore,
19
+ type JournalRun,
20
+ } from "./kernel/journal.ts";