@soleri/core 0.0.1 → 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 (63) hide show
  1. package/dist/brain/brain.d.ts +76 -0
  2. package/dist/brain/brain.d.ts.map +1 -0
  3. package/dist/brain/brain.js +431 -0
  4. package/dist/brain/brain.js.map +1 -0
  5. package/dist/facades/facade-factory.d.ts +5 -0
  6. package/dist/facades/facade-factory.d.ts.map +1 -0
  7. package/dist/facades/facade-factory.js +49 -0
  8. package/dist/facades/facade-factory.js.map +1 -0
  9. package/dist/facades/types.d.ts +42 -0
  10. package/dist/facades/types.d.ts.map +1 -0
  11. package/dist/facades/types.js +6 -0
  12. package/dist/facades/types.js.map +1 -0
  13. package/dist/index.d.ts +17 -0
  14. package/dist/index.d.ts.map +1 -0
  15. package/dist/index.js +17 -0
  16. package/dist/index.js.map +1 -0
  17. package/dist/intelligence/loader.d.ts +3 -0
  18. package/dist/intelligence/loader.d.ts.map +1 -0
  19. package/dist/intelligence/loader.js +41 -0
  20. package/dist/intelligence/loader.js.map +1 -0
  21. package/dist/intelligence/types.d.ts +20 -0
  22. package/dist/intelligence/types.d.ts.map +1 -0
  23. package/dist/intelligence/types.js +2 -0
  24. package/dist/intelligence/types.js.map +1 -0
  25. package/dist/llm/key-pool.d.ts +38 -0
  26. package/dist/llm/key-pool.d.ts.map +1 -0
  27. package/dist/llm/key-pool.js +154 -0
  28. package/dist/llm/key-pool.js.map +1 -0
  29. package/dist/llm/types.d.ts +80 -0
  30. package/dist/llm/types.d.ts.map +1 -0
  31. package/dist/llm/types.js +37 -0
  32. package/dist/llm/types.js.map +1 -0
  33. package/dist/llm/utils.d.ts +26 -0
  34. package/dist/llm/utils.d.ts.map +1 -0
  35. package/dist/llm/utils.js +197 -0
  36. package/dist/llm/utils.js.map +1 -0
  37. package/dist/planning/planner.d.ts +48 -0
  38. package/dist/planning/planner.d.ts.map +1 -0
  39. package/dist/planning/planner.js +109 -0
  40. package/dist/planning/planner.js.map +1 -0
  41. package/dist/vault/vault.d.ts +80 -0
  42. package/dist/vault/vault.d.ts.map +1 -0
  43. package/dist/vault/vault.js +353 -0
  44. package/dist/vault/vault.js.map +1 -0
  45. package/package.json +56 -4
  46. package/src/__tests__/brain.test.ts +545 -0
  47. package/src/__tests__/llm.test.ts +556 -0
  48. package/src/__tests__/loader.test.ts +176 -0
  49. package/src/__tests__/planner.test.ts +261 -0
  50. package/src/__tests__/vault.test.ts +494 -0
  51. package/src/brain/brain.ts +581 -0
  52. package/src/facades/facade-factory.ts +64 -0
  53. package/src/facades/types.ts +42 -0
  54. package/src/index.ts +64 -0
  55. package/src/intelligence/loader.ts +42 -0
  56. package/src/intelligence/types.ts +20 -0
  57. package/src/llm/key-pool.ts +190 -0
  58. package/src/llm/types.ts +116 -0
  59. package/src/llm/utils.ts +248 -0
  60. package/src/planning/planner.ts +151 -0
  61. package/src/vault/vault.ts +455 -0
  62. package/tsconfig.json +22 -0
  63. package/vitest.config.ts +15 -0
@@ -0,0 +1,353 @@
1
+ import Database from 'better-sqlite3';
2
+ import { mkdirSync } from 'node:fs';
3
+ import { dirname } from 'node:path';
4
+ export class Vault {
5
+ db;
6
+ constructor(dbPath = ':memory:') {
7
+ if (dbPath !== ':memory:')
8
+ mkdirSync(dirname(dbPath), { recursive: true });
9
+ this.db = new Database(dbPath);
10
+ this.db.pragma('journal_mode = WAL');
11
+ this.db.pragma('foreign_keys = ON');
12
+ this.initialize();
13
+ }
14
+ initialize() {
15
+ this.db.exec(`
16
+ CREATE TABLE IF NOT EXISTS entries (
17
+ id TEXT PRIMARY KEY,
18
+ type TEXT NOT NULL CHECK(type IN ('pattern', 'anti-pattern', 'rule')),
19
+ domain TEXT NOT NULL,
20
+ title TEXT NOT NULL,
21
+ severity TEXT NOT NULL CHECK(severity IN ('critical', 'warning', 'suggestion')),
22
+ description TEXT NOT NULL,
23
+ context TEXT, example TEXT, counter_example TEXT, why TEXT,
24
+ tags TEXT NOT NULL DEFAULT '[]',
25
+ applies_to TEXT DEFAULT '[]',
26
+ created_at INTEGER NOT NULL DEFAULT (unixepoch()),
27
+ updated_at INTEGER NOT NULL DEFAULT (unixepoch())
28
+ );
29
+ CREATE VIRTUAL TABLE IF NOT EXISTS entries_fts USING fts5(
30
+ id, title, description, context, tags,
31
+ content='entries', content_rowid='rowid', tokenize='porter unicode61'
32
+ );
33
+ CREATE TRIGGER IF NOT EXISTS entries_ai AFTER INSERT ON entries BEGIN
34
+ INSERT INTO entries_fts(rowid,id,title,description,context,tags) VALUES(new.rowid,new.id,new.title,new.description,new.context,new.tags);
35
+ END;
36
+ CREATE TRIGGER IF NOT EXISTS entries_ad AFTER DELETE ON entries BEGIN
37
+ INSERT INTO entries_fts(entries_fts,rowid,id,title,description,context,tags) VALUES('delete',old.rowid,old.id,old.title,old.description,old.context,old.tags);
38
+ END;
39
+ CREATE TRIGGER IF NOT EXISTS entries_au AFTER UPDATE ON entries BEGIN
40
+ INSERT INTO entries_fts(entries_fts,rowid,id,title,description,context,tags) VALUES('delete',old.rowid,old.id,old.title,old.description,old.context,old.tags);
41
+ INSERT INTO entries_fts(rowid,id,title,description,context,tags) VALUES(new.rowid,new.id,new.title,new.description,new.context,new.tags);
42
+ END;
43
+ CREATE TABLE IF NOT EXISTS projects (
44
+ path TEXT PRIMARY KEY,
45
+ name TEXT NOT NULL,
46
+ registered_at INTEGER NOT NULL DEFAULT (unixepoch()),
47
+ last_seen_at INTEGER NOT NULL DEFAULT (unixepoch()),
48
+ session_count INTEGER NOT NULL DEFAULT 1
49
+ );
50
+ CREATE TABLE IF NOT EXISTS memories (
51
+ id TEXT PRIMARY KEY,
52
+ project_path TEXT NOT NULL,
53
+ type TEXT NOT NULL CHECK(type IN ('session', 'lesson', 'preference')),
54
+ context TEXT NOT NULL,
55
+ summary TEXT NOT NULL,
56
+ topics TEXT NOT NULL DEFAULT '[]',
57
+ files_modified TEXT NOT NULL DEFAULT '[]',
58
+ tools_used TEXT NOT NULL DEFAULT '[]',
59
+ created_at INTEGER NOT NULL DEFAULT (unixepoch()),
60
+ archived_at INTEGER
61
+ );
62
+ CREATE VIRTUAL TABLE IF NOT EXISTS memories_fts USING fts5(
63
+ id, context, summary, topics,
64
+ content='memories', content_rowid='rowid', tokenize='porter unicode61'
65
+ );
66
+ CREATE TRIGGER IF NOT EXISTS memories_ai AFTER INSERT ON memories BEGIN
67
+ INSERT INTO memories_fts(rowid,id,context,summary,topics) VALUES(new.rowid,new.id,new.context,new.summary,new.topics);
68
+ END;
69
+ CREATE TRIGGER IF NOT EXISTS memories_ad AFTER DELETE ON memories BEGIN
70
+ INSERT INTO memories_fts(memories_fts,rowid,id,context,summary,topics) VALUES('delete',old.rowid,old.id,old.context,old.summary,old.topics);
71
+ END;
72
+ CREATE TRIGGER IF NOT EXISTS memories_au AFTER UPDATE ON memories BEGIN
73
+ INSERT INTO memories_fts(memories_fts,rowid,id,context,summary,topics) VALUES('delete',old.rowid,old.id,old.context,old.summary,old.topics);
74
+ INSERT INTO memories_fts(rowid,id,context,summary,topics) VALUES(new.rowid,new.id,new.context,new.summary,new.topics);
75
+ END;
76
+ CREATE TABLE IF NOT EXISTS brain_vocabulary (
77
+ term TEXT PRIMARY KEY,
78
+ idf REAL NOT NULL,
79
+ doc_count INTEGER NOT NULL DEFAULT 1,
80
+ updated_at INTEGER NOT NULL DEFAULT (unixepoch())
81
+ );
82
+ CREATE TABLE IF NOT EXISTS brain_feedback (
83
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
84
+ query TEXT NOT NULL,
85
+ entry_id TEXT NOT NULL,
86
+ action TEXT NOT NULL CHECK(action IN ('accepted', 'dismissed')),
87
+ created_at INTEGER NOT NULL DEFAULT (unixepoch())
88
+ );
89
+ CREATE INDEX IF NOT EXISTS idx_brain_feedback_query ON brain_feedback(query);
90
+ `);
91
+ }
92
+ seed(entries) {
93
+ const upsert = this.db.prepare(`
94
+ INSERT INTO entries (id,type,domain,title,severity,description,context,example,counter_example,why,tags,applies_to)
95
+ VALUES (@id,@type,@domain,@title,@severity,@description,@context,@example,@counterExample,@why,@tags,@appliesTo)
96
+ ON CONFLICT(id) DO UPDATE SET type=excluded.type,domain=excluded.domain,title=excluded.title,severity=excluded.severity,
97
+ description=excluded.description,context=excluded.context,example=excluded.example,counter_example=excluded.counter_example,
98
+ why=excluded.why,tags=excluded.tags,applies_to=excluded.applies_to,updated_at=unixepoch()
99
+ `);
100
+ const tx = this.db.transaction((items) => {
101
+ let count = 0;
102
+ for (const entry of items) {
103
+ upsert.run({
104
+ id: entry.id,
105
+ type: entry.type,
106
+ domain: entry.domain,
107
+ title: entry.title,
108
+ severity: entry.severity,
109
+ description: entry.description,
110
+ context: entry.context ?? null,
111
+ example: entry.example ?? null,
112
+ counterExample: entry.counterExample ?? null,
113
+ why: entry.why ?? null,
114
+ tags: JSON.stringify(entry.tags),
115
+ appliesTo: JSON.stringify(entry.appliesTo ?? []),
116
+ });
117
+ count++;
118
+ }
119
+ return count;
120
+ });
121
+ return tx(entries);
122
+ }
123
+ search(query, options) {
124
+ const limit = options?.limit ?? 10;
125
+ const filters = [];
126
+ const fp = {};
127
+ if (options?.domain) {
128
+ filters.push('e.domain = @domain');
129
+ fp.domain = options.domain;
130
+ }
131
+ if (options?.type) {
132
+ filters.push('e.type = @type');
133
+ fp.type = options.type;
134
+ }
135
+ if (options?.severity) {
136
+ filters.push('e.severity = @severity');
137
+ fp.severity = options.severity;
138
+ }
139
+ const wc = filters.length > 0 ? `AND ${filters.join(' AND ')}` : '';
140
+ try {
141
+ const rows = this.db
142
+ .prepare(`SELECT e.*, -rank as score FROM entries_fts fts JOIN entries e ON e.rowid = fts.rowid WHERE entries_fts MATCH @query ${wc} ORDER BY score DESC LIMIT @limit`)
143
+ .all({ query, limit, ...fp });
144
+ return rows.map(rowToSearchResult);
145
+ }
146
+ catch {
147
+ return [];
148
+ }
149
+ }
150
+ get(id) {
151
+ const row = this.db.prepare('SELECT * FROM entries WHERE id = ?').get(id);
152
+ return row ? rowToEntry(row) : null;
153
+ }
154
+ list(options) {
155
+ const filters = [];
156
+ const params = {};
157
+ if (options?.domain) {
158
+ filters.push('domain = @domain');
159
+ params.domain = options.domain;
160
+ }
161
+ if (options?.type) {
162
+ filters.push('type = @type');
163
+ params.type = options.type;
164
+ }
165
+ if (options?.severity) {
166
+ filters.push('severity = @severity');
167
+ params.severity = options.severity;
168
+ }
169
+ if (options?.tags?.length) {
170
+ const c = options.tags.map((t, i) => {
171
+ params[`tag${i}`] = `%"${t}"%`;
172
+ return `tags LIKE @tag${i}`;
173
+ });
174
+ filters.push(`(${c.join(' OR ')})`);
175
+ }
176
+ const wc = filters.length > 0 ? `WHERE ${filters.join(' AND ')}` : '';
177
+ const rows = this.db
178
+ .prepare(`SELECT * FROM entries ${wc} ORDER BY severity, domain, title LIMIT @limit OFFSET @offset`)
179
+ .all({ ...params, limit: options?.limit ?? 50, offset: options?.offset ?? 0 });
180
+ return rows.map(rowToEntry);
181
+ }
182
+ stats() {
183
+ const total = this.db.prepare('SELECT COUNT(*) as count FROM entries').get().count;
184
+ return {
185
+ totalEntries: total,
186
+ byType: gc(this.db, 'type'),
187
+ byDomain: gc(this.db, 'domain'),
188
+ bySeverity: gc(this.db, 'severity'),
189
+ };
190
+ }
191
+ add(entry) {
192
+ this.seed([entry]);
193
+ }
194
+ remove(id) {
195
+ return this.db.prepare('DELETE FROM entries WHERE id = ?').run(id).changes > 0;
196
+ }
197
+ registerProject(path, name) {
198
+ const projectName = name ?? path.replace(/\/$/, '').split('/').pop() ?? path;
199
+ const existing = this.getProject(path);
200
+ if (existing) {
201
+ this.db
202
+ .prepare('UPDATE projects SET last_seen_at = unixepoch(), session_count = session_count + 1 WHERE path = ?')
203
+ .run(path);
204
+ return this.getProject(path);
205
+ }
206
+ this.db.prepare('INSERT INTO projects (path, name) VALUES (?, ?)').run(path, projectName);
207
+ return this.getProject(path);
208
+ }
209
+ getProject(path) {
210
+ const row = this.db.prepare('SELECT * FROM projects WHERE path = ?').get(path);
211
+ if (!row)
212
+ return null;
213
+ return {
214
+ path: row.path,
215
+ name: row.name,
216
+ registeredAt: row.registered_at,
217
+ lastSeenAt: row.last_seen_at,
218
+ sessionCount: row.session_count,
219
+ };
220
+ }
221
+ listProjects() {
222
+ const rows = this.db
223
+ .prepare('SELECT * FROM projects ORDER BY last_seen_at DESC')
224
+ .all();
225
+ return rows.map((row) => ({
226
+ path: row.path,
227
+ name: row.name,
228
+ registeredAt: row.registered_at,
229
+ lastSeenAt: row.last_seen_at,
230
+ sessionCount: row.session_count,
231
+ }));
232
+ }
233
+ captureMemory(memory) {
234
+ const id = `mem-${Date.now()}-${Math.random().toString(36).slice(2, 8)}`;
235
+ this.db
236
+ .prepare(`INSERT INTO memories (id, project_path, type, context, summary, topics, files_modified, tools_used) VALUES (@id, @projectPath, @type, @context, @summary, @topics, @filesModified, @toolsUsed)`)
237
+ .run({
238
+ id,
239
+ projectPath: memory.projectPath,
240
+ type: memory.type,
241
+ context: memory.context,
242
+ summary: memory.summary,
243
+ topics: JSON.stringify(memory.topics),
244
+ filesModified: JSON.stringify(memory.filesModified),
245
+ toolsUsed: JSON.stringify(memory.toolsUsed),
246
+ });
247
+ return this.getMemory(id);
248
+ }
249
+ searchMemories(query, options) {
250
+ const limit = options?.limit ?? 10;
251
+ const filters = ['m.archived_at IS NULL'];
252
+ const fp = {};
253
+ if (options?.type) {
254
+ filters.push('m.type = @type');
255
+ fp.type = options.type;
256
+ }
257
+ if (options?.projectPath) {
258
+ filters.push('m.project_path = @projectPath');
259
+ fp.projectPath = options.projectPath;
260
+ }
261
+ const wc = filters.length > 0 ? `AND ${filters.join(' AND ')}` : '';
262
+ try {
263
+ const rows = this.db
264
+ .prepare(`SELECT m.* FROM memories_fts fts JOIN memories m ON m.rowid = fts.rowid WHERE memories_fts MATCH @query ${wc} ORDER BY rank LIMIT @limit`)
265
+ .all({ query, limit, ...fp });
266
+ return rows.map(rowToMemory);
267
+ }
268
+ catch {
269
+ return [];
270
+ }
271
+ }
272
+ listMemories(options) {
273
+ const filters = ['archived_at IS NULL'];
274
+ const params = {};
275
+ if (options?.type) {
276
+ filters.push('type = @type');
277
+ params.type = options.type;
278
+ }
279
+ if (options?.projectPath) {
280
+ filters.push('project_path = @projectPath');
281
+ params.projectPath = options.projectPath;
282
+ }
283
+ const wc = `WHERE ${filters.join(' AND ')}`;
284
+ const rows = this.db
285
+ .prepare(`SELECT * FROM memories ${wc} ORDER BY created_at DESC LIMIT @limit OFFSET @offset`)
286
+ .all({ ...params, limit: options?.limit ?? 50, offset: options?.offset ?? 0 });
287
+ return rows.map(rowToMemory);
288
+ }
289
+ memoryStats() {
290
+ const total = this.db.prepare('SELECT COUNT(*) as count FROM memories WHERE archived_at IS NULL').get().count;
291
+ const byTypeRows = this.db
292
+ .prepare('SELECT type as key, COUNT(*) as count FROM memories WHERE archived_at IS NULL GROUP BY type')
293
+ .all();
294
+ const byProjectRows = this.db
295
+ .prepare('SELECT project_path as key, COUNT(*) as count FROM memories WHERE archived_at IS NULL GROUP BY project_path')
296
+ .all();
297
+ return {
298
+ total,
299
+ byType: Object.fromEntries(byTypeRows.map((r) => [r.key, r.count])),
300
+ byProject: Object.fromEntries(byProjectRows.map((r) => [r.key, r.count])),
301
+ };
302
+ }
303
+ getMemory(id) {
304
+ const row = this.db.prepare('SELECT * FROM memories WHERE id = ?').get(id);
305
+ return row ? rowToMemory(row) : null;
306
+ }
307
+ getDb() {
308
+ return this.db;
309
+ }
310
+ close() {
311
+ this.db.close();
312
+ }
313
+ }
314
+ function gc(db, col) {
315
+ const rows = db
316
+ .prepare(`SELECT ${col} as key, COUNT(*) as count FROM entries GROUP BY ${col}`)
317
+ .all();
318
+ return Object.fromEntries(rows.map((r) => [r.key, r.count]));
319
+ }
320
+ function rowToEntry(row) {
321
+ return {
322
+ id: row.id,
323
+ type: row.type,
324
+ domain: row.domain,
325
+ title: row.title,
326
+ severity: row.severity,
327
+ description: row.description,
328
+ context: row.context ?? undefined,
329
+ example: row.example ?? undefined,
330
+ counterExample: row.counter_example ?? undefined,
331
+ why: row.why ?? undefined,
332
+ tags: JSON.parse(row.tags || '[]'),
333
+ appliesTo: JSON.parse(row.applies_to || '[]'),
334
+ };
335
+ }
336
+ function rowToSearchResult(row) {
337
+ return { entry: rowToEntry(row), score: row.score };
338
+ }
339
+ function rowToMemory(row) {
340
+ return {
341
+ id: row.id,
342
+ projectPath: row.project_path,
343
+ type: row.type,
344
+ context: row.context,
345
+ summary: row.summary,
346
+ topics: JSON.parse(row.topics || '[]'),
347
+ filesModified: JSON.parse(row.files_modified || '[]'),
348
+ toolsUsed: JSON.parse(row.tools_used || '[]'),
349
+ createdAt: row.created_at,
350
+ archivedAt: row.archived_at ?? null,
351
+ };
352
+ }
353
+ //# sourceMappingURL=vault.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vault.js","sourceRoot":"","sources":["../../src/vault/vault.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,10 +1,62 @@
1
1
  {
2
2
  "name": "@soleri/core",
3
- "version": "0.0.1",
4
- "description": "Soleri core engine — vault, brain, planning, memory",
5
- "license": "MIT",
3
+ "version": "1.0.0",
4
+ "description": "Shared engine for Soleri agents — vault, brain, planner, LLM utilities, and facade infrastructure.",
5
+ "keywords": [
6
+ "agent",
7
+ "ai",
8
+ "brain",
9
+ "core",
10
+ "llm",
11
+ "mcp",
12
+ "planner",
13
+ "soleri",
14
+ "vault"
15
+ ],
16
+ "homepage": "https://soleri.dev",
17
+ "license": "Apache-2.0",
18
+ "author": "adrozdenko",
6
19
  "repository": {
7
20
  "type": "git",
8
- "url": "https://github.com/adrozdenko/soleri.git"
21
+ "url": "https://github.com/adrozdenko/soleri.git",
22
+ "directory": "packages/core"
23
+ },
24
+ "type": "module",
25
+ "main": "dist/index.js",
26
+ "types": "dist/index.d.ts",
27
+ "exports": {
28
+ ".": {
29
+ "types": "./dist/index.d.ts",
30
+ "import": "./dist/index.js"
31
+ }
32
+ },
33
+ "publishConfig": {
34
+ "access": "public"
35
+ },
36
+ "scripts": {
37
+ "build": "tsc",
38
+ "typecheck": "tsc --noEmit",
39
+ "test": "vitest run",
40
+ "test:watch": "vitest",
41
+ "test:coverage": "vitest run --coverage"
42
+ },
43
+ "dependencies": {
44
+ "better-sqlite3": "^11.8.1",
45
+ "zod": "^3.24.2"
46
+ },
47
+ "devDependencies": {
48
+ "@types/better-sqlite3": "^7.6.13",
49
+ "@vitest/coverage-v8": "^4.0.18"
50
+ },
51
+ "peerDependencies": {
52
+ "@modelcontextprotocol/sdk": "^1.12.1"
53
+ },
54
+ "peerDependenciesMeta": {
55
+ "@modelcontextprotocol/sdk": {
56
+ "optional": true
57
+ }
58
+ },
59
+ "engines": {
60
+ "node": ">=18.0.0"
9
61
  }
10
62
  }