@quarry-systems/drift-store-sqlite 0.1.0-alpha.1

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 ADDED
@@ -0,0 +1,128 @@
1
+ # @quarry-systems/mcg-store-sqlite
2
+
3
+ ![Backend Only](https://img.shields.io/badge/runtime-node-green) ![Node >= 18](https://img.shields.io/badge/node-%3E%3D18-blue)
4
+
5
+ SQLite run store adapter for MCG using Drizzle ORM.
6
+
7
+ ## Features
8
+
9
+ - **Local-first**: Perfect for development and testing
10
+ - **Zero-ops**: No database server required
11
+ - **Fast**: In-memory or file-based persistence
12
+ - **Type-safe**: Drizzle ORM with full TypeScript support
13
+ - **Atomic operations**: Event sequencing with DB-side increment
14
+
15
+ ## Installation
16
+
17
+ ```bash
18
+ npm install @quarry-systems/mcg-store-sqlite
19
+ ```
20
+
21
+ ## Usage
22
+
23
+ ```typescript
24
+ import { createSQLiteStore } from '@quarry-systems/mcg-store-sqlite';
25
+
26
+ // In-memory (for testing)
27
+ const store = createSQLiteStore({ filename: ':memory:' });
28
+
29
+ // File-based (for persistence)
30
+ const store = createSQLiteStore({ filename: './data/runs.db' });
31
+
32
+ // Create a run
33
+ const run = await store.createRun({
34
+ graphId: 'my-graph',
35
+ graphVersion: '1.0.0',
36
+ initialContext: { input: 'test' },
37
+ tags: ['test', 'demo']
38
+ });
39
+
40
+ // Append events
41
+ await store.appendEvent(run.id, {
42
+ type: 'node_start',
43
+ nodeId: 'node-1',
44
+ timestamp: Date.now(),
45
+ data: {}
46
+ });
47
+
48
+ // Get run with events
49
+ const runData = await store.getRun(run.id);
50
+ const events = await store.getEvents(run.id);
51
+ ```
52
+
53
+ ### Integration with MCG
54
+
55
+ ```typescript
56
+ import { ManagedCyclicGraph } from '@quarry-systems/managed-cyclic-graph';
57
+ import { createSQLiteStore } from '@quarry-systems/mcg-store-sqlite';
58
+
59
+ // Create store adapter
60
+ const store = createSQLiteStore({ filename: './data/runs.db' });
61
+
62
+ // Build graph with store plugin
63
+ const graph = new ManagedCyclicGraph()
64
+ .use({ services: { store } })
65
+ .node('start', {
66
+ type: 'action',
67
+ action: async (ctx) => {
68
+ console.log('Processing:', ctx.data.input);
69
+ return { processed: true };
70
+ }
71
+ })
72
+ .build();
73
+
74
+ // Run will be persisted automatically
75
+ const result = await graph.run({ input: 'test data' });
76
+
77
+ // Query runs later
78
+ const runs = await store.listRuns({
79
+ graphId: graph.id,
80
+ status: 'completed',
81
+ limit: 10
82
+ });
83
+
84
+ // Get full run history
85
+ const run = await store.getRun(result.runId);
86
+ const events = await store.getEvents(result.runId);
87
+ console.log(`Run ${run.id} had ${events.length} events`);
88
+ ```
89
+
90
+ ## API
91
+
92
+ Implements `RunStoreAdapter` from `@quarry-systems/mcg-contracts`:
93
+
94
+ - `createRun(metadata)` - Create a new run
95
+ - `getRun(runId)` - Get run by ID
96
+ - `updateRunStatus(runId, status, options)` - Update run status
97
+ - `appendEvent(runId, event)` - Append event with atomic sequencing
98
+ - `getEvents(runId, fromSequence?)` - Get events for a run
99
+ - `saveSnapshot(runId, snapshot)` - Save context snapshot
100
+ - `getSnapshot(runId, version)` - Get snapshot by version
101
+ - `getLatestSnapshot(runId)` - Get latest snapshot
102
+ - `listRuns(filters)` - List runs with filtering
103
+ - `deleteRun(runId)` - Delete run and cascade
104
+ - `pruneOldRuns(olderThanMs)` - Delete old completed runs
105
+
106
+ ## Configuration
107
+
108
+ ```typescript
109
+ interface SQLiteStoreConfig {
110
+ /** Path to SQLite database file (use ':memory:' for in-memory) */
111
+ filename: string;
112
+
113
+ /** Enable WAL mode for better concurrency (default: true) */
114
+ walMode?: boolean;
115
+ }
116
+ ```
117
+
118
+ ## Testing
119
+
120
+ ```bash
121
+ npm test
122
+ ```
123
+
124
+ All tests run in-memory with no external dependencies.
125
+
126
+ ## License
127
+
128
+ MIT
package/package.json ADDED
@@ -0,0 +1,40 @@
1
+ {
2
+ "name": "@quarry-systems/drift-store-sqlite",
3
+ "version": "0.1.0-alpha.1",
4
+ "description": "SQLite run store adapter for Drift using Drizzle ORM",
5
+ "main": "./src/index.js",
6
+ "types": "./src/index.d.ts",
7
+ "scripts": {
8
+ "build": "tsc -p .",
9
+ "test": "vitest run",
10
+ "test:watch": "vitest"
11
+ },
12
+ "keywords": [
13
+ "drift",
14
+ "store",
15
+ "sqlite",
16
+ "persistence",
17
+ "backend",
18
+ "node"
19
+ ],
20
+ "author": "Quarry Systems",
21
+ "license": "MIT",
22
+ "engines": {
23
+ "node": ">=18.0.0"
24
+ },
25
+ "browser": false,
26
+ "dependencies": {
27
+ "better-sqlite3": "^11.0.0",
28
+ "drizzle-orm": "^0.38.0"
29
+ },
30
+ "devDependencies": {
31
+ "@types/better-sqlite3": "^7.6.0",
32
+ "typescript": "^5.3.0",
33
+ "vitest": "^2.1.0"
34
+ },
35
+ "files": [
36
+ "dist",
37
+ "src"
38
+ ],
39
+ "type": "commonjs"
40
+ }
package/src/index.d.ts ADDED
@@ -0,0 +1,36 @@
1
+ /**
2
+ * MCG SQLite Run Store Adapter
3
+ *
4
+ * SQLite-based run store using Drizzle ORM.
5
+ * Ideal for local development, testing, and single-node deployments.
6
+ *
7
+ * @packageDocumentation
8
+ */
9
+ import type { RunStoreAdapter } from '@quarry-systems/drift-contracts';
10
+ /**
11
+ * SQLite store configuration
12
+ */
13
+ export interface SQLiteStoreConfig {
14
+ /** Path to SQLite database file (use ':memory:' for in-memory) */
15
+ filename: string;
16
+ /** Enable WAL mode for better concurrency (default: true) */
17
+ walMode?: boolean;
18
+ }
19
+ /**
20
+ * Create a SQLite run store adapter.
21
+ *
22
+ * @example
23
+ * ```typescript
24
+ * // In-memory for testing
25
+ * const store = createSQLiteStore({ filename: ':memory:' });
26
+ *
27
+ * // File-based for persistence
28
+ * const store = createSQLiteStore({ filename: './data/mcg.db' });
29
+ * ```
30
+ */
31
+ export declare function createSQLiteStore(config: SQLiteStoreConfig): RunStoreAdapter & {
32
+ close(): void;
33
+ };
34
+ export { runs, runEvents, runSnapshots } from './schema';
35
+ export type { RunRow, RunEventRow, RunSnapshotRow } from './schema';
36
+ export type { RunStoreAdapter, RunMetadata, RunEvent, RunSnapshot, RunStatus, } from '@quarry-systems/drift-contracts';
package/src/index.js ADDED
@@ -0,0 +1,266 @@
1
+ "use strict";
2
+ /**
3
+ * MCG SQLite Run Store Adapter
4
+ *
5
+ * SQLite-based run store using Drizzle ORM.
6
+ * Ideal for local development, testing, and single-node deployments.
7
+ *
8
+ * @packageDocumentation
9
+ */
10
+ Object.defineProperty(exports, "__esModule", { value: true });
11
+ exports.runSnapshots = exports.runEvents = exports.runs = void 0;
12
+ exports.createSQLiteStore = createSQLiteStore;
13
+ const tslib_1 = require("tslib");
14
+ const better_sqlite3_1 = tslib_1.__importDefault(require("better-sqlite3"));
15
+ const better_sqlite3_2 = require("drizzle-orm/better-sqlite3");
16
+ const drizzle_orm_1 = require("drizzle-orm");
17
+ const schema_1 = require("./schema");
18
+ // ============================================================================
19
+ // Mappers
20
+ // ============================================================================
21
+ function mapRunToMetadata(row) {
22
+ return {
23
+ id: row.id,
24
+ graphId: row.graphId,
25
+ graphVersion: row.graphVersion ?? undefined,
26
+ status: row.status,
27
+ currentNode: row.currentNode ?? undefined,
28
+ eventSeq: row.eventSeq,
29
+ startedAt: row.startedAt,
30
+ updatedAt: row.updatedAt,
31
+ completedAt: row.completedAt ?? undefined,
32
+ error: row.error ? JSON.parse(row.error) : undefined,
33
+ tags: row.tags ? JSON.parse(row.tags) : undefined,
34
+ };
35
+ }
36
+ function mapEventToRunEvent(row) {
37
+ return {
38
+ runId: row.runId,
39
+ sequence: row.sequence,
40
+ schemaVersion: row.schemaVersion,
41
+ type: row.type,
42
+ nodeId: row.nodeId ?? undefined,
43
+ payload: row.payload ? JSON.parse(row.payload) : undefined,
44
+ timestamp: row.timestamp,
45
+ };
46
+ }
47
+ function mapSnapshotToRunSnapshot(row) {
48
+ return {
49
+ runId: row.runId,
50
+ version: row.version,
51
+ nodeId: row.nodeId,
52
+ ctx: JSON.parse(row.ctx),
53
+ timestamp: row.timestamp,
54
+ status: 'running', // TODO: Join with runs table to get actual status
55
+ };
56
+ }
57
+ // ============================================================================
58
+ // Schema Creation
59
+ // ============================================================================
60
+ const CREATE_TABLES_SQL = `
61
+ CREATE TABLE IF NOT EXISTS mcg_runs (
62
+ id TEXT PRIMARY KEY,
63
+ graph_id TEXT NOT NULL,
64
+ graph_version TEXT,
65
+ status TEXT NOT NULL,
66
+ current_node TEXT,
67
+ event_seq INTEGER NOT NULL DEFAULT 0,
68
+ initial_ctx TEXT NOT NULL,
69
+ error TEXT,
70
+ tags TEXT,
71
+ started_at INTEGER NOT NULL,
72
+ updated_at INTEGER NOT NULL,
73
+ completed_at INTEGER
74
+ );
75
+
76
+ CREATE INDEX IF NOT EXISTS mcg_runs_graph_id_idx ON mcg_runs(graph_id);
77
+ CREATE INDEX IF NOT EXISTS mcg_runs_status_idx ON mcg_runs(status);
78
+
79
+ CREATE TABLE IF NOT EXISTS mcg_run_events (
80
+ id TEXT PRIMARY KEY,
81
+ run_id TEXT NOT NULL REFERENCES mcg_runs(id) ON DELETE CASCADE,
82
+ sequence INTEGER NOT NULL,
83
+ schema_version INTEGER NOT NULL DEFAULT 1,
84
+ type TEXT NOT NULL,
85
+ node_id TEXT,
86
+ payload TEXT,
87
+ timestamp INTEGER NOT NULL
88
+ );
89
+
90
+ CREATE INDEX IF NOT EXISTS mcg_run_events_run_seq_idx ON mcg_run_events(run_id, sequence);
91
+ CREATE UNIQUE INDEX IF NOT EXISTS mcg_run_events_run_seq_unique ON mcg_run_events(run_id, sequence);
92
+
93
+ CREATE TABLE IF NOT EXISTS mcg_run_snapshots (
94
+ id TEXT PRIMARY KEY,
95
+ run_id TEXT NOT NULL REFERENCES mcg_runs(id) ON DELETE CASCADE,
96
+ version INTEGER NOT NULL,
97
+ node_id TEXT NOT NULL,
98
+ ctx TEXT NOT NULL,
99
+ timestamp INTEGER NOT NULL
100
+ );
101
+
102
+ CREATE INDEX IF NOT EXISTS mcg_run_snapshots_run_version_idx ON mcg_run_snapshots(run_id, version);
103
+ `;
104
+ // ============================================================================
105
+ // SQLite Store Implementation
106
+ // ============================================================================
107
+ /**
108
+ * Create a SQLite run store adapter.
109
+ *
110
+ * @example
111
+ * ```typescript
112
+ * // In-memory for testing
113
+ * const store = createSQLiteStore({ filename: ':memory:' });
114
+ *
115
+ * // File-based for persistence
116
+ * const store = createSQLiteStore({ filename: './data/mcg.db' });
117
+ * ```
118
+ */
119
+ function createSQLiteStore(config) {
120
+ const sqlite = new better_sqlite3_1.default(config.filename);
121
+ // Enable WAL mode for better concurrency (default: true)
122
+ if (config.walMode !== false) {
123
+ sqlite.pragma('journal_mode = WAL');
124
+ }
125
+ // Enable foreign keys
126
+ sqlite.pragma('foreign_keys = ON');
127
+ // Create tables
128
+ sqlite.exec(CREATE_TABLES_SQL);
129
+ const db = (0, better_sqlite3_2.drizzle)(sqlite);
130
+ return {
131
+ name: 'sqlite',
132
+ async createRun(graphId, initialCtx, options) {
133
+ const id = crypto.randomUUID();
134
+ const now = Date.now();
135
+ const [row] = await db.insert(schema_1.runs).values({
136
+ id,
137
+ graphId,
138
+ graphVersion: options?.graphVersion,
139
+ status: 'pending',
140
+ eventSeq: 0,
141
+ initialCtx: JSON.stringify(initialCtx),
142
+ tags: options?.tags ? JSON.stringify(options.tags) : null,
143
+ startedAt: now,
144
+ updatedAt: now,
145
+ }).returning();
146
+ return mapRunToMetadata(row);
147
+ },
148
+ async getRun(runId) {
149
+ const [row] = await db.select().from(schema_1.runs).where((0, drizzle_orm_1.eq)(schema_1.runs.id, runId));
150
+ return row ? mapRunToMetadata(row) : null;
151
+ },
152
+ async updateRunStatus(runId, status, update) {
153
+ const now = Date.now();
154
+ const isTerminal = ['completed', 'failed', 'cancelled'].includes(status);
155
+ await db.update(schema_1.runs)
156
+ .set({
157
+ status,
158
+ currentNode: update?.currentNode,
159
+ error: update?.error ? JSON.stringify(update.error) : undefined,
160
+ updatedAt: now,
161
+ completedAt: isTerminal ? now : undefined,
162
+ })
163
+ .where((0, drizzle_orm_1.eq)(schema_1.runs.id, runId));
164
+ },
165
+ async appendEvent(runId, event) {
166
+ // Atomic increment using SQL
167
+ const [updated] = await db.update(schema_1.runs)
168
+ .set({
169
+ eventSeq: (0, drizzle_orm_1.sql) `${schema_1.runs.eventSeq} + 1`,
170
+ updatedAt: Date.now(),
171
+ })
172
+ .where((0, drizzle_orm_1.eq)(schema_1.runs.id, runId))
173
+ .returning({ eventSeq: schema_1.runs.eventSeq });
174
+ if (!updated) {
175
+ throw new Error(`Run ${runId} not found`);
176
+ }
177
+ const sequence = updated.eventSeq;
178
+ await db.insert(schema_1.runEvents).values({
179
+ id: crypto.randomUUID(),
180
+ runId,
181
+ sequence,
182
+ schemaVersion: event.schemaVersion,
183
+ type: event.type,
184
+ nodeId: event.nodeId,
185
+ payload: event.payload !== undefined ? JSON.stringify(event.payload) : null,
186
+ timestamp: event.timestamp,
187
+ });
188
+ return sequence;
189
+ },
190
+ async getEvents(runId, fromSequence = 0) {
191
+ const rows = await db.select()
192
+ .from(schema_1.runEvents)
193
+ .where((0, drizzle_orm_1.and)((0, drizzle_orm_1.eq)(schema_1.runEvents.runId, runId), (0, drizzle_orm_1.gte)(schema_1.runEvents.sequence, fromSequence)))
194
+ .orderBy(schema_1.runEvents.sequence);
195
+ return rows.map(mapEventToRunEvent);
196
+ },
197
+ async saveSnapshot(snapshot) {
198
+ await db.insert(schema_1.runSnapshots).values({
199
+ id: crypto.randomUUID(),
200
+ runId: snapshot.runId,
201
+ version: snapshot.version,
202
+ nodeId: snapshot.nodeId,
203
+ ctx: JSON.stringify(snapshot.ctx),
204
+ timestamp: Date.now(),
205
+ });
206
+ },
207
+ async getLatestSnapshot(runId) {
208
+ const [row] = await db.select()
209
+ .from(schema_1.runSnapshots)
210
+ .where((0, drizzle_orm_1.eq)(schema_1.runSnapshots.runId, runId))
211
+ .orderBy((0, drizzle_orm_1.desc)(schema_1.runSnapshots.version))
212
+ .limit(1);
213
+ return row ? mapSnapshotToRunSnapshot(row) : null;
214
+ },
215
+ async getSnapshot(runId, version) {
216
+ const [row] = await db.select()
217
+ .from(schema_1.runSnapshots)
218
+ .where((0, drizzle_orm_1.and)((0, drizzle_orm_1.eq)(schema_1.runSnapshots.runId, runId), (0, drizzle_orm_1.eq)(schema_1.runSnapshots.version, version)));
219
+ return row ? mapSnapshotToRunSnapshot(row) : null;
220
+ },
221
+ async listRuns(options) {
222
+ let query = db.select().from(schema_1.runs);
223
+ const conditions = [];
224
+ if (options?.graphId) {
225
+ conditions.push((0, drizzle_orm_1.eq)(schema_1.runs.graphId, options.graphId));
226
+ }
227
+ if (options?.status) {
228
+ const statuses = Array.isArray(options.status) ? options.status : [options.status];
229
+ conditions.push((0, drizzle_orm_1.inArray)(schema_1.runs.status, statuses));
230
+ }
231
+ if (conditions.length > 0) {
232
+ query = query.where((0, drizzle_orm_1.and)(...conditions));
233
+ }
234
+ query = query.orderBy((0, drizzle_orm_1.desc)(schema_1.runs.startedAt));
235
+ if (options?.limit) {
236
+ query = query.limit(options.limit);
237
+ }
238
+ if (options?.offset) {
239
+ query = query.offset(options.offset);
240
+ }
241
+ const rows = await query;
242
+ return rows.map(mapRunToMetadata);
243
+ },
244
+ async deleteRun(runId) {
245
+ await db.delete(schema_1.runs).where((0, drizzle_orm_1.eq)(schema_1.runs.id, runId));
246
+ },
247
+ async pruneOldRuns(olderThanMs) {
248
+ const cutoff = Date.now() - olderThanMs;
249
+ const result = await db.delete(schema_1.runs)
250
+ .where((0, drizzle_orm_1.and)((0, drizzle_orm_1.inArray)(schema_1.runs.status, ['completed', 'failed', 'cancelled']), (0, drizzle_orm_1.sql) `${schema_1.runs.completedAt} IS NOT NULL AND ${schema_1.runs.completedAt} < ${cutoff}`))
251
+ .returning({ id: schema_1.runs.id });
252
+ return result.length;
253
+ },
254
+ close() {
255
+ sqlite.close();
256
+ },
257
+ };
258
+ }
259
+ // ============================================================================
260
+ // Re-exports
261
+ // ============================================================================
262
+ var schema_2 = require("./schema");
263
+ Object.defineProperty(exports, "runs", { enumerable: true, get: function () { return schema_2.runs; } });
264
+ Object.defineProperty(exports, "runEvents", { enumerable: true, get: function () { return schema_2.runEvents; } });
265
+ Object.defineProperty(exports, "runSnapshots", { enumerable: true, get: function () { return schema_2.runSnapshots; } });
266
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../libs/drift/drift-plugins/mcg-store-sqlite/src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Plugin Manifest for @quarry-systems/mcg-store-sqlite
3
+ *
4
+ * This manifest declares the plugin's metadata, capabilities, and requirements.
5
+ * It enables future security policies, sandboxing, and hosted execution.
6
+ */
7
+ import type { PluginManifest } from '@quarry-systems/drift-contracts';
8
+ export declare const manifest: PluginManifest;
9
+ export default manifest;
@@ -0,0 +1,47 @@
1
+ "use strict";
2
+ /**
3
+ * Plugin Manifest for @quarry-systems/mcg-store-sqlite
4
+ *
5
+ * This manifest declares the plugin's metadata, capabilities, and requirements.
6
+ * It enables future security policies, sandboxing, and hosted execution.
7
+ */
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.manifest = void 0;
10
+ exports.manifest = {
11
+ name: '@quarry-systems/mcg-store-sqlite',
12
+ version: '0.6.0',
13
+ apiVersion: '1.0',
14
+ description: 'SQLite storage plugin for Managed Cyclic Graph (MCG)',
15
+ author: {
16
+ name: 'Quarry Systems',
17
+ email: 'support@quarrysystems.com',
18
+ },
19
+ license: 'ISC',
20
+ type: ['node'],
21
+ capabilities: {
22
+ network: false,
23
+ filesystem: true, // Reads/writes SQLite database files
24
+ secrets: false,
25
+ subprocess: false,
26
+ },
27
+ nodes: [],
28
+ services: [
29
+ {
30
+ id: 'sqliteStore',
31
+ name: 'SQLite Store Service',
32
+ description: 'SQLite-based key-value storage service',
33
+ },
34
+ ],
35
+ peerDependencies: {
36
+ '@quarry-systems/drift-core': '^0.6.0',
37
+ '@quarry-systems/drift-contracts': '^0.6.0',
38
+ },
39
+ keywords: ['drift', 'mcg', 'managed-cyclic-graph', 'plugin', 'storage', 'sqlite', 'database', 'persistence'],
40
+ repository: {
41
+ type: 'git',
42
+ url: 'https://github.com/quarry-systems/quarry-systems',
43
+ directory: 'libs/drift/drift-plugins/mcg-store-sqlite',
44
+ },
45
+ };
46
+ exports.default = exports.manifest;
47
+ //# sourceMappingURL=plugin.manifest.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plugin.manifest.js","sourceRoot":"","sources":["../../../../../../libs/drift/drift-plugins/mcg-store-sqlite/src/plugin.manifest.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;AAIU,QAAA,QAAQ,GAAmB;IACtC,IAAI,EAAE,kCAAkC;IACxC,OAAO,EAAE,OAAO;IAChB,UAAU,EAAE,KAAK;IAEjB,WAAW,EAAE,sDAAsD;IAEnE,MAAM,EAAE;QACN,IAAI,EAAE,gBAAgB;QACtB,KAAK,EAAE,2BAA2B;KACnC;IAED,OAAO,EAAE,KAAK;IAEd,IAAI,EAAE,CAAC,MAAM,CAAC;IAEd,YAAY,EAAE;QACZ,OAAO,EAAE,KAAK;QACd,UAAU,EAAE,IAAI,EAAI,qCAAqC;QACzD,OAAO,EAAE,KAAK;QACd,UAAU,EAAE,KAAK;KAClB;IAED,KAAK,EAAE,EAAE;IAET,QAAQ,EAAE;QACR;YACE,EAAE,EAAE,aAAa;YACjB,IAAI,EAAE,sBAAsB;YAC5B,WAAW,EAAE,wCAAwC;SACtD;KACF;IAED,gBAAgB,EAAE;QAChB,4BAA4B,EAAE,QAAQ;QACtC,iCAAiC,EAAE,QAAQ;KAC5C;IAED,QAAQ,EAAE,CAAC,OAAO,EAAE,KAAK,EAAE,sBAAsB,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE,UAAU,EAAE,aAAa,CAAC;IAE5G,UAAU,EAAE;QACV,IAAI,EAAE,KAAK;QACX,GAAG,EAAE,kDAAkD;QACvD,SAAS,EAAE,2CAA2C;KACvD;CACF,CAAC;AAEF,kBAAe,gBAAQ,CAAC"}
@@ -0,0 +1,508 @@
1
+ /**
2
+ * Drizzle schema for MCG Run Store
3
+ *
4
+ * This schema is designed to work with both SQLite and Postgres.
5
+ * The SQLite version uses better-sqlite3, Postgres uses node-postgres.
6
+ *
7
+ * @packageDocumentation
8
+ */
9
+ export declare const runs: import("drizzle-orm/sqlite-core").SQLiteTableWithColumns<{
10
+ name: "mcg_runs";
11
+ schema: undefined;
12
+ columns: {
13
+ id: import("drizzle-orm/sqlite-core").SQLiteColumn<{
14
+ name: "id";
15
+ tableName: "mcg_runs";
16
+ dataType: "string";
17
+ columnType: "SQLiteText";
18
+ data: string;
19
+ driverParam: string;
20
+ notNull: true;
21
+ hasDefault: false;
22
+ isPrimaryKey: true;
23
+ isAutoincrement: false;
24
+ hasRuntimeDefault: false;
25
+ enumValues: [string, ...string[]];
26
+ baseColumn: never;
27
+ identity: undefined;
28
+ generated: undefined;
29
+ }, {}, {
30
+ length: number | undefined;
31
+ }>;
32
+ graphId: import("drizzle-orm/sqlite-core").SQLiteColumn<{
33
+ name: "graph_id";
34
+ tableName: "mcg_runs";
35
+ dataType: "string";
36
+ columnType: "SQLiteText";
37
+ data: string;
38
+ driverParam: string;
39
+ notNull: true;
40
+ hasDefault: false;
41
+ isPrimaryKey: false;
42
+ isAutoincrement: false;
43
+ hasRuntimeDefault: false;
44
+ enumValues: [string, ...string[]];
45
+ baseColumn: never;
46
+ identity: undefined;
47
+ generated: undefined;
48
+ }, {}, {
49
+ length: number | undefined;
50
+ }>;
51
+ graphVersion: import("drizzle-orm/sqlite-core").SQLiteColumn<{
52
+ name: "graph_version";
53
+ tableName: "mcg_runs";
54
+ dataType: "string";
55
+ columnType: "SQLiteText";
56
+ data: string;
57
+ driverParam: string;
58
+ notNull: false;
59
+ hasDefault: false;
60
+ isPrimaryKey: false;
61
+ isAutoincrement: false;
62
+ hasRuntimeDefault: false;
63
+ enumValues: [string, ...string[]];
64
+ baseColumn: never;
65
+ identity: undefined;
66
+ generated: undefined;
67
+ }, {}, {
68
+ length: number | undefined;
69
+ }>;
70
+ status: import("drizzle-orm/sqlite-core").SQLiteColumn<{
71
+ name: "status";
72
+ tableName: "mcg_runs";
73
+ dataType: "string";
74
+ columnType: "SQLiteText";
75
+ data: string;
76
+ driverParam: string;
77
+ notNull: true;
78
+ hasDefault: false;
79
+ isPrimaryKey: false;
80
+ isAutoincrement: false;
81
+ hasRuntimeDefault: false;
82
+ enumValues: [string, ...string[]];
83
+ baseColumn: never;
84
+ identity: undefined;
85
+ generated: undefined;
86
+ }, {}, {
87
+ length: number | undefined;
88
+ }>;
89
+ currentNode: import("drizzle-orm/sqlite-core").SQLiteColumn<{
90
+ name: "current_node";
91
+ tableName: "mcg_runs";
92
+ dataType: "string";
93
+ columnType: "SQLiteText";
94
+ data: string;
95
+ driverParam: string;
96
+ notNull: false;
97
+ hasDefault: false;
98
+ isPrimaryKey: false;
99
+ isAutoincrement: false;
100
+ hasRuntimeDefault: false;
101
+ enumValues: [string, ...string[]];
102
+ baseColumn: never;
103
+ identity: undefined;
104
+ generated: undefined;
105
+ }, {}, {
106
+ length: number | undefined;
107
+ }>;
108
+ eventSeq: import("drizzle-orm/sqlite-core").SQLiteColumn<{
109
+ name: "event_seq";
110
+ tableName: "mcg_runs";
111
+ dataType: "number";
112
+ columnType: "SQLiteInteger";
113
+ data: number;
114
+ driverParam: number;
115
+ notNull: true;
116
+ hasDefault: true;
117
+ isPrimaryKey: false;
118
+ isAutoincrement: false;
119
+ hasRuntimeDefault: false;
120
+ enumValues: undefined;
121
+ baseColumn: never;
122
+ identity: undefined;
123
+ generated: undefined;
124
+ }, {}, {}>;
125
+ initialCtx: import("drizzle-orm/sqlite-core").SQLiteColumn<{
126
+ name: "initial_ctx";
127
+ tableName: "mcg_runs";
128
+ dataType: "string";
129
+ columnType: "SQLiteText";
130
+ data: string;
131
+ driverParam: string;
132
+ notNull: true;
133
+ hasDefault: false;
134
+ isPrimaryKey: false;
135
+ isAutoincrement: false;
136
+ hasRuntimeDefault: false;
137
+ enumValues: [string, ...string[]];
138
+ baseColumn: never;
139
+ identity: undefined;
140
+ generated: undefined;
141
+ }, {}, {
142
+ length: number | undefined;
143
+ }>;
144
+ error: import("drizzle-orm/sqlite-core").SQLiteColumn<{
145
+ name: "error";
146
+ tableName: "mcg_runs";
147
+ dataType: "string";
148
+ columnType: "SQLiteText";
149
+ data: string;
150
+ driverParam: string;
151
+ notNull: false;
152
+ hasDefault: false;
153
+ isPrimaryKey: false;
154
+ isAutoincrement: false;
155
+ hasRuntimeDefault: false;
156
+ enumValues: [string, ...string[]];
157
+ baseColumn: never;
158
+ identity: undefined;
159
+ generated: undefined;
160
+ }, {}, {
161
+ length: number | undefined;
162
+ }>;
163
+ tags: import("drizzle-orm/sqlite-core").SQLiteColumn<{
164
+ name: "tags";
165
+ tableName: "mcg_runs";
166
+ dataType: "string";
167
+ columnType: "SQLiteText";
168
+ data: string;
169
+ driverParam: string;
170
+ notNull: false;
171
+ hasDefault: false;
172
+ isPrimaryKey: false;
173
+ isAutoincrement: false;
174
+ hasRuntimeDefault: false;
175
+ enumValues: [string, ...string[]];
176
+ baseColumn: never;
177
+ identity: undefined;
178
+ generated: undefined;
179
+ }, {}, {
180
+ length: number | undefined;
181
+ }>;
182
+ startedAt: import("drizzle-orm/sqlite-core").SQLiteColumn<{
183
+ name: "started_at";
184
+ tableName: "mcg_runs";
185
+ dataType: "number";
186
+ columnType: "SQLiteInteger";
187
+ data: number;
188
+ driverParam: number;
189
+ notNull: true;
190
+ hasDefault: false;
191
+ isPrimaryKey: false;
192
+ isAutoincrement: false;
193
+ hasRuntimeDefault: false;
194
+ enumValues: undefined;
195
+ baseColumn: never;
196
+ identity: undefined;
197
+ generated: undefined;
198
+ }, {}, {}>;
199
+ updatedAt: import("drizzle-orm/sqlite-core").SQLiteColumn<{
200
+ name: "updated_at";
201
+ tableName: "mcg_runs";
202
+ dataType: "number";
203
+ columnType: "SQLiteInteger";
204
+ data: number;
205
+ driverParam: number;
206
+ notNull: true;
207
+ hasDefault: false;
208
+ isPrimaryKey: false;
209
+ isAutoincrement: false;
210
+ hasRuntimeDefault: false;
211
+ enumValues: undefined;
212
+ baseColumn: never;
213
+ identity: undefined;
214
+ generated: undefined;
215
+ }, {}, {}>;
216
+ completedAt: import("drizzle-orm/sqlite-core").SQLiteColumn<{
217
+ name: "completed_at";
218
+ tableName: "mcg_runs";
219
+ dataType: "number";
220
+ columnType: "SQLiteInteger";
221
+ data: number;
222
+ driverParam: number;
223
+ notNull: false;
224
+ hasDefault: false;
225
+ isPrimaryKey: false;
226
+ isAutoincrement: false;
227
+ hasRuntimeDefault: false;
228
+ enumValues: undefined;
229
+ baseColumn: never;
230
+ identity: undefined;
231
+ generated: undefined;
232
+ }, {}, {}>;
233
+ };
234
+ dialect: "sqlite";
235
+ }>;
236
+ export declare const runEvents: import("drizzle-orm/sqlite-core").SQLiteTableWithColumns<{
237
+ name: "mcg_run_events";
238
+ schema: undefined;
239
+ columns: {
240
+ id: import("drizzle-orm/sqlite-core").SQLiteColumn<{
241
+ name: "id";
242
+ tableName: "mcg_run_events";
243
+ dataType: "string";
244
+ columnType: "SQLiteText";
245
+ data: string;
246
+ driverParam: string;
247
+ notNull: true;
248
+ hasDefault: false;
249
+ isPrimaryKey: true;
250
+ isAutoincrement: false;
251
+ hasRuntimeDefault: false;
252
+ enumValues: [string, ...string[]];
253
+ baseColumn: never;
254
+ identity: undefined;
255
+ generated: undefined;
256
+ }, {}, {
257
+ length: number | undefined;
258
+ }>;
259
+ runId: import("drizzle-orm/sqlite-core").SQLiteColumn<{
260
+ name: "run_id";
261
+ tableName: "mcg_run_events";
262
+ dataType: "string";
263
+ columnType: "SQLiteText";
264
+ data: string;
265
+ driverParam: string;
266
+ notNull: true;
267
+ hasDefault: false;
268
+ isPrimaryKey: false;
269
+ isAutoincrement: false;
270
+ hasRuntimeDefault: false;
271
+ enumValues: [string, ...string[]];
272
+ baseColumn: never;
273
+ identity: undefined;
274
+ generated: undefined;
275
+ }, {}, {
276
+ length: number | undefined;
277
+ }>;
278
+ sequence: import("drizzle-orm/sqlite-core").SQLiteColumn<{
279
+ name: "sequence";
280
+ tableName: "mcg_run_events";
281
+ dataType: "number";
282
+ columnType: "SQLiteInteger";
283
+ data: number;
284
+ driverParam: number;
285
+ notNull: true;
286
+ hasDefault: false;
287
+ isPrimaryKey: false;
288
+ isAutoincrement: false;
289
+ hasRuntimeDefault: false;
290
+ enumValues: undefined;
291
+ baseColumn: never;
292
+ identity: undefined;
293
+ generated: undefined;
294
+ }, {}, {}>;
295
+ schemaVersion: import("drizzle-orm/sqlite-core").SQLiteColumn<{
296
+ name: "schema_version";
297
+ tableName: "mcg_run_events";
298
+ dataType: "number";
299
+ columnType: "SQLiteInteger";
300
+ data: number;
301
+ driverParam: number;
302
+ notNull: true;
303
+ hasDefault: true;
304
+ isPrimaryKey: false;
305
+ isAutoincrement: false;
306
+ hasRuntimeDefault: false;
307
+ enumValues: undefined;
308
+ baseColumn: never;
309
+ identity: undefined;
310
+ generated: undefined;
311
+ }, {}, {}>;
312
+ type: import("drizzle-orm/sqlite-core").SQLiteColumn<{
313
+ name: "type";
314
+ tableName: "mcg_run_events";
315
+ dataType: "string";
316
+ columnType: "SQLiteText";
317
+ data: string;
318
+ driverParam: string;
319
+ notNull: true;
320
+ hasDefault: false;
321
+ isPrimaryKey: false;
322
+ isAutoincrement: false;
323
+ hasRuntimeDefault: false;
324
+ enumValues: [string, ...string[]];
325
+ baseColumn: never;
326
+ identity: undefined;
327
+ generated: undefined;
328
+ }, {}, {
329
+ length: number | undefined;
330
+ }>;
331
+ nodeId: import("drizzle-orm/sqlite-core").SQLiteColumn<{
332
+ name: "node_id";
333
+ tableName: "mcg_run_events";
334
+ dataType: "string";
335
+ columnType: "SQLiteText";
336
+ data: string;
337
+ driverParam: string;
338
+ notNull: false;
339
+ hasDefault: false;
340
+ isPrimaryKey: false;
341
+ isAutoincrement: false;
342
+ hasRuntimeDefault: false;
343
+ enumValues: [string, ...string[]];
344
+ baseColumn: never;
345
+ identity: undefined;
346
+ generated: undefined;
347
+ }, {}, {
348
+ length: number | undefined;
349
+ }>;
350
+ payload: import("drizzle-orm/sqlite-core").SQLiteColumn<{
351
+ name: "payload";
352
+ tableName: "mcg_run_events";
353
+ dataType: "string";
354
+ columnType: "SQLiteText";
355
+ data: string;
356
+ driverParam: string;
357
+ notNull: false;
358
+ hasDefault: false;
359
+ isPrimaryKey: false;
360
+ isAutoincrement: false;
361
+ hasRuntimeDefault: false;
362
+ enumValues: [string, ...string[]];
363
+ baseColumn: never;
364
+ identity: undefined;
365
+ generated: undefined;
366
+ }, {}, {
367
+ length: number | undefined;
368
+ }>;
369
+ timestamp: import("drizzle-orm/sqlite-core").SQLiteColumn<{
370
+ name: "timestamp";
371
+ tableName: "mcg_run_events";
372
+ dataType: "number";
373
+ columnType: "SQLiteInteger";
374
+ data: number;
375
+ driverParam: number;
376
+ notNull: true;
377
+ hasDefault: false;
378
+ isPrimaryKey: false;
379
+ isAutoincrement: false;
380
+ hasRuntimeDefault: false;
381
+ enumValues: undefined;
382
+ baseColumn: never;
383
+ identity: undefined;
384
+ generated: undefined;
385
+ }, {}, {}>;
386
+ };
387
+ dialect: "sqlite";
388
+ }>;
389
+ export declare const runSnapshots: import("drizzle-orm/sqlite-core").SQLiteTableWithColumns<{
390
+ name: "mcg_run_snapshots";
391
+ schema: undefined;
392
+ columns: {
393
+ id: import("drizzle-orm/sqlite-core").SQLiteColumn<{
394
+ name: "id";
395
+ tableName: "mcg_run_snapshots";
396
+ dataType: "string";
397
+ columnType: "SQLiteText";
398
+ data: string;
399
+ driverParam: string;
400
+ notNull: true;
401
+ hasDefault: false;
402
+ isPrimaryKey: true;
403
+ isAutoincrement: false;
404
+ hasRuntimeDefault: false;
405
+ enumValues: [string, ...string[]];
406
+ baseColumn: never;
407
+ identity: undefined;
408
+ generated: undefined;
409
+ }, {}, {
410
+ length: number | undefined;
411
+ }>;
412
+ runId: import("drizzle-orm/sqlite-core").SQLiteColumn<{
413
+ name: "run_id";
414
+ tableName: "mcg_run_snapshots";
415
+ dataType: "string";
416
+ columnType: "SQLiteText";
417
+ data: string;
418
+ driverParam: string;
419
+ notNull: true;
420
+ hasDefault: false;
421
+ isPrimaryKey: false;
422
+ isAutoincrement: false;
423
+ hasRuntimeDefault: false;
424
+ enumValues: [string, ...string[]];
425
+ baseColumn: never;
426
+ identity: undefined;
427
+ generated: undefined;
428
+ }, {}, {
429
+ length: number | undefined;
430
+ }>;
431
+ version: import("drizzle-orm/sqlite-core").SQLiteColumn<{
432
+ name: "version";
433
+ tableName: "mcg_run_snapshots";
434
+ dataType: "number";
435
+ columnType: "SQLiteInteger";
436
+ data: number;
437
+ driverParam: number;
438
+ notNull: true;
439
+ hasDefault: false;
440
+ isPrimaryKey: false;
441
+ isAutoincrement: false;
442
+ hasRuntimeDefault: false;
443
+ enumValues: undefined;
444
+ baseColumn: never;
445
+ identity: undefined;
446
+ generated: undefined;
447
+ }, {}, {}>;
448
+ nodeId: import("drizzle-orm/sqlite-core").SQLiteColumn<{
449
+ name: "node_id";
450
+ tableName: "mcg_run_snapshots";
451
+ dataType: "string";
452
+ columnType: "SQLiteText";
453
+ data: string;
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
+ length: number | undefined;
466
+ }>;
467
+ ctx: import("drizzle-orm/sqlite-core").SQLiteColumn<{
468
+ name: "ctx";
469
+ tableName: "mcg_run_snapshots";
470
+ dataType: "string";
471
+ columnType: "SQLiteText";
472
+ data: string;
473
+ driverParam: string;
474
+ notNull: true;
475
+ hasDefault: false;
476
+ isPrimaryKey: false;
477
+ isAutoincrement: false;
478
+ hasRuntimeDefault: false;
479
+ enumValues: [string, ...string[]];
480
+ baseColumn: never;
481
+ identity: undefined;
482
+ generated: undefined;
483
+ }, {}, {
484
+ length: number | undefined;
485
+ }>;
486
+ timestamp: import("drizzle-orm/sqlite-core").SQLiteColumn<{
487
+ name: "timestamp";
488
+ tableName: "mcg_run_snapshots";
489
+ dataType: "number";
490
+ columnType: "SQLiteInteger";
491
+ data: number;
492
+ driverParam: number;
493
+ notNull: true;
494
+ hasDefault: false;
495
+ isPrimaryKey: false;
496
+ isAutoincrement: false;
497
+ hasRuntimeDefault: false;
498
+ enumValues: undefined;
499
+ baseColumn: never;
500
+ identity: undefined;
501
+ generated: undefined;
502
+ }, {}, {}>;
503
+ };
504
+ dialect: "sqlite";
505
+ }>;
506
+ export type RunRow = typeof runs.$inferSelect;
507
+ export type RunEventRow = typeof runEvents.$inferSelect;
508
+ export type RunSnapshotRow = typeof runSnapshots.$inferSelect;
package/src/schema.js ADDED
@@ -0,0 +1,53 @@
1
+ "use strict";
2
+ /**
3
+ * Drizzle schema for MCG Run Store
4
+ *
5
+ * This schema is designed to work with both SQLite and Postgres.
6
+ * The SQLite version uses better-sqlite3, Postgres uses node-postgres.
7
+ *
8
+ * @packageDocumentation
9
+ */
10
+ Object.defineProperty(exports, "__esModule", { value: true });
11
+ exports.runSnapshots = exports.runEvents = exports.runs = void 0;
12
+ const sqlite_core_1 = require("drizzle-orm/sqlite-core");
13
+ exports.runs = (0, sqlite_core_1.sqliteTable)('mcg_runs', {
14
+ id: (0, sqlite_core_1.text)('id').primaryKey(),
15
+ graphId: (0, sqlite_core_1.text)('graph_id').notNull(),
16
+ graphVersion: (0, sqlite_core_1.text)('graph_version'),
17
+ status: (0, sqlite_core_1.text)('status').notNull(),
18
+ currentNode: (0, sqlite_core_1.text)('current_node'),
19
+ eventSeq: (0, sqlite_core_1.integer)('event_seq').notNull().default(0),
20
+ initialCtx: (0, sqlite_core_1.text)('initial_ctx').notNull(), // JSON string
21
+ error: (0, sqlite_core_1.text)('error'), // JSON string
22
+ tags: (0, sqlite_core_1.text)('tags'), // JSON string
23
+ startedAt: (0, sqlite_core_1.integer)('started_at').notNull(), // Unix timestamp ms
24
+ updatedAt: (0, sqlite_core_1.integer)('updated_at').notNull(), // Unix timestamp ms
25
+ completedAt: (0, sqlite_core_1.integer)('completed_at'), // Unix timestamp ms
26
+ }, (table) => ({
27
+ graphIdIdx: (0, sqlite_core_1.index)('mcg_runs_graph_id_idx').on(table.graphId),
28
+ statusIdx: (0, sqlite_core_1.index)('mcg_runs_status_idx').on(table.status),
29
+ }));
30
+ exports.runEvents = (0, sqlite_core_1.sqliteTable)('mcg_run_events', {
31
+ id: (0, sqlite_core_1.text)('id').primaryKey(),
32
+ runId: (0, sqlite_core_1.text)('run_id').notNull().references(() => exports.runs.id, { onDelete: 'cascade' }),
33
+ sequence: (0, sqlite_core_1.integer)('sequence').notNull(),
34
+ schemaVersion: (0, sqlite_core_1.integer)('schema_version').notNull().default(1),
35
+ type: (0, sqlite_core_1.text)('type').notNull(),
36
+ nodeId: (0, sqlite_core_1.text)('node_id'),
37
+ payload: (0, sqlite_core_1.text)('payload'), // JSON string
38
+ timestamp: (0, sqlite_core_1.integer)('timestamp').notNull(), // Unix timestamp ms
39
+ }, (table) => ({
40
+ runIdSeqIdx: (0, sqlite_core_1.index)('mcg_run_events_run_seq_idx').on(table.runId, table.sequence),
41
+ runIdSeqUnique: (0, sqlite_core_1.uniqueIndex)('mcg_run_events_run_seq_unique').on(table.runId, table.sequence),
42
+ }));
43
+ exports.runSnapshots = (0, sqlite_core_1.sqliteTable)('mcg_run_snapshots', {
44
+ id: (0, sqlite_core_1.text)('id').primaryKey(),
45
+ runId: (0, sqlite_core_1.text)('run_id').notNull().references(() => exports.runs.id, { onDelete: 'cascade' }),
46
+ version: (0, sqlite_core_1.integer)('version').notNull(),
47
+ nodeId: (0, sqlite_core_1.text)('node_id').notNull(),
48
+ ctx: (0, sqlite_core_1.text)('ctx').notNull(), // JSON string
49
+ timestamp: (0, sqlite_core_1.integer)('timestamp').notNull(), // Unix timestamp ms
50
+ }, (table) => ({
51
+ runIdVersionIdx: (0, sqlite_core_1.index)('mcg_run_snapshots_run_version_idx').on(table.runId, table.version),
52
+ }));
53
+ //# sourceMappingURL=schema.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema.js","sourceRoot":"","sources":["../../../../../../libs/drift/drift-plugins/mcg-store-sqlite/src/schema.ts"],"names":[],"mappings":"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"}