@tangle-network/agent-knowledge 1.6.0 → 1.8.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.
@@ -0,0 +1,585 @@
1
+ import {
2
+ sha256,
3
+ stableId
4
+ } from "./chunk-YMKHCTS2.js";
5
+
6
+ // src/memory/source-record.ts
7
+ function memoryHitToSourceRecord(hit, options = {}) {
8
+ const contentHash = sha256(`${hit.uri}
9
+ ${hit.text}`);
10
+ return {
11
+ id: stableId("src", `${hit.uri}:${contentHash}`),
12
+ uri: hit.uri,
13
+ title: hit.title ?? `${hit.kind}:${hit.id}`,
14
+ mediaType: "text/plain",
15
+ contentHash,
16
+ text: hit.text,
17
+ validUntil: hit.validUntil,
18
+ lastVerifiedAt: hit.lastVerifiedAt,
19
+ createdAt: (options.now ?? (() => /* @__PURE__ */ new Date()))().toISOString(),
20
+ metadata: {
21
+ ...hit.metadata ?? {},
22
+ source: "agent-memory",
23
+ memoryId: hit.id,
24
+ memoryKind: hit.kind,
25
+ score: hit.score,
26
+ normalizedScore: hit.normalizedScore,
27
+ confidence: hit.confidence,
28
+ scope: options.scope
29
+ }
30
+ };
31
+ }
32
+ function memoryWriteResultToSourceRecord(result, text, options = {}) {
33
+ return memoryHitToSourceRecord(
34
+ {
35
+ id: result.id,
36
+ uri: result.uri,
37
+ kind: result.kind,
38
+ text,
39
+ metadata: result.metadata
40
+ },
41
+ options
42
+ );
43
+ }
44
+
45
+ // src/memory/adapter.ts
46
+ async function defaultGetMemoryContext(adapter, query, options = {}) {
47
+ const hits = await adapter.search(query, options);
48
+ return {
49
+ query,
50
+ hits,
51
+ sourceRecords: hits.map((hit) => memoryHitToSourceRecord(hit, { scope: options.scope })),
52
+ text: renderMemoryContext(hits)
53
+ };
54
+ }
55
+ function renderMemoryContext(hits) {
56
+ return hits.map((hit, index) => {
57
+ const label = hit.title ?? `${hit.kind}:${hit.id}`;
58
+ const score = typeof hit.normalizedScore === "number" ? ` score=${hit.normalizedScore.toFixed(3)}` : "";
59
+ return [`[${index + 1}] ${label}${score}`, hit.text].join("\n");
60
+ }).join("\n\n");
61
+ }
62
+
63
+ // src/memory/neo4j.ts
64
+ function createNeo4jAgentMemoryAdapter(options) {
65
+ const client = options.client;
66
+ const id = options.id ?? "neo4j-agent-memory";
67
+ return {
68
+ id,
69
+ async search(query, searchOptions = {}) {
70
+ const sdkHits = await searchNeo4jMemory(client, query, searchOptions, id);
71
+ if (sdkHits.length > 0) return sdkHits;
72
+ const result = await callOptional(
73
+ client,
74
+ ["search", "memory_search"],
75
+ [query, neo4jOptions(searchOptions)]
76
+ );
77
+ if (result !== void 0) return normalizeHits(result, searchOptions, id);
78
+ const context = await callOptional(
79
+ client,
80
+ ["getContext", "get_context"],
81
+ [query, neo4jOptions(searchOptions)]
82
+ );
83
+ if (context !== void 0) return normalizeHits(context, searchOptions, id);
84
+ return [];
85
+ },
86
+ async getContext(query, searchOptions = {}) {
87
+ const shortTerm = nested(client, ["shortTerm", "short_term"], {});
88
+ const sessionId = searchOptions.scope?.sessionId;
89
+ if (sessionId) {
90
+ const conversationContext = await callOptional(
91
+ shortTerm,
92
+ ["getContext", "get_context"],
93
+ [sessionId]
94
+ );
95
+ if (conversationContext !== void 0) {
96
+ const hits2 = normalizeConversationContextHits(conversationContext, searchOptions, id);
97
+ const text = textFromConversationContext(conversationContext) ?? (typeof conversationContext === "string" ? conversationContext : hits2.length > 0 ? renderHits(hits2) : "");
98
+ return {
99
+ query,
100
+ text,
101
+ hits: hits2,
102
+ sourceRecords: hits2.map(
103
+ (hit) => memoryHitToSourceRecord(hit, { scope: searchOptions.scope })
104
+ ),
105
+ metadata: { adapter: id, rawContext: conversationContext }
106
+ };
107
+ }
108
+ }
109
+ const result = await callOptional(
110
+ client,
111
+ ["getContext", "get_context"],
112
+ [query, neo4jOptions(searchOptions)]
113
+ );
114
+ if (result === void 0) {
115
+ return defaultGetMemoryContext(
116
+ {
117
+ search: async () => {
118
+ const sdkHits = await searchNeo4jMemory(client, query, searchOptions, id);
119
+ if (sdkHits.length > 0) return sdkHits;
120
+ const searchResult = await callOptional(
121
+ client,
122
+ ["search", "memory_search"],
123
+ [query, neo4jOptions(searchOptions)]
124
+ );
125
+ return normalizeHits(searchResult, searchOptions, id);
126
+ }
127
+ },
128
+ query,
129
+ searchOptions
130
+ );
131
+ }
132
+ if (typeof result === "string") {
133
+ const hit = {
134
+ id: stableId("mem", `${id}:${query}:${result}`),
135
+ uri: `memory://${id}/context/${stableId("ctx", query)}`,
136
+ kind: "fact",
137
+ text: result,
138
+ title: "Memory context",
139
+ normalizedScore: 1
140
+ };
141
+ return {
142
+ query,
143
+ text: result,
144
+ hits: [hit],
145
+ sourceRecords: [memoryHitToSourceRecord(hit, { scope: searchOptions.scope })],
146
+ metadata: { adapter: id }
147
+ };
148
+ }
149
+ const hits = normalizeHits(result, searchOptions, id);
150
+ if (hits.length > 0)
151
+ return defaultGetMemoryContext({ search: async () => hits }, query, searchOptions);
152
+ return defaultGetMemoryContext({ search: async () => [] }, query, searchOptions);
153
+ },
154
+ async write(input) {
155
+ const result = await writeNeo4jMemory(client, input, id);
156
+ return {
157
+ ...result,
158
+ sourceRecord: memoryWriteResultToSourceRecord(result, input.text, { scope: input.scope })
159
+ };
160
+ }
161
+ };
162
+ }
163
+ async function writeNeo4jMemory(client, input, adapterId) {
164
+ const scope = input.scope ?? {};
165
+ const sessionId = scope.sessionId ?? input.metadata?.sessionId;
166
+ let result;
167
+ if (input.kind === "message") {
168
+ const shortTerm = nested(client, ["shortTerm", "short_term"], client);
169
+ result = await callOptional(
170
+ shortTerm,
171
+ ["addMessage"],
172
+ [
173
+ sessionId,
174
+ input.role ?? "user",
175
+ input.text,
176
+ {
177
+ metadata: input.metadata,
178
+ conversationId: sessionId,
179
+ userId: scope.userId
180
+ }
181
+ ]
182
+ );
183
+ if (result === void 0) {
184
+ result = await callRequired(
185
+ shortTerm,
186
+ ["add_message"],
187
+ [
188
+ {
189
+ session_id: sessionId,
190
+ sessionId,
191
+ role: input.role ?? "user",
192
+ content: input.text,
193
+ user_identifier: scope.userId,
194
+ userIdentifier: scope.userId,
195
+ metadata: input.metadata
196
+ }
197
+ ]
198
+ );
199
+ }
200
+ } else if (input.kind === "entity") {
201
+ const longTerm = nested(client, ["longTerm", "long_term"], client);
202
+ result = await callOptional(
203
+ longTerm,
204
+ ["addEntity"],
205
+ [
206
+ input.entityName ?? input.title ?? input.text,
207
+ input.entityType ?? "ENTITY",
208
+ neo4jEntityOptions(input)
209
+ ]
210
+ );
211
+ if (result === void 0) {
212
+ result = await callRequired(
213
+ longTerm,
214
+ ["add_entity"],
215
+ [
216
+ input.entityName ?? input.title ?? input.text,
217
+ input.entityType ?? "ENTITY",
218
+ neo4jWriteOptions(input)
219
+ ]
220
+ );
221
+ }
222
+ } else if (input.kind === "preference") {
223
+ const longTerm = nested(client, ["longTerm", "long_term"], client);
224
+ result = await callOptional(
225
+ longTerm,
226
+ ["addPreference"],
227
+ [input.category ?? "general", input.text, neo4jPreferenceOptions(input)]
228
+ );
229
+ if (result === void 0) {
230
+ result = await callRequired(
231
+ longTerm,
232
+ ["add_preference"],
233
+ [input.category ?? "general", input.text, neo4jWriteOptions(input)]
234
+ );
235
+ }
236
+ } else {
237
+ result = await callRequired(
238
+ nested(client, ["longTerm", "long_term"], client),
239
+ ["addFact", "add_fact"],
240
+ [
241
+ input.subject ?? input.title ?? input.kind,
242
+ input.predicate ?? "states",
243
+ input.object ?? input.text
244
+ ]
245
+ );
246
+ }
247
+ const id = idFromResult(result) ?? input.id ?? stableId("mem", `${input.kind}:${input.text}`);
248
+ return {
249
+ accepted: true,
250
+ id,
251
+ uri: `memory://${adapterId}/${encodeURIComponent(id)}`,
252
+ kind: input.kind,
253
+ metadata: { rawResult: result }
254
+ };
255
+ }
256
+ async function searchNeo4jMemory(client, query, options, adapterId) {
257
+ const searches = [];
258
+ const kinds = options.kinds;
259
+ const includeKind = (kind) => !kinds?.length || kinds.includes(kind);
260
+ const shortTerm = nested(client, ["shortTerm", "short_term"], {});
261
+ const longTerm = nested(client, ["longTerm", "long_term"], {});
262
+ const reasoning = nested(client, ["reasoning"], {});
263
+ if (includeKind("message")) {
264
+ searches.push(
265
+ callOptional(
266
+ shortTerm,
267
+ ["searchMessages", "search_messages"],
268
+ [query, searchMessagesOptions(options)]
269
+ ).then((result) => normalizeHits(result, { ...options, kinds: ["message"] }, adapterId))
270
+ );
271
+ }
272
+ if (includeKind("entity")) {
273
+ searches.push(
274
+ callOptional(
275
+ longTerm,
276
+ ["searchEntities", "search_entities"],
277
+ [query, searchEntitiesOptions(options)]
278
+ ).then((result) => normalizeHits(result, { ...options, kinds: ["entity"] }, adapterId))
279
+ );
280
+ }
281
+ if (includeKind("preference")) {
282
+ searches.push(
283
+ callOptional(
284
+ longTerm,
285
+ ["searchPreferences", "search_preferences"],
286
+ [query, searchPreferencesOptions(options)]
287
+ ).then((result) => normalizeHits(result, { ...options, kinds: ["preference"] }, adapterId))
288
+ );
289
+ }
290
+ if (includeKind("reasoning-trace")) {
291
+ searches.push(
292
+ callOptional(
293
+ reasoning,
294
+ ["getSimilarTraces", "get_similar_traces"],
295
+ [query, similarTracesOptions(options)]
296
+ ).then(
297
+ (result) => normalizeHits(result, { ...options, kinds: ["reasoning-trace"] }, adapterId)
298
+ )
299
+ );
300
+ }
301
+ const hits = (await Promise.all(searches)).flat();
302
+ return hits.sort((a, b) => (b.normalizedScore ?? b.score ?? 0) - (a.normalizedScore ?? a.score ?? 0)).slice(0, options.limit);
303
+ }
304
+ function neo4jOptions(options) {
305
+ return {
306
+ limit: options.limit,
307
+ k: options.limit,
308
+ min_score: options.minScore,
309
+ minScore: options.minScore,
310
+ user_identifier: options.scope?.userId,
311
+ userIdentifier: options.scope?.userId,
312
+ session_id: options.scope?.sessionId,
313
+ sessionId: options.scope?.sessionId,
314
+ namespace: options.scope?.namespace,
315
+ tenant_id: options.scope?.tenantId,
316
+ tenantId: options.scope?.tenantId,
317
+ kinds: options.kinds,
318
+ metadata: options.metadata
319
+ };
320
+ }
321
+ function searchMessagesOptions(options) {
322
+ return {
323
+ limit: options.limit,
324
+ sessionId: options.scope?.sessionId,
325
+ conversationId: options.scope?.sessionId,
326
+ threshold: options.minScore,
327
+ metadata: options.metadata
328
+ };
329
+ }
330
+ function searchEntitiesOptions(options) {
331
+ return {
332
+ limit: options.limit,
333
+ type: options.metadata?.type
334
+ };
335
+ }
336
+ function searchPreferencesOptions(options) {
337
+ return {
338
+ limit: options.limit,
339
+ category: options.metadata?.category
340
+ };
341
+ }
342
+ function similarTracesOptions(options) {
343
+ return {
344
+ limit: options.limit,
345
+ sessionId: options.scope?.sessionId,
346
+ successOnly: options.metadata?.successOnly
347
+ };
348
+ }
349
+ function neo4jWriteOptions(input) {
350
+ return {
351
+ user_identifier: input.scope?.userId,
352
+ userIdentifier: input.scope?.userId,
353
+ session_id: input.scope?.sessionId,
354
+ sessionId: input.scope?.sessionId,
355
+ namespace: input.scope?.namespace,
356
+ confidence: input.confidence,
357
+ metadata: input.metadata
358
+ };
359
+ }
360
+ function neo4jEntityOptions(input) {
361
+ return {
362
+ description: input.metadata?.description ?? input.title
363
+ };
364
+ }
365
+ function neo4jPreferenceOptions(input) {
366
+ return {
367
+ context: input.metadata?.context ?? input.title
368
+ };
369
+ }
370
+ async function callOptional(target, names, args) {
371
+ for (const name of names) {
372
+ const fn = target[name];
373
+ if (typeof fn === "function") return await fn.apply(target, args);
374
+ }
375
+ return void 0;
376
+ }
377
+ async function callRequired(target, names, args) {
378
+ const result = await callOptional(target, names, args);
379
+ if (result !== void 0) return result;
380
+ throw new Error(`Neo4j agent-memory client is missing method ${names.join(" or ")}`);
381
+ }
382
+ function nested(target, names, fallback) {
383
+ for (const name of names) {
384
+ const value = target[name];
385
+ if (value && typeof value === "object") return value;
386
+ }
387
+ return fallback;
388
+ }
389
+ function normalizeHits(value, options, adapterId) {
390
+ const rawHits = rawHitsFrom(value);
391
+ return rawHits.map((hit, index) => normalizeHit(hit, index, adapterId)).filter((hit) => hit !== null).filter(
392
+ (hit) => options.minScore === void 0 ? true : (hit.normalizedScore ?? hit.score ?? 0) >= options.minScore
393
+ ).filter((hit) => options.kinds?.length ? options.kinds.includes(hit.kind) : true).slice(0, options.limit);
394
+ }
395
+ function normalizeHit(value, index, adapterId) {
396
+ if (typeof value === "string") {
397
+ return {
398
+ id: stableId("mem", value),
399
+ uri: `memory://${adapterId}/${stableId("mem", value)}`,
400
+ kind: "fact",
401
+ text: value,
402
+ normalizedScore: index === 0 ? 1 : void 0
403
+ };
404
+ }
405
+ const obj = record(value);
406
+ if (!obj) return null;
407
+ const kind = memoryKind(stringField(obj, ["kind", "type", "label"]), obj);
408
+ const text = textFromHitObject(obj, kind);
409
+ if (!text) return null;
410
+ const id = stringField(obj, ["id", "memoryId", "uuid"]) ?? stableId("mem", text);
411
+ return {
412
+ id,
413
+ uri: stringField(obj, ["uri"]) ?? `memory://${adapterId}/${encodeURIComponent(id)}`,
414
+ kind,
415
+ text,
416
+ title: stringField(obj, ["title", "name", "task", "subject"]),
417
+ score: numberField(obj, ["score"]),
418
+ normalizedScore: numberField(obj, ["normalizedScore", "normalized_score"]),
419
+ confidence: numberField(obj, ["confidence"]),
420
+ createdAt: stringField(obj, ["createdAt", "created_at"]),
421
+ validUntil: stringField(obj, ["validUntil", "valid_until"]),
422
+ lastVerifiedAt: stringField(obj, ["lastVerifiedAt", "last_verified_at"]),
423
+ metadata: obj
424
+ };
425
+ }
426
+ function memoryKind(value, obj = {}) {
427
+ if (value === "message" || value === "entity" || value === "fact" || value === "preference" || value === "observation" || value === "reasoning-trace") {
428
+ return value;
429
+ }
430
+ if ("role" in obj && "content" in obj) return "message";
431
+ if ("name" in obj && ("type" in obj || "entityType" in obj)) return "entity";
432
+ if ("preference" in obj && "category" in obj) return "preference";
433
+ if ("task" in obj && "steps" in obj) return "reasoning-trace";
434
+ return "fact";
435
+ }
436
+ function rawHitsFrom(value) {
437
+ if (Array.isArray(value)) return value;
438
+ const obj = record(value);
439
+ if (!obj) return typeof value === "string" ? [value] : [];
440
+ if (Array.isArray(obj.hits)) return obj.hits;
441
+ if (Array.isArray(obj.results)) return obj.results;
442
+ if (Array.isArray(obj.messages)) return obj.messages;
443
+ if (Array.isArray(obj.recentMessages)) return obj.recentMessages;
444
+ if (Array.isArray(obj.observations)) return obj.observations;
445
+ if (Array.isArray(obj.reflections)) return obj.reflections;
446
+ if (typeof obj.content === "string" || typeof obj.text === "string") return [obj];
447
+ return [];
448
+ }
449
+ function textFromHitObject(obj, kind) {
450
+ const direct = stringField(obj, [
451
+ "text",
452
+ "content",
453
+ "body",
454
+ "summary",
455
+ "preference",
456
+ "description"
457
+ ]);
458
+ if (direct) return direct;
459
+ if (kind === "entity") return stringField(obj, ["name"]);
460
+ if (kind === "fact") {
461
+ const subject = stringField(obj, ["subject"]);
462
+ const predicate = stringField(obj, ["predicate"]);
463
+ const object = stringField(obj, ["object", "obj"]);
464
+ if (subject && predicate && object) return `${subject} ${predicate} ${object}`;
465
+ }
466
+ if (kind === "reasoning-trace") {
467
+ const task = stringField(obj, ["task"]);
468
+ const outcome = stringField(obj, ["outcome"]);
469
+ return [task, outcome].filter(Boolean).join("\n") || void 0;
470
+ }
471
+ return void 0;
472
+ }
473
+ function textFromConversationContext(value) {
474
+ const obj = record(value);
475
+ if (!obj) return void 0;
476
+ const parts = [
477
+ ...rawHitsFrom(obj.reflections).map((hit) => normalizeContextPart(hit)),
478
+ ...rawHitsFrom(obj.observations).map((hit) => normalizeContextPart(hit)),
479
+ ...rawHitsFrom(obj.recentMessages).map((hit) => normalizeContextPart(hit))
480
+ ].filter(Boolean);
481
+ return parts.length > 0 ? parts.join("\n\n") : void 0;
482
+ }
483
+ function normalizeConversationContextHits(value, options, adapterId) {
484
+ const obj = record(value);
485
+ if (!obj) return normalizeHits(value, options, adapterId);
486
+ const raw = [
487
+ ...rawHitsFrom(obj.reflections).map((hit) => tagContextHit(hit, "observation", "Reflection")),
488
+ ...rawHitsFrom(obj.observations).map((hit) => tagContextHit(hit, "observation", "Observation")),
489
+ ...rawHitsFrom(obj.recentMessages).map((hit) => tagContextHit(hit, "message"))
490
+ ];
491
+ return raw.length > 0 ? normalizeHits(raw, options, adapterId) : normalizeHits(value, options, adapterId);
492
+ }
493
+ function tagContextHit(value, kind, title) {
494
+ return value && typeof value === "object" && !Array.isArray(value) ? { kind, title, ...value } : { kind, title, content: value };
495
+ }
496
+ function normalizeContextPart(value) {
497
+ if (typeof value === "string") return value;
498
+ const obj = record(value);
499
+ return obj ? textFromHitObject(obj, memoryKind(stringField(obj, ["kind", "type", "label"]), obj)) : void 0;
500
+ }
501
+ function renderHits(hits) {
502
+ return hits.map((hit) => hit.text).join("\n\n");
503
+ }
504
+ function idFromResult(value) {
505
+ const obj = record(value);
506
+ return obj ? stringField(obj, ["id", "memoryId", "uuid"]) : void 0;
507
+ }
508
+ function record(value) {
509
+ return value && typeof value === "object" && !Array.isArray(value) ? value : null;
510
+ }
511
+ function stringField(obj, names) {
512
+ for (const name of names) {
513
+ const value = obj[name];
514
+ if (typeof value === "string" && value.length > 0) return value;
515
+ }
516
+ return void 0;
517
+ }
518
+ function numberField(obj, names) {
519
+ for (const name of names) {
520
+ const value = obj[name];
521
+ if (typeof value === "number" && Number.isFinite(value)) return value;
522
+ }
523
+ return void 0;
524
+ }
525
+
526
+ // src/memory/schemas.ts
527
+ import { z } from "zod";
528
+ var AgentMemoryKindSchema = z.enum([
529
+ "message",
530
+ "entity",
531
+ "fact",
532
+ "preference",
533
+ "observation",
534
+ "reasoning-trace"
535
+ ]);
536
+ var AgentMemoryScopeSchema = z.object({
537
+ tenantId: z.string().optional(),
538
+ userId: z.string().optional(),
539
+ sessionId: z.string().optional(),
540
+ namespace: z.string().optional(),
541
+ tags: z.record(z.string(), z.string()).optional()
542
+ });
543
+ var AgentMemoryHitSchema = z.object({
544
+ id: z.string().min(1),
545
+ uri: z.string().min(1),
546
+ kind: AgentMemoryKindSchema,
547
+ text: z.string().min(1),
548
+ title: z.string().optional(),
549
+ score: z.number().optional(),
550
+ normalizedScore: z.number().optional(),
551
+ confidence: z.number().optional(),
552
+ createdAt: z.string().optional(),
553
+ validUntil: z.string().optional(),
554
+ lastVerifiedAt: z.string().optional(),
555
+ metadata: z.record(z.string(), z.unknown()).optional()
556
+ });
557
+ var AgentMemoryWriteInputSchema = z.object({
558
+ kind: AgentMemoryKindSchema,
559
+ text: z.string().min(1),
560
+ id: z.string().optional(),
561
+ title: z.string().optional(),
562
+ role: z.enum(["system", "user", "assistant", "tool"]).optional(),
563
+ entityName: z.string().optional(),
564
+ entityType: z.string().optional(),
565
+ category: z.string().optional(),
566
+ predicate: z.string().optional(),
567
+ subject: z.string().optional(),
568
+ object: z.string().optional(),
569
+ confidence: z.number().min(0).max(1).optional(),
570
+ scope: AgentMemoryScopeSchema.optional(),
571
+ metadata: z.record(z.string(), z.unknown()).optional()
572
+ });
573
+
574
+ export {
575
+ memoryHitToSourceRecord,
576
+ memoryWriteResultToSourceRecord,
577
+ defaultGetMemoryContext,
578
+ renderMemoryContext,
579
+ createNeo4jAgentMemoryAdapter,
580
+ AgentMemoryKindSchema,
581
+ AgentMemoryScopeSchema,
582
+ AgentMemoryHitSchema,
583
+ AgentMemoryWriteInputSchema
584
+ };
585
+ //# sourceMappingURL=chunk-U6KQ4FS3.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/memory/source-record.ts","../src/memory/adapter.ts","../src/memory/neo4j.ts","../src/memory/schemas.ts"],"sourcesContent":["import { sha256, stableId } from '../ids'\nimport type { SourceRecord } from '../types'\nimport type { AgentMemoryHit, AgentMemoryScope, AgentMemoryWriteResult } from './types'\n\nexport function memoryHitToSourceRecord(\n hit: AgentMemoryHit,\n options: { now?: () => Date; scope?: AgentMemoryScope } = {},\n): SourceRecord {\n const contentHash = sha256(`${hit.uri}\\n${hit.text}`)\n return {\n id: stableId('src', `${hit.uri}:${contentHash}`),\n uri: hit.uri,\n title: hit.title ?? `${hit.kind}:${hit.id}`,\n mediaType: 'text/plain',\n contentHash,\n text: hit.text,\n validUntil: hit.validUntil,\n lastVerifiedAt: hit.lastVerifiedAt,\n createdAt: (options.now ?? (() => new Date()))().toISOString(),\n metadata: {\n ...(hit.metadata ?? {}),\n source: 'agent-memory',\n memoryId: hit.id,\n memoryKind: hit.kind,\n score: hit.score,\n normalizedScore: hit.normalizedScore,\n confidence: hit.confidence,\n scope: options.scope,\n },\n }\n}\n\nexport function memoryWriteResultToSourceRecord(\n result: AgentMemoryWriteResult,\n text: string,\n options: { now?: () => Date; scope?: AgentMemoryScope } = {},\n): SourceRecord {\n return memoryHitToSourceRecord(\n {\n id: result.id,\n uri: result.uri,\n kind: result.kind,\n text,\n metadata: result.metadata,\n },\n options,\n )\n}\n","import { memoryHitToSourceRecord } from './source-record'\nimport type {\n AgentMemoryAdapter,\n AgentMemoryContext,\n AgentMemoryHit,\n AgentMemorySearchOptions,\n} from './types'\n\nexport async function defaultGetMemoryContext(\n adapter: Pick<AgentMemoryAdapter, 'search'>,\n query: string,\n options: AgentMemorySearchOptions = {},\n): Promise<AgentMemoryContext> {\n const hits = await adapter.search(query, options)\n return {\n query,\n hits,\n sourceRecords: hits.map((hit) => memoryHitToSourceRecord(hit, { scope: options.scope })),\n text: renderMemoryContext(hits),\n }\n}\n\nexport function renderMemoryContext(hits: AgentMemoryHit[]): string {\n return hits\n .map((hit, index) => {\n const label = hit.title ?? `${hit.kind}:${hit.id}`\n const score =\n typeof hit.normalizedScore === 'number' ? ` score=${hit.normalizedScore.toFixed(3)}` : ''\n return [`[${index + 1}] ${label}${score}`, hit.text].join('\\n')\n })\n .join('\\n\\n')\n}\n","import { stableId } from '../ids'\nimport { defaultGetMemoryContext } from './adapter'\nimport { memoryHitToSourceRecord, memoryWriteResultToSourceRecord } from './source-record'\nimport type {\n AgentMemoryAdapter,\n AgentMemoryHit,\n AgentMemorySearchOptions,\n AgentMemoryWriteInput,\n AgentMemoryWriteResult,\n} from './types'\n\nexport interface Neo4jAgentMemoryAdapterOptions {\n client: Record<string, unknown>\n id?: string\n}\n\nexport function createNeo4jAgentMemoryAdapter(\n options: Neo4jAgentMemoryAdapterOptions,\n): AgentMemoryAdapter {\n const client = options.client\n const id = options.id ?? 'neo4j-agent-memory'\n return {\n id,\n async search(query, searchOptions = {}) {\n const sdkHits = await searchNeo4jMemory(client, query, searchOptions, id)\n if (sdkHits.length > 0) return sdkHits\n\n const result = await callOptional(\n client,\n ['search', 'memory_search'],\n [query, neo4jOptions(searchOptions)],\n )\n if (result !== undefined) return normalizeHits(result, searchOptions, id)\n\n const context = await callOptional(\n client,\n ['getContext', 'get_context'],\n [query, neo4jOptions(searchOptions)],\n )\n if (context !== undefined) return normalizeHits(context, searchOptions, id)\n return []\n },\n async getContext(query, searchOptions = {}) {\n const shortTerm = nested(client, ['shortTerm', 'short_term'], {})\n const sessionId = searchOptions.scope?.sessionId\n if (sessionId) {\n const conversationContext = await callOptional(\n shortTerm,\n ['getContext', 'get_context'],\n [sessionId],\n )\n if (conversationContext !== undefined) {\n const hits = normalizeConversationContextHits(conversationContext, searchOptions, id)\n const text =\n textFromConversationContext(conversationContext) ??\n (typeof conversationContext === 'string'\n ? conversationContext\n : hits.length > 0\n ? renderHits(hits)\n : '')\n return {\n query,\n text,\n hits,\n sourceRecords: hits.map((hit) =>\n memoryHitToSourceRecord(hit, { scope: searchOptions.scope }),\n ),\n metadata: { adapter: id, rawContext: conversationContext },\n }\n }\n }\n\n const result = await callOptional(\n client,\n ['getContext', 'get_context'],\n [query, neo4jOptions(searchOptions)],\n )\n if (result === undefined) {\n return defaultGetMemoryContext(\n {\n search: async () => {\n const sdkHits = await searchNeo4jMemory(client, query, searchOptions, id)\n if (sdkHits.length > 0) return sdkHits\n const searchResult = await callOptional(\n client,\n ['search', 'memory_search'],\n [query, neo4jOptions(searchOptions)],\n )\n return normalizeHits(searchResult, searchOptions, id)\n },\n },\n query,\n searchOptions,\n )\n }\n if (typeof result === 'string') {\n const hit: AgentMemoryHit = {\n id: stableId('mem', `${id}:${query}:${result}`),\n uri: `memory://${id}/context/${stableId('ctx', query)}`,\n kind: 'fact',\n text: result,\n title: 'Memory context',\n normalizedScore: 1,\n }\n return {\n query,\n text: result,\n hits: [hit],\n sourceRecords: [memoryHitToSourceRecord(hit, { scope: searchOptions.scope })],\n metadata: { adapter: id },\n }\n }\n const hits = normalizeHits(result, searchOptions, id)\n if (hits.length > 0)\n return defaultGetMemoryContext({ search: async () => hits }, query, searchOptions)\n return defaultGetMemoryContext({ search: async () => [] }, query, searchOptions)\n },\n async write(input) {\n const result = await writeNeo4jMemory(client, input, id)\n return {\n ...result,\n sourceRecord: memoryWriteResultToSourceRecord(result, input.text, { scope: input.scope }),\n }\n },\n }\n}\n\nasync function writeNeo4jMemory(\n client: Record<string, unknown>,\n input: AgentMemoryWriteInput,\n adapterId: string,\n): Promise<AgentMemoryWriteResult> {\n const scope = input.scope ?? {}\n const sessionId = scope.sessionId ?? input.metadata?.sessionId\n let result: unknown\n if (input.kind === 'message') {\n const shortTerm = nested(client, ['shortTerm', 'short_term'], client)\n result = await callOptional(\n shortTerm,\n ['addMessage'],\n [\n sessionId,\n input.role ?? 'user',\n input.text,\n {\n metadata: input.metadata,\n conversationId: sessionId,\n userId: scope.userId,\n },\n ],\n )\n if (result === undefined) {\n result = await callRequired(\n shortTerm,\n ['add_message'],\n [\n {\n session_id: sessionId,\n sessionId,\n role: input.role ?? 'user',\n content: input.text,\n user_identifier: scope.userId,\n userIdentifier: scope.userId,\n metadata: input.metadata,\n },\n ],\n )\n }\n } else if (input.kind === 'entity') {\n const longTerm = nested(client, ['longTerm', 'long_term'], client)\n result = await callOptional(\n longTerm,\n ['addEntity'],\n [\n input.entityName ?? input.title ?? input.text,\n input.entityType ?? 'ENTITY',\n neo4jEntityOptions(input),\n ],\n )\n if (result === undefined) {\n result = await callRequired(\n longTerm,\n ['add_entity'],\n [\n input.entityName ?? input.title ?? input.text,\n input.entityType ?? 'ENTITY',\n neo4jWriteOptions(input),\n ],\n )\n }\n } else if (input.kind === 'preference') {\n const longTerm = nested(client, ['longTerm', 'long_term'], client)\n result = await callOptional(\n longTerm,\n ['addPreference'],\n [input.category ?? 'general', input.text, neo4jPreferenceOptions(input)],\n )\n if (result === undefined) {\n result = await callRequired(\n longTerm,\n ['add_preference'],\n [input.category ?? 'general', input.text, neo4jWriteOptions(input)],\n )\n }\n } else {\n result = await callRequired(\n nested(client, ['longTerm', 'long_term'], client),\n ['addFact', 'add_fact'],\n [\n input.subject ?? input.title ?? input.kind,\n input.predicate ?? 'states',\n input.object ?? input.text,\n ],\n )\n }\n\n const id = idFromResult(result) ?? input.id ?? stableId('mem', `${input.kind}:${input.text}`)\n return {\n accepted: true,\n id,\n uri: `memory://${adapterId}/${encodeURIComponent(id)}`,\n kind: input.kind,\n metadata: { rawResult: result },\n }\n}\n\nasync function searchNeo4jMemory(\n client: Record<string, unknown>,\n query: string,\n options: AgentMemorySearchOptions,\n adapterId: string,\n): Promise<AgentMemoryHit[]> {\n const searches: Promise<AgentMemoryHit[]>[] = []\n const kinds = options.kinds\n const includeKind = (kind: AgentMemoryHit['kind']) => !kinds?.length || kinds.includes(kind)\n const shortTerm = nested(client, ['shortTerm', 'short_term'], {})\n const longTerm = nested(client, ['longTerm', 'long_term'], {})\n const reasoning = nested(client, ['reasoning'], {})\n\n if (includeKind('message')) {\n searches.push(\n callOptional(\n shortTerm,\n ['searchMessages', 'search_messages'],\n [query, searchMessagesOptions(options)],\n ).then((result) => normalizeHits(result, { ...options, kinds: ['message'] }, adapterId)),\n )\n }\n\n if (includeKind('entity')) {\n searches.push(\n callOptional(\n longTerm,\n ['searchEntities', 'search_entities'],\n [query, searchEntitiesOptions(options)],\n ).then((result) => normalizeHits(result, { ...options, kinds: ['entity'] }, adapterId)),\n )\n }\n\n if (includeKind('preference')) {\n searches.push(\n callOptional(\n longTerm,\n ['searchPreferences', 'search_preferences'],\n [query, searchPreferencesOptions(options)],\n ).then((result) => normalizeHits(result, { ...options, kinds: ['preference'] }, adapterId)),\n )\n }\n\n if (includeKind('reasoning-trace')) {\n searches.push(\n callOptional(\n reasoning,\n ['getSimilarTraces', 'get_similar_traces'],\n [query, similarTracesOptions(options)],\n ).then((result) =>\n normalizeHits(result, { ...options, kinds: ['reasoning-trace'] }, adapterId),\n ),\n )\n }\n\n const hits = (await Promise.all(searches)).flat()\n return hits\n .sort((a, b) => (b.normalizedScore ?? b.score ?? 0) - (a.normalizedScore ?? a.score ?? 0))\n .slice(0, options.limit)\n}\n\nfunction neo4jOptions(options: AgentMemorySearchOptions): Record<string, unknown> {\n return {\n limit: options.limit,\n k: options.limit,\n min_score: options.minScore,\n minScore: options.minScore,\n user_identifier: options.scope?.userId,\n userIdentifier: options.scope?.userId,\n session_id: options.scope?.sessionId,\n sessionId: options.scope?.sessionId,\n namespace: options.scope?.namespace,\n tenant_id: options.scope?.tenantId,\n tenantId: options.scope?.tenantId,\n kinds: options.kinds,\n metadata: options.metadata,\n }\n}\n\nfunction searchMessagesOptions(options: AgentMemorySearchOptions): Record<string, unknown> {\n return {\n limit: options.limit,\n sessionId: options.scope?.sessionId,\n conversationId: options.scope?.sessionId,\n threshold: options.minScore,\n metadata: options.metadata,\n }\n}\n\nfunction searchEntitiesOptions(options: AgentMemorySearchOptions): Record<string, unknown> {\n return {\n limit: options.limit,\n type: options.metadata?.type,\n }\n}\n\nfunction searchPreferencesOptions(options: AgentMemorySearchOptions): Record<string, unknown> {\n return {\n limit: options.limit,\n category: options.metadata?.category,\n }\n}\n\nfunction similarTracesOptions(options: AgentMemorySearchOptions): Record<string, unknown> {\n return {\n limit: options.limit,\n sessionId: options.scope?.sessionId,\n successOnly: options.metadata?.successOnly,\n }\n}\n\nfunction neo4jWriteOptions(input: AgentMemoryWriteInput): Record<string, unknown> {\n return {\n user_identifier: input.scope?.userId,\n userIdentifier: input.scope?.userId,\n session_id: input.scope?.sessionId,\n sessionId: input.scope?.sessionId,\n namespace: input.scope?.namespace,\n confidence: input.confidence,\n metadata: input.metadata,\n }\n}\n\nfunction neo4jEntityOptions(input: AgentMemoryWriteInput): Record<string, unknown> {\n return {\n description: input.metadata?.description ?? input.title,\n }\n}\n\nfunction neo4jPreferenceOptions(input: AgentMemoryWriteInput): Record<string, unknown> {\n return {\n context: input.metadata?.context ?? input.title,\n }\n}\n\nasync function callOptional(\n target: Record<string, unknown>,\n names: string[],\n args: unknown[],\n): Promise<unknown> {\n for (const name of names) {\n const fn = target[name]\n if (typeof fn === 'function') return await fn.apply(target, args)\n }\n return undefined\n}\n\nasync function callRequired(\n target: Record<string, unknown>,\n names: string[],\n args: unknown[],\n): Promise<unknown> {\n const result = await callOptional(target, names, args)\n if (result !== undefined) return result\n throw new Error(`Neo4j agent-memory client is missing method ${names.join(' or ')}`)\n}\n\nfunction nested(\n target: Record<string, unknown>,\n names: string[],\n fallback: Record<string, unknown>,\n): Record<string, unknown> {\n for (const name of names) {\n const value = target[name]\n if (value && typeof value === 'object') return value as Record<string, unknown>\n }\n return fallback\n}\n\nfunction normalizeHits(\n value: unknown,\n options: AgentMemorySearchOptions,\n adapterId: string,\n): AgentMemoryHit[] {\n const rawHits = rawHitsFrom(value)\n return rawHits\n .map((hit, index) => normalizeHit(hit, index, adapterId))\n .filter((hit): hit is AgentMemoryHit => hit !== null)\n .filter((hit) =>\n options.minScore === undefined\n ? true\n : (hit.normalizedScore ?? hit.score ?? 0) >= options.minScore!,\n )\n .filter((hit) => (options.kinds?.length ? options.kinds.includes(hit.kind) : true))\n .slice(0, options.limit)\n}\n\nfunction normalizeHit(value: unknown, index: number, adapterId: string): AgentMemoryHit | null {\n if (typeof value === 'string') {\n return {\n id: stableId('mem', value),\n uri: `memory://${adapterId}/${stableId('mem', value)}`,\n kind: 'fact',\n text: value,\n normalizedScore: index === 0 ? 1 : undefined,\n }\n }\n const obj = record(value)\n if (!obj) return null\n const kind = memoryKind(stringField(obj, ['kind', 'type', 'label']), obj)\n const text = textFromHitObject(obj, kind)\n if (!text) return null\n const id = stringField(obj, ['id', 'memoryId', 'uuid']) ?? stableId('mem', text)\n return {\n id,\n uri: stringField(obj, ['uri']) ?? `memory://${adapterId}/${encodeURIComponent(id)}`,\n kind,\n text,\n title: stringField(obj, ['title', 'name', 'task', 'subject']),\n score: numberField(obj, ['score']),\n normalizedScore: numberField(obj, ['normalizedScore', 'normalized_score']),\n confidence: numberField(obj, ['confidence']),\n createdAt: stringField(obj, ['createdAt', 'created_at']),\n validUntil: stringField(obj, ['validUntil', 'valid_until']),\n lastVerifiedAt: stringField(obj, ['lastVerifiedAt', 'last_verified_at']),\n metadata: obj,\n }\n}\n\nfunction memoryKind(\n value: string | undefined,\n obj: Record<string, unknown> = {},\n): AgentMemoryHit['kind'] {\n if (\n value === 'message' ||\n value === 'entity' ||\n value === 'fact' ||\n value === 'preference' ||\n value === 'observation' ||\n value === 'reasoning-trace'\n ) {\n return value\n }\n if ('role' in obj && 'content' in obj) return 'message'\n if ('name' in obj && ('type' in obj || 'entityType' in obj)) return 'entity'\n if ('preference' in obj && 'category' in obj) return 'preference'\n if ('task' in obj && 'steps' in obj) return 'reasoning-trace'\n return 'fact'\n}\n\nfunction rawHitsFrom(value: unknown): unknown[] {\n if (Array.isArray(value)) return value\n const obj = record(value)\n if (!obj) return typeof value === 'string' ? [value] : []\n if (Array.isArray(obj.hits)) return obj.hits\n if (Array.isArray(obj.results)) return obj.results\n if (Array.isArray(obj.messages)) return obj.messages\n if (Array.isArray(obj.recentMessages)) return obj.recentMessages\n if (Array.isArray(obj.observations)) return obj.observations\n if (Array.isArray(obj.reflections)) return obj.reflections\n if (typeof obj.content === 'string' || typeof obj.text === 'string') return [obj]\n return []\n}\n\nfunction textFromHitObject(\n obj: Record<string, unknown>,\n kind: AgentMemoryHit['kind'],\n): string | undefined {\n const direct = stringField(obj, [\n 'text',\n 'content',\n 'body',\n 'summary',\n 'preference',\n 'description',\n ])\n if (direct) return direct\n if (kind === 'entity') return stringField(obj, ['name'])\n if (kind === 'fact') {\n const subject = stringField(obj, ['subject'])\n const predicate = stringField(obj, ['predicate'])\n const object = stringField(obj, ['object', 'obj'])\n if (subject && predicate && object) return `${subject} ${predicate} ${object}`\n }\n if (kind === 'reasoning-trace') {\n const task = stringField(obj, ['task'])\n const outcome = stringField(obj, ['outcome'])\n return [task, outcome].filter(Boolean).join('\\n') || undefined\n }\n return undefined\n}\n\nfunction textFromConversationContext(value: unknown): string | undefined {\n const obj = record(value)\n if (!obj) return undefined\n const parts = [\n ...rawHitsFrom(obj.reflections).map((hit) => normalizeContextPart(hit)),\n ...rawHitsFrom(obj.observations).map((hit) => normalizeContextPart(hit)),\n ...rawHitsFrom(obj.recentMessages).map((hit) => normalizeContextPart(hit)),\n ].filter(Boolean)\n return parts.length > 0 ? parts.join('\\n\\n') : undefined\n}\n\nfunction normalizeConversationContextHits(\n value: unknown,\n options: AgentMemorySearchOptions,\n adapterId: string,\n): AgentMemoryHit[] {\n const obj = record(value)\n if (!obj) return normalizeHits(value, options, adapterId)\n const raw = [\n ...rawHitsFrom(obj.reflections).map((hit) => tagContextHit(hit, 'observation', 'Reflection')),\n ...rawHitsFrom(obj.observations).map((hit) => tagContextHit(hit, 'observation', 'Observation')),\n ...rawHitsFrom(obj.recentMessages).map((hit) => tagContextHit(hit, 'message')),\n ]\n return raw.length > 0\n ? normalizeHits(raw, options, adapterId)\n : normalizeHits(value, options, adapterId)\n}\n\nfunction tagContextHit(\n value: unknown,\n kind: AgentMemoryHit['kind'],\n title?: string,\n): Record<string, unknown> {\n return value && typeof value === 'object' && !Array.isArray(value)\n ? { kind, title, ...(value as Record<string, unknown>) }\n : { kind, title, content: value }\n}\n\nfunction normalizeContextPart(value: unknown): string | undefined {\n if (typeof value === 'string') return value\n const obj = record(value)\n return obj\n ? textFromHitObject(obj, memoryKind(stringField(obj, ['kind', 'type', 'label']), obj))\n : undefined\n}\n\nfunction renderHits(hits: AgentMemoryHit[]): string {\n return hits.map((hit) => hit.text).join('\\n\\n')\n}\n\nfunction idFromResult(value: unknown): string | undefined {\n const obj = record(value)\n return obj ? stringField(obj, ['id', 'memoryId', 'uuid']) : undefined\n}\n\nfunction record(value: unknown): Record<string, unknown> | null {\n return value && typeof value === 'object' && !Array.isArray(value)\n ? (value as Record<string, unknown>)\n : null\n}\n\nfunction stringField(obj: Record<string, unknown>, names: string[]): string | undefined {\n for (const name of names) {\n const value = obj[name]\n if (typeof value === 'string' && value.length > 0) return value\n }\n return undefined\n}\n\nfunction numberField(obj: Record<string, unknown>, names: string[]): number | undefined {\n for (const name of names) {\n const value = obj[name]\n if (typeof value === 'number' && Number.isFinite(value)) return value\n }\n return undefined\n}\n","import { z } from 'zod'\n\nexport const AgentMemoryKindSchema = z.enum([\n 'message',\n 'entity',\n 'fact',\n 'preference',\n 'observation',\n 'reasoning-trace',\n])\n\nexport const AgentMemoryScopeSchema = z.object({\n tenantId: z.string().optional(),\n userId: z.string().optional(),\n sessionId: z.string().optional(),\n namespace: z.string().optional(),\n tags: z.record(z.string(), z.string()).optional(),\n})\n\nexport const AgentMemoryHitSchema = z.object({\n id: z.string().min(1),\n uri: z.string().min(1),\n kind: AgentMemoryKindSchema,\n text: z.string().min(1),\n title: z.string().optional(),\n score: z.number().optional(),\n normalizedScore: z.number().optional(),\n confidence: z.number().optional(),\n createdAt: z.string().optional(),\n validUntil: z.string().optional(),\n lastVerifiedAt: z.string().optional(),\n metadata: z.record(z.string(), z.unknown()).optional(),\n})\n\nexport const AgentMemoryWriteInputSchema = z.object({\n kind: AgentMemoryKindSchema,\n text: z.string().min(1),\n id: z.string().optional(),\n title: z.string().optional(),\n role: z.enum(['system', 'user', 'assistant', 'tool']).optional(),\n entityName: z.string().optional(),\n entityType: z.string().optional(),\n category: z.string().optional(),\n predicate: z.string().optional(),\n subject: z.string().optional(),\n object: z.string().optional(),\n confidence: z.number().min(0).max(1).optional(),\n scope: AgentMemoryScopeSchema.optional(),\n metadata: z.record(z.string(), z.unknown()).optional(),\n})\n"],"mappings":"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","names":["hits"]}