@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.
- package/README.md +244 -0
- package/dist/agents/definitions/analyst.d.ts +6 -0
- package/dist/agents/definitions/analyst.d.ts.map +1 -0
- package/dist/agents/definitions/analyst.js +53 -0
- package/dist/agents/definitions/analyst.js.map +1 -0
- package/dist/agents/definitions/architect.d.ts +6 -0
- package/dist/agents/definitions/architect.d.ts.map +1 -0
- package/dist/agents/definitions/architect.js +46 -0
- package/dist/agents/definitions/architect.js.map +1 -0
- package/dist/agents/definitions/coder.d.ts +6 -0
- package/dist/agents/definitions/coder.d.ts.map +1 -0
- package/dist/agents/definitions/coder.js +39 -0
- package/dist/agents/definitions/coder.js.map +1 -0
- package/dist/agents/definitions/coordinator.d.ts +6 -0
- package/dist/agents/definitions/coordinator.d.ts.map +1 -0
- package/dist/agents/definitions/coordinator.js +54 -0
- package/dist/agents/definitions/coordinator.js.map +1 -0
- package/dist/agents/definitions/index.d.ts +11 -0
- package/dist/agents/definitions/index.d.ts.map +1 -0
- package/dist/agents/definitions/index.js +11 -0
- package/dist/agents/definitions/index.js.map +1 -0
- package/dist/agents/definitions/researcher.d.ts +6 -0
- package/dist/agents/definitions/researcher.d.ts.map +1 -0
- package/dist/agents/definitions/researcher.js +39 -0
- package/dist/agents/definitions/researcher.js.map +1 -0
- package/dist/agents/definitions/reviewer.d.ts +6 -0
- package/dist/agents/definitions/reviewer.d.ts.map +1 -0
- package/dist/agents/definitions/reviewer.js +46 -0
- package/dist/agents/definitions/reviewer.js.map +1 -0
- package/dist/agents/definitions/tester.d.ts +6 -0
- package/dist/agents/definitions/tester.d.ts.map +1 -0
- package/dist/agents/definitions/tester.js +44 -0
- package/dist/agents/definitions/tester.js.map +1 -0
- package/dist/agents/index.d.ts +7 -0
- package/dist/agents/index.d.ts.map +1 -0
- package/dist/agents/index.js +7 -0
- package/dist/agents/index.js.map +1 -0
- package/dist/agents/registry.d.ts +41 -0
- package/dist/agents/registry.d.ts.map +1 -0
- package/dist/agents/registry.js +107 -0
- package/dist/agents/registry.js.map +1 -0
- package/dist/agents/spawner.d.ts +62 -0
- package/dist/agents/spawner.d.ts.map +1 -0
- package/dist/agents/spawner.js +169 -0
- package/dist/agents/spawner.js.map +1 -0
- package/dist/cli/commands/agent.d.ts +6 -0
- package/dist/cli/commands/agent.d.ts.map +1 -0
- package/dist/cli/commands/agent.js +144 -0
- package/dist/cli/commands/agent.js.map +1 -0
- package/dist/cli/commands/index.d.ts +10 -0
- package/dist/cli/commands/index.d.ts.map +1 -0
- package/dist/cli/commands/index.js +10 -0
- package/dist/cli/commands/index.js.map +1 -0
- package/dist/cli/commands/init.d.ts +6 -0
- package/dist/cli/commands/init.d.ts.map +1 -0
- package/dist/cli/commands/init.js +50 -0
- package/dist/cli/commands/init.js.map +1 -0
- package/dist/cli/commands/mcp.d.ts +6 -0
- package/dist/cli/commands/mcp.d.ts.map +1 -0
- package/dist/cli/commands/mcp.js +82 -0
- package/dist/cli/commands/mcp.js.map +1 -0
- package/dist/cli/commands/memory.d.ts +6 -0
- package/dist/cli/commands/memory.d.ts.map +1 -0
- package/dist/cli/commands/memory.js +157 -0
- package/dist/cli/commands/memory.js.map +1 -0
- package/dist/cli/commands/plugin.d.ts +6 -0
- package/dist/cli/commands/plugin.d.ts.map +1 -0
- package/dist/cli/commands/plugin.js +146 -0
- package/dist/cli/commands/plugin.js.map +1 -0
- package/dist/cli/commands/status.d.ts +6 -0
- package/dist/cli/commands/status.d.ts.map +1 -0
- package/dist/cli/commands/status.js +115 -0
- package/dist/cli/commands/status.js.map +1 -0
- package/dist/cli/index.d.ts +6 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +41 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/coordination/index.d.ts +7 -0
- package/dist/coordination/index.d.ts.map +1 -0
- package/dist/coordination/index.js +7 -0
- package/dist/coordination/index.js.map +1 -0
- package/dist/coordination/message-bus.d.ts +64 -0
- package/dist/coordination/message-bus.d.ts.map +1 -0
- package/dist/coordination/message-bus.js +148 -0
- package/dist/coordination/message-bus.js.map +1 -0
- package/dist/coordination/task-queue.d.ts +71 -0
- package/dist/coordination/task-queue.d.ts.map +1 -0
- package/dist/coordination/task-queue.js +140 -0
- package/dist/coordination/task-queue.js.map +1 -0
- package/dist/coordination/topology.d.ts +68 -0
- package/dist/coordination/topology.d.ts.map +1 -0
- package/dist/coordination/topology.js +195 -0
- package/dist/coordination/topology.js.map +1 -0
- package/dist/github/client.d.ts +56 -0
- package/dist/github/client.d.ts.map +1 -0
- package/dist/github/client.js +179 -0
- package/dist/github/client.js.map +1 -0
- package/dist/github/index.d.ts +5 -0
- package/dist/github/index.d.ts.map +1 -0
- package/dist/github/index.js +5 -0
- package/dist/github/index.js.map +1 -0
- package/dist/hooks/index.d.ts +29 -0
- package/dist/hooks/index.d.ts.map +1 -0
- package/dist/hooks/index.js +112 -0
- package/dist/hooks/index.js.map +1 -0
- package/dist/hooks/session.d.ts +16 -0
- package/dist/hooks/session.d.ts.map +1 -0
- package/dist/hooks/session.js +60 -0
- package/dist/hooks/session.js.map +1 -0
- package/dist/hooks/task.d.ts +16 -0
- package/dist/hooks/task.d.ts.map +1 -0
- package/dist/hooks/task.js +82 -0
- package/dist/hooks/task.js.map +1 -0
- package/dist/index.d.ts +16 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +32 -0
- package/dist/index.js.map +1 -0
- package/dist/mcp/index.d.ts +6 -0
- package/dist/mcp/index.d.ts.map +1 -0
- package/dist/mcp/index.js +6 -0
- package/dist/mcp/index.js.map +1 -0
- package/dist/mcp/server.d.ts +22 -0
- package/dist/mcp/server.d.ts.map +1 -0
- package/dist/mcp/server.js +128 -0
- package/dist/mcp/server.js.map +1 -0
- package/dist/mcp/tools/agent-tools.d.ts +174 -0
- package/dist/mcp/tools/agent-tools.d.ts.map +1 -0
- package/dist/mcp/tools/agent-tools.js +214 -0
- package/dist/mcp/tools/agent-tools.js.map +1 -0
- package/dist/mcp/tools/github-tools.d.ts +229 -0
- package/dist/mcp/tools/github-tools.d.ts.map +1 -0
- package/dist/mcp/tools/github-tools.js +286 -0
- package/dist/mcp/tools/github-tools.js.map +1 -0
- package/dist/mcp/tools/index.d.ts +10 -0
- package/dist/mcp/tools/index.d.ts.map +1 -0
- package/dist/mcp/tools/index.js +10 -0
- package/dist/mcp/tools/index.js.map +1 -0
- package/dist/mcp/tools/memory-tools.d.ts +190 -0
- package/dist/mcp/tools/memory-tools.d.ts.map +1 -0
- package/dist/mcp/tools/memory-tools.js +207 -0
- package/dist/mcp/tools/memory-tools.js.map +1 -0
- package/dist/mcp/tools/session-tools.d.ts +116 -0
- package/dist/mcp/tools/session-tools.d.ts.map +1 -0
- package/dist/mcp/tools/session-tools.js +151 -0
- package/dist/mcp/tools/session-tools.js.map +1 -0
- package/dist/mcp/tools/system-tools.d.ts +98 -0
- package/dist/mcp/tools/system-tools.d.ts.map +1 -0
- package/dist/mcp/tools/system-tools.js +165 -0
- package/dist/mcp/tools/system-tools.js.map +1 -0
- package/dist/mcp/tools/task-tools.d.ts +170 -0
- package/dist/mcp/tools/task-tools.d.ts.map +1 -0
- package/dist/mcp/tools/task-tools.js +188 -0
- package/dist/mcp/tools/task-tools.js.map +1 -0
- package/dist/memory/fts-search.d.ts +46 -0
- package/dist/memory/fts-search.d.ts.map +1 -0
- package/dist/memory/fts-search.js +136 -0
- package/dist/memory/fts-search.js.map +1 -0
- package/dist/memory/index.d.ts +77 -0
- package/dist/memory/index.d.ts.map +1 -0
- package/dist/memory/index.js +203 -0
- package/dist/memory/index.js.map +1 -0
- package/dist/memory/sqlite-store.d.ts +36 -0
- package/dist/memory/sqlite-store.d.ts.map +1 -0
- package/dist/memory/sqlite-store.js +371 -0
- package/dist/memory/sqlite-store.js.map +1 -0
- package/dist/memory/vector-search.d.ts +43 -0
- package/dist/memory/vector-search.d.ts.map +1 -0
- package/dist/memory/vector-search.js +179 -0
- package/dist/memory/vector-search.js.map +1 -0
- package/dist/plugins/index.d.ts +7 -0
- package/dist/plugins/index.d.ts.map +1 -0
- package/dist/plugins/index.js +7 -0
- package/dist/plugins/index.js.map +1 -0
- package/dist/plugins/loader.d.ts +33 -0
- package/dist/plugins/loader.d.ts.map +1 -0
- package/dist/plugins/loader.js +147 -0
- package/dist/plugins/loader.js.map +1 -0
- package/dist/plugins/registry.d.ts +48 -0
- package/dist/plugins/registry.d.ts.map +1 -0
- package/dist/plugins/registry.js +72 -0
- package/dist/plugins/registry.js.map +1 -0
- package/dist/plugins/types.d.ts +5 -0
- package/dist/plugins/types.d.ts.map +1 -0
- package/dist/plugins/types.js +5 -0
- package/dist/plugins/types.js.map +1 -0
- package/dist/providers/index.d.ts +49 -0
- package/dist/providers/index.d.ts.map +1 -0
- package/dist/providers/index.js +254 -0
- package/dist/providers/index.js.map +1 -0
- package/dist/types.d.ts +189 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +10 -0
- package/dist/types.js.map +1 -0
- package/dist/utils/config.d.ts +32 -0
- package/dist/utils/config.d.ts.map +1 -0
- package/dist/utils/config.js +194 -0
- package/dist/utils/config.js.map +1 -0
- package/dist/utils/embeddings.d.ts +23 -0
- package/dist/utils/embeddings.d.ts.map +1 -0
- package/dist/utils/embeddings.js +151 -0
- package/dist/utils/embeddings.js.map +1 -0
- package/dist/utils/index.d.ts +8 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +8 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/logger.d.ts +24 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +96 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/validation.d.ts +264 -0
- package/dist/utils/validation.d.ts.map +1 -0
- package/dist/utils/validation.js +144 -0
- package/dist/utils/validation.js.map +1 -0
- 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"}
|