@romandp/context-memory-mcp 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 (91) hide show
  1. package/README.md +454 -0
  2. package/bin/mcp-memory.js +306 -0
  3. package/dist/config/paths.d.ts +10 -0
  4. package/dist/config/paths.d.ts.map +1 -0
  5. package/dist/config/paths.js +41 -0
  6. package/dist/config/paths.js.map +1 -0
  7. package/dist/db/init.d.ts +6 -0
  8. package/dist/db/init.d.ts.map +1 -0
  9. package/dist/db/init.js +37 -0
  10. package/dist/db/init.js.map +1 -0
  11. package/dist/db/migrations/runner.d.ts +9 -0
  12. package/dist/db/migrations/runner.d.ts.map +1 -0
  13. package/dist/db/migrations/runner.js +285 -0
  14. package/dist/db/migrations/runner.js.map +1 -0
  15. package/dist/db/schema.d.ts +51 -0
  16. package/dist/db/schema.d.ts.map +1 -0
  17. package/dist/db/schema.js +496 -0
  18. package/dist/db/schema.js.map +1 -0
  19. package/dist/http/routes.d.ts +3 -0
  20. package/dist/http/routes.d.ts.map +1 -0
  21. package/dist/http/routes.js +968 -0
  22. package/dist/http/routes.js.map +1 -0
  23. package/dist/http/server.d.ts +5 -0
  24. package/dist/http/server.d.ts.map +1 -0
  25. package/dist/http/server.js +45 -0
  26. package/dist/http/server.js.map +1 -0
  27. package/dist/http/swagger.d.ts +2 -0
  28. package/dist/http/swagger.d.ts.map +1 -0
  29. package/dist/http/swagger.js +101 -0
  30. package/dist/http/swagger.js.map +1 -0
  31. package/dist/index.d.ts +2 -0
  32. package/dist/index.d.ts.map +1 -0
  33. package/dist/index.js +139 -0
  34. package/dist/index.js.map +1 -0
  35. package/dist/memory/budget.d.ts +22 -0
  36. package/dist/memory/budget.d.ts.map +1 -0
  37. package/dist/memory/budget.js +51 -0
  38. package/dist/memory/budget.js.map +1 -0
  39. package/dist/memory/facts.d.ts +3 -0
  40. package/dist/memory/facts.d.ts.map +1 -0
  41. package/dist/memory/facts.js +63 -0
  42. package/dist/memory/facts.js.map +1 -0
  43. package/dist/memory/rebuild.d.ts +4 -0
  44. package/dist/memory/rebuild.d.ts.map +1 -0
  45. package/dist/memory/rebuild.js +31 -0
  46. package/dist/memory/rebuild.js.map +1 -0
  47. package/dist/memory/response.d.ts +11 -0
  48. package/dist/memory/response.d.ts.map +1 -0
  49. package/dist/memory/response.js +20 -0
  50. package/dist/memory/response.js.map +1 -0
  51. package/dist/memory/summary.d.ts +3 -0
  52. package/dist/memory/summary.d.ts.map +1 -0
  53. package/dist/memory/summary.js +67 -0
  54. package/dist/memory/summary.js.map +1 -0
  55. package/dist/memory/toon.d.ts +20 -0
  56. package/dist/memory/toon.d.ts.map +1 -0
  57. package/dist/memory/toon.js +102 -0
  58. package/dist/memory/toon.js.map +1 -0
  59. package/dist/memory/view.d.ts +4 -0
  60. package/dist/memory/view.d.ts.map +1 -0
  61. package/dist/memory/view.js +7 -0
  62. package/dist/memory/view.js.map +1 -0
  63. package/dist/server/setup.d.ts +9 -0
  64. package/dist/server/setup.d.ts.map +1 -0
  65. package/dist/server/setup.js +291 -0
  66. package/dist/server/setup.js.map +1 -0
  67. package/dist/tools/audit.d.ts +2 -0
  68. package/dist/tools/audit.d.ts.map +1 -0
  69. package/dist/tools/audit.js +22 -0
  70. package/dist/tools/audit.js.map +1 -0
  71. package/dist/tools/context.d.ts +5 -0
  72. package/dist/tools/context.d.ts.map +1 -0
  73. package/dist/tools/context.js +104 -0
  74. package/dist/tools/context.js.map +1 -0
  75. package/dist/tools/entry.d.ts +9 -0
  76. package/dist/tools/entry.d.ts.map +1 -0
  77. package/dist/tools/entry.js +214 -0
  78. package/dist/tools/entry.js.map +1 -0
  79. package/dist/tools/project.d.ts +4 -0
  80. package/dist/tools/project.d.ts.map +1 -0
  81. package/dist/tools/project.js +54 -0
  82. package/dist/tools/project.js.map +1 -0
  83. package/dist/tools/task.d.ts +4 -0
  84. package/dist/tools/task.d.ts.map +1 -0
  85. package/dist/tools/task.js +49 -0
  86. package/dist/tools/task.js.map +1 -0
  87. package/dist/types/context.d.ts +139 -0
  88. package/dist/types/context.d.ts.map +1 -0
  89. package/dist/types/context.js +2 -0
  90. package/dist/types/context.js.map +1 -0
  91. package/package.json +68 -0
@@ -0,0 +1,285 @@
1
+ function toFtsQuery(input) {
2
+ return input
3
+ .replace(/['"()|]/g, '')
4
+ .split(/\s+/)
5
+ .filter(Boolean)
6
+ .map(w => `"${w}"*`)
7
+ .join(' ');
8
+ }
9
+ export { toFtsQuery };
10
+ const migrations = [
11
+ {
12
+ name: '001_initial_schema',
13
+ up(db) {
14
+ db.exec(`
15
+ CREATE TABLE IF NOT EXISTS projects (
16
+ id TEXT PRIMARY KEY,
17
+ name TEXT NOT NULL,
18
+ description TEXT,
19
+ status TEXT NOT NULL DEFAULT 'active' CHECK(status IN ('active','archived','completed')),
20
+ created_at TEXT NOT NULL,
21
+ updated_at TEXT NOT NULL
22
+ );
23
+
24
+ CREATE TABLE IF NOT EXISTS sdd_entries (
25
+ id TEXT PRIMARY KEY,
26
+ project_id TEXT NOT NULL,
27
+ section TEXT NOT NULL CHECK(section IN ('plan','design','tasks','general')),
28
+ title TEXT NOT NULL,
29
+ content TEXT NOT NULL DEFAULT '',
30
+ status TEXT NOT NULL DEFAULT 'draft' CHECK(status IN ('draft','review','done')),
31
+ parent_id TEXT,
32
+ metadata TEXT,
33
+ created_at TEXT NOT NULL,
34
+ updated_at TEXT NOT NULL,
35
+ FOREIGN KEY(project_id) REFERENCES projects(id) ON DELETE CASCADE,
36
+ FOREIGN KEY(parent_id) REFERENCES sdd_entries(id) ON DELETE SET NULL
37
+ );
38
+
39
+ CREATE TABLE IF NOT EXISTS tasks (
40
+ id TEXT PRIMARY KEY,
41
+ project_id TEXT NOT NULL,
42
+ sdd_entry_id TEXT,
43
+ title TEXT NOT NULL,
44
+ description TEXT,
45
+ status TEXT NOT NULL DEFAULT 'pending' CHECK(status IN ('pending','in_progress','completed','cancelled')),
46
+ priority TEXT NOT NULL DEFAULT 'medium' CHECK(priority IN ('low','medium','high','critical')),
47
+ created_at TEXT NOT NULL,
48
+ updated_at TEXT NOT NULL,
49
+ FOREIGN KEY(project_id) REFERENCES projects(id) ON DELETE CASCADE,
50
+ FOREIGN KEY(sdd_entry_id) REFERENCES sdd_entries(id) ON DELETE SET NULL
51
+ );
52
+
53
+ CREATE TABLE IF NOT EXISTS classifications (
54
+ id TEXT PRIMARY KEY,
55
+ classifiable_type TEXT NOT NULL CHECK(classifiable_type IN ('project','entry','task')),
56
+ classifiable_id TEXT NOT NULL,
57
+ tag TEXT NOT NULL,
58
+ confidence REAL NOT NULL CHECK(confidence >= 0 AND confidence <= 1),
59
+ created_at TEXT NOT NULL
60
+ );
61
+
62
+ CREATE INDEX IF NOT EXISTS idx_entries_project ON sdd_entries(project_id);
63
+ CREATE INDEX IF NOT EXISTS idx_entries_section ON sdd_entries(project_id, section);
64
+ CREATE INDEX IF NOT EXISTS idx_tasks_project ON tasks(project_id);
65
+ CREATE INDEX IF NOT EXISTS idx_tasks_entry ON tasks(sdd_entry_id);
66
+ CREATE INDEX IF NOT EXISTS idx_classifications_target ON classifications(classifiable_type, classifiable_id);
67
+ CREATE INDEX IF NOT EXISTS idx_classifications_tag ON classifications(tag);
68
+ `);
69
+ },
70
+ },
71
+ {
72
+ name: '002_add_fts5',
73
+ up(db) {
74
+ db.exec(`
75
+ CREATE VIRTUAL TABLE IF NOT EXISTS fts_entries USING fts5(
76
+ entry_id UNINDEXED,
77
+ section,
78
+ title,
79
+ content
80
+ );
81
+
82
+ CREATE TRIGGER IF NOT EXISTS fts_entries_ai AFTER INSERT ON sdd_entries BEGIN
83
+ INSERT INTO fts_entries(entry_id, section, title, content) VALUES (new.id, new.section, new.title, new.content);
84
+ END;
85
+
86
+ CREATE TRIGGER IF NOT EXISTS fts_entries_ad AFTER DELETE ON sdd_entries BEGIN
87
+ DELETE FROM fts_entries WHERE entry_id = old.id;
88
+ END;
89
+
90
+ CREATE TRIGGER IF NOT EXISTS fts_entries_au AFTER UPDATE ON sdd_entries BEGIN
91
+ DELETE FROM fts_entries WHERE entry_id = old.id;
92
+ INSERT INTO fts_entries(entry_id, section, title, content) VALUES (new.id, new.section, new.title, new.content);
93
+ END;
94
+ `);
95
+ const count = db.prepare('SELECT COUNT(*) as c FROM sdd_entries').get().c;
96
+ if (count > 0) {
97
+ db.prepare(`
98
+ INSERT INTO fts_entries(entry_id, section, title, content)
99
+ SELECT id, section, title, content FROM sdd_entries
100
+ `).run();
101
+ console.log(`[MIGRATION] Indexed ${count} existing entries in FTS5`);
102
+ }
103
+ },
104
+ },
105
+ {
106
+ name: '003_add_audit_log',
107
+ up(db) {
108
+ db.exec(`
109
+ CREATE TABLE IF NOT EXISTS audit_log (
110
+ id TEXT PRIMARY KEY,
111
+ entity_type TEXT NOT NULL CHECK(entity_type IN ('entry','task')),
112
+ entity_id TEXT NOT NULL,
113
+ action TEXT NOT NULL CHECK(action IN ('created','updated','deleted')),
114
+ changes TEXT,
115
+ project_id TEXT,
116
+ timestamp TEXT NOT NULL
117
+ );
118
+
119
+ CREATE INDEX IF NOT EXISTS idx_audit_entity ON audit_log(entity_type, entity_id);
120
+ CREATE INDEX IF NOT EXISTS idx_audit_project ON audit_log(project_id);
121
+ CREATE INDEX IF NOT EXISTS idx_audit_timestamp ON audit_log(timestamp);
122
+
123
+ CREATE TRIGGER IF NOT EXISTS audit_entries_ai AFTER INSERT ON sdd_entries BEGIN
124
+ INSERT INTO audit_log (id, entity_type, entity_id, action, changes, project_id, timestamp)
125
+ VALUES (lower(hex(randomblob(16))), 'entry', new.id, 'created',
126
+ json_object('title', new.title, 'content', new.content, 'section', new.section, 'status', new.status),
127
+ new.project_id, new.created_at);
128
+ END;
129
+
130
+ CREATE TRIGGER IF NOT EXISTS audit_entries_au AFTER UPDATE ON sdd_entries BEGIN
131
+ INSERT INTO audit_log (id, entity_type, entity_id, action, changes, project_id, timestamp)
132
+ VALUES (lower(hex(randomblob(16))), 'entry', old.id, 'updated',
133
+ json_object('old', json_object('title', old.title, 'content', old.content, 'section', old.section, 'status', old.status),
134
+ 'new', json_object('title', new.title, 'content', new.content, 'section', new.section, 'status', new.status)),
135
+ new.project_id, new.updated_at);
136
+ END;
137
+
138
+ CREATE TRIGGER IF NOT EXISTS audit_entries_ad AFTER DELETE ON sdd_entries BEGIN
139
+ INSERT INTO audit_log (id, entity_type, entity_id, action, changes, project_id, timestamp)
140
+ VALUES (lower(hex(randomblob(16))), 'entry', old.id, 'deleted',
141
+ json_object('title', old.title),
142
+ old.project_id, datetime('now'));
143
+ END;
144
+
145
+ CREATE TRIGGER IF NOT EXISTS audit_tasks_ai AFTER INSERT ON tasks BEGIN
146
+ INSERT INTO audit_log (id, entity_type, entity_id, action, changes, project_id, timestamp)
147
+ VALUES (lower(hex(randomblob(16))), 'task', new.id, 'created',
148
+ json_object('title', new.title, 'status', new.status, 'priority', new.priority),
149
+ new.project_id, new.created_at);
150
+ END;
151
+
152
+ CREATE TRIGGER IF NOT EXISTS audit_tasks_au AFTER UPDATE ON tasks BEGIN
153
+ INSERT INTO audit_log (id, entity_type, entity_id, action, changes, project_id, timestamp)
154
+ VALUES (lower(hex(randomblob(16))), 'task', old.id, 'updated',
155
+ json_object('old', json_object('title', old.title, 'status', old.status, 'priority', old.priority),
156
+ 'new', json_object('title', new.title, 'status', new.status, 'priority', new.priority)),
157
+ new.project_id, new.updated_at);
158
+ END;
159
+
160
+ CREATE TRIGGER IF NOT EXISTS audit_tasks_ad AFTER DELETE ON tasks BEGIN
161
+ INSERT INTO audit_log (id, entity_type, entity_id, action, changes, project_id, timestamp)
162
+ VALUES (lower(hex(randomblob(16))), 'task', old.id, 'deleted',
163
+ json_object('title', old.title),
164
+ old.project_id, datetime('now'));
165
+ END;
166
+ `);
167
+ },
168
+ },
169
+ {
170
+ name: '004_add_context_tables',
171
+ up(db) {
172
+ db.exec(`
173
+ CREATE TABLE IF NOT EXISTS file_changes (
174
+ id TEXT PRIMARY KEY,
175
+ entry_id TEXT NOT NULL REFERENCES sdd_entries(id) ON DELETE CASCADE,
176
+ file_path TEXT NOT NULL,
177
+ change_type TEXT NOT NULL CHECK(change_type IN ('added','modified','removed')),
178
+ line_start INTEGER,
179
+ line_end INTEGER,
180
+ summary TEXT NOT NULL,
181
+ created_at TEXT NOT NULL
182
+ );
183
+
184
+ CREATE TABLE IF NOT EXISTS design_decisions (
185
+ id TEXT PRIMARY KEY,
186
+ entry_id TEXT NOT NULL REFERENCES sdd_entries(id) ON DELETE CASCADE,
187
+ decision TEXT NOT NULL,
188
+ rationale TEXT NOT NULL,
189
+ alternatives_considered TEXT,
190
+ created_at TEXT NOT NULL
191
+ );
192
+
193
+ CREATE TABLE IF NOT EXISTS entry_relationships (
194
+ id TEXT PRIMARY KEY,
195
+ source_entry_id TEXT NOT NULL REFERENCES sdd_entries(id) ON DELETE CASCADE,
196
+ target_entry_id TEXT NOT NULL REFERENCES sdd_entries(id) ON DELETE CASCADE,
197
+ relationship_type TEXT NOT NULL CHECK(relationship_type IN ('depends_on','implements','related_to','supersedes')),
198
+ created_at TEXT NOT NULL
199
+ );
200
+
201
+ CREATE INDEX IF NOT EXISTS idx_file_changes_entry ON file_changes(entry_id);
202
+ CREATE INDEX IF NOT EXISTS idx_design_decisions_entry ON design_decisions(entry_id);
203
+ CREATE INDEX IF NOT EXISTS idx_entry_relationships_source ON entry_relationships(source_entry_id);
204
+ CREATE INDEX IF NOT EXISTS idx_entry_relationships_target ON entry_relationships(target_entry_id);
205
+ `);
206
+ },
207
+ },
208
+ {
209
+ name: '005_add_compact_memory',
210
+ up(db) {
211
+ db.exec(`
212
+ CREATE TABLE IF NOT EXISTS entry_summaries (
213
+ entry_id TEXT PRIMARY KEY REFERENCES sdd_entries(id) ON DELETE CASCADE,
214
+ summary_short TEXT NOT NULL,
215
+ summary_dense TEXT NOT NULL,
216
+ keywords TEXT,
217
+ source_hash TEXT NOT NULL,
218
+ version INTEGER NOT NULL DEFAULT 1,
219
+ updated_at TEXT NOT NULL
220
+ );
221
+
222
+ CREATE TABLE IF NOT EXISTS memory_facts (
223
+ id TEXT PRIMARY KEY,
224
+ project_id TEXT NOT NULL REFERENCES projects(id) ON DELETE CASCADE,
225
+ entry_id TEXT REFERENCES sdd_entries(id) ON DELETE CASCADE,
226
+ kind TEXT NOT NULL,
227
+ subject TEXT NOT NULL,
228
+ predicate TEXT NOT NULL,
229
+ object TEXT NOT NULL,
230
+ weight REAL NOT NULL DEFAULT 1,
231
+ source TEXT NOT NULL,
232
+ created_at TEXT NOT NULL
233
+ );
234
+
235
+ CREATE INDEX IF NOT EXISTS idx_entry_summaries_updated_at ON entry_summaries(updated_at);
236
+ CREATE INDEX IF NOT EXISTS idx_memory_facts_project ON memory_facts(project_id);
237
+ CREATE INDEX IF NOT EXISTS idx_memory_facts_entry ON memory_facts(entry_id);
238
+ CREATE INDEX IF NOT EXISTS idx_memory_facts_kind ON memory_facts(kind);
239
+ `);
240
+ },
241
+ },
242
+ {
243
+ name: '006_add_compact_memory_fts',
244
+ up(db) {
245
+ db.exec(`
246
+ CREATE VIRTUAL TABLE IF NOT EXISTS fts_entry_summaries USING fts5(
247
+ entry_id UNINDEXED,
248
+ project_id UNINDEXED,
249
+ summary_short,
250
+ summary_dense,
251
+ keywords
252
+ );
253
+ `);
254
+ },
255
+ },
256
+ ];
257
+ function ensureMigrationsTable(db) {
258
+ db.exec(`
259
+ CREATE TABLE IF NOT EXISTS _migrations (
260
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
261
+ name TEXT NOT NULL UNIQUE,
262
+ applied_at TEXT NOT NULL
263
+ );
264
+ `);
265
+ }
266
+ function getAppliedNames(db) {
267
+ const rows = db.prepare('SELECT name FROM _migrations ORDER BY id').all();
268
+ return new Set(rows.map(r => r.name));
269
+ }
270
+ export function runMigrations(db) {
271
+ ensureMigrationsTable(db);
272
+ const applied = getAppliedNames(db);
273
+ for (const m of migrations) {
274
+ if (applied.has(m.name)) {
275
+ console.log(`[MIGRATION] ${m.name} already applied, skipping`);
276
+ continue;
277
+ }
278
+ console.log(`[MIGRATION] Applying ${m.name}...`);
279
+ m.up(db);
280
+ db.prepare('INSERT INTO _migrations (name, applied_at) VALUES (?, ?)').run(m.name, new Date().toISOString());
281
+ console.log(`[MIGRATION] ${m.name} applied`);
282
+ }
283
+ console.log(`[MIGRATION] All migrations up to date (${migrations.length} total)`);
284
+ }
285
+ //# sourceMappingURL=runner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runner.js","sourceRoot":"","sources":["../../../src/db/migrations/runner.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,51 @@
1
+ import { Project, SddEntry, Task, Classification, AuditLogEntry, DesignDecision, EntryRelationship, EntryContext, PaginationParams, PaginatedResult, EntrySummary, MemoryFact, CompactEntry, CompactEntryContext, ProjectCompact } from '../types/context.js';
2
+ export declare function createProject(project: Project): void;
3
+ export declare function getProject(id: string): Project | null;
4
+ export declare function getAllProjects(params?: PaginationParams): PaginatedResult<Project>;
5
+ export declare function updateProject(id: string, updates: Partial<Project>): void;
6
+ export declare function deleteProject(id: string): void;
7
+ export declare function createEntry(entry: SddEntry): void;
8
+ export declare function getEntry(id: string): SddEntry | null;
9
+ export declare function getProjectEntries(projectId: string, section?: string, paramsPg?: PaginationParams): PaginatedResult<SddEntry>;
10
+ export declare function getAllEntries(paramsPg?: PaginationParams): PaginatedResult<SddEntry>;
11
+ export declare function updateEntry(id: string, updates: Partial<SddEntry>): void;
12
+ export declare function deleteEntry(id: string): void;
13
+ export declare function searchEntries(projectId: string, query: string, paramsPg?: PaginationParams): PaginatedResult<SddEntry>;
14
+ export declare function searchAllEntries(query: string, paramsPg?: PaginationParams): PaginatedResult<SddEntry>;
15
+ export declare function createTask(task: Task): void;
16
+ export declare function getTask(id: string): Task | null;
17
+ export declare function getProjectTasks(projectId: string, entryId?: string, paramsPg?: PaginationParams): PaginatedResult<Task>;
18
+ export declare function getTasksByEntry(entryId: string): Task[];
19
+ export declare function updateTask(id: string, updates: Partial<Task>): void;
20
+ export declare function deleteTask(id: string): void;
21
+ export declare function getAuditLog(filters?: {
22
+ entity_type?: string;
23
+ entity_id?: string;
24
+ project_id?: string;
25
+ }, paramsPg?: PaginationParams): PaginatedResult<AuditLogEntry>;
26
+ export declare function addDesignDecision(dd: DesignDecision): void;
27
+ export declare function getDesignDecisions(entryId: string): DesignDecision[];
28
+ export declare function addEntryRelationship(rel: EntryRelationship): void;
29
+ export declare function getEntryRelationships(entryId: string): EntryRelationship[];
30
+ export declare function getEntryContext(entryId: string): EntryContext | null;
31
+ export declare function upsertEntrySummary(summary: EntrySummary): void;
32
+ export declare function getEntrySummary(entryId: string): EntrySummary | null;
33
+ export declare function deleteEntrySummary(entryId: string): void;
34
+ export declare function replaceEntryFacts(entryId: string, facts: MemoryFact[]): void;
35
+ export declare function listMemoryFacts(filters?: {
36
+ project_id?: string;
37
+ entry_id?: string;
38
+ kind?: string;
39
+ }, paramsPg?: PaginationParams): PaginatedResult<MemoryFact>;
40
+ export declare function getCompactEntry(entryId: string): CompactEntry | null;
41
+ export declare function getCompactEntriesByIds(entryIds: string[]): CompactEntry[];
42
+ export declare function getCompactEntryContext(entryId: string): CompactEntryContext | null;
43
+ export declare function searchCompactEntries(query: string, projectId?: string, paramsPg?: PaginationParams): PaginatedResult<CompactEntry>;
44
+ export declare function getProjectCompact(projectId: string, paramsPg?: {
45
+ entryLimit?: number;
46
+ taskLimit?: number;
47
+ }): ProjectCompact | null;
48
+ export declare function addClassification(c: Classification): void;
49
+ export declare function getClassifications(type: string, id: string): Classification[];
50
+ export declare function removeClassification(id: string): void;
51
+ //# sourceMappingURL=schema.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/db/schema.ts"],"names":[],"mappings":"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"}