family-ai-agent 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/.env.example +49 -0
- package/README.md +161 -0
- package/dist/cli/index.d.ts +3 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +336 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/config/index.d.ts +37 -0
- package/dist/config/index.d.ts.map +1 -0
- package/dist/config/index.js +68 -0
- package/dist/config/index.js.map +1 -0
- package/dist/config/models.d.ts +17 -0
- package/dist/config/models.d.ts.map +1 -0
- package/dist/config/models.js +128 -0
- package/dist/config/models.js.map +1 -0
- package/dist/core/agents/agent-factory.d.ts +31 -0
- package/dist/core/agents/agent-factory.d.ts.map +1 -0
- package/dist/core/agents/agent-factory.js +151 -0
- package/dist/core/agents/agent-factory.js.map +1 -0
- package/dist/core/agents/base-agent.d.ts +51 -0
- package/dist/core/agents/base-agent.d.ts.map +1 -0
- package/dist/core/agents/base-agent.js +245 -0
- package/dist/core/agents/base-agent.js.map +1 -0
- package/dist/core/agents/index.d.ts +8 -0
- package/dist/core/agents/index.d.ts.map +1 -0
- package/dist/core/agents/index.js +9 -0
- package/dist/core/agents/index.js.map +1 -0
- package/dist/core/agents/personalities/automation.d.ts +14 -0
- package/dist/core/agents/personalities/automation.d.ts.map +1 -0
- package/dist/core/agents/personalities/automation.js +146 -0
- package/dist/core/agents/personalities/automation.js.map +1 -0
- package/dist/core/agents/personalities/chat.d.ts +10 -0
- package/dist/core/agents/personalities/chat.d.ts.map +1 -0
- package/dist/core/agents/personalities/chat.js +132 -0
- package/dist/core/agents/personalities/chat.js.map +1 -0
- package/dist/core/agents/personalities/coding.d.ts +16 -0
- package/dist/core/agents/personalities/coding.d.ts.map +1 -0
- package/dist/core/agents/personalities/coding.js +166 -0
- package/dist/core/agents/personalities/coding.js.map +1 -0
- package/dist/core/agents/personalities/research.d.ts +13 -0
- package/dist/core/agents/personalities/research.d.ts.map +1 -0
- package/dist/core/agents/personalities/research.js +133 -0
- package/dist/core/agents/personalities/research.js.map +1 -0
- package/dist/core/agents/types.d.ts +102 -0
- package/dist/core/agents/types.d.ts.map +1 -0
- package/dist/core/agents/types.js +2 -0
- package/dist/core/agents/types.js.map +1 -0
- package/dist/core/orchestrator/graph.d.ts +118 -0
- package/dist/core/orchestrator/graph.d.ts.map +1 -0
- package/dist/core/orchestrator/graph.js +233 -0
- package/dist/core/orchestrator/graph.js.map +1 -0
- package/dist/database/client.d.ts +19 -0
- package/dist/database/client.d.ts.map +1 -0
- package/dist/database/client.js +95 -0
- package/dist/database/client.js.map +1 -0
- package/dist/index.d.ts +41 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +67 -0
- package/dist/index.js.map +1 -0
- package/dist/llm/openrouter-client.d.ts +45 -0
- package/dist/llm/openrouter-client.d.ts.map +1 -0
- package/dist/llm/openrouter-client.js +155 -0
- package/dist/llm/openrouter-client.js.map +1 -0
- package/dist/memory/conversation/index.d.ts +37 -0
- package/dist/memory/conversation/index.d.ts.map +1 -0
- package/dist/memory/conversation/index.js +196 -0
- package/dist/memory/conversation/index.js.map +1 -0
- package/dist/memory/index.d.ts +4 -0
- package/dist/memory/index.d.ts.map +1 -0
- package/dist/memory/index.js +5 -0
- package/dist/memory/index.js.map +1 -0
- package/dist/memory/knowledge-base/index.d.ts +51 -0
- package/dist/memory/knowledge-base/index.d.ts.map +1 -0
- package/dist/memory/knowledge-base/index.js +222 -0
- package/dist/memory/knowledge-base/index.js.map +1 -0
- package/dist/memory/longterm/vector-store.d.ts +44 -0
- package/dist/memory/longterm/vector-store.d.ts.map +1 -0
- package/dist/memory/longterm/vector-store.js +229 -0
- package/dist/memory/longterm/vector-store.js.map +1 -0
- package/dist/safety/audit-logger.d.ts +68 -0
- package/dist/safety/audit-logger.d.ts.map +1 -0
- package/dist/safety/audit-logger.js +215 -0
- package/dist/safety/audit-logger.js.map +1 -0
- package/dist/safety/guardrails/input-guardrail.d.ts +21 -0
- package/dist/safety/guardrails/input-guardrail.d.ts.map +1 -0
- package/dist/safety/guardrails/input-guardrail.js +145 -0
- package/dist/safety/guardrails/input-guardrail.js.map +1 -0
- package/dist/safety/guardrails/output-guardrail.d.ts +18 -0
- package/dist/safety/guardrails/output-guardrail.d.ts.map +1 -0
- package/dist/safety/guardrails/output-guardrail.js +125 -0
- package/dist/safety/guardrails/output-guardrail.js.map +1 -0
- package/dist/safety/index.d.ts +4 -0
- package/dist/safety/index.d.ts.map +1 -0
- package/dist/safety/index.js +5 -0
- package/dist/safety/index.js.map +1 -0
- package/dist/utils/errors.d.ts +36 -0
- package/dist/utils/errors.d.ts.map +1 -0
- package/dist/utils/errors.js +94 -0
- package/dist/utils/errors.js.map +1 -0
- package/dist/utils/logger.d.ts +8 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +47 -0
- package/dist/utils/logger.js.map +1 -0
- package/docker/init-db.sql +149 -0
- package/docker/sandbox/Dockerfile.sandbox +29 -0
- package/docker-compose.yml +61 -0
- package/package.json +80 -0
- package/src/cli/index.ts +392 -0
- package/src/config/index.ts +85 -0
- package/src/config/models.ts +156 -0
- package/src/core/agents/agent-factory.ts +192 -0
- package/src/core/agents/base-agent.ts +333 -0
- package/src/core/agents/index.ts +27 -0
- package/src/core/agents/personalities/automation.ts +202 -0
- package/src/core/agents/personalities/chat.ts +159 -0
- package/src/core/agents/personalities/coding.ts +227 -0
- package/src/core/agents/personalities/research.ts +177 -0
- package/src/core/agents/types.ts +124 -0
- package/src/core/orchestrator/graph.ts +305 -0
- package/src/database/client.ts +109 -0
- package/src/index.ts +104 -0
- package/src/llm/openrouter-client.ts +218 -0
- package/src/memory/conversation/index.ts +313 -0
- package/src/memory/index.ts +23 -0
- package/src/memory/knowledge-base/index.ts +357 -0
- package/src/memory/longterm/vector-store.ts +364 -0
- package/src/safety/audit-logger.ts +357 -0
- package/src/safety/guardrails/input-guardrail.ts +191 -0
- package/src/safety/guardrails/output-guardrail.ts +160 -0
- package/src/safety/index.ts +21 -0
- package/src/utils/errors.ts +120 -0
- package/src/utils/logger.ts +74 -0
- package/tsconfig.json +37 -0
|
@@ -0,0 +1,222 @@
|
|
|
1
|
+
import { RecursiveCharacterTextSplitter } from '@langchain/textsplitters';
|
|
2
|
+
import { query, transaction } from '../../database/client.js';
|
|
3
|
+
import { getOpenRouterClient } from '../../llm/openrouter-client.js';
|
|
4
|
+
import { createLogger, logMemoryOperation } from '../../utils/logger.js';
|
|
5
|
+
import { MemoryError } from '../../utils/errors.js';
|
|
6
|
+
const logger = createLogger('KnowledgeBase');
|
|
7
|
+
export class KnowledgeBase {
|
|
8
|
+
client = getOpenRouterClient();
|
|
9
|
+
textSplitter = new RecursiveCharacterTextSplitter({
|
|
10
|
+
chunkSize: 1000,
|
|
11
|
+
chunkOverlap: 200,
|
|
12
|
+
separators: ['\n\n', '\n', '. ', ' ', ''],
|
|
13
|
+
});
|
|
14
|
+
// Add a document to the knowledge base
|
|
15
|
+
async addDocument(content, filename, options = {}) {
|
|
16
|
+
try {
|
|
17
|
+
// Split content into chunks
|
|
18
|
+
const chunks = await this.textSplitter.splitText(content);
|
|
19
|
+
logger.debug('Document split into chunks', {
|
|
20
|
+
filename,
|
|
21
|
+
chunkCount: chunks.length,
|
|
22
|
+
});
|
|
23
|
+
// Generate embeddings for all chunks
|
|
24
|
+
const embeddings = await this.client.embed(chunks);
|
|
25
|
+
// Store document and chunks in transaction
|
|
26
|
+
const documentId = await transaction(async (client) => {
|
|
27
|
+
// Insert document
|
|
28
|
+
const docResult = await client.query(`INSERT INTO documents (user_id, filename, file_type, file_size, content, metadata)
|
|
29
|
+
VALUES ($1, $2, $3, $4, $5, $6)
|
|
30
|
+
RETURNING id`, [
|
|
31
|
+
options.userId ?? null,
|
|
32
|
+
filename,
|
|
33
|
+
options.fileType ?? null,
|
|
34
|
+
options.fileSize ?? null,
|
|
35
|
+
content,
|
|
36
|
+
JSON.stringify(options.metadata ?? {}),
|
|
37
|
+
]);
|
|
38
|
+
const docId = docResult.rows[0]?.id;
|
|
39
|
+
if (!docId) {
|
|
40
|
+
throw new MemoryError('Failed to insert document');
|
|
41
|
+
}
|
|
42
|
+
// Insert chunks with embeddings
|
|
43
|
+
for (let i = 0; i < chunks.length; i++) {
|
|
44
|
+
const chunk = chunks[i];
|
|
45
|
+
const embedding = embeddings[i];
|
|
46
|
+
await client.query(`INSERT INTO document_chunks (document_id, chunk_index, content, embedding, metadata)
|
|
47
|
+
VALUES ($1, $2, $3, $4, $5)`, [
|
|
48
|
+
docId,
|
|
49
|
+
i,
|
|
50
|
+
chunk,
|
|
51
|
+
`[${embedding.join(',')}]`,
|
|
52
|
+
JSON.stringify({ chunkIndex: i, totalChunks: chunks.length }),
|
|
53
|
+
]);
|
|
54
|
+
}
|
|
55
|
+
return docId;
|
|
56
|
+
});
|
|
57
|
+
logMemoryOperation('write', 'knowledge_base', {
|
|
58
|
+
documentId,
|
|
59
|
+
filename,
|
|
60
|
+
chunkCount: chunks.length,
|
|
61
|
+
});
|
|
62
|
+
return documentId;
|
|
63
|
+
}
|
|
64
|
+
catch (error) {
|
|
65
|
+
logger.error('Failed to add document', { error, filename });
|
|
66
|
+
throw new MemoryError(`Failed to add document: ${error instanceof Error ? error.message : 'Unknown error'}`);
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
// Search the knowledge base
|
|
70
|
+
async search(queryText, options = {}) {
|
|
71
|
+
const { userId, limit = 5, minSimilarity = 0.7 } = options;
|
|
72
|
+
try {
|
|
73
|
+
// Generate query embedding
|
|
74
|
+
const queryEmbedding = await this.client.embedQuery(queryText);
|
|
75
|
+
// Build query
|
|
76
|
+
let sql = `
|
|
77
|
+
SELECT
|
|
78
|
+
dc.id as chunk_id,
|
|
79
|
+
dc.document_id,
|
|
80
|
+
dc.content,
|
|
81
|
+
dc.metadata as chunk_metadata,
|
|
82
|
+
d.filename,
|
|
83
|
+
d.metadata as doc_metadata,
|
|
84
|
+
1 - (dc.embedding <=> $1::vector) as similarity
|
|
85
|
+
FROM document_chunks dc
|
|
86
|
+
JOIN documents d ON d.id = dc.document_id
|
|
87
|
+
WHERE 1 - (dc.embedding <=> $1::vector) >= $2
|
|
88
|
+
`;
|
|
89
|
+
const params = [`[${queryEmbedding.join(',')}]`, minSimilarity];
|
|
90
|
+
let paramIndex = 3;
|
|
91
|
+
if (userId) {
|
|
92
|
+
sql += ` AND d.user_id = $${paramIndex}`;
|
|
93
|
+
params.push(userId);
|
|
94
|
+
paramIndex++;
|
|
95
|
+
}
|
|
96
|
+
sql += ` ORDER BY similarity DESC LIMIT $${paramIndex}`;
|
|
97
|
+
params.push(limit);
|
|
98
|
+
const result = await query(sql, params);
|
|
99
|
+
const searchResults = result.rows.map((row) => ({
|
|
100
|
+
chunkId: row.chunk_id,
|
|
101
|
+
documentId: row.document_id,
|
|
102
|
+
content: row.content,
|
|
103
|
+
similarity: row.similarity,
|
|
104
|
+
metadata: { ...row.doc_metadata, ...row.chunk_metadata },
|
|
105
|
+
filename: row.filename,
|
|
106
|
+
}));
|
|
107
|
+
logMemoryOperation('search', 'knowledge_base', {
|
|
108
|
+
queryLength: queryText.length,
|
|
109
|
+
resultsCount: searchResults.length,
|
|
110
|
+
});
|
|
111
|
+
return searchResults;
|
|
112
|
+
}
|
|
113
|
+
catch (error) {
|
|
114
|
+
logger.error('Failed to search knowledge base', { error });
|
|
115
|
+
throw new MemoryError(`Failed to search knowledge base: ${error instanceof Error ? error.message : 'Unknown error'}`);
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
// Get document by ID
|
|
119
|
+
async getDocument(id) {
|
|
120
|
+
try {
|
|
121
|
+
const result = await query(`SELECT id, user_id, filename, file_type, file_size, content, metadata, created_at
|
|
122
|
+
FROM documents WHERE id = $1`, [id]);
|
|
123
|
+
if (result.rows.length === 0) {
|
|
124
|
+
return null;
|
|
125
|
+
}
|
|
126
|
+
const row = result.rows[0];
|
|
127
|
+
return {
|
|
128
|
+
id: row.id,
|
|
129
|
+
userId: row.user_id ?? undefined,
|
|
130
|
+
filename: row.filename,
|
|
131
|
+
fileType: row.file_type ?? undefined,
|
|
132
|
+
fileSize: row.file_size ?? undefined,
|
|
133
|
+
content: row.content ?? undefined,
|
|
134
|
+
metadata: row.metadata,
|
|
135
|
+
createdAt: row.created_at,
|
|
136
|
+
};
|
|
137
|
+
}
|
|
138
|
+
catch (error) {
|
|
139
|
+
logger.error('Failed to get document', { error, id });
|
|
140
|
+
throw new MemoryError(`Failed to get document: ${error instanceof Error ? error.message : 'Unknown error'}`);
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
// List documents for a user
|
|
144
|
+
async listDocuments(userId, options = {}) {
|
|
145
|
+
const { limit = 20, offset = 0 } = options;
|
|
146
|
+
try {
|
|
147
|
+
const result = await query(`SELECT id, user_id, filename, file_type, file_size, metadata, created_at
|
|
148
|
+
FROM documents
|
|
149
|
+
WHERE user_id = $1
|
|
150
|
+
ORDER BY created_at DESC
|
|
151
|
+
LIMIT $2 OFFSET $3`, [userId, limit, offset]);
|
|
152
|
+
return result.rows.map((row) => ({
|
|
153
|
+
id: row.id,
|
|
154
|
+
userId: row.user_id ?? undefined,
|
|
155
|
+
filename: row.filename,
|
|
156
|
+
fileType: row.file_type ?? undefined,
|
|
157
|
+
fileSize: row.file_size ?? undefined,
|
|
158
|
+
metadata: row.metadata,
|
|
159
|
+
createdAt: row.created_at,
|
|
160
|
+
}));
|
|
161
|
+
}
|
|
162
|
+
catch (error) {
|
|
163
|
+
logger.error('Failed to list documents', { error });
|
|
164
|
+
throw new MemoryError(`Failed to list documents: ${error instanceof Error ? error.message : 'Unknown error'}`);
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
// Delete document and its chunks
|
|
168
|
+
async deleteDocument(id) {
|
|
169
|
+
try {
|
|
170
|
+
await query('DELETE FROM documents WHERE id = $1', [id]);
|
|
171
|
+
logMemoryOperation('write', 'knowledge_base', {
|
|
172
|
+
documentId: id,
|
|
173
|
+
action: 'delete',
|
|
174
|
+
});
|
|
175
|
+
}
|
|
176
|
+
catch (error) {
|
|
177
|
+
logger.error('Failed to delete document', { error, id });
|
|
178
|
+
throw new MemoryError(`Failed to delete document: ${error instanceof Error ? error.message : 'Unknown error'}`);
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
// Get chunks for a document
|
|
182
|
+
async getDocumentChunks(documentId) {
|
|
183
|
+
try {
|
|
184
|
+
const result = await query(`SELECT id, document_id, chunk_index, content, metadata
|
|
185
|
+
FROM document_chunks
|
|
186
|
+
WHERE document_id = $1
|
|
187
|
+
ORDER BY chunk_index ASC`, [documentId]);
|
|
188
|
+
return result.rows.map((row) => ({
|
|
189
|
+
id: row.id,
|
|
190
|
+
documentId: row.document_id,
|
|
191
|
+
chunkIndex: row.chunk_index,
|
|
192
|
+
content: row.content,
|
|
193
|
+
metadata: row.metadata,
|
|
194
|
+
}));
|
|
195
|
+
}
|
|
196
|
+
catch (error) {
|
|
197
|
+
logger.error('Failed to get document chunks', { error, documentId });
|
|
198
|
+
throw new MemoryError(`Failed to get document chunks: ${error instanceof Error ? error.message : 'Unknown error'}`);
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
// Get document count for user
|
|
202
|
+
async getDocumentCount(userId) {
|
|
203
|
+
try {
|
|
204
|
+
const result = await query('SELECT COUNT(*) as count FROM documents WHERE user_id = $1', [userId]);
|
|
205
|
+
return parseInt(result.rows[0]?.count ?? '0', 10);
|
|
206
|
+
}
|
|
207
|
+
catch (error) {
|
|
208
|
+
logger.error('Failed to get document count', { error });
|
|
209
|
+
throw new MemoryError(`Failed to get document count: ${error instanceof Error ? error.message : 'Unknown error'}`);
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
// Singleton instance
|
|
214
|
+
let kbInstance = null;
|
|
215
|
+
export function getKnowledgeBase() {
|
|
216
|
+
if (!kbInstance) {
|
|
217
|
+
kbInstance = new KnowledgeBase();
|
|
218
|
+
}
|
|
219
|
+
return kbInstance;
|
|
220
|
+
}
|
|
221
|
+
export default KnowledgeBase;
|
|
222
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/memory/knowledge-base/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import type { RetrievedMemory } from '../../core/agents/types.js';
|
|
2
|
+
export type MemoryType = 'semantic' | 'episodic' | 'procedural';
|
|
3
|
+
export interface MemoryEntry {
|
|
4
|
+
id: string;
|
|
5
|
+
userId?: string;
|
|
6
|
+
memoryType: MemoryType;
|
|
7
|
+
content: string;
|
|
8
|
+
importance: number;
|
|
9
|
+
metadata?: Record<string, unknown>;
|
|
10
|
+
createdAt: Date;
|
|
11
|
+
updatedAt: Date;
|
|
12
|
+
}
|
|
13
|
+
export interface SearchOptions {
|
|
14
|
+
userId?: string;
|
|
15
|
+
memoryType?: MemoryType;
|
|
16
|
+
limit?: number;
|
|
17
|
+
minSimilarity?: number;
|
|
18
|
+
}
|
|
19
|
+
export declare class VectorStore {
|
|
20
|
+
private client;
|
|
21
|
+
store(content: string, memoryType: MemoryType, options?: {
|
|
22
|
+
userId?: string;
|
|
23
|
+
importance?: number;
|
|
24
|
+
metadata?: Record<string, unknown>;
|
|
25
|
+
}): Promise<string>;
|
|
26
|
+
search(queryText: string, options?: SearchOptions): Promise<RetrievedMemory[]>;
|
|
27
|
+
get(id: string): Promise<MemoryEntry | null>;
|
|
28
|
+
update(id: string, content: string, options?: {
|
|
29
|
+
importance?: number;
|
|
30
|
+
metadata?: Record<string, unknown>;
|
|
31
|
+
}): Promise<void>;
|
|
32
|
+
delete(id: string): Promise<void>;
|
|
33
|
+
bulkStore(entries: Array<{
|
|
34
|
+
content: string;
|
|
35
|
+
memoryType: MemoryType;
|
|
36
|
+
userId?: string;
|
|
37
|
+
importance?: number;
|
|
38
|
+
metadata?: Record<string, unknown>;
|
|
39
|
+
}>): Promise<string[]>;
|
|
40
|
+
getRecent(userId: string, limit?: number): Promise<MemoryEntry[]>;
|
|
41
|
+
}
|
|
42
|
+
export declare function getVectorStore(): VectorStore;
|
|
43
|
+
export default VectorStore;
|
|
44
|
+
//# sourceMappingURL=vector-store.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vector-store.d.ts","sourceRoot":"","sources":["../../../src/memory/longterm/vector-store.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAIlE,MAAM,MAAM,UAAU,GAAG,UAAU,GAAG,UAAU,GAAG,YAAY,CAAC;AAEhE,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,UAAU,CAAC;IACvB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACnC,SAAS,EAAE,IAAI,CAAC;IAChB,SAAS,EAAE,IAAI,CAAC;CACjB;AAED,MAAM,WAAW,aAAa;IAC5B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,qBAAa,WAAW;IACtB,OAAO,CAAC,MAAM,CAAyB;IAGjC,KAAK,CACT,OAAO,EAAE,MAAM,EACf,UAAU,EAAE,UAAU,EACtB,OAAO,GAAE;QACP,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;KAC/B,GACL,OAAO,CAAC,MAAM,CAAC;IA0CZ,MAAM,CACV,SAAS,EAAE,MAAM,EACjB,OAAO,GAAE,aAAkB,GAC1B,OAAO,CAAC,eAAe,EAAE,CAAC;IAmFvB,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC;IAyC5C,MAAM,CACV,EAAE,EAAE,MAAM,EACV,OAAO,EAAE,MAAM,EACf,OAAO,GAAE;QAAE,UAAU,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAAO,GACxE,OAAO,CAAC,IAAI,CAAC;IA6BV,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAajC,SAAS,CACb,OAAO,EAAE,KAAK,CAAC;QACb,OAAO,EAAE,MAAM,CAAC;QAChB,UAAU,EAAE,UAAU,CAAC;QACvB,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;KACpC,CAAC,GACD,OAAO,CAAC,MAAM,EAAE,CAAC;IAmDd,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,GAAE,MAAW,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;CAqC5E;AAKD,wBAAgB,cAAc,IAAI,WAAW,CAK5C;AAED,eAAe,WAAW,CAAC"}
|
|
@@ -0,0 +1,229 @@
|
|
|
1
|
+
import { query, transaction } from '../../database/client.js';
|
|
2
|
+
import { getOpenRouterClient } from '../../llm/openrouter-client.js';
|
|
3
|
+
import { createLogger, logMemoryOperation } from '../../utils/logger.js';
|
|
4
|
+
import { MemoryError } from '../../utils/errors.js';
|
|
5
|
+
const logger = createLogger('VectorStore');
|
|
6
|
+
export class VectorStore {
|
|
7
|
+
client = getOpenRouterClient();
|
|
8
|
+
// Store a memory with embedding
|
|
9
|
+
async store(content, memoryType, options = {}) {
|
|
10
|
+
try {
|
|
11
|
+
// Generate embedding
|
|
12
|
+
const embedding = await this.client.embedQuery(content);
|
|
13
|
+
// Insert into database
|
|
14
|
+
const result = await query(`INSERT INTO long_term_memories
|
|
15
|
+
(user_id, memory_type, content, embedding, importance, metadata)
|
|
16
|
+
VALUES ($1, $2, $3, $4, $5, $6)
|
|
17
|
+
RETURNING id`, [
|
|
18
|
+
options.userId ?? null,
|
|
19
|
+
memoryType,
|
|
20
|
+
content,
|
|
21
|
+
`[${embedding.join(',')}]`,
|
|
22
|
+
options.importance ?? 0.5,
|
|
23
|
+
JSON.stringify(options.metadata ?? {}),
|
|
24
|
+
]);
|
|
25
|
+
const memoryId = result.rows[0]?.id;
|
|
26
|
+
if (!memoryId) {
|
|
27
|
+
throw new MemoryError('Failed to store memory');
|
|
28
|
+
}
|
|
29
|
+
logMemoryOperation('write', 'long_term', {
|
|
30
|
+
memoryId,
|
|
31
|
+
memoryType,
|
|
32
|
+
contentLength: content.length,
|
|
33
|
+
});
|
|
34
|
+
return memoryId;
|
|
35
|
+
}
|
|
36
|
+
catch (error) {
|
|
37
|
+
logger.error('Failed to store memory', { error });
|
|
38
|
+
throw new MemoryError(`Failed to store memory: ${error instanceof Error ? error.message : 'Unknown error'}`);
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
// Search for similar memories
|
|
42
|
+
async search(queryText, options = {}) {
|
|
43
|
+
const { userId, memoryType, limit = 5, minSimilarity = 0.7, } = options;
|
|
44
|
+
try {
|
|
45
|
+
// Generate query embedding
|
|
46
|
+
const queryEmbedding = await this.client.embedQuery(queryText);
|
|
47
|
+
// Build the query with filters
|
|
48
|
+
let sql = `
|
|
49
|
+
SELECT
|
|
50
|
+
id,
|
|
51
|
+
memory_type,
|
|
52
|
+
content,
|
|
53
|
+
metadata,
|
|
54
|
+
1 - (embedding <=> $1::vector) as similarity
|
|
55
|
+
FROM long_term_memories
|
|
56
|
+
WHERE 1 - (embedding <=> $1::vector) >= $2
|
|
57
|
+
`;
|
|
58
|
+
const params = [`[${queryEmbedding.join(',')}]`, minSimilarity];
|
|
59
|
+
let paramIndex = 3;
|
|
60
|
+
if (userId) {
|
|
61
|
+
sql += ` AND user_id = $${paramIndex}`;
|
|
62
|
+
params.push(userId);
|
|
63
|
+
paramIndex++;
|
|
64
|
+
}
|
|
65
|
+
if (memoryType) {
|
|
66
|
+
sql += ` AND memory_type = $${paramIndex}`;
|
|
67
|
+
params.push(memoryType);
|
|
68
|
+
paramIndex++;
|
|
69
|
+
}
|
|
70
|
+
sql += ` ORDER BY similarity DESC LIMIT $${paramIndex}`;
|
|
71
|
+
params.push(limit);
|
|
72
|
+
const result = await query(sql, params);
|
|
73
|
+
// Update access count for retrieved memories
|
|
74
|
+
if (result.rows.length > 0) {
|
|
75
|
+
const ids = result.rows.map((r) => r.id);
|
|
76
|
+
await query(`UPDATE long_term_memories
|
|
77
|
+
SET access_count = access_count + 1, last_accessed = NOW()
|
|
78
|
+
WHERE id = ANY($1)`, [ids]);
|
|
79
|
+
}
|
|
80
|
+
const memories = result.rows.map((row) => ({
|
|
81
|
+
id: row.id,
|
|
82
|
+
type: row.memory_type,
|
|
83
|
+
content: row.content,
|
|
84
|
+
relevanceScore: row.similarity,
|
|
85
|
+
metadata: row.metadata,
|
|
86
|
+
}));
|
|
87
|
+
logMemoryOperation('search', 'long_term', {
|
|
88
|
+
queryLength: queryText.length,
|
|
89
|
+
resultsCount: memories.length,
|
|
90
|
+
});
|
|
91
|
+
return memories;
|
|
92
|
+
}
|
|
93
|
+
catch (error) {
|
|
94
|
+
logger.error('Failed to search memories', { error });
|
|
95
|
+
throw new MemoryError(`Failed to search memories: ${error instanceof Error ? error.message : 'Unknown error'}`);
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
// Get memory by ID
|
|
99
|
+
async get(id) {
|
|
100
|
+
try {
|
|
101
|
+
const result = await query(`SELECT id, user_id, memory_type, content, importance, metadata, created_at, updated_at
|
|
102
|
+
FROM long_term_memories WHERE id = $1`, [id]);
|
|
103
|
+
if (result.rows.length === 0) {
|
|
104
|
+
return null;
|
|
105
|
+
}
|
|
106
|
+
const row = result.rows[0];
|
|
107
|
+
return {
|
|
108
|
+
id: row.id,
|
|
109
|
+
userId: row.user_id ?? undefined,
|
|
110
|
+
memoryType: row.memory_type,
|
|
111
|
+
content: row.content,
|
|
112
|
+
importance: row.importance,
|
|
113
|
+
metadata: row.metadata,
|
|
114
|
+
createdAt: row.created_at,
|
|
115
|
+
updatedAt: row.updated_at,
|
|
116
|
+
};
|
|
117
|
+
}
|
|
118
|
+
catch (error) {
|
|
119
|
+
logger.error('Failed to get memory', { error, id });
|
|
120
|
+
throw new MemoryError(`Failed to get memory: ${error instanceof Error ? error.message : 'Unknown error'}`);
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
// Update memory content
|
|
124
|
+
async update(id, content, options = {}) {
|
|
125
|
+
try {
|
|
126
|
+
// Re-generate embedding for new content
|
|
127
|
+
const embedding = await this.client.embedQuery(content);
|
|
128
|
+
await query(`UPDATE long_term_memories
|
|
129
|
+
SET content = $2, embedding = $3, importance = COALESCE($4, importance),
|
|
130
|
+
metadata = COALESCE($5, metadata), updated_at = NOW()
|
|
131
|
+
WHERE id = $1`, [
|
|
132
|
+
id,
|
|
133
|
+
content,
|
|
134
|
+
`[${embedding.join(',')}]`,
|
|
135
|
+
options.importance ?? null,
|
|
136
|
+
options.metadata ? JSON.stringify(options.metadata) : null,
|
|
137
|
+
]);
|
|
138
|
+
logMemoryOperation('write', 'long_term', { memoryId: id, action: 'update' });
|
|
139
|
+
}
|
|
140
|
+
catch (error) {
|
|
141
|
+
logger.error('Failed to update memory', { error, id });
|
|
142
|
+
throw new MemoryError(`Failed to update memory: ${error instanceof Error ? error.message : 'Unknown error'}`);
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
// Delete memory
|
|
146
|
+
async delete(id) {
|
|
147
|
+
try {
|
|
148
|
+
await query('DELETE FROM long_term_memories WHERE id = $1', [id]);
|
|
149
|
+
logMemoryOperation('write', 'long_term', { memoryId: id, action: 'delete' });
|
|
150
|
+
}
|
|
151
|
+
catch (error) {
|
|
152
|
+
logger.error('Failed to delete memory', { error, id });
|
|
153
|
+
throw new MemoryError(`Failed to delete memory: ${error instanceof Error ? error.message : 'Unknown error'}`);
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
// Bulk store memories
|
|
157
|
+
async bulkStore(entries) {
|
|
158
|
+
try {
|
|
159
|
+
// Generate embeddings for all entries
|
|
160
|
+
const embeddings = await this.client.embed(entries.map((e) => e.content));
|
|
161
|
+
// Use transaction for bulk insert
|
|
162
|
+
const ids = await transaction(async (client) => {
|
|
163
|
+
const results = [];
|
|
164
|
+
for (let i = 0; i < entries.length; i++) {
|
|
165
|
+
const entry = entries[i];
|
|
166
|
+
const embedding = embeddings[i];
|
|
167
|
+
const result = await client.query(`INSERT INTO long_term_memories
|
|
168
|
+
(user_id, memory_type, content, embedding, importance, metadata)
|
|
169
|
+
VALUES ($1, $2, $3, $4, $5, $6)
|
|
170
|
+
RETURNING id`, [
|
|
171
|
+
entry.userId ?? null,
|
|
172
|
+
entry.memoryType,
|
|
173
|
+
entry.content,
|
|
174
|
+
`[${embedding.join(',')}]`,
|
|
175
|
+
entry.importance ?? 0.5,
|
|
176
|
+
JSON.stringify(entry.metadata ?? {}),
|
|
177
|
+
]);
|
|
178
|
+
if (result.rows[0]) {
|
|
179
|
+
results.push(result.rows[0].id);
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
return results;
|
|
183
|
+
});
|
|
184
|
+
logMemoryOperation('write', 'long_term', {
|
|
185
|
+
action: 'bulk_store',
|
|
186
|
+
count: ids.length,
|
|
187
|
+
});
|
|
188
|
+
return ids;
|
|
189
|
+
}
|
|
190
|
+
catch (error) {
|
|
191
|
+
logger.error('Failed to bulk store memories', { error });
|
|
192
|
+
throw new MemoryError(`Failed to bulk store memories: ${error instanceof Error ? error.message : 'Unknown error'}`);
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
// Get recent memories for a user
|
|
196
|
+
async getRecent(userId, limit = 10) {
|
|
197
|
+
try {
|
|
198
|
+
const result = await query(`SELECT id, user_id, memory_type, content, importance, metadata, created_at, updated_at
|
|
199
|
+
FROM long_term_memories
|
|
200
|
+
WHERE user_id = $1
|
|
201
|
+
ORDER BY created_at DESC
|
|
202
|
+
LIMIT $2`, [userId, limit]);
|
|
203
|
+
return result.rows.map((row) => ({
|
|
204
|
+
id: row.id,
|
|
205
|
+
userId: row.user_id ?? undefined,
|
|
206
|
+
memoryType: row.memory_type,
|
|
207
|
+
content: row.content,
|
|
208
|
+
importance: row.importance,
|
|
209
|
+
metadata: row.metadata,
|
|
210
|
+
createdAt: row.created_at,
|
|
211
|
+
updatedAt: row.updated_at,
|
|
212
|
+
}));
|
|
213
|
+
}
|
|
214
|
+
catch (error) {
|
|
215
|
+
logger.error('Failed to get recent memories', { error });
|
|
216
|
+
throw new MemoryError(`Failed to get recent memories: ${error instanceof Error ? error.message : 'Unknown error'}`);
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
// Singleton instance
|
|
221
|
+
let storeInstance = null;
|
|
222
|
+
export function getVectorStore() {
|
|
223
|
+
if (!storeInstance) {
|
|
224
|
+
storeInstance = new VectorStore();
|
|
225
|
+
}
|
|
226
|
+
return storeInstance;
|
|
227
|
+
}
|
|
228
|
+
export default VectorStore;
|
|
229
|
+
//# sourceMappingURL=vector-store.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vector-store.js","sourceRoot":"","sources":["../../../src/memory/longterm/vector-store.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
export interface AuditLogEntry {
|
|
2
|
+
id: string;
|
|
3
|
+
userId?: string;
|
|
4
|
+
agentId?: string;
|
|
5
|
+
actionType: string;
|
|
6
|
+
actionDetails: Record<string, unknown>;
|
|
7
|
+
inputHash?: string;
|
|
8
|
+
outputHash?: string;
|
|
9
|
+
status: 'success' | 'failure' | 'blocked';
|
|
10
|
+
errorMessage?: string;
|
|
11
|
+
executionTimeMs?: number;
|
|
12
|
+
createdAt: Date;
|
|
13
|
+
}
|
|
14
|
+
export type AuditActionType = 'user_input' | 'agent_execution' | 'tool_call' | 'memory_access' | 'document_upload' | 'safety_block' | 'error' | 'handoff' | 'api_request';
|
|
15
|
+
export declare class AuditLogger {
|
|
16
|
+
private enabled;
|
|
17
|
+
constructor();
|
|
18
|
+
private hashContent;
|
|
19
|
+
log(actionType: AuditActionType, details: Record<string, unknown>, options?: {
|
|
20
|
+
userId?: string;
|
|
21
|
+
agentId?: string;
|
|
22
|
+
input?: string;
|
|
23
|
+
output?: string;
|
|
24
|
+
status?: 'success' | 'failure' | 'blocked';
|
|
25
|
+
error?: string;
|
|
26
|
+
executionTimeMs?: number;
|
|
27
|
+
}): Promise<string | null>;
|
|
28
|
+
logUserInput(input: string, options?: {
|
|
29
|
+
userId?: string;
|
|
30
|
+
metadata?: Record<string, unknown>;
|
|
31
|
+
}): Promise<string | null>;
|
|
32
|
+
logAgentExecution(agentId: string, input: string, output: string, executionTimeMs: number, options?: {
|
|
33
|
+
userId?: string;
|
|
34
|
+
success?: boolean;
|
|
35
|
+
error?: string;
|
|
36
|
+
}): Promise<string | null>;
|
|
37
|
+
logToolCall(toolName: string, input: unknown, output: unknown, options?: {
|
|
38
|
+
agentId?: string;
|
|
39
|
+
userId?: string;
|
|
40
|
+
success?: boolean;
|
|
41
|
+
error?: string;
|
|
42
|
+
executionTimeMs?: number;
|
|
43
|
+
}): Promise<string | null>;
|
|
44
|
+
logSafetyBlock(reason: string, details: Record<string, unknown>, options?: {
|
|
45
|
+
userId?: string;
|
|
46
|
+
input?: string;
|
|
47
|
+
}): Promise<string | null>;
|
|
48
|
+
query(filters?: {
|
|
49
|
+
userId?: string;
|
|
50
|
+
agentId?: string;
|
|
51
|
+
actionType?: AuditActionType;
|
|
52
|
+
status?: 'success' | 'failure' | 'blocked';
|
|
53
|
+
startDate?: Date;
|
|
54
|
+
endDate?: Date;
|
|
55
|
+
}, options?: {
|
|
56
|
+
limit?: number;
|
|
57
|
+
offset?: number;
|
|
58
|
+
}): Promise<AuditLogEntry[]>;
|
|
59
|
+
getStats(userId?: string, days?: number): Promise<{
|
|
60
|
+
totalRequests: number;
|
|
61
|
+
successRate: number;
|
|
62
|
+
avgExecutionTime: number;
|
|
63
|
+
blockedCount: number;
|
|
64
|
+
}>;
|
|
65
|
+
}
|
|
66
|
+
export declare function getAuditLogger(): AuditLogger;
|
|
67
|
+
export default AuditLogger;
|
|
68
|
+
//# sourceMappingURL=audit-logger.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"audit-logger.d.ts","sourceRoot":"","sources":["../../src/safety/audit-logger.ts"],"names":[],"mappings":"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"}
|