@bowenqt/qiniu-ai-sdk 0.10.0 → 0.13.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/README.md +225 -0
- package/dist/ai/agent-graph.d.ts +99 -0
- package/dist/ai/agent-graph.d.ts.map +1 -0
- package/dist/ai/agent-graph.js +321 -0
- package/dist/ai/agent-graph.js.map +1 -0
- package/dist/ai/agent-graph.mjs +317 -0
- package/dist/ai/generate-text.d.ts +51 -0
- package/dist/ai/generate-text.d.ts.map +1 -1
- package/dist/ai/generate-text.js +132 -0
- package/dist/ai/generate-text.js.map +1 -1
- package/dist/ai/generate-text.mjs +131 -0
- package/dist/ai/graph/checkpointer.d.ts +112 -0
- package/dist/ai/graph/checkpointer.d.ts.map +1 -0
- package/dist/ai/graph/checkpointer.js +131 -0
- package/dist/ai/graph/checkpointer.js.map +1 -0
- package/dist/ai/graph/checkpointer.mjs +126 -0
- package/dist/ai/graph/index.d.ts +13 -0
- package/dist/ai/graph/index.d.ts.map +1 -0
- package/dist/ai/graph/index.js +22 -0
- package/dist/ai/graph/index.js.map +1 -0
- package/dist/ai/graph/index.mjs +12 -0
- package/dist/ai/graph/postgres-checkpointer.d.ts +54 -0
- package/dist/ai/graph/postgres-checkpointer.d.ts.map +1 -0
- package/dist/ai/graph/postgres-checkpointer.js +134 -0
- package/dist/ai/graph/postgres-checkpointer.js.map +1 -0
- package/dist/ai/graph/postgres-checkpointer.mjs +130 -0
- package/dist/ai/graph/redis-checkpointer.d.ts +51 -0
- package/dist/ai/graph/redis-checkpointer.d.ts.map +1 -0
- package/dist/ai/graph/redis-checkpointer.js +124 -0
- package/dist/ai/graph/redis-checkpointer.js.map +1 -0
- package/dist/ai/graph/redis-checkpointer.mjs +120 -0
- package/dist/ai/graph/state-graph.d.ts +41 -0
- package/dist/ai/graph/state-graph.d.ts.map +1 -0
- package/dist/ai/graph/state-graph.js +149 -0
- package/dist/ai/graph/state-graph.js.map +1 -0
- package/dist/ai/graph/state-graph.mjs +144 -0
- package/dist/ai/graph/types.d.ts +41 -0
- package/dist/ai/graph/types.d.ts.map +1 -0
- package/dist/ai/graph/types.js +10 -0
- package/dist/ai/graph/types.js.map +1 -0
- package/dist/ai/graph/types.mjs +7 -0
- package/dist/ai/internal-types.d.ts +109 -0
- package/dist/ai/internal-types.d.ts.map +1 -0
- package/dist/ai/internal-types.js +28 -0
- package/dist/ai/internal-types.js.map +1 -0
- package/dist/ai/internal-types.mjs +23 -0
- package/dist/ai/nodes/execute-node.d.ts +27 -0
- package/dist/ai/nodes/execute-node.d.ts.map +1 -0
- package/dist/ai/nodes/execute-node.js +118 -0
- package/dist/ai/nodes/execute-node.js.map +1 -0
- package/dist/ai/nodes/execute-node.mjs +114 -0
- package/dist/ai/nodes/index.d.ts +8 -0
- package/dist/ai/nodes/index.d.ts.map +1 -0
- package/dist/ai/nodes/index.js +16 -0
- package/dist/ai/nodes/index.js.map +1 -0
- package/dist/ai/nodes/index.mjs +7 -0
- package/dist/ai/nodes/memory-node.d.ts +34 -0
- package/dist/ai/nodes/memory-node.d.ts.map +1 -0
- package/dist/ai/nodes/memory-node.js +164 -0
- package/dist/ai/nodes/memory-node.js.map +1 -0
- package/dist/ai/nodes/memory-node.mjs +158 -0
- package/dist/ai/nodes/predict-node.d.ts +42 -0
- package/dist/ai/nodes/predict-node.d.ts.map +1 -0
- package/dist/ai/nodes/predict-node.js +89 -0
- package/dist/ai/nodes/predict-node.js.map +1 -0
- package/dist/ai/nodes/predict-node.mjs +86 -0
- package/dist/ai/nodes/types.d.ts +44 -0
- package/dist/ai/nodes/types.d.ts.map +1 -0
- package/dist/ai/nodes/types.js +6 -0
- package/dist/ai/nodes/types.js.map +1 -0
- package/dist/ai/nodes/types.mjs +5 -0
- package/dist/index.d.ts +23 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +80 -1
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +34 -0
- package/dist/lib/otel-tracer.d.ts +47 -0
- package/dist/lib/otel-tracer.d.ts.map +1 -0
- package/dist/lib/otel-tracer.js +79 -0
- package/dist/lib/otel-tracer.js.map +1 -0
- package/dist/lib/otel-tracer.mjs +75 -0
- package/dist/lib/token-estimator.d.ts +62 -0
- package/dist/lib/token-estimator.d.ts.map +1 -0
- package/dist/lib/token-estimator.js +106 -0
- package/dist/lib/token-estimator.js.map +1 -0
- package/dist/lib/token-estimator.mjs +100 -0
- package/dist/lib/tool-registry.d.ts +103 -0
- package/dist/lib/tool-registry.d.ts.map +1 -0
- package/dist/lib/tool-registry.js +159 -0
- package/dist/lib/tool-registry.js.map +1 -0
- package/dist/lib/tool-registry.mjs +154 -0
- package/dist/lib/tracer.d.ts +85 -0
- package/dist/lib/tracer.d.ts.map +1 -0
- package/dist/lib/tracer.js +170 -0
- package/dist/lib/tracer.js.map +1 -0
- package/dist/lib/tracer.mjs +161 -0
- package/dist/lib/types.d.ts +11 -0
- package/dist/lib/types.d.ts.map +1 -1
- package/dist/modules/mcp/adapter.d.ts +23 -0
- package/dist/modules/mcp/adapter.d.ts.map +1 -0
- package/dist/modules/mcp/adapter.js +63 -0
- package/dist/modules/mcp/adapter.js.map +1 -0
- package/dist/modules/mcp/adapter.mjs +58 -0
- package/dist/modules/mcp/client.d.ts +75 -0
- package/dist/modules/mcp/client.d.ts.map +1 -0
- package/dist/modules/mcp/client.js +300 -0
- package/dist/modules/mcp/client.js.map +1 -0
- package/dist/modules/mcp/client.mjs +295 -0
- package/dist/modules/mcp/http-transport.d.ts +51 -0
- package/dist/modules/mcp/http-transport.d.ts.map +1 -0
- package/dist/modules/mcp/http-transport.js +146 -0
- package/dist/modules/mcp/http-transport.js.map +1 -0
- package/dist/modules/mcp/http-transport.mjs +141 -0
- package/dist/modules/mcp/index.d.ts +11 -0
- package/dist/modules/mcp/index.d.ts.map +1 -0
- package/dist/modules/mcp/index.js +34 -0
- package/dist/modules/mcp/index.js.map +1 -0
- package/dist/modules/mcp/index.mjs +14 -0
- package/dist/modules/mcp/oauth.d.ts +101 -0
- package/dist/modules/mcp/oauth.d.ts.map +1 -0
- package/dist/modules/mcp/oauth.js +347 -0
- package/dist/modules/mcp/oauth.js.map +1 -0
- package/dist/modules/mcp/oauth.mjs +304 -0
- package/dist/modules/mcp/token-store.d.ts +69 -0
- package/dist/modules/mcp/token-store.d.ts.map +1 -0
- package/dist/modules/mcp/token-store.js +174 -0
- package/dist/modules/mcp/token-store.js.map +1 -0
- package/dist/modules/mcp/token-store.mjs +135 -0
- package/dist/modules/mcp/types.d.ts +91 -0
- package/dist/modules/mcp/types.d.ts.map +1 -0
- package/dist/modules/mcp/types.js +14 -0
- package/dist/modules/mcp/types.js.map +1 -0
- package/dist/modules/mcp/types.mjs +11 -0
- package/dist/modules/skills/index.d.ts +7 -0
- package/dist/modules/skills/index.d.ts.map +1 -0
- package/dist/modules/skills/index.js +14 -0
- package/dist/modules/skills/index.js.map +1 -0
- package/dist/modules/skills/index.mjs +6 -0
- package/dist/modules/skills/loader.d.ts +51 -0
- package/dist/modules/skills/loader.d.ts.map +1 -0
- package/dist/modules/skills/loader.js +237 -0
- package/dist/modules/skills/loader.js.map +1 -0
- package/dist/modules/skills/loader.mjs +198 -0
- package/dist/modules/skills/types.d.ts +60 -0
- package/dist/modules/skills/types.d.ts.map +1 -0
- package/dist/modules/skills/types.js +20 -0
- package/dist/modules/skills/types.js.map +1 -0
- package/dist/modules/skills/types.mjs +17 -0
- package/package.json +4 -1
|
@@ -304,4 +304,135 @@ function parseToolArguments(payload) {
|
|
|
304
304
|
return payload;
|
|
305
305
|
}
|
|
306
306
|
}
|
|
307
|
+
// ============================================================================
|
|
308
|
+
// G2/G4: Graph-based generateText implementation
|
|
309
|
+
// ============================================================================
|
|
310
|
+
import { AgentGraph } from './agent-graph.mjs';
|
|
311
|
+
/**
|
|
312
|
+
* Generate text using the AgentGraph runtime.
|
|
313
|
+
*
|
|
314
|
+
* Benefits over generateText:
|
|
315
|
+
* - Skills injection with automatic compaction
|
|
316
|
+
* - Node-level event hooks (onNodeEnter/onNodeExit)
|
|
317
|
+
* - Consistent event ordering (text→tool_call→tool_result)
|
|
318
|
+
* - JSON mode non-streaming fallback
|
|
319
|
+
*
|
|
320
|
+
* @example
|
|
321
|
+
* ```typescript
|
|
322
|
+
* const result = await generateTextWithGraph({
|
|
323
|
+
* client,
|
|
324
|
+
* model: 'deepseek-v3',
|
|
325
|
+
* messages: [{ role: 'user', content: 'Hello' }],
|
|
326
|
+
* skills: [await skillLoader.load('my-skill')],
|
|
327
|
+
* onStepFinish: (step) => console.log(step),
|
|
328
|
+
* });
|
|
329
|
+
* ```
|
|
330
|
+
*/
|
|
331
|
+
export async function generateTextWithGraph(options) {
|
|
332
|
+
const { client, model, tools, skills, maxSteps = 10, maxContextTokens, onStepFinish, onNodeEnter, onNodeExit, abortSignal, temperature, topP, maxTokens, responseFormat, toolChoice, } = options;
|
|
333
|
+
// Normalize messages
|
|
334
|
+
const messages = normalizeMessages(options);
|
|
335
|
+
// Track current messages for tool context (will be updated during execution)
|
|
336
|
+
let currentMessages = [...messages];
|
|
337
|
+
// Convert tools to RegisteredTool format
|
|
338
|
+
// High fix: use convertToolParameters for Zod support and preserve required fields
|
|
339
|
+
const registeredTools = {};
|
|
340
|
+
if (tools) {
|
|
341
|
+
for (const [name, tool] of Object.entries(tools)) {
|
|
342
|
+
// Convert parameters using same logic as generateText
|
|
343
|
+
const convertedParams = convertToolParameters(tool.parameters);
|
|
344
|
+
registeredTools[name] = {
|
|
345
|
+
name,
|
|
346
|
+
description: tool.description || '',
|
|
347
|
+
parameters: {
|
|
348
|
+
type: 'object',
|
|
349
|
+
properties: convertedParams.properties || convertedParams,
|
|
350
|
+
required: convertedParams.required,
|
|
351
|
+
},
|
|
352
|
+
source: { type: 'user', namespace: 'generateText' },
|
|
353
|
+
execute: tool.execute
|
|
354
|
+
? async (args, execContext) => {
|
|
355
|
+
// Use context from execute-node (has real toolCallId), fallback to currentMessages
|
|
356
|
+
const context = execContext
|
|
357
|
+
? {
|
|
358
|
+
toolCallId: execContext.toolCallId,
|
|
359
|
+
messages: execContext.messages,
|
|
360
|
+
abortSignal: execContext.abortSignal,
|
|
361
|
+
}
|
|
362
|
+
: {
|
|
363
|
+
toolCallId: '',
|
|
364
|
+
messages: currentMessages,
|
|
365
|
+
abortSignal,
|
|
366
|
+
};
|
|
367
|
+
return tool.execute(args, context);
|
|
368
|
+
}
|
|
369
|
+
: undefined,
|
|
370
|
+
};
|
|
371
|
+
}
|
|
372
|
+
}
|
|
373
|
+
// Track nodes visited
|
|
374
|
+
const nodesVisited = [];
|
|
375
|
+
// Create AgentGraph
|
|
376
|
+
const graph = new AgentGraph({
|
|
377
|
+
client,
|
|
378
|
+
model,
|
|
379
|
+
tools: registeredTools,
|
|
380
|
+
skills,
|
|
381
|
+
maxSteps,
|
|
382
|
+
maxContextTokens, // Pass through for compaction
|
|
383
|
+
temperature,
|
|
384
|
+
topP,
|
|
385
|
+
maxTokens,
|
|
386
|
+
responseFormat,
|
|
387
|
+
toolChoice,
|
|
388
|
+
abortSignal,
|
|
389
|
+
events: {
|
|
390
|
+
onStepFinish: (step) => {
|
|
391
|
+
if (onStepFinish) {
|
|
392
|
+
// Convert internal StepResult to public StepResult
|
|
393
|
+
const publicStep = {
|
|
394
|
+
type: step.type,
|
|
395
|
+
content: step.content,
|
|
396
|
+
reasoning: step.reasoning,
|
|
397
|
+
toolCalls: step.toolCalls,
|
|
398
|
+
toolResults: step.toolResults?.map(r => ({
|
|
399
|
+
toolCallId: r.toolCallId,
|
|
400
|
+
result: r.result,
|
|
401
|
+
})),
|
|
402
|
+
};
|
|
403
|
+
onStepFinish(publicStep);
|
|
404
|
+
}
|
|
405
|
+
},
|
|
406
|
+
onNodeEnter: (nodeName) => {
|
|
407
|
+
nodesVisited.push(nodeName);
|
|
408
|
+
onNodeEnter?.(nodeName);
|
|
409
|
+
},
|
|
410
|
+
onNodeExit: onNodeExit,
|
|
411
|
+
},
|
|
412
|
+
});
|
|
413
|
+
// Execute graph
|
|
414
|
+
const graphResult = await graph.invoke(messages);
|
|
415
|
+
// Build result
|
|
416
|
+
return {
|
|
417
|
+
text: graphResult.text,
|
|
418
|
+
reasoning: graphResult.reasoning,
|
|
419
|
+
steps: graphResult.steps.map(s => ({
|
|
420
|
+
type: s.type,
|
|
421
|
+
content: s.content,
|
|
422
|
+
reasoning: s.reasoning,
|
|
423
|
+
toolCalls: s.toolCalls,
|
|
424
|
+
toolResults: s.toolResults?.map(r => ({
|
|
425
|
+
toolCallId: r.toolCallId,
|
|
426
|
+
result: r.result,
|
|
427
|
+
})),
|
|
428
|
+
})),
|
|
429
|
+
usage: graphResult.usage,
|
|
430
|
+
finishReason: graphResult.finishReason,
|
|
431
|
+
graphInfo: {
|
|
432
|
+
nodesVisited,
|
|
433
|
+
skillsInjected: skills?.map(s => s.name) || [],
|
|
434
|
+
compaction: graphResult.compaction,
|
|
435
|
+
},
|
|
436
|
+
};
|
|
437
|
+
}
|
|
307
438
|
//# sourceMappingURL=generate-text.js.map
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Checkpointer - State persistence for Graph execution.
|
|
3
|
+
*
|
|
4
|
+
* Provides save/load capabilities for resumable agent sessions.
|
|
5
|
+
*/
|
|
6
|
+
import type { AgentState } from '../internal-types';
|
|
7
|
+
/**
|
|
8
|
+
* Checkpoint metadata.
|
|
9
|
+
*/
|
|
10
|
+
export interface CheckpointMetadata {
|
|
11
|
+
/** Unique checkpoint ID */
|
|
12
|
+
id: string;
|
|
13
|
+
/** Thread ID for grouping checkpoints */
|
|
14
|
+
threadId: string;
|
|
15
|
+
/** Creation timestamp */
|
|
16
|
+
createdAt: number;
|
|
17
|
+
/** Step count at checkpoint */
|
|
18
|
+
stepCount: number;
|
|
19
|
+
/** Optional user-provided metadata */
|
|
20
|
+
custom?: Record<string, unknown>;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Stored checkpoint data.
|
|
24
|
+
*/
|
|
25
|
+
export interface Checkpoint {
|
|
26
|
+
metadata: CheckpointMetadata;
|
|
27
|
+
/** Serialized state (JSON) */
|
|
28
|
+
state: SerializedAgentState;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Serialized agent state (JSON-safe).
|
|
32
|
+
* Note: Tools Map is converted to Record, non-serializable fields stripped.
|
|
33
|
+
*/
|
|
34
|
+
export interface SerializedAgentState {
|
|
35
|
+
messages: Array<{
|
|
36
|
+
role: string;
|
|
37
|
+
content: unknown;
|
|
38
|
+
tool_calls?: unknown[];
|
|
39
|
+
tool_call_id?: string;
|
|
40
|
+
_meta?: {
|
|
41
|
+
skillId?: string;
|
|
42
|
+
droppable?: boolean;
|
|
43
|
+
};
|
|
44
|
+
}>;
|
|
45
|
+
stepCount: number;
|
|
46
|
+
maxSteps: number;
|
|
47
|
+
done: boolean;
|
|
48
|
+
output: string;
|
|
49
|
+
reasoning: string;
|
|
50
|
+
finishReason: string | null;
|
|
51
|
+
usage?: {
|
|
52
|
+
prompt_tokens: number;
|
|
53
|
+
completion_tokens: number;
|
|
54
|
+
total_tokens: number;
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Checkpointer interface.
|
|
59
|
+
*/
|
|
60
|
+
export interface Checkpointer {
|
|
61
|
+
/**
|
|
62
|
+
* Save a checkpoint.
|
|
63
|
+
*/
|
|
64
|
+
save(threadId: string, state: AgentState, custom?: Record<string, unknown>): Promise<CheckpointMetadata>;
|
|
65
|
+
/**
|
|
66
|
+
* Load the latest checkpoint for a thread.
|
|
67
|
+
*/
|
|
68
|
+
load(threadId: string): Promise<Checkpoint | null>;
|
|
69
|
+
/**
|
|
70
|
+
* List all checkpoints for a thread.
|
|
71
|
+
*/
|
|
72
|
+
list(threadId: string): Promise<CheckpointMetadata[]>;
|
|
73
|
+
/**
|
|
74
|
+
* Delete a checkpoint.
|
|
75
|
+
*/
|
|
76
|
+
delete(checkpointId: string): Promise<boolean>;
|
|
77
|
+
/**
|
|
78
|
+
* Clear all checkpoints for a thread.
|
|
79
|
+
*/
|
|
80
|
+
clear(threadId: string): Promise<number>;
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* In-memory checkpointer implementation.
|
|
84
|
+
* Suitable for testing and short-lived sessions.
|
|
85
|
+
*/
|
|
86
|
+
export declare class MemoryCheckpointer implements Checkpointer {
|
|
87
|
+
private readonly checkpoints;
|
|
88
|
+
private readonly maxItems;
|
|
89
|
+
constructor(options?: {
|
|
90
|
+
maxItems?: number;
|
|
91
|
+
});
|
|
92
|
+
save(threadId: string, state: AgentState, custom?: Record<string, unknown>): Promise<CheckpointMetadata>;
|
|
93
|
+
load(threadId: string): Promise<Checkpoint | null>;
|
|
94
|
+
list(threadId: string): Promise<CheckpointMetadata[]>;
|
|
95
|
+
delete(checkpointId: string): Promise<boolean>;
|
|
96
|
+
clear(threadId: string): Promise<number>;
|
|
97
|
+
/**
|
|
98
|
+
* Serialize agent state to JSON-safe format.
|
|
99
|
+
* Strips non-serializable fields (abortSignal, tools Map).
|
|
100
|
+
*/
|
|
101
|
+
private serializeState;
|
|
102
|
+
/**
|
|
103
|
+
* Cleanup old checkpoints to stay under maxItems.
|
|
104
|
+
*/
|
|
105
|
+
private cleanup;
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* Deserialize checkpoint state back to AgentState.
|
|
109
|
+
* Note: Tools must be re-provided, abortSignal reset to undefined.
|
|
110
|
+
*/
|
|
111
|
+
export declare function deserializeCheckpoint(checkpoint: Checkpoint, tools?: Map<string, any>): AgentState;
|
|
112
|
+
//# sourceMappingURL=checkpointer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"checkpointer.d.ts","sourceRoot":"","sources":["../../../src/ai/graph/checkpointer.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAEpD;;GAEG;AACH,MAAM,WAAW,kBAAkB;IAC/B,2BAA2B;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,yCAAyC;IACzC,QAAQ,EAAE,MAAM,CAAC;IACjB,yBAAyB;IACzB,SAAS,EAAE,MAAM,CAAC;IAClB,+BAA+B;IAC/B,SAAS,EAAE,MAAM,CAAC;IAClB,sCAAsC;IACtC,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IACvB,QAAQ,EAAE,kBAAkB,CAAC;IAC7B,8BAA8B;IAC9B,KAAK,EAAE,oBAAoB,CAAC;CAC/B;AAED;;;GAGG;AACH,MAAM,WAAW,oBAAoB;IACjC,QAAQ,EAAE,KAAK,CAAC;QACZ,IAAI,EAAE,MAAM,CAAC;QACb,OAAO,EAAE,OAAO,CAAC;QACjB,UAAU,CAAC,EAAE,OAAO,EAAE,CAAC;QACvB,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,KAAK,CAAC,EAAE;YACJ,OAAO,CAAC,EAAE,MAAM,CAAC;YACjB,SAAS,CAAC,EAAE,OAAO,CAAC;SACvB,CAAC;KACL,CAAC,CAAC;IACH,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,OAAO,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,KAAK,CAAC,EAAE;QACJ,aAAa,EAAE,MAAM,CAAC;QACtB,iBAAiB,EAAE,MAAM,CAAC;QAC1B,YAAY,EAAE,MAAM,CAAC;KACxB,CAAC;CACL;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IACzB;;OAEG;IACH,IAAI,CACA,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,UAAU,EACjB,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GACjC,OAAO,CAAC,kBAAkB,CAAC,CAAC;IAE/B;;OAEG;IACH,IAAI,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC,CAAC;IAEnD;;OAEG;IACH,IAAI,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,EAAE,CAAC,CAAC;IAEtD;;OAEG;IACH,MAAM,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAE/C;;OAEG;IACH,KAAK,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;CAC5C;AAED;;;GAGG;AACH,qBAAa,kBAAmB,YAAW,YAAY;IACnD,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAiC;IAC7D,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;gBAEtB,OAAO,CAAC,EAAE;QAAE,QAAQ,CAAC,EAAE,MAAM,CAAA;KAAE;IAIrC,IAAI,CACN,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,UAAU,EACjB,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GACjC,OAAO,CAAC,kBAAkB,CAAC;IAwBxB,IAAI,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC;IAelD,IAAI,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,EAAE,CAAC;IAYrD,MAAM,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAI9C,KAAK,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAa9C;;;OAGG;IACH,OAAO,CAAC,cAAc;IAmBtB;;OAEG;YACW,OAAO;CAexB;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,CACjC,UAAU,EAAE,UAAU,EACtB,KAAK,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,GACzB,UAAU,CAgBZ"}
|
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Checkpointer - State persistence for Graph execution.
|
|
4
|
+
*
|
|
5
|
+
* Provides save/load capabilities for resumable agent sessions.
|
|
6
|
+
*/
|
|
7
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
8
|
+
exports.MemoryCheckpointer = void 0;
|
|
9
|
+
exports.deserializeCheckpoint = deserializeCheckpoint;
|
|
10
|
+
/**
|
|
11
|
+
* In-memory checkpointer implementation.
|
|
12
|
+
* Suitable for testing and short-lived sessions.
|
|
13
|
+
*/
|
|
14
|
+
class MemoryCheckpointer {
|
|
15
|
+
constructor(options) {
|
|
16
|
+
this.checkpoints = new Map();
|
|
17
|
+
this.maxItems = options?.maxItems ?? 100;
|
|
18
|
+
}
|
|
19
|
+
async save(threadId, state, custom) {
|
|
20
|
+
const id = `ckpt_${threadId}_${Date.now()}_${Math.random().toString(36).slice(2, 8)}`;
|
|
21
|
+
const metadata = {
|
|
22
|
+
id,
|
|
23
|
+
threadId,
|
|
24
|
+
createdAt: Date.now(),
|
|
25
|
+
stepCount: state.stepCount,
|
|
26
|
+
custom,
|
|
27
|
+
};
|
|
28
|
+
const serialized = this.serializeState(state);
|
|
29
|
+
this.checkpoints.set(id, {
|
|
30
|
+
metadata,
|
|
31
|
+
state: serialized,
|
|
32
|
+
});
|
|
33
|
+
// Cleanup old checkpoints if over limit
|
|
34
|
+
await this.cleanup();
|
|
35
|
+
return metadata;
|
|
36
|
+
}
|
|
37
|
+
async load(threadId) {
|
|
38
|
+
// Find latest checkpoint for thread
|
|
39
|
+
let latest = null;
|
|
40
|
+
for (const checkpoint of this.checkpoints.values()) {
|
|
41
|
+
if (checkpoint.metadata.threadId === threadId) {
|
|
42
|
+
if (!latest || checkpoint.metadata.createdAt > latest.metadata.createdAt) {
|
|
43
|
+
latest = checkpoint;
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
return latest;
|
|
48
|
+
}
|
|
49
|
+
async list(threadId) {
|
|
50
|
+
const result = [];
|
|
51
|
+
for (const checkpoint of this.checkpoints.values()) {
|
|
52
|
+
if (checkpoint.metadata.threadId === threadId) {
|
|
53
|
+
result.push(checkpoint.metadata);
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
return result.sort((a, b) => b.createdAt - a.createdAt);
|
|
57
|
+
}
|
|
58
|
+
async delete(checkpointId) {
|
|
59
|
+
return this.checkpoints.delete(checkpointId);
|
|
60
|
+
}
|
|
61
|
+
async clear(threadId) {
|
|
62
|
+
let count = 0;
|
|
63
|
+
for (const [id, checkpoint] of this.checkpoints) {
|
|
64
|
+
if (checkpoint.metadata.threadId === threadId) {
|
|
65
|
+
this.checkpoints.delete(id);
|
|
66
|
+
count++;
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
return count;
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Serialize agent state to JSON-safe format.
|
|
73
|
+
* Strips non-serializable fields (abortSignal, tools Map).
|
|
74
|
+
*/
|
|
75
|
+
serializeState(state) {
|
|
76
|
+
return {
|
|
77
|
+
messages: state.messages.map(msg => ({
|
|
78
|
+
role: msg.role,
|
|
79
|
+
content: msg.content,
|
|
80
|
+
tool_calls: msg.tool_calls,
|
|
81
|
+
tool_call_id: msg.tool_call_id,
|
|
82
|
+
_meta: msg._meta,
|
|
83
|
+
})),
|
|
84
|
+
stepCount: state.stepCount,
|
|
85
|
+
maxSteps: state.maxSteps,
|
|
86
|
+
done: state.done,
|
|
87
|
+
output: state.output,
|
|
88
|
+
reasoning: state.reasoning,
|
|
89
|
+
finishReason: state.finishReason,
|
|
90
|
+
usage: state.usage,
|
|
91
|
+
};
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* Cleanup old checkpoints to stay under maxItems.
|
|
95
|
+
*/
|
|
96
|
+
async cleanup() {
|
|
97
|
+
if (this.checkpoints.size <= this.maxItems) {
|
|
98
|
+
return;
|
|
99
|
+
}
|
|
100
|
+
// Sort by creation time (oldest first)
|
|
101
|
+
const sorted = Array.from(this.checkpoints.entries())
|
|
102
|
+
.sort((a, b) => a[1].metadata.createdAt - b[1].metadata.createdAt);
|
|
103
|
+
// Delete oldest until under limit
|
|
104
|
+
const toDelete = sorted.slice(0, this.checkpoints.size - this.maxItems);
|
|
105
|
+
for (const [id] of toDelete) {
|
|
106
|
+
this.checkpoints.delete(id);
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
exports.MemoryCheckpointer = MemoryCheckpointer;
|
|
111
|
+
/**
|
|
112
|
+
* Deserialize checkpoint state back to AgentState.
|
|
113
|
+
* Note: Tools must be re-provided, abortSignal reset to undefined.
|
|
114
|
+
*/
|
|
115
|
+
function deserializeCheckpoint(checkpoint, tools) {
|
|
116
|
+
const s = checkpoint.state;
|
|
117
|
+
return {
|
|
118
|
+
messages: s.messages,
|
|
119
|
+
skills: [], // Skills reconstructed from messages with _meta
|
|
120
|
+
tools: tools ?? new Map(),
|
|
121
|
+
stepCount: s.stepCount,
|
|
122
|
+
maxSteps: s.maxSteps,
|
|
123
|
+
done: s.done,
|
|
124
|
+
output: s.output,
|
|
125
|
+
reasoning: s.reasoning,
|
|
126
|
+
finishReason: s.finishReason,
|
|
127
|
+
usage: s.usage,
|
|
128
|
+
abortSignal: undefined,
|
|
129
|
+
};
|
|
130
|
+
}
|
|
131
|
+
//# sourceMappingURL=checkpointer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"checkpointer.js","sourceRoot":"","sources":["../../../src/ai/graph/checkpointer.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Checkpointer - State persistence for Graph execution.
|
|
3
|
+
*
|
|
4
|
+
* Provides save/load capabilities for resumable agent sessions.
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* In-memory checkpointer implementation.
|
|
8
|
+
* Suitable for testing and short-lived sessions.
|
|
9
|
+
*/
|
|
10
|
+
export class MemoryCheckpointer {
|
|
11
|
+
constructor(options) {
|
|
12
|
+
this.checkpoints = new Map();
|
|
13
|
+
this.maxItems = options?.maxItems ?? 100;
|
|
14
|
+
}
|
|
15
|
+
async save(threadId, state, custom) {
|
|
16
|
+
const id = `ckpt_${threadId}_${Date.now()}_${Math.random().toString(36).slice(2, 8)}`;
|
|
17
|
+
const metadata = {
|
|
18
|
+
id,
|
|
19
|
+
threadId,
|
|
20
|
+
createdAt: Date.now(),
|
|
21
|
+
stepCount: state.stepCount,
|
|
22
|
+
custom,
|
|
23
|
+
};
|
|
24
|
+
const serialized = this.serializeState(state);
|
|
25
|
+
this.checkpoints.set(id, {
|
|
26
|
+
metadata,
|
|
27
|
+
state: serialized,
|
|
28
|
+
});
|
|
29
|
+
// Cleanup old checkpoints if over limit
|
|
30
|
+
await this.cleanup();
|
|
31
|
+
return metadata;
|
|
32
|
+
}
|
|
33
|
+
async load(threadId) {
|
|
34
|
+
// Find latest checkpoint for thread
|
|
35
|
+
let latest = null;
|
|
36
|
+
for (const checkpoint of this.checkpoints.values()) {
|
|
37
|
+
if (checkpoint.metadata.threadId === threadId) {
|
|
38
|
+
if (!latest || checkpoint.metadata.createdAt > latest.metadata.createdAt) {
|
|
39
|
+
latest = checkpoint;
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
return latest;
|
|
44
|
+
}
|
|
45
|
+
async list(threadId) {
|
|
46
|
+
const result = [];
|
|
47
|
+
for (const checkpoint of this.checkpoints.values()) {
|
|
48
|
+
if (checkpoint.metadata.threadId === threadId) {
|
|
49
|
+
result.push(checkpoint.metadata);
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
return result.sort((a, b) => b.createdAt - a.createdAt);
|
|
53
|
+
}
|
|
54
|
+
async delete(checkpointId) {
|
|
55
|
+
return this.checkpoints.delete(checkpointId);
|
|
56
|
+
}
|
|
57
|
+
async clear(threadId) {
|
|
58
|
+
let count = 0;
|
|
59
|
+
for (const [id, checkpoint] of this.checkpoints) {
|
|
60
|
+
if (checkpoint.metadata.threadId === threadId) {
|
|
61
|
+
this.checkpoints.delete(id);
|
|
62
|
+
count++;
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
return count;
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Serialize agent state to JSON-safe format.
|
|
69
|
+
* Strips non-serializable fields (abortSignal, tools Map).
|
|
70
|
+
*/
|
|
71
|
+
serializeState(state) {
|
|
72
|
+
return {
|
|
73
|
+
messages: state.messages.map(msg => ({
|
|
74
|
+
role: msg.role,
|
|
75
|
+
content: msg.content,
|
|
76
|
+
tool_calls: msg.tool_calls,
|
|
77
|
+
tool_call_id: msg.tool_call_id,
|
|
78
|
+
_meta: msg._meta,
|
|
79
|
+
})),
|
|
80
|
+
stepCount: state.stepCount,
|
|
81
|
+
maxSteps: state.maxSteps,
|
|
82
|
+
done: state.done,
|
|
83
|
+
output: state.output,
|
|
84
|
+
reasoning: state.reasoning,
|
|
85
|
+
finishReason: state.finishReason,
|
|
86
|
+
usage: state.usage,
|
|
87
|
+
};
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* Cleanup old checkpoints to stay under maxItems.
|
|
91
|
+
*/
|
|
92
|
+
async cleanup() {
|
|
93
|
+
if (this.checkpoints.size <= this.maxItems) {
|
|
94
|
+
return;
|
|
95
|
+
}
|
|
96
|
+
// Sort by creation time (oldest first)
|
|
97
|
+
const sorted = Array.from(this.checkpoints.entries())
|
|
98
|
+
.sort((a, b) => a[1].metadata.createdAt - b[1].metadata.createdAt);
|
|
99
|
+
// Delete oldest until under limit
|
|
100
|
+
const toDelete = sorted.slice(0, this.checkpoints.size - this.maxItems);
|
|
101
|
+
for (const [id] of toDelete) {
|
|
102
|
+
this.checkpoints.delete(id);
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* Deserialize checkpoint state back to AgentState.
|
|
108
|
+
* Note: Tools must be re-provided, abortSignal reset to undefined.
|
|
109
|
+
*/
|
|
110
|
+
export function deserializeCheckpoint(checkpoint, tools) {
|
|
111
|
+
const s = checkpoint.state;
|
|
112
|
+
return {
|
|
113
|
+
messages: s.messages,
|
|
114
|
+
skills: [], // Skills reconstructed from messages with _meta
|
|
115
|
+
tools: tools ?? new Map(),
|
|
116
|
+
stepCount: s.stepCount,
|
|
117
|
+
maxSteps: s.maxSteps,
|
|
118
|
+
done: s.done,
|
|
119
|
+
output: s.output,
|
|
120
|
+
reasoning: s.reasoning,
|
|
121
|
+
finishReason: s.finishReason,
|
|
122
|
+
usage: s.usage,
|
|
123
|
+
abortSignal: undefined,
|
|
124
|
+
};
|
|
125
|
+
}
|
|
126
|
+
//# sourceMappingURL=checkpointer.js.map
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Graph Runtime public exports.
|
|
3
|
+
*/
|
|
4
|
+
export { StateGraph, MaxGraphStepsError } from './state-graph';
|
|
5
|
+
export { END } from './types';
|
|
6
|
+
export type { NodeFunction, EdgeResolver, GraphNode, GraphEdge, CompiledGraph, InvokeOptions, StateGraphConfig, } from './types';
|
|
7
|
+
export { MemoryCheckpointer, deserializeCheckpoint, } from './checkpointer';
|
|
8
|
+
export type { Checkpointer, Checkpoint, CheckpointMetadata, SerializedAgentState, } from './checkpointer';
|
|
9
|
+
export { RedisCheckpointer } from './redis-checkpointer';
|
|
10
|
+
export type { RedisClient, RedisCheckpointerConfig } from './redis-checkpointer';
|
|
11
|
+
export { PostgresCheckpointer } from './postgres-checkpointer';
|
|
12
|
+
export type { PostgresClient, PostgresCheckpointerConfig } from './postgres-checkpointer';
|
|
13
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/ai/graph/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,UAAU,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAC/D,OAAO,EAAE,GAAG,EAAE,MAAM,SAAS,CAAC;AAC9B,YAAY,EACR,YAAY,EACZ,YAAY,EACZ,SAAS,EACT,SAAS,EACT,aAAa,EACb,aAAa,EACb,gBAAgB,GACnB,MAAM,SAAS,CAAC;AAGjB,OAAO,EACH,kBAAkB,EAClB,qBAAqB,GACxB,MAAM,gBAAgB,CAAC;AACxB,YAAY,EACR,YAAY,EACZ,UAAU,EACV,kBAAkB,EAClB,oBAAoB,GACvB,MAAM,gBAAgB,CAAC;AAGxB,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AACzD,YAAY,EAAE,WAAW,EAAE,uBAAuB,EAAE,MAAM,sBAAsB,CAAC;AAGjF,OAAO,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AAC/D,YAAY,EAAE,cAAc,EAAE,0BAA0B,EAAE,MAAM,yBAAyB,CAAC"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Graph Runtime public exports.
|
|
4
|
+
*/
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.PostgresCheckpointer = exports.RedisCheckpointer = exports.deserializeCheckpoint = exports.MemoryCheckpointer = exports.END = exports.MaxGraphStepsError = exports.StateGraph = void 0;
|
|
7
|
+
var state_graph_1 = require("./state-graph");
|
|
8
|
+
Object.defineProperty(exports, "StateGraph", { enumerable: true, get: function () { return state_graph_1.StateGraph; } });
|
|
9
|
+
Object.defineProperty(exports, "MaxGraphStepsError", { enumerable: true, get: function () { return state_graph_1.MaxGraphStepsError; } });
|
|
10
|
+
var types_1 = require("./types");
|
|
11
|
+
Object.defineProperty(exports, "END", { enumerable: true, get: function () { return types_1.END; } });
|
|
12
|
+
// Checkpointers
|
|
13
|
+
var checkpointer_1 = require("./checkpointer");
|
|
14
|
+
Object.defineProperty(exports, "MemoryCheckpointer", { enumerable: true, get: function () { return checkpointer_1.MemoryCheckpointer; } });
|
|
15
|
+
Object.defineProperty(exports, "deserializeCheckpoint", { enumerable: true, get: function () { return checkpointer_1.deserializeCheckpoint; } });
|
|
16
|
+
// Redis Checkpointer (optional - requires ioredis)
|
|
17
|
+
var redis_checkpointer_1 = require("./redis-checkpointer");
|
|
18
|
+
Object.defineProperty(exports, "RedisCheckpointer", { enumerable: true, get: function () { return redis_checkpointer_1.RedisCheckpointer; } });
|
|
19
|
+
// Postgres Checkpointer (optional - requires pg)
|
|
20
|
+
var postgres_checkpointer_1 = require("./postgres-checkpointer");
|
|
21
|
+
Object.defineProperty(exports, "PostgresCheckpointer", { enumerable: true, get: function () { return postgres_checkpointer_1.PostgresCheckpointer; } });
|
|
22
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/ai/graph/index.ts"],"names":[],"mappings":";AAAA;;GAEG;;;AAEH,6CAA+D;AAAtD,yGAAA,UAAU,OAAA;AAAE,iHAAA,kBAAkB,OAAA;AACvC,iCAA8B;AAArB,4FAAA,GAAG,OAAA;AAWZ,gBAAgB;AAChB,+CAGwB;AAFpB,kHAAA,kBAAkB,OAAA;AAClB,qHAAA,qBAAqB,OAAA;AASzB,mDAAmD;AACnD,2DAAyD;AAAhD,uHAAA,iBAAiB,OAAA;AAG1B,iDAAiD;AACjD,iEAA+D;AAAtD,6HAAA,oBAAoB,OAAA"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Graph Runtime public exports.
|
|
3
|
+
*/
|
|
4
|
+
export { StateGraph, MaxGraphStepsError } from './state-graph.mjs';
|
|
5
|
+
export { END } from './types.mjs';
|
|
6
|
+
// Checkpointers
|
|
7
|
+
export { MemoryCheckpointer, deserializeCheckpoint, } from './checkpointer.mjs';
|
|
8
|
+
// Redis Checkpointer (optional - requires ioredis)
|
|
9
|
+
export { RedisCheckpointer } from './redis-checkpointer.mjs';
|
|
10
|
+
// Postgres Checkpointer (optional - requires pg)
|
|
11
|
+
export { PostgresCheckpointer } from './postgres-checkpointer.mjs';
|
|
12
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* PostgreSQL Checkpointer implementation.
|
|
3
|
+
* Requires pg as a peer dependency.
|
|
4
|
+
*
|
|
5
|
+
* @example
|
|
6
|
+
* ```typescript
|
|
7
|
+
* import { Pool } from 'pg';
|
|
8
|
+
* import { PostgresCheckpointer } from '@bowenqt/qiniu-ai-sdk';
|
|
9
|
+
*
|
|
10
|
+
* const pool = new Pool({ connectionString: process.env.DATABASE_URL });
|
|
11
|
+
* const checkpointer = new PostgresCheckpointer(pool, { tableName: 'checkpoints' });
|
|
12
|
+
*
|
|
13
|
+
* // Create table (run once)
|
|
14
|
+
* await checkpointer.createTable();
|
|
15
|
+
* ```
|
|
16
|
+
*/
|
|
17
|
+
import type { AgentState } from '../internal-types';
|
|
18
|
+
import type { Checkpoint, CheckpointMetadata, Checkpointer } from './checkpointer';
|
|
19
|
+
/** Postgres client interface (compatible with pg Pool) */
|
|
20
|
+
export interface PostgresClient {
|
|
21
|
+
query<T = unknown>(text: string, values?: unknown[]): Promise<{
|
|
22
|
+
rows: T[];
|
|
23
|
+
}>;
|
|
24
|
+
}
|
|
25
|
+
/** Postgres checkpointer configuration */
|
|
26
|
+
export interface PostgresCheckpointerConfig {
|
|
27
|
+
/** Table name (default: 'qiniu_checkpoints') */
|
|
28
|
+
tableName?: string;
|
|
29
|
+
/** Schema name (default: 'public') */
|
|
30
|
+
schema?: string;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* PostgreSQL-based checkpointer.
|
|
34
|
+
* Uses pg-compatible client interface.
|
|
35
|
+
*/
|
|
36
|
+
export declare class PostgresCheckpointer implements Checkpointer {
|
|
37
|
+
private readonly client;
|
|
38
|
+
private readonly tableName;
|
|
39
|
+
private readonly schema;
|
|
40
|
+
constructor(client: PostgresClient, config?: PostgresCheckpointerConfig);
|
|
41
|
+
private get table();
|
|
42
|
+
/**
|
|
43
|
+
* Create the checkpoints table if it doesn't exist.
|
|
44
|
+
* Run this during application setup.
|
|
45
|
+
*/
|
|
46
|
+
createTable(): Promise<void>;
|
|
47
|
+
save(threadId: string, state: AgentState, custom?: Record<string, unknown>): Promise<CheckpointMetadata>;
|
|
48
|
+
load(threadId: string): Promise<Checkpoint | null>;
|
|
49
|
+
list(threadId: string): Promise<CheckpointMetadata[]>;
|
|
50
|
+
delete(checkpointId: string): Promise<boolean>;
|
|
51
|
+
clear(threadId: string): Promise<number>;
|
|
52
|
+
private serializeState;
|
|
53
|
+
}
|
|
54
|
+
//# sourceMappingURL=postgres-checkpointer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"postgres-checkpointer.d.ts","sourceRoot":"","sources":["../../../src/ai/graph/postgres-checkpointer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,KAAK,EAAE,UAAU,EAAE,kBAAkB,EAAE,YAAY,EAAwB,MAAM,gBAAgB,CAAC;AAEzG,0DAA0D;AAC1D,MAAM,WAAW,cAAc;IAC3B,KAAK,CAAC,CAAC,GAAG,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC;QAAE,IAAI,EAAE,CAAC,EAAE,CAAA;KAAE,CAAC,CAAC;CAChF;AAED,0CAA0C;AAC1C,MAAM,WAAW,0BAA0B;IACvC,gDAAgD;IAChD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,sCAAsC;IACtC,MAAM,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;;GAGG;AACH,qBAAa,oBAAqB,YAAW,YAAY;IACrD,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAiB;IACxC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IACnC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;gBAEpB,MAAM,EAAE,cAAc,EAAE,MAAM,GAAE,0BAA+B;IAM3E,OAAO,KAAK,KAAK,GAEhB;IAED;;;OAGG;IACG,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC;IAwB5B,IAAI,CACN,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,UAAU,EACjB,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GACjC,OAAO,CAAC,kBAAkB,CAAC;IAuBxB,IAAI,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC;IAkClD,IAAI,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,EAAE,CAAC;IA0BrD,MAAM,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAQ9C,KAAK,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAQ9C,OAAO,CAAC,cAAc;CAkBzB"}
|