@usine/engine 0.1.0 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (150) hide show
  1. package/README.md +37 -12
  2. package/dist/cursor/{store.d.ts → cursor.d.ts} +9 -7
  3. package/dist/cursor/cursor.d.ts.map +1 -0
  4. package/dist/cursor/{store.js → cursor.js} +8 -7
  5. package/dist/cursor/cursor.js.map +1 -0
  6. package/dist/cycle-budget/cycle-budget.d.ts +25 -0
  7. package/dist/cycle-budget/cycle-budget.d.ts.map +1 -0
  8. package/dist/cycle-budget/cycle-budget.js +117 -0
  9. package/dist/cycle-budget/cycle-budget.js.map +1 -0
  10. package/dist/cycle-budget/model.d.ts +26 -0
  11. package/dist/cycle-budget/model.d.ts.map +1 -0
  12. package/dist/cycle-budget/model.js +20 -0
  13. package/dist/cycle-budget/model.js.map +1 -0
  14. package/dist/cycle-budget/queries.d.ts +27 -0
  15. package/dist/cycle-budget/queries.d.ts.map +1 -0
  16. package/dist/cycle-budget/queries.js +175 -0
  17. package/dist/cycle-budget/queries.js.map +1 -0
  18. package/dist/database/database.d.ts +1 -1
  19. package/dist/database/database.d.ts.map +1 -1
  20. package/dist/database/local-sqlite.d.ts +32 -12
  21. package/dist/database/local-sqlite.d.ts.map +1 -1
  22. package/dist/database/local-sqlite.js +113 -14
  23. package/dist/database/local-sqlite.js.map +1 -1
  24. package/dist/database/schema.d.ts +254 -9
  25. package/dist/database/schema.d.ts.map +1 -1
  26. package/dist/database/schema.js +65 -12
  27. package/dist/database/schema.js.map +1 -1
  28. package/dist/engine/engine.d.ts +55 -0
  29. package/dist/engine/engine.d.ts.map +1 -0
  30. package/dist/{engine.js → engine/engine.js} +44 -30
  31. package/dist/engine/engine.js.map +1 -0
  32. package/dist/engine/error.d.ts +37 -0
  33. package/dist/engine/error.d.ts.map +1 -0
  34. package/dist/engine/error.js +41 -0
  35. package/dist/engine/error.js.map +1 -0
  36. package/dist/engine/lifecycle.d.ts +112 -0
  37. package/dist/engine/lifecycle.d.ts.map +1 -0
  38. package/dist/engine/lifecycle.js +132 -0
  39. package/dist/engine/lifecycle.js.map +1 -0
  40. package/dist/engine/shutdown.d.ts +12 -0
  41. package/dist/engine/shutdown.d.ts.map +1 -0
  42. package/dist/engine/shutdown.js +10 -0
  43. package/dist/engine/shutdown.js.map +1 -0
  44. package/dist/engine/submission.d.ts +58 -0
  45. package/dist/engine/submission.d.ts.map +1 -0
  46. package/dist/engine/submission.js +54 -0
  47. package/dist/engine/submission.js.map +1 -0
  48. package/dist/item-projection/{service.d.ts → item-projection.d.ts} +6 -6
  49. package/dist/item-projection/item-projection.d.ts.map +1 -0
  50. package/dist/item-projection/{service.js → item-projection.js} +7 -5
  51. package/dist/item-projection/item-projection.js.map +1 -0
  52. package/dist/item-projection/model.d.ts +2 -5
  53. package/dist/item-projection/model.d.ts.map +1 -1
  54. package/dist/item-projection/model.js +5 -5
  55. package/dist/item-projection/model.js.map +1 -1
  56. package/dist/loop-control/loop-control.d.ts +21 -0
  57. package/dist/loop-control/loop-control.d.ts.map +1 -0
  58. package/dist/{loop-control.js → loop-control/loop-control.js} +7 -5
  59. package/dist/loop-control/loop-control.js.map +1 -0
  60. package/dist/loop-control/model.d.ts +10 -0
  61. package/dist/loop-control/model.d.ts.map +1 -0
  62. package/dist/loop-control/model.js +9 -0
  63. package/dist/loop-control/model.js.map +1 -0
  64. package/dist/repository-label-projection/model.d.ts +12 -3
  65. package/dist/repository-label-projection/model.d.ts.map +1 -1
  66. package/dist/repository-label-projection/model.js +14 -5
  67. package/dist/repository-label-projection/model.js.map +1 -1
  68. package/dist/repository-label-projection/{service.d.ts → repository-label-projection.d.ts} +5 -5
  69. package/dist/repository-label-projection/repository-label-projection.d.ts.map +1 -0
  70. package/dist/repository-label-projection/{service.js → repository-label-projection.js} +17 -7
  71. package/dist/repository-label-projection/repository-label-projection.js.map +1 -0
  72. package/dist/run-reader/model.d.ts +46 -0
  73. package/dist/run-reader/model.d.ts.map +1 -0
  74. package/dist/run-reader/model.js +44 -0
  75. package/dist/run-reader/model.js.map +1 -0
  76. package/dist/run-reader/run-reader.d.ts +29 -0
  77. package/dist/run-reader/run-reader.d.ts.map +1 -0
  78. package/dist/run-reader/run-reader.js +44 -0
  79. package/dist/run-reader/run-reader.js.map +1 -0
  80. package/dist/step-executor.d.ts +34 -12
  81. package/dist/step-executor.d.ts.map +1 -1
  82. package/dist/step-executor.js +22 -5
  83. package/dist/step-executor.js.map +1 -1
  84. package/dist/store/codec.d.ts +104 -40
  85. package/dist/store/codec.d.ts.map +1 -1
  86. package/dist/store/codec.js +66 -44
  87. package/dist/store/codec.js.map +1 -1
  88. package/dist/store/queries.d.ts +47 -15
  89. package/dist/store/queries.d.ts.map +1 -1
  90. package/dist/store/queries.js +74 -39
  91. package/dist/store/queries.js.map +1 -1
  92. package/dist/store/store.d.ts +44 -26
  93. package/dist/store/store.d.ts.map +1 -1
  94. package/dist/store/store.js +185 -127
  95. package/dist/store/store.js.map +1 -1
  96. package/dist/transcript.d.ts +64 -0
  97. package/dist/transcript.d.ts.map +1 -0
  98. package/dist/transcript.js +59 -0
  99. package/dist/transcript.js.map +1 -0
  100. package/dist/workflow/admission.d.ts +13 -0
  101. package/dist/workflow/admission.d.ts.map +1 -0
  102. package/dist/workflow/admission.js +55 -0
  103. package/dist/workflow/admission.js.map +1 -0
  104. package/dist/workflow/command.d.ts +13 -0
  105. package/dist/workflow/command.d.ts.map +1 -0
  106. package/dist/workflow/command.js +17 -0
  107. package/dist/workflow/command.js.map +1 -0
  108. package/dist/workflow/workflow.d.ts +18 -0
  109. package/dist/workflow/workflow.d.ts.map +1 -0
  110. package/dist/workflow/workflow.js +108 -0
  111. package/dist/workflow/workflow.js.map +1 -0
  112. package/drizzle/20260903091940_queued_approved_runs/migration.sql +3 -0
  113. package/drizzle/20260903091940_queued_approved_runs/snapshot.json +1147 -0
  114. package/drizzle/20260905150403_item_cycle_budgets/migration.sql +58 -0
  115. package/drizzle/20260905150403_item_cycle_budgets/snapshot.json +1417 -0
  116. package/drizzle/20260905174009_item_run_history/migration.sql +1 -0
  117. package/drizzle/20260905174009_item_run_history/snapshot.json +1431 -0
  118. package/package.json +41 -5
  119. package/dist/cursor/model.d.ts +0 -5
  120. package/dist/cursor/model.d.ts.map +0 -1
  121. package/dist/cursor/model.js +0 -4
  122. package/dist/cursor/model.js.map +0 -1
  123. package/dist/cursor/store.d.ts.map +0 -1
  124. package/dist/cursor/store.js.map +0 -1
  125. package/dist/engine.d.ts +0 -39
  126. package/dist/engine.d.ts.map +0 -1
  127. package/dist/engine.js.map +0 -1
  128. package/dist/index.d.ts +0 -20
  129. package/dist/index.d.ts.map +0 -1
  130. package/dist/index.js +0 -20
  131. package/dist/index.js.map +0 -1
  132. package/dist/item-projection/service.d.ts.map +0 -1
  133. package/dist/item-projection/service.js.map +0 -1
  134. package/dist/loop-control.d.ts +0 -16
  135. package/dist/loop-control.d.ts.map +0 -1
  136. package/dist/loop-control.js.map +0 -1
  137. package/dist/model.d.ts +0 -185
  138. package/dist/model.d.ts.map +0 -1
  139. package/dist/model.js +0 -174
  140. package/dist/model.js.map +0 -1
  141. package/dist/repository-label-projection/service.d.ts.map +0 -1
  142. package/dist/repository-label-projection/service.js.map +0 -1
  143. package/dist/run-reader.d.ts +0 -20
  144. package/dist/run-reader.d.ts.map +0 -1
  145. package/dist/run-reader.js +0 -19
  146. package/dist/run-reader.js.map +0 -1
  147. package/dist/workflow.d.ts +0 -14
  148. package/dist/workflow.d.ts.map +0 -1
  149. package/dist/workflow.js +0 -105
  150. package/dist/workflow.js.map +0 -1
@@ -5,7 +5,7 @@ interface RunDatabaseEffect extends QueryEffectHKTBase {
5
5
  readonly context: never;
6
6
  readonly error: EffectDrizzleQueryError;
7
7
  }
8
- /** Driver-neutral Effect database used by the run projection store. */
8
+ /** The Effect database the run projection store queries, independent of the SQLite driver. */
9
9
  export type RunDatabaseClient = SQLiteEffectDatabase<RunDatabaseEffect, unknown>;
10
10
  declare const RunDatabase_base: Context.ServiceClass<RunDatabase, "@usine/engine/internal/RunDatabase", RunDatabaseClient>;
11
11
  export declare class RunDatabase extends RunDatabase_base {
@@ -1 +1 @@
1
- {"version":3,"file":"database.d.ts","sourceRoot":"","sources":["../../src/database/database.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,uBAAuB,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAC3F,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,gCAAgC,CAAC;AAC3E,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAC;AAExC,UAAU,iBAAkB,SAAQ,kBAAkB;IACpD,QAAQ,CAAC,OAAO,EAAE,KAAK,CAAC;IACxB,QAAQ,CAAC,KAAK,EAAE,uBAAuB,CAAC;CACzC;AAED,uEAAuE;AACvE,MAAM,MAAM,iBAAiB,GAAG,oBAAoB,CAAC,iBAAiB,EAAE,OAAO,CAAC,CAAC;;AAEjF,qBAAa,WAAY,SAAQ,gBAEhC;IACC,MAAM,CAAC,QAAQ,CAAC,KAAK,aAAc,iBAAiB,4CAA0C;CAC/F"}
1
+ {"version":3,"file":"database.d.ts","sourceRoot":"","sources":["../../src/database/database.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,uBAAuB,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAC3F,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,gCAAgC,CAAC;AAC3E,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAC;AAExC,UAAU,iBAAkB,SAAQ,kBAAkB;IACpD,QAAQ,CAAC,OAAO,EAAE,KAAK,CAAC;IACxB,QAAQ,CAAC,KAAK,EAAE,uBAAuB,CAAC;CACzC;AAED,8FAA8F;AAC9F,MAAM,MAAM,iBAAiB,GAAG,oBAAoB,CAAC,iBAAiB,EAAE,OAAO,CAAC,CAAC;;AAEjF,qBAAa,WAAY,SAAQ,gBAEhC;IACC,MAAM,CAAC,QAAQ,CAAC,KAAK,aAAc,iBAAiB,4CAA0C;CAC/F"}
@@ -1,17 +1,37 @@
1
1
  import { SqliteClient } from "@effect/sql-sqlite-node";
2
- import { Layer } from "effect";
3
- import { CursorStore } from "../cursor/store.ts";
4
- import { ItemProjectionReader, ItemProjectionWriter } from "../item-projection/service.ts";
5
- import { RepositoryLabelProjectionReader, RepositoryLabelProjectionWriter } from "../repository-label-projection/service.ts";
6
- import { LoopControl } from "../loop-control.ts";
7
- import { type RunEngine } from "../engine.ts";
8
- import { EnginePersistenceError, type InstanceDirectory, type RunEngineError } from "../model.ts";
9
- import { RunReader } from "../run-reader.ts";
2
+ import { Effect, Layer, Schema } from "effect";
3
+ import { CursorStore } from "../cursor/cursor.ts";
4
+ import { ItemProjectionReader, ItemProjectionWriter } from "../item-projection/item-projection.ts";
5
+ import { RepositoryLabelProjectionReader, RepositoryLabelProjectionWriter } from "../repository-label-projection/repository-label-projection.ts";
6
+ import { LoopControl } from "../loop-control/loop-control.ts";
7
+ import { CycleBudgets } from "../cycle-budget/cycle-budget.ts";
8
+ import { type RunEngine } from "../engine/engine.ts";
9
+ import type { InstanceDirectory } from "@usine/core/instance";
10
+ import { EnginePersistenceError, type RunEngineError } from "../engine/error.ts";
11
+ import { RunReader } from "../run-reader/run-reader.ts";
10
12
  import type { StepExecutor } from "../step-executor.ts";
11
13
  import { RunDatabase } from "./database.ts";
12
14
  export declare const localSqliteLayer: (instanceDirectory: InstanceDirectory) => Layer.Layer<RunDatabase | import("effect/unstable/sql/SqlClient").SqlClient | SqliteClient.SqliteClient, EnginePersistenceError, never>;
13
- /** Local-first runtime backed by `.usine/runtime.sqlite`. */
14
- export declare const layer: (instanceDirectory: InstanceDirectory) => Layer.Layer<CursorStore | ItemProjectionReader | ItemProjectionWriter | LoopControl | RepositoryLabelProjectionReader | RepositoryLabelProjectionWriter | RunEngine | RunReader, RunEngineError, StepExecutor>;
15
- /** Read-only local projection; it never reconciles workflows or starts Attempts. */
16
- export declare const observationLayer: (instanceDirectory: InstanceDirectory) => Layer.Layer<ItemProjectionReader | LoopControl | RepositoryLabelProjectionReader | RunReader, RunEngineError>;
15
+ /** The local runtime on `.usine/runtime.sqlite`. */
16
+ export declare const layer: (instanceDirectory: InstanceDirectory) => Layer.Layer<CursorStore | CycleBudgets | ItemProjectionReader | ItemProjectionWriter | LoopControl | RepositoryLabelProjectionReader | RepositoryLabelProjectionWriter | RunEngine | RunReader, RunEngineError, StepExecutor>;
17
+ /** Observation services initialize the local database but never reconcile workflows or start Attempts. */
18
+ export declare const observationLayer: (instanceDirectory: InstanceDirectory) => Layer.Layer<CycleBudgets | ItemProjectionReader | LoopControl | RepositoryLabelProjectionReader | RunReader, RunEngineError>;
19
+ /** Opens an existing `.usine/runtime.sqlite` in SQLite read-only mode, without initializing or migrating the database. */
20
+ export declare const runReaderLayer: (instanceDirectory: InstanceDirectory) => Layer.Layer<RunReader, EnginePersistenceError>;
21
+ declare const RuntimeStoreBackupError_base: Schema.Class<RuntimeStoreBackupError, Schema.TaggedStruct<"RuntimeStoreBackupError", {
22
+ readonly operation: Schema.Literals<readonly ["open", "stage", "copy", "publish"]>;
23
+ readonly source: Schema.String;
24
+ readonly destination: Schema.String;
25
+ readonly reason: Schema.String;
26
+ readonly cause: Schema.Defect;
27
+ }>, import("effect/Cause").YieldableError>;
28
+ /** A failed backup operation, with both paths because SQLite copy errors can come from either file. */
29
+ export declare class RuntimeStoreBackupError extends RuntimeStoreBackupError_base {
30
+ }
31
+ /** Copies `.usine/runtime.sqlite` to a new file while the orchestrator runs.
32
+ * The destination directory must exist and support hard links. Opens the source
33
+ * read-only and saves a complete backup without overwriting an existing file.
34
+ */
35
+ export declare const backup: (instanceDirectory: string & import("effect/Brand").Brand<"InstanceDirectory">, destination: string) => Effect.Effect<void, RuntimeStoreBackupError, never>;
36
+ export {};
17
37
  //# sourceMappingURL=local-sqlite.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"local-sqlite.d.ts","sourceRoot":"","sources":["../../src/database/local-sqlite.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAKvD,OAAO,EAAsB,KAAK,EAAQ,MAAM,QAAQ,CAAC;AACzD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAC;AAC3F,OAAO,EACL,+BAA+B,EAC/B,+BAA+B,EAChC,MAAM,2CAA2C,CAAC;AACnD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAqB,KAAK,SAAS,EAAE,MAAM,cAAc,CAAC;AACjE,OAAO,EAAE,sBAAsB,EAAE,KAAK,iBAAiB,EAAE,KAAK,cAAc,EAAE,MAAM,aAAa,CAAC;AAClG,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAqB5C,eAAO,MAAM,gBAAgB,sBAAuB,iBAAiB,4IAepE,CAAC;AAEF,6DAA6D;AAC7D,eAAO,MAAM,KAAK,sBACG,iBAAiB,KACnC,KAAK,CAAC,KAAK,CACV,WAAW,GACX,oBAAoB,GACpB,oBAAoB,GACpB,WAAW,GACX,+BAA+B,GAC/B,+BAA+B,GAC/B,SAAS,GACT,SAAS,EACX,cAAc,EACd,YAAY,CACqF,CAAC;AAEpG,oFAAoF;AACpF,eAAO,MAAM,gBAAgB,sBACR,iBAAiB,KACnC,KAAK,CAAC,KAAK,CACZ,oBAAoB,GAAG,WAAW,GAAG,+BAA+B,GAAG,SAAS,EAChF,cAAc,CASf,CAAC"}
1
+ {"version":3,"file":"local-sqlite.d.ts","sourceRoot":"","sources":["../../src/database/local-sqlite.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAKvD,OAAO,EAAE,MAAM,EAAc,KAAK,EAA+B,MAAM,EAAE,MAAM,QAAQ,CAAC;AAExF,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,MAAM,uCAAuC,CAAC;AACnG,OAAO,EACL,+BAA+B,EAC/B,+BAA+B,EAChC,MAAM,+DAA+D,CAAC;AACvE,OAAO,EAAE,WAAW,EAAE,MAAM,iCAAiC,CAAC;AAC9D,OAAO,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAC;AAC/D,OAAO,EAAqB,KAAK,SAAS,EAAE,MAAM,qBAAqB,CAAC;AACxE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAC9D,OAAO,EAAE,sBAAsB,EAAE,KAAK,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACjF,OAAO,EAAE,SAAS,EAAE,MAAM,6BAA6B,CAAC;AACxD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAuB5C,eAAO,MAAM,gBAAgB,sBAAuB,iBAAiB,4IAepE,CAAC;AAEF,oDAAoD;AACpD,eAAO,MAAM,KAAK,sBACG,iBAAiB,KACnC,KAAK,CAAC,KAAK,CACV,WAAW,GACX,YAAY,GACZ,oBAAoB,GACpB,oBAAoB,GACpB,WAAW,GACX,+BAA+B,GAC/B,+BAA+B,GAC/B,SAAS,GACT,SAAS,EACX,cAAc,EACd,YAAY,CACqF,CAAC;AAEpG,0GAA0G;AAC1G,eAAO,MAAM,gBAAgB,sBACR,iBAAiB,KACnC,KAAK,CAAC,KAAK,CACZ,YAAY,GAAG,oBAAoB,GAAG,WAAW,GAAG,+BAA+B,GAAG,SAAS,EAC/F,cAAc,CAUf,CAAC;AAiCF,0HAA0H;AAC1H,eAAO,MAAM,cAAc,sBACN,iBAAiB,KACnC,KAAK,CAAC,KAAK,CAAC,SAAS,EAAE,sBAAsB,CAM/C,CAAC;;;;;;;;AAEF,uGAAuG;AACvG,qBAAa,uBAAwB,SAAQ,4BAQ3C;CAAG;AAmBL;;;GAGG;AACH,eAAO,MAAM,MAAM,6JAuDlB,CAAC"}
@@ -4,23 +4,24 @@ import { fileURLToPath } from "node:url";
4
4
  import * as SQLiteDrizzle from "drizzle-orm/effect-sqlite-node";
5
5
  import { migrate } from "drizzle-orm/effect-sqlite-node/migrator";
6
6
  import { sql } from "drizzle-orm";
7
- import { Effect, FileSystem, Layer, Path } from "effect";
8
- import { CursorStore } from "../cursor/store.js";
9
- import { ItemProjectionReader, ItemProjectionWriter } from "../item-projection/service.js";
10
- import { RepositoryLabelProjectionReader, RepositoryLabelProjectionWriter, } from "../repository-label-projection/service.js";
11
- import { LoopControl } from "../loop-control.js";
12
- import { layerWithDatabase } from "../engine.js";
13
- import { EnginePersistenceError } from "../model.js";
14
- import { RunReader } from "../run-reader.js";
7
+ import { Effect, FileSystem, Layer, Option, Path, PlatformError, Schema } from "effect";
8
+ import { CursorStore } from "../cursor/cursor.js";
9
+ import { ItemProjectionReader, ItemProjectionWriter } from "../item-projection/item-projection.js";
10
+ import { RepositoryLabelProjectionReader, RepositoryLabelProjectionWriter, } from "../repository-label-projection/repository-label-projection.js";
11
+ import { LoopControl } from "../loop-control/loop-control.js";
12
+ import { CycleBudgets } from "../cycle-budget/cycle-budget.js";
13
+ import { layerWithDatabase } from "../engine/engine.js";
14
+ import { EnginePersistenceError } from "../engine/error.js";
15
+ import { RunReader } from "../run-reader/run-reader.js";
15
16
  import { RunDatabase } from "./database.js";
16
17
  const migrationsFolder = fileURLToPath(new URL("../../drizzle", import.meta.url));
17
18
  const startupError = (operation, cause) => new EnginePersistenceError({ operation, cause });
19
+ const runtimeStorePath = (path, instanceDirectory) => path.join(instanceDirectory, ".usine", "runtime.sqlite");
18
20
  const sqliteClientLayer = (instanceDirectory) => Layer.unwrap(Effect.gen(function* () {
19
21
  const fileSystem = yield* FileSystem.FileSystem;
20
22
  const path = yield* Path.Path;
21
- const runtimeDirectory = path.join(instanceDirectory, ".usine");
22
- yield* fileSystem.makeDirectory(runtimeDirectory, { recursive: true });
23
- return SqliteClient.layer({ filename: path.join(runtimeDirectory, "runtime.sqlite") });
23
+ yield* fileSystem.makeDirectory(path.join(instanceDirectory, ".usine"), { recursive: true });
24
+ return SqliteClient.layer({ filename: runtimeStorePath(path, instanceDirectory) });
24
25
  }).pipe(Effect.mapError((cause) => startupError("prepare local database directory", cause)), Effect.provide(NodeServices.layer)));
25
26
  export const localSqliteLayer = (instanceDirectory) => {
26
27
  const sqlClient = sqliteClientLayer(instanceDirectory);
@@ -35,11 +36,109 @@ export const localSqliteLayer = (instanceDirectory) => {
35
36
  }).pipe(Effect.mapError((cause) => startupError("initialize local database", cause))));
36
37
  return database.pipe(Layer.provideMerge(sqlClient));
37
38
  };
38
- /** Local-first runtime backed by `.usine/runtime.sqlite`. */
39
+ /** The local runtime on `.usine/runtime.sqlite`. */
39
40
  export const layer = (instanceDirectory) => layerWithDatabase(localSqliteLayer(instanceDirectory)).pipe(Layer.provide(NodeServices.layer));
40
- /** Read-only local projection; it never reconciles workflows or starts Attempts. */
41
+ /** Observation services initialize the local database but never reconcile workflows or start Attempts. */
41
42
  export const observationLayer = (instanceDirectory) => {
42
43
  const database = localSqliteLayer(instanceDirectory);
43
- return Layer.mergeAll(ItemProjectionReader.layer, LoopControl.layer, RepositoryLabelProjectionReader.layer, RunReader.layer).pipe(Layer.provide(database));
44
+ return Layer.mergeAll(CycleBudgets.layer, ItemProjectionReader.layer, LoopControl.layer, RepositoryLabelProjectionReader.layer, RunReader.layer).pipe(Layer.provide(database));
44
45
  };
46
+ const readableRuntimeStore = Effect.fn("LocalSqlite.readableRuntimeStore")(function* (filename) {
47
+ const fileSystem = yield* FileSystem.FileSystem;
48
+ yield* fileSystem.access(filename, { readable: true });
49
+ const info = yield* fileSystem.stat(filename);
50
+ if (info.type !== "File")
51
+ return yield* PlatformError.systemError({
52
+ _tag: "BadResource",
53
+ module: "FileSystem",
54
+ method: "stat",
55
+ pathOrDescriptor: filename,
56
+ description: `Expected a regular SQLite file, found ${info.type}`,
57
+ });
58
+ });
59
+ const readOnlySqliteLayer = (filename) => SqliteClient.layer({ filename, readonly: true, disableWAL: true });
60
+ const existingSqliteLayer = (instanceDirectory) => Layer.unwrap(Effect.gen(function* () {
61
+ const filename = runtimeStorePath(yield* Path.Path, instanceDirectory);
62
+ yield* readableRuntimeStore(filename);
63
+ return readOnlySqliteLayer(filename);
64
+ }).pipe(Effect.mapError((cause) => startupError("open existing local database", cause)), Effect.provide(NodeServices.layer)));
65
+ /** Opens an existing `.usine/runtime.sqlite` in SQLite read-only mode, without initializing or migrating the database. */
66
+ export const runReaderLayer = (instanceDirectory) => {
67
+ const sqlClient = existingSqliteLayer(instanceDirectory);
68
+ const database = Layer.effect(RunDatabase, SQLiteDrizzle.makeWithDefaults()).pipe(Layer.provide(sqlClient));
69
+ return RunReader.layer.pipe(Layer.provide(database));
70
+ };
71
+ /** A failed backup operation, with both paths because SQLite copy errors can come from either file. */
72
+ export class RuntimeStoreBackupError extends Schema.TaggedError("@usine/engine/RuntimeStoreBackupError")("RuntimeStoreBackupError", {
73
+ operation: Schema.Literals(["open", "stage", "copy", "publish"]),
74
+ source: Schema.String,
75
+ destination: Schema.String,
76
+ reason: Schema.String,
77
+ cause: Schema.Defect(),
78
+ }) {
79
+ }
80
+ const vendorMessage = Schema.decodeUnknownOption(Schema.Struct({ message: Schema.NonEmptyString }));
81
+ const errnoCode = Schema.decodeUnknownOption(Schema.Struct({ code: Schema.NonEmptyString }));
82
+ const failureReason = (cause) => {
83
+ if (cause._tag === "SqlError")
84
+ return Option.match(vendorMessage(cause.reason.cause), {
85
+ onNone: () => cause.reason._tag,
86
+ onSome: ({ message }) => message,
87
+ });
88
+ if (cause.reason.description !== undefined)
89
+ return cause.reason.description;
90
+ if (cause.reason._tag !== "Unknown")
91
+ return cause.reason._tag;
92
+ return Option.match(errnoCode(cause.reason.cause), {
93
+ onNone: () => cause.reason._tag,
94
+ onSome: ({ code }) => code,
95
+ });
96
+ };
97
+ /** Copies `.usine/runtime.sqlite` to a new file while the orchestrator runs.
98
+ * The destination directory must exist and support hard links. Opens the source
99
+ * read-only and saves a complete backup without overwriting an existing file.
100
+ */
101
+ export const backup = Effect.fn("LocalSqlite.backup")(function* (instanceDirectory, destination) {
102
+ yield* Effect.annotateCurrentSpan({ instanceDirectory, destination });
103
+ yield* Effect.logInfo("Runtime store backup started", { instanceDirectory, destination });
104
+ const fileSystem = yield* FileSystem.FileSystem;
105
+ const path = yield* Path.Path;
106
+ const source = runtimeStorePath(path, instanceDirectory);
107
+ const failed = (operation) => Effect.mapError((cause) => new RuntimeStoreBackupError({
108
+ operation,
109
+ source,
110
+ destination,
111
+ reason: failureReason(cause),
112
+ cause,
113
+ }));
114
+ yield* readableRuntimeStore(source).pipe(failed("open"));
115
+ const { totalPages } = yield* Effect.scoped(Effect.gen(function* () {
116
+ const directory = path.dirname(destination);
117
+ const temporary = yield* fileSystem
118
+ .makeTempDirectoryScoped({ directory, prefix: ".usine-backup-" })
119
+ .pipe(failed("stage"));
120
+ const staged = path.join(temporary, "runtime.sqlite");
121
+ yield* fileSystem
122
+ .writeFile(staged, new Uint8Array(), { mode: 0o600 })
123
+ .pipe(failed("stage"));
124
+ const metadata = yield* Effect.flatMap(SqliteClient.SqliteClient, (client) =>
125
+ // Node's backup can't be canceled; wait before closing the database or deleting staging.
126
+ client.backup(staged).pipe(failed("copy"), Effect.uninterruptible)).pipe(Effect.provide(readOnlySqliteLayer(source)));
127
+ // A hard link atomically creates the destination without overwriting it.
128
+ yield* fileSystem.link(staged, destination).pipe(failed("publish"));
129
+ return metadata;
130
+ }));
131
+ yield* Effect.annotateCurrentSpan({ totalPages });
132
+ yield* Effect.logInfo("Runtime store backup completed", {
133
+ instanceDirectory,
134
+ destination,
135
+ totalPages,
136
+ });
137
+ }, Effect.tapError((error) => Effect.logWarning("Runtime store backup failed", {
138
+ errorTag: error._tag,
139
+ operation: error.operation,
140
+ source: error.source,
141
+ destination: error.destination,
142
+ reason: error.reason,
143
+ })), Effect.provide(NodeServices.layer));
45
144
  //# sourceMappingURL=local-sqlite.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"local-sqlite.js","sourceRoot":"","sources":["../../src/database/local-sqlite.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"local-sqlite.js","sourceRoot":"","sources":["../../src/database/local-sqlite.ts"],"names":[],"mappings":"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"}
@@ -153,11 +153,43 @@ export declare const triggerEvents: import("drizzle-orm/sqlite-core").SQLiteTabl
153
153
  identity: undefined;
154
154
  generated: undefined;
155
155
  }, {}>;
156
+ cycleLimit: import("drizzle-orm/sqlite-core").SQLiteColumn<{
157
+ name: string;
158
+ tableName: "usine_trigger_events";
159
+ dataType: "number int53";
160
+ data: number & import("effect/Brand").Brand<"CycleLimit">;
161
+ driverParam: number;
162
+ notNull: false;
163
+ hasDefault: false;
164
+ isPrimaryKey: false;
165
+ isAutoincrement: false;
166
+ hasRuntimeDefault: false;
167
+ enumValues: undefined;
168
+ baseColumn: never;
169
+ identity: undefined;
170
+ generated: undefined;
171
+ }, {}>;
172
+ cycleGeneration: import("drizzle-orm/sqlite-core").SQLiteColumn<{
173
+ name: string;
174
+ tableName: "usine_trigger_events";
175
+ dataType: "number int53";
176
+ data: number;
177
+ driverParam: number;
178
+ notNull: true;
179
+ hasDefault: true;
180
+ isPrimaryKey: false;
181
+ isAutoincrement: false;
182
+ hasRuntimeDefault: false;
183
+ enumValues: undefined;
184
+ baseColumn: never;
185
+ identity: undefined;
186
+ generated: undefined;
187
+ }, {}>;
156
188
  repository: import("drizzle-orm/sqlite-core").SQLiteColumn<{
157
189
  name: string;
158
190
  tableName: "usine_trigger_events";
159
191
  dataType: "string";
160
- data: string & import("effect/Brand").Brand<"RepoName">;
192
+ data: string & import("effect/Brand").Brand<"RepositoryName">;
161
193
  driverParam: string;
162
194
  notNull: true;
163
195
  hasDefault: false;
@@ -236,6 +268,219 @@ export declare const triggerEvents: import("drizzle-orm/sqlite-core").SQLiteTabl
236
268
  };
237
269
  dialect: 'sqlite';
238
270
  }>;
271
+ export declare const itemCycleBudgets: import("drizzle-orm/sqlite-core").SQLiteTableWithColumns<{
272
+ name: "usine_item_cycle_budgets";
273
+ schema: undefined;
274
+ columns: {
275
+ itemKey: import("drizzle-orm/sqlite-core").SQLiteColumn<{
276
+ name: string;
277
+ tableName: "usine_item_cycle_budgets";
278
+ dataType: "string";
279
+ data: string & import("effect/Brand").Brand<"ItemKey">;
280
+ driverParam: string;
281
+ notNull: true;
282
+ hasDefault: false;
283
+ isPrimaryKey: true;
284
+ isAutoincrement: false;
285
+ hasRuntimeDefault: false;
286
+ enumValues: [string, ...string[]];
287
+ baseColumn: never;
288
+ identity: undefined;
289
+ generated: undefined;
290
+ }, {}>;
291
+ repository: import("drizzle-orm/sqlite-core").SQLiteColumn<{
292
+ name: string;
293
+ tableName: "usine_item_cycle_budgets";
294
+ dataType: "string";
295
+ data: string & import("effect/Brand").Brand<"RepositoryName">;
296
+ driverParam: string;
297
+ notNull: true;
298
+ hasDefault: false;
299
+ isPrimaryKey: false;
300
+ isAutoincrement: false;
301
+ hasRuntimeDefault: false;
302
+ enumValues: [string, ...string[]];
303
+ baseColumn: never;
304
+ identity: undefined;
305
+ generated: undefined;
306
+ }, {}>;
307
+ generation: import("drizzle-orm/sqlite-core").SQLiteColumn<{
308
+ name: string;
309
+ tableName: "usine_item_cycle_budgets";
310
+ dataType: "number int53";
311
+ data: number;
312
+ driverParam: number;
313
+ notNull: true;
314
+ hasDefault: true;
315
+ isPrimaryKey: false;
316
+ isAutoincrement: false;
317
+ hasRuntimeDefault: false;
318
+ enumValues: undefined;
319
+ baseColumn: never;
320
+ identity: undefined;
321
+ generated: undefined;
322
+ }, {}>;
323
+ askJson: import("drizzle-orm/sqlite-core").SQLiteColumn<{
324
+ name: string;
325
+ tableName: "usine_item_cycle_budgets";
326
+ dataType: "object json";
327
+ data: unknown;
328
+ driverParam: string;
329
+ notNull: false;
330
+ hasDefault: false;
331
+ isPrimaryKey: false;
332
+ isAutoincrement: false;
333
+ hasRuntimeDefault: false;
334
+ enumValues: undefined;
335
+ baseColumn: never;
336
+ identity: undefined;
337
+ generated: undefined;
338
+ }, {}>;
339
+ resetPending: import("drizzle-orm/sqlite-core").SQLiteColumn<{
340
+ name: string;
341
+ tableName: "usine_item_cycle_budgets";
342
+ dataType: "boolean";
343
+ data: boolean;
344
+ driverParam: number;
345
+ notNull: true;
346
+ hasDefault: true;
347
+ isPrimaryKey: false;
348
+ isAutoincrement: false;
349
+ hasRuntimeDefault: false;
350
+ enumValues: undefined;
351
+ baseColumn: never;
352
+ identity: undefined;
353
+ generated: undefined;
354
+ }, {}>;
355
+ };
356
+ dialect: 'sqlite';
357
+ }>;
358
+ export declare const cycleReservations: import("drizzle-orm/sqlite-core").SQLiteTableWithColumns<{
359
+ name: "usine_cycle_reservations";
360
+ schema: undefined;
361
+ columns: {
362
+ runId: import("drizzle-orm/sqlite-core").SQLiteColumn<{
363
+ name: string;
364
+ tableName: "usine_cycle_reservations";
365
+ dataType: "string";
366
+ data: string & import("effect/Brand").Brand<"RunId">;
367
+ driverParam: string;
368
+ notNull: true;
369
+ hasDefault: false;
370
+ isPrimaryKey: true;
371
+ isAutoincrement: false;
372
+ hasRuntimeDefault: false;
373
+ enumValues: [string, ...string[]];
374
+ baseColumn: never;
375
+ identity: undefined;
376
+ generated: undefined;
377
+ }, {}>;
378
+ itemKey: import("drizzle-orm/sqlite-core").SQLiteColumn<{
379
+ name: string;
380
+ tableName: "usine_cycle_reservations";
381
+ dataType: "string";
382
+ data: string & import("effect/Brand").Brand<"ItemKey">;
383
+ driverParam: string;
384
+ notNull: true;
385
+ hasDefault: false;
386
+ isPrimaryKey: false;
387
+ isAutoincrement: false;
388
+ hasRuntimeDefault: false;
389
+ enumValues: [string, ...string[]];
390
+ baseColumn: never;
391
+ identity: undefined;
392
+ generated: undefined;
393
+ }, {}>;
394
+ generation: import("drizzle-orm/sqlite-core").SQLiteColumn<{
395
+ name: string;
396
+ tableName: "usine_cycle_reservations";
397
+ dataType: "number int53";
398
+ data: number;
399
+ driverParam: number;
400
+ notNull: true;
401
+ hasDefault: false;
402
+ isPrimaryKey: false;
403
+ isAutoincrement: false;
404
+ hasRuntimeDefault: false;
405
+ enumValues: undefined;
406
+ baseColumn: never;
407
+ identity: undefined;
408
+ generated: undefined;
409
+ }, {}>;
410
+ loop: import("drizzle-orm/sqlite-core").SQLiteColumn<{
411
+ name: string;
412
+ tableName: "usine_cycle_reservations";
413
+ dataType: "string";
414
+ data: string & import("effect/Brand").Brand<"LoopName">;
415
+ driverParam: string;
416
+ notNull: true;
417
+ hasDefault: false;
418
+ isPrimaryKey: false;
419
+ isAutoincrement: false;
420
+ hasRuntimeDefault: false;
421
+ enumValues: [string, ...string[]];
422
+ baseColumn: never;
423
+ identity: undefined;
424
+ generated: undefined;
425
+ }, {}>;
426
+ };
427
+ dialect: 'sqlite';
428
+ }>;
429
+ export declare const cycleResets: import("drizzle-orm/sqlite-core").SQLiteTableWithColumns<{
430
+ name: "usine_cycle_resets";
431
+ schema: undefined;
432
+ columns: {
433
+ askId: import("drizzle-orm/sqlite-core").SQLiteColumn<{
434
+ name: string;
435
+ tableName: "usine_cycle_resets";
436
+ dataType: "string";
437
+ data: string & import("effect/Brand").Brand<"EventId"> & import("effect/Brand").Brand<"CycleBudgetAskId">;
438
+ driverParam: string;
439
+ notNull: true;
440
+ hasDefault: false;
441
+ isPrimaryKey: true;
442
+ isAutoincrement: false;
443
+ hasRuntimeDefault: false;
444
+ enumValues: [string, ...string[]];
445
+ baseColumn: never;
446
+ identity: undefined;
447
+ generated: undefined;
448
+ }, {}>;
449
+ eventId: import("drizzle-orm/sqlite-core").SQLiteColumn<{
450
+ name: string;
451
+ tableName: "usine_cycle_resets";
452
+ dataType: "string";
453
+ data: string & import("effect/Brand").Brand<"EventId">;
454
+ driverParam: string;
455
+ notNull: true;
456
+ hasDefault: false;
457
+ isPrimaryKey: false;
458
+ isAutoincrement: false;
459
+ hasRuntimeDefault: false;
460
+ enumValues: [string, ...string[]];
461
+ baseColumn: never;
462
+ identity: undefined;
463
+ generated: undefined;
464
+ }, {}>;
465
+ itemKey: import("drizzle-orm/sqlite-core").SQLiteColumn<{
466
+ name: string;
467
+ tableName: "usine_cycle_resets";
468
+ dataType: "string";
469
+ data: string & import("effect/Brand").Brand<"ItemKey">;
470
+ driverParam: string;
471
+ notNull: true;
472
+ hasDefault: false;
473
+ isPrimaryKey: false;
474
+ isAutoincrement: false;
475
+ hasRuntimeDefault: false;
476
+ enumValues: [string, ...string[]];
477
+ baseColumn: never;
478
+ identity: undefined;
479
+ generated: undefined;
480
+ }, {}>;
481
+ };
482
+ dialect: 'sqlite';
483
+ }>;
239
484
  export declare const runs: import("drizzle-orm/sqlite-core").SQLiteTableWithColumns<{
240
485
  name: "usine_runs";
241
486
  schema: undefined;
@@ -324,7 +569,7 @@ export declare const runs: import("drizzle-orm/sqlite-core").SQLiteTableWithColu
324
569
  name: string;
325
570
  tableName: "usine_runs";
326
571
  dataType: "string";
327
- data: string & import("effect/Brand").Brand<"RepoName">;
572
+ data: string & import("effect/Brand").Brand<"RepositoryName">;
328
573
  driverParam: string;
329
574
  notNull: true;
330
575
  hasDefault: false;
@@ -829,7 +1074,7 @@ export declare const workflowCommands: import("drizzle-orm/sqlite-core").SQLiteT
829
1074
  };
830
1075
  dialect: 'sqlite';
831
1076
  }>;
832
- /** Opaque, owner-validated cursors for efficiency-only trigger state. */
1077
+ /** Cursors that only save work; each owner validates its own value. */
833
1078
  export declare const cursors: import("drizzle-orm/sqlite-core").SQLiteTableWithColumns<{
834
1079
  name: "usine_cursors";
835
1080
  schema: undefined;
@@ -869,7 +1114,7 @@ export declare const cursors: import("drizzle-orm/sqlite-core").SQLiteTableWithC
869
1114
  };
870
1115
  dialect: 'sqlite';
871
1116
  }>;
872
- /** Latest trigger-owned payload for each Item, projected for operator reads. */
1117
+ /** The latest payload seen for each Item, for operator reads. */
873
1118
  export declare const itemProjections: import("drizzle-orm/sqlite-core").SQLiteTableWithColumns<{
874
1119
  name: "usine_item_projections";
875
1120
  schema: undefined;
@@ -894,7 +1139,7 @@ export declare const itemProjections: import("drizzle-orm/sqlite-core").SQLiteTa
894
1139
  name: string;
895
1140
  tableName: "usine_item_projections";
896
1141
  dataType: "string";
897
- data: string & import("effect/Brand").Brand<"RepoName">;
1142
+ data: string & import("effect/Brand").Brand<"RepositoryName">;
898
1143
  driverParam: string;
899
1144
  notNull: true;
900
1145
  hasDefault: false;
@@ -973,7 +1218,7 @@ export declare const itemProjections: import("drizzle-orm/sqlite-core").SQLiteTa
973
1218
  };
974
1219
  dialect: 'sqlite';
975
1220
  }>;
976
- /** Latest complete GitHub label catalog for each managed repository. */
1221
+ /** The latest complete label catalog for each managed repository. */
977
1222
  export declare const repositoryLabelProjections: import("drizzle-orm/sqlite-core").SQLiteTableWithColumns<{
978
1223
  name: "usine_repository_label_projections";
979
1224
  schema: undefined;
@@ -982,7 +1227,7 @@ export declare const repositoryLabelProjections: import("drizzle-orm/sqlite-core
982
1227
  name: string;
983
1228
  tableName: "usine_repository_label_projections";
984
1229
  dataType: "string";
985
- data: string & import("effect/Brand").Brand<"RepoName">;
1230
+ data: string & import("effect/Brand").Brand<"RepositoryName">;
986
1231
  driverParam: string;
987
1232
  notNull: true;
988
1233
  hasDefault: false;
@@ -1013,7 +1258,7 @@ export declare const repositoryLabelProjections: import("drizzle-orm/sqlite-core
1013
1258
  };
1014
1259
  dialect: 'sqlite';
1015
1260
  }>;
1016
- /** Operator-owned runtime toggles; deliberately separate from authored Loop files (ADR 0009). */
1261
+ /** Operator-owned runtime toggles, kept apart from authored loop files (ADR 0009). */
1017
1262
  export declare const loopRuntime: import("drizzle-orm/sqlite-core").SQLiteTableWithColumns<{
1018
1263
  name: "usine_loop_runtime";
1019
1264
  schema: undefined;
@@ -1053,7 +1298,7 @@ export declare const loopRuntime: import("drizzle-orm/sqlite-core").SQLiteTableW
1053
1298
  };
1054
1299
  dialect: 'sqlite';
1055
1300
  }>;
1056
- /** Singleton invalidation token for cached operator projections. */
1301
+ /** Single row whose version invalidates cached operator projections. */
1057
1302
  export declare const projectionRevision: import("drizzle-orm/sqlite-core").SQLiteTableWithColumns<{
1058
1303
  name: "usine_projection_revision";
1059
1304
  schema: undefined;
@@ -1 +1 @@
1
- {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/database/schema.ts"],"names":[],"mappings":"AAgCA,eAAO,MAAM,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EASlB,CAAC;AAEF,eAAO,MAAM,aAAa;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAyBzB,CAAC;AAEF,eAAO,MAAM,IAAI;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAwBhB,CAAC;AAEF,eAAO,MAAM,KAAK;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAiBjB,CAAC;AAEF,eAAO,MAAM,QAAQ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA6BpB,CAAC;AAEF,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA2B9B,CAAC;AAEF,eAAO,MAAM,SAAS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAUpB,CAAC;AAEH,eAAO,MAAM,aAAa;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAYzB,CAAC;AAEF,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAgB5B,CAAC;AAEF,yEAAyE;AACzE,eAAO,MAAM,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAOnB,CAAC;AAEF,gFAAgF;AAChF,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAgB3B,CAAC;AAEF,wEAAwE;AACxE,eAAO,MAAM,0BAA0B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAYtC,CAAC;AAEF,iGAAiG;AACjG,eAAO,MAAM,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAGtB,CAAC;AAEH,oEAAoE;AACpE,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAO9B,CAAC"}
1
+ {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/database/schema.ts"],"names":[],"mappings":"AAyBA,eAAO,MAAM,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EASlB,CAAC;AAEF,eAAO,MAAM,aAAa;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAiCzB,CAAC;AAEF,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAgB5B,CAAC;AAEF,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAkB7B,CAAC;AAEF,eAAO,MAAM,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAWtB,CAAC;AAEH,eAAO,MAAM,IAAI;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAwBhB,CAAC;AAEF,eAAO,MAAM,KAAK;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAiBjB,CAAC;AAEF,eAAO,MAAM,QAAQ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA6BpB,CAAC;AAEF,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA2B9B,CAAC;AAEF,eAAO,MAAM,SAAS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAUpB,CAAC;AAEH,eAAO,MAAM,aAAa;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAYzB,CAAC;AAEF,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAgB5B,CAAC;AAEF,uEAAuE;AACvE,eAAO,MAAM,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAOnB,CAAC;AAEF,iEAAiE;AACjE,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAgB3B,CAAC;AAEF,qEAAqE;AACrE,eAAO,MAAM,0BAA0B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAYtC,CAAC;AAEF,sFAAsF;AACtF,eAAO,MAAM,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAGtB,CAAC;AAEH,wEAAwE;AACxE,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAO9B,CAAC"}