@polpo-ai/server 0.15.41 → 0.15.43
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/dist/deps.d.ts +12 -0
- package/dist/deps.d.ts.map +1 -1
- package/dist/index.d.ts +2 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/routes/completions/agent-step-runner.d.ts +3 -2
- package/dist/routes/completions/agent-step-runner.d.ts.map +1 -1
- package/dist/routes/completions/agent-step-runner.js +29 -22
- package/dist/routes/completions/agent-step-runner.js.map +1 -1
- package/dist/routes/completions/chat-handler.d.ts +3 -1
- package/dist/routes/completions/chat-handler.d.ts.map +1 -1
- package/dist/routes/completions/chat-handler.js.map +1 -1
- package/dist/routes/completions/conversation-turn.d.ts +3 -1
- package/dist/routes/completions/conversation-turn.d.ts.map +1 -1
- package/dist/routes/completions/conversation-turn.js +42 -1
- package/dist/routes/completions/conversation-turn.js.map +1 -1
- package/dist/routes/completions/execution-router-runtime.test.js +74 -0
- package/dist/routes/completions/execution-router-runtime.test.js.map +1 -1
- package/dist/routes/completions/project-loop-runner.d.ts +11 -2
- package/dist/routes/completions/project-loop-runner.d.ts.map +1 -1
- package/dist/routes/completions/project-loop-runner.js +101 -3
- package/dist/routes/completions/project-loop-runner.js.map +1 -1
- package/dist/routes/completions/runtime-context-hook.test.d.ts +2 -0
- package/dist/routes/completions/runtime-context-hook.test.d.ts.map +1 -0
- package/dist/routes/completions/runtime-context-hook.test.js +250 -0
- package/dist/routes/completions/runtime-context-hook.test.js.map +1 -0
- package/dist/routes/completions.d.ts +9 -1
- package/dist/routes/completions.d.ts.map +1 -1
- package/dist/routes/completions.js +2 -0
- package/dist/routes/completions.js.map +1 -1
- package/dist/routes/memory-items.d.ts +9 -0
- package/dist/routes/memory-items.d.ts.map +1 -0
- package/dist/routes/memory-items.js +505 -0
- package/dist/routes/memory-items.js.map +1 -0
- package/dist/routes/memory-items.test.d.ts +2 -0
- package/dist/routes/memory-items.test.d.ts.map +1 -0
- package/dist/routes/memory-items.test.js +392 -0
- package/dist/routes/memory-items.test.js.map +1 -0
- package/package.json +6 -6
|
@@ -0,0 +1,505 @@
|
|
|
1
|
+
import { Hono } from "hono";
|
|
2
|
+
import { MEMORY_KINDS, MEMORY_STATUSES, MemoryAuthorizationError, MemoryConflictError, MemoryContractError, MemoryPolicyError, createMemoryItem, normalizeMemoryScope, } from "@polpo-ai/core";
|
|
3
|
+
import { nanoid } from "nanoid";
|
|
4
|
+
class InvalidMemoryRequestError extends Error {
|
|
5
|
+
constructor(message = "Invalid Memory request") {
|
|
6
|
+
super(message);
|
|
7
|
+
this.name = "InvalidMemoryRequestError";
|
|
8
|
+
}
|
|
9
|
+
}
|
|
10
|
+
const memoryKinds = new Set(MEMORY_KINDS);
|
|
11
|
+
const memoryStatuses = new Set(MEMORY_STATUSES);
|
|
12
|
+
const createKeys = new Set([
|
|
13
|
+
"id",
|
|
14
|
+
"scope",
|
|
15
|
+
"kind",
|
|
16
|
+
"content",
|
|
17
|
+
"summary",
|
|
18
|
+
"provenance",
|
|
19
|
+
"confidence",
|
|
20
|
+
"status",
|
|
21
|
+
"expiresAt",
|
|
22
|
+
]);
|
|
23
|
+
const patchKeys = new Set([
|
|
24
|
+
"content",
|
|
25
|
+
"summary",
|
|
26
|
+
"confidence",
|
|
27
|
+
"status",
|
|
28
|
+
"expiresAt",
|
|
29
|
+
]);
|
|
30
|
+
const listQueryKeys = new Set([
|
|
31
|
+
"kinds",
|
|
32
|
+
"statuses",
|
|
33
|
+
"scopeKind",
|
|
34
|
+
"scopeSubjectId",
|
|
35
|
+
"scopeAgentName",
|
|
36
|
+
"includeExpired",
|
|
37
|
+
"limit",
|
|
38
|
+
"cursor",
|
|
39
|
+
]);
|
|
40
|
+
const searchKeys = new Set([
|
|
41
|
+
"query",
|
|
42
|
+
"kinds",
|
|
43
|
+
"scope",
|
|
44
|
+
"tokenBudget",
|
|
45
|
+
"maxResults",
|
|
46
|
+
]);
|
|
47
|
+
function object(value, allowedKeys) {
|
|
48
|
+
if (!value || typeof value !== "object" || Array.isArray(value)) {
|
|
49
|
+
throw new InvalidMemoryRequestError();
|
|
50
|
+
}
|
|
51
|
+
const record = value;
|
|
52
|
+
for (const key of Object.keys(record)) {
|
|
53
|
+
if (!allowedKeys.has(key)) {
|
|
54
|
+
throw new InvalidMemoryRequestError(`Unknown Memory field: ${key}`);
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
return record;
|
|
58
|
+
}
|
|
59
|
+
async function jsonObject(context, allowedKeys) {
|
|
60
|
+
const value = await context.req.json().catch(() => {
|
|
61
|
+
throw new InvalidMemoryRequestError();
|
|
62
|
+
});
|
|
63
|
+
return object(value, allowedKeys);
|
|
64
|
+
}
|
|
65
|
+
function agentName(context) {
|
|
66
|
+
const value = context.req.param("agentName").trim();
|
|
67
|
+
if (value.length === 0 || value.length > 128) {
|
|
68
|
+
throw new InvalidMemoryRequestError("Invalid agent name");
|
|
69
|
+
}
|
|
70
|
+
return value;
|
|
71
|
+
}
|
|
72
|
+
function commaList(value, allowed, field) {
|
|
73
|
+
if (value === undefined)
|
|
74
|
+
return undefined;
|
|
75
|
+
const values = value.split(",").map((entry) => entry.trim());
|
|
76
|
+
if (values.length === 0
|
|
77
|
+
|| values.some((entry) => entry.length === 0 || !allowed.has(entry))) {
|
|
78
|
+
throw new InvalidMemoryRequestError(`Invalid ${field}`);
|
|
79
|
+
}
|
|
80
|
+
return [...new Set(values)];
|
|
81
|
+
}
|
|
82
|
+
function optionalBoolean(value) {
|
|
83
|
+
if (value === undefined)
|
|
84
|
+
return undefined;
|
|
85
|
+
if (value === "true")
|
|
86
|
+
return true;
|
|
87
|
+
if (value === "false")
|
|
88
|
+
return false;
|
|
89
|
+
throw new InvalidMemoryRequestError("Invalid boolean query value");
|
|
90
|
+
}
|
|
91
|
+
function optionalInteger(value, field) {
|
|
92
|
+
if (value === undefined)
|
|
93
|
+
return undefined;
|
|
94
|
+
if (!/^(?:0|[1-9]\d*)$/u.test(value)) {
|
|
95
|
+
throw new InvalidMemoryRequestError(`Invalid ${field}`);
|
|
96
|
+
}
|
|
97
|
+
const parsed = Number(value);
|
|
98
|
+
if (!Number.isSafeInteger(parsed)) {
|
|
99
|
+
throw new InvalidMemoryRequestError(`Invalid ${field}`);
|
|
100
|
+
}
|
|
101
|
+
return parsed;
|
|
102
|
+
}
|
|
103
|
+
function listFilterSignature(agent, query) {
|
|
104
|
+
return JSON.stringify({
|
|
105
|
+
agent,
|
|
106
|
+
kinds: query.kinds ? [...query.kinds].sort() : null,
|
|
107
|
+
statuses: query.statuses ? [...query.statuses].sort() : null,
|
|
108
|
+
scope: query.scope
|
|
109
|
+
? {
|
|
110
|
+
kind: query.scope.kind,
|
|
111
|
+
subjectId: query.scope.subjectId ?? null,
|
|
112
|
+
agentName: query.scope.agentName ?? null,
|
|
113
|
+
}
|
|
114
|
+
: null,
|
|
115
|
+
includeExpired: query.includeExpired === true,
|
|
116
|
+
});
|
|
117
|
+
}
|
|
118
|
+
function parseListQuery(context, agent) {
|
|
119
|
+
const url = new URL(context.req.url);
|
|
120
|
+
for (const key of url.searchParams.keys()) {
|
|
121
|
+
if (!listQueryKeys.has(key)) {
|
|
122
|
+
throw new InvalidMemoryRequestError(`Unknown Memory query field: ${key}`);
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
const get = (name) => url.searchParams.get(name) ?? undefined;
|
|
126
|
+
const scopeKind = get("scopeKind");
|
|
127
|
+
const scopeSubjectId = get("scopeSubjectId");
|
|
128
|
+
const scopeAgentName = get("scopeAgentName");
|
|
129
|
+
if (!scopeKind && (scopeSubjectId || scopeAgentName)) {
|
|
130
|
+
throw new InvalidMemoryRequestError("scopeKind is required for scope filters");
|
|
131
|
+
}
|
|
132
|
+
const scope = scopeKind
|
|
133
|
+
? normalizeMemoryScope({
|
|
134
|
+
kind: scopeKind,
|
|
135
|
+
...(scopeSubjectId ? { subjectId: scopeSubjectId } : {}),
|
|
136
|
+
...(scopeAgentName ? { agentName: scopeAgentName } : {}),
|
|
137
|
+
})
|
|
138
|
+
: undefined;
|
|
139
|
+
const query = {
|
|
140
|
+
kinds: commaList(get("kinds"), memoryKinds, "kinds"),
|
|
141
|
+
statuses: commaList(get("statuses"), memoryStatuses, "statuses"),
|
|
142
|
+
...(scope ? { scope } : {}),
|
|
143
|
+
includeExpired: optionalBoolean(get("includeExpired")),
|
|
144
|
+
limit: optionalInteger(get("limit"), "limit"),
|
|
145
|
+
};
|
|
146
|
+
const cursor = url.searchParams.has("cursor")
|
|
147
|
+
? url.searchParams.get("cursor") ?? ""
|
|
148
|
+
: undefined;
|
|
149
|
+
if (cursor !== undefined && cursor.length === 0) {
|
|
150
|
+
throw new InvalidMemoryRequestError("Invalid Memory cursor");
|
|
151
|
+
}
|
|
152
|
+
return {
|
|
153
|
+
query,
|
|
154
|
+
...(cursor === undefined ? {} : { cursor }),
|
|
155
|
+
filterSignature: listFilterSignature(agent, query),
|
|
156
|
+
};
|
|
157
|
+
}
|
|
158
|
+
const MEMORY_CURSOR_PREFIX = "m1.";
|
|
159
|
+
const MAX_MEMORY_CURSOR_CHARACTERS = 4_096;
|
|
160
|
+
function base64UrlEncode(value) {
|
|
161
|
+
const bytes = new TextEncoder().encode(value);
|
|
162
|
+
let binary = "";
|
|
163
|
+
for (const byte of bytes)
|
|
164
|
+
binary += String.fromCharCode(byte);
|
|
165
|
+
return btoa(binary)
|
|
166
|
+
.replaceAll("+", "-")
|
|
167
|
+
.replaceAll("/", "_")
|
|
168
|
+
.replace(/=+$/u, "");
|
|
169
|
+
}
|
|
170
|
+
function base64UrlDecode(value) {
|
|
171
|
+
if (!/^[A-Za-z0-9_-]+$/u.test(value)) {
|
|
172
|
+
throw new InvalidMemoryRequestError("Invalid Memory cursor");
|
|
173
|
+
}
|
|
174
|
+
const padded = value.replaceAll("-", "+").replaceAll("_", "/")
|
|
175
|
+
+ "=".repeat((4 - (value.length % 4)) % 4);
|
|
176
|
+
try {
|
|
177
|
+
const binary = atob(padded);
|
|
178
|
+
const bytes = Uint8Array.from(binary, (character) => character.charCodeAt(0));
|
|
179
|
+
const decoded = new TextDecoder("utf-8", { fatal: true }).decode(bytes);
|
|
180
|
+
if (base64UrlEncode(decoded) !== value) {
|
|
181
|
+
throw new InvalidMemoryRequestError("Invalid Memory cursor");
|
|
182
|
+
}
|
|
183
|
+
return decoded;
|
|
184
|
+
}
|
|
185
|
+
catch (error) {
|
|
186
|
+
if (error instanceof InvalidMemoryRequestError)
|
|
187
|
+
throw error;
|
|
188
|
+
throw new InvalidMemoryRequestError("Invalid Memory cursor");
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
function decodeMemoryCursor(value, filterSignature) {
|
|
192
|
+
if (value.length > MAX_MEMORY_CURSOR_CHARACTERS
|
|
193
|
+
|| !value.startsWith(MEMORY_CURSOR_PREFIX)) {
|
|
194
|
+
throw new InvalidMemoryRequestError("Invalid Memory cursor");
|
|
195
|
+
}
|
|
196
|
+
let parsed;
|
|
197
|
+
try {
|
|
198
|
+
parsed = JSON.parse(base64UrlDecode(value.slice(MEMORY_CURSOR_PREFIX.length)));
|
|
199
|
+
}
|
|
200
|
+
catch (error) {
|
|
201
|
+
if (error instanceof InvalidMemoryRequestError)
|
|
202
|
+
throw error;
|
|
203
|
+
throw new InvalidMemoryRequestError("Invalid Memory cursor");
|
|
204
|
+
}
|
|
205
|
+
if (!parsed || typeof parsed !== "object" || Array.isArray(parsed)) {
|
|
206
|
+
throw new InvalidMemoryRequestError("Invalid Memory cursor");
|
|
207
|
+
}
|
|
208
|
+
const record = parsed;
|
|
209
|
+
const keys = Object.keys(record).sort();
|
|
210
|
+
if (keys.join(",") !== "at,filter,id,v"
|
|
211
|
+
|| record.v !== 1
|
|
212
|
+
|| typeof record.at !== "string"
|
|
213
|
+
|| typeof record.id !== "string"
|
|
214
|
+
|| typeof record.filter !== "string"
|
|
215
|
+
|| record.filter !== filterSignature
|
|
216
|
+
|| record.id.length === 0
|
|
217
|
+
|| record.id.length > 256
|
|
218
|
+
|| record.id.trim() !== record.id) {
|
|
219
|
+
throw new InvalidMemoryRequestError("Invalid Memory cursor");
|
|
220
|
+
}
|
|
221
|
+
const at = new Date(record.at);
|
|
222
|
+
if (!Number.isFinite(at.getTime()) || at.toISOString() !== record.at) {
|
|
223
|
+
throw new InvalidMemoryRequestError("Invalid Memory cursor");
|
|
224
|
+
}
|
|
225
|
+
return Object.freeze({ createdAt: record.at, id: record.id });
|
|
226
|
+
}
|
|
227
|
+
function encodeMemoryCursor(value, filterSignature) {
|
|
228
|
+
const at = new Date(value.createdAt);
|
|
229
|
+
if (!Number.isFinite(at.getTime())
|
|
230
|
+
|| at.toISOString() !== value.createdAt
|
|
231
|
+
|| typeof value.id !== "string"
|
|
232
|
+
|| value.id.length === 0
|
|
233
|
+
|| value.id.length > 256
|
|
234
|
+
|| value.id.trim() !== value.id) {
|
|
235
|
+
throw new Error("Memory store returned an invalid pagination cursor");
|
|
236
|
+
}
|
|
237
|
+
const payload = {
|
|
238
|
+
v: 1,
|
|
239
|
+
at: value.createdAt,
|
|
240
|
+
id: value.id,
|
|
241
|
+
filter: filterSignature,
|
|
242
|
+
};
|
|
243
|
+
return `${MEMORY_CURSOR_PREFIX}${base64UrlEncode(JSON.stringify(payload))}`;
|
|
244
|
+
}
|
|
245
|
+
function parseSearchQuery(value) {
|
|
246
|
+
const input = object(value, searchKeys);
|
|
247
|
+
if (typeof input.query !== "string") {
|
|
248
|
+
throw new InvalidMemoryRequestError("Memory search query must be a string");
|
|
249
|
+
}
|
|
250
|
+
if (input.kinds !== undefined
|
|
251
|
+
&& (!Array.isArray(input.kinds)
|
|
252
|
+
|| input.kinds.some((kind) => typeof kind !== "string" || !memoryKinds.has(kind)))) {
|
|
253
|
+
throw new InvalidMemoryRequestError("Invalid Memory kinds");
|
|
254
|
+
}
|
|
255
|
+
return {
|
|
256
|
+
query: input.query,
|
|
257
|
+
...(input.kinds === undefined
|
|
258
|
+
? {}
|
|
259
|
+
: { kinds: input.kinds }),
|
|
260
|
+
...(input.scope === undefined
|
|
261
|
+
? {}
|
|
262
|
+
: { scope: normalizeMemoryScope(input.scope) }),
|
|
263
|
+
...(input.tokenBudget === undefined
|
|
264
|
+
? {}
|
|
265
|
+
: { tokenBudget: input.tokenBudget }),
|
|
266
|
+
...(input.maxResults === undefined
|
|
267
|
+
? {}
|
|
268
|
+
: { maxResults: input.maxResults }),
|
|
269
|
+
};
|
|
270
|
+
}
|
|
271
|
+
function parsePatch(value) {
|
|
272
|
+
const input = object(value, patchKeys);
|
|
273
|
+
if (Object.keys(input).length === 0) {
|
|
274
|
+
throw new InvalidMemoryRequestError("Memory patch cannot be empty");
|
|
275
|
+
}
|
|
276
|
+
return input;
|
|
277
|
+
}
|
|
278
|
+
function timestamp(value) {
|
|
279
|
+
const parsed = value instanceof Date ? value : new Date(value);
|
|
280
|
+
if (!Number.isFinite(parsed.getTime())) {
|
|
281
|
+
throw new MemoryContractError("Memory operation time must be valid");
|
|
282
|
+
}
|
|
283
|
+
return parsed.toISOString();
|
|
284
|
+
}
|
|
285
|
+
async function appendUsage(deps, store, context, memoryId, type) {
|
|
286
|
+
const event = {
|
|
287
|
+
id: deps.createUsageId?.() ?? `memory-usage-${nanoid(16)}`,
|
|
288
|
+
memoryId,
|
|
289
|
+
type,
|
|
290
|
+
at: timestamp(deps.now?.() ?? context.now ?? new Date()),
|
|
291
|
+
};
|
|
292
|
+
try {
|
|
293
|
+
await store.appendUsage(event, context);
|
|
294
|
+
}
|
|
295
|
+
catch (error) {
|
|
296
|
+
try {
|
|
297
|
+
await deps.onUsageError?.(error, event);
|
|
298
|
+
}
|
|
299
|
+
catch {
|
|
300
|
+
// Usage telemetry cannot change the completed Memory operation.
|
|
301
|
+
}
|
|
302
|
+
}
|
|
303
|
+
}
|
|
304
|
+
function invalidResponse(context) {
|
|
305
|
+
return context.json({
|
|
306
|
+
ok: false,
|
|
307
|
+
error: "Invalid Memory request",
|
|
308
|
+
code: "INVALID_MEMORY_REQUEST",
|
|
309
|
+
}, 400);
|
|
310
|
+
}
|
|
311
|
+
function errorResponse(context, error) {
|
|
312
|
+
if (error instanceof MemoryAuthorizationError) {
|
|
313
|
+
return context.json({
|
|
314
|
+
ok: false,
|
|
315
|
+
error: "Memory access denied",
|
|
316
|
+
code: "MEMORY_FORBIDDEN",
|
|
317
|
+
}, 403);
|
|
318
|
+
}
|
|
319
|
+
if (error instanceof MemoryConflictError) {
|
|
320
|
+
const equivalent = error.message.startsWith("An equivalent Memory item");
|
|
321
|
+
return context.json({
|
|
322
|
+
ok: false,
|
|
323
|
+
error: equivalent
|
|
324
|
+
? "An equivalent Memory item already exists"
|
|
325
|
+
: "Memory conflict",
|
|
326
|
+
code: "MEMORY_CONFLICT",
|
|
327
|
+
}, 409);
|
|
328
|
+
}
|
|
329
|
+
if (error instanceof MemoryPolicyError) {
|
|
330
|
+
return context.json({
|
|
331
|
+
ok: false,
|
|
332
|
+
error: "Memory write denied by policy",
|
|
333
|
+
code: "MEMORY_POLICY_DENIED",
|
|
334
|
+
}, 422);
|
|
335
|
+
}
|
|
336
|
+
if (error instanceof MemoryContractError
|
|
337
|
+
|| error instanceof InvalidMemoryRequestError) {
|
|
338
|
+
return invalidResponse(context);
|
|
339
|
+
}
|
|
340
|
+
return context.json({
|
|
341
|
+
ok: false,
|
|
342
|
+
error: "Memory operation failed",
|
|
343
|
+
code: "MEMORY_OPERATION_FAILED",
|
|
344
|
+
}, 500);
|
|
345
|
+
}
|
|
346
|
+
async function resolve(context, getDeps) {
|
|
347
|
+
try {
|
|
348
|
+
const agent = agentName(context);
|
|
349
|
+
const deps = getDeps(context);
|
|
350
|
+
if (!deps.memoryItemStore || typeof deps.resolveMemoryContext !== "function") {
|
|
351
|
+
return context.json({
|
|
352
|
+
ok: false,
|
|
353
|
+
error: "Typed Memory is not available",
|
|
354
|
+
code: "MEMORY_UNAVAILABLE",
|
|
355
|
+
}, 503);
|
|
356
|
+
}
|
|
357
|
+
const memoryContext = await deps.resolveMemoryContext(agent, context);
|
|
358
|
+
if (memoryContext.access.agentName !== agent) {
|
|
359
|
+
throw new MemoryAuthorizationError();
|
|
360
|
+
}
|
|
361
|
+
return {
|
|
362
|
+
deps,
|
|
363
|
+
store: deps.memoryItemStore,
|
|
364
|
+
memoryContext,
|
|
365
|
+
agent,
|
|
366
|
+
};
|
|
367
|
+
}
|
|
368
|
+
catch (error) {
|
|
369
|
+
return errorResponse(context, error);
|
|
370
|
+
}
|
|
371
|
+
}
|
|
372
|
+
/**
|
|
373
|
+
* Host-neutral typed Memory API. Authentication and tenant/external-user
|
|
374
|
+
* scoping are supplied by the composition root through `resolveMemoryContext`.
|
|
375
|
+
*/
|
|
376
|
+
export function memoryItemRoutes(getDeps) {
|
|
377
|
+
const app = new Hono();
|
|
378
|
+
app.get("/agents/:agentName/memory/items", async (context) => {
|
|
379
|
+
const resolved = await resolve(context, getDeps);
|
|
380
|
+
if (resolved instanceof Response)
|
|
381
|
+
return resolved;
|
|
382
|
+
try {
|
|
383
|
+
const parsed = parseListQuery(context, resolved.agent);
|
|
384
|
+
if (parsed.cursor !== undefined && !resolved.store.listPage) {
|
|
385
|
+
return context.json({
|
|
386
|
+
ok: false,
|
|
387
|
+
error: "Memory pagination is not available",
|
|
388
|
+
code: "MEMORY_PAGINATION_UNAVAILABLE",
|
|
389
|
+
}, 503);
|
|
390
|
+
}
|
|
391
|
+
if (!resolved.store.listPage) {
|
|
392
|
+
const items = await resolved.store.list(parsed.query, resolved.memoryContext);
|
|
393
|
+
return context.json({
|
|
394
|
+
ok: true,
|
|
395
|
+
data: { items, nextCursor: null },
|
|
396
|
+
}, 200);
|
|
397
|
+
}
|
|
398
|
+
const pageQuery = {
|
|
399
|
+
...parsed.query,
|
|
400
|
+
...(parsed.cursor === undefined
|
|
401
|
+
? {}
|
|
402
|
+
: {
|
|
403
|
+
after: decodeMemoryCursor(parsed.cursor, parsed.filterSignature),
|
|
404
|
+
}),
|
|
405
|
+
};
|
|
406
|
+
const page = await resolved.store.listPage(pageQuery, resolved.memoryContext);
|
|
407
|
+
const nextCursor = page.nextCursor
|
|
408
|
+
? encodeMemoryCursor(page.nextCursor, parsed.filterSignature)
|
|
409
|
+
: null;
|
|
410
|
+
return context.json({
|
|
411
|
+
ok: true,
|
|
412
|
+
data: { items: page.items, nextCursor },
|
|
413
|
+
}, 200);
|
|
414
|
+
}
|
|
415
|
+
catch (error) {
|
|
416
|
+
return errorResponse(context, error);
|
|
417
|
+
}
|
|
418
|
+
});
|
|
419
|
+
app.post("/agents/:agentName/memory/items", async (context) => {
|
|
420
|
+
const resolved = await resolve(context, getDeps);
|
|
421
|
+
if (resolved instanceof Response)
|
|
422
|
+
return resolved;
|
|
423
|
+
try {
|
|
424
|
+
const input = await jsonObject(context, createKeys);
|
|
425
|
+
const item = createMemoryItem(input, {
|
|
426
|
+
createId: resolved.deps.createId,
|
|
427
|
+
now: resolved.deps.now,
|
|
428
|
+
});
|
|
429
|
+
const duplicate = await resolved.store.findDedupeCandidate(item, resolved.memoryContext);
|
|
430
|
+
if (duplicate) {
|
|
431
|
+
throw new MemoryConflictError("An equivalent Memory item already exists");
|
|
432
|
+
}
|
|
433
|
+
const created = await resolved.store.create(item, resolved.memoryContext);
|
|
434
|
+
await appendUsage(resolved.deps, resolved.store, resolved.memoryContext, created.id, "written");
|
|
435
|
+
return context.json({ ok: true, data: { item: created } }, 201);
|
|
436
|
+
}
|
|
437
|
+
catch (error) {
|
|
438
|
+
return errorResponse(context, error);
|
|
439
|
+
}
|
|
440
|
+
});
|
|
441
|
+
app.post("/agents/:agentName/memory/search", async (context) => {
|
|
442
|
+
const resolved = await resolve(context, getDeps);
|
|
443
|
+
if (resolved instanceof Response)
|
|
444
|
+
return resolved;
|
|
445
|
+
try {
|
|
446
|
+
const input = await jsonObject(context, searchKeys);
|
|
447
|
+
const results = await resolved.store.search(parseSearchQuery(input), resolved.memoryContext);
|
|
448
|
+
for (const result of results) {
|
|
449
|
+
await appendUsage(resolved.deps, resolved.store, resolved.memoryContext, result.item.id, "retrieved");
|
|
450
|
+
}
|
|
451
|
+
return context.json({ ok: true, data: { results } }, 200);
|
|
452
|
+
}
|
|
453
|
+
catch (error) {
|
|
454
|
+
return errorResponse(context, error);
|
|
455
|
+
}
|
|
456
|
+
});
|
|
457
|
+
app.patch("/agents/:agentName/memory/items/:itemId", async (context) => {
|
|
458
|
+
const resolved = await resolve(context, getDeps);
|
|
459
|
+
if (resolved instanceof Response)
|
|
460
|
+
return resolved;
|
|
461
|
+
try {
|
|
462
|
+
const itemId = context.req.param("itemId");
|
|
463
|
+
const patch = parsePatch(await jsonObject(context, patchKeys));
|
|
464
|
+
const item = await resolved.store.update(itemId, patch, resolved.memoryContext);
|
|
465
|
+
if (!item) {
|
|
466
|
+
return context.json({
|
|
467
|
+
ok: false,
|
|
468
|
+
error: "Memory item not found",
|
|
469
|
+
code: "MEMORY_NOT_FOUND",
|
|
470
|
+
}, 404);
|
|
471
|
+
}
|
|
472
|
+
await appendUsage(resolved.deps, resolved.store, resolved.memoryContext, item.id, "updated");
|
|
473
|
+
return context.json({ ok: true, data: { item } }, 200);
|
|
474
|
+
}
|
|
475
|
+
catch (error) {
|
|
476
|
+
return errorResponse(context, error);
|
|
477
|
+
}
|
|
478
|
+
});
|
|
479
|
+
app.delete("/agents/:agentName/memory/items/:itemId", async (context) => {
|
|
480
|
+
const resolved = await resolve(context, getDeps);
|
|
481
|
+
if (resolved instanceof Response)
|
|
482
|
+
return resolved;
|
|
483
|
+
try {
|
|
484
|
+
const itemId = context.req.param("itemId");
|
|
485
|
+
const forgotten = await resolved.store.forget(itemId, resolved.memoryContext);
|
|
486
|
+
if (!forgotten) {
|
|
487
|
+
return context.json({
|
|
488
|
+
ok: false,
|
|
489
|
+
error: "Memory item not found",
|
|
490
|
+
code: "MEMORY_NOT_FOUND",
|
|
491
|
+
}, 404);
|
|
492
|
+
}
|
|
493
|
+
await appendUsage(resolved.deps, resolved.store, resolved.memoryContext, itemId, "forgotten");
|
|
494
|
+
return context.json({
|
|
495
|
+
ok: true,
|
|
496
|
+
data: { forgotten: true, itemId },
|
|
497
|
+
}, 200);
|
|
498
|
+
}
|
|
499
|
+
catch (error) {
|
|
500
|
+
return errorResponse(context, error);
|
|
501
|
+
}
|
|
502
|
+
});
|
|
503
|
+
return app;
|
|
504
|
+
}
|
|
505
|
+
//# sourceMappingURL=memory-items.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"memory-items.js","sourceRoot":"","sources":["../../src/routes/memory-items.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"memory-items.test.d.ts","sourceRoot":"","sources":["../../src/routes/memory-items.test.ts"],"names":[],"mappings":""}
|