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.
- package/package.json +76 -10
- package/site/content/docs/deployment/docker-swarm.mdx +48 -111
- package/site/content/docs/deployment/docker.mdx +43 -36
- package/site/content/docs/deployment/index.mdx +9 -9
- package/site/content/docs/deployment/kubernetes.mdx +4 -4
- package/site/content/docs/elements/ai.mdx +7 -7
- package/site/content/docs/elements/channel.mdx +9 -7
- package/site/content/docs/elements/clock.mdx +8 -8
- package/site/content/docs/elements/flow.mdx +46 -47
- package/site/content/docs/elements/gate.mdx +6 -5
- package/site/content/docs/elements/signal.mdx +2 -2
- package/site/content/docs/elements/store.mdx +71 -78
- package/site/content/docs/elements/vault.mdx +89 -70
- package/site/content/docs/get-started/basic-usage.mdx +8 -8
- package/site/content/docs/get-started/installation.mdx +36 -36
- package/site/content/docs/get-started/introduction.mdx +11 -0
- package/site/content/docs/get-started/why.mdx +2 -2
- package/site/content/docs/plugins/anonymous.mdx +1 -1
- package/site/content/docs/plugins/magic-link.mdx +11 -11
- package/site/content/docs/plugins/otp.mdx +2 -2
- package/site/content/docs/plugins/passkey.mdx +1 -1
- package/site/content/docs/plugins/two-factor.mdx +1 -1
- package/site/content/docs/plugins/username.mdx +1 -1
- package/site/content/docs/recipes/caddy.mdx +1 -1
- package/site/content/docs/recipes/cockroachdb.mdx +2 -2
- package/site/content/docs/recipes/dragonfly.mdx +1 -1
- package/site/content/docs/recipes/index.mdx +1 -2
- package/site/content/docs/recipes/llama-cpp.mdx +21 -23
- package/site/content/docs/recipes/mailpit.mdx +11 -11
- package/site/content/docs/recipes/meilisearch.mdx +10 -10
- package/site/content/docs/recipes/meta.json +0 -1
- package/site/content/docs/recipes/ollama.mdx +1 -1
- package/site/content/docs/recipes/pgdog.mdx +12 -9
- package/site/content/docs/recipes/postgres.mdx +3 -3
- package/site/content/docs/recipes/redis.mdx +2 -2
- package/site/content/docs/recipes/rustfs.mdx +10 -7
- package/site/content/docs/recipes/sglang.mdx +1 -1
- package/site/content/docs/recipes/supabase-docker.mdx +1 -1
- package/site/content/docs/recipes/timescale.mdx +2 -2
- package/site/content/docs/recipes/valkey.mdx +1 -1
- package/site/content/docs/recipes/vllm.mdx +1 -1
- package/site/content/docs/recipes/yugabytedb.mdx +2 -2
- package/site/content/docs/reference/cli.md +61 -38
- package/site/content/docs/reference/configuration.mdx +145 -70
- package/site/content/docs/reference/environment-variables.mdx +36 -28
- package/site/content/docs/reference/errors.mdx +28 -29
- package/site/content/docs/reference/fx.mdx +11 -4
- package/site/content/docs/reference/i18n.mdx +17 -6
- package/site/content/docs/reference/index.mdx +5 -0
- package/site/content/docs/reference/meta.json +1 -0
- package/site/content/docs/reference/migrating-environments.mdx +158 -0
- package/site/content/docs/reference/plugins.mdx +2 -2
- package/src/auth/gate-auth.test.ts +12 -10
- package/src/cli/ai-setup/ai-setup.test.ts +27 -15
- package/src/cli/ai-setup/apply.ts +111 -15
- package/src/cli/ai-setup/catalog.ts +3 -3
- package/src/cli/ai-setup/index.ts +1 -1
- package/src/cli/ai-setup/prompts.ts +1 -1
- package/src/cli/ai-setup/recommend.test.ts +1 -1
- package/src/cli/ask-seed.test.ts +3 -3
- package/src/cli/build.ts +1 -1
- package/src/cli/db-auto-push.test.ts +6 -3
- package/src/cli/db-auto-push.ts +7 -5
- package/src/cli/db-seed.ts +7 -8
- package/src/cli/db.test.ts +70 -71
- package/src/cli/db.ts +86 -12
- package/src/cli/dev-controller.test.ts +35 -0
- package/src/cli/dev-controller.ts +298 -0
- package/src/cli/dev-controls.ts +11 -65
- package/src/cli/dev-db-push.test.ts +47 -15
- package/src/cli/dev-schema-sync.test.ts +11 -11
- package/src/cli/dev-schema-sync.ts +10 -10
- package/src/cli/dev-session-lock.test.ts +106 -0
- package/src/cli/dev-session-lock.ts +209 -0
- package/src/cli/dev.test.ts +166 -121
- package/src/cli/dev.ts +138 -192
- package/src/cli/doc-staleness.test.ts +3 -6
- package/src/cli/docker-clean.test.ts +33 -1
- package/src/cli/docker-clean.ts +28 -33
- package/src/cli/docker-cli.test.ts +12 -11
- package/src/cli/docker.ts +95 -20
- package/src/cli/doctor.test.ts +40 -0
- package/src/cli/doctor.ts +55 -15
- package/src/cli/drizzle-env.test.ts +11 -13
- package/src/cli/drizzle-env.ts +18 -11
- package/src/cli/ensure-drizzle-config.ts +11 -14
- package/src/cli/hero-meta.test.ts +15 -15
- package/src/cli/hero-meta.ts +10 -9
- package/src/cli/index.ts +36 -6
- package/src/cli/load-config.images.test.ts +16 -12
- package/src/cli/load-config.source.test.ts +50 -0
- package/src/cli/load-config.ts +34 -28
- package/src/cli/meilisearch-local.ts +1 -2
- package/src/cli/mode.ts +7 -58
- package/src/cli/registry.ts +175 -19
- package/src/cli/resolve-dev-sql-env.test.ts +8 -16
- package/src/cli/resolve-dev-sql-env.ts +13 -15
- package/src/cli/safe-defaults.test.ts +28 -10
- package/src/cli/schema.ts +65 -16
- package/src/cli/test.ts +58 -0
- package/src/cli/tui/App.tsx +252 -0
- package/src/cli/tui/DevLive.tsx +116 -0
- package/src/cli/tui/components/ConfirmDialog.tsx +48 -0
- package/src/cli/tui/components/HeaderBar.tsx +67 -0
- package/src/cli/tui/components/LogStream.tsx +47 -0
- package/src/cli/tui/components/PanelCard.tsx +39 -0
- package/src/cli/tui/components/SelectRow.tsx +37 -0
- package/src/cli/tui/components/SlashPalette.tsx +172 -0
- package/src/cli/tui/components/Spinner.tsx +32 -0
- package/src/cli/tui/components/StatusBar.tsx +51 -0
- package/src/cli/tui/components/StatusDot.tsx +37 -0
- package/src/cli/tui/components/TabBar.tsx +49 -0
- package/src/cli/tui/components/Wordmark.tsx +43 -0
- package/src/cli/tui/format.ts +38 -0
- package/src/cli/tui/keys.test.ts +18 -0
- package/src/cli/tui/keys.ts +26 -0
- package/src/cli/tui/launch.test.ts +18 -0
- package/src/cli/tui/launch.ts +57 -0
- package/src/cli/tui/panels/Dashboard.tsx +201 -0
- package/src/cli/tui/panels/Database.tsx +198 -0
- package/src/cli/tui/panels/Dev.tsx +257 -0
- package/src/cli/tui/panels/Docker.tsx +357 -0
- package/src/cli/tui/panels/Navigator.test.ts +22 -0
- package/src/cli/tui/panels/Navigator.tsx +213 -0
- package/src/cli/tui/slash-catalog.test.ts +31 -0
- package/src/cli/tui/slash-catalog.ts +184 -0
- package/src/cli/tui/slash-run.ts +54 -0
- package/src/cli/tui/state/ports.ts +95 -0
- package/src/cli/tui/theme.ts +24 -0
- package/src/cli/vault-cmd.test.ts +402 -0
- package/src/cli/vault-cmd.ts +727 -69
- package/src/cli/vault-secure-input.test.ts +56 -0
- package/src/cli/vault-secure-input.ts +124 -0
- package/src/compiler/effects-infer.ts +7 -0
- package/src/compiler/fixtures/skyport/oke.config.ts +3 -3
- package/src/compiler/fixtures/skyport/src/flows/payments/index.ts +1 -1
- package/src/compiler/fixtures/skyport.expected.json +1 -1
- package/src/compiler-entry.ts +7 -0
- package/src/config/define-config.test.ts +111 -47
- package/src/config/driver-defaults.test.ts +16 -23
- package/src/config/driver-defaults.ts +33 -63
- package/src/config/index.ts +169 -144
- package/src/config/resolve-driver.test.ts +14 -19
- package/src/console/server/app.ts +4 -2
- package/src/console/server/console.test.ts +58 -1
- package/src/console/server/flows.ts +22 -2
- package/src/console/server/index.ts +3 -0
- package/src/console/server/operator-db.test.ts +55 -13
- package/src/console/server/operator-db.ts +305 -263
- package/src/console/server/serve.ts +16 -7
- package/src/console/server/state.ts +31 -9
- package/src/console/server/vault.test.ts +120 -5
- package/src/console/server/vault.ts +208 -12
- package/src/console/ui/dist/assets/{index-D-9KFce5.js → index--Y0Uaz-m.js} +2 -2
- package/src/console/ui/dist/assets/panel-vault-BkZdJPX8.js +1 -0
- package/src/console/ui/dist/assets/style-C3L349iZ.css +3 -0
- package/src/console/ui/dist/index.html +2 -2
- package/src/console/ui/shell/client.ts +16 -0
- package/src/console/ui/shell/panels/vault/VaultPanel.tsx +54 -1
- package/src/console/ui/vault/VaultA11yView.tsx +33 -1
- package/src/console/ui/vault/backend.test.ts +75 -0
- package/src/console/ui/vault/backend.ts +117 -0
- package/src/console/ui/vault/fixture.ts +21 -2
- package/src/console/ui/vault/index.ts +11 -1
- package/src/console/ui/vault/types.ts +26 -0
- package/src/docker/compose.ts +164 -61
- package/src/docker/derive.ts +106 -12
- package/src/docker/docker.test.ts +156 -110
- package/src/docker/helpers.ts +98 -0
- package/src/docker/images-config.test.ts +3 -8
- package/src/docker/index.ts +30 -5
- package/src/docker/recipes/index.ts +0 -3
- package/src/docker/recipes/llama-cpp.ts +4 -4
- package/src/docker/recipes/pgdog.ts +9 -2
- package/src/docker/resources.test.ts +71 -0
- package/src/docker/resources.ts +176 -0
- package/src/docker/stack-id.test.ts +11 -4
- package/src/docker/stack-id.ts +42 -32
- package/src/docker/stack.integration.test.ts +4 -15
- package/src/docker/types.ts +35 -3
- package/src/drivers/ai-ollama.integration.test.ts +2 -2
- package/src/drivers/conformance.test.ts +11 -12
- package/src/drivers/drizzle-dialect.test.ts +0 -4
- package/src/drivers/drizzle-dialect.ts +7 -13
- package/src/drivers/index.ts +24 -7
- package/src/drivers/journal-postgres.test.ts +3 -1
- package/src/drivers/journal-postgres.ts +4 -2
- package/src/drivers/meilisearch.ts +1 -1
- package/src/drivers/pglite.ts +28 -5
- package/src/drivers/types.ts +9 -11
- package/src/drivers/vault-aws-secrets-manager.test.ts +159 -0
- package/src/drivers/vault-aws-secrets-manager.ts +333 -0
- package/src/drivers/vault-builtin.test.ts +110 -0
- package/src/drivers/vault-builtin.ts +184 -0
- package/src/drivers/vault-driver-removal.test.ts +13 -0
- package/src/drivers/vault-managed.test.ts +95 -0
- package/src/drivers/vault-managed.ts +101 -25
- package/src/drivers/vault-types.ts +25 -5
- package/src/elements/ai/runtime.ts +1 -1
- package/src/elements/clock/chaos.test.ts +4 -1
- package/src/elements/clock/durable.ts +57 -4
- package/src/elements/clock.test.ts +13 -14
- package/src/elements/gate/constants.ts +18 -0
- package/src/elements/gate.test.ts +1 -1
- package/src/elements/gate.ts +2 -2
- package/src/elements/store/domain-ddl.test.ts +5 -12
- package/src/elements/store/emit-drizzle.ts +44 -19
- package/src/elements/store/index-boot.test.ts +15 -116
- package/src/elements/store/load-plugin-tables.ts +1 -1
- package/src/elements/store/resource-list-docs.fixture.ts +12 -6
- package/src/elements/store/resource-list-docs.test.ts +64 -44
- package/src/elements/store/resource.test.ts +17 -10
- package/src/elements/store/runtime.ts +9 -12
- package/src/elements/store/schema-decl.test.ts +16 -32
- package/src/elements/store/seed.test.ts +1 -2
- package/src/elements/store/seed.ts +7 -8
- package/src/elements/store/sql-condition.test.ts +2 -2
- package/src/elements/store/sql-session.test.ts +8 -10
- package/src/elements/store/sql-session.ts +10 -2
- package/src/elements/store.test.ts +13 -13
- package/src/elements/vault/audit.ts +233 -0
- package/src/elements/vault/boot-chain.test.ts +78 -0
- package/src/elements/vault/boot-chain.ts +43 -39
- package/src/elements/vault/builtin-adapter.test.ts +479 -0
- package/src/elements/vault/builtin-adapter.ts +1184 -0
- package/src/elements/vault/crypto.test.ts +237 -0
- package/src/elements/vault/crypto.ts +431 -0
- package/src/elements/vault/declare.ts +164 -3
- package/src/elements/vault/errors.ts +56 -0
- package/src/elements/vault/kms-unseal.test.ts +76 -0
- package/src/elements/vault/kms-unseal.ts +181 -0
- package/src/elements/vault/path.ts +90 -0
- package/src/elements/vault/resilience.test.ts +102 -0
- package/src/elements/vault/resilience.ts +107 -0
- package/src/elements/vault/runtime.ts +36 -4
- package/src/elements/vault/security-checklist.test.ts +130 -0
- package/src/elements/vault/storage.ts +448 -0
- package/src/elements/vault/types.ts +288 -0
- package/src/elements/vault/unseal.ts +150 -0
- package/src/elements/vault.test.ts +72 -4
- package/src/elements/vault.ts +91 -2
- package/src/full.ts +248 -0
- package/src/http.ts +41 -0
- package/src/i18n/interpolate-simple.ts +37 -0
- package/src/i18n/messages.ts +51 -4
- package/src/i18n-entry.ts +7 -0
- package/src/index.ts +35 -145
- package/src/journal-entry.ts +20 -0
- package/src/kernel/adopt-barrel-fresh.test.ts +25 -10
- package/src/kernel/app.ts +40 -42
- package/src/kernel/auto-registry.test.ts +2 -2
- package/src/kernel/boot-bind/ai.test.ts +5 -5
- package/src/kernel/boot-bind/ai.ts +2 -1
- package/src/kernel/boot-bind/channel.test.ts +6 -6
- package/src/kernel/boot-bind/channel.ts +3 -10
- package/src/kernel/boot-bind/clock.ts +2 -2
- package/src/kernel/boot-bind/gate.ts +5 -9
- package/src/kernel/boot-bind/honor-config.test.ts +42 -42
- package/src/kernel/boot-bind/journal.ts +2 -2
- package/src/kernel/boot-bind/store.test.ts +43 -44
- package/src/kernel/boot-bind/store.ts +16 -41
- package/src/kernel/boot-bind/vault.ts +16 -1
- package/src/kernel/boot.test.ts +12 -4
- package/src/kernel/boot.ts +31 -19
- package/src/kernel/budget-entry.ts +1 -1
- package/src/kernel/compensate.test.ts +288 -1
- package/src/kernel/compensate.ts +126 -0
- package/src/kernel/concurrency.test.ts +10 -9
- package/src/kernel/effects-stamping.test.ts +27 -2
- package/src/kernel/element-registries.ts +5 -3
- package/src/kernel/flow.ts +4 -2
- package/src/kernel/fx.test.ts +119 -3
- package/src/kernel/fx.ts +215 -40
- package/src/kernel/index.ts +14 -0
- package/src/kernel/journal.ts +130 -7
- package/src/kernel/pipeline.test.ts +20 -6
- package/src/kernel/redacted.test.ts +35 -0
- package/src/kernel/redacted.ts +24 -2
- package/src/kernel/router/create-default.ts +16 -0
- package/src/kernel/router/create-edge.ts +18 -0
- package/src/kernel/router/create.ts +23 -0
- package/src/kernel/router/index.ts +23 -0
- package/src/kernel/router/linear.ts +88 -0
- package/src/kernel/router/regexp.ts +188 -0
- package/src/kernel/router/smart.ts +120 -0
- package/src/kernel/router/trie.ts +108 -0
- package/src/kernel/router/types.ts +56 -0
- package/src/kernel/router.ts +18 -532
- package/src/kernel-entry.ts +43 -0
- package/src/manifest/fixtures/skyport.excerpt.json +1 -1
- package/src/manifest/fixtures/skyport.manifest.json +1 -1
- package/src/plugins/config-source.test.ts +7 -7
- package/src/release/build-lib.ts +58 -0
- package/src/release/exports.test.ts +4 -2
- package/src/release/exports.ts +30 -4
- package/src/release/measure.ts +101 -22
- package/src/runs/duckdb.ts +7 -2
- package/src/shared/optional-peer.ts +41 -0
- package/src/term.test.ts +3 -44
- package/src/test/create-test-app.ts +12 -0
- package/src/test/provisions.integration.test.ts +1 -1
- package/src/test/reset-element-registries.ts +2 -0
- package/src/upgrade/codemods.test.ts +7 -20
- package/src/upgrade/codemods.ts +93 -60
- package/site/content/docs/recipes/openbao.mdx +0 -141
- package/src/cli/ask-dev-mode.ts +0 -40
- package/src/cli/dev-mode.test.ts +0 -45
- package/src/cli/dev-mode.ts +0 -78
- package/src/cli/openbao-bootstrap.test.ts +0 -150
- package/src/cli/openbao-bootstrap.ts +0 -321
- package/src/cli/openbao-restart.integration.test.ts +0 -145
- package/src/console/ui/dist/assets/panel-vault-Za1GyJfM.js +0 -1
- package/src/console/ui/dist/assets/style-C8MxEWPd.css +0 -3
- package/src/docker/recipes/openbao.ts +0 -47
- package/src/drivers/libsql.ts +0 -179
- package/src/drivers/sqlite.ts +0 -44
- package/src/drivers/vault-openbao.test.ts +0 -97
- package/src/drivers/vault-openbao.ts +0 -143
|
@@ -5,7 +5,7 @@ icon: "Database"
|
|
|
5
5
|
source: "docs/spec/unified-theory.md"
|
|
6
6
|
---
|
|
7
7
|
|
|
8
|
-
Postgres is the default `store.sql` image in
|
|
8
|
+
Postgres is the default `store.sql` image in `dev` and `prod`. `oke docker` matches
|
|
9
9
|
any image whose reference contains `postgres` or `pgvector` (after more specific
|
|
10
10
|
recipes), then derives env, healthcheck, and connection URL.
|
|
11
11
|
|
|
@@ -33,7 +33,7 @@ images: {
|
|
|
33
33
|
### Bring the stack up
|
|
34
34
|
|
|
35
35
|
```bash
|
|
36
|
-
oke dev
|
|
36
|
+
oke dev
|
|
37
37
|
```
|
|
38
38
|
|
|
39
39
|
`oke docker` writes `POSTGRES_USER` / `POSTGRES_PASSWORD` / `POSTGRES_DB` into
|
|
@@ -105,7 +105,7 @@ Scale out with [PgDog](/docs/recipes/pgdog) so `N × Bun.SQL pool` does not exha
|
|
|
105
105
|
<Accordion title="oke boot: postgres driver needs DATABASE_URL">
|
|
106
106
|
|
|
107
107
|
The `postgres` driver fails boot when neither `DATABASE_URL` nor `OKE_STORE_SQL_URL` is
|
|
108
|
-
set. Re-run `oke dev
|
|
108
|
+
set. Re-run `oke dev` so the stack writes `docker/.env.docker`, or export
|
|
109
109
|
`DATABASE_URL` yourself when pointing at a managed host.
|
|
110
110
|
|
|
111
111
|
</Accordion>
|
|
@@ -5,7 +5,7 @@ icon: "Zap"
|
|
|
5
5
|
source: "docs/spec/unified-theory.md"
|
|
6
6
|
---
|
|
7
7
|
|
|
8
|
-
Redis is the default `store.kv` image in
|
|
8
|
+
Redis is the default `store.kv` image in `dev` and `prod`. `oke docker` matches image
|
|
9
9
|
references containing `redis` or `keydb` and derives a password-required server — no
|
|
10
10
|
unauthenticated instance.
|
|
11
11
|
|
|
@@ -99,7 +99,7 @@ Multi-replica Gate rate counters and Signal need a **shared** Redis URL — an i
|
|
|
99
99
|
<Accordion title="oke boot: redis driver needs REDIS_URL">
|
|
100
100
|
|
|
101
101
|
Missing `REDIS_URL` fails boot loudly — never a silent fallback to `memory`. Re-run
|
|
102
|
-
`oke dev
|
|
102
|
+
`oke dev` or export `REDIS_URL` when using a managed host. Under Compose the
|
|
103
103
|
message asks whether `oke dev -d` wrote `docker/.env.docker`.
|
|
104
104
|
|
|
105
105
|
</Accordion>
|
|
@@ -5,9 +5,8 @@ icon: "HardDrive"
|
|
|
5
5
|
source: "docs/spec/unified-theory.md"
|
|
6
6
|
---
|
|
7
7
|
|
|
8
|
-
RustFS is the default
|
|
9
|
-
store
|
|
10
|
-
endpoint.
|
|
8
|
+
RustFS is the default `oke dev` / prod `store.files` image — an Apache-2.0 S3-compatible
|
|
9
|
+
object store. Driver id stays `s3`; Bun binds `Bun.S3Client` against the endpoint.
|
|
11
10
|
|
|
12
11
|
<Callout title="The one rule">
|
|
13
12
|
Protocol name is `s3` — vendor choice is the image pin (`rustfs/rustfs:…`) plus `S3_ENDPOINT`.
|
|
@@ -24,11 +23,11 @@ endpoint.
|
|
|
24
23
|
```typescript title="oke.config.ts"
|
|
25
24
|
drivers: {
|
|
26
25
|
store: {
|
|
27
|
-
files: {
|
|
26
|
+
files: { dev: "s3", test: "memory", prod: "s3" },
|
|
28
27
|
},
|
|
29
28
|
},
|
|
30
29
|
images: {
|
|
31
|
-
|
|
30
|
+
store: { files: "rustfs/rustfs:1.0.0-beta.11" },
|
|
32
31
|
},
|
|
33
32
|
```
|
|
34
33
|
|
|
@@ -116,7 +115,7 @@ the recipe enables the console for local ops.
|
|
|
116
115
|
<Accordion title="oke boot: redis / meilisearch / S3 URL missing — S3_BUCKET">
|
|
117
116
|
|
|
118
117
|
Files on the `s3` driver need `S3_BUCKET` (or `OKE_STORE_FILES_DB`). Without it the
|
|
119
|
-
facet cannot open. Re-run `oke dev
|
|
118
|
+
facet cannot open. Re-run `oke dev` so stack env fills `S3_*`, or export them
|
|
120
119
|
for a managed bucket.
|
|
121
120
|
|
|
122
121
|
</Accordion>
|
|
@@ -143,6 +142,10 @@ running service; confirm health at `/health` before debugging client signatures.
|
|
|
143
142
|
description="SMTP catcher for the same stack."
|
|
144
143
|
href="/docs/recipes/mailpit"
|
|
145
144
|
/>
|
|
146
|
-
<Card
|
|
145
|
+
<Card
|
|
146
|
+
title="Vault"
|
|
147
|
+
description="Secrets and built-in encrypted store."
|
|
148
|
+
href="/docs/elements/vault"
|
|
149
|
+
/>
|
|
147
150
|
<Card title="Store" description="Files facet details." href="/docs/elements/store" />
|
|
148
151
|
</Cards>
|
|
@@ -23,7 +23,7 @@ production apps. For general multi-user serving, prefer [vLLM](/docs/recipes/vll
|
|
|
23
23
|
|
|
24
24
|
```typescript title="oke.config.ts"
|
|
25
25
|
drivers: {
|
|
26
|
-
ai: {
|
|
26
|
+
ai: { dev: "openai-compatible", test: "mock", prod: "openai-compatible" },
|
|
27
27
|
},
|
|
28
28
|
images: {
|
|
29
29
|
ai: "lmsysorg/sglang:v0.5.16-runtime", // never :latest
|
|
@@ -33,7 +33,7 @@ images: {
|
|
|
33
33
|
### Bring the stack up
|
|
34
34
|
|
|
35
35
|
```bash
|
|
36
|
-
oke dev
|
|
36
|
+
oke dev
|
|
37
37
|
```
|
|
38
38
|
|
|
39
39
|
Same credential contract as [Postgres](/docs/recipes/postgres):
|
|
@@ -104,7 +104,7 @@ re-derive, then `CREATE EXTENSION timescaledb`.
|
|
|
104
104
|
</Accordion>
|
|
105
105
|
<Accordion title="oke boot: postgres driver needs DATABASE_URL">
|
|
106
106
|
|
|
107
|
-
Same as Postgres — re-run `oke dev
|
|
107
|
+
Same as Postgres — re-run `oke dev` or export `DATABASE_URL` for a remote
|
|
108
108
|
host.
|
|
109
109
|
|
|
110
110
|
</Accordion>
|
|
@@ -90,7 +90,7 @@ see [DigitalOcean Managed Caching](/docs/providers/digitalocean-caching).
|
|
|
90
90
|
<Accordion title="oke boot: redis driver needs REDIS_URL">
|
|
91
91
|
|
|
92
92
|
Same loud failure as Redis — the driver id is still `redis`. Export `REDIS_URL` or let
|
|
93
|
-
`oke dev
|
|
93
|
+
`oke dev` write it.
|
|
94
94
|
|
|
95
95
|
</Accordion>
|
|
96
96
|
<Accordion title="Healthcheck uses redis-cli and fails">
|
|
@@ -23,7 +23,7 @@ you choose to self-host inference instead of a managed provider. Driver id stays
|
|
|
23
23
|
|
|
24
24
|
```typescript title="oke.config.ts"
|
|
25
25
|
drivers: {
|
|
26
|
-
ai: {
|
|
26
|
+
ai: { dev: "openai-compatible", test: "mock", prod: "openai-compatible" },
|
|
27
27
|
},
|
|
28
28
|
images: {
|
|
29
29
|
ai: "vllm/vllm-openai:v0.26.0", // never :latest
|
|
@@ -33,7 +33,7 @@ images: {
|
|
|
33
33
|
### Bring the stack up
|
|
34
34
|
|
|
35
35
|
```bash
|
|
36
|
-
oke dev
|
|
36
|
+
oke dev
|
|
37
37
|
```
|
|
38
38
|
|
|
39
39
|
`oke docker` injects `YSQL_USER` / `YSQL_PASSWORD` / `YSQL_DB` from `OKE_STORE_SQL_*`
|
|
@@ -105,7 +105,7 @@ Receiver or remap that port in `compose.override.yml` if you need the UI.
|
|
|
105
105
|
<Accordion title="password authentication failed">
|
|
106
106
|
|
|
107
107
|
`YSQL_PASSWORD` must match `DATABASE_URL`. Regenerate `docker/.env.docker` with
|
|
108
|
-
`oke dev
|
|
108
|
+
`oke dev`. Auth is off only when `YSQL_PASSWORD` is unset — this recipe
|
|
109
109
|
always sets it.
|
|
110
110
|
|
|
111
111
|
</Accordion>
|
|
@@ -11,34 +11,41 @@ source: "docs/cli.md"
|
|
|
11
11
|
bun add okengine # ONE package (project)
|
|
12
12
|
bun install -g okengine # global `oke` on PATH
|
|
13
13
|
|
|
14
|
+
oke # interactive TUI (TTY) — Dashboard · Dev · Database · Docker · Navigator
|
|
15
|
+
oke --tui # force TUI even when other args were passed
|
|
16
|
+
oke --help # command list (also what bare `oke` prints when non-TTY / CI)
|
|
17
|
+
|
|
14
18
|
oke dev # watch · hot reload · Console :6533 · app :6530 · MCP :6535 · docs MCP :6536
|
|
15
|
-
# →
|
|
16
|
-
|
|
19
|
+
# → always Docker Compose under docker/ + host Bun
|
|
20
|
+
# → client types + domain schema push on save
|
|
17
21
|
oke dev --no-db-push # opt out of auto oke db push on schema input save
|
|
18
|
-
oke dev
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
oke mode
|
|
22
|
+
oke dev -d store.sql,signal # optional role filter (still Compose; requires Docker)
|
|
23
|
+
oke test # bun test with PGLite posture (NODE_ENV=test, OKE_PGLITE_URL=memory://)
|
|
24
|
+
# → does not start Docker Compose
|
|
25
|
+
oke mode # removed — prints error; use oke dev (Compose) / oke test (PGLite)
|
|
22
26
|
|
|
23
27
|
oke start # runs exactly what production runs (this is the Docker CMD)
|
|
24
28
|
oke doctor # verify secrets, ports, drivers, tenancy, schema drift
|
|
25
29
|
oke stack # preview resolved images/tags/ports — writes nothing
|
|
26
30
|
|
|
27
|
-
oke schema generate # core + plugin stubs → schema/oke.ts
|
|
28
|
-
oke db push # domain schema.ts → live
|
|
31
|
+
oke schema generate # core + plugin stubs → .oke/schema/oke.ts (--check in CI)
|
|
32
|
+
oke db push # domain schema.ts → live DB (dev; drizzle-kit)
|
|
29
33
|
oke db generate # versioned SQL under drizzle/ (review)
|
|
30
34
|
oke db migrate # apply migrations (explicit; never auto in prod)
|
|
31
35
|
oke db seed # defineSeed (essential + env category); never at boot
|
|
32
|
-
oke db seed --env prod --force # CI: skip
|
|
36
|
+
oke db seed --env prod --force # CI: skip prod confirmation prompt
|
|
37
|
+
oke db studio # drizzle-kit Studio (long-running)
|
|
33
38
|
oke vault set STRIPE_KEY # also: list · import .env · key rotate
|
|
34
39
|
oke client add <url> # types for a separate frontend repo
|
|
35
40
|
|
|
36
|
-
oke docker # docker/Dockerfile + compose.yml
|
|
37
|
-
|
|
38
|
-
oke docker --
|
|
39
|
-
oke docker
|
|
40
|
-
oke docker
|
|
41
|
-
oke docker clean
|
|
41
|
+
oke docker # docker/Dockerfile + docker-compose.yml (prod-grade; 4 CPU / 8 GiB budget)
|
|
42
|
+
oke docker --split # layered compose.yml + compose.<role>.yml + compose.prod.yml
|
|
43
|
+
oke docker --stack # docker-stack.yml for docker stack deploy
|
|
44
|
+
oke docker --cpus 8 --memory 16 # override host budget used for deploy.resources
|
|
45
|
+
oke docker --no-prod # skip readiness / deploy / resource budget
|
|
46
|
+
oke docker clean # TTY: pick oke-dev-* projects → down -v (containers, networks, volumes)
|
|
47
|
+
oke docker clean --yes # non-TTY: current project only
|
|
48
|
+
oke docker clean --all --yes # non-TTY: every oke-dev-* project on this machine
|
|
42
49
|
oke images pin # tags → digests in oke.images.lock
|
|
43
50
|
|
|
44
51
|
oke build --target edge # < 15 kB kernel profile
|
|
@@ -58,20 +65,31 @@ In development, app, Console, MCP, and docs MCP prefer the canonical ports and m
|
|
|
58
65
|
when occupied. Docker infrastructure uses stable per-project offsets in disjoint ranges for
|
|
59
66
|
each built-in service, preventing one service's offset port from overlapping another's.
|
|
60
67
|
|
|
61
|
-
`oke
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
68
|
+
Bare `oke` on a TTY opens an Ink interactive shell (optional deps `ink` +
|
|
69
|
+
`react`). The viewport is cleared before render so boot logs never sit above the
|
|
70
|
+
frame. Chrome matches `oke dev`: green OKE wordmark on Dashboard, green active
|
|
71
|
+
tabs, cyan focus rows. Panels cover live ports (App / Console / MCP / Docs MCP),
|
|
72
|
+
Dev start/stop/attach with live logs, Database action cards (including Studio),
|
|
73
|
+
Docker compose status, and a Manifest navigator. **Tab** / **←→** (on the tab
|
|
74
|
+
strip) switch panels; **↑↓** navigate inside a panel; **Esc** returns to the tab
|
|
75
|
+
strip, then confirms quit when a managed `oke dev` is running; **1–5** jump
|
|
76
|
+
panels from any focus. Press `/` for the **command palette** (Tab autofill,
|
|
77
|
+
Enter runs `oke …`; status shows in the global footer). If `oke dev` is already
|
|
78
|
+
running, the TUI shows **Connected** via `.oke/dev.json` + port probes and will
|
|
79
|
+
not spawn a second stack. Non-TTY / CI keeps the classic help listing
|
|
80
|
+
(`EXIT_USAGE`).
|
|
81
|
+
|
|
82
|
+
`oke dev` always starts Compose (requires a running Docker daemon). Boot chrome
|
|
83
|
+
prints immediately (wordmark + Starting + profile), then streams background work
|
|
84
|
+
(compose up, vault, per-service health, AI probe). Status ● is green ready ·
|
|
85
|
+
yellow pending/loading · red error · dim idle. Compose health keeps polling
|
|
86
|
+
(`docker compose ps -a`); AI ● tracks model phase while the AI container is up.
|
|
87
|
+
Boot does not wait for the model to become ready. A successful session writes
|
|
88
|
+
`.oke/dev.json` (pid · ports · startedAt) and clears it on stop.
|
|
89
|
+
|
|
90
|
+
On a TTY, Ink keyboard controls stay active after boot (`useInput` — same
|
|
91
|
+
shortcuts as before). Press `r` to clear the log pane and reprint the latest
|
|
92
|
+
board.
|
|
75
93
|
|
|
76
94
|
| Key | Action |
|
|
77
95
|
| --------- | ----------------------------------- |
|
|
@@ -83,6 +101,12 @@ request logs.
|
|
|
83
101
|
Compose stays quiet unless it fails. Process-local boot notices print once under
|
|
84
102
|
the hero (not once per process).
|
|
85
103
|
|
|
104
|
+
`oke test` sets `NODE_ENV=test` and `OKE_PGLITE_URL=memory://` when unset, checks
|
|
105
|
+
that `@electric-sql/pglite` resolves, then forwards argv to `bun test`.
|
|
106
|
+
|
|
107
|
+
`oke mode` and `oke dev --local` / `-l` are removed — they exit with an error.
|
|
108
|
+
See [Migrating environments](/docs/reference/migrating-environments).
|
|
109
|
+
|
|
86
110
|
### create-oke
|
|
87
111
|
|
|
88
112
|
```bash
|
|
@@ -95,13 +119,10 @@ bunx create-oke@latest my-app --no-ai
|
|
|
95
119
|
```
|
|
96
120
|
|
|
97
121
|
On a TTY: pick **standard** or **advanced**, then recommended defaults or
|
|
98
|
-
customize. Customize
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
`~/.oke/create-defaults.json` (reuse only when `template` matches). Scaffold
|
|
103
|
-
writes `.oke/mode` from the primary side. Non-TTY / `--yes` / explicit
|
|
104
|
-
`--template` never prompt.
|
|
122
|
+
customize. Customize walks **Docker-first** facets once (including `store.index`
|
|
123
|
+
with a `none` opt-out), then **AI setup**: Recommended (llama.cpp) · Customize ·
|
|
124
|
+
Off. Writes user-global `~/.oke/create-defaults.json` (reuse only when `template`
|
|
125
|
+
matches). Non-TTY / `--yes` / explicit `--template` never prompt.
|
|
105
126
|
|
|
106
127
|
### Additional commands
|
|
107
128
|
|
|
@@ -132,8 +153,7 @@ Long form is canonical in docs; short form is convenience only. Shared letters f
|
|
|
132
153
|
|
|
133
154
|
| Long | Short | Where |
|
|
134
155
|
| -------------------- | ----- | ---------------------------------------------- |
|
|
135
|
-
| `--
|
|
136
|
-
| `--docker` | `-d` | `dev` |
|
|
156
|
+
| `--docker` | `-d` | `dev` (optional Compose **role filter**) |
|
|
137
157
|
| `--no-db-push` | | `dev` |
|
|
138
158
|
| `--prod` | `-p` | `docker` |
|
|
139
159
|
| `--yes` | `-y` | `docker clean` |
|
|
@@ -156,6 +176,9 @@ Long form is canonical in docs; short form is convenience only. Shared letters f
|
|
|
156
176
|
| `--subject` | `-s` | `privacy erase` |
|
|
157
177
|
| `--before` | `-b` | `doctor --diff` |
|
|
158
178
|
| `--base` | `-B` | `doctor --diff` |
|
|
179
|
+
| `--env` | | `db *` (`dev` \| `test` \| `prod`) |
|
|
180
|
+
| `--force` | | `db seed` |
|
|
181
|
+
| `--local` / `-l` | | **removed** on `dev` (use `oke test`) |
|
|
159
182
|
|
|
160
183
|
### Exit codes
|
|
161
184
|
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
---
|
|
2
2
|
title: "Configuration"
|
|
3
|
-
description: "Every option in oke.config.ts —
|
|
3
|
+
description: "Every option in oke.config.ts — three environments (dev · test · prod), drivers, images, i18n, tenancy, privacy, db sync, topology, ports, and console."
|
|
4
4
|
icon: "Settings2"
|
|
5
5
|
---
|
|
6
6
|
|
|
7
|
-
Complete reference for `oke.config.ts`.
|
|
7
|
+
Complete reference for `oke.config.ts`. Options below match `defineConfig`. Driver maps use three keys: **dev** · **test** · **prod**.
|
|
8
8
|
|
|
9
9
|
```typescript title="oke.config.ts"
|
|
10
10
|
import { defineConfig } from "okengine/config";
|
|
@@ -14,38 +14,104 @@ export default defineConfig({
|
|
|
14
14
|
});
|
|
15
15
|
```
|
|
16
16
|
|
|
17
|
-
|
|
17
|
+
<Callout title="Philosophy">
|
|
18
|
+
We test on what we deploy. Local development runs the same stack as production via Docker. Tests
|
|
19
|
+
use PGLite for speed without sacrificing Postgres correctness.
|
|
20
|
+
</Callout>
|
|
18
21
|
|
|
19
|
-
|
|
22
|
+
## Environments
|
|
23
|
+
|
|
24
|
+
| Key | When | Typical backends |
|
|
25
|
+
| ------ | -------------------------- | ----------------------------------------------------- |
|
|
26
|
+
| `dev` | `oke dev` (Docker Compose) | Same protocols as prod (Postgres, Redis, S3, SMTP, …) |
|
|
27
|
+
| `test` | `oke test` / `bun test` | PGLite for SQL; memory / frozen / console elsewhere |
|
|
28
|
+
| `prod` | Production deploy | Shared durable backends |
|
|
29
|
+
|
|
30
|
+
Missing `dev` pins fill from `prod` (`fillDevFromProd`). Only `dev` / `test` / `prod` keys are
|
|
31
|
+
valid — see [Migrating environments](/docs/reference/migrating-environments) if you still have
|
|
32
|
+
`local` / `docker` maps.
|
|
33
|
+
|
|
34
|
+
## Quick start
|
|
35
|
+
|
|
36
|
+
<Steps>
|
|
37
|
+
|
|
38
|
+
<Step>
|
|
39
|
+
### Pin drivers for three envs
|
|
40
|
+
|
|
41
|
+
Pin **only the env keys that differ** from the built-in defaults — omitted keys
|
|
42
|
+
keep `DRIVER_DEFAULTS`. create-oke templates ship that sparse shape:
|
|
43
|
+
|
|
44
|
+
```typescript title="oke.config.ts"
|
|
45
|
+
import { defineConfig } from "okengine/config";
|
|
46
|
+
|
|
47
|
+
export default defineConfig({
|
|
48
|
+
drivers: {
|
|
49
|
+
// Default vault.dev is "env"; pin the built-in store for Docker-first apps.
|
|
50
|
+
vault: { dev: "vault" },
|
|
51
|
+
},
|
|
52
|
+
});
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
</Step>
|
|
56
|
+
|
|
57
|
+
<Step>
|
|
58
|
+
### Or use a string shorthand
|
|
59
|
+
|
|
60
|
+
A bare string (or `{ driver, … }` object) expands to all three envs:
|
|
20
61
|
|
|
21
62
|
```typescript
|
|
22
63
|
drivers: {
|
|
23
|
-
|
|
24
|
-
sql: { local: "sqlite", docker: "postgres", test: "memory", prod: "postgres" },
|
|
25
|
-
kv: { local: "memory", docker: "redis", test: "memory", prod: "redis" },
|
|
26
|
-
files: { local: "fs", docker: "s3", test: "memory", prod: "s3" },
|
|
27
|
-
},
|
|
28
|
-
signal: { local: "memory", docker: "redis", test: "memory", prod: "redis" },
|
|
29
|
-
clock: { local: "memory", docker: "postgres", test: "frozen", prod: "postgres" },
|
|
30
|
-
journal: { local: "memory", docker: "postgres", test: "memory", prod: "postgres" },
|
|
31
|
-
vault: { local: "env", docker: "openbao", test: "memory", prod: "openbao" },
|
|
32
|
-
channel: {
|
|
33
|
-
email: { local: "console", docker: "smtp", test: "console", prod: "smtp" },
|
|
34
|
-
sms: { local: "console", docker: "taqnyat", test: "console", prod: "taqnyat" },
|
|
35
|
-
},
|
|
64
|
+
signal: "redis", // → { dev: "redis", test: "redis", prod: "redis" }
|
|
36
65
|
},
|
|
37
66
|
```
|
|
38
67
|
|
|
39
|
-
|
|
68
|
+
Prefer an explicit `{ dev, test, prod }` map (or a partial override) when test
|
|
69
|
+
should differ from the default for that driver.
|
|
70
|
+
|
|
71
|
+
</Step>
|
|
72
|
+
|
|
73
|
+
<Step>
|
|
74
|
+
### Run and test
|
|
75
|
+
|
|
76
|
+
```bash title="Terminal"
|
|
77
|
+
oke dev # Docker Compose + host Bun · drivers.dev
|
|
78
|
+
oke test # bun test · NODE_ENV=test · OKE_PGLITE_URL=memory://
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
</Step>
|
|
82
|
+
|
|
83
|
+
</Steps>
|
|
84
|
+
|
|
85
|
+
## Default driver maps
|
|
86
|
+
|
|
87
|
+
Built-in defaults (`DRIVER_DEFAULTS`) when a key is omitted:
|
|
88
|
+
|
|
89
|
+
| Map | `dev` | `test` | `prod` |
|
|
90
|
+
| --------------- | ---------- | --------- | ---------- |
|
|
91
|
+
| `store.sql` | `postgres` | `pglite` | `postgres` |
|
|
92
|
+
| `store.kv` | `redis` | `memory` | `redis` |
|
|
93
|
+
| `store.files` | `s3` | `memory` | `s3` |
|
|
94
|
+
| `signal` | `redis` | `memory` | `redis` |
|
|
95
|
+
| `clock` | `postgres` | `frozen` | `postgres` |
|
|
96
|
+
| `journal` | `postgres` | `memory` | `postgres` |
|
|
97
|
+
| `vault` | `env` | `memory` | `vault` |
|
|
98
|
+
| `channel.email` | `smtp` | `console` | `smtp` |
|
|
99
|
+
| `channel.sms` | — (opt-in) | — | — |
|
|
100
|
+
|
|
101
|
+
`store.index`, `channel.whatsapp` / `push`, and `ai` have no single three-env default table — set them explicitly when you need them. create-oke templates pin `vault.dev: "vault"` (built-in) because the default `dev` driver is `env`.
|
|
102
|
+
|
|
103
|
+
## Driver keys and ids
|
|
104
|
+
|
|
105
|
+
| Key | Shape | Driver ids |
|
|
40
106
|
| ------------------ | -------------- | ---------------------------------------------------------------------------- |
|
|
41
|
-
| `store.sql` | env driver map | `
|
|
107
|
+
| `store.sql` | env driver map | `postgres` · `pglite` · `memory` |
|
|
42
108
|
| `store.kv` | env driver map | `memory` · `redis` |
|
|
43
109
|
| `store.files` | env driver map | `memory` · `fs` · `s3` |
|
|
44
|
-
| `store.index` | env driver map | `memory` · `pgvector` · `
|
|
110
|
+
| `store.index` | env driver map | `memory` · `pgvector` · `meilisearch` |
|
|
45
111
|
| `signal` | env driver map | `memory` · `redis` (boot); `postgres` · `nats` fail loud until clients bind |
|
|
46
112
|
| `clock` | env driver map | `memory` · `postgres` · `file` · `frozen` |
|
|
47
113
|
| `journal` | env driver map | `memory` · `file` · `postgres` |
|
|
48
|
-
| `vault` | env driver map | `env` · `
|
|
114
|
+
| `vault` | env driver map | `env` · `vault` · `memory` · `managed` |
|
|
49
115
|
| `channel.email` | env driver map | `console` · `smtp` · `resend` · `sndr` · `taqnyat-mail` |
|
|
50
116
|
| `channel.sms` | env driver map | `console` · `taqnyat` · `msegat` · `unifonic` |
|
|
51
117
|
| `channel.whatsapp` | env driver map | `console` · `wa-cloud` |
|
|
@@ -54,7 +120,14 @@ drivers: {
|
|
|
54
120
|
| `runs` | env driver map | runs-store driver (distinct from top-level `runs`) |
|
|
55
121
|
| `prod` | `string[]` | flat protocol list for the Manifest — nested maps are preferred |
|
|
56
122
|
|
|
57
|
-
|
|
123
|
+
### Safety rules
|
|
124
|
+
|
|
125
|
+
`defineConfig` rejects unsafe pins:
|
|
126
|
+
|
|
127
|
+
- **`sqlite` is removed** — use `postgres` (dev/prod) or `pglite` (test).
|
|
128
|
+
- **`drivers.store.sql.test` must be `pglite`** when set — real Postgres semantics in tests.
|
|
129
|
+
|
|
130
|
+
### Rich driver objects
|
|
58
131
|
|
|
59
132
|
```typescript
|
|
60
133
|
sql: {
|
|
@@ -70,59 +143,41 @@ sql: {
|
|
|
70
143
|
|
|
71
144
|
## images
|
|
72
145
|
|
|
73
|
-
|
|
146
|
+
Nested pins by element role — vendor choice lives here, never in driver ids:
|
|
74
147
|
|
|
75
148
|
```typescript
|
|
76
149
|
images: {
|
|
77
|
-
|
|
150
|
+
store: {
|
|
151
|
+
sql: "postgres:18-alpine",
|
|
152
|
+
kv: "redis:8-alpine",
|
|
153
|
+
files: "rustfs/rustfs:1.0.0-beta.11",
|
|
154
|
+
},
|
|
155
|
+
channel: { email: "axllent/mailpit:v1.22.3" },
|
|
78
156
|
pgdog: "ghcr.io/pgdogdev/pgdog:v0.1.51",
|
|
79
|
-
|
|
80
|
-
//
|
|
81
|
-
// or: "docker.dragonflydb.io/dragonflydb/dragonfly"
|
|
82
|
-
"store.files": "rustfs/rustfs:1.0.0-beta.11",
|
|
83
|
-
"channel.email": "axllent/mailpit:v1.22.3",
|
|
84
|
-
vault: "openbao/openbao:2.6.1",
|
|
85
|
-
ai: "ghcr.io/ggml-org/llama.cpp:server-b10290", // default; or ollama/ollama:0.32.6
|
|
86
|
-
// opt-in TLS edge — omit for the default (app publishes 6530):
|
|
87
|
-
// proxy: "caddy:2-alpine", // simplest automatic HTTPS
|
|
88
|
-
// proxy: "traefik:v3.3", // label auto-discovery for --scale app=N
|
|
157
|
+
// ai: "ghcr.io/ggml-org/llama.cpp:server-b10290",
|
|
158
|
+
// proxy: "caddy:2-alpine",
|
|
89
159
|
},
|
|
90
160
|
```
|
|
91
161
|
|
|
92
|
-
When both `store.sql` and `pgdog` are pinned, `DATABASE_URL` points at PgDog
|
|
93
|
-
(`6432`) — wire-protocol transparent to Bun.SQL / Drizzle. See
|
|
94
|
-
[Store · Multiple environments](/docs/elements/store#multiple-environments).
|
|
95
|
-
|
|
96
|
-
For `store.kv`, pin Redis (default), Valkey, or Dragonfly — driver id stays
|
|
97
|
-
`redis`, same `REDIS_URL`. Image table + licenses: [Store · KV](/docs/elements/store#kv).
|
|
98
|
-
|
|
99
|
-
For `ai`, default is [llama.cpp](/docs/recipes/llama-cpp) (`OKE_AI_URL` →
|
|
100
|
-
`/v1`, curated Docker Hub `ai/` model). Ollama / vLLM / SGLang are explicit
|
|
101
|
-
alternatives — see [Recipes · AI](/docs/recipes#ai-local--self-hosted).
|
|
162
|
+
Omitted image keys mean no container for that role. When both `store.sql` and `pgdog` are pinned, `DATABASE_URL` points at PgDog — see [Store](/docs/elements/store#multiple-environments).
|
|
102
163
|
|
|
103
|
-
For `
|
|
104
|
-
[Reverse proxy](/docs/deployment/reverse-proxy).
|
|
164
|
+
For `store.kv`, pin Redis (default), Valkey, or Dragonfly — driver id stays `redis`. For `ai`, see [Recipes · AI](/docs/recipes#ai-local--self-hosted). For `proxy`, see [Reverse proxy](/docs/deployment/reverse-proxy).
|
|
105
165
|
|
|
106
166
|
## i18n
|
|
107
167
|
|
|
108
|
-
| Option | Type | Default
|
|
109
|
-
| --------- | ---------- |
|
|
110
|
-
| `locales` | `string[]` |
|
|
111
|
-
| `default` | string |
|
|
112
|
-
| `dir` | record | —
|
|
168
|
+
| Option | Type | Default | Meaning |
|
|
169
|
+
| --------- | ---------- | --------------------- | ------------------------------------------- |
|
|
170
|
+
| `locales` | `string[]` | `["en"]` when omitted | Supported locales |
|
|
171
|
+
| `default` | string | `"en"` when omitted | Fallback locale (channel templates, `fx.t`) |
|
|
172
|
+
| `dir` | record | — | Per-locale direction: `"ltr"` \| `"rtl"` |
|
|
113
173
|
|
|
114
174
|
```typescript
|
|
115
|
-
i18n: { locales: ["en"
|
|
175
|
+
i18n: { locales: ["en"], default: "en" },
|
|
176
|
+
// or with Arabic: { locales: ["en", "ar"], default: "en", dir: { ar: "rtl" } }
|
|
116
177
|
```
|
|
117
178
|
|
|
118
|
-
`fx.t` catalogs are ICU strings from `defineLocale` / `defineMessages` — see
|
|
119
|
-
[i18n](/docs/reference/i18n). Built-ins also cover failure `error.message` and
|
|
120
|
-
OKE cause/fix; Channel templates keep separate `locales` + `{{field}}` bodies.
|
|
121
|
-
|
|
122
179
|
## tenancy
|
|
123
180
|
|
|
124
|
-
Multi-tenant isolation policy.
|
|
125
|
-
|
|
126
181
|
| Option | Type | Meaning |
|
|
127
182
|
| ----------- | --------------------------------- | ---------------------------------------- |
|
|
128
183
|
| `isolation` | `"row" \| "schema" \| "database"` | How tenants are separated in the store |
|
|
@@ -130,7 +185,7 @@ Multi-tenant isolation policy.
|
|
|
130
185
|
|
|
131
186
|
## privacy
|
|
132
187
|
|
|
133
|
-
Presence of this block turns
|
|
188
|
+
Presence of this block turns CORE privacy tooling on in the Console — not a `.plug()` call.
|
|
134
189
|
|
|
135
190
|
```typescript
|
|
136
191
|
privacy: {},
|
|
@@ -138,7 +193,7 @@ privacy: {},
|
|
|
138
193
|
|
|
139
194
|
## runs
|
|
140
195
|
|
|
141
|
-
Runs retention and redaction
|
|
196
|
+
Runs retention and redaction — **not** the same key as `drivers.runs`.
|
|
142
197
|
|
|
143
198
|
| Option | Type | Meaning |
|
|
144
199
|
| -------- | ------------------------ | ----------------------------------------------------- |
|
|
@@ -148,13 +203,13 @@ Runs retention and redaction at the config surface — **not** the same key as `
|
|
|
148
203
|
|
|
149
204
|
Domain schema sync for `oke db push | generate | migrate` (Drizzle). Unrelated to `oke schema generate`.
|
|
150
205
|
|
|
151
|
-
| Option | Default
|
|
152
|
-
| ----------- |
|
|
153
|
-
| `autoPush` | `true`
|
|
154
|
-
| `config` | `"drizzle.config.ts"`
|
|
155
|
-
| `declare` | `"src/schema.decl.ts"`
|
|
156
|
-
| `generated` | `"src/schema.
|
|
157
|
-
| `entry` | `src/app.ts`
|
|
206
|
+
| Option | Default | Meaning |
|
|
207
|
+
| ----------- | ---------------------------- | ------------------------------------------------------------------------- |
|
|
208
|
+
| `autoPush` | `true` | Auto-run `db push` on schema change under `oke dev`; forced off in `prod` |
|
|
209
|
+
| `config` | `"drizzle.config.ts"` | Path to the drizzle-kit config |
|
|
210
|
+
| `declare` | `"src/db/schema.decl.ts"` | Abstract schema module (`store.schema.table` exports) |
|
|
211
|
+
| `generated` | `"src/db/schema.drizzle.ts"` | Where `oke db` emits dialect Drizzle |
|
|
212
|
+
| `entry` | `src/app.ts` | App entry for collecting plugin table contributions |
|
|
158
213
|
|
|
159
214
|
## topology
|
|
160
215
|
|
|
@@ -173,15 +228,35 @@ Domain schema sync for `oke db push | generate | migrate` (Drizzle). Unrelated t
|
|
|
173
228
|
|
|
174
229
|
## console
|
|
175
230
|
|
|
176
|
-
Production Console exposure.
|
|
177
|
-
|
|
178
231
|
| Option | Type | Default | Meaning |
|
|
179
232
|
| -------------- | ------------------------------------ | ------- | ------------------------- |
|
|
180
233
|
| `prod.enabled` | boolean | — | Serve the Console in prod |
|
|
181
234
|
| `prod.auth` | `"required" \| "optional" \| "none"` | — | Access requirement |
|
|
182
235
|
|
|
236
|
+
## Troubleshooting
|
|
237
|
+
|
|
238
|
+
<Accordions>
|
|
239
|
+
|
|
240
|
+
<Accordion title='oke.config: … uses removed driver "sqlite"'>
|
|
241
|
+
The `sqlite` driver is gone. Pin `postgres` for `dev`/`prod` and `pglite` for `test`. Edit the
|
|
242
|
+
file by hand — see [Migrating environments](/docs/reference/migrating-environments).
|
|
243
|
+
</Accordion>
|
|
244
|
+
|
|
245
|
+
<Accordion title='drivers.store.sql.test must be "pglite"'>
|
|
246
|
+
Tests use PGLite so SQL semantics match Postgres. Set `test: "pglite"` (or omit the key and keep
|
|
247
|
+
the default). Do not use `memory` or `postgres` for `store.sql.test`.
|
|
248
|
+
</Accordion>
|
|
249
|
+
|
|
250
|
+
<Accordion title='CLI error: "local" / "sqlite" is no longer valid'>
|
|
251
|
+
There is no soft-compat. Rename env keys to `dev` / `test` / `prod` and replace `sqlite` with
|
|
252
|
+
`postgres` / `pglite`. `oke mode` was removed — `oke dev` always starts Docker Compose.
|
|
253
|
+
</Accordion>
|
|
254
|
+
|
|
255
|
+
</Accordions>
|
|
256
|
+
|
|
183
257
|
## Learn more
|
|
184
258
|
|
|
185
|
-
- [
|
|
259
|
+
- [Migrating environments](/docs/reference/migrating-environments) — four-key maps → `dev`/`test`/`prod`
|
|
260
|
+
- [CLI Reference](/docs/reference/cli) — `oke dev` · `oke test` · `oke db`
|
|
186
261
|
- [Environment Variables](/docs/reference/environment-variables) — URL and secret resolution
|
|
187
262
|
- [Store](/docs/elements/store) — what the store drivers back
|