@cloudbase/agent-adapter-langchain 0.0.2 → 0.0.3

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/CHANGELOG.md CHANGED
@@ -1,5 +1,79 @@
1
1
  # @cloudbase/agent-adapter-langchain
2
2
 
3
+ ## 0.0.11-alpha.3
4
+
5
+ ### Patch Changes
6
+
7
+ - alpha release 0.0.10-alpha.2
8
+ - Update all public packages to version 0.0.10-alpha.2
9
+ - Trigger automated alpha release workflow
10
+ - Includes latest features and improvements
11
+
12
+ - Updated dependencies
13
+ - @cloudbase/agent-tools@0.0.11-alpha.3
14
+ - @cloudbase/agent-agents@0.0.11-alpha.3
15
+ - @cloudbase/agent-adapter-langgraph@0.0.11-alpha.3
16
+
17
+ ## 0.0.11-alpha.2
18
+
19
+ ### Patch Changes
20
+
21
+ - alpha release 0.0.10-alpha.2
22
+ - Update all public packages to version 0.0.10-alpha.2
23
+ - Trigger automated alpha release workflow
24
+ - Includes latest features and improvements
25
+
26
+ - Updated dependencies
27
+ - @cloudbase/agent-tools@0.0.11-alpha.2
28
+ - @cloudbase/agent-agents@0.0.11-alpha.2
29
+ - @cloudbase/agent-adapter-langgraph@0.0.11-alpha.2
30
+
31
+ ## 0.0.11-alpha.1
32
+
33
+ ### Patch Changes
34
+
35
+ - alpha release 0.0.10-alpha.2
36
+ - Update all public packages to version 0.0.10-alpha.2
37
+ - Trigger automated alpha release workflow
38
+ - Includes latest features and improvements
39
+
40
+ - Updated dependencies
41
+ - @cloudbase/agent-tools@0.0.11-alpha.1
42
+ - @cloudbase/agent-agents@0.0.11-alpha.1
43
+ - @cloudbase/agent-adapter-langgraph@0.0.11-alpha.1
44
+
45
+ ## 0.0.11-alpha.0
46
+
47
+ ### Patch Changes
48
+
49
+ - 97b2740: alpha release 0.0.10-alpha.2
50
+ - Update all public packages to version 0.0.10-alpha.2
51
+ - Trigger automated alpha release workflow
52
+ - Includes latest features and improvements
53
+
54
+ - fd4c62a: alpha release 0.0.10-alpha.2
55
+ - Update all public packages to version 0.0.10-alpha.2
56
+ - Trigger automated alpha release workflow
57
+ - Includes latest features and improvements
58
+
59
+ - da3388c: alpha release 0.0.10-alpha.2
60
+ - Update all public packages to version 0.0.10-alpha.2
61
+ - Trigger automated alpha release workflow
62
+ - Includes latest features and improvements
63
+
64
+ - alpha release 0.0.10-alpha.2
65
+ - Update all public packages to version 0.0.10-alpha.2
66
+ - Trigger automated alpha release workflow
67
+ - Includes latest features and improvements
68
+
69
+ - Updated dependencies [97b2740]
70
+ - Updated dependencies [fd4c62a]
71
+ - Updated dependencies [da3388c]
72
+ - Updated dependencies
73
+ - @cloudbase/agent-tools@0.0.11-alpha.0
74
+ - @cloudbase/agent-agents@0.0.11-alpha.0
75
+ - @cloudbase/agent-adapter-langgraph@0.0.11-alpha.0
76
+
3
77
  ## 0.0.10
4
78
 
5
79
  ### Patch Changes
package/dist/index.d.mts CHANGED
@@ -148,9 +148,9 @@ declare class LangchainAgent extends LanggraphAgent {
148
148
  agent: ReturnType<typeof createAgent>;
149
149
  });
150
150
  }
151
- declare function agKitClientTools(): langchain.AgentMiddleware<z.ZodObject<{
152
- agKit: z.ZodObject<{
153
- actions: z.ZodArray<z.ZodObject<{
151
+ declare function clientTools(): langchain.AgentMiddleware<z.ZodObject<{
152
+ client: z.ZodObject<{
153
+ tools: z.ZodArray<z.ZodObject<{
154
154
  name: z.ZodString;
155
155
  description: z.ZodString;
156
156
  schema: z.ZodAny;
@@ -164,29 +164,29 @@ declare function agKitClientTools(): langchain.AgentMiddleware<z.ZodObject<{
164
164
  schema?: any;
165
165
  }>, "many">;
166
166
  }, "strip", z.ZodTypeAny, {
167
- actions: {
167
+ tools: {
168
168
  name: string;
169
169
  description: string;
170
170
  schema?: any;
171
171
  }[];
172
172
  }, {
173
- actions: {
173
+ tools: {
174
174
  name: string;
175
175
  description: string;
176
176
  schema?: any;
177
177
  }[];
178
178
  }>;
179
179
  }, "strip", z.ZodTypeAny, {
180
- agKit: {
181
- actions: {
180
+ client: {
181
+ tools: {
182
182
  name: string;
183
183
  description: string;
184
184
  schema?: any;
185
185
  }[];
186
186
  };
187
187
  }, {
188
- agKit: {
189
- actions: {
188
+ client: {
189
+ tools: {
190
190
  name: string;
191
191
  description: string;
192
192
  schema?: any;
@@ -216,4 +216,4 @@ declare class TDAIChatHistory extends BaseListChatMessageHistory {
216
216
  clear(): Promise<void>;
217
217
  }
218
218
 
219
- export { LangchainAgent, TDAIChatHistory, TDAIStore, type TDAIStoreInput, agKitClientTools, convert2LangChain, convertLangChain2AGKit };
219
+ export { LangchainAgent, TDAIChatHistory, TDAIStore, type TDAIStoreInput, clientTools, convert2LangChain, convertLangChain2AGKit };
package/dist/index.d.ts CHANGED
@@ -148,9 +148,9 @@ declare class LangchainAgent extends LanggraphAgent {
148
148
  agent: ReturnType<typeof createAgent>;
149
149
  });
150
150
  }
151
- declare function agKitClientTools(): langchain.AgentMiddleware<z.ZodObject<{
152
- agKit: z.ZodObject<{
153
- actions: z.ZodArray<z.ZodObject<{
151
+ declare function clientTools(): langchain.AgentMiddleware<z.ZodObject<{
152
+ client: z.ZodObject<{
153
+ tools: z.ZodArray<z.ZodObject<{
154
154
  name: z.ZodString;
155
155
  description: z.ZodString;
156
156
  schema: z.ZodAny;
@@ -164,29 +164,29 @@ declare function agKitClientTools(): langchain.AgentMiddleware<z.ZodObject<{
164
164
  schema?: any;
165
165
  }>, "many">;
166
166
  }, "strip", z.ZodTypeAny, {
167
- actions: {
167
+ tools: {
168
168
  name: string;
169
169
  description: string;
170
170
  schema?: any;
171
171
  }[];
172
172
  }, {
173
- actions: {
173
+ tools: {
174
174
  name: string;
175
175
  description: string;
176
176
  schema?: any;
177
177
  }[];
178
178
  }>;
179
179
  }, "strip", z.ZodTypeAny, {
180
- agKit: {
181
- actions: {
180
+ client: {
181
+ tools: {
182
182
  name: string;
183
183
  description: string;
184
184
  schema?: any;
185
185
  }[];
186
186
  };
187
187
  }, {
188
- agKit: {
189
- actions: {
188
+ client: {
189
+ tools: {
190
190
  name: string;
191
191
  description: string;
192
192
  schema?: any;
@@ -216,4 +216,4 @@ declare class TDAIChatHistory extends BaseListChatMessageHistory {
216
216
  clear(): Promise<void>;
217
217
  }
218
218
 
219
- export { LangchainAgent, TDAIChatHistory, TDAIStore, type TDAIStoreInput, agKitClientTools, convert2LangChain, convertLangChain2AGKit };
219
+ export { LangchainAgent, TDAIChatHistory, TDAIStore, type TDAIStoreInput, clientTools, convert2LangChain, convertLangChain2AGKit };
package/dist/index.js CHANGED
@@ -23,7 +23,7 @@ __export(index_exports, {
23
23
  LangchainAgent: () => LangchainAgent,
24
24
  TDAIChatHistory: () => TDAIChatHistory,
25
25
  TDAIStore: () => TDAIStore,
26
- agKitClientTools: () => agKitClientTools,
26
+ clientTools: () => clientTools,
27
27
  convert2LangChain: () => convert2LangChain,
28
28
  convertLangChain2AGKit: () => convertLangChain2AGKit
29
29
  });
@@ -325,12 +325,12 @@ var LangchainAgent = class extends import_agent_adapter_langgraph.LanggraphAgent
325
325
  super({ ...config, compiledWorkflow: config.agent });
326
326
  }
327
327
  };
328
- function agKitClientTools() {
328
+ function clientTools() {
329
329
  return (0, import_langchain.createMiddleware)({
330
- name: "AGKitClientTools",
330
+ name: "ClientTools",
331
331
  stateSchema: import_v3.z.object({
332
- agKit: import_v3.z.object({
333
- actions: import_v3.z.array(
332
+ client: import_v3.z.object({
333
+ tools: import_v3.z.array(
334
334
  import_v3.z.object({
335
335
  name: import_v3.z.string(),
336
336
  description: import_v3.z.string(),
@@ -341,7 +341,7 @@ function agKitClientTools() {
341
341
  }),
342
342
  beforeModel: (state) => state,
343
343
  wrapModelCall: (request, hanlder) => {
344
- const clientTools = (request.state.agKit.actions || []).map((tool) => {
344
+ const clientTools2 = (request.state.client.tools || []).map((tool) => {
345
345
  const { name, description, schema } = tool;
346
346
  return {
347
347
  name,
@@ -351,7 +351,7 @@ function agKitClientTools() {
351
351
  });
352
352
  return hanlder({
353
353
  ...request,
354
- tools: [...request.tools || [], ...clientTools]
354
+ tools: [...request.tools || [], ...clientTools2]
355
355
  });
356
356
  }
357
357
  });
@@ -425,7 +425,7 @@ var TDAIChatHistory = class extends import_chat_history.BaseListChatMessageHisto
425
425
  LangchainAgent,
426
426
  TDAIChatHistory,
427
427
  TDAIStore,
428
- agKitClientTools,
428
+ clientTools,
429
429
  convert2LangChain,
430
430
  convertLangChain2AGKit
431
431
  });
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts","../src/store/tdai.ts","../src/tool.ts","../src/agent.ts","../src/chat_history.ts"],"sourcesContent":["export * from \"./store/index\";\nexport * from \"./tool\";\nexport * from \"./agent\";\nexport { TDAIChatHistory } from \"./chat_history\";\n\n","import { MemoryClient } from \"@cloudbase/agent-agents\";\nimport { BaseStore } from \"@langchain/core/stores\";\n\n/**\n * Configuration options for TDAIStore\n */\nexport interface TDAIStoreInput {\n /**\n * The TDAI Memory Client instance\n */\n client: MemoryClient;\n\n /**\n * The amount of keys to retrieve per batch when yielding keys.\n * @default 1000\n */\n yieldKeysScanBatchSize?: number;\n\n /**\n * The namespace to use for the keys in the database.\n */\n namespace?: string;\n\n /**\n * Default session ID for storing records\n */\n defaultSessionId?: string;\n\n /**\n * Default strategy for storing records\n */\n defaultStrategy?: string;\n\n /**\n * TTL for records in seconds\n */\n ttlSeconds?: number;\n}\n\n/**\n * TDAI implementation of the BaseStore for key-value caching.\n * Uses TDAI Memory Client for persistent storage.\n *\n * @example\n * ```typescript\n * const client = new MemoryClient({\n * endpoint: \"https://memory.tdai.tencentyun.com\",\n * apiKey: \"your-api-key\",\n * memoryId: \"your-memory-id\",\n * });\n *\n * const store = new TDAIStore({\n * client,\n * namespace: \"cache\",\n * });\n *\n * const encoder = new TextEncoder();\n * await store.mset([\n * [\"key1\", encoder.encode(\"value1\")],\n * [\"key2\", encoder.encode(\"value2\")],\n * ]);\n *\n * const values = await store.mget([\"key1\", \"key2\"]);\n * ```\n */\nexport class TDAIStore extends BaseStore<string, Uint8Array> {\n lc_namespace = [\"langchain\", \"storage\", \"tdai\"];\n\n protected client: MemoryClient;\n protected namespace?: string;\n protected yieldKeysScanBatchSize = 1000;\n protected defaultSessionId: string;\n protected defaultStrategy: string;\n protected ttlSeconds?: number;\n private sessionCache?: string;\n\n constructor(fields: TDAIStoreInput) {\n super();\n this.client = fields.client;\n this.namespace = fields.namespace;\n this.yieldKeysScanBatchSize =\n fields.yieldKeysScanBatchSize ?? this.yieldKeysScanBatchSize;\n this.defaultSessionId =\n fields.defaultSessionId ?? \"langchain_store_session\";\n this.defaultStrategy = fields.defaultStrategy ?? \"kv_cache\";\n this.ttlSeconds = fields.ttlSeconds;\n }\n\n /**\n * Get prefixed key with namespace\n */\n private _getPrefixedKey(key: string): string {\n if (this.namespace) {\n const delimiter = \"/\";\n return `${this.namespace}${delimiter}${key}`;\n }\n return key;\n }\n\n /**\n * Remove prefix from key\n */\n private _getDeprefixedKey(key: string): string {\n if (this.namespace) {\n const delimiter = \"/\";\n return key.slice(this.namespace.length + delimiter.length);\n }\n return key;\n }\n\n /**\n * Get or create session for the store\n */\n private async _getSession(): Promise<string> {\n if (this.sessionCache) {\n return this.sessionCache;\n }\n\n try {\n // Try to find existing session\n const sessions = await this.client.querySessions({\n limit: 1,\n });\n\n if (sessions.sessions && sessions.sessions.length > 0) {\n this.sessionCache = sessions.sessions[0].sessionId;\n } else {\n // Create new session\n const result = await this.client.createSession({\n name: `langchain_store_${this.namespace || \"default\"}`,\n });\n this.sessionCache = result.sessionId;\n }\n\n return this.sessionCache!;\n } catch (error) {\n // Fallback to default session\n return this.defaultSessionId;\n }\n }\n\n /**\n * Create record content for storage\n */\n private _createRecordContent(key: string, value: Uint8Array): string {\n const decoder = new TextDecoder();\n const content = {\n key: this._getPrefixedKey(key),\n value: decoder.decode(value),\n timestamp: Date.now(),\n ttl: this.ttlSeconds,\n };\n return JSON.stringify(content);\n }\n\n /**\n * Parse record content from storage\n */\n private _parseRecordContent(\n content: string\n ): {\n key: string;\n value: Uint8Array;\n timestamp: number;\n ttl?: number;\n } | null {\n try {\n const data = JSON.parse(content);\n const encoder = new TextEncoder();\n\n // Check TTL if present\n if (data.ttl && data.timestamp) {\n const now = Date.now();\n if (now > data.timestamp + data.ttl * 1000) {\n return null; // Expired\n }\n }\n\n return {\n key: data.key,\n value: encoder.encode(data.value),\n timestamp: data.timestamp,\n ttl: data.ttl,\n };\n } catch (error) {\n return null;\n }\n }\n\n /**\n * Gets multiple keys from the TDAI store.\n * @param keys Array of keys to be retrieved.\n * @returns An array of retrieved values.\n */\n async mget(keys: string[]): Promise<(Uint8Array | undefined)[]> {\n if (keys.length === 0) {\n return [];\n }\n\n try {\n const sessionId = await this._getSession();\n const results: (Uint8Array | undefined)[] = new Array(keys.length);\n\n // Search for each key individually due to TDAI API limitations\n for (let i = 0; i < keys.length; i++) {\n const prefixedKey = this._getPrefixedKey(keys[i]);\n\n try {\n const searchResult = await this.client.searchRecords({\n content: prefixedKey,\n sessionId,\n strategies: [this.defaultStrategy],\n limit: 1,\n });\n\n if (searchResult.records && searchResult.records.length > 0) {\n const record = searchResult.records[0];\n const parsed = this._parseRecordContent(record.record_content);\n\n if (parsed && parsed.key === prefixedKey) {\n results[i] = parsed.value;\n } else {\n results[i] = undefined;\n }\n } else {\n results[i] = undefined;\n }\n } catch (error) {\n results[i] = undefined;\n }\n }\n\n return results;\n } catch (error) {\n // Return array of undefined values on error\n return new Array(keys.length).fill(undefined);\n }\n }\n\n /**\n * Sets multiple keys in the TDAI store.\n * @param keyValuePairs Array of key-value pairs to be set.\n * @returns Promise that resolves when all keys have been set.\n */\n async mset(keyValuePairs: [string, Uint8Array][]): Promise<void> {\n if (keyValuePairs.length === 0) {\n return;\n }\n\n try {\n const sessionId = await this._getSession();\n\n // Set each key-value pair\n for (const [key, value] of keyValuePairs) {\n const content = this._createRecordContent(key, value);\n\n try {\n await this.client.appendRecord({\n sessionId,\n content,\n strategy: this.defaultStrategy,\n });\n } catch (error) {\n console.warn(`Failed to set key ${key}:`, error);\n }\n }\n } catch (error) {\n throw new Error(`Failed to set keys: ${error}`);\n }\n }\n\n /**\n * Deletes multiple keys from the TDAI store.\n * @param keys Array of keys to be deleted.\n * @returns Promise that resolves when all keys have been deleted.\n */\n async mdelete(keys: string[]): Promise<void> {\n if (keys.length === 0) {\n return;\n }\n\n try {\n const sessionId = await this._getSession();\n\n // Delete each key individually\n for (const key of keys) {\n const prefixedKey = this._getPrefixedKey(key);\n\n try {\n // First find the record\n const searchResult = await this.client.searchRecords({\n content: prefixedKey,\n sessionId,\n strategies: [this.defaultStrategy],\n limit: 1,\n });\n\n if (searchResult.records && searchResult.records.length > 0) {\n const record = searchResult.records[0];\n await this.client.deleteRecord({\n sessionId,\n recordId: record.record_id,\n });\n }\n } catch (error) {\n console.warn(`Failed to delete key ${key}:`, error);\n }\n }\n } catch (error) {\n throw new Error(`Failed to delete keys: ${error}`);\n }\n }\n\n /**\n * Yields keys from the TDAI store.\n * @param prefix Optional prefix to filter the keys.\n * @returns An AsyncGenerator that yields keys from the TDAI store.\n */\n async *yieldKeys(prefix?: string): AsyncGenerator<string> {\n try {\n const sessionId = await this._getSession();\n let offset = 0;\n let hasMore = true;\n\n while (hasMore) {\n try {\n const result = await this.client.queryRecords({\n sessionId,\n strategies: [this.defaultStrategy],\n limit: this.yieldKeysScanBatchSize,\n offset,\n });\n\n if (!result.records || result.records.length === 0) {\n hasMore = false;\n break;\n }\n\n for (const record of result.records) {\n const parsed = this._parseRecordContent(record.record_content);\n if (parsed) {\n const deprefixedKey = this._getDeprefixedKey(parsed.key);\n\n if (!prefix || deprefixedKey.startsWith(prefix)) {\n yield deprefixedKey;\n }\n }\n }\n\n offset += result.records.length;\n\n // If we got fewer records than requested, we've reached the end\n if (result.records.length < this.yieldKeysScanBatchSize) {\n hasMore = false;\n }\n } catch (error) {\n console.warn(`Error yielding keys at offset ${offset}:`, error);\n hasMore = false;\n }\n }\n } catch (error) {\n console.warn(\"Error yielding keys:\", error);\n }\n }\n\n /**\n * Close the TDAI client connection\n */\n close(): void {\n this.client.close();\n }\n}\n\n","/**\n * AG-Kit BaseTool to LangChain Tool Converter and Vice Versa\n */\nimport { tool as langChainTool, StructuredTool } from \"@langchain/core/tools\";\nimport {\n BaseTool,\n tool as agKitTool,\n ToolResult,\n ToolExecutionContext,\n} from \"@cloudbase/agent-tools\";\nimport { z } from \"zod/v4\";\n\n/**\n * Convert AG-Kit BaseTool to LangChain DynamicStructuredTool\n *\n * @param agkitTool - AG-Kit BaseTool instance\n * @param implFunc - Optional custom implementation function\n * @returns LangChain DynamicStructuredTool instance\n */\nexport function convert2LangChain(\n agkitTool: BaseTool,\n implFunc?: (tool: BaseTool) => Function\n) {\n const func =\n implFunc ||\n (async (input: any) => {\n const result = await agkitTool.invoke(input);\n return result;\n });\n\n return langChainTool(func as any, {\n name: agkitTool.name,\n description: agkitTool.description || agkitTool.name,\n schema: (agkitTool as any).schema || z.object({}),\n });\n}\n\n/**\n * Convert LangChain Tool to AG-Kit DynamicTool\n *\n * @param langchainTool - LangChain tool instance (DynamicStructuredTool or StructuredTool)\n * @returns AG-Kit DynamicTool instance\n */\nexport function convertLangChain2AGKit(langchainTool: StructuredTool) {\n const func: any = async (\n input: Record<string, any>,\n context?: ToolExecutionContext\n ) => {\n try {\n // Call the LangChain tool\n const result = await langchainTool.invoke(input);\n\n // Return successful result\n return new ToolResult({\n success: true,\n data: result,\n });\n } catch (error) {\n // Handle errors and return ToolResult with error\n return new ToolResult({\n success: false,\n error: error instanceof Error ? error.message : String(error),\n error_type: \"execution\",\n });\n }\n };\n\n return agKitTool(func, {\n name: langchainTool.name,\n description: langchainTool.description || langchainTool.name,\n schema: (langchainTool as any).schema || (z.object({}) as z.ZodObject<any>),\n });\n}\n\n","import { z } from \"zod/v3\";\nimport { AgentConfig } from \"@cloudbase/agent-agents/abstract\";\nimport { LanggraphAgent } from \"@cloudbase/agent-adapter-langgraph\";\nimport { createAgent, createMiddleware, DynamicTool } from \"langchain\";\n\nexport class LangchainAgent extends LanggraphAgent {\n constructor(\n config: AgentConfig & {\n agent: ReturnType<typeof createAgent>;\n }\n ) {\n super({ ...config, compiledWorkflow: config.agent });\n }\n}\n\nexport function agKitClientTools() {\n return createMiddleware({\n name: \"AGKitClientTools\",\n stateSchema: z.object({\n agKit: z.object({\n actions: z.array(\n z.object({\n name: z.string(),\n description: z.string(),\n schema: z.any(),\n })\n ),\n }),\n }),\n beforeModel: (state) => state,\n wrapModelCall: (request, hanlder) => {\n const clientTools = (\n (request.state.agKit.actions || []) as DynamicTool[]\n ).map((tool) => {\n const { name, description, schema } = tool;\n return {\n name,\n description,\n schema,\n };\n });\n\n return hanlder({\n ...request,\n tools: [...(request.tools || []), ...clientTools],\n });\n },\n });\n}\n\n","import { BaseListChatMessageHistory } from \"@langchain/core/chat_history\";\nimport {\n BaseMessage,\n mapStoredMessagesToChatMessages,\n mapChatMessagesToStoredMessages,\n StoredMessage,\n} from \"@langchain/core/messages\";\nimport { IMemoryClientOptions, MemoryClient } from \"@cloudbase/agent-agents\";\n\nexport class TDAIChatHistory extends BaseListChatMessageHistory {\n lc_namespace = [\"langchain\", \"stores\", \"message\", \"tdai\"];\n\n public client: MemoryClient;\n\n private sessionId: string;\n\n constructor(options: IMemoryClientOptions & { sessionId: string }) {\n super();\n const { sessionId, ...clientOptions } = options;\n this.client = new MemoryClient({\n ...clientOptions,\n });\n this.sessionId = options.sessionId;\n }\n\n async getMessages(): Promise<BaseMessage[]> {\n const { events = [] } = await this.client.queryEvents({\n sessionId: this.sessionId,\n });\n\n return mapStoredMessagesToChatMessages(\n events.map((event) => {\n return {\n type: event.type,\n data: event.data,\n };\n })\n );\n }\n\n /**\n * Method to add a new message to the Firestore collection. The message is\n * passed as a BaseMessage object.\n * @param message The message to be added as a BaseMessage object.\n */\n public async addMessage(message: BaseMessage) {\n const messages = mapChatMessagesToStoredMessages([message]);\n await this.appendMessage(messages[0]);\n }\n\n private async appendMessage(message: StoredMessage): Promise<void> {\n await this.client.appendEvent({\n sessionId: this.sessionId,\n messages: message,\n });\n }\n\n /**\n * Method to delete all messages from the Firestore collection associated\n * with the current session.\n */\n public async clear(): Promise<void> {\n const eventIds = await this.client\n .queryEvents({\n sessionId: this.sessionId,\n })\n .then(({ events = [] }) => events.map((event: any) => event.event_id));\n\n await Promise.all(\n eventIds.map((id: string) => {\n return this.client.deleteEvent({\n sessionId: this.sessionId,\n eventId: id,\n });\n })\n );\n\n await this.client.deleteSession({\n sessionId: this.sessionId,\n });\n }\n}\n\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACCA,oBAA0B;AAgEnB,IAAM,YAAN,cAAwB,wBAA8B;AAAA,EAW3D,YAAY,QAAwB;AAClC,UAAM;AAXR,wBAAe,CAAC,aAAa,WAAW,MAAM;AAI9C,SAAU,yBAAyB;AAQjC,SAAK,SAAS,OAAO;AACrB,SAAK,YAAY,OAAO;AACxB,SAAK,yBACH,OAAO,0BAA0B,KAAK;AACxC,SAAK,mBACH,OAAO,oBAAoB;AAC7B,SAAK,kBAAkB,OAAO,mBAAmB;AACjD,SAAK,aAAa,OAAO;AAAA,EAC3B;AAAA;AAAA;AAAA;AAAA,EAKQ,gBAAgB,KAAqB;AAC3C,QAAI,KAAK,WAAW;AAClB,YAAM,YAAY;AAClB,aAAO,GAAG,KAAK,SAAS,GAAG,SAAS,GAAG,GAAG;AAAA,IAC5C;AACA,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKQ,kBAAkB,KAAqB;AAC7C,QAAI,KAAK,WAAW;AAClB,YAAM,YAAY;AAClB,aAAO,IAAI,MAAM,KAAK,UAAU,SAAS,UAAU,MAAM;AAAA,IAC3D;AACA,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKA,MAAc,cAA+B;AAC3C,QAAI,KAAK,cAAc;AACrB,aAAO,KAAK;AAAA,IACd;AAEA,QAAI;AAEF,YAAM,WAAW,MAAM,KAAK,OAAO,cAAc;AAAA,QAC/C,OAAO;AAAA,MACT,CAAC;AAED,UAAI,SAAS,YAAY,SAAS,SAAS,SAAS,GAAG;AACrD,aAAK,eAAe,SAAS,SAAS,CAAC,EAAE;AAAA,MAC3C,OAAO;AAEL,cAAM,SAAS,MAAM,KAAK,OAAO,cAAc;AAAA,UAC7C,MAAM,mBAAmB,KAAK,aAAa,SAAS;AAAA,QACtD,CAAC;AACD,aAAK,eAAe,OAAO;AAAA,MAC7B;AAEA,aAAO,KAAK;AAAA,IACd,SAAS,OAAO;AAEd,aAAO,KAAK;AAAA,IACd;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKQ,qBAAqB,KAAa,OAA2B;AACnE,UAAM,UAAU,IAAI,YAAY;AAChC,UAAM,UAAU;AAAA,MACd,KAAK,KAAK,gBAAgB,GAAG;AAAA,MAC7B,OAAO,QAAQ,OAAO,KAAK;AAAA,MAC3B,WAAW,KAAK,IAAI;AAAA,MACpB,KAAK,KAAK;AAAA,IACZ;AACA,WAAO,KAAK,UAAU,OAAO;AAAA,EAC/B;AAAA;AAAA;AAAA;AAAA,EAKQ,oBACN,SAMO;AACP,QAAI;AACF,YAAM,OAAO,KAAK,MAAM,OAAO;AAC/B,YAAM,UAAU,IAAI,YAAY;AAGhC,UAAI,KAAK,OAAO,KAAK,WAAW;AAC9B,cAAM,MAAM,KAAK,IAAI;AACrB,YAAI,MAAM,KAAK,YAAY,KAAK,MAAM,KAAM;AAC1C,iBAAO;AAAA,QACT;AAAA,MACF;AAEA,aAAO;AAAA,QACL,KAAK,KAAK;AAAA,QACV,OAAO,QAAQ,OAAO,KAAK,KAAK;AAAA,QAChC,WAAW,KAAK;AAAA,QAChB,KAAK,KAAK;AAAA,MACZ;AAAA,IACF,SAAS,OAAO;AACd,aAAO;AAAA,IACT;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAM,KAAK,MAAqD;AAC9D,QAAI,KAAK,WAAW,GAAG;AACrB,aAAO,CAAC;AAAA,IACV;AAEA,QAAI;AACF,YAAM,YAAY,MAAM,KAAK,YAAY;AACzC,YAAM,UAAsC,IAAI,MAAM,KAAK,MAAM;AAGjE,eAAS,IAAI,GAAG,IAAI,KAAK,QAAQ,KAAK;AACpC,cAAM,cAAc,KAAK,gBAAgB,KAAK,CAAC,CAAC;AAEhD,YAAI;AACF,gBAAM,eAAe,MAAM,KAAK,OAAO,cAAc;AAAA,YACnD,SAAS;AAAA,YACT;AAAA,YACA,YAAY,CAAC,KAAK,eAAe;AAAA,YACjC,OAAO;AAAA,UACT,CAAC;AAED,cAAI,aAAa,WAAW,aAAa,QAAQ,SAAS,GAAG;AAC3D,kBAAM,SAAS,aAAa,QAAQ,CAAC;AACrC,kBAAM,SAAS,KAAK,oBAAoB,OAAO,cAAc;AAE7D,gBAAI,UAAU,OAAO,QAAQ,aAAa;AACxC,sBAAQ,CAAC,IAAI,OAAO;AAAA,YACtB,OAAO;AACL,sBAAQ,CAAC,IAAI;AAAA,YACf;AAAA,UACF,OAAO;AACL,oBAAQ,CAAC,IAAI;AAAA,UACf;AAAA,QACF,SAAS,OAAO;AACd,kBAAQ,CAAC,IAAI;AAAA,QACf;AAAA,MACF;AAEA,aAAO;AAAA,IACT,SAAS,OAAO;AAEd,aAAO,IAAI,MAAM,KAAK,MAAM,EAAE,KAAK,MAAS;AAAA,IAC9C;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAM,KAAK,eAAsD;AAC/D,QAAI,cAAc,WAAW,GAAG;AAC9B;AAAA,IACF;AAEA,QAAI;AACF,YAAM,YAAY,MAAM,KAAK,YAAY;AAGzC,iBAAW,CAAC,KAAK,KAAK,KAAK,eAAe;AACxC,cAAM,UAAU,KAAK,qBAAqB,KAAK,KAAK;AAEpD,YAAI;AACF,gBAAM,KAAK,OAAO,aAAa;AAAA,YAC7B;AAAA,YACA;AAAA,YACA,UAAU,KAAK;AAAA,UACjB,CAAC;AAAA,QACH,SAAS,OAAO;AACd,kBAAQ,KAAK,qBAAqB,GAAG,KAAK,KAAK;AAAA,QACjD;AAAA,MACF;AAAA,IACF,SAAS,OAAO;AACd,YAAM,IAAI,MAAM,uBAAuB,KAAK,EAAE;AAAA,IAChD;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAM,QAAQ,MAA+B;AAC3C,QAAI,KAAK,WAAW,GAAG;AACrB;AAAA,IACF;AAEA,QAAI;AACF,YAAM,YAAY,MAAM,KAAK,YAAY;AAGzC,iBAAW,OAAO,MAAM;AACtB,cAAM,cAAc,KAAK,gBAAgB,GAAG;AAE5C,YAAI;AAEF,gBAAM,eAAe,MAAM,KAAK,OAAO,cAAc;AAAA,YACnD,SAAS;AAAA,YACT;AAAA,YACA,YAAY,CAAC,KAAK,eAAe;AAAA,YACjC,OAAO;AAAA,UACT,CAAC;AAED,cAAI,aAAa,WAAW,aAAa,QAAQ,SAAS,GAAG;AAC3D,kBAAM,SAAS,aAAa,QAAQ,CAAC;AACrC,kBAAM,KAAK,OAAO,aAAa;AAAA,cAC7B;AAAA,cACA,UAAU,OAAO;AAAA,YACnB,CAAC;AAAA,UACH;AAAA,QACF,SAAS,OAAO;AACd,kBAAQ,KAAK,wBAAwB,GAAG,KAAK,KAAK;AAAA,QACpD;AAAA,MACF;AAAA,IACF,SAAS,OAAO;AACd,YAAM,IAAI,MAAM,0BAA0B,KAAK,EAAE;AAAA,IACnD;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,OAAO,UAAU,QAAyC;AACxD,QAAI;AACF,YAAM,YAAY,MAAM,KAAK,YAAY;AACzC,UAAI,SAAS;AACb,UAAI,UAAU;AAEd,aAAO,SAAS;AACd,YAAI;AACF,gBAAM,SAAS,MAAM,KAAK,OAAO,aAAa;AAAA,YAC5C;AAAA,YACA,YAAY,CAAC,KAAK,eAAe;AAAA,YACjC,OAAO,KAAK;AAAA,YACZ;AAAA,UACF,CAAC;AAED,cAAI,CAAC,OAAO,WAAW,OAAO,QAAQ,WAAW,GAAG;AAClD,sBAAU;AACV;AAAA,UACF;AAEA,qBAAW,UAAU,OAAO,SAAS;AACnC,kBAAM,SAAS,KAAK,oBAAoB,OAAO,cAAc;AAC7D,gBAAI,QAAQ;AACV,oBAAM,gBAAgB,KAAK,kBAAkB,OAAO,GAAG;AAEvD,kBAAI,CAAC,UAAU,cAAc,WAAW,MAAM,GAAG;AAC/C,sBAAM;AAAA,cACR;AAAA,YACF;AAAA,UACF;AAEA,oBAAU,OAAO,QAAQ;AAGzB,cAAI,OAAO,QAAQ,SAAS,KAAK,wBAAwB;AACvD,sBAAU;AAAA,UACZ;AAAA,QACF,SAAS,OAAO;AACd,kBAAQ,KAAK,iCAAiC,MAAM,KAAK,KAAK;AAC9D,oBAAU;AAAA,QACZ;AAAA,MACF;AAAA,IACF,SAAS,OAAO;AACd,cAAQ,KAAK,wBAAwB,KAAK;AAAA,IAC5C;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,QAAc;AACZ,SAAK,OAAO,MAAM;AAAA,EACpB;AACF;;;AChXA,mBAAsD;AACtD,yBAKO;AACP,gBAAkB;AASX,SAAS,kBACd,WACA,UACA;AACA,QAAM,OACJ,aACC,OAAO,UAAe;AACrB,UAAM,SAAS,MAAM,UAAU,OAAO,KAAK;AAC3C,WAAO;AAAA,EACT;AAEF,aAAO,aAAAA,MAAc,MAAa;AAAA,IAChC,MAAM,UAAU;AAAA,IAChB,aAAa,UAAU,eAAe,UAAU;AAAA,IAChD,QAAS,UAAkB,UAAU,YAAE,OAAO,CAAC,CAAC;AAAA,EAClD,CAAC;AACH;AAQO,SAAS,uBAAuB,eAA+B;AACpE,QAAM,OAAY,OAChB,OACA,YACG;AACH,QAAI;AAEF,YAAM,SAAS,MAAM,cAAc,OAAO,KAAK;AAG/C,aAAO,IAAI,8BAAW;AAAA,QACpB,SAAS;AAAA,QACT,MAAM;AAAA,MACR,CAAC;AAAA,IACH,SAAS,OAAO;AAEd,aAAO,IAAI,8BAAW;AAAA,QACpB,SAAS;AAAA,QACT,OAAO,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK;AAAA,QAC5D,YAAY;AAAA,MACd,CAAC;AAAA,IACH;AAAA,EACF;AAEA,aAAO,mBAAAC,MAAU,MAAM;AAAA,IACrB,MAAM,cAAc;AAAA,IACpB,aAAa,cAAc,eAAe,cAAc;AAAA,IACxD,QAAS,cAAsB,UAAW,YAAE,OAAO,CAAC,CAAC;AAAA,EACvD,CAAC;AACH;;;ACxEA,gBAAkB;AAElB,qCAA+B;AAC/B,uBAA2D;AAEpD,IAAM,iBAAN,cAA6B,8CAAe;AAAA,EACjD,YACE,QAGA;AACA,UAAM,EAAE,GAAG,QAAQ,kBAAkB,OAAO,MAAM,CAAC;AAAA,EACrD;AACF;AAEO,SAAS,mBAAmB;AACjC,aAAO,mCAAiB;AAAA,IACtB,MAAM;AAAA,IACN,aAAa,YAAE,OAAO;AAAA,MACpB,OAAO,YAAE,OAAO;AAAA,QACd,SAAS,YAAE;AAAA,UACT,YAAE,OAAO;AAAA,YACP,MAAM,YAAE,OAAO;AAAA,YACf,aAAa,YAAE,OAAO;AAAA,YACtB,QAAQ,YAAE,IAAI;AAAA,UAChB,CAAC;AAAA,QACH;AAAA,MACF,CAAC;AAAA,IACH,CAAC;AAAA,IACD,aAAa,CAAC,UAAU;AAAA,IACxB,eAAe,CAAC,SAAS,YAAY;AACnC,YAAM,eACH,QAAQ,MAAM,MAAM,WAAW,CAAC,GACjC,IAAI,CAAC,SAAS;AACd,cAAM,EAAE,MAAM,aAAa,OAAO,IAAI;AACtC,eAAO;AAAA,UACL;AAAA,UACA;AAAA,UACA;AAAA,QACF;AAAA,MACF,CAAC;AAED,aAAO,QAAQ;AAAA,QACb,GAAG;AAAA,QACH,OAAO,CAAC,GAAI,QAAQ,SAAS,CAAC,GAAI,GAAG,WAAW;AAAA,MAClD,CAAC;AAAA,IACH;AAAA,EACF,CAAC;AACH;;;AChDA,0BAA2C;AAC3C,sBAKO;AACP,0BAAmD;AAE5C,IAAM,kBAAN,cAA8B,+CAA2B;AAAA,EAO9D,YAAY,SAAuD;AACjE,UAAM;AAPR,wBAAe,CAAC,aAAa,UAAU,WAAW,MAAM;AAQtD,UAAM,EAAE,WAAW,GAAG,cAAc,IAAI;AACxC,SAAK,SAAS,IAAI,iCAAa;AAAA,MAC7B,GAAG;AAAA,IACL,CAAC;AACD,SAAK,YAAY,QAAQ;AAAA,EAC3B;AAAA,EAEA,MAAM,cAAsC;AAC1C,UAAM,EAAE,SAAS,CAAC,EAAE,IAAI,MAAM,KAAK,OAAO,YAAY;AAAA,MACpD,WAAW,KAAK;AAAA,IAClB,CAAC;AAED,eAAO;AAAA,MACL,OAAO,IAAI,CAAC,UAAU;AACpB,eAAO;AAAA,UACL,MAAM,MAAM;AAAA,UACZ,MAAM,MAAM;AAAA,QACd;AAAA,MACF,CAAC;AAAA,IACH;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAa,WAAW,SAAsB;AAC5C,UAAM,eAAW,iDAAgC,CAAC,OAAO,CAAC;AAC1D,UAAM,KAAK,cAAc,SAAS,CAAC,CAAC;AAAA,EACtC;AAAA,EAEA,MAAc,cAAc,SAAuC;AACjE,UAAM,KAAK,OAAO,YAAY;AAAA,MAC5B,WAAW,KAAK;AAAA,MAChB,UAAU;AAAA,IACZ,CAAC;AAAA,EACH;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAa,QAAuB;AAClC,UAAM,WAAW,MAAM,KAAK,OACzB,YAAY;AAAA,MACX,WAAW,KAAK;AAAA,IAClB,CAAC,EACA,KAAK,CAAC,EAAE,SAAS,CAAC,EAAE,MAAM,OAAO,IAAI,CAAC,UAAe,MAAM,QAAQ,CAAC;AAEvE,UAAM,QAAQ;AAAA,MACZ,SAAS,IAAI,CAAC,OAAe;AAC3B,eAAO,KAAK,OAAO,YAAY;AAAA,UAC7B,WAAW,KAAK;AAAA,UAChB,SAAS;AAAA,QACX,CAAC;AAAA,MACH,CAAC;AAAA,IACH;AAEA,UAAM,KAAK,OAAO,cAAc;AAAA,MAC9B,WAAW,KAAK;AAAA,IAClB,CAAC;AAAA,EACH;AACF;","names":["langChainTool","agKitTool"]}
1
+ {"version":3,"sources":["../src/index.ts","../src/store/tdai.ts","../src/tool.ts","../src/agent.ts","../src/chat_history.ts"],"sourcesContent":["export * from \"./store/index\";\nexport * from \"./tool\";\nexport * from \"./agent\";\nexport { TDAIChatHistory } from \"./chat_history\";\n\n","import { MemoryClient } from \"@cloudbase/agent-agents\";\nimport { BaseStore } from \"@langchain/core/stores\";\n\n/**\n * Configuration options for TDAIStore\n */\nexport interface TDAIStoreInput {\n /**\n * The TDAI Memory Client instance\n */\n client: MemoryClient;\n\n /**\n * The amount of keys to retrieve per batch when yielding keys.\n * @default 1000\n */\n yieldKeysScanBatchSize?: number;\n\n /**\n * The namespace to use for the keys in the database.\n */\n namespace?: string;\n\n /**\n * Default session ID for storing records\n */\n defaultSessionId?: string;\n\n /**\n * Default strategy for storing records\n */\n defaultStrategy?: string;\n\n /**\n * TTL for records in seconds\n */\n ttlSeconds?: number;\n}\n\n/**\n * TDAI implementation of the BaseStore for key-value caching.\n * Uses TDAI Memory Client for persistent storage.\n *\n * @example\n * ```typescript\n * const client = new MemoryClient({\n * endpoint: \"https://memory.tdai.tencentyun.com\",\n * apiKey: \"your-api-key\",\n * memoryId: \"your-memory-id\",\n * });\n *\n * const store = new TDAIStore({\n * client,\n * namespace: \"cache\",\n * });\n *\n * const encoder = new TextEncoder();\n * await store.mset([\n * [\"key1\", encoder.encode(\"value1\")],\n * [\"key2\", encoder.encode(\"value2\")],\n * ]);\n *\n * const values = await store.mget([\"key1\", \"key2\"]);\n * ```\n */\nexport class TDAIStore extends BaseStore<string, Uint8Array> {\n lc_namespace = [\"langchain\", \"storage\", \"tdai\"];\n\n protected client: MemoryClient;\n protected namespace?: string;\n protected yieldKeysScanBatchSize = 1000;\n protected defaultSessionId: string;\n protected defaultStrategy: string;\n protected ttlSeconds?: number;\n private sessionCache?: string;\n\n constructor(fields: TDAIStoreInput) {\n super();\n this.client = fields.client;\n this.namespace = fields.namespace;\n this.yieldKeysScanBatchSize =\n fields.yieldKeysScanBatchSize ?? this.yieldKeysScanBatchSize;\n this.defaultSessionId =\n fields.defaultSessionId ?? \"langchain_store_session\";\n this.defaultStrategy = fields.defaultStrategy ?? \"kv_cache\";\n this.ttlSeconds = fields.ttlSeconds;\n }\n\n /**\n * Get prefixed key with namespace\n */\n private _getPrefixedKey(key: string): string {\n if (this.namespace) {\n const delimiter = \"/\";\n return `${this.namespace}${delimiter}${key}`;\n }\n return key;\n }\n\n /**\n * Remove prefix from key\n */\n private _getDeprefixedKey(key: string): string {\n if (this.namespace) {\n const delimiter = \"/\";\n return key.slice(this.namespace.length + delimiter.length);\n }\n return key;\n }\n\n /**\n * Get or create session for the store\n */\n private async _getSession(): Promise<string> {\n if (this.sessionCache) {\n return this.sessionCache;\n }\n\n try {\n // Try to find existing session\n const sessions = await this.client.querySessions({\n limit: 1,\n });\n\n if (sessions.sessions && sessions.sessions.length > 0) {\n this.sessionCache = sessions.sessions[0].sessionId;\n } else {\n // Create new session\n const result = await this.client.createSession({\n name: `langchain_store_${this.namespace || \"default\"}`,\n });\n this.sessionCache = result.sessionId;\n }\n\n return this.sessionCache!;\n } catch (error) {\n // Fallback to default session\n return this.defaultSessionId;\n }\n }\n\n /**\n * Create record content for storage\n */\n private _createRecordContent(key: string, value: Uint8Array): string {\n const decoder = new TextDecoder();\n const content = {\n key: this._getPrefixedKey(key),\n value: decoder.decode(value),\n timestamp: Date.now(),\n ttl: this.ttlSeconds,\n };\n return JSON.stringify(content);\n }\n\n /**\n * Parse record content from storage\n */\n private _parseRecordContent(\n content: string\n ): {\n key: string;\n value: Uint8Array;\n timestamp: number;\n ttl?: number;\n } | null {\n try {\n const data = JSON.parse(content);\n const encoder = new TextEncoder();\n\n // Check TTL if present\n if (data.ttl && data.timestamp) {\n const now = Date.now();\n if (now > data.timestamp + data.ttl * 1000) {\n return null; // Expired\n }\n }\n\n return {\n key: data.key,\n value: encoder.encode(data.value),\n timestamp: data.timestamp,\n ttl: data.ttl,\n };\n } catch (error) {\n return null;\n }\n }\n\n /**\n * Gets multiple keys from the TDAI store.\n * @param keys Array of keys to be retrieved.\n * @returns An array of retrieved values.\n */\n async mget(keys: string[]): Promise<(Uint8Array | undefined)[]> {\n if (keys.length === 0) {\n return [];\n }\n\n try {\n const sessionId = await this._getSession();\n const results: (Uint8Array | undefined)[] = new Array(keys.length);\n\n // Search for each key individually due to TDAI API limitations\n for (let i = 0; i < keys.length; i++) {\n const prefixedKey = this._getPrefixedKey(keys[i]);\n\n try {\n const searchResult = await this.client.searchRecords({\n content: prefixedKey,\n sessionId,\n strategies: [this.defaultStrategy],\n limit: 1,\n });\n\n if (searchResult.records && searchResult.records.length > 0) {\n const record = searchResult.records[0];\n const parsed = this._parseRecordContent(record.record_content);\n\n if (parsed && parsed.key === prefixedKey) {\n results[i] = parsed.value;\n } else {\n results[i] = undefined;\n }\n } else {\n results[i] = undefined;\n }\n } catch (error) {\n results[i] = undefined;\n }\n }\n\n return results;\n } catch (error) {\n // Return array of undefined values on error\n return new Array(keys.length).fill(undefined);\n }\n }\n\n /**\n * Sets multiple keys in the TDAI store.\n * @param keyValuePairs Array of key-value pairs to be set.\n * @returns Promise that resolves when all keys have been set.\n */\n async mset(keyValuePairs: [string, Uint8Array][]): Promise<void> {\n if (keyValuePairs.length === 0) {\n return;\n }\n\n try {\n const sessionId = await this._getSession();\n\n // Set each key-value pair\n for (const [key, value] of keyValuePairs) {\n const content = this._createRecordContent(key, value);\n\n try {\n await this.client.appendRecord({\n sessionId,\n content,\n strategy: this.defaultStrategy,\n });\n } catch (error) {\n console.warn(`Failed to set key ${key}:`, error);\n }\n }\n } catch (error) {\n throw new Error(`Failed to set keys: ${error}`);\n }\n }\n\n /**\n * Deletes multiple keys from the TDAI store.\n * @param keys Array of keys to be deleted.\n * @returns Promise that resolves when all keys have been deleted.\n */\n async mdelete(keys: string[]): Promise<void> {\n if (keys.length === 0) {\n return;\n }\n\n try {\n const sessionId = await this._getSession();\n\n // Delete each key individually\n for (const key of keys) {\n const prefixedKey = this._getPrefixedKey(key);\n\n try {\n // First find the record\n const searchResult = await this.client.searchRecords({\n content: prefixedKey,\n sessionId,\n strategies: [this.defaultStrategy],\n limit: 1,\n });\n\n if (searchResult.records && searchResult.records.length > 0) {\n const record = searchResult.records[0];\n await this.client.deleteRecord({\n sessionId,\n recordId: record.record_id,\n });\n }\n } catch (error) {\n console.warn(`Failed to delete key ${key}:`, error);\n }\n }\n } catch (error) {\n throw new Error(`Failed to delete keys: ${error}`);\n }\n }\n\n /**\n * Yields keys from the TDAI store.\n * @param prefix Optional prefix to filter the keys.\n * @returns An AsyncGenerator that yields keys from the TDAI store.\n */\n async *yieldKeys(prefix?: string): AsyncGenerator<string> {\n try {\n const sessionId = await this._getSession();\n let offset = 0;\n let hasMore = true;\n\n while (hasMore) {\n try {\n const result = await this.client.queryRecords({\n sessionId,\n strategies: [this.defaultStrategy],\n limit: this.yieldKeysScanBatchSize,\n offset,\n });\n\n if (!result.records || result.records.length === 0) {\n hasMore = false;\n break;\n }\n\n for (const record of result.records) {\n const parsed = this._parseRecordContent(record.record_content);\n if (parsed) {\n const deprefixedKey = this._getDeprefixedKey(parsed.key);\n\n if (!prefix || deprefixedKey.startsWith(prefix)) {\n yield deprefixedKey;\n }\n }\n }\n\n offset += result.records.length;\n\n // If we got fewer records than requested, we've reached the end\n if (result.records.length < this.yieldKeysScanBatchSize) {\n hasMore = false;\n }\n } catch (error) {\n console.warn(`Error yielding keys at offset ${offset}:`, error);\n hasMore = false;\n }\n }\n } catch (error) {\n console.warn(\"Error yielding keys:\", error);\n }\n }\n\n /**\n * Close the TDAI client connection\n */\n close(): void {\n this.client.close();\n }\n}\n\n","/**\n * AG-Kit BaseTool to LangChain Tool Converter and Vice Versa\n */\nimport { tool as langChainTool, StructuredTool } from \"@langchain/core/tools\";\nimport {\n BaseTool,\n tool as agKitTool,\n ToolResult,\n ToolExecutionContext,\n} from \"@cloudbase/agent-tools\";\nimport { z } from \"zod/v4\";\n\n/**\n * Convert AG-Kit BaseTool to LangChain DynamicStructuredTool\n *\n * @param agkitTool - AG-Kit BaseTool instance\n * @param implFunc - Optional custom implementation function\n * @returns LangChain DynamicStructuredTool instance\n */\nexport function convert2LangChain(\n agkitTool: BaseTool,\n implFunc?: (tool: BaseTool) => Function\n) {\n const func =\n implFunc ||\n (async (input: any) => {\n const result = await agkitTool.invoke(input);\n return result;\n });\n\n return langChainTool(func as any, {\n name: agkitTool.name,\n description: agkitTool.description || agkitTool.name,\n schema: (agkitTool as any).schema || z.object({}),\n });\n}\n\n/**\n * Convert LangChain Tool to AG-Kit DynamicTool\n *\n * @param langchainTool - LangChain tool instance (DynamicStructuredTool or StructuredTool)\n * @returns AG-Kit DynamicTool instance\n */\nexport function convertLangChain2AGKit(langchainTool: StructuredTool) {\n const func: any = async (\n input: Record<string, any>,\n context?: ToolExecutionContext\n ) => {\n try {\n // Call the LangChain tool\n const result = await langchainTool.invoke(input);\n\n // Return successful result\n return new ToolResult({\n success: true,\n data: result,\n });\n } catch (error) {\n // Handle errors and return ToolResult with error\n return new ToolResult({\n success: false,\n error: error instanceof Error ? error.message : String(error),\n error_type: \"execution\",\n });\n }\n };\n\n return agKitTool(func, {\n name: langchainTool.name,\n description: langchainTool.description || langchainTool.name,\n schema: (langchainTool as any).schema || (z.object({}) as z.ZodObject<any>),\n });\n}\n\n","import { z } from \"zod/v3\";\nimport { AgentConfig } from \"@cloudbase/agent-agents/abstract\";\nimport { LanggraphAgent } from \"@cloudbase/agent-adapter-langgraph\";\nimport { createAgent, createMiddleware, DynamicTool } from \"langchain\";\n\nexport class LangchainAgent extends LanggraphAgent {\n constructor(\n config: AgentConfig & {\n agent: ReturnType<typeof createAgent>;\n }\n ) {\n super({ ...config, compiledWorkflow: config.agent });\n }\n}\n\nexport function clientTools() {\n return createMiddleware({\n name: \"ClientTools\",\n stateSchema: z.object({\n client: z.object({\n tools: z.array(\n z.object({\n name: z.string(),\n description: z.string(),\n schema: z.any(),\n })\n ),\n }),\n }),\n beforeModel: (state) => state,\n wrapModelCall: (request, hanlder) => {\n const clientTools = (\n (request.state.client.tools || []) as DynamicTool[]\n ).map((tool) => {\n const { name, description, schema } = tool;\n return {\n name,\n description,\n schema,\n };\n });\n\n return hanlder({\n ...request,\n tools: [...(request.tools || []), ...clientTools],\n });\n },\n });\n}\n","import { BaseListChatMessageHistory } from \"@langchain/core/chat_history\";\nimport {\n BaseMessage,\n mapStoredMessagesToChatMessages,\n mapChatMessagesToStoredMessages,\n StoredMessage,\n} from \"@langchain/core/messages\";\nimport { IMemoryClientOptions, MemoryClient } from \"@cloudbase/agent-agents\";\n\nexport class TDAIChatHistory extends BaseListChatMessageHistory {\n lc_namespace = [\"langchain\", \"stores\", \"message\", \"tdai\"];\n\n public client: MemoryClient;\n\n private sessionId: string;\n\n constructor(options: IMemoryClientOptions & { sessionId: string }) {\n super();\n const { sessionId, ...clientOptions } = options;\n this.client = new MemoryClient({\n ...clientOptions,\n });\n this.sessionId = options.sessionId;\n }\n\n async getMessages(): Promise<BaseMessage[]> {\n const { events = [] } = await this.client.queryEvents({\n sessionId: this.sessionId,\n });\n\n return mapStoredMessagesToChatMessages(\n events.map((event) => {\n return {\n type: event.type,\n data: event.data,\n };\n })\n );\n }\n\n /**\n * Method to add a new message to the Firestore collection. The message is\n * passed as a BaseMessage object.\n * @param message The message to be added as a BaseMessage object.\n */\n public async addMessage(message: BaseMessage) {\n const messages = mapChatMessagesToStoredMessages([message]);\n await this.appendMessage(messages[0]);\n }\n\n private async appendMessage(message: StoredMessage): Promise<void> {\n await this.client.appendEvent({\n sessionId: this.sessionId,\n messages: message,\n });\n }\n\n /**\n * Method to delete all messages from the Firestore collection associated\n * with the current session.\n */\n public async clear(): Promise<void> {\n const eventIds = await this.client\n .queryEvents({\n sessionId: this.sessionId,\n })\n .then(({ events = [] }) => events.map((event: any) => event.event_id));\n\n await Promise.all(\n eventIds.map((id: string) => {\n return this.client.deleteEvent({\n sessionId: this.sessionId,\n eventId: id,\n });\n })\n );\n\n await this.client.deleteSession({\n sessionId: this.sessionId,\n });\n }\n}\n\n"],"mappings":"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","names":["langChainTool","agKitTool","clientTools"]}
package/dist/index.mjs CHANGED
@@ -297,12 +297,12 @@ var LangchainAgent = class extends LanggraphAgent {
297
297
  super({ ...config, compiledWorkflow: config.agent });
298
298
  }
299
299
  };
300
- function agKitClientTools() {
300
+ function clientTools() {
301
301
  return createMiddleware({
302
- name: "AGKitClientTools",
302
+ name: "ClientTools",
303
303
  stateSchema: z2.object({
304
- agKit: z2.object({
305
- actions: z2.array(
304
+ client: z2.object({
305
+ tools: z2.array(
306
306
  z2.object({
307
307
  name: z2.string(),
308
308
  description: z2.string(),
@@ -313,7 +313,7 @@ function agKitClientTools() {
313
313
  }),
314
314
  beforeModel: (state) => state,
315
315
  wrapModelCall: (request, hanlder) => {
316
- const clientTools = (request.state.agKit.actions || []).map((tool) => {
316
+ const clientTools2 = (request.state.client.tools || []).map((tool) => {
317
317
  const { name, description, schema } = tool;
318
318
  return {
319
319
  name,
@@ -323,7 +323,7 @@ function agKitClientTools() {
323
323
  });
324
324
  return hanlder({
325
325
  ...request,
326
- tools: [...request.tools || [], ...clientTools]
326
+ tools: [...request.tools || [], ...clientTools2]
327
327
  });
328
328
  }
329
329
  });
@@ -399,7 +399,7 @@ export {
399
399
  LangchainAgent,
400
400
  TDAIChatHistory,
401
401
  TDAIStore,
402
- agKitClientTools,
402
+ clientTools,
403
403
  convert2LangChain,
404
404
  convertLangChain2AGKit
405
405
  };
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/store/tdai.ts","../src/tool.ts","../src/agent.ts","../src/chat_history.ts"],"sourcesContent":["import { MemoryClient } from \"@cloudbase/agent-agents\";\nimport { BaseStore } from \"@langchain/core/stores\";\n\n/**\n * Configuration options for TDAIStore\n */\nexport interface TDAIStoreInput {\n /**\n * The TDAI Memory Client instance\n */\n client: MemoryClient;\n\n /**\n * The amount of keys to retrieve per batch when yielding keys.\n * @default 1000\n */\n yieldKeysScanBatchSize?: number;\n\n /**\n * The namespace to use for the keys in the database.\n */\n namespace?: string;\n\n /**\n * Default session ID for storing records\n */\n defaultSessionId?: string;\n\n /**\n * Default strategy for storing records\n */\n defaultStrategy?: string;\n\n /**\n * TTL for records in seconds\n */\n ttlSeconds?: number;\n}\n\n/**\n * TDAI implementation of the BaseStore for key-value caching.\n * Uses TDAI Memory Client for persistent storage.\n *\n * @example\n * ```typescript\n * const client = new MemoryClient({\n * endpoint: \"https://memory.tdai.tencentyun.com\",\n * apiKey: \"your-api-key\",\n * memoryId: \"your-memory-id\",\n * });\n *\n * const store = new TDAIStore({\n * client,\n * namespace: \"cache\",\n * });\n *\n * const encoder = new TextEncoder();\n * await store.mset([\n * [\"key1\", encoder.encode(\"value1\")],\n * [\"key2\", encoder.encode(\"value2\")],\n * ]);\n *\n * const values = await store.mget([\"key1\", \"key2\"]);\n * ```\n */\nexport class TDAIStore extends BaseStore<string, Uint8Array> {\n lc_namespace = [\"langchain\", \"storage\", \"tdai\"];\n\n protected client: MemoryClient;\n protected namespace?: string;\n protected yieldKeysScanBatchSize = 1000;\n protected defaultSessionId: string;\n protected defaultStrategy: string;\n protected ttlSeconds?: number;\n private sessionCache?: string;\n\n constructor(fields: TDAIStoreInput) {\n super();\n this.client = fields.client;\n this.namespace = fields.namespace;\n this.yieldKeysScanBatchSize =\n fields.yieldKeysScanBatchSize ?? this.yieldKeysScanBatchSize;\n this.defaultSessionId =\n fields.defaultSessionId ?? \"langchain_store_session\";\n this.defaultStrategy = fields.defaultStrategy ?? \"kv_cache\";\n this.ttlSeconds = fields.ttlSeconds;\n }\n\n /**\n * Get prefixed key with namespace\n */\n private _getPrefixedKey(key: string): string {\n if (this.namespace) {\n const delimiter = \"/\";\n return `${this.namespace}${delimiter}${key}`;\n }\n return key;\n }\n\n /**\n * Remove prefix from key\n */\n private _getDeprefixedKey(key: string): string {\n if (this.namespace) {\n const delimiter = \"/\";\n return key.slice(this.namespace.length + delimiter.length);\n }\n return key;\n }\n\n /**\n * Get or create session for the store\n */\n private async _getSession(): Promise<string> {\n if (this.sessionCache) {\n return this.sessionCache;\n }\n\n try {\n // Try to find existing session\n const sessions = await this.client.querySessions({\n limit: 1,\n });\n\n if (sessions.sessions && sessions.sessions.length > 0) {\n this.sessionCache = sessions.sessions[0].sessionId;\n } else {\n // Create new session\n const result = await this.client.createSession({\n name: `langchain_store_${this.namespace || \"default\"}`,\n });\n this.sessionCache = result.sessionId;\n }\n\n return this.sessionCache!;\n } catch (error) {\n // Fallback to default session\n return this.defaultSessionId;\n }\n }\n\n /**\n * Create record content for storage\n */\n private _createRecordContent(key: string, value: Uint8Array): string {\n const decoder = new TextDecoder();\n const content = {\n key: this._getPrefixedKey(key),\n value: decoder.decode(value),\n timestamp: Date.now(),\n ttl: this.ttlSeconds,\n };\n return JSON.stringify(content);\n }\n\n /**\n * Parse record content from storage\n */\n private _parseRecordContent(\n content: string\n ): {\n key: string;\n value: Uint8Array;\n timestamp: number;\n ttl?: number;\n } | null {\n try {\n const data = JSON.parse(content);\n const encoder = new TextEncoder();\n\n // Check TTL if present\n if (data.ttl && data.timestamp) {\n const now = Date.now();\n if (now > data.timestamp + data.ttl * 1000) {\n return null; // Expired\n }\n }\n\n return {\n key: data.key,\n value: encoder.encode(data.value),\n timestamp: data.timestamp,\n ttl: data.ttl,\n };\n } catch (error) {\n return null;\n }\n }\n\n /**\n * Gets multiple keys from the TDAI store.\n * @param keys Array of keys to be retrieved.\n * @returns An array of retrieved values.\n */\n async mget(keys: string[]): Promise<(Uint8Array | undefined)[]> {\n if (keys.length === 0) {\n return [];\n }\n\n try {\n const sessionId = await this._getSession();\n const results: (Uint8Array | undefined)[] = new Array(keys.length);\n\n // Search for each key individually due to TDAI API limitations\n for (let i = 0; i < keys.length; i++) {\n const prefixedKey = this._getPrefixedKey(keys[i]);\n\n try {\n const searchResult = await this.client.searchRecords({\n content: prefixedKey,\n sessionId,\n strategies: [this.defaultStrategy],\n limit: 1,\n });\n\n if (searchResult.records && searchResult.records.length > 0) {\n const record = searchResult.records[0];\n const parsed = this._parseRecordContent(record.record_content);\n\n if (parsed && parsed.key === prefixedKey) {\n results[i] = parsed.value;\n } else {\n results[i] = undefined;\n }\n } else {\n results[i] = undefined;\n }\n } catch (error) {\n results[i] = undefined;\n }\n }\n\n return results;\n } catch (error) {\n // Return array of undefined values on error\n return new Array(keys.length).fill(undefined);\n }\n }\n\n /**\n * Sets multiple keys in the TDAI store.\n * @param keyValuePairs Array of key-value pairs to be set.\n * @returns Promise that resolves when all keys have been set.\n */\n async mset(keyValuePairs: [string, Uint8Array][]): Promise<void> {\n if (keyValuePairs.length === 0) {\n return;\n }\n\n try {\n const sessionId = await this._getSession();\n\n // Set each key-value pair\n for (const [key, value] of keyValuePairs) {\n const content = this._createRecordContent(key, value);\n\n try {\n await this.client.appendRecord({\n sessionId,\n content,\n strategy: this.defaultStrategy,\n });\n } catch (error) {\n console.warn(`Failed to set key ${key}:`, error);\n }\n }\n } catch (error) {\n throw new Error(`Failed to set keys: ${error}`);\n }\n }\n\n /**\n * Deletes multiple keys from the TDAI store.\n * @param keys Array of keys to be deleted.\n * @returns Promise that resolves when all keys have been deleted.\n */\n async mdelete(keys: string[]): Promise<void> {\n if (keys.length === 0) {\n return;\n }\n\n try {\n const sessionId = await this._getSession();\n\n // Delete each key individually\n for (const key of keys) {\n const prefixedKey = this._getPrefixedKey(key);\n\n try {\n // First find the record\n const searchResult = await this.client.searchRecords({\n content: prefixedKey,\n sessionId,\n strategies: [this.defaultStrategy],\n limit: 1,\n });\n\n if (searchResult.records && searchResult.records.length > 0) {\n const record = searchResult.records[0];\n await this.client.deleteRecord({\n sessionId,\n recordId: record.record_id,\n });\n }\n } catch (error) {\n console.warn(`Failed to delete key ${key}:`, error);\n }\n }\n } catch (error) {\n throw new Error(`Failed to delete keys: ${error}`);\n }\n }\n\n /**\n * Yields keys from the TDAI store.\n * @param prefix Optional prefix to filter the keys.\n * @returns An AsyncGenerator that yields keys from the TDAI store.\n */\n async *yieldKeys(prefix?: string): AsyncGenerator<string> {\n try {\n const sessionId = await this._getSession();\n let offset = 0;\n let hasMore = true;\n\n while (hasMore) {\n try {\n const result = await this.client.queryRecords({\n sessionId,\n strategies: [this.defaultStrategy],\n limit: this.yieldKeysScanBatchSize,\n offset,\n });\n\n if (!result.records || result.records.length === 0) {\n hasMore = false;\n break;\n }\n\n for (const record of result.records) {\n const parsed = this._parseRecordContent(record.record_content);\n if (parsed) {\n const deprefixedKey = this._getDeprefixedKey(parsed.key);\n\n if (!prefix || deprefixedKey.startsWith(prefix)) {\n yield deprefixedKey;\n }\n }\n }\n\n offset += result.records.length;\n\n // If we got fewer records than requested, we've reached the end\n if (result.records.length < this.yieldKeysScanBatchSize) {\n hasMore = false;\n }\n } catch (error) {\n console.warn(`Error yielding keys at offset ${offset}:`, error);\n hasMore = false;\n }\n }\n } catch (error) {\n console.warn(\"Error yielding keys:\", error);\n }\n }\n\n /**\n * Close the TDAI client connection\n */\n close(): void {\n this.client.close();\n }\n}\n\n","/**\n * AG-Kit BaseTool to LangChain Tool Converter and Vice Versa\n */\nimport { tool as langChainTool, StructuredTool } from \"@langchain/core/tools\";\nimport {\n BaseTool,\n tool as agKitTool,\n ToolResult,\n ToolExecutionContext,\n} from \"@cloudbase/agent-tools\";\nimport { z } from \"zod/v4\";\n\n/**\n * Convert AG-Kit BaseTool to LangChain DynamicStructuredTool\n *\n * @param agkitTool - AG-Kit BaseTool instance\n * @param implFunc - Optional custom implementation function\n * @returns LangChain DynamicStructuredTool instance\n */\nexport function convert2LangChain(\n agkitTool: BaseTool,\n implFunc?: (tool: BaseTool) => Function\n) {\n const func =\n implFunc ||\n (async (input: any) => {\n const result = await agkitTool.invoke(input);\n return result;\n });\n\n return langChainTool(func as any, {\n name: agkitTool.name,\n description: agkitTool.description || agkitTool.name,\n schema: (agkitTool as any).schema || z.object({}),\n });\n}\n\n/**\n * Convert LangChain Tool to AG-Kit DynamicTool\n *\n * @param langchainTool - LangChain tool instance (DynamicStructuredTool or StructuredTool)\n * @returns AG-Kit DynamicTool instance\n */\nexport function convertLangChain2AGKit(langchainTool: StructuredTool) {\n const func: any = async (\n input: Record<string, any>,\n context?: ToolExecutionContext\n ) => {\n try {\n // Call the LangChain tool\n const result = await langchainTool.invoke(input);\n\n // Return successful result\n return new ToolResult({\n success: true,\n data: result,\n });\n } catch (error) {\n // Handle errors and return ToolResult with error\n return new ToolResult({\n success: false,\n error: error instanceof Error ? error.message : String(error),\n error_type: \"execution\",\n });\n }\n };\n\n return agKitTool(func, {\n name: langchainTool.name,\n description: langchainTool.description || langchainTool.name,\n schema: (langchainTool as any).schema || (z.object({}) as z.ZodObject<any>),\n });\n}\n\n","import { z } from \"zod/v3\";\nimport { AgentConfig } from \"@cloudbase/agent-agents/abstract\";\nimport { LanggraphAgent } from \"@cloudbase/agent-adapter-langgraph\";\nimport { createAgent, createMiddleware, DynamicTool } from \"langchain\";\n\nexport class LangchainAgent extends LanggraphAgent {\n constructor(\n config: AgentConfig & {\n agent: ReturnType<typeof createAgent>;\n }\n ) {\n super({ ...config, compiledWorkflow: config.agent });\n }\n}\n\nexport function agKitClientTools() {\n return createMiddleware({\n name: \"AGKitClientTools\",\n stateSchema: z.object({\n agKit: z.object({\n actions: z.array(\n z.object({\n name: z.string(),\n description: z.string(),\n schema: z.any(),\n })\n ),\n }),\n }),\n beforeModel: (state) => state,\n wrapModelCall: (request, hanlder) => {\n const clientTools = (\n (request.state.agKit.actions || []) as DynamicTool[]\n ).map((tool) => {\n const { name, description, schema } = tool;\n return {\n name,\n description,\n schema,\n };\n });\n\n return hanlder({\n ...request,\n tools: [...(request.tools || []), ...clientTools],\n });\n },\n });\n}\n\n","import { BaseListChatMessageHistory } from \"@langchain/core/chat_history\";\nimport {\n BaseMessage,\n mapStoredMessagesToChatMessages,\n mapChatMessagesToStoredMessages,\n StoredMessage,\n} from \"@langchain/core/messages\";\nimport { IMemoryClientOptions, MemoryClient } from \"@cloudbase/agent-agents\";\n\nexport class TDAIChatHistory extends BaseListChatMessageHistory {\n lc_namespace = [\"langchain\", \"stores\", \"message\", \"tdai\"];\n\n public client: MemoryClient;\n\n private sessionId: string;\n\n constructor(options: IMemoryClientOptions & { sessionId: string }) {\n super();\n const { sessionId, ...clientOptions } = options;\n this.client = new MemoryClient({\n ...clientOptions,\n });\n this.sessionId = options.sessionId;\n }\n\n async getMessages(): Promise<BaseMessage[]> {\n const { events = [] } = await this.client.queryEvents({\n sessionId: this.sessionId,\n });\n\n return mapStoredMessagesToChatMessages(\n events.map((event) => {\n return {\n type: event.type,\n data: event.data,\n };\n })\n );\n }\n\n /**\n * Method to add a new message to the Firestore collection. The message is\n * passed as a BaseMessage object.\n * @param message The message to be added as a BaseMessage object.\n */\n public async addMessage(message: BaseMessage) {\n const messages = mapChatMessagesToStoredMessages([message]);\n await this.appendMessage(messages[0]);\n }\n\n private async appendMessage(message: StoredMessage): Promise<void> {\n await this.client.appendEvent({\n sessionId: this.sessionId,\n messages: message,\n });\n }\n\n /**\n * Method to delete all messages from the Firestore collection associated\n * with the current session.\n */\n public async clear(): Promise<void> {\n const eventIds = await this.client\n .queryEvents({\n sessionId: this.sessionId,\n })\n .then(({ events = [] }) => events.map((event: any) => event.event_id));\n\n await Promise.all(\n eventIds.map((id: string) => {\n return this.client.deleteEvent({\n sessionId: this.sessionId,\n eventId: id,\n });\n })\n );\n\n await this.client.deleteSession({\n sessionId: this.sessionId,\n });\n }\n}\n\n"],"mappings":"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","names":["z"]}
1
+ {"version":3,"sources":["../src/store/tdai.ts","../src/tool.ts","../src/agent.ts","../src/chat_history.ts"],"sourcesContent":["import { MemoryClient } from \"@cloudbase/agent-agents\";\nimport { BaseStore } from \"@langchain/core/stores\";\n\n/**\n * Configuration options for TDAIStore\n */\nexport interface TDAIStoreInput {\n /**\n * The TDAI Memory Client instance\n */\n client: MemoryClient;\n\n /**\n * The amount of keys to retrieve per batch when yielding keys.\n * @default 1000\n */\n yieldKeysScanBatchSize?: number;\n\n /**\n * The namespace to use for the keys in the database.\n */\n namespace?: string;\n\n /**\n * Default session ID for storing records\n */\n defaultSessionId?: string;\n\n /**\n * Default strategy for storing records\n */\n defaultStrategy?: string;\n\n /**\n * TTL for records in seconds\n */\n ttlSeconds?: number;\n}\n\n/**\n * TDAI implementation of the BaseStore for key-value caching.\n * Uses TDAI Memory Client for persistent storage.\n *\n * @example\n * ```typescript\n * const client = new MemoryClient({\n * endpoint: \"https://memory.tdai.tencentyun.com\",\n * apiKey: \"your-api-key\",\n * memoryId: \"your-memory-id\",\n * });\n *\n * const store = new TDAIStore({\n * client,\n * namespace: \"cache\",\n * });\n *\n * const encoder = new TextEncoder();\n * await store.mset([\n * [\"key1\", encoder.encode(\"value1\")],\n * [\"key2\", encoder.encode(\"value2\")],\n * ]);\n *\n * const values = await store.mget([\"key1\", \"key2\"]);\n * ```\n */\nexport class TDAIStore extends BaseStore<string, Uint8Array> {\n lc_namespace = [\"langchain\", \"storage\", \"tdai\"];\n\n protected client: MemoryClient;\n protected namespace?: string;\n protected yieldKeysScanBatchSize = 1000;\n protected defaultSessionId: string;\n protected defaultStrategy: string;\n protected ttlSeconds?: number;\n private sessionCache?: string;\n\n constructor(fields: TDAIStoreInput) {\n super();\n this.client = fields.client;\n this.namespace = fields.namespace;\n this.yieldKeysScanBatchSize =\n fields.yieldKeysScanBatchSize ?? this.yieldKeysScanBatchSize;\n this.defaultSessionId =\n fields.defaultSessionId ?? \"langchain_store_session\";\n this.defaultStrategy = fields.defaultStrategy ?? \"kv_cache\";\n this.ttlSeconds = fields.ttlSeconds;\n }\n\n /**\n * Get prefixed key with namespace\n */\n private _getPrefixedKey(key: string): string {\n if (this.namespace) {\n const delimiter = \"/\";\n return `${this.namespace}${delimiter}${key}`;\n }\n return key;\n }\n\n /**\n * Remove prefix from key\n */\n private _getDeprefixedKey(key: string): string {\n if (this.namespace) {\n const delimiter = \"/\";\n return key.slice(this.namespace.length + delimiter.length);\n }\n return key;\n }\n\n /**\n * Get or create session for the store\n */\n private async _getSession(): Promise<string> {\n if (this.sessionCache) {\n return this.sessionCache;\n }\n\n try {\n // Try to find existing session\n const sessions = await this.client.querySessions({\n limit: 1,\n });\n\n if (sessions.sessions && sessions.sessions.length > 0) {\n this.sessionCache = sessions.sessions[0].sessionId;\n } else {\n // Create new session\n const result = await this.client.createSession({\n name: `langchain_store_${this.namespace || \"default\"}`,\n });\n this.sessionCache = result.sessionId;\n }\n\n return this.sessionCache!;\n } catch (error) {\n // Fallback to default session\n return this.defaultSessionId;\n }\n }\n\n /**\n * Create record content for storage\n */\n private _createRecordContent(key: string, value: Uint8Array): string {\n const decoder = new TextDecoder();\n const content = {\n key: this._getPrefixedKey(key),\n value: decoder.decode(value),\n timestamp: Date.now(),\n ttl: this.ttlSeconds,\n };\n return JSON.stringify(content);\n }\n\n /**\n * Parse record content from storage\n */\n private _parseRecordContent(\n content: string\n ): {\n key: string;\n value: Uint8Array;\n timestamp: number;\n ttl?: number;\n } | null {\n try {\n const data = JSON.parse(content);\n const encoder = new TextEncoder();\n\n // Check TTL if present\n if (data.ttl && data.timestamp) {\n const now = Date.now();\n if (now > data.timestamp + data.ttl * 1000) {\n return null; // Expired\n }\n }\n\n return {\n key: data.key,\n value: encoder.encode(data.value),\n timestamp: data.timestamp,\n ttl: data.ttl,\n };\n } catch (error) {\n return null;\n }\n }\n\n /**\n * Gets multiple keys from the TDAI store.\n * @param keys Array of keys to be retrieved.\n * @returns An array of retrieved values.\n */\n async mget(keys: string[]): Promise<(Uint8Array | undefined)[]> {\n if (keys.length === 0) {\n return [];\n }\n\n try {\n const sessionId = await this._getSession();\n const results: (Uint8Array | undefined)[] = new Array(keys.length);\n\n // Search for each key individually due to TDAI API limitations\n for (let i = 0; i < keys.length; i++) {\n const prefixedKey = this._getPrefixedKey(keys[i]);\n\n try {\n const searchResult = await this.client.searchRecords({\n content: prefixedKey,\n sessionId,\n strategies: [this.defaultStrategy],\n limit: 1,\n });\n\n if (searchResult.records && searchResult.records.length > 0) {\n const record = searchResult.records[0];\n const parsed = this._parseRecordContent(record.record_content);\n\n if (parsed && parsed.key === prefixedKey) {\n results[i] = parsed.value;\n } else {\n results[i] = undefined;\n }\n } else {\n results[i] = undefined;\n }\n } catch (error) {\n results[i] = undefined;\n }\n }\n\n return results;\n } catch (error) {\n // Return array of undefined values on error\n return new Array(keys.length).fill(undefined);\n }\n }\n\n /**\n * Sets multiple keys in the TDAI store.\n * @param keyValuePairs Array of key-value pairs to be set.\n * @returns Promise that resolves when all keys have been set.\n */\n async mset(keyValuePairs: [string, Uint8Array][]): Promise<void> {\n if (keyValuePairs.length === 0) {\n return;\n }\n\n try {\n const sessionId = await this._getSession();\n\n // Set each key-value pair\n for (const [key, value] of keyValuePairs) {\n const content = this._createRecordContent(key, value);\n\n try {\n await this.client.appendRecord({\n sessionId,\n content,\n strategy: this.defaultStrategy,\n });\n } catch (error) {\n console.warn(`Failed to set key ${key}:`, error);\n }\n }\n } catch (error) {\n throw new Error(`Failed to set keys: ${error}`);\n }\n }\n\n /**\n * Deletes multiple keys from the TDAI store.\n * @param keys Array of keys to be deleted.\n * @returns Promise that resolves when all keys have been deleted.\n */\n async mdelete(keys: string[]): Promise<void> {\n if (keys.length === 0) {\n return;\n }\n\n try {\n const sessionId = await this._getSession();\n\n // Delete each key individually\n for (const key of keys) {\n const prefixedKey = this._getPrefixedKey(key);\n\n try {\n // First find the record\n const searchResult = await this.client.searchRecords({\n content: prefixedKey,\n sessionId,\n strategies: [this.defaultStrategy],\n limit: 1,\n });\n\n if (searchResult.records && searchResult.records.length > 0) {\n const record = searchResult.records[0];\n await this.client.deleteRecord({\n sessionId,\n recordId: record.record_id,\n });\n }\n } catch (error) {\n console.warn(`Failed to delete key ${key}:`, error);\n }\n }\n } catch (error) {\n throw new Error(`Failed to delete keys: ${error}`);\n }\n }\n\n /**\n * Yields keys from the TDAI store.\n * @param prefix Optional prefix to filter the keys.\n * @returns An AsyncGenerator that yields keys from the TDAI store.\n */\n async *yieldKeys(prefix?: string): AsyncGenerator<string> {\n try {\n const sessionId = await this._getSession();\n let offset = 0;\n let hasMore = true;\n\n while (hasMore) {\n try {\n const result = await this.client.queryRecords({\n sessionId,\n strategies: [this.defaultStrategy],\n limit: this.yieldKeysScanBatchSize,\n offset,\n });\n\n if (!result.records || result.records.length === 0) {\n hasMore = false;\n break;\n }\n\n for (const record of result.records) {\n const parsed = this._parseRecordContent(record.record_content);\n if (parsed) {\n const deprefixedKey = this._getDeprefixedKey(parsed.key);\n\n if (!prefix || deprefixedKey.startsWith(prefix)) {\n yield deprefixedKey;\n }\n }\n }\n\n offset += result.records.length;\n\n // If we got fewer records than requested, we've reached the end\n if (result.records.length < this.yieldKeysScanBatchSize) {\n hasMore = false;\n }\n } catch (error) {\n console.warn(`Error yielding keys at offset ${offset}:`, error);\n hasMore = false;\n }\n }\n } catch (error) {\n console.warn(\"Error yielding keys:\", error);\n }\n }\n\n /**\n * Close the TDAI client connection\n */\n close(): void {\n this.client.close();\n }\n}\n\n","/**\n * AG-Kit BaseTool to LangChain Tool Converter and Vice Versa\n */\nimport { tool as langChainTool, StructuredTool } from \"@langchain/core/tools\";\nimport {\n BaseTool,\n tool as agKitTool,\n ToolResult,\n ToolExecutionContext,\n} from \"@cloudbase/agent-tools\";\nimport { z } from \"zod/v4\";\n\n/**\n * Convert AG-Kit BaseTool to LangChain DynamicStructuredTool\n *\n * @param agkitTool - AG-Kit BaseTool instance\n * @param implFunc - Optional custom implementation function\n * @returns LangChain DynamicStructuredTool instance\n */\nexport function convert2LangChain(\n agkitTool: BaseTool,\n implFunc?: (tool: BaseTool) => Function\n) {\n const func =\n implFunc ||\n (async (input: any) => {\n const result = await agkitTool.invoke(input);\n return result;\n });\n\n return langChainTool(func as any, {\n name: agkitTool.name,\n description: agkitTool.description || agkitTool.name,\n schema: (agkitTool as any).schema || z.object({}),\n });\n}\n\n/**\n * Convert LangChain Tool to AG-Kit DynamicTool\n *\n * @param langchainTool - LangChain tool instance (DynamicStructuredTool or StructuredTool)\n * @returns AG-Kit DynamicTool instance\n */\nexport function convertLangChain2AGKit(langchainTool: StructuredTool) {\n const func: any = async (\n input: Record<string, any>,\n context?: ToolExecutionContext\n ) => {\n try {\n // Call the LangChain tool\n const result = await langchainTool.invoke(input);\n\n // Return successful result\n return new ToolResult({\n success: true,\n data: result,\n });\n } catch (error) {\n // Handle errors and return ToolResult with error\n return new ToolResult({\n success: false,\n error: error instanceof Error ? error.message : String(error),\n error_type: \"execution\",\n });\n }\n };\n\n return agKitTool(func, {\n name: langchainTool.name,\n description: langchainTool.description || langchainTool.name,\n schema: (langchainTool as any).schema || (z.object({}) as z.ZodObject<any>),\n });\n}\n\n","import { z } from \"zod/v3\";\nimport { AgentConfig } from \"@cloudbase/agent-agents/abstract\";\nimport { LanggraphAgent } from \"@cloudbase/agent-adapter-langgraph\";\nimport { createAgent, createMiddleware, DynamicTool } from \"langchain\";\n\nexport class LangchainAgent extends LanggraphAgent {\n constructor(\n config: AgentConfig & {\n agent: ReturnType<typeof createAgent>;\n }\n ) {\n super({ ...config, compiledWorkflow: config.agent });\n }\n}\n\nexport function clientTools() {\n return createMiddleware({\n name: \"ClientTools\",\n stateSchema: z.object({\n client: z.object({\n tools: z.array(\n z.object({\n name: z.string(),\n description: z.string(),\n schema: z.any(),\n })\n ),\n }),\n }),\n beforeModel: (state) => state,\n wrapModelCall: (request, hanlder) => {\n const clientTools = (\n (request.state.client.tools || []) as DynamicTool[]\n ).map((tool) => {\n const { name, description, schema } = tool;\n return {\n name,\n description,\n schema,\n };\n });\n\n return hanlder({\n ...request,\n tools: [...(request.tools || []), ...clientTools],\n });\n },\n });\n}\n","import { BaseListChatMessageHistory } from \"@langchain/core/chat_history\";\nimport {\n BaseMessage,\n mapStoredMessagesToChatMessages,\n mapChatMessagesToStoredMessages,\n StoredMessage,\n} from \"@langchain/core/messages\";\nimport { IMemoryClientOptions, MemoryClient } from \"@cloudbase/agent-agents\";\n\nexport class TDAIChatHistory extends BaseListChatMessageHistory {\n lc_namespace = [\"langchain\", \"stores\", \"message\", \"tdai\"];\n\n public client: MemoryClient;\n\n private sessionId: string;\n\n constructor(options: IMemoryClientOptions & { sessionId: string }) {\n super();\n const { sessionId, ...clientOptions } = options;\n this.client = new MemoryClient({\n ...clientOptions,\n });\n this.sessionId = options.sessionId;\n }\n\n async getMessages(): Promise<BaseMessage[]> {\n const { events = [] } = await this.client.queryEvents({\n sessionId: this.sessionId,\n });\n\n return mapStoredMessagesToChatMessages(\n events.map((event) => {\n return {\n type: event.type,\n data: event.data,\n };\n })\n );\n }\n\n /**\n * Method to add a new message to the Firestore collection. The message is\n * passed as a BaseMessage object.\n * @param message The message to be added as a BaseMessage object.\n */\n public async addMessage(message: BaseMessage) {\n const messages = mapChatMessagesToStoredMessages([message]);\n await this.appendMessage(messages[0]);\n }\n\n private async appendMessage(message: StoredMessage): Promise<void> {\n await this.client.appendEvent({\n sessionId: this.sessionId,\n messages: message,\n });\n }\n\n /**\n * Method to delete all messages from the Firestore collection associated\n * with the current session.\n */\n public async clear(): Promise<void> {\n const eventIds = await this.client\n .queryEvents({\n sessionId: this.sessionId,\n })\n .then(({ events = [] }) => events.map((event: any) => event.event_id));\n\n await Promise.all(\n eventIds.map((id: string) => {\n return this.client.deleteEvent({\n sessionId: this.sessionId,\n eventId: id,\n });\n })\n );\n\n await this.client.deleteSession({\n sessionId: this.sessionId,\n });\n }\n}\n\n"],"mappings":"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","names":["z","clientTools"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cloudbase/agent-adapter-langchain",
3
- "version": "0.0.2",
3
+ "version": "0.0.3",
4
4
  "description": "LangChain adapter for AG-Kit agents",
5
5
  "files": [
6
6
  "dist/",
@@ -39,14 +39,14 @@
39
39
  "@langchain/core": "^1.0.2",
40
40
  "langchain": "^1.0.2",
41
41
  "zod": "^3.25.0 || ^4.0.0",
42
- "@cloudbase/agent-adapter-langgraph": "0.0.2",
43
- "@cloudbase/agent-tools": "0.0.2",
44
- "@cloudbase/agent-agents": "0.0.2"
42
+ "@cloudbase/agent-tools": "0.0.3",
43
+ "@cloudbase/agent-agents": "0.0.3",
44
+ "@cloudbase/agent-adapter-langgraph": "0.0.3"
45
45
  },
46
46
  "peerDependencies": {
47
47
  "zod": "^3.25.0 || ^4.0.0",
48
- "@cloudbase/agent-agents": "0.0.2",
49
- "@cloudbase/agent-adapter-langgraph": "0.0.2"
48
+ "@cloudbase/agent-agents": "0.0.3",
49
+ "@cloudbase/agent-adapter-langgraph": "0.0.3"
50
50
  },
51
51
  "scripts": {
52
52
  "test": "echo \"Error: no test specified\" && exit 1",