@stackguide/mcp-server 3.3.0 → 3.8.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.
Files changed (133) hide show
  1. package/README.md +259 -10
  2. package/dist/config/persistence.d.ts +16 -0
  3. package/dist/config/persistence.d.ts.map +1 -1
  4. package/dist/config/persistence.js +53 -0
  5. package/dist/config/persistence.js.map +1 -1
  6. package/dist/handlers/config.d.ts +1 -8
  7. package/dist/handlers/config.d.ts.map +1 -1
  8. package/dist/handlers/config.js +7 -1
  9. package/dist/handlers/config.js.map +1 -1
  10. package/dist/handlers/context.d.ts +1 -5
  11. package/dist/handlers/context.d.ts.map +1 -1
  12. package/dist/handlers/context.js +7 -1
  13. package/dist/handlers/context.js.map +1 -1
  14. package/dist/handlers/cursor.d.ts +1 -7
  15. package/dist/handlers/cursor.d.ts.map +1 -1
  16. package/dist/handlers/cursor.js +7 -1
  17. package/dist/handlers/cursor.js.map +1 -1
  18. package/dist/handlers/custom-rule.d.ts +1 -11
  19. package/dist/handlers/custom-rule.d.ts.map +1 -1
  20. package/dist/handlers/custom-rule.js +7 -1
  21. package/dist/handlers/custom-rule.js.map +1 -1
  22. package/dist/handlers/docs.d.ts +1 -8
  23. package/dist/handlers/docs.d.ts.map +1 -1
  24. package/dist/handlers/docs.js +7 -1
  25. package/dist/handlers/docs.js.map +1 -1
  26. package/dist/handlers/generate.d.ts +1 -13
  27. package/dist/handlers/generate.d.ts.map +1 -1
  28. package/dist/handlers/generate.js +6 -3
  29. package/dist/handlers/generate.js.map +1 -1
  30. package/dist/handlers/health.d.ts +1 -8
  31. package/dist/handlers/health.d.ts.map +1 -1
  32. package/dist/handlers/health.js +11 -3
  33. package/dist/handlers/health.js.map +1 -1
  34. package/dist/handlers/help.d.ts +1 -5
  35. package/dist/handlers/help.d.ts.map +1 -1
  36. package/dist/handlers/help.js +7 -1
  37. package/dist/handlers/help.js.map +1 -1
  38. package/dist/handlers/knowledge.d.ts +1 -8
  39. package/dist/handlers/knowledge.d.ts.map +1 -1
  40. package/dist/handlers/knowledge.js +7 -1
  41. package/dist/handlers/knowledge.js.map +1 -1
  42. package/dist/handlers/prompts.d.ts +31 -0
  43. package/dist/handlers/prompts.d.ts.map +1 -0
  44. package/dist/handlers/prompts.js +225 -0
  45. package/dist/handlers/prompts.js.map +1 -0
  46. package/dist/handlers/resources.d.ts +27 -0
  47. package/dist/handlers/resources.d.ts.map +1 -0
  48. package/dist/handlers/resources.js +210 -0
  49. package/dist/handlers/resources.js.map +1 -0
  50. package/dist/handlers/review.d.ts.map +1 -1
  51. package/dist/handlers/review.js +18 -1
  52. package/dist/handlers/review.js.map +1 -1
  53. package/dist/handlers/rules.d.ts +1 -9
  54. package/dist/handlers/rules.d.ts.map +1 -1
  55. package/dist/handlers/rules.js +7 -1
  56. package/dist/handlers/rules.js.map +1 -1
  57. package/dist/index.d.ts +4 -2
  58. package/dist/index.d.ts.map +1 -1
  59. package/dist/index.js +29 -419
  60. package/dist/index.js.map +1 -1
  61. package/dist/router/index.d.ts +69 -0
  62. package/dist/router/index.d.ts.map +1 -0
  63. package/dist/router/index.js +151 -0
  64. package/dist/router/index.js.map +1 -0
  65. package/dist/services/ast/analyzer.d.ts +55 -0
  66. package/dist/services/ast/analyzer.d.ts.map +1 -0
  67. package/dist/services/ast/analyzer.js +268 -0
  68. package/dist/services/ast/analyzer.js.map +1 -0
  69. package/dist/services/ast/index.d.ts +10 -0
  70. package/dist/services/ast/index.d.ts.map +1 -0
  71. package/dist/services/ast/index.js +12 -0
  72. package/dist/services/ast/index.js.map +1 -0
  73. package/dist/services/ast/rules.d.ts +13 -0
  74. package/dist/services/ast/rules.d.ts.map +1 -0
  75. package/dist/services/ast/rules.js +358 -0
  76. package/dist/services/ast/rules.js.map +1 -0
  77. package/dist/services/ast/treeSitterParser.d.ts +54 -0
  78. package/dist/services/ast/treeSitterParser.d.ts.map +1 -0
  79. package/dist/services/ast/treeSitterParser.js +394 -0
  80. package/dist/services/ast/treeSitterParser.js.map +1 -0
  81. package/dist/services/ast/types.d.ts +167 -0
  82. package/dist/services/ast/types.d.ts.map +1 -0
  83. package/dist/services/ast/types.js +35 -0
  84. package/dist/services/ast/types.js.map +1 -0
  85. package/dist/services/codeAnalyzer.d.ts.map +1 -1
  86. package/dist/services/codeAnalyzer.js +43 -3
  87. package/dist/services/codeAnalyzer.js.map +1 -1
  88. package/dist/services/httpClient.d.ts +45 -0
  89. package/dist/services/httpClient.d.ts.map +1 -0
  90. package/dist/services/httpClient.js +309 -0
  91. package/dist/services/httpClient.js.map +1 -0
  92. package/dist/services/intelligence/projectFs.d.ts +11 -0
  93. package/dist/services/intelligence/projectFs.d.ts.map +1 -0
  94. package/dist/services/intelligence/projectFs.js +30 -0
  95. package/dist/services/intelligence/projectFs.js.map +1 -0
  96. package/dist/services/projectFs.d.ts +85 -0
  97. package/dist/services/projectFs.d.ts.map +1 -0
  98. package/dist/services/projectFs.js +287 -0
  99. package/dist/services/projectFs.js.map +1 -0
  100. package/dist/services/rulesEngine.d.ts +255 -0
  101. package/dist/services/rulesEngine.d.ts.map +1 -0
  102. package/dist/services/rulesEngine.js +483 -0
  103. package/dist/services/rulesEngine.js.map +1 -0
  104. package/dist/services/webDocumentation.d.ts +9 -0
  105. package/dist/services/webDocumentation.d.ts.map +1 -1
  106. package/dist/services/webDocumentation.js +144 -1
  107. package/dist/services/webDocumentation.js.map +1 -1
  108. package/dist/storage/index.d.ts +7 -0
  109. package/dist/storage/index.d.ts.map +1 -0
  110. package/dist/storage/index.js +7 -0
  111. package/dist/storage/index.js.map +1 -0
  112. package/dist/storage/sqlite.d.ts +92 -0
  113. package/dist/storage/sqlite.d.ts.map +1 -0
  114. package/dist/storage/sqlite.js +471 -0
  115. package/dist/storage/sqlite.js.map +1 -0
  116. package/dist/storage/types.d.ts +147 -0
  117. package/dist/storage/types.d.ts.map +1 -0
  118. package/dist/storage/types.js +13 -0
  119. package/dist/storage/types.js.map +1 -0
  120. package/dist/utils/logger.d.ts +11 -2
  121. package/dist/utils/logger.d.ts.map +1 -1
  122. package/dist/utils/logger.js +30 -2
  123. package/dist/utils/logger.js.map +1 -1
  124. package/dist/utils/validation.d.ts +1 -1
  125. package/dist/validation/index.d.ts +8 -0
  126. package/dist/validation/index.d.ts.map +1 -0
  127. package/dist/validation/index.js +19 -0
  128. package/dist/validation/index.js.map +1 -0
  129. package/dist/validation/schemas.d.ts +341 -0
  130. package/dist/validation/schemas.d.ts.map +1 -0
  131. package/dist/validation/schemas.js +244 -0
  132. package/dist/validation/schemas.js.map +1 -0
  133. package/package.json +9 -2
@@ -0,0 +1,471 @@
1
+ /**
2
+ * SQLite Storage Implementation
3
+ * Persistent storage using better-sqlite3
4
+ * @version 3.4.0
5
+ */
6
+ import Database from 'better-sqlite3';
7
+ import * as fs from 'fs';
8
+ import * as path from 'path';
9
+ import * as os from 'os';
10
+ // ============================================================================
11
+ // Helper Functions
12
+ // ============================================================================
13
+ function getDefaultBaseDir() {
14
+ return path.join(os.homedir(), '.stackguide');
15
+ }
16
+ function generateId() {
17
+ return `${Date.now()}-${Math.random().toString(36).substring(2, 11)}`;
18
+ }
19
+ function nowISO() {
20
+ return new Date().toISOString();
21
+ }
22
+ // ============================================================================
23
+ // SQLite Config Store
24
+ // ============================================================================
25
+ export class SQLiteConfigStore {
26
+ db;
27
+ constructor(db) {
28
+ this.db = db;
29
+ }
30
+ async init() {
31
+ this.db.exec(`
32
+ CREATE TABLE IF NOT EXISTS configs (
33
+ id TEXT PRIMARY KEY,
34
+ name TEXT NOT NULL,
35
+ project_type TEXT NOT NULL,
36
+ created_at TEXT NOT NULL,
37
+ updated_at TEXT NOT NULL,
38
+ data TEXT NOT NULL,
39
+ is_active INTEGER DEFAULT 0
40
+ );
41
+
42
+ CREATE INDEX IF NOT EXISTS idx_configs_name ON configs(name);
43
+ CREATE INDEX IF NOT EXISTS idx_configs_active ON configs(is_active);
44
+ `);
45
+ }
46
+ async getActive() {
47
+ const row = this.db.prepare('SELECT * FROM configs WHERE is_active = 1 LIMIT 1').get();
48
+ if (!row)
49
+ return null;
50
+ return {
51
+ id: row.id,
52
+ name: row.name,
53
+ projectType: row.project_type,
54
+ createdAt: row.created_at,
55
+ updatedAt: row.updated_at,
56
+ data: JSON.parse(row.data)
57
+ };
58
+ }
59
+ async setActive(config) {
60
+ const now = nowISO();
61
+ this.db.transaction(() => {
62
+ // Deactivate all
63
+ this.db.prepare('UPDATE configs SET is_active = 0').run();
64
+ // Check if we have an active config to update
65
+ const existing = this.db.prepare('SELECT id FROM configs WHERE name = ?').get('__active__');
66
+ if (existing) {
67
+ this.db.prepare(`
68
+ UPDATE configs
69
+ SET data = ?, updated_at = ?, project_type = ?, is_active = 1
70
+ WHERE id = ?
71
+ `).run(JSON.stringify(config), now, config.projectType || 'react-typescript', existing.id);
72
+ }
73
+ else {
74
+ const id = generateId();
75
+ this.db.prepare(`
76
+ INSERT INTO configs (id, name, project_type, created_at, updated_at, data, is_active)
77
+ VALUES (?, ?, ?, ?, ?, ?, 1)
78
+ `).run(id, '__active__', config.projectType || 'react-typescript', now, now, JSON.stringify(config));
79
+ }
80
+ })();
81
+ }
82
+ async save(name, config) {
83
+ const id = generateId();
84
+ const now = nowISO();
85
+ this.db.prepare(`
86
+ INSERT INTO configs (id, name, project_type, created_at, updated_at, data, is_active)
87
+ VALUES (?, ?, ?, ?, ?, ?, 0)
88
+ `).run(id, name, config.projectType || 'react-typescript', now, now, JSON.stringify(config));
89
+ return {
90
+ id,
91
+ name,
92
+ projectType: (config.projectType || 'react-typescript'),
93
+ createdAt: now,
94
+ updatedAt: now,
95
+ data: config
96
+ };
97
+ }
98
+ async load(id) {
99
+ const row = this.db.prepare('SELECT * FROM configs WHERE id = ?').get(id);
100
+ if (!row)
101
+ return null;
102
+ return {
103
+ id: row.id,
104
+ name: row.name,
105
+ projectType: row.project_type,
106
+ createdAt: row.created_at,
107
+ updatedAt: row.updated_at,
108
+ data: JSON.parse(row.data)
109
+ };
110
+ }
111
+ async list() {
112
+ const rows = this.db.prepare('SELECT * FROM configs WHERE name != ? ORDER BY updated_at DESC').all('__active__');
113
+ return rows.map(row => ({
114
+ id: row.id,
115
+ name: row.name,
116
+ projectType: row.project_type,
117
+ createdAt: row.created_at,
118
+ updatedAt: row.updated_at,
119
+ data: JSON.parse(row.data)
120
+ }));
121
+ }
122
+ async delete(id) {
123
+ const result = this.db.prepare('DELETE FROM configs WHERE id = ?').run(id);
124
+ return result.changes > 0;
125
+ }
126
+ async export(id) {
127
+ const config = await this.load(id);
128
+ if (!config)
129
+ return null;
130
+ return JSON.stringify(config, null, 2);
131
+ }
132
+ async import(json) {
133
+ const parsed = JSON.parse(json);
134
+ const config = parsed.data || parsed;
135
+ const name = parsed.name || `imported-${Date.now()}`;
136
+ return this.save(name, config);
137
+ }
138
+ async close() {
139
+ // Handled by StorageManager
140
+ }
141
+ }
142
+ // ============================================================================
143
+ // SQLite Rule Store
144
+ // ============================================================================
145
+ export class SQLiteRuleStore {
146
+ db;
147
+ constructor(db) {
148
+ this.db = db;
149
+ }
150
+ async init() {
151
+ this.db.exec(`
152
+ CREATE TABLE IF NOT EXISTS rules (
153
+ id TEXT PRIMARY KEY,
154
+ project_type TEXT NOT NULL,
155
+ category TEXT NOT NULL,
156
+ name TEXT NOT NULL,
157
+ content TEXT NOT NULL,
158
+ enabled INTEGER DEFAULT 1,
159
+ source TEXT NOT NULL DEFAULT 'user',
160
+ created_at TEXT NOT NULL,
161
+ updated_at TEXT NOT NULL,
162
+ metadata TEXT
163
+ );
164
+
165
+ CREATE INDEX IF NOT EXISTS idx_rules_project ON rules(project_type);
166
+ CREATE INDEX IF NOT EXISTS idx_rules_category ON rules(category);
167
+ CREATE INDEX IF NOT EXISTS idx_rules_source ON rules(source);
168
+ `);
169
+ }
170
+ async create(rule) {
171
+ const id = `${rule.source}-${rule.projectType}-${rule.category}-${rule.name}`.replace(/\s+/g, '-');
172
+ const now = nowISO();
173
+ this.db.prepare(`
174
+ INSERT OR REPLACE INTO rules
175
+ (id, project_type, category, name, content, enabled, source, created_at, updated_at, metadata)
176
+ VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
177
+ `).run(id, rule.projectType, rule.category, rule.name, rule.content, rule.enabled ? 1 : 0, rule.source, now, now, rule.metadata ? JSON.stringify(rule.metadata) : null);
178
+ return {
179
+ id,
180
+ ...rule,
181
+ createdAt: now,
182
+ updatedAt: now
183
+ };
184
+ }
185
+ async get(id) {
186
+ const row = this.db.prepare('SELECT * FROM rules WHERE id = ?').get(id);
187
+ if (!row)
188
+ return null;
189
+ return this.rowToRule(row);
190
+ }
191
+ async list(filters) {
192
+ let sql = 'SELECT * FROM rules WHERE 1=1';
193
+ const params = [];
194
+ if (filters?.projectType) {
195
+ sql += ' AND project_type = ?';
196
+ params.push(filters.projectType);
197
+ }
198
+ if (filters?.category) {
199
+ sql += ' AND category = ?';
200
+ params.push(filters.category);
201
+ }
202
+ if (filters?.source) {
203
+ sql += ' AND source = ?';
204
+ params.push(filters.source);
205
+ }
206
+ if (filters?.enabled !== undefined) {
207
+ sql += ' AND enabled = ?';
208
+ params.push(filters.enabled ? 1 : 0);
209
+ }
210
+ sql += ' ORDER BY updated_at DESC';
211
+ const rows = this.db.prepare(sql).all(...params);
212
+ return rows.map(row => this.rowToRule(row));
213
+ }
214
+ async update(id, updates) {
215
+ const existing = await this.get(id);
216
+ if (!existing)
217
+ return null;
218
+ const now = nowISO();
219
+ const updated = { ...existing, ...updates, updatedAt: now };
220
+ this.db.prepare(`
221
+ UPDATE rules SET
222
+ project_type = ?,
223
+ category = ?,
224
+ name = ?,
225
+ content = ?,
226
+ enabled = ?,
227
+ source = ?,
228
+ updated_at = ?,
229
+ metadata = ?
230
+ WHERE id = ?
231
+ `).run(updated.projectType, updated.category, updated.name, updated.content, updated.enabled ? 1 : 0, updated.source, now, updated.metadata ? JSON.stringify(updated.metadata) : null, id);
232
+ return updated;
233
+ }
234
+ async delete(id) {
235
+ const result = this.db.prepare('DELETE FROM rules WHERE id = ?').run(id);
236
+ return result.changes > 0;
237
+ }
238
+ async setEnabled(id, enabled) {
239
+ const result = this.db.prepare('UPDATE rules SET enabled = ?, updated_at = ? WHERE id = ?').run(enabled ? 1 : 0, nowISO(), id);
240
+ return result.changes > 0;
241
+ }
242
+ async importBatch(rules) {
243
+ const results = [];
244
+ this.db.transaction(() => {
245
+ for (const rule of rules) {
246
+ const created = this.createSync(rule);
247
+ results.push(created);
248
+ }
249
+ })();
250
+ return results;
251
+ }
252
+ createSync(rule) {
253
+ const id = `${rule.source}-${rule.projectType}-${rule.category}-${rule.name}`.replace(/\s+/g, '-');
254
+ const now = nowISO();
255
+ this.db.prepare(`
256
+ INSERT OR REPLACE INTO rules
257
+ (id, project_type, category, name, content, enabled, source, created_at, updated_at, metadata)
258
+ VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
259
+ `).run(id, rule.projectType, rule.category, rule.name, rule.content, rule.enabled ? 1 : 0, rule.source, now, now, rule.metadata ? JSON.stringify(rule.metadata) : null);
260
+ return { id, ...rule, createdAt: now, updatedAt: now };
261
+ }
262
+ async exportAll(filters) {
263
+ const rules = await this.list(filters);
264
+ return JSON.stringify(rules, null, 2);
265
+ }
266
+ async close() {
267
+ // Handled by StorageManager
268
+ }
269
+ rowToRule(row) {
270
+ return {
271
+ id: row.id,
272
+ projectType: row.project_type,
273
+ category: row.category,
274
+ name: row.name,
275
+ content: row.content,
276
+ enabled: row.enabled === 1,
277
+ source: row.source,
278
+ createdAt: row.created_at,
279
+ updatedAt: row.updated_at,
280
+ metadata: row.metadata ? JSON.parse(row.metadata) : undefined
281
+ };
282
+ }
283
+ }
284
+ // ============================================================================
285
+ // SQLite Cache Store
286
+ // ============================================================================
287
+ export class SQLiteCacheStore {
288
+ db;
289
+ defaultTTL;
290
+ constructor(db, defaultTTL = 604800) {
291
+ this.db = db;
292
+ this.defaultTTL = defaultTTL;
293
+ }
294
+ async init() {
295
+ this.db.exec(`
296
+ CREATE TABLE IF NOT EXISTS cache (
297
+ key TEXT PRIMARY KEY,
298
+ value TEXT NOT NULL,
299
+ created_at TEXT NOT NULL,
300
+ expires_at TEXT,
301
+ etag TEXT,
302
+ last_modified TEXT,
303
+ metadata TEXT
304
+ );
305
+
306
+ CREATE INDEX IF NOT EXISTS idx_cache_expires ON cache(expires_at);
307
+ `);
308
+ }
309
+ async get(key) {
310
+ const row = this.db.prepare('SELECT * FROM cache WHERE key = ?').get(key);
311
+ if (!row)
312
+ return null;
313
+ // Check expiration
314
+ if (row.expires_at && new Date(row.expires_at) < new Date()) {
315
+ await this.delete(key);
316
+ return null;
317
+ }
318
+ return {
319
+ key: row.key,
320
+ value: JSON.parse(row.value),
321
+ createdAt: row.created_at,
322
+ expiresAt: row.expires_at,
323
+ etag: row.etag,
324
+ lastModified: row.last_modified,
325
+ metadata: row.metadata ? JSON.parse(row.metadata) : undefined
326
+ };
327
+ }
328
+ async set(key, value, options) {
329
+ const now = nowISO();
330
+ const ttl = options?.ttl ?? this.defaultTTL;
331
+ const expiresAt = ttl > 0
332
+ ? new Date(Date.now() + ttl * 1000).toISOString()
333
+ : null;
334
+ this.db.prepare(`
335
+ INSERT OR REPLACE INTO cache
336
+ (key, value, created_at, expires_at, etag, last_modified, metadata)
337
+ VALUES (?, ?, ?, ?, ?, ?, ?)
338
+ `).run(key, JSON.stringify(value), now, expiresAt, options?.etag ?? null, options?.lastModified ?? null, options?.metadata ? JSON.stringify(options.metadata) : null);
339
+ }
340
+ async has(key) {
341
+ const entry = await this.get(key);
342
+ return entry !== null;
343
+ }
344
+ async delete(key) {
345
+ const result = this.db.prepare('DELETE FROM cache WHERE key = ?').run(key);
346
+ return result.changes > 0;
347
+ }
348
+ async prune() {
349
+ const now = nowISO();
350
+ const result = this.db.prepare('DELETE FROM cache WHERE expires_at IS NOT NULL AND expires_at < ?').run(now);
351
+ return result.changes;
352
+ }
353
+ async clear() {
354
+ this.db.exec('DELETE FROM cache');
355
+ }
356
+ async stats() {
357
+ const now = nowISO();
358
+ const total = this.db.prepare('SELECT COUNT(*) as count FROM cache').get();
359
+ const expired = this.db.prepare('SELECT COUNT(*) as count FROM cache WHERE expires_at IS NOT NULL AND expires_at < ?').get(now);
360
+ const size = this.db.prepare('SELECT SUM(LENGTH(value)) as size FROM cache').get();
361
+ return {
362
+ totalEntries: total.count,
363
+ totalSize: size.size || 0,
364
+ expiredEntries: expired.count
365
+ };
366
+ }
367
+ async close() {
368
+ // Handled by StorageManager
369
+ }
370
+ }
371
+ // ============================================================================
372
+ // SQLite Storage Manager
373
+ // ============================================================================
374
+ export class SQLiteStorageManager {
375
+ db;
376
+ _config;
377
+ _rules;
378
+ _cache;
379
+ options;
380
+ constructor(options = {}) {
381
+ const baseDir = options.baseDir || getDefaultBaseDir();
382
+ this.options = {
383
+ baseDir,
384
+ dbName: options.dbName || 'stackguide.db',
385
+ walMode: options.walMode ?? true,
386
+ defaultCacheTTL: options.defaultCacheTTL ?? 604800,
387
+ debug: options.debug ?? false
388
+ };
389
+ // Ensure directory exists
390
+ if (!fs.existsSync(baseDir)) {
391
+ fs.mkdirSync(baseDir, { recursive: true });
392
+ }
393
+ const dbPath = path.join(baseDir, this.options.dbName);
394
+ this.db = new Database(dbPath, {
395
+ verbose: this.options.debug ? console.log : undefined
396
+ });
397
+ if (this.options.walMode) {
398
+ this.db.pragma('journal_mode = WAL');
399
+ }
400
+ this._config = new SQLiteConfigStore(this.db);
401
+ this._rules = new SQLiteRuleStore(this.db);
402
+ this._cache = new SQLiteCacheStore(this.db, this.options.defaultCacheTTL);
403
+ }
404
+ get config() {
405
+ return this._config;
406
+ }
407
+ get rules() {
408
+ return this._rules;
409
+ }
410
+ get cache() {
411
+ return this._cache;
412
+ }
413
+ async init() {
414
+ await this._config.init();
415
+ await this._rules.init();
416
+ await this._cache.init();
417
+ // Run migrations
418
+ await this.migrate();
419
+ }
420
+ async close() {
421
+ this.db.close();
422
+ }
423
+ async migrate() {
424
+ // Schema version tracking
425
+ this.db.exec(`
426
+ CREATE TABLE IF NOT EXISTS schema_version (
427
+ version INTEGER PRIMARY KEY,
428
+ applied_at TEXT NOT NULL
429
+ )
430
+ `);
431
+ const currentVersion = this.db.prepare('SELECT MAX(version) as version FROM schema_version').get();
432
+ const version = currentVersion?.version || 0;
433
+ // Future migrations go here
434
+ // if (version < 1) { ... migrate ... }
435
+ }
436
+ async stats() {
437
+ const configs = this.db.prepare('SELECT COUNT(*) as count FROM configs').get();
438
+ const rules = this.db.prepare('SELECT COUNT(*) as count FROM rules').get();
439
+ const cache = this.db.prepare('SELECT COUNT(*) as count FROM cache').get();
440
+ const dbPath = path.join(this.options.baseDir, this.options.dbName);
441
+ const dbStats = fs.statSync(dbPath);
442
+ return {
443
+ configs: configs.count,
444
+ rules: rules.count,
445
+ cacheEntries: cache.count,
446
+ dbSize: dbStats.size
447
+ };
448
+ }
449
+ }
450
+ // ============================================================================
451
+ // Singleton Instance
452
+ // ============================================================================
453
+ let storageInstance = null;
454
+ export function getStorage(options) {
455
+ if (!storageInstance) {
456
+ storageInstance = new SQLiteStorageManager(options);
457
+ }
458
+ return storageInstance;
459
+ }
460
+ export async function initStorage(options) {
461
+ const storage = getStorage(options);
462
+ await storage.init();
463
+ return storage;
464
+ }
465
+ export async function closeStorage() {
466
+ if (storageInstance) {
467
+ await storageInstance.close();
468
+ storageInstance = null;
469
+ }
470
+ }
471
+ //# sourceMappingURL=sqlite.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sqlite.js","sourceRoot":"","sources":["../../src/storage/sqlite.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,147 @@
1
+ /**
2
+ * Storage Layer Types
3
+ * Defines interfaces for persistent storage (SQLite/JSON)
4
+ * @version 3.4.0
5
+ */
6
+ import type { UserConfiguration, ProjectType } from '../config/types.js';
7
+ export interface SavedConfig {
8
+ id: string;
9
+ name: string;
10
+ projectType: ProjectType;
11
+ createdAt: string;
12
+ updatedAt: string;
13
+ data: UserConfiguration;
14
+ }
15
+ export interface ConfigStore {
16
+ /** Initialize storage (create tables/files if needed) */
17
+ init(): Promise<void>;
18
+ /** Get active configuration */
19
+ getActive(): Promise<SavedConfig | null>;
20
+ /** Set active configuration */
21
+ setActive(config: UserConfiguration): Promise<void>;
22
+ /** Save configuration with name */
23
+ save(name: string, config: UserConfiguration): Promise<SavedConfig>;
24
+ /** Load configuration by ID */
25
+ load(id: string): Promise<SavedConfig | null>;
26
+ /** List all saved configurations */
27
+ list(): Promise<SavedConfig[]>;
28
+ /** Delete configuration by ID */
29
+ delete(id: string): Promise<boolean>;
30
+ /** Export configuration as JSON string */
31
+ export(id: string): Promise<string | null>;
32
+ /** Import configuration from JSON string */
33
+ import(json: string): Promise<SavedConfig>;
34
+ /** Close storage connection */
35
+ close(): Promise<void>;
36
+ }
37
+ export interface StoredRule {
38
+ id: string;
39
+ projectType: ProjectType;
40
+ category: string;
41
+ name: string;
42
+ content: string;
43
+ enabled: boolean;
44
+ source: 'user' | 'project' | 'cursor';
45
+ createdAt: string;
46
+ updatedAt: string;
47
+ metadata?: Record<string, unknown>;
48
+ }
49
+ export interface RuleStore {
50
+ /** Initialize storage */
51
+ init(): Promise<void>;
52
+ /** Create a new rule */
53
+ create(rule: Omit<StoredRule, 'id' | 'createdAt' | 'updatedAt'>): Promise<StoredRule>;
54
+ /** Get rule by ID */
55
+ get(id: string): Promise<StoredRule | null>;
56
+ /** List rules with optional filters */
57
+ list(filters?: {
58
+ projectType?: ProjectType;
59
+ category?: string;
60
+ source?: StoredRule['source'];
61
+ enabled?: boolean;
62
+ }): Promise<StoredRule[]>;
63
+ /** Update rule by ID */
64
+ update(id: string, updates: Partial<Omit<StoredRule, 'id' | 'createdAt'>>): Promise<StoredRule | null>;
65
+ /** Delete rule by ID */
66
+ delete(id: string): Promise<boolean>;
67
+ /** Enable/disable rule */
68
+ setEnabled(id: string, enabled: boolean): Promise<boolean>;
69
+ /** Import multiple rules */
70
+ importBatch(rules: Omit<StoredRule, 'id' | 'createdAt' | 'updatedAt'>[]): Promise<StoredRule[]>;
71
+ /** Export rules as JSON */
72
+ exportAll(filters?: {
73
+ projectType?: ProjectType;
74
+ }): Promise<string>;
75
+ /** Close storage */
76
+ close(): Promise<void>;
77
+ }
78
+ export interface CacheEntry<T = unknown> {
79
+ key: string;
80
+ value: T;
81
+ createdAt: string;
82
+ expiresAt: string | null;
83
+ etag?: string;
84
+ lastModified?: string;
85
+ metadata?: Record<string, unknown>;
86
+ }
87
+ export interface CacheStore {
88
+ /** Initialize cache storage */
89
+ init(): Promise<void>;
90
+ /** Get cached value */
91
+ get<T = unknown>(key: string): Promise<CacheEntry<T> | null>;
92
+ /** Set cached value with optional TTL (seconds) */
93
+ set<T = unknown>(key: string, value: T, options?: {
94
+ ttl?: number;
95
+ etag?: string;
96
+ lastModified?: string;
97
+ metadata?: Record<string, unknown>;
98
+ }): Promise<void>;
99
+ /** Check if key exists and is not expired */
100
+ has(key: string): Promise<boolean>;
101
+ /** Delete cached value */
102
+ delete(key: string): Promise<boolean>;
103
+ /** Delete expired entries */
104
+ prune(): Promise<number>;
105
+ /** Clear all cache */
106
+ clear(): Promise<void>;
107
+ /** Get cache stats */
108
+ stats(): Promise<{
109
+ totalEntries: number;
110
+ totalSize: number;
111
+ expiredEntries: number;
112
+ }>;
113
+ /** Close storage */
114
+ close(): Promise<void>;
115
+ }
116
+ export interface StorageManager {
117
+ config: ConfigStore;
118
+ rules: RuleStore;
119
+ cache: CacheStore;
120
+ /** Initialize all stores */
121
+ init(): Promise<void>;
122
+ /** Close all stores */
123
+ close(): Promise<void>;
124
+ /** Run migrations if needed */
125
+ migrate(): Promise<void>;
126
+ /** Get storage stats */
127
+ stats(): Promise<{
128
+ configs: number;
129
+ rules: number;
130
+ cacheEntries: number;
131
+ dbSize: number;
132
+ }>;
133
+ }
134
+ export interface StorageOptions {
135
+ /** Base directory for storage (default: ~/.stackguide) */
136
+ baseDir?: string;
137
+ /** Database filename (default: stackguide.db) */
138
+ dbName?: string;
139
+ /** Enable WAL mode for SQLite (default: true) */
140
+ walMode?: boolean;
141
+ /** Cache TTL in seconds (default: 604800 = 7 days) */
142
+ defaultCacheTTL?: number;
143
+ /** Enable debug logging */
144
+ debug?: boolean;
145
+ }
146
+ export declare const DEFAULT_STORAGE_OPTIONS: Required<StorageOptions>;
147
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/storage/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Storage Layer Types
3
+ * Defines interfaces for persistent storage (SQLite/JSON)
4
+ * @version 3.4.0
5
+ */
6
+ export const DEFAULT_STORAGE_OPTIONS = {
7
+ baseDir: '', // Will be set to ~/.stackguide at runtime
8
+ dbName: 'stackguide.db',
9
+ walMode: true,
10
+ defaultCacheTTL: 604800, // 7 days
11
+ debug: false
12
+ };
13
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/storage/types.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AA2MH,MAAM,CAAC,MAAM,uBAAuB,GAA6B;IAC/D,OAAO,EAAE,EAAE,EAAG,0CAA0C;IACxD,MAAM,EAAE,eAAe;IACvB,OAAO,EAAE,IAAI;IACb,eAAe,EAAE,MAAM,EAAE,SAAS;IAClC,KAAK,EAAE,KAAK;CACb,CAAC"}