@easynet/agent-memory 0.0.2

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 (167) hide show
  1. package/README.md +260 -0
  2. package/bin/chat +11 -0
  3. package/dist/adapters/index.d.ts +8 -0
  4. package/dist/adapters/index.d.ts.map +1 -0
  5. package/dist/adapters/index.js +29 -0
  6. package/dist/adapters/index.js.map +1 -0
  7. package/dist/adapters/mem0/mem0-store.d.ts +29 -0
  8. package/dist/adapters/mem0/mem0-store.d.ts.map +1 -0
  9. package/dist/adapters/mem0/mem0-store.js +174 -0
  10. package/dist/adapters/mem0/mem0-store.js.map +1 -0
  11. package/dist/adapters/rag-http/rag-http-retriever.d.ts +18 -0
  12. package/dist/adapters/rag-http/rag-http-retriever.d.ts.map +1 -0
  13. package/dist/adapters/rag-http/rag-http-retriever.js +71 -0
  14. package/dist/adapters/rag-http/rag-http-retriever.js.map +1 -0
  15. package/dist/adapters/types.d.ts +25 -0
  16. package/dist/adapters/types.d.ts.map +1 -0
  17. package/dist/adapters/types.js +6 -0
  18. package/dist/adapters/types.js.map +1 -0
  19. package/dist/boot/boot-rebuilder.d.ts +26 -0
  20. package/dist/boot/boot-rebuilder.d.ts.map +1 -0
  21. package/dist/boot/boot-rebuilder.js +112 -0
  22. package/dist/boot/boot-rebuilder.js.map +1 -0
  23. package/dist/boot/index.d.ts +3 -0
  24. package/dist/boot/index.d.ts.map +1 -0
  25. package/dist/boot/index.js +6 -0
  26. package/dist/boot/index.js.map +1 -0
  27. package/dist/cli/chat-split.d.ts +22 -0
  28. package/dist/cli/chat-split.d.ts.map +1 -0
  29. package/dist/cli/chat-split.js +187 -0
  30. package/dist/cli/chat-split.js.map +1 -0
  31. package/dist/cli/chat.d.ts +19 -0
  32. package/dist/cli/chat.d.ts.map +1 -0
  33. package/dist/cli/chat.js +266 -0
  34. package/dist/cli/chat.js.map +1 -0
  35. package/dist/cli/commands/command-handler.d.ts +32 -0
  36. package/dist/cli/commands/command-handler.d.ts.map +1 -0
  37. package/dist/cli/commands/command-handler.js +143 -0
  38. package/dist/cli/commands/command-handler.js.map +1 -0
  39. package/dist/cli/index.d.ts +3 -0
  40. package/dist/cli/index.d.ts.map +1 -0
  41. package/dist/cli/index.js +8 -0
  42. package/dist/cli/index.js.map +1 -0
  43. package/dist/cli/ui/display-manager.d.ts +18 -0
  44. package/dist/cli/ui/display-manager.d.ts.map +1 -0
  45. package/dist/cli/ui/display-manager.js +69 -0
  46. package/dist/cli/ui/display-manager.js.map +1 -0
  47. package/dist/cli/ui/screen-layout.d.ts +12 -0
  48. package/dist/cli/ui/screen-layout.d.ts.map +1 -0
  49. package/dist/cli/ui/screen-layout.js +125 -0
  50. package/dist/cli/ui/screen-layout.js.map +1 -0
  51. package/dist/config/index.d.ts +2 -0
  52. package/dist/config/index.d.ts.map +1 -0
  53. package/dist/config/index.js +6 -0
  54. package/dist/config/index.js.map +1 -0
  55. package/dist/config/loader.d.ts +9 -0
  56. package/dist/config/loader.d.ts.map +1 -0
  57. package/dist/config/loader.js +107 -0
  58. package/dist/config/loader.js.map +1 -0
  59. package/dist/context/context-builder.d.ts +18 -0
  60. package/dist/context/context-builder.d.ts.map +1 -0
  61. package/dist/context/context-builder.js +91 -0
  62. package/dist/context/context-builder.js.map +1 -0
  63. package/dist/core/agent-memory.d.ts +50 -0
  64. package/dist/core/agent-memory.d.ts.map +1 -0
  65. package/dist/core/agent-memory.js +297 -0
  66. package/dist/core/agent-memory.js.map +1 -0
  67. package/dist/embedding/embedder.d.ts +49 -0
  68. package/dist/embedding/embedder.d.ts.map +1 -0
  69. package/dist/embedding/embedder.js +146 -0
  70. package/dist/embedding/embedder.js.map +1 -0
  71. package/dist/embedding/index.d.ts +3 -0
  72. package/dist/embedding/index.d.ts.map +1 -0
  73. package/dist/embedding/index.js +8 -0
  74. package/dist/embedding/index.js.map +1 -0
  75. package/dist/gate/deduplicator.d.ts +22 -0
  76. package/dist/gate/deduplicator.d.ts.map +1 -0
  77. package/dist/gate/deduplicator.js +74 -0
  78. package/dist/gate/deduplicator.js.map +1 -0
  79. package/dist/gate/extractor.d.ts +33 -0
  80. package/dist/gate/extractor.d.ts.map +1 -0
  81. package/dist/gate/extractor.js +122 -0
  82. package/dist/gate/extractor.js.map +1 -0
  83. package/dist/gate/index.d.ts +3 -0
  84. package/dist/gate/index.d.ts.map +1 -0
  85. package/dist/gate/index.js +6 -0
  86. package/dist/gate/index.js.map +1 -0
  87. package/dist/gate/memory-gate.d.ts +27 -0
  88. package/dist/gate/memory-gate.d.ts.map +1 -0
  89. package/dist/gate/memory-gate.js +86 -0
  90. package/dist/gate/memory-gate.js.map +1 -0
  91. package/dist/gate/redactor.d.ts +14 -0
  92. package/dist/gate/redactor.d.ts.map +1 -0
  93. package/dist/gate/redactor.js +24 -0
  94. package/dist/gate/redactor.js.map +1 -0
  95. package/dist/index.d.ts +6 -0
  96. package/dist/index.d.ts.map +1 -0
  97. package/dist/index.js +24 -0
  98. package/dist/index.js.map +1 -0
  99. package/dist/indexing/in-memory-index.d.ts +67 -0
  100. package/dist/indexing/in-memory-index.d.ts.map +1 -0
  101. package/dist/indexing/in-memory-index.js +135 -0
  102. package/dist/indexing/in-memory-index.js.map +1 -0
  103. package/dist/indexing/index.d.ts +3 -0
  104. package/dist/indexing/index.d.ts.map +1 -0
  105. package/dist/indexing/index.js +6 -0
  106. package/dist/indexing/index.js.map +1 -0
  107. package/dist/persistence/database/schema.d.ts +6 -0
  108. package/dist/persistence/database/schema.d.ts.map +1 -0
  109. package/dist/persistence/database/schema.js +75 -0
  110. package/dist/persistence/database/schema.js.map +1 -0
  111. package/dist/persistence/index.d.ts +3 -0
  112. package/dist/persistence/index.d.ts.map +1 -0
  113. package/dist/persistence/index.js +6 -0
  114. package/dist/persistence/index.js.map +1 -0
  115. package/dist/persistence/repository/embedding-operations.d.ts +17 -0
  116. package/dist/persistence/repository/embedding-operations.d.ts.map +1 -0
  117. package/dist/persistence/repository/embedding-operations.js +58 -0
  118. package/dist/persistence/repository/embedding-operations.js.map +1 -0
  119. package/dist/persistence/repository/memory-operations.d.ts +28 -0
  120. package/dist/persistence/repository/memory-operations.d.ts.map +1 -0
  121. package/dist/persistence/repository/memory-operations.js +87 -0
  122. package/dist/persistence/repository/memory-operations.js.map +1 -0
  123. package/dist/persistence/repository/meta-operations.d.ts +15 -0
  124. package/dist/persistence/repository/meta-operations.d.ts.map +1 -0
  125. package/dist/persistence/repository/meta-operations.js +20 -0
  126. package/dist/persistence/repository/meta-operations.js.map +1 -0
  127. package/dist/persistence/sqlite-repo.d.ts +58 -0
  128. package/dist/persistence/sqlite-repo.d.ts.map +1 -0
  129. package/dist/persistence/sqlite-repo.js +81 -0
  130. package/dist/persistence/sqlite-repo.js.map +1 -0
  131. package/dist/persistence/utils/hash.d.ts +8 -0
  132. package/dist/persistence/utils/hash.d.ts.map +1 -0
  133. package/dist/persistence/utils/hash.js +48 -0
  134. package/dist/persistence/utils/hash.js.map +1 -0
  135. package/dist/persistence/utils/serialization.d.ts +33 -0
  136. package/dist/persistence/utils/serialization.d.ts.map +1 -0
  137. package/dist/persistence/utils/serialization.js +85 -0
  138. package/dist/persistence/utils/serialization.js.map +1 -0
  139. package/dist/processing/document/document-processor.d.ts +30 -0
  140. package/dist/processing/document/document-processor.d.ts.map +1 -0
  141. package/dist/processing/document/document-processor.js +158 -0
  142. package/dist/processing/document/document-processor.js.map +1 -0
  143. package/dist/processing/document/index.d.ts +3 -0
  144. package/dist/processing/document/index.d.ts.map +1 -0
  145. package/dist/processing/document/index.js +6 -0
  146. package/dist/processing/document/index.js.map +1 -0
  147. package/dist/ranker/ranker.d.ts +26 -0
  148. package/dist/ranker/ranker.d.ts.map +1 -0
  149. package/dist/ranker/ranker.js +40 -0
  150. package/dist/ranker/ranker.js.map +1 -0
  151. package/dist/recall/recall-engine.d.ts +19 -0
  152. package/dist/recall/recall-engine.d.ts.map +1 -0
  153. package/dist/recall/recall-engine.js +79 -0
  154. package/dist/recall/recall-engine.js.map +1 -0
  155. package/dist/types/config.d.ts +821 -0
  156. package/dist/types/config.d.ts.map +1 -0
  157. package/dist/types/config.js +128 -0
  158. package/dist/types/config.js.map +1 -0
  159. package/dist/types/document.d.ts +37 -0
  160. package/dist/types/document.d.ts.map +1 -0
  161. package/dist/types/document.js +6 -0
  162. package/dist/types/document.js.map +1 -0
  163. package/dist/types/index.d.ts +86 -0
  164. package/dist/types/index.d.ts.map +1 -0
  165. package/dist/types/index.js +6 -0
  166. package/dist/types/index.js.map +1 -0
  167. package/package.json +53 -0
@@ -0,0 +1,125 @@
1
+ "use strict";
2
+ /**
3
+ * Screen layout components for split-screen chat
4
+ */
5
+ var __importDefault = (this && this.__importDefault) || function (mod) {
6
+ return (mod && mod.__esModule) ? mod : { "default": mod };
7
+ };
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.createScreenLayout = createScreenLayout;
10
+ const blessed_1 = __importDefault(require("blessed"));
11
+ function createScreenLayout() {
12
+ // Create screen
13
+ const screen = blessed_1.default.screen({
14
+ smartCSR: true,
15
+ title: "Agent Memory Chat Console",
16
+ });
17
+ // Status bar at top
18
+ const statusBar = blessed_1.default.box({
19
+ top: 0,
20
+ left: 0,
21
+ width: "100%",
22
+ height: 3,
23
+ content: "Agent Memory Chat | Actor: console-user | Scope: default/console",
24
+ style: {
25
+ fg: "white",
26
+ bg: "blue",
27
+ },
28
+ });
29
+ // Left side: Chat area (60% width)
30
+ const chatBox = blessed_1.default.box({
31
+ top: 3,
32
+ left: 0,
33
+ width: "60%",
34
+ height: "100%-6",
35
+ content: "=== Chat History ===\n\n",
36
+ scrollable: true,
37
+ alwaysScroll: true,
38
+ scrollbar: {
39
+ ch: " ",
40
+ track: {
41
+ bg: "cyan",
42
+ },
43
+ style: {
44
+ inverse: true,
45
+ },
46
+ },
47
+ style: {
48
+ fg: "white",
49
+ bg: "black",
50
+ border: {
51
+ fg: "cyan",
52
+ },
53
+ },
54
+ border: {
55
+ type: "line",
56
+ },
57
+ keys: true,
58
+ vi: true,
59
+ mouse: true,
60
+ });
61
+ // Right side: Memory area (40% width)
62
+ const memoryBox = blessed_1.default.box({
63
+ top: 3,
64
+ left: "60%",
65
+ width: "40%",
66
+ height: "100%-6",
67
+ content: "=== Memories ===\n\nNo memories yet. Type a message to store memories.",
68
+ scrollable: true,
69
+ alwaysScroll: true,
70
+ scrollbar: {
71
+ ch: " ",
72
+ track: {
73
+ bg: "green",
74
+ },
75
+ style: {
76
+ inverse: true,
77
+ },
78
+ },
79
+ style: {
80
+ fg: "white",
81
+ bg: "black",
82
+ border: {
83
+ fg: "green",
84
+ },
85
+ },
86
+ border: {
87
+ type: "line",
88
+ },
89
+ keys: true,
90
+ vi: true,
91
+ mouse: true,
92
+ });
93
+ // Input box at bottom
94
+ const inputBox = blessed_1.default.textbox({
95
+ bottom: 0,
96
+ left: 0,
97
+ width: "100%",
98
+ height: 3,
99
+ inputOnFocus: true,
100
+ style: {
101
+ fg: "white",
102
+ bg: "blue",
103
+ focus: {
104
+ fg: "white",
105
+ bg: "cyan",
106
+ },
107
+ },
108
+ border: {
109
+ type: "line",
110
+ },
111
+ });
112
+ // Append to screen
113
+ screen.append(statusBar);
114
+ screen.append(chatBox);
115
+ screen.append(memoryBox);
116
+ screen.append(inputBox);
117
+ return {
118
+ screen,
119
+ statusBar,
120
+ chatBox,
121
+ memoryBox,
122
+ inputBox,
123
+ };
124
+ }
125
+ //# sourceMappingURL=screen-layout.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"screen-layout.js","sourceRoot":"","sources":["../../../src/cli/ui/screen-layout.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export { loadConfig } from "./loader";
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/config/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC"}
@@ -0,0 +1,6 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.loadConfig = void 0;
4
+ var loader_1 = require("./loader");
5
+ Object.defineProperty(exports, "loadConfig", { enumerable: true, get: function () { return loader_1.loadConfig; } });
6
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/config/index.ts"],"names":[],"mappings":";;;AAAA,mCAAsC;AAA7B,oGAAA,UAAU,OAAA"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * YAML configuration loader with environment variable substitution
3
+ */
4
+ import { Config } from "../types/config";
5
+ /**
6
+ * Load and parse YAML configuration file
7
+ */
8
+ export declare function loadConfig(configPath: string): Promise<Config>;
9
+ //# sourceMappingURL=loader.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../../src/config/loader.ts"],"names":[],"mappings":"AAAA;;GAEG;AAKH,OAAO,EAAE,MAAM,EAAgB,MAAM,iBAAiB,CAAC;AAqCvD;;GAEG;AACH,wBAAsB,UAAU,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAmCpE"}
@@ -0,0 +1,107 @@
1
+ "use strict";
2
+ /**
3
+ * YAML configuration loader with environment variable substitution
4
+ */
5
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
6
+ if (k2 === undefined) k2 = k;
7
+ var desc = Object.getOwnPropertyDescriptor(m, k);
8
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
9
+ desc = { enumerable: true, get: function() { return m[k]; } };
10
+ }
11
+ Object.defineProperty(o, k2, desc);
12
+ }) : (function(o, m, k, k2) {
13
+ if (k2 === undefined) k2 = k;
14
+ o[k2] = m[k];
15
+ }));
16
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
17
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
18
+ }) : function(o, v) {
19
+ o["default"] = v;
20
+ });
21
+ var __importStar = (this && this.__importStar) || (function () {
22
+ var ownKeys = function(o) {
23
+ ownKeys = Object.getOwnPropertyNames || function (o) {
24
+ var ar = [];
25
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
26
+ return ar;
27
+ };
28
+ return ownKeys(o);
29
+ };
30
+ return function (mod) {
31
+ if (mod && mod.__esModule) return mod;
32
+ var result = {};
33
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
34
+ __setModuleDefault(result, mod);
35
+ return result;
36
+ };
37
+ })();
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ exports.loadConfig = loadConfig;
40
+ const fs = __importStar(require("fs"));
41
+ const path = __importStar(require("path"));
42
+ const yaml = __importStar(require("js-yaml"));
43
+ const config_1 = require("../types/config");
44
+ /**
45
+ * Replace environment variables in a value
46
+ * Supports patterns like ${VAR_NAME} or ${VAR_NAME:default_value}
47
+ */
48
+ function substituteEnvVars(value) {
49
+ if (typeof value === "string") {
50
+ return value.replace(/\$\{([^}:]+)(?::([^}]*))?\}/g, (match, varName, defaultValue) => {
51
+ const envValue = process.env[varName];
52
+ if (envValue !== undefined) {
53
+ return envValue;
54
+ }
55
+ if (defaultValue !== undefined) {
56
+ return defaultValue;
57
+ }
58
+ // If no default and env var not found, keep the original pattern
59
+ // This allows for optional env vars
60
+ return match;
61
+ });
62
+ }
63
+ if (Array.isArray(value)) {
64
+ return value.map(item => substituteEnvVars(item));
65
+ }
66
+ if (value !== null && typeof value === "object") {
67
+ const result = {};
68
+ for (const [key, val] of Object.entries(value)) {
69
+ result[key] = substituteEnvVars(val);
70
+ }
71
+ return result;
72
+ }
73
+ return value;
74
+ }
75
+ /**
76
+ * Load and parse YAML configuration file
77
+ */
78
+ async function loadConfig(configPath) {
79
+ const fullPath = path.resolve(configPath);
80
+ if (!fs.existsSync(fullPath)) {
81
+ throw new Error(`Configuration file not found: ${fullPath}`);
82
+ }
83
+ const fileContent = fs.readFileSync(fullPath, "utf-8");
84
+ let rawConfig;
85
+ try {
86
+ rawConfig = yaml.load(fileContent);
87
+ }
88
+ catch (error) {
89
+ throw new Error(`Failed to parse YAML: ${error instanceof Error ? error.message : String(error)}`);
90
+ }
91
+ if (!rawConfig || typeof rawConfig !== "object") {
92
+ throw new Error("Invalid YAML configuration: root must be an object");
93
+ }
94
+ // Substitute environment variables
95
+ const configWithEnv = substituteEnvVars(rawConfig);
96
+ // Validate with Zod schema
97
+ const parseResult = config_1.ConfigSchema.safeParse(configWithEnv);
98
+ if (!parseResult.success) {
99
+ const errors = parseResult.error.errors.map(err => {
100
+ const path = err.path.join(".");
101
+ return ` ${path}: ${err.message}`;
102
+ }).join("\n");
103
+ throw new Error(`Configuration validation failed:\n${errors}`);
104
+ }
105
+ return parseResult.data;
106
+ }
107
+ //# sourceMappingURL=loader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loader.js","sourceRoot":"","sources":["../../src/config/loader.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ /**
2
+ * Context builder - Format memory and docs into prompt-ready context
3
+ */
4
+ import { MemoryItem, DocChunk } from "../types";
5
+ export interface ContextConfig {
6
+ enabled: boolean;
7
+ template: string;
8
+ max_tokens: number;
9
+ }
10
+ export declare class ContextBuilder {
11
+ private config;
12
+ constructor(config: ContextConfig);
13
+ /**
14
+ * Build context string from memory and docs
15
+ */
16
+ build(memory: MemoryItem[], docs: DocChunk[]): string;
17
+ }
18
+ //# sourceMappingURL=context-builder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context-builder.d.ts","sourceRoot":"","sources":["../../src/context/context-builder.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AAEhD,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,qBAAa,cAAc;IACzB,OAAO,CAAC,MAAM,CAAgB;gBAElB,MAAM,EAAE,aAAa;IAIjC;;OAEG;IACH,KAAK,CAAC,MAAM,EAAE,UAAU,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,MAAM;CAgFtD"}
@@ -0,0 +1,91 @@
1
+ "use strict";
2
+ /**
3
+ * Context builder - Format memory and docs into prompt-ready context
4
+ */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.ContextBuilder = void 0;
7
+ class ContextBuilder {
8
+ constructor(config) {
9
+ this.config = config;
10
+ }
11
+ /**
12
+ * Build context string from memory and docs
13
+ */
14
+ build(memory, docs) {
15
+ if (!this.config.enabled) {
16
+ return "";
17
+ }
18
+ const parts = [];
19
+ // Add memory section
20
+ if (memory.length > 0) {
21
+ parts.push("[MEMORY]");
22
+ const memoryByType = {};
23
+ for (const item of memory) {
24
+ if (!memoryByType[item.type]) {
25
+ memoryByType[item.type] = [];
26
+ }
27
+ memoryByType[item.type].push(item);
28
+ }
29
+ for (const [type, items] of Object.entries(memoryByType)) {
30
+ for (const item of items) {
31
+ parts.push(`- (${type}) ${item.content}`);
32
+ }
33
+ }
34
+ parts.push("");
35
+ }
36
+ // Add docs section
37
+ if (docs.length > 0) {
38
+ parts.push("[DOC EVIDENCE]");
39
+ for (const doc of docs) {
40
+ const sourceParts = [];
41
+ if (doc.source.title)
42
+ sourceParts.push(doc.source.title);
43
+ if (doc.source.section)
44
+ sourceParts.push(`#${doc.source.section}`);
45
+ if (doc.source.page)
46
+ sourceParts.push(`p${doc.source.page}`);
47
+ const sourceStr = sourceParts.length > 0 ? ` (${sourceParts.join(", ")})` : "";
48
+ const citation = doc.citations && doc.citations.length > 0
49
+ ? ` [${doc.citations.map(c => c.label).join(", ")}]`
50
+ : "";
51
+ parts.push(`- ${doc.text}${sourceStr}${citation}`);
52
+ }
53
+ }
54
+ let context = parts.join("\n");
55
+ // Simple token estimation (rough: 1 token ≈ 4 characters)
56
+ const estimatedTokens = context.length / 4;
57
+ if (estimatedTokens > this.config.max_tokens) {
58
+ // Truncate if needed (simple approach: cut from docs first, then memory)
59
+ const maxChars = this.config.max_tokens * 4;
60
+ if (memory.length > 0 && docs.length > 0) {
61
+ // Try to keep memory, truncate docs
62
+ const memoryPart = parts.slice(0, memory.length + 2).join("\n") + "\n\n";
63
+ const memoryPartSize = memoryPart.length;
64
+ const availableForDocs = Math.max(0, maxChars - memoryPartSize - 20); // Reserve for header
65
+ if (availableForDocs > 0) {
66
+ const docsPart = parts.slice(memory.length > 0 ? memory.length + 3 : 1).join("\n");
67
+ const truncatedDocs = docsPart.substring(0, availableForDocs);
68
+ context = memoryPart + "[DOC EVIDENCE]\n" + truncatedDocs;
69
+ }
70
+ else {
71
+ // Not enough space, truncate memory only
72
+ const memoryText = parts.slice(1, memory.length + 1).join("\n");
73
+ context = "[MEMORY]\n" + memoryText.substring(0, maxChars - 20);
74
+ }
75
+ }
76
+ else if (memory.length > 0) {
77
+ // Only memory, truncate it
78
+ const memoryText = parts.slice(1, memory.length + 1).join("\n");
79
+ context = "[MEMORY]\n" + memoryText.substring(0, maxChars - 20);
80
+ }
81
+ else if (docs.length > 0) {
82
+ // Only docs, truncate them
83
+ const docsText = parts.slice(1).join("\n");
84
+ context = "[DOC EVIDENCE]\n" + docsText.substring(0, maxChars - 20);
85
+ }
86
+ }
87
+ return context;
88
+ }
89
+ }
90
+ exports.ContextBuilder = ContextBuilder;
91
+ //# sourceMappingURL=context-builder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context-builder.js","sourceRoot":"","sources":["../../src/context/context-builder.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,50 @@
1
+ /**
2
+ * AgentMemory - Main class for agent memory management
3
+ */
4
+ import { RememberOptions, RecallOptions, RecallResult, FeedbackOptions } from "../types";
5
+ import { DocumentMemoryOptions } from "../types/document";
6
+ export declare class AgentMemory {
7
+ private config;
8
+ private store;
9
+ private retriever;
10
+ private gate;
11
+ private recallEngine;
12
+ private repo;
13
+ private index;
14
+ private embedder;
15
+ private rebuilder;
16
+ private isInMemoryMode;
17
+ private documentProcessor;
18
+ private constructor();
19
+ private initInMemoryMode;
20
+ /**
21
+ * Create AgentMemory instance from YAML configuration file
22
+ */
23
+ static fromYaml(configPath: string): Promise<AgentMemory>;
24
+ /**
25
+ * Remember - Store memories from messages or text
26
+ */
27
+ remember(options: RememberOptions): Promise<void>;
28
+ private rememberInMemory;
29
+ private persistEmbeddingsAsync;
30
+ /**
31
+ * Recall - Retrieve memories and documents
32
+ */
33
+ recall(options: RecallOptions): Promise<RecallResult>;
34
+ private recallInMemory;
35
+ private generateTraceId;
36
+ /**
37
+ * Remember documents - Store document content as memories
38
+ * Supports multi-modal documents (text, PDF, images, etc.)
39
+ */
40
+ rememberDocument(options: DocumentMemoryOptions): Promise<void>;
41
+ /**
42
+ * Feedback - Provide feedback for memory utility learning (reserved for v0.2+)
43
+ */
44
+ feedback(options: FeedbackOptions): Promise<void>;
45
+ /**
46
+ * Close resources (SQLite connection, etc.)
47
+ */
48
+ close(): void;
49
+ }
50
+ //# sourceMappingURL=agent-memory.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-memory.d.ts","sourceRoot":"","sources":["../../src/core/agent-memory.ts"],"names":[],"mappings":"AAAA;;GAEG;AASH,OAAO,EACL,eAAe,EACf,aAAa,EACb,YAAY,EACZ,eAAe,EAEhB,MAAM,UAAU,CAAC;AAClB,OAAO,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AAO1D,qBAAa,WAAW;IACtB,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,KAAK,CAA4B;IACzC,OAAO,CAAC,SAAS,CAA6B;IAC9C,OAAO,CAAC,IAAI,CAAa;IACzB,OAAO,CAAC,YAAY,CAA6B;IAGjD,OAAO,CAAC,IAAI,CAAiC;IAC7C,OAAO,CAAC,KAAK,CAA8B;IAC3C,OAAO,CAAC,QAAQ,CAAyB;IACzC,OAAO,CAAC,SAAS,CAA8B;IAC/C,OAAO,CAAC,cAAc,CAAkB;IAGxC,OAAO,CAAC,iBAAiB,CAAoB;IAE7C,OAAO;IAmBP,OAAO,CAAC,gBAAgB;IAkCxB;;OAEG;WACU,QAAQ,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;IAY/D;;OAEG;IACG,QAAQ,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC;YA6BzC,gBAAgB;YA2BhB,sBAAsB;IAyBpC;;OAEG;IACG,MAAM,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,YAAY,CAAC;YAW7C,cAAc;IAmD5B,OAAO,CAAC,eAAe;IAQvB;;;OAGG;IACG,gBAAgB,CAAC,OAAO,EAAE,qBAAqB,GAAG,OAAO,CAAC,IAAI,CAAC;IA4FrE;;OAEG;IACG,QAAQ,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC;IAKvD;;OAEG;IACH,KAAK,IAAI,IAAI;CAKd"}