agent-memory-client 0.2.0 → 0.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md ADDED
@@ -0,0 +1,264 @@
1
+ # Agent Memory Client (JavaScript/TypeScript)
2
+
3
+ A TypeScript/JavaScript client for the [Agent Memory Server](https://redis.github.io/agent-memory-server/) REST API.
4
+
5
+ ## Installation
6
+
7
+ ```bash
8
+ npm install agent-memory-client
9
+ ```
10
+
11
+ ## Quick Start
12
+
13
+ ```typescript
14
+ import { MemoryAPIClient } from "agent-memory-client";
15
+
16
+ const client = new MemoryAPIClient({
17
+ baseUrl: "http://localhost:8000",
18
+ });
19
+
20
+ // Store a memory
21
+ await client.createLongTermMemory([
22
+ {
23
+ text: "User prefers dark mode and morning meetings",
24
+ memory_type: "semantic",
25
+ topics: ["preferences", "ui"],
26
+ user_id: "alice",
27
+ },
28
+ ]);
29
+
30
+ // Search memories
31
+ const results = await client.searchLongTermMemory({
32
+ text: "user interface preferences",
33
+ limit: 10,
34
+ });
35
+
36
+ console.log(`Found ${results.memories?.length} relevant memories`);
37
+ ```
38
+
39
+ ## Configuration
40
+
41
+ ```typescript
42
+ import { MemoryAPIClient } from "agent-memory-client";
43
+
44
+ const client = new MemoryAPIClient({
45
+ baseUrl: "http://localhost:8000",
46
+ timeout: 30000, // Request timeout in ms (default: 30000)
47
+ apiKey: "your-api-key", // Optional API key
48
+ bearerToken: "your-token", // Optional Bearer token
49
+ defaultNamespace: "my-app", // Optional default namespace
50
+ });
51
+ ```
52
+
53
+ ## Working Memory
54
+
55
+ ```typescript
56
+ // Create/update working memory
57
+ await client.putWorkingMemory("session-123", {
58
+ messages: [
59
+ { role: "user", content: "Hello!" },
60
+ { role: "assistant", content: "Hi there!" },
61
+ ],
62
+ data: { preferences: { theme: "dark" } },
63
+ });
64
+
65
+ // Get working memory
66
+ const memory = await client.getWorkingMemory("session-123");
67
+
68
+ // Get or create (creates if not exists)
69
+ const result = await client.getOrCreateWorkingMemory("session-123");
70
+
71
+ // Delete working memory
72
+ await client.deleteWorkingMemory("session-123");
73
+
74
+ // List all sessions
75
+ const sessions = await client.listSessions({ limit: 100 });
76
+ ```
77
+
78
+ ## Long-Term Memory
79
+
80
+ ```typescript
81
+ import { SessionId, Topics, UserId, CreatedAt } from "agent-memory-client";
82
+
83
+ // Create memories
84
+ await client.createLongTermMemory([
85
+ {
86
+ text: "User enjoys science fiction books",
87
+ memory_type: "semantic",
88
+ topics: ["books", "preferences"],
89
+ user_id: "user-123",
90
+ },
91
+ ]);
92
+
93
+ // Search with filters
94
+ const results = await client.searchLongTermMemory({
95
+ text: "science fiction",
96
+ topics: new Topics({ any: ["books", "entertainment"] }),
97
+ userId: new UserId({ eq: "user-123" }),
98
+ limit: 20,
99
+ });
100
+
101
+ // Get by ID
102
+ const memory = await client.getLongTermMemory("memory-id");
103
+
104
+ // Edit memory
105
+ await client.editLongTermMemory("memory-id", { text: "Updated text" });
106
+
107
+ // Delete memories
108
+ await client.deleteLongTermMemories(["memory-1", "memory-2"]);
109
+ ```
110
+
111
+ ## Filters
112
+
113
+ All filter types support flexible matching:
114
+
115
+ ```typescript
116
+ import {
117
+ SessionId,
118
+ Namespace,
119
+ UserId,
120
+ Topics,
121
+ Entities,
122
+ CreatedAt,
123
+ MemoryType,
124
+ } from "agent-memory-client";
125
+
126
+ // Equality
127
+ new SessionId({ eq: "session-1" });
128
+
129
+ // Multiple values
130
+ new SessionId({ in_: ["session-1", "session-2"] });
131
+
132
+ // Negation
133
+ new SessionId({ not_eq: "session-1", not_in: ["session-2"] });
134
+
135
+ // Topics/Entities matching
136
+ new Topics({ any: ["topic1", "topic2"] }); // Match any
137
+ new Topics({ all: ["topic1", "topic2"] }); // Match all
138
+ new Topics({ none: ["topic3"] }); // Exclude
139
+
140
+ // Date ranges
141
+ new CreatedAt({ gte: new Date("2024-01-01"), lte: new Date("2024-12-31") });
142
+ ```
143
+
144
+ ## Batch Operations
145
+
146
+ ```typescript
147
+ // Bulk create with rate limiting
148
+ const batches = [batch1, batch2, batch3];
149
+ await client.bulkCreateLongTermMemories(batches, {
150
+ batchSize: 50,
151
+ delayBetweenBatches: 100, // ms
152
+ });
153
+
154
+ // Auto-paginating search
155
+ for await (const memory of client.searchAllLongTermMemories({
156
+ text: "user preferences",
157
+ batchSize: 100,
158
+ })) {
159
+ console.log(memory.text);
160
+ }
161
+ ```
162
+
163
+ ## Validation
164
+
165
+ ```typescript
166
+ import { MemoryValidationError } from "agent-memory-client";
167
+
168
+ try {
169
+ client.validateMemoryRecord({ text: "", memory_type: "semantic" });
170
+ } catch (error) {
171
+ if (error instanceof MemoryValidationError) {
172
+ console.error("Validation failed:", error.message);
173
+ }
174
+ }
175
+
176
+ client.validateSearchFilters({ limit: 10, offset: 0 });
177
+ ```
178
+
179
+ ## Memory Prompt (Context Hydration)
180
+
181
+ Get memory-enhanced prompts for AI agents:
182
+
183
+ ```typescript
184
+ const prompt = await client.memoryPrompt({
185
+ query: "What does the user like?",
186
+ session: { session_id: "session-123" },
187
+ long_term_search: {
188
+ text: "user preferences",
189
+ limit: 5,
190
+ },
191
+ });
192
+ ```
193
+
194
+ ## Summary Views
195
+
196
+ Create and manage dynamic summaries:
197
+
198
+ ```typescript
199
+ // Create a summary view
200
+ const view = await client.createSummaryView({
201
+ name: "User Summaries",
202
+ source: "long_term",
203
+ group_by: ["user_id"],
204
+ });
205
+
206
+ // Run a partition
207
+ const result = await client.runSummaryViewPartition("view-id", {
208
+ user_id: "alice",
209
+ });
210
+
211
+ // List partitions
212
+ const partitions = await client.listSummaryViewPartitions("view-id");
213
+ ```
214
+
215
+ ## Forgetting Memories
216
+
217
+ Apply forgetting policies:
218
+
219
+ ```typescript
220
+ const result = await client.forgetLongTermMemories({
221
+ policy: { max_age_days: 30 },
222
+ dryRun: true, // Preview what would be deleted
223
+ });
224
+ ```
225
+
226
+ ## Error Handling
227
+
228
+ ```typescript
229
+ import {
230
+ MemoryClientError,
231
+ MemoryValidationError,
232
+ MemoryNotFoundError,
233
+ MemoryServerError,
234
+ } from "agent-memory-client";
235
+
236
+ try {
237
+ await client.getWorkingMemory("nonexistent-session");
238
+ } catch (error) {
239
+ if (error instanceof MemoryNotFoundError) {
240
+ console.log("Session not found");
241
+ } else if (error instanceof MemoryServerError) {
242
+ console.log(`Server error ${error.statusCode}: ${error.message}`);
243
+ } else if (error instanceof MemoryClientError) {
244
+ console.log(`Client error: ${error.message}`);
245
+ }
246
+ }
247
+ ```
248
+
249
+ ## TypeScript Support
250
+
251
+ Full TypeScript support with exported types:
252
+
253
+ ```typescript
254
+ import type {
255
+ MemoryRecord,
256
+ WorkingMemory,
257
+ SearchOptions,
258
+ MemoryRecordResults,
259
+ } from "agent-memory-client";
260
+ ```
261
+
262
+ ## License
263
+
264
+ MIT
package/dist/index.d.mts CHANGED
@@ -794,6 +794,49 @@ declare class MemoryAPIClient {
794
794
  * Get a task by ID
795
795
  */
796
796
  getTask(taskId: string): Promise<Task | null>;
797
+ /**
798
+ * Close the client and release any resources.
799
+ * This is a no-op for the fetch-based client but provided for API consistency.
800
+ */
801
+ close(): void;
802
+ /**
803
+ * Validate a memory record before sending to the server.
804
+ * @throws MemoryValidationError if validation fails
805
+ */
806
+ validateMemoryRecord(memory: MemoryRecord): void;
807
+ /**
808
+ * Validate search filter parameters before API call.
809
+ * @throws MemoryValidationError if validation fails
810
+ */
811
+ validateSearchFilters(filters: {
812
+ limit?: number;
813
+ offset?: number;
814
+ distanceThreshold?: number;
815
+ }): void;
816
+ /**
817
+ * Check if a string is a valid ULID.
818
+ */
819
+ private isValidUlid;
820
+ /**
821
+ * Bulk create long-term memories with rate limiting.
822
+ * Useful for importing large datasets.
823
+ */
824
+ bulkCreateLongTermMemories(memoryBatches: MemoryRecord[][], options?: {
825
+ batchSize?: number;
826
+ delayBetweenBatches?: number;
827
+ namespace?: string;
828
+ }): Promise<AckResponse[]>;
829
+ /**
830
+ * Auto-paginating search that yields all matching long-term memory results.
831
+ * Automatically handles pagination to retrieve all results.
832
+ */
833
+ searchAllLongTermMemories(options: Omit<SearchOptions, "limit" | "offset"> & {
834
+ batchSize?: number;
835
+ }): AsyncGenerator<MemoryRecord, void, undefined>;
836
+ /**
837
+ * Sleep for a specified number of milliseconds.
838
+ */
839
+ private sleep;
797
840
  }
798
841
 
799
842
  /**
package/dist/index.d.ts CHANGED
@@ -794,6 +794,49 @@ declare class MemoryAPIClient {
794
794
  * Get a task by ID
795
795
  */
796
796
  getTask(taskId: string): Promise<Task | null>;
797
+ /**
798
+ * Close the client and release any resources.
799
+ * This is a no-op for the fetch-based client but provided for API consistency.
800
+ */
801
+ close(): void;
802
+ /**
803
+ * Validate a memory record before sending to the server.
804
+ * @throws MemoryValidationError if validation fails
805
+ */
806
+ validateMemoryRecord(memory: MemoryRecord): void;
807
+ /**
808
+ * Validate search filter parameters before API call.
809
+ * @throws MemoryValidationError if validation fails
810
+ */
811
+ validateSearchFilters(filters: {
812
+ limit?: number;
813
+ offset?: number;
814
+ distanceThreshold?: number;
815
+ }): void;
816
+ /**
817
+ * Check if a string is a valid ULID.
818
+ */
819
+ private isValidUlid;
820
+ /**
821
+ * Bulk create long-term memories with rate limiting.
822
+ * Useful for importing large datasets.
823
+ */
824
+ bulkCreateLongTermMemories(memoryBatches: MemoryRecord[][], options?: {
825
+ batchSize?: number;
826
+ delayBetweenBatches?: number;
827
+ namespace?: string;
828
+ }): Promise<AckResponse[]>;
829
+ /**
830
+ * Auto-paginating search that yields all matching long-term memory results.
831
+ * Automatically handles pagination to retrieve all results.
832
+ */
833
+ searchAllLongTermMemories(options: Omit<SearchOptions, "limit" | "offset"> & {
834
+ batchSize?: number;
835
+ }): AsyncGenerator<MemoryRecord, void, undefined>;
836
+ /**
837
+ * Sleep for a specified number of milliseconds.
838
+ */
839
+ private sleep;
797
840
  }
798
841
 
799
842
  /**
package/dist/index.js CHANGED
@@ -211,7 +211,7 @@ var MemoryType = class {
211
211
  };
212
212
 
213
213
  // src/client.ts
214
- var VERSION = "0.1.0";
214
+ var VERSION = "0.3.1";
215
215
  var MemoryAPIClient = class {
216
216
  config;
217
217
  fetchFn;
@@ -289,11 +289,12 @@ var MemoryAPIClient = class {
289
289
  */
290
290
  async handleHttpError(response) {
291
291
  let message;
292
+ const text = await response.text();
292
293
  try {
293
- const body = await response.json();
294
+ const body = JSON.parse(text);
294
295
  message = body.detail || body.message || JSON.stringify(body);
295
296
  } catch {
296
- message = await response.text();
297
+ message = text || `HTTP ${response.status}`;
297
298
  }
298
299
  if (response.status === 404) {
299
300
  throw new MemoryNotFoundError(message);
@@ -626,6 +627,101 @@ var MemoryAPIClient = class {
626
627
  throw error;
627
628
  }
628
629
  }
630
+ // ==================== Utility Methods ====================
631
+ /**
632
+ * Close the client and release any resources.
633
+ * This is a no-op for the fetch-based client but provided for API consistency.
634
+ */
635
+ close() {
636
+ }
637
+ /**
638
+ * Validate a memory record before sending to the server.
639
+ * @throws MemoryValidationError if validation fails
640
+ */
641
+ validateMemoryRecord(memory) {
642
+ if (!memory.text || !memory.text.trim()) {
643
+ throw new MemoryValidationError("Memory text cannot be empty");
644
+ }
645
+ const validMemoryTypes = ["episodic", "semantic", "message"];
646
+ if (memory.memory_type && !validMemoryTypes.includes(memory.memory_type)) {
647
+ throw new MemoryValidationError(`Invalid memory type: ${memory.memory_type}`);
648
+ }
649
+ if (memory.id && !this.isValidUlid(memory.id)) {
650
+ throw new MemoryValidationError(`Invalid ID format: ${memory.id}`);
651
+ }
652
+ }
653
+ /**
654
+ * Validate search filter parameters before API call.
655
+ * @throws MemoryValidationError if validation fails
656
+ */
657
+ validateSearchFilters(filters) {
658
+ if (filters.limit !== void 0 && (typeof filters.limit !== "number" || filters.limit <= 0)) {
659
+ throw new MemoryValidationError("Limit must be a positive integer");
660
+ }
661
+ if (filters.offset !== void 0 && (typeof filters.offset !== "number" || filters.offset < 0)) {
662
+ throw new MemoryValidationError("Offset must be a non-negative integer");
663
+ }
664
+ if (filters.distanceThreshold !== void 0 && (typeof filters.distanceThreshold !== "number" || filters.distanceThreshold < 0)) {
665
+ throw new MemoryValidationError("Distance threshold must be a non-negative number");
666
+ }
667
+ }
668
+ /**
669
+ * Check if a string is a valid ULID.
670
+ */
671
+ isValidUlid(id) {
672
+ const ulidRegex = /^[0-7][0-9A-HJKMNP-TV-Z]{25}$/i;
673
+ return ulidRegex.test(id);
674
+ }
675
+ /**
676
+ * Bulk create long-term memories with rate limiting.
677
+ * Useful for importing large datasets.
678
+ */
679
+ async bulkCreateLongTermMemories(memoryBatches, options = {}) {
680
+ const { batchSize = 50, delayBetweenBatches = 100, namespace } = options;
681
+ const results = [];
682
+ for (const batch of memoryBatches) {
683
+ for (let i = 0; i < batch.length; i += batchSize) {
684
+ const chunk = batch.slice(i, i + batchSize);
685
+ const response = await this.createLongTermMemory(chunk, { namespace });
686
+ results.push(response);
687
+ if (delayBetweenBatches > 0) {
688
+ await this.sleep(delayBetweenBatches);
689
+ }
690
+ }
691
+ }
692
+ return results;
693
+ }
694
+ /**
695
+ * Auto-paginating search that yields all matching long-term memory results.
696
+ * Automatically handles pagination to retrieve all results.
697
+ */
698
+ async *searchAllLongTermMemories(options) {
699
+ const { batchSize = 50, ...searchOptions } = options;
700
+ let offset = 0;
701
+ while (true) {
702
+ const results = await this.searchLongTermMemory({
703
+ ...searchOptions,
704
+ limit: batchSize,
705
+ offset
706
+ });
707
+ if (!results.memories || results.memories.length === 0) {
708
+ break;
709
+ }
710
+ for (const memory of results.memories) {
711
+ yield memory;
712
+ }
713
+ if (results.memories.length < batchSize) {
714
+ break;
715
+ }
716
+ offset += batchSize;
717
+ }
718
+ }
719
+ /**
720
+ * Sleep for a specified number of milliseconds.
721
+ */
722
+ sleep(ms) {
723
+ return new Promise((resolve) => setTimeout(resolve, ms));
724
+ }
629
725
  };
630
726
 
631
727
  exports.CreatedAt = CreatedAt;
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/errors.ts","../src/filters.ts","../src/client.ts"],"names":[],"mappings":";;;AAOO,IAAM,iBAAA,GAAN,MAAM,kBAAA,SAA0B,KAAA,CAAM;AAAA,EAC3C,YAAY,OAAA,EAAiB;AAC3B,IAAA,KAAA,CAAM,OAAO,CAAA;AACb,IAAA,IAAA,CAAK,IAAA,GAAO,mBAAA;AAEZ,IAAA,IAAI,MAAM,iBAAA,EAAmB;AAC3B,MAAA,KAAA,CAAM,iBAAA,CAAkB,MAAM,kBAAiB,CAAA;AAAA,IACjD;AAAA,EACF;AACF;AAKO,IAAM,qBAAA,GAAN,cAAoC,iBAAA,CAAkB;AAAA,EAC3D,YAAY,OAAA,EAAiB;AAC3B,IAAA,KAAA,CAAM,OAAO,CAAA;AACb,IAAA,IAAA,CAAK,IAAA,GAAO,uBAAA;AAAA,EACd;AACF;AAKO,IAAM,mBAAA,GAAN,cAAkC,iBAAA,CAAkB;AAAA,EACzD,YAAY,OAAA,EAAiB;AAC3B,IAAA,KAAA,CAAM,OAAO,CAAA;AACb,IAAA,IAAA,CAAK,IAAA,GAAO,qBAAA;AAAA,EACd;AACF;AAKO,IAAM,iBAAA,GAAN,cAAgC,iBAAA,CAAkB;AAAA,EACvD,UAAA;AAAA,EAEA,WAAA,CAAY,SAAiB,UAAA,EAAqB;AAChD,IAAA,KAAA,CAAM,OAAO,CAAA;AACb,IAAA,IAAA,CAAK,IAAA,GAAO,mBAAA;AACZ,IAAA,IAAA,CAAK,UAAA,GAAa,UAAA;AAAA,EACpB;AACF;;;ACxCO,IAAM,YAAN,MAAgB;AAAA,EACrB,EAAA;AAAA,EACA,GAAA;AAAA,EACA,MAAA;AAAA,EACA,MAAA;AAAA,EACA,EAAA;AAAA,EAEA,WAAA,CAAY,OAAA,GAMR,EAAC,EAAG;AACN,IAAA,IAAA,CAAK,KAAK,OAAA,CAAQ,EAAA;AAClB,IAAA,IAAA,CAAK,MAAM,OAAA,CAAQ,GAAA;AACnB,IAAA,IAAA,CAAK,SAAS,OAAA,CAAQ,MAAA;AACtB,IAAA,IAAA,CAAK,SAAS,OAAA,CAAQ,MAAA;AACtB,IAAA,IAAA,CAAK,KAAK,OAAA,CAAQ,EAAA;AAAA,EACpB;AAAA,EAEA,MAAA,GAAkC;AAChC,IAAA,MAAM,SAAkC,EAAC;AACzC,IAAA,IAAI,IAAA,CAAK,EAAA,KAAO,MAAA,EAAW,MAAA,CAAO,KAAK,IAAA,CAAK,EAAA;AAC5C,IAAA,IAAI,IAAA,CAAK,GAAA,KAAQ,MAAA,EAAW,MAAA,CAAO,MAAM,IAAA,CAAK,GAAA;AAC9C,IAAA,IAAI,IAAA,CAAK,MAAA,KAAW,MAAA,EAAW,MAAA,CAAO,SAAS,IAAA,CAAK,MAAA;AACpD,IAAA,IAAI,IAAA,CAAK,MAAA,KAAW,MAAA,EAAW,MAAA,CAAO,SAAS,IAAA,CAAK,MAAA;AACpD,IAAA,IAAI,IAAA,CAAK,EAAA,KAAO,MAAA,EAAW,MAAA,CAAO,KAAK,IAAA,CAAK,EAAA;AAC5C,IAAA,OAAO,MAAA;AAAA,EACT;AACF;AAKO,IAAM,YAAN,MAAgB;AAAA,EACrB,EAAA;AAAA,EACA,GAAA;AAAA,EACA,MAAA;AAAA,EACA,MAAA;AAAA,EAEA,WAAA,CAAY,OAAA,GAKR,EAAC,EAAG;AACN,IAAA,IAAA,CAAK,KAAK,OAAA,CAAQ,EAAA;AAClB,IAAA,IAAA,CAAK,MAAM,OAAA,CAAQ,GAAA;AACnB,IAAA,IAAA,CAAK,SAAS,OAAA,CAAQ,MAAA;AACtB,IAAA,IAAA,CAAK,SAAS,OAAA,CAAQ,MAAA;AAAA,EACxB;AAAA,EAEA,MAAA,GAAkC;AAChC,IAAA,MAAM,SAAkC,EAAC;AACzC,IAAA,IAAI,IAAA,CAAK,EAAA,KAAO,MAAA,EAAW,MAAA,CAAO,KAAK,IAAA,CAAK,EAAA;AAC5C,IAAA,IAAI,IAAA,CAAK,GAAA,KAAQ,MAAA,EAAW,MAAA,CAAO,MAAM,IAAA,CAAK,GAAA;AAC9C,IAAA,IAAI,IAAA,CAAK,MAAA,KAAW,MAAA,EAAW,MAAA,CAAO,SAAS,IAAA,CAAK,MAAA;AACpD,IAAA,IAAI,IAAA,CAAK,MAAA,KAAW,MAAA,EAAW,MAAA,CAAO,SAAS,IAAA,CAAK,MAAA;AACpD,IAAA,OAAO,MAAA;AAAA,EACT;AACF;AAKO,IAAM,SAAN,MAAa;AAAA,EAClB,EAAA;AAAA,EACA,GAAA;AAAA,EACA,MAAA;AAAA,EACA,MAAA;AAAA,EAEA,WAAA,CAAY,OAAA,GAKR,EAAC,EAAG;AACN,IAAA,IAAA,CAAK,KAAK,OAAA,CAAQ,EAAA;AAClB,IAAA,IAAA,CAAK,MAAM,OAAA,CAAQ,GAAA;AACnB,IAAA,IAAA,CAAK,SAAS,OAAA,CAAQ,MAAA;AACtB,IAAA,IAAA,CAAK,SAAS,OAAA,CAAQ,MAAA;AAAA,EACxB;AAAA,EAEA,MAAA,GAAkC;AAChC,IAAA,MAAM,SAAkC,EAAC;AACzC,IAAA,IAAI,IAAA,CAAK,EAAA,KAAO,MAAA,EAAW,MAAA,CAAO,KAAK,IAAA,CAAK,EAAA;AAC5C,IAAA,IAAI,IAAA,CAAK,GAAA,KAAQ,MAAA,EAAW,MAAA,CAAO,MAAM,IAAA,CAAK,GAAA;AAC9C,IAAA,IAAI,IAAA,CAAK,MAAA,KAAW,MAAA,EAAW,MAAA,CAAO,SAAS,IAAA,CAAK,MAAA;AACpD,IAAA,IAAI,IAAA,CAAK,MAAA,KAAW,MAAA,EAAW,MAAA,CAAO,SAAS,IAAA,CAAK,MAAA;AACpD,IAAA,OAAO,MAAA;AAAA,EACT;AACF;AAKO,IAAM,SAAN,MAAa;AAAA,EAClB,GAAA;AAAA,EACA,GAAA;AAAA,EACA,IAAA;AAAA,EAEA,WAAA,CAAY,OAAA,GAIR,EAAC,EAAG;AACN,IAAA,IAAA,CAAK,MAAM,OAAA,CAAQ,GAAA;AACnB,IAAA,IAAA,CAAK,MAAM,OAAA,CAAQ,GAAA;AACnB,IAAA,IAAA,CAAK,OAAO,OAAA,CAAQ,IAAA;AAAA,EACtB;AAAA,EAEA,MAAA,GAAkC;AAChC,IAAA,MAAM,SAAkC,EAAC;AACzC,IAAA,IAAI,IAAA,CAAK,GAAA,KAAQ,MAAA,EAAW,MAAA,CAAO,MAAM,IAAA,CAAK,GAAA;AAC9C,IAAA,IAAI,IAAA,CAAK,GAAA,KAAQ,MAAA,EAAW,MAAA,CAAO,MAAM,IAAA,CAAK,GAAA;AAC9C,IAAA,IAAI,IAAA,CAAK,IAAA,KAAS,MAAA,EAAW,MAAA,CAAO,OAAO,IAAA,CAAK,IAAA;AAChD,IAAA,OAAO,MAAA;AAAA,EACT;AACF;AAKO,IAAM,WAAN,MAAe;AAAA,EACpB,GAAA;AAAA,EACA,GAAA;AAAA,EACA,IAAA;AAAA,EAEA,WAAA,CAAY,OAAA,GAIR,EAAC,EAAG;AACN,IAAA,IAAA,CAAK,MAAM,OAAA,CAAQ,GAAA;AACnB,IAAA,IAAA,CAAK,MAAM,OAAA,CAAQ,GAAA;AACnB,IAAA,IAAA,CAAK,OAAO,OAAA,CAAQ,IAAA;AAAA,EACtB;AAAA,EAEA,MAAA,GAAkC;AAChC,IAAA,MAAM,SAAkC,EAAC;AACzC,IAAA,IAAI,IAAA,CAAK,GAAA,KAAQ,MAAA,EAAW,MAAA,CAAO,MAAM,IAAA,CAAK,GAAA;AAC9C,IAAA,IAAI,IAAA,CAAK,GAAA,KAAQ,MAAA,EAAW,MAAA,CAAO,MAAM,IAAA,CAAK,GAAA;AAC9C,IAAA,IAAI,IAAA,CAAK,IAAA,KAAS,MAAA,EAAW,MAAA,CAAO,OAAO,IAAA,CAAK,IAAA;AAChD,IAAA,OAAO,MAAA;AAAA,EACT;AACF;AAKO,IAAM,YAAN,MAAgB;AAAA,EACrB,GAAA;AAAA,EACA,GAAA;AAAA,EACA,EAAA;AAAA,EAEA,WAAA,CAAY,OAAA,GAIR,EAAC,EAAG;AACN,IAAA,IAAA,CAAK,MAAM,OAAA,CAAQ,GAAA;AACnB,IAAA,IAAA,CAAK,MAAM,OAAA,CAAQ,GAAA;AACnB,IAAA,IAAA,CAAK,KAAK,OAAA,CAAQ,EAAA;AAAA,EACpB;AAAA,EAEA,MAAA,GAAkC;AAChC,IAAA,MAAM,SAAkC,EAAC;AACzC,IAAA,IAAI,KAAK,GAAA,KAAQ,MAAA;AACf,MAAA,MAAA,CAAO,GAAA,GAAM,KAAK,GAAA,YAAe,IAAA,GAAO,KAAK,GAAA,CAAI,WAAA,KAAgB,IAAA,CAAK,GAAA;AACxE,IAAA,IAAI,KAAK,GAAA,KAAQ,MAAA;AACf,MAAA,MAAA,CAAO,GAAA,GAAM,KAAK,GAAA,YAAe,IAAA,GAAO,KAAK,GAAA,CAAI,WAAA,KAAgB,IAAA,CAAK,GAAA;AACxE,IAAA,IAAI,KAAK,EAAA,KAAO,MAAA;AACd,MAAA,MAAA,CAAO,EAAA,GAAK,KAAK,EAAA,YAAc,IAAA,GAAO,KAAK,EAAA,CAAG,WAAA,KAAgB,IAAA,CAAK,EAAA;AACrE,IAAA,OAAO,MAAA;AAAA,EACT;AACF;AAKO,IAAM,eAAN,MAAmB;AAAA,EACxB,GAAA;AAAA,EACA,GAAA;AAAA,EACA,EAAA;AAAA,EAEA,WAAA,CAAY,OAAA,GAIR,EAAC,EAAG;AACN,IAAA,IAAA,CAAK,MAAM,OAAA,CAAQ,GAAA;AACnB,IAAA,IAAA,CAAK,MAAM,OAAA,CAAQ,GAAA;AACnB,IAAA,IAAA,CAAK,KAAK,OAAA,CAAQ,EAAA;AAAA,EACpB;AAAA,EAEA,MAAA,GAAkC;AAChC,IAAA,MAAM,SAAkC,EAAC;AACzC,IAAA,IAAI,KAAK,GAAA,KAAQ,MAAA;AACf,MAAA,MAAA,CAAO,GAAA,GAAM,KAAK,GAAA,YAAe,IAAA,GAAO,KAAK,GAAA,CAAI,WAAA,KAAgB,IAAA,CAAK,GAAA;AACxE,IAAA,IAAI,KAAK,GAAA,KAAQ,MAAA;AACf,MAAA,MAAA,CAAO,GAAA,GAAM,KAAK,GAAA,YAAe,IAAA,GAAO,KAAK,GAAA,CAAI,WAAA,KAAgB,IAAA,CAAK,GAAA;AACxE,IAAA,IAAI,KAAK,EAAA,KAAO,MAAA;AACd,MAAA,MAAA,CAAO,EAAA,GAAK,KAAK,EAAA,YAAc,IAAA,GAAO,KAAK,EAAA,CAAG,WAAA,KAAgB,IAAA,CAAK,EAAA;AACrE,IAAA,OAAO,MAAA;AAAA,EACT;AACF;AAKO,IAAM,YAAN,MAAgB;AAAA,EACrB,GAAA;AAAA,EACA,GAAA;AAAA,EACA,EAAA;AAAA,EAEA,WAAA,CAAY,OAAA,GAIR,EAAC,EAAG;AACN,IAAA,IAAA,CAAK,MAAM,OAAA,CAAQ,GAAA;AACnB,IAAA,IAAA,CAAK,MAAM,OAAA,CAAQ,GAAA;AACnB,IAAA,IAAA,CAAK,KAAK,OAAA,CAAQ,EAAA;AAAA,EACpB;AAAA,EAEA,MAAA,GAAkC;AAChC,IAAA,MAAM,SAAkC,EAAC;AACzC,IAAA,IAAI,KAAK,GAAA,KAAQ,MAAA;AACf,MAAA,MAAA,CAAO,GAAA,GAAM,KAAK,GAAA,YAAe,IAAA,GAAO,KAAK,GAAA,CAAI,WAAA,KAAgB,IAAA,CAAK,GAAA;AACxE,IAAA,IAAI,KAAK,GAAA,KAAQ,MAAA;AACf,MAAA,MAAA,CAAO,GAAA,GAAM,KAAK,GAAA,YAAe,IAAA,GAAO,KAAK,GAAA,CAAI,WAAA,KAAgB,IAAA,CAAK,GAAA;AACxE,IAAA,IAAI,KAAK,EAAA,KAAO,MAAA;AACd,MAAA,MAAA,CAAO,EAAA,GAAK,KAAK,EAAA,YAAc,IAAA,GAAO,KAAK,EAAA,CAAG,WAAA,KAAgB,IAAA,CAAK,EAAA;AACrE,IAAA,OAAO,MAAA;AAAA,EACT;AACF;AAKO,IAAM,aAAN,MAAiB;AAAA,EACtB,EAAA;AAAA,EACA,GAAA;AAAA,EACA,MAAA;AAAA,EACA,MAAA;AAAA,EAEA,WAAA,CAAY,OAAA,GAKR,EAAC,EAAG;AACN,IAAA,IAAA,CAAK,KAAK,OAAA,CAAQ,EAAA;AAClB,IAAA,IAAA,CAAK,MAAM,OAAA,CAAQ,GAAA;AACnB,IAAA,IAAA,CAAK,SAAS,OAAA,CAAQ,MAAA;AACtB,IAAA,IAAA,CAAK,SAAS,OAAA,CAAQ,MAAA;AAAA,EACxB;AAAA,EAEA,MAAA,GAAkC;AAChC,IAAA,MAAM,SAAkC,EAAC;AACzC,IAAA,IAAI,IAAA,CAAK,EAAA,KAAO,MAAA,EAAW,MAAA,CAAO,KAAK,IAAA,CAAK,EAAA;AAC5C,IAAA,IAAI,IAAA,CAAK,GAAA,KAAQ,MAAA,EAAW,MAAA,CAAO,MAAM,IAAA,CAAK,GAAA;AAC9C,IAAA,IAAI,IAAA,CAAK,MAAA,KAAW,MAAA,EAAW,MAAA,CAAO,SAAS,IAAA,CAAK,MAAA;AACpD,IAAA,IAAI,IAAA,CAAK,MAAA,KAAW,MAAA,EAAW,MAAA,CAAO,SAAS,IAAA,CAAK,MAAA;AACpD,IAAA,OAAO,MAAA;AAAA,EACT;AACF;;;ACzOA,IAAM,OAAA,GAAU,OAAA;AAqDT,IAAM,kBAAN,MAAsB;AAAA,EACV,MAAA;AAAA,EAIA,OAAA;AAAA,EAEjB,YAAY,MAAA,EAA4B;AACtC,IAAA,IAAA,CAAK,MAAA,GAAS;AAAA,MACZ,OAAA,EAAS,GAAA;AAAA,MACT,GAAG,MAAA;AAAA,MACH,OAAA,EAAS,MAAA,CAAO,OAAA,CAAQ,OAAA,CAAQ,OAAO,EAAE;AAAA;AAAA,KAC3C;AACA,IAAA,IAAA,CAAK,OAAA,GAAU,OAAO,KAAA,IAAS,KAAA;AAAA,EACjC;AAAA;AAAA;AAAA;AAAA,EAKQ,UAAA,GAAqC;AAC3C,IAAA,MAAM,OAAA,GAAkC;AAAA,MACtC,cAAA,EAAgB,kBAAA;AAAA,MAChB,YAAA,EAAc,0BAA0B,OAAO,CAAA,CAAA;AAAA,MAC/C,kBAAA,EAAoB;AAAA,KACtB;AAEA,IAAA,IAAI,IAAA,CAAK,OAAO,MAAA,EAAQ;AACtB,MAAA,OAAA,CAAQ,WAAW,CAAA,GAAI,IAAA,CAAK,MAAA,CAAO,MAAA;AAAA,IACrC;AACA,IAAA,IAAI,IAAA,CAAK,OAAO,WAAA,EAAa;AAC3B,MAAA,OAAA,CAAQ,eAAe,CAAA,GAAI,CAAA,OAAA,EAAU,IAAA,CAAK,OAAO,WAAW,CAAA,CAAA;AAAA,IAC9D;AAEA,IAAA,OAAO,OAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKA,MAAc,OAAA,CACZ,MAAA,EACA,IAAA,EACA,OAAA,GAGI,EAAC,EACO;AACZ,IAAA,MAAM,MAAM,IAAI,GAAA,CAAI,IAAA,EAAM,IAAA,CAAK,OAAO,OAAO,CAAA;AAG7C,IAAA,IAAI,QAAQ,MAAA,EAAQ;AAClB,MAAA,KAAA,MAAW,CAAC,KAAK,KAAK,CAAA,IAAK,OAAO,OAAA,CAAQ,OAAA,CAAQ,MAAM,CAAA,EAAG;AACzD,QAAA,IAAI,UAAU,MAAA,EAAW;AACvB,UAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,EAAG;AAExB,YAAA,KAAA,MAAW,QAAQ,KAAA,EAAO;AACxB,cAAA,GAAA,CAAI,YAAA,CAAa,MAAA,CAAO,GAAA,EAAK,MAAA,CAAO,IAAI,CAAC,CAAA;AAAA,YAC3C;AAAA,UACF,CAAA,MAAO;AACL,YAAA,GAAA,CAAI,YAAA,CAAa,GAAA,CAAI,GAAA,EAAK,MAAA,CAAO,KAAK,CAAC,CAAA;AAAA,UACzC;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAEA,IAAA,MAAM,UAAA,GAAa,IAAI,eAAA,EAAgB;AACvC,IAAA,MAAM,SAAA,GAAY,WAAW,MAAM,UAAA,CAAW,OAAM,EAAG,IAAA,CAAK,OAAO,OAAO,CAAA;AAE1E,IAAA,IAAI;AACF,MAAA,MAAM,WAAW,MAAM,IAAA,CAAK,OAAA,CAAQ,GAAA,CAAI,UAAS,EAAG;AAAA,QAClD,MAAA;AAAA,QACA,OAAA,EAAS,KAAK,UAAA,EAAW;AAAA,QACzB,MAAM,OAAA,CAAQ,IAAA,GAAO,KAAK,SAAA,CAAU,OAAA,CAAQ,IAAI,CAAA,GAAI,KAAA,CAAA;AAAA,QACpD,QAAQ,UAAA,CAAW;AAAA,OACpB,CAAA;AAED,MAAA,YAAA,CAAa,SAAS,CAAA;AAEtB,MAAA,IAAI,CAAC,SAAS,EAAA,EAAI;AAChB,QAAA,OAAO,IAAA,CAAK,gBAAgB,QAAQ,CAAA;AAAA,MACtC;AAEA,MAAA,OAAQ,MAAM,SAAS,IAAA,EAAK;AAAA,IAC9B,SAAS,KAAA,EAAO;AACd,MAAA,YAAA,CAAa,SAAS,CAAA;AACtB,MAAA,IAAI,iBAAiB,iBAAA,EAAmB;AACtC,QAAA,MAAM,KAAA;AAAA,MACR;AACA,MAAA,IAAI,KAAA,YAAiB,KAAA,IAAS,KAAA,CAAM,IAAA,KAAS,YAAA,EAAc;AACzD,QAAA,MAAM,IAAI,iBAAA,CAAkB,CAAA,sBAAA,EAAyB,IAAA,CAAK,MAAA,CAAO,OAAO,CAAA,EAAA,CAAI,CAAA;AAAA,MAC9E;AACA,MAAA,MAAM,IAAI,iBAAA,CAAkB,CAAA,gBAAA,EAAmB,MAAA,CAAO,KAAK,CAAC,CAAA,CAAE,CAAA;AAAA,IAChE;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,MAAc,gBAAgB,QAAA,EAAoC;AAChE,IAAA,IAAI,OAAA;AACJ,IAAA,IAAI;AACF,MAAA,MAAM,IAAA,GAAQ,MAAM,QAAA,CAAS,IAAA,EAAK;AAClC,MAAA,OAAA,GACG,KAAK,MAAA,IAAsB,IAAA,CAAK,OAAA,IAAsB,IAAA,CAAK,UAAU,IAAI,CAAA;AAAA,IAC9E,CAAA,CAAA,MAAQ;AACN,MAAA,OAAA,GAAU,MAAM,SAAS,IAAA,EAAK;AAAA,IAChC;AAEA,IAAA,IAAI,QAAA,CAAS,WAAW,GAAA,EAAK;AAC3B,MAAA,MAAM,IAAI,oBAAoB,OAAO,CAAA;AAAA,IACvC;AACA,IAAA,MAAM,IAAI,iBAAA,CAAkB,OAAA,EAAS,QAAA,CAAS,MAAM,CAAA;AAAA,EACtD;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAM,WAAA,GAA4C;AAChD,IAAA,OAAO,IAAA,CAAK,OAAA,CAA6B,KAAA,EAAO,YAAY,CAAA;AAAA,EAC9D;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAM,YAAA,CAAa,OAAA,GAIf,EAAC,EAAiC;AACpC,IAAA,OAAO,IAAA,CAAK,OAAA,CAA6B,KAAA,EAAO,qBAAA,EAAuB;AAAA,MACrE,MAAA,EAAQ;AAAA,QACN,SAAA,EAAW,OAAA,CAAQ,SAAA,IAAa,IAAA,CAAK,MAAA,CAAO,gBAAA;AAAA,QAC5C,OAAO,OAAA,CAAQ,KAAA;AAAA,QACf,QAAQ,OAAA,CAAQ;AAAA;AAClB,KACD,CAAA;AAAA,EACH;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,gBAAA,CACJ,SAAA,EACA,OAAA,GAII,EAAC,EACkC;AACvC,IAAA,IAAI;AACF,MAAA,OAAO,MAAM,IAAA,CAAK,OAAA;AAAA,QAChB,KAAA;AAAA,QACA,CAAA,mBAAA,EAAsB,kBAAA,CAAmB,SAAS,CAAC,CAAA,CAAA;AAAA,QACnD;AAAA,UACE,MAAA,EAAQ;AAAA,YACN,SAAA,EAAW,OAAA,CAAQ,SAAA,IAAa,IAAA,CAAK,MAAA,CAAO,gBAAA;AAAA,YAC5C,UAAA,EAAY,OAAA,CAAQ,SAAA,IAAa,IAAA,CAAK,MAAA,CAAO,gBAAA;AAAA,YAC7C,kBAAA,EAAoB,OAAA,CAAQ,gBAAA,IAAoB,IAAA,CAAK,MAAA,CAAO;AAAA;AAC9D;AACF,OACF;AAAA,IACF,SAAS,KAAA,EAAO;AACd,MAAA,IAAI,iBAAiB,mBAAA,EAAqB;AACxC,QAAA,OAAO,IAAA;AAAA,MACT;AACA,MAAA,MAAM,KAAA;AAAA,IACR;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,wBAAA,CACJ,SAAA,EACA,OAAA,GAOI,EAAC,EAC2B;AAChC,IAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,gBAAA,CAAiB,WAAW,OAAO,CAAA;AAC/D,IAAA,IAAI,QAAA,EAAU;AACZ,MAAA,OAAO,QAAA;AAAA,IACT;AAGA,IAAA,MAAM,aAAA,GAA+B;AAAA,MACnC,UAAA,EAAY,SAAA;AAAA,MACZ,SAAA,EAAW,OAAA,CAAQ,SAAA,IAAa,IAAA,CAAK,MAAA,CAAO,gBAAA;AAAA,MAC5C,SAAS,OAAA,CAAQ,MAAA;AAAA,MACjB,UAAU,EAAC;AAAA,MACX,UAAU,EAAC;AAAA,MACX,aAAa,OAAA,CAAQ,UAAA;AAAA,MACrB,2BAA2B,OAAA,CAAQ;AAAA,KACrC;AAEA,IAAA,OAAO,IAAA,CAAK,gBAAA,CAAiB,SAAA,EAAW,aAAA,EAAe,OAAO,CAAA;AAAA,EAChE;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,gBAAA,CACJ,SAAA,EACA,aAAA,EACA,OAAA,GAKI,EAAC,EAC2B;AAChC,IAAA,MAAM,IAAA,GAAsB;AAAA,MAC1B,UAAA,EAAY,SAAA;AAAA,MACZ,GAAG,aAAA;AAAA,MACH,WAAW,aAAA,CAAc,SAAA,IAAa,OAAA,CAAQ,SAAA,IAAa,KAAK,MAAA,CAAO;AAAA,KACzE;AAEA,IAAA,OAAO,IAAA,CAAK,OAAA;AAAA,MACV,KAAA;AAAA,MACA,CAAA,mBAAA,EAAsB,kBAAA,CAAmB,SAAS,CAAC,CAAA,CAAA;AAAA,MACnD;AAAA,QACE,IAAA;AAAA,QACA,MAAA,EAAQ;AAAA,UACN,UAAA,EAAY,OAAA,CAAQ,SAAA,IAAa,IAAA,CAAK,MAAA,CAAO,gBAAA;AAAA,UAC7C,kBAAA,EAAoB,OAAA,CAAQ,gBAAA,IAAoB,IAAA,CAAK,MAAA,CAAO,uBAAA;AAAA,UAC5D,YAAY,OAAA,CAAQ;AAAA;AACtB;AACF,KACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,mBAAA,CACJ,SAAA,EACA,OAAA,GAAkC,EAAC,EACb;AACtB,IAAA,OAAO,IAAA,CAAK,OAAA;AAAA,MACV,QAAA;AAAA,MACA,CAAA,mBAAA,EAAsB,kBAAA,CAAmB,SAAS,CAAC,CAAA,CAAA;AAAA,MACnD;AAAA,QACE,MAAA,EAAQ;AAAA,UACN,SAAA,EAAW,OAAA,CAAQ,SAAA,IAAa,IAAA,CAAK,MAAA,CAAO;AAAA;AAC9C;AACF,KACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAM,oBAAA,CACJ,QAAA,EACA,OAAA,GAAkC,EAAC,EACb;AACtB,IAAA,OAAO,IAAA,CAAK,OAAA,CAAqB,MAAA,EAAQ,uBAAA,EAAyB;AAAA,MAChE,IAAA,EAAM,EAAE,QAAA,EAAS;AAAA,MACjB,MAAA,EAAQ;AAAA,QACN,SAAA,EAAW,OAAA,CAAQ,SAAA,IAAa,IAAA,CAAK,MAAA,CAAO;AAAA;AAC9C,KACD,CAAA;AAAA,EACH;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,qBAAqB,OAAA,EAAsD;AAC/E,IAAA,MAAM,IAAA,GAAgC;AAAA,MACpC,MAAM,OAAA,CAAQ,IAAA;AAAA,MACd,OAAO,OAAA,CAAQ,KAAA;AAAA,MACf,QAAQ,OAAA,CAAQ,MAAA;AAAA,MAChB,oBAAoB,OAAA,CAAQ;AAAA,KAC9B;AAGA,IAAA,IAAI,QAAQ,SAAA,EAAW;AACrB,MAAA,IAAA,CAAK,UAAA,GACH,QAAQ,SAAA,YAAqB,SAAA,GACzB,QAAQ,SAAA,CAAU,MAAA,KAClB,OAAA,CAAQ,SAAA;AAAA,IAChB;AACA,IAAA,IAAI,QAAQ,SAAA,EAAW;AACrB,MAAA,IAAA,CAAK,SAAA,GACH,QAAQ,SAAA,YAAqB,SAAA,GACzB,QAAQ,SAAA,CAAU,MAAA,KAClB,OAAA,CAAQ,SAAA;AAAA,IAChB;AACA,IAAA,IAAI,QAAQ,MAAA,EAAQ;AAClB,MAAA,IAAA,CAAK,MAAA,GACH,QAAQ,MAAA,YAAkB,MAAA,GAAS,QAAQ,MAAA,CAAO,MAAA,KAAW,OAAA,CAAQ,MAAA;AAAA,IACzE;AACA,IAAA,IAAI,QAAQ,QAAA,EAAU;AACpB,MAAA,IAAA,CAAK,QAAA,GACH,QAAQ,QAAA,YAAoB,QAAA,GACxB,QAAQ,QAAA,CAAS,MAAA,KACjB,OAAA,CAAQ,QAAA;AAAA,IAChB;AACA,IAAA,IAAI,QAAQ,SAAA,EAAW;AACrB,MAAA,IAAA,CAAK,UAAA,GACH,QAAQ,SAAA,YAAqB,SAAA,GACzB,QAAQ,SAAA,CAAU,MAAA,KAClB,OAAA,CAAQ,SAAA;AAAA,IAChB;AACA,IAAA,IAAI,QAAQ,YAAA,EAAc;AACxB,MAAA,IAAA,CAAK,aAAA,GACH,QAAQ,YAAA,YAAwB,YAAA,GAC5B,QAAQ,YAAA,CAAa,MAAA,KACrB,OAAA,CAAQ,YAAA;AAAA,IAChB;AACA,IAAA,IAAI,QAAQ,MAAA,EAAQ;AAClB,MAAA,IAAA,CAAK,OAAA,GACH,QAAQ,MAAA,YAAkB,MAAA,GAAS,QAAQ,MAAA,CAAO,MAAA,KAAW,OAAA,CAAQ,MAAA;AAAA,IACzE;AACA,IAAA,IAAI,QAAQ,UAAA,EAAY;AACtB,MAAA,IAAA,CAAK,WAAA,GACH,QAAQ,UAAA,YAAsB,UAAA,GAC1B,QAAQ,UAAA,CAAW,MAAA,KACnB,OAAA,CAAQ,UAAA;AAAA,IAChB;AACA,IAAA,IAAI,QAAQ,SAAA,EAAW;AACrB,MAAA,IAAA,CAAK,UAAA,GACH,QAAQ,SAAA,YAAqB,SAAA,GACzB,QAAQ,SAAA,CAAU,MAAA,KAClB,OAAA,CAAQ,SAAA;AAAA,IAChB;AAGA,IAAA,IAAI,QAAQ,OAAA,EAAS;AACnB,MAAA,IAAA,CAAK,aAAA,GAAgB,QAAQ,OAAA,CAAQ,aAAA;AACrC,MAAA,IAAA,CAAK,uBAAA,GAA0B,QAAQ,OAAA,CAAQ,eAAA;AAC/C,MAAA,IAAA,CAAK,sBAAA,GAAyB,QAAQ,OAAA,CAAQ,cAAA;AAC9C,MAAA,IAAA,CAAK,wBAAA,GAA2B,QAAQ,OAAA,CAAQ,gBAAA;AAChD,MAAA,IAAA,CAAK,sBAAA,GAAyB,QAAQ,OAAA,CAAQ,cAAA;AAC9C,MAAA,IAAA,CAAK,kCAAA,GAAqC,QAAQ,OAAA,CAAQ,0BAAA;AAC1D,MAAA,IAAA,CAAK,8BAAA,GAAiC,QAAQ,OAAA,CAAQ,sBAAA;AACtD,MAAA,IAAA,CAAK,mBAAA,GAAsB,QAAQ,OAAA,CAAQ,mBAAA;AAAA,IAC7C;AAEA,IAAA,OAAO,IAAA,CAAK,OAAA,CAA6B,MAAA,EAAQ,6BAAA,EAA+B;AAAA,MAC9E;AAAA,KACD,CAAA;AAAA,EACH;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,iBAAA,CACJ,QAAA,EACA,OAAA,GAAkC,EAAC,EACL;AAC9B,IAAA,IAAI;AACF,MAAA,OAAO,MAAM,IAAA,CAAK,OAAA;AAAA,QAChB,KAAA;AAAA,QACA,CAAA,qBAAA,EAAwB,kBAAA,CAAmB,QAAQ,CAAC,CAAA,CAAA;AAAA,QACpD;AAAA,UACE,MAAA,EAAQ;AAAA,YACN,SAAA,EAAW,OAAA,CAAQ,SAAA,IAAa,IAAA,CAAK,MAAA,CAAO;AAAA;AAC9C;AACF,OACF;AAAA,IACF,SAAS,KAAA,EAAO;AACd,MAAA,IAAI,iBAAiB,mBAAA,EAAqB;AACxC,QAAA,OAAO,IAAA;AAAA,MACT;AACA,MAAA,MAAM,KAAA;AAAA,IACR;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,sBAAA,CACJ,SAAA,EACA,OAAA,GAAkC,EAAC,EACb;AACtB,IAAA,OAAO,IAAA,CAAK,OAAA,CAAqB,QAAA,EAAU,sBAAA,EAAwB;AAAA,MACjE,MAAA,EAAQ;AAAA,QACN,UAAA,EAAY,SAAA;AAAA,QACZ,SAAA,EAAW,OAAA,CAAQ,SAAA,IAAa,IAAA,CAAK,MAAA,CAAO;AAAA;AAC9C,KACD,CAAA;AAAA,EACH;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAM,aAAa,OAAA,EAA6D;AAC9E,IAAA,OAAO,IAAA,CAAK,OAAA,CAA8B,MAAA,EAAQ,mBAAA,EAAqB;AAAA,MACrE,IAAA,EAAM;AAAA,KACP,CAAA;AAAA,EACH;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAM,kBAAA,CACJ,QAAA,EACA,OAAA,EACuB;AACvB,IAAA,OAAO,IAAA,CAAK,OAAA;AAAA,MACV,OAAA;AAAA,MACA,CAAA,qBAAA,EAAwB,kBAAA,CAAmB,QAAQ,CAAC,CAAA,CAAA;AAAA,MACpD,EAAE,MAAM,OAAA;AAAQ,KAClB;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAM,uBAAuB,OAAA,EAQD;AAC1B,IAAA,OAAO,IAAA,CAAK,OAAA,CAAwB,MAAA,EAAQ,6BAAA,EAA+B;AAAA,MACzE,MAAA,EAAQ;AAAA,QACN,WAAW,OAAA,CAAQ,SAAA;AAAA,QACnB,SAAS,OAAA,CAAQ,MAAA;AAAA,QACjB,YAAY,OAAA,CAAQ,SAAA;AAAA,QACpB,OAAO,OAAA,CAAQ,KAAA;AAAA,QACf,SAAS,OAAA,CAAQ;AAAA,OACnB;AAAA,MACA,IAAA,EAAM;AAAA,QACJ,QAAQ,OAAA,CAAQ,MAAA;AAAA,QAChB,YAAY,OAAA,CAAQ;AAAA;AACtB,KACD,CAAA;AAAA,EACH;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAM,gBAAA,GAA2C;AAC/C,IAAA,OAAO,IAAA,CAAK,OAAA,CAAuB,KAAA,EAAO,mBAAmB,CAAA;AAAA,EAC/D;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,kBAAkB,OAAA,EAAyD;AAC/E,IAAA,OAAO,IAAA,CAAK,OAAA,CAAqB,MAAA,EAAQ,mBAAA,EAAqB;AAAA,MAC5D,IAAA,EAAM;AAAA,KACP,CAAA;AAAA,EACH;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,eAAe,MAAA,EAA6C;AAChE,IAAA,IAAI;AACF,MAAA,OAAO,MAAM,IAAA,CAAK,OAAA;AAAA,QAChB,KAAA;AAAA,QACA,CAAA,kBAAA,EAAqB,kBAAA,CAAmB,MAAM,CAAC,CAAA;AAAA,OACjD;AAAA,IACF,SAAS,KAAA,EAAO;AACd,MAAA,IAAI,iBAAiB,mBAAA,EAAqB;AACxC,QAAA,OAAO,IAAA;AAAA,MACT;AACA,MAAA,MAAM,KAAA;AAAA,IACR;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,kBAAkB,MAAA,EAAsC;AAC5D,IAAA,OAAO,IAAA,CAAK,OAAA;AAAA,MACV,QAAA;AAAA,MACA,CAAA,kBAAA,EAAqB,kBAAA,CAAmB,MAAM,CAAC,CAAA;AAAA,KACjD;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,uBAAA,CACJ,MAAA,EACA,KAAA,EACqC;AACrC,IAAA,OAAO,IAAA,CAAK,OAAA;AAAA,MACV,MAAA;AAAA,MACA,CAAA,kBAAA,EAAqB,kBAAA,CAAmB,MAAM,CAAC,CAAA,eAAA,CAAA;AAAA,MAC/C,EAAE,IAAA,EAAM,EAAE,KAAA,EAAM;AAAE,KACpB;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,yBAAA,CACJ,MAAA,EACA,OAAA,GAKI,EAAC,EACkC;AACvC,IAAA,OAAO,IAAA,CAAK,OAAA;AAAA,MACV,KAAA;AAAA,MACA,CAAA,kBAAA,EAAqB,kBAAA,CAAmB,MAAM,CAAC,CAAA,WAAA,CAAA;AAAA,MAC/C;AAAA,QACE,MAAA,EAAQ;AAAA,UACN,WAAW,OAAA,CAAQ,SAAA;AAAA,UACnB,SAAS,OAAA,CAAQ,MAAA;AAAA,UACjB,YAAY,OAAA,CAAQ,SAAA;AAAA,UACpB,aAAa,OAAA,CAAQ;AAAA;AACvB;AACF,KACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,cAAA,CACJ,MAAA,EACA,OAAA,GAA+B,EAAC,EACjB;AACf,IAAA,OAAO,IAAA,CAAK,OAAA;AAAA,MACV,MAAA;AAAA,MACA,CAAA,kBAAA,EAAqB,kBAAA,CAAmB,MAAM,CAAC,CAAA,IAAA,CAAA;AAAA,MAC/C,EAAE,MAAM,OAAA;AAAQ,KAClB;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAM,QAAQ,MAAA,EAAsC;AAClD,IAAA,IAAI;AACF,MAAA,OAAO,MAAM,IAAA,CAAK,OAAA;AAAA,QAChB,KAAA;AAAA,QACA,CAAA,UAAA,EAAa,kBAAA,CAAmB,MAAM,CAAC,CAAA;AAAA,OACzC;AAAA,IACF,SAAS,KAAA,EAAO;AACd,MAAA,IAAI,iBAAiB,mBAAA,EAAqB;AACxC,QAAA,OAAO,IAAA;AAAA,MACT;AACA,MAAA,MAAM,KAAA;AAAA,IACR;AAAA,EACF;AACF","file":"index.js","sourcesContent":["/**\n * Exception classes for the Agent Memory Client.\n */\n\n/**\n * Base error for all memory client errors.\n */\nexport class MemoryClientError extends Error {\n constructor(message: string) {\n super(message);\n this.name = \"MemoryClientError\";\n // Maintains proper stack trace for where our error was thrown (only in V8)\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, MemoryClientError);\n }\n }\n}\n\n/**\n * Raised when memory record or filter validation fails.\n */\nexport class MemoryValidationError extends MemoryClientError {\n constructor(message: string) {\n super(message);\n this.name = \"MemoryValidationError\";\n }\n}\n\n/**\n * Raised when a requested memory or session is not found.\n */\nexport class MemoryNotFoundError extends MemoryClientError {\n constructor(message: string) {\n super(message);\n this.name = \"MemoryNotFoundError\";\n }\n}\n\n/**\n * Raised when the memory server returns an error.\n */\nexport class MemoryServerError extends MemoryClientError {\n statusCode?: number;\n\n constructor(message: string, statusCode?: number) {\n super(message);\n this.name = \"MemoryServerError\";\n this.statusCode = statusCode;\n }\n}\n","/**\n * Filter classes for search operations.\n *\n * These filters allow for filtering memory search results.\n */\n\n/**\n * Filter by session ID\n */\nexport class SessionId {\n eq?: string;\n in_?: string[];\n not_eq?: string;\n not_in?: string[];\n ne?: string;\n\n constructor(options: {\n eq?: string;\n in_?: string[];\n not_eq?: string;\n not_in?: string[];\n ne?: string;\n } = {}) {\n this.eq = options.eq;\n this.in_ = options.in_;\n this.not_eq = options.not_eq;\n this.not_in = options.not_in;\n this.ne = options.ne;\n }\n\n toJSON(): Record<string, unknown> {\n const result: Record<string, unknown> = {};\n if (this.eq !== undefined) result.eq = this.eq;\n if (this.in_ !== undefined) result.in_ = this.in_;\n if (this.not_eq !== undefined) result.not_eq = this.not_eq;\n if (this.not_in !== undefined) result.not_in = this.not_in;\n if (this.ne !== undefined) result.ne = this.ne;\n return result;\n }\n}\n\n/**\n * Filter by namespace\n */\nexport class Namespace {\n eq?: string;\n in_?: string[];\n not_eq?: string;\n not_in?: string[];\n\n constructor(options: {\n eq?: string;\n in_?: string[];\n not_eq?: string;\n not_in?: string[];\n } = {}) {\n this.eq = options.eq;\n this.in_ = options.in_;\n this.not_eq = options.not_eq;\n this.not_in = options.not_in;\n }\n\n toJSON(): Record<string, unknown> {\n const result: Record<string, unknown> = {};\n if (this.eq !== undefined) result.eq = this.eq;\n if (this.in_ !== undefined) result.in_ = this.in_;\n if (this.not_eq !== undefined) result.not_eq = this.not_eq;\n if (this.not_in !== undefined) result.not_in = this.not_in;\n return result;\n }\n}\n\n/**\n * Filter by user ID\n */\nexport class UserId {\n eq?: string;\n in_?: string[];\n not_eq?: string;\n not_in?: string[];\n\n constructor(options: {\n eq?: string;\n in_?: string[];\n not_eq?: string;\n not_in?: string[];\n } = {}) {\n this.eq = options.eq;\n this.in_ = options.in_;\n this.not_eq = options.not_eq;\n this.not_in = options.not_in;\n }\n\n toJSON(): Record<string, unknown> {\n const result: Record<string, unknown> = {};\n if (this.eq !== undefined) result.eq = this.eq;\n if (this.in_ !== undefined) result.in_ = this.in_;\n if (this.not_eq !== undefined) result.not_eq = this.not_eq;\n if (this.not_in !== undefined) result.not_in = this.not_in;\n return result;\n }\n}\n\n/**\n * Filter by topics\n */\nexport class Topics {\n any?: string[];\n all?: string[];\n none?: string[];\n\n constructor(options: {\n any?: string[];\n all?: string[];\n none?: string[];\n } = {}) {\n this.any = options.any;\n this.all = options.all;\n this.none = options.none;\n }\n\n toJSON(): Record<string, unknown> {\n const result: Record<string, unknown> = {};\n if (this.any !== undefined) result.any = this.any;\n if (this.all !== undefined) result.all = this.all;\n if (this.none !== undefined) result.none = this.none;\n return result;\n }\n}\n\n/**\n * Filter by entities\n */\nexport class Entities {\n any?: string[];\n all?: string[];\n none?: string[];\n\n constructor(options: {\n any?: string[];\n all?: string[];\n none?: string[];\n } = {}) {\n this.any = options.any;\n this.all = options.all;\n this.none = options.none;\n }\n\n toJSON(): Record<string, unknown> {\n const result: Record<string, unknown> = {};\n if (this.any !== undefined) result.any = this.any;\n if (this.all !== undefined) result.all = this.all;\n if (this.none !== undefined) result.none = this.none;\n return result;\n }\n}\n\n/**\n * Filter by creation date\n */\nexport class CreatedAt {\n gte?: Date | string;\n lte?: Date | string;\n eq?: Date | string;\n\n constructor(options: {\n gte?: Date | string;\n lte?: Date | string;\n eq?: Date | string;\n } = {}) {\n this.gte = options.gte;\n this.lte = options.lte;\n this.eq = options.eq;\n }\n\n toJSON(): Record<string, unknown> {\n const result: Record<string, unknown> = {};\n if (this.gte !== undefined)\n result.gte = this.gte instanceof Date ? this.gte.toISOString() : this.gte;\n if (this.lte !== undefined)\n result.lte = this.lte instanceof Date ? this.lte.toISOString() : this.lte;\n if (this.eq !== undefined)\n result.eq = this.eq instanceof Date ? this.eq.toISOString() : this.eq;\n return result;\n }\n}\n\n/**\n * Filter by last accessed date\n */\nexport class LastAccessed {\n gte?: Date | string;\n lte?: Date | string;\n eq?: Date | string;\n\n constructor(options: {\n gte?: Date | string;\n lte?: Date | string;\n eq?: Date | string;\n } = {}) {\n this.gte = options.gte;\n this.lte = options.lte;\n this.eq = options.eq;\n }\n\n toJSON(): Record<string, unknown> {\n const result: Record<string, unknown> = {};\n if (this.gte !== undefined)\n result.gte = this.gte instanceof Date ? this.gte.toISOString() : this.gte;\n if (this.lte !== undefined)\n result.lte = this.lte instanceof Date ? this.lte.toISOString() : this.lte;\n if (this.eq !== undefined)\n result.eq = this.eq instanceof Date ? this.eq.toISOString() : this.eq;\n return result;\n }\n}\n\n/**\n * Filter by event date\n */\nexport class EventDate {\n gte?: Date | string;\n lte?: Date | string;\n eq?: Date | string;\n\n constructor(options: {\n gte?: Date | string;\n lte?: Date | string;\n eq?: Date | string;\n } = {}) {\n this.gte = options.gte;\n this.lte = options.lte;\n this.eq = options.eq;\n }\n\n toJSON(): Record<string, unknown> {\n const result: Record<string, unknown> = {};\n if (this.gte !== undefined)\n result.gte = this.gte instanceof Date ? this.gte.toISOString() : this.gte;\n if (this.lte !== undefined)\n result.lte = this.lte instanceof Date ? this.lte.toISOString() : this.lte;\n if (this.eq !== undefined)\n result.eq = this.eq instanceof Date ? this.eq.toISOString() : this.eq;\n return result;\n }\n}\n\n/**\n * Filter by memory type\n */\nexport class MemoryType {\n eq?: string;\n in_?: string[];\n not_eq?: string;\n not_in?: string[];\n\n constructor(options: {\n eq?: string;\n in_?: string[];\n not_eq?: string;\n not_in?: string[];\n } = {}) {\n this.eq = options.eq;\n this.in_ = options.in_;\n this.not_eq = options.not_eq;\n this.not_in = options.not_in;\n }\n\n toJSON(): Record<string, unknown> {\n const result: Record<string, unknown> = {};\n if (this.eq !== undefined) result.eq = this.eq;\n if (this.in_ !== undefined) result.in_ = this.in_;\n if (this.not_eq !== undefined) result.not_eq = this.not_eq;\n if (this.not_in !== undefined) result.not_in = this.not_in;\n return result;\n }\n}\n","/**\n * Agent Memory API Client\n *\n * A TypeScript/JavaScript client for the Agent Memory Server REST API.\n */\n\nimport {\n MemoryClientError,\n MemoryNotFoundError,\n MemoryServerError,\n} from \"./errors\";\nimport {\n SessionId,\n Namespace,\n UserId,\n Topics,\n Entities,\n CreatedAt,\n LastAccessed,\n EventDate,\n MemoryType,\n} from \"./filters\";\nimport {\n AckResponse,\n CreateSummaryViewRequest,\n ForgetPolicy,\n ForgetResponse,\n HealthCheckResponse,\n MemoryPromptRequest,\n MemoryPromptResponse,\n MemoryRecord,\n MemoryRecordResults,\n MemoryStrategyConfig,\n ModelNameLiteral,\n RecencyConfig,\n SessionListResponse,\n SummaryView,\n SummaryViewPartitionResult,\n Task,\n WorkingMemory,\n WorkingMemoryResponse,\n} from \"./models\";\n\nconst VERSION = \"0.1.0\";\n\n/**\n * Configuration for the Memory API Client\n */\nexport interface MemoryClientConfig {\n /** Base URL of the memory server (e.g., 'http://localhost:8000') */\n baseUrl: string;\n /** Request timeout in milliseconds (default: 30000) */\n timeout?: number;\n /** Optional default namespace to use for operations */\n defaultNamespace?: string;\n /** Optional default model name for auto-summarization */\n defaultModelName?: ModelNameLiteral;\n /** Optional default context window limit for auto-summarization */\n defaultContextWindowMax?: number;\n /** Optional API key for authentication */\n apiKey?: string;\n /** Optional bearer token for authentication */\n bearerToken?: string;\n /** Custom fetch function (for testing or custom implementations) */\n fetch?: typeof fetch;\n}\n\n/**\n * Options for search operations\n */\nexport interface SearchOptions {\n text: string;\n sessionId?: SessionId | { eq?: string; in_?: string[]; not_eq?: string; not_in?: string[] };\n namespace?: Namespace | { eq?: string; in_?: string[]; not_eq?: string; not_in?: string[] };\n topics?: Topics | { any?: string[]; all?: string[]; none?: string[] };\n entities?: Entities | { any?: string[]; all?: string[]; none?: string[] };\n createdAt?: CreatedAt | { gte?: Date | string; lte?: Date | string; eq?: Date | string };\n lastAccessed?: LastAccessed | { gte?: Date | string; lte?: Date | string; eq?: Date | string };\n userId?: UserId | { eq?: string; in_?: string[]; not_eq?: string; not_in?: string[] };\n memoryType?: MemoryType | { eq?: string; in_?: string[]; not_eq?: string; not_in?: string[] };\n eventDate?: EventDate | { gte?: Date | string; lte?: Date | string; eq?: Date | string };\n distanceThreshold?: number;\n limit?: number;\n offset?: number;\n recency?: RecencyConfig;\n optimizeQuery?: boolean;\n}\n\n/**\n * Client for the Agent Memory Server REST API.\n *\n * Provides methods to interact with all server endpoints:\n * - Health check\n * - Session management (list, get, put, delete)\n * - Long-term memory (create, search, edit, delete)\n */\nexport class MemoryAPIClient {\n private readonly config: Required<\n Pick<MemoryClientConfig, \"baseUrl\" | \"timeout\">\n > &\n MemoryClientConfig;\n private readonly fetchFn: typeof fetch;\n\n constructor(config: MemoryClientConfig) {\n this.config = {\n timeout: 30000,\n ...config,\n baseUrl: config.baseUrl.replace(/\\/$/, \"\"), // Remove trailing slash\n };\n this.fetchFn = config.fetch ?? fetch;\n }\n\n /**\n * Get default headers for requests\n */\n private getHeaders(): Record<string, string> {\n const headers: Record<string, string> = {\n \"Content-Type\": \"application/json\",\n \"User-Agent\": `agent-memory-client-js/${VERSION}`,\n \"X-Client-Version\": VERSION,\n };\n\n if (this.config.apiKey) {\n headers[\"X-API-Key\"] = this.config.apiKey;\n }\n if (this.config.bearerToken) {\n headers[\"Authorization\"] = `Bearer ${this.config.bearerToken}`;\n }\n\n return headers;\n }\n\n /**\n * Make an HTTP request with error handling\n */\n private async request<T>(\n method: string,\n path: string,\n options: {\n body?: unknown;\n params?: Record<string, string | number | boolean | string[] | undefined>;\n } = {}\n ): Promise<T> {\n const url = new URL(path, this.config.baseUrl);\n\n // Add query parameters\n if (options.params) {\n for (const [key, value] of Object.entries(options.params)) {\n if (value !== undefined) {\n if (Array.isArray(value)) {\n // Handle array params by appending multiple values with the same key\n for (const item of value) {\n url.searchParams.append(key, String(item));\n }\n } else {\n url.searchParams.set(key, String(value));\n }\n }\n }\n }\n\n const controller = new AbortController();\n const timeoutId = setTimeout(() => controller.abort(), this.config.timeout);\n\n try {\n const response = await this.fetchFn(url.toString(), {\n method,\n headers: this.getHeaders(),\n body: options.body ? JSON.stringify(options.body) : undefined,\n signal: controller.signal,\n });\n\n clearTimeout(timeoutId);\n\n if (!response.ok) {\n return this.handleHttpError(response);\n }\n\n return (await response.json()) as T;\n } catch (error) {\n clearTimeout(timeoutId);\n if (error instanceof MemoryClientError) {\n throw error;\n }\n if (error instanceof Error && error.name === \"AbortError\") {\n throw new MemoryClientError(`Request timeout after ${this.config.timeout}ms`);\n }\n throw new MemoryClientError(`Request failed: ${String(error)}`);\n }\n }\n\n /**\n * Handle HTTP error responses\n */\n private async handleHttpError(response: Response): Promise<never> {\n let message: string;\n try {\n const body = (await response.json()) as Record<string, unknown>;\n message =\n (body.detail as string) || (body.message as string) || JSON.stringify(body);\n } catch {\n message = await response.text();\n }\n\n if (response.status === 404) {\n throw new MemoryNotFoundError(message);\n }\n throw new MemoryServerError(message, response.status);\n }\n\n // ==================== Health ====================\n\n /**\n * Check server health\n */\n async healthCheck(): Promise<HealthCheckResponse> {\n return this.request<HealthCheckResponse>(\"GET\", \"/v1/health\");\n }\n\n // ==================== Working Memory ====================\n\n /**\n * List all session IDs\n */\n async listSessions(options: {\n namespace?: string;\n limit?: number;\n offset?: number;\n } = {}): Promise<SessionListResponse> {\n return this.request<SessionListResponse>(\"GET\", \"/v1/working-memory/\", {\n params: {\n namespace: options.namespace ?? this.config.defaultNamespace,\n limit: options.limit,\n offset: options.offset,\n },\n });\n }\n\n /**\n * Get working memory for a session\n */\n async getWorkingMemory(\n sessionId: string,\n options: {\n namespace?: string;\n modelName?: ModelNameLiteral;\n contextWindowMax?: number;\n } = {}\n ): Promise<WorkingMemoryResponse | null> {\n try {\n return await this.request<WorkingMemoryResponse>(\n \"GET\",\n `/v1/working-memory/${encodeURIComponent(sessionId)}`,\n {\n params: {\n namespace: options.namespace ?? this.config.defaultNamespace,\n model_name: options.modelName ?? this.config.defaultModelName,\n context_window_max: options.contextWindowMax ?? this.config.defaultContextWindowMax,\n },\n }\n );\n } catch (error) {\n if (error instanceof MemoryNotFoundError) {\n return null;\n }\n throw error;\n }\n }\n\n /**\n * Get or create working memory for a session\n */\n async getOrCreateWorkingMemory(\n sessionId: string,\n options: {\n namespace?: string;\n userId?: string;\n modelName?: ModelNameLiteral;\n contextWindowMax?: number;\n ttlSeconds?: number;\n longTermMemoryStrategy?: MemoryStrategyConfig;\n } = {}\n ): Promise<WorkingMemoryResponse> {\n const existing = await this.getWorkingMemory(sessionId, options);\n if (existing) {\n return existing;\n }\n\n // Create new working memory\n const workingMemory: WorkingMemory = {\n session_id: sessionId,\n namespace: options.namespace ?? this.config.defaultNamespace,\n user_id: options.userId,\n messages: [],\n memories: [],\n ttl_seconds: options.ttlSeconds,\n long_term_memory_strategy: options.longTermMemoryStrategy,\n };\n\n return this.putWorkingMemory(sessionId, workingMemory, options);\n }\n\n /**\n * Create or update working memory for a session\n */\n async putWorkingMemory(\n sessionId: string,\n workingMemory: Partial<WorkingMemory>,\n options: {\n namespace?: string;\n modelName?: ModelNameLiteral;\n contextWindowMax?: number;\n background?: boolean;\n } = {}\n ): Promise<WorkingMemoryResponse> {\n const body: WorkingMemory = {\n session_id: sessionId,\n ...workingMemory,\n namespace: workingMemory.namespace ?? options.namespace ?? this.config.defaultNamespace,\n };\n\n return this.request<WorkingMemoryResponse>(\n \"PUT\",\n `/v1/working-memory/${encodeURIComponent(sessionId)}`,\n {\n body,\n params: {\n model_name: options.modelName ?? this.config.defaultModelName,\n context_window_max: options.contextWindowMax ?? this.config.defaultContextWindowMax,\n background: options.background,\n },\n }\n );\n }\n\n /**\n * Delete working memory for a session\n */\n async deleteWorkingMemory(\n sessionId: string,\n options: { namespace?: string } = {}\n ): Promise<AckResponse> {\n return this.request<AckResponse>(\n \"DELETE\",\n `/v1/working-memory/${encodeURIComponent(sessionId)}`,\n {\n params: {\n namespace: options.namespace ?? this.config.defaultNamespace,\n },\n }\n );\n }\n\n // ==================== Long-term Memory ====================\n\n /**\n * Create long-term memory records\n */\n async createLongTermMemory(\n memories: MemoryRecord[],\n options: { namespace?: string } = {}\n ): Promise<AckResponse> {\n return this.request<AckResponse>(\"POST\", \"/v1/long-term-memory/\", {\n body: { memories },\n params: {\n namespace: options.namespace ?? this.config.defaultNamespace,\n },\n });\n }\n\n /**\n * Search long-term memory\n */\n async searchLongTermMemory(options: SearchOptions): Promise<MemoryRecordResults> {\n const body: Record<string, unknown> = {\n text: options.text,\n limit: options.limit,\n offset: options.offset,\n distance_threshold: options.distanceThreshold,\n };\n\n // Add filters\n if (options.sessionId) {\n body.session_id =\n options.sessionId instanceof SessionId\n ? options.sessionId.toJSON()\n : options.sessionId;\n }\n if (options.namespace) {\n body.namespace =\n options.namespace instanceof Namespace\n ? options.namespace.toJSON()\n : options.namespace;\n }\n if (options.topics) {\n body.topics =\n options.topics instanceof Topics ? options.topics.toJSON() : options.topics;\n }\n if (options.entities) {\n body.entities =\n options.entities instanceof Entities\n ? options.entities.toJSON()\n : options.entities;\n }\n if (options.createdAt) {\n body.created_at =\n options.createdAt instanceof CreatedAt\n ? options.createdAt.toJSON()\n : options.createdAt;\n }\n if (options.lastAccessed) {\n body.last_accessed =\n options.lastAccessed instanceof LastAccessed\n ? options.lastAccessed.toJSON()\n : options.lastAccessed;\n }\n if (options.userId) {\n body.user_id =\n options.userId instanceof UserId ? options.userId.toJSON() : options.userId;\n }\n if (options.memoryType) {\n body.memory_type =\n options.memoryType instanceof MemoryType\n ? options.memoryType.toJSON()\n : options.memoryType;\n }\n if (options.eventDate) {\n body.event_date =\n options.eventDate instanceof EventDate\n ? options.eventDate.toJSON()\n : options.eventDate;\n }\n\n // Add recency config\n if (options.recency) {\n body.recency_boost = options.recency.recency_boost;\n body.recency_semantic_weight = options.recency.semantic_weight;\n body.recency_recency_weight = options.recency.recency_weight;\n body.recency_freshness_weight = options.recency.freshness_weight;\n body.recency_novelty_weight = options.recency.novelty_weight;\n body.recency_half_life_last_access_days = options.recency.half_life_last_access_days;\n body.recency_half_life_created_days = options.recency.half_life_created_days;\n body.server_side_recency = options.recency.server_side_recency;\n }\n\n return this.request<MemoryRecordResults>(\"POST\", \"/v1/long-term-memory/search\", {\n body,\n });\n }\n\n /**\n * Get a long-term memory by ID\n */\n async getLongTermMemory(\n memoryId: string,\n options: { namespace?: string } = {}\n ): Promise<MemoryRecord | null> {\n try {\n return await this.request<MemoryRecord>(\n \"GET\",\n `/v1/long-term-memory/${encodeURIComponent(memoryId)}`,\n {\n params: {\n namespace: options.namespace ?? this.config.defaultNamespace,\n },\n }\n );\n } catch (error) {\n if (error instanceof MemoryNotFoundError) {\n return null;\n }\n throw error;\n }\n }\n\n /**\n * Delete long-term memories by IDs\n */\n async deleteLongTermMemories(\n memoryIds: string[],\n options: { namespace?: string } = {}\n ): Promise<AckResponse> {\n return this.request<AckResponse>(\"DELETE\", \"/v1/long-term-memory\", {\n params: {\n memory_ids: memoryIds,\n namespace: options.namespace ?? this.config.defaultNamespace,\n },\n });\n }\n\n // ==================== Memory Prompt ====================\n\n /**\n * Get memory-enhanced prompt\n */\n async memoryPrompt(request: MemoryPromptRequest): Promise<MemoryPromptResponse> {\n return this.request<MemoryPromptResponse>(\"POST\", \"/v1/memory/prompt\", {\n body: request,\n });\n }\n\n // ==================== Edit Long-term Memory ====================\n\n /**\n * Edit a long-term memory by ID\n */\n async editLongTermMemory(\n memoryId: string,\n updates: Partial<MemoryRecord>\n ): Promise<MemoryRecord> {\n return this.request<MemoryRecord>(\n \"PATCH\",\n `/v1/long-term-memory/${encodeURIComponent(memoryId)}`,\n { body: updates }\n );\n }\n\n // ==================== Forget ====================\n\n /**\n * Run a forgetting pass with the provided policy\n */\n async forgetLongTermMemories(options: {\n policy: ForgetPolicy;\n namespace?: string;\n userId?: string;\n sessionId?: string;\n limit?: number;\n dryRun?: boolean;\n pinnedIds?: string[];\n }): Promise<ForgetResponse> {\n return this.request<ForgetResponse>(\"POST\", \"/v1/long-term-memory/forget\", {\n params: {\n namespace: options.namespace,\n user_id: options.userId,\n session_id: options.sessionId,\n limit: options.limit,\n dry_run: options.dryRun,\n },\n body: {\n policy: options.policy,\n pinned_ids: options.pinnedIds,\n },\n });\n }\n\n // ==================== Summary Views ====================\n\n /**\n * List all summary views\n */\n async listSummaryViews(): Promise<SummaryView[]> {\n return this.request<SummaryView[]>(\"GET\", \"/v1/summary-views\");\n }\n\n /**\n * Create a new summary view\n */\n async createSummaryView(request: CreateSummaryViewRequest): Promise<SummaryView> {\n return this.request<SummaryView>(\"POST\", \"/v1/summary-views\", {\n body: request,\n });\n }\n\n /**\n * Get a summary view by ID\n */\n async getSummaryView(viewId: string): Promise<SummaryView | null> {\n try {\n return await this.request<SummaryView>(\n \"GET\",\n `/v1/summary-views/${encodeURIComponent(viewId)}`\n );\n } catch (error) {\n if (error instanceof MemoryNotFoundError) {\n return null;\n }\n throw error;\n }\n }\n\n /**\n * Delete a summary view\n */\n async deleteSummaryView(viewId: string): Promise<AckResponse> {\n return this.request<AckResponse>(\n \"DELETE\",\n `/v1/summary-views/${encodeURIComponent(viewId)}`\n );\n }\n\n /**\n * Run a summary view partition\n */\n async runSummaryViewPartition(\n viewId: string,\n group: Record<string, string>\n ): Promise<SummaryViewPartitionResult> {\n return this.request<SummaryViewPartitionResult>(\n \"POST\",\n `/v1/summary-views/${encodeURIComponent(viewId)}/partitions/run`,\n { body: { group } }\n );\n }\n\n /**\n * List summary view partitions\n */\n async listSummaryViewPartitions(\n viewId: string,\n options: {\n namespace?: string;\n userId?: string;\n sessionId?: string;\n memoryType?: string;\n } = {}\n ): Promise<SummaryViewPartitionResult[]> {\n return this.request<SummaryViewPartitionResult[]>(\n \"GET\",\n `/v1/summary-views/${encodeURIComponent(viewId)}/partitions`,\n {\n params: {\n namespace: options.namespace,\n user_id: options.userId,\n session_id: options.sessionId,\n memory_type: options.memoryType,\n },\n }\n );\n }\n\n /**\n * Run a full summary view (async task)\n */\n async runSummaryView(\n viewId: string,\n options: { force?: boolean } = {}\n ): Promise<Task> {\n return this.request<Task>(\n \"POST\",\n `/v1/summary-views/${encodeURIComponent(viewId)}/run`,\n { body: options }\n );\n }\n\n // ==================== Tasks ====================\n\n /**\n * Get a task by ID\n */\n async getTask(taskId: string): Promise<Task | null> {\n try {\n return await this.request<Task>(\n \"GET\",\n `/v1/tasks/${encodeURIComponent(taskId)}`\n );\n } catch (error) {\n if (error instanceof MemoryNotFoundError) {\n return null;\n }\n throw error;\n }\n }\n}\n"]}
1
+ {"version":3,"sources":["../src/errors.ts","../src/filters.ts","../src/client.ts"],"names":[],"mappings":"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","file":"index.js","sourcesContent":["/**\n * Exception classes for the Agent Memory Client.\n */\n\n/**\n * Base error for all memory client errors.\n */\nexport class MemoryClientError extends Error {\n constructor(message: string) {\n super(message);\n this.name = \"MemoryClientError\";\n // Maintains proper stack trace for where our error was thrown (only in V8)\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, MemoryClientError);\n }\n }\n}\n\n/**\n * Raised when memory record or filter validation fails.\n */\nexport class MemoryValidationError extends MemoryClientError {\n constructor(message: string) {\n super(message);\n this.name = \"MemoryValidationError\";\n }\n}\n\n/**\n * Raised when a requested memory or session is not found.\n */\nexport class MemoryNotFoundError extends MemoryClientError {\n constructor(message: string) {\n super(message);\n this.name = \"MemoryNotFoundError\";\n }\n}\n\n/**\n * Raised when the memory server returns an error.\n */\nexport class MemoryServerError extends MemoryClientError {\n statusCode?: number;\n\n constructor(message: string, statusCode?: number) {\n super(message);\n this.name = \"MemoryServerError\";\n this.statusCode = statusCode;\n }\n}\n","/**\n * Filter classes for search operations.\n *\n * These filters allow for filtering memory search results.\n */\n\n/**\n * Filter by session ID\n */\nexport class SessionId {\n eq?: string;\n in_?: string[];\n not_eq?: string;\n not_in?: string[];\n ne?: string;\n\n constructor(options: {\n eq?: string;\n in_?: string[];\n not_eq?: string;\n not_in?: string[];\n ne?: string;\n } = {}) {\n this.eq = options.eq;\n this.in_ = options.in_;\n this.not_eq = options.not_eq;\n this.not_in = options.not_in;\n this.ne = options.ne;\n }\n\n toJSON(): Record<string, unknown> {\n const result: Record<string, unknown> = {};\n if (this.eq !== undefined) result.eq = this.eq;\n if (this.in_ !== undefined) result.in_ = this.in_;\n if (this.not_eq !== undefined) result.not_eq = this.not_eq;\n if (this.not_in !== undefined) result.not_in = this.not_in;\n if (this.ne !== undefined) result.ne = this.ne;\n return result;\n }\n}\n\n/**\n * Filter by namespace\n */\nexport class Namespace {\n eq?: string;\n in_?: string[];\n not_eq?: string;\n not_in?: string[];\n\n constructor(options: {\n eq?: string;\n in_?: string[];\n not_eq?: string;\n not_in?: string[];\n } = {}) {\n this.eq = options.eq;\n this.in_ = options.in_;\n this.not_eq = options.not_eq;\n this.not_in = options.not_in;\n }\n\n toJSON(): Record<string, unknown> {\n const result: Record<string, unknown> = {};\n if (this.eq !== undefined) result.eq = this.eq;\n if (this.in_ !== undefined) result.in_ = this.in_;\n if (this.not_eq !== undefined) result.not_eq = this.not_eq;\n if (this.not_in !== undefined) result.not_in = this.not_in;\n return result;\n }\n}\n\n/**\n * Filter by user ID\n */\nexport class UserId {\n eq?: string;\n in_?: string[];\n not_eq?: string;\n not_in?: string[];\n\n constructor(options: {\n eq?: string;\n in_?: string[];\n not_eq?: string;\n not_in?: string[];\n } = {}) {\n this.eq = options.eq;\n this.in_ = options.in_;\n this.not_eq = options.not_eq;\n this.not_in = options.not_in;\n }\n\n toJSON(): Record<string, unknown> {\n const result: Record<string, unknown> = {};\n if (this.eq !== undefined) result.eq = this.eq;\n if (this.in_ !== undefined) result.in_ = this.in_;\n if (this.not_eq !== undefined) result.not_eq = this.not_eq;\n if (this.not_in !== undefined) result.not_in = this.not_in;\n return result;\n }\n}\n\n/**\n * Filter by topics\n */\nexport class Topics {\n any?: string[];\n all?: string[];\n none?: string[];\n\n constructor(options: {\n any?: string[];\n all?: string[];\n none?: string[];\n } = {}) {\n this.any = options.any;\n this.all = options.all;\n this.none = options.none;\n }\n\n toJSON(): Record<string, unknown> {\n const result: Record<string, unknown> = {};\n if (this.any !== undefined) result.any = this.any;\n if (this.all !== undefined) result.all = this.all;\n if (this.none !== undefined) result.none = this.none;\n return result;\n }\n}\n\n/**\n * Filter by entities\n */\nexport class Entities {\n any?: string[];\n all?: string[];\n none?: string[];\n\n constructor(options: {\n any?: string[];\n all?: string[];\n none?: string[];\n } = {}) {\n this.any = options.any;\n this.all = options.all;\n this.none = options.none;\n }\n\n toJSON(): Record<string, unknown> {\n const result: Record<string, unknown> = {};\n if (this.any !== undefined) result.any = this.any;\n if (this.all !== undefined) result.all = this.all;\n if (this.none !== undefined) result.none = this.none;\n return result;\n }\n}\n\n/**\n * Filter by creation date\n */\nexport class CreatedAt {\n gte?: Date | string;\n lte?: Date | string;\n eq?: Date | string;\n\n constructor(options: {\n gte?: Date | string;\n lte?: Date | string;\n eq?: Date | string;\n } = {}) {\n this.gte = options.gte;\n this.lte = options.lte;\n this.eq = options.eq;\n }\n\n toJSON(): Record<string, unknown> {\n const result: Record<string, unknown> = {};\n if (this.gte !== undefined)\n result.gte = this.gte instanceof Date ? this.gte.toISOString() : this.gte;\n if (this.lte !== undefined)\n result.lte = this.lte instanceof Date ? this.lte.toISOString() : this.lte;\n if (this.eq !== undefined)\n result.eq = this.eq instanceof Date ? this.eq.toISOString() : this.eq;\n return result;\n }\n}\n\n/**\n * Filter by last accessed date\n */\nexport class LastAccessed {\n gte?: Date | string;\n lte?: Date | string;\n eq?: Date | string;\n\n constructor(options: {\n gte?: Date | string;\n lte?: Date | string;\n eq?: Date | string;\n } = {}) {\n this.gte = options.gte;\n this.lte = options.lte;\n this.eq = options.eq;\n }\n\n toJSON(): Record<string, unknown> {\n const result: Record<string, unknown> = {};\n if (this.gte !== undefined)\n result.gte = this.gte instanceof Date ? this.gte.toISOString() : this.gte;\n if (this.lte !== undefined)\n result.lte = this.lte instanceof Date ? this.lte.toISOString() : this.lte;\n if (this.eq !== undefined)\n result.eq = this.eq instanceof Date ? this.eq.toISOString() : this.eq;\n return result;\n }\n}\n\n/**\n * Filter by event date\n */\nexport class EventDate {\n gte?: Date | string;\n lte?: Date | string;\n eq?: Date | string;\n\n constructor(options: {\n gte?: Date | string;\n lte?: Date | string;\n eq?: Date | string;\n } = {}) {\n this.gte = options.gte;\n this.lte = options.lte;\n this.eq = options.eq;\n }\n\n toJSON(): Record<string, unknown> {\n const result: Record<string, unknown> = {};\n if (this.gte !== undefined)\n result.gte = this.gte instanceof Date ? this.gte.toISOString() : this.gte;\n if (this.lte !== undefined)\n result.lte = this.lte instanceof Date ? this.lte.toISOString() : this.lte;\n if (this.eq !== undefined)\n result.eq = this.eq instanceof Date ? this.eq.toISOString() : this.eq;\n return result;\n }\n}\n\n/**\n * Filter by memory type\n */\nexport class MemoryType {\n eq?: string;\n in_?: string[];\n not_eq?: string;\n not_in?: string[];\n\n constructor(options: {\n eq?: string;\n in_?: string[];\n not_eq?: string;\n not_in?: string[];\n } = {}) {\n this.eq = options.eq;\n this.in_ = options.in_;\n this.not_eq = options.not_eq;\n this.not_in = options.not_in;\n }\n\n toJSON(): Record<string, unknown> {\n const result: Record<string, unknown> = {};\n if (this.eq !== undefined) result.eq = this.eq;\n if (this.in_ !== undefined) result.in_ = this.in_;\n if (this.not_eq !== undefined) result.not_eq = this.not_eq;\n if (this.not_in !== undefined) result.not_in = this.not_in;\n return result;\n }\n}\n","/**\n * Agent Memory API Client\n *\n * A TypeScript/JavaScript client for the Agent Memory Server REST API.\n */\n\nimport {\n MemoryClientError,\n MemoryNotFoundError,\n MemoryServerError,\n MemoryValidationError,\n} from \"./errors\";\nimport {\n SessionId,\n Namespace,\n UserId,\n Topics,\n Entities,\n CreatedAt,\n LastAccessed,\n EventDate,\n MemoryType,\n} from \"./filters\";\nimport {\n AckResponse,\n CreateSummaryViewRequest,\n ForgetPolicy,\n ForgetResponse,\n HealthCheckResponse,\n MemoryPromptRequest,\n MemoryPromptResponse,\n MemoryRecord,\n MemoryRecordResults,\n MemoryStrategyConfig,\n ModelNameLiteral,\n RecencyConfig,\n SessionListResponse,\n SummaryView,\n SummaryViewPartitionResult,\n Task,\n WorkingMemory,\n WorkingMemoryResponse,\n} from \"./models\";\n\nconst VERSION = \"0.3.1\";\n\n/**\n * Configuration for the Memory API Client\n */\nexport interface MemoryClientConfig {\n /** Base URL of the memory server (e.g., 'http://localhost:8000') */\n baseUrl: string;\n /** Request timeout in milliseconds (default: 30000) */\n timeout?: number;\n /** Optional default namespace to use for operations */\n defaultNamespace?: string;\n /** Optional default model name for auto-summarization */\n defaultModelName?: ModelNameLiteral;\n /** Optional default context window limit for auto-summarization */\n defaultContextWindowMax?: number;\n /** Optional API key for authentication */\n apiKey?: string;\n /** Optional bearer token for authentication */\n bearerToken?: string;\n /** Custom fetch function (for testing or custom implementations) */\n fetch?: typeof fetch;\n}\n\n/**\n * Options for search operations\n */\nexport interface SearchOptions {\n text: string;\n sessionId?: SessionId | { eq?: string; in_?: string[]; not_eq?: string; not_in?: string[] };\n namespace?: Namespace | { eq?: string; in_?: string[]; not_eq?: string; not_in?: string[] };\n topics?: Topics | { any?: string[]; all?: string[]; none?: string[] };\n entities?: Entities | { any?: string[]; all?: string[]; none?: string[] };\n createdAt?: CreatedAt | { gte?: Date | string; lte?: Date | string; eq?: Date | string };\n lastAccessed?: LastAccessed | { gte?: Date | string; lte?: Date | string; eq?: Date | string };\n userId?: UserId | { eq?: string; in_?: string[]; not_eq?: string; not_in?: string[] };\n memoryType?: MemoryType | { eq?: string; in_?: string[]; not_eq?: string; not_in?: string[] };\n eventDate?: EventDate | { gte?: Date | string; lte?: Date | string; eq?: Date | string };\n distanceThreshold?: number;\n limit?: number;\n offset?: number;\n recency?: RecencyConfig;\n optimizeQuery?: boolean;\n}\n\n/**\n * Client for the Agent Memory Server REST API.\n *\n * Provides methods to interact with all server endpoints:\n * - Health check\n * - Session management (list, get, put, delete)\n * - Long-term memory (create, search, edit, delete)\n */\nexport class MemoryAPIClient {\n private readonly config: Required<\n Pick<MemoryClientConfig, \"baseUrl\" | \"timeout\">\n > &\n MemoryClientConfig;\n private readonly fetchFn: typeof fetch;\n\n constructor(config: MemoryClientConfig) {\n this.config = {\n timeout: 30000,\n ...config,\n baseUrl: config.baseUrl.replace(/\\/$/, \"\"), // Remove trailing slash\n };\n this.fetchFn = config.fetch ?? fetch;\n }\n\n /**\n * Get default headers for requests\n */\n private getHeaders(): Record<string, string> {\n const headers: Record<string, string> = {\n \"Content-Type\": \"application/json\",\n \"User-Agent\": `agent-memory-client-js/${VERSION}`,\n \"X-Client-Version\": VERSION,\n };\n\n if (this.config.apiKey) {\n headers[\"X-API-Key\"] = this.config.apiKey;\n }\n if (this.config.bearerToken) {\n headers[\"Authorization\"] = `Bearer ${this.config.bearerToken}`;\n }\n\n return headers;\n }\n\n /**\n * Make an HTTP request with error handling\n */\n private async request<T>(\n method: string,\n path: string,\n options: {\n body?: unknown;\n params?: Record<string, string | number | boolean | string[] | undefined>;\n } = {}\n ): Promise<T> {\n const url = new URL(path, this.config.baseUrl);\n\n // Add query parameters\n if (options.params) {\n for (const [key, value] of Object.entries(options.params)) {\n if (value !== undefined) {\n if (Array.isArray(value)) {\n // Handle array params by appending multiple values with the same key\n for (const item of value) {\n url.searchParams.append(key, String(item));\n }\n } else {\n url.searchParams.set(key, String(value));\n }\n }\n }\n }\n\n const controller = new AbortController();\n const timeoutId = setTimeout(() => controller.abort(), this.config.timeout);\n\n try {\n const response = await this.fetchFn(url.toString(), {\n method,\n headers: this.getHeaders(),\n body: options.body ? JSON.stringify(options.body) : undefined,\n signal: controller.signal,\n });\n\n clearTimeout(timeoutId);\n\n if (!response.ok) {\n return this.handleHttpError(response);\n }\n\n return (await response.json()) as T;\n } catch (error) {\n clearTimeout(timeoutId);\n if (error instanceof MemoryClientError) {\n throw error;\n }\n if (error instanceof Error && error.name === \"AbortError\") {\n throw new MemoryClientError(`Request timeout after ${this.config.timeout}ms`);\n }\n throw new MemoryClientError(`Request failed: ${String(error)}`);\n }\n }\n\n /**\n * Handle HTTP error responses\n */\n private async handleHttpError(response: Response): Promise<never> {\n let message: string;\n // Read body as text first to avoid \"Body has already been read\" errors\n const text = await response.text();\n try {\n const body = JSON.parse(text) as Record<string, unknown>;\n message =\n (body.detail as string) || (body.message as string) || JSON.stringify(body);\n } catch {\n message = text || `HTTP ${response.status}`;\n }\n\n if (response.status === 404) {\n throw new MemoryNotFoundError(message);\n }\n throw new MemoryServerError(message, response.status);\n }\n\n // ==================== Health ====================\n\n /**\n * Check server health\n */\n async healthCheck(): Promise<HealthCheckResponse> {\n return this.request<HealthCheckResponse>(\"GET\", \"/v1/health\");\n }\n\n // ==================== Working Memory ====================\n\n /**\n * List all session IDs\n */\n async listSessions(options: {\n namespace?: string;\n limit?: number;\n offset?: number;\n } = {}): Promise<SessionListResponse> {\n return this.request<SessionListResponse>(\"GET\", \"/v1/working-memory/\", {\n params: {\n namespace: options.namespace ?? this.config.defaultNamespace,\n limit: options.limit,\n offset: options.offset,\n },\n });\n }\n\n /**\n * Get working memory for a session\n */\n async getWorkingMemory(\n sessionId: string,\n options: {\n namespace?: string;\n modelName?: ModelNameLiteral;\n contextWindowMax?: number;\n } = {}\n ): Promise<WorkingMemoryResponse | null> {\n try {\n return await this.request<WorkingMemoryResponse>(\n \"GET\",\n `/v1/working-memory/${encodeURIComponent(sessionId)}`,\n {\n params: {\n namespace: options.namespace ?? this.config.defaultNamespace,\n model_name: options.modelName ?? this.config.defaultModelName,\n context_window_max: options.contextWindowMax ?? this.config.defaultContextWindowMax,\n },\n }\n );\n } catch (error) {\n if (error instanceof MemoryNotFoundError) {\n return null;\n }\n throw error;\n }\n }\n\n /**\n * Get or create working memory for a session\n */\n async getOrCreateWorkingMemory(\n sessionId: string,\n options: {\n namespace?: string;\n userId?: string;\n modelName?: ModelNameLiteral;\n contextWindowMax?: number;\n ttlSeconds?: number;\n longTermMemoryStrategy?: MemoryStrategyConfig;\n } = {}\n ): Promise<WorkingMemoryResponse> {\n const existing = await this.getWorkingMemory(sessionId, options);\n if (existing) {\n return existing;\n }\n\n // Create new working memory\n const workingMemory: WorkingMemory = {\n session_id: sessionId,\n namespace: options.namespace ?? this.config.defaultNamespace,\n user_id: options.userId,\n messages: [],\n memories: [],\n ttl_seconds: options.ttlSeconds,\n long_term_memory_strategy: options.longTermMemoryStrategy,\n };\n\n return this.putWorkingMemory(sessionId, workingMemory, options);\n }\n\n /**\n * Create or update working memory for a session\n */\n async putWorkingMemory(\n sessionId: string,\n workingMemory: Partial<WorkingMemory>,\n options: {\n namespace?: string;\n modelName?: ModelNameLiteral;\n contextWindowMax?: number;\n background?: boolean;\n } = {}\n ): Promise<WorkingMemoryResponse> {\n const body: WorkingMemory = {\n session_id: sessionId,\n ...workingMemory,\n namespace: workingMemory.namespace ?? options.namespace ?? this.config.defaultNamespace,\n };\n\n return this.request<WorkingMemoryResponse>(\n \"PUT\",\n `/v1/working-memory/${encodeURIComponent(sessionId)}`,\n {\n body,\n params: {\n model_name: options.modelName ?? this.config.defaultModelName,\n context_window_max: options.contextWindowMax ?? this.config.defaultContextWindowMax,\n background: options.background,\n },\n }\n );\n }\n\n /**\n * Delete working memory for a session\n */\n async deleteWorkingMemory(\n sessionId: string,\n options: { namespace?: string } = {}\n ): Promise<AckResponse> {\n return this.request<AckResponse>(\n \"DELETE\",\n `/v1/working-memory/${encodeURIComponent(sessionId)}`,\n {\n params: {\n namespace: options.namespace ?? this.config.defaultNamespace,\n },\n }\n );\n }\n\n // ==================== Long-term Memory ====================\n\n /**\n * Create long-term memory records\n */\n async createLongTermMemory(\n memories: MemoryRecord[],\n options: { namespace?: string } = {}\n ): Promise<AckResponse> {\n return this.request<AckResponse>(\"POST\", \"/v1/long-term-memory/\", {\n body: { memories },\n params: {\n namespace: options.namespace ?? this.config.defaultNamespace,\n },\n });\n }\n\n /**\n * Search long-term memory\n */\n async searchLongTermMemory(options: SearchOptions): Promise<MemoryRecordResults> {\n const body: Record<string, unknown> = {\n text: options.text,\n limit: options.limit,\n offset: options.offset,\n distance_threshold: options.distanceThreshold,\n };\n\n // Add filters\n if (options.sessionId) {\n body.session_id =\n options.sessionId instanceof SessionId\n ? options.sessionId.toJSON()\n : options.sessionId;\n }\n if (options.namespace) {\n body.namespace =\n options.namespace instanceof Namespace\n ? options.namespace.toJSON()\n : options.namespace;\n }\n if (options.topics) {\n body.topics =\n options.topics instanceof Topics ? options.topics.toJSON() : options.topics;\n }\n if (options.entities) {\n body.entities =\n options.entities instanceof Entities\n ? options.entities.toJSON()\n : options.entities;\n }\n if (options.createdAt) {\n body.created_at =\n options.createdAt instanceof CreatedAt\n ? options.createdAt.toJSON()\n : options.createdAt;\n }\n if (options.lastAccessed) {\n body.last_accessed =\n options.lastAccessed instanceof LastAccessed\n ? options.lastAccessed.toJSON()\n : options.lastAccessed;\n }\n if (options.userId) {\n body.user_id =\n options.userId instanceof UserId ? options.userId.toJSON() : options.userId;\n }\n if (options.memoryType) {\n body.memory_type =\n options.memoryType instanceof MemoryType\n ? options.memoryType.toJSON()\n : options.memoryType;\n }\n if (options.eventDate) {\n body.event_date =\n options.eventDate instanceof EventDate\n ? options.eventDate.toJSON()\n : options.eventDate;\n }\n\n // Add recency config\n if (options.recency) {\n body.recency_boost = options.recency.recency_boost;\n body.recency_semantic_weight = options.recency.semantic_weight;\n body.recency_recency_weight = options.recency.recency_weight;\n body.recency_freshness_weight = options.recency.freshness_weight;\n body.recency_novelty_weight = options.recency.novelty_weight;\n body.recency_half_life_last_access_days = options.recency.half_life_last_access_days;\n body.recency_half_life_created_days = options.recency.half_life_created_days;\n body.server_side_recency = options.recency.server_side_recency;\n }\n\n return this.request<MemoryRecordResults>(\"POST\", \"/v1/long-term-memory/search\", {\n body,\n });\n }\n\n /**\n * Get a long-term memory by ID\n */\n async getLongTermMemory(\n memoryId: string,\n options: { namespace?: string } = {}\n ): Promise<MemoryRecord | null> {\n try {\n return await this.request<MemoryRecord>(\n \"GET\",\n `/v1/long-term-memory/${encodeURIComponent(memoryId)}`,\n {\n params: {\n namespace: options.namespace ?? this.config.defaultNamespace,\n },\n }\n );\n } catch (error) {\n if (error instanceof MemoryNotFoundError) {\n return null;\n }\n throw error;\n }\n }\n\n /**\n * Delete long-term memories by IDs\n */\n async deleteLongTermMemories(\n memoryIds: string[],\n options: { namespace?: string } = {}\n ): Promise<AckResponse> {\n return this.request<AckResponse>(\"DELETE\", \"/v1/long-term-memory\", {\n params: {\n memory_ids: memoryIds,\n namespace: options.namespace ?? this.config.defaultNamespace,\n },\n });\n }\n\n // ==================== Memory Prompt ====================\n\n /**\n * Get memory-enhanced prompt\n */\n async memoryPrompt(request: MemoryPromptRequest): Promise<MemoryPromptResponse> {\n return this.request<MemoryPromptResponse>(\"POST\", \"/v1/memory/prompt\", {\n body: request,\n });\n }\n\n // ==================== Edit Long-term Memory ====================\n\n /**\n * Edit a long-term memory by ID\n */\n async editLongTermMemory(\n memoryId: string,\n updates: Partial<MemoryRecord>\n ): Promise<MemoryRecord> {\n return this.request<MemoryRecord>(\n \"PATCH\",\n `/v1/long-term-memory/${encodeURIComponent(memoryId)}`,\n { body: updates }\n );\n }\n\n // ==================== Forget ====================\n\n /**\n * Run a forgetting pass with the provided policy\n */\n async forgetLongTermMemories(options: {\n policy: ForgetPolicy;\n namespace?: string;\n userId?: string;\n sessionId?: string;\n limit?: number;\n dryRun?: boolean;\n pinnedIds?: string[];\n }): Promise<ForgetResponse> {\n return this.request<ForgetResponse>(\"POST\", \"/v1/long-term-memory/forget\", {\n params: {\n namespace: options.namespace,\n user_id: options.userId,\n session_id: options.sessionId,\n limit: options.limit,\n dry_run: options.dryRun,\n },\n body: {\n policy: options.policy,\n pinned_ids: options.pinnedIds,\n },\n });\n }\n\n // ==================== Summary Views ====================\n\n /**\n * List all summary views\n */\n async listSummaryViews(): Promise<SummaryView[]> {\n return this.request<SummaryView[]>(\"GET\", \"/v1/summary-views\");\n }\n\n /**\n * Create a new summary view\n */\n async createSummaryView(request: CreateSummaryViewRequest): Promise<SummaryView> {\n return this.request<SummaryView>(\"POST\", \"/v1/summary-views\", {\n body: request,\n });\n }\n\n /**\n * Get a summary view by ID\n */\n async getSummaryView(viewId: string): Promise<SummaryView | null> {\n try {\n return await this.request<SummaryView>(\n \"GET\",\n `/v1/summary-views/${encodeURIComponent(viewId)}`\n );\n } catch (error) {\n if (error instanceof MemoryNotFoundError) {\n return null;\n }\n throw error;\n }\n }\n\n /**\n * Delete a summary view\n */\n async deleteSummaryView(viewId: string): Promise<AckResponse> {\n return this.request<AckResponse>(\n \"DELETE\",\n `/v1/summary-views/${encodeURIComponent(viewId)}`\n );\n }\n\n /**\n * Run a summary view partition\n */\n async runSummaryViewPartition(\n viewId: string,\n group: Record<string, string>\n ): Promise<SummaryViewPartitionResult> {\n return this.request<SummaryViewPartitionResult>(\n \"POST\",\n `/v1/summary-views/${encodeURIComponent(viewId)}/partitions/run`,\n { body: { group } }\n );\n }\n\n /**\n * List summary view partitions\n */\n async listSummaryViewPartitions(\n viewId: string,\n options: {\n namespace?: string;\n userId?: string;\n sessionId?: string;\n memoryType?: string;\n } = {}\n ): Promise<SummaryViewPartitionResult[]> {\n return this.request<SummaryViewPartitionResult[]>(\n \"GET\",\n `/v1/summary-views/${encodeURIComponent(viewId)}/partitions`,\n {\n params: {\n namespace: options.namespace,\n user_id: options.userId,\n session_id: options.sessionId,\n memory_type: options.memoryType,\n },\n }\n );\n }\n\n /**\n * Run a full summary view (async task)\n */\n async runSummaryView(\n viewId: string,\n options: { force?: boolean } = {}\n ): Promise<Task> {\n return this.request<Task>(\n \"POST\",\n `/v1/summary-views/${encodeURIComponent(viewId)}/run`,\n { body: options }\n );\n }\n\n // ==================== Tasks ====================\n\n /**\n * Get a task by ID\n */\n async getTask(taskId: string): Promise<Task | null> {\n try {\n return await this.request<Task>(\n \"GET\",\n `/v1/tasks/${encodeURIComponent(taskId)}`\n );\n } catch (error) {\n if (error instanceof MemoryNotFoundError) {\n return null;\n }\n throw error;\n }\n }\n\n // ==================== Utility Methods ====================\n\n /**\n * Close the client and release any resources.\n * This is a no-op for the fetch-based client but provided for API consistency.\n */\n close(): void {\n // No-op for fetch-based client\n // Provided for API compatibility with other clients\n }\n\n /**\n * Validate a memory record before sending to the server.\n * @throws MemoryValidationError if validation fails\n */\n validateMemoryRecord(memory: MemoryRecord): void {\n if (!memory.text || !memory.text.trim()) {\n throw new MemoryValidationError(\"Memory text cannot be empty\");\n }\n\n const validMemoryTypes = [\"episodic\", \"semantic\", \"message\"];\n if (memory.memory_type && !validMemoryTypes.includes(memory.memory_type)) {\n throw new MemoryValidationError(`Invalid memory type: ${memory.memory_type}`);\n }\n\n if (memory.id && !this.isValidUlid(memory.id)) {\n throw new MemoryValidationError(`Invalid ID format: ${memory.id}`);\n }\n }\n\n /**\n * Validate search filter parameters before API call.\n * @throws MemoryValidationError if validation fails\n */\n validateSearchFilters(filters: {\n limit?: number;\n offset?: number;\n distanceThreshold?: number;\n }): void {\n if (filters.limit !== undefined && (typeof filters.limit !== \"number\" || filters.limit <= 0)) {\n throw new MemoryValidationError(\"Limit must be a positive integer\");\n }\n\n if (filters.offset !== undefined && (typeof filters.offset !== \"number\" || filters.offset < 0)) {\n throw new MemoryValidationError(\"Offset must be a non-negative integer\");\n }\n\n if (\n filters.distanceThreshold !== undefined &&\n (typeof filters.distanceThreshold !== \"number\" || filters.distanceThreshold < 0)\n ) {\n throw new MemoryValidationError(\"Distance threshold must be a non-negative number\");\n }\n }\n\n /**\n * Check if a string is a valid ULID.\n */\n private isValidUlid(id: string): boolean {\n // ULID: 26 characters, Crockford Base32\n const ulidRegex = /^[0-7][0-9A-HJKMNP-TV-Z]{25}$/i;\n return ulidRegex.test(id);\n }\n\n /**\n * Bulk create long-term memories with rate limiting.\n * Useful for importing large datasets.\n */\n async bulkCreateLongTermMemories(\n memoryBatches: MemoryRecord[][],\n options: {\n batchSize?: number;\n delayBetweenBatches?: number;\n namespace?: string;\n } = {}\n ): Promise<AckResponse[]> {\n const { batchSize = 50, delayBetweenBatches = 100, namespace } = options;\n const results: AckResponse[] = [];\n\n for (const batch of memoryBatches) {\n // Split large batches into smaller chunks\n for (let i = 0; i < batch.length; i += batchSize) {\n const chunk = batch.slice(i, i + batchSize);\n const response = await this.createLongTermMemory(chunk, { namespace });\n results.push(response);\n\n // Rate limiting delay\n if (delayBetweenBatches > 0) {\n await this.sleep(delayBetweenBatches);\n }\n }\n }\n\n return results;\n }\n\n /**\n * Auto-paginating search that yields all matching long-term memory results.\n * Automatically handles pagination to retrieve all results.\n */\n async *searchAllLongTermMemories(\n options: Omit<SearchOptions, \"limit\" | \"offset\"> & { batchSize?: number }\n ): AsyncGenerator<MemoryRecord, void, undefined> {\n const { batchSize = 50, ...searchOptions } = options;\n let offset = 0;\n\n while (true) {\n const results = await this.searchLongTermMemory({\n ...searchOptions,\n limit: batchSize,\n offset,\n });\n\n if (!results.memories || results.memories.length === 0) {\n break;\n }\n\n for (const memory of results.memories) {\n yield memory;\n }\n\n // If we got fewer results than batchSize, we've reached the end\n if (results.memories.length < batchSize) {\n break;\n }\n\n offset += batchSize;\n }\n }\n\n /**\n * Sleep for a specified number of milliseconds.\n */\n private sleep(ms: number): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, ms));\n }\n}\n"]}
package/dist/index.mjs CHANGED
@@ -209,7 +209,7 @@ var MemoryType = class {
209
209
  };
210
210
 
211
211
  // src/client.ts
212
- var VERSION = "0.1.0";
212
+ var VERSION = "0.3.1";
213
213
  var MemoryAPIClient = class {
214
214
  config;
215
215
  fetchFn;
@@ -287,11 +287,12 @@ var MemoryAPIClient = class {
287
287
  */
288
288
  async handleHttpError(response) {
289
289
  let message;
290
+ const text = await response.text();
290
291
  try {
291
- const body = await response.json();
292
+ const body = JSON.parse(text);
292
293
  message = body.detail || body.message || JSON.stringify(body);
293
294
  } catch {
294
- message = await response.text();
295
+ message = text || `HTTP ${response.status}`;
295
296
  }
296
297
  if (response.status === 404) {
297
298
  throw new MemoryNotFoundError(message);
@@ -624,6 +625,101 @@ var MemoryAPIClient = class {
624
625
  throw error;
625
626
  }
626
627
  }
628
+ // ==================== Utility Methods ====================
629
+ /**
630
+ * Close the client and release any resources.
631
+ * This is a no-op for the fetch-based client but provided for API consistency.
632
+ */
633
+ close() {
634
+ }
635
+ /**
636
+ * Validate a memory record before sending to the server.
637
+ * @throws MemoryValidationError if validation fails
638
+ */
639
+ validateMemoryRecord(memory) {
640
+ if (!memory.text || !memory.text.trim()) {
641
+ throw new MemoryValidationError("Memory text cannot be empty");
642
+ }
643
+ const validMemoryTypes = ["episodic", "semantic", "message"];
644
+ if (memory.memory_type && !validMemoryTypes.includes(memory.memory_type)) {
645
+ throw new MemoryValidationError(`Invalid memory type: ${memory.memory_type}`);
646
+ }
647
+ if (memory.id && !this.isValidUlid(memory.id)) {
648
+ throw new MemoryValidationError(`Invalid ID format: ${memory.id}`);
649
+ }
650
+ }
651
+ /**
652
+ * Validate search filter parameters before API call.
653
+ * @throws MemoryValidationError if validation fails
654
+ */
655
+ validateSearchFilters(filters) {
656
+ if (filters.limit !== void 0 && (typeof filters.limit !== "number" || filters.limit <= 0)) {
657
+ throw new MemoryValidationError("Limit must be a positive integer");
658
+ }
659
+ if (filters.offset !== void 0 && (typeof filters.offset !== "number" || filters.offset < 0)) {
660
+ throw new MemoryValidationError("Offset must be a non-negative integer");
661
+ }
662
+ if (filters.distanceThreshold !== void 0 && (typeof filters.distanceThreshold !== "number" || filters.distanceThreshold < 0)) {
663
+ throw new MemoryValidationError("Distance threshold must be a non-negative number");
664
+ }
665
+ }
666
+ /**
667
+ * Check if a string is a valid ULID.
668
+ */
669
+ isValidUlid(id) {
670
+ const ulidRegex = /^[0-7][0-9A-HJKMNP-TV-Z]{25}$/i;
671
+ return ulidRegex.test(id);
672
+ }
673
+ /**
674
+ * Bulk create long-term memories with rate limiting.
675
+ * Useful for importing large datasets.
676
+ */
677
+ async bulkCreateLongTermMemories(memoryBatches, options = {}) {
678
+ const { batchSize = 50, delayBetweenBatches = 100, namespace } = options;
679
+ const results = [];
680
+ for (const batch of memoryBatches) {
681
+ for (let i = 0; i < batch.length; i += batchSize) {
682
+ const chunk = batch.slice(i, i + batchSize);
683
+ const response = await this.createLongTermMemory(chunk, { namespace });
684
+ results.push(response);
685
+ if (delayBetweenBatches > 0) {
686
+ await this.sleep(delayBetweenBatches);
687
+ }
688
+ }
689
+ }
690
+ return results;
691
+ }
692
+ /**
693
+ * Auto-paginating search that yields all matching long-term memory results.
694
+ * Automatically handles pagination to retrieve all results.
695
+ */
696
+ async *searchAllLongTermMemories(options) {
697
+ const { batchSize = 50, ...searchOptions } = options;
698
+ let offset = 0;
699
+ while (true) {
700
+ const results = await this.searchLongTermMemory({
701
+ ...searchOptions,
702
+ limit: batchSize,
703
+ offset
704
+ });
705
+ if (!results.memories || results.memories.length === 0) {
706
+ break;
707
+ }
708
+ for (const memory of results.memories) {
709
+ yield memory;
710
+ }
711
+ if (results.memories.length < batchSize) {
712
+ break;
713
+ }
714
+ offset += batchSize;
715
+ }
716
+ }
717
+ /**
718
+ * Sleep for a specified number of milliseconds.
719
+ */
720
+ sleep(ms) {
721
+ return new Promise((resolve) => setTimeout(resolve, ms));
722
+ }
627
723
  };
628
724
 
629
725
  export { CreatedAt, Entities, EventDate, LastAccessed, MemoryAPIClient, MemoryClientError, MemoryNotFoundError, MemoryServerError, MemoryType, MemoryValidationError, Namespace, SessionId, Topics, UserId };
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/errors.ts","../src/filters.ts","../src/client.ts"],"names":[],"mappings":";AAOO,IAAM,iBAAA,GAAN,MAAM,kBAAA,SAA0B,KAAA,CAAM;AAAA,EAC3C,YAAY,OAAA,EAAiB;AAC3B,IAAA,KAAA,CAAM,OAAO,CAAA;AACb,IAAA,IAAA,CAAK,IAAA,GAAO,mBAAA;AAEZ,IAAA,IAAI,MAAM,iBAAA,EAAmB;AAC3B,MAAA,KAAA,CAAM,iBAAA,CAAkB,MAAM,kBAAiB,CAAA;AAAA,IACjD;AAAA,EACF;AACF;AAKO,IAAM,qBAAA,GAAN,cAAoC,iBAAA,CAAkB;AAAA,EAC3D,YAAY,OAAA,EAAiB;AAC3B,IAAA,KAAA,CAAM,OAAO,CAAA;AACb,IAAA,IAAA,CAAK,IAAA,GAAO,uBAAA;AAAA,EACd;AACF;AAKO,IAAM,mBAAA,GAAN,cAAkC,iBAAA,CAAkB;AAAA,EACzD,YAAY,OAAA,EAAiB;AAC3B,IAAA,KAAA,CAAM,OAAO,CAAA;AACb,IAAA,IAAA,CAAK,IAAA,GAAO,qBAAA;AAAA,EACd;AACF;AAKO,IAAM,iBAAA,GAAN,cAAgC,iBAAA,CAAkB;AAAA,EACvD,UAAA;AAAA,EAEA,WAAA,CAAY,SAAiB,UAAA,EAAqB;AAChD,IAAA,KAAA,CAAM,OAAO,CAAA;AACb,IAAA,IAAA,CAAK,IAAA,GAAO,mBAAA;AACZ,IAAA,IAAA,CAAK,UAAA,GAAa,UAAA;AAAA,EACpB;AACF;;;ACxCO,IAAM,YAAN,MAAgB;AAAA,EACrB,EAAA;AAAA,EACA,GAAA;AAAA,EACA,MAAA;AAAA,EACA,MAAA;AAAA,EACA,EAAA;AAAA,EAEA,WAAA,CAAY,OAAA,GAMR,EAAC,EAAG;AACN,IAAA,IAAA,CAAK,KAAK,OAAA,CAAQ,EAAA;AAClB,IAAA,IAAA,CAAK,MAAM,OAAA,CAAQ,GAAA;AACnB,IAAA,IAAA,CAAK,SAAS,OAAA,CAAQ,MAAA;AACtB,IAAA,IAAA,CAAK,SAAS,OAAA,CAAQ,MAAA;AACtB,IAAA,IAAA,CAAK,KAAK,OAAA,CAAQ,EAAA;AAAA,EACpB;AAAA,EAEA,MAAA,GAAkC;AAChC,IAAA,MAAM,SAAkC,EAAC;AACzC,IAAA,IAAI,IAAA,CAAK,EAAA,KAAO,MAAA,EAAW,MAAA,CAAO,KAAK,IAAA,CAAK,EAAA;AAC5C,IAAA,IAAI,IAAA,CAAK,GAAA,KAAQ,MAAA,EAAW,MAAA,CAAO,MAAM,IAAA,CAAK,GAAA;AAC9C,IAAA,IAAI,IAAA,CAAK,MAAA,KAAW,MAAA,EAAW,MAAA,CAAO,SAAS,IAAA,CAAK,MAAA;AACpD,IAAA,IAAI,IAAA,CAAK,MAAA,KAAW,MAAA,EAAW,MAAA,CAAO,SAAS,IAAA,CAAK,MAAA;AACpD,IAAA,IAAI,IAAA,CAAK,EAAA,KAAO,MAAA,EAAW,MAAA,CAAO,KAAK,IAAA,CAAK,EAAA;AAC5C,IAAA,OAAO,MAAA;AAAA,EACT;AACF;AAKO,IAAM,YAAN,MAAgB;AAAA,EACrB,EAAA;AAAA,EACA,GAAA;AAAA,EACA,MAAA;AAAA,EACA,MAAA;AAAA,EAEA,WAAA,CAAY,OAAA,GAKR,EAAC,EAAG;AACN,IAAA,IAAA,CAAK,KAAK,OAAA,CAAQ,EAAA;AAClB,IAAA,IAAA,CAAK,MAAM,OAAA,CAAQ,GAAA;AACnB,IAAA,IAAA,CAAK,SAAS,OAAA,CAAQ,MAAA;AACtB,IAAA,IAAA,CAAK,SAAS,OAAA,CAAQ,MAAA;AAAA,EACxB;AAAA,EAEA,MAAA,GAAkC;AAChC,IAAA,MAAM,SAAkC,EAAC;AACzC,IAAA,IAAI,IAAA,CAAK,EAAA,KAAO,MAAA,EAAW,MAAA,CAAO,KAAK,IAAA,CAAK,EAAA;AAC5C,IAAA,IAAI,IAAA,CAAK,GAAA,KAAQ,MAAA,EAAW,MAAA,CAAO,MAAM,IAAA,CAAK,GAAA;AAC9C,IAAA,IAAI,IAAA,CAAK,MAAA,KAAW,MAAA,EAAW,MAAA,CAAO,SAAS,IAAA,CAAK,MAAA;AACpD,IAAA,IAAI,IAAA,CAAK,MAAA,KAAW,MAAA,EAAW,MAAA,CAAO,SAAS,IAAA,CAAK,MAAA;AACpD,IAAA,OAAO,MAAA;AAAA,EACT;AACF;AAKO,IAAM,SAAN,MAAa;AAAA,EAClB,EAAA;AAAA,EACA,GAAA;AAAA,EACA,MAAA;AAAA,EACA,MAAA;AAAA,EAEA,WAAA,CAAY,OAAA,GAKR,EAAC,EAAG;AACN,IAAA,IAAA,CAAK,KAAK,OAAA,CAAQ,EAAA;AAClB,IAAA,IAAA,CAAK,MAAM,OAAA,CAAQ,GAAA;AACnB,IAAA,IAAA,CAAK,SAAS,OAAA,CAAQ,MAAA;AACtB,IAAA,IAAA,CAAK,SAAS,OAAA,CAAQ,MAAA;AAAA,EACxB;AAAA,EAEA,MAAA,GAAkC;AAChC,IAAA,MAAM,SAAkC,EAAC;AACzC,IAAA,IAAI,IAAA,CAAK,EAAA,KAAO,MAAA,EAAW,MAAA,CAAO,KAAK,IAAA,CAAK,EAAA;AAC5C,IAAA,IAAI,IAAA,CAAK,GAAA,KAAQ,MAAA,EAAW,MAAA,CAAO,MAAM,IAAA,CAAK,GAAA;AAC9C,IAAA,IAAI,IAAA,CAAK,MAAA,KAAW,MAAA,EAAW,MAAA,CAAO,SAAS,IAAA,CAAK,MAAA;AACpD,IAAA,IAAI,IAAA,CAAK,MAAA,KAAW,MAAA,EAAW,MAAA,CAAO,SAAS,IAAA,CAAK,MAAA;AACpD,IAAA,OAAO,MAAA;AAAA,EACT;AACF;AAKO,IAAM,SAAN,MAAa;AAAA,EAClB,GAAA;AAAA,EACA,GAAA;AAAA,EACA,IAAA;AAAA,EAEA,WAAA,CAAY,OAAA,GAIR,EAAC,EAAG;AACN,IAAA,IAAA,CAAK,MAAM,OAAA,CAAQ,GAAA;AACnB,IAAA,IAAA,CAAK,MAAM,OAAA,CAAQ,GAAA;AACnB,IAAA,IAAA,CAAK,OAAO,OAAA,CAAQ,IAAA;AAAA,EACtB;AAAA,EAEA,MAAA,GAAkC;AAChC,IAAA,MAAM,SAAkC,EAAC;AACzC,IAAA,IAAI,IAAA,CAAK,GAAA,KAAQ,MAAA,EAAW,MAAA,CAAO,MAAM,IAAA,CAAK,GAAA;AAC9C,IAAA,IAAI,IAAA,CAAK,GAAA,KAAQ,MAAA,EAAW,MAAA,CAAO,MAAM,IAAA,CAAK,GAAA;AAC9C,IAAA,IAAI,IAAA,CAAK,IAAA,KAAS,MAAA,EAAW,MAAA,CAAO,OAAO,IAAA,CAAK,IAAA;AAChD,IAAA,OAAO,MAAA;AAAA,EACT;AACF;AAKO,IAAM,WAAN,MAAe;AAAA,EACpB,GAAA;AAAA,EACA,GAAA;AAAA,EACA,IAAA;AAAA,EAEA,WAAA,CAAY,OAAA,GAIR,EAAC,EAAG;AACN,IAAA,IAAA,CAAK,MAAM,OAAA,CAAQ,GAAA;AACnB,IAAA,IAAA,CAAK,MAAM,OAAA,CAAQ,GAAA;AACnB,IAAA,IAAA,CAAK,OAAO,OAAA,CAAQ,IAAA;AAAA,EACtB;AAAA,EAEA,MAAA,GAAkC;AAChC,IAAA,MAAM,SAAkC,EAAC;AACzC,IAAA,IAAI,IAAA,CAAK,GAAA,KAAQ,MAAA,EAAW,MAAA,CAAO,MAAM,IAAA,CAAK,GAAA;AAC9C,IAAA,IAAI,IAAA,CAAK,GAAA,KAAQ,MAAA,EAAW,MAAA,CAAO,MAAM,IAAA,CAAK,GAAA;AAC9C,IAAA,IAAI,IAAA,CAAK,IAAA,KAAS,MAAA,EAAW,MAAA,CAAO,OAAO,IAAA,CAAK,IAAA;AAChD,IAAA,OAAO,MAAA;AAAA,EACT;AACF;AAKO,IAAM,YAAN,MAAgB;AAAA,EACrB,GAAA;AAAA,EACA,GAAA;AAAA,EACA,EAAA;AAAA,EAEA,WAAA,CAAY,OAAA,GAIR,EAAC,EAAG;AACN,IAAA,IAAA,CAAK,MAAM,OAAA,CAAQ,GAAA;AACnB,IAAA,IAAA,CAAK,MAAM,OAAA,CAAQ,GAAA;AACnB,IAAA,IAAA,CAAK,KAAK,OAAA,CAAQ,EAAA;AAAA,EACpB;AAAA,EAEA,MAAA,GAAkC;AAChC,IAAA,MAAM,SAAkC,EAAC;AACzC,IAAA,IAAI,KAAK,GAAA,KAAQ,MAAA;AACf,MAAA,MAAA,CAAO,GAAA,GAAM,KAAK,GAAA,YAAe,IAAA,GAAO,KAAK,GAAA,CAAI,WAAA,KAAgB,IAAA,CAAK,GAAA;AACxE,IAAA,IAAI,KAAK,GAAA,KAAQ,MAAA;AACf,MAAA,MAAA,CAAO,GAAA,GAAM,KAAK,GAAA,YAAe,IAAA,GAAO,KAAK,GAAA,CAAI,WAAA,KAAgB,IAAA,CAAK,GAAA;AACxE,IAAA,IAAI,KAAK,EAAA,KAAO,MAAA;AACd,MAAA,MAAA,CAAO,EAAA,GAAK,KAAK,EAAA,YAAc,IAAA,GAAO,KAAK,EAAA,CAAG,WAAA,KAAgB,IAAA,CAAK,EAAA;AACrE,IAAA,OAAO,MAAA;AAAA,EACT;AACF;AAKO,IAAM,eAAN,MAAmB;AAAA,EACxB,GAAA;AAAA,EACA,GAAA;AAAA,EACA,EAAA;AAAA,EAEA,WAAA,CAAY,OAAA,GAIR,EAAC,EAAG;AACN,IAAA,IAAA,CAAK,MAAM,OAAA,CAAQ,GAAA;AACnB,IAAA,IAAA,CAAK,MAAM,OAAA,CAAQ,GAAA;AACnB,IAAA,IAAA,CAAK,KAAK,OAAA,CAAQ,EAAA;AAAA,EACpB;AAAA,EAEA,MAAA,GAAkC;AAChC,IAAA,MAAM,SAAkC,EAAC;AACzC,IAAA,IAAI,KAAK,GAAA,KAAQ,MAAA;AACf,MAAA,MAAA,CAAO,GAAA,GAAM,KAAK,GAAA,YAAe,IAAA,GAAO,KAAK,GAAA,CAAI,WAAA,KAAgB,IAAA,CAAK,GAAA;AACxE,IAAA,IAAI,KAAK,GAAA,KAAQ,MAAA;AACf,MAAA,MAAA,CAAO,GAAA,GAAM,KAAK,GAAA,YAAe,IAAA,GAAO,KAAK,GAAA,CAAI,WAAA,KAAgB,IAAA,CAAK,GAAA;AACxE,IAAA,IAAI,KAAK,EAAA,KAAO,MAAA;AACd,MAAA,MAAA,CAAO,EAAA,GAAK,KAAK,EAAA,YAAc,IAAA,GAAO,KAAK,EAAA,CAAG,WAAA,KAAgB,IAAA,CAAK,EAAA;AACrE,IAAA,OAAO,MAAA;AAAA,EACT;AACF;AAKO,IAAM,YAAN,MAAgB;AAAA,EACrB,GAAA;AAAA,EACA,GAAA;AAAA,EACA,EAAA;AAAA,EAEA,WAAA,CAAY,OAAA,GAIR,EAAC,EAAG;AACN,IAAA,IAAA,CAAK,MAAM,OAAA,CAAQ,GAAA;AACnB,IAAA,IAAA,CAAK,MAAM,OAAA,CAAQ,GAAA;AACnB,IAAA,IAAA,CAAK,KAAK,OAAA,CAAQ,EAAA;AAAA,EACpB;AAAA,EAEA,MAAA,GAAkC;AAChC,IAAA,MAAM,SAAkC,EAAC;AACzC,IAAA,IAAI,KAAK,GAAA,KAAQ,MAAA;AACf,MAAA,MAAA,CAAO,GAAA,GAAM,KAAK,GAAA,YAAe,IAAA,GAAO,KAAK,GAAA,CAAI,WAAA,KAAgB,IAAA,CAAK,GAAA;AACxE,IAAA,IAAI,KAAK,GAAA,KAAQ,MAAA;AACf,MAAA,MAAA,CAAO,GAAA,GAAM,KAAK,GAAA,YAAe,IAAA,GAAO,KAAK,GAAA,CAAI,WAAA,KAAgB,IAAA,CAAK,GAAA;AACxE,IAAA,IAAI,KAAK,EAAA,KAAO,MAAA;AACd,MAAA,MAAA,CAAO,EAAA,GAAK,KAAK,EAAA,YAAc,IAAA,GAAO,KAAK,EAAA,CAAG,WAAA,KAAgB,IAAA,CAAK,EAAA;AACrE,IAAA,OAAO,MAAA;AAAA,EACT;AACF;AAKO,IAAM,aAAN,MAAiB;AAAA,EACtB,EAAA;AAAA,EACA,GAAA;AAAA,EACA,MAAA;AAAA,EACA,MAAA;AAAA,EAEA,WAAA,CAAY,OAAA,GAKR,EAAC,EAAG;AACN,IAAA,IAAA,CAAK,KAAK,OAAA,CAAQ,EAAA;AAClB,IAAA,IAAA,CAAK,MAAM,OAAA,CAAQ,GAAA;AACnB,IAAA,IAAA,CAAK,SAAS,OAAA,CAAQ,MAAA;AACtB,IAAA,IAAA,CAAK,SAAS,OAAA,CAAQ,MAAA;AAAA,EACxB;AAAA,EAEA,MAAA,GAAkC;AAChC,IAAA,MAAM,SAAkC,EAAC;AACzC,IAAA,IAAI,IAAA,CAAK,EAAA,KAAO,MAAA,EAAW,MAAA,CAAO,KAAK,IAAA,CAAK,EAAA;AAC5C,IAAA,IAAI,IAAA,CAAK,GAAA,KAAQ,MAAA,EAAW,MAAA,CAAO,MAAM,IAAA,CAAK,GAAA;AAC9C,IAAA,IAAI,IAAA,CAAK,MAAA,KAAW,MAAA,EAAW,MAAA,CAAO,SAAS,IAAA,CAAK,MAAA;AACpD,IAAA,IAAI,IAAA,CAAK,MAAA,KAAW,MAAA,EAAW,MAAA,CAAO,SAAS,IAAA,CAAK,MAAA;AACpD,IAAA,OAAO,MAAA;AAAA,EACT;AACF;;;ACzOA,IAAM,OAAA,GAAU,OAAA;AAqDT,IAAM,kBAAN,MAAsB;AAAA,EACV,MAAA;AAAA,EAIA,OAAA;AAAA,EAEjB,YAAY,MAAA,EAA4B;AACtC,IAAA,IAAA,CAAK,MAAA,GAAS;AAAA,MACZ,OAAA,EAAS,GAAA;AAAA,MACT,GAAG,MAAA;AAAA,MACH,OAAA,EAAS,MAAA,CAAO,OAAA,CAAQ,OAAA,CAAQ,OAAO,EAAE;AAAA;AAAA,KAC3C;AACA,IAAA,IAAA,CAAK,OAAA,GAAU,OAAO,KAAA,IAAS,KAAA;AAAA,EACjC;AAAA;AAAA;AAAA;AAAA,EAKQ,UAAA,GAAqC;AAC3C,IAAA,MAAM,OAAA,GAAkC;AAAA,MACtC,cAAA,EAAgB,kBAAA;AAAA,MAChB,YAAA,EAAc,0BAA0B,OAAO,CAAA,CAAA;AAAA,MAC/C,kBAAA,EAAoB;AAAA,KACtB;AAEA,IAAA,IAAI,IAAA,CAAK,OAAO,MAAA,EAAQ;AACtB,MAAA,OAAA,CAAQ,WAAW,CAAA,GAAI,IAAA,CAAK,MAAA,CAAO,MAAA;AAAA,IACrC;AACA,IAAA,IAAI,IAAA,CAAK,OAAO,WAAA,EAAa;AAC3B,MAAA,OAAA,CAAQ,eAAe,CAAA,GAAI,CAAA,OAAA,EAAU,IAAA,CAAK,OAAO,WAAW,CAAA,CAAA;AAAA,IAC9D;AAEA,IAAA,OAAO,OAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKA,MAAc,OAAA,CACZ,MAAA,EACA,IAAA,EACA,OAAA,GAGI,EAAC,EACO;AACZ,IAAA,MAAM,MAAM,IAAI,GAAA,CAAI,IAAA,EAAM,IAAA,CAAK,OAAO,OAAO,CAAA;AAG7C,IAAA,IAAI,QAAQ,MAAA,EAAQ;AAClB,MAAA,KAAA,MAAW,CAAC,KAAK,KAAK,CAAA,IAAK,OAAO,OAAA,CAAQ,OAAA,CAAQ,MAAM,CAAA,EAAG;AACzD,QAAA,IAAI,UAAU,MAAA,EAAW;AACvB,UAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,EAAG;AAExB,YAAA,KAAA,MAAW,QAAQ,KAAA,EAAO;AACxB,cAAA,GAAA,CAAI,YAAA,CAAa,MAAA,CAAO,GAAA,EAAK,MAAA,CAAO,IAAI,CAAC,CAAA;AAAA,YAC3C;AAAA,UACF,CAAA,MAAO;AACL,YAAA,GAAA,CAAI,YAAA,CAAa,GAAA,CAAI,GAAA,EAAK,MAAA,CAAO,KAAK,CAAC,CAAA;AAAA,UACzC;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAEA,IAAA,MAAM,UAAA,GAAa,IAAI,eAAA,EAAgB;AACvC,IAAA,MAAM,SAAA,GAAY,WAAW,MAAM,UAAA,CAAW,OAAM,EAAG,IAAA,CAAK,OAAO,OAAO,CAAA;AAE1E,IAAA,IAAI;AACF,MAAA,MAAM,WAAW,MAAM,IAAA,CAAK,OAAA,CAAQ,GAAA,CAAI,UAAS,EAAG;AAAA,QAClD,MAAA;AAAA,QACA,OAAA,EAAS,KAAK,UAAA,EAAW;AAAA,QACzB,MAAM,OAAA,CAAQ,IAAA,GAAO,KAAK,SAAA,CAAU,OAAA,CAAQ,IAAI,CAAA,GAAI,KAAA,CAAA;AAAA,QACpD,QAAQ,UAAA,CAAW;AAAA,OACpB,CAAA;AAED,MAAA,YAAA,CAAa,SAAS,CAAA;AAEtB,MAAA,IAAI,CAAC,SAAS,EAAA,EAAI;AAChB,QAAA,OAAO,IAAA,CAAK,gBAAgB,QAAQ,CAAA;AAAA,MACtC;AAEA,MAAA,OAAQ,MAAM,SAAS,IAAA,EAAK;AAAA,IAC9B,SAAS,KAAA,EAAO;AACd,MAAA,YAAA,CAAa,SAAS,CAAA;AACtB,MAAA,IAAI,iBAAiB,iBAAA,EAAmB;AACtC,QAAA,MAAM,KAAA;AAAA,MACR;AACA,MAAA,IAAI,KAAA,YAAiB,KAAA,IAAS,KAAA,CAAM,IAAA,KAAS,YAAA,EAAc;AACzD,QAAA,MAAM,IAAI,iBAAA,CAAkB,CAAA,sBAAA,EAAyB,IAAA,CAAK,MAAA,CAAO,OAAO,CAAA,EAAA,CAAI,CAAA;AAAA,MAC9E;AACA,MAAA,MAAM,IAAI,iBAAA,CAAkB,CAAA,gBAAA,EAAmB,MAAA,CAAO,KAAK,CAAC,CAAA,CAAE,CAAA;AAAA,IAChE;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,MAAc,gBAAgB,QAAA,EAAoC;AAChE,IAAA,IAAI,OAAA;AACJ,IAAA,IAAI;AACF,MAAA,MAAM,IAAA,GAAQ,MAAM,QAAA,CAAS,IAAA,EAAK;AAClC,MAAA,OAAA,GACG,KAAK,MAAA,IAAsB,IAAA,CAAK,OAAA,IAAsB,IAAA,CAAK,UAAU,IAAI,CAAA;AAAA,IAC9E,CAAA,CAAA,MAAQ;AACN,MAAA,OAAA,GAAU,MAAM,SAAS,IAAA,EAAK;AAAA,IAChC;AAEA,IAAA,IAAI,QAAA,CAAS,WAAW,GAAA,EAAK;AAC3B,MAAA,MAAM,IAAI,oBAAoB,OAAO,CAAA;AAAA,IACvC;AACA,IAAA,MAAM,IAAI,iBAAA,CAAkB,OAAA,EAAS,QAAA,CAAS,MAAM,CAAA;AAAA,EACtD;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAM,WAAA,GAA4C;AAChD,IAAA,OAAO,IAAA,CAAK,OAAA,CAA6B,KAAA,EAAO,YAAY,CAAA;AAAA,EAC9D;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAM,YAAA,CAAa,OAAA,GAIf,EAAC,EAAiC;AACpC,IAAA,OAAO,IAAA,CAAK,OAAA,CAA6B,KAAA,EAAO,qBAAA,EAAuB;AAAA,MACrE,MAAA,EAAQ;AAAA,QACN,SAAA,EAAW,OAAA,CAAQ,SAAA,IAAa,IAAA,CAAK,MAAA,CAAO,gBAAA;AAAA,QAC5C,OAAO,OAAA,CAAQ,KAAA;AAAA,QACf,QAAQ,OAAA,CAAQ;AAAA;AAClB,KACD,CAAA;AAAA,EACH;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,gBAAA,CACJ,SAAA,EACA,OAAA,GAII,EAAC,EACkC;AACvC,IAAA,IAAI;AACF,MAAA,OAAO,MAAM,IAAA,CAAK,OAAA;AAAA,QAChB,KAAA;AAAA,QACA,CAAA,mBAAA,EAAsB,kBAAA,CAAmB,SAAS,CAAC,CAAA,CAAA;AAAA,QACnD;AAAA,UACE,MAAA,EAAQ;AAAA,YACN,SAAA,EAAW,OAAA,CAAQ,SAAA,IAAa,IAAA,CAAK,MAAA,CAAO,gBAAA;AAAA,YAC5C,UAAA,EAAY,OAAA,CAAQ,SAAA,IAAa,IAAA,CAAK,MAAA,CAAO,gBAAA;AAAA,YAC7C,kBAAA,EAAoB,OAAA,CAAQ,gBAAA,IAAoB,IAAA,CAAK,MAAA,CAAO;AAAA;AAC9D;AACF,OACF;AAAA,IACF,SAAS,KAAA,EAAO;AACd,MAAA,IAAI,iBAAiB,mBAAA,EAAqB;AACxC,QAAA,OAAO,IAAA;AAAA,MACT;AACA,MAAA,MAAM,KAAA;AAAA,IACR;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,wBAAA,CACJ,SAAA,EACA,OAAA,GAOI,EAAC,EAC2B;AAChC,IAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,gBAAA,CAAiB,WAAW,OAAO,CAAA;AAC/D,IAAA,IAAI,QAAA,EAAU;AACZ,MAAA,OAAO,QAAA;AAAA,IACT;AAGA,IAAA,MAAM,aAAA,GAA+B;AAAA,MACnC,UAAA,EAAY,SAAA;AAAA,MACZ,SAAA,EAAW,OAAA,CAAQ,SAAA,IAAa,IAAA,CAAK,MAAA,CAAO,gBAAA;AAAA,MAC5C,SAAS,OAAA,CAAQ,MAAA;AAAA,MACjB,UAAU,EAAC;AAAA,MACX,UAAU,EAAC;AAAA,MACX,aAAa,OAAA,CAAQ,UAAA;AAAA,MACrB,2BAA2B,OAAA,CAAQ;AAAA,KACrC;AAEA,IAAA,OAAO,IAAA,CAAK,gBAAA,CAAiB,SAAA,EAAW,aAAA,EAAe,OAAO,CAAA;AAAA,EAChE;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,gBAAA,CACJ,SAAA,EACA,aAAA,EACA,OAAA,GAKI,EAAC,EAC2B;AAChC,IAAA,MAAM,IAAA,GAAsB;AAAA,MAC1B,UAAA,EAAY,SAAA;AAAA,MACZ,GAAG,aAAA;AAAA,MACH,WAAW,aAAA,CAAc,SAAA,IAAa,OAAA,CAAQ,SAAA,IAAa,KAAK,MAAA,CAAO;AAAA,KACzE;AAEA,IAAA,OAAO,IAAA,CAAK,OAAA;AAAA,MACV,KAAA;AAAA,MACA,CAAA,mBAAA,EAAsB,kBAAA,CAAmB,SAAS,CAAC,CAAA,CAAA;AAAA,MACnD;AAAA,QACE,IAAA;AAAA,QACA,MAAA,EAAQ;AAAA,UACN,UAAA,EAAY,OAAA,CAAQ,SAAA,IAAa,IAAA,CAAK,MAAA,CAAO,gBAAA;AAAA,UAC7C,kBAAA,EAAoB,OAAA,CAAQ,gBAAA,IAAoB,IAAA,CAAK,MAAA,CAAO,uBAAA;AAAA,UAC5D,YAAY,OAAA,CAAQ;AAAA;AACtB;AACF,KACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,mBAAA,CACJ,SAAA,EACA,OAAA,GAAkC,EAAC,EACb;AACtB,IAAA,OAAO,IAAA,CAAK,OAAA;AAAA,MACV,QAAA;AAAA,MACA,CAAA,mBAAA,EAAsB,kBAAA,CAAmB,SAAS,CAAC,CAAA,CAAA;AAAA,MACnD;AAAA,QACE,MAAA,EAAQ;AAAA,UACN,SAAA,EAAW,OAAA,CAAQ,SAAA,IAAa,IAAA,CAAK,MAAA,CAAO;AAAA;AAC9C;AACF,KACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAM,oBAAA,CACJ,QAAA,EACA,OAAA,GAAkC,EAAC,EACb;AACtB,IAAA,OAAO,IAAA,CAAK,OAAA,CAAqB,MAAA,EAAQ,uBAAA,EAAyB;AAAA,MAChE,IAAA,EAAM,EAAE,QAAA,EAAS;AAAA,MACjB,MAAA,EAAQ;AAAA,QACN,SAAA,EAAW,OAAA,CAAQ,SAAA,IAAa,IAAA,CAAK,MAAA,CAAO;AAAA;AAC9C,KACD,CAAA;AAAA,EACH;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,qBAAqB,OAAA,EAAsD;AAC/E,IAAA,MAAM,IAAA,GAAgC;AAAA,MACpC,MAAM,OAAA,CAAQ,IAAA;AAAA,MACd,OAAO,OAAA,CAAQ,KAAA;AAAA,MACf,QAAQ,OAAA,CAAQ,MAAA;AAAA,MAChB,oBAAoB,OAAA,CAAQ;AAAA,KAC9B;AAGA,IAAA,IAAI,QAAQ,SAAA,EAAW;AACrB,MAAA,IAAA,CAAK,UAAA,GACH,QAAQ,SAAA,YAAqB,SAAA,GACzB,QAAQ,SAAA,CAAU,MAAA,KAClB,OAAA,CAAQ,SAAA;AAAA,IAChB;AACA,IAAA,IAAI,QAAQ,SAAA,EAAW;AACrB,MAAA,IAAA,CAAK,SAAA,GACH,QAAQ,SAAA,YAAqB,SAAA,GACzB,QAAQ,SAAA,CAAU,MAAA,KAClB,OAAA,CAAQ,SAAA;AAAA,IAChB;AACA,IAAA,IAAI,QAAQ,MAAA,EAAQ;AAClB,MAAA,IAAA,CAAK,MAAA,GACH,QAAQ,MAAA,YAAkB,MAAA,GAAS,QAAQ,MAAA,CAAO,MAAA,KAAW,OAAA,CAAQ,MAAA;AAAA,IACzE;AACA,IAAA,IAAI,QAAQ,QAAA,EAAU;AACpB,MAAA,IAAA,CAAK,QAAA,GACH,QAAQ,QAAA,YAAoB,QAAA,GACxB,QAAQ,QAAA,CAAS,MAAA,KACjB,OAAA,CAAQ,QAAA;AAAA,IAChB;AACA,IAAA,IAAI,QAAQ,SAAA,EAAW;AACrB,MAAA,IAAA,CAAK,UAAA,GACH,QAAQ,SAAA,YAAqB,SAAA,GACzB,QAAQ,SAAA,CAAU,MAAA,KAClB,OAAA,CAAQ,SAAA;AAAA,IAChB;AACA,IAAA,IAAI,QAAQ,YAAA,EAAc;AACxB,MAAA,IAAA,CAAK,aAAA,GACH,QAAQ,YAAA,YAAwB,YAAA,GAC5B,QAAQ,YAAA,CAAa,MAAA,KACrB,OAAA,CAAQ,YAAA;AAAA,IAChB;AACA,IAAA,IAAI,QAAQ,MAAA,EAAQ;AAClB,MAAA,IAAA,CAAK,OAAA,GACH,QAAQ,MAAA,YAAkB,MAAA,GAAS,QAAQ,MAAA,CAAO,MAAA,KAAW,OAAA,CAAQ,MAAA;AAAA,IACzE;AACA,IAAA,IAAI,QAAQ,UAAA,EAAY;AACtB,MAAA,IAAA,CAAK,WAAA,GACH,QAAQ,UAAA,YAAsB,UAAA,GAC1B,QAAQ,UAAA,CAAW,MAAA,KACnB,OAAA,CAAQ,UAAA;AAAA,IAChB;AACA,IAAA,IAAI,QAAQ,SAAA,EAAW;AACrB,MAAA,IAAA,CAAK,UAAA,GACH,QAAQ,SAAA,YAAqB,SAAA,GACzB,QAAQ,SAAA,CAAU,MAAA,KAClB,OAAA,CAAQ,SAAA;AAAA,IAChB;AAGA,IAAA,IAAI,QAAQ,OAAA,EAAS;AACnB,MAAA,IAAA,CAAK,aAAA,GAAgB,QAAQ,OAAA,CAAQ,aAAA;AACrC,MAAA,IAAA,CAAK,uBAAA,GAA0B,QAAQ,OAAA,CAAQ,eAAA;AAC/C,MAAA,IAAA,CAAK,sBAAA,GAAyB,QAAQ,OAAA,CAAQ,cAAA;AAC9C,MAAA,IAAA,CAAK,wBAAA,GAA2B,QAAQ,OAAA,CAAQ,gBAAA;AAChD,MAAA,IAAA,CAAK,sBAAA,GAAyB,QAAQ,OAAA,CAAQ,cAAA;AAC9C,MAAA,IAAA,CAAK,kCAAA,GAAqC,QAAQ,OAAA,CAAQ,0BAAA;AAC1D,MAAA,IAAA,CAAK,8BAAA,GAAiC,QAAQ,OAAA,CAAQ,sBAAA;AACtD,MAAA,IAAA,CAAK,mBAAA,GAAsB,QAAQ,OAAA,CAAQ,mBAAA;AAAA,IAC7C;AAEA,IAAA,OAAO,IAAA,CAAK,OAAA,CAA6B,MAAA,EAAQ,6BAAA,EAA+B;AAAA,MAC9E;AAAA,KACD,CAAA;AAAA,EACH;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,iBAAA,CACJ,QAAA,EACA,OAAA,GAAkC,EAAC,EACL;AAC9B,IAAA,IAAI;AACF,MAAA,OAAO,MAAM,IAAA,CAAK,OAAA;AAAA,QAChB,KAAA;AAAA,QACA,CAAA,qBAAA,EAAwB,kBAAA,CAAmB,QAAQ,CAAC,CAAA,CAAA;AAAA,QACpD;AAAA,UACE,MAAA,EAAQ;AAAA,YACN,SAAA,EAAW,OAAA,CAAQ,SAAA,IAAa,IAAA,CAAK,MAAA,CAAO;AAAA;AAC9C;AACF,OACF;AAAA,IACF,SAAS,KAAA,EAAO;AACd,MAAA,IAAI,iBAAiB,mBAAA,EAAqB;AACxC,QAAA,OAAO,IAAA;AAAA,MACT;AACA,MAAA,MAAM,KAAA;AAAA,IACR;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,sBAAA,CACJ,SAAA,EACA,OAAA,GAAkC,EAAC,EACb;AACtB,IAAA,OAAO,IAAA,CAAK,OAAA,CAAqB,QAAA,EAAU,sBAAA,EAAwB;AAAA,MACjE,MAAA,EAAQ;AAAA,QACN,UAAA,EAAY,SAAA;AAAA,QACZ,SAAA,EAAW,OAAA,CAAQ,SAAA,IAAa,IAAA,CAAK,MAAA,CAAO;AAAA;AAC9C,KACD,CAAA;AAAA,EACH;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAM,aAAa,OAAA,EAA6D;AAC9E,IAAA,OAAO,IAAA,CAAK,OAAA,CAA8B,MAAA,EAAQ,mBAAA,EAAqB;AAAA,MACrE,IAAA,EAAM;AAAA,KACP,CAAA;AAAA,EACH;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAM,kBAAA,CACJ,QAAA,EACA,OAAA,EACuB;AACvB,IAAA,OAAO,IAAA,CAAK,OAAA;AAAA,MACV,OAAA;AAAA,MACA,CAAA,qBAAA,EAAwB,kBAAA,CAAmB,QAAQ,CAAC,CAAA,CAAA;AAAA,MACpD,EAAE,MAAM,OAAA;AAAQ,KAClB;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAM,uBAAuB,OAAA,EAQD;AAC1B,IAAA,OAAO,IAAA,CAAK,OAAA,CAAwB,MAAA,EAAQ,6BAAA,EAA+B;AAAA,MACzE,MAAA,EAAQ;AAAA,QACN,WAAW,OAAA,CAAQ,SAAA;AAAA,QACnB,SAAS,OAAA,CAAQ,MAAA;AAAA,QACjB,YAAY,OAAA,CAAQ,SAAA;AAAA,QACpB,OAAO,OAAA,CAAQ,KAAA;AAAA,QACf,SAAS,OAAA,CAAQ;AAAA,OACnB;AAAA,MACA,IAAA,EAAM;AAAA,QACJ,QAAQ,OAAA,CAAQ,MAAA;AAAA,QAChB,YAAY,OAAA,CAAQ;AAAA;AACtB,KACD,CAAA;AAAA,EACH;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAM,gBAAA,GAA2C;AAC/C,IAAA,OAAO,IAAA,CAAK,OAAA,CAAuB,KAAA,EAAO,mBAAmB,CAAA;AAAA,EAC/D;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,kBAAkB,OAAA,EAAyD;AAC/E,IAAA,OAAO,IAAA,CAAK,OAAA,CAAqB,MAAA,EAAQ,mBAAA,EAAqB;AAAA,MAC5D,IAAA,EAAM;AAAA,KACP,CAAA;AAAA,EACH;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,eAAe,MAAA,EAA6C;AAChE,IAAA,IAAI;AACF,MAAA,OAAO,MAAM,IAAA,CAAK,OAAA;AAAA,QAChB,KAAA;AAAA,QACA,CAAA,kBAAA,EAAqB,kBAAA,CAAmB,MAAM,CAAC,CAAA;AAAA,OACjD;AAAA,IACF,SAAS,KAAA,EAAO;AACd,MAAA,IAAI,iBAAiB,mBAAA,EAAqB;AACxC,QAAA,OAAO,IAAA;AAAA,MACT;AACA,MAAA,MAAM,KAAA;AAAA,IACR;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,kBAAkB,MAAA,EAAsC;AAC5D,IAAA,OAAO,IAAA,CAAK,OAAA;AAAA,MACV,QAAA;AAAA,MACA,CAAA,kBAAA,EAAqB,kBAAA,CAAmB,MAAM,CAAC,CAAA;AAAA,KACjD;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,uBAAA,CACJ,MAAA,EACA,KAAA,EACqC;AACrC,IAAA,OAAO,IAAA,CAAK,OAAA;AAAA,MACV,MAAA;AAAA,MACA,CAAA,kBAAA,EAAqB,kBAAA,CAAmB,MAAM,CAAC,CAAA,eAAA,CAAA;AAAA,MAC/C,EAAE,IAAA,EAAM,EAAE,KAAA,EAAM;AAAE,KACpB;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,yBAAA,CACJ,MAAA,EACA,OAAA,GAKI,EAAC,EACkC;AACvC,IAAA,OAAO,IAAA,CAAK,OAAA;AAAA,MACV,KAAA;AAAA,MACA,CAAA,kBAAA,EAAqB,kBAAA,CAAmB,MAAM,CAAC,CAAA,WAAA,CAAA;AAAA,MAC/C;AAAA,QACE,MAAA,EAAQ;AAAA,UACN,WAAW,OAAA,CAAQ,SAAA;AAAA,UACnB,SAAS,OAAA,CAAQ,MAAA;AAAA,UACjB,YAAY,OAAA,CAAQ,SAAA;AAAA,UACpB,aAAa,OAAA,CAAQ;AAAA;AACvB;AACF,KACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,cAAA,CACJ,MAAA,EACA,OAAA,GAA+B,EAAC,EACjB;AACf,IAAA,OAAO,IAAA,CAAK,OAAA;AAAA,MACV,MAAA;AAAA,MACA,CAAA,kBAAA,EAAqB,kBAAA,CAAmB,MAAM,CAAC,CAAA,IAAA,CAAA;AAAA,MAC/C,EAAE,MAAM,OAAA;AAAQ,KAClB;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAM,QAAQ,MAAA,EAAsC;AAClD,IAAA,IAAI;AACF,MAAA,OAAO,MAAM,IAAA,CAAK,OAAA;AAAA,QAChB,KAAA;AAAA,QACA,CAAA,UAAA,EAAa,kBAAA,CAAmB,MAAM,CAAC,CAAA;AAAA,OACzC;AAAA,IACF,SAAS,KAAA,EAAO;AACd,MAAA,IAAI,iBAAiB,mBAAA,EAAqB;AACxC,QAAA,OAAO,IAAA;AAAA,MACT;AACA,MAAA,MAAM,KAAA;AAAA,IACR;AAAA,EACF;AACF","file":"index.mjs","sourcesContent":["/**\n * Exception classes for the Agent Memory Client.\n */\n\n/**\n * Base error for all memory client errors.\n */\nexport class MemoryClientError extends Error {\n constructor(message: string) {\n super(message);\n this.name = \"MemoryClientError\";\n // Maintains proper stack trace for where our error was thrown (only in V8)\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, MemoryClientError);\n }\n }\n}\n\n/**\n * Raised when memory record or filter validation fails.\n */\nexport class MemoryValidationError extends MemoryClientError {\n constructor(message: string) {\n super(message);\n this.name = \"MemoryValidationError\";\n }\n}\n\n/**\n * Raised when a requested memory or session is not found.\n */\nexport class MemoryNotFoundError extends MemoryClientError {\n constructor(message: string) {\n super(message);\n this.name = \"MemoryNotFoundError\";\n }\n}\n\n/**\n * Raised when the memory server returns an error.\n */\nexport class MemoryServerError extends MemoryClientError {\n statusCode?: number;\n\n constructor(message: string, statusCode?: number) {\n super(message);\n this.name = \"MemoryServerError\";\n this.statusCode = statusCode;\n }\n}\n","/**\n * Filter classes for search operations.\n *\n * These filters allow for filtering memory search results.\n */\n\n/**\n * Filter by session ID\n */\nexport class SessionId {\n eq?: string;\n in_?: string[];\n not_eq?: string;\n not_in?: string[];\n ne?: string;\n\n constructor(options: {\n eq?: string;\n in_?: string[];\n not_eq?: string;\n not_in?: string[];\n ne?: string;\n } = {}) {\n this.eq = options.eq;\n this.in_ = options.in_;\n this.not_eq = options.not_eq;\n this.not_in = options.not_in;\n this.ne = options.ne;\n }\n\n toJSON(): Record<string, unknown> {\n const result: Record<string, unknown> = {};\n if (this.eq !== undefined) result.eq = this.eq;\n if (this.in_ !== undefined) result.in_ = this.in_;\n if (this.not_eq !== undefined) result.not_eq = this.not_eq;\n if (this.not_in !== undefined) result.not_in = this.not_in;\n if (this.ne !== undefined) result.ne = this.ne;\n return result;\n }\n}\n\n/**\n * Filter by namespace\n */\nexport class Namespace {\n eq?: string;\n in_?: string[];\n not_eq?: string;\n not_in?: string[];\n\n constructor(options: {\n eq?: string;\n in_?: string[];\n not_eq?: string;\n not_in?: string[];\n } = {}) {\n this.eq = options.eq;\n this.in_ = options.in_;\n this.not_eq = options.not_eq;\n this.not_in = options.not_in;\n }\n\n toJSON(): Record<string, unknown> {\n const result: Record<string, unknown> = {};\n if (this.eq !== undefined) result.eq = this.eq;\n if (this.in_ !== undefined) result.in_ = this.in_;\n if (this.not_eq !== undefined) result.not_eq = this.not_eq;\n if (this.not_in !== undefined) result.not_in = this.not_in;\n return result;\n }\n}\n\n/**\n * Filter by user ID\n */\nexport class UserId {\n eq?: string;\n in_?: string[];\n not_eq?: string;\n not_in?: string[];\n\n constructor(options: {\n eq?: string;\n in_?: string[];\n not_eq?: string;\n not_in?: string[];\n } = {}) {\n this.eq = options.eq;\n this.in_ = options.in_;\n this.not_eq = options.not_eq;\n this.not_in = options.not_in;\n }\n\n toJSON(): Record<string, unknown> {\n const result: Record<string, unknown> = {};\n if (this.eq !== undefined) result.eq = this.eq;\n if (this.in_ !== undefined) result.in_ = this.in_;\n if (this.not_eq !== undefined) result.not_eq = this.not_eq;\n if (this.not_in !== undefined) result.not_in = this.not_in;\n return result;\n }\n}\n\n/**\n * Filter by topics\n */\nexport class Topics {\n any?: string[];\n all?: string[];\n none?: string[];\n\n constructor(options: {\n any?: string[];\n all?: string[];\n none?: string[];\n } = {}) {\n this.any = options.any;\n this.all = options.all;\n this.none = options.none;\n }\n\n toJSON(): Record<string, unknown> {\n const result: Record<string, unknown> = {};\n if (this.any !== undefined) result.any = this.any;\n if (this.all !== undefined) result.all = this.all;\n if (this.none !== undefined) result.none = this.none;\n return result;\n }\n}\n\n/**\n * Filter by entities\n */\nexport class Entities {\n any?: string[];\n all?: string[];\n none?: string[];\n\n constructor(options: {\n any?: string[];\n all?: string[];\n none?: string[];\n } = {}) {\n this.any = options.any;\n this.all = options.all;\n this.none = options.none;\n }\n\n toJSON(): Record<string, unknown> {\n const result: Record<string, unknown> = {};\n if (this.any !== undefined) result.any = this.any;\n if (this.all !== undefined) result.all = this.all;\n if (this.none !== undefined) result.none = this.none;\n return result;\n }\n}\n\n/**\n * Filter by creation date\n */\nexport class CreatedAt {\n gte?: Date | string;\n lte?: Date | string;\n eq?: Date | string;\n\n constructor(options: {\n gte?: Date | string;\n lte?: Date | string;\n eq?: Date | string;\n } = {}) {\n this.gte = options.gte;\n this.lte = options.lte;\n this.eq = options.eq;\n }\n\n toJSON(): Record<string, unknown> {\n const result: Record<string, unknown> = {};\n if (this.gte !== undefined)\n result.gte = this.gte instanceof Date ? this.gte.toISOString() : this.gte;\n if (this.lte !== undefined)\n result.lte = this.lte instanceof Date ? this.lte.toISOString() : this.lte;\n if (this.eq !== undefined)\n result.eq = this.eq instanceof Date ? this.eq.toISOString() : this.eq;\n return result;\n }\n}\n\n/**\n * Filter by last accessed date\n */\nexport class LastAccessed {\n gte?: Date | string;\n lte?: Date | string;\n eq?: Date | string;\n\n constructor(options: {\n gte?: Date | string;\n lte?: Date | string;\n eq?: Date | string;\n } = {}) {\n this.gte = options.gte;\n this.lte = options.lte;\n this.eq = options.eq;\n }\n\n toJSON(): Record<string, unknown> {\n const result: Record<string, unknown> = {};\n if (this.gte !== undefined)\n result.gte = this.gte instanceof Date ? this.gte.toISOString() : this.gte;\n if (this.lte !== undefined)\n result.lte = this.lte instanceof Date ? this.lte.toISOString() : this.lte;\n if (this.eq !== undefined)\n result.eq = this.eq instanceof Date ? this.eq.toISOString() : this.eq;\n return result;\n }\n}\n\n/**\n * Filter by event date\n */\nexport class EventDate {\n gte?: Date | string;\n lte?: Date | string;\n eq?: Date | string;\n\n constructor(options: {\n gte?: Date | string;\n lte?: Date | string;\n eq?: Date | string;\n } = {}) {\n this.gte = options.gte;\n this.lte = options.lte;\n this.eq = options.eq;\n }\n\n toJSON(): Record<string, unknown> {\n const result: Record<string, unknown> = {};\n if (this.gte !== undefined)\n result.gte = this.gte instanceof Date ? this.gte.toISOString() : this.gte;\n if (this.lte !== undefined)\n result.lte = this.lte instanceof Date ? this.lte.toISOString() : this.lte;\n if (this.eq !== undefined)\n result.eq = this.eq instanceof Date ? this.eq.toISOString() : this.eq;\n return result;\n }\n}\n\n/**\n * Filter by memory type\n */\nexport class MemoryType {\n eq?: string;\n in_?: string[];\n not_eq?: string;\n not_in?: string[];\n\n constructor(options: {\n eq?: string;\n in_?: string[];\n not_eq?: string;\n not_in?: string[];\n } = {}) {\n this.eq = options.eq;\n this.in_ = options.in_;\n this.not_eq = options.not_eq;\n this.not_in = options.not_in;\n }\n\n toJSON(): Record<string, unknown> {\n const result: Record<string, unknown> = {};\n if (this.eq !== undefined) result.eq = this.eq;\n if (this.in_ !== undefined) result.in_ = this.in_;\n if (this.not_eq !== undefined) result.not_eq = this.not_eq;\n if (this.not_in !== undefined) result.not_in = this.not_in;\n return result;\n }\n}\n","/**\n * Agent Memory API Client\n *\n * A TypeScript/JavaScript client for the Agent Memory Server REST API.\n */\n\nimport {\n MemoryClientError,\n MemoryNotFoundError,\n MemoryServerError,\n} from \"./errors\";\nimport {\n SessionId,\n Namespace,\n UserId,\n Topics,\n Entities,\n CreatedAt,\n LastAccessed,\n EventDate,\n MemoryType,\n} from \"./filters\";\nimport {\n AckResponse,\n CreateSummaryViewRequest,\n ForgetPolicy,\n ForgetResponse,\n HealthCheckResponse,\n MemoryPromptRequest,\n MemoryPromptResponse,\n MemoryRecord,\n MemoryRecordResults,\n MemoryStrategyConfig,\n ModelNameLiteral,\n RecencyConfig,\n SessionListResponse,\n SummaryView,\n SummaryViewPartitionResult,\n Task,\n WorkingMemory,\n WorkingMemoryResponse,\n} from \"./models\";\n\nconst VERSION = \"0.1.0\";\n\n/**\n * Configuration for the Memory API Client\n */\nexport interface MemoryClientConfig {\n /** Base URL of the memory server (e.g., 'http://localhost:8000') */\n baseUrl: string;\n /** Request timeout in milliseconds (default: 30000) */\n timeout?: number;\n /** Optional default namespace to use for operations */\n defaultNamespace?: string;\n /** Optional default model name for auto-summarization */\n defaultModelName?: ModelNameLiteral;\n /** Optional default context window limit for auto-summarization */\n defaultContextWindowMax?: number;\n /** Optional API key for authentication */\n apiKey?: string;\n /** Optional bearer token for authentication */\n bearerToken?: string;\n /** Custom fetch function (for testing or custom implementations) */\n fetch?: typeof fetch;\n}\n\n/**\n * Options for search operations\n */\nexport interface SearchOptions {\n text: string;\n sessionId?: SessionId | { eq?: string; in_?: string[]; not_eq?: string; not_in?: string[] };\n namespace?: Namespace | { eq?: string; in_?: string[]; not_eq?: string; not_in?: string[] };\n topics?: Topics | { any?: string[]; all?: string[]; none?: string[] };\n entities?: Entities | { any?: string[]; all?: string[]; none?: string[] };\n createdAt?: CreatedAt | { gte?: Date | string; lte?: Date | string; eq?: Date | string };\n lastAccessed?: LastAccessed | { gte?: Date | string; lte?: Date | string; eq?: Date | string };\n userId?: UserId | { eq?: string; in_?: string[]; not_eq?: string; not_in?: string[] };\n memoryType?: MemoryType | { eq?: string; in_?: string[]; not_eq?: string; not_in?: string[] };\n eventDate?: EventDate | { gte?: Date | string; lte?: Date | string; eq?: Date | string };\n distanceThreshold?: number;\n limit?: number;\n offset?: number;\n recency?: RecencyConfig;\n optimizeQuery?: boolean;\n}\n\n/**\n * Client for the Agent Memory Server REST API.\n *\n * Provides methods to interact with all server endpoints:\n * - Health check\n * - Session management (list, get, put, delete)\n * - Long-term memory (create, search, edit, delete)\n */\nexport class MemoryAPIClient {\n private readonly config: Required<\n Pick<MemoryClientConfig, \"baseUrl\" | \"timeout\">\n > &\n MemoryClientConfig;\n private readonly fetchFn: typeof fetch;\n\n constructor(config: MemoryClientConfig) {\n this.config = {\n timeout: 30000,\n ...config,\n baseUrl: config.baseUrl.replace(/\\/$/, \"\"), // Remove trailing slash\n };\n this.fetchFn = config.fetch ?? fetch;\n }\n\n /**\n * Get default headers for requests\n */\n private getHeaders(): Record<string, string> {\n const headers: Record<string, string> = {\n \"Content-Type\": \"application/json\",\n \"User-Agent\": `agent-memory-client-js/${VERSION}`,\n \"X-Client-Version\": VERSION,\n };\n\n if (this.config.apiKey) {\n headers[\"X-API-Key\"] = this.config.apiKey;\n }\n if (this.config.bearerToken) {\n headers[\"Authorization\"] = `Bearer ${this.config.bearerToken}`;\n }\n\n return headers;\n }\n\n /**\n * Make an HTTP request with error handling\n */\n private async request<T>(\n method: string,\n path: string,\n options: {\n body?: unknown;\n params?: Record<string, string | number | boolean | string[] | undefined>;\n } = {}\n ): Promise<T> {\n const url = new URL(path, this.config.baseUrl);\n\n // Add query parameters\n if (options.params) {\n for (const [key, value] of Object.entries(options.params)) {\n if (value !== undefined) {\n if (Array.isArray(value)) {\n // Handle array params by appending multiple values with the same key\n for (const item of value) {\n url.searchParams.append(key, String(item));\n }\n } else {\n url.searchParams.set(key, String(value));\n }\n }\n }\n }\n\n const controller = new AbortController();\n const timeoutId = setTimeout(() => controller.abort(), this.config.timeout);\n\n try {\n const response = await this.fetchFn(url.toString(), {\n method,\n headers: this.getHeaders(),\n body: options.body ? JSON.stringify(options.body) : undefined,\n signal: controller.signal,\n });\n\n clearTimeout(timeoutId);\n\n if (!response.ok) {\n return this.handleHttpError(response);\n }\n\n return (await response.json()) as T;\n } catch (error) {\n clearTimeout(timeoutId);\n if (error instanceof MemoryClientError) {\n throw error;\n }\n if (error instanceof Error && error.name === \"AbortError\") {\n throw new MemoryClientError(`Request timeout after ${this.config.timeout}ms`);\n }\n throw new MemoryClientError(`Request failed: ${String(error)}`);\n }\n }\n\n /**\n * Handle HTTP error responses\n */\n private async handleHttpError(response: Response): Promise<never> {\n let message: string;\n try {\n const body = (await response.json()) as Record<string, unknown>;\n message =\n (body.detail as string) || (body.message as string) || JSON.stringify(body);\n } catch {\n message = await response.text();\n }\n\n if (response.status === 404) {\n throw new MemoryNotFoundError(message);\n }\n throw new MemoryServerError(message, response.status);\n }\n\n // ==================== Health ====================\n\n /**\n * Check server health\n */\n async healthCheck(): Promise<HealthCheckResponse> {\n return this.request<HealthCheckResponse>(\"GET\", \"/v1/health\");\n }\n\n // ==================== Working Memory ====================\n\n /**\n * List all session IDs\n */\n async listSessions(options: {\n namespace?: string;\n limit?: number;\n offset?: number;\n } = {}): Promise<SessionListResponse> {\n return this.request<SessionListResponse>(\"GET\", \"/v1/working-memory/\", {\n params: {\n namespace: options.namespace ?? this.config.defaultNamespace,\n limit: options.limit,\n offset: options.offset,\n },\n });\n }\n\n /**\n * Get working memory for a session\n */\n async getWorkingMemory(\n sessionId: string,\n options: {\n namespace?: string;\n modelName?: ModelNameLiteral;\n contextWindowMax?: number;\n } = {}\n ): Promise<WorkingMemoryResponse | null> {\n try {\n return await this.request<WorkingMemoryResponse>(\n \"GET\",\n `/v1/working-memory/${encodeURIComponent(sessionId)}`,\n {\n params: {\n namespace: options.namespace ?? this.config.defaultNamespace,\n model_name: options.modelName ?? this.config.defaultModelName,\n context_window_max: options.contextWindowMax ?? this.config.defaultContextWindowMax,\n },\n }\n );\n } catch (error) {\n if (error instanceof MemoryNotFoundError) {\n return null;\n }\n throw error;\n }\n }\n\n /**\n * Get or create working memory for a session\n */\n async getOrCreateWorkingMemory(\n sessionId: string,\n options: {\n namespace?: string;\n userId?: string;\n modelName?: ModelNameLiteral;\n contextWindowMax?: number;\n ttlSeconds?: number;\n longTermMemoryStrategy?: MemoryStrategyConfig;\n } = {}\n ): Promise<WorkingMemoryResponse> {\n const existing = await this.getWorkingMemory(sessionId, options);\n if (existing) {\n return existing;\n }\n\n // Create new working memory\n const workingMemory: WorkingMemory = {\n session_id: sessionId,\n namespace: options.namespace ?? this.config.defaultNamespace,\n user_id: options.userId,\n messages: [],\n memories: [],\n ttl_seconds: options.ttlSeconds,\n long_term_memory_strategy: options.longTermMemoryStrategy,\n };\n\n return this.putWorkingMemory(sessionId, workingMemory, options);\n }\n\n /**\n * Create or update working memory for a session\n */\n async putWorkingMemory(\n sessionId: string,\n workingMemory: Partial<WorkingMemory>,\n options: {\n namespace?: string;\n modelName?: ModelNameLiteral;\n contextWindowMax?: number;\n background?: boolean;\n } = {}\n ): Promise<WorkingMemoryResponse> {\n const body: WorkingMemory = {\n session_id: sessionId,\n ...workingMemory,\n namespace: workingMemory.namespace ?? options.namespace ?? this.config.defaultNamespace,\n };\n\n return this.request<WorkingMemoryResponse>(\n \"PUT\",\n `/v1/working-memory/${encodeURIComponent(sessionId)}`,\n {\n body,\n params: {\n model_name: options.modelName ?? this.config.defaultModelName,\n context_window_max: options.contextWindowMax ?? this.config.defaultContextWindowMax,\n background: options.background,\n },\n }\n );\n }\n\n /**\n * Delete working memory for a session\n */\n async deleteWorkingMemory(\n sessionId: string,\n options: { namespace?: string } = {}\n ): Promise<AckResponse> {\n return this.request<AckResponse>(\n \"DELETE\",\n `/v1/working-memory/${encodeURIComponent(sessionId)}`,\n {\n params: {\n namespace: options.namespace ?? this.config.defaultNamespace,\n },\n }\n );\n }\n\n // ==================== Long-term Memory ====================\n\n /**\n * Create long-term memory records\n */\n async createLongTermMemory(\n memories: MemoryRecord[],\n options: { namespace?: string } = {}\n ): Promise<AckResponse> {\n return this.request<AckResponse>(\"POST\", \"/v1/long-term-memory/\", {\n body: { memories },\n params: {\n namespace: options.namespace ?? this.config.defaultNamespace,\n },\n });\n }\n\n /**\n * Search long-term memory\n */\n async searchLongTermMemory(options: SearchOptions): Promise<MemoryRecordResults> {\n const body: Record<string, unknown> = {\n text: options.text,\n limit: options.limit,\n offset: options.offset,\n distance_threshold: options.distanceThreshold,\n };\n\n // Add filters\n if (options.sessionId) {\n body.session_id =\n options.sessionId instanceof SessionId\n ? options.sessionId.toJSON()\n : options.sessionId;\n }\n if (options.namespace) {\n body.namespace =\n options.namespace instanceof Namespace\n ? options.namespace.toJSON()\n : options.namespace;\n }\n if (options.topics) {\n body.topics =\n options.topics instanceof Topics ? options.topics.toJSON() : options.topics;\n }\n if (options.entities) {\n body.entities =\n options.entities instanceof Entities\n ? options.entities.toJSON()\n : options.entities;\n }\n if (options.createdAt) {\n body.created_at =\n options.createdAt instanceof CreatedAt\n ? options.createdAt.toJSON()\n : options.createdAt;\n }\n if (options.lastAccessed) {\n body.last_accessed =\n options.lastAccessed instanceof LastAccessed\n ? options.lastAccessed.toJSON()\n : options.lastAccessed;\n }\n if (options.userId) {\n body.user_id =\n options.userId instanceof UserId ? options.userId.toJSON() : options.userId;\n }\n if (options.memoryType) {\n body.memory_type =\n options.memoryType instanceof MemoryType\n ? options.memoryType.toJSON()\n : options.memoryType;\n }\n if (options.eventDate) {\n body.event_date =\n options.eventDate instanceof EventDate\n ? options.eventDate.toJSON()\n : options.eventDate;\n }\n\n // Add recency config\n if (options.recency) {\n body.recency_boost = options.recency.recency_boost;\n body.recency_semantic_weight = options.recency.semantic_weight;\n body.recency_recency_weight = options.recency.recency_weight;\n body.recency_freshness_weight = options.recency.freshness_weight;\n body.recency_novelty_weight = options.recency.novelty_weight;\n body.recency_half_life_last_access_days = options.recency.half_life_last_access_days;\n body.recency_half_life_created_days = options.recency.half_life_created_days;\n body.server_side_recency = options.recency.server_side_recency;\n }\n\n return this.request<MemoryRecordResults>(\"POST\", \"/v1/long-term-memory/search\", {\n body,\n });\n }\n\n /**\n * Get a long-term memory by ID\n */\n async getLongTermMemory(\n memoryId: string,\n options: { namespace?: string } = {}\n ): Promise<MemoryRecord | null> {\n try {\n return await this.request<MemoryRecord>(\n \"GET\",\n `/v1/long-term-memory/${encodeURIComponent(memoryId)}`,\n {\n params: {\n namespace: options.namespace ?? this.config.defaultNamespace,\n },\n }\n );\n } catch (error) {\n if (error instanceof MemoryNotFoundError) {\n return null;\n }\n throw error;\n }\n }\n\n /**\n * Delete long-term memories by IDs\n */\n async deleteLongTermMemories(\n memoryIds: string[],\n options: { namespace?: string } = {}\n ): Promise<AckResponse> {\n return this.request<AckResponse>(\"DELETE\", \"/v1/long-term-memory\", {\n params: {\n memory_ids: memoryIds,\n namespace: options.namespace ?? this.config.defaultNamespace,\n },\n });\n }\n\n // ==================== Memory Prompt ====================\n\n /**\n * Get memory-enhanced prompt\n */\n async memoryPrompt(request: MemoryPromptRequest): Promise<MemoryPromptResponse> {\n return this.request<MemoryPromptResponse>(\"POST\", \"/v1/memory/prompt\", {\n body: request,\n });\n }\n\n // ==================== Edit Long-term Memory ====================\n\n /**\n * Edit a long-term memory by ID\n */\n async editLongTermMemory(\n memoryId: string,\n updates: Partial<MemoryRecord>\n ): Promise<MemoryRecord> {\n return this.request<MemoryRecord>(\n \"PATCH\",\n `/v1/long-term-memory/${encodeURIComponent(memoryId)}`,\n { body: updates }\n );\n }\n\n // ==================== Forget ====================\n\n /**\n * Run a forgetting pass with the provided policy\n */\n async forgetLongTermMemories(options: {\n policy: ForgetPolicy;\n namespace?: string;\n userId?: string;\n sessionId?: string;\n limit?: number;\n dryRun?: boolean;\n pinnedIds?: string[];\n }): Promise<ForgetResponse> {\n return this.request<ForgetResponse>(\"POST\", \"/v1/long-term-memory/forget\", {\n params: {\n namespace: options.namespace,\n user_id: options.userId,\n session_id: options.sessionId,\n limit: options.limit,\n dry_run: options.dryRun,\n },\n body: {\n policy: options.policy,\n pinned_ids: options.pinnedIds,\n },\n });\n }\n\n // ==================== Summary Views ====================\n\n /**\n * List all summary views\n */\n async listSummaryViews(): Promise<SummaryView[]> {\n return this.request<SummaryView[]>(\"GET\", \"/v1/summary-views\");\n }\n\n /**\n * Create a new summary view\n */\n async createSummaryView(request: CreateSummaryViewRequest): Promise<SummaryView> {\n return this.request<SummaryView>(\"POST\", \"/v1/summary-views\", {\n body: request,\n });\n }\n\n /**\n * Get a summary view by ID\n */\n async getSummaryView(viewId: string): Promise<SummaryView | null> {\n try {\n return await this.request<SummaryView>(\n \"GET\",\n `/v1/summary-views/${encodeURIComponent(viewId)}`\n );\n } catch (error) {\n if (error instanceof MemoryNotFoundError) {\n return null;\n }\n throw error;\n }\n }\n\n /**\n * Delete a summary view\n */\n async deleteSummaryView(viewId: string): Promise<AckResponse> {\n return this.request<AckResponse>(\n \"DELETE\",\n `/v1/summary-views/${encodeURIComponent(viewId)}`\n );\n }\n\n /**\n * Run a summary view partition\n */\n async runSummaryViewPartition(\n viewId: string,\n group: Record<string, string>\n ): Promise<SummaryViewPartitionResult> {\n return this.request<SummaryViewPartitionResult>(\n \"POST\",\n `/v1/summary-views/${encodeURIComponent(viewId)}/partitions/run`,\n { body: { group } }\n );\n }\n\n /**\n * List summary view partitions\n */\n async listSummaryViewPartitions(\n viewId: string,\n options: {\n namespace?: string;\n userId?: string;\n sessionId?: string;\n memoryType?: string;\n } = {}\n ): Promise<SummaryViewPartitionResult[]> {\n return this.request<SummaryViewPartitionResult[]>(\n \"GET\",\n `/v1/summary-views/${encodeURIComponent(viewId)}/partitions`,\n {\n params: {\n namespace: options.namespace,\n user_id: options.userId,\n session_id: options.sessionId,\n memory_type: options.memoryType,\n },\n }\n );\n }\n\n /**\n * Run a full summary view (async task)\n */\n async runSummaryView(\n viewId: string,\n options: { force?: boolean } = {}\n ): Promise<Task> {\n return this.request<Task>(\n \"POST\",\n `/v1/summary-views/${encodeURIComponent(viewId)}/run`,\n { body: options }\n );\n }\n\n // ==================== Tasks ====================\n\n /**\n * Get a task by ID\n */\n async getTask(taskId: string): Promise<Task | null> {\n try {\n return await this.request<Task>(\n \"GET\",\n `/v1/tasks/${encodeURIComponent(taskId)}`\n );\n } catch (error) {\n if (error instanceof MemoryNotFoundError) {\n return null;\n }\n throw error;\n }\n }\n}\n"]}
1
+ {"version":3,"sources":["../src/errors.ts","../src/filters.ts","../src/client.ts"],"names":[],"mappings":"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","file":"index.mjs","sourcesContent":["/**\n * Exception classes for the Agent Memory Client.\n */\n\n/**\n * Base error for all memory client errors.\n */\nexport class MemoryClientError extends Error {\n constructor(message: string) {\n super(message);\n this.name = \"MemoryClientError\";\n // Maintains proper stack trace for where our error was thrown (only in V8)\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, MemoryClientError);\n }\n }\n}\n\n/**\n * Raised when memory record or filter validation fails.\n */\nexport class MemoryValidationError extends MemoryClientError {\n constructor(message: string) {\n super(message);\n this.name = \"MemoryValidationError\";\n }\n}\n\n/**\n * Raised when a requested memory or session is not found.\n */\nexport class MemoryNotFoundError extends MemoryClientError {\n constructor(message: string) {\n super(message);\n this.name = \"MemoryNotFoundError\";\n }\n}\n\n/**\n * Raised when the memory server returns an error.\n */\nexport class MemoryServerError extends MemoryClientError {\n statusCode?: number;\n\n constructor(message: string, statusCode?: number) {\n super(message);\n this.name = \"MemoryServerError\";\n this.statusCode = statusCode;\n }\n}\n","/**\n * Filter classes for search operations.\n *\n * These filters allow for filtering memory search results.\n */\n\n/**\n * Filter by session ID\n */\nexport class SessionId {\n eq?: string;\n in_?: string[];\n not_eq?: string;\n not_in?: string[];\n ne?: string;\n\n constructor(options: {\n eq?: string;\n in_?: string[];\n not_eq?: string;\n not_in?: string[];\n ne?: string;\n } = {}) {\n this.eq = options.eq;\n this.in_ = options.in_;\n this.not_eq = options.not_eq;\n this.not_in = options.not_in;\n this.ne = options.ne;\n }\n\n toJSON(): Record<string, unknown> {\n const result: Record<string, unknown> = {};\n if (this.eq !== undefined) result.eq = this.eq;\n if (this.in_ !== undefined) result.in_ = this.in_;\n if (this.not_eq !== undefined) result.not_eq = this.not_eq;\n if (this.not_in !== undefined) result.not_in = this.not_in;\n if (this.ne !== undefined) result.ne = this.ne;\n return result;\n }\n}\n\n/**\n * Filter by namespace\n */\nexport class Namespace {\n eq?: string;\n in_?: string[];\n not_eq?: string;\n not_in?: string[];\n\n constructor(options: {\n eq?: string;\n in_?: string[];\n not_eq?: string;\n not_in?: string[];\n } = {}) {\n this.eq = options.eq;\n this.in_ = options.in_;\n this.not_eq = options.not_eq;\n this.not_in = options.not_in;\n }\n\n toJSON(): Record<string, unknown> {\n const result: Record<string, unknown> = {};\n if (this.eq !== undefined) result.eq = this.eq;\n if (this.in_ !== undefined) result.in_ = this.in_;\n if (this.not_eq !== undefined) result.not_eq = this.not_eq;\n if (this.not_in !== undefined) result.not_in = this.not_in;\n return result;\n }\n}\n\n/**\n * Filter by user ID\n */\nexport class UserId {\n eq?: string;\n in_?: string[];\n not_eq?: string;\n not_in?: string[];\n\n constructor(options: {\n eq?: string;\n in_?: string[];\n not_eq?: string;\n not_in?: string[];\n } = {}) {\n this.eq = options.eq;\n this.in_ = options.in_;\n this.not_eq = options.not_eq;\n this.not_in = options.not_in;\n }\n\n toJSON(): Record<string, unknown> {\n const result: Record<string, unknown> = {};\n if (this.eq !== undefined) result.eq = this.eq;\n if (this.in_ !== undefined) result.in_ = this.in_;\n if (this.not_eq !== undefined) result.not_eq = this.not_eq;\n if (this.not_in !== undefined) result.not_in = this.not_in;\n return result;\n }\n}\n\n/**\n * Filter by topics\n */\nexport class Topics {\n any?: string[];\n all?: string[];\n none?: string[];\n\n constructor(options: {\n any?: string[];\n all?: string[];\n none?: string[];\n } = {}) {\n this.any = options.any;\n this.all = options.all;\n this.none = options.none;\n }\n\n toJSON(): Record<string, unknown> {\n const result: Record<string, unknown> = {};\n if (this.any !== undefined) result.any = this.any;\n if (this.all !== undefined) result.all = this.all;\n if (this.none !== undefined) result.none = this.none;\n return result;\n }\n}\n\n/**\n * Filter by entities\n */\nexport class Entities {\n any?: string[];\n all?: string[];\n none?: string[];\n\n constructor(options: {\n any?: string[];\n all?: string[];\n none?: string[];\n } = {}) {\n this.any = options.any;\n this.all = options.all;\n this.none = options.none;\n }\n\n toJSON(): Record<string, unknown> {\n const result: Record<string, unknown> = {};\n if (this.any !== undefined) result.any = this.any;\n if (this.all !== undefined) result.all = this.all;\n if (this.none !== undefined) result.none = this.none;\n return result;\n }\n}\n\n/**\n * Filter by creation date\n */\nexport class CreatedAt {\n gte?: Date | string;\n lte?: Date | string;\n eq?: Date | string;\n\n constructor(options: {\n gte?: Date | string;\n lte?: Date | string;\n eq?: Date | string;\n } = {}) {\n this.gte = options.gte;\n this.lte = options.lte;\n this.eq = options.eq;\n }\n\n toJSON(): Record<string, unknown> {\n const result: Record<string, unknown> = {};\n if (this.gte !== undefined)\n result.gte = this.gte instanceof Date ? this.gte.toISOString() : this.gte;\n if (this.lte !== undefined)\n result.lte = this.lte instanceof Date ? this.lte.toISOString() : this.lte;\n if (this.eq !== undefined)\n result.eq = this.eq instanceof Date ? this.eq.toISOString() : this.eq;\n return result;\n }\n}\n\n/**\n * Filter by last accessed date\n */\nexport class LastAccessed {\n gte?: Date | string;\n lte?: Date | string;\n eq?: Date | string;\n\n constructor(options: {\n gte?: Date | string;\n lte?: Date | string;\n eq?: Date | string;\n } = {}) {\n this.gte = options.gte;\n this.lte = options.lte;\n this.eq = options.eq;\n }\n\n toJSON(): Record<string, unknown> {\n const result: Record<string, unknown> = {};\n if (this.gte !== undefined)\n result.gte = this.gte instanceof Date ? this.gte.toISOString() : this.gte;\n if (this.lte !== undefined)\n result.lte = this.lte instanceof Date ? this.lte.toISOString() : this.lte;\n if (this.eq !== undefined)\n result.eq = this.eq instanceof Date ? this.eq.toISOString() : this.eq;\n return result;\n }\n}\n\n/**\n * Filter by event date\n */\nexport class EventDate {\n gte?: Date | string;\n lte?: Date | string;\n eq?: Date | string;\n\n constructor(options: {\n gte?: Date | string;\n lte?: Date | string;\n eq?: Date | string;\n } = {}) {\n this.gte = options.gte;\n this.lte = options.lte;\n this.eq = options.eq;\n }\n\n toJSON(): Record<string, unknown> {\n const result: Record<string, unknown> = {};\n if (this.gte !== undefined)\n result.gte = this.gte instanceof Date ? this.gte.toISOString() : this.gte;\n if (this.lte !== undefined)\n result.lte = this.lte instanceof Date ? this.lte.toISOString() : this.lte;\n if (this.eq !== undefined)\n result.eq = this.eq instanceof Date ? this.eq.toISOString() : this.eq;\n return result;\n }\n}\n\n/**\n * Filter by memory type\n */\nexport class MemoryType {\n eq?: string;\n in_?: string[];\n not_eq?: string;\n not_in?: string[];\n\n constructor(options: {\n eq?: string;\n in_?: string[];\n not_eq?: string;\n not_in?: string[];\n } = {}) {\n this.eq = options.eq;\n this.in_ = options.in_;\n this.not_eq = options.not_eq;\n this.not_in = options.not_in;\n }\n\n toJSON(): Record<string, unknown> {\n const result: Record<string, unknown> = {};\n if (this.eq !== undefined) result.eq = this.eq;\n if (this.in_ !== undefined) result.in_ = this.in_;\n if (this.not_eq !== undefined) result.not_eq = this.not_eq;\n if (this.not_in !== undefined) result.not_in = this.not_in;\n return result;\n }\n}\n","/**\n * Agent Memory API Client\n *\n * A TypeScript/JavaScript client for the Agent Memory Server REST API.\n */\n\nimport {\n MemoryClientError,\n MemoryNotFoundError,\n MemoryServerError,\n MemoryValidationError,\n} from \"./errors\";\nimport {\n SessionId,\n Namespace,\n UserId,\n Topics,\n Entities,\n CreatedAt,\n LastAccessed,\n EventDate,\n MemoryType,\n} from \"./filters\";\nimport {\n AckResponse,\n CreateSummaryViewRequest,\n ForgetPolicy,\n ForgetResponse,\n HealthCheckResponse,\n MemoryPromptRequest,\n MemoryPromptResponse,\n MemoryRecord,\n MemoryRecordResults,\n MemoryStrategyConfig,\n ModelNameLiteral,\n RecencyConfig,\n SessionListResponse,\n SummaryView,\n SummaryViewPartitionResult,\n Task,\n WorkingMemory,\n WorkingMemoryResponse,\n} from \"./models\";\n\nconst VERSION = \"0.3.1\";\n\n/**\n * Configuration for the Memory API Client\n */\nexport interface MemoryClientConfig {\n /** Base URL of the memory server (e.g., 'http://localhost:8000') */\n baseUrl: string;\n /** Request timeout in milliseconds (default: 30000) */\n timeout?: number;\n /** Optional default namespace to use for operations */\n defaultNamespace?: string;\n /** Optional default model name for auto-summarization */\n defaultModelName?: ModelNameLiteral;\n /** Optional default context window limit for auto-summarization */\n defaultContextWindowMax?: number;\n /** Optional API key for authentication */\n apiKey?: string;\n /** Optional bearer token for authentication */\n bearerToken?: string;\n /** Custom fetch function (for testing or custom implementations) */\n fetch?: typeof fetch;\n}\n\n/**\n * Options for search operations\n */\nexport interface SearchOptions {\n text: string;\n sessionId?: SessionId | { eq?: string; in_?: string[]; not_eq?: string; not_in?: string[] };\n namespace?: Namespace | { eq?: string; in_?: string[]; not_eq?: string; not_in?: string[] };\n topics?: Topics | { any?: string[]; all?: string[]; none?: string[] };\n entities?: Entities | { any?: string[]; all?: string[]; none?: string[] };\n createdAt?: CreatedAt | { gte?: Date | string; lte?: Date | string; eq?: Date | string };\n lastAccessed?: LastAccessed | { gte?: Date | string; lte?: Date | string; eq?: Date | string };\n userId?: UserId | { eq?: string; in_?: string[]; not_eq?: string; not_in?: string[] };\n memoryType?: MemoryType | { eq?: string; in_?: string[]; not_eq?: string; not_in?: string[] };\n eventDate?: EventDate | { gte?: Date | string; lte?: Date | string; eq?: Date | string };\n distanceThreshold?: number;\n limit?: number;\n offset?: number;\n recency?: RecencyConfig;\n optimizeQuery?: boolean;\n}\n\n/**\n * Client for the Agent Memory Server REST API.\n *\n * Provides methods to interact with all server endpoints:\n * - Health check\n * - Session management (list, get, put, delete)\n * - Long-term memory (create, search, edit, delete)\n */\nexport class MemoryAPIClient {\n private readonly config: Required<\n Pick<MemoryClientConfig, \"baseUrl\" | \"timeout\">\n > &\n MemoryClientConfig;\n private readonly fetchFn: typeof fetch;\n\n constructor(config: MemoryClientConfig) {\n this.config = {\n timeout: 30000,\n ...config,\n baseUrl: config.baseUrl.replace(/\\/$/, \"\"), // Remove trailing slash\n };\n this.fetchFn = config.fetch ?? fetch;\n }\n\n /**\n * Get default headers for requests\n */\n private getHeaders(): Record<string, string> {\n const headers: Record<string, string> = {\n \"Content-Type\": \"application/json\",\n \"User-Agent\": `agent-memory-client-js/${VERSION}`,\n \"X-Client-Version\": VERSION,\n };\n\n if (this.config.apiKey) {\n headers[\"X-API-Key\"] = this.config.apiKey;\n }\n if (this.config.bearerToken) {\n headers[\"Authorization\"] = `Bearer ${this.config.bearerToken}`;\n }\n\n return headers;\n }\n\n /**\n * Make an HTTP request with error handling\n */\n private async request<T>(\n method: string,\n path: string,\n options: {\n body?: unknown;\n params?: Record<string, string | number | boolean | string[] | undefined>;\n } = {}\n ): Promise<T> {\n const url = new URL(path, this.config.baseUrl);\n\n // Add query parameters\n if (options.params) {\n for (const [key, value] of Object.entries(options.params)) {\n if (value !== undefined) {\n if (Array.isArray(value)) {\n // Handle array params by appending multiple values with the same key\n for (const item of value) {\n url.searchParams.append(key, String(item));\n }\n } else {\n url.searchParams.set(key, String(value));\n }\n }\n }\n }\n\n const controller = new AbortController();\n const timeoutId = setTimeout(() => controller.abort(), this.config.timeout);\n\n try {\n const response = await this.fetchFn(url.toString(), {\n method,\n headers: this.getHeaders(),\n body: options.body ? JSON.stringify(options.body) : undefined,\n signal: controller.signal,\n });\n\n clearTimeout(timeoutId);\n\n if (!response.ok) {\n return this.handleHttpError(response);\n }\n\n return (await response.json()) as T;\n } catch (error) {\n clearTimeout(timeoutId);\n if (error instanceof MemoryClientError) {\n throw error;\n }\n if (error instanceof Error && error.name === \"AbortError\") {\n throw new MemoryClientError(`Request timeout after ${this.config.timeout}ms`);\n }\n throw new MemoryClientError(`Request failed: ${String(error)}`);\n }\n }\n\n /**\n * Handle HTTP error responses\n */\n private async handleHttpError(response: Response): Promise<never> {\n let message: string;\n // Read body as text first to avoid \"Body has already been read\" errors\n const text = await response.text();\n try {\n const body = JSON.parse(text) as Record<string, unknown>;\n message =\n (body.detail as string) || (body.message as string) || JSON.stringify(body);\n } catch {\n message = text || `HTTP ${response.status}`;\n }\n\n if (response.status === 404) {\n throw new MemoryNotFoundError(message);\n }\n throw new MemoryServerError(message, response.status);\n }\n\n // ==================== Health ====================\n\n /**\n * Check server health\n */\n async healthCheck(): Promise<HealthCheckResponse> {\n return this.request<HealthCheckResponse>(\"GET\", \"/v1/health\");\n }\n\n // ==================== Working Memory ====================\n\n /**\n * List all session IDs\n */\n async listSessions(options: {\n namespace?: string;\n limit?: number;\n offset?: number;\n } = {}): Promise<SessionListResponse> {\n return this.request<SessionListResponse>(\"GET\", \"/v1/working-memory/\", {\n params: {\n namespace: options.namespace ?? this.config.defaultNamespace,\n limit: options.limit,\n offset: options.offset,\n },\n });\n }\n\n /**\n * Get working memory for a session\n */\n async getWorkingMemory(\n sessionId: string,\n options: {\n namespace?: string;\n modelName?: ModelNameLiteral;\n contextWindowMax?: number;\n } = {}\n ): Promise<WorkingMemoryResponse | null> {\n try {\n return await this.request<WorkingMemoryResponse>(\n \"GET\",\n `/v1/working-memory/${encodeURIComponent(sessionId)}`,\n {\n params: {\n namespace: options.namespace ?? this.config.defaultNamespace,\n model_name: options.modelName ?? this.config.defaultModelName,\n context_window_max: options.contextWindowMax ?? this.config.defaultContextWindowMax,\n },\n }\n );\n } catch (error) {\n if (error instanceof MemoryNotFoundError) {\n return null;\n }\n throw error;\n }\n }\n\n /**\n * Get or create working memory for a session\n */\n async getOrCreateWorkingMemory(\n sessionId: string,\n options: {\n namespace?: string;\n userId?: string;\n modelName?: ModelNameLiteral;\n contextWindowMax?: number;\n ttlSeconds?: number;\n longTermMemoryStrategy?: MemoryStrategyConfig;\n } = {}\n ): Promise<WorkingMemoryResponse> {\n const existing = await this.getWorkingMemory(sessionId, options);\n if (existing) {\n return existing;\n }\n\n // Create new working memory\n const workingMemory: WorkingMemory = {\n session_id: sessionId,\n namespace: options.namespace ?? this.config.defaultNamespace,\n user_id: options.userId,\n messages: [],\n memories: [],\n ttl_seconds: options.ttlSeconds,\n long_term_memory_strategy: options.longTermMemoryStrategy,\n };\n\n return this.putWorkingMemory(sessionId, workingMemory, options);\n }\n\n /**\n * Create or update working memory for a session\n */\n async putWorkingMemory(\n sessionId: string,\n workingMemory: Partial<WorkingMemory>,\n options: {\n namespace?: string;\n modelName?: ModelNameLiteral;\n contextWindowMax?: number;\n background?: boolean;\n } = {}\n ): Promise<WorkingMemoryResponse> {\n const body: WorkingMemory = {\n session_id: sessionId,\n ...workingMemory,\n namespace: workingMemory.namespace ?? options.namespace ?? this.config.defaultNamespace,\n };\n\n return this.request<WorkingMemoryResponse>(\n \"PUT\",\n `/v1/working-memory/${encodeURIComponent(sessionId)}`,\n {\n body,\n params: {\n model_name: options.modelName ?? this.config.defaultModelName,\n context_window_max: options.contextWindowMax ?? this.config.defaultContextWindowMax,\n background: options.background,\n },\n }\n );\n }\n\n /**\n * Delete working memory for a session\n */\n async deleteWorkingMemory(\n sessionId: string,\n options: { namespace?: string } = {}\n ): Promise<AckResponse> {\n return this.request<AckResponse>(\n \"DELETE\",\n `/v1/working-memory/${encodeURIComponent(sessionId)}`,\n {\n params: {\n namespace: options.namespace ?? this.config.defaultNamespace,\n },\n }\n );\n }\n\n // ==================== Long-term Memory ====================\n\n /**\n * Create long-term memory records\n */\n async createLongTermMemory(\n memories: MemoryRecord[],\n options: { namespace?: string } = {}\n ): Promise<AckResponse> {\n return this.request<AckResponse>(\"POST\", \"/v1/long-term-memory/\", {\n body: { memories },\n params: {\n namespace: options.namespace ?? this.config.defaultNamespace,\n },\n });\n }\n\n /**\n * Search long-term memory\n */\n async searchLongTermMemory(options: SearchOptions): Promise<MemoryRecordResults> {\n const body: Record<string, unknown> = {\n text: options.text,\n limit: options.limit,\n offset: options.offset,\n distance_threshold: options.distanceThreshold,\n };\n\n // Add filters\n if (options.sessionId) {\n body.session_id =\n options.sessionId instanceof SessionId\n ? options.sessionId.toJSON()\n : options.sessionId;\n }\n if (options.namespace) {\n body.namespace =\n options.namespace instanceof Namespace\n ? options.namespace.toJSON()\n : options.namespace;\n }\n if (options.topics) {\n body.topics =\n options.topics instanceof Topics ? options.topics.toJSON() : options.topics;\n }\n if (options.entities) {\n body.entities =\n options.entities instanceof Entities\n ? options.entities.toJSON()\n : options.entities;\n }\n if (options.createdAt) {\n body.created_at =\n options.createdAt instanceof CreatedAt\n ? options.createdAt.toJSON()\n : options.createdAt;\n }\n if (options.lastAccessed) {\n body.last_accessed =\n options.lastAccessed instanceof LastAccessed\n ? options.lastAccessed.toJSON()\n : options.lastAccessed;\n }\n if (options.userId) {\n body.user_id =\n options.userId instanceof UserId ? options.userId.toJSON() : options.userId;\n }\n if (options.memoryType) {\n body.memory_type =\n options.memoryType instanceof MemoryType\n ? options.memoryType.toJSON()\n : options.memoryType;\n }\n if (options.eventDate) {\n body.event_date =\n options.eventDate instanceof EventDate\n ? options.eventDate.toJSON()\n : options.eventDate;\n }\n\n // Add recency config\n if (options.recency) {\n body.recency_boost = options.recency.recency_boost;\n body.recency_semantic_weight = options.recency.semantic_weight;\n body.recency_recency_weight = options.recency.recency_weight;\n body.recency_freshness_weight = options.recency.freshness_weight;\n body.recency_novelty_weight = options.recency.novelty_weight;\n body.recency_half_life_last_access_days = options.recency.half_life_last_access_days;\n body.recency_half_life_created_days = options.recency.half_life_created_days;\n body.server_side_recency = options.recency.server_side_recency;\n }\n\n return this.request<MemoryRecordResults>(\"POST\", \"/v1/long-term-memory/search\", {\n body,\n });\n }\n\n /**\n * Get a long-term memory by ID\n */\n async getLongTermMemory(\n memoryId: string,\n options: { namespace?: string } = {}\n ): Promise<MemoryRecord | null> {\n try {\n return await this.request<MemoryRecord>(\n \"GET\",\n `/v1/long-term-memory/${encodeURIComponent(memoryId)}`,\n {\n params: {\n namespace: options.namespace ?? this.config.defaultNamespace,\n },\n }\n );\n } catch (error) {\n if (error instanceof MemoryNotFoundError) {\n return null;\n }\n throw error;\n }\n }\n\n /**\n * Delete long-term memories by IDs\n */\n async deleteLongTermMemories(\n memoryIds: string[],\n options: { namespace?: string } = {}\n ): Promise<AckResponse> {\n return this.request<AckResponse>(\"DELETE\", \"/v1/long-term-memory\", {\n params: {\n memory_ids: memoryIds,\n namespace: options.namespace ?? this.config.defaultNamespace,\n },\n });\n }\n\n // ==================== Memory Prompt ====================\n\n /**\n * Get memory-enhanced prompt\n */\n async memoryPrompt(request: MemoryPromptRequest): Promise<MemoryPromptResponse> {\n return this.request<MemoryPromptResponse>(\"POST\", \"/v1/memory/prompt\", {\n body: request,\n });\n }\n\n // ==================== Edit Long-term Memory ====================\n\n /**\n * Edit a long-term memory by ID\n */\n async editLongTermMemory(\n memoryId: string,\n updates: Partial<MemoryRecord>\n ): Promise<MemoryRecord> {\n return this.request<MemoryRecord>(\n \"PATCH\",\n `/v1/long-term-memory/${encodeURIComponent(memoryId)}`,\n { body: updates }\n );\n }\n\n // ==================== Forget ====================\n\n /**\n * Run a forgetting pass with the provided policy\n */\n async forgetLongTermMemories(options: {\n policy: ForgetPolicy;\n namespace?: string;\n userId?: string;\n sessionId?: string;\n limit?: number;\n dryRun?: boolean;\n pinnedIds?: string[];\n }): Promise<ForgetResponse> {\n return this.request<ForgetResponse>(\"POST\", \"/v1/long-term-memory/forget\", {\n params: {\n namespace: options.namespace,\n user_id: options.userId,\n session_id: options.sessionId,\n limit: options.limit,\n dry_run: options.dryRun,\n },\n body: {\n policy: options.policy,\n pinned_ids: options.pinnedIds,\n },\n });\n }\n\n // ==================== Summary Views ====================\n\n /**\n * List all summary views\n */\n async listSummaryViews(): Promise<SummaryView[]> {\n return this.request<SummaryView[]>(\"GET\", \"/v1/summary-views\");\n }\n\n /**\n * Create a new summary view\n */\n async createSummaryView(request: CreateSummaryViewRequest): Promise<SummaryView> {\n return this.request<SummaryView>(\"POST\", \"/v1/summary-views\", {\n body: request,\n });\n }\n\n /**\n * Get a summary view by ID\n */\n async getSummaryView(viewId: string): Promise<SummaryView | null> {\n try {\n return await this.request<SummaryView>(\n \"GET\",\n `/v1/summary-views/${encodeURIComponent(viewId)}`\n );\n } catch (error) {\n if (error instanceof MemoryNotFoundError) {\n return null;\n }\n throw error;\n }\n }\n\n /**\n * Delete a summary view\n */\n async deleteSummaryView(viewId: string): Promise<AckResponse> {\n return this.request<AckResponse>(\n \"DELETE\",\n `/v1/summary-views/${encodeURIComponent(viewId)}`\n );\n }\n\n /**\n * Run a summary view partition\n */\n async runSummaryViewPartition(\n viewId: string,\n group: Record<string, string>\n ): Promise<SummaryViewPartitionResult> {\n return this.request<SummaryViewPartitionResult>(\n \"POST\",\n `/v1/summary-views/${encodeURIComponent(viewId)}/partitions/run`,\n { body: { group } }\n );\n }\n\n /**\n * List summary view partitions\n */\n async listSummaryViewPartitions(\n viewId: string,\n options: {\n namespace?: string;\n userId?: string;\n sessionId?: string;\n memoryType?: string;\n } = {}\n ): Promise<SummaryViewPartitionResult[]> {\n return this.request<SummaryViewPartitionResult[]>(\n \"GET\",\n `/v1/summary-views/${encodeURIComponent(viewId)}/partitions`,\n {\n params: {\n namespace: options.namespace,\n user_id: options.userId,\n session_id: options.sessionId,\n memory_type: options.memoryType,\n },\n }\n );\n }\n\n /**\n * Run a full summary view (async task)\n */\n async runSummaryView(\n viewId: string,\n options: { force?: boolean } = {}\n ): Promise<Task> {\n return this.request<Task>(\n \"POST\",\n `/v1/summary-views/${encodeURIComponent(viewId)}/run`,\n { body: options }\n );\n }\n\n // ==================== Tasks ====================\n\n /**\n * Get a task by ID\n */\n async getTask(taskId: string): Promise<Task | null> {\n try {\n return await this.request<Task>(\n \"GET\",\n `/v1/tasks/${encodeURIComponent(taskId)}`\n );\n } catch (error) {\n if (error instanceof MemoryNotFoundError) {\n return null;\n }\n throw error;\n }\n }\n\n // ==================== Utility Methods ====================\n\n /**\n * Close the client and release any resources.\n * This is a no-op for the fetch-based client but provided for API consistency.\n */\n close(): void {\n // No-op for fetch-based client\n // Provided for API compatibility with other clients\n }\n\n /**\n * Validate a memory record before sending to the server.\n * @throws MemoryValidationError if validation fails\n */\n validateMemoryRecord(memory: MemoryRecord): void {\n if (!memory.text || !memory.text.trim()) {\n throw new MemoryValidationError(\"Memory text cannot be empty\");\n }\n\n const validMemoryTypes = [\"episodic\", \"semantic\", \"message\"];\n if (memory.memory_type && !validMemoryTypes.includes(memory.memory_type)) {\n throw new MemoryValidationError(`Invalid memory type: ${memory.memory_type}`);\n }\n\n if (memory.id && !this.isValidUlid(memory.id)) {\n throw new MemoryValidationError(`Invalid ID format: ${memory.id}`);\n }\n }\n\n /**\n * Validate search filter parameters before API call.\n * @throws MemoryValidationError if validation fails\n */\n validateSearchFilters(filters: {\n limit?: number;\n offset?: number;\n distanceThreshold?: number;\n }): void {\n if (filters.limit !== undefined && (typeof filters.limit !== \"number\" || filters.limit <= 0)) {\n throw new MemoryValidationError(\"Limit must be a positive integer\");\n }\n\n if (filters.offset !== undefined && (typeof filters.offset !== \"number\" || filters.offset < 0)) {\n throw new MemoryValidationError(\"Offset must be a non-negative integer\");\n }\n\n if (\n filters.distanceThreshold !== undefined &&\n (typeof filters.distanceThreshold !== \"number\" || filters.distanceThreshold < 0)\n ) {\n throw new MemoryValidationError(\"Distance threshold must be a non-negative number\");\n }\n }\n\n /**\n * Check if a string is a valid ULID.\n */\n private isValidUlid(id: string): boolean {\n // ULID: 26 characters, Crockford Base32\n const ulidRegex = /^[0-7][0-9A-HJKMNP-TV-Z]{25}$/i;\n return ulidRegex.test(id);\n }\n\n /**\n * Bulk create long-term memories with rate limiting.\n * Useful for importing large datasets.\n */\n async bulkCreateLongTermMemories(\n memoryBatches: MemoryRecord[][],\n options: {\n batchSize?: number;\n delayBetweenBatches?: number;\n namespace?: string;\n } = {}\n ): Promise<AckResponse[]> {\n const { batchSize = 50, delayBetweenBatches = 100, namespace } = options;\n const results: AckResponse[] = [];\n\n for (const batch of memoryBatches) {\n // Split large batches into smaller chunks\n for (let i = 0; i < batch.length; i += batchSize) {\n const chunk = batch.slice(i, i + batchSize);\n const response = await this.createLongTermMemory(chunk, { namespace });\n results.push(response);\n\n // Rate limiting delay\n if (delayBetweenBatches > 0) {\n await this.sleep(delayBetweenBatches);\n }\n }\n }\n\n return results;\n }\n\n /**\n * Auto-paginating search that yields all matching long-term memory results.\n * Automatically handles pagination to retrieve all results.\n */\n async *searchAllLongTermMemories(\n options: Omit<SearchOptions, \"limit\" | \"offset\"> & { batchSize?: number }\n ): AsyncGenerator<MemoryRecord, void, undefined> {\n const { batchSize = 50, ...searchOptions } = options;\n let offset = 0;\n\n while (true) {\n const results = await this.searchLongTermMemory({\n ...searchOptions,\n limit: batchSize,\n offset,\n });\n\n if (!results.memories || results.memories.length === 0) {\n break;\n }\n\n for (const memory of results.memories) {\n yield memory;\n }\n\n // If we got fewer results than batchSize, we've reached the end\n if (results.memories.length < batchSize) {\n break;\n }\n\n offset += batchSize;\n }\n }\n\n /**\n * Sleep for a specified number of milliseconds.\n */\n private sleep(ms: number): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, ms));\n }\n}\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "agent-memory-client",
3
- "version": "0.2.0",
3
+ "version": "0.3.1",
4
4
  "description": "JavaScript/TypeScript client for the Agent Memory Server REST API",
5
5
  "main": "dist/index.js",
6
6
  "module": "dist/index.mjs",
@@ -53,15 +53,15 @@
53
53
  "node": ">=20.0.0"
54
54
  },
55
55
  "devDependencies": {
56
- "@types/node": "^20.0.0",
57
- "@vitest/coverage-v8": "^1.6.1",
58
- "eslint": "^8.57.0",
56
+ "@types/node": "^25.1.0",
57
+ "@vitest/coverage-v8": "^4.0.18",
58
+ "eslint": "^9.39.2",
59
59
  "prettier": "^3.2.0",
60
60
  "tsup": "^8.0.0",
61
61
  "typescript": "^5.4.0",
62
- "vitest": "^1.4.0"
62
+ "vitest": "^4.0.18"
63
63
  },
64
64
  "dependencies": {
65
- "ulid": "^2.3.0"
65
+ "ulid": "^3.0.2"
66
66
  }
67
67
  }