@langgraph-js/pure-graph 3.2.2 → 3.2.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/adapter/fetch/index.js +3 -7
- package/dist/adapter/fetch/index.js.map +1 -1
- package/dist/adapter/nextjs/index.js +1 -1
- package/dist/{checkpoint-CY59Lr2q.js → checkpoint-Due32543.js} +69 -39
- package/dist/checkpoint-Due32543.js.map +1 -0
- package/dist/{createEndpoint-vMmFiMSz.js → createEndpoint-CTPbz_D8.js} +2 -2
- package/dist/{createEndpoint-vMmFiMSz.js.map → createEndpoint-CTPbz_D8.js.map} +1 -1
- package/dist/index.js +2 -2
- package/dist/{queue-CUe5TDP1.js → queue-DPHwOl26.js} +2 -2
- package/dist/{queue-CUe5TDP1.js.map → queue-DPHwOl26.js.map} +1 -1
- package/dist/remote/index.js +1 -1
- package/dist/{shallow-checkpoint-ImbLxYNR.js → shallow-checkpoint-CHYRdSct.js} +76 -46
- package/dist/shallow-checkpoint-CHYRdSct.js.map +1 -0
- package/dist/{stream-jYlUzTZO.js → stream-Zt8tbgEj.js} +6 -9
- package/dist/{stream-jYlUzTZO.js.map → stream-Zt8tbgEj.js.map} +1 -1
- package/package.json +1 -1
- package/dist/checkpoint-CY59Lr2q.js.map +0 -1
- package/dist/shallow-checkpoint-ImbLxYNR.js.map +0 -1
|
@@ -4,9 +4,27 @@ import { BaseCheckpointSaver, getCheckpointId, TASKS, uuid6, copyCheckpoint, WRI
|
|
|
4
4
|
const SQLITE_RETRY_CONFIG = {
|
|
5
5
|
maxRetries: 3,
|
|
6
6
|
baseDelayMs: 100,
|
|
7
|
+
// 不可重试的错误模式
|
|
8
|
+
nonRetryablePatterns: [
|
|
9
|
+
"database disk image is malformed",
|
|
10
|
+
// 数据库文件损坏
|
|
11
|
+
"database is malformed",
|
|
12
|
+
// 数据库损坏(短形式)
|
|
13
|
+
"cannot rollback",
|
|
14
|
+
// 事务状态错误
|
|
15
|
+
"no transaction is active",
|
|
16
|
+
// 无活动事务
|
|
17
|
+
"database or disk is full"
|
|
18
|
+
// 磁盘空间不足
|
|
19
|
+
],
|
|
7
20
|
isRetryableError: (error) => {
|
|
8
21
|
const msg = error?.message?.toLowerCase() || "";
|
|
9
|
-
|
|
22
|
+
for (const pattern of SQLITE_RETRY_CONFIG.nonRetryablePatterns) {
|
|
23
|
+
if (msg.includes(pattern.toLowerCase())) {
|
|
24
|
+
return false;
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
return msg.includes("sqlite_busy") || msg.includes("database is locked") || msg === "sqlite_busy" || msg === "database is locked";
|
|
10
28
|
}
|
|
11
29
|
};
|
|
12
30
|
async function withRetry(operation, context) {
|
|
@@ -16,7 +34,28 @@ async function withRetry(operation, context) {
|
|
|
16
34
|
return await operation();
|
|
17
35
|
} catch (error) {
|
|
18
36
|
lastError = error;
|
|
37
|
+
const msg = error?.message?.toLowerCase() || "";
|
|
19
38
|
if (!SQLITE_RETRY_CONFIG.isRetryableError(error)) {
|
|
39
|
+
if (msg.includes("malformed")) {
|
|
40
|
+
const enhancedError = new Error(
|
|
41
|
+
`SQLite database is corrupted: ${error.message}
|
|
42
|
+
|
|
43
|
+
Context: ${context || "unknown"}
|
|
44
|
+
|
|
45
|
+
Possible causes:
|
|
46
|
+
1. Database file was manually deleted or modified
|
|
47
|
+
2. Disk I/O errors during write operations
|
|
48
|
+
3. Concurrent access without proper locking
|
|
49
|
+
|
|
50
|
+
Recovery options:
|
|
51
|
+
- Delete the database file to start fresh (data will be lost)
|
|
52
|
+
- Use SQLite recovery tools: sqlite3 <db> ".recover" > recover.sql
|
|
53
|
+
- Switch to PostgreSQL/Redis for production use`
|
|
54
|
+
);
|
|
55
|
+
enhancedError.name = "SQLiteCorruptError";
|
|
56
|
+
enhancedError.cause = error;
|
|
57
|
+
throw enhancedError;
|
|
58
|
+
}
|
|
20
59
|
throw error;
|
|
21
60
|
}
|
|
22
61
|
if (attempt < SQLITE_RETRY_CONFIG.maxRetries - 1) {
|
|
@@ -355,36 +394,33 @@ CREATE TABLE IF NOT EXISTS writes (
|
|
|
355
394
|
const threadId_ = threadId;
|
|
356
395
|
const checkpointNs_ = checkpointNs;
|
|
357
396
|
const checkpointId_ = checkpointId;
|
|
358
|
-
await withRetry(
|
|
359
|
-
async () => {
|
|
360
|
-
await
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
397
|
+
await withRetry(async () => {
|
|
398
|
+
await this.db.transaction().execute(async (trx) => {
|
|
399
|
+
const oldCheckpoint = await trx.selectFrom("shallow_checkpoints").select(["checkpoint_id"]).where("thread_id", "=", threadId_).where("checkpoint_ns", "=", checkpointNs_).executeTakeFirst();
|
|
400
|
+
if (oldCheckpoint && oldCheckpoint.checkpoint_id !== checkpointId_) {
|
|
401
|
+
await trx.deleteFrom("writes").where("thread_id", "=", threadId_).where("checkpoint_ns", "=", checkpointNs_).where("checkpoint_id", "=", oldCheckpoint.checkpoint_id).execute();
|
|
402
|
+
}
|
|
403
|
+
await trx.insertInto("shallow_checkpoints").values({
|
|
404
|
+
thread_id: threadId_,
|
|
405
|
+
checkpoint_ns: checkpointNs_,
|
|
406
|
+
checkpoint_id: checkpointId_,
|
|
407
|
+
parent_checkpoint_id: parentCheckpointId ?? null,
|
|
408
|
+
type: type1,
|
|
409
|
+
checkpoint: new Uint8Array(Buffer.from(serializedCheckpoint)),
|
|
410
|
+
metadata: new Uint8Array(Buffer.from(serializedMetadata)),
|
|
411
|
+
checkpoint_ts: Date.now()
|
|
412
|
+
}).onConflict(
|
|
413
|
+
(oc) => oc.columns(["thread_id", "checkpoint_ns"]).doUpdateSet({
|
|
368
414
|
checkpoint_id: checkpointId_,
|
|
369
415
|
parent_checkpoint_id: parentCheckpointId ?? null,
|
|
370
416
|
type: type1,
|
|
371
417
|
checkpoint: new Uint8Array(Buffer.from(serializedCheckpoint)),
|
|
372
418
|
metadata: new Uint8Array(Buffer.from(serializedMetadata)),
|
|
373
419
|
checkpoint_ts: Date.now()
|
|
374
|
-
})
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
type: type1,
|
|
379
|
-
checkpoint: new Uint8Array(Buffer.from(serializedCheckpoint)),
|
|
380
|
-
metadata: new Uint8Array(Buffer.from(serializedMetadata)),
|
|
381
|
-
checkpoint_ts: Date.now()
|
|
382
|
-
})
|
|
383
|
-
).execute();
|
|
384
|
-
});
|
|
385
|
-
},
|
|
386
|
-
`put(${threadId}/${checkpointId})`
|
|
387
|
-
);
|
|
420
|
+
})
|
|
421
|
+
).execute();
|
|
422
|
+
});
|
|
423
|
+
}, `put(${threadId}/${checkpointId})`);
|
|
388
424
|
return {
|
|
389
425
|
configurable: {
|
|
390
426
|
thread_id: threadId,
|
|
@@ -417,28 +453,22 @@ CREATE TABLE IF NOT EXISTS writes (
|
|
|
417
453
|
})
|
|
418
454
|
);
|
|
419
455
|
if (values.length === 0) return;
|
|
420
|
-
await withRetry(
|
|
421
|
-
async () => {
|
|
422
|
-
await
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
},
|
|
429
|
-
`putWrites(${threadId}/${checkpointId}/${taskId})`
|
|
430
|
-
);
|
|
456
|
+
await withRetry(async () => {
|
|
457
|
+
await this.db.transaction().execute(async (trx) => {
|
|
458
|
+
await trx.deleteFrom("writes").where("thread_id", "=", threadId).where("checkpoint_ns", "=", checkpointNs).where("checkpoint_id", "=", checkpointId).where("task_id", "=", taskId).execute();
|
|
459
|
+
for (const value of values) {
|
|
460
|
+
await trx.insertInto("writes").values(value).execute();
|
|
461
|
+
}
|
|
462
|
+
});
|
|
463
|
+
}, `putWrites(${threadId}/${checkpointId}/${taskId})`);
|
|
431
464
|
}
|
|
432
465
|
async deleteThread(threadId) {
|
|
433
|
-
await withRetry(
|
|
434
|
-
async () => {
|
|
435
|
-
await
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
},
|
|
440
|
-
`deleteThread(${threadId})`
|
|
441
|
-
);
|
|
466
|
+
await withRetry(async () => {
|
|
467
|
+
await this.db.transaction().execute(async (trx) => {
|
|
468
|
+
await trx.deleteFrom("shallow_checkpoints").where("thread_id", "=", threadId).execute();
|
|
469
|
+
await trx.deleteFrom("writes").where("thread_id", "=", threadId).execute();
|
|
470
|
+
});
|
|
471
|
+
}, `deleteThread(${threadId})`);
|
|
442
472
|
}
|
|
443
473
|
async migratePendingSends(checkpoint, threadId, parentCheckpointId) {
|
|
444
474
|
const result = await this.db.selectFrom("writes as ps").select([
|
|
@@ -463,4 +493,4 @@ CREATE TABLE IF NOT EXISTS writes (
|
|
|
463
493
|
}
|
|
464
494
|
|
|
465
495
|
export { SqliteShallowSaver };
|
|
466
|
-
//# sourceMappingURL=shallow-checkpoint-
|
|
496
|
+
//# sourceMappingURL=shallow-checkpoint-CHYRdSct.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shallow-checkpoint-CHYRdSct.js","sources":["../src/storage/sqlite/shallow-checkpoint.ts"],"sourcesContent":["import { Dialect, Kysely, sql } from 'kysely';\nimport type { RunnableConfig } from '@langchain/core/runnables';\n\nimport {\n BaseCheckpointSaver,\n type Checkpoint,\n type CheckpointListOptions,\n type CheckpointTuple,\n type SerializerProtocol,\n type PendingWrite,\n type CheckpointMetadata,\n TASKS,\n copyCheckpoint,\n maxChannelVersion,\n getCheckpointId,\n WRITES_IDX_MAP,\n uuid6,\n} from '@langchain/langgraph-checkpoint';\n\n/**\n * SQLite 重试配置\n */\nconst SQLITE_RETRY_CONFIG = {\n maxRetries: 3,\n baseDelayMs: 100,\n // 不可重试的错误模式\n nonRetryablePatterns: [\n 'database disk image is malformed', // 数据库文件损坏\n 'database is malformed', // 数据库损坏(短形式)\n 'cannot rollback', // 事务状态错误\n 'no transaction is active', // 无活动事务\n 'database or disk is full', // 磁盘空间不足\n ],\n isRetryableError: (error: any): boolean => {\n const msg = error?.message?.toLowerCase() || '';\n\n // 检查是否为不可重试的错误\n for (const pattern of SQLITE_RETRY_CONFIG.nonRetryablePatterns) {\n if (msg.includes(pattern.toLowerCase())) {\n return false;\n }\n }\n\n // 只重试锁相关的错误\n return (\n msg.includes('sqlite_busy') ||\n msg.includes('database is locked') ||\n msg === 'sqlite_busy' ||\n msg === 'database is locked'\n );\n },\n};\n\n/**\n * 带重试的数据库操作包装器\n */\nasync function withRetry<T>(operation: () => Promise<T>, context?: string): Promise<T> {\n let lastError: Error | null = null;\n\n for (let attempt = 0; attempt < SQLITE_RETRY_CONFIG.maxRetries; attempt++) {\n try {\n return await operation();\n } catch (error: any) {\n lastError = error;\n const msg = error?.message?.toLowerCase() || '';\n\n // 检查是否为严重错误(不可重试)\n if (!SQLITE_RETRY_CONFIG.isRetryableError(error)) {\n // 为数据库损坏错误提供额外的诊断信息\n if (msg.includes('malformed')) {\n const enhancedError = new Error(\n `SQLite database is corrupted: ${error.message}\\n\\n` +\n `Context: ${context || 'unknown'}\\n\\n` +\n `Possible causes:\\n` +\n `1. Database file was manually deleted or modified\\n` +\n `2. Disk I/O errors during write operations\\n` +\n `3. Concurrent access without proper locking\\n\\n` +\n `Recovery options:\\n` +\n `- Delete the database file to start fresh (data will be lost)\\n` +\n `- Use SQLite recovery tools: sqlite3 <db> \".recover\" > recover.sql\\n` +\n `- Switch to PostgreSQL/Redis for production use`,\n );\n enhancedError.name = 'SQLiteCorruptError';\n /** @ts-ignore */\n enhancedError.cause = error;\n throw enhancedError;\n }\n\n // 其他不可重试错误直接抛出\n throw error;\n }\n\n if (attempt < SQLITE_RETRY_CONFIG.maxRetries - 1) {\n const delay = SQLITE_RETRY_CONFIG.baseDelayMs * Math.pow(2, attempt);\n console.warn(\n `SQLite lock detected${context ? ` (${context})` : ''}, retrying in ${delay}ms (attempt ${\n attempt + 1\n }/${SQLITE_RETRY_CONFIG.maxRetries})`,\n );\n await new Promise((resolve) => setTimeout(resolve, delay));\n }\n }\n }\n\n throw lastError;\n}\n\n/**\n * Helper function for deterministic object comparison\n * Used for deep metadata filtering\n */\nfunction deterministicStringify(obj: any): string {\n if (obj === null || typeof obj !== 'object') {\n return JSON.stringify(obj);\n }\n if (Array.isArray(obj)) {\n return JSON.stringify(obj.map((item) => deterministicStringify(item)));\n }\n const sortedObj: Record<string, any> = {};\n const sortedKeys = Object.keys(obj).sort();\n for (const key of sortedKeys) {\n sortedObj[key] = obj[key];\n }\n return JSON.stringify(sortedObj, (_, value) => {\n if (value !== null && typeof value === 'object' && !Array.isArray(value)) {\n const sorted: Record<string, any> = {};\n const keys = Object.keys(value).sort();\n for (const k of keys) {\n sorted[k] = value[k];\n }\n return sorted;\n }\n return value;\n });\n}\n\n// Kysely 数据库表类型定义 - 浅层模式\ninterface ShallowCheckpointsTable {\n thread_id: string;\n checkpoint_ns: string;\n checkpoint_id: string;\n parent_checkpoint_id: string | null;\n type: string | null;\n checkpoint: Uint8Array;\n metadata: Uint8Array;\n checkpoint_ts: number; // 时间戳用于排序\n}\n\ninterface WritesTable {\n thread_id: string;\n checkpoint_ns: string;\n checkpoint_id: string;\n task_id: string;\n idx: number;\n channel: string;\n type: string | null;\n value: Uint8Array | null;\n}\n\ninterface ShallowCheckpointDatabase {\n shallow_checkpoints: ShallowCheckpointsTable;\n writes: WritesTable;\n}\n\n// Valid metadata keys for filtering\nconst checkpointMetadataKeys = ['source', 'step', 'parents'] as const;\n\ntype CheckKeys<T, K extends readonly (keyof T)[]> = [K[number]] extends [keyof T]\n ? [keyof T] extends [K[number]]\n ? K\n : never\n : never;\n\nfunction validateKeys<T, K extends readonly (keyof T)[]>(keys: CheckKeys<T, K>): K {\n return keys;\n}\n\nconst validCheckpointMetadataKeys = validateKeys<CheckpointMetadata, typeof checkpointMetadataKeys>(\n checkpointMetadataKeys,\n);\n\n/**\n * SqliteShallowSaver - SQLite 浅层检查点存储器\n *\n * 特性:\n * - 每个 thread_id + checkpoint_ns 组合只保留最新的 checkpoint\n * - 新 checkpoint 写入时自动清理旧 checkpoint 的 writes\n * - 使用 checkpoint_ts 时间戳排序\n * - 大幅减少存储数据量\n */\nexport class SqliteShallowSaver extends BaseCheckpointSaver {\n db: Kysely<ShallowCheckpointDatabase>;\n protected isSetup: boolean;\n\n constructor(dialect: Dialect, serde?: SerializerProtocol) {\n super(serde);\n this.db = new Kysely<ShallowCheckpointDatabase>({\n dialect,\n });\n this.isSetup = false;\n }\n\n static async fromConnStringAsync(connStringOrLocalPath: string): Promise<SqliteShallowSaver> {\n let saver: SqliteShallowSaver;\n /** @ts-ignore */\n if (globalThis.Bun) {\n console.log('LG | Using BunSqliteDialect ' + connStringOrLocalPath);\n const { BunSqliteDialect } = await import('kysely-bun-worker/normal');\n // 使用 BunSqliteDialect(非 Worker 模式)避免 Worker 事务状态同步问题\n // BunWorkerDialect 在高并发下可能出现 \"cannot rollback - no transaction is active\"\n saver = new SqliteShallowSaver(new BunSqliteDialect({ url: connStringOrLocalPath }));\n } else {\n /** @ts-ignore */\n console.log('LG | Using NodeWasmDialect');\n const { default: SqliteDatabase } = await import('node-sqlite3-wasm');\n const { NodeWasmDialect } = await import('kysely-wasm');\n console.log(connStringOrLocalPath);\n const wasm = new NodeWasmDialect({\n database: new SqliteDatabase.Database(connStringOrLocalPath),\n });\n saver = new SqliteShallowSaver(wasm);\n }\n await saver.setup();\n return saver;\n }\n\n protected async setup(): Promise<void> {\n if (this.isSetup) {\n return;\n }\n\n // 锁等待超时 5 秒\n await sql`PRAGMA busy_timeout = 5000`.execute(this.db as any);\n\n // WAL 模式 - 允许读写并发\n await sql`PRAGMA journal_mode = WAL`.execute(this.db as any);\n\n // NORMAL 模式 - 平衡数据安全与性能\n await sql`PRAGMA synchronous = NORMAL`.execute(this.db as any);\n\n // WAL 自动检查点\n await sql`PRAGMA wal_autocheckpoint = 1000`.execute(this.db as any);\n\n // 创建浅层 checkpoints 表 - 使用复合主键 (thread_id, checkpoint_ns)\n await sql`\nCREATE TABLE IF NOT EXISTS shallow_checkpoints (\n thread_id TEXT NOT NULL,\n checkpoint_ns TEXT NOT NULL DEFAULT '',\n checkpoint_id TEXT NOT NULL,\n parent_checkpoint_id TEXT,\n type TEXT,\n checkpoint BLOB,\n metadata BLOB,\n checkpoint_ts INTEGER NOT NULL DEFAULT 0,\n PRIMARY KEY (thread_id, checkpoint_ns)\n)`.execute(this.db as any);\n\n // 创建 checkpoint_ts 索引用于排序\n await sql`\nCREATE INDEX IF NOT EXISTS idx_shallow_checkpoints_ts \nON shallow_checkpoints(checkpoint_ts DESC)`.execute(this.db as any);\n\n // 创建 writes 表\n await sql`\nCREATE TABLE IF NOT EXISTS writes (\n thread_id TEXT NOT NULL,\n checkpoint_ns TEXT NOT NULL DEFAULT '',\n checkpoint_id TEXT NOT NULL,\n task_id TEXT NOT NULL,\n idx INTEGER NOT NULL,\n channel TEXT NOT NULL,\n type TEXT,\n value BLOB,\n PRIMARY KEY (thread_id, checkpoint_ns, checkpoint_id, task_id, idx)\n)`.execute(this.db as any);\n\n this.isSetup = true;\n }\n\n /**\n * 获取 checkpoint(便捷方法)\n */\n async get(config: RunnableConfig): Promise<Checkpoint | undefined> {\n const tuple = await this.getTuple(config);\n return tuple?.checkpoint;\n }\n\n async getTuple(config: RunnableConfig): Promise<CheckpointTuple | undefined> {\n await this.setup();\n const threadId = config.configurable?.thread_id;\n const checkpointNs = config.configurable?.checkpoint_ns ?? '';\n const requestedCheckpointId = getCheckpointId(config);\n\n if (threadId === undefined) {\n return undefined;\n }\n\n let query = this.db\n .selectFrom('shallow_checkpoints')\n .select([\n 'thread_id',\n 'checkpoint_ns',\n 'checkpoint_id',\n 'parent_checkpoint_id',\n 'type',\n 'checkpoint',\n 'metadata',\n 'checkpoint_ts',\n sql<string>`(\n SELECT json_group_array(\n json_object(\n 'task_id', pw.task_id,\n 'channel', pw.channel,\n 'type', pw.type,\n 'value', CAST(pw.value AS TEXT)\n )\n )\n FROM writes as pw\n WHERE pw.thread_id = shallow_checkpoints.thread_id\n AND pw.checkpoint_ns = shallow_checkpoints.checkpoint_ns\n AND pw.checkpoint_id = shallow_checkpoints.checkpoint_id\n )`.as('pending_writes'),\n sql<string>`(\n SELECT json_group_array(\n json_object(\n 'type', ps.type,\n 'value', CAST(ps.value AS TEXT)\n )\n )\n FROM writes as ps\n WHERE ps.thread_id = shallow_checkpoints.thread_id\n AND ps.checkpoint_ns = shallow_checkpoints.checkpoint_ns\n AND ps.checkpoint_id = shallow_checkpoints.parent_checkpoint_id\n AND ps.channel = ${TASKS}\n ORDER BY ps.idx\n )`.as('pending_sends'),\n ])\n .where('thread_id', '=', threadId)\n .where('checkpoint_ns', '=', checkpointNs);\n\n // 如果指定了 checkpoint_id,需要验证是否匹配\n if (requestedCheckpointId) {\n query = query.where('checkpoint_id', '=', requestedCheckpointId);\n }\n\n const row = await query.executeTakeFirst();\n if (!row) return undefined;\n\n // 如果请求了特定的 checkpoint_id 但不匹配(在 shallow 模式下只有一条记录)\n if (requestedCheckpointId && row.checkpoint_id !== requestedCheckpointId) {\n return undefined;\n }\n\n // 反序列化 pending writes\n const pendingWrites = await Promise.all(\n (\n JSON.parse(row.pending_writes || '[]') as Array<{\n task_id: string;\n channel: string;\n type: string;\n value: string;\n }>\n ).map(async (write) => {\n return [\n write.task_id,\n write.channel,\n await this.serde.loadsTyped(write.type ?? 'json', write.value ?? ''),\n ] as [string, string, unknown];\n }),\n );\n\n // 反序列化 checkpoint\n const checkpoint = (await this.serde.loadsTyped(\n row.type ?? 'json',\n new TextDecoder().decode(row.checkpoint),\n )) as Checkpoint;\n\n // 处理 v < 4 迁移\n if (checkpoint.v < 4 && row.parent_checkpoint_id != null) {\n await this.migratePendingSends(checkpoint, row.thread_id, row.parent_checkpoint_id);\n }\n\n const finalConfig: RunnableConfig = {\n configurable: {\n thread_id: row.thread_id,\n checkpoint_ns: row.checkpoint_ns,\n checkpoint_id: row.checkpoint_id,\n },\n };\n\n return {\n checkpoint,\n config: finalConfig,\n metadata: (await this.serde.loadsTyped(\n row.type ?? 'json',\n new TextDecoder().decode(row.metadata),\n )) as CheckpointMetadata,\n parentConfig: row.parent_checkpoint_id\n ? {\n configurable: {\n thread_id: row.thread_id,\n checkpoint_ns: row.checkpoint_ns,\n checkpoint_id: row.parent_checkpoint_id,\n },\n }\n : undefined,\n pendingWrites,\n };\n }\n\n async *list(config: RunnableConfig, options?: CheckpointListOptions): AsyncGenerator<CheckpointTuple> {\n await this.setup();\n const { limit, before, filter } = options ?? {};\n const threadId = config.configurable?.thread_id;\n const checkpointNs = config.configurable?.checkpoint_ns;\n\n let query = this.db.selectFrom('shallow_checkpoints').select([\n 'thread_id',\n 'checkpoint_ns',\n 'checkpoint_id',\n 'parent_checkpoint_id',\n 'type',\n 'checkpoint',\n 'metadata',\n 'checkpoint_ts',\n sql<string>`(\n SELECT json_group_array(\n json_object(\n 'task_id', pw.task_id,\n 'channel', pw.channel,\n 'type', pw.type,\n 'value', CAST(pw.value AS TEXT)\n )\n )\n FROM writes as pw\n WHERE pw.thread_id = shallow_checkpoints.thread_id\n AND pw.checkpoint_ns = shallow_checkpoints.checkpoint_ns\n AND pw.checkpoint_id = shallow_checkpoints.checkpoint_id\n )`.as('pending_writes'),\n ]);\n\n if (threadId) {\n query = query.where('thread_id', '=', threadId);\n }\n\n if (checkpointNs !== undefined && checkpointNs !== null) {\n query = query.where('checkpoint_ns', '=', checkpointNs);\n }\n\n if (before?.configurable?.checkpoint_id !== undefined) {\n query = query.where('checkpoint_id', '<', before.configurable.checkpoint_id);\n }\n\n // 按时间戳降序(最新的在前)\n query = query.orderBy('checkpoint_ts', 'desc');\n\n const rows = await query.execute();\n let count = 0;\n\n for (const row of rows) {\n // 先反序列化 metadata 以便在应用层过滤\n const metadata = (await this.serde.loadsTyped(\n row.type ?? 'json',\n new TextDecoder().decode(row.metadata),\n )) as CheckpointMetadata;\n\n // 应用层 metadata 过滤(与 ShallowMemorySaver 保持一致)\n if (filter && !this._checkMetadataFilterMatch(metadata, filter as CheckpointMetadata)) {\n continue;\n }\n\n // 应用 limit\n if (limit !== undefined && count >= limit) {\n return;\n }\n\n const pendingWrites = await Promise.all(\n (\n JSON.parse(row.pending_writes || '[]') as Array<{\n task_id: string;\n channel: string;\n type: string;\n value: string;\n }>\n ).map(async (write) => {\n return [\n write.task_id,\n write.channel,\n await this.serde.loadsTyped(write.type ?? 'json', write.value ?? ''),\n ] as [string, string, unknown];\n }),\n );\n\n const checkpoint = (await this.serde.loadsTyped(\n row.type ?? 'json',\n new TextDecoder().decode(row.checkpoint),\n )) as Checkpoint;\n\n if (checkpoint.v < 4 && row.parent_checkpoint_id != null) {\n await this.migratePendingSends(checkpoint, row.thread_id, row.parent_checkpoint_id);\n }\n\n count++;\n yield {\n config: {\n configurable: {\n thread_id: row.thread_id,\n checkpoint_ns: row.checkpoint_ns,\n checkpoint_id: row.checkpoint_id,\n },\n },\n checkpoint,\n metadata,\n parentConfig: row.parent_checkpoint_id\n ? {\n configurable: {\n thread_id: row.thread_id,\n checkpoint_ns: row.checkpoint_ns,\n checkpoint_id: row.parent_checkpoint_id,\n },\n }\n : undefined,\n pendingWrites,\n };\n }\n }\n\n /**\n * Check metadata filter matches (with deep comparison support)\n * Matches ShallowMemorySaver behavior\n */\n private _checkMetadataFilterMatch(metadata: any, filter: CheckpointMetadata): boolean {\n for (const [key, value] of Object.entries(filter)) {\n const metadataValue = metadata?.[key];\n\n if (value === null) {\n // For null filter value, check if key doesn't exist or value is null\n if (!(key in (metadata || {})) || metadataValue !== null) {\n return false;\n }\n } else if (typeof value === 'object' && !Array.isArray(value)) {\n // Deep comparison for objects with deterministic key ordering\n if (typeof metadataValue !== 'object' || metadataValue === null) {\n return false;\n }\n if (deterministicStringify(value) !== deterministicStringify(metadataValue)) {\n return false;\n }\n } else if (metadataValue !== value) {\n return false;\n }\n }\n return true;\n }\n\n async put(\n config: RunnableConfig,\n checkpoint: Checkpoint,\n metadata: CheckpointMetadata,\n _newVersions?: Record<string, string | number>,\n ): Promise<RunnableConfig> {\n await this.setup();\n\n const threadId = config.configurable?.thread_id;\n const checkpointNs = config.configurable?.checkpoint_ns ?? '';\n const parentCheckpointId = config.configurable?.checkpoint_id;\n\n if (!threadId) {\n throw new Error('thread_id is required');\n }\n\n // 使用 checkpoint.id 或生成新的\n const checkpointId = checkpoint.id || uuid6(0);\n\n const preparedCheckpoint: Partial<Checkpoint> = copyCheckpoint(checkpoint);\n\n // 序列化\n const [[type1, serializedCheckpoint], [type2, serializedMetadata]] = await Promise.all([\n this.serde.dumpsTyped(preparedCheckpoint),\n this.serde.dumpsTyped(metadata),\n ]);\n\n if (type1 !== type2) {\n throw new Error('Failed to serialize checkpoint and metadata to the same type.');\n }\n\n const threadId_ = threadId;\n const checkpointNs_ = checkpointNs;\n const checkpointId_ = checkpointId;\n\n // 带重试的数据库操作\n await withRetry(async () => {\n await this.db.transaction().execute(async (trx) => {\n // 获取旧的 checkpoint_id 用于清理 writes\n const oldCheckpoint = await trx\n .selectFrom('shallow_checkpoints')\n .select(['checkpoint_id'])\n .where('thread_id', '=', threadId_)\n .where('checkpoint_ns', '=', checkpointNs_)\n .executeTakeFirst();\n\n // 如果存在旧的 checkpoint 且 id 不同,清理旧的 writes\n if (oldCheckpoint && oldCheckpoint.checkpoint_id !== checkpointId_) {\n await trx\n .deleteFrom('writes')\n .where('thread_id', '=', threadId_)\n .where('checkpoint_ns', '=', checkpointNs_)\n .where('checkpoint_id', '=', oldCheckpoint.checkpoint_id)\n .execute();\n }\n\n // 使用 INSERT OR REPLACE (UPSERT) 覆盖写入\n await trx\n .insertInto('shallow_checkpoints')\n .values({\n thread_id: threadId_,\n checkpoint_ns: checkpointNs_,\n checkpoint_id: checkpointId_,\n parent_checkpoint_id: parentCheckpointId ?? null,\n type: type1,\n checkpoint: new Uint8Array(Buffer.from(serializedCheckpoint)),\n metadata: new Uint8Array(Buffer.from(serializedMetadata)),\n checkpoint_ts: Date.now(),\n })\n .onConflict((oc) =>\n oc.columns(['thread_id', 'checkpoint_ns']).doUpdateSet({\n checkpoint_id: checkpointId_,\n parent_checkpoint_id: parentCheckpointId ?? null,\n type: type1,\n checkpoint: new Uint8Array(Buffer.from(serializedCheckpoint)),\n metadata: new Uint8Array(Buffer.from(serializedMetadata)),\n checkpoint_ts: Date.now(),\n }),\n )\n .execute();\n });\n }, `put(${threadId}/${checkpointId})`);\n\n return {\n configurable: {\n thread_id: threadId,\n checkpoint_ns: checkpointNs,\n checkpoint_id: checkpointId,\n },\n };\n }\n\n async putWrites(config: RunnableConfig, writes: PendingWrite[], taskId: string): Promise<void> {\n await this.setup();\n\n const threadId = config.configurable?.thread_id;\n const checkpointNs = config.configurable?.checkpoint_ns ?? '';\n const checkpointId = config.configurable?.checkpoint_id;\n\n if (!threadId || !checkpointId) {\n throw new Error('thread_id and checkpoint_id are required');\n }\n\n // 预先序列化\n const values = await Promise.all(\n writes.map(async (write, idx) => {\n const [type, serializedWrite] = await this.serde.dumpsTyped(write[1]);\n return {\n thread_id: threadId,\n checkpoint_ns: checkpointNs,\n checkpoint_id: checkpointId,\n task_id: taskId,\n idx: WRITES_IDX_MAP[write[0]] ?? idx,\n channel: write[0],\n type,\n value: new Uint8Array(Buffer.from(serializedWrite)),\n };\n }),\n );\n\n if (values.length === 0) return;\n\n // 带重试的批量插入\n await withRetry(async () => {\n await this.db.transaction().execute(async (trx) => {\n // 先删除已存在的记录\n await trx\n .deleteFrom('writes')\n .where('thread_id', '=', threadId)\n .where('checkpoint_ns', '=', checkpointNs)\n .where('checkpoint_id', '=', checkpointId)\n .where('task_id', '=', taskId)\n .execute();\n\n // 批量插入\n for (const value of values) {\n await trx.insertInto('writes').values(value).execute();\n }\n });\n }, `putWrites(${threadId}/${checkpointId}/${taskId})`);\n }\n\n async deleteThread(threadId: string): Promise<void> {\n await withRetry(async () => {\n await this.db.transaction().execute(async (trx) => {\n await trx.deleteFrom('shallow_checkpoints').where('thread_id', '=', threadId).execute();\n await trx.deleteFrom('writes').where('thread_id', '=', threadId).execute();\n });\n }, `deleteThread(${threadId})`);\n }\n\n protected async migratePendingSends(checkpoint: Checkpoint, threadId: string, parentCheckpointId: string) {\n const result = await this.db\n .selectFrom('writes as ps')\n .select([\n 'ps.checkpoint_id',\n sql<string>`json_group_array(\n json_object(\n 'type', ps.type,\n 'value', CAST(ps.value AS TEXT)\n )\n )`.as('pending_sends'),\n ])\n .where('ps.thread_id', '=', threadId)\n .where('ps.checkpoint_id', '=', parentCheckpointId)\n .where('ps.channel', '=', TASKS)\n .orderBy('ps.idx')\n .executeTakeFirst();\n\n if (!result) return;\n\n const mutableCheckpoint = checkpoint;\n\n mutableCheckpoint.channel_values ??= {};\n mutableCheckpoint.channel_values[TASKS] = await Promise.all(\n JSON.parse(result.pending_sends || '[]').map(({ type, value }: { type: string; value: string }) =>\n this.serde.loadsTyped(type, value),\n ),\n );\n\n mutableCheckpoint.channel_versions[TASKS] =\n Object.keys(checkpoint.channel_versions).length > 0\n ? maxChannelVersion(...Object.values(checkpoint.channel_versions))\n : this.getNextVersion(undefined);\n }\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -1707,12 +1707,12 @@ const createCheckPointer = async () => {
|
|
|
1707
1707
|
if (process.env.SQLITE_DATABASE_URI) {
|
|
1708
1708
|
if (process.env.CHECKPOINT_TYPE === "sqlite") {
|
|
1709
1709
|
console.debug("LG | Using sqlite (full) as checkpoint");
|
|
1710
|
-
const { SqliteSaver } = await import('./checkpoint-
|
|
1710
|
+
const { SqliteSaver } = await import('./checkpoint-Due32543.js');
|
|
1711
1711
|
const db2 = await SqliteSaver.fromConnStringAsync(process.env.SQLITE_DATABASE_URI);
|
|
1712
1712
|
return db2;
|
|
1713
1713
|
}
|
|
1714
1714
|
console.debug("LG | Using shallow sqlite as checkpoint (default)");
|
|
1715
|
-
const { SqliteShallowSaver: SqliteShallowSaver2 } = await import('./shallow-checkpoint-
|
|
1715
|
+
const { SqliteShallowSaver: SqliteShallowSaver2 } = await import('./shallow-checkpoint-CHYRdSct.js');
|
|
1716
1716
|
const db = await SqliteShallowSaver2.fromConnStringAsync(process.env.SQLITE_DATABASE_URI);
|
|
1717
1717
|
return db;
|
|
1718
1718
|
}
|
|
@@ -1731,7 +1731,7 @@ const createMessageQueue = async () => {
|
|
|
1731
1731
|
let q;
|
|
1732
1732
|
if (process.env.REDIS_URL) {
|
|
1733
1733
|
console.debug("LG | Using redis as stream queue");
|
|
1734
|
-
const { RedisStreamQueue } = await import('./queue-
|
|
1734
|
+
const { RedisStreamQueue } = await import('./queue-DPHwOl26.js');
|
|
1735
1735
|
q = RedisStreamQueue;
|
|
1736
1736
|
} else {
|
|
1737
1737
|
q = MemoryStreamQueue;
|
|
@@ -1872,8 +1872,8 @@ async function streamStateWithQueue(threads, run, queue, payload, options) {
|
|
|
1872
1872
|
};
|
|
1873
1873
|
if (event[0] === "values") {
|
|
1874
1874
|
const value = event[1];
|
|
1875
|
-
await queue.push(new EventMessage(getNameWithNs("values"), value));
|
|
1876
1875
|
if (getNameWithNs("values") === "values") {
|
|
1876
|
+
await queue.push(new EventMessage(getNameWithNs("values"), value));
|
|
1877
1877
|
if (value?.__interrupt__) {
|
|
1878
1878
|
await threads.set(run.thread_id, {
|
|
1879
1879
|
status: "interrupted",
|
|
@@ -1994,10 +1994,7 @@ async function* streamState(threads, run, payload, options) {
|
|
|
1994
1994
|
}
|
|
1995
1995
|
if (backgroundTask) {
|
|
1996
1996
|
try {
|
|
1997
|
-
await Promise.race([
|
|
1998
|
-
backgroundTask,
|
|
1999
|
-
new Promise((resolve) => setTimeout(resolve, 1e3))
|
|
2000
|
-
]);
|
|
1997
|
+
await Promise.race([backgroundTask, new Promise((resolve) => setTimeout(resolve, 1e3))]);
|
|
2001
1998
|
} catch (e) {
|
|
2002
1999
|
}
|
|
2003
2000
|
backgroundTask = null;
|
|
@@ -2014,4 +2011,4 @@ async function* streamState(threads, run, payload, options) {
|
|
|
2014
2011
|
}
|
|
2015
2012
|
|
|
2016
2013
|
export { BaseStreamQueue as B, CancelEventMessage as C, GRAPHS as G, KyselyThreadsManager as K, LangGraphGlobal as L, streamState as a, getGraph as g, registerGraph as r, serialiseAsDict as s };
|
|
2017
|
-
//# sourceMappingURL=stream-
|
|
2014
|
+
//# sourceMappingURL=stream-Zt8tbgEj.js.map
|