@lleverage-ai/agent-sdk 0.0.1
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/LICENSE +21 -0
- package/README.md +2321 -0
- package/dist/agent.d.ts +52 -0
- package/dist/agent.d.ts.map +1 -0
- package/dist/agent.js +2122 -0
- package/dist/agent.js.map +1 -0
- package/dist/backend.d.ts +378 -0
- package/dist/backend.d.ts.map +1 -0
- package/dist/backend.js +71 -0
- package/dist/backend.js.map +1 -0
- package/dist/backends/composite.d.ts +258 -0
- package/dist/backends/composite.d.ts.map +1 -0
- package/dist/backends/composite.js +437 -0
- package/dist/backends/composite.js.map +1 -0
- package/dist/backends/filesystem.d.ts +268 -0
- package/dist/backends/filesystem.d.ts.map +1 -0
- package/dist/backends/filesystem.js +623 -0
- package/dist/backends/filesystem.js.map +1 -0
- package/dist/backends/index.d.ts +14 -0
- package/dist/backends/index.d.ts.map +1 -0
- package/dist/backends/index.js +14 -0
- package/dist/backends/index.js.map +1 -0
- package/dist/backends/persistent.d.ts +312 -0
- package/dist/backends/persistent.d.ts.map +1 -0
- package/dist/backends/persistent.js +519 -0
- package/dist/backends/persistent.js.map +1 -0
- package/dist/backends/sandbox.d.ts +315 -0
- package/dist/backends/sandbox.d.ts.map +1 -0
- package/dist/backends/sandbox.js +490 -0
- package/dist/backends/sandbox.js.map +1 -0
- package/dist/backends/state.d.ts +225 -0
- package/dist/backends/state.d.ts.map +1 -0
- package/dist/backends/state.js +396 -0
- package/dist/backends/state.js.map +1 -0
- package/dist/checkpointer/file-saver.d.ts +182 -0
- package/dist/checkpointer/file-saver.d.ts.map +1 -0
- package/dist/checkpointer/file-saver.js +298 -0
- package/dist/checkpointer/file-saver.js.map +1 -0
- package/dist/checkpointer/index.d.ts +40 -0
- package/dist/checkpointer/index.d.ts.map +1 -0
- package/dist/checkpointer/index.js +40 -0
- package/dist/checkpointer/index.js.map +1 -0
- package/dist/checkpointer/kv-saver.d.ts +142 -0
- package/dist/checkpointer/kv-saver.d.ts.map +1 -0
- package/dist/checkpointer/kv-saver.js +176 -0
- package/dist/checkpointer/kv-saver.js.map +1 -0
- package/dist/checkpointer/memory-saver.d.ts +158 -0
- package/dist/checkpointer/memory-saver.d.ts.map +1 -0
- package/dist/checkpointer/memory-saver.js +222 -0
- package/dist/checkpointer/memory-saver.js.map +1 -0
- package/dist/checkpointer/types.d.ts +353 -0
- package/dist/checkpointer/types.d.ts.map +1 -0
- package/dist/checkpointer/types.js +159 -0
- package/dist/checkpointer/types.js.map +1 -0
- package/dist/context-manager.d.ts +627 -0
- package/dist/context-manager.d.ts.map +1 -0
- package/dist/context-manager.js +1039 -0
- package/dist/context-manager.js.map +1 -0
- package/dist/context.d.ts +57 -0
- package/dist/context.d.ts.map +1 -0
- package/dist/context.js +76 -0
- package/dist/context.js.map +1 -0
- package/dist/errors/index.d.ts +611 -0
- package/dist/errors/index.d.ts.map +1 -0
- package/dist/errors/index.js +1023 -0
- package/dist/errors/index.js.map +1 -0
- package/dist/generation-helpers.d.ts +126 -0
- package/dist/generation-helpers.d.ts.map +1 -0
- package/dist/generation-helpers.js +181 -0
- package/dist/generation-helpers.js.map +1 -0
- package/dist/hooks/audit.d.ts +210 -0
- package/dist/hooks/audit.d.ts.map +1 -0
- package/dist/hooks/audit.js +305 -0
- package/dist/hooks/audit.js.map +1 -0
- package/dist/hooks/cache.d.ts +180 -0
- package/dist/hooks/cache.d.ts.map +1 -0
- package/dist/hooks/cache.js +273 -0
- package/dist/hooks/cache.js.map +1 -0
- package/dist/hooks/guardrails.d.ts +145 -0
- package/dist/hooks/guardrails.d.ts.map +1 -0
- package/dist/hooks/guardrails.js +326 -0
- package/dist/hooks/guardrails.js.map +1 -0
- package/dist/hooks/index.d.ts +18 -0
- package/dist/hooks/index.d.ts.map +1 -0
- package/dist/hooks/index.js +32 -0
- package/dist/hooks/index.js.map +1 -0
- package/dist/hooks/logging.d.ts +193 -0
- package/dist/hooks/logging.d.ts.map +1 -0
- package/dist/hooks/logging.js +345 -0
- package/dist/hooks/logging.js.map +1 -0
- package/dist/hooks/parallel-guardrails.d.ts +268 -0
- package/dist/hooks/parallel-guardrails.d.ts.map +1 -0
- package/dist/hooks/parallel-guardrails.js +416 -0
- package/dist/hooks/parallel-guardrails.js.map +1 -0
- package/dist/hooks/rate-limit.d.ts +305 -0
- package/dist/hooks/rate-limit.d.ts.map +1 -0
- package/dist/hooks/rate-limit.js +372 -0
- package/dist/hooks/rate-limit.js.map +1 -0
- package/dist/hooks/retry.d.ts +144 -0
- package/dist/hooks/retry.d.ts.map +1 -0
- package/dist/hooks/retry.js +210 -0
- package/dist/hooks/retry.js.map +1 -0
- package/dist/hooks/secrets.d.ts +174 -0
- package/dist/hooks/secrets.d.ts.map +1 -0
- package/dist/hooks/secrets.js +306 -0
- package/dist/hooks/secrets.js.map +1 -0
- package/dist/hooks.d.ts +229 -0
- package/dist/hooks.d.ts.map +1 -0
- package/dist/hooks.js +352 -0
- package/dist/hooks.js.map +1 -0
- package/dist/index.d.ts +97 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +182 -0
- package/dist/index.js.map +1 -0
- package/dist/mcp/env.d.ts +25 -0
- package/dist/mcp/env.d.ts.map +1 -0
- package/dist/mcp/env.js +18 -0
- package/dist/mcp/env.js.map +1 -0
- package/dist/mcp/index.d.ts +16 -0
- package/dist/mcp/index.d.ts.map +1 -0
- package/dist/mcp/index.js +17 -0
- package/dist/mcp/index.js.map +1 -0
- package/dist/mcp/manager.d.ts +184 -0
- package/dist/mcp/manager.d.ts.map +1 -0
- package/dist/mcp/manager.js +446 -0
- package/dist/mcp/manager.js.map +1 -0
- package/dist/mcp/types.d.ts +58 -0
- package/dist/mcp/types.d.ts.map +1 -0
- package/dist/mcp/types.js +7 -0
- package/dist/mcp/types.js.map +1 -0
- package/dist/mcp/validation.d.ts +119 -0
- package/dist/mcp/validation.d.ts.map +1 -0
- package/dist/mcp/validation.js +407 -0
- package/dist/mcp/validation.js.map +1 -0
- package/dist/mcp/virtual-server.d.ts +78 -0
- package/dist/mcp/virtual-server.d.ts.map +1 -0
- package/dist/mcp/virtual-server.js +137 -0
- package/dist/mcp/virtual-server.js.map +1 -0
- package/dist/memory/filesystem-store.d.ts +217 -0
- package/dist/memory/filesystem-store.d.ts.map +1 -0
- package/dist/memory/filesystem-store.js +343 -0
- package/dist/memory/filesystem-store.js.map +1 -0
- package/dist/memory/index.d.ts +46 -0
- package/dist/memory/index.d.ts.map +1 -0
- package/dist/memory/index.js +46 -0
- package/dist/memory/index.js.map +1 -0
- package/dist/memory/loader.d.ts +396 -0
- package/dist/memory/loader.d.ts.map +1 -0
- package/dist/memory/loader.js +419 -0
- package/dist/memory/loader.js.map +1 -0
- package/dist/memory/permissions.d.ts +282 -0
- package/dist/memory/permissions.d.ts.map +1 -0
- package/dist/memory/permissions.js +297 -0
- package/dist/memory/permissions.js.map +1 -0
- package/dist/memory/rules.d.ts +249 -0
- package/dist/memory/rules.d.ts.map +1 -0
- package/dist/memory/rules.js +362 -0
- package/dist/memory/rules.js.map +1 -0
- package/dist/memory/store.d.ts +286 -0
- package/dist/memory/store.d.ts.map +1 -0
- package/dist/memory/store.js +263 -0
- package/dist/memory/store.js.map +1 -0
- package/dist/middleware/apply.d.ts +73 -0
- package/dist/middleware/apply.d.ts.map +1 -0
- package/dist/middleware/apply.js +219 -0
- package/dist/middleware/apply.js.map +1 -0
- package/dist/middleware/context.d.ts +33 -0
- package/dist/middleware/context.d.ts.map +1 -0
- package/dist/middleware/context.js +176 -0
- package/dist/middleware/context.js.map +1 -0
- package/dist/middleware/index.d.ts +31 -0
- package/dist/middleware/index.d.ts.map +1 -0
- package/dist/middleware/index.js +32 -0
- package/dist/middleware/index.js.map +1 -0
- package/dist/middleware/logging.d.ts +137 -0
- package/dist/middleware/logging.d.ts.map +1 -0
- package/dist/middleware/logging.js +374 -0
- package/dist/middleware/logging.js.map +1 -0
- package/dist/middleware/types.d.ts +183 -0
- package/dist/middleware/types.d.ts.map +1 -0
- package/dist/middleware/types.js +11 -0
- package/dist/middleware/types.js.map +1 -0
- package/dist/observability/events.d.ts +183 -0
- package/dist/observability/events.d.ts.map +1 -0
- package/dist/observability/events.js +305 -0
- package/dist/observability/events.js.map +1 -0
- package/dist/observability/index.d.ts +55 -0
- package/dist/observability/index.d.ts.map +1 -0
- package/dist/observability/index.js +87 -0
- package/dist/observability/index.js.map +1 -0
- package/dist/observability/logger.d.ts +318 -0
- package/dist/observability/logger.d.ts.map +1 -0
- package/dist/observability/logger.js +436 -0
- package/dist/observability/logger.js.map +1 -0
- package/dist/observability/metrics.d.ts +341 -0
- package/dist/observability/metrics.d.ts.map +1 -0
- package/dist/observability/metrics.js +490 -0
- package/dist/observability/metrics.js.map +1 -0
- package/dist/observability/preset.d.ts +161 -0
- package/dist/observability/preset.d.ts.map +1 -0
- package/dist/observability/preset.js +133 -0
- package/dist/observability/preset.js.map +1 -0
- package/dist/observability/streaming.d.ts +113 -0
- package/dist/observability/streaming.d.ts.map +1 -0
- package/dist/observability/streaming.js +114 -0
- package/dist/observability/streaming.js.map +1 -0
- package/dist/observability/tracing.d.ts +378 -0
- package/dist/observability/tracing.d.ts.map +1 -0
- package/dist/observability/tracing.js +539 -0
- package/dist/observability/tracing.js.map +1 -0
- package/dist/plugins.d.ts +55 -0
- package/dist/plugins.d.ts.map +1 -0
- package/dist/plugins.js +63 -0
- package/dist/plugins.js.map +1 -0
- package/dist/presets/index.d.ts +7 -0
- package/dist/presets/index.d.ts.map +1 -0
- package/dist/presets/index.js +7 -0
- package/dist/presets/index.js.map +1 -0
- package/dist/presets/production.d.ts +262 -0
- package/dist/presets/production.d.ts.map +1 -0
- package/dist/presets/production.js +295 -0
- package/dist/presets/production.js.map +1 -0
- package/dist/security/index.d.ts +179 -0
- package/dist/security/index.d.ts.map +1 -0
- package/dist/security/index.js +323 -0
- package/dist/security/index.js.map +1 -0
- package/dist/subagents/advanced.d.ts +413 -0
- package/dist/subagents/advanced.d.ts.map +1 -0
- package/dist/subagents/advanced.js +396 -0
- package/dist/subagents/advanced.js.map +1 -0
- package/dist/subagents/index.d.ts +14 -0
- package/dist/subagents/index.d.ts.map +1 -0
- package/dist/subagents/index.js +15 -0
- package/dist/subagents/index.js.map +1 -0
- package/dist/subagents.d.ts +73 -0
- package/dist/subagents.d.ts.map +1 -0
- package/dist/subagents.js +213 -0
- package/dist/subagents.js.map +1 -0
- package/dist/task-store/file-store.d.ts +76 -0
- package/dist/task-store/file-store.d.ts.map +1 -0
- package/dist/task-store/file-store.js +190 -0
- package/dist/task-store/file-store.js.map +1 -0
- package/dist/task-store/index.d.ts +11 -0
- package/dist/task-store/index.d.ts.map +1 -0
- package/dist/task-store/index.js +10 -0
- package/dist/task-store/index.js.map +1 -0
- package/dist/task-store/kv-store.d.ts +140 -0
- package/dist/task-store/kv-store.d.ts.map +1 -0
- package/dist/task-store/kv-store.js +169 -0
- package/dist/task-store/kv-store.js.map +1 -0
- package/dist/task-store/memory-store.d.ts +66 -0
- package/dist/task-store/memory-store.d.ts.map +1 -0
- package/dist/task-store/memory-store.js +125 -0
- package/dist/task-store/memory-store.js.map +1 -0
- package/dist/task-store/types.d.ts +235 -0
- package/dist/task-store/types.d.ts.map +1 -0
- package/dist/task-store/types.js +110 -0
- package/dist/task-store/types.js.map +1 -0
- package/dist/testing/assertions.d.ts +401 -0
- package/dist/testing/assertions.d.ts.map +1 -0
- package/dist/testing/assertions.js +630 -0
- package/dist/testing/assertions.js.map +1 -0
- package/dist/testing/index.d.ts +343 -0
- package/dist/testing/index.d.ts.map +1 -0
- package/dist/testing/index.js +360 -0
- package/dist/testing/index.js.map +1 -0
- package/dist/testing/mock-agent.d.ts +214 -0
- package/dist/testing/mock-agent.d.ts.map +1 -0
- package/dist/testing/mock-agent.js +448 -0
- package/dist/testing/mock-agent.js.map +1 -0
- package/dist/testing/recorder.d.ts +288 -0
- package/dist/testing/recorder.d.ts.map +1 -0
- package/dist/testing/recorder.js +499 -0
- package/dist/testing/recorder.js.map +1 -0
- package/dist/tools/execute.d.ts +104 -0
- package/dist/tools/execute.d.ts.map +1 -0
- package/dist/tools/execute.js +191 -0
- package/dist/tools/execute.js.map +1 -0
- package/dist/tools/factory.d.ts +260 -0
- package/dist/tools/factory.d.ts.map +1 -0
- package/dist/tools/factory.js +241 -0
- package/dist/tools/factory.js.map +1 -0
- package/dist/tools/filesystem.d.ts +215 -0
- package/dist/tools/filesystem.d.ts.map +1 -0
- package/dist/tools/filesystem.js +311 -0
- package/dist/tools/filesystem.js.map +1 -0
- package/dist/tools/index.d.ts +33 -0
- package/dist/tools/index.d.ts.map +1 -0
- package/dist/tools/index.js +33 -0
- package/dist/tools/index.js.map +1 -0
- package/dist/tools/search.d.ts +59 -0
- package/dist/tools/search.d.ts.map +1 -0
- package/dist/tools/search.js +94 -0
- package/dist/tools/search.js.map +1 -0
- package/dist/tools/skills.d.ts +354 -0
- package/dist/tools/skills.d.ts.map +1 -0
- package/dist/tools/skills.js +413 -0
- package/dist/tools/skills.js.map +1 -0
- package/dist/tools/task.d.ts +272 -0
- package/dist/tools/task.d.ts.map +1 -0
- package/dist/tools/task.js +521 -0
- package/dist/tools/task.js.map +1 -0
- package/dist/tools/todos.d.ts +131 -0
- package/dist/tools/todos.d.ts.map +1 -0
- package/dist/tools/todos.js +120 -0
- package/dist/tools/todos.js.map +1 -0
- package/dist/tools/tool-registry.d.ts +424 -0
- package/dist/tools/tool-registry.d.ts.map +1 -0
- package/dist/tools/tool-registry.js +607 -0
- package/dist/tools/tool-registry.js.map +1 -0
- package/dist/tools/user-interaction.d.ts +116 -0
- package/dist/tools/user-interaction.d.ts.map +1 -0
- package/dist/tools/user-interaction.js +147 -0
- package/dist/tools/user-interaction.js.map +1 -0
- package/dist/tools/utils.d.ts +124 -0
- package/dist/tools/utils.d.ts.map +1 -0
- package/dist/tools/utils.js +189 -0
- package/dist/tools/utils.js.map +1 -0
- package/dist/tools.d.ts +74 -0
- package/dist/tools.d.ts.map +1 -0
- package/dist/tools.js +73 -0
- package/dist/tools.js.map +1 -0
- package/dist/types.d.ts +2421 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +55 -0
- package/dist/types.js.map +1 -0
- package/package.json +81 -0
|
@@ -0,0 +1,182 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* File-based checkpoint saver for JSON persistence.
|
|
3
|
+
*
|
|
4
|
+
* FileSaver stores checkpoints as JSON files on disk, providing:
|
|
5
|
+
* - Persistence across process restarts
|
|
6
|
+
* - Human-readable checkpoint data
|
|
7
|
+
* - Simple backup and debugging capabilities
|
|
8
|
+
*
|
|
9
|
+
* Each checkpoint is stored as a separate JSON file: `{dir}/{threadId}.json`
|
|
10
|
+
*
|
|
11
|
+
* @example
|
|
12
|
+
* ```typescript
|
|
13
|
+
* const saver = new FileSaver({ dir: "./.checkpoints" });
|
|
14
|
+
*
|
|
15
|
+
* // Save a checkpoint
|
|
16
|
+
* await saver.save(checkpoint);
|
|
17
|
+
* // Creates: .checkpoints/session-123.json
|
|
18
|
+
*
|
|
19
|
+
* // Load it back
|
|
20
|
+
* const loaded = await saver.load("session-123");
|
|
21
|
+
* ```
|
|
22
|
+
*
|
|
23
|
+
* @packageDocumentation
|
|
24
|
+
*/
|
|
25
|
+
import type { BaseCheckpointSaver, Checkpoint, CheckpointSaverOptions } from "./types.js";
|
|
26
|
+
/**
|
|
27
|
+
* Options for creating a FileSaver.
|
|
28
|
+
*
|
|
29
|
+
* @category Checkpointer
|
|
30
|
+
*/
|
|
31
|
+
export interface FileSaverOptions extends CheckpointSaverOptions {
|
|
32
|
+
/**
|
|
33
|
+
* Directory path for storing checkpoint files.
|
|
34
|
+
*
|
|
35
|
+
* The directory will be created if it doesn't exist.
|
|
36
|
+
*/
|
|
37
|
+
dir: string;
|
|
38
|
+
/**
|
|
39
|
+
* File extension for checkpoint files.
|
|
40
|
+
* @defaultValue ".json"
|
|
41
|
+
*/
|
|
42
|
+
extension?: string;
|
|
43
|
+
/**
|
|
44
|
+
* Whether to format JSON with indentation for readability.
|
|
45
|
+
* @defaultValue true
|
|
46
|
+
*/
|
|
47
|
+
pretty?: boolean;
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* File-based checkpoint saver using JSON files.
|
|
51
|
+
*
|
|
52
|
+
* Stores each checkpoint as a separate JSON file in the specified directory.
|
|
53
|
+
* Thread IDs are sanitized to create safe filenames.
|
|
54
|
+
*
|
|
55
|
+
* @example
|
|
56
|
+
* ```typescript
|
|
57
|
+
* const saver = new FileSaver({ dir: "./.checkpoints" });
|
|
58
|
+
*
|
|
59
|
+
* // Save multiple checkpoints
|
|
60
|
+
* await saver.save(checkpoint1);
|
|
61
|
+
* await saver.save(checkpoint2);
|
|
62
|
+
*
|
|
63
|
+
* // List all threads
|
|
64
|
+
* const threads = await saver.list();
|
|
65
|
+
* // ["session-1", "session-2"]
|
|
66
|
+
*
|
|
67
|
+
* // Clean up
|
|
68
|
+
* for (const thread of threads) {
|
|
69
|
+
* await saver.delete(thread);
|
|
70
|
+
* }
|
|
71
|
+
* ```
|
|
72
|
+
*
|
|
73
|
+
* @category Checkpointer
|
|
74
|
+
*/
|
|
75
|
+
export declare class FileSaver implements BaseCheckpointSaver {
|
|
76
|
+
private readonly dir;
|
|
77
|
+
private readonly extension;
|
|
78
|
+
private readonly pretty;
|
|
79
|
+
private readonly namespace?;
|
|
80
|
+
private initialized;
|
|
81
|
+
/**
|
|
82
|
+
* Create a new FileSaver.
|
|
83
|
+
*
|
|
84
|
+
* @param options - Configuration including the directory path
|
|
85
|
+
*/
|
|
86
|
+
constructor(options: FileSaverOptions);
|
|
87
|
+
/**
|
|
88
|
+
* Save a checkpoint to a JSON file.
|
|
89
|
+
*
|
|
90
|
+
* Creates the directory if it doesn't exist.
|
|
91
|
+
* Overwrites existing checkpoint with the same threadId.
|
|
92
|
+
*
|
|
93
|
+
* @param checkpoint - The checkpoint to save
|
|
94
|
+
*/
|
|
95
|
+
save(checkpoint: Checkpoint): Promise<void>;
|
|
96
|
+
/**
|
|
97
|
+
* Load a checkpoint from a JSON file.
|
|
98
|
+
*
|
|
99
|
+
* @param threadId - The thread ID to load
|
|
100
|
+
* @returns The checkpoint if found and valid, undefined otherwise
|
|
101
|
+
*/
|
|
102
|
+
load(threadId: string): Promise<Checkpoint | undefined>;
|
|
103
|
+
/**
|
|
104
|
+
* List all thread IDs that have checkpoint files.
|
|
105
|
+
*
|
|
106
|
+
* @returns Array of thread IDs
|
|
107
|
+
*/
|
|
108
|
+
list(): Promise<string[]>;
|
|
109
|
+
/**
|
|
110
|
+
* Delete a checkpoint file.
|
|
111
|
+
*
|
|
112
|
+
* @param threadId - The thread ID to delete
|
|
113
|
+
* @returns True if a file was deleted, false if not found
|
|
114
|
+
*/
|
|
115
|
+
delete(threadId: string): Promise<boolean>;
|
|
116
|
+
/**
|
|
117
|
+
* Check if a checkpoint file exists.
|
|
118
|
+
*
|
|
119
|
+
* @param threadId - The thread ID to check
|
|
120
|
+
* @returns True if the file exists
|
|
121
|
+
*/
|
|
122
|
+
exists(threadId: string): Promise<boolean>;
|
|
123
|
+
/**
|
|
124
|
+
* Get the directory path where checkpoints are stored.
|
|
125
|
+
*/
|
|
126
|
+
getDir(): string;
|
|
127
|
+
/**
|
|
128
|
+
* Get the full file path for a thread ID.
|
|
129
|
+
*
|
|
130
|
+
* @param threadId - The thread ID
|
|
131
|
+
* @returns The full file path
|
|
132
|
+
*/
|
|
133
|
+
getFilePath(threadId: string): string;
|
|
134
|
+
/**
|
|
135
|
+
* Ensure the checkpoint directory exists.
|
|
136
|
+
* @internal
|
|
137
|
+
*/
|
|
138
|
+
private ensureInitialized;
|
|
139
|
+
/**
|
|
140
|
+
* Convert a thread ID to a safe filename.
|
|
141
|
+
*
|
|
142
|
+
* Sanitizes the thread ID to remove or replace characters that are
|
|
143
|
+
* problematic in filenames across different operating systems.
|
|
144
|
+
*
|
|
145
|
+
* @internal
|
|
146
|
+
*/
|
|
147
|
+
private threadIdToFile;
|
|
148
|
+
/**
|
|
149
|
+
* Convert a filename back to a thread ID.
|
|
150
|
+
*
|
|
151
|
+
* @internal
|
|
152
|
+
*/
|
|
153
|
+
private fileToThreadId;
|
|
154
|
+
}
|
|
155
|
+
/**
|
|
156
|
+
* Create a new FileSaver instance.
|
|
157
|
+
*
|
|
158
|
+
* @param options - Configuration including the directory path
|
|
159
|
+
* @returns A new FileSaver instance
|
|
160
|
+
*
|
|
161
|
+
* @example
|
|
162
|
+
* ```typescript
|
|
163
|
+
* // Basic usage
|
|
164
|
+
* const saver = createFileSaver({ dir: "./.checkpoints" });
|
|
165
|
+
*
|
|
166
|
+
* // With namespace for multi-tenant isolation
|
|
167
|
+
* const userSaver = createFileSaver({
|
|
168
|
+
* dir: "./.checkpoints",
|
|
169
|
+
* namespace: "user-123",
|
|
170
|
+
* });
|
|
171
|
+
*
|
|
172
|
+
* // Compact JSON (no pretty printing)
|
|
173
|
+
* const compactSaver = createFileSaver({
|
|
174
|
+
* dir: "./.checkpoints",
|
|
175
|
+
* pretty: false,
|
|
176
|
+
* });
|
|
177
|
+
* ```
|
|
178
|
+
*
|
|
179
|
+
* @category Checkpointer
|
|
180
|
+
*/
|
|
181
|
+
export declare function createFileSaver(options: FileSaverOptions): FileSaver;
|
|
182
|
+
//# sourceMappingURL=file-saver.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"file-saver.d.ts","sourceRoot":"","sources":["../../src/checkpointer/file-saver.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAIH,OAAO,KAAK,EAAE,mBAAmB,EAAE,UAAU,EAAE,sBAAsB,EAAE,MAAM,YAAY,CAAC;AAO1F;;;;GAIG;AACH,MAAM,WAAW,gBAAiB,SAAQ,sBAAsB;IAC9D;;;;OAIG;IACH,GAAG,EAAE,MAAM,CAAC;IAEZ;;;OAGG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB;;;OAGG;IACH,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAMD;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,qBAAa,SAAU,YAAW,mBAAmB;IACnD,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAS;IAC7B,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IACnC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAU;IACjC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAS;IACpC,OAAO,CAAC,WAAW,CAAS;IAE5B;;;;OAIG;gBACS,OAAO,EAAE,gBAAgB;IAOrC;;;;;;;OAOG;IACG,IAAI,CAAC,UAAU,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;IASjD;;;;;OAKG;IACG,IAAI,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,GAAG,SAAS,CAAC;IAuB7D;;;;OAIG;IACG,IAAI,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;IA0B/B;;;;;OAKG;IACG,MAAM,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAchD;;;;;OAKG;IACG,MAAM,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAehD;;OAEG;IACH,MAAM,IAAI,MAAM;IAIhB;;;;;OAKG;IACH,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM;IASrC;;;OAGG;YACW,iBAAiB;IAiB/B;;;;;;;OAOG;IACH,OAAO,CAAC,cAAc;IAmBtB;;;;OAIG;IACH,OAAO,CAAC,cAAc;CAqBvB;AAMD;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,gBAAgB,GAAG,SAAS,CAEpE"}
|
|
@@ -0,0 +1,298 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* File-based checkpoint saver for JSON persistence.
|
|
3
|
+
*
|
|
4
|
+
* FileSaver stores checkpoints as JSON files on disk, providing:
|
|
5
|
+
* - Persistence across process restarts
|
|
6
|
+
* - Human-readable checkpoint data
|
|
7
|
+
* - Simple backup and debugging capabilities
|
|
8
|
+
*
|
|
9
|
+
* Each checkpoint is stored as a separate JSON file: `{dir}/{threadId}.json`
|
|
10
|
+
*
|
|
11
|
+
* @example
|
|
12
|
+
* ```typescript
|
|
13
|
+
* const saver = new FileSaver({ dir: "./.checkpoints" });
|
|
14
|
+
*
|
|
15
|
+
* // Save a checkpoint
|
|
16
|
+
* await saver.save(checkpoint);
|
|
17
|
+
* // Creates: .checkpoints/session-123.json
|
|
18
|
+
*
|
|
19
|
+
* // Load it back
|
|
20
|
+
* const loaded = await saver.load("session-123");
|
|
21
|
+
* ```
|
|
22
|
+
*
|
|
23
|
+
* @packageDocumentation
|
|
24
|
+
*/
|
|
25
|
+
import * as fs from "node:fs/promises";
|
|
26
|
+
import * as path from "node:path";
|
|
27
|
+
import { isCheckpoint } from "./types.js";
|
|
28
|
+
// =============================================================================
|
|
29
|
+
// FileSaver Implementation
|
|
30
|
+
// =============================================================================
|
|
31
|
+
/**
|
|
32
|
+
* File-based checkpoint saver using JSON files.
|
|
33
|
+
*
|
|
34
|
+
* Stores each checkpoint as a separate JSON file in the specified directory.
|
|
35
|
+
* Thread IDs are sanitized to create safe filenames.
|
|
36
|
+
*
|
|
37
|
+
* @example
|
|
38
|
+
* ```typescript
|
|
39
|
+
* const saver = new FileSaver({ dir: "./.checkpoints" });
|
|
40
|
+
*
|
|
41
|
+
* // Save multiple checkpoints
|
|
42
|
+
* await saver.save(checkpoint1);
|
|
43
|
+
* await saver.save(checkpoint2);
|
|
44
|
+
*
|
|
45
|
+
* // List all threads
|
|
46
|
+
* const threads = await saver.list();
|
|
47
|
+
* // ["session-1", "session-2"]
|
|
48
|
+
*
|
|
49
|
+
* // Clean up
|
|
50
|
+
* for (const thread of threads) {
|
|
51
|
+
* await saver.delete(thread);
|
|
52
|
+
* }
|
|
53
|
+
* ```
|
|
54
|
+
*
|
|
55
|
+
* @category Checkpointer
|
|
56
|
+
*/
|
|
57
|
+
export class FileSaver {
|
|
58
|
+
dir;
|
|
59
|
+
extension;
|
|
60
|
+
pretty;
|
|
61
|
+
namespace;
|
|
62
|
+
initialized = false;
|
|
63
|
+
/**
|
|
64
|
+
* Create a new FileSaver.
|
|
65
|
+
*
|
|
66
|
+
* @param options - Configuration including the directory path
|
|
67
|
+
*/
|
|
68
|
+
constructor(options) {
|
|
69
|
+
this.dir = path.resolve(options.dir);
|
|
70
|
+
this.extension = options.extension ?? ".json";
|
|
71
|
+
this.pretty = options.pretty ?? true;
|
|
72
|
+
this.namespace = options.namespace;
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Save a checkpoint to a JSON file.
|
|
76
|
+
*
|
|
77
|
+
* Creates the directory if it doesn't exist.
|
|
78
|
+
* Overwrites existing checkpoint with the same threadId.
|
|
79
|
+
*
|
|
80
|
+
* @param checkpoint - The checkpoint to save
|
|
81
|
+
*/
|
|
82
|
+
async save(checkpoint) {
|
|
83
|
+
await this.ensureInitialized();
|
|
84
|
+
const filePath = this.getFilePath(checkpoint.threadId);
|
|
85
|
+
const data = this.pretty ? JSON.stringify(checkpoint, null, 2) : JSON.stringify(checkpoint);
|
|
86
|
+
await fs.writeFile(filePath, data, "utf-8");
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* Load a checkpoint from a JSON file.
|
|
90
|
+
*
|
|
91
|
+
* @param threadId - The thread ID to load
|
|
92
|
+
* @returns The checkpoint if found and valid, undefined otherwise
|
|
93
|
+
*/
|
|
94
|
+
async load(threadId) {
|
|
95
|
+
const filePath = this.getFilePath(threadId);
|
|
96
|
+
try {
|
|
97
|
+
const data = await fs.readFile(filePath, "utf-8");
|
|
98
|
+
const parsed = JSON.parse(data);
|
|
99
|
+
// Validate the parsed data
|
|
100
|
+
if (!isCheckpoint(parsed)) {
|
|
101
|
+
console.warn(`Invalid checkpoint data in ${filePath}, expected Checkpoint object`);
|
|
102
|
+
return undefined;
|
|
103
|
+
}
|
|
104
|
+
return parsed;
|
|
105
|
+
}
|
|
106
|
+
catch (error) {
|
|
107
|
+
// File not found or read error
|
|
108
|
+
if (error instanceof Error && "code" in error && error.code === "ENOENT") {
|
|
109
|
+
return undefined;
|
|
110
|
+
}
|
|
111
|
+
throw error;
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* List all thread IDs that have checkpoint files.
|
|
116
|
+
*
|
|
117
|
+
* @returns Array of thread IDs
|
|
118
|
+
*/
|
|
119
|
+
async list() {
|
|
120
|
+
await this.ensureInitialized();
|
|
121
|
+
try {
|
|
122
|
+
const files = await fs.readdir(this.dir);
|
|
123
|
+
const threads = [];
|
|
124
|
+
for (const file of files) {
|
|
125
|
+
if (file.endsWith(this.extension)) {
|
|
126
|
+
const threadId = this.fileToThreadId(file);
|
|
127
|
+
if (threadId) {
|
|
128
|
+
threads.push(threadId);
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
return threads;
|
|
133
|
+
}
|
|
134
|
+
catch (error) {
|
|
135
|
+
// Directory doesn't exist yet
|
|
136
|
+
if (error instanceof Error && "code" in error && error.code === "ENOENT") {
|
|
137
|
+
return [];
|
|
138
|
+
}
|
|
139
|
+
throw error;
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
/**
|
|
143
|
+
* Delete a checkpoint file.
|
|
144
|
+
*
|
|
145
|
+
* @param threadId - The thread ID to delete
|
|
146
|
+
* @returns True if a file was deleted, false if not found
|
|
147
|
+
*/
|
|
148
|
+
async delete(threadId) {
|
|
149
|
+
const filePath = this.getFilePath(threadId);
|
|
150
|
+
try {
|
|
151
|
+
await fs.unlink(filePath);
|
|
152
|
+
return true;
|
|
153
|
+
}
|
|
154
|
+
catch (error) {
|
|
155
|
+
if (error instanceof Error && "code" in error && error.code === "ENOENT") {
|
|
156
|
+
return false;
|
|
157
|
+
}
|
|
158
|
+
throw error;
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
/**
|
|
162
|
+
* Check if a checkpoint file exists.
|
|
163
|
+
*
|
|
164
|
+
* @param threadId - The thread ID to check
|
|
165
|
+
* @returns True if the file exists
|
|
166
|
+
*/
|
|
167
|
+
async exists(threadId) {
|
|
168
|
+
const filePath = this.getFilePath(threadId);
|
|
169
|
+
try {
|
|
170
|
+
await fs.access(filePath);
|
|
171
|
+
return true;
|
|
172
|
+
}
|
|
173
|
+
catch {
|
|
174
|
+
return false;
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
// ===========================================================================
|
|
178
|
+
// Additional Utility Methods
|
|
179
|
+
// ===========================================================================
|
|
180
|
+
/**
|
|
181
|
+
* Get the directory path where checkpoints are stored.
|
|
182
|
+
*/
|
|
183
|
+
getDir() {
|
|
184
|
+
return this.dir;
|
|
185
|
+
}
|
|
186
|
+
/**
|
|
187
|
+
* Get the full file path for a thread ID.
|
|
188
|
+
*
|
|
189
|
+
* @param threadId - The thread ID
|
|
190
|
+
* @returns The full file path
|
|
191
|
+
*/
|
|
192
|
+
getFilePath(threadId) {
|
|
193
|
+
const filename = this.threadIdToFile(threadId);
|
|
194
|
+
return path.join(this.dir, filename);
|
|
195
|
+
}
|
|
196
|
+
// ===========================================================================
|
|
197
|
+
// Private Helpers
|
|
198
|
+
// ===========================================================================
|
|
199
|
+
/**
|
|
200
|
+
* Ensure the checkpoint directory exists.
|
|
201
|
+
* @internal
|
|
202
|
+
*/
|
|
203
|
+
async ensureInitialized() {
|
|
204
|
+
if (this.initialized) {
|
|
205
|
+
return;
|
|
206
|
+
}
|
|
207
|
+
try {
|
|
208
|
+
await fs.mkdir(this.dir, { recursive: true });
|
|
209
|
+
}
|
|
210
|
+
catch (error) {
|
|
211
|
+
// Directory already exists is fine
|
|
212
|
+
if (!(error instanceof Error && "code" in error && error.code === "EEXIST")) {
|
|
213
|
+
throw error;
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
this.initialized = true;
|
|
217
|
+
}
|
|
218
|
+
/**
|
|
219
|
+
* Convert a thread ID to a safe filename.
|
|
220
|
+
*
|
|
221
|
+
* Sanitizes the thread ID to remove or replace characters that are
|
|
222
|
+
* problematic in filenames across different operating systems.
|
|
223
|
+
*
|
|
224
|
+
* @internal
|
|
225
|
+
*/
|
|
226
|
+
threadIdToFile(threadId) {
|
|
227
|
+
// Apply namespace prefix if configured
|
|
228
|
+
const prefixed = this.namespace ? `${this.namespace}_${threadId}` : threadId;
|
|
229
|
+
// Replace problematic characters with underscores
|
|
230
|
+
// Keep: alphanumeric, dash, underscore, dot
|
|
231
|
+
// Replace: slashes, colons, special chars
|
|
232
|
+
const sanitized = prefixed
|
|
233
|
+
.replace(/[/\\:*?"<>|]/g, "_")
|
|
234
|
+
.replace(/\s+/g, "_")
|
|
235
|
+
.replace(/_+/g, "_") // Collapse multiple underscores
|
|
236
|
+
.replace(/^_|_$/g, ""); // Trim leading/trailing underscores
|
|
237
|
+
// Ensure we have a valid filename
|
|
238
|
+
const filename = sanitized || "checkpoint";
|
|
239
|
+
return `${filename}${this.extension}`;
|
|
240
|
+
}
|
|
241
|
+
/**
|
|
242
|
+
* Convert a filename back to a thread ID.
|
|
243
|
+
*
|
|
244
|
+
* @internal
|
|
245
|
+
*/
|
|
246
|
+
fileToThreadId(filename) {
|
|
247
|
+
if (!filename.endsWith(this.extension)) {
|
|
248
|
+
return undefined;
|
|
249
|
+
}
|
|
250
|
+
// Remove extension
|
|
251
|
+
let threadId = filename.slice(0, -this.extension.length);
|
|
252
|
+
// Remove namespace prefix if configured
|
|
253
|
+
if (this.namespace) {
|
|
254
|
+
const prefix = `${this.namespace}_`;
|
|
255
|
+
if (threadId.startsWith(prefix)) {
|
|
256
|
+
threadId = threadId.slice(prefix.length);
|
|
257
|
+
}
|
|
258
|
+
else {
|
|
259
|
+
// File doesn't belong to this namespace
|
|
260
|
+
return undefined;
|
|
261
|
+
}
|
|
262
|
+
}
|
|
263
|
+
return threadId || undefined;
|
|
264
|
+
}
|
|
265
|
+
}
|
|
266
|
+
// =============================================================================
|
|
267
|
+
// Factory Function
|
|
268
|
+
// =============================================================================
|
|
269
|
+
/**
|
|
270
|
+
* Create a new FileSaver instance.
|
|
271
|
+
*
|
|
272
|
+
* @param options - Configuration including the directory path
|
|
273
|
+
* @returns A new FileSaver instance
|
|
274
|
+
*
|
|
275
|
+
* @example
|
|
276
|
+
* ```typescript
|
|
277
|
+
* // Basic usage
|
|
278
|
+
* const saver = createFileSaver({ dir: "./.checkpoints" });
|
|
279
|
+
*
|
|
280
|
+
* // With namespace for multi-tenant isolation
|
|
281
|
+
* const userSaver = createFileSaver({
|
|
282
|
+
* dir: "./.checkpoints",
|
|
283
|
+
* namespace: "user-123",
|
|
284
|
+
* });
|
|
285
|
+
*
|
|
286
|
+
* // Compact JSON (no pretty printing)
|
|
287
|
+
* const compactSaver = createFileSaver({
|
|
288
|
+
* dir: "./.checkpoints",
|
|
289
|
+
* pretty: false,
|
|
290
|
+
* });
|
|
291
|
+
* ```
|
|
292
|
+
*
|
|
293
|
+
* @category Checkpointer
|
|
294
|
+
*/
|
|
295
|
+
export function createFileSaver(options) {
|
|
296
|
+
return new FileSaver(options);
|
|
297
|
+
}
|
|
298
|
+
//# sourceMappingURL=file-saver.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"file-saver.js","sourceRoot":"","sources":["../../src/checkpointer/file-saver.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Checkpointer system for session persistence and resumption.
|
|
3
|
+
*
|
|
4
|
+
* This module provides tools for saving and restoring agent sessions,
|
|
5
|
+
* enabling:
|
|
6
|
+
* - Cross-conversation persistence
|
|
7
|
+
* - Session resumption after process restart
|
|
8
|
+
* - Tool approval interrupts
|
|
9
|
+
*
|
|
10
|
+
* ## Available Savers
|
|
11
|
+
*
|
|
12
|
+
* - **MemorySaver** - In-memory storage (ephemeral, for testing/development)
|
|
13
|
+
* - **FileSaver** - JSON file storage (persistent, human-readable)
|
|
14
|
+
* - **KeyValueStoreSaver** - Adapter for any KeyValueStore implementation
|
|
15
|
+
*
|
|
16
|
+
* @example
|
|
17
|
+
* ```typescript
|
|
18
|
+
* import { MemorySaver, FileSaver, KeyValueStoreSaver } from "@lleverage-ai/agent-sdk";
|
|
19
|
+
*
|
|
20
|
+
* // For testing
|
|
21
|
+
* const memorySaver = new MemorySaver();
|
|
22
|
+
*
|
|
23
|
+
* // For persistence
|
|
24
|
+
* const fileSaver = new FileSaver({ dir: "./.checkpoints" });
|
|
25
|
+
*
|
|
26
|
+
* // For custom storage (Redis, SQLite, etc.)
|
|
27
|
+
* const kvSaver = new KeyValueStoreSaver({ store: myCustomStore });
|
|
28
|
+
* ```
|
|
29
|
+
*
|
|
30
|
+
* @packageDocumentation
|
|
31
|
+
*/
|
|
32
|
+
export type { FileSaverOptions } from "./file-saver.js";
|
|
33
|
+
export { createFileSaver, FileSaver } from "./file-saver.js";
|
|
34
|
+
export type { KeyValueStoreSaverOptions } from "./kv-saver.js";
|
|
35
|
+
export { createKeyValueStoreSaver, KeyValueStoreSaver } from "./kv-saver.js";
|
|
36
|
+
export type { MemorySaverOptions } from "./memory-saver.js";
|
|
37
|
+
export { createMemorySaver, MemorySaver } from "./memory-saver.js";
|
|
38
|
+
export type { ApprovalInterrupt, ApprovalRequest, ApprovalResponse, BaseCheckpointSaver, Checkpoint, CheckpointEvent, CheckpointLoadedEvent, CheckpointSavedEvent, CheckpointSaverOptions, Interrupt, } from "./types.js";
|
|
39
|
+
export { createApprovalInterrupt, createCheckpoint, createInterrupt, isApprovalInterrupt, isCheckpoint, isInterrupt, updateCheckpoint, } from "./types.js";
|
|
40
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/checkpointer/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AAEH,YAAY,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAExD,OAAO,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC7D,YAAY,EAAE,yBAAyB,EAAE,MAAM,eAAe,CAAC;AAE/D,OAAO,EAAE,wBAAwB,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAC7E,YAAY,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAE5D,OAAO,EAAE,iBAAiB,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AACnE,YAAY,EACV,iBAAiB,EACjB,eAAe,EACf,gBAAgB,EAChB,mBAAmB,EACnB,UAAU,EACV,eAAe,EACf,qBAAqB,EACrB,oBAAoB,EACpB,sBAAsB,EACtB,SAAS,GACV,MAAM,YAAY,CAAC;AAEpB,OAAO,EACL,uBAAuB,EACvB,gBAAgB,EAChB,eAAe,EACf,mBAAmB,EACnB,YAAY,EACZ,WAAW,EACX,gBAAgB,GACjB,MAAM,YAAY,CAAC"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Checkpointer system for session persistence and resumption.
|
|
3
|
+
*
|
|
4
|
+
* This module provides tools for saving and restoring agent sessions,
|
|
5
|
+
* enabling:
|
|
6
|
+
* - Cross-conversation persistence
|
|
7
|
+
* - Session resumption after process restart
|
|
8
|
+
* - Tool approval interrupts
|
|
9
|
+
*
|
|
10
|
+
* ## Available Savers
|
|
11
|
+
*
|
|
12
|
+
* - **MemorySaver** - In-memory storage (ephemeral, for testing/development)
|
|
13
|
+
* - **FileSaver** - JSON file storage (persistent, human-readable)
|
|
14
|
+
* - **KeyValueStoreSaver** - Adapter for any KeyValueStore implementation
|
|
15
|
+
*
|
|
16
|
+
* @example
|
|
17
|
+
* ```typescript
|
|
18
|
+
* import { MemorySaver, FileSaver, KeyValueStoreSaver } from "@lleverage-ai/agent-sdk";
|
|
19
|
+
*
|
|
20
|
+
* // For testing
|
|
21
|
+
* const memorySaver = new MemorySaver();
|
|
22
|
+
*
|
|
23
|
+
* // For persistence
|
|
24
|
+
* const fileSaver = new FileSaver({ dir: "./.checkpoints" });
|
|
25
|
+
*
|
|
26
|
+
* // For custom storage (Redis, SQLite, etc.)
|
|
27
|
+
* const kvSaver = new KeyValueStoreSaver({ store: myCustomStore });
|
|
28
|
+
* ```
|
|
29
|
+
*
|
|
30
|
+
* @packageDocumentation
|
|
31
|
+
*/
|
|
32
|
+
// File Saver
|
|
33
|
+
export { createFileSaver, FileSaver } from "./file-saver.js";
|
|
34
|
+
// KeyValueStore Saver
|
|
35
|
+
export { createKeyValueStoreSaver, KeyValueStoreSaver } from "./kv-saver.js";
|
|
36
|
+
// Memory Saver
|
|
37
|
+
export { createMemorySaver, MemorySaver } from "./memory-saver.js";
|
|
38
|
+
// Types
|
|
39
|
+
export { createApprovalInterrupt, createCheckpoint, createInterrupt, isApprovalInterrupt, isCheckpoint, isInterrupt, updateCheckpoint, } from "./types.js";
|
|
40
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/checkpointer/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AAGH,aAAa;AACb,OAAO,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAE7D,sBAAsB;AACtB,OAAO,EAAE,wBAAwB,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAE7E,eAAe;AACf,OAAO,EAAE,iBAAiB,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAanE,QAAQ;AACR,OAAO,EACL,uBAAuB,EACvB,gBAAgB,EAChB,eAAe,EACf,mBAAmB,EACnB,YAAY,EACZ,WAAW,EACX,gBAAgB,GACjB,MAAM,YAAY,CAAC"}
|