memctx 1.0.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 (151) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +289 -0
  3. package/dist/bin/claudectx.d.ts +2 -0
  4. package/dist/bin/claudectx.js +304 -0
  5. package/dist/bin/claudectx.js.map +1 -0
  6. package/dist/installer/daemon.d.ts +3 -0
  7. package/dist/installer/daemon.js +80 -0
  8. package/dist/installer/daemon.js.map +1 -0
  9. package/dist/installer/patch-settings.d.ts +2 -0
  10. package/dist/installer/patch-settings.js +83 -0
  11. package/dist/installer/patch-settings.js.map +1 -0
  12. package/dist/src/api/consolidate.d.ts +3 -0
  13. package/dist/src/api/consolidate.js +29 -0
  14. package/dist/src/api/consolidate.js.map +1 -0
  15. package/dist/src/api/context.d.ts +1 -0
  16. package/dist/src/api/context.js +26 -0
  17. package/dist/src/api/context.js.map +1 -0
  18. package/dist/src/api/force-end-session.d.ts +2 -0
  19. package/dist/src/api/force-end-session.js +60 -0
  20. package/dist/src/api/force-end-session.js.map +1 -0
  21. package/dist/src/api/health.d.ts +1 -0
  22. package/dist/src/api/health.js +27 -0
  23. package/dist/src/api/health.js.map +1 -0
  24. package/dist/src/api/hook.d.ts +2 -0
  25. package/dist/src/api/hook.js +187 -0
  26. package/dist/src/api/hook.js.map +1 -0
  27. package/dist/src/api/logs.d.ts +2 -0
  28. package/dist/src/api/logs.js +66 -0
  29. package/dist/src/api/logs.js.map +1 -0
  30. package/dist/src/api/memory.d.ts +2 -0
  31. package/dist/src/api/memory.js +93 -0
  32. package/dist/src/api/memory.js.map +1 -0
  33. package/dist/src/api/metrics.d.ts +3 -0
  34. package/dist/src/api/metrics.js +58 -0
  35. package/dist/src/api/metrics.js.map +1 -0
  36. package/dist/src/api/observations.d.ts +1 -0
  37. package/dist/src/api/observations.js +31 -0
  38. package/dist/src/api/observations.js.map +1 -0
  39. package/dist/src/api/projects.d.ts +1 -0
  40. package/dist/src/api/projects.js +29 -0
  41. package/dist/src/api/projects.js.map +1 -0
  42. package/dist/src/api/resync.d.ts +3 -0
  43. package/dist/src/api/resync.js +188 -0
  44. package/dist/src/api/resync.js.map +1 -0
  45. package/dist/src/api/search.d.ts +1 -0
  46. package/dist/src/api/search.js +36 -0
  47. package/dist/src/api/search.js.map +1 -0
  48. package/dist/src/api/sessions.d.ts +1 -0
  49. package/dist/src/api/sessions.js +137 -0
  50. package/dist/src/api/sessions.js.map +1 -0
  51. package/dist/src/api/settings.d.ts +2 -0
  52. package/dist/src/api/settings.js +90 -0
  53. package/dist/src/api/settings.js.map +1 -0
  54. package/dist/src/api/tags.d.ts +1 -0
  55. package/dist/src/api/tags.js +89 -0
  56. package/dist/src/api/tags.js.map +1 -0
  57. package/dist/src/config.d.ts +17 -0
  58. package/dist/src/config.js +39 -0
  59. package/dist/src/config.js.map +1 -0
  60. package/dist/src/db/client.d.ts +3 -0
  61. package/dist/src/db/client.js +38 -0
  62. package/dist/src/db/client.js.map +1 -0
  63. package/dist/src/db/migrate.d.ts +1 -0
  64. package/dist/src/db/migrate.js +56 -0
  65. package/dist/src/db/migrate.js.map +1 -0
  66. package/dist/src/db/migrations/001_add_memory_tables.sql +149 -0
  67. package/dist/src/db/migrations/002_add_project_id_to_memory.sql +25 -0
  68. package/dist/src/db/migrations/003_enhance_sessions_schema.sql +27 -0
  69. package/dist/src/db/migrations/004_add_bookmarks.sql +5 -0
  70. package/dist/src/db/migrations/005_add_tags.sql +21 -0
  71. package/dist/src/db/migrations/006_add_notes.sql +2 -0
  72. package/dist/src/db/migrations/007_add_archived.sql +2 -0
  73. package/dist/src/db/queries.d.ts +104 -0
  74. package/dist/src/db/queries.js +432 -0
  75. package/dist/src/db/queries.js.map +1 -0
  76. package/dist/src/db/schema.d.ts +1 -0
  77. package/dist/src/db/schema.js +81 -0
  78. package/dist/src/db/schema.js.map +1 -0
  79. package/dist/src/hooks/post-tool-use.d.ts +1 -0
  80. package/dist/src/hooks/post-tool-use.js +23 -0
  81. package/dist/src/hooks/post-tool-use.js.map +1 -0
  82. package/dist/src/hooks/pre-compact.d.ts +1 -0
  83. package/dist/src/hooks/pre-compact.js +18 -0
  84. package/dist/src/hooks/pre-compact.js.map +1 -0
  85. package/dist/src/hooks/session-end.d.ts +1 -0
  86. package/dist/src/hooks/session-end.js +20 -0
  87. package/dist/src/hooks/session-end.js.map +1 -0
  88. package/dist/src/hooks/session-start.d.ts +1 -0
  89. package/dist/src/hooks/session-start.js +32 -0
  90. package/dist/src/hooks/session-start.js.map +1 -0
  91. package/dist/src/hooks/stop.d.ts +1 -0
  92. package/dist/src/hooks/stop.js +22 -0
  93. package/dist/src/hooks/stop.js.map +1 -0
  94. package/dist/src/hooks/user-prompt-submit.d.ts +1 -0
  95. package/dist/src/hooks/user-prompt-submit.js +18 -0
  96. package/dist/src/hooks/user-prompt-submit.js.map +1 -0
  97. package/dist/src/hooks/utils.d.ts +3 -0
  98. package/dist/src/hooks/utils.js +96 -0
  99. package/dist/src/hooks/utils.js.map +1 -0
  100. package/dist/src/index.d.ts +1 -0
  101. package/dist/src/index.js +92 -0
  102. package/dist/src/index.js.map +1 -0
  103. package/dist/src/services/auto-summarizer.d.ts +5 -0
  104. package/dist/src/services/auto-summarizer.js +50 -0
  105. package/dist/src/services/auto-summarizer.js.map +1 -0
  106. package/dist/src/services/claude-md-updater.d.ts +1 -0
  107. package/dist/src/services/claude-md-updater.js +43 -0
  108. package/dist/src/services/claude-md-updater.js.map +1 -0
  109. package/dist/src/services/context-builder.d.ts +1 -0
  110. package/dist/src/services/context-builder.js +97 -0
  111. package/dist/src/services/context-builder.js.map +1 -0
  112. package/dist/src/services/fuzzy-task-matcher.d.ts +37 -0
  113. package/dist/src/services/fuzzy-task-matcher.js +96 -0
  114. package/dist/src/services/fuzzy-task-matcher.js.map +1 -0
  115. package/dist/src/services/logger.d.ts +20 -0
  116. package/dist/src/services/logger.js +43 -0
  117. package/dist/src/services/logger.js.map +1 -0
  118. package/dist/src/services/memory-consolidator.d.ts +32 -0
  119. package/dist/src/services/memory-consolidator.js +192 -0
  120. package/dist/src/services/memory-consolidator.js.map +1 -0
  121. package/dist/src/services/memory-decay.d.ts +16 -0
  122. package/dist/src/services/memory-decay.js +79 -0
  123. package/dist/src/services/memory-decay.js.map +1 -0
  124. package/dist/src/services/metrics.d.ts +58 -0
  125. package/dist/src/services/metrics.js +100 -0
  126. package/dist/src/services/metrics.js.map +1 -0
  127. package/dist/src/services/project-detector.d.ts +5 -0
  128. package/dist/src/services/project-detector.js +43 -0
  129. package/dist/src/services/project-detector.js.map +1 -0
  130. package/dist/src/services/queue.d.ts +2 -0
  131. package/dist/src/services/queue.js +16 -0
  132. package/dist/src/services/queue.js.map +1 -0
  133. package/dist/src/services/session-timeout.d.ts +1 -0
  134. package/dist/src/services/session-timeout.js +50 -0
  135. package/dist/src/services/session-timeout.js.map +1 -0
  136. package/dist/src/services/summarization-queue.d.ts +43 -0
  137. package/dist/src/services/summarization-queue.js +150 -0
  138. package/dist/src/services/summarization-queue.js.map +1 -0
  139. package/dist/src/services/summarizer.d.ts +2 -0
  140. package/dist/src/services/summarizer.js +239 -0
  141. package/dist/src/services/summarizer.js.map +1 -0
  142. package/dist/src/services/transcript-reader.d.ts +9 -0
  143. package/dist/src/services/transcript-reader.js +50 -0
  144. package/dist/src/services/transcript-reader.js.map +1 -0
  145. package/dist/src/services/watcher.d.ts +1 -0
  146. package/dist/src/services/watcher.js +34 -0
  147. package/dist/src/services/watcher.js.map +1 -0
  148. package/dist/src/ws/broadcast.d.ts +3 -0
  149. package/dist/src/ws/broadcast.js +24 -0
  150. package/dist/src/ws/broadcast.js.map +1 -0
  151. package/package.json +66 -0
@@ -0,0 +1,104 @@
1
+ export declare const queries: {
2
+ upsertProject(p: {
3
+ id: string;
4
+ name: string;
5
+ root_path: string;
6
+ git_remote: string | null;
7
+ }): void;
8
+ getProject(id: string): any;
9
+ getAllProjects(): any[];
10
+ getProjectWithSessions(id: string): any;
11
+ upsertSession(s: {
12
+ id: string;
13
+ project_id: string;
14
+ started_at: number;
15
+ status: string;
16
+ }): void;
17
+ updateSession(id: string, fields: Record<string, any>): void;
18
+ getSession(id: string): any;
19
+ deleteSession(id: string): void;
20
+ updateSessionBookmark(id: string, bookmarked: number): void;
21
+ updateSessionArchived(id: string, archived: number): void;
22
+ getSessions(opts: {
23
+ project_id?: string;
24
+ limit?: number;
25
+ offset?: number;
26
+ status?: string;
27
+ }): any[];
28
+ getActiveSessions(): any[];
29
+ getLastNCompletedSessions(project_id: string, n: number): any[];
30
+ getSessionWithObservations(id: string): any;
31
+ insertObservation(o: {
32
+ session_id: string;
33
+ project_id: string;
34
+ event_type: string;
35
+ tool_name?: string;
36
+ file_path?: string;
37
+ content?: string;
38
+ metadata?: string;
39
+ }): void;
40
+ incrementTurnStats(session_id: string, field: "turns" | "tool_calls"): void;
41
+ addFileTouched(session_id: string, file_path: string): void;
42
+ searchObservations(query: string, project_id?: string): any[];
43
+ getSetting(key: string): string | null;
44
+ setSetting(key: string, value: string): void;
45
+ getRecentActivity(days?: number): any[];
46
+ getPreferences(projectId?: string, category?: string): any[];
47
+ setPreference(category: string, key: string, value: string, confidence?: number, sessionId?: string, projectId?: string): void;
48
+ getKnowledge(category?: string, limit?: number, projectId?: string): any[];
49
+ addKnowledge(item: {
50
+ id: string;
51
+ category: string;
52
+ topic: string;
53
+ content: string;
54
+ confidence?: number;
55
+ sessionId?: string;
56
+ projectId?: string;
57
+ }): void;
58
+ getPatterns(type?: string, limit?: number, projectId?: string): any[];
59
+ addPattern(pattern: {
60
+ id: string;
61
+ type: string;
62
+ title: string;
63
+ description: string;
64
+ example?: string;
65
+ projectId?: string;
66
+ }): void;
67
+ incrementPatternSuccess(id: string): void;
68
+ getTasks(status?: string, projectId?: string): any[];
69
+ addTask(task: {
70
+ id: string;
71
+ title: string;
72
+ description?: string;
73
+ status?: string;
74
+ priority?: string;
75
+ projectId?: string;
76
+ sessionId?: string;
77
+ }): void;
78
+ updateTask(id: string, fields: {
79
+ status?: string;
80
+ priority?: string;
81
+ completedSessionId?: string;
82
+ }): void;
83
+ getContacts(projectId?: string, type?: string): any[];
84
+ addContact(contact: {
85
+ id: string;
86
+ name: string;
87
+ type: string;
88
+ role?: string;
89
+ email?: string;
90
+ metadata?: string;
91
+ projectId?: string;
92
+ }): void;
93
+ addInteraction(contactId: string, sessionId: string, type: string, context: string): void;
94
+ deletePreference(id: number): void;
95
+ deleteKnowledge(id: string): void;
96
+ deletePattern(id: string): void;
97
+ getTags(projectId: string): any[];
98
+ createTag(projectId: string, name: string, color?: string): number | bigint;
99
+ getSessionTags(sessionId: string): any[];
100
+ addSessionTag(sessionId: string, tagId: number): void;
101
+ removeSessionTag(sessionId: string, tagId: number): void;
102
+ deleteTag(tagId: number): void;
103
+ updateSessionNotes(sessionId: string, notes: string): void;
104
+ };
@@ -0,0 +1,432 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.queries = void 0;
4
+ const client_1 = require("./client");
5
+ function run(sql, ...params) {
6
+ const db = (0, client_1.getDB)();
7
+ const stmt = db.prepare(sql);
8
+ return stmt.run(...params);
9
+ }
10
+ function get(sql, ...params) {
11
+ const db = (0, client_1.getDB)();
12
+ const stmt = db.prepare(sql);
13
+ return stmt.get(...params) ?? null;
14
+ }
15
+ function all(sql, ...params) {
16
+ const db = (0, client_1.getDB)();
17
+ const stmt = db.prepare(sql);
18
+ return stmt.all(...params) ?? [];
19
+ }
20
+ exports.queries = {
21
+ upsertProject(p) {
22
+ run(`
23
+ INSERT INTO projects (id, name, root_path, git_remote, updated_at)
24
+ VALUES (?, ?, ?, ?, unixepoch())
25
+ ON CONFLICT(id) DO UPDATE SET
26
+ name = excluded.name,
27
+ git_remote = excluded.git_remote,
28
+ updated_at = unixepoch()
29
+ `, p.id, p.name, p.root_path, p.git_remote);
30
+ },
31
+ getProject(id) {
32
+ return get('SELECT * FROM projects WHERE id = ?', id);
33
+ },
34
+ getAllProjects() {
35
+ return all(`
36
+ SELECT p.*,
37
+ COUNT(DISTINCT s.id) as session_count,
38
+ MAX(s.started_at) as last_session_at
39
+ FROM projects p
40
+ LEFT JOIN sessions s ON s.project_id = p.id
41
+ GROUP BY p.id
42
+ ORDER BY last_session_at DESC
43
+ `);
44
+ },
45
+ getProjectWithSessions(id) {
46
+ const project = get('SELECT * FROM projects WHERE id = ?', id);
47
+ if (!project)
48
+ return null;
49
+ const sessions = all(`
50
+ SELECT * FROM sessions WHERE project_id = ? ORDER BY started_at DESC LIMIT 50
51
+ `, id);
52
+ return { ...project, sessions };
53
+ },
54
+ upsertSession(s) {
55
+ run(`
56
+ INSERT INTO sessions (id, project_id, started_at, status)
57
+ VALUES (?, ?, ?, ?)
58
+ ON CONFLICT(id) DO UPDATE SET
59
+ status = excluded.status
60
+ `, s.id, s.project_id, s.started_at, s.status);
61
+ },
62
+ updateSession(id, fields) {
63
+ const keys = Object.keys(fields);
64
+ if (keys.length === 0)
65
+ return;
66
+ let attempts = 0;
67
+ while (attempts < 3) {
68
+ try {
69
+ const setClauses = keys.map(k => `${k} = ?`).join(', ');
70
+ const values = keys.map(k => fields[k]);
71
+ run(`UPDATE sessions SET ${setClauses} WHERE id = ?`, ...values, id);
72
+ return;
73
+ }
74
+ catch (err) {
75
+ if (err.message?.includes('SQLITE_BUSY') && attempts < 2) {
76
+ attempts++;
77
+ const start = Date.now();
78
+ while (Date.now() - start < 100) { }
79
+ }
80
+ else {
81
+ throw err;
82
+ }
83
+ }
84
+ }
85
+ },
86
+ getSession(id) {
87
+ return get('SELECT * FROM sessions WHERE id = ?', id);
88
+ },
89
+ deleteSession(id) {
90
+ // Delete all related data first
91
+ run('DELETE FROM observations WHERE session_id = ?', id);
92
+ run('DELETE FROM preferences WHERE source_session_id = ?', id);
93
+ run('DELETE FROM knowledge_items WHERE source_session_id = ?', id);
94
+ run('DELETE FROM tasks WHERE created_session_id = ? OR completed_session_id = ?', id, id);
95
+ // learned_patterns and contacts don't have session_id columns, so skip them
96
+ // Finally delete the session
97
+ run('DELETE FROM sessions WHERE id = ?', id);
98
+ },
99
+ updateSessionBookmark(id, bookmarked) {
100
+ run('UPDATE sessions SET is_bookmarked = ? WHERE id = ?', bookmarked, id);
101
+ },
102
+ updateSessionArchived(id, archived) {
103
+ run('UPDATE sessions SET is_archived = ? WHERE id = ?', archived, id);
104
+ },
105
+ getSessions(opts) {
106
+ const conditions = ['1=1'];
107
+ const params = [];
108
+ if (opts.project_id) {
109
+ conditions.push('project_id = ?');
110
+ params.push(opts.project_id);
111
+ }
112
+ if (opts.status) {
113
+ conditions.push('status = ?');
114
+ params.push(opts.status);
115
+ }
116
+ params.push(opts.limit ?? 20, opts.offset ?? 0);
117
+ return all(`SELECT * FROM sessions WHERE ${conditions.join(' AND ')} ORDER BY started_at DESC LIMIT ? OFFSET ?`, ...params);
118
+ },
119
+ getActiveSessions() {
120
+ return all(`
121
+ SELECT * FROM sessions
122
+ WHERE status = 'active' OR (status IS NULL AND ended_at IS NULL)
123
+ ORDER BY started_at DESC
124
+ `);
125
+ },
126
+ getLastNCompletedSessions(project_id, n) {
127
+ return all(`
128
+ SELECT * FROM sessions
129
+ WHERE project_id = ?
130
+ AND status IN ('completed', 'compacted')
131
+ AND summary_title IS NOT NULL
132
+ ORDER BY started_at DESC
133
+ LIMIT ?
134
+ `, project_id, n);
135
+ },
136
+ getSessionWithObservations(id) {
137
+ const session = get('SELECT * FROM sessions WHERE id = ?', id);
138
+ if (!session)
139
+ return null;
140
+ const observations = all('SELECT * FROM observations WHERE session_id = ? ORDER BY created_at ASC', id);
141
+ return { ...session, observations };
142
+ },
143
+ insertObservation(o) {
144
+ run(`
145
+ INSERT INTO observations (session_id, project_id, event_type, tool_name, file_path, content, metadata)
146
+ VALUES (?, ?, ?, ?, ?, ?, ?)
147
+ `, o.session_id, o.project_id, o.event_type, o.tool_name ?? null, o.file_path ?? null, o.content ?? null, o.metadata ?? '{}');
148
+ },
149
+ incrementTurnStats(session_id, field) {
150
+ const col = field === 'turns' ? 'total_turns' : 'total_tool_calls';
151
+ run(`UPDATE sessions SET ${col} = COALESCE(${col}, 0) + 1 WHERE id = ?`, session_id);
152
+ },
153
+ addFileTouched(session_id, file_path) {
154
+ const session = get('SELECT files_touched FROM sessions WHERE id = ?', session_id);
155
+ if (!session)
156
+ return;
157
+ let files = [];
158
+ try {
159
+ files = JSON.parse(session.files_touched || '[]');
160
+ }
161
+ catch { }
162
+ if (!files.includes(file_path)) {
163
+ files.push(file_path);
164
+ run('UPDATE sessions SET files_touched = ? WHERE id = ?', JSON.stringify(files), session_id);
165
+ }
166
+ },
167
+ searchObservations(query, project_id) {
168
+ if (project_id) {
169
+ return all(`
170
+ SELECT o.*, s.summary_title as session_title, p.name as project_name,
171
+ rank as relevance_rank
172
+ FROM obs_fts
173
+ JOIN observations o ON obs_fts.rowid = o.id
174
+ JOIN sessions s ON o.session_id = s.id
175
+ JOIN projects p ON o.project_id = p.id
176
+ WHERE obs_fts MATCH ? AND o.project_id = ?
177
+ ORDER BY rank
178
+ LIMIT 50
179
+ `, query, project_id);
180
+ }
181
+ return all(`
182
+ SELECT o.*, s.summary_title as session_title, p.name as project_name,
183
+ rank as relevance_rank
184
+ FROM obs_fts
185
+ JOIN observations o ON obs_fts.rowid = o.id
186
+ JOIN sessions s ON o.session_id = s.id
187
+ JOIN projects p ON o.project_id = p.id
188
+ WHERE obs_fts MATCH ?
189
+ ORDER BY rank
190
+ LIMIT 50
191
+ `, query);
192
+ },
193
+ getSetting(key) {
194
+ const row = get('SELECT value FROM settings WHERE key = ?', key);
195
+ return row ? row.value : null;
196
+ },
197
+ setSetting(key, value) {
198
+ run('INSERT OR REPLACE INTO settings (key, value) VALUES (?, ?)', key, value);
199
+ },
200
+ getRecentActivity(days = 14) {
201
+ return all(`
202
+ SELECT date(started_at, 'unixepoch') as day, COUNT(*) as session_count
203
+ FROM sessions
204
+ WHERE started_at > unixepoch('now', '-${days} days')
205
+ GROUP BY day
206
+ ORDER BY day ASC
207
+ `);
208
+ },
209
+ // Memory System Queries
210
+ // Preferences
211
+ getPreferences(projectId, category) {
212
+ const conditions = [];
213
+ const params = [];
214
+ if (projectId) {
215
+ conditions.push('project_id = ?');
216
+ params.push(projectId);
217
+ }
218
+ if (category) {
219
+ conditions.push('category = ?');
220
+ params.push(category);
221
+ }
222
+ const where = conditions.length > 0 ? `WHERE ${conditions.join(' AND ')}` : '';
223
+ return all(`SELECT * FROM preferences ${where} ORDER BY category, key`, ...params);
224
+ },
225
+ setPreference(category, key, value, confidence = 1.0, sessionId, projectId) {
226
+ run(`
227
+ INSERT INTO preferences (category, key, value, confidence, source_session_id, project_id)
228
+ VALUES (?, ?, ?, ?, ?, ?)
229
+ ON CONFLICT(category, key) DO UPDATE SET
230
+ value = excluded.value,
231
+ confidence = excluded.confidence,
232
+ source_session_id = excluded.source_session_id,
233
+ project_id = excluded.project_id,
234
+ updated_at = unixepoch()
235
+ `, category, key, value, confidence, sessionId ?? null, projectId ?? null);
236
+ },
237
+ // Knowledge
238
+ getKnowledge(category, limit = 10, projectId) {
239
+ const conditions = [];
240
+ const params = [];
241
+ if (projectId) {
242
+ conditions.push('project_id = ?');
243
+ params.push(projectId);
244
+ }
245
+ if (category) {
246
+ conditions.push('category = ?');
247
+ params.push(category);
248
+ }
249
+ const where = conditions.length > 0 ? `WHERE ${conditions.join(' AND ')}` : '';
250
+ params.push(limit);
251
+ return all(`
252
+ SELECT * FROM knowledge_items
253
+ ${where}
254
+ ORDER BY confidence DESC, updated_at DESC
255
+ LIMIT ?
256
+ `, ...params);
257
+ },
258
+ addKnowledge(item) {
259
+ run(`
260
+ INSERT INTO knowledge_items (id, category, topic, content, confidence, source_session_id, project_id)
261
+ VALUES (?, ?, ?, ?, ?, ?, ?)
262
+ ON CONFLICT(id) DO UPDATE SET
263
+ content = excluded.content,
264
+ confidence = excluded.confidence,
265
+ updated_at = unixepoch()
266
+ `, item.id, item.category, item.topic, item.content, item.confidence ?? 0.5, item.sessionId ?? null, item.projectId ?? null);
267
+ },
268
+ // Patterns
269
+ getPatterns(type, limit = 10, projectId) {
270
+ const conditions = [];
271
+ const params = [];
272
+ if (projectId) {
273
+ conditions.push('project_id = ?');
274
+ params.push(projectId);
275
+ }
276
+ if (type) {
277
+ conditions.push('pattern_type = ?');
278
+ params.push(type);
279
+ }
280
+ const where = conditions.length > 0 ? `WHERE ${conditions.join(' AND ')}` : '';
281
+ params.push(limit);
282
+ return all(`
283
+ SELECT * FROM learned_patterns
284
+ ${where}
285
+ ORDER BY success_count DESC, last_used_at DESC
286
+ LIMIT ?
287
+ `, ...params);
288
+ },
289
+ addPattern(pattern) {
290
+ run(`
291
+ INSERT INTO learned_patterns (id, pattern_type, title, description, example, project_id)
292
+ VALUES (?, ?, ?, ?, ?, ?)
293
+ ON CONFLICT(id) DO UPDATE SET
294
+ description = excluded.description,
295
+ example = excluded.example,
296
+ updated_at = unixepoch()
297
+ `, pattern.id, pattern.type, pattern.title, pattern.description, pattern.example ?? null, pattern.projectId ?? null);
298
+ },
299
+ incrementPatternSuccess(id) {
300
+ run(`
301
+ UPDATE learned_patterns
302
+ SET success_count = success_count + 1, last_used_at = unixepoch()
303
+ WHERE id = ?
304
+ `, id);
305
+ },
306
+ // Tasks
307
+ getTasks(status, projectId) {
308
+ const conditions = ['1=1'];
309
+ const params = [];
310
+ if (status) {
311
+ conditions.push('status = ?');
312
+ params.push(status);
313
+ }
314
+ if (projectId) {
315
+ conditions.push('project_id = ?');
316
+ params.push(projectId);
317
+ }
318
+ return all(`
319
+ SELECT * FROM tasks
320
+ WHERE ${conditions.join(' AND ')}
321
+ ORDER BY
322
+ CASE priority
323
+ WHEN 'urgent' THEN 1
324
+ WHEN 'high' THEN 2
325
+ WHEN 'medium' THEN 3
326
+ ELSE 4
327
+ END,
328
+ created_at DESC
329
+ `, ...params);
330
+ },
331
+ addTask(task) {
332
+ run(`
333
+ INSERT INTO tasks (id, title, description, status, priority, project_id, created_session_id)
334
+ VALUES (?, ?, ?, ?, ?, ?, ?)
335
+ `, task.id, task.title, task.description ?? null, task.status ?? 'pending', task.priority ?? 'medium', task.projectId ?? null, task.sessionId ?? null);
336
+ },
337
+ updateTask(id, fields) {
338
+ const updates = [];
339
+ const params = [];
340
+ if (fields.status) {
341
+ updates.push('status = ?');
342
+ params.push(fields.status);
343
+ }
344
+ if (fields.priority) {
345
+ updates.push('priority = ?');
346
+ params.push(fields.priority);
347
+ }
348
+ if (fields.completedSessionId) {
349
+ updates.push('completed_session_id = ?');
350
+ params.push(fields.completedSessionId);
351
+ updates.push('completed_at = unixepoch()');
352
+ }
353
+ if (updates.length > 0) {
354
+ updates.push('updated_at = unixepoch()');
355
+ params.push(id);
356
+ run(`UPDATE tasks SET ${updates.join(', ')} WHERE id = ?`, ...params);
357
+ }
358
+ },
359
+ // Contacts
360
+ getContacts(projectId, type) {
361
+ const conditions = [];
362
+ const params = [];
363
+ if (projectId) {
364
+ conditions.push('project_id = ?');
365
+ params.push(projectId);
366
+ }
367
+ if (type) {
368
+ conditions.push('type = ?');
369
+ params.push(type);
370
+ }
371
+ const where = conditions.length > 0 ? `WHERE ${conditions.join(' AND ')}` : '';
372
+ return all(`SELECT * FROM contacts ${where} ORDER BY type, name`, ...params);
373
+ },
374
+ addContact(contact) {
375
+ run(`
376
+ INSERT INTO contacts (id, name, type, role, email, metadata, project_id)
377
+ VALUES (?, ?, ?, ?, ?, ?, ?)
378
+ ON CONFLICT(id) DO UPDATE SET
379
+ name = excluded.name,
380
+ role = excluded.role,
381
+ email = excluded.email,
382
+ metadata = excluded.metadata,
383
+ project_id = excluded.project_id,
384
+ updated_at = unixepoch()
385
+ `, contact.id, contact.name, contact.type, contact.role ?? null, contact.email ?? null, contact.metadata ?? null, contact.projectId ?? null);
386
+ },
387
+ addInteraction(contactId, sessionId, type, context) {
388
+ run(`
389
+ INSERT INTO interactions (contact_id, session_id, interaction_type, context)
390
+ VALUES (?, ?, ?, ?)
391
+ `, contactId, sessionId, type, context);
392
+ },
393
+ // Delete methods for consolidation
394
+ deletePreference(id) {
395
+ run('DELETE FROM preferences WHERE id = ?', id);
396
+ },
397
+ deleteKnowledge(id) {
398
+ run('DELETE FROM knowledge_items WHERE id = ?', id);
399
+ },
400
+ deletePattern(id) {
401
+ run('DELETE FROM learned_patterns WHERE id = ?', id);
402
+ },
403
+ // Tags
404
+ getTags(projectId) {
405
+ return all('SELECT * FROM tags WHERE project_id = ? ORDER BY name', projectId);
406
+ },
407
+ createTag(projectId, name, color) {
408
+ const result = run('INSERT INTO tags (project_id, name, color) VALUES (?, ?, ?) ON CONFLICT(project_id, name) DO UPDATE SET color = excluded.color RETURNING id', projectId, name, color ?? null);
409
+ return result.lastInsertRowid;
410
+ },
411
+ getSessionTags(sessionId) {
412
+ return all(`
413
+ SELECT t.* FROM tags t
414
+ JOIN session_tags st ON st.tag_id = t.id
415
+ WHERE st.session_id = ?
416
+ ORDER BY t.name
417
+ `, sessionId);
418
+ },
419
+ addSessionTag(sessionId, tagId) {
420
+ run('INSERT OR IGNORE INTO session_tags (session_id, tag_id) VALUES (?, ?)', sessionId, tagId);
421
+ },
422
+ removeSessionTag(sessionId, tagId) {
423
+ run('DELETE FROM session_tags WHERE session_id = ? AND tag_id = ?', sessionId, tagId);
424
+ },
425
+ deleteTag(tagId) {
426
+ run('DELETE FROM tags WHERE id = ?', tagId);
427
+ },
428
+ updateSessionNotes(sessionId, notes) {
429
+ run('UPDATE sessions SET notes = ? WHERE id = ?', notes, sessionId);
430
+ }
431
+ };
432
+ //# sourceMappingURL=queries.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"queries.js","sourceRoot":"","sources":["../../../src/db/queries.ts"],"names":[],"mappings":";;;AAAA,qCAAgC;AAEhC,SAAS,GAAG,CAAC,GAAW,EAAE,GAAG,MAAa;IACxC,MAAM,EAAE,GAAG,IAAA,cAAK,GAAE,CAAA;IAClB,MAAM,IAAI,GAAG,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,CAAA;IAC5B,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,CAAA;AAC5B,CAAC;AAED,SAAS,GAAG,CAAC,GAAW,EAAE,GAAG,MAAa;IACxC,MAAM,EAAE,GAAG,IAAA,cAAK,GAAE,CAAA;IAClB,MAAM,IAAI,GAAG,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,CAAA;IAC5B,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,IAAI,IAAI,CAAA;AACpC,CAAC;AAED,SAAS,GAAG,CAAC,GAAW,EAAE,GAAG,MAAa;IACxC,MAAM,EAAE,GAAG,IAAA,cAAK,GAAE,CAAA;IAClB,MAAM,IAAI,GAAG,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,CAAA;IAC5B,OAAQ,IAAI,CAAC,GAAG,CAAC,GAAG,MAAM,CAAW,IAAI,EAAE,CAAA;AAC7C,CAAC;AAEY,QAAA,OAAO,GAAG;IACrB,aAAa,CAAC,CAA6E;QACzF,GAAG,CAAC;;;;;;;KAOH,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC,UAAU,CAAC,CAAA;IAC7C,CAAC;IAED,UAAU,CAAC,EAAU;QACnB,OAAO,GAAG,CAAC,qCAAqC,EAAE,EAAE,CAAC,CAAA;IACvD,CAAC;IAED,cAAc;QACZ,OAAO,GAAG,CAAC;;;;;;;;KAQV,CAAC,CAAA;IACJ,CAAC;IAED,sBAAsB,CAAC,EAAU;QAC/B,MAAM,OAAO,GAAG,GAAG,CAAC,qCAAqC,EAAE,EAAE,CAAC,CAAA;QAC9D,IAAI,CAAC,OAAO;YAAE,OAAO,IAAI,CAAA;QACzB,MAAM,QAAQ,GAAG,GAAG,CAAC;;KAEpB,EAAE,EAAE,CAAC,CAAA;QACN,OAAO,EAAE,GAAG,OAAO,EAAE,QAAQ,EAAE,CAAA;IACjC,CAAC;IAED,aAAa,CAAC,CAAyE;QACrF,GAAG,CAAC;;;;;KAKH,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,UAAU,EAAE,CAAC,CAAC,UAAU,EAAE,CAAC,CAAC,MAAM,CAAC,CAAA;IAChD,CAAC;IAED,aAAa,CAAC,EAAU,EAAE,MAA2B;QACnD,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;QAChC,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;YAAE,OAAM;QAE7B,IAAI,QAAQ,GAAG,CAAC,CAAA;QAChB,OAAO,QAAQ,GAAG,CAAC,EAAE,CAAC;YACpB,IAAI,CAAC;gBACH,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;gBACvD,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAA;gBACvC,GAAG,CAAC,uBAAuB,UAAU,eAAe,EAAE,GAAG,MAAM,EAAE,EAAE,CAAC,CAAA;gBACpE,OAAM;YACR,CAAC;YAAC,OAAO,GAAQ,EAAE,CAAC;gBAClB,IAAI,GAAG,CAAC,OAAO,EAAE,QAAQ,CAAC,aAAa,CAAC,IAAI,QAAQ,GAAG,CAAC,EAAE,CAAC;oBACzD,QAAQ,EAAE,CAAA;oBACV,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE,CAAA;oBACxB,OAAO,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,GAAG,GAAG,EAAE,CAAC,CAAA,CAAC;gBACrC,CAAC;qBAAM,CAAC;oBACN,MAAM,GAAG,CAAA;gBACX,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAED,UAAU,CAAC,EAAU;QACnB,OAAO,GAAG,CAAC,qCAAqC,EAAE,EAAE,CAAC,CAAA;IACvD,CAAC;IAED,aAAa,CAAC,EAAU;QACtB,gCAAgC;QAChC,GAAG,CAAC,+CAA+C,EAAE,EAAE,CAAC,CAAA;QACxD,GAAG,CAAC,qDAAqD,EAAE,EAAE,CAAC,CAAA;QAC9D,GAAG,CAAC,yDAAyD,EAAE,EAAE,CAAC,CAAA;QAClE,GAAG,CAAC,4EAA4E,EAAE,EAAE,EAAE,EAAE,CAAC,CAAA;QACzF,4EAA4E;QAC5E,6BAA6B;QAC7B,GAAG,CAAC,mCAAmC,EAAE,EAAE,CAAC,CAAA;IAC9C,CAAC;IAED,qBAAqB,CAAC,EAAU,EAAE,UAAkB;QAClD,GAAG,CAAC,oDAAoD,EAAE,UAAU,EAAE,EAAE,CAAC,CAAA;IAC3E,CAAC;IAED,qBAAqB,CAAC,EAAU,EAAE,QAAgB;QAChD,GAAG,CAAC,kDAAkD,EAAE,QAAQ,EAAE,EAAE,CAAC,CAAA;IACvE,CAAC;IAED,WAAW,CAAC,IAA+E;QACzF,MAAM,UAAU,GAAa,CAAC,KAAK,CAAC,CAAA;QACpC,MAAM,MAAM,GAAU,EAAE,CAAA;QACxB,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YAAC,UAAU,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;YAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA;QAAC,CAAC;QACxF,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAAC,UAAU,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;YAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;QAAC,CAAC;QAC5E,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE,EAAE,IAAI,CAAC,MAAM,IAAI,CAAC,CAAC,CAAA;QAC/C,OAAO,GAAG,CACR,gCAAgC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,4CAA4C,EACpG,GAAG,MAAM,CACV,CAAA;IACH,CAAC;IAED,iBAAiB;QACf,OAAO,GAAG,CAAC;;;;KAIV,CAAC,CAAA;IACJ,CAAC;IAED,yBAAyB,CAAC,UAAkB,EAAE,CAAS;QACrD,OAAO,GAAG,CAAC;;;;;;;KAOV,EAAE,UAAU,EAAE,CAAC,CAAC,CAAA;IACnB,CAAC;IAED,0BAA0B,CAAC,EAAU;QACnC,MAAM,OAAO,GAAG,GAAG,CAAC,qCAAqC,EAAE,EAAE,CAAC,CAAA;QAC9D,IAAI,CAAC,OAAO;YAAE,OAAO,IAAI,CAAA;QACzB,MAAM,YAAY,GAAG,GAAG,CACtB,yEAAyE,EACzE,EAAE,CACH,CAAA;QACD,OAAO,EAAE,GAAG,OAAO,EAAE,YAAY,EAAE,CAAA;IACrC,CAAC;IAED,iBAAiB,CAAC,CAQjB;QACC,GAAG,CAAC;;;KAGH,EACC,CAAC,CAAC,UAAU,EAAE,CAAC,CAAC,UAAU,EAAE,CAAC,CAAC,UAAU,EACxC,CAAC,CAAC,SAAS,IAAI,IAAI,EAAE,CAAC,CAAC,SAAS,IAAI,IAAI,EACxC,CAAC,CAAC,OAAO,IAAI,IAAI,EAAE,CAAC,CAAC,QAAQ,IAAI,IAAI,CACtC,CAAA;IACH,CAAC;IAED,kBAAkB,CAAC,UAAkB,EAAE,KAA6B;QAClE,MAAM,GAAG,GAAG,KAAK,KAAK,OAAO,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,kBAAkB,CAAA;QAClE,GAAG,CAAC,uBAAuB,GAAG,eAAe,GAAG,uBAAuB,EAAE,UAAU,CAAC,CAAA;IACtF,CAAC;IAED,cAAc,CAAC,UAAkB,EAAE,SAAiB;QAClD,MAAM,OAAO,GAAG,GAAG,CAAC,iDAAiD,EAAE,UAAU,CAAC,CAAA;QAClF,IAAI,CAAC,OAAO;YAAE,OAAM;QACpB,IAAI,KAAK,GAAa,EAAE,CAAA;QACxB,IAAI,CAAC;YAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,aAAa,IAAI,IAAI,CAAC,CAAA;QAAC,CAAC;QAAC,MAAM,CAAC,CAAA,CAAC;QAClE,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;YAC/B,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;YACrB,GAAG,CAAC,oDAAoD,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,UAAU,CAAC,CAAA;QAC9F,CAAC;IACH,CAAC;IAED,kBAAkB,CAAC,KAAa,EAAE,UAAmB;QACnD,IAAI,UAAU,EAAE,CAAC;YACf,OAAO,GAAG,CAAC;;;;;;;;;;OAUV,EAAE,KAAK,EAAE,UAAU,CAAC,CAAA;QACvB,CAAC;QACD,OAAO,GAAG,CAAC;;;;;;;;;;KAUV,EAAE,KAAK,CAAC,CAAA;IACX,CAAC;IAED,UAAU,CAAC,GAAW;QACpB,MAAM,GAAG,GAAG,GAAG,CAAC,0CAA0C,EAAE,GAAG,CAAC,CAAA;QAChE,OAAO,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAA;IAC/B,CAAC;IAED,UAAU,CAAC,GAAW,EAAE,KAAa;QACnC,GAAG,CAAC,4DAA4D,EAAE,GAAG,EAAE,KAAK,CAAC,CAAA;IAC/E,CAAC;IAED,iBAAiB,CAAC,OAAe,EAAE;QACjC,OAAO,GAAG,CAAC;;;8CAG+B,IAAI;;;KAG7C,CAAC,CAAA;IACJ,CAAC;IAED,wBAAwB;IAExB,cAAc;IACd,cAAc,CAAC,SAAkB,EAAE,QAAiB;QAClD,MAAM,UAAU,GAAa,EAAE,CAAA;QAC/B,MAAM,MAAM,GAAU,EAAE,CAAA;QAExB,IAAI,SAAS,EAAE,CAAC;YACd,UAAU,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAA;YACjC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;QACxB,CAAC;QACD,IAAI,QAAQ,EAAE,CAAC;YACb,UAAU,CAAC,IAAI,CAAC,cAAc,CAAC,CAAA;YAC/B,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;QACvB,CAAC;QAED,MAAM,KAAK,GAAG,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAA;QAC9E,OAAO,GAAG,CAAC,6BAA6B,KAAK,yBAAyB,EAAE,GAAG,MAAM,CAAC,CAAA;IACpF,CAAC;IAED,aAAa,CAAC,QAAgB,EAAE,GAAW,EAAE,KAAa,EAAE,aAAqB,GAAG,EAAE,SAAkB,EAAE,SAAkB;QAC1H,GAAG,CAAC;;;;;;;;;KASH,EAAE,QAAQ,EAAE,GAAG,EAAE,KAAK,EAAE,UAAU,EAAE,SAAS,IAAI,IAAI,EAAE,SAAS,IAAI,IAAI,CAAC,CAAA;IAC5E,CAAC;IAED,YAAY;IACZ,YAAY,CAAC,QAAiB,EAAE,QAAgB,EAAE,EAAE,SAAkB;QACpE,MAAM,UAAU,GAAa,EAAE,CAAA;QAC/B,MAAM,MAAM,GAAU,EAAE,CAAA;QAExB,IAAI,SAAS,EAAE,CAAC;YACd,UAAU,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAA;YACjC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;QACxB,CAAC;QACD,IAAI,QAAQ,EAAE,CAAC;YACb,UAAU,CAAC,IAAI,CAAC,cAAc,CAAC,CAAA;YAC/B,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;QACvB,CAAC;QAED,MAAM,KAAK,GAAG,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAA;QAC9E,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;QAElB,OAAO,GAAG,CAAC;;QAEP,KAAK;;;KAGR,EAAE,GAAG,MAAM,CAAC,CAAA;IACf,CAAC;IAED,YAAY,CAAC,IAAmI;QAC9I,GAAG,CAAC;;;;;;;KAOH,EAAE,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,UAAU,IAAI,GAAG,EAAE,IAAI,CAAC,SAAS,IAAI,IAAI,EAAE,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,CAAA;IAC9H,CAAC;IAED,WAAW;IACX,WAAW,CAAC,IAAa,EAAE,QAAgB,EAAE,EAAE,SAAkB;QAC/D,MAAM,UAAU,GAAa,EAAE,CAAA;QAC/B,MAAM,MAAM,GAAU,EAAE,CAAA;QAExB,IAAI,SAAS,EAAE,CAAC;YACd,UAAU,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAA;YACjC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;QACxB,CAAC;QACD,IAAI,IAAI,EAAE,CAAC;YACT,UAAU,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAA;YACnC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QACnB,CAAC;QAED,MAAM,KAAK,GAAG,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAA;QAC9E,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;QAElB,OAAO,GAAG,CAAC;;QAEP,KAAK;;;KAGR,EAAE,GAAG,MAAM,CAAC,CAAA;IACf,CAAC;IAED,UAAU,CAAC,OAA+G;QACxH,GAAG,CAAC;;;;;;;KAOH,EAAE,OAAO,CAAC,EAAE,EAAE,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC,WAAW,EAAE,OAAO,CAAC,OAAO,IAAI,IAAI,EAAE,OAAO,CAAC,SAAS,IAAI,IAAI,CAAC,CAAA;IACtH,CAAC;IAED,uBAAuB,CAAC,EAAU;QAChC,GAAG,CAAC;;;;KAIH,EAAE,EAAE,CAAC,CAAA;IACR,CAAC;IAED,QAAQ;IACR,QAAQ,CAAC,MAAe,EAAE,SAAkB;QAC1C,MAAM,UAAU,GAAa,CAAC,KAAK,CAAC,CAAA;QACpC,MAAM,MAAM,GAAU,EAAE,CAAA;QACxB,IAAI,MAAM,EAAE,CAAC;YAAC,UAAU,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;YAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;QAAC,CAAC;QAClE,IAAI,SAAS,EAAE,CAAC;YAAC,UAAU,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;YAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;QAAC,CAAC;QAC5E,OAAO,GAAG,CAAC;;cAED,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC;;;;;;;;;KASjC,EAAE,GAAG,MAAM,CAAC,CAAA;IACf,CAAC;IAED,OAAO,CAAC,IAAqI;QAC3I,GAAG,CAAC;;;KAGH,EAAE,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,WAAW,IAAI,IAAI,EAAE,IAAI,CAAC,MAAM,IAAI,SAAS,EACvE,IAAI,CAAC,QAAQ,IAAI,QAAQ,EAAE,IAAI,CAAC,SAAS,IAAI,IAAI,EAAE,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,CAAA;IAC/E,CAAC;IAED,UAAU,CAAC,EAAU,EAAE,MAA2E;QAChG,MAAM,OAAO,GAAa,EAAE,CAAA;QAC5B,MAAM,MAAM,GAAU,EAAE,CAAA;QACxB,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;YAAC,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;YAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAA;QAAC,CAAC;QAC7E,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;YAAC,OAAO,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;YAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAA;QAAC,CAAC;QACnF,IAAI,MAAM,CAAC,kBAAkB,EAAE,CAAC;YAC9B,OAAO,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC;YACzC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,kBAAkB,CAAC,CAAA;YACtC,OAAO,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAA;QAC5C,CAAC;QACD,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACvB,OAAO,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAA;YACxC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;YACf,GAAG,CAAC,oBAAoB,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,GAAG,MAAM,CAAC,CAAA;QACvE,CAAC;IACH,CAAC;IAED,WAAW;IACX,WAAW,CAAC,SAAkB,EAAE,IAAa;QAC3C,MAAM,UAAU,GAAa,EAAE,CAAA;QAC/B,MAAM,MAAM,GAAU,EAAE,CAAA;QAExB,IAAI,SAAS,EAAE,CAAC;YACd,UAAU,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAA;YACjC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;QACxB,CAAC;QACD,IAAI,IAAI,EAAE,CAAC;YACT,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA;YAC3B,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QACnB,CAAC;QAED,MAAM,KAAK,GAAG,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAA;QAC9E,OAAO,GAAG,CAAC,0BAA0B,KAAK,sBAAsB,EAAE,GAAG,MAAM,CAAC,CAAA;IAC9E,CAAC;IAED,UAAU,CAAC,OAAyH;QAClI,GAAG,CAAC;;;;;;;;;;KAUH,EAAE,OAAO,CAAC,EAAE,EAAE,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,IAAI,IAAI,EAAE,OAAO,CAAC,KAAK,IAAI,IAAI,EAAE,OAAO,CAAC,QAAQ,IAAI,IAAI,EAAE,OAAO,CAAC,SAAS,IAAI,IAAI,CAAC,CAAA;IAC9I,CAAC;IAED,cAAc,CAAC,SAAiB,EAAE,SAAiB,EAAE,IAAY,EAAE,OAAe;QAChF,GAAG,CAAC;;;KAGH,EAAE,SAAS,EAAE,SAAS,EAAE,IAAI,EAAE,OAAO,CAAC,CAAA;IACzC,CAAC;IAED,mCAAmC;IACnC,gBAAgB,CAAC,EAAU;QACzB,GAAG,CAAC,sCAAsC,EAAE,EAAE,CAAC,CAAA;IACjD,CAAC;IAED,eAAe,CAAC,EAAU;QACxB,GAAG,CAAC,0CAA0C,EAAE,EAAE,CAAC,CAAA;IACrD,CAAC;IAED,aAAa,CAAC,EAAU;QACtB,GAAG,CAAC,2CAA2C,EAAE,EAAE,CAAC,CAAA;IACtD,CAAC;IAED,OAAO;IACP,OAAO,CAAC,SAAiB;QACvB,OAAO,GAAG,CAAC,uDAAuD,EAAE,SAAS,CAAC,CAAA;IAChF,CAAC;IAED,SAAS,CAAC,SAAiB,EAAE,IAAY,EAAE,KAAc;QACvD,MAAM,MAAM,GAAG,GAAG,CAChB,6IAA6I,EAC7I,SAAS,EAAE,IAAI,EAAE,KAAK,IAAI,IAAI,CAC/B,CAAA;QACD,OAAO,MAAM,CAAC,eAAe,CAAA;IAC/B,CAAC;IAED,cAAc,CAAC,SAAiB;QAC9B,OAAO,GAAG,CAAC;;;;;KAKV,EAAE,SAAS,CAAC,CAAA;IACf,CAAC;IAED,aAAa,CAAC,SAAiB,EAAE,KAAa;QAC5C,GAAG,CAAC,uEAAuE,EAAE,SAAS,EAAE,KAAK,CAAC,CAAA;IAChG,CAAC;IAED,gBAAgB,CAAC,SAAiB,EAAE,KAAa;QAC/C,GAAG,CAAC,8DAA8D,EAAE,SAAS,EAAE,KAAK,CAAC,CAAA;IACvF,CAAC;IAED,SAAS,CAAC,KAAa;QACrB,GAAG,CAAC,+BAA+B,EAAE,KAAK,CAAC,CAAA;IAC7C,CAAC;IAED,kBAAkB,CAAC,SAAiB,EAAE,KAAa;QACjD,GAAG,CAAC,4CAA4C,EAAE,KAAK,EAAE,SAAS,CAAC,CAAA;IACrE,CAAC;CACF,CAAA"}
@@ -0,0 +1 @@
1
+ export declare const SCHEMA_SQL = "\nCREATE TABLE IF NOT EXISTS projects (\n id TEXT PRIMARY KEY,\n name TEXT NOT NULL,\n root_path TEXT NOT NULL UNIQUE,\n git_remote TEXT,\n created_at INTEGER NOT NULL DEFAULT (unixepoch()),\n updated_at INTEGER NOT NULL DEFAULT (unixepoch())\n);\n\nCREATE TABLE IF NOT EXISTS sessions (\n id TEXT PRIMARY KEY,\n project_id TEXT NOT NULL REFERENCES projects(id),\n started_at INTEGER NOT NULL DEFAULT (unixepoch()),\n ended_at INTEGER,\n transcript_path TEXT,\n status TEXT NOT NULL DEFAULT 'active',\n summary_title TEXT,\n summary_status TEXT,\n summary_what_we_did TEXT,\n summary_decisions TEXT,\n summary_files_changed TEXT,\n summary_next_steps TEXT,\n summary_gotchas TEXT,\n summary_tech_notes TEXT,\n summary_mood TEXT,\n summary_complexity TEXT,\n summary_blockers TEXT,\n summary_resolved TEXT,\n summary_key_insight TEXT,\n duration_seconds INTEGER,\n embedding_summary TEXT,\n total_turns INTEGER DEFAULT 0,\n total_tool_calls INTEGER DEFAULT 0,\n files_touched TEXT,\n tools_used TEXT,\n estimated_tokens INTEGER DEFAULT 0\n);\n\nCREATE TABLE IF NOT EXISTS observations (\n id INTEGER PRIMARY KEY AUTOINCREMENT,\n session_id TEXT NOT NULL REFERENCES sessions(id),\n project_id TEXT NOT NULL REFERENCES projects(id),\n event_type TEXT NOT NULL,\n tool_name TEXT,\n file_path TEXT,\n content TEXT,\n metadata TEXT,\n created_at INTEGER NOT NULL DEFAULT (unixepoch())\n);\n\nCREATE VIRTUAL TABLE IF NOT EXISTS obs_fts USING fts5(\n content,\n event_type,\n session_id UNINDEXED,\n project_id UNINDEXED,\n tokenize = 'porter ascii'\n);\n\nCREATE TRIGGER IF NOT EXISTS obs_ai AFTER INSERT ON observations BEGIN\n INSERT INTO obs_fts(rowid, content, event_type, session_id, project_id)\n VALUES (new.id, new.content, new.event_type, new.session_id, new.project_id);\nEND;\n\nCREATE TRIGGER IF NOT EXISTS obs_ad AFTER DELETE ON observations BEGIN\n DELETE FROM obs_fts WHERE rowid = old.id;\nEND;\n\nCREATE TABLE IF NOT EXISTS settings (\n key TEXT PRIMARY KEY,\n value TEXT NOT NULL\n);\n\nINSERT OR IGNORE INTO settings VALUES ('context_sessions', '3');\nINSERT OR IGNORE INTO settings VALUES ('api_key_set', 'false');\nINSERT OR IGNORE INTO settings VALUES ('summaries_enabled', 'true');\n";
@@ -0,0 +1,81 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SCHEMA_SQL = void 0;
4
+ exports.SCHEMA_SQL = `
5
+ CREATE TABLE IF NOT EXISTS projects (
6
+ id TEXT PRIMARY KEY,
7
+ name TEXT NOT NULL,
8
+ root_path TEXT NOT NULL UNIQUE,
9
+ git_remote TEXT,
10
+ created_at INTEGER NOT NULL DEFAULT (unixepoch()),
11
+ updated_at INTEGER NOT NULL DEFAULT (unixepoch())
12
+ );
13
+
14
+ CREATE TABLE IF NOT EXISTS sessions (
15
+ id TEXT PRIMARY KEY,
16
+ project_id TEXT NOT NULL REFERENCES projects(id),
17
+ started_at INTEGER NOT NULL DEFAULT (unixepoch()),
18
+ ended_at INTEGER,
19
+ transcript_path TEXT,
20
+ status TEXT NOT NULL DEFAULT 'active',
21
+ summary_title TEXT,
22
+ summary_status TEXT,
23
+ summary_what_we_did TEXT,
24
+ summary_decisions TEXT,
25
+ summary_files_changed TEXT,
26
+ summary_next_steps TEXT,
27
+ summary_gotchas TEXT,
28
+ summary_tech_notes TEXT,
29
+ summary_mood TEXT,
30
+ summary_complexity TEXT,
31
+ summary_blockers TEXT,
32
+ summary_resolved TEXT,
33
+ summary_key_insight TEXT,
34
+ duration_seconds INTEGER,
35
+ embedding_summary TEXT,
36
+ total_turns INTEGER DEFAULT 0,
37
+ total_tool_calls INTEGER DEFAULT 0,
38
+ files_touched TEXT,
39
+ tools_used TEXT,
40
+ estimated_tokens INTEGER DEFAULT 0
41
+ );
42
+
43
+ CREATE TABLE IF NOT EXISTS observations (
44
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
45
+ session_id TEXT NOT NULL REFERENCES sessions(id),
46
+ project_id TEXT NOT NULL REFERENCES projects(id),
47
+ event_type TEXT NOT NULL,
48
+ tool_name TEXT,
49
+ file_path TEXT,
50
+ content TEXT,
51
+ metadata TEXT,
52
+ created_at INTEGER NOT NULL DEFAULT (unixepoch())
53
+ );
54
+
55
+ CREATE VIRTUAL TABLE IF NOT EXISTS obs_fts USING fts5(
56
+ content,
57
+ event_type,
58
+ session_id UNINDEXED,
59
+ project_id UNINDEXED,
60
+ tokenize = 'porter ascii'
61
+ );
62
+
63
+ CREATE TRIGGER IF NOT EXISTS obs_ai AFTER INSERT ON observations BEGIN
64
+ INSERT INTO obs_fts(rowid, content, event_type, session_id, project_id)
65
+ VALUES (new.id, new.content, new.event_type, new.session_id, new.project_id);
66
+ END;
67
+
68
+ CREATE TRIGGER IF NOT EXISTS obs_ad AFTER DELETE ON observations BEGIN
69
+ DELETE FROM obs_fts WHERE rowid = old.id;
70
+ END;
71
+
72
+ CREATE TABLE IF NOT EXISTS settings (
73
+ key TEXT PRIMARY KEY,
74
+ value TEXT NOT NULL
75
+ );
76
+
77
+ INSERT OR IGNORE INTO settings VALUES ('context_sessions', '3');
78
+ INSERT OR IGNORE INTO settings VALUES ('api_key_set', 'false');
79
+ INSERT OR IGNORE INTO settings VALUES ('summaries_enabled', 'true');
80
+ `;
81
+ //# sourceMappingURL=schema.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema.js","sourceRoot":"","sources":["../../../src/db/schema.ts"],"names":[],"mappings":";;;AAAa,QAAA,UAAU,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA4EzB,CAAA"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,23 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const utils_1 = require("./utils");
4
+ async function main() {
5
+ const input = await (0, utils_1.readStdin)();
6
+ try {
7
+ await (0, utils_1.postToWorker)('/api/hook', {
8
+ event: 'PostToolUse',
9
+ session_id: input.session_id,
10
+ cwd: input.cwd,
11
+ tool_name: input.tool_name,
12
+ file_path: input.tool_input?.file_path || input.tool_input?.path || null,
13
+ command: input.tool_input?.command?.slice(0, 200) || null,
14
+ success: !input.tool_response?.error
15
+ });
16
+ }
17
+ catch {
18
+ // Never block Claude Code
19
+ }
20
+ process.exit(0);
21
+ }
22
+ main();
23
+ //# sourceMappingURL=post-tool-use.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"post-tool-use.js","sourceRoot":"","sources":["../../../src/hooks/post-tool-use.ts"],"names":[],"mappings":";;AAAA,mCAAiD;AAEjD,KAAK,UAAU,IAAI;IACjB,MAAM,KAAK,GAAG,MAAM,IAAA,iBAAS,GAAE,CAAA;IAE/B,IAAI,CAAC;QACH,MAAM,IAAA,oBAAY,EAAC,WAAW,EAAE;YAC9B,KAAK,EAAE,aAAa;YACpB,UAAU,EAAE,KAAK,CAAC,UAAU;YAC5B,GAAG,EAAE,KAAK,CAAC,GAAG;YACd,SAAS,EAAE,KAAK,CAAC,SAAS;YAC1B,SAAS,EAAE,KAAK,CAAC,UAAU,EAAE,SAAS,IAAI,KAAK,CAAC,UAAU,EAAE,IAAI,IAAI,IAAI;YACxE,OAAO,EAAE,KAAK,CAAC,UAAU,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,IAAI,IAAI;YACzD,OAAO,EAAE,CAAC,KAAK,CAAC,aAAa,EAAE,KAAK;SACrC,CAAC,CAAA;IACJ,CAAC;IAAC,MAAM,CAAC;QACP,0BAA0B;IAC5B,CAAC;IAED,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;AACjB,CAAC;AAED,IAAI,EAAE,CAAA"}
@@ -0,0 +1 @@
1
+ export {};