@langgraph-js/pure-graph 2.8.1 → 3.0.0
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/fetch/assistants.d.ts +42 -0
- package/dist/adapter/fetch/endpoint.d.ts +25 -0
- package/dist/adapter/fetch/index.d.ts +5 -3
- package/dist/adapter/fetch/index.js +858 -25
- package/dist/adapter/fetch/index.js.map +1 -1
- package/dist/adapter/fetch/runs-extended.d.ts +21 -0
- package/dist/adapter/fetch/runs-stateless.d.ts +28 -0
- package/dist/adapter/fetch/runs.d.ts +0 -4
- package/dist/adapter/fetch/threads.d.ts +36 -0
- package/dist/adapter/nextjs/index.js +1 -1
- package/dist/adapter/zod.d.ts +292 -1
- package/dist/agents/ask_subagents.d.ts +32 -0
- package/dist/agents/index.d.ts +1 -0
- package/dist/createEndpoint-BViLxrhh.js +208 -0
- package/dist/createEndpoint-BViLxrhh.js.map +1 -0
- package/dist/createEndpoint.d.ts +25 -0
- package/dist/index.d.ts +1 -1
- package/dist/index.js +75 -17
- package/dist/index.js.map +1 -1
- package/dist/queue/stream_queue.d.ts +4 -4
- package/dist/queue-CtVch_az.js +153 -0
- package/dist/queue-CtVch_az.js.map +1 -0
- package/dist/remote/index.js +158 -0
- package/dist/remote/index.js.map +1 -0
- package/dist/remote-threads-CrG03ZS7.js +255 -0
- package/dist/remote-threads-CrG03ZS7.js.map +1 -0
- package/dist/storage/index.d.ts +1 -1
- package/dist/storage/kysely/index.d.ts +1 -0
- package/dist/storage/kysely/remote-threads.d.ts +124 -0
- package/dist/storage/kysely/threads.d.ts +26 -2
- package/dist/storage/kysely/types.d.ts +10 -0
- package/dist/storage/memory/queue.d.ts +1 -1
- package/dist/storage/memory/threads.d.ts +27 -1
- package/dist/storage/redis/queue.d.ts +15 -12
- package/dist/storage/remote/fetch.d.ts +20 -0
- package/dist/storage/remote/remote-server.d.ts +17 -0
- package/dist/storage/remote/server.d.ts +11 -0
- package/dist/storage/remote/types.d.ts +121 -0
- package/dist/{stream-B7KiKwj1.js → stream-umoA6h4q.js} +513 -77
- package/dist/stream-umoA6h4q.js.map +1 -0
- package/dist/threads/index.d.ts +25 -1
- package/dist/types.d.ts +53 -1
- package/package.json +11 -5
- package/dist/createEndpoint-BsPsukFX.js +0 -122
- package/dist/createEndpoint-BsPsukFX.js.map +0 -1
- package/dist/queue-BSCnCent.js +0 -134
- package/dist/queue-BSCnCent.js.map +0 -1
- package/dist/stream-B7KiKwj1.js.map +0 -1
|
@@ -0,0 +1,255 @@
|
|
|
1
|
+
var RemoteErrorCode = /* @__PURE__ */ ((RemoteErrorCode2) => {
|
|
2
|
+
RemoteErrorCode2["NETWORK_ERROR"] = "NETWORK_ERROR";
|
|
3
|
+
RemoteErrorCode2["CONNECTION_TIMEOUT"] = "CONNECTION_TIMEOUT";
|
|
4
|
+
RemoteErrorCode2["INTERNAL_ERROR"] = "INTERNAL_ERROR";
|
|
5
|
+
RemoteErrorCode2["THREAD_NOT_FOUND"] = "THREAD_NOT_FOUND";
|
|
6
|
+
RemoteErrorCode2["THREAD_BUSY"] = "THREAD_BUSY";
|
|
7
|
+
RemoteErrorCode2["RUN_NOT_FOUND"] = "RUN_NOT_FOUND";
|
|
8
|
+
RemoteErrorCode2["GRAPH_NOT_FOUND"] = "GRAPH_NOT_FOUND";
|
|
9
|
+
RemoteErrorCode2["INVALID_REQUEST"] = "INVALID_REQUEST";
|
|
10
|
+
return RemoteErrorCode2;
|
|
11
|
+
})(RemoteErrorCode || {});
|
|
12
|
+
class RemoteApiError extends Error {
|
|
13
|
+
constructor(code, message, statusCode) {
|
|
14
|
+
super(message);
|
|
15
|
+
this.code = code;
|
|
16
|
+
this.statusCode = statusCode;
|
|
17
|
+
this.name = "RemoteApiError";
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
async function request(url, method, options) {
|
|
22
|
+
try {
|
|
23
|
+
let requestUrl = url;
|
|
24
|
+
if (options?.query) {
|
|
25
|
+
const searchParams = new URLSearchParams();
|
|
26
|
+
Object.entries(options.query).forEach(([key, value]) => {
|
|
27
|
+
searchParams.append(key, String(value));
|
|
28
|
+
});
|
|
29
|
+
requestUrl += `?${searchParams.toString()}`;
|
|
30
|
+
}
|
|
31
|
+
const response = await fetch(requestUrl, {
|
|
32
|
+
method,
|
|
33
|
+
headers: {
|
|
34
|
+
"Content-Type": "application/json"
|
|
35
|
+
},
|
|
36
|
+
body: options?.body ? JSON.stringify(options.body) : void 0
|
|
37
|
+
});
|
|
38
|
+
const data = await response.json();
|
|
39
|
+
if (!response.ok || !data.success) {
|
|
40
|
+
throw new RemoteApiError(
|
|
41
|
+
data.error?.code || RemoteErrorCode.INTERNAL_ERROR,
|
|
42
|
+
data.error?.message || "Unknown error",
|
|
43
|
+
response.status
|
|
44
|
+
);
|
|
45
|
+
}
|
|
46
|
+
return data;
|
|
47
|
+
} catch (error) {
|
|
48
|
+
if (error instanceof RemoteApiError) {
|
|
49
|
+
throw error;
|
|
50
|
+
}
|
|
51
|
+
throw new RemoteApiError(
|
|
52
|
+
RemoteErrorCode.NETWORK_ERROR,
|
|
53
|
+
`Network error: ${error instanceof Error ? error.message : "Unknown error"}`
|
|
54
|
+
);
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
async function remoteGet(url, query) {
|
|
58
|
+
return request(url, "GET", { query });
|
|
59
|
+
}
|
|
60
|
+
async function remotePost(url, body, query) {
|
|
61
|
+
return request(url, "POST", { body, query });
|
|
62
|
+
}
|
|
63
|
+
async function remotePut(url, body, query) {
|
|
64
|
+
return request(url, "PUT", { body, query });
|
|
65
|
+
}
|
|
66
|
+
async function remoteDelete(url, query) {
|
|
67
|
+
return request(url, "DELETE", { query });
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
class RemoteKyselyThreadsManager {
|
|
71
|
+
constructor(serverUrl, httpClient) {
|
|
72
|
+
this.serverUrl = serverUrl;
|
|
73
|
+
this.httpClient = httpClient;
|
|
74
|
+
this.serverUrl = serverUrl.replace(/\/$/, "");
|
|
75
|
+
this.httpClient = httpClient || fetch;
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* 初始化数据库
|
|
79
|
+
*/
|
|
80
|
+
async setup() {
|
|
81
|
+
await remotePost(`${this.serverUrl}/setup`);
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* 创建线程
|
|
85
|
+
*/
|
|
86
|
+
async create(payload) {
|
|
87
|
+
const response = await remotePost(`${this.serverUrl}/threads`, payload);
|
|
88
|
+
return response.data;
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* 搜索线程
|
|
92
|
+
*/
|
|
93
|
+
async search(query) {
|
|
94
|
+
const params = {};
|
|
95
|
+
if (query?.ids !== void 0 && query.ids.length > 0) {
|
|
96
|
+
params.ids = JSON.stringify(query.ids);
|
|
97
|
+
}
|
|
98
|
+
if (query?.metadata !== void 0) {
|
|
99
|
+
params.metadata = JSON.stringify(query.metadata);
|
|
100
|
+
}
|
|
101
|
+
if (query?.limit !== void 0) {
|
|
102
|
+
params.limit = query.limit;
|
|
103
|
+
}
|
|
104
|
+
if (query?.offset !== void 0) {
|
|
105
|
+
params.offset = query.offset;
|
|
106
|
+
}
|
|
107
|
+
if (query?.status !== void 0) {
|
|
108
|
+
params.status = query.status;
|
|
109
|
+
}
|
|
110
|
+
if (query?.sortBy !== void 0) {
|
|
111
|
+
params.sortBy = query.sortBy;
|
|
112
|
+
}
|
|
113
|
+
if (query?.sortOrder !== void 0) {
|
|
114
|
+
params.sortOrder = query.sortOrder;
|
|
115
|
+
}
|
|
116
|
+
if (query?.values !== void 0) {
|
|
117
|
+
params.values = JSON.stringify(query.values);
|
|
118
|
+
}
|
|
119
|
+
if (query?.select !== void 0) {
|
|
120
|
+
params.select = JSON.stringify(query.select);
|
|
121
|
+
}
|
|
122
|
+
if (query?.withoutDetails !== void 0) {
|
|
123
|
+
params.withoutDetails = query.withoutDetails;
|
|
124
|
+
}
|
|
125
|
+
const response = await remoteGet(`${this.serverUrl}/threads`, params);
|
|
126
|
+
return response.data;
|
|
127
|
+
}
|
|
128
|
+
/**
|
|
129
|
+
* 获取线程
|
|
130
|
+
*/
|
|
131
|
+
async get(threadId) {
|
|
132
|
+
const response = await remoteGet(`${this.serverUrl}/threads/${threadId}`);
|
|
133
|
+
return response.data;
|
|
134
|
+
}
|
|
135
|
+
/**
|
|
136
|
+
* 更新线程
|
|
137
|
+
*/
|
|
138
|
+
async set(threadId, thread) {
|
|
139
|
+
await remotePut(`${this.serverUrl}/threads/${threadId}`, thread);
|
|
140
|
+
}
|
|
141
|
+
/**
|
|
142
|
+
* 删除线程
|
|
143
|
+
*/
|
|
144
|
+
async delete(threadId) {
|
|
145
|
+
await remoteDelete(`${this.serverUrl}/threads/${threadId}`);
|
|
146
|
+
}
|
|
147
|
+
/**
|
|
148
|
+
* 更新状态
|
|
149
|
+
*/
|
|
150
|
+
async updateState(threadId, thread) {
|
|
151
|
+
const response = await remotePost(
|
|
152
|
+
`${this.serverUrl}/threads/${threadId}/state`,
|
|
153
|
+
thread
|
|
154
|
+
);
|
|
155
|
+
return response.data;
|
|
156
|
+
}
|
|
157
|
+
/**
|
|
158
|
+
* 创建运行
|
|
159
|
+
*/
|
|
160
|
+
async createRun(threadId, assistantId, payload) {
|
|
161
|
+
const response = await remotePost(`${this.serverUrl}/threads/${threadId}/runs`, payload || {}, {
|
|
162
|
+
assistantId
|
|
163
|
+
});
|
|
164
|
+
return response.data;
|
|
165
|
+
}
|
|
166
|
+
/**
|
|
167
|
+
* 列出运行
|
|
168
|
+
*/
|
|
169
|
+
async listRuns(threadId, options) {
|
|
170
|
+
const params = {};
|
|
171
|
+
if (options?.limit !== void 0) {
|
|
172
|
+
params.limit = options.limit;
|
|
173
|
+
}
|
|
174
|
+
if (options?.offset !== void 0) {
|
|
175
|
+
params.offset = options.offset;
|
|
176
|
+
}
|
|
177
|
+
if (options?.status !== void 0) {
|
|
178
|
+
params.status = options.status;
|
|
179
|
+
}
|
|
180
|
+
const response = await remoteGet(`${this.serverUrl}/threads/${threadId}/runs`, params);
|
|
181
|
+
return response.data;
|
|
182
|
+
}
|
|
183
|
+
/**
|
|
184
|
+
* 更新运行
|
|
185
|
+
*/
|
|
186
|
+
async updateRun(runId, run) {
|
|
187
|
+
await remotePut(`${this.serverUrl}/runs/${runId}`, run);
|
|
188
|
+
}
|
|
189
|
+
// New methods for Threads API
|
|
190
|
+
/**
|
|
191
|
+
* 计算线程数量
|
|
192
|
+
*/
|
|
193
|
+
async count(query) {
|
|
194
|
+
const params = {};
|
|
195
|
+
if (query?.ids !== void 0 && query.ids.length > 0) {
|
|
196
|
+
params.ids = JSON.stringify(query.ids);
|
|
197
|
+
}
|
|
198
|
+
if (query?.metadata !== void 0) {
|
|
199
|
+
params.metadata = JSON.stringify(query.metadata);
|
|
200
|
+
}
|
|
201
|
+
if (query?.status !== void 0) {
|
|
202
|
+
params.status = query.status;
|
|
203
|
+
}
|
|
204
|
+
if (query?.values !== void 0) {
|
|
205
|
+
params.values = JSON.stringify(query.values);
|
|
206
|
+
}
|
|
207
|
+
const response = await remoteGet(`${this.serverUrl}/threads/count`, params);
|
|
208
|
+
return response.data;
|
|
209
|
+
}
|
|
210
|
+
/**
|
|
211
|
+
* 更新线程元数据
|
|
212
|
+
*/
|
|
213
|
+
async patch(threadId, updates) {
|
|
214
|
+
const response = await remotePost(`${this.serverUrl}/threads/${threadId}`, updates);
|
|
215
|
+
return response.data;
|
|
216
|
+
}
|
|
217
|
+
/**
|
|
218
|
+
* 获取线程状态
|
|
219
|
+
*/
|
|
220
|
+
async getState(threadId, options) {
|
|
221
|
+
const params = {};
|
|
222
|
+
if (options?.subgraphs !== void 0) {
|
|
223
|
+
params.subgraphs = options.subgraphs;
|
|
224
|
+
}
|
|
225
|
+
if (options?.checkpointId !== void 0) {
|
|
226
|
+
params.checkpointId = options.checkpointId;
|
|
227
|
+
}
|
|
228
|
+
const response = await remotePost(`${this.serverUrl}/threads/${threadId}/state`, params);
|
|
229
|
+
return response.data;
|
|
230
|
+
}
|
|
231
|
+
/**
|
|
232
|
+
* 获取线程历史
|
|
233
|
+
*/
|
|
234
|
+
async getStateHistory(threadId, options) {
|
|
235
|
+
const params = {};
|
|
236
|
+
if (options?.limit !== void 0) {
|
|
237
|
+
params.limit = options.limit;
|
|
238
|
+
}
|
|
239
|
+
if (options?.before !== void 0) {
|
|
240
|
+
params.before = options.before;
|
|
241
|
+
}
|
|
242
|
+
const response = await remotePost(`${this.serverUrl}/threads/${threadId}/history`, params);
|
|
243
|
+
return response.data;
|
|
244
|
+
}
|
|
245
|
+
/**
|
|
246
|
+
* 复制线程
|
|
247
|
+
*/
|
|
248
|
+
async copy(threadId) {
|
|
249
|
+
const response = await remotePost(`${this.serverUrl}/threads/${threadId}/copy`);
|
|
250
|
+
return response.data;
|
|
251
|
+
}
|
|
252
|
+
}
|
|
253
|
+
|
|
254
|
+
export { RemoteKyselyThreadsManager };
|
|
255
|
+
//# sourceMappingURL=remote-threads-CrG03ZS7.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"remote-threads-CrG03ZS7.js","sources":["../src/storage/remote/types.ts","../src/storage/remote/fetch.ts","../src/storage/kysely/remote-threads.ts"],"sourcesContent":["/**\n * Remote PostgreSQL Adapter 类型定义\n * 定义 API 请求/响应格式和错误类型\n */\n\nimport { Metadata, OnConflictBehavior, Run, Thread, ThreadStatus, Command } from '@langgraph-js/sdk';\nimport { RunStatus, SortOrder, ThreadSortBy } from '../../types';\n\n/**\n * API 响应通用格式\n */\nexport interface RemoteResponse<T = any> {\n success: boolean;\n data?: T;\n error?: {\n code: string;\n message: string;\n };\n}\n\n/**\n * 错误码枚举\n */\nexport enum RemoteErrorCode {\n // 网络错误\n NETWORK_ERROR = 'NETWORK_ERROR',\n CONNECTION_TIMEOUT = 'CONNECTION_TIMEOUT',\n\n // 服务器错误\n INTERNAL_ERROR = 'INTERNAL_ERROR',\n\n // 业务错误\n THREAD_NOT_FOUND = 'THREAD_NOT_FOUND',\n THREAD_BUSY = 'THREAD_BUSY',\n RUN_NOT_FOUND = 'RUN_NOT_FOUND',\n GRAPH_NOT_FOUND = 'GRAPH_NOT_FOUND',\n INVALID_REQUEST = 'INVALID_REQUEST',\n}\n\n/**\n * 远程 API 错误类\n */\nexport class RemoteApiError extends Error {\n constructor(\n public code: string,\n message: string,\n public statusCode?: number\n ) {\n super(message);\n this.name = 'RemoteApiError';\n }\n}\n\n/**\n * Setup API 响应\n */\nexport interface SetupResponse {\n message: string;\n}\n\n/**\n * Create Thread API 请求\n */\nexport interface CreateThreadRequest {\n metadata?: Metadata;\n threadId?: string;\n ifExists?: OnConflictBehavior;\n graphId?: string;\n supersteps?: Array<{ updates: Array<{ values: unknown; command?: Command; asNode: string }> }>;\n}\n\n/**\n * Search Threads API 请求\n */\nexport interface SearchThreadsRequest {\n ids?: string[];\n metadata?: Metadata;\n limit?: number;\n offset?: number;\n status?: ThreadStatus;\n sortBy?: ThreadSortBy;\n sortOrder?: SortOrder;\n values?: unknown;\n select?: Array<'thread_id' | 'created_at' | 'updated_at' | 'metadata' | 'config' | 'context' | 'status' | 'values' | 'interrupts'>;\n /**\n * @deprecated Use `select` parameter instead for fine-grained field control\n */\n withoutDetails?: boolean;\n}\n\n/**\n * Update Thread API 请求\n */\nexport interface UpdateThreadRequest {\n metadata?: Metadata;\n status?: ThreadStatus;\n values?: any;\n interrupts?: Record<string, any>;\n}\n\n/**\n * Update State API 请求\n */\nexport interface UpdateStateRequest {\n values?: any;\n}\n\n/**\n * Update State API 响应\n */\nexport interface UpdateStateResponse {\n configurable: Record<string, any>;\n}\n\n/**\n * Create Run API 请求\n */\nexport interface CreateRunRequest {\n metadata?: Metadata;\n}\n\n/**\n * List Runs API 请求\n */\nexport interface ListRunsRequest {\n limit?: number;\n offset?: number;\n status?: RunStatus;\n}\n\n/**\n * Update Run API 请求\n */\nexport interface UpdateRunRequest {\n status?: RunStatus;\n metadata?: Metadata;\n multitask_strategy?: 'reject' | 'interrupt' | 'rollback';\n}\n","/**\n * Remote PostgreSQL Adapter - 简化的 Fetch 工具函数\n */\n\nimport { RemoteResponse } from './types';\nimport { RemoteApiError, RemoteErrorCode } from './types';\n\n/**\n * 发起 HTTP 请求的简化函数\n */\nasync function request<T>(\n url: string,\n method: string,\n options?: {\n query?: Record<string, string | number | boolean>;\n body?: any;\n },\n): Promise<RemoteResponse<T>> {\n try {\n // 添加查询参数\n let requestUrl = url;\n if (options?.query) {\n const searchParams = new URLSearchParams();\n Object.entries(options.query).forEach(([key, value]) => {\n searchParams.append(key, String(value));\n });\n requestUrl += `?${searchParams.toString()}`;\n }\n\n // 发起请求\n const response = await fetch(requestUrl, {\n method,\n headers: {\n 'Content-Type': 'application/json',\n },\n body: options?.body ? JSON.stringify(options.body) : undefined,\n });\n\n // 解析响应\n const data: RemoteResponse<T> = (await response.json()) as any;\n\n // 检查响应状态\n if (!response.ok || !data.success) {\n throw new RemoteApiError(\n data.error?.code || RemoteErrorCode.INTERNAL_ERROR,\n data.error?.message || 'Unknown error',\n response.status,\n );\n }\n\n return data;\n } catch (error) {\n // 如果是 RemoteApiError,直接抛出\n if (error instanceof RemoteApiError) {\n throw error;\n }\n\n // 网络错误转换为 RemoteApiError\n throw new RemoteApiError(\n RemoteErrorCode.NETWORK_ERROR,\n `Network error: ${error instanceof Error ? error.message : 'Unknown error'}`,\n );\n }\n}\n\n/**\n * GET 请求\n */\nexport async function remoteGet<T>(\n url: string,\n query?: Record<string, string | number | boolean>,\n): Promise<RemoteResponse<T>> {\n return request<T>(url, 'GET', { query });\n}\n\n/**\n * POST 请求\n */\nexport async function remotePost<T>(\n url: string,\n body?: any,\n query?: Record<string, string | number | boolean>,\n): Promise<RemoteResponse<T>> {\n return request<T>(url, 'POST', { body, query });\n}\n\n/**\n * PUT 请求\n */\nexport async function remotePut<T>(\n url: string,\n body?: any,\n query?: Record<string, string | number | boolean>,\n): Promise<RemoteResponse<T>> {\n return request<T>(url, 'PUT', { body, query });\n}\n\n/**\n * DELETE 请求\n */\nexport async function remoteDelete<T>(\n url: string,\n query?: Record<string, string | number | boolean>,\n): Promise<RemoteResponse<T>> {\n return request<T>(url, 'DELETE', { query });\n}\n","/**\n * Remote Kysely Threads Manager\n * 通过 HTTP/REST API 与远程 PostgreSQL 服务器通信\n */\n\nimport { BaseThreadsManager } from '../../threads';\nimport { Metadata, OnConflictBehavior, Run, Thread, ThreadState } from '@langgraph-js/sdk';\nimport { RunStatus, SortOrder, ThreadSortBy } from '../../types';\nimport { remoteGet, remotePost, remotePut, remoteDelete } from '../remote/fetch';\nimport { RemoteApiError, RemoteErrorCode } from '../remote/types';\n\n/**\n * 远程 Kysely Threads Manager\n */\nexport class RemoteKyselyThreadsManager<ValuesType = unknown> implements BaseThreadsManager<ValuesType> {\n constructor(private serverUrl: string, private httpClient?: typeof fetch) {\n // 确保服务器 URL 没有尾部斜杠\n this.serverUrl = serverUrl.replace(/\\/$/, '');\n this.httpClient = httpClient || fetch;\n }\n\n /**\n * 初始化数据库\n */\n async setup(): Promise<void> {\n await remotePost(`${this.serverUrl}/setup`);\n }\n\n /**\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?: any; asNode: string }> }>;\n }): Promise<Thread<ValuesType>> {\n const response = await remotePost<Thread<ValuesType>>(`${this.serverUrl}/threads`, payload);\n return response.data as Thread<ValuesType>;\n }\n\n /**\n * 搜索线程\n */\n async search(query?: {\n ids?: string[];\n metadata?: Metadata;\n limit?: number;\n offset?: number;\n status?: any;\n sortBy?: ThreadSortBy;\n sortOrder?: SortOrder;\n values?: ValuesType;\n select?: Array<\n | 'thread_id'\n | 'created_at'\n | 'updated_at'\n | 'metadata'\n | 'config'\n | 'context'\n | 'status'\n | 'values'\n | 'interrupts'\n >;\n /**\n * @deprecated Use `select` parameter instead for fine-grained field control\n */\n withoutDetails?: boolean;\n }): Promise<Thread<ValuesType>[]> {\n const params: Record<string, string | number | boolean> = {};\n\n if (query?.ids !== undefined && query.ids.length > 0) {\n params.ids = JSON.stringify(query.ids);\n }\n if (query?.metadata !== undefined) {\n params.metadata = JSON.stringify(query.metadata);\n }\n if (query?.limit !== undefined) {\n params.limit = query.limit;\n }\n if (query?.offset !== undefined) {\n params.offset = query.offset;\n }\n if (query?.status !== undefined) {\n params.status = query.status;\n }\n if (query?.sortBy !== undefined) {\n params.sortBy = query.sortBy;\n }\n if (query?.sortOrder !== undefined) {\n params.sortOrder = query.sortOrder;\n }\n if (query?.values !== undefined) {\n params.values = JSON.stringify(query.values);\n }\n if (query?.select !== undefined) {\n params.select = JSON.stringify(query.select);\n }\n if (query?.withoutDetails !== undefined) {\n params.withoutDetails = query.withoutDetails;\n }\n\n const response = await remoteGet<Thread<ValuesType>[]>(`${this.serverUrl}/threads`, params);\n return response.data as Thread<ValuesType>[];\n }\n\n /**\n * 获取线程\n */\n async get(threadId: string): Promise<Thread<ValuesType>> {\n const response = await remoteGet<Thread<ValuesType>>(`${this.serverUrl}/threads/${threadId}`);\n return response.data as Thread<ValuesType>;\n }\n\n /**\n * 更新线程\n */\n async set(threadId: string, thread: Partial<Thread<ValuesType>>): Promise<void> {\n await remotePut(`${this.serverUrl}/threads/${threadId}`, thread);\n }\n\n /**\n * 删除线程\n */\n async delete(threadId: string): Promise<void> {\n await remoteDelete(`${this.serverUrl}/threads/${threadId}`);\n }\n\n /**\n * 更新状态\n */\n async updateState(\n threadId: string,\n thread: Partial<Thread<ValuesType>>,\n ): Promise<{ configurable: Record<string, any> }> {\n const response = await remotePost<{ configurable: Record<string, any> }>(\n `${this.serverUrl}/threads/${threadId}/state`,\n thread,\n );\n return response.data as { configurable: Record<string, any> };\n }\n\n /**\n * 创建运行\n */\n async createRun(threadId: string, assistantId: string, payload?: { metadata?: Metadata }): Promise<Run> {\n const response = await remotePost<Run>(`${this.serverUrl}/threads/${threadId}/runs`, payload || {}, {\n assistantId,\n });\n return response.data as Run;\n }\n\n /**\n * 列出运行\n */\n async listRuns(\n threadId: string,\n options?: { limit?: number; offset?: number; status?: RunStatus },\n ): Promise<Run[]> {\n const params: Record<string, string | number> = {};\n\n if (options?.limit !== undefined) {\n params.limit = options.limit;\n }\n if (options?.offset !== undefined) {\n params.offset = options.offset;\n }\n if (options?.status !== undefined) {\n params.status = options.status;\n }\n\n const response = await remoteGet<Run[]>(`${this.serverUrl}/threads/${threadId}/runs`, params);\n return response.data as Run[];\n }\n\n /**\n * 更新运行\n */\n async updateRun(runId: string, run: Partial<Run>): Promise<void> {\n await remotePut(`${this.serverUrl}/runs/${runId}`, run);\n }\n\n // New methods for Threads API\n\n /**\n * 计算线程数量\n */\n async count(query?: { ids?: string[]; metadata?: Metadata; status?: any; values?: ValuesType }): Promise<number> {\n const params: Record<string, string> = {};\n\n if (query?.ids !== undefined && query.ids.length > 0) {\n params.ids = JSON.stringify(query.ids);\n }\n if (query?.metadata !== undefined) {\n params.metadata = JSON.stringify(query.metadata);\n }\n if (query?.status !== undefined) {\n params.status = query.status;\n }\n if (query?.values !== undefined) {\n params.values = JSON.stringify(query.values);\n }\n\n const response = await remoteGet<number>(`${this.serverUrl}/threads/count`, params);\n return response.data as number;\n }\n\n /**\n * 更新线程元数据\n */\n async patch(\n threadId: string,\n updates: Partial<Omit<Thread<ValuesType>, 'thread_id' | 'created_at' | 'updated_at'>>,\n ): Promise<Thread<ValuesType>> {\n const response = await remotePost<Thread<ValuesType>>(`${this.serverUrl}/threads/${threadId}`, updates);\n return response.data as Thread<ValuesType>;\n }\n\n /**\n * 获取线程状态\n */\n async getState(threadId: string, options?: { subgraphs?: boolean; checkpointId?: string }): Promise<ThreadState> {\n const params: Record<string, boolean | string> = {};\n\n if (options?.subgraphs !== undefined) {\n params.subgraphs = options.subgraphs;\n }\n if (options?.checkpointId !== undefined) {\n params.checkpointId = options.checkpointId;\n }\n\n const response = await remotePost<ThreadState>(`${this.serverUrl}/threads/${threadId}/state`, params);\n return response.data as ThreadState;\n }\n\n /**\n * 获取线程历史\n */\n async getStateHistory(\n threadId: string,\n options?: {\n limit?: number;\n before?: string;\n filter?: { source?: string; step?: number };\n },\n ): Promise<ThreadState[]> {\n const params: Record<string, number | string> = {};\n\n if (options?.limit !== undefined) {\n params.limit = options.limit;\n }\n if (options?.before !== undefined) {\n params.before = options.before;\n }\n\n const response = await remotePost<ThreadState[]>(`${this.serverUrl}/threads/${threadId}/history`, params);\n return response.data as ThreadState[];\n }\n\n /**\n * 复制线程\n */\n async copy(threadId: string): Promise<Thread<ValuesType>> {\n const response = await remotePost<Thread<ValuesType>>(`${this.serverUrl}/threads/${threadId}/copy`);\n return response.data as Thread<ValuesType>;\n }\n}\n"],"names":["RemoteErrorCode"],"mappings":"AAuBO,IAAK,eAAA,qBAAAA,gBAAAA,KAAL;AAEH,EAAAA,iBAAA,eAAA,CAAA,GAAgB,eAAA;AAChB,EAAAA,iBAAA,oBAAA,CAAA,GAAqB,oBAAA;AAGrB,EAAAA,iBAAA,gBAAA,CAAA,GAAiB,gBAAA;AAGjB,EAAAA,iBAAA,kBAAA,CAAA,GAAmB,kBAAA;AACnB,EAAAA,iBAAA,aAAA,CAAA,GAAc,aAAA;AACd,EAAAA,iBAAA,eAAA,CAAA,GAAgB,eAAA;AAChB,EAAAA,iBAAA,iBAAA,CAAA,GAAkB,iBAAA;AAClB,EAAAA,iBAAA,iBAAA,CAAA,GAAkB,iBAAA;AAbV,EAAA,OAAAA,gBAAAA;AAAA,CAAA,EAAA,eAAA,IAAA,EAAA,CAAA;AAmBL,MAAM,uBAAuB,KAAA,CAAM;AAAA,EACtC,WAAA,CACW,IAAA,EACP,OAAA,EACO,UAAA,EACT;AACE,IAAA,KAAA,CAAM,OAAO,CAAA;AAJN,IAAA,IAAA,CAAA,IAAA,GAAA,IAAA;AAEA,IAAA,IAAA,CAAA,UAAA,GAAA,UAAA;AAGP,IAAA,IAAA,CAAK,IAAA,GAAO,gBAAA;AAAA,EAChB;AACJ;;ACzCA,eAAe,OAAA,CACX,GAAA,EACA,MAAA,EACA,OAAA,EAI0B;AAC1B,EAAA,IAAI;AAEA,IAAA,IAAI,UAAA,GAAa,GAAA;AACjB,IAAA,IAAI,SAAS,KAAA,EAAO;AAChB,MAAA,MAAM,YAAA,GAAe,IAAI,eAAA,EAAgB;AACzC,MAAA,MAAA,CAAO,OAAA,CAAQ,QAAQ,KAAK,CAAA,CAAE,QAAQ,CAAC,CAAC,GAAA,EAAK,KAAK,CAAA,KAAM;AACpD,QAAA,YAAA,CAAa,MAAA,CAAO,GAAA,EAAK,MAAA,CAAO,KAAK,CAAC,CAAA;AAAA,MAC1C,CAAC,CAAA;AACD,MAAA,UAAA,IAAc,CAAA,CAAA,EAAI,YAAA,CAAa,QAAA,EAAU,CAAA,CAAA;AAAA,IAC7C;AAGA,IAAA,MAAM,QAAA,GAAW,MAAM,KAAA,CAAM,UAAA,EAAY;AAAA,MACrC,MAAA;AAAA,MACA,OAAA,EAAS;AAAA,QACL,cAAA,EAAgB;AAAA,OACpB;AAAA,MACA,MAAM,OAAA,EAAS,IAAA,GAAO,KAAK,SAAA,CAAU,OAAA,CAAQ,IAAI,CAAA,GAAI,KAAA;AAAA,KACxD,CAAA;AAGD,IAAA,MAAM,IAAA,GAA2B,MAAM,QAAA,CAAS,IAAA,EAAK;AAGrD,IAAA,IAAI,CAAC,QAAA,CAAS,EAAA,IAAM,CAAC,KAAK,OAAA,EAAS;AAC/B,MAAA,MAAM,IAAI,cAAA;AAAA,QACN,IAAA,CAAK,KAAA,EAAO,IAAA,IAAQ,eAAA,CAAgB,cAAA;AAAA,QACpC,IAAA,CAAK,OAAO,OAAA,IAAW,eAAA;AAAA,QACvB,QAAA,CAAS;AAAA,OACb;AAAA,IACJ;AAEA,IAAA,OAAO,IAAA;AAAA,EACX,SAAS,KAAA,EAAO;AAEZ,IAAA,IAAI,iBAAiB,cAAA,EAAgB;AACjC,MAAA,MAAM,KAAA;AAAA,IACV;AAGA,IAAA,MAAM,IAAI,cAAA;AAAA,MACN,eAAA,CAAgB,aAAA;AAAA,MAChB,CAAA,eAAA,EAAkB,KAAA,YAAiB,KAAA,GAAQ,KAAA,CAAM,UAAU,eAAe,CAAA;AAAA,KAC9E;AAAA,EACJ;AACJ;AAKA,eAAsB,SAAA,CAClB,KACA,KAAA,EAC0B;AAC1B,EAAA,OAAO,OAAA,CAAW,GAAA,EAAK,KAAA,EAAO,EAAE,OAAO,CAAA;AAC3C;AAKA,eAAsB,UAAA,CAClB,GAAA,EACA,IAAA,EACA,KAAA,EAC0B;AAC1B,EAAA,OAAO,QAAW,GAAA,EAAK,MAAA,EAAQ,EAAE,IAAA,EAAM,OAAO,CAAA;AAClD;AAKA,eAAsB,SAAA,CAClB,GAAA,EACA,IAAA,EACA,KAAA,EAC0B;AAC1B,EAAA,OAAO,QAAW,GAAA,EAAK,KAAA,EAAO,EAAE,IAAA,EAAM,OAAO,CAAA;AACjD;AAKA,eAAsB,YAAA,CAClB,KACA,KAAA,EAC0B;AAC1B,EAAA,OAAO,OAAA,CAAW,GAAA,EAAK,QAAA,EAAU,EAAE,OAAO,CAAA;AAC9C;;AC3FO,MAAM,0BAAA,CAA2F;AAAA,EACpG,WAAA,CAAoB,WAA2B,UAAA,EAA2B;AAAtD,IAAA,IAAA,CAAA,SAAA,GAAA,SAAA;AAA2B,IAAA,IAAA,CAAA,UAAA,GAAA,UAAA;AAE3C,IAAA,IAAA,CAAK,SAAA,GAAY,SAAA,CAAU,OAAA,CAAQ,KAAA,EAAO,EAAE,CAAA;AAC5C,IAAA,IAAA,CAAK,aAAa,UAAA,IAAc,KAAA;AAAA,EACpC;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,KAAA,GAAuB;AACzB,IAAA,MAAM,UAAA,CAAW,CAAA,EAAG,IAAA,CAAK,SAAS,CAAA,MAAA,CAAQ,CAAA;AAAA,EAC9C;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,OAAO,OAAA,EAMmB;AAC5B,IAAA,MAAM,WAAW,MAAM,UAAA,CAA+B,GAAG,IAAA,CAAK,SAAS,YAAY,OAAO,CAAA;AAC1F,IAAA,OAAO,QAAA,CAAS,IAAA;AAAA,EACpB;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,OAAO,KAAA,EAwBqB;AAC9B,IAAA,MAAM,SAAoD,EAAC;AAE3D,IAAA,IAAI,OAAO,GAAA,KAAQ,MAAA,IAAa,KAAA,CAAM,GAAA,CAAI,SAAS,CAAA,EAAG;AAClD,MAAA,MAAA,CAAO,GAAA,GAAM,IAAA,CAAK,SAAA,CAAU,KAAA,CAAM,GAAG,CAAA;AAAA,IACzC;AACA,IAAA,IAAI,KAAA,EAAO,aAAa,MAAA,EAAW;AAC/B,MAAA,MAAA,CAAO,QAAA,GAAW,IAAA,CAAK,SAAA,CAAU,KAAA,CAAM,QAAQ,CAAA;AAAA,IACnD;AACA,IAAA,IAAI,KAAA,EAAO,UAAU,MAAA,EAAW;AAC5B,MAAA,MAAA,CAAO,QAAQ,KAAA,CAAM,KAAA;AAAA,IACzB;AACA,IAAA,IAAI,KAAA,EAAO,WAAW,MAAA,EAAW;AAC7B,MAAA,MAAA,CAAO,SAAS,KAAA,CAAM,MAAA;AAAA,IAC1B;AACA,IAAA,IAAI,KAAA,EAAO,WAAW,MAAA,EAAW;AAC7B,MAAA,MAAA,CAAO,SAAS,KAAA,CAAM,MAAA;AAAA,IAC1B;AACA,IAAA,IAAI,KAAA,EAAO,WAAW,MAAA,EAAW;AAC7B,MAAA,MAAA,CAAO,SAAS,KAAA,CAAM,MAAA;AAAA,IAC1B;AACA,IAAA,IAAI,KAAA,EAAO,cAAc,MAAA,EAAW;AAChC,MAAA,MAAA,CAAO,YAAY,KAAA,CAAM,SAAA;AAAA,IAC7B;AACA,IAAA,IAAI,KAAA,EAAO,WAAW,MAAA,EAAW;AAC7B,MAAA,MAAA,CAAO,MAAA,GAAS,IAAA,CAAK,SAAA,CAAU,KAAA,CAAM,MAAM,CAAA;AAAA,IAC/C;AACA,IAAA,IAAI,KAAA,EAAO,WAAW,MAAA,EAAW;AAC7B,MAAA,MAAA,CAAO,MAAA,GAAS,IAAA,CAAK,SAAA,CAAU,KAAA,CAAM,MAAM,CAAA;AAAA,IAC/C;AACA,IAAA,IAAI,KAAA,EAAO,mBAAmB,MAAA,EAAW;AACrC,MAAA,MAAA,CAAO,iBAAiB,KAAA,CAAM,cAAA;AAAA,IAClC;AAEA,IAAA,MAAM,WAAW,MAAM,SAAA,CAAgC,GAAG,IAAA,CAAK,SAAS,YAAY,MAAM,CAAA;AAC1F,IAAA,OAAO,QAAA,CAAS,IAAA;AAAA,EACpB;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,IAAI,QAAA,EAA+C;AACrD,IAAA,MAAM,QAAA,GAAW,MAAM,SAAA,CAA8B,CAAA,EAAG,KAAK,SAAS,CAAA,SAAA,EAAY,QAAQ,CAAA,CAAE,CAAA;AAC5F,IAAA,OAAO,QAAA,CAAS,IAAA;AAAA,EACpB;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,GAAA,CAAI,QAAA,EAAkB,MAAA,EAAoD;AAC5E,IAAA,MAAM,UAAU,CAAA,EAAG,IAAA,CAAK,SAAS,CAAA,SAAA,EAAY,QAAQ,IAAI,MAAM,CAAA;AAAA,EACnE;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,OAAO,QAAA,EAAiC;AAC1C,IAAA,MAAM,aAAa,CAAA,EAAG,IAAA,CAAK,SAAS,CAAA,SAAA,EAAY,QAAQ,CAAA,CAAE,CAAA;AAAA,EAC9D;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,WAAA,CACF,QAAA,EACA,MAAA,EAC8C;AAC9C,IAAA,MAAM,WAAW,MAAM,UAAA;AAAA,MACnB,CAAA,EAAG,IAAA,CAAK,SAAS,CAAA,SAAA,EAAY,QAAQ,CAAA,MAAA,CAAA;AAAA,MACrC;AAAA,KACJ;AACA,IAAA,OAAO,QAAA,CAAS,IAAA;AAAA,EACpB;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,SAAA,CAAU,QAAA,EAAkB,WAAA,EAAqB,OAAA,EAAiD;AACpG,IAAA,MAAM,QAAA,GAAW,MAAM,UAAA,CAAgB,CAAA,EAAG,IAAA,CAAK,SAAS,CAAA,SAAA,EAAY,QAAQ,CAAA,KAAA,CAAA,EAAS,OAAA,IAAW,EAAC,EAAG;AAAA,MAChG;AAAA,KACH,CAAA;AACD,IAAA,OAAO,QAAA,CAAS,IAAA;AAAA,EACpB;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,QAAA,CACF,QAAA,EACA,OAAA,EACc;AACd,IAAA,MAAM,SAA0C,EAAC;AAEjD,IAAA,IAAI,OAAA,EAAS,UAAU,MAAA,EAAW;AAC9B,MAAA,MAAA,CAAO,QAAQ,OAAA,CAAQ,KAAA;AAAA,IAC3B;AACA,IAAA,IAAI,OAAA,EAAS,WAAW,MAAA,EAAW;AAC/B,MAAA,MAAA,CAAO,SAAS,OAAA,CAAQ,MAAA;AAAA,IAC5B;AACA,IAAA,IAAI,OAAA,EAAS,WAAW,MAAA,EAAW;AAC/B,MAAA,MAAA,CAAO,SAAS,OAAA,CAAQ,MAAA;AAAA,IAC5B;AAEA,IAAA,MAAM,QAAA,GAAW,MAAM,SAAA,CAAiB,CAAA,EAAG,KAAK,SAAS,CAAA,SAAA,EAAY,QAAQ,CAAA,KAAA,CAAA,EAAS,MAAM,CAAA;AAC5F,IAAA,OAAO,QAAA,CAAS,IAAA;AAAA,EACpB;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,SAAA,CAAU,KAAA,EAAe,GAAA,EAAkC;AAC7D,IAAA,MAAM,UAAU,CAAA,EAAG,IAAA,CAAK,SAAS,CAAA,MAAA,EAAS,KAAK,IAAI,GAAG,CAAA;AAAA,EAC1D;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAM,MAAM,KAAA,EAAqG;AAC7G,IAAA,MAAM,SAAiC,EAAC;AAExC,IAAA,IAAI,OAAO,GAAA,KAAQ,MAAA,IAAa,KAAA,CAAM,GAAA,CAAI,SAAS,CAAA,EAAG;AAClD,MAAA,MAAA,CAAO,GAAA,GAAM,IAAA,CAAK,SAAA,CAAU,KAAA,CAAM,GAAG,CAAA;AAAA,IACzC;AACA,IAAA,IAAI,KAAA,EAAO,aAAa,MAAA,EAAW;AAC/B,MAAA,MAAA,CAAO,QAAA,GAAW,IAAA,CAAK,SAAA,CAAU,KAAA,CAAM,QAAQ,CAAA;AAAA,IACnD;AACA,IAAA,IAAI,KAAA,EAAO,WAAW,MAAA,EAAW;AAC7B,MAAA,MAAA,CAAO,SAAS,KAAA,CAAM,MAAA;AAAA,IAC1B;AACA,IAAA,IAAI,KAAA,EAAO,WAAW,MAAA,EAAW;AAC7B,MAAA,MAAA,CAAO,MAAA,GAAS,IAAA,CAAK,SAAA,CAAU,KAAA,CAAM,MAAM,CAAA;AAAA,IAC/C;AAEA,IAAA,MAAM,WAAW,MAAM,SAAA,CAAkB,GAAG,IAAA,CAAK,SAAS,kBAAkB,MAAM,CAAA;AAClF,IAAA,OAAO,QAAA,CAAS,IAAA;AAAA,EACpB;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,KAAA,CACF,QAAA,EACA,OAAA,EAC2B;AAC3B,IAAA,MAAM,QAAA,GAAW,MAAM,UAAA,CAA+B,CAAA,EAAG,KAAK,SAAS,CAAA,SAAA,EAAY,QAAQ,CAAA,CAAA,EAAI,OAAO,CAAA;AACtG,IAAA,OAAO,QAAA,CAAS,IAAA;AAAA,EACpB;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,QAAA,CAAS,QAAA,EAAkB,OAAA,EAAgF;AAC7G,IAAA,MAAM,SAA2C,EAAC;AAElD,IAAA,IAAI,OAAA,EAAS,cAAc,MAAA,EAAW;AAClC,MAAA,MAAA,CAAO,YAAY,OAAA,CAAQ,SAAA;AAAA,IAC/B;AACA,IAAA,IAAI,OAAA,EAAS,iBAAiB,MAAA,EAAW;AACrC,MAAA,MAAA,CAAO,eAAe,OAAA,CAAQ,YAAA;AAAA,IAClC;AAEA,IAAA,MAAM,QAAA,GAAW,MAAM,UAAA,CAAwB,CAAA,EAAG,KAAK,SAAS,CAAA,SAAA,EAAY,QAAQ,CAAA,MAAA,CAAA,EAAU,MAAM,CAAA;AACpG,IAAA,OAAO,QAAA,CAAS,IAAA;AAAA,EACpB;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,eAAA,CACF,QAAA,EACA,OAAA,EAKsB;AACtB,IAAA,MAAM,SAA0C,EAAC;AAEjD,IAAA,IAAI,OAAA,EAAS,UAAU,MAAA,EAAW;AAC9B,MAAA,MAAA,CAAO,QAAQ,OAAA,CAAQ,KAAA;AAAA,IAC3B;AACA,IAAA,IAAI,OAAA,EAAS,WAAW,MAAA,EAAW;AAC/B,MAAA,MAAA,CAAO,SAAS,OAAA,CAAQ,MAAA;AAAA,IAC5B;AAEA,IAAA,MAAM,QAAA,GAAW,MAAM,UAAA,CAA0B,CAAA,EAAG,KAAK,SAAS,CAAA,SAAA,EAAY,QAAQ,CAAA,QAAA,CAAA,EAAY,MAAM,CAAA;AACxG,IAAA,OAAO,QAAA,CAAS,IAAA;AAAA,EACpB;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,KAAK,QAAA,EAA+C;AACtD,IAAA,MAAM,QAAA,GAAW,MAAM,UAAA,CAA+B,CAAA,EAAG,KAAK,SAAS,CAAA,SAAA,EAAY,QAAQ,CAAA,KAAA,CAAO,CAAA;AAClG,IAAA,OAAO,QAAA,CAAS,IAAA;AAAA,EACpB;AACJ;;;;"}
|
package/dist/storage/index.d.ts
CHANGED
|
@@ -8,4 +8,4 @@ export declare const createCheckPointer: () => Promise<SqliteSaverType | Postgre
|
|
|
8
8
|
export declare const createMessageQueue: () => Promise<StreamQueueManager<BaseStreamQueueInterface>>;
|
|
9
9
|
export declare const createThreadManager: (config: {
|
|
10
10
|
checkpointer?: SqliteSaverType | PostgresSaver;
|
|
11
|
-
}) => Promise<KyselyThreadsManager<unknown> | MemoryThreadsManager<unknown>>;
|
|
11
|
+
}) => Promise<import("./kysely").RemoteKyselyThreadsManager<unknown> | KyselyThreadsManager<unknown> | MemoryThreadsManager<unknown>>;
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Remote Kysely Threads Manager
|
|
3
|
+
* 通过 HTTP/REST API 与远程 PostgreSQL 服务器通信
|
|
4
|
+
*/
|
|
5
|
+
import { BaseThreadsManager } from '../../threads';
|
|
6
|
+
import { Metadata, OnConflictBehavior, Run, Thread, ThreadState } from '@langgraph-js/sdk';
|
|
7
|
+
import { RunStatus, SortOrder, ThreadSortBy } from '../../types';
|
|
8
|
+
/**
|
|
9
|
+
* 远程 Kysely Threads Manager
|
|
10
|
+
*/
|
|
11
|
+
export declare class RemoteKyselyThreadsManager<ValuesType = unknown> implements BaseThreadsManager<ValuesType> {
|
|
12
|
+
private serverUrl;
|
|
13
|
+
private httpClient?;
|
|
14
|
+
constructor(serverUrl: string, httpClient?: typeof fetch | undefined);
|
|
15
|
+
/**
|
|
16
|
+
* 初始化数据库
|
|
17
|
+
*/
|
|
18
|
+
setup(): Promise<void>;
|
|
19
|
+
/**
|
|
20
|
+
* 创建线程
|
|
21
|
+
*/
|
|
22
|
+
create(payload?: {
|
|
23
|
+
metadata?: Metadata;
|
|
24
|
+
threadId?: string;
|
|
25
|
+
ifExists?: OnConflictBehavior;
|
|
26
|
+
graphId?: string;
|
|
27
|
+
supersteps?: Array<{
|
|
28
|
+
updates: Array<{
|
|
29
|
+
values: unknown;
|
|
30
|
+
command?: any;
|
|
31
|
+
asNode: string;
|
|
32
|
+
}>;
|
|
33
|
+
}>;
|
|
34
|
+
}): Promise<Thread<ValuesType>>;
|
|
35
|
+
/**
|
|
36
|
+
* 搜索线程
|
|
37
|
+
*/
|
|
38
|
+
search(query?: {
|
|
39
|
+
ids?: string[];
|
|
40
|
+
metadata?: Metadata;
|
|
41
|
+
limit?: number;
|
|
42
|
+
offset?: number;
|
|
43
|
+
status?: any;
|
|
44
|
+
sortBy?: ThreadSortBy;
|
|
45
|
+
sortOrder?: SortOrder;
|
|
46
|
+
values?: ValuesType;
|
|
47
|
+
select?: Array<'thread_id' | 'created_at' | 'updated_at' | 'metadata' | 'config' | 'context' | 'status' | 'values' | 'interrupts'>;
|
|
48
|
+
/**
|
|
49
|
+
* @deprecated Use `select` parameter instead for fine-grained field control
|
|
50
|
+
*/
|
|
51
|
+
withoutDetails?: boolean;
|
|
52
|
+
}): Promise<Thread<ValuesType>[]>;
|
|
53
|
+
/**
|
|
54
|
+
* 获取线程
|
|
55
|
+
*/
|
|
56
|
+
get(threadId: string): Promise<Thread<ValuesType>>;
|
|
57
|
+
/**
|
|
58
|
+
* 更新线程
|
|
59
|
+
*/
|
|
60
|
+
set(threadId: string, thread: Partial<Thread<ValuesType>>): Promise<void>;
|
|
61
|
+
/**
|
|
62
|
+
* 删除线程
|
|
63
|
+
*/
|
|
64
|
+
delete(threadId: string): Promise<void>;
|
|
65
|
+
/**
|
|
66
|
+
* 更新状态
|
|
67
|
+
*/
|
|
68
|
+
updateState(threadId: string, thread: Partial<Thread<ValuesType>>): Promise<{
|
|
69
|
+
configurable: Record<string, any>;
|
|
70
|
+
}>;
|
|
71
|
+
/**
|
|
72
|
+
* 创建运行
|
|
73
|
+
*/
|
|
74
|
+
createRun(threadId: string, assistantId: string, payload?: {
|
|
75
|
+
metadata?: Metadata;
|
|
76
|
+
}): Promise<Run>;
|
|
77
|
+
/**
|
|
78
|
+
* 列出运行
|
|
79
|
+
*/
|
|
80
|
+
listRuns(threadId: string, options?: {
|
|
81
|
+
limit?: number;
|
|
82
|
+
offset?: number;
|
|
83
|
+
status?: RunStatus;
|
|
84
|
+
}): Promise<Run[]>;
|
|
85
|
+
/**
|
|
86
|
+
* 更新运行
|
|
87
|
+
*/
|
|
88
|
+
updateRun(runId: string, run: Partial<Run>): Promise<void>;
|
|
89
|
+
/**
|
|
90
|
+
* 计算线程数量
|
|
91
|
+
*/
|
|
92
|
+
count(query?: {
|
|
93
|
+
ids?: string[];
|
|
94
|
+
metadata?: Metadata;
|
|
95
|
+
status?: any;
|
|
96
|
+
values?: ValuesType;
|
|
97
|
+
}): Promise<number>;
|
|
98
|
+
/**
|
|
99
|
+
* 更新线程元数据
|
|
100
|
+
*/
|
|
101
|
+
patch(threadId: string, updates: Partial<Omit<Thread<ValuesType>, 'thread_id' | 'created_at' | 'updated_at'>>): Promise<Thread<ValuesType>>;
|
|
102
|
+
/**
|
|
103
|
+
* 获取线程状态
|
|
104
|
+
*/
|
|
105
|
+
getState(threadId: string, options?: {
|
|
106
|
+
subgraphs?: boolean;
|
|
107
|
+
checkpointId?: string;
|
|
108
|
+
}): Promise<ThreadState>;
|
|
109
|
+
/**
|
|
110
|
+
* 获取线程历史
|
|
111
|
+
*/
|
|
112
|
+
getStateHistory(threadId: string, options?: {
|
|
113
|
+
limit?: number;
|
|
114
|
+
before?: string;
|
|
115
|
+
filter?: {
|
|
116
|
+
source?: string;
|
|
117
|
+
step?: number;
|
|
118
|
+
};
|
|
119
|
+
}): Promise<ThreadState[]>;
|
|
120
|
+
/**
|
|
121
|
+
* 复制线程
|
|
122
|
+
*/
|
|
123
|
+
copy(threadId: string): Promise<Thread<ValuesType>>;
|
|
124
|
+
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { BaseThreadsManager } from '../../threads/index.js';
|
|
2
|
-
import { Command, Config, Metadata, OnConflictBehavior, Run, Thread, ThreadStatus } from '@langgraph-js/sdk';
|
|
2
|
+
import { Command, Config, Metadata, OnConflictBehavior, Run, Thread, ThreadState, ThreadStatus } from '@langgraph-js/sdk';
|
|
3
3
|
import { RunStatus, SortOrder, ThreadSortBy } from '../../types';
|
|
4
4
|
import { DatabaseAdapter } from './adapter';
|
|
5
5
|
/**
|
|
@@ -25,18 +25,21 @@ export declare class KyselyThreadsManager<ValuesType = unknown> implements BaseT
|
|
|
25
25
|
}>;
|
|
26
26
|
}): Promise<Thread<ValuesType>>;
|
|
27
27
|
search(query?: {
|
|
28
|
+
ids?: string[];
|
|
28
29
|
metadata?: Metadata;
|
|
29
30
|
limit?: number;
|
|
30
31
|
offset?: number;
|
|
31
32
|
status?: ThreadStatus;
|
|
32
33
|
sortBy?: ThreadSortBy;
|
|
33
34
|
sortOrder?: SortOrder;
|
|
35
|
+
values?: ValuesType;
|
|
36
|
+
select?: Array<'thread_id' | 'created_at' | 'updated_at' | 'metadata' | 'config' | 'context' | 'status' | 'values' | 'interrupts'>;
|
|
34
37
|
withoutDetails?: boolean;
|
|
35
38
|
}): Promise<Thread<ValuesType>[]>;
|
|
36
39
|
get(threadId: string): Promise<Thread<ValuesType>>;
|
|
37
40
|
set(threadId: string, thread: Partial<Thread<ValuesType>>): Promise<void>;
|
|
38
|
-
updateState(threadId: string, thread: Partial<Thread<ValuesType>>): Promise<Pick<Config, 'configurable'>>;
|
|
39
41
|
delete(threadId: string): Promise<void>;
|
|
42
|
+
updateState(threadId: string, thread: Partial<Thread<ValuesType>>): Promise<Pick<Config, 'configurable'>>;
|
|
40
43
|
createRun(threadId: string, assistantId: string, payload?: {
|
|
41
44
|
metadata?: Metadata;
|
|
42
45
|
}): Promise<Run>;
|
|
@@ -46,4 +49,25 @@ export declare class KyselyThreadsManager<ValuesType = unknown> implements BaseT
|
|
|
46
49
|
status?: RunStatus;
|
|
47
50
|
}): Promise<Run[]>;
|
|
48
51
|
updateRun(runId: string, run: Partial<Run>): Promise<void>;
|
|
52
|
+
count(query?: {
|
|
53
|
+
ids?: string[];
|
|
54
|
+
metadata?: Metadata;
|
|
55
|
+
status?: ThreadStatus;
|
|
56
|
+
values?: ValuesType;
|
|
57
|
+
}): Promise<number>;
|
|
58
|
+
patch(threadId: string, updates: Partial<Omit<Thread<ValuesType>, 'thread_id' | 'created_at' | 'updated_at'>>): Promise<Thread<ValuesType>>;
|
|
59
|
+
getState(threadId: string, options?: {
|
|
60
|
+
subgraphs?: boolean;
|
|
61
|
+
checkpointId?: string;
|
|
62
|
+
}): Promise<ThreadState>;
|
|
63
|
+
getStateHistory(threadId: string, options?: {
|
|
64
|
+
limit?: number;
|
|
65
|
+
before?: string;
|
|
66
|
+
filter?: {
|
|
67
|
+
source?: string;
|
|
68
|
+
step?: number;
|
|
69
|
+
};
|
|
70
|
+
}): Promise<ThreadState[]>;
|
|
71
|
+
copy(threadId: string): Promise<Thread<ValuesType>>;
|
|
72
|
+
private saveCheckpoint;
|
|
49
73
|
}
|
|
@@ -11,6 +11,15 @@ export interface ThreadsTable {
|
|
|
11
11
|
values: any;
|
|
12
12
|
interrupts: Record<string, any>;
|
|
13
13
|
}
|
|
14
|
+
export interface CheckpointsTable {
|
|
15
|
+
checkpoint_id: string;
|
|
16
|
+
thread_id: string;
|
|
17
|
+
values: any;
|
|
18
|
+
next: string[];
|
|
19
|
+
config: any;
|
|
20
|
+
created_at: Date;
|
|
21
|
+
metadata: Record<string, any>;
|
|
22
|
+
}
|
|
14
23
|
export interface RunsTable {
|
|
15
24
|
run_id: string;
|
|
16
25
|
thread_id: string;
|
|
@@ -23,5 +32,6 @@ export interface RunsTable {
|
|
|
23
32
|
}
|
|
24
33
|
export interface Database {
|
|
25
34
|
threads: ThreadsTable;
|
|
35
|
+
checkpoints: CheckpointsTable;
|
|
26
36
|
runs: RunsTable;
|
|
27
37
|
}
|
|
@@ -13,6 +13,6 @@ export declare class MemoryStreamQueue extends BaseStreamQueue implements BaseSt
|
|
|
13
13
|
getAll(): Promise<EventMessage[]>;
|
|
14
14
|
clear(): void;
|
|
15
15
|
cancelSignal: AbortController;
|
|
16
|
-
cancel(): void
|
|
16
|
+
cancel(): Promise<void>;
|
|
17
17
|
copyToQueue(toId: string, ttl?: number): Promise<MemoryStreamQueue>;
|
|
18
18
|
}
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import { BaseThreadsManager } from '../../threads/index.js';
|
|
2
|
-
import { Command, Config, Metadata, OnConflictBehavior, Run, Thread, ThreadStatus } from '@langgraph-js/sdk';
|
|
2
|
+
import { Command, Config, Metadata, OnConflictBehavior, Run, Thread, ThreadState, ThreadStatus } from '@langgraph-js/sdk';
|
|
3
3
|
import { RunStatus, SortOrder, ThreadSortBy } from '../../types';
|
|
4
4
|
export declare class MemoryThreadsManager<ValuesType = unknown> implements BaseThreadsManager<ValuesType> {
|
|
5
5
|
private threads;
|
|
6
|
+
private checkpoints;
|
|
6
7
|
setup(): Promise<void>;
|
|
7
8
|
create(payload?: {
|
|
8
9
|
metadata?: Metadata;
|
|
@@ -18,14 +19,18 @@ export declare class MemoryThreadsManager<ValuesType = unknown> implements BaseT
|
|
|
18
19
|
}>;
|
|
19
20
|
}): Promise<Thread<ValuesType>>;
|
|
20
21
|
search(query?: {
|
|
22
|
+
ids?: string[];
|
|
21
23
|
metadata?: Metadata;
|
|
22
24
|
limit?: number;
|
|
23
25
|
offset?: number;
|
|
24
26
|
status?: ThreadStatus;
|
|
25
27
|
sortBy?: ThreadSortBy;
|
|
26
28
|
sortOrder?: SortOrder;
|
|
29
|
+
values?: ValuesType;
|
|
30
|
+
select?: Array<'thread_id' | 'created_at' | 'updated_at' | 'metadata' | 'config' | 'context' | 'status' | 'values' | 'interrupts'>;
|
|
27
31
|
withoutDetails?: boolean;
|
|
28
32
|
}): Promise<Thread<ValuesType>[]>;
|
|
33
|
+
private deepEqual;
|
|
29
34
|
get(threadId: string): Promise<Thread<ValuesType>>;
|
|
30
35
|
set(threadId: string, thread: Partial<Thread<ValuesType>>): Promise<void>;
|
|
31
36
|
delete(threadId: string): Promise<void>;
|
|
@@ -40,4 +45,25 @@ export declare class MemoryThreadsManager<ValuesType = unknown> implements BaseT
|
|
|
40
45
|
status?: RunStatus;
|
|
41
46
|
}): Promise<Run[]>;
|
|
42
47
|
updateRun(runId: string, run: Partial<Run>): Promise<void>;
|
|
48
|
+
count(query?: {
|
|
49
|
+
ids?: string[];
|
|
50
|
+
metadata?: Metadata;
|
|
51
|
+
status?: ThreadStatus;
|
|
52
|
+
values?: ValuesType;
|
|
53
|
+
}): Promise<number>;
|
|
54
|
+
patch(threadId: string, updates: Partial<Omit<Thread<ValuesType>, 'thread_id' | 'created_at' | 'updated_at'>>): Promise<Thread<ValuesType>>;
|
|
55
|
+
getState(threadId: string, options?: {
|
|
56
|
+
subgraphs?: boolean;
|
|
57
|
+
checkpointId?: string;
|
|
58
|
+
}): Promise<ThreadState>;
|
|
59
|
+
getStateHistory(threadId: string, options?: {
|
|
60
|
+
limit?: number;
|
|
61
|
+
before?: string;
|
|
62
|
+
filter?: {
|
|
63
|
+
source?: string;
|
|
64
|
+
step?: number;
|
|
65
|
+
};
|
|
66
|
+
}): Promise<ThreadState[]>;
|
|
67
|
+
copy(threadId: string): Promise<Thread<ValuesType>>;
|
|
68
|
+
saveCheckpoint(threadId: string, values: any, next: string[], config: Config, metadata?: Metadata): Promise<void>;
|
|
43
69
|
}
|
|
@@ -1,34 +1,34 @@
|
|
|
1
1
|
import { EventMessage } from '../../queue/event_message.js';
|
|
2
2
|
import { BaseStreamQueue } from '../../queue/stream_queue.js';
|
|
3
3
|
import { BaseStreamQueueInterface } from '../../queue/stream_queue.js';
|
|
4
|
-
import { RedisClientType } from 'redis';
|
|
5
4
|
/**
|
|
6
|
-
* Redis 实现的消息队列,用于存储消息
|
|
5
|
+
* Redis Stream 实现的消息队列,用于存储消息
|
|
6
|
+
* 使用 Redis Streams 替代 pub/sub,支持集群模式
|
|
7
7
|
*/
|
|
8
8
|
export declare class RedisStreamQueue extends BaseStreamQueue implements BaseStreamQueueInterface {
|
|
9
9
|
readonly id: string;
|
|
10
10
|
readonly compressMessages: boolean;
|
|
11
11
|
readonly ttl: number;
|
|
12
|
-
static redis: RedisClientType;
|
|
13
|
-
static subscriberRedis: RedisClientType;
|
|
14
|
-
static isQueueExist(id: string): Promise<boolean>;
|
|
15
12
|
private redis;
|
|
16
|
-
private
|
|
17
|
-
private
|
|
18
|
-
private channelKey;
|
|
13
|
+
private streamKey;
|
|
14
|
+
private listKey;
|
|
19
15
|
private isConnected;
|
|
20
16
|
cancelSignal: AbortController;
|
|
17
|
+
private lastStreamId;
|
|
18
|
+
private pollInterval;
|
|
21
19
|
constructor(id: string, compressMessages?: boolean, ttl?: number);
|
|
22
20
|
/**
|
|
23
|
-
* 推送消息到 Redis
|
|
21
|
+
* 推送消息到 Redis Stream 和 List
|
|
22
|
+
* - Stream: 用于实时推送(集群友好)
|
|
23
|
+
* - List: 用于 getAll() 批量获取历史数据
|
|
24
24
|
*/
|
|
25
25
|
push(item: EventMessage): Promise<void>;
|
|
26
26
|
/**
|
|
27
|
-
*
|
|
27
|
+
* 异步生成器:使用 Redis Streams XREAD 轮询消费队列数据
|
|
28
28
|
*/
|
|
29
29
|
onDataReceive(): AsyncGenerator<EventMessage, void, unknown>;
|
|
30
30
|
/**
|
|
31
|
-
*
|
|
31
|
+
* 获取队列中的所有数据(从 List 获取历史数据)
|
|
32
32
|
*/
|
|
33
33
|
getAll(): Promise<EventMessage[]>;
|
|
34
34
|
/**
|
|
@@ -38,6 +38,9 @@ export declare class RedisStreamQueue extends BaseStreamQueue implements BaseStr
|
|
|
38
38
|
/**
|
|
39
39
|
* 取消操作
|
|
40
40
|
*/
|
|
41
|
-
cancel(): void
|
|
41
|
+
cancel(): Promise<void>;
|
|
42
|
+
/**
|
|
43
|
+
* 复制队列到另一个队列
|
|
44
|
+
*/
|
|
42
45
|
copyToQueue(toId: string, ttl?: number): Promise<RedisStreamQueue>;
|
|
43
46
|
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Remote PostgreSQL Adapter - 简化的 Fetch 工具函数
|
|
3
|
+
*/
|
|
4
|
+
import { RemoteResponse } from './types';
|
|
5
|
+
/**
|
|
6
|
+
* GET 请求
|
|
7
|
+
*/
|
|
8
|
+
export declare function remoteGet<T>(url: string, query?: Record<string, string | number | boolean>): Promise<RemoteResponse<T>>;
|
|
9
|
+
/**
|
|
10
|
+
* POST 请求
|
|
11
|
+
*/
|
|
12
|
+
export declare function remotePost<T>(url: string, body?: any, query?: Record<string, string | number | boolean>): Promise<RemoteResponse<T>>;
|
|
13
|
+
/**
|
|
14
|
+
* PUT 请求
|
|
15
|
+
*/
|
|
16
|
+
export declare function remotePut<T>(url: string, body?: any, query?: Record<string, string | number | boolean>): Promise<RemoteResponse<T>>;
|
|
17
|
+
/**
|
|
18
|
+
* DELETE 请求
|
|
19
|
+
*/
|
|
20
|
+
export declare function remoteDelete<T>(url: string, query?: Record<string, string | number | boolean>): Promise<RemoteResponse<T>>;
|