@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.
- package/README.md +37 -12
- package/dist/cursor/{store.d.ts → cursor.d.ts} +9 -7
- package/dist/cursor/cursor.d.ts.map +1 -0
- package/dist/cursor/{store.js → cursor.js} +8 -7
- package/dist/cursor/cursor.js.map +1 -0
- package/dist/cycle-budget/cycle-budget.d.ts +25 -0
- package/dist/cycle-budget/cycle-budget.d.ts.map +1 -0
- package/dist/cycle-budget/cycle-budget.js +117 -0
- package/dist/cycle-budget/cycle-budget.js.map +1 -0
- package/dist/cycle-budget/model.d.ts +26 -0
- package/dist/cycle-budget/model.d.ts.map +1 -0
- package/dist/cycle-budget/model.js +20 -0
- package/dist/cycle-budget/model.js.map +1 -0
- package/dist/cycle-budget/queries.d.ts +27 -0
- package/dist/cycle-budget/queries.d.ts.map +1 -0
- package/dist/cycle-budget/queries.js +175 -0
- package/dist/cycle-budget/queries.js.map +1 -0
- package/dist/database/database.d.ts +1 -1
- package/dist/database/database.d.ts.map +1 -1
- package/dist/database/local-sqlite.d.ts +32 -12
- package/dist/database/local-sqlite.d.ts.map +1 -1
- package/dist/database/local-sqlite.js +113 -14
- package/dist/database/local-sqlite.js.map +1 -1
- package/dist/database/schema.d.ts +254 -9
- package/dist/database/schema.d.ts.map +1 -1
- package/dist/database/schema.js +65 -12
- package/dist/database/schema.js.map +1 -1
- package/dist/engine/engine.d.ts +55 -0
- package/dist/engine/engine.d.ts.map +1 -0
- package/dist/{engine.js → engine/engine.js} +44 -30
- package/dist/engine/engine.js.map +1 -0
- package/dist/engine/error.d.ts +37 -0
- package/dist/engine/error.d.ts.map +1 -0
- package/dist/engine/error.js +41 -0
- package/dist/engine/error.js.map +1 -0
- package/dist/engine/lifecycle.d.ts +112 -0
- package/dist/engine/lifecycle.d.ts.map +1 -0
- package/dist/engine/lifecycle.js +132 -0
- package/dist/engine/lifecycle.js.map +1 -0
- package/dist/engine/shutdown.d.ts +12 -0
- package/dist/engine/shutdown.d.ts.map +1 -0
- package/dist/engine/shutdown.js +10 -0
- package/dist/engine/shutdown.js.map +1 -0
- package/dist/engine/submission.d.ts +58 -0
- package/dist/engine/submission.d.ts.map +1 -0
- package/dist/engine/submission.js +54 -0
- package/dist/engine/submission.js.map +1 -0
- package/dist/item-projection/{service.d.ts → item-projection.d.ts} +6 -6
- package/dist/item-projection/item-projection.d.ts.map +1 -0
- package/dist/item-projection/{service.js → item-projection.js} +7 -5
- package/dist/item-projection/item-projection.js.map +1 -0
- package/dist/item-projection/model.d.ts +2 -5
- package/dist/item-projection/model.d.ts.map +1 -1
- package/dist/item-projection/model.js +5 -5
- package/dist/item-projection/model.js.map +1 -1
- package/dist/loop-control/loop-control.d.ts +21 -0
- package/dist/loop-control/loop-control.d.ts.map +1 -0
- package/dist/{loop-control.js → loop-control/loop-control.js} +7 -5
- package/dist/loop-control/loop-control.js.map +1 -0
- package/dist/loop-control/model.d.ts +10 -0
- package/dist/loop-control/model.d.ts.map +1 -0
- package/dist/loop-control/model.js +9 -0
- package/dist/loop-control/model.js.map +1 -0
- package/dist/repository-label-projection/model.d.ts +12 -3
- package/dist/repository-label-projection/model.d.ts.map +1 -1
- package/dist/repository-label-projection/model.js +14 -5
- package/dist/repository-label-projection/model.js.map +1 -1
- package/dist/repository-label-projection/{service.d.ts → repository-label-projection.d.ts} +5 -5
- package/dist/repository-label-projection/repository-label-projection.d.ts.map +1 -0
- package/dist/repository-label-projection/{service.js → repository-label-projection.js} +17 -7
- package/dist/repository-label-projection/repository-label-projection.js.map +1 -0
- package/dist/run-reader/model.d.ts +46 -0
- package/dist/run-reader/model.d.ts.map +1 -0
- package/dist/run-reader/model.js +44 -0
- package/dist/run-reader/model.js.map +1 -0
- package/dist/run-reader/run-reader.d.ts +29 -0
- package/dist/run-reader/run-reader.d.ts.map +1 -0
- package/dist/run-reader/run-reader.js +44 -0
- package/dist/run-reader/run-reader.js.map +1 -0
- package/dist/step-executor.d.ts +34 -12
- package/dist/step-executor.d.ts.map +1 -1
- package/dist/step-executor.js +22 -5
- package/dist/step-executor.js.map +1 -1
- package/dist/store/codec.d.ts +104 -40
- package/dist/store/codec.d.ts.map +1 -1
- package/dist/store/codec.js +66 -44
- package/dist/store/codec.js.map +1 -1
- package/dist/store/queries.d.ts +47 -15
- package/dist/store/queries.d.ts.map +1 -1
- package/dist/store/queries.js +74 -39
- package/dist/store/queries.js.map +1 -1
- package/dist/store/store.d.ts +44 -26
- package/dist/store/store.d.ts.map +1 -1
- package/dist/store/store.js +185 -127
- package/dist/store/store.js.map +1 -1
- package/dist/transcript.d.ts +64 -0
- package/dist/transcript.d.ts.map +1 -0
- package/dist/transcript.js +59 -0
- package/dist/transcript.js.map +1 -0
- package/dist/workflow/admission.d.ts +13 -0
- package/dist/workflow/admission.d.ts.map +1 -0
- package/dist/workflow/admission.js +55 -0
- package/dist/workflow/admission.js.map +1 -0
- package/dist/workflow/command.d.ts +13 -0
- package/dist/workflow/command.d.ts.map +1 -0
- package/dist/workflow/command.js +17 -0
- package/dist/workflow/command.js.map +1 -0
- package/dist/workflow/workflow.d.ts +18 -0
- package/dist/workflow/workflow.d.ts.map +1 -0
- package/dist/workflow/workflow.js +108 -0
- package/dist/workflow/workflow.js.map +1 -0
- package/drizzle/20260903091940_queued_approved_runs/migration.sql +3 -0
- package/drizzle/20260903091940_queued_approved_runs/snapshot.json +1147 -0
- package/drizzle/20260905150403_item_cycle_budgets/migration.sql +58 -0
- package/drizzle/20260905150403_item_cycle_budgets/snapshot.json +1417 -0
- package/drizzle/20260905174009_item_run_history/migration.sql +1 -0
- package/drizzle/20260905174009_item_run_history/snapshot.json +1431 -0
- package/package.json +41 -5
- package/dist/cursor/model.d.ts +0 -5
- package/dist/cursor/model.d.ts.map +0 -1
- package/dist/cursor/model.js +0 -4
- package/dist/cursor/model.js.map +0 -1
- package/dist/cursor/store.d.ts.map +0 -1
- package/dist/cursor/store.js.map +0 -1
- package/dist/engine.d.ts +0 -39
- package/dist/engine.d.ts.map +0 -1
- package/dist/engine.js.map +0 -1
- package/dist/index.d.ts +0 -20
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js +0 -20
- package/dist/index.js.map +0 -1
- package/dist/item-projection/service.d.ts.map +0 -1
- package/dist/item-projection/service.js.map +0 -1
- package/dist/loop-control.d.ts +0 -16
- package/dist/loop-control.d.ts.map +0 -1
- package/dist/loop-control.js.map +0 -1
- package/dist/model.d.ts +0 -185
- package/dist/model.d.ts.map +0 -1
- package/dist/model.js +0 -174
- package/dist/model.js.map +0 -1
- package/dist/repository-label-projection/service.d.ts.map +0 -1
- package/dist/repository-label-projection/service.js.map +0 -1
- package/dist/run-reader.d.ts +0 -20
- package/dist/run-reader.d.ts.map +0 -1
- package/dist/run-reader.js +0 -19
- package/dist/run-reader.js.map +0 -1
- package/dist/workflow.d.ts +0 -14
- package/dist/workflow.d.ts.map +0 -1
- package/dist/workflow.js +0 -105
- 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
|
-
/**
|
|
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,
|
|
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/
|
|
4
|
-
import { ItemProjectionReader, ItemProjectionWriter } from "../item-projection/
|
|
5
|
-
import { RepositoryLabelProjectionReader, RepositoryLabelProjectionWriter } from "../repository-label-projection/
|
|
6
|
-
import { LoopControl } from "../loop-control.ts";
|
|
7
|
-
import {
|
|
8
|
-
import {
|
|
9
|
-
import {
|
|
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
|
-
/**
|
|
14
|
-
export declare const layer: (instanceDirectory: InstanceDirectory) => Layer.Layer<CursorStore | ItemProjectionReader | ItemProjectionWriter | LoopControl | RepositoryLabelProjectionReader | RepositoryLabelProjectionWriter | RunEngine | RunReader, RunEngineError, StepExecutor>;
|
|
15
|
-
/**
|
|
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,
|
|
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/
|
|
9
|
-
import { ItemProjectionReader, ItemProjectionWriter } from "../item-projection/
|
|
10
|
-
import { RepositoryLabelProjectionReader, RepositoryLabelProjectionWriter, } from "../repository-label-projection/
|
|
11
|
-
import { LoopControl } from "../loop-control.js";
|
|
12
|
-
import {
|
|
13
|
-
import {
|
|
14
|
-
import {
|
|
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
|
-
|
|
22
|
-
|
|
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
|
-
/**
|
|
39
|
+
/** The local runtime on `.usine/runtime.sqlite`. */
|
|
39
40
|
export const layer = (instanceDirectory) => layerWithDatabase(localSqliteLayer(instanceDirectory)).pipe(Layer.provide(NodeServices.layer));
|
|
40
|
-
/**
|
|
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":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AACrD,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,KAAK,aAAa,MAAM,gCAAgC,CAAC;AAChE,OAAO,EAAE,OAAO,EAAE,MAAM,yCAAyC,CAAC;AAClE,OAAO,EAAE,GAAG,EAAE,MAAM,aAAa,CAAC;AAClC,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;
|
|
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<"
|
|
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<"
|
|
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
|
-
/**
|
|
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
|
-
/**
|
|
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<"
|
|
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
|
-
/**
|
|
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<"
|
|
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
|
|
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
|
-
/**
|
|
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":"
|
|
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"}
|