@blackms/aistack 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 (214) hide show
  1. package/README.md +244 -0
  2. package/dist/agents/definitions/analyst.d.ts +6 -0
  3. package/dist/agents/definitions/analyst.d.ts.map +1 -0
  4. package/dist/agents/definitions/analyst.js +53 -0
  5. package/dist/agents/definitions/analyst.js.map +1 -0
  6. package/dist/agents/definitions/architect.d.ts +6 -0
  7. package/dist/agents/definitions/architect.d.ts.map +1 -0
  8. package/dist/agents/definitions/architect.js +46 -0
  9. package/dist/agents/definitions/architect.js.map +1 -0
  10. package/dist/agents/definitions/coder.d.ts +6 -0
  11. package/dist/agents/definitions/coder.d.ts.map +1 -0
  12. package/dist/agents/definitions/coder.js +39 -0
  13. package/dist/agents/definitions/coder.js.map +1 -0
  14. package/dist/agents/definitions/coordinator.d.ts +6 -0
  15. package/dist/agents/definitions/coordinator.d.ts.map +1 -0
  16. package/dist/agents/definitions/coordinator.js +54 -0
  17. package/dist/agents/definitions/coordinator.js.map +1 -0
  18. package/dist/agents/definitions/index.d.ts +11 -0
  19. package/dist/agents/definitions/index.d.ts.map +1 -0
  20. package/dist/agents/definitions/index.js +11 -0
  21. package/dist/agents/definitions/index.js.map +1 -0
  22. package/dist/agents/definitions/researcher.d.ts +6 -0
  23. package/dist/agents/definitions/researcher.d.ts.map +1 -0
  24. package/dist/agents/definitions/researcher.js +39 -0
  25. package/dist/agents/definitions/researcher.js.map +1 -0
  26. package/dist/agents/definitions/reviewer.d.ts +6 -0
  27. package/dist/agents/definitions/reviewer.d.ts.map +1 -0
  28. package/dist/agents/definitions/reviewer.js +46 -0
  29. package/dist/agents/definitions/reviewer.js.map +1 -0
  30. package/dist/agents/definitions/tester.d.ts +6 -0
  31. package/dist/agents/definitions/tester.d.ts.map +1 -0
  32. package/dist/agents/definitions/tester.js +44 -0
  33. package/dist/agents/definitions/tester.js.map +1 -0
  34. package/dist/agents/index.d.ts +7 -0
  35. package/dist/agents/index.d.ts.map +1 -0
  36. package/dist/agents/index.js +7 -0
  37. package/dist/agents/index.js.map +1 -0
  38. package/dist/agents/registry.d.ts +41 -0
  39. package/dist/agents/registry.d.ts.map +1 -0
  40. package/dist/agents/registry.js +107 -0
  41. package/dist/agents/registry.js.map +1 -0
  42. package/dist/agents/spawner.d.ts +62 -0
  43. package/dist/agents/spawner.d.ts.map +1 -0
  44. package/dist/agents/spawner.js +169 -0
  45. package/dist/agents/spawner.js.map +1 -0
  46. package/dist/cli/commands/agent.d.ts +6 -0
  47. package/dist/cli/commands/agent.d.ts.map +1 -0
  48. package/dist/cli/commands/agent.js +144 -0
  49. package/dist/cli/commands/agent.js.map +1 -0
  50. package/dist/cli/commands/index.d.ts +10 -0
  51. package/dist/cli/commands/index.d.ts.map +1 -0
  52. package/dist/cli/commands/index.js +10 -0
  53. package/dist/cli/commands/index.js.map +1 -0
  54. package/dist/cli/commands/init.d.ts +6 -0
  55. package/dist/cli/commands/init.d.ts.map +1 -0
  56. package/dist/cli/commands/init.js +50 -0
  57. package/dist/cli/commands/init.js.map +1 -0
  58. package/dist/cli/commands/mcp.d.ts +6 -0
  59. package/dist/cli/commands/mcp.d.ts.map +1 -0
  60. package/dist/cli/commands/mcp.js +82 -0
  61. package/dist/cli/commands/mcp.js.map +1 -0
  62. package/dist/cli/commands/memory.d.ts +6 -0
  63. package/dist/cli/commands/memory.d.ts.map +1 -0
  64. package/dist/cli/commands/memory.js +157 -0
  65. package/dist/cli/commands/memory.js.map +1 -0
  66. package/dist/cli/commands/plugin.d.ts +6 -0
  67. package/dist/cli/commands/plugin.d.ts.map +1 -0
  68. package/dist/cli/commands/plugin.js +146 -0
  69. package/dist/cli/commands/plugin.js.map +1 -0
  70. package/dist/cli/commands/status.d.ts +6 -0
  71. package/dist/cli/commands/status.d.ts.map +1 -0
  72. package/dist/cli/commands/status.js +115 -0
  73. package/dist/cli/commands/status.js.map +1 -0
  74. package/dist/cli/index.d.ts +6 -0
  75. package/dist/cli/index.d.ts.map +1 -0
  76. package/dist/cli/index.js +41 -0
  77. package/dist/cli/index.js.map +1 -0
  78. package/dist/coordination/index.d.ts +7 -0
  79. package/dist/coordination/index.d.ts.map +1 -0
  80. package/dist/coordination/index.js +7 -0
  81. package/dist/coordination/index.js.map +1 -0
  82. package/dist/coordination/message-bus.d.ts +64 -0
  83. package/dist/coordination/message-bus.d.ts.map +1 -0
  84. package/dist/coordination/message-bus.js +148 -0
  85. package/dist/coordination/message-bus.js.map +1 -0
  86. package/dist/coordination/task-queue.d.ts +71 -0
  87. package/dist/coordination/task-queue.d.ts.map +1 -0
  88. package/dist/coordination/task-queue.js +140 -0
  89. package/dist/coordination/task-queue.js.map +1 -0
  90. package/dist/coordination/topology.d.ts +68 -0
  91. package/dist/coordination/topology.d.ts.map +1 -0
  92. package/dist/coordination/topology.js +195 -0
  93. package/dist/coordination/topology.js.map +1 -0
  94. package/dist/github/client.d.ts +56 -0
  95. package/dist/github/client.d.ts.map +1 -0
  96. package/dist/github/client.js +179 -0
  97. package/dist/github/client.js.map +1 -0
  98. package/dist/github/index.d.ts +5 -0
  99. package/dist/github/index.d.ts.map +1 -0
  100. package/dist/github/index.js +5 -0
  101. package/dist/github/index.js.map +1 -0
  102. package/dist/hooks/index.d.ts +29 -0
  103. package/dist/hooks/index.d.ts.map +1 -0
  104. package/dist/hooks/index.js +112 -0
  105. package/dist/hooks/index.js.map +1 -0
  106. package/dist/hooks/session.d.ts +16 -0
  107. package/dist/hooks/session.d.ts.map +1 -0
  108. package/dist/hooks/session.js +60 -0
  109. package/dist/hooks/session.js.map +1 -0
  110. package/dist/hooks/task.d.ts +16 -0
  111. package/dist/hooks/task.d.ts.map +1 -0
  112. package/dist/hooks/task.js +82 -0
  113. package/dist/hooks/task.js.map +1 -0
  114. package/dist/index.d.ts +16 -0
  115. package/dist/index.d.ts.map +1 -0
  116. package/dist/index.js +32 -0
  117. package/dist/index.js.map +1 -0
  118. package/dist/mcp/index.d.ts +6 -0
  119. package/dist/mcp/index.d.ts.map +1 -0
  120. package/dist/mcp/index.js +6 -0
  121. package/dist/mcp/index.js.map +1 -0
  122. package/dist/mcp/server.d.ts +22 -0
  123. package/dist/mcp/server.d.ts.map +1 -0
  124. package/dist/mcp/server.js +128 -0
  125. package/dist/mcp/server.js.map +1 -0
  126. package/dist/mcp/tools/agent-tools.d.ts +174 -0
  127. package/dist/mcp/tools/agent-tools.d.ts.map +1 -0
  128. package/dist/mcp/tools/agent-tools.js +214 -0
  129. package/dist/mcp/tools/agent-tools.js.map +1 -0
  130. package/dist/mcp/tools/github-tools.d.ts +229 -0
  131. package/dist/mcp/tools/github-tools.d.ts.map +1 -0
  132. package/dist/mcp/tools/github-tools.js +286 -0
  133. package/dist/mcp/tools/github-tools.js.map +1 -0
  134. package/dist/mcp/tools/index.d.ts +10 -0
  135. package/dist/mcp/tools/index.d.ts.map +1 -0
  136. package/dist/mcp/tools/index.js +10 -0
  137. package/dist/mcp/tools/index.js.map +1 -0
  138. package/dist/mcp/tools/memory-tools.d.ts +190 -0
  139. package/dist/mcp/tools/memory-tools.d.ts.map +1 -0
  140. package/dist/mcp/tools/memory-tools.js +207 -0
  141. package/dist/mcp/tools/memory-tools.js.map +1 -0
  142. package/dist/mcp/tools/session-tools.d.ts +116 -0
  143. package/dist/mcp/tools/session-tools.d.ts.map +1 -0
  144. package/dist/mcp/tools/session-tools.js +151 -0
  145. package/dist/mcp/tools/session-tools.js.map +1 -0
  146. package/dist/mcp/tools/system-tools.d.ts +98 -0
  147. package/dist/mcp/tools/system-tools.d.ts.map +1 -0
  148. package/dist/mcp/tools/system-tools.js +165 -0
  149. package/dist/mcp/tools/system-tools.js.map +1 -0
  150. package/dist/mcp/tools/task-tools.d.ts +170 -0
  151. package/dist/mcp/tools/task-tools.d.ts.map +1 -0
  152. package/dist/mcp/tools/task-tools.js +188 -0
  153. package/dist/mcp/tools/task-tools.js.map +1 -0
  154. package/dist/memory/fts-search.d.ts +46 -0
  155. package/dist/memory/fts-search.d.ts.map +1 -0
  156. package/dist/memory/fts-search.js +136 -0
  157. package/dist/memory/fts-search.js.map +1 -0
  158. package/dist/memory/index.d.ts +77 -0
  159. package/dist/memory/index.d.ts.map +1 -0
  160. package/dist/memory/index.js +203 -0
  161. package/dist/memory/index.js.map +1 -0
  162. package/dist/memory/sqlite-store.d.ts +36 -0
  163. package/dist/memory/sqlite-store.d.ts.map +1 -0
  164. package/dist/memory/sqlite-store.js +371 -0
  165. package/dist/memory/sqlite-store.js.map +1 -0
  166. package/dist/memory/vector-search.d.ts +43 -0
  167. package/dist/memory/vector-search.d.ts.map +1 -0
  168. package/dist/memory/vector-search.js +179 -0
  169. package/dist/memory/vector-search.js.map +1 -0
  170. package/dist/plugins/index.d.ts +7 -0
  171. package/dist/plugins/index.d.ts.map +1 -0
  172. package/dist/plugins/index.js +7 -0
  173. package/dist/plugins/index.js.map +1 -0
  174. package/dist/plugins/loader.d.ts +33 -0
  175. package/dist/plugins/loader.d.ts.map +1 -0
  176. package/dist/plugins/loader.js +147 -0
  177. package/dist/plugins/loader.js.map +1 -0
  178. package/dist/plugins/registry.d.ts +48 -0
  179. package/dist/plugins/registry.d.ts.map +1 -0
  180. package/dist/plugins/registry.js +72 -0
  181. package/dist/plugins/registry.js.map +1 -0
  182. package/dist/plugins/types.d.ts +5 -0
  183. package/dist/plugins/types.d.ts.map +1 -0
  184. package/dist/plugins/types.js +5 -0
  185. package/dist/plugins/types.js.map +1 -0
  186. package/dist/providers/index.d.ts +49 -0
  187. package/dist/providers/index.d.ts.map +1 -0
  188. package/dist/providers/index.js +254 -0
  189. package/dist/providers/index.js.map +1 -0
  190. package/dist/types.d.ts +189 -0
  191. package/dist/types.d.ts.map +1 -0
  192. package/dist/types.js +10 -0
  193. package/dist/types.js.map +1 -0
  194. package/dist/utils/config.d.ts +32 -0
  195. package/dist/utils/config.d.ts.map +1 -0
  196. package/dist/utils/config.js +194 -0
  197. package/dist/utils/config.js.map +1 -0
  198. package/dist/utils/embeddings.d.ts +23 -0
  199. package/dist/utils/embeddings.d.ts.map +1 -0
  200. package/dist/utils/embeddings.js +151 -0
  201. package/dist/utils/embeddings.js.map +1 -0
  202. package/dist/utils/index.d.ts +8 -0
  203. package/dist/utils/index.d.ts.map +1 -0
  204. package/dist/utils/index.js +8 -0
  205. package/dist/utils/index.js.map +1 -0
  206. package/dist/utils/logger.d.ts +24 -0
  207. package/dist/utils/logger.d.ts.map +1 -0
  208. package/dist/utils/logger.js +96 -0
  209. package/dist/utils/logger.js.map +1 -0
  210. package/dist/utils/validation.d.ts +264 -0
  211. package/dist/utils/validation.d.ts.map +1 -0
  212. package/dist/utils/validation.js +144 -0
  213. package/dist/utils/validation.js.map +1 -0
  214. package/package.json +84 -0
@@ -0,0 +1,371 @@
1
+ /**
2
+ * SQLite-based memory store with FTS5 full-text search
3
+ */
4
+ import Database from 'better-sqlite3';
5
+ import { randomUUID } from 'node:crypto';
6
+ import { existsSync, mkdirSync } from 'node:fs';
7
+ import { dirname } from 'node:path';
8
+ import { logger } from '../utils/logger.js';
9
+ const log = logger.child('sqlite');
10
+ const SCHEMA = `
11
+ -- Core memory table
12
+ CREATE TABLE IF NOT EXISTS memory (
13
+ id TEXT PRIMARY KEY,
14
+ key TEXT NOT NULL,
15
+ namespace TEXT DEFAULT 'default',
16
+ content TEXT NOT NULL,
17
+ embedding BLOB,
18
+ metadata TEXT,
19
+ created_at INTEGER NOT NULL,
20
+ updated_at INTEGER NOT NULL,
21
+ UNIQUE(namespace, key)
22
+ );
23
+
24
+ -- Indexes for common queries
25
+ CREATE INDEX IF NOT EXISTS idx_memory_namespace ON memory(namespace);
26
+ CREATE INDEX IF NOT EXISTS idx_memory_key ON memory(key);
27
+ CREATE INDEX IF NOT EXISTS idx_memory_updated ON memory(updated_at DESC);
28
+
29
+ -- Full-text search table
30
+ CREATE VIRTUAL TABLE IF NOT EXISTS memory_fts USING fts5(
31
+ key, content, namespace,
32
+ content=memory, content_rowid=rowid,
33
+ tokenize='porter unicode61'
34
+ );
35
+
36
+ -- FTS triggers for automatic sync
37
+ CREATE TRIGGER IF NOT EXISTS memory_ai AFTER INSERT ON memory BEGIN
38
+ INSERT INTO memory_fts(rowid, key, content, namespace)
39
+ VALUES (NEW.rowid, NEW.key, NEW.content, NEW.namespace);
40
+ END;
41
+
42
+ CREATE TRIGGER IF NOT EXISTS memory_ad AFTER DELETE ON memory BEGIN
43
+ INSERT INTO memory_fts(memory_fts, rowid, key, content, namespace)
44
+ VALUES('delete', OLD.rowid, OLD.key, OLD.content, OLD.namespace);
45
+ END;
46
+
47
+ CREATE TRIGGER IF NOT EXISTS memory_au AFTER UPDATE ON memory BEGIN
48
+ INSERT INTO memory_fts(memory_fts, rowid, key, content, namespace)
49
+ VALUES('delete', OLD.rowid, OLD.key, OLD.content, OLD.namespace);
50
+ INSERT INTO memory_fts(rowid, key, content, namespace)
51
+ VALUES (NEW.rowid, NEW.key, NEW.content, NEW.namespace);
52
+ END;
53
+
54
+ -- Sessions table
55
+ CREATE TABLE IF NOT EXISTS sessions (
56
+ id TEXT PRIMARY KEY,
57
+ status TEXT NOT NULL DEFAULT 'active',
58
+ started_at INTEGER NOT NULL,
59
+ ended_at INTEGER,
60
+ metadata TEXT
61
+ );
62
+
63
+ CREATE INDEX IF NOT EXISTS idx_sessions_status ON sessions(status);
64
+
65
+ -- Tasks table
66
+ CREATE TABLE IF NOT EXISTS tasks (
67
+ id TEXT PRIMARY KEY,
68
+ session_id TEXT,
69
+ agent_type TEXT NOT NULL,
70
+ status TEXT NOT NULL DEFAULT 'pending',
71
+ input TEXT,
72
+ output TEXT,
73
+ created_at INTEGER NOT NULL,
74
+ completed_at INTEGER,
75
+ FOREIGN KEY (session_id) REFERENCES sessions(id)
76
+ );
77
+
78
+ CREATE INDEX IF NOT EXISTS idx_tasks_session ON tasks(session_id);
79
+ CREATE INDEX IF NOT EXISTS idx_tasks_status ON tasks(status);
80
+
81
+ -- Plugins table
82
+ CREATE TABLE IF NOT EXISTS plugins (
83
+ name TEXT PRIMARY KEY,
84
+ version TEXT NOT NULL,
85
+ enabled INTEGER DEFAULT 1,
86
+ config TEXT,
87
+ installed_at INTEGER NOT NULL
88
+ );
89
+ `;
90
+ export class SQLiteStore {
91
+ db;
92
+ dbPath;
93
+ constructor(dbPath) {
94
+ this.dbPath = dbPath;
95
+ // Ensure directory exists
96
+ const dir = dirname(dbPath);
97
+ if (!existsSync(dir)) {
98
+ mkdirSync(dir, { recursive: true });
99
+ }
100
+ this.db = new Database(dbPath);
101
+ this.db.pragma('journal_mode = WAL');
102
+ this.db.pragma('foreign_keys = ON');
103
+ this.initSchema();
104
+ log.debug('SQLite store initialized', { path: dbPath });
105
+ }
106
+ initSchema() {
107
+ this.db.exec(SCHEMA);
108
+ }
109
+ // ==================== Memory Operations ====================
110
+ store(key, content, options = {}) {
111
+ const namespace = options.namespace ?? 'default';
112
+ const now = Date.now();
113
+ // Check if entry exists
114
+ const existing = this.db
115
+ .prepare('SELECT id FROM memory WHERE namespace = ? AND key = ?')
116
+ .get(namespace, key);
117
+ const id = existing?.id ?? randomUUID();
118
+ const metadataJson = options.metadata ? JSON.stringify(options.metadata) : null;
119
+ if (existing) {
120
+ // Update existing entry
121
+ this.db
122
+ .prepare(`
123
+ UPDATE memory
124
+ SET content = ?, metadata = ?, updated_at = ?
125
+ WHERE id = ?
126
+ `)
127
+ .run(content, metadataJson, now, id);
128
+ }
129
+ else {
130
+ // Insert new entry
131
+ this.db
132
+ .prepare(`
133
+ INSERT INTO memory (id, key, namespace, content, metadata, created_at, updated_at)
134
+ VALUES (?, ?, ?, ?, ?, ?, ?)
135
+ `)
136
+ .run(id, key, namespace, content, metadataJson, now, now);
137
+ }
138
+ return {
139
+ id,
140
+ key,
141
+ namespace,
142
+ content,
143
+ metadata: options.metadata,
144
+ createdAt: new Date(now),
145
+ updatedAt: new Date(now),
146
+ };
147
+ }
148
+ get(key, namespace = 'default') {
149
+ const row = this.db
150
+ .prepare(`
151
+ SELECT id, key, namespace, content, embedding, metadata, created_at, updated_at
152
+ FROM memory
153
+ WHERE namespace = ? AND key = ?
154
+ `)
155
+ .get(namespace, key);
156
+ return row ? this.rowToEntry(row) : null;
157
+ }
158
+ getById(id) {
159
+ const row = this.db
160
+ .prepare(`
161
+ SELECT id, key, namespace, content, embedding, metadata, created_at, updated_at
162
+ FROM memory
163
+ WHERE id = ?
164
+ `)
165
+ .get(id);
166
+ return row ? this.rowToEntry(row) : null;
167
+ }
168
+ delete(key, namespace = 'default') {
169
+ const result = this.db
170
+ .prepare('DELETE FROM memory WHERE namespace = ? AND key = ?')
171
+ .run(namespace, key);
172
+ return result.changes > 0;
173
+ }
174
+ deleteById(id) {
175
+ const result = this.db
176
+ .prepare('DELETE FROM memory WHERE id = ?')
177
+ .run(id);
178
+ return result.changes > 0;
179
+ }
180
+ list(namespace, limit = 100, offset = 0) {
181
+ let query = `
182
+ SELECT id, key, namespace, content, embedding, metadata, created_at, updated_at
183
+ FROM memory
184
+ `;
185
+ const params = [];
186
+ if (namespace) {
187
+ query += ' WHERE namespace = ?';
188
+ params.push(namespace);
189
+ }
190
+ query += ' ORDER BY updated_at DESC LIMIT ? OFFSET ?';
191
+ params.push(limit, offset);
192
+ const rows = this.db.prepare(query).all(...params);
193
+ return rows.map(row => this.rowToEntry(row));
194
+ }
195
+ count(namespace) {
196
+ let query = 'SELECT COUNT(*) as count FROM memory';
197
+ const params = [];
198
+ if (namespace) {
199
+ query += ' WHERE namespace = ?';
200
+ params.push(namespace);
201
+ }
202
+ const result = this.db.prepare(query).get(...params);
203
+ return result.count;
204
+ }
205
+ // Store embedding for a memory entry
206
+ storeEmbedding(id, embedding) {
207
+ const buffer = Buffer.from(new Float32Array(embedding).buffer);
208
+ this.db
209
+ .prepare('UPDATE memory SET embedding = ?, updated_at = ? WHERE id = ?')
210
+ .run(buffer, Date.now(), id);
211
+ }
212
+ // Get all entries with embeddings for vector search
213
+ getEntriesWithEmbeddings(namespace) {
214
+ let query = `
215
+ SELECT id, embedding
216
+ FROM memory
217
+ WHERE embedding IS NOT NULL
218
+ `;
219
+ const params = [];
220
+ if (namespace) {
221
+ query += ' AND namespace = ?';
222
+ params.push(namespace);
223
+ }
224
+ const rows = this.db.prepare(query).all(...params);
225
+ return rows.map(row => ({
226
+ id: row.id,
227
+ embedding: Array.from(new Float32Array(row.embedding.buffer)),
228
+ }));
229
+ }
230
+ rowToEntry(row) {
231
+ return {
232
+ id: row.id,
233
+ key: row.key,
234
+ namespace: row.namespace,
235
+ content: row.content,
236
+ embedding: row.embedding
237
+ ? new Float32Array(row.embedding.buffer)
238
+ : undefined,
239
+ metadata: row.metadata ? JSON.parse(row.metadata) : undefined,
240
+ createdAt: new Date(row.created_at),
241
+ updatedAt: new Date(row.updated_at),
242
+ };
243
+ }
244
+ // ==================== Session Operations ====================
245
+ createSession(metadata) {
246
+ const id = randomUUID();
247
+ const now = Date.now();
248
+ const metadataJson = metadata ? JSON.stringify(metadata) : null;
249
+ this.db
250
+ .prepare(`
251
+ INSERT INTO sessions (id, status, started_at, metadata)
252
+ VALUES (?, 'active', ?, ?)
253
+ `)
254
+ .run(id, now, metadataJson);
255
+ return {
256
+ id,
257
+ status: 'active',
258
+ startedAt: new Date(now),
259
+ metadata,
260
+ };
261
+ }
262
+ getSession(id) {
263
+ const row = this.db
264
+ .prepare('SELECT * FROM sessions WHERE id = ?')
265
+ .get(id);
266
+ return row ? this.rowToSession(row) : null;
267
+ }
268
+ endSession(id) {
269
+ const result = this.db
270
+ .prepare(`
271
+ UPDATE sessions
272
+ SET status = 'ended', ended_at = ?
273
+ WHERE id = ? AND status = 'active'
274
+ `)
275
+ .run(Date.now(), id);
276
+ return result.changes > 0;
277
+ }
278
+ getActiveSession() {
279
+ const row = this.db
280
+ .prepare(`
281
+ SELECT * FROM sessions
282
+ WHERE status = 'active'
283
+ ORDER BY started_at DESC
284
+ LIMIT 1
285
+ `)
286
+ .get();
287
+ return row ? this.rowToSession(row) : null;
288
+ }
289
+ rowToSession(row) {
290
+ return {
291
+ id: row.id,
292
+ status: row.status,
293
+ startedAt: new Date(row.started_at),
294
+ endedAt: row.ended_at ? new Date(row.ended_at) : undefined,
295
+ metadata: row.metadata ? JSON.parse(row.metadata) : undefined,
296
+ };
297
+ }
298
+ // ==================== Task Operations ====================
299
+ createTask(agentType, input, sessionId) {
300
+ const id = randomUUID();
301
+ const now = Date.now();
302
+ this.db
303
+ .prepare(`
304
+ INSERT INTO tasks (id, session_id, agent_type, status, input, created_at)
305
+ VALUES (?, ?, ?, 'pending', ?, ?)
306
+ `)
307
+ .run(id, sessionId ?? null, agentType, input ?? null, now);
308
+ return {
309
+ id,
310
+ sessionId,
311
+ agentType,
312
+ status: 'pending',
313
+ input,
314
+ createdAt: new Date(now),
315
+ };
316
+ }
317
+ getTask(id) {
318
+ const row = this.db
319
+ .prepare('SELECT * FROM tasks WHERE id = ?')
320
+ .get(id);
321
+ return row ? this.rowToTask(row) : null;
322
+ }
323
+ updateTaskStatus(id, status, output) {
324
+ const completedAt = status === 'completed' || status === 'failed' ? Date.now() : null;
325
+ const result = this.db
326
+ .prepare(`
327
+ UPDATE tasks
328
+ SET status = ?, output = ?, completed_at = ?
329
+ WHERE id = ?
330
+ `)
331
+ .run(status, output ?? null, completedAt, id);
332
+ return result.changes > 0;
333
+ }
334
+ listTasks(sessionId, status) {
335
+ let query = 'SELECT * FROM tasks WHERE 1=1';
336
+ const params = [];
337
+ if (sessionId) {
338
+ query += ' AND session_id = ?';
339
+ params.push(sessionId);
340
+ }
341
+ if (status) {
342
+ query += ' AND status = ?';
343
+ params.push(status);
344
+ }
345
+ query += ' ORDER BY created_at DESC';
346
+ const rows = this.db.prepare(query).all(...params);
347
+ return rows.map(row => this.rowToTask(row));
348
+ }
349
+ rowToTask(row) {
350
+ return {
351
+ id: row.id,
352
+ sessionId: row.session_id ?? undefined,
353
+ agentType: row.agent_type,
354
+ status: row.status,
355
+ input: row.input ?? undefined,
356
+ output: row.output ?? undefined,
357
+ createdAt: new Date(row.created_at),
358
+ completedAt: row.completed_at ? new Date(row.completed_at) : undefined,
359
+ };
360
+ }
361
+ // ==================== Cleanup ====================
362
+ close() {
363
+ this.db.close();
364
+ log.debug('SQLite store closed');
365
+ }
366
+ vacuum() {
367
+ this.db.exec('VACUUM');
368
+ log.debug('Database vacuumed');
369
+ }
370
+ }
371
+ //# sourceMappingURL=sqlite-store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sqlite-store.js","sourceRoot":"","sources":["../../src/memory/sqlite-store.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,43 @@
1
+ /**
2
+ * Vector similarity search using embeddings
3
+ * Uses external embedding APIs - honest about capabilities
4
+ */
5
+ import type { MemoryEntry, MemorySearchResult, AgentStackConfig } from '../types.js';
6
+ import type { SQLiteStore } from './sqlite-store.js';
7
+ export interface VectorSearchOptions {
8
+ namespace?: string;
9
+ limit?: number;
10
+ threshold?: number;
11
+ }
12
+ export declare class VectorSearch {
13
+ private store;
14
+ private embedder;
15
+ private enabled;
16
+ constructor(store: SQLiteStore, config: AgentStackConfig);
17
+ isEnabled(): boolean;
18
+ /**
19
+ * Generate and store embedding for a memory entry
20
+ */
21
+ indexEntry(entry: MemoryEntry): Promise<void>;
22
+ /**
23
+ * Batch index multiple entries
24
+ */
25
+ indexBatch(entries: MemoryEntry[]): Promise<number>;
26
+ /**
27
+ * Search using vector similarity
28
+ */
29
+ search(query: string, options?: VectorSearchOptions): Promise<MemorySearchResult[]>;
30
+ /**
31
+ * Find similar entries to a given entry
32
+ */
33
+ findSimilar(entryId: string, options?: VectorSearchOptions): Promise<MemorySearchResult[]>;
34
+ /**
35
+ * Get statistics about indexed entries
36
+ */
37
+ getStats(namespace?: string): {
38
+ total: number;
39
+ indexed: number;
40
+ coverage: number;
41
+ };
42
+ }
43
+ //# sourceMappingURL=vector-search.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vector-search.d.ts","sourceRoot":"","sources":["../../src/memory/vector-search.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAGrF,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAIrD,MAAM,WAAW,mBAAmB;IAClC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,qBAAa,YAAY;IACvB,OAAO,CAAC,KAAK,CAAc;IAC3B,OAAO,CAAC,QAAQ,CAAkC;IAClD,OAAO,CAAC,OAAO,CAAkB;gBAErB,KAAK,EAAE,WAAW,EAAE,MAAM,EAAE,gBAAgB;IAaxD,SAAS,IAAI,OAAO;IAIpB;;OAEG;IACG,UAAU,CAAC,KAAK,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;IAkBnD;;OAEG;IACG,UAAU,CAAC,OAAO,EAAE,WAAW,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC;IA6BzD;;OAEG;IACG,MAAM,CACV,KAAK,EAAE,MAAM,EACb,OAAO,GAAE,mBAAwB,GAChC,OAAO,CAAC,kBAAkB,EAAE,CAAC;IA8DhC;;OAEG;IACG,WAAW,CACf,OAAO,EAAE,MAAM,EACf,OAAO,GAAE,mBAAwB,GAChC,OAAO,CAAC,kBAAkB,EAAE,CAAC;IA2ChC;;OAEG;IACH,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE;CAQnF"}
@@ -0,0 +1,179 @@
1
+ /**
2
+ * Vector similarity search using embeddings
3
+ * Uses external embedding APIs - honest about capabilities
4
+ */
5
+ import { createEmbeddingProvider, cosineSimilarity } from '../utils/embeddings.js';
6
+ import { logger } from '../utils/logger.js';
7
+ const log = logger.child('vector');
8
+ export class VectorSearch {
9
+ store;
10
+ embedder = null;
11
+ enabled = false;
12
+ constructor(store, config) {
13
+ this.store = store;
14
+ this.embedder = createEmbeddingProvider(config);
15
+ this.enabled = this.embedder !== null;
16
+ if (this.enabled) {
17
+ log.info('Vector search enabled', {
18
+ provider: config.memory.vectorSearch.provider,
19
+ model: config.memory.vectorSearch.model,
20
+ });
21
+ }
22
+ }
23
+ isEnabled() {
24
+ return this.enabled;
25
+ }
26
+ /**
27
+ * Generate and store embedding for a memory entry
28
+ */
29
+ async indexEntry(entry) {
30
+ if (!this.embedder) {
31
+ log.debug('Vector search disabled, skipping embedding');
32
+ return;
33
+ }
34
+ try {
35
+ const embedding = await this.embedder.embed(entry.content);
36
+ this.store.storeEmbedding(entry.id, embedding);
37
+ log.debug('Stored embedding', { id: entry.id, dimensions: embedding.length });
38
+ }
39
+ catch (error) {
40
+ log.warn('Failed to generate embedding', {
41
+ id: entry.id,
42
+ error: error instanceof Error ? error.message : String(error),
43
+ });
44
+ }
45
+ }
46
+ /**
47
+ * Batch index multiple entries
48
+ */
49
+ async indexBatch(entries) {
50
+ if (!this.embedder || entries.length === 0) {
51
+ return 0;
52
+ }
53
+ try {
54
+ const texts = entries.map(e => e.content);
55
+ const embeddings = await this.embedder.embedBatch(texts);
56
+ let indexed = 0;
57
+ for (let i = 0; i < entries.length; i++) {
58
+ const entry = entries[i];
59
+ const embedding = embeddings[i];
60
+ if (entry && embedding) {
61
+ this.store.storeEmbedding(entry.id, embedding);
62
+ indexed++;
63
+ }
64
+ }
65
+ log.debug('Batch indexed entries', { count: indexed });
66
+ return indexed;
67
+ }
68
+ catch (error) {
69
+ log.warn('Failed to batch index', {
70
+ error: error instanceof Error ? error.message : String(error),
71
+ });
72
+ return 0;
73
+ }
74
+ }
75
+ /**
76
+ * Search using vector similarity
77
+ */
78
+ async search(query, options = {}) {
79
+ if (!this.embedder) {
80
+ log.debug('Vector search disabled');
81
+ return [];
82
+ }
83
+ const { namespace, limit = 10, threshold = 0.7 } = options;
84
+ try {
85
+ // Generate query embedding
86
+ const queryEmbedding = await this.embedder.embed(query);
87
+ // Get all entries with embeddings
88
+ const entriesWithEmbeddings = this.store.getEntriesWithEmbeddings(namespace);
89
+ if (entriesWithEmbeddings.length === 0) {
90
+ log.debug('No entries with embeddings found');
91
+ return [];
92
+ }
93
+ // Calculate similarities
94
+ const scored = [];
95
+ for (const { id, embedding } of entriesWithEmbeddings) {
96
+ const score = cosineSimilarity(queryEmbedding, embedding);
97
+ if (score >= threshold) {
98
+ scored.push({ id, score });
99
+ }
100
+ }
101
+ // Sort by score descending and take top results
102
+ scored.sort((a, b) => b.score - a.score);
103
+ const topResults = scored.slice(0, limit);
104
+ // Fetch full entries
105
+ const results = [];
106
+ for (const { id, score } of topResults) {
107
+ const entry = this.store.getById(id);
108
+ if (entry) {
109
+ results.push({
110
+ entry,
111
+ score: Math.round(score * 1000) / 1000,
112
+ matchType: 'vector',
113
+ });
114
+ }
115
+ }
116
+ log.debug('Vector search completed', {
117
+ query: query.slice(0, 50),
118
+ candidates: entriesWithEmbeddings.length,
119
+ results: results.length,
120
+ });
121
+ return results;
122
+ }
123
+ catch (error) {
124
+ log.warn('Vector search failed', {
125
+ error: error instanceof Error ? error.message : String(error),
126
+ });
127
+ return [];
128
+ }
129
+ }
130
+ /**
131
+ * Find similar entries to a given entry
132
+ */
133
+ async findSimilar(entryId, options = {}) {
134
+ const entry = this.store.getById(entryId);
135
+ if (!entry || !entry.embedding) {
136
+ return [];
137
+ }
138
+ const { namespace, limit = 10, threshold = 0.7 } = options;
139
+ const queryEmbedding = Array.from(entry.embedding);
140
+ // Get all entries with embeddings
141
+ const entriesWithEmbeddings = this.store.getEntriesWithEmbeddings(namespace);
142
+ // Calculate similarities (excluding the source entry)
143
+ const scored = [];
144
+ for (const { id, embedding } of entriesWithEmbeddings) {
145
+ if (id === entryId)
146
+ continue;
147
+ const score = cosineSimilarity(queryEmbedding, embedding);
148
+ if (score >= threshold) {
149
+ scored.push({ id, score });
150
+ }
151
+ }
152
+ // Sort and return top results
153
+ scored.sort((a, b) => b.score - a.score);
154
+ const topResults = scored.slice(0, limit);
155
+ const results = [];
156
+ for (const { id, score } of topResults) {
157
+ const foundEntry = this.store.getById(id);
158
+ if (foundEntry) {
159
+ results.push({
160
+ entry: foundEntry,
161
+ score: Math.round(score * 1000) / 1000,
162
+ matchType: 'vector',
163
+ });
164
+ }
165
+ }
166
+ return results;
167
+ }
168
+ /**
169
+ * Get statistics about indexed entries
170
+ */
171
+ getStats(namespace) {
172
+ const total = this.store.count(namespace);
173
+ const entriesWithEmbeddings = this.store.getEntriesWithEmbeddings(namespace);
174
+ const indexed = entriesWithEmbeddings.length;
175
+ const coverage = total > 0 ? Math.round((indexed / total) * 100) : 0;
176
+ return { total, indexed, coverage };
177
+ }
178
+ }
179
+ //# sourceMappingURL=vector-search.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vector-search.js","sourceRoot":"","sources":["../../src/memory/vector-search.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Plugin module exports
3
+ */
4
+ export { loadPlugin, discoverPlugins, getPlugin, listPlugins, unloadPlugin, getPluginCount, clearPlugins, } from './loader.js';
5
+ export { registerPluginEntry, getPluginEntry, listPluginEntries, setPluginEnabled, setPluginConfig, removePluginEntry, isPluginRegistered, getRegisteredPluginCount, } from './registry.js';
6
+ export * from './types.js';
7
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/plugins/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EACL,UAAU,EACV,eAAe,EACf,SAAS,EACT,WAAW,EACX,YAAY,EACZ,cAAc,EACd,YAAY,GACb,MAAM,aAAa,CAAC;AAErB,OAAO,EACL,mBAAmB,EACnB,cAAc,EACd,iBAAiB,EACjB,gBAAgB,EAChB,eAAe,EACf,iBAAiB,EACjB,kBAAkB,EAClB,wBAAwB,GACzB,MAAM,eAAe,CAAC;AAEvB,cAAc,YAAY,CAAC"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Plugin module exports
3
+ */
4
+ export { loadPlugin, discoverPlugins, getPlugin, listPlugins, unloadPlugin, getPluginCount, clearPlugins, } from './loader.js';
5
+ export { registerPluginEntry, getPluginEntry, listPluginEntries, setPluginEnabled, setPluginConfig, removePluginEntry, isPluginRegistered, getRegisteredPluginCount, } from './registry.js';
6
+ export * from './types.js';
7
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/plugins/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EACL,UAAU,EACV,eAAe,EACf,SAAS,EACT,WAAW,EACX,YAAY,EACZ,cAAc,EACd,YAAY,GACb,MAAM,aAAa,CAAC;AAErB,OAAO,EACL,mBAAmB,EACnB,cAAc,EACd,iBAAiB,EACjB,gBAAgB,EAChB,eAAe,EACf,iBAAiB,EACjB,kBAAkB,EAClB,wBAAwB,GACzB,MAAM,eAAe,CAAC;AAEvB,cAAc,YAAY,CAAC"}