@grackle-ai/database 0.84.0 → 0.85.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/dist/db.d.ts CHANGED
@@ -1,15 +1,8 @@
1
1
  import Database from "better-sqlite3";
2
2
  import type { BetterSQLite3Database } from "drizzle-orm/better-sqlite3";
3
3
  import * as schema from "./schema.js";
4
- /** Error collected from a migration step that uses try-catch for idempotency. */
5
- export interface MigrationError {
6
- name: string;
7
- error: unknown;
8
- }
9
- /** Result returned by {@link initDatabase}. */
10
- export interface InitDatabaseResult {
11
- migrationErrors: MigrationError[];
12
- }
4
+ /** The highest schema version defined by BASELINE + MIGRATIONS. */
5
+ declare const CURRENT_VERSION: number;
13
6
  /** Raw better-sqlite3 instance. Available after {@link openDatabase} has been called. */
14
7
  declare let sqlite: InstanceType<typeof Database> | undefined;
15
8
  /**
@@ -30,14 +23,16 @@ declare let db: BetterSQLite3Database<typeof schema> & {
30
23
  */
31
24
  export declare function openDatabase(dbPath?: string): void;
32
25
  /**
33
- * Initialize all database tables and run migrations.
26
+ * Initialize all database tables and run any pending migrations.
34
27
  * Call once at startup after {@link openDatabase}, or pass an in-memory
35
28
  * SQLite instance for testing.
36
29
  *
30
+ * Uses `PRAGMA user_version` to track schema versions. Each migration runs
31
+ * exactly once, in order, inside a transaction.
32
+ *
37
33
  * @param sqliteOverride - Optional SQLite instance to use instead of the module-level one.
38
- * @returns Collected migration errors from idempotent try-catch steps.
39
34
  */
40
- export declare function initDatabase(sqliteOverride?: InstanceType<typeof Database>): InitDatabaseResult;
41
- export { sqlite };
35
+ export declare function initDatabase(sqliteOverride?: InstanceType<typeof Database>): void;
36
+ export { sqlite, CURRENT_VERSION };
42
37
  export { db as default };
43
38
  //# sourceMappingURL=db.d.ts.map
package/dist/db.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"db.d.ts","sourceRoot":"","sources":["../src/db.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,gBAAgB,CAAC;AAEtC,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AAKxE,OAAO,KAAK,MAAM,MAAM,aAAa,CAAC;AAEtC,iFAAiF;AACjF,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,OAAO,CAAC;CAChB;AAED,+CAA+C;AAC/C,MAAM,WAAW,kBAAkB;IACjC,eAAe,EAAE,cAAc,EAAE,CAAC;CACnC;AAED,yFAAyF;AACzF,QAAA,IAAI,MAAM,EAAE,YAAY,CAAC,OAAO,QAAQ,CAAC,GAAG,SAAS,CAAC;AAEtD;;;;;GAKG;AACH,QAAA,IAAI,EAAE,EAAG,qBAAqB,CAAC,OAAO,MAAM,CAAC,GAAG;IAC9C,OAAO,EAAE,YAAY,CAAC,OAAO,QAAQ,CAAC,CAAC;CACxC,CAAC;AAEF;;;;;;GAMG;AACH,wBAAgB,YAAY,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAsElD;AAED;;;;;;;GAOG;AACH,wBAAgB,YAAY,CAAC,cAAc,CAAC,EAAE,YAAY,CAAC,OAAO,QAAQ,CAAC,GAAG,kBAAkB,CAkhB/F;AAED,OAAO,EAAE,MAAM,EAAE,CAAC;AAClB,OAAO,EAAE,EAAE,IAAI,OAAO,EAAE,CAAC"}
1
+ {"version":3,"file":"db.d.ts","sourceRoot":"","sources":["../src/db.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,gBAAgB,CAAC;AAEtC,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AAKxE,OAAO,KAAK,MAAM,MAAM,aAAa,CAAC;AA6BtC,mEAAmE;AACnE,QAAA,MAAM,eAAe,EAAE,MAEH,CAAC;AA8CrB,yFAAyF;AACzF,QAAA,IAAI,MAAM,EAAE,YAAY,CAAC,OAAO,QAAQ,CAAC,GAAG,SAAS,CAAC;AAEtD;;;;;GAKG;AACH,QAAA,IAAI,EAAE,EAAG,qBAAqB,CAAC,OAAO,MAAM,CAAC,GAAG;IAC9C,OAAO,EAAE,YAAY,CAAC,OAAO,QAAQ,CAAC,CAAC;CACxC,CAAC;AAEF;;;;;;GAMG;AACH,wBAAgB,YAAY,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAsElD;AAED;;;;;;;;;GASG;AACH,wBAAgB,YAAY,CAAC,cAAc,CAAC,EAAE,YAAY,CAAC,OAAO,QAAQ,CAAC,GAAG,IAAI,CAsMjF;AAED,OAAO,EAAE,MAAM,EAAE,eAAe,EAAE,CAAC;AACnC,OAAO,EAAE,EAAE,IAAI,OAAO,EAAE,CAAC"}
package/dist/db.js CHANGED
@@ -5,6 +5,59 @@ import { mkdirSync } from "node:fs";
5
5
  import { DB_FILENAME } from "@grackle-ai/common";
6
6
  import { grackleHome } from "./paths.js";
7
7
  import * as schema from "./schema.js";
8
+ // ─── Schema Versioning ──────────────────────────────────────
9
+ /**
10
+ * Schema version representing the consolidated baseline.
11
+ * All historical migrations (pre-versioning) are collapsed into this version.
12
+ */
13
+ const BASELINE_VERSION = 1;
14
+ /**
15
+ * Ordered list of versioned migrations.
16
+ * Add new migrations to the end with incrementing version numbers.
17
+ */
18
+ const MIGRATIONS = [
19
+ // Future migrations go here, e.g.:
20
+ // { version: 2, name: "add-foo-to-bar", up: (conn) => { conn.exec("ALTER TABLE ..."); } },
21
+ ];
22
+ /** The highest schema version defined by BASELINE + MIGRATIONS. */
23
+ const CURRENT_VERSION = MIGRATIONS.length > 0
24
+ ? MIGRATIONS[MIGRATIONS.length - 1].version
25
+ : BASELINE_VERSION;
26
+ // ─── Legacy Schema Validation ───────────────────────────────
27
+ /**
28
+ * Columns that must exist in a database to be considered baseline-compatible.
29
+ * These were added at various points during the historical migration sequence.
30
+ */
31
+ const BASELINE_SCHEMA_CHECKS = [
32
+ { table: "sessions", column: "cost_usd" },
33
+ { table: "tasks", column: "schedule_id" },
34
+ { table: "workspaces", column: "working_directory" },
35
+ ];
36
+ /**
37
+ * Verify that an unversioned database has all columns expected by the baseline schema.
38
+ * Throws if tables exist but are missing columns, indicating the database predates
39
+ * historical migrations that have been removed.
40
+ */
41
+ function validateBaselineSchema(conn) {
42
+ const tables = conn
43
+ .prepare("SELECT name FROM sqlite_master WHERE type = 'table' AND name NOT LIKE 'sqlite_%'")
44
+ .all();
45
+ // No tables = fresh install, nothing to validate
46
+ if (tables.length === 0) {
47
+ return;
48
+ }
49
+ for (const { table, column } of BASELINE_SCHEMA_CHECKS) {
50
+ const cols = conn
51
+ .prepare(`PRAGMA table_info(${table})`)
52
+ .all();
53
+ // Table exists but is missing a required column
54
+ if (cols.length > 0 && !cols.some((c) => c.name === column)) {
55
+ throw new Error(`Database schema is too old: table "${table}" is missing column "${column}". ` +
56
+ `Delete your database file and restart to create a fresh one.`);
57
+ }
58
+ }
59
+ }
60
+ // ─── Database Singleton ─────────────────────────────────────
8
61
  /** Raw better-sqlite3 instance. Available after {@link openDatabase} has been called. */
9
62
  let sqlite;
10
63
  /**
@@ -84,66 +137,33 @@ export function openDatabase(dbPath) {
84
137
  db = drizzle(sqlite, { schema });
85
138
  }
86
139
  /**
87
- * Initialize all database tables and run migrations.
140
+ * Initialize all database tables and run any pending migrations.
88
141
  * Call once at startup after {@link openDatabase}, or pass an in-memory
89
142
  * SQLite instance for testing.
90
143
  *
144
+ * Uses `PRAGMA user_version` to track schema versions. Each migration runs
145
+ * exactly once, in order, inside a transaction.
146
+ *
91
147
  * @param sqliteOverride - Optional SQLite instance to use instead of the module-level one.
92
- * @returns Collected migration errors from idempotent try-catch steps.
93
148
  */
94
149
  export function initDatabase(sqliteOverride) {
95
150
  const conn = sqliteOverride ?? sqlite;
96
151
  if (!conn) {
97
152
  throw new Error("Database not initialized. Call openDatabase() first or provide a sqliteOverride.");
98
153
  }
99
- const migrationErrors = [];
100
- /** Check whether an error is an expected idempotent migration failure. */
101
- const isExpectedIdempotencyError = (err) => {
102
- if (!(err instanceof Error)) {
103
- return false;
104
- }
105
- const msg = err.message.toLowerCase();
106
- return (msg.includes("already exists") ||
107
- msg.includes("duplicate column name") ||
108
- msg.includes("no such table") ||
109
- msg.includes("no such column"));
110
- };
111
- /** Run a migration step, collecting expected idempotency errors. */
112
- const tryMigration = (name, fn) => {
113
- try {
114
- fn();
115
- }
116
- catch (error) {
117
- if (isExpectedIdempotencyError(error)) {
118
- migrationErrors.push({ name, error });
119
- }
120
- else {
121
- throw error;
122
- }
123
- }
124
- };
125
- // Migration: rename projects table to workspaces
126
- tryMigration("rename-projects-to-workspaces", () => {
127
- conn.exec("ALTER TABLE projects RENAME TO workspaces");
128
- });
129
- // Migration: rename project_id column to workspace_id on tasks
130
- tryMigration("rename-tasks-project-id", () => {
131
- conn.exec("ALTER TABLE tasks RENAME COLUMN project_id TO workspace_id");
132
- });
133
- // Migration: rename project_id column to workspace_id on findings
134
- tryMigration("rename-findings-project-id", () => {
135
- conn.exec("ALTER TABLE findings RENAME COLUMN project_id TO workspace_id");
136
- });
137
- // Migration: drop old findings index after column rename
138
- tryMigration("drop-idx-findings-project", () => {
139
- conn.exec("DROP INDEX IF EXISTS idx_findings_project");
140
- });
141
- // Migration: rename default_env_id → environment_id on workspaces
142
- // Must run BEFORE the backfill block below which references environment_id.
143
- tryMigration("rename-workspaces-default-env-id", () => {
144
- conn.exec("ALTER TABLE workspaces RENAME COLUMN default_env_id TO environment_id");
145
- });
146
- // Create tables — idempotent, safe to run every startup
154
+ // Check current schema version before creating tables — an ancient database
155
+ // with missing columns would cause index creation to fail with a confusing error.
156
+ const currentVersion = conn.pragma("user_version", { simple: true });
157
+ // Prevent running an older binary against a database upgraded by a newer version.
158
+ if (currentVersion > CURRENT_VERSION) {
159
+ throw new Error(`Database schema version (${currentVersion}) is newer than this application supports (${CURRENT_VERSION}). ` +
160
+ "Please upgrade the application or use a compatible database file.");
161
+ }
162
+ if (currentVersion < BASELINE_VERSION) {
163
+ validateBaselineSchema(conn);
164
+ }
165
+ // Create all tables and indices — IF NOT EXISTS makes this safe for both
166
+ // fresh installs and existing databases.
147
167
  conn.exec(`
148
168
  CREATE TABLE IF NOT EXISTS environments (
149
169
  id TEXT PRIMARY KEY,
@@ -175,7 +195,13 @@ export function initDatabase(sqliteOverride) {
175
195
  end_reason TEXT,
176
196
  error TEXT,
177
197
  task_id TEXT NOT NULL DEFAULT '',
178
- persona_id TEXT NOT NULL DEFAULT ''
198
+ persona_id TEXT NOT NULL DEFAULT '',
199
+ parent_session_id TEXT NOT NULL DEFAULT '',
200
+ pipe_mode TEXT NOT NULL DEFAULT '',
201
+ input_tokens INTEGER NOT NULL DEFAULT 0,
202
+ output_tokens INTEGER NOT NULL DEFAULT 0,
203
+ cost_usd REAL NOT NULL DEFAULT 0,
204
+ sigterm_sent_at TEXT
179
205
  );
180
206
 
181
207
  CREATE TABLE IF NOT EXISTS tokens (
@@ -192,6 +218,8 @@ export function initDatabase(sqliteOverride) {
192
218
  environment_id TEXT NOT NULL DEFAULT '' REFERENCES environments(id),
193
219
  status TEXT NOT NULL DEFAULT 'active',
194
220
  use_worktrees INTEGER NOT NULL DEFAULT 1,
221
+ working_directory TEXT NOT NULL DEFAULT '',
222
+ default_persona_id TEXT NOT NULL DEFAULT '',
195
223
  created_at TEXT NOT NULL DEFAULT (datetime('now')),
196
224
  updated_at TEXT NOT NULL DEFAULT (datetime('now'))
197
225
  );
@@ -239,6 +267,9 @@ export function initDatabase(sqliteOverride) {
239
267
  model TEXT NOT NULL DEFAULT '',
240
268
  max_turns INTEGER NOT NULL DEFAULT 0,
241
269
  mcp_servers TEXT NOT NULL DEFAULT '[]',
270
+ type TEXT NOT NULL DEFAULT 'agent',
271
+ script TEXT NOT NULL DEFAULT '',
272
+ allowed_mcp_tools TEXT NOT NULL DEFAULT '[]',
242
273
  created_at TEXT NOT NULL DEFAULT (datetime('now')),
243
274
  updated_at TEXT NOT NULL DEFAULT (datetime('now'))
244
275
  );
@@ -248,8 +279,6 @@ export function initDatabase(sqliteOverride) {
248
279
  value TEXT NOT NULL
249
280
  );
250
281
 
251
- CREATE INDEX IF NOT EXISTS idx_findings_workspace ON findings(workspace_id);
252
-
253
282
  CREATE TABLE IF NOT EXISTS domain_events (
254
283
  id TEXT PRIMARY KEY,
255
284
  type TEXT NOT NULL,
@@ -257,247 +286,6 @@ export function initDatabase(sqliteOverride) {
257
286
  payload TEXT NOT NULL
258
287
  );
259
288
 
260
- CREATE INDEX IF NOT EXISTS idx_domain_events_type ON domain_events(type);
261
- CREATE INDEX IF NOT EXISTS idx_domain_events_timestamp ON domain_events(timestamp);
262
- `);
263
- // Migration: add powerline_token column if missing (older databases)
264
- tryMigration("add-environments-powerline-token", () => {
265
- conn.exec("ALTER TABLE environments ADD COLUMN powerline_token TEXT NOT NULL DEFAULT ''");
266
- });
267
- // Migration: rename sidecar_token → powerline_token (from older databases)
268
- tryMigration("rename-environments-sidecar-token", () => {
269
- conn.exec("ALTER TABLE environments RENAME COLUMN sidecar_token TO powerline_token");
270
- });
271
- // Migration: backfill NULLs in stage-2 tables from older schemas that lacked NOT NULL
272
- conn.exec(`
273
- UPDATE workspaces SET description = '' WHERE description IS NULL;
274
- UPDATE workspaces SET repo_url = '' WHERE repo_url IS NULL;
275
- UPDATE workspaces SET environment_id = COALESCE(
276
- (SELECT id FROM environments LIMIT 1), ''
277
- ) WHERE environment_id IS NULL OR environment_id = '';
278
- UPDATE workspaces SET status = 'active' WHERE status IS NULL;
279
- UPDATE workspaces SET created_at = datetime('now') WHERE created_at IS NULL;
280
- UPDATE workspaces SET updated_at = datetime('now') WHERE updated_at IS NULL;
281
-
282
- UPDATE tasks SET description = '' WHERE description IS NULL;
283
- UPDATE tasks SET status = 'not_started' WHERE status IS NULL;
284
- UPDATE tasks SET branch = '' WHERE branch IS NULL;
285
- UPDATE tasks SET depends_on = '[]' WHERE depends_on IS NULL;
286
- UPDATE tasks SET created_at = datetime('now') WHERE created_at IS NULL;
287
- UPDATE tasks SET updated_at = datetime('now') WHERE updated_at IS NULL;
288
- UPDATE tasks SET sort_order = 0 WHERE sort_order IS NULL;
289
-
290
- UPDATE findings SET task_id = '' WHERE task_id IS NULL;
291
- UPDATE findings SET session_id = '' WHERE session_id IS NULL;
292
- UPDATE findings SET category = 'general' WHERE category IS NULL;
293
- UPDATE findings SET tags = '[]' WHERE tags IS NULL;
294
- UPDATE findings SET created_at = datetime('now') WHERE created_at IS NULL;
295
- `);
296
- // Migration: add parent_task_id and depth columns if missing (older databases)
297
- tryMigration("add-tasks-parent-task-id", () => {
298
- conn.exec("ALTER TABLE tasks ADD COLUMN parent_task_id TEXT NOT NULL DEFAULT ''");
299
- });
300
- tryMigration("add-tasks-depth", () => {
301
- conn.exec("ALTER TABLE tasks ADD COLUMN depth INTEGER NOT NULL DEFAULT 0");
302
- });
303
- // Migration: add can_decompose column if missing (older databases)
304
- tryMigration("add-tasks-can-decompose", () => {
305
- conn.exec("ALTER TABLE tasks ADD COLUMN can_decompose INTEGER NOT NULL DEFAULT 0");
306
- // Backfill: mark root tasks and tasks with existing children as decomposable
307
- conn.exec(`
308
- UPDATE tasks
309
- SET can_decompose = 1
310
- WHERE parent_task_id IS NULL OR parent_task_id = ''
311
- OR id IN (
312
- SELECT DISTINCT parent_task_id
313
- FROM tasks
314
- WHERE parent_task_id IS NOT NULL AND parent_task_id <> ''
315
- )
316
- `);
317
- });
318
- // Migration: add persona_id column to tasks if missing
319
- tryMigration("add-tasks-persona-id", () => {
320
- conn.exec("ALTER TABLE tasks ADD COLUMN persona_id TEXT NOT NULL DEFAULT ''");
321
- });
322
- // Migration: add task_id column to sessions if missing
323
- tryMigration("add-sessions-task-id", () => {
324
- conn.exec("ALTER TABLE sessions ADD COLUMN task_id TEXT NOT NULL DEFAULT ''");
325
- });
326
- // Migration: add use_worktrees column to workspaces if missing (older databases)
327
- tryMigration("add-workspaces-use-worktrees", () => {
328
- conn.exec("ALTER TABLE workspaces ADD COLUMN use_worktrees INTEGER NOT NULL DEFAULT 1");
329
- });
330
- // Migration: add worktree_base_path column to workspaces if missing (older databases)
331
- // NOTE: column was later renamed to working_directory — see rename-worktree-base-path migration below.
332
- tryMigration("add-workspaces-worktree-base-path", () => {
333
- conn.exec("ALTER TABLE workspaces ADD COLUMN worktree_base_path TEXT NOT NULL DEFAULT ''");
334
- });
335
- // Migration: backfill task_id on existing sessions from tasks.session_id.
336
- // Guard with try/catch since session_id column may have been dropped already.
337
- tryMigration("backfill-sessions-task-id", () => {
338
- conn.exec(`
339
- UPDATE sessions SET task_id = (
340
- SELECT id FROM tasks WHERE tasks.session_id = sessions.id LIMIT 1
341
- ) WHERE task_id = '' AND EXISTS (
342
- SELECT 1 FROM tasks WHERE tasks.session_id = sessions.id
343
- )
344
- `);
345
- });
346
- // Migration: add persona_id column to sessions if missing
347
- tryMigration("add-sessions-persona-id", () => {
348
- conn.exec("ALTER TABLE sessions ADD COLUMN persona_id TEXT NOT NULL DEFAULT ''");
349
- });
350
- // Migration: copy persona_id from tasks to sessions before dropping
351
- tryMigration("copy-persona-id-tasks-to-sessions", () => {
352
- conn.exec(`
353
- UPDATE sessions SET persona_id = (
354
- SELECT persona_id FROM tasks WHERE tasks.session_id = sessions.id LIMIT 1
355
- ) WHERE persona_id = '' AND task_id != ''
356
- `);
357
- });
358
- // Migration: drop columns that moved off the tasks table
359
- tryMigration("drop-tasks-session-id", () => {
360
- conn.exec("ALTER TABLE tasks DROP COLUMN session_id");
361
- });
362
- tryMigration("drop-tasks-env-id", () => {
363
- conn.exec("ALTER TABLE tasks DROP COLUMN env_id");
364
- });
365
- tryMigration("drop-tasks-persona-id", () => {
366
- conn.exec("ALTER TABLE tasks DROP COLUMN persona_id");
367
- });
368
- // Migration: normalize existing started_at values from SQLite datetime('now')
369
- // format (YYYY-MM-DD HH:MM:SS) to ISO 8601 (YYYY-MM-DDTHH:MM:SS.000Z) so
370
- // ordering is consistent with newly inserted rows.
371
- conn.exec(`
372
- UPDATE sessions
373
- SET started_at = replace(started_at, ' ', 'T') || '.000Z'
374
- WHERE started_at NOT LIKE '%T%'
375
- `);
376
- // Migration: normalize task statuses to simplified model
377
- conn.exec(`
378
- UPDATE tasks SET status = 'not_started' WHERE status IN ('pending', 'assigned');
379
- UPDATE tasks SET status = 'complete' WHERE status = 'done';
380
- UPDATE tasks SET status = 'not_started' WHERE status IN ('in_progress', 'waiting_input', 'review');
381
- `);
382
- // Migration: normalize session statuses
383
- conn.exec(`
384
- UPDATE sessions SET status = 'idle' WHERE status = 'waiting_input';
385
- UPDATE sessions SET status = 'interrupted' WHERE status = 'killed';
386
- `);
387
- // Migration: drop stale columns from tasks
388
- tryMigration("drop-tasks-assigned-at", () => {
389
- conn.exec("ALTER TABLE tasks DROP COLUMN assigned_at");
390
- });
391
- tryMigration("drop-tasks-review-notes", () => {
392
- conn.exec("ALTER TABLE tasks DROP COLUMN review_notes");
393
- });
394
- // Index for efficient session-by-task lookups
395
- conn.exec("CREATE INDEX IF NOT EXISTS idx_sessions_task_id ON sessions(task_id)");
396
- // Migration: add default_persona_id to workspaces and tasks
397
- tryMigration("add-workspaces-default-persona-id", () => {
398
- conn.exec("ALTER TABLE workspaces ADD COLUMN default_persona_id TEXT NOT NULL DEFAULT ''");
399
- });
400
- tryMigration("add-tasks-default-persona-id", () => {
401
- conn.exec("ALTER TABLE tasks ADD COLUMN default_persona_id TEXT NOT NULL DEFAULT ''");
402
- });
403
- tryMigration("add-tasks-workpad", () => {
404
- conn.exec("ALTER TABLE tasks ADD COLUMN workpad TEXT NOT NULL DEFAULT ''");
405
- });
406
- // Migration: add type and script columns to personas if missing
407
- tryMigration("add-personas-type", () => {
408
- conn.exec("ALTER TABLE personas ADD COLUMN type TEXT NOT NULL DEFAULT 'agent'");
409
- });
410
- tryMigration("add-personas-script", () => {
411
- conn.exec("ALTER TABLE personas ADD COLUMN script TEXT NOT NULL DEFAULT ''");
412
- });
413
- tryMigration("add-personas-allowed-mcp-tools", () => {
414
- conn.exec("ALTER TABLE personas ADD COLUMN allowed_mcp_tools TEXT NOT NULL DEFAULT '[]'");
415
- });
416
- tryMigration("add-sessions-parent-session-id", () => {
417
- conn.exec("ALTER TABLE sessions ADD COLUMN parent_session_id TEXT NOT NULL DEFAULT ''");
418
- });
419
- tryMigration("add-sessions-pipe-mode", () => {
420
- conn.exec("ALTER TABLE sessions ADD COLUMN pipe_mode TEXT NOT NULL DEFAULT ''");
421
- });
422
- tryMigration("add-sessions-input-tokens", () => {
423
- conn.exec("ALTER TABLE sessions ADD COLUMN input_tokens INTEGER NOT NULL DEFAULT 0");
424
- });
425
- tryMigration("add-sessions-output-tokens", () => {
426
- conn.exec("ALTER TABLE sessions ADD COLUMN output_tokens INTEGER NOT NULL DEFAULT 0");
427
- });
428
- tryMigration("add-sessions-cost-usd", () => {
429
- conn.exec("ALTER TABLE sessions ADD COLUMN cost_usd REAL NOT NULL DEFAULT 0");
430
- });
431
- // Migration: add end_reason column to sessions if missing (older databases)
432
- tryMigration("add-sessions-end-reason", () => {
433
- conn.exec("ALTER TABLE sessions ADD COLUMN end_reason TEXT");
434
- });
435
- // Migration: normalize old session statuses to STOPPED + end_reason
436
- conn.exec(`
437
- UPDATE sessions SET end_reason = 'completed', status = 'stopped'
438
- WHERE status = 'completed';
439
- UPDATE sessions SET end_reason = 'interrupted', status = 'stopped'
440
- WHERE status IN ('failed', 'interrupted');
441
- UPDATE sessions SET end_reason = 'completed', status = 'stopped'
442
- WHERE status = 'hibernating';
443
- `);
444
- // Migration: make workspace_id nullable on tasks.
445
- // SQLite doesn't support ALTER COLUMN, so we recreate the table.
446
- // Guard: only run if the column currently has NOT NULL.
447
- {
448
- const tableInfo = conn.prepare("PRAGMA table_info(tasks)").all();
449
- const workspaceIdCol = tableInfo.find((c) => c.name === "workspace_id");
450
- if (workspaceIdCol?.notnull === 1) {
451
- conn.exec(`
452
- BEGIN;
453
- CREATE TABLE tasks_new (
454
- id TEXT PRIMARY KEY,
455
- workspace_id TEXT REFERENCES workspaces(id),
456
- title TEXT NOT NULL,
457
- description TEXT NOT NULL DEFAULT '',
458
- status TEXT NOT NULL DEFAULT 'not_started',
459
- branch TEXT NOT NULL DEFAULT '',
460
- depends_on TEXT NOT NULL DEFAULT '[]',
461
- started_at TEXT,
462
- completed_at TEXT,
463
- created_at TEXT NOT NULL DEFAULT (datetime('now')),
464
- updated_at TEXT NOT NULL DEFAULT (datetime('now')),
465
- sort_order INTEGER NOT NULL DEFAULT 0,
466
- parent_task_id TEXT NOT NULL DEFAULT '',
467
- depth INTEGER NOT NULL DEFAULT 0,
468
- can_decompose INTEGER NOT NULL DEFAULT 0,
469
- default_persona_id TEXT NOT NULL DEFAULT '',
470
- workpad TEXT NOT NULL DEFAULT '',
471
- schedule_id TEXT NOT NULL DEFAULT ''
472
- );
473
- INSERT INTO tasks_new SELECT
474
- id, workspace_id, title, description, status, branch, depends_on,
475
- started_at, completed_at, created_at, updated_at, sort_order,
476
- parent_task_id, depth, can_decompose, default_persona_id,
477
- COALESCE(workpad, ''),
478
- COALESCE(schedule_id, '')
479
- FROM tasks;
480
- DROP TABLE tasks;
481
- ALTER TABLE tasks_new RENAME TO tasks;
482
- COMMIT;
483
- `);
484
- }
485
- }
486
- // Migration: add index on workspaces.environment_id for efficient lookup
487
- conn.exec("CREATE INDEX IF NOT EXISTS idx_workspaces_environment_id ON workspaces(environment_id)");
488
- tryMigration("add-sessions-sigterm-sent-at", () => {
489
- conn.exec("ALTER TABLE sessions ADD COLUMN sigterm_sent_at TEXT");
490
- });
491
- // Migration: rename worktree_base_path → working_directory on workspaces table (#547)
492
- // Guard: only run if the old column still exists (new databases already have working_directory).
493
- tryMigration("rename-worktree-base-path", () => {
494
- const tableInfo = conn.prepare("PRAGMA table_info(workspaces)").all();
495
- if (tableInfo.some((c) => c.name === "worktree_base_path")) {
496
- conn.exec("ALTER TABLE workspaces RENAME COLUMN worktree_base_path TO working_directory");
497
- }
498
- });
499
- // ─── Schedules table ──────────────────────────────────────
500
- conn.exec(`
501
289
  CREATE TABLE IF NOT EXISTS schedules (
502
290
  id TEXT PRIMARY KEY,
503
291
  title TEXT NOT NULL,
@@ -514,14 +302,40 @@ export function initDatabase(sqliteOverride) {
514
302
  created_at TEXT NOT NULL DEFAULT (datetime('now')),
515
303
  updated_at TEXT NOT NULL DEFAULT (datetime('now'))
516
304
  );
305
+
306
+ CREATE INDEX IF NOT EXISTS idx_findings_workspace ON findings(workspace_id);
307
+ CREATE INDEX IF NOT EXISTS idx_domain_events_type ON domain_events(type);
308
+ CREATE INDEX IF NOT EXISTS idx_domain_events_timestamp ON domain_events(timestamp);
309
+ CREATE INDEX IF NOT EXISTS idx_sessions_task_id ON sessions(task_id);
310
+ CREATE INDEX IF NOT EXISTS idx_workspaces_environment_id ON workspaces(environment_id);
517
311
  CREATE INDEX IF NOT EXISTS idx_schedules_due ON schedules(enabled, next_run_at);
518
312
  `);
519
- // Migration: add schedule_id to tasks table
520
- tryMigration("add-tasks-schedule-id", () => {
521
- conn.exec("ALTER TABLE tasks ADD COLUMN schedule_id TEXT NOT NULL DEFAULT ''");
522
- });
523
- return { migrationErrors };
313
+ // Mark unversioned databases as baseline now that tables are confirmed
314
+ if (currentVersion < BASELINE_VERSION) {
315
+ conn.pragma(`user_version = ${BASELINE_VERSION}`);
316
+ }
317
+ // Run any pending versioned migrations
318
+ for (const migration of MIGRATIONS) {
319
+ if (migration.version <= currentVersion) {
320
+ continue;
321
+ }
322
+ const run = conn.transaction(() => {
323
+ migration.up(conn);
324
+ conn.pragma(`user_version = ${migration.version}`);
325
+ });
326
+ try {
327
+ run();
328
+ }
329
+ catch (error) {
330
+ const label = `Migration v${migration.version} ("${migration.name}") failed`;
331
+ if (error instanceof Error) {
332
+ error.message = `${label}: ${error.message}`;
333
+ throw error;
334
+ }
335
+ throw new Error(`${label}: ${String(error)}`);
336
+ }
337
+ }
524
338
  }
525
- export { sqlite };
339
+ export { sqlite, CURRENT_VERSION };
526
340
  export { db as default };
527
341
  //# sourceMappingURL=db.js.map
package/dist/db.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"db.js","sourceRoot":"","sources":["../src/db.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"db.js","sourceRoot":"","sources":["../src/db.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -4,8 +4,7 @@
4
4
  * Re-exports schema, stores, migrations, and utility modules so consumers
5
5
  * can import everything from a single package entry point.
6
6
  */
7
- export { openDatabase, initDatabase, sqlite, default as db } from "./db.js";
8
- export type { MigrationError, InitDatabaseResult } from "./db.js";
7
+ export { openDatabase, initDatabase, sqlite, CURRENT_VERSION, default as db } from "./db.js";
9
8
  export { seedDatabase } from "./db-seed.js";
10
9
  export * as schema from "./schema.js";
11
10
  export type { EnvironmentRow, NewEnvironment, SessionRow, NewSession, TokenRow, WorkspaceRow, NewWorkspace, TaskRow, NewTask, FindingRow, NewFinding, PersonaRow, NewPersona, ScheduleRow, NewSchedule, } from "./schema.js";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,EAAE,OAAO,IAAI,EAAE,EAAE,MAAM,SAAS,CAAC;AAC5E,YAAY,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAC;AAClE,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAG5C,OAAO,KAAK,MAAM,MAAM,aAAa,CAAC;AACtC,YAAY,EACV,cAAc,EACd,cAAc,EACd,UAAU,EACV,UAAU,EACV,QAAQ,EACR,YAAY,EACZ,YAAY,EACZ,OAAO,EACP,OAAO,EACP,UAAU,EACV,UAAU,EACV,UAAU,EACV,UAAU,EACV,WAAW,EACX,WAAW,GACZ,MAAM,aAAa,CAAC;AAGrB,OAAO,KAAK,YAAY,MAAM,oBAAoB,CAAC;AACnD,OAAO,KAAK,SAAS,MAAM,iBAAiB,CAAC;AAC7C,OAAO,KAAK,cAAc,MAAM,sBAAsB,CAAC;AACvD,OAAO,KAAK,YAAY,MAAM,oBAAoB,CAAC;AACnD,OAAO,KAAK,YAAY,MAAM,oBAAoB,CAAC;AACnD,OAAO,KAAK,aAAa,MAAM,qBAAqB,CAAC;AACrD,OAAO,KAAK,WAAW,MAAM,mBAAmB,CAAC;AACjD,OAAO,KAAK,UAAU,MAAM,kBAAkB,CAAC;AAC/C,OAAO,KAAK,mBAAmB,MAAM,2BAA2B,CAAC;AACjE,OAAO,KAAK,aAAa,MAAM,qBAAqB,CAAC;AAGrD,YAAY,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACxD,YAAY,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AACpD,YAAY,EAAE,wBAAwB,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAC5F,OAAO,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AACjF,OAAO,EACL,eAAe,EACf,mBAAmB,EACnB,mBAAmB,EACnB,6BAA6B,EAC7B,+BAA+B,GAChC,MAAM,2BAA2B,CAAC;AAGnC,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAChD,YAAY,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAGpD,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACzC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,EAAE,eAAe,EAAE,OAAO,IAAI,EAAE,EAAE,MAAM,SAAS,CAAC;AAC7F,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAG5C,OAAO,KAAK,MAAM,MAAM,aAAa,CAAC;AACtC,YAAY,EACV,cAAc,EACd,cAAc,EACd,UAAU,EACV,UAAU,EACV,QAAQ,EACR,YAAY,EACZ,YAAY,EACZ,OAAO,EACP,OAAO,EACP,UAAU,EACV,UAAU,EACV,UAAU,EACV,UAAU,EACV,WAAW,EACX,WAAW,GACZ,MAAM,aAAa,CAAC;AAGrB,OAAO,KAAK,YAAY,MAAM,oBAAoB,CAAC;AACnD,OAAO,KAAK,SAAS,MAAM,iBAAiB,CAAC;AAC7C,OAAO,KAAK,cAAc,MAAM,sBAAsB,CAAC;AACvD,OAAO,KAAK,YAAY,MAAM,oBAAoB,CAAC;AACnD,OAAO,KAAK,YAAY,MAAM,oBAAoB,CAAC;AACnD,OAAO,KAAK,aAAa,MAAM,qBAAqB,CAAC;AACrD,OAAO,KAAK,WAAW,MAAM,mBAAmB,CAAC;AACjD,OAAO,KAAK,UAAU,MAAM,kBAAkB,CAAC;AAC/C,OAAO,KAAK,mBAAmB,MAAM,2BAA2B,CAAC;AACjE,OAAO,KAAK,aAAa,MAAM,qBAAqB,CAAC;AAGrD,YAAY,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACxD,YAAY,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AACpD,YAAY,EAAE,wBAAwB,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAC5F,OAAO,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AACjF,OAAO,EACL,eAAe,EACf,mBAAmB,EACnB,mBAAmB,EACnB,6BAA6B,EAC7B,+BAA+B,GAChC,MAAM,2BAA2B,CAAC;AAGnC,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAChD,YAAY,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAGpD,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACzC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC"}
package/dist/index.js CHANGED
@@ -5,7 +5,7 @@
5
5
  * can import everything from a single package entry point.
6
6
  */
7
7
  // ─── Database Lifecycle ────────────────────────────────────
8
- export { openDatabase, initDatabase, sqlite, default as db } from "./db.js";
8
+ export { openDatabase, initDatabase, sqlite, CURRENT_VERSION, default as db } from "./db.js";
9
9
  export { seedDatabase } from "./db-seed.js";
10
10
  // ─── Schema ────────────────────────────────────────────────
11
11
  export * as schema from "./schema.js";
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,8DAA8D;AAC9D,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,EAAE,OAAO,IAAI,EAAE,EAAE,MAAM,SAAS,CAAC;AAE5E,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAE5C,8DAA8D;AAC9D,OAAO,KAAK,MAAM,MAAM,aAAa,CAAC;AAmBtC,8DAA8D;AAC9D,OAAO,KAAK,YAAY,MAAM,oBAAoB,CAAC;AACnD,OAAO,KAAK,SAAS,MAAM,iBAAiB,CAAC;AAC7C,OAAO,KAAK,cAAc,MAAM,sBAAsB,CAAC;AACvD,OAAO,KAAK,YAAY,MAAM,oBAAoB,CAAC;AACnD,OAAO,KAAK,YAAY,MAAM,oBAAoB,CAAC;AACnD,OAAO,KAAK,aAAa,MAAM,qBAAqB,CAAC;AACrD,OAAO,KAAK,WAAW,MAAM,mBAAmB,CAAC;AACjD,OAAO,KAAK,UAAU,MAAM,kBAAkB,CAAC;AAC/C,OAAO,KAAK,mBAAmB,MAAM,2BAA2B,CAAC;AACjE,OAAO,KAAK,aAAa,MAAM,qBAAqB,CAAC;AAMrD,OAAO,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AACjF,OAAO,EACL,eAAe,EACf,mBAAmB,EACnB,mBAAmB,EACnB,6BAA6B,EAC7B,+BAA+B,GAChC,MAAM,2BAA2B,CAAC;AAEnC,8DAA8D;AAC9D,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAGhD,8DAA8D;AAC9D,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACzC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,8DAA8D;AAC9D,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,EAAE,eAAe,EAAE,OAAO,IAAI,EAAE,EAAE,MAAM,SAAS,CAAC;AAC7F,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAE5C,8DAA8D;AAC9D,OAAO,KAAK,MAAM,MAAM,aAAa,CAAC;AAmBtC,8DAA8D;AAC9D,OAAO,KAAK,YAAY,MAAM,oBAAoB,CAAC;AACnD,OAAO,KAAK,SAAS,MAAM,iBAAiB,CAAC;AAC7C,OAAO,KAAK,cAAc,MAAM,sBAAsB,CAAC;AACvD,OAAO,KAAK,YAAY,MAAM,oBAAoB,CAAC;AACnD,OAAO,KAAK,YAAY,MAAM,oBAAoB,CAAC;AACnD,OAAO,KAAK,aAAa,MAAM,qBAAqB,CAAC;AACrD,OAAO,KAAK,WAAW,MAAM,mBAAmB,CAAC;AACjD,OAAO,KAAK,UAAU,MAAM,kBAAkB,CAAC;AAC/C,OAAO,KAAK,mBAAmB,MAAM,2BAA2B,CAAC;AACjE,OAAO,KAAK,aAAa,MAAM,qBAAqB,CAAC;AAMrD,OAAO,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AACjF,OAAO,EACL,eAAe,EACf,mBAAmB,EACnB,mBAAmB,EACnB,6BAA6B,EAC7B,+BAA+B,GAChC,MAAM,2BAA2B,CAAC;AAEnC,8DAA8D;AAC9D,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAGhD,8DAA8D;AAC9D,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACzC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@grackle-ai/database",
3
- "version": "0.84.0",
3
+ "version": "0.85.0",
4
4
  "description": "SQLite persistence layer for Grackle — schema, stores, and migrations",
5
5
  "license": "MIT",
6
6
  "repository": {
@@ -32,7 +32,7 @@
32
32
  "better-sqlite3": "^11.0.0",
33
33
  "drizzle-orm": "^0.38.0",
34
34
  "uuid": "^11.0.0",
35
- "@grackle-ai/common": "0.84.0"
35
+ "@grackle-ai/common": "0.85.0"
36
36
  },
37
37
  "devDependencies": {
38
38
  "@rushstack/heft": "1.2.7",