create-oke 0.2.3 → 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.
- package/README.md +32 -20
- package/examples/linkly/.env.example +15 -0
- package/examples/linkly/drizzle.config.ts +11 -0
- package/examples/linkly/oke.config.ts +6 -4
- package/examples/linkly/package.json +7 -4
- package/examples/linkly/src/flows/analytics/index.ts +29 -14
- package/examples/linkly/src/flows/links/index.ts +58 -35
- package/examples/linkly/src/flows/links/signals.ts +4 -3
- package/examples/linkly/src/gates.ts +4 -2
- package/examples/linkly/src/schema.decl.ts +39 -0
- package/examples/linkly/src/schema.generated.ts +30 -0
- package/examples/linkly/src/schema.ts +2 -17
- package/examples/linkly/tests/linkly.test.ts +9 -9
- package/examples/notes/.env.example +12 -0
- package/examples/notes/drizzle.config.ts +11 -0
- package/examples/notes/oke.config.ts +8 -1
- package/examples/notes/package.json +7 -4
- package/examples/notes/src/app.ts +1 -1
- package/examples/notes/src/flows/notes/index.ts +44 -30
- package/examples/notes/src/schema.ts +3 -3
- package/examples/notes/tests/notes.test.ts +1 -1
- package/examples/provisions/.env.example +19 -0
- package/examples/provisions/drizzle.config.ts +11 -0
- package/examples/provisions/oke.config.ts +10 -8
- package/examples/provisions/package.json +7 -4
- package/examples/provisions/src/app.ts +3 -3
- package/examples/provisions/src/channels.ts +4 -3
- package/examples/provisions/src/flows/notifications/index.ts +13 -7
- package/examples/provisions/src/flows/orders/index.ts +58 -31
- package/examples/provisions/src/flows/payments/index.ts +12 -6
- package/examples/provisions/src/schema.ts +7 -7
- package/examples/provisions/src/vault.ts +2 -2
- package/examples/provisions/tests/orders.test.ts +9 -8
- package/examples/skyport/.env.example +34 -0
- package/examples/skyport/drizzle.config.ts +11 -0
- package/examples/skyport/oke.config.ts +25 -22
- package/examples/skyport/package.json +8 -5
- package/examples/skyport/src/ai.ts +4 -4
- package/examples/skyport/src/app.ts +2 -13
- package/examples/skyport/src/flows/bookings/index.ts +45 -22
- package/examples/skyport/src/flows/bookings/shapes.ts +4 -4
- package/examples/skyport/src/flows/bookings/signals.ts +6 -2
- package/examples/skyport/src/flows/support/index.ts +37 -25
- package/examples/skyport/src/schema.ts +11 -8
- package/examples/skyport/src/vault.ts +1 -1
- package/examples/skyport/tests/support.test.ts +6 -6
- package/package.json +9 -9
- package/src/cli.test.ts +132 -64
- package/src/cli.ts +58 -33
- package/src/index.ts +0 -0
- package/src/scaffold.ts +53 -15
- package/src/sync-templates.ts +2 -11
- package/src/templates.ts +1 -2
- package/src/transform.ts +59 -9
- package/templates/full/.env.example +24 -0
- package/templates/full/README.md +22 -6
- package/templates/full/drizzle.config.ts +14 -0
- package/templates/full/oke.config.ts +38 -9
- package/templates/full/package.json +3 -0
- package/templates/hello/.env.example +9 -0
- package/templates/hello/README.md +6 -4
- package/templates/minimal/.env.example +13 -0
- package/templates/minimal/README.md +15 -7
- package/templates/minimal/drizzle.config.ts +14 -0
- package/templates/minimal/oke.config.ts +8 -1
- package/templates/minimal/package.json +3 -0
- package/templates/standard/.env.example +21 -0
- package/templates/standard/README.md +25 -8
- package/templates/standard/drizzle.config.ts +14 -0
- package/templates/standard/oke.config.ts +36 -8
- package/templates/standard/package.json +3 -0
|
@@ -3,19 +3,48 @@ import { defineConfig } from "okengine/config";
|
|
|
3
3
|
export default defineConfig({
|
|
4
4
|
drivers: {
|
|
5
5
|
store: {
|
|
6
|
-
sql: {
|
|
7
|
-
|
|
6
|
+
sql: {
|
|
7
|
+
local: "sqlite",
|
|
8
|
+
docker: "postgres",
|
|
9
|
+
test: "memory",
|
|
10
|
+
prod: "postgres",
|
|
11
|
+
},
|
|
12
|
+
kv: {
|
|
13
|
+
local: "memory",
|
|
14
|
+
docker: "redis",
|
|
15
|
+
test: "memory",
|
|
16
|
+
prod: "redis",
|
|
17
|
+
},
|
|
18
|
+
},
|
|
19
|
+
signal: {
|
|
20
|
+
local: "memory",
|
|
21
|
+
docker: "postgres",
|
|
22
|
+
test: "memory",
|
|
23
|
+
prod: "postgres",
|
|
24
|
+
},
|
|
25
|
+
clock: {
|
|
26
|
+
local: "memory",
|
|
27
|
+
docker: "postgres",
|
|
28
|
+
test: "frozen",
|
|
29
|
+
prod: "postgres",
|
|
30
|
+
},
|
|
31
|
+
vault: {
|
|
32
|
+
local: "dotenv",
|
|
33
|
+
docker: "dotenv",
|
|
34
|
+
test: "memory",
|
|
35
|
+
prod: "sops",
|
|
8
36
|
},
|
|
9
|
-
signal: { dev: "memory", test: "memory", prod: "postgres" },
|
|
10
|
-
clock: { dev: "memory", test: "frozen", prod: "postgres" },
|
|
11
|
-
vault: { dev: "dotenv", test: "memory", prod: "sops" },
|
|
12
37
|
channel: {
|
|
13
|
-
email: {
|
|
14
|
-
|
|
15
|
-
|
|
38
|
+
email: {
|
|
39
|
+
local: "console",
|
|
40
|
+
docker: "smtp",
|
|
41
|
+
test: "console",
|
|
42
|
+
prod: "smtp",
|
|
43
|
+
},
|
|
16
44
|
},
|
|
17
45
|
ai: {
|
|
18
|
-
|
|
46
|
+
local: "mock",
|
|
47
|
+
docker: "mock",
|
|
19
48
|
test: "mock",
|
|
20
49
|
},
|
|
21
50
|
},
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
# Environment template — copy to `.env.local` for local overrides.
|
|
2
|
+
# create-oke copies this file to `.env.local` when you scaffold a new project.
|
|
3
|
+
#
|
|
4
|
+
# Resolution order (first hit wins):
|
|
5
|
+
# process.env → .env.local → docker/.env.docker → vault driver → dev fallback
|
|
6
|
+
#
|
|
7
|
+
# This template has no Vault declarations and no pinned infrastructure drivers.
|
|
8
|
+
# Add variables here when you introduce `vault.secret(...)` in src/vault.ts or
|
|
9
|
+
# pin postgres/redis/s3/smtp drivers in oke.config.ts.
|
|
@@ -7,18 +7,20 @@ Fastest possible “it works” — one unit, two HTTP flows, **no Store**.
|
|
|
7
7
|
```bash
|
|
8
8
|
bun install
|
|
9
9
|
oke dev # app :6530 · Console :6533 · MCP :6535
|
|
10
|
+
# or: oke mode docker && oke dev # compose infra on host Bun
|
|
10
11
|
```
|
|
11
12
|
|
|
12
|
-
| Port
|
|
13
|
-
|
|
13
|
+
| Port | Try |
|
|
14
|
+
| ------- | ---------------------- |
|
|
14
15
|
| `:6530` | `GET /` · `GET /hello` |
|
|
15
|
-
| `:6533` | Console
|
|
16
|
-
| `:6535` | MCP
|
|
16
|
+
| `:6533` | Console |
|
|
17
|
+
| `:6535` | MCP |
|
|
17
18
|
|
|
18
19
|
## What’s in this template
|
|
19
20
|
|
|
20
21
|
```text
|
|
21
22
|
hello/
|
|
23
|
+
├── .env.example # copied to .env.local by create-oke
|
|
22
24
|
├── oke.config.ts
|
|
23
25
|
├── src/
|
|
24
26
|
│ ├── app.ts # oke({ name: "hello" }).adopt({ hello })
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
# Environment template — copy to `.env.local` for local overrides.
|
|
2
|
+
# create-oke copies this file to `.env.local` when you scaffold a new project.
|
|
3
|
+
#
|
|
4
|
+
# Resolution order (first hit wins):
|
|
5
|
+
# process.env → .env.local → docker/.env.docker → vault driver → dev fallback
|
|
6
|
+
#
|
|
7
|
+
# --- Infrastructure (optional) ---
|
|
8
|
+
# This app pins postgres for docker/prod SQL in oke.config.ts.
|
|
9
|
+
# Local dev uses sqlite by default; uncomment only when overriding postgres URLs.
|
|
10
|
+
# Run `oke dev --docker` to write role-accurate keys into `docker/.env.docker`.
|
|
11
|
+
|
|
12
|
+
# DATABASE_URL — primary Postgres connection; from your host (Neon, RDS, …) or `docker/.env.docker` after `oke dev --docker`
|
|
13
|
+
# DATABASE_URL=postgres://user:password@127.0.0.1:5432/oke
|
|
@@ -7,23 +7,29 @@ Smallest shape you’d actually ship — **Store + HTTP flows** over a single ta
|
|
|
7
7
|
```bash
|
|
8
8
|
bun install
|
|
9
9
|
oke dev # app :6530 · Console :6533 · MCP :6535
|
|
10
|
+
# or: oke mode docker && oke dev # postgres via compose
|
|
10
11
|
```
|
|
11
12
|
|
|
12
|
-
|
|
13
|
-
|
|
13
|
+
Local `oke dev` auto-runs `oke db push` when `schema.ts` changes (opt out:
|
|
14
|
+
`--no-db-push`). Docker/prod never auto-apply DDL — use `oke db migrate`.
|
|
15
|
+
|
|
16
|
+
| Port | Try |
|
|
17
|
+
| ------- | ------------------------------------------- |
|
|
14
18
|
| `:6530` | `GET /` · `GET /entries` · `POST /entries` |
|
|
15
|
-
| `:6533` | Console
|
|
16
|
-
| `:6535` | MCP
|
|
19
|
+
| `:6533` | Console |
|
|
20
|
+
| `:6535` | MCP |
|
|
17
21
|
|
|
18
22
|
## What’s in this template
|
|
19
23
|
|
|
20
24
|
```text
|
|
21
25
|
minimal/
|
|
22
|
-
├──
|
|
26
|
+
├── .env.example # copied to .env.local by create-oke
|
|
27
|
+
├── drizzle.config.ts # oke db push|generate|migrate
|
|
28
|
+
├── oke.config.ts # local: sqlite · docker/prod: postgres
|
|
23
29
|
├── src/
|
|
24
30
|
│ ├── app.ts # adopt({ main }), stores: [db]
|
|
25
31
|
│ ├── core.ts # store.sql("…")
|
|
26
|
-
│ ├── schema.ts # entries table (Drizzle)
|
|
32
|
+
│ ├── schema.ts # entries table (Drizzle escape hatch)
|
|
27
33
|
│ └── flows/main/index.ts # GET / · GET|POST /entries
|
|
28
34
|
└── tests/minimal.test.ts
|
|
29
35
|
```
|
|
@@ -33,7 +39,9 @@ minimal/
|
|
|
33
39
|
- **Flows:** `root`, `list` (`GET /entries`), `create` (`POST /entries` with `{ body }`)
|
|
34
40
|
- **Schema:** `entries` — `id`, `body`, `createdAt`
|
|
35
41
|
|
|
36
|
-
Swap `entries` for your domain table and grow flows beside it.
|
|
42
|
+
Swap `entries` for your domain table and grow flows beside it. Prefer
|
|
43
|
+
`store.schema.table` + `field.*` in `schema.decl.ts` when you want ORM-agnostic
|
|
44
|
+
declare (Linkly); hand-written `schema.ts` remains the escape hatch. Need gates,
|
|
37
45
|
channels, or locales? Use `standard`.
|
|
38
46
|
|
|
39
47
|
## Agent contract
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { defineConfig } from "drizzle-kit";
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Domain schema sync for `oke db push|generate|migrate`.
|
|
5
|
+
* Versioned prod migrations land in `./drizzle` — never mix with `.oke/`.
|
|
6
|
+
*/
|
|
7
|
+
export default defineConfig({
|
|
8
|
+
dialect: "sqlite",
|
|
9
|
+
schema: "./src/schema.ts",
|
|
10
|
+
out: "./drizzle",
|
|
11
|
+
dbCredentials: {
|
|
12
|
+
url: process.env.OKE_SQLITE_URL ?? "file:.oke/app.sqlite",
|
|
13
|
+
},
|
|
14
|
+
});
|
|
@@ -2,6 +2,13 @@ import { defineConfig } from "okengine/config";
|
|
|
2
2
|
|
|
3
3
|
export default defineConfig({
|
|
4
4
|
drivers: {
|
|
5
|
-
store: {
|
|
5
|
+
store: {
|
|
6
|
+
sql: {
|
|
7
|
+
local: "sqlite",
|
|
8
|
+
docker: "postgres",
|
|
9
|
+
test: "memory",
|
|
10
|
+
prod: "postgres",
|
|
11
|
+
},
|
|
12
|
+
},
|
|
6
13
|
},
|
|
7
14
|
});
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
# Environment template — copy to `.env.local` for local overrides.
|
|
2
|
+
# create-oke copies this file to `.env.local` when you scaffold a new project.
|
|
3
|
+
#
|
|
4
|
+
# Resolution order (first hit wins):
|
|
5
|
+
# process.env → .env.local → docker/.env.docker → vault driver → dev fallback
|
|
6
|
+
#
|
|
7
|
+
# --- Vault (app secrets) ---
|
|
8
|
+
# Declare secrets in src/vault.ts with `vault.secret(...)`, then uncomment lines here.
|
|
9
|
+
|
|
10
|
+
# --- Infrastructure (optional) ---
|
|
11
|
+
# Commented — this app pins postgres, redis, and smtp (Mailpit) in oke.config.ts.
|
|
12
|
+
# Run `oke dev --docker` to write role-accurate keys into `docker/.env.docker`.
|
|
13
|
+
|
|
14
|
+
# DATABASE_URL — primary Postgres connection; from your host or `docker/.env.docker` after `oke dev --docker`
|
|
15
|
+
# DATABASE_URL=postgres://user:password@127.0.0.1:5432/oke
|
|
16
|
+
|
|
17
|
+
# REDIS_URL — Redis/Valkey connection for store.kv; from your host or `docker/.env.docker` after `oke dev --docker`
|
|
18
|
+
# REDIS_URL=redis://:password@127.0.0.1:6379
|
|
19
|
+
|
|
20
|
+
# SMTP_URL — outbound email (Mailpit in docker dev); from your provider or `docker/.env.docker` after `oke dev --docker`
|
|
21
|
+
# SMTP_URL=smtp://127.0.0.1:1025
|
|
@@ -8,19 +8,25 @@ business logic. Default `create-oke` template.
|
|
|
8
8
|
```bash
|
|
9
9
|
bun install
|
|
10
10
|
oke dev # app :6530 · Console :6533 · MCP :6535
|
|
11
|
+
# or: oke mode docker && oke dev # postgres · redis · Mailpit · RustFS · sops
|
|
11
12
|
```
|
|
12
13
|
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
|
17
|
-
|
|
|
14
|
+
Local `oke dev` auto-runs `oke db push` when `schema.ts` changes (opt out:
|
|
15
|
+
`--no-db-push`). Docker/prod never auto-apply DDL — use `oke db migrate`.
|
|
16
|
+
|
|
17
|
+
| Port | Try |
|
|
18
|
+
| ------- | ------------------------- |
|
|
19
|
+
| `:6530` | `GET /` · `GET /health` |
|
|
20
|
+
| `:6533` | Console |
|
|
21
|
+
| `:6535` | MCP |
|
|
18
22
|
|
|
19
23
|
## What’s in this template
|
|
20
24
|
|
|
21
25
|
```text
|
|
22
26
|
standard/
|
|
23
|
-
├──
|
|
27
|
+
├── .env.example # copied to .env.local by create-oke
|
|
28
|
+
├── drizzle.config.ts # oke db push|generate|migrate
|
|
29
|
+
├── oke.config.ts # local: sqlite · docker/prod: postgres
|
|
24
30
|
├── src/
|
|
25
31
|
│ ├── app.ts # adopt({ main }); wires stores + side modules
|
|
26
32
|
│ ├── core.ts / schema.ts # Store (replace the placeholder table)
|
|
@@ -39,8 +45,19 @@ standard/
|
|
|
39
45
|
- **Unit:** `main`
|
|
40
46
|
- **Flows to replace:** `root`, `health` — delete or rename once your domain exists
|
|
41
47
|
|
|
42
|
-
Fill `schema.ts
|
|
43
|
-
layout for new products; use `hello` / `minimal`
|
|
48
|
+
Fill `schema.ts` (or `schema.decl.ts` + `oke db`), then add real flows under
|
|
49
|
+
`src/flows/<unit>/`. Prefer this layout for new products; use `hello` / `minimal`
|
|
50
|
+
only when you want less surface.
|
|
51
|
+
|
|
52
|
+
## Docker mode (`oke dev --docker`)
|
|
53
|
+
|
|
54
|
+
Closest to production protocols: Postgres, Redis, SMTP (Mailpit), S3 (RustFS),
|
|
55
|
+
vault `sops`/age. Compose credentials land in `docker/.env.docker`.
|
|
56
|
+
|
|
57
|
+
| Surface | URL |
|
|
58
|
+
| -------------- | ------------------------------------------------ |
|
|
59
|
+
| Mailpit UI | [http://127.0.0.1:8025](http://127.0.0.1:8025) |
|
|
60
|
+
| RustFS console | [http://127.0.0.1:9001](http://127.0.0.1:9001) |
|
|
44
61
|
|
|
45
62
|
## Agent contract
|
|
46
63
|
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { defineConfig } from "drizzle-kit";
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Domain schema sync for `oke db push|generate|migrate`.
|
|
5
|
+
* Versioned prod migrations land in `./drizzle` — never mix with `.oke/`.
|
|
6
|
+
*/
|
|
7
|
+
export default defineConfig({
|
|
8
|
+
dialect: "sqlite",
|
|
9
|
+
schema: "./src/schema.ts",
|
|
10
|
+
out: "./drizzle",
|
|
11
|
+
dbCredentials: {
|
|
12
|
+
url: process.env.OKE_SQLITE_URL ?? "file:.oke/app.sqlite",
|
|
13
|
+
},
|
|
14
|
+
});
|
|
@@ -3,16 +3,44 @@ import { defineConfig } from "okengine/config";
|
|
|
3
3
|
export default defineConfig({
|
|
4
4
|
drivers: {
|
|
5
5
|
store: {
|
|
6
|
-
sql: {
|
|
7
|
-
|
|
6
|
+
sql: {
|
|
7
|
+
local: "sqlite",
|
|
8
|
+
docker: "postgres",
|
|
9
|
+
test: "memory",
|
|
10
|
+
prod: "postgres",
|
|
11
|
+
},
|
|
12
|
+
kv: {
|
|
13
|
+
local: "memory",
|
|
14
|
+
docker: "redis",
|
|
15
|
+
test: "memory",
|
|
16
|
+
prod: "redis",
|
|
17
|
+
},
|
|
18
|
+
},
|
|
19
|
+
signal: {
|
|
20
|
+
local: "memory",
|
|
21
|
+
docker: "postgres",
|
|
22
|
+
test: "memory",
|
|
23
|
+
prod: "postgres",
|
|
24
|
+
},
|
|
25
|
+
clock: {
|
|
26
|
+
local: "memory",
|
|
27
|
+
docker: "postgres",
|
|
28
|
+
test: "frozen",
|
|
29
|
+
prod: "postgres",
|
|
30
|
+
},
|
|
31
|
+
vault: {
|
|
32
|
+
local: "dotenv",
|
|
33
|
+
docker: "dotenv",
|
|
34
|
+
test: "memory",
|
|
35
|
+
prod: "sops",
|
|
8
36
|
},
|
|
9
|
-
signal: { dev: "memory", test: "memory", prod: "postgres" },
|
|
10
|
-
clock: { dev: "memory", test: "frozen", prod: "postgres" },
|
|
11
|
-
vault: { dev: "dotenv", test: "memory", prod: "sops" },
|
|
12
37
|
channel: {
|
|
13
|
-
email: {
|
|
14
|
-
|
|
15
|
-
|
|
38
|
+
email: {
|
|
39
|
+
local: "console",
|
|
40
|
+
docker: "smtp",
|
|
41
|
+
test: "console",
|
|
42
|
+
prod: "smtp",
|
|
43
|
+
},
|
|
16
44
|
},
|
|
17
45
|
},
|
|
18
46
|
images: {
|