memo-grafter 0.2.3 → 0.2.5

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.
Files changed (85) hide show
  1. package/USER_GUIDE.md +325 -71
  2. package/dist/MemoGrafter.d.ts +8 -5
  3. package/dist/MemoGrafter.d.ts.map +1 -1
  4. package/dist/MemoGrafter.js +12 -10
  5. package/dist/MemoGrafter.js.map +1 -1
  6. package/dist/MemoGrafterAgent.d.ts +5 -2
  7. package/dist/MemoGrafterAgent.d.ts.map +1 -1
  8. package/dist/MemoGrafterAgent.js +15 -3
  9. package/dist/MemoGrafterAgent.js.map +1 -1
  10. package/dist/crawler/ConflictDetectionPass.d.ts +6 -0
  11. package/dist/crawler/ConflictDetectionPass.d.ts.map +1 -0
  12. package/dist/crawler/ConflictDetectionPass.js +46 -0
  13. package/dist/crawler/ConflictDetectionPass.js.map +1 -0
  14. package/dist/crawler/DecayScoringPass.d.ts +17 -0
  15. package/dist/crawler/DecayScoringPass.d.ts.map +1 -0
  16. package/dist/crawler/DecayScoringPass.js +73 -0
  17. package/dist/crawler/DecayScoringPass.js.map +1 -0
  18. package/dist/crawler/MemoGrafterCrawler.d.ts +14 -0
  19. package/dist/crawler/MemoGrafterCrawler.d.ts.map +1 -0
  20. package/dist/crawler/MemoGrafterCrawler.js +108 -0
  21. package/dist/crawler/MemoGrafterCrawler.js.map +1 -0
  22. package/dist/crawler/VersioningPass.d.ts +6 -0
  23. package/dist/crawler/VersioningPass.d.ts.map +1 -0
  24. package/dist/crawler/VersioningPass.js +43 -0
  25. package/dist/crawler/VersioningPass.js.map +1 -0
  26. package/dist/crawler/decayScoring.d.ts +7 -0
  27. package/dist/crawler/decayScoring.d.ts.map +1 -0
  28. package/dist/crawler/decayScoring.js +9 -0
  29. package/dist/crawler/decayScoring.js.map +1 -0
  30. package/dist/crawler/index.d.ts +7 -0
  31. package/dist/crawler/index.d.ts.map +1 -0
  32. package/dist/crawler/index.js +5 -0
  33. package/dist/crawler/index.js.map +1 -0
  34. package/dist/crawler/memoryMaintenance.d.ts +15 -0
  35. package/dist/crawler/memoryMaintenance.d.ts.map +1 -0
  36. package/dist/crawler/memoryMaintenance.js +110 -0
  37. package/dist/crawler/memoryMaintenance.js.map +1 -0
  38. package/dist/crawler/types.d.ts +63 -0
  39. package/dist/crawler/types.d.ts.map +1 -0
  40. package/dist/crawler/types.js +2 -0
  41. package/dist/crawler/types.js.map +1 -0
  42. package/dist/index.d.ts +3 -1
  43. package/dist/index.d.ts.map +1 -1
  44. package/dist/index.js +1 -0
  45. package/dist/index.js.map +1 -1
  46. package/dist/pipeline/GrafterPipeline.d.ts.map +1 -1
  47. package/dist/pipeline/GrafterPipeline.js +42 -1
  48. package/dist/pipeline/GrafterPipeline.js.map +1 -1
  49. package/dist/pipeline/IngestPipeline.d.ts +7 -3
  50. package/dist/pipeline/IngestPipeline.d.ts.map +1 -1
  51. package/dist/pipeline/IngestPipeline.js +24 -13
  52. package/dist/pipeline/IngestPipeline.js.map +1 -1
  53. package/dist/pipeline/RetrieverPipeline.d.ts +3 -0
  54. package/dist/pipeline/RetrieverPipeline.d.ts.map +1 -1
  55. package/dist/pipeline/RetrieverPipeline.js +56 -13
  56. package/dist/pipeline/RetrieverPipeline.js.map +1 -1
  57. package/dist/pipeline/SegmentProcessor.d.ts +3 -1
  58. package/dist/pipeline/SegmentProcessor.d.ts.map +1 -1
  59. package/dist/pipeline/SegmentProcessor.js +9 -5
  60. package/dist/pipeline/SegmentProcessor.js.map +1 -1
  61. package/dist/prompts/memoryInjectionPrompt.d.ts +6 -2
  62. package/dist/prompts/memoryInjectionPrompt.d.ts.map +1 -1
  63. package/dist/prompts/memoryInjectionPrompt.js +25 -2
  64. package/dist/prompts/memoryInjectionPrompt.js.map +1 -1
  65. package/dist/queue/IngestQueue.d.ts +2 -2
  66. package/dist/queue/IngestQueue.d.ts.map +1 -1
  67. package/dist/queue/IngestQueue.js +3 -2
  68. package/dist/queue/IngestQueue.js.map +1 -1
  69. package/dist/store/GraphStore.d.ts +13 -3
  70. package/dist/store/GraphStore.d.ts.map +1 -1
  71. package/dist/store/postgres-pgvector/GraphStore.d.ts +16 -3
  72. package/dist/store/postgres-pgvector/GraphStore.d.ts.map +1 -1
  73. package/dist/store/postgres-pgvector/GraphStore.js +170 -6
  74. package/dist/store/postgres-pgvector/GraphStore.js.map +1 -1
  75. package/dist/types.d.ts +33 -0
  76. package/dist/types.d.ts.map +1 -1
  77. package/dist/utils/drift/adaptiveDriftSensitivity.d.ts +20 -0
  78. package/dist/utils/drift/adaptiveDriftSensitivity.d.ts.map +1 -0
  79. package/dist/utils/drift/adaptiveDriftSensitivity.js +67 -0
  80. package/dist/utils/drift/adaptiveDriftSensitivity.js.map +1 -0
  81. package/dist/utils/tags.d.ts +2 -0
  82. package/dist/utils/tags.d.ts.map +1 -0
  83. package/dist/utils/tags.js +13 -0
  84. package/dist/utils/tags.js.map +1 -0
  85. package/package.json +1 -1
@@ -0,0 +1,110 @@
1
+ export function normalizeMemoryPart(value) {
2
+ return value.trim().toLowerCase().replace(/\s+/g, " ");
3
+ }
4
+ export function findMemoryConflictGroups(memories) {
5
+ const byFactKey = new Map();
6
+ for (const memory of memories) {
7
+ if (memory.decayed || memory.supersededBy != null)
8
+ continue;
9
+ const grouping = getConflictGrouping(memory);
10
+ if (!grouping)
11
+ continue;
12
+ const key = grouping.key;
13
+ const group = byFactKey.get(key);
14
+ const item = {
15
+ memory,
16
+ value: grouping.value,
17
+ };
18
+ if (group) {
19
+ group.push(item);
20
+ }
21
+ else {
22
+ byFactKey.set(key, [item]);
23
+ }
24
+ }
25
+ return [...byFactKey.entries()]
26
+ .filter(([, items]) => new Set(items.map((item) => item.value)).size > 1)
27
+ .map(([key, items]) => ({
28
+ key,
29
+ nodes: items.map((item) => item.memory),
30
+ }));
31
+ }
32
+ export function isBroadTopicMemory(memory) {
33
+ return GENERIC_SUBJECTS.has(normalizeMemoryPart(memory.subject))
34
+ && GENERIC_PREDICATES.has(normalizeMemoryPart(memory.predicate));
35
+ }
36
+ function getConflictGrouping(memory) {
37
+ if (isBroadTopicMemory(memory)) {
38
+ return getBroadTopicConflictGrouping(memory);
39
+ }
40
+ return {
41
+ key: [
42
+ memory.sessionId,
43
+ normalizeMemoryPart(memory.subject),
44
+ normalizeMemoryPart(memory.predicate),
45
+ ].join("\u0000"),
46
+ value: normalizeMemoryPart(memory.value),
47
+ };
48
+ }
49
+ function getBroadTopicConflictGrouping(memory) {
50
+ const value = normalizeMemoryPart(memory.value);
51
+ const destination = extractTravelPlanDestination(value);
52
+ if (!destination)
53
+ return null;
54
+ return {
55
+ key: [memory.sessionId, "broad-topic", "travel-trip-plan"].join("\u0000"),
56
+ value: destination,
57
+ };
58
+ }
59
+ function extractTravelPlanDestination(value) {
60
+ if (!/\b(trip|travel|itinerary|vacation|holiday)\b/.test(value)) {
61
+ return null;
62
+ }
63
+ const destinationPatterns = [
64
+ /\b(?:to|for|in)\s+([a-z][a-z\s]+?)(?:\s+(?:trip|travel|itinerary|plan|planning|vacation|holiday)\b|$)/,
65
+ /^([a-z][a-z\s]+?)\s+(?:trip|travel|itinerary|plan|planning|vacation|holiday)\b/,
66
+ ];
67
+ for (const pattern of destinationPatterns) {
68
+ const destination = value.match(pattern)?.[1]?.trim();
69
+ if (destination)
70
+ return destination;
71
+ }
72
+ return null;
73
+ }
74
+ export function getNewestMemoryNode(nodes) {
75
+ return [...nodes].sort(compareNewestFirst)[0] ?? null;
76
+ }
77
+ export function compareNewestFirst(left, right) {
78
+ const timeDelta = right.createdAt.getTime() - left.createdAt.getTime();
79
+ if (timeDelta !== 0)
80
+ return timeDelta;
81
+ return right.id.localeCompare(left.id);
82
+ }
83
+ export function getSkippedMaintenanceCounts(memories) {
84
+ return {
85
+ skippedDecayed: memories.filter((memory) => memory.decayed).length,
86
+ skippedSuperseded: memories.filter((memory) => memory.supersededBy != null).length,
87
+ };
88
+ }
89
+ const GENERIC_SUBJECTS = new Set([
90
+ "conversation",
91
+ "memory",
92
+ "plan",
93
+ "request",
94
+ "topic",
95
+ "user",
96
+ ]);
97
+ const GENERIC_PREDICATES = new Set([
98
+ "asked about",
99
+ "asked_about",
100
+ "asks about",
101
+ "asks_about",
102
+ "discussed",
103
+ "interested in",
104
+ "interested_in",
105
+ "is",
106
+ "mentioned",
107
+ "plan",
108
+ "wants",
109
+ ]);
110
+ //# sourceMappingURL=memoryMaintenance.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memoryMaintenance.js","sourceRoot":"","sources":["../../src/crawler/memoryMaintenance.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,63 @@
1
+ import type { MemoryEdge, MemoryNode } from "../types.js";
2
+ export interface CrawlerConfig {
3
+ intervalMs?: number;
4
+ passes?: CrawlerPass[];
5
+ stopOnPassError?: boolean;
6
+ store?: CrawlerMaintenanceStore;
7
+ }
8
+ export interface CrawlerPass {
9
+ name: string;
10
+ run(context: CrawlerPassContext): Promise<CrawlerPassResult> | CrawlerPassResult;
11
+ }
12
+ export interface CrawlerPassContext {
13
+ signal?: AbortSignal;
14
+ store?: CrawlerMaintenanceStore;
15
+ }
16
+ export interface CrawlerPassResult {
17
+ inspected?: number;
18
+ annotated?: number;
19
+ skipped?: number;
20
+ conflictsDetected?: number;
21
+ nodesMarkedConflicting?: number;
22
+ conflictEdgesCreated?: number;
23
+ nodesSuperseded?: number;
24
+ updateEdgesCreated?: number;
25
+ decayScored?: number;
26
+ nodesDecayed?: number;
27
+ minDecayScore?: number;
28
+ maxDecayScore?: number;
29
+ skippedAlreadyDecayed?: number;
30
+ skippedSuperseded?: number;
31
+ skippedDecayed?: number;
32
+ notes?: string[];
33
+ }
34
+ export interface CrawlerMaintenanceStore {
35
+ listMemoryNodesForMaintenance(): Promise<MemoryNode[]>;
36
+ markMemoryNodesConflicting(memoryNodeIds: string[]): Promise<number>;
37
+ markMemoryNodeSuperseded(memoryNodeId: string, supersededBy: string): Promise<boolean>;
38
+ markMemoryNodeDecayed(memoryNodeId: string): Promise<boolean>;
39
+ updateMemoryNodeConfidence?(memoryNodeId: string, confidence: number): Promise<boolean>;
40
+ upsertMemoryEdge(edge: Pick<MemoryEdge, "sourceId" | "targetId" | "edgeType"> & {
41
+ weight?: number;
42
+ }): Promise<boolean>;
43
+ }
44
+ export interface CrawlerPassReport {
45
+ name: string;
46
+ ok: boolean;
47
+ startedAt: string;
48
+ finishedAt: string;
49
+ durationMs: number;
50
+ result?: CrawlerPassResult;
51
+ error?: {
52
+ message: string;
53
+ stack?: string;
54
+ };
55
+ }
56
+ export interface CrawlerReport {
57
+ startedAt: string;
58
+ finishedAt: string;
59
+ durationMs: number;
60
+ passes: CrawlerPassReport[];
61
+ ok: boolean;
62
+ }
63
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/crawler/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAE1D,MAAM,WAAW,aAAa;IAC5B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,WAAW,EAAE,CAAC;IACvB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,KAAK,CAAC,EAAE,uBAAuB,CAAC;CACjC;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,OAAO,EAAE,kBAAkB,GAAG,OAAO,CAAC,iBAAiB,CAAC,GAAG,iBAAiB,CAAC;CAClF;AAED,MAAM,WAAW,kBAAkB;IACjC,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,KAAK,CAAC,EAAE,uBAAuB,CAAC;CACjC;AAED,MAAM,WAAW,iBAAiB;IAChC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAChC,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;CAClB;AAED,MAAM,WAAW,uBAAuB;IACtC,6BAA6B,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC,CAAC;IACvD,0BAA0B,CAAC,aAAa,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IACrE,wBAAwB,CAAC,YAAY,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IACvF,qBAAqB,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAC9D,0BAA0B,CAAC,CAAC,YAAY,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IACxF,gBAAgB,CAAC,IAAI,EAAE,IAAI,CAAC,UAAU,EAAE,UAAU,GAAG,UAAU,GAAG,UAAU,CAAC,GAAG;QAC9E,MAAM,CAAC,EAAE,MAAM,CAAC;KACjB,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;CACtB;AACD,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,OAAO,CAAC;IACZ,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,iBAAiB,CAAC;IAC3B,KAAK,CAAC,EAAE;QACN,OAAO,EAAE,MAAM,CAAC;QAChB,KAAK,CAAC,EAAE,MAAM,CAAC;KAChB,CAAC;CACH;AAED,MAAM,WAAW,aAAa;IAC5B,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,iBAAiB,EAAE,CAAC;IAC5B,EAAE,EAAE,OAAO,CAAC;CACb"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/crawler/types.ts"],"names":[],"mappings":""}
package/dist/index.d.ts CHANGED
@@ -1,5 +1,6 @@
1
1
  export { MemoGrafterAgent } from "./MemoGrafterAgent.js";
2
2
  export { MemoGrafter } from "./MemoGrafter.js";
3
+ export { ConflictDetectionPass, DecayScoringPass, MemoGrafterCrawler, VersioningPass } from "./crawler/index.js";
3
4
  export { ConductorAgent } from "./fleet/ConductorAgent.js";
4
5
  export { MemoGrafterFleet } from "./fleet/MemoGrafterFleet.js";
5
6
  export { WorkerAgent } from "./fleet/WorkerAgent.js";
@@ -10,7 +11,8 @@ export { GrafterPipeline } from "./pipeline/GrafterPipeline.js";
10
11
  export { IngestPipeline } from "./pipeline/IngestPipeline.js";
11
12
  export { RetrieverPipeline } from "./pipeline/RetrieverPipeline.js";
12
13
  export { PostgresGraphStore } from "./store/index.js";
13
- export type { AbsorbFromAgentOptions, DriftMode, DriftSensitivity, EmbedAdapter, ExtractedMemory, GraftOrigin, GraftRegistryEntry, GraphSnapshot, GraphSnapshotNode, InjectionResult, LLMAdapter, MemoryEdge, MemoryNode, MemoryNodeInsert, MemorySourceType, MemoryType, MemoGrafterConfig, MemoGrafterDriftConfig, MemoGrafterGraphConfig, MemoGrafterInjectConfig, MemoGrafterQueueConfig, Message, RetrievalResult, RetrieverConfig, SegmentExtractionResult, TopicEdge, TopicNode, TopicSegment, } from "./types.js";
14
+ export type { AbsorbFromAgentOptions, DriftMode, DriftSensitivity, EmbedAdapter, ExtractedMemory, GraftOrigin, GraftRegistryEntry, GraphSnapshot, GraphSnapshotNode, InjectionResult, IngestOptions, LLMAdapter, MemoryEdge, MemoryNode, MemoryNodeInsert, MemorySourceType, MemoryType, MemoGrafterConfig, MemoGrafterDriftConfig, MemoGrafterGraphConfig, MemoGrafterInjectConfig, MemoGrafterQueueConfig, Message, RetrievalResult, RetrieverConfig, SegmentExtractionResult, SessionIngestState, TagFilterOptions, TopicEdge, TopicNode, TopicSegment, } from "./types.js";
14
15
  export type { ConductorGraftOptions, FleetAbsorbOptions, FleetAgentInfo, FleetGraph, FleetWorker, MemoGrafterFleetOptions, WorkerAgentConfig, } from "./fleet/types.js";
16
+ export type { CrawlerConfig, CrawlerMaintenanceStore, CrawlerPass, CrawlerPassContext, CrawlerPassReport, CrawlerPassResult, CrawlerReport, DecayScoringPassOptions, } from "./crawler/index.js";
15
17
  export type { FleetAgentRecord, GraphStore } from "./store/index.js";
16
18
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAC3D,OAAO,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AAC/D,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,EAAE,mBAAmB,EAAE,MAAM,gCAAgC,CAAC;AACrE,OAAO,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AACnF,OAAO,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AACnF,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAChE,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAC9D,OAAO,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAC;AACpE,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AACtD,YAAY,EACV,sBAAsB,EACtB,SAAS,EACT,gBAAgB,EAChB,YAAY,EACZ,eAAe,EACf,WAAW,EACX,kBAAkB,EAClB,aAAa,EACb,iBAAiB,EACjB,eAAe,EACf,UAAU,EACV,UAAU,EACV,UAAU,EACV,gBAAgB,EAChB,gBAAgB,EAChB,UAAU,EACV,iBAAiB,EACjB,sBAAsB,EACtB,sBAAsB,EACtB,uBAAuB,EACvB,sBAAsB,EACtB,OAAO,EACP,eAAe,EACf,eAAe,EACf,uBAAuB,EACvB,SAAS,EACT,SAAS,EACT,YAAY,GACb,MAAM,YAAY,CAAC;AACpB,YAAY,EACV,qBAAqB,EACrB,kBAAkB,EAClB,cAAc,EACd,UAAU,EACV,WAAW,EACX,uBAAuB,EACvB,iBAAiB,GAClB,MAAM,kBAAkB,CAAC;AAC1B,YAAY,EAAE,gBAAgB,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,qBAAqB,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACjH,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAC3D,OAAO,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AAC/D,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,EAAE,mBAAmB,EAAE,MAAM,gCAAgC,CAAC;AACrE,OAAO,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AACnF,OAAO,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AACnF,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAChE,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAC9D,OAAO,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAC;AACpE,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AACtD,YAAY,EACV,sBAAsB,EACtB,SAAS,EACT,gBAAgB,EAChB,YAAY,EACZ,eAAe,EACf,WAAW,EACX,kBAAkB,EAClB,aAAa,EACb,iBAAiB,EACjB,eAAe,EACf,aAAa,EACb,UAAU,EACV,UAAU,EACV,UAAU,EACV,gBAAgB,EAChB,gBAAgB,EAChB,UAAU,EACV,iBAAiB,EACjB,sBAAsB,EACtB,sBAAsB,EACtB,uBAAuB,EACvB,sBAAsB,EACtB,OAAO,EACP,eAAe,EACf,eAAe,EACf,uBAAuB,EACvB,kBAAkB,EAClB,gBAAgB,EAChB,SAAS,EACT,SAAS,EACT,YAAY,GACb,MAAM,YAAY,CAAC;AACpB,YAAY,EACV,qBAAqB,EACrB,kBAAkB,EAClB,cAAc,EACd,UAAU,EACV,WAAW,EACX,uBAAuB,EACvB,iBAAiB,GAClB,MAAM,kBAAkB,CAAC;AAC1B,YAAY,EACV,aAAa,EACb,uBAAuB,EACvB,WAAW,EACX,kBAAkB,EAClB,iBAAiB,EACjB,iBAAiB,EACjB,aAAa,EACb,uBAAuB,GACxB,MAAM,oBAAoB,CAAC;AAC5B,YAAY,EAAE,gBAAgB,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC"}
package/dist/index.js CHANGED
@@ -1,5 +1,6 @@
1
1
  export { MemoGrafterAgent } from "./MemoGrafterAgent.js";
2
2
  export { MemoGrafter } from "./MemoGrafter.js";
3
+ export { ConflictDetectionPass, DecayScoringPass, MemoGrafterCrawler, VersioningPass } from "./crawler/index.js";
3
4
  export { ConductorAgent } from "./fleet/ConductorAgent.js";
4
5
  export { MemoGrafterFleet } from "./fleet/MemoGrafterFleet.js";
5
6
  export { WorkerAgent } from "./fleet/WorkerAgent.js";
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAC3D,OAAO,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AAC/D,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,EAAE,mBAAmB,EAAE,MAAM,gCAAgC,CAAC;AACrE,OAAO,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AACnF,OAAO,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AACnF,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAChE,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAC9D,OAAO,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAC;AACpE,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,qBAAqB,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACjH,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAC3D,OAAO,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AAC/D,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,EAAE,mBAAmB,EAAE,MAAM,gCAAgC,CAAC;AACrE,OAAO,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AACnF,OAAO,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AACnF,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAChE,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAC9D,OAAO,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAC;AACpE,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"GrafterPipeline.d.ts","sourceRoot":"","sources":["../../src/pipeline/GrafterPipeline.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,KAAK,EAAE,eAAe,EAAa,MAAM,aAAa,CAAC;AAG9D,qBAAa,eAAe;IAExB,gBAAgB;IAChB,OAAO,CAAC,KAAK;IACb,gBAAgB;IAChB,OAAO,CAAC,MAAM;;IAHd,gBAAgB;IACR,KAAK,EAAE,UAAU;IACzB,gBAAgB;IACR,MAAM,EAAE;QACd,QAAQ,EAAE,MAAM,CAAC;QACjB,UAAU,EAAE,MAAM,CAAC;QACnB,WAAW,EAAE,MAAM,CAAC;KACrB;IAGG,GAAG,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,eAAe,CAAC;YA4B5D,cAAc;CAe7B"}
1
+ {"version":3,"file":"GrafterPipeline.d.ts","sourceRoot":"","sources":["../../src/pipeline/GrafterPipeline.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,KAAK,EAAE,eAAe,EAAqC,MAAM,aAAa,CAAC;AAGtF,qBAAa,eAAe;IAExB,gBAAgB;IAChB,OAAO,CAAC,KAAK;IACb,gBAAgB;IAChB,OAAO,CAAC,MAAM;;IAHd,gBAAgB;IACR,KAAK,EAAE,UAAU;IACzB,gBAAgB;IACR,MAAM,EAAE;QACd,QAAQ,EAAE,MAAM,CAAC;QACjB,UAAU,EAAE,MAAM,CAAC;QACnB,WAAW,EAAE,MAAM,CAAC;KACrB;IAGG,GAAG,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,eAAe,CAAC;YA4B5D,cAAc;CAsB7B"}
@@ -37,13 +37,54 @@ export class GrafterPipeline {
37
37
  if (nodes.length === 0)
38
38
  return "";
39
39
  const blocks = [];
40
+ const sessionMemories = await this.store.getMemoriesBySession(sessionId);
41
+ const memoryEdges = await this.store.getMemoryEdgesBySession(sessionId);
40
42
  for (const node of nodes) {
41
43
  const start = Math.max(0, node.messageRange[0] - this.config.bufferSize);
42
44
  const end = node.messageRange[1] + this.config.bufferSize;
43
45
  const messages = await this.store.getBufferMessages(sessionId, start, end);
44
- blocks.push(formatMemoryNode(node, messages));
46
+ const topicMemories = sessionMemories.filter((memory) => memory.topicNodeId === node.id);
47
+ blocks.push(formatMemoryNode(node, messages, buildMaintenancePromptContext(topicMemories, sessionMemories, memoryEdges)));
45
48
  }
46
49
  return buildMemoryInjectionPrompt(blocks);
47
50
  }
48
51
  }
52
+ function buildMaintenancePromptContext(topicMemories, sessionMemories, memoryEdges) {
53
+ const notes = [];
54
+ const topicMemoryIds = new Set(topicMemories.map((memory) => memory.id));
55
+ const memoriesById = new Map(sessionMemories.map((memory) => [memory.id, memory]));
56
+ const hasMaintenanceEdge = memoryEdges.some((edge) => (edge.edgeType === "conflicts" || edge.edgeType === "updates")
57
+ && (topicMemoryIds.has(edge.sourceId) || topicMemoryIds.has(edge.targetId)));
58
+ const hasConflict = topicMemories.some((memory) => memory.hasConflict);
59
+ const supersededMemories = topicMemories.filter((memory) => memory.supersededBy != null);
60
+ for (const memory of supersededMemories) {
61
+ const supersedingMemory = memory.supersededBy ? memoriesById.get(memory.supersededBy) : undefined;
62
+ if (supersedingMemory) {
63
+ notes.push(`The fact "${memory.subject} ${memory.predicate}: ${memory.value}" was superseded by "${supersedingMemory.value}".`);
64
+ }
65
+ else {
66
+ notes.push(`The fact "${memory.subject} ${memory.predicate}: ${memory.value}" was superseded by a newer memory.`);
67
+ }
68
+ }
69
+ if (hasConflict || supersededMemories.length > 0 || hasMaintenanceEdge) {
70
+ notes.push("Prefer active memory facts over contradictory historical summary details.");
71
+ }
72
+ const activeMemoriesById = new Map();
73
+ for (const memory of topicMemories) {
74
+ if (!memory.decayed && memory.supersededBy == null) {
75
+ activeMemoriesById.set(memory.id, memory);
76
+ }
77
+ }
78
+ for (const memory of supersededMemories) {
79
+ const supersedingMemory = memory.supersededBy ? memoriesById.get(memory.supersededBy) : undefined;
80
+ if (supersedingMemory && !supersedingMemory.decayed && supersedingMemory.supersededBy == null) {
81
+ activeMemoriesById.set(supersedingMemory.id, supersedingMemory);
82
+ }
83
+ }
84
+ const activeMemories = [...activeMemoriesById.values()];
85
+ return {
86
+ ...(notes.length > 0 ? { notes } : {}),
87
+ ...(notes.length > 0 && activeMemories.length > 0 ? { activeMemories } : {}),
88
+ };
89
+ }
49
90
  //# sourceMappingURL=GrafterPipeline.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"GrafterPipeline.js","sourceRoot":"","sources":["../../src/pipeline/GrafterPipeline.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,0BAA0B,EAAE,gBAAgB,EAAE,MAAM,qCAAqC,CAAC;AAGnG,OAAO,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AAEhE,MAAM,OAAO,eAAe;IAGhB;IAEA;IAJV;IACE,gBAAgB;IACR,KAAiB;IACzB,gBAAgB;IACR,MAIP;QANO,UAAK,GAAL,KAAK,CAAY;QAEjB,WAAM,GAAN,MAAM,CAIb;IACA,CAAC;IAEJ,KAAK,CAAC,GAAG,CAAC,SAAiB,EAAE,QAAkB;QAC7C,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC1B,OAAO,EAAE,YAAY,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,UAAU,EAAE,CAAC,EAAE,CAAC;QACxD,CAAC;QAED,MAAM,aAAa,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;QAChG,MAAM,KAAK,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CACxC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC;eAClC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC;eACrC,CAAC,CAAC,UAAU,GAAG,CAAC,CAAC,UAAU,CAC/B,CAAC;QACF,MAAM,WAAW,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC;QAC/B,IAAI,YAAY,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;QACrE,IAAI,UAAU,GAAG,iBAAiB,CAAC,YAAY,CAAC,CAAC;QAEjD,OAAO,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,WAAW,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACtE,WAAW,CAAC,GAAG,EAAE,CAAC;YAClB,YAAY,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;YACjE,UAAU,GAAG,iBAAiB,CAAC,YAAY,CAAC,CAAC;QAC/C,CAAC;QAED,OAAO;YACL,YAAY;YACZ,KAAK,EAAE,WAAW;YAClB,UAAU;SACX,CAAC;IACJ,CAAC;IAEO,KAAK,CAAC,cAAc,CAAC,SAAiB,EAAE,KAAkB;QAChE,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,EAAE,CAAC;QAElC,MAAM,MAAM,GAAa,EAAE,CAAC;QAE5B,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;YACzE,MAAM,GAAG,GAAG,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC;YAC1D,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC,SAAS,EAAE,KAAK,EAAE,GAAG,CAAC,CAAC;YAC3E,MAAM,CAAC,IAAI,CAAC,gBAAgB,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC;QAChD,CAAC;QAED,OAAO,0BAA0B,CAAC,MAAM,CAAC,CAAC;IAC5C,CAAC;CAEF"}
1
+ {"version":3,"file":"GrafterPipeline.js","sourceRoot":"","sources":["../../src/pipeline/GrafterPipeline.ts"],"names":[],"mappings":"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"}
@@ -1,14 +1,16 @@
1
1
  import type { GraphStore } from "../store/index.js";
2
- import type { DriftSensitivity, EmbedAdapter, LLMAdapter, Message, TopicNode } from "../types.js";
2
+ import type { DriftSensitivity, EmbedAdapter, LLMAdapter, IngestOptions, MemoGrafterDriftConfig, Message, TopicNode } from "../types.js";
3
3
  export declare class IngestPipeline {
4
4
  /** @internal */
5
5
  private readonly store;
6
6
  /** @internal */
7
+ private readonly llm;
8
+ /** @internal */
7
9
  private readonly embedder;
8
10
  /** @internal */
9
11
  private readonly config;
10
- private readonly driftDetector;
11
12
  private readonly segmentProcessor;
13
+ private readonly baseDriftThreshold;
12
14
  constructor(
13
15
  /** @internal */
14
16
  store: GraphStore,
@@ -27,10 +29,12 @@ export declare class IngestPipeline {
27
29
  llmAmbiguityDetection?: boolean;
28
30
  reentryDetection?: boolean;
29
31
  reentryThreshold?: number;
32
+ adaptiveSensitivity?: MemoGrafterDriftConfig["adaptiveSensitivity"];
30
33
  });
31
- run(messages: Message[], sessionId: string): Promise<TopicNode[]>;
34
+ run(messages: Message[], sessionId: string, options?: IngestOptions): Promise<TopicNode[]>;
32
35
  private toNewAbsoluteSegments;
33
36
  private linkIncrementalEdges;
34
37
  private embedMessage;
38
+ private createDriftDetector;
35
39
  }
36
40
  //# sourceMappingURL=IngestPipeline.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"IngestPipeline.d.ts","sourceRoot":"","sources":["../../src/pipeline/IngestPipeline.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,KAAK,EAAE,gBAAgB,EAAE,YAAY,EAAE,UAAU,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAWlG,qBAAa,cAAc;IAKvB,gBAAgB;IAChB,OAAO,CAAC,QAAQ,CAAC,KAAK;IAGtB,gBAAgB;IAChB,OAAO,CAAC,QAAQ,CAAC,QAAQ;IACzB,gBAAgB;IAChB,OAAO,CAAC,QAAQ,CAAC,MAAM;IAXzB,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAqB;IACnD,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAmB;;IAGlD,gBAAgB;IACC,KAAK,EAAE,UAAU;IAClC,gBAAgB;IAChB,GAAG,EAAE,UAAU;IACf,gBAAgB;IACC,QAAQ,EAAE,YAAY;IACvC,gBAAgB;IACC,MAAM,EAAE;QACvB,UAAU,EAAE,MAAM,CAAC;QACnB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,gBAAgB,CAAC,EAAE,gBAAgB,CAAC;QACpC,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,EAAE,QAAQ,GAAG,QAAQ,CAAC;QAC1B,kBAAkB,EAAE,MAAM,CAAC;QAC3B,qBAAqB,CAAC,EAAE,OAAO,CAAC;QAChC,gBAAgB,CAAC,EAAE,OAAO,CAAC;QAC3B,gBAAgB,CAAC,EAAE,MAAM,CAAC;KAC3B;IAoBG,GAAG,CAAC,QAAQ,EAAE,OAAO,EAAE,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC;IAqEvE,OAAO,CAAC,qBAAqB;YAoCf,oBAAoB;YAyCpB,YAAY;CAI3B"}
1
+ {"version":3,"file":"IngestPipeline.d.ts","sourceRoot":"","sources":["../../src/pipeline/IngestPipeline.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,KAAK,EACV,gBAAgB,EAChB,YAAY,EACZ,UAAU,EACV,aAAa,EACb,sBAAsB,EACtB,OAAO,EACP,SAAS,EACV,MAAM,aAAa,CAAC;AAYrB,qBAAa,cAAc;IAKvB,gBAAgB;IAChB,OAAO,CAAC,QAAQ,CAAC,KAAK;IACtB,gBAAgB;IAChB,OAAO,CAAC,QAAQ,CAAC,GAAG;IACpB,gBAAgB;IAChB,OAAO,CAAC,QAAQ,CAAC,QAAQ;IACzB,gBAAgB;IAChB,OAAO,CAAC,QAAQ,CAAC,MAAM;IAXzB,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAmB;IACpD,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAS;;IAG1C,gBAAgB;IACC,KAAK,EAAE,UAAU;IAClC,gBAAgB;IACC,GAAG,EAAE,UAAU;IAChC,gBAAgB;IACC,QAAQ,EAAE,YAAY;IACvC,gBAAgB;IACC,MAAM,EAAE;QACvB,UAAU,EAAE,MAAM,CAAC;QACnB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,gBAAgB,CAAC,EAAE,gBAAgB,CAAC;QACpC,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,EAAE,QAAQ,GAAG,QAAQ,CAAC;QAC1B,kBAAkB,EAAE,MAAM,CAAC;QAC3B,qBAAqB,CAAC,EAAE,OAAO,CAAC;QAChC,gBAAgB,CAAC,EAAE,OAAO,CAAC;QAC3B,gBAAgB,CAAC,EAAE,MAAM,CAAC;QAC1B,mBAAmB,CAAC,EAAE,sBAAsB,CAAC,qBAAqB,CAAC,CAAC;KACrE;IASG,GAAG,CAAC,QAAQ,EAAE,OAAO,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,GAAE,aAAkB,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC;IAsEpG,OAAO,CAAC,qBAAqB;YAoCf,oBAAoB;YAyCpB,YAAY;YAKZ,mBAAmB;CAuBlC"}
@@ -1,3 +1,4 @@
1
+ import { resolveAdaptiveDriftThreshold } from "../utils/drift/adaptiveDriftSensitivity.js";
1
2
  import { cosineSimilarity } from "../utils/drift/cosineSimilarity.js";
2
3
  import { resolveDriftThreshold } from "../utils/drift/driftThreshold.js";
3
4
  import { normalizeText } from "../utils/text/normalizeText.js";
@@ -8,10 +9,11 @@ const INGEST_OVERLAP_MESSAGES = 6;
8
9
  const INCREMENTAL_SEMANTIC_THRESHOLD = 0.6;
9
10
  export class IngestPipeline {
10
11
  store;
12
+ llm;
11
13
  embedder;
12
14
  config;
13
- driftDetector;
14
15
  segmentProcessor;
16
+ baseDriftThreshold;
15
17
  constructor(
16
18
  /** @internal */
17
19
  store,
@@ -22,23 +24,16 @@ export class IngestPipeline {
22
24
  /** @internal */
23
25
  config) {
24
26
  this.store = store;
27
+ this.llm = llm;
25
28
  this.embedder = embedder;
26
29
  this.config = config;
27
- this.driftDetector = new TopicDriftDetector({
28
- windowSize: config.windowSize,
29
- threshold: resolveDriftThreshold(config),
30
- mode: config.mode,
31
- minSegmentMessages: config.minSegmentMessages,
32
- llmAmbiguityDetection: config.llmAmbiguityDetection ?? false,
33
- reentryDetection: config.reentryDetection ?? true,
34
- reentryThreshold: config.reentryThreshold ?? 0.85,
35
- }, llm);
30
+ this.baseDriftThreshold = resolveDriftThreshold(config);
36
31
  this.segmentProcessor = new SegmentProcessor(store, llm, embedder, {
37
32
  topK: config.topK,
38
33
  semanticThreshold: 0.6,
39
34
  });
40
35
  }
41
- async run(messages, sessionId) {
36
+ async run(messages, sessionId, options = {}) {
42
37
  if (messages.length === 0)
43
38
  return [];
44
39
  await this.store.saveMessages(sessionId, messages);
@@ -50,13 +45,14 @@ export class IngestPipeline {
50
45
  const contextStartIndex = Math.max(0, firstNewMessageIndex - INGEST_OVERLAP_MESSAGES);
51
46
  const contextMessages = messages.slice(contextStartIndex);
52
47
  const contextEmbeddings = await Promise.all(contextMessages.map((message) => this.embedMessage(message)));
53
- const { segments, reentryMap } = await this.driftDetector.detectSegments(contextMessages, contextEmbeddings, existingNodes);
48
+ const driftDetector = await this.createDriftDetector(sessionId);
49
+ const { segments, reentryMap } = await driftDetector.detectSegments(contextMessages, contextEmbeddings, existingNodes);
54
50
  const absoluteSegments = this.toNewAbsoluteSegments(segments, contextStartIndex, firstNewMessageIndex, existingNodes);
55
51
  const nodes = [];
56
52
  const nodeByDetectorTopicOrder = new Map();
57
53
  const savedReentryPairs = new Set();
58
54
  for (const { segment, detectorTopicOrder } of absoluteSegments) {
59
- const node = await this.segmentProcessor.process(segment, messages, sessionId);
55
+ const node = await this.segmentProcessor.process(segment, messages, sessionId, options);
60
56
  nodes.push(node);
61
57
  nodeByDetectorTopicOrder.set(detectorTopicOrder, node);
62
58
  const matchedNodeId = reentryMap.get(detectorTopicOrder);
@@ -150,5 +146,20 @@ export class IngestPipeline {
150
146
  const content = normalizeText(message.content) ?? message.content;
151
147
  return this.embedder.embed(content);
152
148
  }
149
+ async createDriftDetector(sessionId) {
150
+ const adaptiveConfig = this.config.adaptiveSensitivity;
151
+ const threshold = adaptiveConfig?.enabled
152
+ ? resolveAdaptiveDriftThreshold(this.baseDriftThreshold, await this.store.getSegmentsBySession(sessionId), adaptiveConfig).threshold
153
+ : this.baseDriftThreshold;
154
+ return new TopicDriftDetector({
155
+ windowSize: this.config.windowSize,
156
+ threshold,
157
+ mode: this.config.mode,
158
+ minSegmentMessages: this.config.minSegmentMessages,
159
+ llmAmbiguityDetection: this.config.llmAmbiguityDetection ?? false,
160
+ reentryDetection: this.config.reentryDetection ?? true,
161
+ reentryThreshold: this.config.reentryThreshold ?? 0.85,
162
+ }, this.llm);
163
+ }
153
164
  }
154
165
  //# sourceMappingURL=IngestPipeline.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"IngestPipeline.js","sourceRoot":"","sources":["../../src/pipeline/IngestPipeline.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"IngestPipeline.js","sourceRoot":"","sources":["../../src/pipeline/IngestPipeline.ts"],"names":[],"mappings":"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"}
@@ -20,5 +20,8 @@ export declare class RetrieverPipeline {
20
20
  private searchMemories;
21
21
  private hashEmbedding;
22
22
  private buildBlocks;
23
+ private rankFact;
24
+ private scoreFact;
25
+ private clampScore;
23
26
  }
24
27
  //# sourceMappingURL=RetrieverPipeline.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"RetrieverPipeline.d.ts","sourceRoot":"","sources":["../../src/pipeline/RetrieverPipeline.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAKrC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,KAAK,EACV,YAAY,EAEZ,eAAe,EACf,eAAe,EAEhB,MAAM,aAAa,CAAC;AAWrB,qBAAa,iBAAiB;IAE1B,gBAAgB;IAChB,OAAO,CAAC,KAAK;IACb,gBAAgB;IAChB,OAAO,CAAC,QAAQ;IAChB,OAAO,CAAC,MAAM;IACd,gBAAgB;IAChB,OAAO,CAAC,UAAU;;IANlB,gBAAgB;IACR,KAAK,EAAE,UAAU;IACzB,gBAAgB;IACR,QAAQ,EAAE,YAAY,EACtB,MAAM,EAAE,eAAe;IAC/B,gBAAgB;IACR,UAAU,GAAE,KAAK,GAAG,IAAW;IAGnC,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC;YAiDvD,cAAc;IA6C5B,OAAO,CAAC,aAAa;YAKP,WAAW;CA8B1B"}
1
+ {"version":3,"file":"RetrieverPipeline.d.ts","sourceRoot":"","sources":["../../src/pipeline/RetrieverPipeline.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAKrC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,KAAK,EACV,YAAY,EAEZ,eAAe,EACf,eAAe,EAEhB,MAAM,aAAa,CAAC;AAgBrB,qBAAa,iBAAiB;IAE1B,gBAAgB;IAChB,OAAO,CAAC,KAAK;IACb,gBAAgB;IAChB,OAAO,CAAC,QAAQ;IAChB,OAAO,CAAC,MAAM;IACd,gBAAgB;IAChB,OAAO,CAAC,UAAU;;IANlB,gBAAgB;IACR,KAAK,EAAE,UAAU;IACzB,gBAAgB;IACR,QAAQ,EAAE,YAAY,EACtB,MAAM,EAAE,eAAe;IAC/B,gBAAgB;IACR,UAAU,GAAE,KAAK,GAAG,IAAW;IAGnC,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC;YA2DvD,cAAc;IA0D5B,OAAO,CAAC,aAAa;YAKP,WAAW;IAiCzB,OAAO,CAAC,QAAQ;IAOhB,OAAO,CAAC,SAAS;IASjB,OAAO,CAAC,UAAU;CAInB"}
@@ -1,6 +1,9 @@
1
1
  import { createHash } from "node:crypto";
2
2
  import { buildFactRetrievalPrompt, formatFactBlock, } from "../prompts/factRetrievalPrompt.js";
3
3
  import { countApproxTokens } from "../utils/text/tokenCount.js";
4
+ import { normalizeTags } from "../utils/tags.js";
5
+ const DEFAULT_SIMILARITY_WEIGHT = 0.7;
6
+ const DEFAULT_CONFIDENCE_WEIGHT = 0.3;
4
7
  export class RetrieverPipeline {
5
8
  store;
6
9
  embedder;
@@ -22,9 +25,21 @@ export class RetrieverPipeline {
22
25
  const limit = this.config.limit ?? 10;
23
26
  const minSimilarity = this.config.minSimilarity ?? 0.6;
24
27
  const tokenBudget = this.config.tokenBudget ?? 1200;
28
+ const tags = normalizeTags(this.config.tags);
29
+ const tagMode = this.config.tagMode ?? "all";
30
+ const scope = this.config.scope === "tagged" && tags.length > 0
31
+ ? "tagged"
32
+ : this.config.scope ?? (tags.length > 0 ? "session-and-tags" : "session");
25
33
  const embedding = await this.embedder.embed(query);
26
- const searchedFacts = await this.searchMemories(embedding, sessionId, limit, minSimilarity);
27
- const activeFacts = searchedFacts.filter((fact) => fact.decayed === false && fact.supersededBy == null);
34
+ const searchedFacts = await this.searchMemories(embedding, sessionId, limit, minSimilarity, {
35
+ tags,
36
+ tagMode,
37
+ scope,
38
+ });
39
+ const activeFacts = searchedFacts
40
+ .filter((fact) => fact.decayed === false && fact.supersededBy == null)
41
+ .map((fact) => this.rankFact(fact))
42
+ .sort((a, b) => b.retrievalScore - a.retrievalScore);
28
43
  if (activeFacts.length === 0) {
29
44
  return {
30
45
  facts: [],
@@ -33,7 +48,7 @@ export class RetrieverPipeline {
33
48
  tokenCount: 0,
34
49
  };
35
50
  }
36
- const rankedBlocks = (await this.buildBlocks(activeFacts, sessionId))
51
+ const rankedBlocks = (await this.buildBlocks(activeFacts, sessionId, scope))
37
52
  .sort((a, b) => b.score - a.score);
38
53
  const includedBlocks = [];
39
54
  const facts = [];
@@ -46,7 +61,7 @@ export class RetrieverPipeline {
46
61
  break;
47
62
  }
48
63
  includedBlocks.push(formattedBlock);
49
- facts.push(...block.facts);
64
+ facts.push(...block.facts.map(({ retrievalScore: _retrievalScore, ...fact }) => fact));
50
65
  nodes.push(block.parentNode);
51
66
  tokenCount += blockTokenCount;
52
67
  }
@@ -57,31 +72,40 @@ export class RetrieverPipeline {
57
72
  tokenCount,
58
73
  };
59
74
  }
60
- async searchMemories(embedding, sessionId, limit, minSimilarity) {
75
+ async searchMemories(embedding, sessionId, limit, minSimilarity, options) {
61
76
  if (!this.config.cache || !this.cacheRedis) {
62
- return this.store.searchMemories(embedding, sessionId, limit, minSimilarity);
77
+ return this.store.searchMemories(embedding, sessionId, limit, minSimilarity, options);
63
78
  }
64
79
  const ttl = Math.min(Math.max(this.config.cache.ttlSeconds ?? 90, 60), 120);
65
- const cacheKey = `mg:recall:${sessionId}:${limit}:${minSimilarity}:${this.hashEmbedding(embedding)}`;
80
+ const cacheKey = [
81
+ "mg:recall",
82
+ sessionId,
83
+ limit,
84
+ minSimilarity,
85
+ options.scope ?? "session",
86
+ options.tagMode ?? "all",
87
+ (options.tags ?? []).join(","),
88
+ this.hashEmbedding(embedding),
89
+ ].join(":");
66
90
  try {
67
91
  const hit = await this.cacheRedis.get(cacheKey);
68
92
  if (hit) {
69
93
  return JSON.parse(hit);
70
94
  }
71
- const searchedFacts = await this.store.searchMemories(embedding, sessionId, limit, minSimilarity);
95
+ const searchedFacts = await this.store.searchMemories(embedding, sessionId, limit, minSimilarity, options);
72
96
  await this.cacheRedis.setex(cacheKey, ttl, JSON.stringify(searchedFacts));
73
97
  return searchedFacts;
74
98
  }
75
99
  catch (error) {
76
100
  console.warn("MemoGrafter recall cache warning:", error);
77
- return this.store.searchMemories(embedding, sessionId, limit, minSimilarity);
101
+ return this.store.searchMemories(embedding, sessionId, limit, minSimilarity, options);
78
102
  }
79
103
  }
80
104
  hashEmbedding(embedding) {
81
105
  const str = embedding.map((value) => value.toFixed(6)).join(",");
82
106
  return createHash("sha1").update(str).digest("hex").slice(0, 16);
83
107
  }
84
- async buildBlocks(facts, sessionId) {
108
+ async buildBlocks(facts, sessionId, scope) {
85
109
  const factsByTopic = new Map();
86
110
  for (const fact of facts) {
87
111
  const topicFacts = factsByTopic.get(fact.topicNodeId) ?? [];
@@ -90,17 +114,36 @@ export class RetrieverPipeline {
90
114
  }
91
115
  const blocks = [];
92
116
  for (const [topicNodeId, topicFacts] of factsByTopic) {
93
- const parentNode = await this.store.getTopicNode(topicNodeId, sessionId);
117
+ const parentSessionId = scope === "tagged" ? topicFacts[0]?.sessionId : sessionId;
118
+ const parentNode = await this.store.getTopicNode(topicNodeId, parentSessionId);
94
119
  if (!parentNode) {
95
120
  continue;
96
121
  }
97
122
  blocks.push({
98
- facts: topicFacts,
123
+ facts: topicFacts.sort((a, b) => b.retrievalScore - a.retrievalScore),
99
124
  parentNode,
100
- score: Math.max(...topicFacts.map((fact) => fact.similarity)),
125
+ score: Math.max(...topicFacts.map((fact) => fact.retrievalScore)),
101
126
  });
102
127
  }
103
128
  return blocks;
104
129
  }
130
+ rankFact(fact) {
131
+ return {
132
+ ...fact,
133
+ retrievalScore: this.scoreFact(fact),
134
+ };
135
+ }
136
+ scoreFact(fact) {
137
+ const similarityWeight = this.config.scoring?.similarityWeight ?? DEFAULT_SIMILARITY_WEIGHT;
138
+ const confidenceWeight = this.config.scoring?.confidenceWeight ?? DEFAULT_CONFIDENCE_WEIGHT;
139
+ const similarity = this.clampScore(fact.similarity);
140
+ const confidence = this.clampScore(fact.confidence);
141
+ return similarity * similarityWeight + confidence * confidenceWeight;
142
+ }
143
+ clampScore(value) {
144
+ if (!Number.isFinite(value))
145
+ return 0;
146
+ return Math.min(Math.max(value, 0), 1);
147
+ }
105
148
  }
106
149
  //# sourceMappingURL=RetrieverPipeline.js.map