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.
- package/LICENSE +21 -0
- package/README.md +349 -0
- package/dist/ConversationMemory.d.ts +231 -0
- package/dist/ConversationMemory.d.ts.map +1 -0
- package/dist/ConversationMemory.js +357 -0
- package/dist/ConversationMemory.js.map +1 -0
- package/dist/cache/QueryCache.d.ts +215 -0
- package/dist/cache/QueryCache.d.ts.map +1 -0
- package/dist/cache/QueryCache.js +294 -0
- package/dist/cache/QueryCache.js.map +1 -0
- package/dist/cli/commands.d.ts +9 -0
- package/dist/cli/commands.d.ts.map +1 -0
- package/dist/cli/commands.js +954 -0
- package/dist/cli/commands.js.map +1 -0
- package/dist/cli/help.d.ts +16 -0
- package/dist/cli/help.d.ts.map +1 -0
- package/dist/cli/help.js +361 -0
- package/dist/cli/help.js.map +1 -0
- package/dist/cli/index.d.ts +30 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +111 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/context/ContextInjector.d.ts +38 -0
- package/dist/context/ContextInjector.d.ts.map +1 -0
- package/dist/context/ContextInjector.js +235 -0
- package/dist/context/ContextInjector.js.map +1 -0
- package/dist/documentation/CodeAnalyzer.d.ts +29 -0
- package/dist/documentation/CodeAnalyzer.d.ts.map +1 -0
- package/dist/documentation/CodeAnalyzer.js +122 -0
- package/dist/documentation/CodeAnalyzer.js.map +1 -0
- package/dist/documentation/ConversationAnalyzer.d.ts +19 -0
- package/dist/documentation/ConversationAnalyzer.d.ts.map +1 -0
- package/dist/documentation/ConversationAnalyzer.js +157 -0
- package/dist/documentation/ConversationAnalyzer.js.map +1 -0
- package/dist/documentation/CrossReferencer.d.ts +67 -0
- package/dist/documentation/CrossReferencer.d.ts.map +1 -0
- package/dist/documentation/CrossReferencer.js +247 -0
- package/dist/documentation/CrossReferencer.js.map +1 -0
- package/dist/documentation/DocumentationGenerator.d.ts +22 -0
- package/dist/documentation/DocumentationGenerator.d.ts.map +1 -0
- package/dist/documentation/DocumentationGenerator.js +57 -0
- package/dist/documentation/DocumentationGenerator.js.map +1 -0
- package/dist/documentation/MarkdownFormatter.d.ts +26 -0
- package/dist/documentation/MarkdownFormatter.d.ts.map +1 -0
- package/dist/documentation/MarkdownFormatter.js +301 -0
- package/dist/documentation/MarkdownFormatter.js.map +1 -0
- package/dist/documentation/types.d.ts +176 -0
- package/dist/documentation/types.d.ts.map +1 -0
- package/dist/documentation/types.js +5 -0
- package/dist/documentation/types.js.map +1 -0
- package/dist/embeddings/ConfigManager.d.ts +46 -0
- package/dist/embeddings/ConfigManager.d.ts.map +1 -0
- package/dist/embeddings/ConfigManager.js +177 -0
- package/dist/embeddings/ConfigManager.js.map +1 -0
- package/dist/embeddings/EmbeddingConfig.d.ts +39 -0
- package/dist/embeddings/EmbeddingConfig.d.ts.map +1 -0
- package/dist/embeddings/EmbeddingConfig.js +132 -0
- package/dist/embeddings/EmbeddingConfig.js.map +1 -0
- package/dist/embeddings/EmbeddingGenerator.d.ts +51 -0
- package/dist/embeddings/EmbeddingGenerator.d.ts.map +1 -0
- package/dist/embeddings/EmbeddingGenerator.js +157 -0
- package/dist/embeddings/EmbeddingGenerator.js.map +1 -0
- package/dist/embeddings/EmbeddingProvider.d.ts +34 -0
- package/dist/embeddings/EmbeddingProvider.d.ts.map +1 -0
- package/dist/embeddings/EmbeddingProvider.js +6 -0
- package/dist/embeddings/EmbeddingProvider.js.map +1 -0
- package/dist/embeddings/ModelRegistry.d.ts +48 -0
- package/dist/embeddings/ModelRegistry.d.ts.map +1 -0
- package/dist/embeddings/ModelRegistry.js +170 -0
- package/dist/embeddings/ModelRegistry.js.map +1 -0
- package/dist/embeddings/VectorStore.d.ts +114 -0
- package/dist/embeddings/VectorStore.d.ts.map +1 -0
- package/dist/embeddings/VectorStore.js +393 -0
- package/dist/embeddings/VectorStore.js.map +1 -0
- package/dist/embeddings/providers/OllamaEmbeddings.d.ts +38 -0
- package/dist/embeddings/providers/OllamaEmbeddings.d.ts.map +1 -0
- package/dist/embeddings/providers/OllamaEmbeddings.js +125 -0
- package/dist/embeddings/providers/OllamaEmbeddings.js.map +1 -0
- package/dist/embeddings/providers/OpenAIEmbeddings.d.ts +40 -0
- package/dist/embeddings/providers/OpenAIEmbeddings.d.ts.map +1 -0
- package/dist/embeddings/providers/OpenAIEmbeddings.js +129 -0
- package/dist/embeddings/providers/OpenAIEmbeddings.js.map +1 -0
- package/dist/embeddings/providers/TransformersEmbeddings.d.ts +38 -0
- package/dist/embeddings/providers/TransformersEmbeddings.d.ts.map +1 -0
- package/dist/embeddings/providers/TransformersEmbeddings.js +115 -0
- package/dist/embeddings/providers/TransformersEmbeddings.js.map +1 -0
- package/dist/handoff/SessionHandoffStore.d.ts +80 -0
- package/dist/handoff/SessionHandoffStore.d.ts.map +1 -0
- package/dist/handoff/SessionHandoffStore.js +314 -0
- package/dist/handoff/SessionHandoffStore.js.map +1 -0
- package/dist/index.d.ts +7 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +115 -0
- package/dist/index.js.map +1 -0
- package/dist/mcp-server.d.ts +27 -0
- package/dist/mcp-server.d.ts.map +1 -0
- package/dist/mcp-server.js +157 -0
- package/dist/mcp-server.js.map +1 -0
- package/dist/memory/WorkingMemoryStore.d.ts +83 -0
- package/dist/memory/WorkingMemoryStore.d.ts.map +1 -0
- package/dist/memory/WorkingMemoryStore.js +318 -0
- package/dist/memory/WorkingMemoryStore.js.map +1 -0
- package/dist/memory/types.d.ts +192 -0
- package/dist/memory/types.d.ts.map +1 -0
- package/dist/memory/types.js +8 -0
- package/dist/memory/types.js.map +1 -0
- package/dist/parsers/CodexConversationParser.d.ts +51 -0
- package/dist/parsers/CodexConversationParser.d.ts.map +1 -0
- package/dist/parsers/CodexConversationParser.js +301 -0
- package/dist/parsers/CodexConversationParser.js.map +1 -0
- package/dist/parsers/ConversationParser.d.ts +286 -0
- package/dist/parsers/ConversationParser.d.ts.map +1 -0
- package/dist/parsers/ConversationParser.js +795 -0
- package/dist/parsers/ConversationParser.js.map +1 -0
- package/dist/parsers/DecisionExtractor.d.ts +144 -0
- package/dist/parsers/DecisionExtractor.d.ts.map +1 -0
- package/dist/parsers/DecisionExtractor.js +434 -0
- package/dist/parsers/DecisionExtractor.js.map +1 -0
- package/dist/parsers/GitIntegrator.d.ts +156 -0
- package/dist/parsers/GitIntegrator.d.ts.map +1 -0
- package/dist/parsers/GitIntegrator.js +348 -0
- package/dist/parsers/GitIntegrator.js.map +1 -0
- package/dist/parsers/MistakeExtractor.d.ts +151 -0
- package/dist/parsers/MistakeExtractor.d.ts.map +1 -0
- package/dist/parsers/MistakeExtractor.js +460 -0
- package/dist/parsers/MistakeExtractor.js.map +1 -0
- package/dist/parsers/RequirementsExtractor.d.ts +166 -0
- package/dist/parsers/RequirementsExtractor.d.ts.map +1 -0
- package/dist/parsers/RequirementsExtractor.js +338 -0
- package/dist/parsers/RequirementsExtractor.js.map +1 -0
- package/dist/realtime/ConversationWatcher.d.ts +87 -0
- package/dist/realtime/ConversationWatcher.d.ts.map +1 -0
- package/dist/realtime/ConversationWatcher.js +204 -0
- package/dist/realtime/ConversationWatcher.js.map +1 -0
- package/dist/realtime/IncrementalParser.d.ts +83 -0
- package/dist/realtime/IncrementalParser.d.ts.map +1 -0
- package/dist/realtime/IncrementalParser.js +232 -0
- package/dist/realtime/IncrementalParser.js.map +1 -0
- package/dist/realtime/LiveExtractor.d.ts +72 -0
- package/dist/realtime/LiveExtractor.d.ts.map +1 -0
- package/dist/realtime/LiveExtractor.js +288 -0
- package/dist/realtime/LiveExtractor.js.map +1 -0
- package/dist/search/SemanticSearch.d.ts +121 -0
- package/dist/search/SemanticSearch.d.ts.map +1 -0
- package/dist/search/SemanticSearch.js +823 -0
- package/dist/search/SemanticSearch.js.map +1 -0
- package/dist/storage/BackupManager.d.ts +58 -0
- package/dist/storage/BackupManager.d.ts.map +1 -0
- package/dist/storage/BackupManager.js +223 -0
- package/dist/storage/BackupManager.js.map +1 -0
- package/dist/storage/ConversationStorage.d.ts +341 -0
- package/dist/storage/ConversationStorage.d.ts.map +1 -0
- package/dist/storage/ConversationStorage.js +792 -0
- package/dist/storage/ConversationStorage.js.map +1 -0
- package/dist/storage/DeletionService.d.ts +70 -0
- package/dist/storage/DeletionService.d.ts.map +1 -0
- package/dist/storage/DeletionService.js +253 -0
- package/dist/storage/DeletionService.js.map +1 -0
- package/dist/storage/GlobalIndex.d.ts +133 -0
- package/dist/storage/GlobalIndex.d.ts.map +1 -0
- package/dist/storage/GlobalIndex.js +310 -0
- package/dist/storage/GlobalIndex.js.map +1 -0
- package/dist/storage/SQLiteManager.d.ts +114 -0
- package/dist/storage/SQLiteManager.d.ts.map +1 -0
- package/dist/storage/SQLiteManager.js +636 -0
- package/dist/storage/SQLiteManager.js.map +1 -0
- package/dist/storage/migrations.d.ts +54 -0
- package/dist/storage/migrations.d.ts.map +1 -0
- package/dist/storage/migrations.js +285 -0
- package/dist/storage/migrations.js.map +1 -0
- package/dist/storage/schema.sql +436 -0
- package/dist/tools/ToolDefinitions.d.ts +946 -0
- package/dist/tools/ToolDefinitions.d.ts.map +1 -0
- package/dist/tools/ToolDefinitions.js +937 -0
- package/dist/tools/ToolDefinitions.js.map +1 -0
- package/dist/tools/ToolHandlers.d.ts +791 -0
- package/dist/tools/ToolHandlers.d.ts.map +1 -0
- package/dist/tools/ToolHandlers.js +3262 -0
- package/dist/tools/ToolHandlers.js.map +1 -0
- package/dist/types/ToolTypes.d.ts +824 -0
- package/dist/types/ToolTypes.d.ts.map +1 -0
- package/dist/types/ToolTypes.js +6 -0
- package/dist/types/ToolTypes.js.map +1 -0
- package/dist/utils/Logger.d.ts +70 -0
- package/dist/utils/Logger.d.ts.map +1 -0
- package/dist/utils/Logger.js +131 -0
- package/dist/utils/Logger.js.map +1 -0
- package/dist/utils/McpConfig.d.ts +54 -0
- package/dist/utils/McpConfig.d.ts.map +1 -0
- package/dist/utils/McpConfig.js +136 -0
- package/dist/utils/McpConfig.js.map +1 -0
- package/dist/utils/ProjectMigration.d.ts +82 -0
- package/dist/utils/ProjectMigration.d.ts.map +1 -0
- package/dist/utils/ProjectMigration.js +416 -0
- package/dist/utils/ProjectMigration.js.map +1 -0
- package/dist/utils/constants.d.ts +75 -0
- package/dist/utils/constants.d.ts.map +1 -0
- package/dist/utils/constants.js +105 -0
- package/dist/utils/constants.js.map +1 -0
- package/dist/utils/safeJson.d.ts +37 -0
- package/dist/utils/safeJson.d.ts.map +1 -0
- package/dist/utils/safeJson.js +48 -0
- package/dist/utils/safeJson.js.map +1 -0
- package/dist/utils/sanitization.d.ts +45 -0
- package/dist/utils/sanitization.d.ts.map +1 -0
- package/dist/utils/sanitization.js +153 -0
- package/dist/utils/sanitization.js.map +1 -0
- package/dist/utils/worktree.d.ts +15 -0
- package/dist/utils/worktree.d.ts.map +1 -0
- package/dist/utils/worktree.js +86 -0
- package/dist/utils/worktree.js.map +1 -0
- package/package.json +98 -0
- package/scripts/changelog-check.sh +62 -0
- package/scripts/check-node.js +17 -0
- package/scripts/dev-config.js +56 -0
- package/scripts/postinstall.js +117 -0
|
@@ -0,0 +1,436 @@
|
|
|
1
|
+
-- CCCMemory 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
|
+
source_type TEXT DEFAULT 'claude-code', -- 'claude-code' or 'codex'
|
|
14
|
+
first_message_at INTEGER NOT NULL,
|
|
15
|
+
last_message_at INTEGER NOT NULL,
|
|
16
|
+
message_count INTEGER DEFAULT 0,
|
|
17
|
+
git_branch TEXT, -- Most recent branch
|
|
18
|
+
claude_version TEXT, -- Most recent version
|
|
19
|
+
metadata TEXT, -- JSON: {cwd, tags}
|
|
20
|
+
created_at INTEGER NOT NULL,
|
|
21
|
+
updated_at INTEGER NOT NULL
|
|
22
|
+
);
|
|
23
|
+
|
|
24
|
+
CREATE INDEX IF NOT EXISTS idx_conv_project ON conversations(project_path);
|
|
25
|
+
CREATE INDEX IF NOT EXISTS idx_conv_source ON conversations(source_type);
|
|
26
|
+
CREATE INDEX IF NOT EXISTS idx_conv_time ON conversations(last_message_at);
|
|
27
|
+
CREATE INDEX IF NOT EXISTS idx_conv_branch ON conversations(git_branch);
|
|
28
|
+
CREATE INDEX IF NOT EXISTS idx_conv_created ON conversations(created_at);
|
|
29
|
+
|
|
30
|
+
-- Table 2: Messages
|
|
31
|
+
CREATE TABLE IF NOT EXISTS messages (
|
|
32
|
+
id TEXT PRIMARY KEY, -- uuid from JSONL
|
|
33
|
+
conversation_id TEXT NOT NULL,
|
|
34
|
+
parent_id TEXT, -- parentUuid (threading)
|
|
35
|
+
message_type TEXT NOT NULL, -- user/assistant/system/summary/file-history-snapshot
|
|
36
|
+
role TEXT, -- user/assistant (for user/assistant types)
|
|
37
|
+
content TEXT, -- Main message content
|
|
38
|
+
timestamp INTEGER NOT NULL,
|
|
39
|
+
is_sidechain INTEGER DEFAULT 0, -- Agent messages (boolean as integer)
|
|
40
|
+
agent_id TEXT, -- For agent messages
|
|
41
|
+
request_id TEXT, -- API request ID
|
|
42
|
+
git_branch TEXT,
|
|
43
|
+
cwd TEXT,
|
|
44
|
+
metadata TEXT, -- JSON: full message metadata
|
|
45
|
+
FOREIGN KEY (conversation_id) REFERENCES conversations(id) ON DELETE CASCADE,
|
|
46
|
+
FOREIGN KEY (parent_id) REFERENCES messages(id) ON DELETE SET NULL
|
|
47
|
+
);
|
|
48
|
+
|
|
49
|
+
CREATE INDEX IF NOT EXISTS idx_msg_conv ON messages(conversation_id);
|
|
50
|
+
CREATE INDEX IF NOT EXISTS idx_msg_parent ON messages(parent_id);
|
|
51
|
+
CREATE INDEX IF NOT EXISTS idx_msg_type ON messages(message_type);
|
|
52
|
+
CREATE INDEX IF NOT EXISTS idx_msg_time ON messages(timestamp);
|
|
53
|
+
CREATE INDEX IF NOT EXISTS idx_msg_conv_time ON messages(conversation_id, timestamp);
|
|
54
|
+
CREATE INDEX IF NOT EXISTS idx_msg_role ON messages(role);
|
|
55
|
+
|
|
56
|
+
-- Table 3: Tool Uses
|
|
57
|
+
CREATE TABLE IF NOT EXISTS tool_uses (
|
|
58
|
+
id TEXT PRIMARY KEY, -- tool_use_id (toolu_xxx)
|
|
59
|
+
message_id TEXT NOT NULL,
|
|
60
|
+
tool_name TEXT NOT NULL, -- Bash, Read, Write, Edit, etc.
|
|
61
|
+
tool_input TEXT NOT NULL, -- JSON parameters
|
|
62
|
+
timestamp INTEGER NOT NULL,
|
|
63
|
+
FOREIGN KEY (message_id) REFERENCES messages(id) ON DELETE CASCADE
|
|
64
|
+
);
|
|
65
|
+
|
|
66
|
+
CREATE INDEX IF NOT EXISTS idx_tool_msg ON tool_uses(message_id);
|
|
67
|
+
CREATE INDEX IF NOT EXISTS idx_tool_name ON tool_uses(tool_name);
|
|
68
|
+
CREATE INDEX IF NOT EXISTS idx_tool_time ON tool_uses(timestamp);
|
|
69
|
+
CREATE INDEX IF NOT EXISTS idx_tool_name_time ON tool_uses(tool_name, timestamp);
|
|
70
|
+
|
|
71
|
+
-- Table 4: Tool Results
|
|
72
|
+
CREATE TABLE IF NOT EXISTS tool_results (
|
|
73
|
+
id TEXT PRIMARY KEY,
|
|
74
|
+
tool_use_id TEXT NOT NULL,
|
|
75
|
+
message_id TEXT NOT NULL,
|
|
76
|
+
content TEXT,
|
|
77
|
+
is_error INTEGER DEFAULT 0, -- Boolean as integer
|
|
78
|
+
stdout TEXT,
|
|
79
|
+
stderr TEXT,
|
|
80
|
+
is_image INTEGER DEFAULT 0, -- Boolean as integer
|
|
81
|
+
timestamp INTEGER NOT NULL,
|
|
82
|
+
FOREIGN KEY (tool_use_id) REFERENCES tool_uses(id) ON DELETE CASCADE,
|
|
83
|
+
FOREIGN KEY (message_id) REFERENCES messages(id) ON DELETE CASCADE
|
|
84
|
+
);
|
|
85
|
+
|
|
86
|
+
CREATE INDEX IF NOT EXISTS idx_result_tool ON tool_results(tool_use_id);
|
|
87
|
+
CREATE INDEX IF NOT EXISTS idx_result_msg ON tool_results(message_id);
|
|
88
|
+
CREATE INDEX IF NOT EXISTS idx_result_error ON tool_results(is_error);
|
|
89
|
+
|
|
90
|
+
-- Table 5: File Edits
|
|
91
|
+
CREATE TABLE IF NOT EXISTS file_edits (
|
|
92
|
+
id TEXT PRIMARY KEY,
|
|
93
|
+
conversation_id TEXT NOT NULL,
|
|
94
|
+
file_path TEXT NOT NULL,
|
|
95
|
+
message_id TEXT NOT NULL,
|
|
96
|
+
backup_version INTEGER,
|
|
97
|
+
backup_time INTEGER,
|
|
98
|
+
snapshot_timestamp INTEGER NOT NULL,
|
|
99
|
+
metadata TEXT, -- JSON from trackedFileBackups
|
|
100
|
+
FOREIGN KEY (conversation_id) REFERENCES conversations(id) ON DELETE CASCADE,
|
|
101
|
+
FOREIGN KEY (message_id) REFERENCES messages(id) ON DELETE CASCADE
|
|
102
|
+
);
|
|
103
|
+
|
|
104
|
+
CREATE INDEX IF NOT EXISTS idx_edit_file ON file_edits(file_path);
|
|
105
|
+
CREATE INDEX IF NOT EXISTS idx_edit_conv ON file_edits(conversation_id);
|
|
106
|
+
CREATE INDEX IF NOT EXISTS idx_edit_time ON file_edits(snapshot_timestamp);
|
|
107
|
+
CREATE INDEX IF NOT EXISTS idx_edit_file_time ON file_edits(file_path, snapshot_timestamp);
|
|
108
|
+
|
|
109
|
+
-- Table 6: Thinking Blocks
|
|
110
|
+
CREATE TABLE IF NOT EXISTS thinking_blocks (
|
|
111
|
+
id TEXT PRIMARY KEY,
|
|
112
|
+
message_id TEXT NOT NULL,
|
|
113
|
+
thinking_content TEXT NOT NULL,
|
|
114
|
+
signature TEXT,
|
|
115
|
+
timestamp INTEGER NOT NULL,
|
|
116
|
+
FOREIGN KEY (message_id) REFERENCES messages(id) ON DELETE CASCADE
|
|
117
|
+
);
|
|
118
|
+
|
|
119
|
+
CREATE INDEX IF NOT EXISTS idx_think_msg ON thinking_blocks(message_id);
|
|
120
|
+
|
|
121
|
+
-- ==================================================
|
|
122
|
+
-- ENHANCED MEMORY TABLES
|
|
123
|
+
-- ==================================================
|
|
124
|
+
|
|
125
|
+
-- Table 7: Decisions (Critical for preventing regressions)
|
|
126
|
+
CREATE TABLE IF NOT EXISTS decisions (
|
|
127
|
+
id TEXT PRIMARY KEY,
|
|
128
|
+
conversation_id TEXT NOT NULL,
|
|
129
|
+
message_id TEXT NOT NULL,
|
|
130
|
+
decision_text TEXT NOT NULL,
|
|
131
|
+
rationale TEXT,
|
|
132
|
+
alternatives_considered TEXT, -- JSON array
|
|
133
|
+
rejected_reasons TEXT, -- JSON object
|
|
134
|
+
context TEXT, -- What feature/area
|
|
135
|
+
related_files TEXT, -- JSON array
|
|
136
|
+
related_commits TEXT, -- JSON array (git hashes)
|
|
137
|
+
timestamp INTEGER NOT NULL,
|
|
138
|
+
FOREIGN KEY (conversation_id) REFERENCES conversations(id) ON DELETE CASCADE,
|
|
139
|
+
FOREIGN KEY (message_id) REFERENCES messages(id) ON DELETE CASCADE
|
|
140
|
+
);
|
|
141
|
+
|
|
142
|
+
CREATE INDEX IF NOT EXISTS idx_decision_conv ON decisions(conversation_id);
|
|
143
|
+
CREATE INDEX IF NOT EXISTS idx_decision_time ON decisions(timestamp);
|
|
144
|
+
CREATE INDEX IF NOT EXISTS idx_decision_context ON decisions(context);
|
|
145
|
+
|
|
146
|
+
-- Table 8: Git Commits (Essential for linking code to conversations)
|
|
147
|
+
CREATE TABLE IF NOT EXISTS git_commits (
|
|
148
|
+
hash TEXT PRIMARY KEY,
|
|
149
|
+
message TEXT NOT NULL,
|
|
150
|
+
author TEXT,
|
|
151
|
+
timestamp INTEGER NOT NULL,
|
|
152
|
+
branch TEXT,
|
|
153
|
+
files_changed TEXT, -- JSON array
|
|
154
|
+
conversation_id TEXT, -- Linked conversation
|
|
155
|
+
related_message_id TEXT, -- Message that led to commit
|
|
156
|
+
metadata TEXT, -- JSON: stats, etc.
|
|
157
|
+
FOREIGN KEY (conversation_id) REFERENCES conversations(id) ON DELETE SET NULL,
|
|
158
|
+
FOREIGN KEY (related_message_id) REFERENCES messages(id) ON DELETE SET NULL
|
|
159
|
+
);
|
|
160
|
+
|
|
161
|
+
CREATE INDEX IF NOT EXISTS idx_commit_conv ON git_commits(conversation_id);
|
|
162
|
+
CREATE INDEX IF NOT EXISTS idx_commit_time ON git_commits(timestamp);
|
|
163
|
+
CREATE INDEX IF NOT EXISTS idx_commit_branch ON git_commits(branch);
|
|
164
|
+
|
|
165
|
+
-- Table 9: Mistakes (Learning from errors)
|
|
166
|
+
CREATE TABLE IF NOT EXISTS mistakes (
|
|
167
|
+
id TEXT PRIMARY KEY,
|
|
168
|
+
conversation_id TEXT NOT NULL,
|
|
169
|
+
message_id TEXT NOT NULL,
|
|
170
|
+
mistake_type TEXT NOT NULL, -- logic_error, wrong_approach, misunderstanding
|
|
171
|
+
what_went_wrong TEXT NOT NULL,
|
|
172
|
+
correction TEXT,
|
|
173
|
+
user_correction_message TEXT,
|
|
174
|
+
files_affected TEXT, -- JSON array
|
|
175
|
+
timestamp INTEGER NOT NULL,
|
|
176
|
+
FOREIGN KEY (conversation_id) REFERENCES conversations(id) ON DELETE CASCADE,
|
|
177
|
+
FOREIGN KEY (message_id) REFERENCES messages(id) ON DELETE CASCADE
|
|
178
|
+
);
|
|
179
|
+
|
|
180
|
+
CREATE INDEX IF NOT EXISTS idx_mistake_conv ON mistakes(conversation_id);
|
|
181
|
+
CREATE INDEX IF NOT EXISTS idx_mistake_type ON mistakes(mistake_type);
|
|
182
|
+
CREATE INDEX IF NOT EXISTS idx_mistake_time ON mistakes(timestamp);
|
|
183
|
+
|
|
184
|
+
-- Table 10: File Evolution (Timeline tracking)
|
|
185
|
+
CREATE TABLE IF NOT EXISTS file_evolution (
|
|
186
|
+
id TEXT PRIMARY KEY,
|
|
187
|
+
file_path TEXT NOT NULL,
|
|
188
|
+
conversation_id TEXT NOT NULL,
|
|
189
|
+
change_summary TEXT,
|
|
190
|
+
decision_ids TEXT, -- JSON array
|
|
191
|
+
commit_hash TEXT,
|
|
192
|
+
fixes_mistake_id TEXT,
|
|
193
|
+
timestamp INTEGER NOT NULL,
|
|
194
|
+
FOREIGN KEY (conversation_id) REFERENCES conversations(id) ON DELETE CASCADE,
|
|
195
|
+
FOREIGN KEY (commit_hash) REFERENCES git_commits(hash) ON DELETE SET NULL,
|
|
196
|
+
FOREIGN KEY (fixes_mistake_id) REFERENCES mistakes(id) ON DELETE SET NULL
|
|
197
|
+
);
|
|
198
|
+
|
|
199
|
+
CREATE INDEX IF NOT EXISTS idx_evolution_file ON file_evolution(file_path);
|
|
200
|
+
CREATE INDEX IF NOT EXISTS idx_evolution_time ON file_evolution(timestamp);
|
|
201
|
+
CREATE INDEX IF NOT EXISTS idx_evolution_file_time ON file_evolution(file_path, timestamp);
|
|
202
|
+
|
|
203
|
+
-- Table 11: Requirements (Constraints tracking)
|
|
204
|
+
CREATE TABLE IF NOT EXISTS requirements (
|
|
205
|
+
id TEXT PRIMARY KEY,
|
|
206
|
+
type TEXT NOT NULL, -- dependency, performance, compatibility, business
|
|
207
|
+
description TEXT NOT NULL,
|
|
208
|
+
rationale TEXT,
|
|
209
|
+
affects_components TEXT, -- JSON array
|
|
210
|
+
conversation_id TEXT NOT NULL,
|
|
211
|
+
message_id TEXT NOT NULL,
|
|
212
|
+
timestamp INTEGER NOT NULL,
|
|
213
|
+
FOREIGN KEY (conversation_id) REFERENCES conversations(id) ON DELETE CASCADE,
|
|
214
|
+
FOREIGN KEY (message_id) REFERENCES messages(id) ON DELETE CASCADE
|
|
215
|
+
);
|
|
216
|
+
|
|
217
|
+
CREATE INDEX IF NOT EXISTS idx_req_type ON requirements(type);
|
|
218
|
+
CREATE INDEX IF NOT EXISTS idx_req_conv ON requirements(conversation_id);
|
|
219
|
+
|
|
220
|
+
-- Table 12: Validations (Testing context)
|
|
221
|
+
CREATE TABLE IF NOT EXISTS validations (
|
|
222
|
+
id TEXT PRIMARY KEY,
|
|
223
|
+
conversation_id TEXT NOT NULL,
|
|
224
|
+
what_was_tested TEXT NOT NULL,
|
|
225
|
+
test_command TEXT,
|
|
226
|
+
result TEXT NOT NULL, -- passed, failed, error
|
|
227
|
+
performance_data TEXT, -- JSON
|
|
228
|
+
files_tested TEXT, -- JSON array
|
|
229
|
+
timestamp INTEGER NOT NULL,
|
|
230
|
+
FOREIGN KEY (conversation_id) REFERENCES conversations(id) ON DELETE CASCADE
|
|
231
|
+
);
|
|
232
|
+
|
|
233
|
+
CREATE INDEX IF NOT EXISTS idx_valid_conv ON validations(conversation_id);
|
|
234
|
+
CREATE INDEX IF NOT EXISTS idx_valid_result ON validations(result);
|
|
235
|
+
|
|
236
|
+
-- Table 13: User Preferences (Pattern learning)
|
|
237
|
+
CREATE TABLE IF NOT EXISTS user_preferences (
|
|
238
|
+
id TEXT PRIMARY KEY,
|
|
239
|
+
category TEXT NOT NULL, -- coding_style, architecture, tooling
|
|
240
|
+
preference TEXT NOT NULL,
|
|
241
|
+
rationale TEXT,
|
|
242
|
+
examples TEXT, -- JSON array of conversation_ids
|
|
243
|
+
established_date INTEGER NOT NULL,
|
|
244
|
+
updated_at INTEGER NOT NULL
|
|
245
|
+
);
|
|
246
|
+
|
|
247
|
+
CREATE INDEX IF NOT EXISTS idx_pref_category ON user_preferences(category);
|
|
248
|
+
|
|
249
|
+
-- ==================================================
|
|
250
|
+
-- VECTOR & SEARCH TABLES
|
|
251
|
+
-- ==================================================
|
|
252
|
+
|
|
253
|
+
-- Table 14: Message Embeddings (for semantic search)
|
|
254
|
+
CREATE TABLE IF NOT EXISTS message_embeddings (
|
|
255
|
+
id TEXT PRIMARY KEY,
|
|
256
|
+
message_id TEXT NOT NULL,
|
|
257
|
+
content TEXT NOT NULL,
|
|
258
|
+
embedding BLOB NOT NULL,
|
|
259
|
+
model_name TEXT DEFAULT 'all-MiniLM-L6-v2',
|
|
260
|
+
created_at INTEGER NOT NULL,
|
|
261
|
+
FOREIGN KEY (message_id) REFERENCES messages(id) ON DELETE CASCADE
|
|
262
|
+
);
|
|
263
|
+
|
|
264
|
+
CREATE INDEX IF NOT EXISTS idx_embed_msg ON message_embeddings(message_id);
|
|
265
|
+
|
|
266
|
+
-- Table 15: Decision Embeddings
|
|
267
|
+
CREATE TABLE IF NOT EXISTS decision_embeddings (
|
|
268
|
+
id TEXT PRIMARY KEY,
|
|
269
|
+
decision_id TEXT NOT NULL,
|
|
270
|
+
embedding BLOB NOT NULL,
|
|
271
|
+
created_at INTEGER NOT NULL,
|
|
272
|
+
FOREIGN KEY (decision_id) REFERENCES decisions(id) ON DELETE CASCADE
|
|
273
|
+
);
|
|
274
|
+
|
|
275
|
+
CREATE INDEX IF NOT EXISTS idx_dec_embed ON decision_embeddings(decision_id);
|
|
276
|
+
|
|
277
|
+
-- Table 16: Mistake Embeddings (for semantic search of mistakes)
|
|
278
|
+
CREATE TABLE IF NOT EXISTS mistake_embeddings (
|
|
279
|
+
id TEXT PRIMARY KEY,
|
|
280
|
+
mistake_id TEXT NOT NULL,
|
|
281
|
+
embedding BLOB NOT NULL,
|
|
282
|
+
created_at INTEGER NOT NULL,
|
|
283
|
+
FOREIGN KEY (mistake_id) REFERENCES mistakes(id) ON DELETE CASCADE
|
|
284
|
+
);
|
|
285
|
+
|
|
286
|
+
CREATE INDEX IF NOT EXISTS idx_mistake_embed ON mistake_embeddings(mistake_id);
|
|
287
|
+
|
|
288
|
+
-- Table 17: Full-Text Search Index for Messages
|
|
289
|
+
-- NOTE: Column names must match the messages table exactly for external content mode
|
|
290
|
+
CREATE VIRTUAL TABLE IF NOT EXISTS messages_fts USING fts5(
|
|
291
|
+
id UNINDEXED,
|
|
292
|
+
content,
|
|
293
|
+
metadata,
|
|
294
|
+
content=messages,
|
|
295
|
+
content_rowid=rowid
|
|
296
|
+
);
|
|
297
|
+
|
|
298
|
+
-- Table 18: Full-Text Search Index for Decisions
|
|
299
|
+
CREATE VIRTUAL TABLE IF NOT EXISTS decisions_fts USING fts5(
|
|
300
|
+
id UNINDEXED,
|
|
301
|
+
decision_text,
|
|
302
|
+
rationale,
|
|
303
|
+
context,
|
|
304
|
+
content=decisions,
|
|
305
|
+
content_rowid=rowid
|
|
306
|
+
);
|
|
307
|
+
|
|
308
|
+
-- Table 19: Full-Text Search Index for Mistakes (standalone, not content-synced)
|
|
309
|
+
CREATE VIRTUAL TABLE IF NOT EXISTS mistakes_fts USING fts5(
|
|
310
|
+
id,
|
|
311
|
+
what_went_wrong,
|
|
312
|
+
correction,
|
|
313
|
+
mistake_type
|
|
314
|
+
);
|
|
315
|
+
|
|
316
|
+
-- ==================================================
|
|
317
|
+
-- PERFORMANCE & CACHING
|
|
318
|
+
-- ==================================================
|
|
319
|
+
|
|
320
|
+
-- Query Cache (Performance optimization)
|
|
321
|
+
CREATE TABLE IF NOT EXISTS query_cache (
|
|
322
|
+
cache_key TEXT PRIMARY KEY,
|
|
323
|
+
result TEXT NOT NULL,
|
|
324
|
+
created_at INTEGER NOT NULL,
|
|
325
|
+
expires_at INTEGER NOT NULL,
|
|
326
|
+
hit_count INTEGER DEFAULT 0,
|
|
327
|
+
last_accessed INTEGER
|
|
328
|
+
);
|
|
329
|
+
|
|
330
|
+
CREATE INDEX IF NOT EXISTS idx_cache_expires ON query_cache(expires_at);
|
|
331
|
+
|
|
332
|
+
-- ==================================================
|
|
333
|
+
-- METADATA TABLE
|
|
334
|
+
-- ==================================================
|
|
335
|
+
|
|
336
|
+
-- Schema Version Tracking
|
|
337
|
+
CREATE TABLE IF NOT EXISTS schema_version (
|
|
338
|
+
version INTEGER PRIMARY KEY,
|
|
339
|
+
applied_at INTEGER NOT NULL,
|
|
340
|
+
description TEXT,
|
|
341
|
+
checksum TEXT
|
|
342
|
+
);
|
|
343
|
+
|
|
344
|
+
-- ==================================================
|
|
345
|
+
-- GLOBAL INDEX TABLE (for cross-project search)
|
|
346
|
+
-- ==================================================
|
|
347
|
+
|
|
348
|
+
-- Table 18: Project Metadata (Global registry of all indexed projects)
|
|
349
|
+
CREATE TABLE IF NOT EXISTS project_metadata (
|
|
350
|
+
id TEXT PRIMARY KEY, -- UUID for project entry
|
|
351
|
+
project_path TEXT NOT NULL UNIQUE, -- Absolute path to project
|
|
352
|
+
source_type TEXT NOT NULL, -- 'claude-code' or 'codex'
|
|
353
|
+
db_path TEXT NOT NULL, -- Path to project's database
|
|
354
|
+
last_indexed INTEGER NOT NULL, -- Last indexing timestamp
|
|
355
|
+
message_count INTEGER DEFAULT 0, -- Total messages indexed
|
|
356
|
+
conversation_count INTEGER DEFAULT 0, -- Total conversations indexed
|
|
357
|
+
decision_count INTEGER DEFAULT 0, -- Total decisions indexed
|
|
358
|
+
mistake_count INTEGER DEFAULT 0, -- Total mistakes indexed
|
|
359
|
+
metadata TEXT, -- JSON: {git_repo, last_commit, etc}
|
|
360
|
+
created_at INTEGER NOT NULL,
|
|
361
|
+
updated_at INTEGER NOT NULL
|
|
362
|
+
);
|
|
363
|
+
|
|
364
|
+
CREATE INDEX IF NOT EXISTS idx_proj_source ON project_metadata(source_type);
|
|
365
|
+
CREATE INDEX IF NOT EXISTS idx_proj_last_indexed ON project_metadata(last_indexed);
|
|
366
|
+
CREATE INDEX IF NOT EXISTS idx_proj_path ON project_metadata(project_path);
|
|
367
|
+
|
|
368
|
+
-- ==================================================
|
|
369
|
+
-- LIVE CONTEXT LAYER TABLES
|
|
370
|
+
-- ==================================================
|
|
371
|
+
|
|
372
|
+
-- Table 19: Working Memory (Key-value store for facts/context)
|
|
373
|
+
CREATE TABLE IF NOT EXISTS working_memory (
|
|
374
|
+
id TEXT PRIMARY KEY,
|
|
375
|
+
key TEXT NOT NULL,
|
|
376
|
+
value TEXT NOT NULL,
|
|
377
|
+
context TEXT,
|
|
378
|
+
tags TEXT, -- JSON array
|
|
379
|
+
session_id TEXT,
|
|
380
|
+
project_path TEXT NOT NULL,
|
|
381
|
+
created_at INTEGER NOT NULL,
|
|
382
|
+
updated_at INTEGER NOT NULL,
|
|
383
|
+
expires_at INTEGER,
|
|
384
|
+
embedding BLOB,
|
|
385
|
+
UNIQUE(project_path, key)
|
|
386
|
+
);
|
|
387
|
+
|
|
388
|
+
CREATE INDEX IF NOT EXISTS idx_wm_session ON working_memory(session_id);
|
|
389
|
+
CREATE INDEX IF NOT EXISTS idx_wm_project ON working_memory(project_path);
|
|
390
|
+
CREATE INDEX IF NOT EXISTS idx_wm_expires ON working_memory(expires_at);
|
|
391
|
+
CREATE INDEX IF NOT EXISTS idx_wm_key ON working_memory(key);
|
|
392
|
+
CREATE INDEX IF NOT EXISTS idx_wm_project_key ON working_memory(project_path, key);
|
|
393
|
+
|
|
394
|
+
-- Table 20: Session Handoffs (Context transfer between conversations)
|
|
395
|
+
CREATE TABLE IF NOT EXISTS session_handoffs (
|
|
396
|
+
id TEXT PRIMARY KEY,
|
|
397
|
+
from_session_id TEXT NOT NULL,
|
|
398
|
+
project_path TEXT NOT NULL,
|
|
399
|
+
created_at INTEGER NOT NULL,
|
|
400
|
+
handoff_data TEXT NOT NULL, -- JSON with decisions, files, tasks, memory
|
|
401
|
+
resumed_by_session_id TEXT,
|
|
402
|
+
resumed_at INTEGER
|
|
403
|
+
);
|
|
404
|
+
|
|
405
|
+
CREATE INDEX IF NOT EXISTS idx_handoff_session ON session_handoffs(from_session_id);
|
|
406
|
+
CREATE INDEX IF NOT EXISTS idx_handoff_project ON session_handoffs(project_path);
|
|
407
|
+
CREATE INDEX IF NOT EXISTS idx_handoff_created ON session_handoffs(created_at);
|
|
408
|
+
CREATE INDEX IF NOT EXISTS idx_handoff_resumed ON session_handoffs(resumed_by_session_id);
|
|
409
|
+
|
|
410
|
+
-- Table 21: Session Checkpoints (Real-time progress tracking)
|
|
411
|
+
CREATE TABLE IF NOT EXISTS session_checkpoints (
|
|
412
|
+
id TEXT PRIMARY KEY,
|
|
413
|
+
session_id TEXT NOT NULL,
|
|
414
|
+
project_path TEXT NOT NULL,
|
|
415
|
+
checkpoint_number INTEGER NOT NULL,
|
|
416
|
+
created_at INTEGER NOT NULL,
|
|
417
|
+
decisions TEXT, -- JSON array
|
|
418
|
+
active_files TEXT, -- JSON array
|
|
419
|
+
task_state TEXT, -- JSON
|
|
420
|
+
context_summary TEXT NOT NULL
|
|
421
|
+
);
|
|
422
|
+
|
|
423
|
+
CREATE INDEX IF NOT EXISTS idx_checkpoint_session ON session_checkpoints(session_id);
|
|
424
|
+
CREATE INDEX IF NOT EXISTS idx_checkpoint_project ON session_checkpoints(project_path);
|
|
425
|
+
CREATE INDEX IF NOT EXISTS idx_checkpoint_created ON session_checkpoints(created_at);
|
|
426
|
+
CREATE UNIQUE INDEX IF NOT EXISTS idx_checkpoint_session_num ON session_checkpoints(session_id, checkpoint_number);
|
|
427
|
+
|
|
428
|
+
-- Table 22: Full-Text Search Index for Working Memory
|
|
429
|
+
CREATE VIRTUAL TABLE IF NOT EXISTS working_memory_fts USING fts5(
|
|
430
|
+
id UNINDEXED,
|
|
431
|
+
key,
|
|
432
|
+
value,
|
|
433
|
+
context,
|
|
434
|
+
content=working_memory,
|
|
435
|
+
content_rowid=rowid
|
|
436
|
+
);
|