authorgravatar for julius0216@outlook.comJulius Marminge <julius0216@outlook.com> 2026-02-26 21:36:44-08:00
committergravatar for julius0216@outlook.comJulius Marminge <julius0216@outlook.com> 2026-02-26 21:36:44-08:00
log041acf158a277c9f8eca5e844770ffa74d9ed752
tree2a349d8d8f452f91374fd1325accb5cc4aa927d3
parentf9752d7c08ee1e22161bfdd4ec8441c4272c5b99

fix nullability


2 files changed, 23 insertions(+), 19 deletions(-)

apps/server/src/persistence/NodeSqliteClient.test.ts+19-15
......@@ -4,23 +4,27 @@ import * as SqlClient from "effect/unstable/sql/SqlClient";
44
55import * as SqliteClient from "./NodeSqliteClient.ts";
66
7it.effect("runs prepared queries and returns positional values", () =>
8 Effect.gen(function* () {
9 const sql = yield* SqlClient.SqlClient;
7const layer = it.layer(SqliteClient.layerMemory());
108
11 yield* sql`CREATE TABLE entries(id INTEGER PRIMARY KEY, name TEXT NOT NULL)`;
12 yield* sql`INSERT INTO entries(name) VALUES (${"alpha"}), (${"beta"})`;
9layer("NodeSqliteClient", (it) => {
10 it.effect("runs prepared queries and returns positional values", () =>
11 Effect.gen(function* () {
12 const sql = yield* SqlClient.SqlClient;
1313
14 const rows = yield* sql<{ readonly id: number; readonly name: string }>`
14 yield* sql`CREATE TABLE entries(id INTEGER PRIMARY KEY, name TEXT NOT NULL)`;
15 yield* sql`INSERT INTO entries(name) VALUES (${"alpha"}), (${"beta"})`;
16
17 const rows = yield* sql<{ readonly id: number; readonly name: string }>`
1518 SELECT id, name FROM entries ORDER BY id
1619 `;
17 assert.equal(rows.length, 2);
18 assert.equal(rows[0]?.name, "alpha");
19 assert.equal(rows[1]?.name, "beta");
20 assert.equal(rows.length, 2);
21 assert.equal(rows[0]?.name, "alpha");
22 assert.equal(rows[1]?.name, "beta");
2023
21 const values = yield* sql`SELECT id, name FROM entries ORDER BY id`.values;
22 assert.equal(values.length, 2);
23 assert.equal(values[0]?.[1], "alpha");
24 assert.equal(values[1]?.[1], "beta");
25 }).pipe(Effect.provide(SqliteClient.layerMemory())),
26);
24 const values = yield* sql`SELECT id, name FROM entries ORDER BY id`.values;
25 assert.equal(values.length, 2);
26 assert.equal(values[0]?.[1], "alpha");
27 assert.equal(values[1]?.[1], "beta");
28 }),
29 );
30});
packages/contracts/src/orchestration.ts+4-4
......@@ -142,8 +142,8 @@ export const OrchestrationSession = Schema.Struct({
142142 providerName: Schema.NullOr(TrimmedNonEmptyString),
143143 providerSessionId: Schema.NullOr(ProviderSessionId),
144144 providerThreadId: Schema.NullOr(ProviderThreadId),
145 approvalPolicy: ProviderApprovalPolicy,
146 sandboxMode: ProviderSandboxMode,
145 approvalPolicy: ProviderApprovalPolicy.pipe(Schema.withDecodingDefault(() => "on-failure")),
146 sandboxMode: ProviderSandboxMode.pipe(Schema.withDecodingDefault(() => "workspace-write")),
147147 activeTurnId: Schema.NullOr(TurnId),
148148 lastError: Schema.NullOr(TrimmedNonEmptyString),
149149 updatedAt: IsoDateTime,
......@@ -500,8 +500,8 @@ export const ThreadTurnStartRequestedPayload = Schema.Struct({
500500 model: Schema.optional(TrimmedNonEmptyString),
501501 effort: Schema.optional(TrimmedNonEmptyString),
502502 assistantDeliveryMode: Schema.optional(AssistantDeliveryMode),
503 approvalPolicy: ProviderApprovalPolicy,
504 sandboxMode: ProviderSandboxMode,
503 approvalPolicy: ProviderApprovalPolicy.pipe(Schema.withDecodingDefault(() => "on-failure")),
504 sandboxMode: ProviderSandboxMode.pipe(Schema.withDecodingDefault(() => "workspace-write")),
505505 createdAt: IsoDateTime,
506506});
507507