claude-conversation-memory-mcp 0.1.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 (116) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +223 -0
  3. package/dist/ConversationMemory.d.ts +80 -0
  4. package/dist/ConversationMemory.d.ts.map +1 -0
  5. package/dist/ConversationMemory.js +203 -0
  6. package/dist/ConversationMemory.js.map +1 -0
  7. package/dist/documentation/CodeAnalyzer.d.ts +29 -0
  8. package/dist/documentation/CodeAnalyzer.d.ts.map +1 -0
  9. package/dist/documentation/CodeAnalyzer.js +122 -0
  10. package/dist/documentation/CodeAnalyzer.js.map +1 -0
  11. package/dist/documentation/ConversationAnalyzer.d.ts +19 -0
  12. package/dist/documentation/ConversationAnalyzer.d.ts.map +1 -0
  13. package/dist/documentation/ConversationAnalyzer.js +156 -0
  14. package/dist/documentation/ConversationAnalyzer.js.map +1 -0
  15. package/dist/documentation/CrossReferencer.d.ts +67 -0
  16. package/dist/documentation/CrossReferencer.d.ts.map +1 -0
  17. package/dist/documentation/CrossReferencer.js +247 -0
  18. package/dist/documentation/CrossReferencer.js.map +1 -0
  19. package/dist/documentation/DocumentationGenerator.d.ts +22 -0
  20. package/dist/documentation/DocumentationGenerator.d.ts.map +1 -0
  21. package/dist/documentation/DocumentationGenerator.js +57 -0
  22. package/dist/documentation/DocumentationGenerator.js.map +1 -0
  23. package/dist/documentation/MarkdownFormatter.d.ts +26 -0
  24. package/dist/documentation/MarkdownFormatter.d.ts.map +1 -0
  25. package/dist/documentation/MarkdownFormatter.js +301 -0
  26. package/dist/documentation/MarkdownFormatter.js.map +1 -0
  27. package/dist/documentation/types.d.ts +176 -0
  28. package/dist/documentation/types.d.ts.map +1 -0
  29. package/dist/documentation/types.js +5 -0
  30. package/dist/documentation/types.js.map +1 -0
  31. package/dist/embeddings/EmbeddingConfig.d.ts +39 -0
  32. package/dist/embeddings/EmbeddingConfig.d.ts.map +1 -0
  33. package/dist/embeddings/EmbeddingConfig.js +132 -0
  34. package/dist/embeddings/EmbeddingConfig.js.map +1 -0
  35. package/dist/embeddings/EmbeddingGenerator.d.ts +45 -0
  36. package/dist/embeddings/EmbeddingGenerator.d.ts.map +1 -0
  37. package/dist/embeddings/EmbeddingGenerator.js +129 -0
  38. package/dist/embeddings/EmbeddingGenerator.js.map +1 -0
  39. package/dist/embeddings/EmbeddingProvider.d.ts +34 -0
  40. package/dist/embeddings/EmbeddingProvider.d.ts.map +1 -0
  41. package/dist/embeddings/EmbeddingProvider.js +6 -0
  42. package/dist/embeddings/EmbeddingProvider.js.map +1 -0
  43. package/dist/embeddings/VectorStore.d.ts +75 -0
  44. package/dist/embeddings/VectorStore.d.ts.map +1 -0
  45. package/dist/embeddings/VectorStore.js +220 -0
  46. package/dist/embeddings/VectorStore.js.map +1 -0
  47. package/dist/embeddings/providers/OllamaEmbeddings.d.ts +38 -0
  48. package/dist/embeddings/providers/OllamaEmbeddings.d.ts.map +1 -0
  49. package/dist/embeddings/providers/OllamaEmbeddings.js +132 -0
  50. package/dist/embeddings/providers/OllamaEmbeddings.js.map +1 -0
  51. package/dist/embeddings/providers/OpenAIEmbeddings.d.ts +40 -0
  52. package/dist/embeddings/providers/OpenAIEmbeddings.d.ts.map +1 -0
  53. package/dist/embeddings/providers/OpenAIEmbeddings.js +128 -0
  54. package/dist/embeddings/providers/OpenAIEmbeddings.js.map +1 -0
  55. package/dist/embeddings/providers/TransformersEmbeddings.d.ts +38 -0
  56. package/dist/embeddings/providers/TransformersEmbeddings.d.ts.map +1 -0
  57. package/dist/embeddings/providers/TransformersEmbeddings.js +114 -0
  58. package/dist/embeddings/providers/TransformersEmbeddings.js.map +1 -0
  59. package/dist/index.d.ts +7 -0
  60. package/dist/index.d.ts.map +1 -0
  61. package/dist/index.js +127 -0
  62. package/dist/index.js.map +1 -0
  63. package/dist/parsers/ConversationParser.d.ts +138 -0
  64. package/dist/parsers/ConversationParser.d.ts.map +1 -0
  65. package/dist/parsers/ConversationParser.js +325 -0
  66. package/dist/parsers/ConversationParser.js.map +1 -0
  67. package/dist/parsers/DecisionExtractor.d.ts +76 -0
  68. package/dist/parsers/DecisionExtractor.d.ts.map +1 -0
  69. package/dist/parsers/DecisionExtractor.js +305 -0
  70. package/dist/parsers/DecisionExtractor.js.map +1 -0
  71. package/dist/parsers/GitIntegrator.d.ts +71 -0
  72. package/dist/parsers/GitIntegrator.d.ts.map +1 -0
  73. package/dist/parsers/GitIntegrator.js +283 -0
  74. package/dist/parsers/GitIntegrator.js.map +1 -0
  75. package/dist/parsers/MistakeExtractor.d.ts +86 -0
  76. package/dist/parsers/MistakeExtractor.d.ts.map +1 -0
  77. package/dist/parsers/MistakeExtractor.js +341 -0
  78. package/dist/parsers/MistakeExtractor.js.map +1 -0
  79. package/dist/parsers/RequirementsExtractor.d.ts +70 -0
  80. package/dist/parsers/RequirementsExtractor.d.ts.map +1 -0
  81. package/dist/parsers/RequirementsExtractor.js +252 -0
  82. package/dist/parsers/RequirementsExtractor.js.map +1 -0
  83. package/dist/search/SemanticSearch.d.ts +90 -0
  84. package/dist/search/SemanticSearch.d.ts.map +1 -0
  85. package/dist/search/SemanticSearch.js +352 -0
  86. package/dist/search/SemanticSearch.js.map +1 -0
  87. package/dist/storage/ConversationStorage.d.ts +53 -0
  88. package/dist/storage/ConversationStorage.d.ts.map +1 -0
  89. package/dist/storage/ConversationStorage.js +249 -0
  90. package/dist/storage/ConversationStorage.js.map +1 -0
  91. package/dist/storage/SQLiteManager.d.ts +88 -0
  92. package/dist/storage/SQLiteManager.d.ts.map +1 -0
  93. package/dist/storage/SQLiteManager.js +281 -0
  94. package/dist/storage/SQLiteManager.js.map +1 -0
  95. package/dist/storage/migrations.d.ts +54 -0
  96. package/dist/storage/migrations.d.ts.map +1 -0
  97. package/dist/storage/migrations.js +153 -0
  98. package/dist/storage/migrations.js.map +1 -0
  99. package/dist/storage/schema.sql +321 -0
  100. package/dist/tools/ToolDefinitions.d.ts +265 -0
  101. package/dist/tools/ToolDefinitions.d.ts.map +1 -0
  102. package/dist/tools/ToolDefinitions.js +261 -0
  103. package/dist/tools/ToolDefinitions.js.map +1 -0
  104. package/dist/tools/ToolHandlers.d.ts +56 -0
  105. package/dist/tools/ToolHandlers.d.ts.map +1 -0
  106. package/dist/tools/ToolHandlers.js +431 -0
  107. package/dist/tools/ToolHandlers.js.map +1 -0
  108. package/dist/types/ToolTypes.d.ts +333 -0
  109. package/dist/types/ToolTypes.d.ts.map +1 -0
  110. package/dist/types/ToolTypes.js +6 -0
  111. package/dist/types/ToolTypes.js.map +1 -0
  112. package/dist/utils/sanitization.d.ts +35 -0
  113. package/dist/utils/sanitization.d.ts.map +1 -0
  114. package/dist/utils/sanitization.js +97 -0
  115. package/dist/utils/sanitization.js.map +1 -0
  116. package/package.json +87 -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,EAiBjC,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;IAiC1C;;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,153 @@
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
+ // Future migrations will be added here
16
+ // Example:
17
+ // {
18
+ // version: 2,
19
+ // description: "Add new column for X",
20
+ // up: "ALTER TABLE conversations ADD COLUMN new_field TEXT",
21
+ // down: "ALTER TABLE conversations DROP COLUMN new_field"
22
+ // }
23
+ ];
24
+ export class MigrationManager {
25
+ db;
26
+ constructor(db) {
27
+ this.db = db;
28
+ }
29
+ /**
30
+ * Get current schema version
31
+ */
32
+ getCurrentVersion() {
33
+ return this.db.getSchemaVersion();
34
+ }
35
+ /**
36
+ * Get all pending migrations
37
+ */
38
+ getPendingMigrations() {
39
+ const currentVersion = this.getCurrentVersion();
40
+ return migrations.filter((m) => m.version > currentVersion);
41
+ }
42
+ /**
43
+ * Apply a single migration
44
+ */
45
+ applyMigration(migration) {
46
+ console.log(`Applying migration v${migration.version}: ${migration.description}`);
47
+ // Calculate checksum
48
+ const checksum = this.calculateChecksum(migration);
49
+ // Execute migration in a transaction
50
+ this.db.transaction(() => {
51
+ // Execute the migration SQL
52
+ if (migration.up && migration.up.trim()) {
53
+ const statements = migration.up
54
+ .split(";")
55
+ .map((s) => s.trim())
56
+ .filter((s) => s.length > 0 && !s.startsWith("--"));
57
+ for (const statement of statements) {
58
+ this.db.exec(statement);
59
+ }
60
+ }
61
+ // Record migration
62
+ this.db
63
+ .prepare("INSERT INTO schema_version (version, applied_at, description, checksum) VALUES (?, ?, ?, ?)")
64
+ .run(migration.version, Date.now(), migration.description, checksum);
65
+ });
66
+ console.log(`Migration v${migration.version} applied successfully`);
67
+ }
68
+ /**
69
+ * Apply all pending migrations
70
+ */
71
+ applyPendingMigrations() {
72
+ const pending = this.getPendingMigrations();
73
+ if (pending.length === 0) {
74
+ console.log("No pending migrations");
75
+ return;
76
+ }
77
+ console.log(`Found ${pending.length} pending migrations`);
78
+ for (const migration of pending) {
79
+ this.applyMigration(migration);
80
+ }
81
+ console.log("All migrations applied successfully");
82
+ }
83
+ /**
84
+ * Rollback to a specific version
85
+ */
86
+ rollbackTo(targetVersion) {
87
+ const currentVersion = this.getCurrentVersion();
88
+ if (targetVersion >= currentVersion) {
89
+ console.log("Nothing to rollback");
90
+ return;
91
+ }
92
+ // Get migrations to rollback (in reverse order)
93
+ const toRollback = migrations
94
+ .filter((m) => m.version > targetVersion && m.version <= currentVersion)
95
+ .sort((a, b) => b.version - a.version);
96
+ for (const migration of toRollback) {
97
+ if (!migration.down) {
98
+ throw new Error(`Migration v${migration.version} does not support rollback`);
99
+ }
100
+ console.log(`Rolling back migration v${migration.version}`);
101
+ const downSql = migration.down;
102
+ if (!downSql) {
103
+ throw new Error(`Migration v${migration.version} has no rollback SQL`);
104
+ }
105
+ this.db.transaction(() => {
106
+ // Execute rollback SQL
107
+ this.db.exec(downSql);
108
+ // Remove migration record
109
+ this.db
110
+ .prepare("DELETE FROM schema_version WHERE version = ?")
111
+ .run(migration.version);
112
+ });
113
+ console.log(`Migration v${migration.version} rolled back`);
114
+ }
115
+ }
116
+ /**
117
+ * Calculate migration checksum for verification
118
+ */
119
+ calculateChecksum(migration) {
120
+ const content = `${migration.version}:${migration.description}:${migration.up}`;
121
+ return createHash("sha256").update(content).digest("hex");
122
+ }
123
+ /**
124
+ * Verify migration integrity
125
+ */
126
+ verifyMigrations() {
127
+ const applied = this.db
128
+ .prepare("SELECT version, checksum FROM schema_version WHERE version > 0 ORDER BY version")
129
+ .all();
130
+ for (const record of applied) {
131
+ const migration = migrations.find((m) => m.version === record.version);
132
+ if (!migration) {
133
+ console.error(`Migration v${record.version} not found in code`);
134
+ return false;
135
+ }
136
+ const expectedChecksum = this.calculateChecksum(migration);
137
+ if (record.checksum && record.checksum !== expectedChecksum) {
138
+ console.error(`Migration v${record.version} checksum mismatch - database may be corrupted`);
139
+ return false;
140
+ }
141
+ }
142
+ return true;
143
+ }
144
+ /**
145
+ * Get migration history
146
+ */
147
+ getHistory() {
148
+ return this.db
149
+ .prepare("SELECT version, description, applied_at FROM schema_version ORDER BY version")
150
+ .all();
151
+ }
152
+ }
153
+ //# 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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"}
@@ -0,0 +1,321 @@
1
+ -- Claude Conversation Memory Database Schema
2
+ -- Version: 1.0.0
3
+ -- Optimized for SQLite + sqlite-vec
4
+
5
+ -- ==================================================
6
+ -- CORE TABLES
7
+ -- ==================================================
8
+
9
+ -- Table 1: Conversations
10
+ CREATE TABLE IF NOT EXISTS conversations (
11
+ id TEXT PRIMARY KEY, -- sessionId from JSONL
12
+ project_path TEXT NOT NULL, -- Derived from directory name
13
+ first_message_at INTEGER NOT NULL,
14
+ last_message_at INTEGER NOT NULL,
15
+ message_count INTEGER DEFAULT 0,
16
+ git_branch TEXT, -- Most recent branch
17
+ claude_version TEXT, -- Most recent version
18
+ metadata TEXT, -- JSON: {cwd, tags}
19
+ created_at INTEGER NOT NULL,
20
+ updated_at INTEGER NOT NULL
21
+ );
22
+
23
+ CREATE INDEX IF NOT EXISTS idx_conv_project ON conversations(project_path);
24
+ CREATE INDEX IF NOT EXISTS idx_conv_time ON conversations(last_message_at);
25
+ CREATE INDEX IF NOT EXISTS idx_conv_branch ON conversations(git_branch);
26
+ CREATE INDEX IF NOT EXISTS idx_conv_created ON conversations(created_at);
27
+
28
+ -- Table 2: Messages
29
+ CREATE TABLE IF NOT EXISTS messages (
30
+ id TEXT PRIMARY KEY, -- uuid from JSONL
31
+ conversation_id TEXT NOT NULL,
32
+ parent_id TEXT, -- parentUuid (threading)
33
+ message_type TEXT NOT NULL, -- user/assistant/system/summary/file-history-snapshot
34
+ role TEXT, -- user/assistant (for user/assistant types)
35
+ content TEXT, -- Main message content
36
+ timestamp INTEGER NOT NULL,
37
+ is_sidechain INTEGER DEFAULT 0, -- Agent messages (boolean as integer)
38
+ agent_id TEXT, -- For agent messages
39
+ request_id TEXT, -- API request ID
40
+ git_branch TEXT,
41
+ cwd TEXT,
42
+ metadata TEXT, -- JSON: full message metadata
43
+ FOREIGN KEY (conversation_id) REFERENCES conversations(id) ON DELETE CASCADE,
44
+ FOREIGN KEY (parent_id) REFERENCES messages(id) ON DELETE SET NULL
45
+ );
46
+
47
+ CREATE INDEX IF NOT EXISTS idx_msg_conv ON messages(conversation_id);
48
+ CREATE INDEX IF NOT EXISTS idx_msg_parent ON messages(parent_id);
49
+ CREATE INDEX IF NOT EXISTS idx_msg_type ON messages(message_type);
50
+ CREATE INDEX IF NOT EXISTS idx_msg_time ON messages(timestamp);
51
+ CREATE INDEX IF NOT EXISTS idx_msg_conv_time ON messages(conversation_id, timestamp);
52
+ CREATE INDEX IF NOT EXISTS idx_msg_role ON messages(role);
53
+
54
+ -- Table 3: Tool Uses
55
+ CREATE TABLE IF NOT EXISTS tool_uses (
56
+ id TEXT PRIMARY KEY, -- tool_use_id (toolu_xxx)
57
+ message_id TEXT NOT NULL,
58
+ tool_name TEXT NOT NULL, -- Bash, Read, Write, Edit, etc.
59
+ tool_input TEXT NOT NULL, -- JSON parameters
60
+ timestamp INTEGER NOT NULL,
61
+ FOREIGN KEY (message_id) REFERENCES messages(id) ON DELETE CASCADE
62
+ );
63
+
64
+ CREATE INDEX IF NOT EXISTS idx_tool_msg ON tool_uses(message_id);
65
+ CREATE INDEX IF NOT EXISTS idx_tool_name ON tool_uses(tool_name);
66
+ CREATE INDEX IF NOT EXISTS idx_tool_time ON tool_uses(timestamp);
67
+ CREATE INDEX IF NOT EXISTS idx_tool_name_time ON tool_uses(tool_name, timestamp);
68
+
69
+ -- Table 4: Tool Results
70
+ CREATE TABLE IF NOT EXISTS tool_results (
71
+ id TEXT PRIMARY KEY,
72
+ tool_use_id TEXT NOT NULL,
73
+ message_id TEXT NOT NULL,
74
+ content TEXT,
75
+ is_error INTEGER DEFAULT 0, -- Boolean as integer
76
+ stdout TEXT,
77
+ stderr TEXT,
78
+ is_image INTEGER DEFAULT 0, -- Boolean as integer
79
+ timestamp INTEGER NOT NULL,
80
+ FOREIGN KEY (tool_use_id) REFERENCES tool_uses(id) ON DELETE CASCADE,
81
+ FOREIGN KEY (message_id) REFERENCES messages(id) ON DELETE CASCADE
82
+ );
83
+
84
+ CREATE INDEX IF NOT EXISTS idx_result_tool ON tool_results(tool_use_id);
85
+ CREATE INDEX IF NOT EXISTS idx_result_msg ON tool_results(message_id);
86
+ CREATE INDEX IF NOT EXISTS idx_result_error ON tool_results(is_error);
87
+
88
+ -- Table 5: File Edits
89
+ CREATE TABLE IF NOT EXISTS file_edits (
90
+ id TEXT PRIMARY KEY,
91
+ conversation_id TEXT NOT NULL,
92
+ file_path TEXT NOT NULL,
93
+ message_id TEXT NOT NULL,
94
+ backup_version INTEGER,
95
+ backup_time INTEGER,
96
+ snapshot_timestamp INTEGER NOT NULL,
97
+ metadata TEXT, -- JSON from trackedFileBackups
98
+ FOREIGN KEY (conversation_id) REFERENCES conversations(id) ON DELETE CASCADE,
99
+ FOREIGN KEY (message_id) REFERENCES messages(id) ON DELETE CASCADE
100
+ );
101
+
102
+ CREATE INDEX IF NOT EXISTS idx_edit_file ON file_edits(file_path);
103
+ CREATE INDEX IF NOT EXISTS idx_edit_conv ON file_edits(conversation_id);
104
+ CREATE INDEX IF NOT EXISTS idx_edit_time ON file_edits(snapshot_timestamp);
105
+ CREATE INDEX IF NOT EXISTS idx_edit_file_time ON file_edits(file_path, snapshot_timestamp);
106
+
107
+ -- Table 6: Thinking Blocks
108
+ CREATE TABLE IF NOT EXISTS thinking_blocks (
109
+ id TEXT PRIMARY KEY,
110
+ message_id TEXT NOT NULL,
111
+ thinking_content TEXT NOT NULL,
112
+ signature TEXT,
113
+ timestamp INTEGER NOT NULL,
114
+ FOREIGN KEY (message_id) REFERENCES messages(id) ON DELETE CASCADE
115
+ );
116
+
117
+ CREATE INDEX IF NOT EXISTS idx_think_msg ON thinking_blocks(message_id);
118
+
119
+ -- ==================================================
120
+ -- ENHANCED MEMORY TABLES
121
+ -- ==================================================
122
+
123
+ -- Table 7: Decisions (Critical for preventing regressions)
124
+ CREATE TABLE IF NOT EXISTS decisions (
125
+ id TEXT PRIMARY KEY,
126
+ conversation_id TEXT NOT NULL,
127
+ message_id TEXT NOT NULL,
128
+ decision_text TEXT NOT NULL,
129
+ rationale TEXT,
130
+ alternatives_considered TEXT, -- JSON array
131
+ rejected_reasons TEXT, -- JSON object
132
+ context TEXT, -- What feature/area
133
+ related_files TEXT, -- JSON array
134
+ related_commits TEXT, -- JSON array (git hashes)
135
+ timestamp INTEGER NOT NULL,
136
+ FOREIGN KEY (conversation_id) REFERENCES conversations(id) ON DELETE CASCADE,
137
+ FOREIGN KEY (message_id) REFERENCES messages(id) ON DELETE CASCADE
138
+ );
139
+
140
+ CREATE INDEX IF NOT EXISTS idx_decision_conv ON decisions(conversation_id);
141
+ CREATE INDEX IF NOT EXISTS idx_decision_time ON decisions(timestamp);
142
+ CREATE INDEX IF NOT EXISTS idx_decision_context ON decisions(context);
143
+
144
+ -- Table 8: Git Commits (Essential for linking code to conversations)
145
+ CREATE TABLE IF NOT EXISTS git_commits (
146
+ hash TEXT PRIMARY KEY,
147
+ message TEXT NOT NULL,
148
+ author TEXT,
149
+ timestamp INTEGER NOT NULL,
150
+ branch TEXT,
151
+ files_changed TEXT, -- JSON array
152
+ conversation_id TEXT, -- Linked conversation
153
+ related_message_id TEXT, -- Message that led to commit
154
+ metadata TEXT, -- JSON: stats, etc.
155
+ FOREIGN KEY (conversation_id) REFERENCES conversations(id) ON DELETE SET NULL,
156
+ FOREIGN KEY (related_message_id) REFERENCES messages(id) ON DELETE SET NULL
157
+ );
158
+
159
+ CREATE INDEX IF NOT EXISTS idx_commit_conv ON git_commits(conversation_id);
160
+ CREATE INDEX IF NOT EXISTS idx_commit_time ON git_commits(timestamp);
161
+ CREATE INDEX IF NOT EXISTS idx_commit_branch ON git_commits(branch);
162
+
163
+ -- Table 9: Mistakes (Learning from errors)
164
+ CREATE TABLE IF NOT EXISTS mistakes (
165
+ id TEXT PRIMARY KEY,
166
+ conversation_id TEXT NOT NULL,
167
+ message_id TEXT NOT NULL,
168
+ mistake_type TEXT NOT NULL, -- logic_error, wrong_approach, misunderstanding
169
+ what_went_wrong TEXT NOT NULL,
170
+ correction TEXT,
171
+ user_correction_message TEXT,
172
+ files_affected TEXT, -- JSON array
173
+ timestamp INTEGER NOT NULL,
174
+ FOREIGN KEY (conversation_id) REFERENCES conversations(id) ON DELETE CASCADE,
175
+ FOREIGN KEY (message_id) REFERENCES messages(id) ON DELETE CASCADE
176
+ );
177
+
178
+ CREATE INDEX IF NOT EXISTS idx_mistake_conv ON mistakes(conversation_id);
179
+ CREATE INDEX IF NOT EXISTS idx_mistake_type ON mistakes(mistake_type);
180
+ CREATE INDEX IF NOT EXISTS idx_mistake_time ON mistakes(timestamp);
181
+
182
+ -- Table 10: File Evolution (Timeline tracking)
183
+ CREATE TABLE IF NOT EXISTS file_evolution (
184
+ id TEXT PRIMARY KEY,
185
+ file_path TEXT NOT NULL,
186
+ conversation_id TEXT NOT NULL,
187
+ change_summary TEXT,
188
+ decision_ids TEXT, -- JSON array
189
+ commit_hash TEXT,
190
+ fixes_mistake_id TEXT,
191
+ timestamp INTEGER NOT NULL,
192
+ FOREIGN KEY (conversation_id) REFERENCES conversations(id) ON DELETE CASCADE,
193
+ FOREIGN KEY (commit_hash) REFERENCES git_commits(hash) ON DELETE SET NULL,
194
+ FOREIGN KEY (fixes_mistake_id) REFERENCES mistakes(id) ON DELETE SET NULL
195
+ );
196
+
197
+ CREATE INDEX IF NOT EXISTS idx_evolution_file ON file_evolution(file_path);
198
+ CREATE INDEX IF NOT EXISTS idx_evolution_time ON file_evolution(timestamp);
199
+ CREATE INDEX IF NOT EXISTS idx_evolution_file_time ON file_evolution(file_path, timestamp);
200
+
201
+ -- Table 11: Requirements (Constraints tracking)
202
+ CREATE TABLE IF NOT EXISTS requirements (
203
+ id TEXT PRIMARY KEY,
204
+ type TEXT NOT NULL, -- dependency, performance, compatibility, business
205
+ description TEXT NOT NULL,
206
+ rationale TEXT,
207
+ affects_components TEXT, -- JSON array
208
+ conversation_id TEXT NOT NULL,
209
+ message_id TEXT NOT NULL,
210
+ timestamp INTEGER NOT NULL,
211
+ FOREIGN KEY (conversation_id) REFERENCES conversations(id) ON DELETE CASCADE,
212
+ FOREIGN KEY (message_id) REFERENCES messages(id) ON DELETE CASCADE
213
+ );
214
+
215
+ CREATE INDEX IF NOT EXISTS idx_req_type ON requirements(type);
216
+ CREATE INDEX IF NOT EXISTS idx_req_conv ON requirements(conversation_id);
217
+
218
+ -- Table 12: Validations (Testing context)
219
+ CREATE TABLE IF NOT EXISTS validations (
220
+ id TEXT PRIMARY KEY,
221
+ conversation_id TEXT NOT NULL,
222
+ what_was_tested TEXT NOT NULL,
223
+ test_command TEXT,
224
+ result TEXT NOT NULL, -- passed, failed, error
225
+ performance_data TEXT, -- JSON
226
+ files_tested TEXT, -- JSON array
227
+ timestamp INTEGER NOT NULL,
228
+ FOREIGN KEY (conversation_id) REFERENCES conversations(id) ON DELETE CASCADE
229
+ );
230
+
231
+ CREATE INDEX IF NOT EXISTS idx_valid_conv ON validations(conversation_id);
232
+ CREATE INDEX IF NOT EXISTS idx_valid_result ON validations(result);
233
+
234
+ -- Table 13: User Preferences (Pattern learning)
235
+ CREATE TABLE IF NOT EXISTS user_preferences (
236
+ id TEXT PRIMARY KEY,
237
+ category TEXT NOT NULL, -- coding_style, architecture, tooling
238
+ preference TEXT NOT NULL,
239
+ rationale TEXT,
240
+ examples TEXT, -- JSON array of conversation_ids
241
+ established_date INTEGER NOT NULL,
242
+ updated_at INTEGER NOT NULL
243
+ );
244
+
245
+ CREATE INDEX IF NOT EXISTS idx_pref_category ON user_preferences(category);
246
+
247
+ -- ==================================================
248
+ -- VECTOR & SEARCH TABLES
249
+ -- ==================================================
250
+
251
+ -- Table 14: Message Embeddings (for semantic search)
252
+ CREATE TABLE IF NOT EXISTS message_embeddings (
253
+ id TEXT PRIMARY KEY,
254
+ message_id TEXT NOT NULL,
255
+ content TEXT NOT NULL,
256
+ embedding BLOB NOT NULL,
257
+ model_name TEXT DEFAULT 'all-MiniLM-L6-v2',
258
+ created_at INTEGER NOT NULL,
259
+ FOREIGN KEY (message_id) REFERENCES messages(id) ON DELETE CASCADE
260
+ );
261
+
262
+ CREATE INDEX IF NOT EXISTS idx_embed_msg ON message_embeddings(message_id);
263
+
264
+ -- Table 15: Decision Embeddings
265
+ CREATE TABLE IF NOT EXISTS decision_embeddings (
266
+ id TEXT PRIMARY KEY,
267
+ decision_id TEXT NOT NULL,
268
+ embedding BLOB NOT NULL,
269
+ created_at INTEGER NOT NULL,
270
+ FOREIGN KEY (decision_id) REFERENCES decisions(id) ON DELETE CASCADE
271
+ );
272
+
273
+ CREATE INDEX IF NOT EXISTS idx_dec_embed ON decision_embeddings(decision_id);
274
+
275
+ -- Table 16: Full-Text Search Index for Messages
276
+ CREATE VIRTUAL TABLE IF NOT EXISTS messages_fts USING fts5(
277
+ id UNINDEXED,
278
+ content,
279
+ context,
280
+ metadata,
281
+ content=messages,
282
+ content_rowid=rowid
283
+ );
284
+
285
+ -- Table 17: Full-Text Search Index for Decisions
286
+ CREATE VIRTUAL TABLE IF NOT EXISTS decisions_fts USING fts5(
287
+ id UNINDEXED,
288
+ decision_text,
289
+ rationale,
290
+ context,
291
+ content=decisions,
292
+ content_rowid=rowid
293
+ );
294
+
295
+ -- ==================================================
296
+ -- PERFORMANCE & CACHING
297
+ -- ==================================================
298
+
299
+ -- Query Cache (Performance optimization)
300
+ CREATE TABLE IF NOT EXISTS query_cache (
301
+ cache_key TEXT PRIMARY KEY,
302
+ result TEXT NOT NULL,
303
+ created_at INTEGER NOT NULL,
304
+ expires_at INTEGER NOT NULL,
305
+ hit_count INTEGER DEFAULT 0,
306
+ last_accessed INTEGER
307
+ );
308
+
309
+ CREATE INDEX IF NOT EXISTS idx_cache_expires ON query_cache(expires_at);
310
+
311
+ -- ==================================================
312
+ -- METADATA TABLE
313
+ -- ==================================================
314
+
315
+ -- Schema Version Tracking
316
+ CREATE TABLE IF NOT EXISTS schema_version (
317
+ version INTEGER PRIMARY KEY,
318
+ applied_at INTEGER NOT NULL,
319
+ description TEXT,
320
+ checksum TEXT
321
+ );