@bowenqt/qiniu-ai-sdk 0.13.0 → 0.15.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/ai/agent-graph.d.ts +5 -0
- package/dist/ai/agent-graph.d.ts.map +1 -1
- package/dist/ai/agent-graph.js +3 -1
- package/dist/ai/agent-graph.js.map +1 -1
- package/dist/ai/agent-graph.mjs +3 -1
- package/dist/ai/create-agent.d.ts +98 -0
- package/dist/ai/create-agent.d.ts.map +1 -0
- package/dist/ai/create-agent.js +87 -0
- package/dist/ai/create-agent.js.map +1 -0
- package/dist/ai/create-agent.mjs +84 -0
- package/dist/ai/generate-object.d.ts +99 -0
- package/dist/ai/generate-object.d.ts.map +1 -0
- package/dist/ai/generate-object.js +231 -0
- package/dist/ai/generate-object.js.map +1 -0
- package/dist/ai/generate-object.mjs +195 -0
- package/dist/ai/generate-text.d.ts +16 -0
- package/dist/ai/generate-text.d.ts.map +1 -1
- package/dist/ai/generate-text.js +53 -6
- package/dist/ai/generate-text.js.map +1 -1
- package/dist/ai/generate-text.mjs +53 -6
- package/dist/ai/graph/checkpointer.d.ts +72 -2
- package/dist/ai/graph/checkpointer.d.ts.map +1 -1
- package/dist/ai/graph/checkpointer.js +99 -1
- package/dist/ai/graph/checkpointer.js.map +1 -1
- package/dist/ai/graph/checkpointer.mjs +96 -1
- package/dist/ai/graph/index.d.ts +2 -2
- package/dist/ai/graph/index.d.ts.map +1 -1
- package/dist/ai/graph/index.js +5 -1
- package/dist/ai/graph/index.js.map +1 -1
- package/dist/ai/graph/index.mjs +3 -1
- package/dist/ai/graph/postgres-checkpointer.d.ts +1 -1
- package/dist/ai/graph/postgres-checkpointer.d.ts.map +1 -1
- package/dist/ai/graph/postgres-checkpointer.js +13 -3
- package/dist/ai/graph/postgres-checkpointer.js.map +1 -1
- package/dist/ai/graph/postgres-checkpointer.mjs +13 -3
- package/dist/ai/graph/redis-checkpointer.d.ts +1 -1
- package/dist/ai/graph/redis-checkpointer.d.ts.map +1 -1
- package/dist/ai/graph/redis-checkpointer.js +6 -2
- package/dist/ai/graph/redis-checkpointer.js.map +1 -1
- package/dist/ai/graph/redis-checkpointer.mjs +6 -2
- package/dist/ai/internal-types.d.ts +3 -0
- package/dist/ai/internal-types.d.ts.map +1 -1
- package/dist/ai/internal-types.js.map +1 -1
- package/dist/ai/nodes/execute-node.d.ts +2 -1
- package/dist/ai/nodes/execute-node.d.ts.map +1 -1
- package/dist/ai/nodes/execute-node.js +11 -33
- package/dist/ai/nodes/execute-node.js.map +1 -1
- package/dist/ai/nodes/execute-node.mjs +11 -33
- package/dist/ai/tool-approval.d.ts +90 -0
- package/dist/ai/tool-approval.d.ts.map +1 -0
- package/dist/ai/tool-approval.js +151 -0
- package/dist/ai/tool-approval.js.map +1 -0
- package/dist/ai/tool-approval.mjs +147 -0
- package/dist/index.d.ts +9 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +14 -3
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +9 -3
- package/dist/lib/errors.d.ts +15 -0
- package/dist/lib/errors.d.ts.map +1 -1
- package/dist/lib/errors.js +13 -1
- package/dist/lib/errors.js.map +1 -1
- package/dist/lib/errors.mjs +11 -0
- package/dist/lib/tool-registry.d.ts +21 -0
- package/dist/lib/tool-registry.d.ts.map +1 -1
- package/dist/lib/tool-registry.js.map +1 -1
- package/package.json +1 -1
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { MaxStepsExceededError, ToolExecutionError } from '../lib/errors.mjs';
|
|
2
|
+
import { checkApproval } from './tool-approval.mjs';
|
|
2
3
|
export async function generateText(options) {
|
|
3
|
-
const { client, model, tools, maxSteps = 1, onStepFinish, abortSignal, temperature, topP, maxTokens, responseFormat, toolChoice, } = options;
|
|
4
|
+
const { client, model, tools, maxSteps = 1, onStepFinish, abortSignal, temperature, topP, maxTokens, responseFormat, toolChoice, approvalConfig, } = options;
|
|
4
5
|
const messages = normalizeMessages(options);
|
|
5
6
|
const steps = [];
|
|
6
7
|
let lastNonToolText = ''; // Only capture text from non-tool-call steps
|
|
@@ -57,7 +58,7 @@ export async function generateText(options) {
|
|
|
57
58
|
toolCalls: [toolCall],
|
|
58
59
|
}));
|
|
59
60
|
steps.push(...toolCallSteps);
|
|
60
|
-
const toolResults = await executeTools(streamResult.toolCalls, tools, messages, abortSignal);
|
|
61
|
+
const toolResults = await executeTools(streamResult.toolCalls, tools, messages, abortSignal, approvalConfig);
|
|
61
62
|
const toolResultSteps = toolResults.map((toolResult) => ({
|
|
62
63
|
type: 'tool_result',
|
|
63
64
|
content: toolResult.result,
|
|
@@ -273,7 +274,7 @@ function toolResultsToMessages(toolCalls, results) {
|
|
|
273
274
|
};
|
|
274
275
|
});
|
|
275
276
|
}
|
|
276
|
-
async function executeTools(toolCalls, tools, messages, abortSignal) {
|
|
277
|
+
async function executeTools(toolCalls, tools, messages, abortSignal, approvalConfig) {
|
|
277
278
|
const results = [];
|
|
278
279
|
for (const toolCall of toolCalls) {
|
|
279
280
|
const tool = tools[toolCall.function.name];
|
|
@@ -281,6 +282,26 @@ async function executeTools(toolCalls, tools, messages, abortSignal) {
|
|
|
281
282
|
throw new ToolExecutionError(toolCall.function.name, 'Tool is not implemented.');
|
|
282
283
|
}
|
|
283
284
|
const args = parseToolArguments(toolCall.function.arguments);
|
|
285
|
+
// Check approval if tool requires it
|
|
286
|
+
if (tool.requiresApproval) {
|
|
287
|
+
// Create a minimal RegisteredTool-compatible object for checkApproval
|
|
288
|
+
const toolForApproval = {
|
|
289
|
+
name: toolCall.function.name,
|
|
290
|
+
description: tool.description ?? '',
|
|
291
|
+
parameters: (tool.parameters ?? {}),
|
|
292
|
+
source: { type: 'builtin', namespace: 'user' },
|
|
293
|
+
requiresApproval: tool.requiresApproval,
|
|
294
|
+
approvalHandler: tool.approvalHandler,
|
|
295
|
+
};
|
|
296
|
+
const approvalResult = await checkApproval(toolForApproval, toolCall, args, messages, approvalConfig);
|
|
297
|
+
if (!approvalResult.approved) {
|
|
298
|
+
results.push({
|
|
299
|
+
toolCallId: toolCall.id,
|
|
300
|
+
result: approvalResult.rejectionMessage ?? '[Approval Rejected] Tool execution was denied.',
|
|
301
|
+
});
|
|
302
|
+
continue;
|
|
303
|
+
}
|
|
304
|
+
}
|
|
284
305
|
const value = await tool.execute(args, {
|
|
285
306
|
toolCallId: toolCall.id,
|
|
286
307
|
messages,
|
|
@@ -329,9 +350,30 @@ import { AgentGraph } from './agent-graph.mjs';
|
|
|
329
350
|
* ```
|
|
330
351
|
*/
|
|
331
352
|
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
|
-
//
|
|
334
|
-
|
|
353
|
+
const { client, model, tools, skills, maxSteps = 10, maxContextTokens, onStepFinish, onNodeEnter, onNodeExit, abortSignal, temperature, topP, maxTokens, responseFormat, toolChoice, checkpointer, threadId, resumeFromCheckpoint = true, } = options;
|
|
354
|
+
// Validate checkpointer + threadId combination
|
|
355
|
+
if (checkpointer && !threadId) {
|
|
356
|
+
throw new Error('threadId is required when checkpointer is provided');
|
|
357
|
+
}
|
|
358
|
+
// Try to resume from checkpoint if available
|
|
359
|
+
let resumedMessages = null;
|
|
360
|
+
if (checkpointer && threadId && resumeFromCheckpoint) {
|
|
361
|
+
const checkpoint = await checkpointer.load(threadId);
|
|
362
|
+
if (checkpoint) {
|
|
363
|
+
// Extract historical messages and append new input
|
|
364
|
+
const historicalMessages = checkpoint.state.messages;
|
|
365
|
+
const newMessages = normalizeMessages(options);
|
|
366
|
+
// Only append new messages if there are any (avoid duplicating history)
|
|
367
|
+
if (newMessages.length > 0) {
|
|
368
|
+
resumedMessages = [...historicalMessages, ...newMessages];
|
|
369
|
+
}
|
|
370
|
+
else {
|
|
371
|
+
resumedMessages = historicalMessages;
|
|
372
|
+
}
|
|
373
|
+
}
|
|
374
|
+
}
|
|
375
|
+
// Normalize messages - use resumed messages if available, otherwise input
|
|
376
|
+
const messages = resumedMessages ?? normalizeMessages(options);
|
|
335
377
|
// Track current messages for tool context (will be updated during execution)
|
|
336
378
|
let currentMessages = [...messages];
|
|
337
379
|
// Convert tools to RegisteredTool format
|
|
@@ -409,9 +451,14 @@ export async function generateTextWithGraph(options) {
|
|
|
409
451
|
},
|
|
410
452
|
onNodeExit: onNodeExit,
|
|
411
453
|
},
|
|
454
|
+
approvalConfig: options.approvalConfig,
|
|
412
455
|
});
|
|
413
456
|
// Execute graph
|
|
414
457
|
const graphResult = await graph.invoke(messages);
|
|
458
|
+
// Save checkpoint if checkpointer provided
|
|
459
|
+
if (checkpointer && threadId) {
|
|
460
|
+
await checkpointer.save(threadId, graphResult.state);
|
|
461
|
+
}
|
|
415
462
|
// Build result
|
|
416
463
|
return {
|
|
417
464
|
text: graphResult.text,
|
|
@@ -4,6 +4,29 @@
|
|
|
4
4
|
* Provides save/load capabilities for resumable agent sessions.
|
|
5
5
|
*/
|
|
6
6
|
import type { AgentState } from '../internal-types';
|
|
7
|
+
/**
|
|
8
|
+
* Checkpoint status.
|
|
9
|
+
*/
|
|
10
|
+
export type CheckpointStatus = 'active' | 'pending_approval' | 'completed';
|
|
11
|
+
/**
|
|
12
|
+
* Pending approval information.
|
|
13
|
+
*/
|
|
14
|
+
export interface PendingApproval {
|
|
15
|
+
/** Tool call awaiting approval */
|
|
16
|
+
toolCall: {
|
|
17
|
+
id: string;
|
|
18
|
+
function: {
|
|
19
|
+
name: string;
|
|
20
|
+
arguments: string;
|
|
21
|
+
};
|
|
22
|
+
};
|
|
23
|
+
/** Tool name */
|
|
24
|
+
toolName: string;
|
|
25
|
+
/** Parsed arguments */
|
|
26
|
+
args: Record<string, unknown>;
|
|
27
|
+
/** Timestamp when approval was requested */
|
|
28
|
+
requestedAt: number;
|
|
29
|
+
}
|
|
7
30
|
/**
|
|
8
31
|
* Checkpoint metadata.
|
|
9
32
|
*/
|
|
@@ -16,6 +39,10 @@ export interface CheckpointMetadata {
|
|
|
16
39
|
createdAt: number;
|
|
17
40
|
/** Step count at checkpoint */
|
|
18
41
|
stepCount: number;
|
|
42
|
+
/** Checkpoint status */
|
|
43
|
+
status?: CheckpointStatus;
|
|
44
|
+
/** Pending approval info (if status is 'pending_approval') */
|
|
45
|
+
pendingApproval?: PendingApproval;
|
|
19
46
|
/** Optional user-provided metadata */
|
|
20
47
|
custom?: Record<string, unknown>;
|
|
21
48
|
}
|
|
@@ -54,6 +81,15 @@ export interface SerializedAgentState {
|
|
|
54
81
|
total_tokens: number;
|
|
55
82
|
};
|
|
56
83
|
}
|
|
84
|
+
/** Options for saving a checkpoint */
|
|
85
|
+
export interface CheckpointSaveOptions {
|
|
86
|
+
/** Custom user metadata */
|
|
87
|
+
custom?: Record<string, unknown>;
|
|
88
|
+
/** Checkpoint status (default: 'active') */
|
|
89
|
+
status?: CheckpointStatus;
|
|
90
|
+
/** Pending approval info for async approval flow */
|
|
91
|
+
pendingApproval?: PendingApproval;
|
|
92
|
+
}
|
|
57
93
|
/**
|
|
58
94
|
* Checkpointer interface.
|
|
59
95
|
*/
|
|
@@ -61,7 +97,7 @@ export interface Checkpointer {
|
|
|
61
97
|
/**
|
|
62
98
|
* Save a checkpoint.
|
|
63
99
|
*/
|
|
64
|
-
save(threadId: string, state: AgentState,
|
|
100
|
+
save(threadId: string, state: AgentState, options?: CheckpointSaveOptions | Record<string, unknown>): Promise<CheckpointMetadata>;
|
|
65
101
|
/**
|
|
66
102
|
* Load the latest checkpoint for a thread.
|
|
67
103
|
*/
|
|
@@ -89,7 +125,7 @@ export declare class MemoryCheckpointer implements Checkpointer {
|
|
|
89
125
|
constructor(options?: {
|
|
90
126
|
maxItems?: number;
|
|
91
127
|
});
|
|
92
|
-
save(threadId: string, state: AgentState,
|
|
128
|
+
save(threadId: string, state: AgentState, options?: CheckpointSaveOptions | Record<string, unknown>): Promise<CheckpointMetadata>;
|
|
93
129
|
load(threadId: string): Promise<Checkpoint | null>;
|
|
94
130
|
list(threadId: string): Promise<CheckpointMetadata[]>;
|
|
95
131
|
delete(checkpointId: string): Promise<boolean>;
|
|
@@ -109,4 +145,38 @@ export declare class MemoryCheckpointer implements Checkpointer {
|
|
|
109
145
|
* Note: Tools must be re-provided, abortSignal reset to undefined.
|
|
110
146
|
*/
|
|
111
147
|
export declare function deserializeCheckpoint(checkpoint: Checkpoint, tools?: Map<string, any>): AgentState;
|
|
148
|
+
/**
|
|
149
|
+
* Check if a checkpoint is pending approval.
|
|
150
|
+
*/
|
|
151
|
+
export declare function isPendingApproval(checkpoint: Checkpoint): boolean;
|
|
152
|
+
/**
|
|
153
|
+
* Get pending approval info from checkpoint.
|
|
154
|
+
*/
|
|
155
|
+
export declare function getPendingApproval(checkpoint: Checkpoint): PendingApproval | null;
|
|
156
|
+
/** Result of resuming with approval */
|
|
157
|
+
export interface ResumeWithApprovalResult {
|
|
158
|
+
/** Whether approval was granted */
|
|
159
|
+
approved: boolean;
|
|
160
|
+
/** Updated state with tool result added */
|
|
161
|
+
state: AgentState;
|
|
162
|
+
/** Tool result (executed result or rejection message) */
|
|
163
|
+
toolResult: string;
|
|
164
|
+
/** Whether the tool was actually executed */
|
|
165
|
+
toolExecuted: boolean;
|
|
166
|
+
}
|
|
167
|
+
/** Tool executor function */
|
|
168
|
+
export type ToolExecutor = (toolName: string, args: Record<string, unknown>, abortSignal?: AbortSignal) => Promise<unknown>;
|
|
169
|
+
/**
|
|
170
|
+
* Resume a pending approval checkpoint with user's decision.
|
|
171
|
+
*
|
|
172
|
+
* If approved and toolExecutor is provided, the tool will be executed.
|
|
173
|
+
* Otherwise, a synthetic approval result will be used.
|
|
174
|
+
*
|
|
175
|
+
* @param checkpoint - The pending approval checkpoint
|
|
176
|
+
* @param approved - Whether the user approved
|
|
177
|
+
* @param toolExecutor - Optional function to execute the approved tool
|
|
178
|
+
* @param tools - Tool map for state deserialization
|
|
179
|
+
* @param abortSignal - Abort signal for tool execution
|
|
180
|
+
*/
|
|
181
|
+
export declare function resumeWithApproval(checkpoint: Checkpoint, approved: boolean, toolExecutor?: ToolExecutor, tools?: Map<string, any>, abortSignal?: AbortSignal): Promise<ResumeWithApprovalResult>;
|
|
112
182
|
//# sourceMappingURL=checkpointer.d.ts.map
|
|
@@ -1 +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,
|
|
1
|
+
{"version":3,"file":"checkpointer.d.ts","sourceRoot":"","sources":["../../../src/ai/graph/checkpointer.ts"],"names":[],"mappings":"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"}
|
|
@@ -7,6 +7,9 @@
|
|
|
7
7
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
8
8
|
exports.MemoryCheckpointer = void 0;
|
|
9
9
|
exports.deserializeCheckpoint = deserializeCheckpoint;
|
|
10
|
+
exports.isPendingApproval = isPendingApproval;
|
|
11
|
+
exports.getPendingApproval = getPendingApproval;
|
|
12
|
+
exports.resumeWithApproval = resumeWithApproval;
|
|
10
13
|
/**
|
|
11
14
|
* In-memory checkpointer implementation.
|
|
12
15
|
* Suitable for testing and short-lived sessions.
|
|
@@ -16,13 +19,32 @@ class MemoryCheckpointer {
|
|
|
16
19
|
this.checkpoints = new Map();
|
|
17
20
|
this.maxItems = options?.maxItems ?? 100;
|
|
18
21
|
}
|
|
19
|
-
async save(threadId, state,
|
|
22
|
+
async save(threadId, state, options) {
|
|
20
23
|
const id = `ckpt_${threadId}_${Date.now()}_${Math.random().toString(36).slice(2, 8)}`;
|
|
24
|
+
// Extract options - handle both new CheckpointSaveOptions and legacy custom object
|
|
25
|
+
let status = 'active';
|
|
26
|
+
let pendingApproval;
|
|
27
|
+
let custom;
|
|
28
|
+
if (options) {
|
|
29
|
+
if ('status' in options || 'pendingApproval' in options || 'custom' in options) {
|
|
30
|
+
// New CheckpointSaveOptions format
|
|
31
|
+
const opts = options;
|
|
32
|
+
status = opts.status ?? 'active';
|
|
33
|
+
pendingApproval = opts.pendingApproval;
|
|
34
|
+
custom = opts.custom;
|
|
35
|
+
}
|
|
36
|
+
else {
|
|
37
|
+
// Legacy: treat entire object as custom metadata
|
|
38
|
+
custom = options;
|
|
39
|
+
}
|
|
40
|
+
}
|
|
21
41
|
const metadata = {
|
|
22
42
|
id,
|
|
23
43
|
threadId,
|
|
24
44
|
createdAt: Date.now(),
|
|
25
45
|
stepCount: state.stepCount,
|
|
46
|
+
status,
|
|
47
|
+
pendingApproval,
|
|
26
48
|
custom,
|
|
27
49
|
};
|
|
28
50
|
const serialized = this.serializeState(state);
|
|
@@ -128,4 +150,80 @@ function deserializeCheckpoint(checkpoint, tools) {
|
|
|
128
150
|
abortSignal: undefined,
|
|
129
151
|
};
|
|
130
152
|
}
|
|
153
|
+
/**
|
|
154
|
+
* Check if a checkpoint is pending approval.
|
|
155
|
+
*/
|
|
156
|
+
function isPendingApproval(checkpoint) {
|
|
157
|
+
return checkpoint.metadata.status === 'pending_approval' &&
|
|
158
|
+
checkpoint.metadata.pendingApproval != null;
|
|
159
|
+
}
|
|
160
|
+
/**
|
|
161
|
+
* Get pending approval info from checkpoint.
|
|
162
|
+
*/
|
|
163
|
+
function getPendingApproval(checkpoint) {
|
|
164
|
+
if (!isPendingApproval(checkpoint)) {
|
|
165
|
+
return null;
|
|
166
|
+
}
|
|
167
|
+
return checkpoint.metadata.pendingApproval ?? null;
|
|
168
|
+
}
|
|
169
|
+
/**
|
|
170
|
+
* Resume a pending approval checkpoint with user's decision.
|
|
171
|
+
*
|
|
172
|
+
* If approved and toolExecutor is provided, the tool will be executed.
|
|
173
|
+
* Otherwise, a synthetic approval result will be used.
|
|
174
|
+
*
|
|
175
|
+
* @param checkpoint - The pending approval checkpoint
|
|
176
|
+
* @param approved - Whether the user approved
|
|
177
|
+
* @param toolExecutor - Optional function to execute the approved tool
|
|
178
|
+
* @param tools - Tool map for state deserialization
|
|
179
|
+
* @param abortSignal - Abort signal for tool execution
|
|
180
|
+
*/
|
|
181
|
+
async function resumeWithApproval(checkpoint, approved, toolExecutor, tools, abortSignal) {
|
|
182
|
+
const pending = checkpoint.metadata.pendingApproval;
|
|
183
|
+
if (!pending) {
|
|
184
|
+
throw new Error('Checkpoint does not have pending approval');
|
|
185
|
+
}
|
|
186
|
+
// Deserialize state
|
|
187
|
+
const state = deserializeCheckpoint(checkpoint, tools);
|
|
188
|
+
let toolResult;
|
|
189
|
+
let toolExecuted = false;
|
|
190
|
+
if (approved) {
|
|
191
|
+
if (toolExecutor) {
|
|
192
|
+
// Execute the actual tool
|
|
193
|
+
try {
|
|
194
|
+
const result = await toolExecutor(pending.toolName, pending.args, abortSignal);
|
|
195
|
+
toolResult = typeof result === 'string' ? result : JSON.stringify(result ?? { success: true });
|
|
196
|
+
toolExecuted = true;
|
|
197
|
+
}
|
|
198
|
+
catch (error) {
|
|
199
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
200
|
+
toolResult = `[Execution Error] ${errorMessage}`;
|
|
201
|
+
toolExecuted = true; // Attempted execution
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
else {
|
|
205
|
+
// No executor provided - return synthetic success
|
|
206
|
+
toolResult = JSON.stringify({ approved: true, args: pending.args });
|
|
207
|
+
toolExecuted = false;
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
else {
|
|
211
|
+
// Rejected
|
|
212
|
+
toolResult = '[Approval Rejected] Tool execution was denied by user.';
|
|
213
|
+
toolExecuted = false;
|
|
214
|
+
}
|
|
215
|
+
// Add tool result message to state
|
|
216
|
+
const toolResultMessage = {
|
|
217
|
+
role: 'tool',
|
|
218
|
+
content: toolResult,
|
|
219
|
+
tool_call_id: pending.toolCall.id,
|
|
220
|
+
};
|
|
221
|
+
state.messages = [...state.messages, toolResultMessage];
|
|
222
|
+
return {
|
|
223
|
+
approved,
|
|
224
|
+
state,
|
|
225
|
+
toolResult,
|
|
226
|
+
toolExecuted,
|
|
227
|
+
};
|
|
228
|
+
}
|
|
131
229
|
//# sourceMappingURL=checkpointer.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"checkpointer.js","sourceRoot":"","sources":["../../../src/ai/graph/checkpointer.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;;
|
|
1
|
+
{"version":3,"file":"checkpointer.js","sourceRoot":"","sources":["../../../src/ai/graph/checkpointer.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;;AAyRH,sDAmBC;AAKD,8CAGC;AAKD,gDAKC;AAiCD,gDAyDC;AAtRD;;;GAGG;AACH,MAAa,kBAAkB;IAI3B,YAAY,OAA+B;QAH1B,gBAAW,GAAG,IAAI,GAAG,EAAsB,CAAC;QAIzD,IAAI,CAAC,QAAQ,GAAG,OAAO,EAAE,QAAQ,IAAI,GAAG,CAAC;IAC7C,CAAC;IAED,KAAK,CAAC,IAAI,CACN,QAAgB,EAChB,KAAiB,EACjB,OAAyD;QAEzD,MAAM,EAAE,GAAG,QAAQ,QAAQ,IAAI,IAAI,CAAC,GAAG,EAAE,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;QAEtF,mFAAmF;QACnF,IAAI,MAAM,GAAqB,QAAQ,CAAC;QACxC,IAAI,eAA4C,CAAC;QACjD,IAAI,MAA2C,CAAC;QAEhD,IAAI,OAAO,EAAE,CAAC;YACV,IAAI,QAAQ,IAAI,OAAO,IAAI,iBAAiB,IAAI,OAAO,IAAI,QAAQ,IAAI,OAAO,EAAE,CAAC;gBAC7E,mCAAmC;gBACnC,MAAM,IAAI,GAAG,OAAgC,CAAC;gBAC9C,MAAM,GAAG,IAAI,CAAC,MAAM,IAAI,QAAQ,CAAC;gBACjC,eAAe,GAAG,IAAI,CAAC,eAAe,CAAC;gBACvC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;YACzB,CAAC;iBAAM,CAAC;gBACJ,iDAAiD;gBACjD,MAAM,GAAG,OAAkC,CAAC;YAChD,CAAC;QACL,CAAC;QAED,MAAM,QAAQ,GAAuB;YACjC,EAAE;YACF,QAAQ;YACR,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;YACrB,SAAS,EAAE,KAAK,CAAC,SAAS;YAC1B,MAAM;YACN,eAAe;YACf,MAAM;SACT,CAAC;QAEF,MAAM,UAAU,GAAG,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;QAE9C,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE,EAAE;YACrB,QAAQ;YACR,KAAK,EAAE,UAAU;SACpB,CAAC,CAAC;QAEH,wCAAwC;QACxC,MAAM,IAAI,CAAC,OAAO,EAAE,CAAC;QAErB,OAAO,QAAQ,CAAC;IACpB,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,QAAgB;QACvB,oCAAoC;QACpC,IAAI,MAAM,GAAsB,IAAI,CAAC;QAErC,KAAK,MAAM,UAAU,IAAI,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,EAAE,CAAC;YACjD,IAAI,UAAU,CAAC,QAAQ,CAAC,QAAQ,KAAK,QAAQ,EAAE,CAAC;gBAC5C,IAAI,CAAC,MAAM,IAAI,UAAU,CAAC,QAAQ,CAAC,SAAS,GAAG,MAAM,CAAC,QAAQ,CAAC,SAAS,EAAE,CAAC;oBACvE,MAAM,GAAG,UAAU,CAAC;gBACxB,CAAC;YACL,CAAC;QACL,CAAC;QAED,OAAO,MAAM,CAAC;IAClB,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,QAAgB;QACvB,MAAM,MAAM,GAAyB,EAAE,CAAC;QAExC,KAAK,MAAM,UAAU,IAAI,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,EAAE,CAAC;YACjD,IAAI,UAAU,CAAC,QAAQ,CAAC,QAAQ,KAAK,QAAQ,EAAE,CAAC;gBAC5C,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;YACrC,CAAC;QACL,CAAC;QAED,OAAO,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC;IAC5D,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,YAAoB;QAC7B,OAAO,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;IACjD,CAAC;IAED,KAAK,CAAC,KAAK,CAAC,QAAgB;QACxB,IAAI,KAAK,GAAG,CAAC,CAAC;QAEd,KAAK,MAAM,CAAC,EAAE,EAAE,UAAU,CAAC,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;YAC9C,IAAI,UAAU,CAAC,QAAQ,CAAC,QAAQ,KAAK,QAAQ,EAAE,CAAC;gBAC5C,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;gBAC5B,KAAK,EAAE,CAAC;YACZ,CAAC;QACL,CAAC;QAED,OAAO,KAAK,CAAC;IACjB,CAAC;IAED;;;OAGG;IACK,cAAc,CAAC,KAAiB;QACpC,OAAO;YACH,QAAQ,EAAE,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;gBACjC,IAAI,EAAE,GAAG,CAAC,IAAI;gBACd,OAAO,EAAE,GAAG,CAAC,OAAO;gBACpB,UAAU,EAAE,GAAG,CAAC,UAAU;gBAC1B,YAAY,EAAE,GAAG,CAAC,YAAY;gBAC9B,KAAK,EAAE,GAAG,CAAC,KAAK;aACnB,CAAC,CAAC;YACH,SAAS,EAAE,KAAK,CAAC,SAAS;YAC1B,QAAQ,EAAE,KAAK,CAAC,QAAQ;YACxB,IAAI,EAAE,KAAK,CAAC,IAAI;YAChB,MAAM,EAAE,KAAK,CAAC,MAAM;YACpB,SAAS,EAAE,KAAK,CAAC,SAAS;YAC1B,YAAY,EAAE,KAAK,CAAC,YAAY;YAChC,KAAK,EAAE,KAAK,CAAC,KAAK;SACrB,CAAC;IACN,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,OAAO;QACjB,IAAI,IAAI,CAAC,WAAW,CAAC,IAAI,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YACzC,OAAO;QACX,CAAC;QAED,uCAAuC;QACvC,MAAM,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,CAAC;aAChD,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;QAEvE,kCAAkC;QAClC,MAAM,QAAQ,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,WAAW,CAAC,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC;QACxE,KAAK,MAAM,CAAC,EAAE,CAAC,IAAI,QAAQ,EAAE,CAAC;YAC1B,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QAChC,CAAC;IACL,CAAC;CACJ;AA7ID,gDA6IC;AAED;;;GAGG;AACH,SAAgB,qBAAqB,CACjC,UAAsB,EACtB,KAAwB;IAExB,MAAM,CAAC,GAAG,UAAU,CAAC,KAAK,CAAC;IAE3B,OAAO;QACH,QAAQ,EAAE,CAAC,CAAC,QAAe;QAC3B,MAAM,EAAE,EAAE,EAAE,gDAAgD;QAC5D,KAAK,EAAE,KAAK,IAAI,IAAI,GAAG,EAAE;QACzB,SAAS,EAAE,CAAC,CAAC,SAAS;QACtB,QAAQ,EAAE,CAAC,CAAC,QAAQ;QACpB,IAAI,EAAE,CAAC,CAAC,IAAI;QACZ,MAAM,EAAE,CAAC,CAAC,MAAM;QAChB,SAAS,EAAE,CAAC,CAAC,SAAS;QACtB,YAAY,EAAE,CAAC,CAAC,YAAY;QAC5B,KAAK,EAAE,CAAC,CAAC,KAAK;QACd,WAAW,EAAE,SAAS;KACzB,CAAC;AACN,CAAC;AAED;;GAEG;AACH,SAAgB,iBAAiB,CAAC,UAAsB;IACpD,OAAO,UAAU,CAAC,QAAQ,CAAC,MAAM,KAAK,kBAAkB;QACpD,UAAU,CAAC,QAAQ,CAAC,eAAe,IAAI,IAAI,CAAC;AACpD,CAAC;AAED;;GAEG;AACH,SAAgB,kBAAkB,CAAC,UAAsB;IACrD,IAAI,CAAC,iBAAiB,CAAC,UAAU,CAAC,EAAE,CAAC;QACjC,OAAO,IAAI,CAAC;IAChB,CAAC;IACD,OAAO,UAAU,CAAC,QAAQ,CAAC,eAAe,IAAI,IAAI,CAAC;AACvD,CAAC;AAqBD;;;;;;;;;;;GAWG;AACI,KAAK,UAAU,kBAAkB,CACpC,UAAsB,EACtB,QAAiB,EACjB,YAA2B,EAC3B,KAAwB,EACxB,WAAyB;IAEzB,MAAM,OAAO,GAAG,UAAU,CAAC,QAAQ,CAAC,eAAe,CAAC;IAEpD,IAAI,CAAC,OAAO,EAAE,CAAC;QACX,MAAM,IAAI,KAAK,CAAC,2CAA2C,CAAC,CAAC;IACjE,CAAC;IAED,oBAAoB;IACpB,MAAM,KAAK,GAAG,qBAAqB,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;IAEvD,IAAI,UAAkB,CAAC;IACvB,IAAI,YAAY,GAAG,KAAK,CAAC;IAEzB,IAAI,QAAQ,EAAE,CAAC;QACX,IAAI,YAAY,EAAE,CAAC;YACf,0BAA0B;YAC1B,IAAI,CAAC;gBACD,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,OAAO,CAAC,QAAQ,EAAE,OAAO,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;gBAC/E,UAAU,GAAG,OAAO,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;gBAC/F,YAAY,GAAG,IAAI,CAAC;YACxB,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACb,MAAM,YAAY,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;gBAC5E,UAAU,GAAG,qBAAqB,YAAY,EAAE,CAAC;gBACjD,YAAY,GAAG,IAAI,CAAC,CAAC,sBAAsB;YAC/C,CAAC;QACL,CAAC;aAAM,CAAC;YACJ,kDAAkD;YAClD,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;YACpE,YAAY,GAAG,KAAK,CAAC;QACzB,CAAC;IACL,CAAC;SAAM,CAAC;QACJ,WAAW;QACX,UAAU,GAAG,wDAAwD,CAAC;QACtE,YAAY,GAAG,KAAK,CAAC;IACzB,CAAC;IAED,mCAAmC;IACnC,MAAM,iBAAiB,GAAG;QACtB,IAAI,EAAE,MAAe;QACrB,OAAO,EAAE,UAAU;QACnB,YAAY,EAAE,OAAO,CAAC,QAAQ,CAAC,EAAE;KACpC,CAAC;IAEF,KAAK,CAAC,QAAQ,GAAG,CAAC,GAAG,KAAK,CAAC,QAAQ,EAAE,iBAAwB,CAAC,CAAC;IAE/D,OAAO;QACH,QAAQ;QACR,KAAK;QACL,UAAU;QACV,YAAY;KACf,CAAC;AACN,CAAC"}
|
|
@@ -12,13 +12,32 @@ export class MemoryCheckpointer {
|
|
|
12
12
|
this.checkpoints = new Map();
|
|
13
13
|
this.maxItems = options?.maxItems ?? 100;
|
|
14
14
|
}
|
|
15
|
-
async save(threadId, state,
|
|
15
|
+
async save(threadId, state, options) {
|
|
16
16
|
const id = `ckpt_${threadId}_${Date.now()}_${Math.random().toString(36).slice(2, 8)}`;
|
|
17
|
+
// Extract options - handle both new CheckpointSaveOptions and legacy custom object
|
|
18
|
+
let status = 'active';
|
|
19
|
+
let pendingApproval;
|
|
20
|
+
let custom;
|
|
21
|
+
if (options) {
|
|
22
|
+
if ('status' in options || 'pendingApproval' in options || 'custom' in options) {
|
|
23
|
+
// New CheckpointSaveOptions format
|
|
24
|
+
const opts = options;
|
|
25
|
+
status = opts.status ?? 'active';
|
|
26
|
+
pendingApproval = opts.pendingApproval;
|
|
27
|
+
custom = opts.custom;
|
|
28
|
+
}
|
|
29
|
+
else {
|
|
30
|
+
// Legacy: treat entire object as custom metadata
|
|
31
|
+
custom = options;
|
|
32
|
+
}
|
|
33
|
+
}
|
|
17
34
|
const metadata = {
|
|
18
35
|
id,
|
|
19
36
|
threadId,
|
|
20
37
|
createdAt: Date.now(),
|
|
21
38
|
stepCount: state.stepCount,
|
|
39
|
+
status,
|
|
40
|
+
pendingApproval,
|
|
22
41
|
custom,
|
|
23
42
|
};
|
|
24
43
|
const serialized = this.serializeState(state);
|
|
@@ -123,4 +142,80 @@ export function deserializeCheckpoint(checkpoint, tools) {
|
|
|
123
142
|
abortSignal: undefined,
|
|
124
143
|
};
|
|
125
144
|
}
|
|
145
|
+
/**
|
|
146
|
+
* Check if a checkpoint is pending approval.
|
|
147
|
+
*/
|
|
148
|
+
export function isPendingApproval(checkpoint) {
|
|
149
|
+
return checkpoint.metadata.status === 'pending_approval' &&
|
|
150
|
+
checkpoint.metadata.pendingApproval != null;
|
|
151
|
+
}
|
|
152
|
+
/**
|
|
153
|
+
* Get pending approval info from checkpoint.
|
|
154
|
+
*/
|
|
155
|
+
export function getPendingApproval(checkpoint) {
|
|
156
|
+
if (!isPendingApproval(checkpoint)) {
|
|
157
|
+
return null;
|
|
158
|
+
}
|
|
159
|
+
return checkpoint.metadata.pendingApproval ?? null;
|
|
160
|
+
}
|
|
161
|
+
/**
|
|
162
|
+
* Resume a pending approval checkpoint with user's decision.
|
|
163
|
+
*
|
|
164
|
+
* If approved and toolExecutor is provided, the tool will be executed.
|
|
165
|
+
* Otherwise, a synthetic approval result will be used.
|
|
166
|
+
*
|
|
167
|
+
* @param checkpoint - The pending approval checkpoint
|
|
168
|
+
* @param approved - Whether the user approved
|
|
169
|
+
* @param toolExecutor - Optional function to execute the approved tool
|
|
170
|
+
* @param tools - Tool map for state deserialization
|
|
171
|
+
* @param abortSignal - Abort signal for tool execution
|
|
172
|
+
*/
|
|
173
|
+
export async function resumeWithApproval(checkpoint, approved, toolExecutor, tools, abortSignal) {
|
|
174
|
+
const pending = checkpoint.metadata.pendingApproval;
|
|
175
|
+
if (!pending) {
|
|
176
|
+
throw new Error('Checkpoint does not have pending approval');
|
|
177
|
+
}
|
|
178
|
+
// Deserialize state
|
|
179
|
+
const state = deserializeCheckpoint(checkpoint, tools);
|
|
180
|
+
let toolResult;
|
|
181
|
+
let toolExecuted = false;
|
|
182
|
+
if (approved) {
|
|
183
|
+
if (toolExecutor) {
|
|
184
|
+
// Execute the actual tool
|
|
185
|
+
try {
|
|
186
|
+
const result = await toolExecutor(pending.toolName, pending.args, abortSignal);
|
|
187
|
+
toolResult = typeof result === 'string' ? result : JSON.stringify(result ?? { success: true });
|
|
188
|
+
toolExecuted = true;
|
|
189
|
+
}
|
|
190
|
+
catch (error) {
|
|
191
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
192
|
+
toolResult = `[Execution Error] ${errorMessage}`;
|
|
193
|
+
toolExecuted = true; // Attempted execution
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
else {
|
|
197
|
+
// No executor provided - return synthetic success
|
|
198
|
+
toolResult = JSON.stringify({ approved: true, args: pending.args });
|
|
199
|
+
toolExecuted = false;
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
else {
|
|
203
|
+
// Rejected
|
|
204
|
+
toolResult = '[Approval Rejected] Tool execution was denied by user.';
|
|
205
|
+
toolExecuted = false;
|
|
206
|
+
}
|
|
207
|
+
// Add tool result message to state
|
|
208
|
+
const toolResultMessage = {
|
|
209
|
+
role: 'tool',
|
|
210
|
+
content: toolResult,
|
|
211
|
+
tool_call_id: pending.toolCall.id,
|
|
212
|
+
};
|
|
213
|
+
state.messages = [...state.messages, toolResultMessage];
|
|
214
|
+
return {
|
|
215
|
+
approved,
|
|
216
|
+
state,
|
|
217
|
+
toolResult,
|
|
218
|
+
toolExecuted,
|
|
219
|
+
};
|
|
220
|
+
}
|
|
126
221
|
//# sourceMappingURL=checkpointer.js.map
|
package/dist/ai/graph/index.d.ts
CHANGED
|
@@ -4,8 +4,8 @@
|
|
|
4
4
|
export { StateGraph, MaxGraphStepsError } from './state-graph';
|
|
5
5
|
export { END } from './types';
|
|
6
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';
|
|
7
|
+
export { MemoryCheckpointer, deserializeCheckpoint, isPendingApproval, getPendingApproval, resumeWithApproval, } from './checkpointer';
|
|
8
|
+
export type { Checkpointer, Checkpoint, CheckpointMetadata, SerializedAgentState, CheckpointStatus, CheckpointSaveOptions, PendingApproval, ResumeWithApprovalResult, ToolExecutor, } from './checkpointer';
|
|
9
9
|
export { RedisCheckpointer } from './redis-checkpointer';
|
|
10
10
|
export type { RedisClient, RedisCheckpointerConfig } from './redis-checkpointer';
|
|
11
11
|
export { PostgresCheckpointer } from './postgres-checkpointer';
|
|
@@ -1 +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,
|
|
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,EAErB,iBAAiB,EACjB,kBAAkB,EAClB,kBAAkB,GACrB,MAAM,gBAAgB,CAAC;AACxB,YAAY,EACR,YAAY,EACZ,UAAU,EACV,kBAAkB,EAClB,oBAAoB,EAEpB,gBAAgB,EAChB,qBAAqB,EACrB,eAAe,EACf,wBAAwB,EACxB,YAAY,GACf,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"}
|
package/dist/ai/graph/index.js
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
* Graph Runtime public exports.
|
|
4
4
|
*/
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.PostgresCheckpointer = exports.RedisCheckpointer = exports.deserializeCheckpoint = exports.MemoryCheckpointer = exports.END = exports.MaxGraphStepsError = exports.StateGraph = void 0;
|
|
6
|
+
exports.PostgresCheckpointer = exports.RedisCheckpointer = exports.resumeWithApproval = exports.getPendingApproval = exports.isPendingApproval = exports.deserializeCheckpoint = exports.MemoryCheckpointer = exports.END = exports.MaxGraphStepsError = exports.StateGraph = void 0;
|
|
7
7
|
var state_graph_1 = require("./state-graph");
|
|
8
8
|
Object.defineProperty(exports, "StateGraph", { enumerable: true, get: function () { return state_graph_1.StateGraph; } });
|
|
9
9
|
Object.defineProperty(exports, "MaxGraphStepsError", { enumerable: true, get: function () { return state_graph_1.MaxGraphStepsError; } });
|
|
@@ -13,6 +13,10 @@ Object.defineProperty(exports, "END", { enumerable: true, get: function () { ret
|
|
|
13
13
|
var checkpointer_1 = require("./checkpointer");
|
|
14
14
|
Object.defineProperty(exports, "MemoryCheckpointer", { enumerable: true, get: function () { return checkpointer_1.MemoryCheckpointer; } });
|
|
15
15
|
Object.defineProperty(exports, "deserializeCheckpoint", { enumerable: true, get: function () { return checkpointer_1.deserializeCheckpoint; } });
|
|
16
|
+
// Phase 5: Async Approval helpers
|
|
17
|
+
Object.defineProperty(exports, "isPendingApproval", { enumerable: true, get: function () { return checkpointer_1.isPendingApproval; } });
|
|
18
|
+
Object.defineProperty(exports, "getPendingApproval", { enumerable: true, get: function () { return checkpointer_1.getPendingApproval; } });
|
|
19
|
+
Object.defineProperty(exports, "resumeWithApproval", { enumerable: true, get: function () { return checkpointer_1.resumeWithApproval; } });
|
|
16
20
|
// Redis Checkpointer (optional - requires ioredis)
|
|
17
21
|
var redis_checkpointer_1 = require("./redis-checkpointer");
|
|
18
22
|
Object.defineProperty(exports, "RedisCheckpointer", { enumerable: true, get: function () { return redis_checkpointer_1.RedisCheckpointer; } });
|
|
@@ -1 +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,+
|
|
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,+CAOwB;AANpB,kHAAA,kBAAkB,OAAA;AAClB,qHAAA,qBAAqB,OAAA;AACrB,kCAAkC;AAClC,iHAAA,iBAAiB,OAAA;AACjB,kHAAA,kBAAkB,OAAA;AAClB,kHAAA,kBAAkB,OAAA;AAetB,mDAAmD;AACnD,2DAAyD;AAAhD,uHAAA,iBAAiB,OAAA;AAG1B,iDAAiD;AACjD,iEAA+D;AAAtD,6HAAA,oBAAoB,OAAA"}
|
package/dist/ai/graph/index.mjs
CHANGED
|
@@ -4,7 +4,9 @@
|
|
|
4
4
|
export { StateGraph, MaxGraphStepsError } from './state-graph.mjs';
|
|
5
5
|
export { END } from './types.mjs';
|
|
6
6
|
// Checkpointers
|
|
7
|
-
export { MemoryCheckpointer, deserializeCheckpoint,
|
|
7
|
+
export { MemoryCheckpointer, deserializeCheckpoint,
|
|
8
|
+
// Phase 5: Async Approval helpers
|
|
9
|
+
isPendingApproval, getPendingApproval, resumeWithApproval, } from './checkpointer.mjs';
|
|
8
10
|
// Redis Checkpointer (optional - requires ioredis)
|
|
9
11
|
export { RedisCheckpointer } from './redis-checkpointer.mjs';
|
|
10
12
|
// Postgres Checkpointer (optional - requires pg)
|
|
@@ -44,7 +44,7 @@ export declare class PostgresCheckpointer implements Checkpointer {
|
|
|
44
44
|
* Run this during application setup.
|
|
45
45
|
*/
|
|
46
46
|
createTable(): Promise<void>;
|
|
47
|
-
save(threadId: string, state: AgentState,
|
|
47
|
+
save(threadId: string, state: AgentState, options?: Record<string, unknown>): Promise<CheckpointMetadata>;
|
|
48
48
|
load(threadId: string): Promise<Checkpoint | null>;
|
|
49
49
|
list(threadId: string): Promise<CheckpointMetadata[]>;
|
|
50
50
|
delete(checkpointId: string): Promise<boolean>;
|
|
@@ -1 +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,
|
|
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,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAClC,OAAO,CAAC,kBAAkB,CAAC;IAmCxB,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"}
|
|
@@ -55,19 +55,29 @@ class PostgresCheckpointer {
|
|
|
55
55
|
ON ${this.table} (created_at DESC)
|
|
56
56
|
`);
|
|
57
57
|
}
|
|
58
|
-
async save(threadId, state,
|
|
58
|
+
async save(threadId, state, options) {
|
|
59
59
|
const id = `ckpt_${threadId}_${Date.now()}_${Math.random().toString(36).slice(2, 8)}`;
|
|
60
60
|
const createdAt = Date.now();
|
|
61
|
+
// Extract options (compatible with both old and new API)
|
|
62
|
+
const opts = options;
|
|
61
63
|
const metadata = {
|
|
62
64
|
id,
|
|
63
65
|
threadId,
|
|
64
66
|
createdAt,
|
|
65
67
|
stepCount: state.stepCount,
|
|
66
|
-
|
|
68
|
+
status: opts?.status ?? 'active',
|
|
69
|
+
pendingApproval: opts?.pendingApproval,
|
|
70
|
+
custom: opts?.custom ?? (opts && !('status' in opts) ? opts : undefined),
|
|
67
71
|
};
|
|
68
72
|
const serializedState = this.serializeState(state);
|
|
73
|
+
// Store status and pendingApproval in custom field for Postgres (schema migration needed for full support)
|
|
74
|
+
const fullCustom = {
|
|
75
|
+
...metadata.custom,
|
|
76
|
+
...(metadata.status !== 'active' ? { __status: metadata.status } : {}),
|
|
77
|
+
...(metadata.pendingApproval ? { __pendingApproval: metadata.pendingApproval } : {}),
|
|
78
|
+
};
|
|
69
79
|
await this.client.query(`INSERT INTO ${this.table} (id, thread_id, created_at, step_count, custom, state)
|
|
70
|
-
VALUES ($1, $2, $3, $4, $5, $6)`, [id, threadId, createdAt, state.stepCount, JSON.stringify(
|
|
80
|
+
VALUES ($1, $2, $3, $4, $5, $6)`, [id, threadId, createdAt, state.stepCount, JSON.stringify(fullCustom), JSON.stringify(serializedState)]);
|
|
71
81
|
return metadata;
|
|
72
82
|
}
|
|
73
83
|
async load(threadId) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"postgres-checkpointer.js","sourceRoot":"","sources":["../../../src/ai/graph/postgres-checkpointer.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;GAeG;;;AAkBH;;;GAGG;AACH,MAAa,oBAAoB;IAK7B,YAAY,MAAsB,EAAE,SAAqC,EAAE;QACvE,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,SAAS,GAAG,MAAM,CAAC,SAAS,IAAI,mBAAmB,CAAC;QACzD,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,IAAI,QAAQ,CAAC;IAC5C,CAAC;IAED,IAAY,KAAK;QACb,OAAO,IAAI,IAAI,CAAC,MAAM,MAAM,IAAI,CAAC,SAAS,GAAG,CAAC;IAClD,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,WAAW;QACb,MAAM,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC;yCACS,IAAI,CAAC,KAAK;;;;;;;;;SAS1C,CAAC,CAAC;QAEH,MAAM,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC;6CACa,IAAI,CAAC,SAAS;iBAC1C,IAAI,CAAC,KAAK;SAClB,CAAC,CAAC;QAEH,MAAM,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC;6CACa,IAAI,CAAC,SAAS;iBAC1C,IAAI,CAAC,KAAK;SAClB,CAAC,CAAC;IACP,CAAC;IAED,KAAK,CAAC,IAAI,CACN,QAAgB,EAChB,KAAiB,EACjB,
|
|
1
|
+
{"version":3,"file":"postgres-checkpointer.js","sourceRoot":"","sources":["../../../src/ai/graph/postgres-checkpointer.ts"],"names":[],"mappings":"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"}
|