cccmemory 1.8.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.
Files changed (216) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +349 -0
  3. package/dist/ConversationMemory.d.ts +231 -0
  4. package/dist/ConversationMemory.d.ts.map +1 -0
  5. package/dist/ConversationMemory.js +357 -0
  6. package/dist/ConversationMemory.js.map +1 -0
  7. package/dist/cache/QueryCache.d.ts +215 -0
  8. package/dist/cache/QueryCache.d.ts.map +1 -0
  9. package/dist/cache/QueryCache.js +294 -0
  10. package/dist/cache/QueryCache.js.map +1 -0
  11. package/dist/cli/commands.d.ts +9 -0
  12. package/dist/cli/commands.d.ts.map +1 -0
  13. package/dist/cli/commands.js +954 -0
  14. package/dist/cli/commands.js.map +1 -0
  15. package/dist/cli/help.d.ts +16 -0
  16. package/dist/cli/help.d.ts.map +1 -0
  17. package/dist/cli/help.js +361 -0
  18. package/dist/cli/help.js.map +1 -0
  19. package/dist/cli/index.d.ts +30 -0
  20. package/dist/cli/index.d.ts.map +1 -0
  21. package/dist/cli/index.js +111 -0
  22. package/dist/cli/index.js.map +1 -0
  23. package/dist/context/ContextInjector.d.ts +38 -0
  24. package/dist/context/ContextInjector.d.ts.map +1 -0
  25. package/dist/context/ContextInjector.js +235 -0
  26. package/dist/context/ContextInjector.js.map +1 -0
  27. package/dist/documentation/CodeAnalyzer.d.ts +29 -0
  28. package/dist/documentation/CodeAnalyzer.d.ts.map +1 -0
  29. package/dist/documentation/CodeAnalyzer.js +122 -0
  30. package/dist/documentation/CodeAnalyzer.js.map +1 -0
  31. package/dist/documentation/ConversationAnalyzer.d.ts +19 -0
  32. package/dist/documentation/ConversationAnalyzer.d.ts.map +1 -0
  33. package/dist/documentation/ConversationAnalyzer.js +157 -0
  34. package/dist/documentation/ConversationAnalyzer.js.map +1 -0
  35. package/dist/documentation/CrossReferencer.d.ts +67 -0
  36. package/dist/documentation/CrossReferencer.d.ts.map +1 -0
  37. package/dist/documentation/CrossReferencer.js +247 -0
  38. package/dist/documentation/CrossReferencer.js.map +1 -0
  39. package/dist/documentation/DocumentationGenerator.d.ts +22 -0
  40. package/dist/documentation/DocumentationGenerator.d.ts.map +1 -0
  41. package/dist/documentation/DocumentationGenerator.js +57 -0
  42. package/dist/documentation/DocumentationGenerator.js.map +1 -0
  43. package/dist/documentation/MarkdownFormatter.d.ts +26 -0
  44. package/dist/documentation/MarkdownFormatter.d.ts.map +1 -0
  45. package/dist/documentation/MarkdownFormatter.js +301 -0
  46. package/dist/documentation/MarkdownFormatter.js.map +1 -0
  47. package/dist/documentation/types.d.ts +176 -0
  48. package/dist/documentation/types.d.ts.map +1 -0
  49. package/dist/documentation/types.js +5 -0
  50. package/dist/documentation/types.js.map +1 -0
  51. package/dist/embeddings/ConfigManager.d.ts +46 -0
  52. package/dist/embeddings/ConfigManager.d.ts.map +1 -0
  53. package/dist/embeddings/ConfigManager.js +177 -0
  54. package/dist/embeddings/ConfigManager.js.map +1 -0
  55. package/dist/embeddings/EmbeddingConfig.d.ts +39 -0
  56. package/dist/embeddings/EmbeddingConfig.d.ts.map +1 -0
  57. package/dist/embeddings/EmbeddingConfig.js +132 -0
  58. package/dist/embeddings/EmbeddingConfig.js.map +1 -0
  59. package/dist/embeddings/EmbeddingGenerator.d.ts +51 -0
  60. package/dist/embeddings/EmbeddingGenerator.d.ts.map +1 -0
  61. package/dist/embeddings/EmbeddingGenerator.js +157 -0
  62. package/dist/embeddings/EmbeddingGenerator.js.map +1 -0
  63. package/dist/embeddings/EmbeddingProvider.d.ts +34 -0
  64. package/dist/embeddings/EmbeddingProvider.d.ts.map +1 -0
  65. package/dist/embeddings/EmbeddingProvider.js +6 -0
  66. package/dist/embeddings/EmbeddingProvider.js.map +1 -0
  67. package/dist/embeddings/ModelRegistry.d.ts +48 -0
  68. package/dist/embeddings/ModelRegistry.d.ts.map +1 -0
  69. package/dist/embeddings/ModelRegistry.js +170 -0
  70. package/dist/embeddings/ModelRegistry.js.map +1 -0
  71. package/dist/embeddings/VectorStore.d.ts +114 -0
  72. package/dist/embeddings/VectorStore.d.ts.map +1 -0
  73. package/dist/embeddings/VectorStore.js +393 -0
  74. package/dist/embeddings/VectorStore.js.map +1 -0
  75. package/dist/embeddings/providers/OllamaEmbeddings.d.ts +38 -0
  76. package/dist/embeddings/providers/OllamaEmbeddings.d.ts.map +1 -0
  77. package/dist/embeddings/providers/OllamaEmbeddings.js +125 -0
  78. package/dist/embeddings/providers/OllamaEmbeddings.js.map +1 -0
  79. package/dist/embeddings/providers/OpenAIEmbeddings.d.ts +40 -0
  80. package/dist/embeddings/providers/OpenAIEmbeddings.d.ts.map +1 -0
  81. package/dist/embeddings/providers/OpenAIEmbeddings.js +129 -0
  82. package/dist/embeddings/providers/OpenAIEmbeddings.js.map +1 -0
  83. package/dist/embeddings/providers/TransformersEmbeddings.d.ts +38 -0
  84. package/dist/embeddings/providers/TransformersEmbeddings.d.ts.map +1 -0
  85. package/dist/embeddings/providers/TransformersEmbeddings.js +115 -0
  86. package/dist/embeddings/providers/TransformersEmbeddings.js.map +1 -0
  87. package/dist/handoff/SessionHandoffStore.d.ts +80 -0
  88. package/dist/handoff/SessionHandoffStore.d.ts.map +1 -0
  89. package/dist/handoff/SessionHandoffStore.js +314 -0
  90. package/dist/handoff/SessionHandoffStore.js.map +1 -0
  91. package/dist/index.d.ts +7 -0
  92. package/dist/index.d.ts.map +1 -0
  93. package/dist/index.js +115 -0
  94. package/dist/index.js.map +1 -0
  95. package/dist/mcp-server.d.ts +27 -0
  96. package/dist/mcp-server.d.ts.map +1 -0
  97. package/dist/mcp-server.js +157 -0
  98. package/dist/mcp-server.js.map +1 -0
  99. package/dist/memory/WorkingMemoryStore.d.ts +83 -0
  100. package/dist/memory/WorkingMemoryStore.d.ts.map +1 -0
  101. package/dist/memory/WorkingMemoryStore.js +318 -0
  102. package/dist/memory/WorkingMemoryStore.js.map +1 -0
  103. package/dist/memory/types.d.ts +192 -0
  104. package/dist/memory/types.d.ts.map +1 -0
  105. package/dist/memory/types.js +8 -0
  106. package/dist/memory/types.js.map +1 -0
  107. package/dist/parsers/CodexConversationParser.d.ts +51 -0
  108. package/dist/parsers/CodexConversationParser.d.ts.map +1 -0
  109. package/dist/parsers/CodexConversationParser.js +301 -0
  110. package/dist/parsers/CodexConversationParser.js.map +1 -0
  111. package/dist/parsers/ConversationParser.d.ts +286 -0
  112. package/dist/parsers/ConversationParser.d.ts.map +1 -0
  113. package/dist/parsers/ConversationParser.js +795 -0
  114. package/dist/parsers/ConversationParser.js.map +1 -0
  115. package/dist/parsers/DecisionExtractor.d.ts +144 -0
  116. package/dist/parsers/DecisionExtractor.d.ts.map +1 -0
  117. package/dist/parsers/DecisionExtractor.js +434 -0
  118. package/dist/parsers/DecisionExtractor.js.map +1 -0
  119. package/dist/parsers/GitIntegrator.d.ts +156 -0
  120. package/dist/parsers/GitIntegrator.d.ts.map +1 -0
  121. package/dist/parsers/GitIntegrator.js +348 -0
  122. package/dist/parsers/GitIntegrator.js.map +1 -0
  123. package/dist/parsers/MistakeExtractor.d.ts +151 -0
  124. package/dist/parsers/MistakeExtractor.d.ts.map +1 -0
  125. package/dist/parsers/MistakeExtractor.js +460 -0
  126. package/dist/parsers/MistakeExtractor.js.map +1 -0
  127. package/dist/parsers/RequirementsExtractor.d.ts +166 -0
  128. package/dist/parsers/RequirementsExtractor.d.ts.map +1 -0
  129. package/dist/parsers/RequirementsExtractor.js +338 -0
  130. package/dist/parsers/RequirementsExtractor.js.map +1 -0
  131. package/dist/realtime/ConversationWatcher.d.ts +87 -0
  132. package/dist/realtime/ConversationWatcher.d.ts.map +1 -0
  133. package/dist/realtime/ConversationWatcher.js +204 -0
  134. package/dist/realtime/ConversationWatcher.js.map +1 -0
  135. package/dist/realtime/IncrementalParser.d.ts +83 -0
  136. package/dist/realtime/IncrementalParser.d.ts.map +1 -0
  137. package/dist/realtime/IncrementalParser.js +232 -0
  138. package/dist/realtime/IncrementalParser.js.map +1 -0
  139. package/dist/realtime/LiveExtractor.d.ts +72 -0
  140. package/dist/realtime/LiveExtractor.d.ts.map +1 -0
  141. package/dist/realtime/LiveExtractor.js +288 -0
  142. package/dist/realtime/LiveExtractor.js.map +1 -0
  143. package/dist/search/SemanticSearch.d.ts +121 -0
  144. package/dist/search/SemanticSearch.d.ts.map +1 -0
  145. package/dist/search/SemanticSearch.js +823 -0
  146. package/dist/search/SemanticSearch.js.map +1 -0
  147. package/dist/storage/BackupManager.d.ts +58 -0
  148. package/dist/storage/BackupManager.d.ts.map +1 -0
  149. package/dist/storage/BackupManager.js +223 -0
  150. package/dist/storage/BackupManager.js.map +1 -0
  151. package/dist/storage/ConversationStorage.d.ts +341 -0
  152. package/dist/storage/ConversationStorage.d.ts.map +1 -0
  153. package/dist/storage/ConversationStorage.js +792 -0
  154. package/dist/storage/ConversationStorage.js.map +1 -0
  155. package/dist/storage/DeletionService.d.ts +70 -0
  156. package/dist/storage/DeletionService.d.ts.map +1 -0
  157. package/dist/storage/DeletionService.js +253 -0
  158. package/dist/storage/DeletionService.js.map +1 -0
  159. package/dist/storage/GlobalIndex.d.ts +133 -0
  160. package/dist/storage/GlobalIndex.d.ts.map +1 -0
  161. package/dist/storage/GlobalIndex.js +310 -0
  162. package/dist/storage/GlobalIndex.js.map +1 -0
  163. package/dist/storage/SQLiteManager.d.ts +114 -0
  164. package/dist/storage/SQLiteManager.d.ts.map +1 -0
  165. package/dist/storage/SQLiteManager.js +636 -0
  166. package/dist/storage/SQLiteManager.js.map +1 -0
  167. package/dist/storage/migrations.d.ts +54 -0
  168. package/dist/storage/migrations.d.ts.map +1 -0
  169. package/dist/storage/migrations.js +285 -0
  170. package/dist/storage/migrations.js.map +1 -0
  171. package/dist/storage/schema.sql +436 -0
  172. package/dist/tools/ToolDefinitions.d.ts +946 -0
  173. package/dist/tools/ToolDefinitions.d.ts.map +1 -0
  174. package/dist/tools/ToolDefinitions.js +937 -0
  175. package/dist/tools/ToolDefinitions.js.map +1 -0
  176. package/dist/tools/ToolHandlers.d.ts +791 -0
  177. package/dist/tools/ToolHandlers.d.ts.map +1 -0
  178. package/dist/tools/ToolHandlers.js +3262 -0
  179. package/dist/tools/ToolHandlers.js.map +1 -0
  180. package/dist/types/ToolTypes.d.ts +824 -0
  181. package/dist/types/ToolTypes.d.ts.map +1 -0
  182. package/dist/types/ToolTypes.js +6 -0
  183. package/dist/types/ToolTypes.js.map +1 -0
  184. package/dist/utils/Logger.d.ts +70 -0
  185. package/dist/utils/Logger.d.ts.map +1 -0
  186. package/dist/utils/Logger.js +131 -0
  187. package/dist/utils/Logger.js.map +1 -0
  188. package/dist/utils/McpConfig.d.ts +54 -0
  189. package/dist/utils/McpConfig.d.ts.map +1 -0
  190. package/dist/utils/McpConfig.js +136 -0
  191. package/dist/utils/McpConfig.js.map +1 -0
  192. package/dist/utils/ProjectMigration.d.ts +82 -0
  193. package/dist/utils/ProjectMigration.d.ts.map +1 -0
  194. package/dist/utils/ProjectMigration.js +416 -0
  195. package/dist/utils/ProjectMigration.js.map +1 -0
  196. package/dist/utils/constants.d.ts +75 -0
  197. package/dist/utils/constants.d.ts.map +1 -0
  198. package/dist/utils/constants.js +105 -0
  199. package/dist/utils/constants.js.map +1 -0
  200. package/dist/utils/safeJson.d.ts +37 -0
  201. package/dist/utils/safeJson.d.ts.map +1 -0
  202. package/dist/utils/safeJson.js +48 -0
  203. package/dist/utils/safeJson.js.map +1 -0
  204. package/dist/utils/sanitization.d.ts +45 -0
  205. package/dist/utils/sanitization.d.ts.map +1 -0
  206. package/dist/utils/sanitization.js +153 -0
  207. package/dist/utils/sanitization.js.map +1 -0
  208. package/dist/utils/worktree.d.ts +15 -0
  209. package/dist/utils/worktree.d.ts.map +1 -0
  210. package/dist/utils/worktree.js +86 -0
  211. package/dist/utils/worktree.js.map +1 -0
  212. package/package.json +98 -0
  213. package/scripts/changelog-check.sh +62 -0
  214. package/scripts/check-node.js +17 -0
  215. package/scripts/dev-config.js +56 -0
  216. package/scripts/postinstall.js +117 -0
@@ -0,0 +1,54 @@
1
+ /**
2
+ * Database migration system
3
+ * Follows patterns from code-graph-rag-mcp for versioned schema updates
4
+ */
5
+ import { SQLiteManager } from "./SQLiteManager.js";
6
+ export interface Migration {
7
+ version: number;
8
+ description: string;
9
+ up: string;
10
+ down?: string;
11
+ checksum?: string;
12
+ }
13
+ export declare const migrations: Migration[];
14
+ export declare class MigrationManager {
15
+ private db;
16
+ constructor(db: SQLiteManager);
17
+ /**
18
+ * Get current schema version
19
+ */
20
+ getCurrentVersion(): number;
21
+ /**
22
+ * Get all pending migrations
23
+ */
24
+ getPendingMigrations(): Migration[];
25
+ /**
26
+ * Apply a single migration
27
+ */
28
+ applyMigration(migration: Migration): void;
29
+ /**
30
+ * Apply all pending migrations
31
+ */
32
+ applyPendingMigrations(): void;
33
+ /**
34
+ * Rollback to a specific version
35
+ */
36
+ rollbackTo(targetVersion: number): void;
37
+ /**
38
+ * Calculate migration checksum for verification
39
+ */
40
+ private calculateChecksum;
41
+ /**
42
+ * Verify migration integrity
43
+ */
44
+ verifyMigrations(): boolean;
45
+ /**
46
+ * Get migration history
47
+ */
48
+ getHistory(): Array<{
49
+ version: number;
50
+ description: string;
51
+ applied_at: number;
52
+ }>;
53
+ }
54
+ //# sourceMappingURL=migrations.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"migrations.d.ts","sourceRoot":"","sources":["../../src/storage/migrations.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAGnD,MAAM,WAAW,SAAS;IACxB,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,eAAO,MAAM,UAAU,EAAE,SAAS,EA4JjC,CAAC;AAEF,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,EAAE,CAAgB;gBAEd,EAAE,EAAE,aAAa;IAI7B;;OAEG;IACH,iBAAiB,IAAI,MAAM;IAI3B;;OAEG;IACH,oBAAoB,IAAI,SAAS,EAAE;IAKnC;;OAEG;IACH,cAAc,CAAC,SAAS,EAAE,SAAS,GAAG,IAAI;IA2B1C;;OAEG;IACH,sBAAsB,IAAI,IAAI;IAiB9B;;OAEG;IACH,UAAU,CAAC,aAAa,EAAE,MAAM,GAAG,IAAI;IAyCvC;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAKzB;;OAEG;IACH,gBAAgB,IAAI,OAAO;IA2B3B;;OAEG;IACH,UAAU,IAAI,KAAK,CAAC;QAClB,OAAO,EAAE,MAAM,CAAC;QAChB,WAAW,EAAE,MAAM,CAAC;QACpB,UAAU,EAAE,MAAM,CAAC;KACpB,CAAC;CAWH"}
@@ -0,0 +1,285 @@
1
+ /**
2
+ * Database migration system
3
+ * Follows patterns from code-graph-rag-mcp for versioned schema updates
4
+ */
5
+ import { createHash } from "crypto";
6
+ export const migrations = [
7
+ {
8
+ version: 1,
9
+ description: "Initial schema with 17 tables for conversation memory",
10
+ up: `
11
+ -- Schema is already created by schema.sql during initialization
12
+ -- This migration just records the version
13
+ `,
14
+ },
15
+ {
16
+ version: 2,
17
+ description: "Add source_type column and global index support",
18
+ up: `
19
+ ALTER TABLE conversations ADD COLUMN source_type TEXT DEFAULT 'claude-code';
20
+ CREATE INDEX IF NOT EXISTS idx_conv_source ON conversations(source_type)
21
+ `,
22
+ down: `
23
+ -- SQLite doesn't support DROP COLUMN, would need table recreation
24
+ `,
25
+ },
26
+ {
27
+ version: 3,
28
+ description: "Fix messages_fts schema - remove non-existent context column",
29
+ up: `
30
+ -- FTS5 virtual tables can't be altered, must drop and recreate
31
+ -- The old schema had 'context' column which doesn't exist in messages table
32
+ DROP TABLE IF EXISTS messages_fts;
33
+ CREATE VIRTUAL TABLE IF NOT EXISTS messages_fts USING fts5(
34
+ id UNINDEXED,
35
+ content,
36
+ metadata,
37
+ content=messages,
38
+ content_rowid=rowid
39
+ );
40
+ -- Rebuild FTS index from messages table
41
+ INSERT INTO messages_fts(messages_fts) VALUES('rebuild')
42
+ `,
43
+ down: `
44
+ -- Rollback: recreate old (broken) schema
45
+ DROP TABLE IF EXISTS messages_fts;
46
+ CREATE VIRTUAL TABLE IF NOT EXISTS messages_fts USING fts5(
47
+ id UNINDEXED,
48
+ content,
49
+ context,
50
+ metadata,
51
+ content=messages,
52
+ content_rowid=rowid
53
+ )
54
+ `,
55
+ },
56
+ {
57
+ version: 4,
58
+ description: "Add mistake_embeddings table and mistakes_fts for semantic search",
59
+ up: `
60
+ -- Create mistake_embeddings table for semantic search
61
+ CREATE TABLE IF NOT EXISTS mistake_embeddings (
62
+ id TEXT PRIMARY KEY,
63
+ mistake_id TEXT NOT NULL,
64
+ embedding BLOB NOT NULL,
65
+ created_at INTEGER NOT NULL,
66
+ FOREIGN KEY (mistake_id) REFERENCES mistakes(id) ON DELETE CASCADE
67
+ );
68
+ CREATE INDEX IF NOT EXISTS idx_mistake_embeddings_mistake_id ON mistake_embeddings(mistake_id);
69
+
70
+ -- Create mistakes_fts FTS5 table (standalone, not content-synced)
71
+ CREATE VIRTUAL TABLE IF NOT EXISTS mistakes_fts USING fts5(
72
+ id,
73
+ what_went_wrong,
74
+ correction,
75
+ mistake_type
76
+ );
77
+ -- Populate FTS from existing mistakes
78
+ INSERT INTO mistakes_fts(id, what_went_wrong, correction, mistake_type)
79
+ SELECT id, what_went_wrong, COALESCE(correction, ''), mistake_type FROM mistakes
80
+ `,
81
+ down: `
82
+ DROP TABLE IF EXISTS mistakes_fts;
83
+ DROP TABLE IF EXISTS mistake_embeddings
84
+ `,
85
+ },
86
+ {
87
+ version: 5,
88
+ description: "Add live context layer tables: working_memory, session_handoffs, session_checkpoints",
89
+ up: `
90
+ -- Working Memory table for key-value context storage
91
+ CREATE TABLE IF NOT EXISTS working_memory (
92
+ id TEXT PRIMARY KEY,
93
+ key TEXT NOT NULL,
94
+ value TEXT NOT NULL,
95
+ context TEXT,
96
+ tags TEXT,
97
+ session_id TEXT,
98
+ project_path TEXT NOT NULL,
99
+ created_at INTEGER NOT NULL,
100
+ updated_at INTEGER NOT NULL,
101
+ expires_at INTEGER,
102
+ embedding BLOB,
103
+ UNIQUE(project_path, key)
104
+ );
105
+ CREATE INDEX IF NOT EXISTS idx_wm_session ON working_memory(session_id);
106
+ CREATE INDEX IF NOT EXISTS idx_wm_project ON working_memory(project_path);
107
+ CREATE INDEX IF NOT EXISTS idx_wm_expires ON working_memory(expires_at);
108
+ CREATE INDEX IF NOT EXISTS idx_wm_key ON working_memory(key);
109
+ CREATE INDEX IF NOT EXISTS idx_wm_project_key ON working_memory(project_path, key);
110
+
111
+ -- Session Handoffs table for context transfer
112
+ CREATE TABLE IF NOT EXISTS session_handoffs (
113
+ id TEXT PRIMARY KEY,
114
+ from_session_id TEXT NOT NULL,
115
+ project_path TEXT NOT NULL,
116
+ created_at INTEGER NOT NULL,
117
+ handoff_data TEXT NOT NULL,
118
+ resumed_by_session_id TEXT,
119
+ resumed_at INTEGER
120
+ );
121
+ CREATE INDEX IF NOT EXISTS idx_handoff_session ON session_handoffs(from_session_id);
122
+ CREATE INDEX IF NOT EXISTS idx_handoff_project ON session_handoffs(project_path);
123
+ CREATE INDEX IF NOT EXISTS idx_handoff_created ON session_handoffs(created_at);
124
+ CREATE INDEX IF NOT EXISTS idx_handoff_resumed ON session_handoffs(resumed_by_session_id);
125
+
126
+ -- Session Checkpoints table for real-time tracking
127
+ CREATE TABLE IF NOT EXISTS session_checkpoints (
128
+ id TEXT PRIMARY KEY,
129
+ session_id TEXT NOT NULL,
130
+ project_path TEXT NOT NULL,
131
+ checkpoint_number INTEGER NOT NULL,
132
+ created_at INTEGER NOT NULL,
133
+ decisions TEXT,
134
+ active_files TEXT,
135
+ task_state TEXT,
136
+ context_summary TEXT NOT NULL
137
+ );
138
+ CREATE INDEX IF NOT EXISTS idx_checkpoint_session ON session_checkpoints(session_id);
139
+ CREATE INDEX IF NOT EXISTS idx_checkpoint_project ON session_checkpoints(project_path);
140
+ CREATE INDEX IF NOT EXISTS idx_checkpoint_created ON session_checkpoints(created_at);
141
+ CREATE UNIQUE INDEX IF NOT EXISTS idx_checkpoint_session_num ON session_checkpoints(session_id, checkpoint_number);
142
+
143
+ -- FTS for working memory
144
+ CREATE VIRTUAL TABLE IF NOT EXISTS working_memory_fts USING fts5(
145
+ id UNINDEXED,
146
+ key,
147
+ value,
148
+ context,
149
+ content=working_memory,
150
+ content_rowid=rowid
151
+ )
152
+ `,
153
+ down: `
154
+ DROP TABLE IF EXISTS working_memory_fts;
155
+ DROP TABLE IF EXISTS session_checkpoints;
156
+ DROP TABLE IF EXISTS session_handoffs;
157
+ DROP TABLE IF EXISTS working_memory
158
+ `,
159
+ },
160
+ ];
161
+ export class MigrationManager {
162
+ db;
163
+ constructor(db) {
164
+ this.db = db;
165
+ }
166
+ /**
167
+ * Get current schema version
168
+ */
169
+ getCurrentVersion() {
170
+ return this.db.getSchemaVersion();
171
+ }
172
+ /**
173
+ * Get all pending migrations
174
+ */
175
+ getPendingMigrations() {
176
+ const currentVersion = this.getCurrentVersion();
177
+ return migrations.filter((m) => m.version > currentVersion);
178
+ }
179
+ /**
180
+ * Apply a single migration
181
+ */
182
+ applyMigration(migration) {
183
+ console.error(`Applying migration v${migration.version}: ${migration.description}`);
184
+ // Calculate checksum
185
+ const checksum = this.calculateChecksum(migration);
186
+ // Execute migration in a transaction
187
+ this.db.transaction(() => {
188
+ // Execute the migration SQL using db.exec() directly
189
+ // SQLite handles multiple statements and comments correctly
190
+ if (migration.up && migration.up.trim()) {
191
+ this.db.exec(migration.up);
192
+ }
193
+ // Record migration
194
+ this.db
195
+ .prepare("INSERT INTO schema_version (version, applied_at, description, checksum) VALUES (?, ?, ?, ?)")
196
+ .run(migration.version, Date.now(), migration.description, checksum);
197
+ });
198
+ console.error(`Migration v${migration.version} applied successfully`);
199
+ }
200
+ /**
201
+ * Apply all pending migrations
202
+ */
203
+ applyPendingMigrations() {
204
+ const pending = this.getPendingMigrations();
205
+ if (pending.length === 0) {
206
+ console.error("No pending migrations");
207
+ return;
208
+ }
209
+ console.error(`Found ${pending.length} pending migrations`);
210
+ for (const migration of pending) {
211
+ this.applyMigration(migration);
212
+ }
213
+ console.error("All migrations applied successfully");
214
+ }
215
+ /**
216
+ * Rollback to a specific version
217
+ */
218
+ rollbackTo(targetVersion) {
219
+ const currentVersion = this.getCurrentVersion();
220
+ if (targetVersion >= currentVersion) {
221
+ console.error("Nothing to rollback");
222
+ return;
223
+ }
224
+ // Get migrations to rollback (in reverse order)
225
+ const toRollback = migrations
226
+ .filter((m) => m.version > targetVersion && m.version <= currentVersion)
227
+ .sort((a, b) => b.version - a.version);
228
+ for (const migration of toRollback) {
229
+ if (!migration.down) {
230
+ throw new Error(`Migration v${migration.version} does not support rollback`);
231
+ }
232
+ console.error(`Rolling back migration v${migration.version}`);
233
+ const downSql = migration.down;
234
+ if (!downSql) {
235
+ throw new Error(`Migration v${migration.version} has no rollback SQL`);
236
+ }
237
+ this.db.transaction(() => {
238
+ // Execute rollback SQL
239
+ this.db.exec(downSql);
240
+ // Remove migration record
241
+ this.db
242
+ .prepare("DELETE FROM schema_version WHERE version = ?")
243
+ .run(migration.version);
244
+ });
245
+ console.error(`Migration v${migration.version} rolled back`);
246
+ }
247
+ }
248
+ /**
249
+ * Calculate migration checksum for verification
250
+ */
251
+ calculateChecksum(migration) {
252
+ const content = `${migration.version}:${migration.description}:${migration.up}`;
253
+ return createHash("sha256").update(content).digest("hex");
254
+ }
255
+ /**
256
+ * Verify migration integrity
257
+ */
258
+ verifyMigrations() {
259
+ const applied = this.db
260
+ .prepare("SELECT version, checksum FROM schema_version WHERE version > 0 ORDER BY version")
261
+ .all();
262
+ for (const record of applied) {
263
+ const migration = migrations.find((m) => m.version === record.version);
264
+ if (!migration) {
265
+ console.error(`Migration v${record.version} not found in code`);
266
+ return false;
267
+ }
268
+ const expectedChecksum = this.calculateChecksum(migration);
269
+ if (record.checksum && record.checksum !== expectedChecksum) {
270
+ console.error(`Migration v${record.version} checksum mismatch - database may be corrupted`);
271
+ return false;
272
+ }
273
+ }
274
+ return true;
275
+ }
276
+ /**
277
+ * Get migration history
278
+ */
279
+ getHistory() {
280
+ return this.db
281
+ .prepare("SELECT version, description, applied_at FROM schema_version ORDER BY version")
282
+ .all();
283
+ }
284
+ }
285
+ //# sourceMappingURL=migrations.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"migrations.js","sourceRoot":"","sources":["../../src/storage/migrations.ts"],"names":[],"mappings":"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"}