@sashabogi/foundation 0.1.13 → 2.0.1

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 (62) hide show
  1. package/README.md +632 -238
  2. package/dist/cli.d.ts +1 -0
  3. package/dist/cli.d.ts.map +1 -1
  4. package/dist/cli.js +336 -23
  5. package/dist/cli.js.map +1 -1
  6. package/dist/index.d.ts +2 -2
  7. package/dist/index.js +3 -3
  8. package/dist/index.js.map +1 -1
  9. package/dist/providers/anthropic.d.ts.map +1 -1
  10. package/dist/providers/anthropic.js +4 -6
  11. package/dist/providers/anthropic.js.map +1 -1
  12. package/dist/providers/fireworks.d.ts +5 -0
  13. package/dist/providers/fireworks.d.ts.map +1 -1
  14. package/dist/providers/fireworks.js +18 -0
  15. package/dist/providers/fireworks.js.map +1 -1
  16. package/dist/providers/kimi-code.d.ts +5 -0
  17. package/dist/providers/kimi-code.d.ts.map +1 -1
  18. package/dist/providers/kimi-code.js +18 -0
  19. package/dist/providers/kimi-code.js.map +1 -1
  20. package/dist/providers/zai.d.ts +5 -0
  21. package/dist/providers/zai.d.ts.map +1 -1
  22. package/dist/providers/zai.js +18 -0
  23. package/dist/providers/zai.js.map +1 -1
  24. package/dist/tools/gaia/index.d.ts +29 -15
  25. package/dist/tools/gaia/index.d.ts.map +1 -1
  26. package/dist/tools/gaia/index.js +1206 -274
  27. package/dist/tools/gaia/index.js.map +1 -1
  28. package/dist/tools/gaia/storage.d.ts +72 -0
  29. package/dist/tools/gaia/storage.d.ts.map +1 -0
  30. package/dist/tools/gaia/storage.js +344 -0
  31. package/dist/tools/gaia/storage.js.map +1 -0
  32. package/dist/tools/gaia/test-storage-manual.d.ts +6 -0
  33. package/dist/tools/gaia/test-storage-manual.d.ts.map +1 -0
  34. package/dist/tools/gaia/test-storage-manual.js +120 -0
  35. package/dist/tools/gaia/test-storage-manual.js.map +1 -0
  36. package/dist/tools/memoria/index.d.ts +25 -0
  37. package/dist/tools/memoria/index.d.ts.map +1 -0
  38. package/dist/tools/memoria/index.js +269 -0
  39. package/dist/tools/memoria/index.js.map +1 -0
  40. package/dist/tools/memoria/storage.d.ts +72 -0
  41. package/dist/tools/memoria/storage.d.ts.map +1 -0
  42. package/dist/tools/memoria/storage.js +344 -0
  43. package/dist/tools/memoria/storage.js.map +1 -0
  44. package/dist/tools/memoria/storage.test.d.ts +7 -0
  45. package/dist/tools/memoria/storage.test.d.ts.map +1 -0
  46. package/dist/tools/memoria/storage.test.js +350 -0
  47. package/dist/tools/memoria/storage.test.js.map +1 -0
  48. package/dist/tools/memoria/test-storage-manual.d.ts +6 -0
  49. package/dist/tools/memoria/test-storage-manual.d.ts.map +1 -0
  50. package/dist/tools/memoria/test-storage-manual.js +120 -0
  51. package/dist/tools/memoria/test-storage-manual.js.map +1 -0
  52. package/dist/types/index.d.ts +38 -0
  53. package/dist/types/index.d.ts.map +1 -1
  54. package/docs/MIGRATION-GUIDE.md +771 -0
  55. package/package.json +2 -2
  56. package/packages/ui/dist/assets/index-oiJTDMJ1.css +1 -0
  57. package/packages/ui/dist/assets/index-oivszLTx.js +352 -0
  58. package/packages/ui/dist/index.html +2 -2
  59. package/docs/REFACTORING-PLAN.md +0 -374
  60. package/docs/TESTING-WITH-NATIVE-SWARM.md +0 -266
  61. package/packages/ui/dist/assets/index-B7zz_B5Q.js +0 -312
  62. package/packages/ui/dist/assets/index-fYt-vaxP.css +0 -1
@@ -0,0 +1,344 @@
1
+ /**
2
+ * Memoria Storage Layer
3
+ *
4
+ * SQLite + FTS5 storage for Foundation's advanced memory system.
5
+ * Provides 5-tier memory hierarchy with full-text search and BM25 ranking.
6
+ */
7
+ import Database from 'better-sqlite3';
8
+ import { existsSync, mkdirSync } from 'fs';
9
+ import { dirname } from 'path';
10
+ import { nanoid } from 'nanoid';
11
+ // =============================================================================
12
+ // MemoriaStorage Class
13
+ // =============================================================================
14
+ export class MemoriaStorage {
15
+ db;
16
+ dbPath;
17
+ constructor(dbPath) {
18
+ this.dbPath = dbPath;
19
+ // Ensure directory exists
20
+ const dir = dirname(dbPath);
21
+ if (!existsSync(dir)) {
22
+ mkdirSync(dir, { recursive: true });
23
+ }
24
+ // Open database
25
+ this.db = new Database(dbPath);
26
+ // Configure for performance
27
+ this.db.pragma('journal_mode = WAL');
28
+ this.db.pragma('synchronous = NORMAL');
29
+ this.db.pragma('cache_size = -64000'); // 64MB cache
30
+ // Initialize schema
31
+ this.initSchema();
32
+ }
33
+ initSchema() {
34
+ // Main memories table
35
+ this.db.exec(`
36
+ CREATE TABLE IF NOT EXISTS memories (
37
+ id TEXT PRIMARY KEY,
38
+ tier TEXT NOT NULL CHECK(tier IN ('session', 'project', 'global', 'note', 'observation')),
39
+ content TEXT NOT NULL,
40
+ tags TEXT NOT NULL,
41
+ related_files TEXT NOT NULL,
42
+ session_id TEXT,
43
+ project_path TEXT,
44
+ created_at INTEGER NOT NULL,
45
+ accessed_at INTEGER NOT NULL,
46
+ access_count INTEGER NOT NULL DEFAULT 0,
47
+ metadata TEXT
48
+ );
49
+
50
+ CREATE INDEX IF NOT EXISTS idx_tier ON memories(tier);
51
+ CREATE INDEX IF NOT EXISTS idx_session ON memories(session_id) WHERE session_id IS NOT NULL;
52
+ CREATE INDEX IF NOT EXISTS idx_project ON memories(project_path) WHERE project_path IS NOT NULL;
53
+ CREATE INDEX IF NOT EXISTS idx_created ON memories(created_at DESC);
54
+ CREATE INDEX IF NOT EXISTS idx_accessed ON memories(accessed_at DESC);
55
+ `);
56
+ // FTS5 virtual table
57
+ this.db.exec(`
58
+ CREATE VIRTUAL TABLE IF NOT EXISTS memories_fts USING fts5(
59
+ content,
60
+ tags,
61
+ related_files,
62
+ content='memories',
63
+ content_rowid='rowid',
64
+ tokenize='porter unicode61'
65
+ );
66
+
67
+ -- Triggers to keep FTS in sync
68
+ CREATE TRIGGER IF NOT EXISTS memories_ai AFTER INSERT ON memories BEGIN
69
+ INSERT INTO memories_fts(rowid, content, tags, related_files)
70
+ VALUES (new.rowid, new.content, new.tags, new.related_files);
71
+ END;
72
+
73
+ CREATE TRIGGER IF NOT EXISTS memories_ad AFTER DELETE ON memories BEGIN
74
+ DELETE FROM memories_fts WHERE rowid = old.rowid;
75
+ END;
76
+
77
+ CREATE TRIGGER IF NOT EXISTS memories_au AFTER UPDATE ON memories BEGIN
78
+ UPDATE memories_fts SET content = new.content, tags = new.tags, related_files = new.related_files
79
+ WHERE rowid = old.rowid;
80
+ END;
81
+ `);
82
+ // Memory links table
83
+ this.db.exec(`
84
+ CREATE TABLE IF NOT EXISTS memory_links (
85
+ from_memory_id TEXT NOT NULL,
86
+ to_memory_id TEXT NOT NULL,
87
+ link_type TEXT NOT NULL CHECK(link_type IN ('depends_on', 'extends', 'reverts', 'related', 'contradicts')),
88
+ created_at INTEGER NOT NULL,
89
+ PRIMARY KEY (from_memory_id, to_memory_id, link_type),
90
+ FOREIGN KEY (from_memory_id) REFERENCES memories(id) ON DELETE CASCADE,
91
+ FOREIGN KEY (to_memory_id) REFERENCES memories(id) ON DELETE CASCADE
92
+ );
93
+
94
+ CREATE INDEX IF NOT EXISTS idx_link_from ON memory_links(from_memory_id);
95
+ CREATE INDEX IF NOT EXISTS idx_link_to ON memory_links(to_memory_id);
96
+ `);
97
+ // Metadata table
98
+ this.db.exec(`
99
+ CREATE TABLE IF NOT EXISTS metadata (
100
+ key TEXT PRIMARY KEY,
101
+ value TEXT NOT NULL
102
+ );
103
+
104
+ INSERT OR IGNORE INTO metadata (key, value) VALUES ('schema_version', '1');
105
+ `);
106
+ }
107
+ // ---------------------------------------------------------------------------
108
+ // Core Memory Operations
109
+ // ---------------------------------------------------------------------------
110
+ saveMemory(input) {
111
+ const now = Date.now();
112
+ const memory = {
113
+ id: `mem_${nanoid()}`,
114
+ created_at: now,
115
+ accessed_at: now,
116
+ access_count: 0,
117
+ ...input,
118
+ };
119
+ const stmt = this.db.prepare(`
120
+ INSERT INTO memories (id, tier, content, tags, related_files, session_id, project_path, created_at, accessed_at, access_count, metadata)
121
+ VALUES (@id, @tier, @content, @tags, @related_files, @session_id, @project_path, @created_at, @accessed_at, @access_count, @metadata)
122
+ `);
123
+ stmt.run({
124
+ id: memory.id,
125
+ tier: memory.tier,
126
+ content: memory.content,
127
+ tags: JSON.stringify(memory.tags),
128
+ related_files: JSON.stringify(memory.related_files),
129
+ session_id: memory.session_id ?? null,
130
+ project_path: memory.project_path ?? null,
131
+ created_at: memory.created_at,
132
+ accessed_at: memory.accessed_at,
133
+ access_count: memory.access_count,
134
+ metadata: memory.metadata ? JSON.stringify(memory.metadata) : null,
135
+ });
136
+ return memory;
137
+ }
138
+ getMemory(id) {
139
+ const stmt = this.db.prepare(`
140
+ SELECT * FROM memories WHERE id = ?
141
+ `);
142
+ const row = stmt.get(id);
143
+ if (!row)
144
+ return null;
145
+ // Update access tracking
146
+ const updateStmt = this.db.prepare(`
147
+ UPDATE memories
148
+ SET accessed_at = @now, access_count = access_count + 1
149
+ WHERE id = @id
150
+ `);
151
+ updateStmt.run({ id, now: Date.now() });
152
+ return this.rowToMemory(row, Date.now(), row.access_count + 1);
153
+ }
154
+ deleteMemory(id) {
155
+ // Count links that will be deleted
156
+ const countStmt = this.db.prepare(`
157
+ SELECT COUNT(*) as count FROM memory_links
158
+ WHERE from_memory_id = ? OR to_memory_id = ?
159
+ `);
160
+ const { count } = countStmt.get(id, id);
161
+ // Delete memory (CASCADE will handle links)
162
+ const deleteStmt = this.db.prepare(`DELETE FROM memories WHERE id = ?`);
163
+ const result = deleteStmt.run(id);
164
+ return {
165
+ success: result.changes > 0,
166
+ deleted_links: count,
167
+ };
168
+ }
169
+ // ---------------------------------------------------------------------------
170
+ // Search with FTS5 + Composite Scoring
171
+ // ---------------------------------------------------------------------------
172
+ search(options) {
173
+ const { query, tiers, limit = 20, context } = options;
174
+ // Build FTS5 query
175
+ let sql = `
176
+ SELECT
177
+ m.*,
178
+ fts.rank as fts_rank
179
+ FROM memories_fts fts
180
+ JOIN memories m ON m.rowid = fts.rowid
181
+ WHERE memories_fts MATCH ?
182
+ `;
183
+ const params = [query];
184
+ // Filter by tiers
185
+ if (tiers && tiers.length > 0) {
186
+ sql += ` AND m.tier IN (${tiers.map(() => '?').join(',')})`;
187
+ params.push(...tiers);
188
+ }
189
+ sql += ` ORDER BY fts.rank LIMIT ?`;
190
+ params.push(limit * 2); // Get more candidates for rescoring
191
+ const stmt = this.db.prepare(sql);
192
+ const rows = stmt.all(...params);
193
+ // Calculate composite scores
194
+ const now = Date.now();
195
+ const results = rows.map(row => {
196
+ const memory = this.rowToMemory(row);
197
+ // BM25 score from FTS5 (normalize to 0-1)
198
+ const relevance_score = Math.min(1.0, Math.abs(row.fts_rank) / 10);
199
+ // Recency score (exponential decay, 30-day half-life)
200
+ const ageMs = now - memory.created_at;
201
+ const ageDays = ageMs / (1000 * 60 * 60 * 24);
202
+ const recency_score = Math.exp(-ageDays / 30);
203
+ // Tier priority score
204
+ const tier_scores = {
205
+ session: 1.0,
206
+ project: 0.8,
207
+ global: 0.6,
208
+ note: 0.4,
209
+ observation: 0.2,
210
+ };
211
+ const tier_score = tier_scores[memory.tier];
212
+ // File proximity score
213
+ let proximity_score = 0;
214
+ if (context?.current_file && memory.related_files.length > 0) {
215
+ proximity_score = memory.related_files.includes(context.current_file) ? 1.0 : 0;
216
+ }
217
+ // Access frequency score (log scale)
218
+ const max_access = 100; // Assumed max for normalization
219
+ const frequency_score = memory.access_count > 0
220
+ ? Math.log(memory.access_count + 1) / Math.log(max_access + 1)
221
+ : 0;
222
+ // Composite score
223
+ const score = relevance_score * 0.40 +
224
+ recency_score * 0.25 +
225
+ tier_score * 0.15 +
226
+ proximity_score * 0.10 +
227
+ frequency_score * 0.10;
228
+ return {
229
+ memory,
230
+ score,
231
+ relevance_score,
232
+ recency_score,
233
+ tier_score,
234
+ proximity_score,
235
+ frequency_score,
236
+ };
237
+ });
238
+ // Sort by composite score and limit
239
+ results.sort((a, b) => b.score - a.score);
240
+ return results.slice(0, limit);
241
+ }
242
+ // ---------------------------------------------------------------------------
243
+ // Cross-Memory Links
244
+ // ---------------------------------------------------------------------------
245
+ createLink(link) {
246
+ const fullLink = {
247
+ ...link,
248
+ created_at: Date.now(),
249
+ };
250
+ const stmt = this.db.prepare(`
251
+ INSERT INTO memory_links (from_memory_id, to_memory_id, link_type, created_at)
252
+ VALUES (@from_memory_id, @to_memory_id, @link_type, @created_at)
253
+ ON CONFLICT DO NOTHING
254
+ `);
255
+ stmt.run(fullLink);
256
+ return fullLink;
257
+ }
258
+ getLinks(memoryId) {
259
+ const stmt = this.db.prepare(`
260
+ SELECT m.*, ml.link_type
261
+ FROM memory_links ml
262
+ JOIN memories m ON m.id = ml.to_memory_id
263
+ WHERE ml.from_memory_id = ?
264
+ `);
265
+ const rows = stmt.all(memoryId);
266
+ const links = {
267
+ depends_on: [],
268
+ extends: [],
269
+ reverts: [],
270
+ related: [],
271
+ contradicts: [],
272
+ };
273
+ for (const row of rows) {
274
+ const memory = this.rowToMemory(row);
275
+ links[row.link_type].push(memory);
276
+ }
277
+ return links;
278
+ }
279
+ // ---------------------------------------------------------------------------
280
+ // Statistics
281
+ // ---------------------------------------------------------------------------
282
+ getStats() {
283
+ // Total memories
284
+ const totalStmt = this.db.prepare(`SELECT COUNT(*) as count FROM memories`);
285
+ const { count: total_memories } = totalStmt.get();
286
+ // By tier
287
+ const tierStmt = this.db.prepare(`
288
+ SELECT tier, COUNT(*) as count FROM memories GROUP BY tier
289
+ `);
290
+ const tierRows = tierStmt.all();
291
+ const by_tier = {
292
+ session: 0,
293
+ project: 0,
294
+ global: 0,
295
+ note: 0,
296
+ observation: 0,
297
+ };
298
+ for (const row of tierRows) {
299
+ by_tier[row.tier] = row.count;
300
+ }
301
+ // Total links
302
+ const linksStmt = this.db.prepare(`SELECT COUNT(*) as count FROM memory_links`);
303
+ const { count: total_links } = linksStmt.get();
304
+ // Database size
305
+ const sizeStmt = this.db.prepare(`SELECT page_count * page_size as size FROM pragma_page_count(), pragma_page_size()`);
306
+ const { size } = sizeStmt.get();
307
+ const total_size_mb = size / (1024 * 1024);
308
+ // Oldest/newest memory
309
+ const rangeStmt = this.db.prepare(`
310
+ SELECT MIN(created_at) as oldest, MAX(created_at) as newest FROM memories
311
+ `);
312
+ const { oldest, newest } = rangeStmt.get();
313
+ return {
314
+ total_memories,
315
+ by_tier,
316
+ total_links,
317
+ total_size_mb,
318
+ oldest_memory: oldest ?? 0,
319
+ newest_memory: newest ?? 0,
320
+ };
321
+ }
322
+ // ---------------------------------------------------------------------------
323
+ // Utility
324
+ // ---------------------------------------------------------------------------
325
+ rowToMemory(row, accessed_at, access_count) {
326
+ return {
327
+ id: row.id,
328
+ tier: row.tier,
329
+ content: row.content,
330
+ tags: JSON.parse(row.tags),
331
+ related_files: JSON.parse(row.related_files),
332
+ session_id: row.session_id,
333
+ project_path: row.project_path,
334
+ created_at: row.created_at,
335
+ accessed_at: accessed_at ?? row.accessed_at,
336
+ access_count: access_count ?? row.access_count,
337
+ metadata: row.metadata ? JSON.parse(row.metadata) : undefined,
338
+ };
339
+ }
340
+ close() {
341
+ this.db.close();
342
+ }
343
+ }
344
+ //# sourceMappingURL=storage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"storage.js","sourceRoot":"","sources":["../../../src/tools/memoria/storage.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Memoria Storage Tests
3
+ *
4
+ * Test SQLite + FTS5 storage layer with BM25 ranking
5
+ */
6
+ export {};
7
+ //# sourceMappingURL=storage.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"storage.test.d.ts","sourceRoot":"","sources":["../../../src/tools/memoria/storage.test.ts"],"names":[],"mappings":"AAAA;;;;GAIG"}