@polpo-ai/drizzle 0.14.0 → 0.15.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.
@@ -323,6 +323,196 @@ export declare const runsSqlite: import("drizzle-orm/sqlite-core").SQLiteTableWi
323
323
  }, {}, {
324
324
  length: number | undefined;
325
325
  }>;
326
+ loopName: import("drizzle-orm/sqlite-core").SQLiteColumn<{
327
+ name: "loop_name";
328
+ tableName: "runs";
329
+ dataType: "string";
330
+ columnType: "SQLiteText";
331
+ data: string;
332
+ driverParam: string;
333
+ notNull: false;
334
+ hasDefault: false;
335
+ isPrimaryKey: false;
336
+ isAutoincrement: false;
337
+ hasRuntimeDefault: false;
338
+ enumValues: [string, ...string[]];
339
+ baseColumn: never;
340
+ identity: undefined;
341
+ generated: undefined;
342
+ }, {}, {
343
+ length: number | undefined;
344
+ }>;
345
+ context: import("drizzle-orm/sqlite-core").SQLiteColumn<{
346
+ name: "context";
347
+ tableName: "runs";
348
+ dataType: "string";
349
+ columnType: "SQLiteText";
350
+ data: string;
351
+ driverParam: string;
352
+ notNull: false;
353
+ hasDefault: false;
354
+ isPrimaryKey: false;
355
+ isAutoincrement: false;
356
+ hasRuntimeDefault: false;
357
+ enumValues: [string, ...string[]];
358
+ baseColumn: never;
359
+ identity: undefined;
360
+ generated: undefined;
361
+ }, {}, {
362
+ length: number | undefined;
363
+ }>;
364
+ trace: import("drizzle-orm/sqlite-core").SQLiteColumn<{
365
+ name: "trace";
366
+ tableName: "runs";
367
+ dataType: "string";
368
+ columnType: "SQLiteText";
369
+ data: string;
370
+ driverParam: string;
371
+ notNull: false;
372
+ hasDefault: false;
373
+ isPrimaryKey: false;
374
+ isAutoincrement: false;
375
+ hasRuntimeDefault: false;
376
+ enumValues: [string, ...string[]];
377
+ baseColumn: never;
378
+ identity: undefined;
379
+ generated: undefined;
380
+ }, {}, {
381
+ length: number | undefined;
382
+ }>;
383
+ error: import("drizzle-orm/sqlite-core").SQLiteColumn<{
384
+ name: "error";
385
+ tableName: "runs";
386
+ dataType: "string";
387
+ columnType: "SQLiteText";
388
+ data: string;
389
+ driverParam: string;
390
+ notNull: false;
391
+ hasDefault: false;
392
+ isPrimaryKey: false;
393
+ isAutoincrement: false;
394
+ hasRuntimeDefault: false;
395
+ enumValues: [string, ...string[]];
396
+ baseColumn: never;
397
+ identity: undefined;
398
+ generated: undefined;
399
+ }, {}, {
400
+ length: number | undefined;
401
+ }>;
402
+ approvalRequestId: import("drizzle-orm/sqlite-core").SQLiteColumn<{
403
+ name: "approval_request_id";
404
+ tableName: "runs";
405
+ dataType: "string";
406
+ columnType: "SQLiteText";
407
+ data: string;
408
+ driverParam: string;
409
+ notNull: false;
410
+ hasDefault: false;
411
+ isPrimaryKey: false;
412
+ isAutoincrement: false;
413
+ hasRuntimeDefault: false;
414
+ enumValues: [string, ...string[]];
415
+ baseColumn: never;
416
+ identity: undefined;
417
+ generated: undefined;
418
+ }, {}, {
419
+ length: number | undefined;
420
+ }>;
421
+ approval: import("drizzle-orm/sqlite-core").SQLiteColumn<{
422
+ name: "approval";
423
+ tableName: "runs";
424
+ dataType: "string";
425
+ columnType: "SQLiteText";
426
+ data: string;
427
+ driverParam: string;
428
+ notNull: false;
429
+ hasDefault: false;
430
+ isPrimaryKey: false;
431
+ isAutoincrement: false;
432
+ hasRuntimeDefault: false;
433
+ enumValues: [string, ...string[]];
434
+ baseColumn: never;
435
+ identity: undefined;
436
+ generated: undefined;
437
+ }, {}, {
438
+ length: number | undefined;
439
+ }>;
440
+ metadata: import("drizzle-orm/sqlite-core").SQLiteColumn<{
441
+ name: "metadata";
442
+ tableName: "runs";
443
+ dataType: "string";
444
+ columnType: "SQLiteText";
445
+ data: string;
446
+ driverParam: string;
447
+ notNull: false;
448
+ hasDefault: false;
449
+ isPrimaryKey: false;
450
+ isAutoincrement: false;
451
+ hasRuntimeDefault: false;
452
+ enumValues: [string, ...string[]];
453
+ baseColumn: never;
454
+ identity: undefined;
455
+ generated: undefined;
456
+ }, {}, {
457
+ length: number | undefined;
458
+ }>;
459
+ completedAt: import("drizzle-orm/sqlite-core").SQLiteColumn<{
460
+ name: "completed_at";
461
+ tableName: "runs";
462
+ dataType: "string";
463
+ columnType: "SQLiteText";
464
+ data: string;
465
+ driverParam: string;
466
+ notNull: false;
467
+ hasDefault: false;
468
+ isPrimaryKey: false;
469
+ isAutoincrement: false;
470
+ hasRuntimeDefault: false;
471
+ enumValues: [string, ...string[]];
472
+ baseColumn: never;
473
+ identity: undefined;
474
+ generated: undefined;
475
+ }, {}, {
476
+ length: number | undefined;
477
+ }>;
478
+ engine: import("drizzle-orm/sqlite-core").SQLiteColumn<{
479
+ name: "engine";
480
+ tableName: "runs";
481
+ dataType: "string";
482
+ columnType: "SQLiteText";
483
+ data: string;
484
+ driverParam: string;
485
+ notNull: false;
486
+ hasDefault: true;
487
+ isPrimaryKey: false;
488
+ isAutoincrement: false;
489
+ hasRuntimeDefault: false;
490
+ enumValues: [string, ...string[]];
491
+ baseColumn: never;
492
+ identity: undefined;
493
+ generated: undefined;
494
+ }, {}, {
495
+ length: number | undefined;
496
+ }>;
497
+ delivery: import("drizzle-orm/sqlite-core").SQLiteColumn<{
498
+ name: "delivery";
499
+ tableName: "runs";
500
+ dataType: "string";
501
+ columnType: "SQLiteText";
502
+ data: string;
503
+ driverParam: string;
504
+ notNull: false;
505
+ hasDefault: false;
506
+ isPrimaryKey: false;
507
+ isAutoincrement: false;
508
+ hasRuntimeDefault: false;
509
+ enumValues: [string, ...string[]];
510
+ baseColumn: never;
511
+ identity: undefined;
512
+ generated: undefined;
513
+ }, {}, {
514
+ length: number | undefined;
515
+ }>;
326
516
  };
327
517
  dialect: "sqlite";
328
518
  }>;
@@ -621,6 +811,176 @@ export declare const runsPg: import("drizzle-orm/pg-core").PgTableWithColumns<{
621
811
  identity: undefined;
622
812
  generated: undefined;
623
813
  }, {}, {}>;
814
+ loopName: import("drizzle-orm/pg-core").PgColumn<{
815
+ name: "loop_name";
816
+ tableName: "runs";
817
+ dataType: "string";
818
+ columnType: "PgText";
819
+ data: string;
820
+ driverParam: string;
821
+ notNull: false;
822
+ hasDefault: false;
823
+ isPrimaryKey: false;
824
+ isAutoincrement: false;
825
+ hasRuntimeDefault: false;
826
+ enumValues: [string, ...string[]];
827
+ baseColumn: never;
828
+ identity: undefined;
829
+ generated: undefined;
830
+ }, {}, {}>;
831
+ context: import("drizzle-orm/pg-core").PgColumn<{
832
+ name: "context";
833
+ tableName: "runs";
834
+ dataType: "json";
835
+ columnType: "PgJsonb";
836
+ data: unknown;
837
+ driverParam: unknown;
838
+ notNull: false;
839
+ hasDefault: false;
840
+ isPrimaryKey: false;
841
+ isAutoincrement: false;
842
+ hasRuntimeDefault: false;
843
+ enumValues: undefined;
844
+ baseColumn: never;
845
+ identity: undefined;
846
+ generated: undefined;
847
+ }, {}, {}>;
848
+ trace: import("drizzle-orm/pg-core").PgColumn<{
849
+ name: "trace";
850
+ tableName: "runs";
851
+ dataType: "json";
852
+ columnType: "PgJsonb";
853
+ data: unknown;
854
+ driverParam: unknown;
855
+ notNull: false;
856
+ hasDefault: false;
857
+ isPrimaryKey: false;
858
+ isAutoincrement: false;
859
+ hasRuntimeDefault: false;
860
+ enumValues: undefined;
861
+ baseColumn: never;
862
+ identity: undefined;
863
+ generated: undefined;
864
+ }, {}, {}>;
865
+ error: import("drizzle-orm/pg-core").PgColumn<{
866
+ name: "error";
867
+ tableName: "runs";
868
+ dataType: "string";
869
+ columnType: "PgText";
870
+ data: string;
871
+ driverParam: string;
872
+ notNull: false;
873
+ hasDefault: false;
874
+ isPrimaryKey: false;
875
+ isAutoincrement: false;
876
+ hasRuntimeDefault: false;
877
+ enumValues: [string, ...string[]];
878
+ baseColumn: never;
879
+ identity: undefined;
880
+ generated: undefined;
881
+ }, {}, {}>;
882
+ approvalRequestId: import("drizzle-orm/pg-core").PgColumn<{
883
+ name: "approval_request_id";
884
+ tableName: "runs";
885
+ dataType: "string";
886
+ columnType: "PgText";
887
+ data: string;
888
+ driverParam: string;
889
+ notNull: false;
890
+ hasDefault: false;
891
+ isPrimaryKey: false;
892
+ isAutoincrement: false;
893
+ hasRuntimeDefault: false;
894
+ enumValues: [string, ...string[]];
895
+ baseColumn: never;
896
+ identity: undefined;
897
+ generated: undefined;
898
+ }, {}, {}>;
899
+ approval: import("drizzle-orm/pg-core").PgColumn<{
900
+ name: "approval";
901
+ tableName: "runs";
902
+ dataType: "json";
903
+ columnType: "PgJsonb";
904
+ data: unknown;
905
+ driverParam: unknown;
906
+ notNull: false;
907
+ hasDefault: false;
908
+ isPrimaryKey: false;
909
+ isAutoincrement: false;
910
+ hasRuntimeDefault: false;
911
+ enumValues: undefined;
912
+ baseColumn: never;
913
+ identity: undefined;
914
+ generated: undefined;
915
+ }, {}, {}>;
916
+ metadata: import("drizzle-orm/pg-core").PgColumn<{
917
+ name: "metadata";
918
+ tableName: "runs";
919
+ dataType: "json";
920
+ columnType: "PgJsonb";
921
+ data: unknown;
922
+ driverParam: unknown;
923
+ notNull: false;
924
+ hasDefault: false;
925
+ isPrimaryKey: false;
926
+ isAutoincrement: false;
927
+ hasRuntimeDefault: false;
928
+ enumValues: undefined;
929
+ baseColumn: never;
930
+ identity: undefined;
931
+ generated: undefined;
932
+ }, {}, {}>;
933
+ completedAt: import("drizzle-orm/pg-core").PgColumn<{
934
+ name: "completed_at";
935
+ tableName: "runs";
936
+ dataType: "string";
937
+ columnType: "PgText";
938
+ data: string;
939
+ driverParam: string;
940
+ notNull: false;
941
+ hasDefault: false;
942
+ isPrimaryKey: false;
943
+ isAutoincrement: false;
944
+ hasRuntimeDefault: false;
945
+ enumValues: [string, ...string[]];
946
+ baseColumn: never;
947
+ identity: undefined;
948
+ generated: undefined;
949
+ }, {}, {}>;
950
+ engine: import("drizzle-orm/pg-core").PgColumn<{
951
+ name: "engine";
952
+ tableName: "runs";
953
+ dataType: "string";
954
+ columnType: "PgText";
955
+ data: string;
956
+ driverParam: string;
957
+ notNull: false;
958
+ hasDefault: true;
959
+ isPrimaryKey: false;
960
+ isAutoincrement: false;
961
+ hasRuntimeDefault: false;
962
+ enumValues: [string, ...string[]];
963
+ baseColumn: never;
964
+ identity: undefined;
965
+ generated: undefined;
966
+ }, {}, {}>;
967
+ delivery: import("drizzle-orm/pg-core").PgColumn<{
968
+ name: "delivery";
969
+ tableName: "runs";
970
+ dataType: "string";
971
+ columnType: "PgText";
972
+ data: string;
973
+ driverParam: string;
974
+ notNull: false;
975
+ hasDefault: false;
976
+ isPrimaryKey: false;
977
+ isAutoincrement: false;
978
+ hasRuntimeDefault: false;
979
+ enumValues: [string, ...string[]];
980
+ baseColumn: never;
981
+ identity: undefined;
982
+ generated: undefined;
983
+ }, {}, {}>;
624
984
  };
625
985
  dialect: "pg";
626
986
  }>;
@@ -1 +1 @@
1
- {"version":3,"file":"runs.d.ts","sourceRoot":"","sources":["../../src/schema/runs.ts"],"names":[],"mappings":"AAKA,eAAO,MAAM,UAAU;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAwBrB,CAAC;AAIH,eAAO,MAAM,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAwBjB,CAAC"}
1
+ {"version":3,"file":"runs.d.ts","sourceRoot":"","sources":["../../src/schema/runs.ts"],"names":[],"mappings":"AAKA,eAAO,MAAM,UAAU;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAyCrB,CAAC;AAIH,eAAO,MAAM,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAuCjB,CAAC"}
@@ -21,10 +21,27 @@ export const runsSqlite = sqliteTable("runs", {
21
21
  /** Durable-turns checkpoint (LoopResumeState JSON) — written once per completed turn. */
22
22
  resumeState: text("resume_state"),
23
23
  executionMode: text("execution_mode"),
24
+ // ── F2: unified Run — columns folded from loop_runs (all nullable/additive) ──
25
+ loopName: text("loop_name"),
26
+ context: text("context"),
27
+ trace: text("trace"),
28
+ error: text("error"),
29
+ approvalRequestId: text("approval_request_id"),
30
+ approval: text("approval"),
31
+ metadata: text("metadata"),
32
+ completedAt: text("completed_at"),
33
+ /** Execution-engine discriminator: "agent" (chat/task turn-loop) | "graph"
34
+ * (project-loop). Defaults to "agent" so existing task rows backfill; loop
35
+ * rows are written "graph" so task queries (getActiveRuns/getTerminalRuns)
36
+ * can exclude them once the tables merge. */
37
+ engine: text("engine").default("agent"),
38
+ /** Consumption axis (F3, forward-compat only): "stream" | "background". */
39
+ delivery: text("delivery"),
24
40
  }, (table) => [
25
41
  index("idx_runs_status").on(table.status),
26
42
  index("idx_runs_task_id").on(table.taskId),
27
43
  index("idx_runs_user").on(table.user),
44
+ index("idx_runs_engine").on(table.engine),
28
45
  ]);
29
46
  // ── PostgreSQL schema ──────────────────────────────────────────────────
30
47
  export const runsPg = pgTable("runs", {
@@ -47,9 +64,24 @@ export const runsPg = pgTable("runs", {
47
64
  /** Durable-turns checkpoint (LoopResumeState JSON) — written once per completed turn. */
48
65
  resumeState: jsonb("resume_state"),
49
66
  executionMode: pgText("execution_mode"),
67
+ // ── F2: unified Run — columns folded from loop_runs (all nullable/additive) ──
68
+ loopName: pgText("loop_name"),
69
+ context: jsonb("context"),
70
+ trace: jsonb("trace"),
71
+ error: pgText("error"),
72
+ approvalRequestId: pgText("approval_request_id"),
73
+ approval: jsonb("approval"),
74
+ metadata: jsonb("metadata"),
75
+ completedAt: pgText("completed_at"),
76
+ /** Execution-engine discriminator: "agent" (chat/task) | "graph" (project-loop).
77
+ * Defaults "agent"; loop rows are "graph" so task queries can exclude them. */
78
+ engine: pgText("engine").default("agent"),
79
+ /** Consumption axis (F3, forward-compat only): "stream" | "background". */
80
+ delivery: pgText("delivery"),
50
81
  }, (table) => [
51
82
  pgIndex("idx_pg_runs_status").on(table.status),
52
83
  pgIndex("idx_pg_runs_task_id").on(table.taskId),
53
84
  pgIndex("idx_pg_runs_user").on(table.user),
85
+ pgIndex("idx_pg_runs_engine").on(table.engine),
54
86
  ]);
55
87
  //# sourceMappingURL=runs.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"runs.js","sourceRoot":"","sources":["../../src/schema/runs.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"runs.js","sourceRoot":"","sources":["../../src/schema/runs.ts"],"names":[],"mappings":"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"}
@@ -6,7 +6,17 @@ export declare class DrizzleLoopRunStore implements LoopRunStore {
6
6
  private db;
7
7
  private loopRuns;
8
8
  private dialect;
9
- constructor(db: any, loopRuns: AnyTable, dialect: Dialect);
9
+ /** When true, `loopRuns` is actually the unified `runs` table (F2 fold):
10
+ * records are written with engine="graph" + task-column sentinels, `resume`
11
+ * maps to the `resume_state` column, and reads/lists scope to engine="graph"
12
+ * so task rows in the same table are never returned. */
13
+ private targetsRuns;
14
+ constructor(db: any, loopRuns: AnyTable, dialect: Dialect,
15
+ /** When true, `loopRuns` is actually the unified `runs` table (F2 fold):
16
+ * records are written with engine="graph" + task-column sentinels, `resume`
17
+ * maps to the `resume_state` column, and reads/lists scope to engine="graph"
18
+ * so task rows in the same table are never returned. */
19
+ targetsRuns?: boolean);
10
20
  private rowToRecord;
11
21
  createRun(input: CreateLoopRunInput): Promise<LoopRunRecord>;
12
22
  getRun(id: string): Promise<LoopRunRecord | undefined>;
@@ -16,5 +26,26 @@ export declare class DrizzleLoopRunStore implements LoopRunStore {
16
26
  close(): Promise<void>;
17
27
  private recordToValues;
18
28
  }
29
+ /**
30
+ * Dual-write LoopRunStore for the F2 transition. Writes go to BOTH the legacy
31
+ * `loop_runs` store and the shadow `runs`-backed store; the shadow write is
32
+ * best-effort (a shadow failure never fails the request). Reads come from
33
+ * `readFrom` — "legacy" during dual-write, flipped to "shadow" once loop_runs
34
+ * is backfilled into `runs`. When the shadow is the sole source, this wrapper
35
+ * is dropped and the plain runs-backed store is used directly (PR5).
36
+ */
37
+ export declare class DualWriteLoopRunStore implements LoopRunStore {
38
+ private legacy;
39
+ private shadow;
40
+ private readFrom;
41
+ constructor(legacy: LoopRunStore, shadow: LoopRunStore, readFrom?: "legacy" | "shadow");
42
+ private shadowBestEffort;
43
+ createRun(input: CreateLoopRunInput): Promise<LoopRunRecord>;
44
+ appendTrace(runId: string, event: LoopTraceEvent): Promise<void>;
45
+ updateRun(runId: string, patch: Partial<Omit<LoopRunRecord, "id" | "startedAt">>): Promise<LoopRunRecord | undefined>;
46
+ getRun(id: string): Promise<LoopRunRecord | undefined>;
47
+ listRuns(filter?: LoopRunListFilter): Promise<LoopRunRecord[]>;
48
+ close(): Promise<void>;
49
+ }
19
50
  export {};
20
51
  //# sourceMappingURL=loop-run-store.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"loop-run-store.d.ts","sourceRoot":"","sources":["../../src/stores/loop-run-store.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,kBAAkB,EAClB,iBAAiB,EACjB,aAAa,EAEb,YAAY,EACb,MAAM,+BAA+B,CAAC;AACvC,OAAO,KAAK,EAAc,cAAc,EAAE,MAAM,gBAAgB,CAAC;AACjE,OAAO,EAAE,KAAK,OAAO,EAAkC,MAAM,aAAa,CAAC;AAE3E,KAAK,QAAQ,GAAG,GAAG,CAAC;AAEpB,qBAAa,mBAAoB,YAAW,YAAY;IAEpD,OAAO,CAAC,EAAE;IACV,OAAO,CAAC,QAAQ;IAChB,OAAO,CAAC,OAAO;gBAFP,EAAE,EAAE,GAAG,EACP,QAAQ,EAAE,QAAQ,EAClB,OAAO,EAAE,OAAO;IAG1B,OAAO,CAAC,WAAW;IAqBb,SAAS,CAAC,KAAK,EAAE,kBAAkB,GAAG,OAAO,CAAC,aAAa,CAAC;IA0B5D,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,GAAG,SAAS,CAAC;IAKtD,QAAQ,CAAC,MAAM,GAAE,iBAAsB,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC;IAgBlE,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC;IAMhE,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,CAAC,IAAI,CAAC,aAAa,EAAE,IAAI,GAAG,WAAW,CAAC,CAAC,GAAG,OAAO,CAAC,aAAa,GAAG,SAAS,CAAC;IAcrH,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAI5B,OAAO,CAAC,cAAc;CAoBvB"}
1
+ {"version":3,"file":"loop-run-store.d.ts","sourceRoot":"","sources":["../../src/stores/loop-run-store.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,kBAAkB,EAClB,iBAAiB,EACjB,aAAa,EAEb,YAAY,EACb,MAAM,+BAA+B,CAAC;AACvC,OAAO,KAAK,EAAc,cAAc,EAAE,MAAM,gBAAgB,CAAC;AACjE,OAAO,EAAE,KAAK,OAAO,EAAkC,MAAM,aAAa,CAAC;AAE3E,KAAK,QAAQ,GAAG,GAAG,CAAC;AAEpB,qBAAa,mBAAoB,YAAW,YAAY;IAEpD,OAAO,CAAC,EAAE;IACV,OAAO,CAAC,QAAQ;IAChB,OAAO,CAAC,OAAO;IACf;;;6DAGyD;IACzD,OAAO,CAAC,WAAW;gBAPX,EAAE,EAAE,GAAG,EACP,QAAQ,EAAE,QAAQ,EAClB,OAAO,EAAE,OAAO;IACxB;;;6DAGyD;IACjD,WAAW,GAAE,OAAe;IAGtC,OAAO,CAAC,WAAW;IAqBb,SAAS,CAAC,KAAK,EAAE,kBAAkB,GAAG,OAAO,CAAC,aAAa,CAAC;IA0B5D,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,GAAG,SAAS,CAAC;IAQtD,QAAQ,CAAC,MAAM,GAAE,iBAAsB,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC;IAiBlE,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC;IAMhE,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,CAAC,IAAI,CAAC,aAAa,EAAE,IAAI,GAAG,WAAW,CAAC,CAAC,GAAG,OAAO,CAAC,aAAa,GAAG,SAAS,CAAC;IAcrH,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAI5B,OAAO,CAAC,cAAc;CAqCvB;AAED;;;;;;;GAOG;AACH,qBAAa,qBAAsB,YAAW,YAAY;IAEtD,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,QAAQ;gBAFR,MAAM,EAAE,YAAY,EACpB,MAAM,EAAE,YAAY,EACpB,QAAQ,GAAE,QAAQ,GAAG,QAAmB;YAGpC,gBAAgB;IAIxB,SAAS,CAAC,KAAK,EAAE,kBAAkB,GAAG,OAAO,CAAC,aAAa,CAAC;IAM5D,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC;IAKhE,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,CAAC,IAAI,CAAC,aAAa,EAAE,IAAI,GAAG,WAAW,CAAC,CAAC,GAAG,OAAO,CAAC,aAAa,GAAG,SAAS,CAAC;IAM3H,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,GAAG,SAAS,CAAC;IAItD,QAAQ,CAAC,MAAM,CAAC,EAAE,iBAAiB,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC;IAIxD,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAI7B"}
@@ -4,10 +4,17 @@ export class DrizzleLoopRunStore {
4
4
  db;
5
5
  loopRuns;
6
6
  dialect;
7
- constructor(db, loopRuns, dialect) {
7
+ targetsRuns;
8
+ constructor(db, loopRuns, dialect,
9
+ /** When true, `loopRuns` is actually the unified `runs` table (F2 fold):
10
+ * records are written with engine="graph" + task-column sentinels, `resume`
11
+ * maps to the `resume_state` column, and reads/lists scope to engine="graph"
12
+ * so task rows in the same table are never returned. */
13
+ targetsRuns = false) {
8
14
  this.db = db;
9
15
  this.loopRuns = loopRuns;
10
16
  this.dialect = dialect;
17
+ this.targetsRuns = targetsRuns;
11
18
  }
12
19
  rowToRecord(row) {
13
20
  return {
@@ -22,7 +29,7 @@ export class DrizzleLoopRunStore {
22
29
  error: row.error ?? undefined,
23
30
  approvalRequestId: row.approvalRequestId ?? undefined,
24
31
  approval: deserializeJson(row.approval, undefined, this.dialect),
25
- resume: deserializeJson(row.resume, undefined, this.dialect),
32
+ resume: deserializeJson(this.targetsRuns ? row.resumeState : row.resume, undefined, this.dialect),
26
33
  metadata: deserializeJson(row.metadata, undefined, this.dialect),
27
34
  startedAt: row.startedAt,
28
35
  updatedAt: row.updatedAt,
@@ -55,11 +62,16 @@ export class DrizzleLoopRunStore {
55
62
  return run;
56
63
  }
57
64
  async getRun(id) {
58
- const rows = await this.db.select().from(this.loopRuns).where(eq(this.loopRuns.id, id)).limit(1);
65
+ const where = this.targetsRuns
66
+ ? and(eq(this.loopRuns.id, id), eq(this.loopRuns.engine, "graph"))
67
+ : eq(this.loopRuns.id, id);
68
+ const rows = await this.db.select().from(this.loopRuns).where(where).limit(1);
59
69
  return rows[0] ? this.rowToRecord(rows[0]) : undefined;
60
70
  }
61
71
  async listRuns(filter = {}) {
62
72
  const clauses = [];
73
+ if (this.targetsRuns)
74
+ clauses.push(eq(this.loopRuns.engine, "graph"));
63
75
  if (filter.loopName)
64
76
  clauses.push(eq(this.loopRuns.loopName, filter.loopName));
65
77
  if (filter.agentName)
@@ -102,10 +114,9 @@ export class DrizzleLoopRunStore {
102
114
  // Connection lifecycle managed externally.
103
115
  }
104
116
  recordToValues(run) {
105
- return {
117
+ const base = {
106
118
  id: run.id,
107
119
  loopName: run.loopName,
108
- agentName: run.agentName ?? null,
109
120
  sessionId: run.sessionId ?? null,
110
121
  user: run.user ?? null,
111
122
  status: run.status,
@@ -114,12 +125,78 @@ export class DrizzleLoopRunStore {
114
125
  error: run.error ?? null,
115
126
  approvalRequestId: run.approvalRequestId ?? null,
116
127
  approval: serializeJson(run.approval, this.dialect),
117
- resume: serializeJson(run.resume, this.dialect),
118
128
  metadata: serializeJson(run.metadata, this.dialect),
119
129
  startedAt: run.startedAt,
120
130
  updatedAt: run.updatedAt,
121
131
  completedAt: run.completedAt ?? null,
122
132
  };
133
+ if (this.targetsRuns) {
134
+ // Writing a loop record into the unified `runs` table: fill the NOT-NULL
135
+ // task columns with sentinels, tag engine="graph", and map resume →
136
+ // resume_state (the column `runs` already has).
137
+ return {
138
+ ...base,
139
+ agentName: run.agentName ?? "", // runs.agent_name is NOT NULL
140
+ taskId: run.id,
141
+ adapterType: "loop",
142
+ configPath: "",
143
+ engine: "graph",
144
+ resumeState: serializeJson(run.resume, this.dialect),
145
+ };
146
+ }
147
+ return {
148
+ ...base,
149
+ agentName: run.agentName ?? null,
150
+ resume: serializeJson(run.resume, this.dialect),
151
+ };
152
+ }
153
+ }
154
+ /**
155
+ * Dual-write LoopRunStore for the F2 transition. Writes go to BOTH the legacy
156
+ * `loop_runs` store and the shadow `runs`-backed store; the shadow write is
157
+ * best-effort (a shadow failure never fails the request). Reads come from
158
+ * `readFrom` — "legacy" during dual-write, flipped to "shadow" once loop_runs
159
+ * is backfilled into `runs`. When the shadow is the sole source, this wrapper
160
+ * is dropped and the plain runs-backed store is used directly (PR5).
161
+ */
162
+ export class DualWriteLoopRunStore {
163
+ legacy;
164
+ shadow;
165
+ readFrom;
166
+ constructor(legacy, shadow, readFrom = "legacy") {
167
+ this.legacy = legacy;
168
+ this.shadow = shadow;
169
+ this.readFrom = readFrom;
170
+ }
171
+ async shadowBestEffort(op) {
172
+ try {
173
+ await op();
174
+ }
175
+ catch { /* shadow write must never fail the request */ }
176
+ }
177
+ async createRun(input) {
178
+ const run = await this.legacy.createRun(input);
179
+ await this.shadowBestEffort(() => this.shadow.createRun(input));
180
+ return run;
181
+ }
182
+ async appendTrace(runId, event) {
183
+ await this.legacy.appendTrace(runId, event);
184
+ await this.shadowBestEffort(() => this.shadow.appendTrace(runId, event));
185
+ }
186
+ async updateRun(runId, patch) {
187
+ const updated = await this.legacy.updateRun(runId, patch);
188
+ await this.shadowBestEffort(() => this.shadow.updateRun(runId, patch));
189
+ return updated;
190
+ }
191
+ getRun(id) {
192
+ return (this.readFrom === "shadow" ? this.shadow : this.legacy).getRun(id);
193
+ }
194
+ listRuns(filter) {
195
+ return (this.readFrom === "shadow" ? this.shadow : this.legacy).listRuns(filter);
196
+ }
197
+ async close() {
198
+ await this.legacy.close?.();
199
+ await this.shadow.close?.();
123
200
  }
124
201
  }
125
202
  //# sourceMappingURL=loop-run-store.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"loop-run-store.js","sourceRoot":"","sources":["../../src/stores/loop-run-store.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"loop-run-store.js","sourceRoot":"","sources":["../../src/stores/loop-run-store.ts"],"names":[],"mappings":"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"}