@langgraph-js/pure-graph 2.1.3 → 2.1.4
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/dist/adapter/hono/index.js +1 -1
- package/dist/adapter/nextjs/index.js +1 -1
- package/dist/{createEndpoint-CUa8K3DJ.js → createEndpoint-DR0yqiXl.js} +3 -2
- package/dist/{createEndpoint-CUa8K3DJ.js.map → createEndpoint-DR0yqiXl.js.map} +1 -1
- package/dist/index.js +1 -1
- package/dist/{queue-BJCR5ba5.js → queue-CBIF3No6.js} +2 -2
- package/dist/{queue-BJCR5ba5.js.map → queue-CBIF3No6.js.map} +1 -1
- package/dist/{router-B-kkqXdS.js → router-BUscrJnK.js} +2 -2
- package/dist/{router-B-kkqXdS.js.map → router-BUscrJnK.js.map} +1 -1
- package/package.json +1 -1
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { Hono } from 'hono';
|
|
2
2
|
import { zValidator } from '@hono/zod-validator';
|
|
3
|
-
import { c as createEndpoint, s as serialiseAsDict } from '../../createEndpoint-
|
|
3
|
+
import { c as createEndpoint, s as serialiseAsDict } from '../../createEndpoint-DR0yqiXl.js';
|
|
4
4
|
import { A as AssistantsSearchSchema, a as AssistantGraphQuerySchema, T as ThreadIdParamSchema, R as RunStreamPayloadSchema, b as RunListQuerySchema, c as RunIdParamSchema, d as RunCancelQuerySchema, e as ThreadStateUpdate, f as ThreadCreatePayloadSchema, g as ThreadSearchPayloadSchema } from '../../zod-C5lbZYj6.js';
|
|
5
5
|
import camelcaseKeys from 'camelcase-keys';
|
|
6
6
|
import { streamSSE } from 'hono/streaming';
|
|
@@ -2,7 +2,7 @@ async function ensureInitialized(attachGraphPromise) {
|
|
|
2
2
|
if (globalThis.LG_INIT_PROMISE === void 0) {
|
|
3
3
|
globalThis.LG_INIT_PROMISE = (async () => {
|
|
4
4
|
await attachGraphPromise();
|
|
5
|
-
const { GET, POST, DELETE } = await import('../../router-
|
|
5
|
+
const { GET, POST, DELETE } = await import('../../router-BUscrJnK.js');
|
|
6
6
|
return {
|
|
7
7
|
GET,
|
|
8
8
|
POST,
|
|
@@ -1274,7 +1274,7 @@ const createMessageQueue = async () => {
|
|
|
1274
1274
|
let q;
|
|
1275
1275
|
if (process.env.REDIS_URL) {
|
|
1276
1276
|
console.debug("LG | Using redis as stream queue");
|
|
1277
|
-
const { RedisStreamQueue } = await import('./queue-
|
|
1277
|
+
const { RedisStreamQueue } = await import('./queue-CBIF3No6.js');
|
|
1278
1278
|
q = RedisStreamQueue;
|
|
1279
1279
|
} else {
|
|
1280
1280
|
q = MemoryStreamQueue;
|
|
@@ -1321,6 +1321,7 @@ class LangGraphGlobal {
|
|
|
1321
1321
|
LangGraphGlobal.globalCheckPointer = globalCheckPointer;
|
|
1322
1322
|
LangGraphGlobal.globalThreadsManager = globalThreadsManager;
|
|
1323
1323
|
})();
|
|
1324
|
+
return LangGraphGlobal.isInitialized;
|
|
1324
1325
|
}
|
|
1325
1326
|
}
|
|
1326
1327
|
|
|
@@ -1565,4 +1566,4 @@ const createEndpoint = async () => {
|
|
|
1565
1566
|
};
|
|
1566
1567
|
|
|
1567
1568
|
export { AssistantEndpoint as A, BaseStreamQueue as B, CancelEventMessage as C, LangGraphGlobal as L, createEndpoint as c, registerGraph as r, serialiseAsDict as s };
|
|
1568
|
-
//# sourceMappingURL=createEndpoint-
|
|
1569
|
+
//# sourceMappingURL=createEndpoint-DR0yqiXl.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"createEndpoint-CUa8K3DJ.js","sources":["../src/utils/getLangGraphCommand.ts","../src/graph/stringify.ts","../src/queue/JsonPlusSerializer.ts","../src/queue/stream_queue.ts","../src/queue/event_message.ts","../src/storage/memory/queue.ts","../src/utils/getGraph.ts","../src/storage/memory/threads.ts","../src/storage/sqlite/threads.ts","../src/storage/pg/threads.ts","../src/storage/index.ts","../src/global.ts","../src/graph/stream.ts","../src/createEndpoint.ts"],"sourcesContent":["import { Command, Send } from '@langchain/langgraph';\nimport { Command as ClientCommand } from '@langgraph-js/sdk';\nexport interface RunSend {\n node: string;\n input?: unknown;\n}\n\nexport interface RunCommand extends ClientCommand {}\n\nexport const getLangGraphCommand = (command: RunCommand) => {\n let goto = command.goto != null && !Array.isArray(command.goto) ? [command.goto] : command.goto;\n\n return new Command({\n goto: goto?.map((item: string | RunSend) => {\n if (typeof item !== 'string') return new Send(item.node, item.input);\n return item;\n }),\n update: command.update ?? undefined,\n resume: command.resume,\n });\n};\n","/* eslint-disable */\n// @ts-nocheck\n\n// Stringify that can handle circular references.\n// Inlined due to ESM import issues\n// Source: https://www.npmjs.com/package/fast-safe-stringify\n\nvar LIMIT_REPLACE_NODE = '[...]';\nvar CIRCULAR_REPLACE_NODE = '[Circular]';\n\nvar arr = [];\nvar replacerStack = [];\n\nfunction defaultOptions() {\n return {\n depthLimit: Number.MAX_SAFE_INTEGER,\n edgesLimit: Number.MAX_SAFE_INTEGER,\n };\n}\n\n// Regular stringify\nexport function stringify(obj, replacer?, spacer?, options?) {\n if (typeof options === 'undefined') {\n options = defaultOptions();\n }\n\n decirc(obj, '', 0, [], undefined, 0, options);\n var res;\n try {\n if (replacerStack.length === 0) {\n res = JSON.stringify(obj, replacer, spacer);\n } else {\n res = JSON.stringify(obj, replaceGetterValues(replacer), spacer);\n }\n } catch (_) {\n return JSON.stringify('[unable to serialize, circular reference is too complex to analyze]');\n } finally {\n while (arr.length !== 0) {\n var part = arr.pop();\n if (part.length === 4) {\n Object.defineProperty(part[0], part[1], part[3]);\n } else {\n part[0][part[1]] = part[2];\n }\n }\n }\n return res;\n}\n\nfunction setReplace(replace, val, k, parent) {\n var propertyDescriptor = Object.getOwnPropertyDescriptor(parent, k);\n if (propertyDescriptor.get !== undefined) {\n if (propertyDescriptor.configurable) {\n Object.defineProperty(parent, k, { value: replace });\n arr.push([parent, k, val, propertyDescriptor]);\n } else {\n replacerStack.push([val, k, replace]);\n }\n } else {\n parent[k] = replace;\n arr.push([parent, k, val]);\n }\n}\n\nfunction decirc(val, k, edgeIndex, stack, parent, depth, options) {\n depth += 1;\n var i;\n if (typeof val === 'object' && val !== null) {\n for (i = 0; i < stack.length; i++) {\n if (stack[i] === val) {\n setReplace(CIRCULAR_REPLACE_NODE, val, k, parent);\n return;\n }\n }\n\n if (typeof options.depthLimit !== 'undefined' && depth > options.depthLimit) {\n setReplace(LIMIT_REPLACE_NODE, val, k, parent);\n return;\n }\n\n if (typeof options.edgesLimit !== 'undefined' && edgeIndex + 1 > options.edgesLimit) {\n setReplace(LIMIT_REPLACE_NODE, val, k, parent);\n return;\n }\n\n stack.push(val);\n // Optimize for Arrays. Big arrays could kill the performance otherwise!\n if (Array.isArray(val)) {\n for (i = 0; i < val.length; i++) {\n decirc(val[i], i, i, stack, val, depth, options);\n }\n } else {\n var keys = Object.keys(val);\n for (i = 0; i < keys.length; i++) {\n var key = keys[i];\n decirc(val[key], key, i, stack, val, depth, options);\n }\n }\n stack.pop();\n }\n}\n\n// Stable-stringify\nfunction compareFunction(a, b) {\n if (a < b) {\n return -1;\n }\n if (a > b) {\n return 1;\n }\n return 0;\n}\n\nfunction deterministicStringify(obj, replacer, spacer, options) {\n if (typeof options === 'undefined') {\n options = defaultOptions();\n }\n\n var tmp = deterministicDecirc(obj, '', 0, [], undefined, 0, options) || obj;\n var res;\n try {\n if (replacerStack.length === 0) {\n res = JSON.stringify(tmp, replacer, spacer);\n } else {\n res = JSON.stringify(tmp, replaceGetterValues(replacer), spacer);\n }\n } catch (_) {\n return JSON.stringify('[unable to serialize, circular reference is too complex to analyze]');\n } finally {\n // Ensure that we restore the object as it was.\n while (arr.length !== 0) {\n var part = arr.pop();\n if (part.length === 4) {\n Object.defineProperty(part[0], part[1], part[3]);\n } else {\n part[0][part[1]] = part[2];\n }\n }\n }\n return res;\n}\n\nfunction deterministicDecirc(val, k, edgeIndex, stack, parent, depth, options) {\n depth += 1;\n var i;\n if (typeof val === 'object' && val !== null) {\n for (i = 0; i < stack.length; i++) {\n if (stack[i] === val) {\n setReplace(CIRCULAR_REPLACE_NODE, val, k, parent);\n return;\n }\n }\n try {\n if (typeof val.toJSON === 'function') {\n return;\n }\n } catch (_) {\n return;\n }\n\n if (typeof options.depthLimit !== 'undefined' && depth > options.depthLimit) {\n setReplace(LIMIT_REPLACE_NODE, val, k, parent);\n return;\n }\n\n if (typeof options.edgesLimit !== 'undefined' && edgeIndex + 1 > options.edgesLimit) {\n setReplace(LIMIT_REPLACE_NODE, val, k, parent);\n return;\n }\n\n stack.push(val);\n // Optimize for Arrays. Big arrays could kill the performance otherwise!\n if (Array.isArray(val)) {\n for (i = 0; i < val.length; i++) {\n deterministicDecirc(val[i], i, i, stack, val, depth, options);\n }\n } else {\n // Create a temporary object in the required way\n var tmp = {};\n var keys = Object.keys(val).sort(compareFunction);\n for (i = 0; i < keys.length; i++) {\n var key = keys[i];\n deterministicDecirc(val[key], key, i, stack, val, depth, options);\n tmp[key] = val[key];\n }\n if (typeof parent !== 'undefined') {\n arr.push([parent, k, val]);\n parent[k] = tmp;\n } else {\n return tmp;\n }\n }\n stack.pop();\n }\n}\n\n// wraps replacer function to handle values we couldn't replace\n// and mark them as replaced value\nfunction replaceGetterValues(replacer) {\n replacer =\n typeof replacer !== 'undefined'\n ? replacer\n : function (k, v) {\n return v;\n };\n return function (key, val) {\n if (replacerStack.length > 0) {\n for (var i = 0; i < replacerStack.length; i++) {\n var part = replacerStack[i];\n if (part[1] === key && part[0] === val) {\n val = part[2];\n replacerStack.splice(i, 1);\n break;\n }\n }\n }\n return replacer.call(this, key, val);\n };\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\n/* eslint-disable no-instanceof/no-instanceof */\nimport { load } from '@langchain/core/load';\nimport type { SerializerProtocol } from '@langchain/langgraph-checkpoint';\nimport { stringify } from '../graph/stringify.js';\n\nfunction isLangChainSerializedObject(value: Record<string, unknown>) {\n return value !== null && value.lc === 1 && value.type === 'constructor' && Array.isArray(value.id);\n}\n\n/**\n * The replacer in stringify does not allow delegation to built-in LangChain\n * serialization methods, and instead immediately calls `.toJSON()` and\n * continues to stringify subfields.\n *\n * We therefore must start from the most nested elements in the input and\n * deserialize upwards rather than top-down.\n */\nasync function _reviver(value: any): Promise<any> {\n if (value && typeof value === 'object') {\n if (Array.isArray(value)) {\n const revivedArray = await Promise.all(value.map((item) => _reviver(item)));\n return revivedArray;\n } else {\n const revivedObj: any = {};\n for (const [k, v] of Object.entries(value)) {\n revivedObj[k] = await _reviver(v);\n }\n\n if (revivedObj.lc === 2 && revivedObj.type === 'undefined') {\n return undefined;\n } else if (revivedObj.lc === 2 && revivedObj.type === 'constructor' && Array.isArray(revivedObj.id)) {\n try {\n const constructorName = revivedObj.id[revivedObj.id.length - 1];\n let constructor: any;\n\n switch (constructorName) {\n case 'Set':\n constructor = Set;\n break;\n case 'Map':\n constructor = Map;\n break;\n case 'RegExp':\n constructor = RegExp;\n break;\n case 'Error':\n constructor = Error;\n break;\n default:\n return revivedObj;\n }\n if (revivedObj.method) {\n return (constructor as any)[revivedObj.method](...(revivedObj.args || []));\n } else {\n return new (constructor as any)(...(revivedObj.args || []));\n }\n } catch (error) {\n return revivedObj;\n }\n } else if (isLangChainSerializedObject(revivedObj)) {\n return load(JSON.stringify(revivedObj));\n }\n\n return revivedObj;\n }\n }\n return value;\n}\n\nfunction _encodeConstructorArgs(\n // eslint-disable-next-line @typescript-eslint/ban-types\n constructor: Function,\n method?: string,\n args?: any[],\n kwargs?: Record<string, any>,\n): object {\n return {\n lc: 2,\n type: 'constructor',\n id: [constructor.name],\n method: method ?? null,\n args: args ?? [],\n kwargs: kwargs ?? {},\n };\n}\n\nfunction _default(obj: any): any {\n if (obj === undefined) {\n return {\n lc: 2,\n type: 'undefined',\n };\n } else if (obj instanceof Set || obj instanceof Map) {\n return _encodeConstructorArgs(obj.constructor, undefined, [Array.from(obj)]);\n } else if (obj instanceof RegExp) {\n return _encodeConstructorArgs(RegExp, undefined, [obj.source, obj.flags]);\n } else if (obj instanceof Error) {\n return _encodeConstructorArgs(obj.constructor, undefined, [obj.message]);\n // TODO: Remove special case\n } else if (obj?.lg_name === 'Send') {\n return {\n node: obj.node,\n args: obj.args,\n };\n } else {\n return obj;\n }\n}\n\nexport class JsonPlusSerializer implements SerializerProtocol {\n protected _dumps(obj: any): Uint8Array {\n const encoder = new TextEncoder();\n return encoder.encode(\n stringify(obj, (_: string, value: any) => {\n return _default(value);\n }),\n );\n }\n\n async dumpsTyped(obj: any): Promise<[string, Uint8Array]> {\n if (obj instanceof Uint8Array) {\n return ['bytes', obj];\n } else {\n return ['json', this._dumps(obj)];\n }\n }\n\n protected async _loads(data: string): Promise<any> {\n const parsed = JSON.parse(data);\n return _reviver(parsed);\n }\n\n async loadsTyped(type: string, data: Uint8Array | string): Promise<any> {\n if (type === 'bytes') {\n return typeof data === 'string' ? new TextEncoder().encode(data) : data;\n } else if (type === 'json') {\n return this._loads(typeof data === 'string' ? data : new TextDecoder().decode(data));\n } else {\n throw new Error(`Unknown serialization type: ${type}`);\n }\n }\n}\n","import { EventEmitter } from 'eventemitter3';\nimport { JsonPlusSerializer } from './JsonPlusSerializer.js';\nimport { EventMessage } from './event_message.js';\n\n/**\n * 流队列事件接口\n * Stream queue events interface\n */\ninterface StreamQueueEvents<T extends EventMessage> {\n /** 数据事件:当有新数据时触发 / Data event: triggered when new data arrives */\n data: (data: T) => void;\n /** 其他事件 / Other events */\n [key: string]: ((...args: any[]) => void) | undefined;\n}\n\n/**\n * 基础流队列类\n * Base stream queue class\n */\nexport class BaseStreamQueue extends EventEmitter<StreamQueueEvents<EventMessage>> {\n /** 序列化器实例 / Serializer instance */\n serializer = new JsonPlusSerializer();\n\n /**\n * 构造函数\n * Constructor\n * @param compressMessages 是否压缩消息 / Whether to compress messages\n */\n constructor(readonly id: string, readonly compressMessages: boolean = true) {\n super();\n }\n\n /**\n * 编码数据为 Uint8Array\n * Encode data to Uint8Array\n * @param message 要编码的消息 / Message to encode\n * @returns 编码后的 Uint8Array / Encoded Uint8Array\n */\n async encodeData(message: EventMessage): Promise<Uint8Array> {\n const [_, serializedMessage] = await this.serializer.dumpsTyped(message);\n return serializedMessage;\n }\n\n /**\n * 解码数据为 EventMessage\n * Decode data to EventMessage\n * @param serializedMessage 要解码的消息 / Message to decode\n * @returns 解码后的 EventMessage / Decoded EventMessage\n */\n async decodeData(serializedMessage: string | Uint8Array): Promise<EventMessage> {\n const message = (await this.serializer.loadsTyped('json', serializedMessage)) as EventMessage;\n return message;\n }\n}\n\n/**\n * 基础流队列接口\n * Base stream queue interface\n */\nexport interface BaseStreamQueueInterface {\n id: string;\n /** 是否压缩消息 / Whether to compress messages */\n compressMessages: boolean;\n /**\n * 推送数据项到队列\n * Push item to queue\n * @param item 要推送的数据项 / Item to push\n */\n push(item: EventMessage): Promise<void>;\n /** 获取所有数据 / Get all data */\n getAll(): Promise<EventMessage[]>;\n /** 清空队列 / Clear queue */\n clear(): void;\n /**\n * 监听数据变化\n * Listen for data changes\n * @param listener 数据变化监听器 / Data change listener\n * @returns 取消监听函数 / Unsubscribe function\n */\n onDataReceive(): AsyncGenerator<EventMessage, void, unknown>;\n /** 取消信号控制器 / Cancel signal controller */\n cancelSignal: AbortController;\n /** 取消操作 / Cancel operation */\n cancel(): void;\n}\n\n/**\n * StreamQueue 管理器,通过 id 管理多个队列实例\n * StreamQueue manager, manages multiple queue instances by id\n */\nexport class StreamQueueManager<Q extends BaseStreamQueueInterface> {\n /** 存储队列实例的 Map / Map storing queue instances */\n private queues: Map<string, Q> = new Map();\n /** 默认是否压缩消息 / Default compress messages setting */\n private defaultCompressMessages: boolean;\n /** 队列构造函数 / Queue constructor */\n private queueConstructor: new (queueId: string) => Q;\n\n /**\n * 构造函数\n * Constructor\n * @param queueConstructor 队列构造函数 / Queue constructor\n * @param options 配置选项 / Configuration options\n */\n constructor(\n queueConstructor: new (id: string) => Q,\n options: {\n /** 默认是否压缩消息 / Default compress messages setting */\n defaultCompressMessages?: boolean;\n } = {},\n ) {\n this.defaultCompressMessages = options.defaultCompressMessages ?? true;\n this.queueConstructor = queueConstructor;\n }\n\n /**\n * 创建指定 id 的队列\n * Create queue with specified id\n * @param id 队列 ID / Queue ID\n * @param compressMessages 是否压缩消息 / Whether to compress messages\n * @returns 创建的队列实例 / Created queue instance\n */\n createQueue(id: string, compressMessages?: boolean): Q {\n const compress = compressMessages ?? this.defaultCompressMessages;\n this.queues.set(id, new this.queueConstructor(id));\n return this.queues.get(id)!;\n }\n\n /**\n * 获取或创建指定 id 的队列\n * Get or create queue with specified id\n * @param id 队列 ID / Queue ID\n * @param compressMessages 是否压缩消息,默认为构造函数中的默认值 / Whether to compress messages, defaults to constructor default\n * @returns StreamQueue 实例 / StreamQueue instance\n */\n getQueue(id: string): Q {\n const queue = this.queues.get(id);\n if (!queue) {\n throw new Error(`Queue with id '${id}' does not exist`);\n }\n return queue;\n }\n\n /**\n * 取消指定 id 的队列\n * Cancel queue with specified id\n * @param id 队列 ID / Queue ID\n */\n cancelQueue(id: string): void {\n const queue = this.queues.get(id);\n if (queue) {\n queue.cancel();\n this.removeQueue(id);\n }\n }\n /**\n * 向指定 id 的队列推送数据\n * Push data to queue with specified id\n * @param id 队列 ID / Queue ID\n * @param item 要推送的数据项 / Item to push\n * @param compressMessages 是否压缩消息,默认为构造函数中的默认值 / Whether to compress messages, defaults to constructor default\n */\n async pushToQueue(id: string, item: EventMessage, compressMessages?: boolean): Promise<void> {\n const queue = this.getQueue(id);\n await queue.push(item);\n }\n\n /**\n * 获取指定 id 队列中的所有数据\n * Get all data from queue with specified id\n * @param id 队列 ID / Queue ID\n * @returns 队列中的所有数据 / All data in the queue\n */\n async getQueueData(id: string): Promise<EventMessage[]> {\n const queue = this.queues.get(id);\n if (!queue) {\n throw new Error(`Queue with id '${id}' does not exist`);\n }\n return await queue.getAll();\n }\n\n /**\n * 清空指定 id 的队列\n * Clear queue with specified id\n * @param id 队列 ID / Queue ID\n */\n clearQueue(id: string): void {\n const queue = this.queues.get(id);\n if (queue) {\n queue.clear();\n }\n }\n\n /**\n * 删除指定 id 的队列\n * Remove queue with specified id\n * @param id 队列 ID / Queue ID\n * @returns 是否成功删除 / Whether successfully deleted\n */\n removeQueue(id: string) {\n setTimeout(() => {\n return this.queues.delete(id);\n }, 500);\n }\n\n /**\n * 获取所有队列的 ID\n * Get all queue IDs\n * @returns 所有队列 ID 的数组 / Array of all queue IDs\n */\n getAllQueueIds(): string[] {\n return Array.from(this.queues.keys());\n }\n\n /**\n * 获取所有队列及其数据的快照\n * Get snapshot of all queues and their data\n * @returns 包含所有队列数据的结果对象 / Result object containing all queue data\n */\n async getAllQueuesData(): Promise<Record<string, EventMessage[]>> {\n const result: Record<string, EventMessage[]> = {};\n for (const [id, queue] of this.queues) {\n result[id] = await queue.getAll();\n }\n return result;\n }\n\n /**\n * 清空所有队列\n * Clear all queues\n */\n clearAllQueues(): void {\n for (const queue of this.queues.values()) {\n queue.clear();\n }\n }\n}\n","export class EventMessage {\n event: string;\n data: unknown;\n id?: string;\n constructor(event: string, data?: unknown) {\n this.event = event;\n this.data = data;\n }\n}\n\nexport class CancelEventMessage extends EventMessage {\n constructor() {\n super('__system_cancel__', 'user cancel this run');\n }\n}\n\nexport class StreamEndEventMessage extends EventMessage {\n constructor() {\n super('__stream_end__', 'stream end');\n }\n}\n\nexport class StreamErrorEventMessage extends EventMessage {\n public constructor(error: Error) {\n super('__stream_error__', {\n error: error.name,\n message: error.message,\n });\n }\n}\n","import { CancelEventMessage, EventMessage } from '../../queue/event_message.js';\nimport { BaseStreamQueue } from '../../queue/stream_queue.js';\nimport { BaseStreamQueueInterface } from '../../queue/stream_queue.js';\n/** 内存实现的消息队列,用于存储消息 */\nexport class MemoryStreamQueue extends BaseStreamQueue implements BaseStreamQueueInterface {\n private data: EventMessage[] = [];\n async push(item: EventMessage): Promise<void> {\n const data = this.compressMessages ? ((await this.encodeData(item)) as unknown as EventMessage) : item;\n this.data.push(data);\n this.emit('dataChange', data);\n }\n\n onDataChange(listener: (data: EventMessage) => void): () => void {\n this.on('dataChange', async (item) => {\n listener(this.compressMessages ? ((await this.decodeData(item)) as EventMessage) : item);\n });\n return () => this.off('dataChange', listener);\n }\n\n /**\n * 异步生成器:支持 for await...of 方式消费队列数据\n */\n async *onDataReceive(): AsyncGenerator<EventMessage, void, unknown> {\n let queue: EventMessage[] = [];\n let pendingResolve: (() => void) | null = null;\n let isStreamEnded = false;\n const handleData = async (item: EventMessage) => {\n const data = this.compressMessages ? ((await this.decodeData(item as any)) as EventMessage) : item;\n queue.push(data);\n // 检查是否为流结束或错误信号\n if (\n data.event === '__stream_end__' ||\n data.event === '__stream_error__' ||\n data.event === '__stream_cancel__'\n ) {\n setTimeout(() => {\n isStreamEnded = true;\n if (pendingResolve) {\n pendingResolve();\n pendingResolve = null;\n }\n }, 300);\n\n if (data.event === '__stream_cancel__') {\n this.cancel();\n }\n }\n\n if (pendingResolve) {\n pendingResolve();\n pendingResolve = null;\n }\n };\n // todo 这个框架的事件监听的数据返回顺序有误\n this.on('dataChange', handleData as any);\n\n try {\n while (!isStreamEnded) {\n if (queue.length > 0) {\n for (const item of queue) {\n yield item;\n }\n queue = [];\n } else {\n await new Promise((resolve) => {\n pendingResolve = resolve as () => void;\n });\n }\n }\n } finally {\n this.off('dataChange', handleData as any);\n }\n }\n\n async getAll(): Promise<EventMessage[]> {\n return this.compressMessages\n ? ((await Promise.all(\n this.data.map((i) => this.decodeData(i as unknown as string | Uint8Array)),\n )) as unknown as EventMessage[])\n : this.data;\n }\n\n clear(): void {\n this.data = [];\n }\n public cancelSignal = new AbortController();\n cancel(): void {\n this.push(new CancelEventMessage());\n this.cancelSignal.abort('user cancel this run');\n }\n}\n","import {\n BaseCheckpointSaver,\n BaseStore,\n CompiledGraph,\n CompiledStateGraph,\n LangGraphRunnableConfig,\n} from '@langchain/langgraph';\nimport { LangGraphGlobal } from '../global';\n\nexport type CompiledGraphFactory<T extends string> = (config: {\n configurable?: Record<string, unknown>;\n}) => Promise<CompiledGraph<T>>;\n\nexport const GRAPHS: Record<string, CompiledGraph<string> | CompiledGraphFactory<string>> = {};\n\nexport async function registerGraph(\n graphId: string,\n graph: CompiledGraph<any> | CompiledStateGraph<any, any, any, any, any, any, any> | CompiledGraphFactory<any>,\n) {\n GRAPHS[graphId] = graph;\n}\nexport async function getGraph(\n graphId: string,\n config: LangGraphRunnableConfig | undefined,\n options?: {\n checkpointer?: BaseCheckpointSaver | null;\n store?: BaseStore;\n },\n) {\n if (!GRAPHS[graphId]) throw new Error(`Graph \"${graphId}\" not found`);\n\n const compiled =\n typeof GRAPHS[graphId] === 'function' ? await GRAPHS[graphId](config ?? { configurable: {} }) : GRAPHS[graphId];\n\n if (typeof options?.checkpointer !== 'undefined') {\n compiled.checkpointer = options?.checkpointer ?? LangGraphGlobal.globalCheckPointer;\n } else {\n compiled.checkpointer = LangGraphGlobal.globalCheckPointer;\n }\n\n compiled.store = options?.store ?? undefined;\n\n return compiled;\n}\n","import { BaseThreadsManager } from '../../threads/index.js';\nimport { Command, Config, Metadata, OnConflictBehavior, Run, Thread, ThreadStatus } from '@langgraph-js/sdk';\nimport { getGraph } from '../../utils/getGraph.js';\nimport { serialiseAsDict } from '../../graph/stream.js';\nimport { RunStatus, SortOrder, ThreadSortBy } from '../../types';\n\nexport class MemoryThreadsManager<ValuesType = unknown> implements BaseThreadsManager<ValuesType> {\n private threads: Thread<ValuesType>[] = [];\n async setup() {\n return;\n }\n\n async create(payload?: {\n metadata?: Metadata;\n threadId?: string;\n ifExists?: OnConflictBehavior;\n graphId?: string;\n supersteps?: Array<{ updates: Array<{ values: unknown; command?: Command; asNode: string }> }>;\n }): Promise<Thread<ValuesType>> {\n const threadId = payload?.threadId || crypto.randomUUID();\n if (payload?.ifExists === 'raise' && this.threads.some((t) => t.thread_id === threadId)) {\n throw new Error(`Thread with ID ${threadId} already exists.`);\n }\n\n const thread: Thread<ValuesType> = {\n thread_id: threadId,\n created_at: new Date().toISOString(),\n updated_at: new Date().toISOString(),\n metadata: payload?.metadata || {},\n status: 'idle',\n values: null as unknown as ValuesType,\n interrupts: {},\n };\n this.threads.push(thread);\n return thread;\n }\n\n async search(query?: {\n metadata?: Metadata;\n limit?: number;\n offset?: number;\n status?: ThreadStatus;\n sortBy?: ThreadSortBy;\n sortOrder?: SortOrder;\n }): Promise<Thread<ValuesType>[]> {\n let filteredThreads = [...this.threads];\n if (query?.status) {\n filteredThreads = filteredThreads.filter((t) => t.status === query.status);\n }\n\n if (query?.metadata) {\n for (const key in query.metadata) {\n if (Object.prototype.hasOwnProperty.call(query.metadata, key)) {\n filteredThreads = filteredThreads.filter(\n (t) => t.metadata && t.metadata[key] === query.metadata?.[key],\n );\n }\n }\n }\n\n if (query?.sortBy) {\n filteredThreads.sort((a, b) => {\n let aValue: any;\n let bValue: any;\n\n switch (query.sortBy) {\n case 'created_at':\n aValue = new Date(a.created_at).getTime();\n bValue = new Date(b.created_at).getTime();\n break;\n case 'updated_at':\n aValue = new Date(a.updated_at).getTime();\n bValue = new Date(b.updated_at).getTime();\n break;\n default:\n return 0;\n }\n\n if (query.sortOrder === 'desc') {\n return bValue - aValue;\n } else {\n return aValue - bValue;\n }\n });\n }\n\n const offset = query?.offset || 0;\n const limit = query?.limit || filteredThreads.length;\n\n return filteredThreads.slice(offset, offset + limit);\n }\n\n async get(threadId: string): Promise<Thread<ValuesType>> {\n const thread = this.threads.find((t) => t.thread_id === threadId);\n if (!thread) {\n throw new Error(`Thread with ID ${threadId} not found.`);\n }\n return thread;\n }\n async set(threadId: string, thread: Partial<Thread<ValuesType>>): Promise<void> {\n const index = this.threads.findIndex((t) => t.thread_id === threadId);\n if (index === -1) {\n throw new Error(`Thread with ID ${threadId} not found.`);\n }\n this.threads[index] = { ...this.threads[index], ...thread };\n }\n async delete(threadId: string): Promise<void> {\n const initialLength = this.threads.length;\n this.threads = this.threads.filter((t) => t.thread_id !== threadId);\n if (this.threads.length === initialLength) {\n throw new Error(`Thread with ID ${threadId} not found.`);\n }\n }\n async updateState(threadId: string, thread: Partial<Thread<ValuesType>>): Promise<Pick<Config, 'configurable'>> {\n const index = this.threads.findIndex((t) => t.thread_id === threadId) as number;\n if (index === -1) {\n throw new Error(`Thread with ID ${threadId} not found.`);\n }\n const targetThread = this.threads[index];\n if (targetThread.status === 'busy') {\n throw new Error(`Thread with ID ${threadId} is busy, can't update state.`);\n }\n this.threads[index] = { ...targetThread, values: thread.values as ValuesType };\n if (!targetThread.metadata?.graph_id) {\n throw new Error(`Thread with ID ${threadId} has no graph_id.`);\n }\n const graphId = targetThread.metadata?.graph_id as string;\n const config = {\n configurable: {\n thread_id: threadId,\n graph_id: graphId,\n },\n };\n const graph = await getGraph(graphId, config);\n const nextConfig = await graph.updateState(config, thread.values);\n const graphState = await graph.getState(config);\n await this.set(threadId, { values: JSON.parse(serialiseAsDict(graphState.values)) as ValuesType });\n return nextConfig;\n }\n runs: Run[] = [];\n async createRun(threadId: string, assistantId: string, payload?: { metadata?: Metadata }): Promise<Run> {\n const runId = crypto.randomUUID();\n const run: Run = {\n run_id: runId,\n thread_id: threadId,\n assistant_id: assistantId,\n created_at: new Date().toISOString(),\n updated_at: new Date().toISOString(),\n status: 'pending',\n metadata: payload?.metadata ?? {},\n multitask_strategy: 'reject',\n };\n this.runs.push(run);\n return run;\n }\n async listRuns(\n threadId: string,\n options?: { limit?: number; offset?: number; status?: RunStatus },\n ): Promise<Run[]> {\n let filteredRuns = [...this.runs];\n if (options?.status) {\n filteredRuns = filteredRuns.filter((r) => r.status === options.status);\n }\n if (options?.limit) {\n filteredRuns = filteredRuns.slice(options.offset || 0, (options.offset || 0) + options.limit);\n }\n return filteredRuns;\n }\n async updateRun(runId: string, run: Partial<Run>): Promise<void> {\n const index = this.runs.findIndex((r) => r.run_id === runId);\n if (index === -1) {\n throw new Error(`Run with ID ${runId} not found.`);\n }\n this.runs[index] = { ...this.runs[index], ...run };\n }\n}\n","import { BaseThreadsManager } from '../../threads/index.js';\nimport { Command, Config, Metadata, OnConflictBehavior, Run, Thread, ThreadStatus } from '@langgraph-js/sdk';\nimport type { SqliteSaver } from './checkpoint.js';\nimport type { DatabaseType } from './type.js';\nimport { getGraph } from '../../utils/getGraph.js';\nimport { serialiseAsDict } from '../../graph/stream.js';\nimport { RunStatus, SortOrder, ThreadSortBy } from '../../types';\ninterface ThreadRow {\n thread_id: string;\n created_at: string;\n updated_at: string;\n metadata: string;\n status: string;\n values: string;\n interrupts: string;\n}\n\ninterface RunRow {\n run_id: string;\n thread_id: string;\n assistant_id: string;\n created_at: string;\n updated_at: string;\n status: string;\n metadata: string;\n multitask_strategy: string;\n}\n\nexport class SQLiteThreadsManager<ValuesType = unknown> implements BaseThreadsManager<ValuesType> {\n db: DatabaseType;\n private isSetup: boolean = false;\n\n constructor(checkpointer: SqliteSaver) {\n this.db = checkpointer.db;\n }\n\n async setup() {\n if (this.isSetup) {\n return;\n }\n\n // 创建 threads 表\n this.db.exec(`\n CREATE TABLE IF NOT EXISTS threads (\n thread_id TEXT PRIMARY KEY,\n created_at TEXT NOT NULL,\n updated_at TEXT NOT NULL,\n metadata TEXT NOT NULL DEFAULT '{}',\n status TEXT NOT NULL DEFAULT 'idle',\n [values] TEXT,\n interrupts TEXT NOT NULL DEFAULT '{}'\n )\n `);\n\n // 创建 runs 表\n this.db.exec(`\n CREATE TABLE IF NOT EXISTS runs (\n run_id TEXT PRIMARY KEY,\n thread_id TEXT NOT NULL,\n assistant_id TEXT NOT NULL,\n created_at TEXT NOT NULL,\n updated_at TEXT NOT NULL,\n status TEXT NOT NULL DEFAULT 'pending',\n metadata TEXT NOT NULL DEFAULT '{}',\n multitask_strategy TEXT NOT NULL DEFAULT 'reject',\n FOREIGN KEY (thread_id) REFERENCES threads(thread_id) ON DELETE CASCADE\n )\n `);\n\n // 创建索引以提高查询性能\n this.db.exec(`CREATE INDEX IF NOT EXISTS idx_threads_status ON threads(status)`);\n this.db.exec(`CREATE INDEX IF NOT EXISTS idx_threads_created_at ON threads(created_at)`);\n this.db.exec(`CREATE INDEX IF NOT EXISTS idx_threads_updated_at ON threads(updated_at)`);\n this.db.exec(`CREATE INDEX IF NOT EXISTS idx_runs_thread_id ON runs(thread_id)`);\n this.db.exec(`CREATE INDEX IF NOT EXISTS idx_runs_status ON runs(status)`);\n\n this.isSetup = true;\n }\n\n async create(payload?: {\n metadata?: Metadata;\n threadId?: string;\n ifExists?: OnConflictBehavior;\n graphId?: string;\n supersteps?: Array<{ updates: Array<{ values: unknown; command?: Command; asNode: string }> }>;\n }): Promise<Thread<ValuesType>> {\n const threadId = payload?.threadId || crypto.randomUUID();\n\n // 检查线程是否已存在\n if (payload?.ifExists === 'raise') {\n const existingThread = this.db.prepare('SELECT thread_id FROM threads WHERE thread_id = ?').get(threadId);\n if (existingThread) {\n throw new Error(`Thread with ID ${threadId} already exists.`);\n }\n }\n\n const now = new Date().toISOString();\n const metadata = JSON.stringify(payload?.metadata || {});\n const interrupts = JSON.stringify({});\n\n const thread: Thread<ValuesType> = {\n thread_id: threadId,\n created_at: now,\n updated_at: now,\n metadata: payload?.metadata || {},\n status: 'idle',\n values: null as unknown as ValuesType,\n interrupts: {},\n };\n\n // 插入到数据库\n this.db\n .prepare(\n `\n INSERT INTO threads (thread_id, created_at, updated_at, metadata, status, [values], interrupts)\n VALUES (?, ?, ?, ?, ?, ?, ?)\n `,\n )\n .run(threadId, now, now, metadata, 'idle', null, interrupts);\n\n return thread;\n }\n\n async search(query?: {\n metadata?: Metadata;\n limit?: number;\n offset?: number;\n status?: ThreadStatus;\n sortBy?: ThreadSortBy;\n sortOrder?: SortOrder;\n }): Promise<Thread<ValuesType>[]> {\n let sql = 'SELECT * FROM threads';\n const whereConditions: string[] = [];\n const params: any[] = [];\n\n // 构建 WHERE 条件\n if (query?.status) {\n whereConditions.push('status = ?');\n params.push(query.status);\n }\n\n if (query?.metadata) {\n for (const [key, value] of Object.entries(query.metadata)) {\n whereConditions.push(`json_extract(metadata, '$.${key}') = ?`);\n params.push(JSON.stringify(value));\n }\n }\n\n if (whereConditions.length > 0) {\n sql += ' WHERE ' + whereConditions.join(' AND ');\n }\n\n // 添加排序\n if (query?.sortBy) {\n sql += ` ORDER BY ${query.sortBy}`;\n if (query.sortOrder === 'desc') {\n sql += ' DESC';\n } else {\n sql += ' ASC';\n }\n }\n\n // 添加分页\n if (query?.limit) {\n sql += ` LIMIT ${query.limit}`;\n if (query?.offset) {\n sql += ` OFFSET ${query.offset}`;\n }\n }\n\n const rows = this.db.prepare(sql).all(...params) as ThreadRow[];\n\n return rows.map((row) => ({\n thread_id: row.thread_id,\n created_at: row.created_at,\n updated_at: row.updated_at,\n metadata: JSON.parse(row.metadata),\n status: row.status as ThreadStatus,\n values: row.values ? JSON.parse(row.values) : (null as unknown as ValuesType),\n interrupts: JSON.parse(row.interrupts),\n }));\n }\n\n async get(threadId: string): Promise<Thread<ValuesType>> {\n const row = this.db.prepare('SELECT * FROM threads WHERE thread_id = ?').get(threadId) as ThreadRow;\n if (!row) {\n throw new Error(`Thread with ID ${threadId} not found.`);\n }\n\n return {\n thread_id: row.thread_id,\n created_at: row.created_at,\n updated_at: row.updated_at,\n metadata: JSON.parse(row.metadata),\n status: row.status as ThreadStatus,\n values: row.values ? JSON.parse(row.values) : (null as unknown as ValuesType),\n interrupts: JSON.parse(row.interrupts),\n };\n }\n async set(threadId: string, thread: Partial<Thread<ValuesType>>): Promise<void> {\n // 检查线程是否存在\n const existingThread = this.db.prepare('SELECT thread_id FROM threads WHERE thread_id = ?').get(threadId);\n if (!existingThread) {\n throw new Error(`Thread with ID ${threadId} not found.`);\n }\n\n const updateFields: string[] = [];\n const values: any[] = [];\n\n if (thread.metadata !== undefined) {\n updateFields.push('metadata = ?');\n values.push(JSON.stringify(thread.metadata));\n }\n\n if (thread.status !== undefined) {\n updateFields.push('status = ?');\n values.push(thread.status);\n }\n\n if (thread.values !== undefined) {\n updateFields.push('[values] = ?');\n values.push(thread.values ? JSON.stringify(thread.values) : null);\n }\n\n if (thread.interrupts !== undefined) {\n updateFields.push('interrupts = ?');\n values.push(JSON.stringify(thread.interrupts));\n }\n\n // 总是更新 updated_at\n updateFields.push('updated_at = ?');\n values.push(new Date().toISOString());\n\n if (updateFields.length > 0) {\n values.push(threadId);\n this.db\n .prepare(\n `\n UPDATE threads \n SET ${updateFields.join(', ')} \n WHERE thread_id = ?\n `,\n )\n .run(...values);\n }\n }\n async updateState(threadId: string, thread: Partial<Thread<ValuesType>>): Promise<Pick<Config, 'configurable'>> {\n // 从数据库查询线程信息\n const row = this.db.prepare('SELECT * FROM threads WHERE thread_id = ?').get(threadId) as ThreadRow;\n if (!row) {\n throw new Error(`Thread with ID ${threadId} not found.`);\n }\n\n const targetThread = {\n thread_id: row.thread_id,\n created_at: row.created_at,\n updated_at: row.updated_at,\n metadata: JSON.parse(row.metadata),\n status: row.status as ThreadStatus,\n values: row.values ? JSON.parse(row.values) : (null as unknown as ValuesType),\n interrupts: JSON.parse(row.interrupts),\n };\n\n if (targetThread.status === 'busy') {\n throw new Error(`Thread with ID ${threadId} is busy, can't update state.`);\n }\n\n if (!targetThread.metadata?.graph_id) {\n throw new Error(`Thread with ID ${threadId} has no graph_id.`);\n }\n const graphId = targetThread.metadata?.graph_id as string;\n const config = {\n configurable: {\n thread_id: threadId,\n graph_id: graphId,\n },\n };\n const graph = await getGraph(graphId, config);\n const nextConfig = await graph.updateState(config, thread.values);\n const graphState = await graph.getState(config);\n await this.set(threadId, { values: JSON.parse(serialiseAsDict(graphState.values)) as ValuesType });\n return nextConfig;\n }\n async delete(threadId: string): Promise<void> {\n const result = this.db.prepare('DELETE FROM threads WHERE thread_id = ?').run(threadId);\n if (result.changes === 0) {\n throw new Error(`Thread with ID ${threadId} not found.`);\n }\n }\n async createRun(threadId: string, assistantId: string, payload?: { metadata?: Metadata }): Promise<Run> {\n const runId = crypto.randomUUID();\n const now = new Date().toISOString();\n const metadata = JSON.stringify(payload?.metadata ?? {});\n\n const run: Run = {\n run_id: runId,\n thread_id: threadId,\n assistant_id: assistantId,\n created_at: now,\n updated_at: now,\n status: 'pending',\n metadata: payload?.metadata ?? {},\n multitask_strategy: 'reject',\n };\n\n // 插入到数据库\n this.db\n .prepare(\n `\n INSERT INTO runs (run_id, thread_id, assistant_id, created_at, updated_at, status, metadata, multitask_strategy)\n VALUES (?, ?, ?, ?, ?, ?, ?, ?)\n `,\n )\n .run(runId, threadId, assistantId, now, now, 'pending', metadata, 'reject');\n\n return run;\n }\n async listRuns(\n threadId: string,\n options?: { limit?: number; offset?: number; status?: RunStatus },\n ): Promise<Run[]> {\n let sql = 'SELECT * FROM runs WHERE thread_id = ?';\n const params: any[] = [threadId];\n\n if (options?.status) {\n sql += ' AND status = ?';\n params.push(options.status);\n }\n\n sql += ' ORDER BY created_at DESC';\n\n if (options?.limit) {\n sql += ` LIMIT ${options.limit}`;\n if (options?.offset) {\n sql += ` OFFSET ${options.offset}`;\n }\n }\n\n const rows = this.db.prepare(sql).all(...params) as RunRow[];\n\n return rows.map((row) => ({\n run_id: row.run_id,\n thread_id: row.thread_id,\n assistant_id: row.assistant_id,\n created_at: row.created_at,\n updated_at: row.updated_at,\n status: row.status as RunStatus,\n metadata: JSON.parse(row.metadata),\n multitask_strategy: row.multitask_strategy as 'reject',\n }));\n }\n async updateRun(runId: string, run: Partial<Run>): Promise<void> {\n // 检查运行是否存在\n const existingRun = this.db.prepare('SELECT run_id FROM runs WHERE run_id = ?').get(runId);\n if (!existingRun) {\n throw new Error(`Run with ID ${runId} not found.`);\n }\n\n const updateFields: string[] = [];\n const values: any[] = [];\n\n if (run.status !== undefined) {\n updateFields.push('status = ?');\n values.push(run.status);\n }\n\n if (run.metadata !== undefined) {\n updateFields.push('metadata = ?');\n values.push(JSON.stringify(run.metadata));\n }\n\n if (run.multitask_strategy !== undefined) {\n updateFields.push('multitask_strategy = ?');\n values.push(run.multitask_strategy);\n }\n\n // 总是更新 updated_at\n updateFields.push('updated_at = ?');\n values.push(new Date().toISOString());\n\n if (updateFields.length > 0) {\n values.push(runId);\n this.db\n .prepare(\n `\n UPDATE runs \n SET ${updateFields.join(', ')} \n WHERE run_id = ?\n `,\n )\n .run(...values);\n }\n }\n}\n","import { BaseThreadsManager } from '../../threads/index.js';\nimport { Command, Config, Metadata, OnConflictBehavior, Run, Thread, ThreadStatus } from '@langgraph-js/sdk';\nimport type { PostgresSaver } from '@langchain/langgraph-checkpoint-postgres';\nimport type { Pool } from 'pg';\n\n// 这两个东西循环引用了\nimport { getGraph } from '../../utils/getGraph.js';\nimport { serialiseAsDict } from '../../graph/stream.js';\nimport { RunStatus, SortOrder, ThreadSortBy } from '../../types';\n\ninterface ThreadRow {\n thread_id: string;\n created_at: Date;\n updated_at: Date;\n metadata: any;\n status: string;\n values: any;\n interrupts: any;\n}\n\ninterface RunRow {\n run_id: string;\n thread_id: string;\n assistant_id: string;\n created_at: Date;\n updated_at: Date;\n status: string;\n metadata: any;\n multitask_strategy: string;\n}\n\nexport class PostgresThreadsManager<ValuesType = unknown> implements BaseThreadsManager<ValuesType> {\n private pool: Pool;\n private isSetup: boolean = false;\n\n constructor(checkpointer: PostgresSaver) {\n // 访问 PostgresSaver 的 pool 属性(虽然是 private,但在运行时可以访问)\n this.pool = (checkpointer as any).pool;\n }\n\n public async setup(): Promise<void> {\n if (this.isSetup) {\n return;\n }\n\n // 创建 threads 表\n await this.pool.query(`\n CREATE TABLE IF NOT EXISTS threads (\n thread_id TEXT PRIMARY KEY,\n created_at TIMESTAMP NOT NULL,\n updated_at TIMESTAMP NOT NULL,\n metadata JSONB NOT NULL DEFAULT '{}',\n status TEXT NOT NULL DEFAULT 'idle',\n \"values\" JSONB,\n interrupts JSONB NOT NULL DEFAULT '{}'\n )\n `);\n\n // 创建 runs 表\n await this.pool.query(`\n CREATE TABLE IF NOT EXISTS runs (\n run_id TEXT PRIMARY KEY,\n thread_id TEXT NOT NULL,\n assistant_id TEXT NOT NULL,\n created_at TIMESTAMP NOT NULL,\n updated_at TIMESTAMP NOT NULL,\n status TEXT NOT NULL DEFAULT 'pending',\n metadata JSONB NOT NULL DEFAULT '{}',\n multitask_strategy TEXT NOT NULL DEFAULT 'reject',\n FOREIGN KEY (thread_id) REFERENCES threads(thread_id) ON DELETE CASCADE\n )\n `);\n\n // 创建索引以提高查询性能\n await this.pool.query(`CREATE INDEX IF NOT EXISTS idx_threads_status ON threads(status)`);\n await this.pool.query(`CREATE INDEX IF NOT EXISTS idx_threads_created_at ON threads(created_at)`);\n await this.pool.query(`CREATE INDEX IF NOT EXISTS idx_threads_updated_at ON threads(updated_at)`);\n await this.pool.query(`CREATE INDEX IF NOT EXISTS idx_runs_thread_id ON runs(thread_id)`);\n await this.pool.query(`CREATE INDEX IF NOT EXISTS idx_runs_status ON runs(status)`);\n\n this.isSetup = true;\n }\n\n async create(payload?: {\n metadata?: Metadata;\n threadId?: string;\n ifExists?: OnConflictBehavior;\n graphId?: string;\n supersteps?: Array<{ updates: Array<{ values: unknown; command?: Command; asNode: string }> }>;\n }): Promise<Thread<ValuesType>> {\n const threadId = payload?.threadId || crypto.randomUUID();\n\n // 检查线程是否已存在\n if (payload?.ifExists === 'raise') {\n const result = await this.pool.query('SELECT thread_id FROM threads WHERE thread_id = $1', [threadId]);\n if (result.rows.length > 0) {\n throw new Error(`Thread with ID ${threadId} already exists.`);\n }\n }\n\n const now = new Date();\n const metadata = payload?.metadata || {};\n const interrupts = {};\n\n const thread: Thread<ValuesType> = {\n thread_id: threadId,\n created_at: now.toISOString(),\n updated_at: now.toISOString(),\n metadata,\n status: 'idle',\n values: null as unknown as ValuesType,\n interrupts,\n };\n\n // 插入到数据库\n await this.pool.query(\n `\n INSERT INTO threads (thread_id, created_at, updated_at, metadata, status, \"values\", interrupts)\n VALUES ($1, $2, $3, $4, $5, $6, $7)\n `,\n [threadId, now, now, JSON.stringify(metadata), 'idle', null, JSON.stringify(interrupts)],\n );\n\n return thread;\n }\n\n async search(query?: {\n metadata?: Metadata;\n limit?: number;\n offset?: number;\n status?: ThreadStatus;\n sortBy?: ThreadSortBy;\n sortOrder?: SortOrder;\n }): Promise<Thread<ValuesType>[]> {\n let sql = 'SELECT * FROM threads';\n const whereConditions: string[] = [];\n const params: any[] = [];\n let paramIndex = 1;\n\n // 构建 WHERE 条件\n if (query?.status) {\n whereConditions.push(`status = $${paramIndex++}`);\n params.push(query.status);\n }\n\n if (query?.metadata) {\n for (const [key, value] of Object.entries(query.metadata)) {\n whereConditions.push(`metadata->$${paramIndex} = $${paramIndex + 1}`);\n params.push(key, JSON.stringify(value));\n paramIndex += 2;\n }\n }\n\n if (whereConditions.length > 0) {\n sql += ' WHERE ' + whereConditions.join(' AND ');\n }\n\n // 添加排序\n if (query?.sortBy) {\n sql += ` ORDER BY ${query.sortBy}`;\n if (query.sortOrder === 'desc') {\n sql += ' DESC';\n } else {\n sql += ' ASC';\n }\n }\n\n // 添加分页\n if (query?.limit) {\n sql += ` LIMIT $${paramIndex++}`;\n params.push(query.limit);\n if (query?.offset) {\n sql += ` OFFSET $${paramIndex++}`;\n params.push(query.offset);\n }\n }\n\n const result = await this.pool.query(sql, params);\n\n return result.rows.map((row: ThreadRow) => ({\n thread_id: row.thread_id,\n created_at: new Date(row.created_at).toISOString(),\n updated_at: new Date(row.updated_at).toISOString(),\n metadata: row.metadata,\n status: row.status as ThreadStatus,\n values: row.values || (null as unknown as ValuesType),\n interrupts: row.interrupts,\n }));\n }\n\n async get(threadId: string): Promise<Thread<ValuesType>> {\n const result = await this.pool.query('SELECT * FROM threads WHERE thread_id = $1', [threadId]);\n if (result.rows.length === 0) {\n throw new Error(`Thread with ID ${threadId} not found.`);\n }\n\n const row = result.rows[0] as ThreadRow;\n return {\n thread_id: row.thread_id,\n created_at: new Date(row.created_at).toISOString(),\n updated_at: new Date(row.updated_at).toISOString(),\n metadata: row.metadata,\n status: row.status as ThreadStatus,\n values: row.values || (null as unknown as ValuesType),\n interrupts: row.interrupts,\n };\n }\n\n async set(threadId: string, thread: Partial<Thread<ValuesType>>): Promise<void> {\n // 检查线程是否存在\n const existingThread = await this.pool.query('SELECT thread_id FROM threads WHERE thread_id = $1', [threadId]);\n if (existingThread.rows.length === 0) {\n throw new Error(`Thread with ID ${threadId} not found.`);\n }\n\n const updateFields: string[] = [];\n const values: any[] = [];\n let paramIndex = 1;\n\n if (thread.metadata !== undefined) {\n updateFields.push(`metadata = $${paramIndex++}`);\n values.push(JSON.stringify(thread.metadata));\n }\n\n if (thread.status !== undefined) {\n updateFields.push(`status = $${paramIndex++}`);\n values.push(thread.status);\n }\n\n if (thread.values !== undefined) {\n updateFields.push(`\"values\" = $${paramIndex++}`);\n values.push(thread.values ? JSON.stringify(thread.values) : null);\n }\n\n if (thread.interrupts !== undefined) {\n updateFields.push(`interrupts = $${paramIndex++}`);\n values.push(JSON.stringify(thread.interrupts));\n }\n\n // 总是更新 updated_at\n updateFields.push(`updated_at = $${paramIndex++}`);\n values.push(new Date());\n\n if (updateFields.length > 0) {\n values.push(threadId);\n await this.pool.query(\n `\n UPDATE threads \n SET ${updateFields.join(', ')} \n WHERE thread_id = $${paramIndex}\n `,\n values,\n );\n }\n }\n\n async updateState(threadId: string, thread: Partial<Thread<ValuesType>>): Promise<Pick<Config, 'configurable'>> {\n // 从数据库查询线程信息\n const result = await this.pool.query('SELECT * FROM threads WHERE thread_id = $1', [threadId]);\n if (result.rows.length === 0) {\n throw new Error(`Thread with ID ${threadId} not found.`);\n }\n\n const row = result.rows[0] as ThreadRow;\n const targetThread = {\n thread_id: row.thread_id,\n created_at: new Date(row.created_at).toISOString(),\n updated_at: new Date(row.updated_at).toISOString(),\n metadata: row.metadata,\n status: row.status as ThreadStatus,\n values: row.values || (null as unknown as ValuesType),\n interrupts: row.interrupts,\n };\n\n if (targetThread.status === 'busy') {\n throw new Error(`Thread with ID ${threadId} is busy, can't update state.`);\n }\n\n if (!targetThread.metadata?.graph_id) {\n throw new Error(`Thread with ID ${threadId} has no graph_id.`);\n }\n const graphId = targetThread.metadata?.graph_id as string;\n const config = {\n configurable: {\n thread_id: threadId,\n graph_id: graphId,\n },\n };\n const graph = await getGraph(graphId, config);\n const nextConfig = await graph.updateState(config, thread.values);\n const graphState = await graph.getState(config);\n await this.set(threadId, { values: JSON.parse(serialiseAsDict(graphState.values)) as ValuesType });\n return nextConfig;\n }\n\n async delete(threadId: string): Promise<void> {\n const result = await this.pool.query('DELETE FROM threads WHERE thread_id = $1', [threadId]);\n if (result.rowCount === 0) {\n throw new Error(`Thread with ID ${threadId} not found.`);\n }\n }\n\n async createRun(threadId: string, assistantId: string, payload?: { metadata?: Metadata }): Promise<Run> {\n const runId = crypto.randomUUID();\n const now = new Date();\n const metadata = payload?.metadata ?? {};\n\n const run: Run = {\n run_id: runId,\n thread_id: threadId,\n assistant_id: assistantId,\n created_at: now.toISOString(),\n updated_at: now.toISOString(),\n status: 'pending',\n metadata,\n multitask_strategy: 'reject',\n };\n\n // 插入到数据库\n await this.pool.query(\n `\n INSERT INTO runs (run_id, thread_id, assistant_id, created_at, updated_at, status, metadata, multitask_strategy)\n VALUES ($1, $2, $3, $4, $5, $6, $7, $8)\n `,\n [runId, threadId, assistantId, now, now, 'pending', JSON.stringify(metadata), 'reject'],\n );\n\n return run;\n }\n\n async listRuns(\n threadId: string,\n options?: { limit?: number; offset?: number; status?: RunStatus },\n ): Promise<Run[]> {\n let sql = 'SELECT * FROM runs WHERE thread_id = $1';\n const params: any[] = [threadId];\n let paramIndex = 2;\n\n if (options?.status) {\n sql += ` AND status = $${paramIndex++}`;\n params.push(options.status);\n }\n\n sql += ' ORDER BY created_at DESC';\n\n if (options?.limit) {\n sql += ` LIMIT $${paramIndex++}`;\n params.push(options.limit);\n if (options?.offset) {\n sql += ` OFFSET $${paramIndex++}`;\n params.push(options.offset);\n }\n }\n\n const result = await this.pool.query(sql, params);\n\n return result.rows.map((row: RunRow) => ({\n run_id: row.run_id,\n thread_id: row.thread_id,\n assistant_id: row.assistant_id,\n created_at: new Date(row.created_at).toISOString(),\n updated_at: new Date(row.updated_at).toISOString(),\n status: row.status as RunStatus,\n metadata: row.metadata,\n multitask_strategy: row.multitask_strategy as 'reject',\n }));\n }\n\n async updateRun(runId: string, run: Partial<Run>): Promise<void> {\n // 检查运行是否存在\n const existingRun = await this.pool.query('SELECT run_id FROM runs WHERE run_id = $1', [runId]);\n if (existingRun.rows.length === 0) {\n throw new Error(`Run with ID ${runId} not found.`);\n }\n\n const updateFields: string[] = [];\n const values: any[] = [];\n let paramIndex = 1;\n\n if (run.status !== undefined) {\n updateFields.push(`status = $${paramIndex++}`);\n values.push(run.status);\n }\n\n if (run.metadata !== undefined) {\n updateFields.push(`metadata = $${paramIndex++}`);\n values.push(JSON.stringify(run.metadata));\n }\n\n if (run.multitask_strategy !== undefined) {\n updateFields.push(`multitask_strategy = $${paramIndex++}`);\n values.push(run.multitask_strategy);\n }\n\n // 总是更新 updated_at\n updateFields.push(`updated_at = $${paramIndex++}`);\n values.push(new Date());\n\n if (updateFields.length > 0) {\n values.push(runId);\n await this.pool.query(\n `\n UPDATE runs \n SET ${updateFields.join(', ')} \n WHERE run_id = $${paramIndex}\n `,\n values,\n );\n }\n }\n}\n","import { BaseStreamQueueInterface, StreamQueueManager } from '../queue/stream_queue';\nimport { MemorySaver } from './memory/checkpoint';\nimport { MemoryStreamQueue } from './memory/queue';\nimport { MemoryThreadsManager } from './memory/threads';\nimport type { SqliteSaver as SqliteSaverType } from './sqlite/checkpoint';\nimport type { PostgresSaver } from '@langchain/langgraph-checkpoint-postgres';\nimport { SQLiteThreadsManager } from './sqlite/threads';\nimport { PostgresThreadsManager } from './pg/threads';\n\n// 所有的适配实现,都请写到这里,通过环境变量进行判断使用哪种方式进行适配\n\nexport const createCheckPointer = async () => {\n if (\n (process.env.REDIS_URL && process.env.CHECKPOINT_TYPE === 'redis') ||\n process.env.CHECKPOINT_TYPE === 'shallow/redis'\n ) {\n if (process.env.CHECKPOINT_TYPE === 'redis') {\n console.debug('LG | Using redis as checkpoint');\n const { RedisSaver } = await import('@langchain/langgraph-checkpoint-redis');\n return await RedisSaver.fromUrl(process.env.REDIS_URL!, {\n defaultTTL: 60, // TTL in minutes\n refreshOnRead: true,\n });\n }\n if (process.env.CHECKPOINT_TYPE === 'shallow/redis') {\n console.debug('LG | Using shallow redis as checkpoint');\n const { ShallowRedisSaver } = await import('@langchain/langgraph-checkpoint-redis/shallow');\n return await ShallowRedisSaver.fromUrl(process.env.REDIS_URL!);\n }\n }\n\n if (process.env.DATABASE_URL) {\n console.debug('LG | Using postgres as checkpoint');\n const { createPGCheckpoint } = await import('./pg/checkpoint');\n return createPGCheckpoint();\n }\n\n if (process.env.SQLITE_DATABASE_URI) {\n console.debug('LG | Using sqlite as checkpoint');\n const { SqliteSaver } = await import('./sqlite/checkpoint');\n const db = SqliteSaver.fromConnString(process.env.SQLITE_DATABASE_URI);\n return db;\n }\n return new MemorySaver();\n};\n\nexport const createMessageQueue = async () => {\n let q: new (id: string) => BaseStreamQueueInterface;\n if (process.env.REDIS_URL) {\n console.debug('LG | Using redis as stream queue');\n const { RedisStreamQueue } = await import('./redis/queue');\n q = RedisStreamQueue;\n } else {\n q = MemoryStreamQueue;\n }\n return new StreamQueueManager(q);\n};\n\nexport const createThreadManager = async (config: { checkpointer?: SqliteSaverType | PostgresSaver }) => {\n if (process.env.DATABASE_URL && config.checkpointer) {\n // 这里直接引入避免循环引用问题\n const threadsManager = new PostgresThreadsManager(config.checkpointer as PostgresSaver);\n if (process.env.DATABASE_INIT === 'true') {\n await threadsManager.setup();\n }\n return threadsManager;\n }\n if (process.env.SQLITE_DATABASE_URI && config.checkpointer) {\n const threadsManager = new SQLiteThreadsManager(config.checkpointer as SqliteSaverType);\n await threadsManager.setup();\n return threadsManager;\n }\n return new MemoryThreadsManager();\n};\n","import { BaseCheckpointSaver } from '@langchain/langgraph-checkpoint';\nimport { BaseStreamQueueInterface, StreamQueueManager } from './queue/stream_queue.js';\nimport { createCheckPointer, createMessageQueue, createThreadManager } from './storage/index.js';\nimport type { SqliteSaver } from './storage/sqlite/checkpoint.js';\nimport type { PostgresSaver } from '@langchain/langgraph-checkpoint-postgres';\nimport { BaseThreadsManager } from './threads/index.js';\n\nexport class LangGraphGlobal {\n static globalMessageQueue: StreamQueueManager<BaseStreamQueueInterface> = null as any;\n static globalCheckPointer: BaseCheckpointSaver = null as any;\n static globalThreadsManager: BaseThreadsManager = null as any;\n static isInitialized: Promise<void> | null = null;\n static async initGlobal() {\n if (LangGraphGlobal.isInitialized) {\n return LangGraphGlobal.isInitialized;\n }\n LangGraphGlobal.isInitialized = (async () => {\n const [globalMessageQueue, globalCheckPointer] = await Promise.all([\n createMessageQueue(),\n createCheckPointer(),\n ]);\n console.debug('LG | checkpointer created');\n const globalThreadsManager = await createThreadManager({\n checkpointer: globalCheckPointer as SqliteSaver | PostgresSaver,\n });\n console.debug('LG | threads manager created');\n console.debug('LG | global init done');\n LangGraphGlobal.globalMessageQueue = globalMessageQueue;\n LangGraphGlobal.globalCheckPointer = globalCheckPointer;\n LangGraphGlobal.globalThreadsManager = globalThreadsManager;\n })();\n }\n}\n","import { BaseMessageChunk, isBaseMessage } from '@langchain/core/messages';\nimport type { BaseCheckpointSaver, LangGraphRunnableConfig } from '@langchain/langgraph';\nimport type { Pregel } from '@langchain/langgraph/pregel';\nimport { getLangGraphCommand } from '../utils/getLangGraphCommand.js';\nimport type { BaseStreamQueueInterface } from '../queue/stream_queue.js';\n\nimport { LangGraphGlobal } from '../global.js';\nimport { Run } from '@langgraph-js/sdk';\nimport { EventMessage, StreamErrorEventMessage, StreamEndEventMessage } from '../queue/event_message.js';\n\nimport { BaseThreadsManager } from '../threads/index.js';\nimport { StreamInputData } from '../types.js';\n\nexport type LangGraphStreamMode = Pregel<any, any>['streamMode'][number];\n\nexport async function streamStateWithQueue(\n threads: BaseThreadsManager,\n run: Run,\n queue: BaseStreamQueueInterface,\n payload: StreamInputData,\n options: {\n attempt: number;\n getGraph: (\n graphId: string,\n config: LangGraphRunnableConfig | undefined,\n options?: { checkpointer?: BaseCheckpointSaver | null },\n ) => Promise<Pregel<any, any, any, any, any>>;\n compressMessages?: boolean;\n },\n): Promise<void> {\n const kwargs = payload;\n const graphId = kwargs.config?.configurable?.graph_id;\n\n if (!graphId || typeof graphId !== 'string') {\n throw new Error('Invalid or missing graph_id');\n }\n\n const graph = await options.getGraph(graphId, payload.config, {\n checkpointer: payload.temporary ? null : undefined,\n });\n\n const userStreamMode = payload.streamMode ?? [];\n\n const libStreamMode: Set<LangGraphStreamMode> = new Set([\n 'values',\n ...userStreamMode.filter((mode) => mode !== 'events' && mode !== 'messages-tuple'),\n ]);\n\n if (userStreamMode.includes('messages-tuple')) {\n libStreamMode.add('messages');\n }\n\n if (userStreamMode.includes('messages')) {\n libStreamMode.add('values');\n }\n\n await queue.push(\n new EventMessage('metadata', {\n run_id: run.run_id,\n attempt: options.attempt,\n graph_id: graphId,\n }),\n );\n\n const metadata = {\n ...payload.config?.metadata,\n run_attempt: options.attempt,\n };\n const events = graph.streamEvents(\n payload.command != null ? getLangGraphCommand(payload.command) : payload.input ?? null,\n {\n version: 'v2' as const,\n\n interruptAfter: payload.interruptAfter,\n interruptBefore: payload.interruptBefore,\n\n tags: payload.config?.tags,\n configurable: payload.config?.configurable,\n recursionLimit: payload.config?.recursionLimit,\n subgraphs: payload.streamSubgraphs,\n metadata,\n\n runId: run.run_id,\n streamMode: [...libStreamMode],\n signal: queue.cancelSignal.signal,\n },\n );\n\n const messages: Record<string, BaseMessageChunk> = {};\n const completedIds = new Set<string>();\n\n try {\n for await (const event of events) {\n // console.log(event);\n if (event.tags?.includes('langsmith:hidden')) continue;\n if (event.event === 'on_chain_stream' && event.run_id === run.run_id) {\n const [ns, mode, chunk] = (\n payload.streamSubgraphs ? event.data.chunk : [null, ...event.data.chunk]\n ) as [string[] | null, LangGraphStreamMode, unknown];\n\n // Listen for debug events and capture checkpoint\n let data: unknown = chunk;\n\n if (mode === 'messages') {\n if (userStreamMode.includes('messages-tuple')) {\n await queue.push(new EventMessage('messages', data));\n }\n } else if (userStreamMode.includes(mode)) {\n if (payload.streamSubgraphs && ns?.length) {\n await queue.push(new EventMessage(`${mode}|${ns.join('|')}`, data));\n } else {\n await queue.push(new EventMessage(mode, data));\n }\n }\n if (mode === 'values') {\n await threads.set(run.thread_id, {\n values: data ? JSON.parse(serialiseAsDict(data)) : '',\n });\n }\n } else if (userStreamMode.includes('events')) {\n await queue.push(new EventMessage('events', event));\n }\n\n // TODO: we still rely on old messages mode based of streamMode=values\n // In order to fully switch to library messages mode, we need to do ensure that\n // `StreamMessagesHandler` sends the final message, which requires the following:\n // - handleLLMEnd does not send the final message b/c handleLLMNewToken sets the this.emittedChatModelRunIds[runId] flag. Python does not do that\n // - handleLLMEnd receives the final message as BaseMessageChunk rather than BaseMessage, which from the outside will become indistinguishable.\n // - handleLLMEnd should not dedupe the message\n // - Don't think there's an utility that would convert a BaseMessageChunk to a BaseMessage?\n if (userStreamMode.includes('messages')) {\n if (event.event === 'on_chain_stream' && event.run_id === run.run_id) {\n const newMessages: Array<BaseMessageChunk> = [];\n const [_, chunk]: [string, any] = event.data.chunk;\n\n let chunkMessages: Array<BaseMessageChunk> = [];\n if (typeof chunk === 'object' && chunk != null && 'messages' in chunk && !isBaseMessage(chunk)) {\n chunkMessages = chunk?.messages;\n }\n\n if (!Array.isArray(chunkMessages)) {\n chunkMessages = [chunkMessages];\n }\n\n for (const message of chunkMessages) {\n if (!message.id || completedIds.has(message.id)) continue;\n completedIds.add(message.id);\n newMessages.push(message);\n }\n\n if (newMessages.length > 0) {\n await queue.push(new EventMessage('messages/complete', newMessages));\n }\n } else if (event.event === 'on_chat_model_stream' && !event.tags?.includes('nostream')) {\n const message: BaseMessageChunk = event.data.chunk;\n\n if (!message.id) continue;\n\n if (messages[message.id] == null) {\n messages[message.id] = message;\n await queue.push(\n new EventMessage('messages/metadata', {\n [message.id]: { metadata: event.metadata },\n }),\n );\n } else {\n messages[message.id] = messages[message.id].concat(message);\n }\n\n await queue.push(new EventMessage('messages/partial', [messages[message.id]]));\n }\n }\n }\n } finally {\n // 发送流结束信号\n await queue.push(new StreamEndEventMessage());\n }\n}\n\n/**\n * 从队列创建数据流生成器\n * @param queueId 队列 ID\n * @param signal 中止信号\n * @returns 数据流生成器\n */\nexport async function* createStreamFromQueue(queueId: string): AsyncGenerator<{ event: string; data: unknown }> {\n const queue = LangGraphGlobal.globalMessageQueue.getQueue(queueId);\n return queue.onDataReceive();\n}\n\nexport const serialiseAsDict = (obj: unknown, indent = 2) => {\n return JSON.stringify(\n obj,\n function (key: string | number, value: unknown) {\n const rawValue = this[key];\n if (\n rawValue != null &&\n typeof rawValue === 'object' &&\n 'toDict' in rawValue &&\n typeof rawValue.toDict === 'function'\n ) {\n // TODO: we need to upstream this to LangChainJS\n const { type, data } = rawValue.toDict();\n return { ...data, type };\n }\n\n return value;\n },\n indent,\n );\n};\n/**\n * 兼容性函数:保持原有 API,同时使用队列模式\n * @param run 运行配置\n * @param options 选项\n * @returns 数据流生成器\n */\nexport async function* streamState(\n threads: BaseThreadsManager,\n run: Run | Promise<Run>,\n payload: StreamInputData,\n options: {\n attempt: number;\n getGraph: (\n graphId: string,\n config: LangGraphRunnableConfig | undefined,\n options?: { checkpointer?: BaseCheckpointSaver | null },\n ) => Promise<Pregel<any, any, any, any, any>>;\n compressMessages?: boolean;\n },\n) {\n run = await run;\n // 生成唯一的队列 ID\n const queueId = run.run_id;\n const threadId = run.thread_id;\n try {\n // 启动队列推送任务(在后台异步执行)\n await threads.set(threadId, { status: 'busy' });\n await threads.updateRun(run.run_id, { status: 'running' });\n const queue = LangGraphGlobal.globalMessageQueue.createQueue(queueId);\n const state = queue.onDataReceive();\n streamStateWithQueue(threads, run, queue, payload, options).catch((error) => {\n console.error('Queue task error:', error);\n // 如果生产者出错,向队列推送错误信号\n LangGraphGlobal.globalMessageQueue.pushToQueue(queueId, new StreamErrorEventMessage(error));\n // TODO 不知道这里需不需要错误处理\n });\n for await (const data of state) {\n yield data;\n }\n await threads.updateRun(run.run_id, { status: 'success' });\n } catch (error) {\n // 如果发生错误,确保清理资源\n console.error('Stream error:', error);\n await threads.updateRun(run.run_id, { status: 'error' });\n await threads.set(threadId, { status: 'error' });\n // throw error;\n } finally {\n // 在完成后清理队列\n await threads.set(threadId, { status: 'idle' });\n LangGraphGlobal.globalMessageQueue.removeQueue(queueId);\n }\n}\n","import { StreamEvent } from '@langchain/core/tracers/log_stream';\nimport { streamState } from './graph/stream.js';\nimport { Assistant, Run, StreamMode, Metadata, AssistantGraph } from '@langchain/langgraph-sdk';\nimport { getGraph, GRAPHS } from './utils/getGraph.js';\nimport { LangGraphGlobal } from './global.js';\nimport { AssistantSortBy, CancelAction, ILangGraphClient, RunStatus, SortOrder, StreamInputData } from './types.js';\nexport { registerGraph } from './utils/getGraph.js';\n\nexport const AssistantEndpoint: ILangGraphClient['assistants'] = {\n async search(query?: {\n graphId?: string;\n metadata?: Metadata;\n limit?: number;\n offset?: number;\n sortBy?: AssistantSortBy;\n sortOrder?: SortOrder;\n }): Promise<Assistant[]> {\n if (query?.graphId) {\n return [\n {\n assistant_id: query.graphId,\n graph_id: query.graphId,\n config: {},\n created_at: new Date().toISOString(),\n updated_at: new Date().toISOString(),\n metadata: {},\n version: 1,\n name: query.graphId,\n description: '',\n } as Assistant,\n ];\n }\n return Object.entries(GRAPHS).map(\n ([graphId, _]) =>\n ({\n assistant_id: graphId,\n graph_id: graphId,\n config: {},\n metadata: {},\n version: 1,\n name: graphId,\n description: '',\n created_at: new Date().toISOString(),\n updated_at: new Date().toISOString(),\n } as Assistant),\n );\n },\n async getGraph(assistantId: string, options?: { xray?: boolean | number }): Promise<AssistantGraph> {\n const config = {};\n const graph = await getGraph(assistantId, config);\n const drawable = await graph.getGraphAsync({\n ...config,\n xray: options?.xray ?? undefined,\n });\n return drawable.toJSON() as AssistantGraph;\n },\n};\n\nexport const createEndpoint = async (): Promise<ILangGraphClient> => {\n await LangGraphGlobal.initGlobal();\n\n const getThreads = () => {\n return LangGraphGlobal.globalThreadsManager;\n };\n return {\n assistants: AssistantEndpoint,\n threads: LangGraphGlobal.globalThreadsManager,\n runs: {\n list(\n threadId: string,\n options?: {\n limit?: number;\n offset?: number;\n status?: RunStatus;\n },\n ): Promise<Run[]> {\n return getThreads().listRuns(threadId, options);\n },\n async cancel(threadId: string, runId: string, wait?: boolean, action?: CancelAction): Promise<void> {\n return LangGraphGlobal.globalMessageQueue.cancelQueue(runId);\n },\n async *stream(threadId: string, assistantId: string, payload: StreamInputData) {\n payload.config = {\n ...(payload.config ?? {}),\n configurable: {\n ...(payload.config?.configurable ?? {}),\n graph_id: assistantId,\n thread_id: threadId,\n },\n };\n const threads = getThreads();\n for await (const data of streamState(\n threads,\n threads.createRun(threadId, assistantId, payload),\n payload,\n {\n attempt: 0,\n getGraph,\n },\n )) {\n yield data;\n }\n },\n joinStream(\n threadId: string,\n runId: string,\n options?:\n | {\n signal?: AbortSignal;\n cancelOnDisconnect?: boolean;\n lastEventId?: string;\n streamMode?: StreamMode | StreamMode[];\n }\n | AbortSignal,\n ): AsyncGenerator<{ id?: string; event: StreamEvent; data: any }> {\n throw new Error('Function not implemented.');\n },\n },\n };\n};\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"createEndpoint-DR0yqiXl.js","sources":["../src/utils/getLangGraphCommand.ts","../src/graph/stringify.ts","../src/queue/JsonPlusSerializer.ts","../src/queue/stream_queue.ts","../src/queue/event_message.ts","../src/storage/memory/queue.ts","../src/utils/getGraph.ts","../src/storage/memory/threads.ts","../src/storage/sqlite/threads.ts","../src/storage/pg/threads.ts","../src/storage/index.ts","../src/global.ts","../src/graph/stream.ts","../src/createEndpoint.ts"],"sourcesContent":["import { Command, Send } from '@langchain/langgraph';\nimport { Command as ClientCommand } from '@langgraph-js/sdk';\nexport interface RunSend {\n node: string;\n input?: unknown;\n}\n\nexport interface RunCommand extends ClientCommand {}\n\nexport const getLangGraphCommand = (command: RunCommand) => {\n let goto = command.goto != null && !Array.isArray(command.goto) ? [command.goto] : command.goto;\n\n return new Command({\n goto: goto?.map((item: string | RunSend) => {\n if (typeof item !== 'string') return new Send(item.node, item.input);\n return item;\n }),\n update: command.update ?? undefined,\n resume: command.resume,\n });\n};\n","/* eslint-disable */\n// @ts-nocheck\n\n// Stringify that can handle circular references.\n// Inlined due to ESM import issues\n// Source: https://www.npmjs.com/package/fast-safe-stringify\n\nvar LIMIT_REPLACE_NODE = '[...]';\nvar CIRCULAR_REPLACE_NODE = '[Circular]';\n\nvar arr = [];\nvar replacerStack = [];\n\nfunction defaultOptions() {\n return {\n depthLimit: Number.MAX_SAFE_INTEGER,\n edgesLimit: Number.MAX_SAFE_INTEGER,\n };\n}\n\n// Regular stringify\nexport function stringify(obj, replacer?, spacer?, options?) {\n if (typeof options === 'undefined') {\n options = defaultOptions();\n }\n\n decirc(obj, '', 0, [], undefined, 0, options);\n var res;\n try {\n if (replacerStack.length === 0) {\n res = JSON.stringify(obj, replacer, spacer);\n } else {\n res = JSON.stringify(obj, replaceGetterValues(replacer), spacer);\n }\n } catch (_) {\n return JSON.stringify('[unable to serialize, circular reference is too complex to analyze]');\n } finally {\n while (arr.length !== 0) {\n var part = arr.pop();\n if (part.length === 4) {\n Object.defineProperty(part[0], part[1], part[3]);\n } else {\n part[0][part[1]] = part[2];\n }\n }\n }\n return res;\n}\n\nfunction setReplace(replace, val, k, parent) {\n var propertyDescriptor = Object.getOwnPropertyDescriptor(parent, k);\n if (propertyDescriptor.get !== undefined) {\n if (propertyDescriptor.configurable) {\n Object.defineProperty(parent, k, { value: replace });\n arr.push([parent, k, val, propertyDescriptor]);\n } else {\n replacerStack.push([val, k, replace]);\n }\n } else {\n parent[k] = replace;\n arr.push([parent, k, val]);\n }\n}\n\nfunction decirc(val, k, edgeIndex, stack, parent, depth, options) {\n depth += 1;\n var i;\n if (typeof val === 'object' && val !== null) {\n for (i = 0; i < stack.length; i++) {\n if (stack[i] === val) {\n setReplace(CIRCULAR_REPLACE_NODE, val, k, parent);\n return;\n }\n }\n\n if (typeof options.depthLimit !== 'undefined' && depth > options.depthLimit) {\n setReplace(LIMIT_REPLACE_NODE, val, k, parent);\n return;\n }\n\n if (typeof options.edgesLimit !== 'undefined' && edgeIndex + 1 > options.edgesLimit) {\n setReplace(LIMIT_REPLACE_NODE, val, k, parent);\n return;\n }\n\n stack.push(val);\n // Optimize for Arrays. Big arrays could kill the performance otherwise!\n if (Array.isArray(val)) {\n for (i = 0; i < val.length; i++) {\n decirc(val[i], i, i, stack, val, depth, options);\n }\n } else {\n var keys = Object.keys(val);\n for (i = 0; i < keys.length; i++) {\n var key = keys[i];\n decirc(val[key], key, i, stack, val, depth, options);\n }\n }\n stack.pop();\n }\n}\n\n// Stable-stringify\nfunction compareFunction(a, b) {\n if (a < b) {\n return -1;\n }\n if (a > b) {\n return 1;\n }\n return 0;\n}\n\nfunction deterministicStringify(obj, replacer, spacer, options) {\n if (typeof options === 'undefined') {\n options = defaultOptions();\n }\n\n var tmp = deterministicDecirc(obj, '', 0, [], undefined, 0, options) || obj;\n var res;\n try {\n if (replacerStack.length === 0) {\n res = JSON.stringify(tmp, replacer, spacer);\n } else {\n res = JSON.stringify(tmp, replaceGetterValues(replacer), spacer);\n }\n } catch (_) {\n return JSON.stringify('[unable to serialize, circular reference is too complex to analyze]');\n } finally {\n // Ensure that we restore the object as it was.\n while (arr.length !== 0) {\n var part = arr.pop();\n if (part.length === 4) {\n Object.defineProperty(part[0], part[1], part[3]);\n } else {\n part[0][part[1]] = part[2];\n }\n }\n }\n return res;\n}\n\nfunction deterministicDecirc(val, k, edgeIndex, stack, parent, depth, options) {\n depth += 1;\n var i;\n if (typeof val === 'object' && val !== null) {\n for (i = 0; i < stack.length; i++) {\n if (stack[i] === val) {\n setReplace(CIRCULAR_REPLACE_NODE, val, k, parent);\n return;\n }\n }\n try {\n if (typeof val.toJSON === 'function') {\n return;\n }\n } catch (_) {\n return;\n }\n\n if (typeof options.depthLimit !== 'undefined' && depth > options.depthLimit) {\n setReplace(LIMIT_REPLACE_NODE, val, k, parent);\n return;\n }\n\n if (typeof options.edgesLimit !== 'undefined' && edgeIndex + 1 > options.edgesLimit) {\n setReplace(LIMIT_REPLACE_NODE, val, k, parent);\n return;\n }\n\n stack.push(val);\n // Optimize for Arrays. Big arrays could kill the performance otherwise!\n if (Array.isArray(val)) {\n for (i = 0; i < val.length; i++) {\n deterministicDecirc(val[i], i, i, stack, val, depth, options);\n }\n } else {\n // Create a temporary object in the required way\n var tmp = {};\n var keys = Object.keys(val).sort(compareFunction);\n for (i = 0; i < keys.length; i++) {\n var key = keys[i];\n deterministicDecirc(val[key], key, i, stack, val, depth, options);\n tmp[key] = val[key];\n }\n if (typeof parent !== 'undefined') {\n arr.push([parent, k, val]);\n parent[k] = tmp;\n } else {\n return tmp;\n }\n }\n stack.pop();\n }\n}\n\n// wraps replacer function to handle values we couldn't replace\n// and mark them as replaced value\nfunction replaceGetterValues(replacer) {\n replacer =\n typeof replacer !== 'undefined'\n ? replacer\n : function (k, v) {\n return v;\n };\n return function (key, val) {\n if (replacerStack.length > 0) {\n for (var i = 0; i < replacerStack.length; i++) {\n var part = replacerStack[i];\n if (part[1] === key && part[0] === val) {\n val = part[2];\n replacerStack.splice(i, 1);\n break;\n }\n }\n }\n return replacer.call(this, key, val);\n };\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\n/* eslint-disable no-instanceof/no-instanceof */\nimport { load } from '@langchain/core/load';\nimport type { SerializerProtocol } from '@langchain/langgraph-checkpoint';\nimport { stringify } from '../graph/stringify.js';\n\nfunction isLangChainSerializedObject(value: Record<string, unknown>) {\n return value !== null && value.lc === 1 && value.type === 'constructor' && Array.isArray(value.id);\n}\n\n/**\n * The replacer in stringify does not allow delegation to built-in LangChain\n * serialization methods, and instead immediately calls `.toJSON()` and\n * continues to stringify subfields.\n *\n * We therefore must start from the most nested elements in the input and\n * deserialize upwards rather than top-down.\n */\nasync function _reviver(value: any): Promise<any> {\n if (value && typeof value === 'object') {\n if (Array.isArray(value)) {\n const revivedArray = await Promise.all(value.map((item) => _reviver(item)));\n return revivedArray;\n } else {\n const revivedObj: any = {};\n for (const [k, v] of Object.entries(value)) {\n revivedObj[k] = await _reviver(v);\n }\n\n if (revivedObj.lc === 2 && revivedObj.type === 'undefined') {\n return undefined;\n } else if (revivedObj.lc === 2 && revivedObj.type === 'constructor' && Array.isArray(revivedObj.id)) {\n try {\n const constructorName = revivedObj.id[revivedObj.id.length - 1];\n let constructor: any;\n\n switch (constructorName) {\n case 'Set':\n constructor = Set;\n break;\n case 'Map':\n constructor = Map;\n break;\n case 'RegExp':\n constructor = RegExp;\n break;\n case 'Error':\n constructor = Error;\n break;\n default:\n return revivedObj;\n }\n if (revivedObj.method) {\n return (constructor as any)[revivedObj.method](...(revivedObj.args || []));\n } else {\n return new (constructor as any)(...(revivedObj.args || []));\n }\n } catch (error) {\n return revivedObj;\n }\n } else if (isLangChainSerializedObject(revivedObj)) {\n return load(JSON.stringify(revivedObj));\n }\n\n return revivedObj;\n }\n }\n return value;\n}\n\nfunction _encodeConstructorArgs(\n // eslint-disable-next-line @typescript-eslint/ban-types\n constructor: Function,\n method?: string,\n args?: any[],\n kwargs?: Record<string, any>,\n): object {\n return {\n lc: 2,\n type: 'constructor',\n id: [constructor.name],\n method: method ?? null,\n args: args ?? [],\n kwargs: kwargs ?? {},\n };\n}\n\nfunction _default(obj: any): any {\n if (obj === undefined) {\n return {\n lc: 2,\n type: 'undefined',\n };\n } else if (obj instanceof Set || obj instanceof Map) {\n return _encodeConstructorArgs(obj.constructor, undefined, [Array.from(obj)]);\n } else if (obj instanceof RegExp) {\n return _encodeConstructorArgs(RegExp, undefined, [obj.source, obj.flags]);\n } else if (obj instanceof Error) {\n return _encodeConstructorArgs(obj.constructor, undefined, [obj.message]);\n // TODO: Remove special case\n } else if (obj?.lg_name === 'Send') {\n return {\n node: obj.node,\n args: obj.args,\n };\n } else {\n return obj;\n }\n}\n\nexport class JsonPlusSerializer implements SerializerProtocol {\n protected _dumps(obj: any): Uint8Array {\n const encoder = new TextEncoder();\n return encoder.encode(\n stringify(obj, (_: string, value: any) => {\n return _default(value);\n }),\n );\n }\n\n async dumpsTyped(obj: any): Promise<[string, Uint8Array]> {\n if (obj instanceof Uint8Array) {\n return ['bytes', obj];\n } else {\n return ['json', this._dumps(obj)];\n }\n }\n\n protected async _loads(data: string): Promise<any> {\n const parsed = JSON.parse(data);\n return _reviver(parsed);\n }\n\n async loadsTyped(type: string, data: Uint8Array | string): Promise<any> {\n if (type === 'bytes') {\n return typeof data === 'string' ? new TextEncoder().encode(data) : data;\n } else if (type === 'json') {\n return this._loads(typeof data === 'string' ? data : new TextDecoder().decode(data));\n } else {\n throw new Error(`Unknown serialization type: ${type}`);\n }\n }\n}\n","import { EventEmitter } from 'eventemitter3';\nimport { JsonPlusSerializer } from './JsonPlusSerializer.js';\nimport { EventMessage } from './event_message.js';\n\n/**\n * 流队列事件接口\n * Stream queue events interface\n */\ninterface StreamQueueEvents<T extends EventMessage> {\n /** 数据事件:当有新数据时触发 / Data event: triggered when new data arrives */\n data: (data: T) => void;\n /** 其他事件 / Other events */\n [key: string]: ((...args: any[]) => void) | undefined;\n}\n\n/**\n * 基础流队列类\n * Base stream queue class\n */\nexport class BaseStreamQueue extends EventEmitter<StreamQueueEvents<EventMessage>> {\n /** 序列化器实例 / Serializer instance */\n serializer = new JsonPlusSerializer();\n\n /**\n * 构造函数\n * Constructor\n * @param compressMessages 是否压缩消息 / Whether to compress messages\n */\n constructor(readonly id: string, readonly compressMessages: boolean = true) {\n super();\n }\n\n /**\n * 编码数据为 Uint8Array\n * Encode data to Uint8Array\n * @param message 要编码的消息 / Message to encode\n * @returns 编码后的 Uint8Array / Encoded Uint8Array\n */\n async encodeData(message: EventMessage): Promise<Uint8Array> {\n const [_, serializedMessage] = await this.serializer.dumpsTyped(message);\n return serializedMessage;\n }\n\n /**\n * 解码数据为 EventMessage\n * Decode data to EventMessage\n * @param serializedMessage 要解码的消息 / Message to decode\n * @returns 解码后的 EventMessage / Decoded EventMessage\n */\n async decodeData(serializedMessage: string | Uint8Array): Promise<EventMessage> {\n const message = (await this.serializer.loadsTyped('json', serializedMessage)) as EventMessage;\n return message;\n }\n}\n\n/**\n * 基础流队列接口\n * Base stream queue interface\n */\nexport interface BaseStreamQueueInterface {\n id: string;\n /** 是否压缩消息 / Whether to compress messages */\n compressMessages: boolean;\n /**\n * 推送数据项到队列\n * Push item to queue\n * @param item 要推送的数据项 / Item to push\n */\n push(item: EventMessage): Promise<void>;\n /** 获取所有数据 / Get all data */\n getAll(): Promise<EventMessage[]>;\n /** 清空队列 / Clear queue */\n clear(): void;\n /**\n * 监听数据变化\n * Listen for data changes\n * @param listener 数据变化监听器 / Data change listener\n * @returns 取消监听函数 / Unsubscribe function\n */\n onDataReceive(): AsyncGenerator<EventMessage, void, unknown>;\n /** 取消信号控制器 / Cancel signal controller */\n cancelSignal: AbortController;\n /** 取消操作 / Cancel operation */\n cancel(): void;\n}\n\n/**\n * StreamQueue 管理器,通过 id 管理多个队列实例\n * StreamQueue manager, manages multiple queue instances by id\n */\nexport class StreamQueueManager<Q extends BaseStreamQueueInterface> {\n /** 存储队列实例的 Map / Map storing queue instances */\n private queues: Map<string, Q> = new Map();\n /** 默认是否压缩消息 / Default compress messages setting */\n private defaultCompressMessages: boolean;\n /** 队列构造函数 / Queue constructor */\n private queueConstructor: new (queueId: string) => Q;\n\n /**\n * 构造函数\n * Constructor\n * @param queueConstructor 队列构造函数 / Queue constructor\n * @param options 配置选项 / Configuration options\n */\n constructor(\n queueConstructor: new (id: string) => Q,\n options: {\n /** 默认是否压缩消息 / Default compress messages setting */\n defaultCompressMessages?: boolean;\n } = {},\n ) {\n this.defaultCompressMessages = options.defaultCompressMessages ?? true;\n this.queueConstructor = queueConstructor;\n }\n\n /**\n * 创建指定 id 的队列\n * Create queue with specified id\n * @param id 队列 ID / Queue ID\n * @param compressMessages 是否压缩消息 / Whether to compress messages\n * @returns 创建的队列实例 / Created queue instance\n */\n createQueue(id: string, compressMessages?: boolean): Q {\n const compress = compressMessages ?? this.defaultCompressMessages;\n this.queues.set(id, new this.queueConstructor(id));\n return this.queues.get(id)!;\n }\n\n /**\n * 获取或创建指定 id 的队列\n * Get or create queue with specified id\n * @param id 队列 ID / Queue ID\n * @param compressMessages 是否压缩消息,默认为构造函数中的默认值 / Whether to compress messages, defaults to constructor default\n * @returns StreamQueue 实例 / StreamQueue instance\n */\n getQueue(id: string): Q {\n const queue = this.queues.get(id);\n if (!queue) {\n throw new Error(`Queue with id '${id}' does not exist`);\n }\n return queue;\n }\n\n /**\n * 取消指定 id 的队列\n * Cancel queue with specified id\n * @param id 队列 ID / Queue ID\n */\n cancelQueue(id: string): void {\n const queue = this.queues.get(id);\n if (queue) {\n queue.cancel();\n this.removeQueue(id);\n }\n }\n /**\n * 向指定 id 的队列推送数据\n * Push data to queue with specified id\n * @param id 队列 ID / Queue ID\n * @param item 要推送的数据项 / Item to push\n * @param compressMessages 是否压缩消息,默认为构造函数中的默认值 / Whether to compress messages, defaults to constructor default\n */\n async pushToQueue(id: string, item: EventMessage, compressMessages?: boolean): Promise<void> {\n const queue = this.getQueue(id);\n await queue.push(item);\n }\n\n /**\n * 获取指定 id 队列中的所有数据\n * Get all data from queue with specified id\n * @param id 队列 ID / Queue ID\n * @returns 队列中的所有数据 / All data in the queue\n */\n async getQueueData(id: string): Promise<EventMessage[]> {\n const queue = this.queues.get(id);\n if (!queue) {\n throw new Error(`Queue with id '${id}' does not exist`);\n }\n return await queue.getAll();\n }\n\n /**\n * 清空指定 id 的队列\n * Clear queue with specified id\n * @param id 队列 ID / Queue ID\n */\n clearQueue(id: string): void {\n const queue = this.queues.get(id);\n if (queue) {\n queue.clear();\n }\n }\n\n /**\n * 删除指定 id 的队列\n * Remove queue with specified id\n * @param id 队列 ID / Queue ID\n * @returns 是否成功删除 / Whether successfully deleted\n */\n removeQueue(id: string) {\n setTimeout(() => {\n return this.queues.delete(id);\n }, 500);\n }\n\n /**\n * 获取所有队列的 ID\n * Get all queue IDs\n * @returns 所有队列 ID 的数组 / Array of all queue IDs\n */\n getAllQueueIds(): string[] {\n return Array.from(this.queues.keys());\n }\n\n /**\n * 获取所有队列及其数据的快照\n * Get snapshot of all queues and their data\n * @returns 包含所有队列数据的结果对象 / Result object containing all queue data\n */\n async getAllQueuesData(): Promise<Record<string, EventMessage[]>> {\n const result: Record<string, EventMessage[]> = {};\n for (const [id, queue] of this.queues) {\n result[id] = await queue.getAll();\n }\n return result;\n }\n\n /**\n * 清空所有队列\n * Clear all queues\n */\n clearAllQueues(): void {\n for (const queue of this.queues.values()) {\n queue.clear();\n }\n }\n}\n","export class EventMessage {\n event: string;\n data: unknown;\n id?: string;\n constructor(event: string, data?: unknown) {\n this.event = event;\n this.data = data;\n }\n}\n\nexport class CancelEventMessage extends EventMessage {\n constructor() {\n super('__system_cancel__', 'user cancel this run');\n }\n}\n\nexport class StreamEndEventMessage extends EventMessage {\n constructor() {\n super('__stream_end__', 'stream end');\n }\n}\n\nexport class StreamErrorEventMessage extends EventMessage {\n public constructor(error: Error) {\n super('__stream_error__', {\n error: error.name,\n message: error.message,\n });\n }\n}\n","import { CancelEventMessage, EventMessage } from '../../queue/event_message.js';\nimport { BaseStreamQueue } from '../../queue/stream_queue.js';\nimport { BaseStreamQueueInterface } from '../../queue/stream_queue.js';\n/** 内存实现的消息队列,用于存储消息 */\nexport class MemoryStreamQueue extends BaseStreamQueue implements BaseStreamQueueInterface {\n private data: EventMessage[] = [];\n async push(item: EventMessage): Promise<void> {\n const data = this.compressMessages ? ((await this.encodeData(item)) as unknown as EventMessage) : item;\n this.data.push(data);\n this.emit('dataChange', data);\n }\n\n onDataChange(listener: (data: EventMessage) => void): () => void {\n this.on('dataChange', async (item) => {\n listener(this.compressMessages ? ((await this.decodeData(item)) as EventMessage) : item);\n });\n return () => this.off('dataChange', listener);\n }\n\n /**\n * 异步生成器:支持 for await...of 方式消费队列数据\n */\n async *onDataReceive(): AsyncGenerator<EventMessage, void, unknown> {\n let queue: EventMessage[] = [];\n let pendingResolve: (() => void) | null = null;\n let isStreamEnded = false;\n const handleData = async (item: EventMessage) => {\n const data = this.compressMessages ? ((await this.decodeData(item as any)) as EventMessage) : item;\n queue.push(data);\n // 检查是否为流结束或错误信号\n if (\n data.event === '__stream_end__' ||\n data.event === '__stream_error__' ||\n data.event === '__stream_cancel__'\n ) {\n setTimeout(() => {\n isStreamEnded = true;\n if (pendingResolve) {\n pendingResolve();\n pendingResolve = null;\n }\n }, 300);\n\n if (data.event === '__stream_cancel__') {\n this.cancel();\n }\n }\n\n if (pendingResolve) {\n pendingResolve();\n pendingResolve = null;\n }\n };\n // todo 这个框架的事件监听的数据返回顺序有误\n this.on('dataChange', handleData as any);\n\n try {\n while (!isStreamEnded) {\n if (queue.length > 0) {\n for (const item of queue) {\n yield item;\n }\n queue = [];\n } else {\n await new Promise((resolve) => {\n pendingResolve = resolve as () => void;\n });\n }\n }\n } finally {\n this.off('dataChange', handleData as any);\n }\n }\n\n async getAll(): Promise<EventMessage[]> {\n return this.compressMessages\n ? ((await Promise.all(\n this.data.map((i) => this.decodeData(i as unknown as string | Uint8Array)),\n )) as unknown as EventMessage[])\n : this.data;\n }\n\n clear(): void {\n this.data = [];\n }\n public cancelSignal = new AbortController();\n cancel(): void {\n this.push(new CancelEventMessage());\n this.cancelSignal.abort('user cancel this run');\n }\n}\n","import {\n BaseCheckpointSaver,\n BaseStore,\n CompiledGraph,\n CompiledStateGraph,\n LangGraphRunnableConfig,\n} from '@langchain/langgraph';\nimport { LangGraphGlobal } from '../global';\n\nexport type CompiledGraphFactory<T extends string> = (config: {\n configurable?: Record<string, unknown>;\n}) => Promise<CompiledGraph<T>>;\n\nexport const GRAPHS: Record<string, CompiledGraph<string> | CompiledGraphFactory<string>> = {};\n\nexport async function registerGraph(\n graphId: string,\n graph: CompiledGraph<any> | CompiledStateGraph<any, any, any, any, any, any, any> | CompiledGraphFactory<any>,\n) {\n GRAPHS[graphId] = graph;\n}\nexport async function getGraph(\n graphId: string,\n config: LangGraphRunnableConfig | undefined,\n options?: {\n checkpointer?: BaseCheckpointSaver | null;\n store?: BaseStore;\n },\n) {\n if (!GRAPHS[graphId]) throw new Error(`Graph \"${graphId}\" not found`);\n\n const compiled =\n typeof GRAPHS[graphId] === 'function' ? await GRAPHS[graphId](config ?? { configurable: {} }) : GRAPHS[graphId];\n\n if (typeof options?.checkpointer !== 'undefined') {\n compiled.checkpointer = options?.checkpointer ?? LangGraphGlobal.globalCheckPointer;\n } else {\n compiled.checkpointer = LangGraphGlobal.globalCheckPointer;\n }\n\n compiled.store = options?.store ?? undefined;\n\n return compiled;\n}\n","import { BaseThreadsManager } from '../../threads/index.js';\nimport { Command, Config, Metadata, OnConflictBehavior, Run, Thread, ThreadStatus } from '@langgraph-js/sdk';\nimport { getGraph } from '../../utils/getGraph.js';\nimport { serialiseAsDict } from '../../graph/stream.js';\nimport { RunStatus, SortOrder, ThreadSortBy } from '../../types';\n\nexport class MemoryThreadsManager<ValuesType = unknown> implements BaseThreadsManager<ValuesType> {\n private threads: Thread<ValuesType>[] = [];\n async setup() {\n return;\n }\n\n async create(payload?: {\n metadata?: Metadata;\n threadId?: string;\n ifExists?: OnConflictBehavior;\n graphId?: string;\n supersteps?: Array<{ updates: Array<{ values: unknown; command?: Command; asNode: string }> }>;\n }): Promise<Thread<ValuesType>> {\n const threadId = payload?.threadId || crypto.randomUUID();\n if (payload?.ifExists === 'raise' && this.threads.some((t) => t.thread_id === threadId)) {\n throw new Error(`Thread with ID ${threadId} already exists.`);\n }\n\n const thread: Thread<ValuesType> = {\n thread_id: threadId,\n created_at: new Date().toISOString(),\n updated_at: new Date().toISOString(),\n metadata: payload?.metadata || {},\n status: 'idle',\n values: null as unknown as ValuesType,\n interrupts: {},\n };\n this.threads.push(thread);\n return thread;\n }\n\n async search(query?: {\n metadata?: Metadata;\n limit?: number;\n offset?: number;\n status?: ThreadStatus;\n sortBy?: ThreadSortBy;\n sortOrder?: SortOrder;\n }): Promise<Thread<ValuesType>[]> {\n let filteredThreads = [...this.threads];\n if (query?.status) {\n filteredThreads = filteredThreads.filter((t) => t.status === query.status);\n }\n\n if (query?.metadata) {\n for (const key in query.metadata) {\n if (Object.prototype.hasOwnProperty.call(query.metadata, key)) {\n filteredThreads = filteredThreads.filter(\n (t) => t.metadata && t.metadata[key] === query.metadata?.[key],\n );\n }\n }\n }\n\n if (query?.sortBy) {\n filteredThreads.sort((a, b) => {\n let aValue: any;\n let bValue: any;\n\n switch (query.sortBy) {\n case 'created_at':\n aValue = new Date(a.created_at).getTime();\n bValue = new Date(b.created_at).getTime();\n break;\n case 'updated_at':\n aValue = new Date(a.updated_at).getTime();\n bValue = new Date(b.updated_at).getTime();\n break;\n default:\n return 0;\n }\n\n if (query.sortOrder === 'desc') {\n return bValue - aValue;\n } else {\n return aValue - bValue;\n }\n });\n }\n\n const offset = query?.offset || 0;\n const limit = query?.limit || filteredThreads.length;\n\n return filteredThreads.slice(offset, offset + limit);\n }\n\n async get(threadId: string): Promise<Thread<ValuesType>> {\n const thread = this.threads.find((t) => t.thread_id === threadId);\n if (!thread) {\n throw new Error(`Thread with ID ${threadId} not found.`);\n }\n return thread;\n }\n async set(threadId: string, thread: Partial<Thread<ValuesType>>): Promise<void> {\n const index = this.threads.findIndex((t) => t.thread_id === threadId);\n if (index === -1) {\n throw new Error(`Thread with ID ${threadId} not found.`);\n }\n this.threads[index] = { ...this.threads[index], ...thread };\n }\n async delete(threadId: string): Promise<void> {\n const initialLength = this.threads.length;\n this.threads = this.threads.filter((t) => t.thread_id !== threadId);\n if (this.threads.length === initialLength) {\n throw new Error(`Thread with ID ${threadId} not found.`);\n }\n }\n async updateState(threadId: string, thread: Partial<Thread<ValuesType>>): Promise<Pick<Config, 'configurable'>> {\n const index = this.threads.findIndex((t) => t.thread_id === threadId) as number;\n if (index === -1) {\n throw new Error(`Thread with ID ${threadId} not found.`);\n }\n const targetThread = this.threads[index];\n if (targetThread.status === 'busy') {\n throw new Error(`Thread with ID ${threadId} is busy, can't update state.`);\n }\n this.threads[index] = { ...targetThread, values: thread.values as ValuesType };\n if (!targetThread.metadata?.graph_id) {\n throw new Error(`Thread with ID ${threadId} has no graph_id.`);\n }\n const graphId = targetThread.metadata?.graph_id as string;\n const config = {\n configurable: {\n thread_id: threadId,\n graph_id: graphId,\n },\n };\n const graph = await getGraph(graphId, config);\n const nextConfig = await graph.updateState(config, thread.values);\n const graphState = await graph.getState(config);\n await this.set(threadId, { values: JSON.parse(serialiseAsDict(graphState.values)) as ValuesType });\n return nextConfig;\n }\n runs: Run[] = [];\n async createRun(threadId: string, assistantId: string, payload?: { metadata?: Metadata }): Promise<Run> {\n const runId = crypto.randomUUID();\n const run: Run = {\n run_id: runId,\n thread_id: threadId,\n assistant_id: assistantId,\n created_at: new Date().toISOString(),\n updated_at: new Date().toISOString(),\n status: 'pending',\n metadata: payload?.metadata ?? {},\n multitask_strategy: 'reject',\n };\n this.runs.push(run);\n return run;\n }\n async listRuns(\n threadId: string,\n options?: { limit?: number; offset?: number; status?: RunStatus },\n ): Promise<Run[]> {\n let filteredRuns = [...this.runs];\n if (options?.status) {\n filteredRuns = filteredRuns.filter((r) => r.status === options.status);\n }\n if (options?.limit) {\n filteredRuns = filteredRuns.slice(options.offset || 0, (options.offset || 0) + options.limit);\n }\n return filteredRuns;\n }\n async updateRun(runId: string, run: Partial<Run>): Promise<void> {\n const index = this.runs.findIndex((r) => r.run_id === runId);\n if (index === -1) {\n throw new Error(`Run with ID ${runId} not found.`);\n }\n this.runs[index] = { ...this.runs[index], ...run };\n }\n}\n","import { BaseThreadsManager } from '../../threads/index.js';\nimport { Command, Config, Metadata, OnConflictBehavior, Run, Thread, ThreadStatus } from '@langgraph-js/sdk';\nimport type { SqliteSaver } from './checkpoint.js';\nimport type { DatabaseType } from './type.js';\nimport { getGraph } from '../../utils/getGraph.js';\nimport { serialiseAsDict } from '../../graph/stream.js';\nimport { RunStatus, SortOrder, ThreadSortBy } from '../../types';\ninterface ThreadRow {\n thread_id: string;\n created_at: string;\n updated_at: string;\n metadata: string;\n status: string;\n values: string;\n interrupts: string;\n}\n\ninterface RunRow {\n run_id: string;\n thread_id: string;\n assistant_id: string;\n created_at: string;\n updated_at: string;\n status: string;\n metadata: string;\n multitask_strategy: string;\n}\n\nexport class SQLiteThreadsManager<ValuesType = unknown> implements BaseThreadsManager<ValuesType> {\n db: DatabaseType;\n private isSetup: boolean = false;\n\n constructor(checkpointer: SqliteSaver) {\n this.db = checkpointer.db;\n }\n\n async setup() {\n if (this.isSetup) {\n return;\n }\n\n // 创建 threads 表\n this.db.exec(`\n CREATE TABLE IF NOT EXISTS threads (\n thread_id TEXT PRIMARY KEY,\n created_at TEXT NOT NULL,\n updated_at TEXT NOT NULL,\n metadata TEXT NOT NULL DEFAULT '{}',\n status TEXT NOT NULL DEFAULT 'idle',\n [values] TEXT,\n interrupts TEXT NOT NULL DEFAULT '{}'\n )\n `);\n\n // 创建 runs 表\n this.db.exec(`\n CREATE TABLE IF NOT EXISTS runs (\n run_id TEXT PRIMARY KEY,\n thread_id TEXT NOT NULL,\n assistant_id TEXT NOT NULL,\n created_at TEXT NOT NULL,\n updated_at TEXT NOT NULL,\n status TEXT NOT NULL DEFAULT 'pending',\n metadata TEXT NOT NULL DEFAULT '{}',\n multitask_strategy TEXT NOT NULL DEFAULT 'reject',\n FOREIGN KEY (thread_id) REFERENCES threads(thread_id) ON DELETE CASCADE\n )\n `);\n\n // 创建索引以提高查询性能\n this.db.exec(`CREATE INDEX IF NOT EXISTS idx_threads_status ON threads(status)`);\n this.db.exec(`CREATE INDEX IF NOT EXISTS idx_threads_created_at ON threads(created_at)`);\n this.db.exec(`CREATE INDEX IF NOT EXISTS idx_threads_updated_at ON threads(updated_at)`);\n this.db.exec(`CREATE INDEX IF NOT EXISTS idx_runs_thread_id ON runs(thread_id)`);\n this.db.exec(`CREATE INDEX IF NOT EXISTS idx_runs_status ON runs(status)`);\n\n this.isSetup = true;\n }\n\n async create(payload?: {\n metadata?: Metadata;\n threadId?: string;\n ifExists?: OnConflictBehavior;\n graphId?: string;\n supersteps?: Array<{ updates: Array<{ values: unknown; command?: Command; asNode: string }> }>;\n }): Promise<Thread<ValuesType>> {\n const threadId = payload?.threadId || crypto.randomUUID();\n\n // 检查线程是否已存在\n if (payload?.ifExists === 'raise') {\n const existingThread = this.db.prepare('SELECT thread_id FROM threads WHERE thread_id = ?').get(threadId);\n if (existingThread) {\n throw new Error(`Thread with ID ${threadId} already exists.`);\n }\n }\n\n const now = new Date().toISOString();\n const metadata = JSON.stringify(payload?.metadata || {});\n const interrupts = JSON.stringify({});\n\n const thread: Thread<ValuesType> = {\n thread_id: threadId,\n created_at: now,\n updated_at: now,\n metadata: payload?.metadata || {},\n status: 'idle',\n values: null as unknown as ValuesType,\n interrupts: {},\n };\n\n // 插入到数据库\n this.db\n .prepare(\n `\n INSERT INTO threads (thread_id, created_at, updated_at, metadata, status, [values], interrupts)\n VALUES (?, ?, ?, ?, ?, ?, ?)\n `,\n )\n .run(threadId, now, now, metadata, 'idle', null, interrupts);\n\n return thread;\n }\n\n async search(query?: {\n metadata?: Metadata;\n limit?: number;\n offset?: number;\n status?: ThreadStatus;\n sortBy?: ThreadSortBy;\n sortOrder?: SortOrder;\n }): Promise<Thread<ValuesType>[]> {\n let sql = 'SELECT * FROM threads';\n const whereConditions: string[] = [];\n const params: any[] = [];\n\n // 构建 WHERE 条件\n if (query?.status) {\n whereConditions.push('status = ?');\n params.push(query.status);\n }\n\n if (query?.metadata) {\n for (const [key, value] of Object.entries(query.metadata)) {\n whereConditions.push(`json_extract(metadata, '$.${key}') = ?`);\n params.push(JSON.stringify(value));\n }\n }\n\n if (whereConditions.length > 0) {\n sql += ' WHERE ' + whereConditions.join(' AND ');\n }\n\n // 添加排序\n if (query?.sortBy) {\n sql += ` ORDER BY ${query.sortBy}`;\n if (query.sortOrder === 'desc') {\n sql += ' DESC';\n } else {\n sql += ' ASC';\n }\n }\n\n // 添加分页\n if (query?.limit) {\n sql += ` LIMIT ${query.limit}`;\n if (query?.offset) {\n sql += ` OFFSET ${query.offset}`;\n }\n }\n\n const rows = this.db.prepare(sql).all(...params) as ThreadRow[];\n\n return rows.map((row) => ({\n thread_id: row.thread_id,\n created_at: row.created_at,\n updated_at: row.updated_at,\n metadata: JSON.parse(row.metadata),\n status: row.status as ThreadStatus,\n values: row.values ? JSON.parse(row.values) : (null as unknown as ValuesType),\n interrupts: JSON.parse(row.interrupts),\n }));\n }\n\n async get(threadId: string): Promise<Thread<ValuesType>> {\n const row = this.db.prepare('SELECT * FROM threads WHERE thread_id = ?').get(threadId) as ThreadRow;\n if (!row) {\n throw new Error(`Thread with ID ${threadId} not found.`);\n }\n\n return {\n thread_id: row.thread_id,\n created_at: row.created_at,\n updated_at: row.updated_at,\n metadata: JSON.parse(row.metadata),\n status: row.status as ThreadStatus,\n values: row.values ? JSON.parse(row.values) : (null as unknown as ValuesType),\n interrupts: JSON.parse(row.interrupts),\n };\n }\n async set(threadId: string, thread: Partial<Thread<ValuesType>>): Promise<void> {\n // 检查线程是否存在\n const existingThread = this.db.prepare('SELECT thread_id FROM threads WHERE thread_id = ?').get(threadId);\n if (!existingThread) {\n throw new Error(`Thread with ID ${threadId} not found.`);\n }\n\n const updateFields: string[] = [];\n const values: any[] = [];\n\n if (thread.metadata !== undefined) {\n updateFields.push('metadata = ?');\n values.push(JSON.stringify(thread.metadata));\n }\n\n if (thread.status !== undefined) {\n updateFields.push('status = ?');\n values.push(thread.status);\n }\n\n if (thread.values !== undefined) {\n updateFields.push('[values] = ?');\n values.push(thread.values ? JSON.stringify(thread.values) : null);\n }\n\n if (thread.interrupts !== undefined) {\n updateFields.push('interrupts = ?');\n values.push(JSON.stringify(thread.interrupts));\n }\n\n // 总是更新 updated_at\n updateFields.push('updated_at = ?');\n values.push(new Date().toISOString());\n\n if (updateFields.length > 0) {\n values.push(threadId);\n this.db\n .prepare(\n `\n UPDATE threads \n SET ${updateFields.join(', ')} \n WHERE thread_id = ?\n `,\n )\n .run(...values);\n }\n }\n async updateState(threadId: string, thread: Partial<Thread<ValuesType>>): Promise<Pick<Config, 'configurable'>> {\n // 从数据库查询线程信息\n const row = this.db.prepare('SELECT * FROM threads WHERE thread_id = ?').get(threadId) as ThreadRow;\n if (!row) {\n throw new Error(`Thread with ID ${threadId} not found.`);\n }\n\n const targetThread = {\n thread_id: row.thread_id,\n created_at: row.created_at,\n updated_at: row.updated_at,\n metadata: JSON.parse(row.metadata),\n status: row.status as ThreadStatus,\n values: row.values ? JSON.parse(row.values) : (null as unknown as ValuesType),\n interrupts: JSON.parse(row.interrupts),\n };\n\n if (targetThread.status === 'busy') {\n throw new Error(`Thread with ID ${threadId} is busy, can't update state.`);\n }\n\n if (!targetThread.metadata?.graph_id) {\n throw new Error(`Thread with ID ${threadId} has no graph_id.`);\n }\n const graphId = targetThread.metadata?.graph_id as string;\n const config = {\n configurable: {\n thread_id: threadId,\n graph_id: graphId,\n },\n };\n const graph = await getGraph(graphId, config);\n const nextConfig = await graph.updateState(config, thread.values);\n const graphState = await graph.getState(config);\n await this.set(threadId, { values: JSON.parse(serialiseAsDict(graphState.values)) as ValuesType });\n return nextConfig;\n }\n async delete(threadId: string): Promise<void> {\n const result = this.db.prepare('DELETE FROM threads WHERE thread_id = ?').run(threadId);\n if (result.changes === 0) {\n throw new Error(`Thread with ID ${threadId} not found.`);\n }\n }\n async createRun(threadId: string, assistantId: string, payload?: { metadata?: Metadata }): Promise<Run> {\n const runId = crypto.randomUUID();\n const now = new Date().toISOString();\n const metadata = JSON.stringify(payload?.metadata ?? {});\n\n const run: Run = {\n run_id: runId,\n thread_id: threadId,\n assistant_id: assistantId,\n created_at: now,\n updated_at: now,\n status: 'pending',\n metadata: payload?.metadata ?? {},\n multitask_strategy: 'reject',\n };\n\n // 插入到数据库\n this.db\n .prepare(\n `\n INSERT INTO runs (run_id, thread_id, assistant_id, created_at, updated_at, status, metadata, multitask_strategy)\n VALUES (?, ?, ?, ?, ?, ?, ?, ?)\n `,\n )\n .run(runId, threadId, assistantId, now, now, 'pending', metadata, 'reject');\n\n return run;\n }\n async listRuns(\n threadId: string,\n options?: { limit?: number; offset?: number; status?: RunStatus },\n ): Promise<Run[]> {\n let sql = 'SELECT * FROM runs WHERE thread_id = ?';\n const params: any[] = [threadId];\n\n if (options?.status) {\n sql += ' AND status = ?';\n params.push(options.status);\n }\n\n sql += ' ORDER BY created_at DESC';\n\n if (options?.limit) {\n sql += ` LIMIT ${options.limit}`;\n if (options?.offset) {\n sql += ` OFFSET ${options.offset}`;\n }\n }\n\n const rows = this.db.prepare(sql).all(...params) as RunRow[];\n\n return rows.map((row) => ({\n run_id: row.run_id,\n thread_id: row.thread_id,\n assistant_id: row.assistant_id,\n created_at: row.created_at,\n updated_at: row.updated_at,\n status: row.status as RunStatus,\n metadata: JSON.parse(row.metadata),\n multitask_strategy: row.multitask_strategy as 'reject',\n }));\n }\n async updateRun(runId: string, run: Partial<Run>): Promise<void> {\n // 检查运行是否存在\n const existingRun = this.db.prepare('SELECT run_id FROM runs WHERE run_id = ?').get(runId);\n if (!existingRun) {\n throw new Error(`Run with ID ${runId} not found.`);\n }\n\n const updateFields: string[] = [];\n const values: any[] = [];\n\n if (run.status !== undefined) {\n updateFields.push('status = ?');\n values.push(run.status);\n }\n\n if (run.metadata !== undefined) {\n updateFields.push('metadata = ?');\n values.push(JSON.stringify(run.metadata));\n }\n\n if (run.multitask_strategy !== undefined) {\n updateFields.push('multitask_strategy = ?');\n values.push(run.multitask_strategy);\n }\n\n // 总是更新 updated_at\n updateFields.push('updated_at = ?');\n values.push(new Date().toISOString());\n\n if (updateFields.length > 0) {\n values.push(runId);\n this.db\n .prepare(\n `\n UPDATE runs \n SET ${updateFields.join(', ')} \n WHERE run_id = ?\n `,\n )\n .run(...values);\n }\n }\n}\n","import { BaseThreadsManager } from '../../threads/index.js';\nimport { Command, Config, Metadata, OnConflictBehavior, Run, Thread, ThreadStatus } from '@langgraph-js/sdk';\nimport type { PostgresSaver } from '@langchain/langgraph-checkpoint-postgres';\nimport type { Pool } from 'pg';\n\n// 这两个东西循环引用了\nimport { getGraph } from '../../utils/getGraph.js';\nimport { serialiseAsDict } from '../../graph/stream.js';\nimport { RunStatus, SortOrder, ThreadSortBy } from '../../types';\n\ninterface ThreadRow {\n thread_id: string;\n created_at: Date;\n updated_at: Date;\n metadata: any;\n status: string;\n values: any;\n interrupts: any;\n}\n\ninterface RunRow {\n run_id: string;\n thread_id: string;\n assistant_id: string;\n created_at: Date;\n updated_at: Date;\n status: string;\n metadata: any;\n multitask_strategy: string;\n}\n\nexport class PostgresThreadsManager<ValuesType = unknown> implements BaseThreadsManager<ValuesType> {\n private pool: Pool;\n private isSetup: boolean = false;\n\n constructor(checkpointer: PostgresSaver) {\n // 访问 PostgresSaver 的 pool 属性(虽然是 private,但在运行时可以访问)\n this.pool = (checkpointer as any).pool;\n }\n\n public async setup(): Promise<void> {\n if (this.isSetup) {\n return;\n }\n\n // 创建 threads 表\n await this.pool.query(`\n CREATE TABLE IF NOT EXISTS threads (\n thread_id TEXT PRIMARY KEY,\n created_at TIMESTAMP NOT NULL,\n updated_at TIMESTAMP NOT NULL,\n metadata JSONB NOT NULL DEFAULT '{}',\n status TEXT NOT NULL DEFAULT 'idle',\n \"values\" JSONB,\n interrupts JSONB NOT NULL DEFAULT '{}'\n )\n `);\n\n // 创建 runs 表\n await this.pool.query(`\n CREATE TABLE IF NOT EXISTS runs (\n run_id TEXT PRIMARY KEY,\n thread_id TEXT NOT NULL,\n assistant_id TEXT NOT NULL,\n created_at TIMESTAMP NOT NULL,\n updated_at TIMESTAMP NOT NULL,\n status TEXT NOT NULL DEFAULT 'pending',\n metadata JSONB NOT NULL DEFAULT '{}',\n multitask_strategy TEXT NOT NULL DEFAULT 'reject',\n FOREIGN KEY (thread_id) REFERENCES threads(thread_id) ON DELETE CASCADE\n )\n `);\n\n // 创建索引以提高查询性能\n await this.pool.query(`CREATE INDEX IF NOT EXISTS idx_threads_status ON threads(status)`);\n await this.pool.query(`CREATE INDEX IF NOT EXISTS idx_threads_created_at ON threads(created_at)`);\n await this.pool.query(`CREATE INDEX IF NOT EXISTS idx_threads_updated_at ON threads(updated_at)`);\n await this.pool.query(`CREATE INDEX IF NOT EXISTS idx_runs_thread_id ON runs(thread_id)`);\n await this.pool.query(`CREATE INDEX IF NOT EXISTS idx_runs_status ON runs(status)`);\n\n this.isSetup = true;\n }\n\n async create(payload?: {\n metadata?: Metadata;\n threadId?: string;\n ifExists?: OnConflictBehavior;\n graphId?: string;\n supersteps?: Array<{ updates: Array<{ values: unknown; command?: Command; asNode: string }> }>;\n }): Promise<Thread<ValuesType>> {\n const threadId = payload?.threadId || crypto.randomUUID();\n\n // 检查线程是否已存在\n if (payload?.ifExists === 'raise') {\n const result = await this.pool.query('SELECT thread_id FROM threads WHERE thread_id = $1', [threadId]);\n if (result.rows.length > 0) {\n throw new Error(`Thread with ID ${threadId} already exists.`);\n }\n }\n\n const now = new Date();\n const metadata = payload?.metadata || {};\n const interrupts = {};\n\n const thread: Thread<ValuesType> = {\n thread_id: threadId,\n created_at: now.toISOString(),\n updated_at: now.toISOString(),\n metadata,\n status: 'idle',\n values: null as unknown as ValuesType,\n interrupts,\n };\n\n // 插入到数据库\n await this.pool.query(\n `\n INSERT INTO threads (thread_id, created_at, updated_at, metadata, status, \"values\", interrupts)\n VALUES ($1, $2, $3, $4, $5, $6, $7)\n `,\n [threadId, now, now, JSON.stringify(metadata), 'idle', null, JSON.stringify(interrupts)],\n );\n\n return thread;\n }\n\n async search(query?: {\n metadata?: Metadata;\n limit?: number;\n offset?: number;\n status?: ThreadStatus;\n sortBy?: ThreadSortBy;\n sortOrder?: SortOrder;\n }): Promise<Thread<ValuesType>[]> {\n let sql = 'SELECT * FROM threads';\n const whereConditions: string[] = [];\n const params: any[] = [];\n let paramIndex = 1;\n\n // 构建 WHERE 条件\n if (query?.status) {\n whereConditions.push(`status = $${paramIndex++}`);\n params.push(query.status);\n }\n\n if (query?.metadata) {\n for (const [key, value] of Object.entries(query.metadata)) {\n whereConditions.push(`metadata->$${paramIndex} = $${paramIndex + 1}`);\n params.push(key, JSON.stringify(value));\n paramIndex += 2;\n }\n }\n\n if (whereConditions.length > 0) {\n sql += ' WHERE ' + whereConditions.join(' AND ');\n }\n\n // 添加排序\n if (query?.sortBy) {\n sql += ` ORDER BY ${query.sortBy}`;\n if (query.sortOrder === 'desc') {\n sql += ' DESC';\n } else {\n sql += ' ASC';\n }\n }\n\n // 添加分页\n if (query?.limit) {\n sql += ` LIMIT $${paramIndex++}`;\n params.push(query.limit);\n if (query?.offset) {\n sql += ` OFFSET $${paramIndex++}`;\n params.push(query.offset);\n }\n }\n\n const result = await this.pool.query(sql, params);\n\n return result.rows.map((row: ThreadRow) => ({\n thread_id: row.thread_id,\n created_at: new Date(row.created_at).toISOString(),\n updated_at: new Date(row.updated_at).toISOString(),\n metadata: row.metadata,\n status: row.status as ThreadStatus,\n values: row.values || (null as unknown as ValuesType),\n interrupts: row.interrupts,\n }));\n }\n\n async get(threadId: string): Promise<Thread<ValuesType>> {\n const result = await this.pool.query('SELECT * FROM threads WHERE thread_id = $1', [threadId]);\n if (result.rows.length === 0) {\n throw new Error(`Thread with ID ${threadId} not found.`);\n }\n\n const row = result.rows[0] as ThreadRow;\n return {\n thread_id: row.thread_id,\n created_at: new Date(row.created_at).toISOString(),\n updated_at: new Date(row.updated_at).toISOString(),\n metadata: row.metadata,\n status: row.status as ThreadStatus,\n values: row.values || (null as unknown as ValuesType),\n interrupts: row.interrupts,\n };\n }\n\n async set(threadId: string, thread: Partial<Thread<ValuesType>>): Promise<void> {\n // 检查线程是否存在\n const existingThread = await this.pool.query('SELECT thread_id FROM threads WHERE thread_id = $1', [threadId]);\n if (existingThread.rows.length === 0) {\n throw new Error(`Thread with ID ${threadId} not found.`);\n }\n\n const updateFields: string[] = [];\n const values: any[] = [];\n let paramIndex = 1;\n\n if (thread.metadata !== undefined) {\n updateFields.push(`metadata = $${paramIndex++}`);\n values.push(JSON.stringify(thread.metadata));\n }\n\n if (thread.status !== undefined) {\n updateFields.push(`status = $${paramIndex++}`);\n values.push(thread.status);\n }\n\n if (thread.values !== undefined) {\n updateFields.push(`\"values\" = $${paramIndex++}`);\n values.push(thread.values ? JSON.stringify(thread.values) : null);\n }\n\n if (thread.interrupts !== undefined) {\n updateFields.push(`interrupts = $${paramIndex++}`);\n values.push(JSON.stringify(thread.interrupts));\n }\n\n // 总是更新 updated_at\n updateFields.push(`updated_at = $${paramIndex++}`);\n values.push(new Date());\n\n if (updateFields.length > 0) {\n values.push(threadId);\n await this.pool.query(\n `\n UPDATE threads \n SET ${updateFields.join(', ')} \n WHERE thread_id = $${paramIndex}\n `,\n values,\n );\n }\n }\n\n async updateState(threadId: string, thread: Partial<Thread<ValuesType>>): Promise<Pick<Config, 'configurable'>> {\n // 从数据库查询线程信息\n const result = await this.pool.query('SELECT * FROM threads WHERE thread_id = $1', [threadId]);\n if (result.rows.length === 0) {\n throw new Error(`Thread with ID ${threadId} not found.`);\n }\n\n const row = result.rows[0] as ThreadRow;\n const targetThread = {\n thread_id: row.thread_id,\n created_at: new Date(row.created_at).toISOString(),\n updated_at: new Date(row.updated_at).toISOString(),\n metadata: row.metadata,\n status: row.status as ThreadStatus,\n values: row.values || (null as unknown as ValuesType),\n interrupts: row.interrupts,\n };\n\n if (targetThread.status === 'busy') {\n throw new Error(`Thread with ID ${threadId} is busy, can't update state.`);\n }\n\n if (!targetThread.metadata?.graph_id) {\n throw new Error(`Thread with ID ${threadId} has no graph_id.`);\n }\n const graphId = targetThread.metadata?.graph_id as string;\n const config = {\n configurable: {\n thread_id: threadId,\n graph_id: graphId,\n },\n };\n const graph = await getGraph(graphId, config);\n const nextConfig = await graph.updateState(config, thread.values);\n const graphState = await graph.getState(config);\n await this.set(threadId, { values: JSON.parse(serialiseAsDict(graphState.values)) as ValuesType });\n return nextConfig;\n }\n\n async delete(threadId: string): Promise<void> {\n const result = await this.pool.query('DELETE FROM threads WHERE thread_id = $1', [threadId]);\n if (result.rowCount === 0) {\n throw new Error(`Thread with ID ${threadId} not found.`);\n }\n }\n\n async createRun(threadId: string, assistantId: string, payload?: { metadata?: Metadata }): Promise<Run> {\n const runId = crypto.randomUUID();\n const now = new Date();\n const metadata = payload?.metadata ?? {};\n\n const run: Run = {\n run_id: runId,\n thread_id: threadId,\n assistant_id: assistantId,\n created_at: now.toISOString(),\n updated_at: now.toISOString(),\n status: 'pending',\n metadata,\n multitask_strategy: 'reject',\n };\n\n // 插入到数据库\n await this.pool.query(\n `\n INSERT INTO runs (run_id, thread_id, assistant_id, created_at, updated_at, status, metadata, multitask_strategy)\n VALUES ($1, $2, $3, $4, $5, $6, $7, $8)\n `,\n [runId, threadId, assistantId, now, now, 'pending', JSON.stringify(metadata), 'reject'],\n );\n\n return run;\n }\n\n async listRuns(\n threadId: string,\n options?: { limit?: number; offset?: number; status?: RunStatus },\n ): Promise<Run[]> {\n let sql = 'SELECT * FROM runs WHERE thread_id = $1';\n const params: any[] = [threadId];\n let paramIndex = 2;\n\n if (options?.status) {\n sql += ` AND status = $${paramIndex++}`;\n params.push(options.status);\n }\n\n sql += ' ORDER BY created_at DESC';\n\n if (options?.limit) {\n sql += ` LIMIT $${paramIndex++}`;\n params.push(options.limit);\n if (options?.offset) {\n sql += ` OFFSET $${paramIndex++}`;\n params.push(options.offset);\n }\n }\n\n const result = await this.pool.query(sql, params);\n\n return result.rows.map((row: RunRow) => ({\n run_id: row.run_id,\n thread_id: row.thread_id,\n assistant_id: row.assistant_id,\n created_at: new Date(row.created_at).toISOString(),\n updated_at: new Date(row.updated_at).toISOString(),\n status: row.status as RunStatus,\n metadata: row.metadata,\n multitask_strategy: row.multitask_strategy as 'reject',\n }));\n }\n\n async updateRun(runId: string, run: Partial<Run>): Promise<void> {\n // 检查运行是否存在\n const existingRun = await this.pool.query('SELECT run_id FROM runs WHERE run_id = $1', [runId]);\n if (existingRun.rows.length === 0) {\n throw new Error(`Run with ID ${runId} not found.`);\n }\n\n const updateFields: string[] = [];\n const values: any[] = [];\n let paramIndex = 1;\n\n if (run.status !== undefined) {\n updateFields.push(`status = $${paramIndex++}`);\n values.push(run.status);\n }\n\n if (run.metadata !== undefined) {\n updateFields.push(`metadata = $${paramIndex++}`);\n values.push(JSON.stringify(run.metadata));\n }\n\n if (run.multitask_strategy !== undefined) {\n updateFields.push(`multitask_strategy = $${paramIndex++}`);\n values.push(run.multitask_strategy);\n }\n\n // 总是更新 updated_at\n updateFields.push(`updated_at = $${paramIndex++}`);\n values.push(new Date());\n\n if (updateFields.length > 0) {\n values.push(runId);\n await this.pool.query(\n `\n UPDATE runs \n SET ${updateFields.join(', ')} \n WHERE run_id = $${paramIndex}\n `,\n values,\n );\n }\n }\n}\n","import { BaseStreamQueueInterface, StreamQueueManager } from '../queue/stream_queue';\nimport { MemorySaver } from './memory/checkpoint';\nimport { MemoryStreamQueue } from './memory/queue';\nimport { MemoryThreadsManager } from './memory/threads';\nimport type { SqliteSaver as SqliteSaverType } from './sqlite/checkpoint';\nimport type { PostgresSaver } from '@langchain/langgraph-checkpoint-postgres';\nimport { SQLiteThreadsManager } from './sqlite/threads';\nimport { PostgresThreadsManager } from './pg/threads';\n\n// 所有的适配实现,都请写到这里,通过环境变量进行判断使用哪种方式进行适配\n\nexport const createCheckPointer = async () => {\n if (\n (process.env.REDIS_URL && process.env.CHECKPOINT_TYPE === 'redis') ||\n process.env.CHECKPOINT_TYPE === 'shallow/redis'\n ) {\n if (process.env.CHECKPOINT_TYPE === 'redis') {\n console.debug('LG | Using redis as checkpoint');\n const { RedisSaver } = await import('@langchain/langgraph-checkpoint-redis');\n return await RedisSaver.fromUrl(process.env.REDIS_URL!, {\n defaultTTL: 60, // TTL in minutes\n refreshOnRead: true,\n });\n }\n if (process.env.CHECKPOINT_TYPE === 'shallow/redis') {\n console.debug('LG | Using shallow redis as checkpoint');\n const { ShallowRedisSaver } = await import('@langchain/langgraph-checkpoint-redis/shallow');\n return await ShallowRedisSaver.fromUrl(process.env.REDIS_URL!);\n }\n }\n\n if (process.env.DATABASE_URL) {\n console.debug('LG | Using postgres as checkpoint');\n const { createPGCheckpoint } = await import('./pg/checkpoint');\n return createPGCheckpoint();\n }\n\n if (process.env.SQLITE_DATABASE_URI) {\n console.debug('LG | Using sqlite as checkpoint');\n const { SqliteSaver } = await import('./sqlite/checkpoint');\n const db = SqliteSaver.fromConnString(process.env.SQLITE_DATABASE_URI);\n return db;\n }\n return new MemorySaver();\n};\n\nexport const createMessageQueue = async () => {\n let q: new (id: string) => BaseStreamQueueInterface;\n if (process.env.REDIS_URL) {\n console.debug('LG | Using redis as stream queue');\n const { RedisStreamQueue } = await import('./redis/queue');\n q = RedisStreamQueue;\n } else {\n q = MemoryStreamQueue;\n }\n return new StreamQueueManager(q);\n};\n\nexport const createThreadManager = async (config: { checkpointer?: SqliteSaverType | PostgresSaver }) => {\n if (process.env.DATABASE_URL && config.checkpointer) {\n // 这里直接引入避免循环引用问题\n const threadsManager = new PostgresThreadsManager(config.checkpointer as PostgresSaver);\n if (process.env.DATABASE_INIT === 'true') {\n await threadsManager.setup();\n }\n return threadsManager;\n }\n if (process.env.SQLITE_DATABASE_URI && config.checkpointer) {\n const threadsManager = new SQLiteThreadsManager(config.checkpointer as SqliteSaverType);\n await threadsManager.setup();\n return threadsManager;\n }\n return new MemoryThreadsManager();\n};\n","import { BaseCheckpointSaver } from '@langchain/langgraph-checkpoint';\nimport { BaseStreamQueueInterface, StreamQueueManager } from './queue/stream_queue.js';\nimport { createCheckPointer, createMessageQueue, createThreadManager } from './storage/index.js';\nimport type { SqliteSaver } from './storage/sqlite/checkpoint.js';\nimport type { PostgresSaver } from '@langchain/langgraph-checkpoint-postgres';\nimport { BaseThreadsManager } from './threads/index.js';\n\nexport class LangGraphGlobal {\n static globalMessageQueue: StreamQueueManager<BaseStreamQueueInterface> = null as any;\n static globalCheckPointer: BaseCheckpointSaver = null as any;\n static globalThreadsManager: BaseThreadsManager = null as any;\n static isInitialized: Promise<void> | null = null;\n static async initGlobal() {\n if (LangGraphGlobal.isInitialized) {\n return LangGraphGlobal.isInitialized;\n }\n LangGraphGlobal.isInitialized = (async () => {\n const [globalMessageQueue, globalCheckPointer] = await Promise.all([\n createMessageQueue(),\n createCheckPointer(),\n ]);\n console.debug('LG | checkpointer created');\n const globalThreadsManager = await createThreadManager({\n checkpointer: globalCheckPointer as SqliteSaver | PostgresSaver,\n });\n console.debug('LG | threads manager created');\n console.debug('LG | global init done');\n LangGraphGlobal.globalMessageQueue = globalMessageQueue;\n LangGraphGlobal.globalCheckPointer = globalCheckPointer;\n LangGraphGlobal.globalThreadsManager = globalThreadsManager;\n })();\n return LangGraphGlobal.isInitialized;\n }\n}\n","import { BaseMessageChunk, isBaseMessage } from '@langchain/core/messages';\nimport type { BaseCheckpointSaver, LangGraphRunnableConfig } from '@langchain/langgraph';\nimport type { Pregel } from '@langchain/langgraph/pregel';\nimport { getLangGraphCommand } from '../utils/getLangGraphCommand.js';\nimport type { BaseStreamQueueInterface } from '../queue/stream_queue.js';\n\nimport { LangGraphGlobal } from '../global.js';\nimport { Run } from '@langgraph-js/sdk';\nimport { EventMessage, StreamErrorEventMessage, StreamEndEventMessage } from '../queue/event_message.js';\n\nimport { BaseThreadsManager } from '../threads/index.js';\nimport { StreamInputData } from '../types.js';\n\nexport type LangGraphStreamMode = Pregel<any, any>['streamMode'][number];\n\nexport async function streamStateWithQueue(\n threads: BaseThreadsManager,\n run: Run,\n queue: BaseStreamQueueInterface,\n payload: StreamInputData,\n options: {\n attempt: number;\n getGraph: (\n graphId: string,\n config: LangGraphRunnableConfig | undefined,\n options?: { checkpointer?: BaseCheckpointSaver | null },\n ) => Promise<Pregel<any, any, any, any, any>>;\n compressMessages?: boolean;\n },\n): Promise<void> {\n const kwargs = payload;\n const graphId = kwargs.config?.configurable?.graph_id;\n\n if (!graphId || typeof graphId !== 'string') {\n throw new Error('Invalid or missing graph_id');\n }\n\n const graph = await options.getGraph(graphId, payload.config, {\n checkpointer: payload.temporary ? null : undefined,\n });\n\n const userStreamMode = payload.streamMode ?? [];\n\n const libStreamMode: Set<LangGraphStreamMode> = new Set([\n 'values',\n ...userStreamMode.filter((mode) => mode !== 'events' && mode !== 'messages-tuple'),\n ]);\n\n if (userStreamMode.includes('messages-tuple')) {\n libStreamMode.add('messages');\n }\n\n if (userStreamMode.includes('messages')) {\n libStreamMode.add('values');\n }\n\n await queue.push(\n new EventMessage('metadata', {\n run_id: run.run_id,\n attempt: options.attempt,\n graph_id: graphId,\n }),\n );\n\n const metadata = {\n ...payload.config?.metadata,\n run_attempt: options.attempt,\n };\n const events = graph.streamEvents(\n payload.command != null ? getLangGraphCommand(payload.command) : payload.input ?? null,\n {\n version: 'v2' as const,\n\n interruptAfter: payload.interruptAfter,\n interruptBefore: payload.interruptBefore,\n\n tags: payload.config?.tags,\n configurable: payload.config?.configurable,\n recursionLimit: payload.config?.recursionLimit,\n subgraphs: payload.streamSubgraphs,\n metadata,\n\n runId: run.run_id,\n streamMode: [...libStreamMode],\n signal: queue.cancelSignal.signal,\n },\n );\n\n const messages: Record<string, BaseMessageChunk> = {};\n const completedIds = new Set<string>();\n\n try {\n for await (const event of events) {\n // console.log(event);\n if (event.tags?.includes('langsmith:hidden')) continue;\n if (event.event === 'on_chain_stream' && event.run_id === run.run_id) {\n const [ns, mode, chunk] = (\n payload.streamSubgraphs ? event.data.chunk : [null, ...event.data.chunk]\n ) as [string[] | null, LangGraphStreamMode, unknown];\n\n // Listen for debug events and capture checkpoint\n let data: unknown = chunk;\n\n if (mode === 'messages') {\n if (userStreamMode.includes('messages-tuple')) {\n await queue.push(new EventMessage('messages', data));\n }\n } else if (userStreamMode.includes(mode)) {\n if (payload.streamSubgraphs && ns?.length) {\n await queue.push(new EventMessage(`${mode}|${ns.join('|')}`, data));\n } else {\n await queue.push(new EventMessage(mode, data));\n }\n }\n if (mode === 'values') {\n await threads.set(run.thread_id, {\n values: data ? JSON.parse(serialiseAsDict(data)) : '',\n });\n }\n } else if (userStreamMode.includes('events')) {\n await queue.push(new EventMessage('events', event));\n }\n\n // TODO: we still rely on old messages mode based of streamMode=values\n // In order to fully switch to library messages mode, we need to do ensure that\n // `StreamMessagesHandler` sends the final message, which requires the following:\n // - handleLLMEnd does not send the final message b/c handleLLMNewToken sets the this.emittedChatModelRunIds[runId] flag. Python does not do that\n // - handleLLMEnd receives the final message as BaseMessageChunk rather than BaseMessage, which from the outside will become indistinguishable.\n // - handleLLMEnd should not dedupe the message\n // - Don't think there's an utility that would convert a BaseMessageChunk to a BaseMessage?\n if (userStreamMode.includes('messages')) {\n if (event.event === 'on_chain_stream' && event.run_id === run.run_id) {\n const newMessages: Array<BaseMessageChunk> = [];\n const [_, chunk]: [string, any] = event.data.chunk;\n\n let chunkMessages: Array<BaseMessageChunk> = [];\n if (typeof chunk === 'object' && chunk != null && 'messages' in chunk && !isBaseMessage(chunk)) {\n chunkMessages = chunk?.messages;\n }\n\n if (!Array.isArray(chunkMessages)) {\n chunkMessages = [chunkMessages];\n }\n\n for (const message of chunkMessages) {\n if (!message.id || completedIds.has(message.id)) continue;\n completedIds.add(message.id);\n newMessages.push(message);\n }\n\n if (newMessages.length > 0) {\n await queue.push(new EventMessage('messages/complete', newMessages));\n }\n } else if (event.event === 'on_chat_model_stream' && !event.tags?.includes('nostream')) {\n const message: BaseMessageChunk = event.data.chunk;\n\n if (!message.id) continue;\n\n if (messages[message.id] == null) {\n messages[message.id] = message;\n await queue.push(\n new EventMessage('messages/metadata', {\n [message.id]: { metadata: event.metadata },\n }),\n );\n } else {\n messages[message.id] = messages[message.id].concat(message);\n }\n\n await queue.push(new EventMessage('messages/partial', [messages[message.id]]));\n }\n }\n }\n } finally {\n // 发送流结束信号\n await queue.push(new StreamEndEventMessage());\n }\n}\n\n/**\n * 从队列创建数据流生成器\n * @param queueId 队列 ID\n * @param signal 中止信号\n * @returns 数据流生成器\n */\nexport async function* createStreamFromQueue(queueId: string): AsyncGenerator<{ event: string; data: unknown }> {\n const queue = LangGraphGlobal.globalMessageQueue.getQueue(queueId);\n return queue.onDataReceive();\n}\n\nexport const serialiseAsDict = (obj: unknown, indent = 2) => {\n return JSON.stringify(\n obj,\n function (key: string | number, value: unknown) {\n const rawValue = this[key];\n if (\n rawValue != null &&\n typeof rawValue === 'object' &&\n 'toDict' in rawValue &&\n typeof rawValue.toDict === 'function'\n ) {\n // TODO: we need to upstream this to LangChainJS\n const { type, data } = rawValue.toDict();\n return { ...data, type };\n }\n\n return value;\n },\n indent,\n );\n};\n/**\n * 兼容性函数:保持原有 API,同时使用队列模式\n * @param run 运行配置\n * @param options 选项\n * @returns 数据流生成器\n */\nexport async function* streamState(\n threads: BaseThreadsManager,\n run: Run | Promise<Run>,\n payload: StreamInputData,\n options: {\n attempt: number;\n getGraph: (\n graphId: string,\n config: LangGraphRunnableConfig | undefined,\n options?: { checkpointer?: BaseCheckpointSaver | null },\n ) => Promise<Pregel<any, any, any, any, any>>;\n compressMessages?: boolean;\n },\n) {\n run = await run;\n // 生成唯一的队列 ID\n const queueId = run.run_id;\n const threadId = run.thread_id;\n try {\n // 启动队列推送任务(在后台异步执行)\n await threads.set(threadId, { status: 'busy' });\n await threads.updateRun(run.run_id, { status: 'running' });\n const queue = LangGraphGlobal.globalMessageQueue.createQueue(queueId);\n const state = queue.onDataReceive();\n streamStateWithQueue(threads, run, queue, payload, options).catch((error) => {\n console.error('Queue task error:', error);\n // 如果生产者出错,向队列推送错误信号\n LangGraphGlobal.globalMessageQueue.pushToQueue(queueId, new StreamErrorEventMessage(error));\n // TODO 不知道这里需不需要错误处理\n });\n for await (const data of state) {\n yield data;\n }\n await threads.updateRun(run.run_id, { status: 'success' });\n } catch (error) {\n // 如果发生错误,确保清理资源\n console.error('Stream error:', error);\n await threads.updateRun(run.run_id, { status: 'error' });\n await threads.set(threadId, { status: 'error' });\n // throw error;\n } finally {\n // 在完成后清理队列\n await threads.set(threadId, { status: 'idle' });\n LangGraphGlobal.globalMessageQueue.removeQueue(queueId);\n }\n}\n","import { StreamEvent } from '@langchain/core/tracers/log_stream';\nimport { streamState } from './graph/stream.js';\nimport { Assistant, Run, StreamMode, Metadata, AssistantGraph } from '@langchain/langgraph-sdk';\nimport { getGraph, GRAPHS } from './utils/getGraph.js';\nimport { LangGraphGlobal } from './global.js';\nimport { AssistantSortBy, CancelAction, ILangGraphClient, RunStatus, SortOrder, StreamInputData } from './types.js';\nexport { registerGraph } from './utils/getGraph.js';\n\nexport const AssistantEndpoint: ILangGraphClient['assistants'] = {\n async search(query?: {\n graphId?: string;\n metadata?: Metadata;\n limit?: number;\n offset?: number;\n sortBy?: AssistantSortBy;\n sortOrder?: SortOrder;\n }): Promise<Assistant[]> {\n if (query?.graphId) {\n return [\n {\n assistant_id: query.graphId,\n graph_id: query.graphId,\n config: {},\n created_at: new Date().toISOString(),\n updated_at: new Date().toISOString(),\n metadata: {},\n version: 1,\n name: query.graphId,\n description: '',\n } as Assistant,\n ];\n }\n return Object.entries(GRAPHS).map(\n ([graphId, _]) =>\n ({\n assistant_id: graphId,\n graph_id: graphId,\n config: {},\n metadata: {},\n version: 1,\n name: graphId,\n description: '',\n created_at: new Date().toISOString(),\n updated_at: new Date().toISOString(),\n } as Assistant),\n );\n },\n async getGraph(assistantId: string, options?: { xray?: boolean | number }): Promise<AssistantGraph> {\n const config = {};\n const graph = await getGraph(assistantId, config);\n const drawable = await graph.getGraphAsync({\n ...config,\n xray: options?.xray ?? undefined,\n });\n return drawable.toJSON() as AssistantGraph;\n },\n};\n\nexport const createEndpoint = async (): Promise<ILangGraphClient> => {\n await LangGraphGlobal.initGlobal();\n\n const getThreads = () => {\n return LangGraphGlobal.globalThreadsManager;\n };\n return {\n assistants: AssistantEndpoint,\n threads: LangGraphGlobal.globalThreadsManager,\n runs: {\n list(\n threadId: string,\n options?: {\n limit?: number;\n offset?: number;\n status?: RunStatus;\n },\n ): Promise<Run[]> {\n return getThreads().listRuns(threadId, options);\n },\n async cancel(threadId: string, runId: string, wait?: boolean, action?: CancelAction): Promise<void> {\n return LangGraphGlobal.globalMessageQueue.cancelQueue(runId);\n },\n async *stream(threadId: string, assistantId: string, payload: StreamInputData) {\n payload.config = {\n ...(payload.config ?? {}),\n configurable: {\n ...(payload.config?.configurable ?? {}),\n graph_id: assistantId,\n thread_id: threadId,\n },\n };\n const threads = getThreads();\n for await (const data of streamState(\n threads,\n threads.createRun(threadId, assistantId, payload),\n payload,\n {\n attempt: 0,\n getGraph,\n },\n )) {\n yield data;\n }\n },\n joinStream(\n threadId: string,\n runId: string,\n options?:\n | {\n signal?: AbortSignal;\n cancelOnDisconnect?: boolean;\n lastEventId?: string;\n streamMode?: StreamMode | StreamMode[];\n }\n | AbortSignal,\n ): AsyncGenerator<{ id?: string; event: StreamEvent; data: any }> {\n throw new Error('Function not implemented.');\n },\n },\n };\n};\n"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export { A as AssistantEndpoint, L as LangGraphGlobal, c as createEndpoint, r as registerGraph } from './createEndpoint-
|
|
1
|
+
export { A as AssistantEndpoint, L as LangGraphGlobal, c as createEndpoint, r as registerGraph } from './createEndpoint-DR0yqiXl.js';
|
|
2
2
|
import { StateGraph } from '@langchain/langgraph';
|
|
3
3
|
|
|
4
4
|
const createEntrypointGraph = ({
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { B as BaseStreamQueue, C as CancelEventMessage } from './createEndpoint-
|
|
1
|
+
import { B as BaseStreamQueue, C as CancelEventMessage } from './createEndpoint-DR0yqiXl.js';
|
|
2
2
|
import { createClient } from 'redis';
|
|
3
3
|
|
|
4
4
|
class RedisStreamQueue extends BaseStreamQueue {
|
|
@@ -117,4 +117,4 @@ class RedisStreamQueue extends BaseStreamQueue {
|
|
|
117
117
|
}
|
|
118
118
|
|
|
119
119
|
export { RedisStreamQueue };
|
|
120
|
-
//# sourceMappingURL=queue-
|
|
120
|
+
//# sourceMappingURL=queue-CBIF3No6.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"queue-
|
|
1
|
+
{"version":3,"file":"queue-CBIF3No6.js","sources":["../src/storage/redis/queue.ts"],"sourcesContent":["import { CancelEventMessage, EventMessage } from '../../queue/event_message.js';\nimport { BaseStreamQueue } from '../../queue/stream_queue.js';\nimport { BaseStreamQueueInterface } from '../../queue/stream_queue.js';\nimport { createClient, RedisClientType } from 'redis';\n\n/**\n * Redis 实现的消息队列,用于存储消息\n */\nexport class RedisStreamQueue extends BaseStreamQueue implements BaseStreamQueueInterface {\n static redis: RedisClientType = createClient({ url: process.env.REDIS_URL! });\n static subscriberRedis: RedisClientType = createClient({ url: process.env.REDIS_URL! });\n private redis: RedisClientType;\n private subscriberRedis: RedisClientType;\n private queueKey: string;\n private channelKey: string;\n private isConnected = false;\n public cancelSignal: AbortController;\n\n constructor(readonly id: string = 'default') {\n super(id, true);\n this.queueKey = `queue:${this.id}`;\n this.channelKey = `channel:${this.id}`;\n this.redis = RedisStreamQueue.redis;\n this.subscriberRedis = RedisStreamQueue.subscriberRedis;\n this.cancelSignal = new AbortController();\n\n // 连接 Redis 客户端\n this.redis.connect();\n this.subscriberRedis.connect();\n this.isConnected = true;\n }\n\n /**\n * 推送消息到 Redis 队列\n */\n async push(item: EventMessage): Promise<void> {\n const data = await this.encodeData(item);\n const serializedData = Buffer.from(data);\n\n // 推送到队列\n await this.redis.lPush(this.queueKey, serializedData);\n\n // 设置队列 TTL 为 300 秒\n await this.redis.expire(this.queueKey, 300);\n\n // 发布到频道通知有新数据\n await this.redis.publish(this.channelKey, serializedData);\n\n this.emit('dataChange', data);\n }\n\n /**\n * 异步生成器:支持 for await...of 方式消费队列数据\n */\n async *onDataReceive(): AsyncGenerator<EventMessage, void, unknown> {\n let queue: EventMessage[] = [];\n let pendingResolve: (() => void) | null = null;\n let isStreamEnded = false;\n const handleMessage = async (message: string) => {\n const data = (await this.decodeData(message)) as EventMessage;\n queue.push(data);\n // 检查是否为流结束或错误信号\n if (\n data.event === '__stream_end__' ||\n data.event === '__stream_error__' ||\n data.event === '__stream_cancel__'\n ) {\n setTimeout(() => {\n isStreamEnded = true;\n if (pendingResolve) {\n pendingResolve();\n pendingResolve = null;\n }\n }, 300);\n\n if (data.event === '__stream_cancel__') {\n this.cancel();\n }\n }\n\n if (pendingResolve) {\n pendingResolve();\n pendingResolve = null;\n }\n };\n\n // 订阅 Redis 频道\n await this.subscriberRedis.subscribe(this.channelKey, (message) => {\n handleMessage(message);\n });\n\n try {\n while (!isStreamEnded) {\n if (queue.length > 0) {\n for (const item of queue) {\n yield item;\n }\n queue = [];\n } else {\n await new Promise((resolve) => {\n pendingResolve = resolve as () => void;\n });\n }\n }\n } finally {\n await this.subscriberRedis.unsubscribe(this.channelKey);\n }\n }\n\n /**\n * 获取队列中的所有数据\n */\n async getAll(): Promise<EventMessage[]> {\n const data = await this.redis.lRange(this.queueKey, 0, -1);\n\n if (!data || data.length === 0) {\n return [];\n }\n\n if (this.compressMessages) {\n return (await Promise.all(\n data.map(async (item: string) => {\n const parsed = JSON.parse(item) as EventMessage;\n return (await this.decodeData(parsed as any)) as EventMessage;\n }),\n )) as EventMessage[];\n } else {\n return data.map((item: string) => JSON.parse(item) as EventMessage);\n }\n }\n\n /**\n * 清空队列\n */\n clear(): void {\n if (this.isConnected) {\n this.redis.del(this.queueKey);\n }\n }\n\n /**\n * 取消操作\n */\n cancel(): void {\n this.push(new CancelEventMessage());\n this.cancelSignal.abort('user cancel this run');\n }\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { NextResponse } from 'next/server';
|
|
2
|
-
import { c as createEndpoint, s as serialiseAsDict } from './createEndpoint-
|
|
2
|
+
import { c as createEndpoint, s as serialiseAsDict } from './createEndpoint-DR0yqiXl.js';
|
|
3
3
|
import { a as AssistantGraphQuerySchema, b as RunListQuerySchema, A as AssistantsSearchSchema, f as ThreadCreatePayloadSchema, g as ThreadSearchPayloadSchema, e as ThreadStateUpdate, R as RunStreamPayloadSchema, d as RunCancelQuerySchema } from './zod-C5lbZYj6.js';
|
|
4
4
|
import camelcaseKeys from 'camelcase-keys';
|
|
5
5
|
|
|
@@ -173,4 +173,4 @@ async function DELETE(req) {
|
|
|
173
173
|
}
|
|
174
174
|
|
|
175
175
|
export { DELETE, GET, POST };
|
|
176
|
-
//# sourceMappingURL=router-
|
|
176
|
+
//# sourceMappingURL=router-BUscrJnK.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"router-B-kkqXdS.js","sources":["../src/adapter/nextjs/endpoint.ts","../src/adapter/nextjs/router.ts"],"sourcesContent":["import { createEndpoint } from '../../createEndpoint.js';\nexport const client = await createEndpoint();\n","/** @ts-ignore */\nimport { NextRequest, NextResponse } from 'next/server';\nimport { client } from './endpoint';\nimport {\n AssistantsSearchSchema,\n AssistantGraphQuerySchema,\n RunStreamPayloadSchema,\n RunListQuerySchema,\n RunCancelQuerySchema,\n ThreadCreatePayloadSchema,\n ThreadSearchPayloadSchema,\n ThreadStateUpdate,\n} from '../zod';\nimport { serialiseAsDict } from '../../graph/stream';\nimport camelcaseKeys from 'camelcase-keys';\n\n// Next.js App Router 的 SSE 响应实现\nasync function sseResponse(generator: AsyncGenerator<{ event: string; data: unknown }>): Promise<Response> {\n const encoder = new TextEncoder();\n const stream = new ReadableStream({\n async start(controller) {\n try {\n for await (const { event, data } of generator) {\n const line = `event: ${event}\\n` + `data: ${serialiseAsDict(data, 0)}\\n\\n`;\n controller.enqueue(encoder.encode(line));\n }\n } catch (err) {\n // ignore\n } finally {\n controller.close();\n }\n },\n });\n return new Response(stream, {\n headers: {\n 'Content-Type': 'text/event-stream; charset=utf-8',\n 'Cache-Control': 'no-cache, no-transform',\n Connection: 'keep-alive',\n },\n });\n}\n\n// 统一路由处理器\nexport async function GET(req: NextRequest) {\n const url = new URL(req.url);\n const pathname = url.pathname;\n\n // Assistants routes\n if (pathname.match(/\\/assistants\\/[^/]+\\/graph$/)) {\n const match = pathname.match(/\\/assistants\\/([^/]+)\\/graph$/);\n if (match) {\n const assistant_id = match[1];\n const xrayParam = url.searchParams.get('xray') ?? undefined;\n const queryParams = { xray: xrayParam };\n const { xray } = AssistantGraphQuerySchema.parse(queryParams);\n const data = await client.assistants.getGraph(assistant_id, {\n xray: xray !== undefined ? xray === 'true' : undefined,\n });\n return NextResponse.json(data);\n }\n }\n\n // Threads routes\n if (pathname.match(/\\/threads\\/[0-9a-fA-F-]{36}$/)) {\n const match = pathname.match(/\\/threads\\/([0-9a-fA-F-]{36})$/);\n if (match) {\n const thread_id = match[1];\n const data = await client.threads.get(thread_id);\n return NextResponse.json(data);\n }\n }\n\n // Runs routes\n if (pathname.match(/\\/threads\\/[0-9a-fA-F-]{36}\\/runs$/)) {\n const match = pathname.match(/\\/threads\\/([0-9a-fA-F-]{36})\\/runs$/);\n if (match) {\n const thread_id = match[1];\n const limit = url.searchParams.get('limit') ?? undefined;\n const offset = url.searchParams.get('offset') ?? undefined;\n const status = url.searchParams.get('status') ?? undefined;\n const queryParams = { limit, offset, status };\n const {\n limit: parsedLimit,\n offset: parsedOffset,\n status: parsedStatus,\n } = RunListQuerySchema.parse(queryParams);\n const runs = await client.runs.list(thread_id, {\n limit: parsedLimit,\n offset: parsedOffset,\n status: parsedStatus,\n });\n return Response.json(runs);\n }\n }\n\n return new NextResponse('Not Found', { status: 404 });\n}\n\nexport async function POST(req: NextRequest) {\n const url = new URL(req.url);\n const pathname = url.pathname;\n\n // Assistants routes\n if (pathname.endsWith('/assistants/search')) {\n const body = await req.json();\n const payload = AssistantsSearchSchema.parse(body);\n const data = await client.assistants.search({\n graphId: payload.graph_id,\n metadata: payload.metadata,\n limit: payload.limit,\n offset: payload.offset,\n });\n return NextResponse.json(data, {\n headers: { 'X-Pagination-Total': String(data.length) },\n });\n }\n\n // Threads routes\n if (pathname.endsWith('/threads')) {\n const body = await req.json();\n const payload = ThreadCreatePayloadSchema.parse(body);\n const thread = await client.threads.create(camelcaseKeys(payload));\n return NextResponse.json(thread);\n }\n\n if (pathname.endsWith('/threads/search')) {\n const body = await req.json();\n const payload = ThreadSearchPayloadSchema.parse(body);\n const result = await client.threads.search(camelcaseKeys(payload));\n return NextResponse.json(result, {\n headers: { 'X-Pagination-Total': String(result.length) },\n });\n }\n\n // Threads state update\n if (pathname.match(/\\/threads\\/[0-9a-fA-F-]{36}\\/state$/)) {\n const match = pathname.match(/\\/threads\\/([0-9a-fA-F-]{36})\\/state$/);\n if (match) {\n const thread_id = match[1];\n const body = await req.json();\n const payload = ThreadStateUpdate.parse(body);\n const result = await client.threads.updateState(thread_id, camelcaseKeys(payload));\n return NextResponse.json(result);\n }\n }\n\n // Runs routes - stream\n if (pathname.match(/\\/threads\\/[0-9a-fA-F-]{36}\\/runs\\/stream$/)) {\n const match = pathname.match(/\\/threads\\/([0-9a-fA-F-]{36})\\/runs\\/stream$/);\n if (match) {\n const thread_id = match[1];\n const body = await req.json();\n const payload = RunStreamPayloadSchema.parse(body);\n\n // Extract custom context from request headers\n const langgraphContextHeader = req.headers.get('x-langgraph-context');\n if (langgraphContextHeader) {\n const langgraphContext = JSON.parse(decodeURIComponent(langgraphContextHeader));\n payload.config = payload.config || {};\n payload.config.configurable = payload.config.configurable || {};\n Object.assign(payload.config.configurable, langgraphContext);\n }\n const generator = client.runs.stream(\n thread_id,\n payload.assistant_id as string,\n camelcaseKeys(payload) as any,\n );\n return sseResponse(generator as any);\n }\n }\n\n // Runs routes - cancel\n if (pathname.match(/\\/threads\\/[0-9a-fA-F-]{36}\\/runs\\/[0-9a-fA-F-]{36}\\/cancel$/)) {\n const match = pathname.match(/\\/threads\\/([0-9a-fA-F-]{36})\\/runs\\/([0-9a-fA-F-]{36})\\/cancel$/);\n if (match) {\n const thread_id = match[1];\n const run_id = match[2];\n const waitParam = url.searchParams.get('wait') ?? undefined;\n const actionParam = url.searchParams.get('action') ?? undefined;\n const queryParams = {\n wait: waitParam ? waitParam === 'true' : false,\n action: actionParam ?? 'interrupt',\n };\n const { wait, action } = RunCancelQuerySchema.parse(queryParams);\n const promise = client.runs.cancel(thread_id, run_id, wait, action);\n if (wait) await promise;\n return new Response(null, { status: wait ? 204 : 202 });\n }\n }\n\n return new NextResponse('Not Found', { status: 404 });\n}\n\nexport async function DELETE(req: NextRequest) {\n const url = new URL(req.url);\n const pathname = url.pathname;\n\n // Threads routes\n if (pathname.match(/\\/threads\\/[0-9a-fA-F-]{36}$/)) {\n const match = pathname.match(/\\/threads\\/([0-9a-fA-F-]{36})$/);\n if (match) {\n const thread_id = match[1];\n await client.threads.delete(thread_id);\n return new NextResponse(null, { status: 204 });\n }\n }\n\n return new NextResponse('Not Found', { status: 404 });\n}\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"router-BUscrJnK.js","sources":["../src/adapter/nextjs/endpoint.ts","../src/adapter/nextjs/router.ts"],"sourcesContent":["import { createEndpoint } from '../../createEndpoint.js';\nexport const client = await createEndpoint();\n","/** @ts-ignore */\nimport { NextRequest, NextResponse } from 'next/server';\nimport { client } from './endpoint';\nimport {\n AssistantsSearchSchema,\n AssistantGraphQuerySchema,\n RunStreamPayloadSchema,\n RunListQuerySchema,\n RunCancelQuerySchema,\n ThreadCreatePayloadSchema,\n ThreadSearchPayloadSchema,\n ThreadStateUpdate,\n} from '../zod';\nimport { serialiseAsDict } from '../../graph/stream';\nimport camelcaseKeys from 'camelcase-keys';\n\n// Next.js App Router 的 SSE 响应实现\nasync function sseResponse(generator: AsyncGenerator<{ event: string; data: unknown }>): Promise<Response> {\n const encoder = new TextEncoder();\n const stream = new ReadableStream({\n async start(controller) {\n try {\n for await (const { event, data } of generator) {\n const line = `event: ${event}\\n` + `data: ${serialiseAsDict(data, 0)}\\n\\n`;\n controller.enqueue(encoder.encode(line));\n }\n } catch (err) {\n // ignore\n } finally {\n controller.close();\n }\n },\n });\n return new Response(stream, {\n headers: {\n 'Content-Type': 'text/event-stream; charset=utf-8',\n 'Cache-Control': 'no-cache, no-transform',\n Connection: 'keep-alive',\n },\n });\n}\n\n// 统一路由处理器\nexport async function GET(req: NextRequest) {\n const url = new URL(req.url);\n const pathname = url.pathname;\n\n // Assistants routes\n if (pathname.match(/\\/assistants\\/[^/]+\\/graph$/)) {\n const match = pathname.match(/\\/assistants\\/([^/]+)\\/graph$/);\n if (match) {\n const assistant_id = match[1];\n const xrayParam = url.searchParams.get('xray') ?? undefined;\n const queryParams = { xray: xrayParam };\n const { xray } = AssistantGraphQuerySchema.parse(queryParams);\n const data = await client.assistants.getGraph(assistant_id, {\n xray: xray !== undefined ? xray === 'true' : undefined,\n });\n return NextResponse.json(data);\n }\n }\n\n // Threads routes\n if (pathname.match(/\\/threads\\/[0-9a-fA-F-]{36}$/)) {\n const match = pathname.match(/\\/threads\\/([0-9a-fA-F-]{36})$/);\n if (match) {\n const thread_id = match[1];\n const data = await client.threads.get(thread_id);\n return NextResponse.json(data);\n }\n }\n\n // Runs routes\n if (pathname.match(/\\/threads\\/[0-9a-fA-F-]{36}\\/runs$/)) {\n const match = pathname.match(/\\/threads\\/([0-9a-fA-F-]{36})\\/runs$/);\n if (match) {\n const thread_id = match[1];\n const limit = url.searchParams.get('limit') ?? undefined;\n const offset = url.searchParams.get('offset') ?? undefined;\n const status = url.searchParams.get('status') ?? undefined;\n const queryParams = { limit, offset, status };\n const {\n limit: parsedLimit,\n offset: parsedOffset,\n status: parsedStatus,\n } = RunListQuerySchema.parse(queryParams);\n const runs = await client.runs.list(thread_id, {\n limit: parsedLimit,\n offset: parsedOffset,\n status: parsedStatus,\n });\n return Response.json(runs);\n }\n }\n\n return new NextResponse('Not Found', { status: 404 });\n}\n\nexport async function POST(req: NextRequest) {\n const url = new URL(req.url);\n const pathname = url.pathname;\n\n // Assistants routes\n if (pathname.endsWith('/assistants/search')) {\n const body = await req.json();\n const payload = AssistantsSearchSchema.parse(body);\n const data = await client.assistants.search({\n graphId: payload.graph_id,\n metadata: payload.metadata,\n limit: payload.limit,\n offset: payload.offset,\n });\n return NextResponse.json(data, {\n headers: { 'X-Pagination-Total': String(data.length) },\n });\n }\n\n // Threads routes\n if (pathname.endsWith('/threads')) {\n const body = await req.json();\n const payload = ThreadCreatePayloadSchema.parse(body);\n const thread = await client.threads.create(camelcaseKeys(payload));\n return NextResponse.json(thread);\n }\n\n if (pathname.endsWith('/threads/search')) {\n const body = await req.json();\n const payload = ThreadSearchPayloadSchema.parse(body);\n const result = await client.threads.search(camelcaseKeys(payload));\n return NextResponse.json(result, {\n headers: { 'X-Pagination-Total': String(result.length) },\n });\n }\n\n // Threads state update\n if (pathname.match(/\\/threads\\/[0-9a-fA-F-]{36}\\/state$/)) {\n const match = pathname.match(/\\/threads\\/([0-9a-fA-F-]{36})\\/state$/);\n if (match) {\n const thread_id = match[1];\n const body = await req.json();\n const payload = ThreadStateUpdate.parse(body);\n const result = await client.threads.updateState(thread_id, camelcaseKeys(payload));\n return NextResponse.json(result);\n }\n }\n\n // Runs routes - stream\n if (pathname.match(/\\/threads\\/[0-9a-fA-F-]{36}\\/runs\\/stream$/)) {\n const match = pathname.match(/\\/threads\\/([0-9a-fA-F-]{36})\\/runs\\/stream$/);\n if (match) {\n const thread_id = match[1];\n const body = await req.json();\n const payload = RunStreamPayloadSchema.parse(body);\n\n // Extract custom context from request headers\n const langgraphContextHeader = req.headers.get('x-langgraph-context');\n if (langgraphContextHeader) {\n const langgraphContext = JSON.parse(decodeURIComponent(langgraphContextHeader));\n payload.config = payload.config || {};\n payload.config.configurable = payload.config.configurable || {};\n Object.assign(payload.config.configurable, langgraphContext);\n }\n const generator = client.runs.stream(\n thread_id,\n payload.assistant_id as string,\n camelcaseKeys(payload) as any,\n );\n return sseResponse(generator as any);\n }\n }\n\n // Runs routes - cancel\n if (pathname.match(/\\/threads\\/[0-9a-fA-F-]{36}\\/runs\\/[0-9a-fA-F-]{36}\\/cancel$/)) {\n const match = pathname.match(/\\/threads\\/([0-9a-fA-F-]{36})\\/runs\\/([0-9a-fA-F-]{36})\\/cancel$/);\n if (match) {\n const thread_id = match[1];\n const run_id = match[2];\n const waitParam = url.searchParams.get('wait') ?? undefined;\n const actionParam = url.searchParams.get('action') ?? undefined;\n const queryParams = {\n wait: waitParam ? waitParam === 'true' : false,\n action: actionParam ?? 'interrupt',\n };\n const { wait, action } = RunCancelQuerySchema.parse(queryParams);\n const promise = client.runs.cancel(thread_id, run_id, wait, action);\n if (wait) await promise;\n return new Response(null, { status: wait ? 204 : 202 });\n }\n }\n\n return new NextResponse('Not Found', { status: 404 });\n}\n\nexport async function DELETE(req: NextRequest) {\n const url = new URL(req.url);\n const pathname = url.pathname;\n\n // Threads routes\n if (pathname.match(/\\/threads\\/[0-9a-fA-F-]{36}$/)) {\n const match = pathname.match(/\\/threads\\/([0-9a-fA-F-]{36})$/);\n if (match) {\n const thread_id = match[1];\n await client.threads.delete(thread_id);\n return new NextResponse(null, { status: 204 });\n }\n }\n\n return new NextResponse('Not Found', { status: 404 });\n}\n"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@langgraph-js/pure-graph",
|
|
3
|
-
"version": "2.1.
|
|
3
|
+
"version": "2.1.4",
|
|
4
4
|
"description": "A library that provides a standard LangGraph endpoint for integrating into various frameworks like Next.js and Hono.js, with support for multiple storage backends (SQLite, PostgreSQL, Redis) and message queues.",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|