@wundr.io/langgraph-orchestrator 1.0.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/README.md +842 -0
- package/dist/checkpointing.d.ts +265 -0
- package/dist/checkpointing.d.ts.map +1 -0
- package/dist/checkpointing.js +577 -0
- package/dist/checkpointing.js.map +1 -0
- package/dist/edges/conditional-edge.d.ts +230 -0
- package/dist/edges/conditional-edge.d.ts.map +1 -0
- package/dist/edges/conditional-edge.js +439 -0
- package/dist/edges/conditional-edge.js.map +1 -0
- package/dist/edges/loop-edge.d.ts +290 -0
- package/dist/edges/loop-edge.d.ts.map +1 -0
- package/dist/edges/loop-edge.js +503 -0
- package/dist/edges/loop-edge.js.map +1 -0
- package/dist/index.d.ts +125 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +269 -0
- package/dist/index.js.map +1 -0
- package/dist/nodes/decision-node.d.ts +276 -0
- package/dist/nodes/decision-node.d.ts.map +1 -0
- package/dist/nodes/decision-node.js +403 -0
- package/dist/nodes/decision-node.js.map +1 -0
- package/dist/nodes/human-node.d.ts +272 -0
- package/dist/nodes/human-node.d.ts.map +1 -0
- package/dist/nodes/human-node.js +394 -0
- package/dist/nodes/human-node.js.map +1 -0
- package/dist/nodes/llm-node.d.ts +173 -0
- package/dist/nodes/llm-node.d.ts.map +1 -0
- package/dist/nodes/llm-node.js +325 -0
- package/dist/nodes/llm-node.js.map +1 -0
- package/dist/nodes/tool-node.d.ts +151 -0
- package/dist/nodes/tool-node.d.ts.map +1 -0
- package/dist/nodes/tool-node.js +373 -0
- package/dist/nodes/tool-node.js.map +1 -0
- package/dist/prebuilt-graphs/plan-execute-refine.d.ts +149 -0
- package/dist/prebuilt-graphs/plan-execute-refine.d.ts.map +1 -0
- package/dist/prebuilt-graphs/plan-execute-refine.js +600 -0
- package/dist/prebuilt-graphs/plan-execute-refine.js.map +1 -0
- package/dist/state-graph.d.ts +158 -0
- package/dist/state-graph.d.ts.map +1 -0
- package/dist/state-graph.js +756 -0
- package/dist/state-graph.js.map +1 -0
- package/dist/types.d.ts +762 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +73 -0
- package/dist/types.js.map +1 -0
- package/package.json +57 -0
- package/src/checkpointing.ts +702 -0
- package/src/edges/conditional-edge.ts +518 -0
- package/src/edges/loop-edge.ts +623 -0
- package/src/index.ts +416 -0
- package/src/nodes/decision-node.ts +538 -0
- package/src/nodes/human-node.ts +572 -0
- package/src/nodes/llm-node.ts +448 -0
- package/src/nodes/tool-node.ts +525 -0
- package/src/prebuilt-graphs/plan-execute-refine.ts +769 -0
- package/src/state-graph.ts +990 -0
- package/src/types.ts +729 -0
|
@@ -0,0 +1,265 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Checkpointing - State persistence and time-travel debugging
|
|
3
|
+
* @module @wundr.io/langgraph-orchestrator
|
|
4
|
+
*/
|
|
5
|
+
import { z } from 'zod';
|
|
6
|
+
import type { AgentState, Checkpoint, CheckpointSummary, GraphCheckpointer } from './types';
|
|
7
|
+
/**
|
|
8
|
+
* In-memory checkpointer implementation
|
|
9
|
+
* Useful for development and testing
|
|
10
|
+
*/
|
|
11
|
+
export declare class MemoryCheckpointer implements GraphCheckpointer {
|
|
12
|
+
private checkpoints;
|
|
13
|
+
private executionIndex;
|
|
14
|
+
/**
|
|
15
|
+
* Save a checkpoint
|
|
16
|
+
*/
|
|
17
|
+
save(checkpoint: Checkpoint): Promise<void>;
|
|
18
|
+
/**
|
|
19
|
+
* Load a checkpoint by ID
|
|
20
|
+
*/
|
|
21
|
+
load(checkpointId: string): Promise<Checkpoint | null>;
|
|
22
|
+
/**
|
|
23
|
+
* List checkpoints for an execution
|
|
24
|
+
*/
|
|
25
|
+
list(executionId: string): Promise<CheckpointSummary[]>;
|
|
26
|
+
/**
|
|
27
|
+
* Delete a checkpoint
|
|
28
|
+
*/
|
|
29
|
+
delete(checkpointId: string): Promise<void>;
|
|
30
|
+
/**
|
|
31
|
+
* Get the latest checkpoint for an execution
|
|
32
|
+
*/
|
|
33
|
+
getLatest(executionId: string): Promise<Checkpoint | null>;
|
|
34
|
+
/**
|
|
35
|
+
* Clear all checkpoints
|
|
36
|
+
*/
|
|
37
|
+
clear(): void;
|
|
38
|
+
/**
|
|
39
|
+
* Get statistics about stored checkpoints
|
|
40
|
+
*/
|
|
41
|
+
getStats(): {
|
|
42
|
+
totalCheckpoints: number;
|
|
43
|
+
totalExecutions: number;
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* File-based checkpointer implementation
|
|
48
|
+
* Persists checkpoints to the filesystem
|
|
49
|
+
*/
|
|
50
|
+
export declare class FileCheckpointer implements GraphCheckpointer {
|
|
51
|
+
private readonly basePath;
|
|
52
|
+
private readonly fs;
|
|
53
|
+
/**
|
|
54
|
+
* Create a file-based checkpointer
|
|
55
|
+
* @param basePath - Directory to store checkpoints
|
|
56
|
+
* @param fs - FileSystem interface (allows for mocking)
|
|
57
|
+
*/
|
|
58
|
+
constructor(basePath: string, fs?: FileSystem);
|
|
59
|
+
/**
|
|
60
|
+
* Save a checkpoint
|
|
61
|
+
*/
|
|
62
|
+
save(checkpoint: Checkpoint): Promise<void>;
|
|
63
|
+
/**
|
|
64
|
+
* Load a checkpoint by ID
|
|
65
|
+
*/
|
|
66
|
+
load(checkpointId: string): Promise<Checkpoint | null>;
|
|
67
|
+
/**
|
|
68
|
+
* List checkpoints for an execution
|
|
69
|
+
*/
|
|
70
|
+
list(executionId: string): Promise<CheckpointSummary[]>;
|
|
71
|
+
/**
|
|
72
|
+
* Delete a checkpoint
|
|
73
|
+
*/
|
|
74
|
+
delete(checkpointId: string): Promise<void>;
|
|
75
|
+
/**
|
|
76
|
+
* Get the latest checkpoint for an execution
|
|
77
|
+
*/
|
|
78
|
+
getLatest(executionId: string): Promise<Checkpoint | null>;
|
|
79
|
+
/**
|
|
80
|
+
* Load index file
|
|
81
|
+
*/
|
|
82
|
+
private loadIndex;
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* FileSystem interface for abstraction
|
|
86
|
+
*/
|
|
87
|
+
export interface FileSystem {
|
|
88
|
+
readFile(path: string, encoding: string): Promise<string>;
|
|
89
|
+
writeFile(path: string, data: string): Promise<void>;
|
|
90
|
+
mkdir(path: string, options?: {
|
|
91
|
+
recursive?: boolean;
|
|
92
|
+
}): Promise<void>;
|
|
93
|
+
readdir(path: string): Promise<string[]>;
|
|
94
|
+
unlink(path: string): Promise<void>;
|
|
95
|
+
exists(path: string): Promise<boolean>;
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* Time-travel debugger for workflow state
|
|
99
|
+
*/
|
|
100
|
+
export declare class TimeTravelDebugger<TState extends AgentState = AgentState> {
|
|
101
|
+
private readonly checkpointer;
|
|
102
|
+
/**
|
|
103
|
+
* Create a time-travel debugger
|
|
104
|
+
* @param checkpointer - Checkpointer to use for state access
|
|
105
|
+
*/
|
|
106
|
+
constructor(checkpointer: GraphCheckpointer);
|
|
107
|
+
/**
|
|
108
|
+
* Get the execution timeline
|
|
109
|
+
* @param executionId - Execution to get timeline for
|
|
110
|
+
* @returns Array of checkpoint summaries
|
|
111
|
+
*/
|
|
112
|
+
getTimeline(executionId: string): Promise<CheckpointSummary[]>;
|
|
113
|
+
/**
|
|
114
|
+
* Travel to a specific checkpoint
|
|
115
|
+
* @param checkpointId - Checkpoint to travel to
|
|
116
|
+
* @returns The state at that checkpoint
|
|
117
|
+
*/
|
|
118
|
+
travelTo(checkpointId: string): Promise<TState | null>;
|
|
119
|
+
/**
|
|
120
|
+
* Get state at a specific step number
|
|
121
|
+
* @param executionId - Execution ID
|
|
122
|
+
* @param stepNumber - Step number to travel to
|
|
123
|
+
* @returns The state at that step
|
|
124
|
+
*/
|
|
125
|
+
travelToStep(executionId: string, stepNumber: number): Promise<TState | null>;
|
|
126
|
+
/**
|
|
127
|
+
* Compare two checkpoints
|
|
128
|
+
* @param checkpointId1 - First checkpoint
|
|
129
|
+
* @param checkpointId2 - Second checkpoint
|
|
130
|
+
* @returns Differences between the checkpoints
|
|
131
|
+
*/
|
|
132
|
+
compare(checkpointId1: string, checkpointId2: string): Promise<StateDiff[]>;
|
|
133
|
+
/**
|
|
134
|
+
* Get the state history (changes over time)
|
|
135
|
+
* @param executionId - Execution ID
|
|
136
|
+
* @returns Array of state changes
|
|
137
|
+
*/
|
|
138
|
+
getStateHistory(executionId: string): Promise<StateHistoryItem<TState>[]>;
|
|
139
|
+
/**
|
|
140
|
+
* Find checkpoints where a condition became true
|
|
141
|
+
* @param executionId - Execution ID
|
|
142
|
+
* @param condition - Condition to check
|
|
143
|
+
* @returns Checkpoints where condition became true
|
|
144
|
+
*/
|
|
145
|
+
findTransitions(executionId: string, condition: (state: TState) => boolean): Promise<CheckpointSummary[]>;
|
|
146
|
+
/**
|
|
147
|
+
* Compute differences between two states
|
|
148
|
+
*/
|
|
149
|
+
private diffStates;
|
|
150
|
+
}
|
|
151
|
+
/**
|
|
152
|
+
* State difference record
|
|
153
|
+
*/
|
|
154
|
+
export interface StateDiff {
|
|
155
|
+
/** Path to the changed value */
|
|
156
|
+
path: string;
|
|
157
|
+
/** Type of change */
|
|
158
|
+
type: 'added' | 'removed' | 'changed';
|
|
159
|
+
/** Previous value */
|
|
160
|
+
oldValue?: unknown;
|
|
161
|
+
/** New value */
|
|
162
|
+
newValue?: unknown;
|
|
163
|
+
}
|
|
164
|
+
/**
|
|
165
|
+
* State history item
|
|
166
|
+
*/
|
|
167
|
+
export interface StateHistoryItem<TState extends AgentState = AgentState> {
|
|
168
|
+
/** Checkpoint summary */
|
|
169
|
+
checkpoint: CheckpointSummary;
|
|
170
|
+
/** Full state at this point */
|
|
171
|
+
state: TState;
|
|
172
|
+
/** Changes from previous state */
|
|
173
|
+
changes: StateDiff[];
|
|
174
|
+
}
|
|
175
|
+
/**
|
|
176
|
+
* Create a checkpoint
|
|
177
|
+
*
|
|
178
|
+
* @example
|
|
179
|
+
* ```typescript
|
|
180
|
+
* const checkpoint = createCheckpoint({
|
|
181
|
+
* executionId: 'exec-123',
|
|
182
|
+
* stepNumber: 5,
|
|
183
|
+
* nodeName: 'process-node',
|
|
184
|
+
* state: currentState
|
|
185
|
+
* });
|
|
186
|
+
*
|
|
187
|
+
* await checkpointer.save(checkpoint);
|
|
188
|
+
* ```
|
|
189
|
+
*
|
|
190
|
+
* @param options - Checkpoint options
|
|
191
|
+
* @returns Checkpoint object
|
|
192
|
+
*/
|
|
193
|
+
export declare function createCheckpoint<TState extends AgentState = AgentState>(options: {
|
|
194
|
+
executionId: string;
|
|
195
|
+
stepNumber: number;
|
|
196
|
+
nodeName: string;
|
|
197
|
+
state: TState;
|
|
198
|
+
parentId?: string;
|
|
199
|
+
metadata?: Record<string, unknown>;
|
|
200
|
+
}): Checkpoint;
|
|
201
|
+
/**
|
|
202
|
+
* Checkpoint retention policy
|
|
203
|
+
*/
|
|
204
|
+
export interface RetentionPolicy {
|
|
205
|
+
/** Maximum number of checkpoints to keep per execution */
|
|
206
|
+
maxCheckpointsPerExecution?: number;
|
|
207
|
+
/** Maximum age of checkpoints in milliseconds */
|
|
208
|
+
maxAge?: number;
|
|
209
|
+
/** Keep every Nth checkpoint (for sampling) */
|
|
210
|
+
keepEveryN?: number;
|
|
211
|
+
/** Always keep checkpoints for these nodes */
|
|
212
|
+
alwaysKeepNodes?: string[];
|
|
213
|
+
}
|
|
214
|
+
/**
|
|
215
|
+
* Apply retention policy to checkpoints
|
|
216
|
+
*
|
|
217
|
+
* @example
|
|
218
|
+
* ```typescript
|
|
219
|
+
* await applyRetentionPolicy(checkpointer, 'exec-123', {
|
|
220
|
+
* maxCheckpointsPerExecution: 100,
|
|
221
|
+
* maxAge: 7 * 24 * 60 * 60 * 1000, // 7 days
|
|
222
|
+
* keepEveryN: 10,
|
|
223
|
+
* alwaysKeepNodes: ['decision', 'error-handler']
|
|
224
|
+
* });
|
|
225
|
+
* ```
|
|
226
|
+
*
|
|
227
|
+
* @param checkpointer - Checkpointer to clean up
|
|
228
|
+
* @param executionId - Execution to apply policy to
|
|
229
|
+
* @param policy - Retention policy
|
|
230
|
+
* @returns Number of checkpoints deleted
|
|
231
|
+
*/
|
|
232
|
+
export declare function applyRetentionPolicy(checkpointer: GraphCheckpointer, executionId: string, policy: RetentionPolicy): Promise<number>;
|
|
233
|
+
/**
|
|
234
|
+
* Schema for checkpoint validation
|
|
235
|
+
*/
|
|
236
|
+
export declare const CheckpointSchema: z.ZodObject<{
|
|
237
|
+
id: z.ZodString;
|
|
238
|
+
executionId: z.ZodString;
|
|
239
|
+
stepNumber: z.ZodNumber;
|
|
240
|
+
nodeName: z.ZodString;
|
|
241
|
+
timestamp: z.ZodDate;
|
|
242
|
+
parentId: z.ZodOptional<z.ZodString>;
|
|
243
|
+
metadata: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
|
|
244
|
+
}, "strip", z.ZodTypeAny, {
|
|
245
|
+
id: string;
|
|
246
|
+
timestamp: Date;
|
|
247
|
+
executionId: string;
|
|
248
|
+
stepNumber: number;
|
|
249
|
+
nodeName: string;
|
|
250
|
+
metadata?: Record<string, unknown> | undefined;
|
|
251
|
+
parentId?: string | undefined;
|
|
252
|
+
}, {
|
|
253
|
+
id: string;
|
|
254
|
+
timestamp: Date;
|
|
255
|
+
executionId: string;
|
|
256
|
+
stepNumber: number;
|
|
257
|
+
nodeName: string;
|
|
258
|
+
metadata?: Record<string, unknown> | undefined;
|
|
259
|
+
parentId?: string | undefined;
|
|
260
|
+
}>;
|
|
261
|
+
/**
|
|
262
|
+
* Validate a checkpoint
|
|
263
|
+
*/
|
|
264
|
+
export declare function validateCheckpoint(checkpoint: unknown): checkpoint is Checkpoint;
|
|
265
|
+
//# sourceMappingURL=checkpointing.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"checkpointing.d.ts","sourceRoot":"","sources":["../src/checkpointing.ts"],"names":[],"mappings":"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"}
|