@n8n/agents 0.1.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/LICENSE.md +88 -0
- package/dist/build.tsbuildinfo +1 -0
- package/dist/evals/categorization.d.ts +2 -0
- package/dist/evals/categorization.js +23 -0
- package/dist/evals/categorization.js.map +1 -0
- package/dist/evals/contains-keywords.d.ts +2 -0
- package/dist/evals/contains-keywords.js +29 -0
- package/dist/evals/contains-keywords.js.map +1 -0
- package/dist/evals/correctness.d.ts +2 -0
- package/dist/evals/correctness.js +28 -0
- package/dist/evals/correctness.js.map +1 -0
- package/dist/evals/helpfulness.d.ts +2 -0
- package/dist/evals/helpfulness.js +26 -0
- package/dist/evals/helpfulness.js.map +1 -0
- package/dist/evals/index.d.ts +7 -0
- package/dist/evals/index.js +18 -0
- package/dist/evals/index.js.map +1 -0
- package/dist/evals/json-validity.d.ts +2 -0
- package/dist/evals/json-validity.js +21 -0
- package/dist/evals/json-validity.js.map +1 -0
- package/dist/evals/parse-judge-response.d.ts +2 -0
- package/dist/evals/parse-judge-response.js +25 -0
- package/dist/evals/parse-judge-response.js.map +1 -0
- package/dist/evals/string-similarity.d.ts +2 -0
- package/dist/evals/string-similarity.js +42 -0
- package/dist/evals/string-similarity.js.map +1 -0
- package/dist/evals/tool-call-accuracy.d.ts +2 -0
- package/dist/evals/tool-call-accuracy.js +29 -0
- package/dist/evals/tool-call-accuracy.js.map +1 -0
- package/dist/index.d.ts +34 -0
- package/dist/index.js +85 -0
- package/dist/index.js.map +1 -0
- package/dist/integrations/langsmith.d.ts +13 -0
- package/dist/integrations/langsmith.js +77 -0
- package/dist/integrations/langsmith.js.map +1 -0
- package/dist/runtime/agent-runtime.d.ts +80 -0
- package/dist/runtime/agent-runtime.js +1246 -0
- package/dist/runtime/agent-runtime.js.map +1 -0
- package/dist/runtime/event-bus.d.ts +14 -0
- package/dist/runtime/event-bus.js +53 -0
- package/dist/runtime/event-bus.js.map +1 -0
- package/dist/runtime/logger.d.ts +22 -0
- package/dist/runtime/logger.js +40 -0
- package/dist/runtime/logger.js.map +1 -0
- package/dist/runtime/mcp-connection.d.ts +23 -0
- package/dist/runtime/mcp-connection.js +135 -0
- package/dist/runtime/mcp-connection.js.map +1 -0
- package/dist/runtime/mcp-tool-resolver.d.ts +7 -0
- package/dist/runtime/mcp-tool-resolver.js +64 -0
- package/dist/runtime/mcp-tool-resolver.js.map +1 -0
- package/dist/runtime/memory-store.d.ts +29 -0
- package/dist/runtime/memory-store.js +68 -0
- package/dist/runtime/memory-store.js.map +1 -0
- package/dist/runtime/message-list.d.ts +25 -0
- package/dist/runtime/message-list.js +79 -0
- package/dist/runtime/message-list.js.map +1 -0
- package/dist/runtime/messages.d.ts +8 -0
- package/dist/runtime/messages.js +239 -0
- package/dist/runtime/messages.js.map +1 -0
- package/dist/runtime/model-factory.d.ts +33 -0
- package/dist/runtime/model-factory.js +68 -0
- package/dist/runtime/model-factory.js.map +1 -0
- package/dist/runtime/run-state.d.ts +9 -0
- package/dist/runtime/run-state.js +49 -0
- package/dist/runtime/run-state.js.map +1 -0
- package/dist/runtime/runtime-helpers.d.ts +21 -0
- package/dist/runtime/runtime-helpers.js +96 -0
- package/dist/runtime/runtime-helpers.js.map +1 -0
- package/dist/runtime/stream.d.ts +15 -0
- package/dist/runtime/stream.js +94 -0
- package/dist/runtime/stream.js.map +1 -0
- package/dist/runtime/strip-orphaned-tool-messages.d.ts +2 -0
- package/dist/runtime/strip-orphaned-tool-messages.js +48 -0
- package/dist/runtime/strip-orphaned-tool-messages.js.map +1 -0
- package/dist/runtime/title-generation.d.ts +11 -0
- package/dist/runtime/title-generation.js +56 -0
- package/dist/runtime/title-generation.js.map +1 -0
- package/dist/runtime/tool-adapter.d.ts +23 -0
- package/dist/runtime/tool-adapter.js +104 -0
- package/dist/runtime/tool-adapter.js.map +1 -0
- package/dist/runtime/working-memory.d.ts +21 -0
- package/dist/runtime/working-memory.js +138 -0
- package/dist/runtime/working-memory.js.map +1 -0
- package/dist/sdk/agent.d.ts +88 -0
- package/dist/sdk/agent.js +327 -0
- package/dist/sdk/agent.js.map +1 -0
- package/dist/sdk/catalog.d.ts +31 -0
- package/dist/sdk/catalog.js +80 -0
- package/dist/sdk/catalog.js.map +1 -0
- package/dist/sdk/eval.d.ts +23 -0
- package/dist/sdk/eval.js +99 -0
- package/dist/sdk/eval.js.map +1 -0
- package/dist/sdk/evaluate.d.ts +13 -0
- package/dist/sdk/evaluate.js +84 -0
- package/dist/sdk/evaluate.js.map +1 -0
- package/dist/sdk/guardrail.d.ts +14 -0
- package/dist/sdk/guardrail.js +41 -0
- package/dist/sdk/guardrail.js.map +1 -0
- package/dist/sdk/mcp-client.d.ts +16 -0
- package/dist/sdk/mcp-client.js +128 -0
- package/dist/sdk/mcp-client.js.map +1 -0
- package/dist/sdk/memory.d.ts +22 -0
- package/dist/sdk/memory.js +101 -0
- package/dist/sdk/memory.js.map +1 -0
- package/dist/sdk/message.d.ts +4 -0
- package/dist/sdk/message.js +18 -0
- package/dist/sdk/message.js.map +1 -0
- package/dist/sdk/network.d.ts +20 -0
- package/dist/sdk/network.js +46 -0
- package/dist/sdk/network.js.map +1 -0
- package/dist/sdk/provider-tools.d.ts +18 -0
- package/dist/sdk/provider-tools.js +31 -0
- package/dist/sdk/provider-tools.js.map +1 -0
- package/dist/sdk/telemetry.d.ts +31 -0
- package/dist/sdk/telemetry.js +186 -0
- package/dist/sdk/telemetry.js.map +1 -0
- package/dist/sdk/tool.d.ts +38 -0
- package/dist/sdk/tool.js +143 -0
- package/dist/sdk/tool.js.map +1 -0
- package/dist/sdk/verify.d.ts +5 -0
- package/dist/sdk/verify.js +37 -0
- package/dist/sdk/verify.js.map +1 -0
- package/dist/storage/postgres-memory.d.ts +79 -0
- package/dist/storage/postgres-memory.js +411 -0
- package/dist/storage/postgres-memory.js.map +1 -0
- package/dist/storage/sqlite-memory.d.ts +60 -0
- package/dist/storage/sqlite-memory.js +349 -0
- package/dist/storage/sqlite-memory.js.map +1 -0
- package/dist/types/index.d.ts +13 -0
- package/dist/types/index.js +6 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/runtime/event.d.ts +41 -0
- package/dist/types/runtime/event.js +14 -0
- package/dist/types/runtime/event.js.map +1 -0
- package/dist/types/runtime/message-list.d.ts +7 -0
- package/dist/types/runtime/message-list.js +3 -0
- package/dist/types/runtime/message-list.js.map +1 -0
- package/dist/types/sdk/agent.d.ts +174 -0
- package/dist/types/sdk/agent.js +3 -0
- package/dist/types/sdk/agent.js.map +1 -0
- package/dist/types/sdk/eval.d.ts +41 -0
- package/dist/types/sdk/eval.js +3 -0
- package/dist/types/sdk/eval.js.map +1 -0
- package/dist/types/sdk/guardrail.d.ts +9 -0
- package/dist/types/sdk/guardrail.js +3 -0
- package/dist/types/sdk/guardrail.js.map +1 -0
- package/dist/types/sdk/mcp.d.ts +24 -0
- package/dist/types/sdk/mcp.js +3 -0
- package/dist/types/sdk/mcp.js.map +1 -0
- package/dist/types/sdk/memory.d.ts +99 -0
- package/dist/types/sdk/memory.js +3 -0
- package/dist/types/sdk/memory.js.map +1 -0
- package/dist/types/sdk/message.d.ts +79 -0
- package/dist/types/sdk/message.js +3 -0
- package/dist/types/sdk/message.js.map +1 -0
- package/dist/types/sdk/provider.d.ts +16 -0
- package/dist/types/sdk/provider.js +3 -0
- package/dist/types/sdk/provider.js.map +1 -0
- package/dist/types/sdk/tool.d.ts +32 -0
- package/dist/types/sdk/tool.js +3 -0
- package/dist/types/sdk/tool.js.map +1 -0
- package/dist/types/telemetry.d.ts +18 -0
- package/dist/types/telemetry.js +3 -0
- package/dist/types/telemetry.js.map +1 -0
- package/dist/types/utils/json.d.ts +5 -0
- package/dist/types/utils/json.js +3 -0
- package/dist/types/utils/json.js.map +1 -0
- package/dist/utils/zod.d.ts +3 -0
- package/dist/utils/zod.js +7 -0
- package/dist/utils/zod.js.map +1 -0
- package/dist/workspace/filesystem/base-filesystem.d.ts +40 -0
- package/dist/workspace/filesystem/base-filesystem.js +99 -0
- package/dist/workspace/filesystem/base-filesystem.js.map +1 -0
- package/dist/workspace/index.d.ts +8 -0
- package/dist/workspace/index.js +17 -0
- package/dist/workspace/index.js.map +1 -0
- package/dist/workspace/lifecycle.d.ts +13 -0
- package/dist/workspace/lifecycle.js +11 -0
- package/dist/workspace/lifecycle.js.map +1 -0
- package/dist/workspace/process.d.ts +36 -0
- package/dist/workspace/process.js +76 -0
- package/dist/workspace/process.js.map +1 -0
- package/dist/workspace/sandbox/base-sandbox.d.ts +28 -0
- package/dist/workspace/sandbox/base-sandbox.js +163 -0
- package/dist/workspace/sandbox/base-sandbox.js.map +1 -0
- package/dist/workspace/tools/append-file.d.ts +3 -0
- package/dist/workspace/tools/append-file.js +22 -0
- package/dist/workspace/tools/append-file.js.map +1 -0
- package/dist/workspace/tools/copy-file.d.ts +3 -0
- package/dist/workspace/tools/copy-file.js +26 -0
- package/dist/workspace/tools/copy-file.js.map +1 -0
- package/dist/workspace/tools/delete-file.d.ts +3 -0
- package/dist/workspace/tools/delete-file.js +26 -0
- package/dist/workspace/tools/delete-file.js.map +1 -0
- package/dist/workspace/tools/execute-command.d.ts +3 -0
- package/dist/workspace/tools/execute-command.js +39 -0
- package/dist/workspace/tools/execute-command.js.map +1 -0
- package/dist/workspace/tools/file-stat.d.ts +3 -0
- package/dist/workspace/tools/file-stat.js +33 -0
- package/dist/workspace/tools/file-stat.js.map +1 -0
- package/dist/workspace/tools/list-files.d.ts +3 -0
- package/dist/workspace/tools/list-files.js +28 -0
- package/dist/workspace/tools/list-files.js.map +1 -0
- package/dist/workspace/tools/mkdir.d.ts +3 -0
- package/dist/workspace/tools/mkdir.js +22 -0
- package/dist/workspace/tools/mkdir.js.map +1 -0
- package/dist/workspace/tools/move-file.d.ts +3 -0
- package/dist/workspace/tools/move-file.js +26 -0
- package/dist/workspace/tools/move-file.js.map +1 -0
- package/dist/workspace/tools/process-tools.d.ts +4 -0
- package/dist/workspace/tools/process-tools.js +37 -0
- package/dist/workspace/tools/process-tools.js.map +1 -0
- package/dist/workspace/tools/read-file.d.ts +3 -0
- package/dist/workspace/tools/read-file.js +24 -0
- package/dist/workspace/tools/read-file.js.map +1 -0
- package/dist/workspace/tools/rmdir.d.ts +3 -0
- package/dist/workspace/tools/rmdir.js +26 -0
- package/dist/workspace/tools/rmdir.js.map +1 -0
- package/dist/workspace/tools/workspace-tools.d.ts +8 -0
- package/dist/workspace/tools/workspace-tools.js +39 -0
- package/dist/workspace/tools/workspace-tools.js.map +1 -0
- package/dist/workspace/tools/write-file.d.ts +3 -0
- package/dist/workspace/tools/write-file.js +26 -0
- package/dist/workspace/tools/write-file.js.map +1 -0
- package/dist/workspace/types.d.ts +178 -0
- package/dist/workspace/types.js +7 -0
- package/dist/workspace/types.js.map +1 -0
- package/dist/workspace/workspace.d.ts +21 -0
- package/dist/workspace/workspace.js +131 -0
- package/dist/workspace/workspace.js.map +1 -0
- package/package.json +65 -0
|
@@ -0,0 +1,411 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.PostgresMemory = void 0;
|
|
37
|
+
const message_1 = require("../sdk/message");
|
|
38
|
+
function parseJsonSafe(text) {
|
|
39
|
+
try {
|
|
40
|
+
return JSON.parse(text);
|
|
41
|
+
}
|
|
42
|
+
catch {
|
|
43
|
+
return undefined;
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
class PostgresMemory {
|
|
47
|
+
constructor(config) {
|
|
48
|
+
this.initPromise = null;
|
|
49
|
+
this.embeddingsInitPromise = null;
|
|
50
|
+
this.embeddingDimension = null;
|
|
51
|
+
if (config.namespace !== undefined) {
|
|
52
|
+
if (!/^[a-zA-Z0-9_]+$/.test(config.namespace)) {
|
|
53
|
+
throw new Error(`Invalid namespace "${config.namespace}": must be alphanumeric and underscores only`);
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
this.config = config;
|
|
57
|
+
this.ns = config.namespace ? `${config.namespace}_` : '';
|
|
58
|
+
}
|
|
59
|
+
async ensureInitialized() {
|
|
60
|
+
this.initPromise ??= this._initialize().catch((error) => {
|
|
61
|
+
this.initPromise = null;
|
|
62
|
+
throw error;
|
|
63
|
+
});
|
|
64
|
+
return await this.initPromise;
|
|
65
|
+
}
|
|
66
|
+
async _initialize() {
|
|
67
|
+
const { Pool: PgPool } = await Promise.resolve().then(() => __importStar(require('pg')));
|
|
68
|
+
const conn = this.config.connection;
|
|
69
|
+
const connectionOpts = typeof conn === 'string'
|
|
70
|
+
? { connectionString: conn }
|
|
71
|
+
: {
|
|
72
|
+
...(conn.host && { host: conn.host }),
|
|
73
|
+
...(conn.port && { port: conn.port }),
|
|
74
|
+
...(conn.database && { database: conn.database }),
|
|
75
|
+
...(conn.user && { user: conn.user }),
|
|
76
|
+
...(conn.password !== undefined && { password: conn.password }),
|
|
77
|
+
};
|
|
78
|
+
const pool = new PgPool({
|
|
79
|
+
...connectionOpts,
|
|
80
|
+
...(this.config.pool?.max !== undefined && { max: this.config.pool.max }),
|
|
81
|
+
...(this.config.pool?.min !== undefined && { min: this.config.pool.min }),
|
|
82
|
+
...(this.config.pool?.idleTimeoutMillis !== undefined && {
|
|
83
|
+
idleTimeoutMillis: this.config.pool.idleTimeoutMillis,
|
|
84
|
+
}),
|
|
85
|
+
...(this.config.pool?.connectionTimeoutMillis !== undefined && {
|
|
86
|
+
connectionTimeoutMillis: this.config.pool.connectionTimeoutMillis,
|
|
87
|
+
}),
|
|
88
|
+
...(this.config.pool?.allowExitOnIdle !== undefined && {
|
|
89
|
+
allowExitOnIdle: this.config.pool.allowExitOnIdle,
|
|
90
|
+
}),
|
|
91
|
+
...(this.config.ssl !== undefined && { ssl: this.config.ssl }),
|
|
92
|
+
});
|
|
93
|
+
await pool.query(`CREATE TABLE IF NOT EXISTS ${this.ns}threads (
|
|
94
|
+
id TEXT PRIMARY KEY,
|
|
95
|
+
"resourceId" TEXT NOT NULL,
|
|
96
|
+
title TEXT,
|
|
97
|
+
metadata JSONB,
|
|
98
|
+
"createdAt" TIMESTAMPTZ NOT NULL,
|
|
99
|
+
"updatedAt" TIMESTAMPTZ NOT NULL
|
|
100
|
+
)`);
|
|
101
|
+
await pool.query(`CREATE TABLE IF NOT EXISTS ${this.ns}messages (
|
|
102
|
+
seq SERIAL PRIMARY KEY,
|
|
103
|
+
id TEXT NOT NULL UNIQUE,
|
|
104
|
+
"threadId" TEXT NOT NULL,
|
|
105
|
+
role TEXT NOT NULL,
|
|
106
|
+
content JSONB NOT NULL,
|
|
107
|
+
"createdAt" TIMESTAMPTZ NOT NULL
|
|
108
|
+
)`);
|
|
109
|
+
await pool.query(`CREATE TABLE IF NOT EXISTS ${this.ns}working_memory (
|
|
110
|
+
key TEXT NOT NULL,
|
|
111
|
+
scope TEXT NOT NULL CHECK(scope IN ('resource', 'thread')),
|
|
112
|
+
content TEXT NOT NULL,
|
|
113
|
+
"updatedAt" TIMESTAMPTZ NOT NULL,
|
|
114
|
+
PRIMARY KEY (key, scope)
|
|
115
|
+
)`);
|
|
116
|
+
return pool;
|
|
117
|
+
}
|
|
118
|
+
async getThread(threadId) {
|
|
119
|
+
const pool = await this.ensureInitialized();
|
|
120
|
+
const result = await pool.query(`SELECT id, "resourceId", title, metadata, "createdAt", "updatedAt"
|
|
121
|
+
FROM ${this.ns}threads WHERE id = $1`, [threadId]);
|
|
122
|
+
if (result.rows.length === 0)
|
|
123
|
+
return null;
|
|
124
|
+
const row = result.rows[0];
|
|
125
|
+
return {
|
|
126
|
+
id: row.id,
|
|
127
|
+
resourceId: row.resourceId,
|
|
128
|
+
title: row.title ?? undefined,
|
|
129
|
+
metadata: row.metadata ?? undefined,
|
|
130
|
+
createdAt: new Date(row.createdAt),
|
|
131
|
+
updatedAt: new Date(row.updatedAt),
|
|
132
|
+
};
|
|
133
|
+
}
|
|
134
|
+
async saveThread(thread) {
|
|
135
|
+
const pool = await this.ensureInitialized();
|
|
136
|
+
const now = new Date().toISOString();
|
|
137
|
+
const titleArg = thread.title ?? null;
|
|
138
|
+
const metadataArg = thread.metadata ? JSON.stringify(thread.metadata) : null;
|
|
139
|
+
const result = await pool.query(`INSERT INTO ${this.ns}threads (id, "resourceId", title, metadata, "createdAt", "updatedAt")
|
|
140
|
+
VALUES ($1, $2, $3, $4, $5, $6)
|
|
141
|
+
ON CONFLICT (id) DO UPDATE SET
|
|
142
|
+
"resourceId" = EXCLUDED."resourceId",
|
|
143
|
+
title = COALESCE(EXCLUDED.title, ${this.ns}threads.title),
|
|
144
|
+
metadata = COALESCE(EXCLUDED.metadata, ${this.ns}threads.metadata),
|
|
145
|
+
"updatedAt" = EXCLUDED."updatedAt"
|
|
146
|
+
RETURNING id, "resourceId", title, metadata, "createdAt", "updatedAt"`, [thread.id, thread.resourceId, titleArg, metadataArg, now, now]);
|
|
147
|
+
const row = result.rows[0];
|
|
148
|
+
return {
|
|
149
|
+
id: row.id,
|
|
150
|
+
resourceId: row.resourceId,
|
|
151
|
+
title: row.title ?? undefined,
|
|
152
|
+
metadata: row.metadata ?? undefined,
|
|
153
|
+
createdAt: new Date(row.createdAt),
|
|
154
|
+
updatedAt: new Date(row.updatedAt),
|
|
155
|
+
};
|
|
156
|
+
}
|
|
157
|
+
async deleteThread(threadId) {
|
|
158
|
+
const pool = await this.ensureInitialized();
|
|
159
|
+
const client = await pool.connect();
|
|
160
|
+
try {
|
|
161
|
+
await client.query('BEGIN');
|
|
162
|
+
await client.query(`DELETE FROM ${this.ns}messages WHERE "threadId" = $1`, [threadId]);
|
|
163
|
+
await client.query(`DELETE FROM ${this.ns}threads WHERE id = $1`, [threadId]);
|
|
164
|
+
await client.query('COMMIT');
|
|
165
|
+
}
|
|
166
|
+
catch (deleteError) {
|
|
167
|
+
await client.query('ROLLBACK');
|
|
168
|
+
throw deleteError;
|
|
169
|
+
}
|
|
170
|
+
finally {
|
|
171
|
+
client.release();
|
|
172
|
+
}
|
|
173
|
+
try {
|
|
174
|
+
await pool.query(`DELETE FROM ${this.ns}message_embeddings WHERE "threadId" = $1`, [
|
|
175
|
+
threadId,
|
|
176
|
+
]);
|
|
177
|
+
}
|
|
178
|
+
catch (e) {
|
|
179
|
+
if (!(e instanceof Error && /does not exist/i.test(e.message)))
|
|
180
|
+
throw e;
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
async getMessages(threadId, opts) {
|
|
184
|
+
const pool = await this.ensureInitialized();
|
|
185
|
+
let sql;
|
|
186
|
+
const args = [threadId];
|
|
187
|
+
const paramIdx = 2;
|
|
188
|
+
if (opts?.limit !== undefined && opts?.before !== undefined) {
|
|
189
|
+
sql = `SELECT * FROM (
|
|
190
|
+
SELECT id, "threadId", role, content, "createdAt", seq
|
|
191
|
+
FROM ${this.ns}messages
|
|
192
|
+
WHERE "threadId" = $1 AND "createdAt" < $${paramIdx}
|
|
193
|
+
ORDER BY "createdAt" DESC, seq DESC
|
|
194
|
+
LIMIT $${paramIdx + 1}
|
|
195
|
+
) sub ORDER BY "createdAt" ASC, seq ASC`;
|
|
196
|
+
args.push(opts.before.toISOString(), opts.limit);
|
|
197
|
+
}
|
|
198
|
+
else if (opts?.limit !== undefined) {
|
|
199
|
+
sql = `SELECT * FROM (
|
|
200
|
+
SELECT id, "threadId", role, content, "createdAt", seq
|
|
201
|
+
FROM ${this.ns}messages
|
|
202
|
+
WHERE "threadId" = $1
|
|
203
|
+
ORDER BY "createdAt" DESC, seq DESC
|
|
204
|
+
LIMIT $${paramIdx}
|
|
205
|
+
) sub ORDER BY "createdAt" ASC, seq ASC`;
|
|
206
|
+
args.push(opts.limit);
|
|
207
|
+
}
|
|
208
|
+
else if (opts?.before !== undefined) {
|
|
209
|
+
sql = `SELECT id, "threadId", role, content, "createdAt"
|
|
210
|
+
FROM ${this.ns}messages
|
|
211
|
+
WHERE "threadId" = $1 AND "createdAt" < $${paramIdx}
|
|
212
|
+
ORDER BY "createdAt" ASC, seq ASC`;
|
|
213
|
+
args.push(opts.before.toISOString());
|
|
214
|
+
}
|
|
215
|
+
else {
|
|
216
|
+
sql = `SELECT id, "threadId", role, content, "createdAt"
|
|
217
|
+
FROM ${this.ns}messages
|
|
218
|
+
WHERE "threadId" = $1
|
|
219
|
+
ORDER BY "createdAt" ASC, seq ASC`;
|
|
220
|
+
}
|
|
221
|
+
const result = await pool.query(sql, args);
|
|
222
|
+
return result.rows
|
|
223
|
+
.map((row) => {
|
|
224
|
+
const content = typeof row.content === 'string' ? parseJsonSafe(row.content) : row.content;
|
|
225
|
+
if (!content || typeof content !== 'object')
|
|
226
|
+
return undefined;
|
|
227
|
+
const msg = content;
|
|
228
|
+
msg.id = row.id;
|
|
229
|
+
return msg;
|
|
230
|
+
})
|
|
231
|
+
.filter((m) => m !== undefined);
|
|
232
|
+
}
|
|
233
|
+
async saveMessages(args) {
|
|
234
|
+
const pool = await this.ensureInitialized();
|
|
235
|
+
if (args.messages.length === 0)
|
|
236
|
+
return;
|
|
237
|
+
const dbMessages = args.messages.map(message_1.toDbMessage);
|
|
238
|
+
const client = await pool.connect();
|
|
239
|
+
try {
|
|
240
|
+
await client.query('BEGIN');
|
|
241
|
+
for (const msg of dbMessages) {
|
|
242
|
+
const now = new Date().toISOString();
|
|
243
|
+
const role = 'role' in msg ? msg.role : 'custom';
|
|
244
|
+
const id = msg.id;
|
|
245
|
+
await client.query(`INSERT INTO ${this.ns}messages (id, "threadId", role, content, "createdAt")
|
|
246
|
+
VALUES ($1, $2, $3, $4, $5)
|
|
247
|
+
ON CONFLICT (id) DO UPDATE SET
|
|
248
|
+
"threadId" = EXCLUDED."threadId",
|
|
249
|
+
role = EXCLUDED.role,
|
|
250
|
+
content = EXCLUDED.content,
|
|
251
|
+
"createdAt" = EXCLUDED."createdAt"`, [id, args.threadId, role, JSON.stringify(msg), now]);
|
|
252
|
+
}
|
|
253
|
+
await client.query('COMMIT');
|
|
254
|
+
}
|
|
255
|
+
catch (txError) {
|
|
256
|
+
await client.query('ROLLBACK');
|
|
257
|
+
throw txError;
|
|
258
|
+
}
|
|
259
|
+
finally {
|
|
260
|
+
client.release();
|
|
261
|
+
}
|
|
262
|
+
}
|
|
263
|
+
async deleteMessages(messageIds) {
|
|
264
|
+
const pool = await this.ensureInitialized();
|
|
265
|
+
if (messageIds.length === 0)
|
|
266
|
+
return;
|
|
267
|
+
const placeholders = messageIds.map((_, i) => `$${i + 1}`).join(', ');
|
|
268
|
+
await pool.query(`DELETE FROM ${this.ns}messages WHERE id IN (${placeholders})`, messageIds);
|
|
269
|
+
try {
|
|
270
|
+
await pool.query(`DELETE FROM ${this.ns}message_embeddings WHERE id IN (${placeholders})`, messageIds);
|
|
271
|
+
}
|
|
272
|
+
catch (e) {
|
|
273
|
+
if (!(e instanceof Error && /does not exist/i.test(e.message)))
|
|
274
|
+
throw e;
|
|
275
|
+
}
|
|
276
|
+
}
|
|
277
|
+
async getWorkingMemory(params) {
|
|
278
|
+
const pool = await this.ensureInitialized();
|
|
279
|
+
const key = params.scope === 'resource' ? params.resourceId : params.threadId;
|
|
280
|
+
const result = await pool.query(`SELECT content FROM ${this.ns}working_memory WHERE key = $1 AND scope = $2`, [key, params.scope]);
|
|
281
|
+
if (result.rows.length === 0)
|
|
282
|
+
return null;
|
|
283
|
+
return result.rows[0].content;
|
|
284
|
+
}
|
|
285
|
+
async saveWorkingMemory(params, content) {
|
|
286
|
+
const pool = await this.ensureInitialized();
|
|
287
|
+
const key = params.scope === 'resource' ? params.resourceId : params.threadId;
|
|
288
|
+
const now = new Date().toISOString();
|
|
289
|
+
await pool.query(`INSERT INTO ${this.ns}working_memory (key, scope, content, "updatedAt")
|
|
290
|
+
VALUES ($1, $2, $3, $4)
|
|
291
|
+
ON CONFLICT (key, scope) DO UPDATE SET
|
|
292
|
+
content = EXCLUDED.content,
|
|
293
|
+
"updatedAt" = EXCLUDED."updatedAt"`, [key, params.scope, content, now]);
|
|
294
|
+
}
|
|
295
|
+
async ensureEmbeddingsTable(pool, dimension) {
|
|
296
|
+
if (this.embeddingDimension !== null && this.embeddingDimension !== dimension) {
|
|
297
|
+
throw new Error(`Embedding dimension mismatch: table was created with ${this.embeddingDimension} but received ${dimension}. ` +
|
|
298
|
+
'This usually means the embedder model changed. Drop the embeddings table and re-index.');
|
|
299
|
+
}
|
|
300
|
+
this.embeddingsInitPromise ??= this._initializeEmbeddingsTable(pool, dimension).catch((error) => {
|
|
301
|
+
this.embeddingsInitPromise = null;
|
|
302
|
+
throw error;
|
|
303
|
+
});
|
|
304
|
+
await this.embeddingsInitPromise;
|
|
305
|
+
}
|
|
306
|
+
async _initializeEmbeddingsTable(pool, dimension) {
|
|
307
|
+
await pool.query('CREATE EXTENSION IF NOT EXISTS vector');
|
|
308
|
+
const existing = await pool.query(`SELECT udt_name FROM information_schema.columns
|
|
309
|
+
WHERE table_name = '${this.ns}message_embeddings' AND column_name = 'embedding'`);
|
|
310
|
+
if (existing.rows.length > 0) {
|
|
311
|
+
const dimCheck = await pool.query(`SELECT atttypmod FROM pg_attribute
|
|
312
|
+
WHERE attrelid = '${this.ns}message_embeddings'::regclass AND attname = 'embedding'`);
|
|
313
|
+
if (dimCheck.rows.length > 0) {
|
|
314
|
+
const existingDim = dimCheck.rows[0].atttypmod;
|
|
315
|
+
if (existingDim > 0 && existingDim !== dimension) {
|
|
316
|
+
throw new Error(`Embedding dimension mismatch: table was created with ${existingDim} but received ${dimension}. ` +
|
|
317
|
+
'This usually means the embedder model changed. Drop the embeddings table and re-index.');
|
|
318
|
+
}
|
|
319
|
+
}
|
|
320
|
+
}
|
|
321
|
+
else {
|
|
322
|
+
await pool.query(`CREATE TABLE IF NOT EXISTS ${this.ns}message_embeddings (
|
|
323
|
+
id TEXT PRIMARY KEY,
|
|
324
|
+
"threadId" TEXT NOT NULL,
|
|
325
|
+
"resourceId" TEXT NOT NULL DEFAULT '',
|
|
326
|
+
embedding vector(${dimension}) NOT NULL,
|
|
327
|
+
"contentText" TEXT NOT NULL,
|
|
328
|
+
"createdAt" TIMESTAMPTZ NOT NULL
|
|
329
|
+
)`);
|
|
330
|
+
await pool.query(`CREATE INDEX IF NOT EXISTS ${this.ns}idx_embeddings_vector
|
|
331
|
+
ON ${this.ns}message_embeddings USING hnsw (embedding vector_cosine_ops)`);
|
|
332
|
+
}
|
|
333
|
+
this.embeddingDimension = dimension;
|
|
334
|
+
}
|
|
335
|
+
async saveEmbeddings(opts) {
|
|
336
|
+
const pool = await this.ensureInitialized();
|
|
337
|
+
if (opts.entries.length === 0)
|
|
338
|
+
return;
|
|
339
|
+
const threadId = opts.threadId ?? '';
|
|
340
|
+
const resourceId = opts.resourceId ?? '';
|
|
341
|
+
const dimension = opts.entries[0].vector.length;
|
|
342
|
+
await this.ensureEmbeddingsTable(pool, dimension);
|
|
343
|
+
const client = await pool.connect();
|
|
344
|
+
try {
|
|
345
|
+
await client.query('BEGIN');
|
|
346
|
+
for (const entry of opts.entries) {
|
|
347
|
+
const vectorStr = `[${entry.vector.join(',')}]`;
|
|
348
|
+
await client.query(`INSERT INTO ${this.ns}message_embeddings (id, "threadId", "resourceId", embedding, "contentText", "createdAt")
|
|
349
|
+
VALUES ($1, $2, $3, $4, $5, $6)
|
|
350
|
+
ON CONFLICT (id) DO UPDATE SET
|
|
351
|
+
"threadId" = EXCLUDED."threadId",
|
|
352
|
+
"resourceId" = EXCLUDED."resourceId",
|
|
353
|
+
embedding = EXCLUDED.embedding,
|
|
354
|
+
"contentText" = EXCLUDED."contentText",
|
|
355
|
+
"createdAt" = EXCLUDED."createdAt"`, [entry.id, threadId, resourceId, vectorStr, entry.text, new Date().toISOString()]);
|
|
356
|
+
}
|
|
357
|
+
await client.query('COMMIT');
|
|
358
|
+
}
|
|
359
|
+
catch (txError) {
|
|
360
|
+
await client.query('ROLLBACK');
|
|
361
|
+
throw txError;
|
|
362
|
+
}
|
|
363
|
+
finally {
|
|
364
|
+
client.release();
|
|
365
|
+
}
|
|
366
|
+
}
|
|
367
|
+
async queryEmbeddings(opts) {
|
|
368
|
+
const pool = await this.ensureInitialized();
|
|
369
|
+
await this.ensureEmbeddingsTable(pool, opts.vector.length);
|
|
370
|
+
const vectorStr = `[${opts.vector.join(',')}]`;
|
|
371
|
+
let sql = `SELECT id, (embedding <=> $1) as distance
|
|
372
|
+
FROM ${this.ns}message_embeddings`;
|
|
373
|
+
const params = [vectorStr];
|
|
374
|
+
let paramIdx = 2;
|
|
375
|
+
const scope = opts.scope ?? 'resource';
|
|
376
|
+
if (scope === 'thread' && opts.threadId === undefined) {
|
|
377
|
+
throw new Error('threadId is required when scope is thread');
|
|
378
|
+
}
|
|
379
|
+
if (scope === 'resource' && opts.resourceId === undefined) {
|
|
380
|
+
throw new Error('resourceId is required when scope is resource');
|
|
381
|
+
}
|
|
382
|
+
if (scope === 'thread' && opts.threadId) {
|
|
383
|
+
sql += ` WHERE "threadId" = $${paramIdx}`;
|
|
384
|
+
params.push(opts.threadId);
|
|
385
|
+
paramIdx++;
|
|
386
|
+
}
|
|
387
|
+
else if (scope === 'resource' && opts.resourceId) {
|
|
388
|
+
sql += ` WHERE "resourceId" = $${paramIdx}`;
|
|
389
|
+
params.push(opts.resourceId);
|
|
390
|
+
paramIdx++;
|
|
391
|
+
}
|
|
392
|
+
sql += ` ORDER BY distance ASC LIMIT $${paramIdx}`;
|
|
393
|
+
params.push(opts.topK);
|
|
394
|
+
const result = await pool.query(sql, params);
|
|
395
|
+
return result.rows.map((r) => ({
|
|
396
|
+
id: r.id,
|
|
397
|
+
score: 1 - r.distance,
|
|
398
|
+
}));
|
|
399
|
+
}
|
|
400
|
+
async close() {
|
|
401
|
+
if (this.initPromise) {
|
|
402
|
+
const pool = await this.initPromise;
|
|
403
|
+
await pool.end();
|
|
404
|
+
this.initPromise = null;
|
|
405
|
+
this.embeddingsInitPromise = null;
|
|
406
|
+
this.embeddingDimension = null;
|
|
407
|
+
}
|
|
408
|
+
}
|
|
409
|
+
}
|
|
410
|
+
exports.PostgresMemory = PostgresMemory;
|
|
411
|
+
//# sourceMappingURL=postgres-memory.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"postgres-memory.js","sourceRoot":"","sources":["../../src/storage/postgres-memory.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import type { BuiltMemory, Thread } from '../types/sdk/memory';
|
|
2
|
+
import type { AgentDbMessage, AgentMessage } from '../types/sdk/message';
|
|
3
|
+
export interface SqliteMemoryConfig {
|
|
4
|
+
url: string;
|
|
5
|
+
namespace?: string;
|
|
6
|
+
}
|
|
7
|
+
export declare class SqliteMemory implements BuiltMemory {
|
|
8
|
+
private initPromise;
|
|
9
|
+
private embeddingsInitPromise;
|
|
10
|
+
private readonly config;
|
|
11
|
+
private readonly ns;
|
|
12
|
+
constructor(config: SqliteMemoryConfig);
|
|
13
|
+
private ensureInitialized;
|
|
14
|
+
private _initialize;
|
|
15
|
+
getThread(threadId: string): Promise<Thread | null>;
|
|
16
|
+
saveThread(thread: Omit<Thread, 'createdAt' | 'updatedAt'>): Promise<Thread>;
|
|
17
|
+
deleteThread(threadId: string): Promise<void>;
|
|
18
|
+
getMessages(threadId: string, opts?: {
|
|
19
|
+
limit?: number;
|
|
20
|
+
before?: Date;
|
|
21
|
+
}): Promise<AgentDbMessage[]>;
|
|
22
|
+
saveMessages(args: {
|
|
23
|
+
threadId: string;
|
|
24
|
+
resourceId?: string;
|
|
25
|
+
messages: AgentMessage[];
|
|
26
|
+
}): Promise<void>;
|
|
27
|
+
deleteMessages(messageIds: string[]): Promise<void>;
|
|
28
|
+
getWorkingMemory(params: {
|
|
29
|
+
threadId: string;
|
|
30
|
+
resourceId?: string;
|
|
31
|
+
}): Promise<string | null>;
|
|
32
|
+
saveWorkingMemory(params: {
|
|
33
|
+
threadId: string;
|
|
34
|
+
resourceId?: string;
|
|
35
|
+
}, content: string): Promise<void>;
|
|
36
|
+
private embeddingDimension;
|
|
37
|
+
private ensureEmbeddingsTable;
|
|
38
|
+
private _initializeEmbeddingsTable;
|
|
39
|
+
saveEmbeddings(opts: {
|
|
40
|
+
scope?: 'thread' | 'resource';
|
|
41
|
+
threadId?: string;
|
|
42
|
+
resourceId?: string;
|
|
43
|
+
entries: Array<{
|
|
44
|
+
id: string;
|
|
45
|
+
vector: number[];
|
|
46
|
+
text: string;
|
|
47
|
+
model: string;
|
|
48
|
+
}>;
|
|
49
|
+
}): Promise<void>;
|
|
50
|
+
queryEmbeddings(opts: {
|
|
51
|
+
scope?: 'thread' | 'resource';
|
|
52
|
+
threadId?: string;
|
|
53
|
+
resourceId?: string;
|
|
54
|
+
vector: number[];
|
|
55
|
+
topK: number;
|
|
56
|
+
}): Promise<Array<{
|
|
57
|
+
id: string;
|
|
58
|
+
score: number;
|
|
59
|
+
}>>;
|
|
60
|
+
}
|