@blockspool/sqlite 0.2.0 → 0.3.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/package.json +4 -4
- package/dist/adapter.d.ts +0 -94
- package/dist/adapter.d.ts.map +0 -1
- package/dist/adapter.js +0 -508
- package/dist/adapter.js.map +0 -1
- package/dist/index.d.ts +0 -14
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js +0 -14
- package/dist/index.js.map +0 -1
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@blockspool/sqlite",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.3.1",
|
|
4
4
|
"description": "SQLite adapter for BlockSpool - zero-config local mode",
|
|
5
5
|
"author": "BlockSpool",
|
|
6
6
|
"homepage": "https://blockspool.com",
|
|
@@ -38,14 +38,14 @@
|
|
|
38
38
|
],
|
|
39
39
|
"license": "Apache-2.0",
|
|
40
40
|
"dependencies": {
|
|
41
|
-
"@blockspool/core": "^0.
|
|
42
|
-
"better-sqlite3": "^
|
|
41
|
+
"@blockspool/core": "^0.3.0",
|
|
42
|
+
"better-sqlite3": "^12.6.2"
|
|
43
43
|
},
|
|
44
44
|
"devDependencies": {
|
|
45
45
|
"@types/better-sqlite3": "^7.6.11",
|
|
46
46
|
"typescript": "^5.7.3"
|
|
47
47
|
},
|
|
48
48
|
"peerDependencies": {
|
|
49
|
-
"@blockspool/core": ">=0.
|
|
49
|
+
"@blockspool/core": ">=0.3.0"
|
|
50
50
|
}
|
|
51
51
|
}
|
package/dist/adapter.d.ts
DELETED
|
@@ -1,94 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* SQLite adapter implementation
|
|
3
|
-
*
|
|
4
|
-
* Uses better-sqlite3 for synchronous, fast SQLite operations.
|
|
5
|
-
* This is the zero-config adapter for individual developers.
|
|
6
|
-
*
|
|
7
|
-
* Key differences from Postgres:
|
|
8
|
-
* - Synchronous API (better-sqlite3 is sync)
|
|
9
|
-
* - WAL mode for better concurrency
|
|
10
|
-
* - Single-writer pattern (SQLite limitation)
|
|
11
|
-
* - No RETURNING * in older SQLite versions
|
|
12
|
-
* - Different parameter placeholder syntax ($1 → ?)
|
|
13
|
-
*/
|
|
14
|
-
import type { DatabaseAdapter, DatabaseConfig, MigrationResult, QueryLogConfig, QueryResult, QueryStats, TransactionClient } from '@blockspool/core/db';
|
|
15
|
-
/**
|
|
16
|
-
* SQLite adapter for BlockSpool
|
|
17
|
-
*
|
|
18
|
-
* Features:
|
|
19
|
-
* - WAL mode for better concurrency
|
|
20
|
-
* - Auto-creates database directory
|
|
21
|
-
* - Converts Postgres-style $1 params to SQLite ? params
|
|
22
|
-
* - Embedded migrations
|
|
23
|
-
*/
|
|
24
|
-
export declare class SQLiteAdapter implements DatabaseAdapter {
|
|
25
|
-
private config;
|
|
26
|
-
readonly name = "sqlite";
|
|
27
|
-
private db;
|
|
28
|
-
private dbPath;
|
|
29
|
-
private logConfig;
|
|
30
|
-
private stats;
|
|
31
|
-
constructor(config: DatabaseConfig);
|
|
32
|
-
get connected(): boolean;
|
|
33
|
-
/**
|
|
34
|
-
* Parse database path from various URL formats
|
|
35
|
-
*/
|
|
36
|
-
private parsePath;
|
|
37
|
-
/**
|
|
38
|
-
* Ensure the database directory exists
|
|
39
|
-
*/
|
|
40
|
-
private ensureDirectory;
|
|
41
|
-
/**
|
|
42
|
-
* Get or create the database connection
|
|
43
|
-
*/
|
|
44
|
-
private getDb;
|
|
45
|
-
/**
|
|
46
|
-
* Convert Postgres-style $1, $2 params to SQLite ? params
|
|
47
|
-
*
|
|
48
|
-
* Note: This is a simple conversion that assumes params are used in order.
|
|
49
|
-
* For complex queries with out-of-order params, this would need enhancement.
|
|
50
|
-
*/
|
|
51
|
-
private convertParams;
|
|
52
|
-
/**
|
|
53
|
-
* Extract query type for statistics
|
|
54
|
-
*/
|
|
55
|
-
private getQueryType;
|
|
56
|
-
/**
|
|
57
|
-
* Update statistics after a query
|
|
58
|
-
*/
|
|
59
|
-
private recordStats;
|
|
60
|
-
/**
|
|
61
|
-
* Log query if configured
|
|
62
|
-
*/
|
|
63
|
-
private logQuery;
|
|
64
|
-
query<T = Record<string, unknown>>(text: string, params?: unknown[]): Promise<QueryResult<T>>;
|
|
65
|
-
/**
|
|
66
|
-
* Extract table name from INSERT/UPDATE/DELETE statement
|
|
67
|
-
*/
|
|
68
|
-
private extractTableName;
|
|
69
|
-
withTransaction<T>(fn: (client: TransactionClient) => Promise<T>): Promise<T>;
|
|
70
|
-
migrate(options?: {
|
|
71
|
-
dryRun?: boolean;
|
|
72
|
-
target?: string;
|
|
73
|
-
verbose?: boolean;
|
|
74
|
-
}): Promise<MigrationResult>;
|
|
75
|
-
/**
|
|
76
|
-
* Get core migrations for SQLite schema
|
|
77
|
-
*
|
|
78
|
-
* These are simplified versions of the Postgres migrations,
|
|
79
|
-
* adapted for SQLite syntax.
|
|
80
|
-
*/
|
|
81
|
-
private getCoreMigrations;
|
|
82
|
-
close(): Promise<void>;
|
|
83
|
-
configureLogging(config: Partial<QueryLogConfig>): void;
|
|
84
|
-
getStats(): Readonly<QueryStats>;
|
|
85
|
-
resetStats(): void;
|
|
86
|
-
}
|
|
87
|
-
/**
|
|
88
|
-
* Create a SQLite adapter
|
|
89
|
-
*
|
|
90
|
-
* @param config - Database configuration
|
|
91
|
-
* @returns Initialized SQLite adapter
|
|
92
|
-
*/
|
|
93
|
-
export declare function createSQLiteAdapter(config: DatabaseConfig): Promise<SQLiteAdapter>;
|
|
94
|
-
//# sourceMappingURL=adapter.d.ts.map
|
package/dist/adapter.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"adapter.d.ts","sourceRoot":"","sources":["../src/adapter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAKH,OAAO,KAAK,EACV,eAAe,EACf,cAAc,EACd,eAAe,EACf,cAAc,EACd,WAAW,EACX,UAAU,EACV,iBAAiB,EAClB,MAAM,qBAAqB,CAAC;AAY7B;;;;;;;;GAQG;AACH,qBAAa,aAAc,YAAW,eAAe;IAgBvC,OAAO,CAAC,MAAM;IAf1B,QAAQ,CAAC,IAAI,YAAY;IACzB,OAAO,CAAC,EAAE,CAAkC;IAC5C,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,SAAS,CAIf;IACF,OAAO,CAAC,KAAK,CAKX;gBAEkB,MAAM,EAAE,cAAc;IAK1C,IAAI,SAAS,IAAI,OAAO,CAEvB;IAED;;OAEG;IACH,OAAO,CAAC,SAAS;IAWjB;;OAEG;IACH,OAAO,CAAC,eAAe;IAOvB;;OAEG;IACH,OAAO,CAAC,KAAK;IAmBb;;;;;OAKG;IACH,OAAO,CAAC,aAAa;IAmBrB;;OAEG;IACH,OAAO,CAAC,YAAY;IAepB;;OAEG;IACH,OAAO,CAAC,WAAW;IAanB;;OAEG;IACH,OAAO,CAAC,QAAQ;IAaV,KAAK,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACrC,IAAI,EAAE,MAAM,EACZ,MAAM,CAAC,EAAE,OAAO,EAAE,GACjB,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;IA8C1B;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAalB,eAAe,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,MAAM,EAAE,iBAAiB,KAAK,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;IA2B7E,OAAO,CAAC,OAAO,CAAC,EAAE;QACtB,MAAM,CAAC,EAAE,OAAO,CAAC;QACjB,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,OAAO,CAAC,EAAE,OAAO,CAAC;KACnB,GAAG,OAAO,CAAC,eAAe,CAAC;IAyD5B;;;;;OAKG;IACH,OAAO,CAAC,iBAAiB;IA2LnB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAO5B,gBAAgB,CAAC,MAAM,EAAE,OAAO,CAAC,cAAc,CAAC,GAAG,IAAI;IAIvD,QAAQ,IAAI,QAAQ,CAAC,UAAU,CAAC;IAIhC,UAAU,IAAI,IAAI;CAQnB;AAED;;;;;GAKG;AACH,wBAAsB,mBAAmB,CAAC,MAAM,EAAE,cAAc,GAAG,OAAO,CAAC,aAAa,CAAC,CAKxF"}
|
package/dist/adapter.js
DELETED
|
@@ -1,508 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* SQLite adapter implementation
|
|
3
|
-
*
|
|
4
|
-
* Uses better-sqlite3 for synchronous, fast SQLite operations.
|
|
5
|
-
* This is the zero-config adapter for individual developers.
|
|
6
|
-
*
|
|
7
|
-
* Key differences from Postgres:
|
|
8
|
-
* - Synchronous API (better-sqlite3 is sync)
|
|
9
|
-
* - WAL mode for better concurrency
|
|
10
|
-
* - Single-writer pattern (SQLite limitation)
|
|
11
|
-
* - No RETURNING * in older SQLite versions
|
|
12
|
-
* - Different parameter placeholder syntax ($1 → ?)
|
|
13
|
-
*/
|
|
14
|
-
import Database from 'better-sqlite3';
|
|
15
|
-
import * as fs from 'node:fs';
|
|
16
|
-
import * as path from 'node:path';
|
|
17
|
-
/**
|
|
18
|
-
* SQLite adapter for BlockSpool
|
|
19
|
-
*
|
|
20
|
-
* Features:
|
|
21
|
-
* - WAL mode for better concurrency
|
|
22
|
-
* - Auto-creates database directory
|
|
23
|
-
* - Converts Postgres-style $1 params to SQLite ? params
|
|
24
|
-
* - Embedded migrations
|
|
25
|
-
*/
|
|
26
|
-
export class SQLiteAdapter {
|
|
27
|
-
config;
|
|
28
|
-
name = 'sqlite';
|
|
29
|
-
db = null;
|
|
30
|
-
dbPath;
|
|
31
|
-
logConfig = {
|
|
32
|
-
logAll: false,
|
|
33
|
-
slowQueryThresholdMs: 50, // Lower threshold for SQLite (it's faster)
|
|
34
|
-
logParams: false,
|
|
35
|
-
};
|
|
36
|
-
stats = {
|
|
37
|
-
totalQueries: 0,
|
|
38
|
-
totalErrors: 0,
|
|
39
|
-
totalDurationMs: 0,
|
|
40
|
-
byType: {},
|
|
41
|
-
};
|
|
42
|
-
constructor(config) {
|
|
43
|
-
this.config = config;
|
|
44
|
-
// Parse database path from URL
|
|
45
|
-
this.dbPath = this.parsePath(config.url);
|
|
46
|
-
}
|
|
47
|
-
get connected() {
|
|
48
|
-
return this.db !== null && this.db.open;
|
|
49
|
-
}
|
|
50
|
-
/**
|
|
51
|
-
* Parse database path from various URL formats
|
|
52
|
-
*/
|
|
53
|
-
parsePath(url) {
|
|
54
|
-
if (url.startsWith('sqlite://')) {
|
|
55
|
-
return url.slice('sqlite://'.length);
|
|
56
|
-
}
|
|
57
|
-
if (url.startsWith('file:')) {
|
|
58
|
-
return url.slice('file:'.length);
|
|
59
|
-
}
|
|
60
|
-
// Assume it's a direct path
|
|
61
|
-
return url;
|
|
62
|
-
}
|
|
63
|
-
/**
|
|
64
|
-
* Ensure the database directory exists
|
|
65
|
-
*/
|
|
66
|
-
ensureDirectory() {
|
|
67
|
-
const dir = path.dirname(this.dbPath);
|
|
68
|
-
if (!fs.existsSync(dir)) {
|
|
69
|
-
fs.mkdirSync(dir, { recursive: true });
|
|
70
|
-
}
|
|
71
|
-
}
|
|
72
|
-
/**
|
|
73
|
-
* Get or create the database connection
|
|
74
|
-
*/
|
|
75
|
-
getDb() {
|
|
76
|
-
if (!this.db) {
|
|
77
|
-
this.ensureDirectory();
|
|
78
|
-
this.db = new Database(this.dbPath);
|
|
79
|
-
// Enable WAL mode for better concurrency
|
|
80
|
-
if (this.config.walMode !== false) {
|
|
81
|
-
this.db.pragma('journal_mode = WAL');
|
|
82
|
-
}
|
|
83
|
-
// Other performance pragmas
|
|
84
|
-
this.db.pragma('synchronous = NORMAL');
|
|
85
|
-
this.db.pragma('cache_size = -64000'); // 64MB cache
|
|
86
|
-
this.db.pragma('foreign_keys = ON');
|
|
87
|
-
}
|
|
88
|
-
return this.db;
|
|
89
|
-
}
|
|
90
|
-
/**
|
|
91
|
-
* Convert Postgres-style $1, $2 params to SQLite ? params
|
|
92
|
-
*
|
|
93
|
-
* Note: This is a simple conversion that assumes params are used in order.
|
|
94
|
-
* For complex queries with out-of-order params, this would need enhancement.
|
|
95
|
-
*/
|
|
96
|
-
convertParams(text, params) {
|
|
97
|
-
if (!params || params.length === 0) {
|
|
98
|
-
return { sql: text, values: [] };
|
|
99
|
-
}
|
|
100
|
-
// Replace $1, $2, etc. with ?
|
|
101
|
-
// Track which params are used and in what order
|
|
102
|
-
const usedParams = [];
|
|
103
|
-
const sql = text.replace(/\$(\d+)/g, (_, num) => {
|
|
104
|
-
usedParams.push(parseInt(num, 10) - 1);
|
|
105
|
-
return '?';
|
|
106
|
-
});
|
|
107
|
-
// Reorder params based on usage
|
|
108
|
-
const values = usedParams.map((idx) => params[idx]);
|
|
109
|
-
return { sql, values };
|
|
110
|
-
}
|
|
111
|
-
/**
|
|
112
|
-
* Extract query type for statistics
|
|
113
|
-
*/
|
|
114
|
-
getQueryType(text) {
|
|
115
|
-
const trimmed = text.trim().toUpperCase();
|
|
116
|
-
if (trimmed.startsWith('SELECT'))
|
|
117
|
-
return 'SELECT';
|
|
118
|
-
if (trimmed.startsWith('INSERT'))
|
|
119
|
-
return 'INSERT';
|
|
120
|
-
if (trimmed.startsWith('UPDATE'))
|
|
121
|
-
return 'UPDATE';
|
|
122
|
-
if (trimmed.startsWith('DELETE'))
|
|
123
|
-
return 'DELETE';
|
|
124
|
-
if (trimmed.startsWith('BEGIN') || trimmed.startsWith('COMMIT') || trimmed.startsWith('ROLLBACK')) {
|
|
125
|
-
return 'TRANSACTION';
|
|
126
|
-
}
|
|
127
|
-
if (trimmed.startsWith('CREATE') || trimmed.startsWith('ALTER') || trimmed.startsWith('DROP')) {
|
|
128
|
-
return 'DDL';
|
|
129
|
-
}
|
|
130
|
-
return 'OTHER';
|
|
131
|
-
}
|
|
132
|
-
/**
|
|
133
|
-
* Update statistics after a query
|
|
134
|
-
*/
|
|
135
|
-
recordStats(type, durationMs, isError) {
|
|
136
|
-
this.stats.totalQueries++;
|
|
137
|
-
this.stats.totalDurationMs += durationMs;
|
|
138
|
-
if (isError)
|
|
139
|
-
this.stats.totalErrors++;
|
|
140
|
-
if (!this.stats.byType[type]) {
|
|
141
|
-
this.stats.byType[type] = { count: 0, errors: 0, durationMs: 0 };
|
|
142
|
-
}
|
|
143
|
-
this.stats.byType[type].count++;
|
|
144
|
-
this.stats.byType[type].durationMs += durationMs;
|
|
145
|
-
if (isError)
|
|
146
|
-
this.stats.byType[type].errors++;
|
|
147
|
-
}
|
|
148
|
-
/**
|
|
149
|
-
* Log query if configured
|
|
150
|
-
*/
|
|
151
|
-
logQuery(text, params, durationMs) {
|
|
152
|
-
const shouldLog = this.logConfig.logAll || durationMs >= this.logConfig.slowQueryThresholdMs;
|
|
153
|
-
if (shouldLog) {
|
|
154
|
-
const paramInfo = this.logConfig.logParams && params?.length
|
|
155
|
-
? ` params=${JSON.stringify(params)}`
|
|
156
|
-
: '';
|
|
157
|
-
const slowTag = durationMs >= this.logConfig.slowQueryThresholdMs ? ' [SLOW]' : '';
|
|
158
|
-
console.log(`[sqlite]${slowTag} ${durationMs}ms: ${text.slice(0, 100)}${paramInfo}`);
|
|
159
|
-
}
|
|
160
|
-
}
|
|
161
|
-
async query(text, params) {
|
|
162
|
-
const db = this.getDb();
|
|
163
|
-
const queryType = this.getQueryType(text);
|
|
164
|
-
const { sql, values } = this.convertParams(text, params);
|
|
165
|
-
const start = Date.now();
|
|
166
|
-
try {
|
|
167
|
-
let rows = [];
|
|
168
|
-
let rowCount = null;
|
|
169
|
-
// Use run() for INSERT/UPDATE/DELETE, all() for SELECT
|
|
170
|
-
if (queryType === 'SELECT' || text.trim().toUpperCase().includes('RETURNING')) {
|
|
171
|
-
const stmt = db.prepare(sql);
|
|
172
|
-
rows = stmt.all(...values);
|
|
173
|
-
rowCount = rows.length;
|
|
174
|
-
}
|
|
175
|
-
else {
|
|
176
|
-
const stmt = db.prepare(sql);
|
|
177
|
-
const result = stmt.run(...values);
|
|
178
|
-
rowCount = result.changes;
|
|
179
|
-
// Handle RETURNING clause simulation for INSERT
|
|
180
|
-
if (queryType === 'INSERT' && result.lastInsertRowid) {
|
|
181
|
-
// Try to fetch the inserted row if there's a RETURNING clause
|
|
182
|
-
const returningMatch = text.match(/RETURNING\s+(.+?)(?:;|\s*$)/i);
|
|
183
|
-
if (returningMatch) {
|
|
184
|
-
const tableName = this.extractTableName(text);
|
|
185
|
-
if (tableName) {
|
|
186
|
-
const fetchStmt = db.prepare(`SELECT * FROM ${tableName} WHERE rowid = ?`);
|
|
187
|
-
rows = [fetchStmt.get(result.lastInsertRowid)].filter(Boolean);
|
|
188
|
-
}
|
|
189
|
-
}
|
|
190
|
-
}
|
|
191
|
-
}
|
|
192
|
-
const durationMs = Date.now() - start;
|
|
193
|
-
this.recordStats(queryType, durationMs, false);
|
|
194
|
-
this.logQuery(text, params, durationMs);
|
|
195
|
-
return { rows, rowCount };
|
|
196
|
-
}
|
|
197
|
-
catch (error) {
|
|
198
|
-
const durationMs = Date.now() - start;
|
|
199
|
-
this.recordStats(queryType, durationMs, true);
|
|
200
|
-
throw error;
|
|
201
|
-
}
|
|
202
|
-
}
|
|
203
|
-
/**
|
|
204
|
-
* Extract table name from INSERT/UPDATE/DELETE statement
|
|
205
|
-
*/
|
|
206
|
-
extractTableName(sql) {
|
|
207
|
-
const insertMatch = sql.match(/INSERT\s+INTO\s+["']?(\w+)["']?/i);
|
|
208
|
-
if (insertMatch)
|
|
209
|
-
return insertMatch[1];
|
|
210
|
-
const updateMatch = sql.match(/UPDATE\s+["']?(\w+)["']?/i);
|
|
211
|
-
if (updateMatch)
|
|
212
|
-
return updateMatch[1];
|
|
213
|
-
const deleteMatch = sql.match(/DELETE\s+FROM\s+["']?(\w+)["']?/i);
|
|
214
|
-
if (deleteMatch)
|
|
215
|
-
return deleteMatch[1];
|
|
216
|
-
return null;
|
|
217
|
-
}
|
|
218
|
-
async withTransaction(fn) {
|
|
219
|
-
const db = this.getDb();
|
|
220
|
-
// SQLite transactions are synchronous with better-sqlite3
|
|
221
|
-
// But we wrap in async for interface compatibility
|
|
222
|
-
const txClient = {
|
|
223
|
-
query: async (text, params) => {
|
|
224
|
-
return this.query(text, params);
|
|
225
|
-
},
|
|
226
|
-
};
|
|
227
|
-
try {
|
|
228
|
-
db.exec('BEGIN IMMEDIATE'); // IMMEDIATE for write transactions
|
|
229
|
-
const result = await fn(txClient);
|
|
230
|
-
db.exec('COMMIT');
|
|
231
|
-
return result;
|
|
232
|
-
}
|
|
233
|
-
catch (error) {
|
|
234
|
-
db.exec('ROLLBACK');
|
|
235
|
-
throw error;
|
|
236
|
-
}
|
|
237
|
-
}
|
|
238
|
-
async migrate(options) {
|
|
239
|
-
const db = this.getDb();
|
|
240
|
-
// Create migrations table if not exists
|
|
241
|
-
db.exec(`
|
|
242
|
-
CREATE TABLE IF NOT EXISTS _migrations (
|
|
243
|
-
id TEXT PRIMARY KEY,
|
|
244
|
-
checksum TEXT NOT NULL,
|
|
245
|
-
applied_at TEXT NOT NULL DEFAULT (datetime('now'))
|
|
246
|
-
)
|
|
247
|
-
`);
|
|
248
|
-
// For now, run embedded core migrations
|
|
249
|
-
const migrations = this.getCoreMigrations();
|
|
250
|
-
const applied = [];
|
|
251
|
-
const skipped = [];
|
|
252
|
-
for (const migration of migrations) {
|
|
253
|
-
// Check if already applied
|
|
254
|
-
const existing = db.prepare('SELECT id FROM _migrations WHERE id = ?').get(migration.id);
|
|
255
|
-
if (existing) {
|
|
256
|
-
skipped.push(migration.id);
|
|
257
|
-
continue;
|
|
258
|
-
}
|
|
259
|
-
if (options?.dryRun) {
|
|
260
|
-
if (options.verbose) {
|
|
261
|
-
console.log(`[sqlite] Would apply: ${migration.id}`);
|
|
262
|
-
}
|
|
263
|
-
applied.push(migration.id);
|
|
264
|
-
continue;
|
|
265
|
-
}
|
|
266
|
-
// Apply migration
|
|
267
|
-
if (options?.verbose) {
|
|
268
|
-
console.log(`[sqlite] Applying: ${migration.id}`);
|
|
269
|
-
}
|
|
270
|
-
db.exec(migration.up);
|
|
271
|
-
db.prepare('INSERT INTO _migrations (id, checksum) VALUES (?, ?)').run(migration.id, migration.checksum);
|
|
272
|
-
applied.push(migration.id);
|
|
273
|
-
if (options?.target && migration.id === options.target) {
|
|
274
|
-
break;
|
|
275
|
-
}
|
|
276
|
-
}
|
|
277
|
-
return {
|
|
278
|
-
applied,
|
|
279
|
-
skipped,
|
|
280
|
-
dryRun: options?.dryRun ?? false,
|
|
281
|
-
};
|
|
282
|
-
}
|
|
283
|
-
/**
|
|
284
|
-
* Get core migrations for SQLite schema
|
|
285
|
-
*
|
|
286
|
-
* These are simplified versions of the Postgres migrations,
|
|
287
|
-
* adapted for SQLite syntax.
|
|
288
|
-
*/
|
|
289
|
-
getCoreMigrations() {
|
|
290
|
-
return [
|
|
291
|
-
{
|
|
292
|
-
id: '001_initial',
|
|
293
|
-
up: `
|
|
294
|
-
-- Projects table
|
|
295
|
-
CREATE TABLE IF NOT EXISTS projects (
|
|
296
|
-
id TEXT PRIMARY KEY,
|
|
297
|
-
name TEXT NOT NULL,
|
|
298
|
-
repo_url TEXT,
|
|
299
|
-
root_path TEXT NOT NULL,
|
|
300
|
-
created_at TEXT NOT NULL DEFAULT (datetime('now')),
|
|
301
|
-
updated_at TEXT NOT NULL DEFAULT (datetime('now'))
|
|
302
|
-
);
|
|
303
|
-
|
|
304
|
-
-- Tickets table
|
|
305
|
-
CREATE TABLE IF NOT EXISTS tickets (
|
|
306
|
-
id TEXT PRIMARY KEY,
|
|
307
|
-
project_id TEXT NOT NULL REFERENCES projects(id),
|
|
308
|
-
title TEXT NOT NULL,
|
|
309
|
-
description TEXT,
|
|
310
|
-
status TEXT NOT NULL DEFAULT 'backlog',
|
|
311
|
-
priority INTEGER NOT NULL DEFAULT 0,
|
|
312
|
-
shard TEXT,
|
|
313
|
-
category TEXT,
|
|
314
|
-
allowed_paths TEXT, -- JSON array
|
|
315
|
-
forbidden_paths TEXT, -- JSON array
|
|
316
|
-
verification_commands TEXT, -- JSON array
|
|
317
|
-
max_retries INTEGER DEFAULT 3,
|
|
318
|
-
retry_count INTEGER DEFAULT 0,
|
|
319
|
-
created_at TEXT NOT NULL DEFAULT (datetime('now')),
|
|
320
|
-
updated_at TEXT NOT NULL DEFAULT (datetime('now'))
|
|
321
|
-
);
|
|
322
|
-
|
|
323
|
-
CREATE INDEX IF NOT EXISTS idx_tickets_project_status ON tickets(project_id, status);
|
|
324
|
-
CREATE INDEX IF NOT EXISTS idx_tickets_shard ON tickets(shard);
|
|
325
|
-
|
|
326
|
-
-- Runs table
|
|
327
|
-
CREATE TABLE IF NOT EXISTS runs (
|
|
328
|
-
id TEXT PRIMARY KEY,
|
|
329
|
-
ticket_id TEXT REFERENCES tickets(id),
|
|
330
|
-
project_id TEXT NOT NULL REFERENCES projects(id),
|
|
331
|
-
type TEXT NOT NULL DEFAULT 'worker',
|
|
332
|
-
status TEXT NOT NULL DEFAULT 'pending',
|
|
333
|
-
iteration INTEGER NOT NULL DEFAULT 1,
|
|
334
|
-
max_iterations INTEGER NOT NULL DEFAULT 10,
|
|
335
|
-
started_at TEXT,
|
|
336
|
-
completed_at TEXT,
|
|
337
|
-
error TEXT,
|
|
338
|
-
metadata TEXT,
|
|
339
|
-
pr_url TEXT,
|
|
340
|
-
pr_number INTEGER,
|
|
341
|
-
created_at TEXT NOT NULL DEFAULT (datetime('now'))
|
|
342
|
-
);
|
|
343
|
-
|
|
344
|
-
CREATE INDEX IF NOT EXISTS idx_runs_ticket ON runs(ticket_id);
|
|
345
|
-
CREATE INDEX IF NOT EXISTS idx_runs_project ON runs(project_id);
|
|
346
|
-
CREATE INDEX IF NOT EXISTS idx_runs_type ON runs(type);
|
|
347
|
-
|
|
348
|
-
-- Leases table
|
|
349
|
-
CREATE TABLE IF NOT EXISTS leases (
|
|
350
|
-
id TEXT PRIMARY KEY,
|
|
351
|
-
ticket_id TEXT NOT NULL REFERENCES tickets(id),
|
|
352
|
-
run_id TEXT NOT NULL REFERENCES runs(id),
|
|
353
|
-
agent_id TEXT NOT NULL,
|
|
354
|
-
status TEXT NOT NULL DEFAULT 'issued',
|
|
355
|
-
expires_at TEXT NOT NULL,
|
|
356
|
-
heartbeat_at TEXT,
|
|
357
|
-
created_at TEXT NOT NULL DEFAULT (datetime('now'))
|
|
358
|
-
);
|
|
359
|
-
|
|
360
|
-
CREATE INDEX IF NOT EXISTS idx_leases_ticket ON leases(ticket_id);
|
|
361
|
-
CREATE INDEX IF NOT EXISTS idx_leases_status ON leases(status);
|
|
362
|
-
|
|
363
|
-
-- Run events table
|
|
364
|
-
CREATE TABLE IF NOT EXISTS run_events (
|
|
365
|
-
id TEXT PRIMARY KEY,
|
|
366
|
-
run_id TEXT NOT NULL REFERENCES runs(id),
|
|
367
|
-
type TEXT NOT NULL,
|
|
368
|
-
data TEXT, -- JSON
|
|
369
|
-
created_at TEXT NOT NULL DEFAULT (datetime('now'))
|
|
370
|
-
);
|
|
371
|
-
|
|
372
|
-
CREATE INDEX IF NOT EXISTS idx_run_events_run ON run_events(run_id);
|
|
373
|
-
|
|
374
|
-
-- Artifacts table
|
|
375
|
-
CREATE TABLE IF NOT EXISTS artifacts (
|
|
376
|
-
id TEXT PRIMARY KEY,
|
|
377
|
-
run_id TEXT NOT NULL REFERENCES runs(id),
|
|
378
|
-
type TEXT NOT NULL,
|
|
379
|
-
name TEXT NOT NULL,
|
|
380
|
-
content TEXT,
|
|
381
|
-
path TEXT,
|
|
382
|
-
created_at TEXT NOT NULL DEFAULT (datetime('now'))
|
|
383
|
-
);
|
|
384
|
-
|
|
385
|
-
CREATE INDEX IF NOT EXISTS idx_artifacts_run ON artifacts(run_id);
|
|
386
|
-
|
|
387
|
-
-- Learnings table
|
|
388
|
-
CREATE TABLE IF NOT EXISTS learnings (
|
|
389
|
-
id TEXT PRIMARY KEY,
|
|
390
|
-
project_id TEXT NOT NULL REFERENCES projects(id),
|
|
391
|
-
ticket_id TEXT REFERENCES tickets(id),
|
|
392
|
-
run_id TEXT REFERENCES runs(id),
|
|
393
|
-
content TEXT NOT NULL,
|
|
394
|
-
source TEXT NOT NULL,
|
|
395
|
-
promoted INTEGER DEFAULT 0,
|
|
396
|
-
created_at TEXT NOT NULL DEFAULT (datetime('now'))
|
|
397
|
-
);
|
|
398
|
-
|
|
399
|
-
CREATE INDEX IF NOT EXISTS idx_learnings_project ON learnings(project_id);
|
|
400
|
-
`,
|
|
401
|
-
checksum: 'initial-001-v1',
|
|
402
|
-
},
|
|
403
|
-
{
|
|
404
|
-
id: '002_run_steps',
|
|
405
|
-
up: `
|
|
406
|
-
-- Run steps table for QA loop and future step-based runs
|
|
407
|
-
-- Each step is a command/action within a run
|
|
408
|
-
-- Supports retry attempts with full history
|
|
409
|
-
CREATE TABLE IF NOT EXISTS run_steps (
|
|
410
|
-
id TEXT PRIMARY KEY,
|
|
411
|
-
run_id TEXT NOT NULL REFERENCES runs(id) ON DELETE CASCADE,
|
|
412
|
-
|
|
413
|
-
attempt INTEGER NOT NULL DEFAULT 1,
|
|
414
|
-
ordinal INTEGER NOT NULL,
|
|
415
|
-
|
|
416
|
-
name TEXT NOT NULL,
|
|
417
|
-
kind TEXT NOT NULL DEFAULT 'command',
|
|
418
|
-
|
|
419
|
-
status TEXT NOT NULL DEFAULT 'queued',
|
|
420
|
-
|
|
421
|
-
cmd TEXT,
|
|
422
|
-
cwd TEXT,
|
|
423
|
-
timeout_ms INTEGER,
|
|
424
|
-
|
|
425
|
-
exit_code INTEGER,
|
|
426
|
-
signal TEXT,
|
|
427
|
-
|
|
428
|
-
started_at_ms INTEGER,
|
|
429
|
-
ended_at_ms INTEGER,
|
|
430
|
-
duration_ms INTEGER,
|
|
431
|
-
|
|
432
|
-
stdout_path TEXT,
|
|
433
|
-
stderr_path TEXT,
|
|
434
|
-
stdout_bytes INTEGER NOT NULL DEFAULT 0,
|
|
435
|
-
stderr_bytes INTEGER NOT NULL DEFAULT 0,
|
|
436
|
-
stdout_truncated INTEGER NOT NULL DEFAULT 0,
|
|
437
|
-
stderr_truncated INTEGER NOT NULL DEFAULT 0,
|
|
438
|
-
stdout_tail TEXT,
|
|
439
|
-
stderr_tail TEXT,
|
|
440
|
-
|
|
441
|
-
error_message TEXT,
|
|
442
|
-
meta_json TEXT,
|
|
443
|
-
|
|
444
|
-
created_at_ms INTEGER NOT NULL,
|
|
445
|
-
updated_at_ms INTEGER NOT NULL,
|
|
446
|
-
|
|
447
|
-
CONSTRAINT run_steps_status_check CHECK (
|
|
448
|
-
status IN ('queued','running','success','failed','skipped','canceled')
|
|
449
|
-
),
|
|
450
|
-
CONSTRAINT run_steps_kind_check CHECK (
|
|
451
|
-
kind IN ('command','llm_fix','git','internal')
|
|
452
|
-
),
|
|
453
|
-
CONSTRAINT run_steps_stdout_trunc_check CHECK (stdout_truncated IN (0,1)),
|
|
454
|
-
CONSTRAINT run_steps_stderr_trunc_check CHECK (stderr_truncated IN (0,1))
|
|
455
|
-
);
|
|
456
|
-
|
|
457
|
-
-- Unique indexes for data integrity
|
|
458
|
-
CREATE UNIQUE INDEX IF NOT EXISTS run_steps_run_attempt_name_uniq
|
|
459
|
-
ON run_steps(run_id, attempt, name);
|
|
460
|
-
|
|
461
|
-
CREATE UNIQUE INDEX IF NOT EXISTS run_steps_run_attempt_ordinal_uniq
|
|
462
|
-
ON run_steps(run_id, attempt, ordinal);
|
|
463
|
-
|
|
464
|
-
-- Query indexes
|
|
465
|
-
CREATE INDEX IF NOT EXISTS run_steps_run_attempt_idx
|
|
466
|
-
ON run_steps(run_id, attempt);
|
|
467
|
-
|
|
468
|
-
CREATE INDEX IF NOT EXISTS run_steps_run_status_idx
|
|
469
|
-
ON run_steps(run_id, status);
|
|
470
|
-
`,
|
|
471
|
-
checksum: 'run-steps-002-v1',
|
|
472
|
-
},
|
|
473
|
-
];
|
|
474
|
-
}
|
|
475
|
-
async close() {
|
|
476
|
-
if (this.db) {
|
|
477
|
-
this.db.close();
|
|
478
|
-
this.db = null;
|
|
479
|
-
}
|
|
480
|
-
}
|
|
481
|
-
configureLogging(config) {
|
|
482
|
-
this.logConfig = { ...this.logConfig, ...config };
|
|
483
|
-
}
|
|
484
|
-
getStats() {
|
|
485
|
-
return { ...this.stats };
|
|
486
|
-
}
|
|
487
|
-
resetStats() {
|
|
488
|
-
this.stats = {
|
|
489
|
-
totalQueries: 0,
|
|
490
|
-
totalErrors: 0,
|
|
491
|
-
totalDurationMs: 0,
|
|
492
|
-
byType: {},
|
|
493
|
-
};
|
|
494
|
-
}
|
|
495
|
-
}
|
|
496
|
-
/**
|
|
497
|
-
* Create a SQLite adapter
|
|
498
|
-
*
|
|
499
|
-
* @param config - Database configuration
|
|
500
|
-
* @returns Initialized SQLite adapter
|
|
501
|
-
*/
|
|
502
|
-
export async function createSQLiteAdapter(config) {
|
|
503
|
-
const adapter = new SQLiteAdapter(config);
|
|
504
|
-
// Run migrations to ensure schema exists
|
|
505
|
-
await adapter.migrate({ verbose: false });
|
|
506
|
-
return adapter;
|
|
507
|
-
}
|
|
508
|
-
//# sourceMappingURL=adapter.js.map
|
package/dist/adapter.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"adapter.js","sourceRoot":"","sources":["../src/adapter.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
DELETED
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @blockspool/sqlite
|
|
3
|
-
*
|
|
4
|
-
* SQLite adapter for BlockSpool.
|
|
5
|
-
* Use this for zero-config local development.
|
|
6
|
-
*
|
|
7
|
-
* Features:
|
|
8
|
-
* - No setup required - auto-creates database
|
|
9
|
-
* - WAL mode for concurrency
|
|
10
|
-
* - Works offline
|
|
11
|
-
* - Stores data in ~/.blockspool/data.db by default
|
|
12
|
-
*/
|
|
13
|
-
export { SQLiteAdapter, createSQLiteAdapter } from './adapter.js';
|
|
14
|
-
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,aAAa,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC"}
|
package/dist/index.js
DELETED
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @blockspool/sqlite
|
|
3
|
-
*
|
|
4
|
-
* SQLite adapter for BlockSpool.
|
|
5
|
-
* Use this for zero-config local development.
|
|
6
|
-
*
|
|
7
|
-
* Features:
|
|
8
|
-
* - No setup required - auto-creates database
|
|
9
|
-
* - WAL mode for concurrency
|
|
10
|
-
* - Works offline
|
|
11
|
-
* - Stores data in ~/.blockspool/data.db by default
|
|
12
|
-
*/
|
|
13
|
-
export { SQLiteAdapter, createSQLiteAdapter } from './adapter.js';
|
|
14
|
-
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,aAAa,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC"}
|