@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.
Files changed (327) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +2321 -0
  3. package/dist/agent.d.ts +52 -0
  4. package/dist/agent.d.ts.map +1 -0
  5. package/dist/agent.js +2122 -0
  6. package/dist/agent.js.map +1 -0
  7. package/dist/backend.d.ts +378 -0
  8. package/dist/backend.d.ts.map +1 -0
  9. package/dist/backend.js +71 -0
  10. package/dist/backend.js.map +1 -0
  11. package/dist/backends/composite.d.ts +258 -0
  12. package/dist/backends/composite.d.ts.map +1 -0
  13. package/dist/backends/composite.js +437 -0
  14. package/dist/backends/composite.js.map +1 -0
  15. package/dist/backends/filesystem.d.ts +268 -0
  16. package/dist/backends/filesystem.d.ts.map +1 -0
  17. package/dist/backends/filesystem.js +623 -0
  18. package/dist/backends/filesystem.js.map +1 -0
  19. package/dist/backends/index.d.ts +14 -0
  20. package/dist/backends/index.d.ts.map +1 -0
  21. package/dist/backends/index.js +14 -0
  22. package/dist/backends/index.js.map +1 -0
  23. package/dist/backends/persistent.d.ts +312 -0
  24. package/dist/backends/persistent.d.ts.map +1 -0
  25. package/dist/backends/persistent.js +519 -0
  26. package/dist/backends/persistent.js.map +1 -0
  27. package/dist/backends/sandbox.d.ts +315 -0
  28. package/dist/backends/sandbox.d.ts.map +1 -0
  29. package/dist/backends/sandbox.js +490 -0
  30. package/dist/backends/sandbox.js.map +1 -0
  31. package/dist/backends/state.d.ts +225 -0
  32. package/dist/backends/state.d.ts.map +1 -0
  33. package/dist/backends/state.js +396 -0
  34. package/dist/backends/state.js.map +1 -0
  35. package/dist/checkpointer/file-saver.d.ts +182 -0
  36. package/dist/checkpointer/file-saver.d.ts.map +1 -0
  37. package/dist/checkpointer/file-saver.js +298 -0
  38. package/dist/checkpointer/file-saver.js.map +1 -0
  39. package/dist/checkpointer/index.d.ts +40 -0
  40. package/dist/checkpointer/index.d.ts.map +1 -0
  41. package/dist/checkpointer/index.js +40 -0
  42. package/dist/checkpointer/index.js.map +1 -0
  43. package/dist/checkpointer/kv-saver.d.ts +142 -0
  44. package/dist/checkpointer/kv-saver.d.ts.map +1 -0
  45. package/dist/checkpointer/kv-saver.js +176 -0
  46. package/dist/checkpointer/kv-saver.js.map +1 -0
  47. package/dist/checkpointer/memory-saver.d.ts +158 -0
  48. package/dist/checkpointer/memory-saver.d.ts.map +1 -0
  49. package/dist/checkpointer/memory-saver.js +222 -0
  50. package/dist/checkpointer/memory-saver.js.map +1 -0
  51. package/dist/checkpointer/types.d.ts +353 -0
  52. package/dist/checkpointer/types.d.ts.map +1 -0
  53. package/dist/checkpointer/types.js +159 -0
  54. package/dist/checkpointer/types.js.map +1 -0
  55. package/dist/context-manager.d.ts +627 -0
  56. package/dist/context-manager.d.ts.map +1 -0
  57. package/dist/context-manager.js +1039 -0
  58. package/dist/context-manager.js.map +1 -0
  59. package/dist/context.d.ts +57 -0
  60. package/dist/context.d.ts.map +1 -0
  61. package/dist/context.js +76 -0
  62. package/dist/context.js.map +1 -0
  63. package/dist/errors/index.d.ts +611 -0
  64. package/dist/errors/index.d.ts.map +1 -0
  65. package/dist/errors/index.js +1023 -0
  66. package/dist/errors/index.js.map +1 -0
  67. package/dist/generation-helpers.d.ts +126 -0
  68. package/dist/generation-helpers.d.ts.map +1 -0
  69. package/dist/generation-helpers.js +181 -0
  70. package/dist/generation-helpers.js.map +1 -0
  71. package/dist/hooks/audit.d.ts +210 -0
  72. package/dist/hooks/audit.d.ts.map +1 -0
  73. package/dist/hooks/audit.js +305 -0
  74. package/dist/hooks/audit.js.map +1 -0
  75. package/dist/hooks/cache.d.ts +180 -0
  76. package/dist/hooks/cache.d.ts.map +1 -0
  77. package/dist/hooks/cache.js +273 -0
  78. package/dist/hooks/cache.js.map +1 -0
  79. package/dist/hooks/guardrails.d.ts +145 -0
  80. package/dist/hooks/guardrails.d.ts.map +1 -0
  81. package/dist/hooks/guardrails.js +326 -0
  82. package/dist/hooks/guardrails.js.map +1 -0
  83. package/dist/hooks/index.d.ts +18 -0
  84. package/dist/hooks/index.d.ts.map +1 -0
  85. package/dist/hooks/index.js +32 -0
  86. package/dist/hooks/index.js.map +1 -0
  87. package/dist/hooks/logging.d.ts +193 -0
  88. package/dist/hooks/logging.d.ts.map +1 -0
  89. package/dist/hooks/logging.js +345 -0
  90. package/dist/hooks/logging.js.map +1 -0
  91. package/dist/hooks/parallel-guardrails.d.ts +268 -0
  92. package/dist/hooks/parallel-guardrails.d.ts.map +1 -0
  93. package/dist/hooks/parallel-guardrails.js +416 -0
  94. package/dist/hooks/parallel-guardrails.js.map +1 -0
  95. package/dist/hooks/rate-limit.d.ts +305 -0
  96. package/dist/hooks/rate-limit.d.ts.map +1 -0
  97. package/dist/hooks/rate-limit.js +372 -0
  98. package/dist/hooks/rate-limit.js.map +1 -0
  99. package/dist/hooks/retry.d.ts +144 -0
  100. package/dist/hooks/retry.d.ts.map +1 -0
  101. package/dist/hooks/retry.js +210 -0
  102. package/dist/hooks/retry.js.map +1 -0
  103. package/dist/hooks/secrets.d.ts +174 -0
  104. package/dist/hooks/secrets.d.ts.map +1 -0
  105. package/dist/hooks/secrets.js +306 -0
  106. package/dist/hooks/secrets.js.map +1 -0
  107. package/dist/hooks.d.ts +229 -0
  108. package/dist/hooks.d.ts.map +1 -0
  109. package/dist/hooks.js +352 -0
  110. package/dist/hooks.js.map +1 -0
  111. package/dist/index.d.ts +97 -0
  112. package/dist/index.d.ts.map +1 -0
  113. package/dist/index.js +182 -0
  114. package/dist/index.js.map +1 -0
  115. package/dist/mcp/env.d.ts +25 -0
  116. package/dist/mcp/env.d.ts.map +1 -0
  117. package/dist/mcp/env.js +18 -0
  118. package/dist/mcp/env.js.map +1 -0
  119. package/dist/mcp/index.d.ts +16 -0
  120. package/dist/mcp/index.d.ts.map +1 -0
  121. package/dist/mcp/index.js +17 -0
  122. package/dist/mcp/index.js.map +1 -0
  123. package/dist/mcp/manager.d.ts +184 -0
  124. package/dist/mcp/manager.d.ts.map +1 -0
  125. package/dist/mcp/manager.js +446 -0
  126. package/dist/mcp/manager.js.map +1 -0
  127. package/dist/mcp/types.d.ts +58 -0
  128. package/dist/mcp/types.d.ts.map +1 -0
  129. package/dist/mcp/types.js +7 -0
  130. package/dist/mcp/types.js.map +1 -0
  131. package/dist/mcp/validation.d.ts +119 -0
  132. package/dist/mcp/validation.d.ts.map +1 -0
  133. package/dist/mcp/validation.js +407 -0
  134. package/dist/mcp/validation.js.map +1 -0
  135. package/dist/mcp/virtual-server.d.ts +78 -0
  136. package/dist/mcp/virtual-server.d.ts.map +1 -0
  137. package/dist/mcp/virtual-server.js +137 -0
  138. package/dist/mcp/virtual-server.js.map +1 -0
  139. package/dist/memory/filesystem-store.d.ts +217 -0
  140. package/dist/memory/filesystem-store.d.ts.map +1 -0
  141. package/dist/memory/filesystem-store.js +343 -0
  142. package/dist/memory/filesystem-store.js.map +1 -0
  143. package/dist/memory/index.d.ts +46 -0
  144. package/dist/memory/index.d.ts.map +1 -0
  145. package/dist/memory/index.js +46 -0
  146. package/dist/memory/index.js.map +1 -0
  147. package/dist/memory/loader.d.ts +396 -0
  148. package/dist/memory/loader.d.ts.map +1 -0
  149. package/dist/memory/loader.js +419 -0
  150. package/dist/memory/loader.js.map +1 -0
  151. package/dist/memory/permissions.d.ts +282 -0
  152. package/dist/memory/permissions.d.ts.map +1 -0
  153. package/dist/memory/permissions.js +297 -0
  154. package/dist/memory/permissions.js.map +1 -0
  155. package/dist/memory/rules.d.ts +249 -0
  156. package/dist/memory/rules.d.ts.map +1 -0
  157. package/dist/memory/rules.js +362 -0
  158. package/dist/memory/rules.js.map +1 -0
  159. package/dist/memory/store.d.ts +286 -0
  160. package/dist/memory/store.d.ts.map +1 -0
  161. package/dist/memory/store.js +263 -0
  162. package/dist/memory/store.js.map +1 -0
  163. package/dist/middleware/apply.d.ts +73 -0
  164. package/dist/middleware/apply.d.ts.map +1 -0
  165. package/dist/middleware/apply.js +219 -0
  166. package/dist/middleware/apply.js.map +1 -0
  167. package/dist/middleware/context.d.ts +33 -0
  168. package/dist/middleware/context.d.ts.map +1 -0
  169. package/dist/middleware/context.js +176 -0
  170. package/dist/middleware/context.js.map +1 -0
  171. package/dist/middleware/index.d.ts +31 -0
  172. package/dist/middleware/index.d.ts.map +1 -0
  173. package/dist/middleware/index.js +32 -0
  174. package/dist/middleware/index.js.map +1 -0
  175. package/dist/middleware/logging.d.ts +137 -0
  176. package/dist/middleware/logging.d.ts.map +1 -0
  177. package/dist/middleware/logging.js +374 -0
  178. package/dist/middleware/logging.js.map +1 -0
  179. package/dist/middleware/types.d.ts +183 -0
  180. package/dist/middleware/types.d.ts.map +1 -0
  181. package/dist/middleware/types.js +11 -0
  182. package/dist/middleware/types.js.map +1 -0
  183. package/dist/observability/events.d.ts +183 -0
  184. package/dist/observability/events.d.ts.map +1 -0
  185. package/dist/observability/events.js +305 -0
  186. package/dist/observability/events.js.map +1 -0
  187. package/dist/observability/index.d.ts +55 -0
  188. package/dist/observability/index.d.ts.map +1 -0
  189. package/dist/observability/index.js +87 -0
  190. package/dist/observability/index.js.map +1 -0
  191. package/dist/observability/logger.d.ts +318 -0
  192. package/dist/observability/logger.d.ts.map +1 -0
  193. package/dist/observability/logger.js +436 -0
  194. package/dist/observability/logger.js.map +1 -0
  195. package/dist/observability/metrics.d.ts +341 -0
  196. package/dist/observability/metrics.d.ts.map +1 -0
  197. package/dist/observability/metrics.js +490 -0
  198. package/dist/observability/metrics.js.map +1 -0
  199. package/dist/observability/preset.d.ts +161 -0
  200. package/dist/observability/preset.d.ts.map +1 -0
  201. package/dist/observability/preset.js +133 -0
  202. package/dist/observability/preset.js.map +1 -0
  203. package/dist/observability/streaming.d.ts +113 -0
  204. package/dist/observability/streaming.d.ts.map +1 -0
  205. package/dist/observability/streaming.js +114 -0
  206. package/dist/observability/streaming.js.map +1 -0
  207. package/dist/observability/tracing.d.ts +378 -0
  208. package/dist/observability/tracing.d.ts.map +1 -0
  209. package/dist/observability/tracing.js +539 -0
  210. package/dist/observability/tracing.js.map +1 -0
  211. package/dist/plugins.d.ts +55 -0
  212. package/dist/plugins.d.ts.map +1 -0
  213. package/dist/plugins.js +63 -0
  214. package/dist/plugins.js.map +1 -0
  215. package/dist/presets/index.d.ts +7 -0
  216. package/dist/presets/index.d.ts.map +1 -0
  217. package/dist/presets/index.js +7 -0
  218. package/dist/presets/index.js.map +1 -0
  219. package/dist/presets/production.d.ts +262 -0
  220. package/dist/presets/production.d.ts.map +1 -0
  221. package/dist/presets/production.js +295 -0
  222. package/dist/presets/production.js.map +1 -0
  223. package/dist/security/index.d.ts +179 -0
  224. package/dist/security/index.d.ts.map +1 -0
  225. package/dist/security/index.js +323 -0
  226. package/dist/security/index.js.map +1 -0
  227. package/dist/subagents/advanced.d.ts +413 -0
  228. package/dist/subagents/advanced.d.ts.map +1 -0
  229. package/dist/subagents/advanced.js +396 -0
  230. package/dist/subagents/advanced.js.map +1 -0
  231. package/dist/subagents/index.d.ts +14 -0
  232. package/dist/subagents/index.d.ts.map +1 -0
  233. package/dist/subagents/index.js +15 -0
  234. package/dist/subagents/index.js.map +1 -0
  235. package/dist/subagents.d.ts +73 -0
  236. package/dist/subagents.d.ts.map +1 -0
  237. package/dist/subagents.js +213 -0
  238. package/dist/subagents.js.map +1 -0
  239. package/dist/task-store/file-store.d.ts +76 -0
  240. package/dist/task-store/file-store.d.ts.map +1 -0
  241. package/dist/task-store/file-store.js +190 -0
  242. package/dist/task-store/file-store.js.map +1 -0
  243. package/dist/task-store/index.d.ts +11 -0
  244. package/dist/task-store/index.d.ts.map +1 -0
  245. package/dist/task-store/index.js +10 -0
  246. package/dist/task-store/index.js.map +1 -0
  247. package/dist/task-store/kv-store.d.ts +140 -0
  248. package/dist/task-store/kv-store.d.ts.map +1 -0
  249. package/dist/task-store/kv-store.js +169 -0
  250. package/dist/task-store/kv-store.js.map +1 -0
  251. package/dist/task-store/memory-store.d.ts +66 -0
  252. package/dist/task-store/memory-store.d.ts.map +1 -0
  253. package/dist/task-store/memory-store.js +125 -0
  254. package/dist/task-store/memory-store.js.map +1 -0
  255. package/dist/task-store/types.d.ts +235 -0
  256. package/dist/task-store/types.d.ts.map +1 -0
  257. package/dist/task-store/types.js +110 -0
  258. package/dist/task-store/types.js.map +1 -0
  259. package/dist/testing/assertions.d.ts +401 -0
  260. package/dist/testing/assertions.d.ts.map +1 -0
  261. package/dist/testing/assertions.js +630 -0
  262. package/dist/testing/assertions.js.map +1 -0
  263. package/dist/testing/index.d.ts +343 -0
  264. package/dist/testing/index.d.ts.map +1 -0
  265. package/dist/testing/index.js +360 -0
  266. package/dist/testing/index.js.map +1 -0
  267. package/dist/testing/mock-agent.d.ts +214 -0
  268. package/dist/testing/mock-agent.d.ts.map +1 -0
  269. package/dist/testing/mock-agent.js +448 -0
  270. package/dist/testing/mock-agent.js.map +1 -0
  271. package/dist/testing/recorder.d.ts +288 -0
  272. package/dist/testing/recorder.d.ts.map +1 -0
  273. package/dist/testing/recorder.js +499 -0
  274. package/dist/testing/recorder.js.map +1 -0
  275. package/dist/tools/execute.d.ts +104 -0
  276. package/dist/tools/execute.d.ts.map +1 -0
  277. package/dist/tools/execute.js +191 -0
  278. package/dist/tools/execute.js.map +1 -0
  279. package/dist/tools/factory.d.ts +260 -0
  280. package/dist/tools/factory.d.ts.map +1 -0
  281. package/dist/tools/factory.js +241 -0
  282. package/dist/tools/factory.js.map +1 -0
  283. package/dist/tools/filesystem.d.ts +215 -0
  284. package/dist/tools/filesystem.d.ts.map +1 -0
  285. package/dist/tools/filesystem.js +311 -0
  286. package/dist/tools/filesystem.js.map +1 -0
  287. package/dist/tools/index.d.ts +33 -0
  288. package/dist/tools/index.d.ts.map +1 -0
  289. package/dist/tools/index.js +33 -0
  290. package/dist/tools/index.js.map +1 -0
  291. package/dist/tools/search.d.ts +59 -0
  292. package/dist/tools/search.d.ts.map +1 -0
  293. package/dist/tools/search.js +94 -0
  294. package/dist/tools/search.js.map +1 -0
  295. package/dist/tools/skills.d.ts +354 -0
  296. package/dist/tools/skills.d.ts.map +1 -0
  297. package/dist/tools/skills.js +413 -0
  298. package/dist/tools/skills.js.map +1 -0
  299. package/dist/tools/task.d.ts +272 -0
  300. package/dist/tools/task.d.ts.map +1 -0
  301. package/dist/tools/task.js +521 -0
  302. package/dist/tools/task.js.map +1 -0
  303. package/dist/tools/todos.d.ts +131 -0
  304. package/dist/tools/todos.d.ts.map +1 -0
  305. package/dist/tools/todos.js +120 -0
  306. package/dist/tools/todos.js.map +1 -0
  307. package/dist/tools/tool-registry.d.ts +424 -0
  308. package/dist/tools/tool-registry.d.ts.map +1 -0
  309. package/dist/tools/tool-registry.js +607 -0
  310. package/dist/tools/tool-registry.js.map +1 -0
  311. package/dist/tools/user-interaction.d.ts +116 -0
  312. package/dist/tools/user-interaction.d.ts.map +1 -0
  313. package/dist/tools/user-interaction.js +147 -0
  314. package/dist/tools/user-interaction.js.map +1 -0
  315. package/dist/tools/utils.d.ts +124 -0
  316. package/dist/tools/utils.d.ts.map +1 -0
  317. package/dist/tools/utils.js +189 -0
  318. package/dist/tools/utils.js.map +1 -0
  319. package/dist/tools.d.ts +74 -0
  320. package/dist/tools.d.ts.map +1 -0
  321. package/dist/tools.js +73 -0
  322. package/dist/tools.js.map +1 -0
  323. package/dist/types.d.ts +2421 -0
  324. package/dist/types.d.ts.map +1 -0
  325. package/dist/types.js +55 -0
  326. package/dist/types.js.map +1 -0
  327. package/package.json +81 -0
@@ -0,0 +1,222 @@
1
+ /**
2
+ * In-memory checkpoint saver for ephemeral storage.
3
+ *
4
+ * MemorySaver stores checkpoints in a Map, making it ideal for:
5
+ * - Development and testing
6
+ * - Single-session applications
7
+ * - Scenarios where persistence is not required
8
+ *
9
+ * Note: All data is lost when the process ends.
10
+ *
11
+ * @example
12
+ * ```typescript
13
+ * const saver = new MemorySaver();
14
+ *
15
+ * // Save a checkpoint
16
+ * await saver.save({
17
+ * threadId: "session-123",
18
+ * messages: [...],
19
+ * state: { todos: [], files: {} },
20
+ * step: 0,
21
+ * createdAt: new Date().toISOString(),
22
+ * updatedAt: new Date().toISOString(),
23
+ * });
24
+ *
25
+ * // Load it back
26
+ * const checkpoint = await saver.load("session-123");
27
+ * ```
28
+ *
29
+ * @packageDocumentation
30
+ */
31
+ /**
32
+ * In-memory checkpoint saver.
33
+ *
34
+ * Stores checkpoints in a JavaScript Map for fast access.
35
+ * All data is ephemeral and lost when the process terminates.
36
+ *
37
+ * @example
38
+ * ```typescript
39
+ * const saver = new MemorySaver();
40
+ *
41
+ * // Save a checkpoint
42
+ * await saver.save(checkpoint);
43
+ *
44
+ * // List all threads
45
+ * const threads = await saver.list();
46
+ *
47
+ * // Load a specific thread
48
+ * const loaded = await saver.load(threads[0]);
49
+ *
50
+ * // Delete when done
51
+ * await saver.delete(threads[0]);
52
+ * ```
53
+ *
54
+ * @category Checkpointer
55
+ */
56
+ export class MemorySaver {
57
+ checkpoints = new Map();
58
+ namespace;
59
+ /**
60
+ * Create a new MemorySaver.
61
+ *
62
+ * @param options - Optional configuration
63
+ */
64
+ constructor(options) {
65
+ this.namespace = options?.namespace;
66
+ // Populate with initial checkpoints if provided
67
+ if (options?.initialCheckpoints) {
68
+ for (const checkpoint of options.initialCheckpoints) {
69
+ const key = this.getKey(checkpoint.threadId);
70
+ // Deep copy to prevent external mutation
71
+ this.checkpoints.set(key, this.deepCopy(checkpoint));
72
+ }
73
+ }
74
+ }
75
+ /**
76
+ * Save a checkpoint.
77
+ *
78
+ * If a checkpoint with the same threadId exists, it will be overwritten.
79
+ * The checkpoint is deep-copied to prevent external mutation.
80
+ *
81
+ * @param checkpoint - The checkpoint to save
82
+ */
83
+ async save(checkpoint) {
84
+ const key = this.getKey(checkpoint.threadId);
85
+ // Deep copy to prevent external mutation affecting stored data
86
+ this.checkpoints.set(key, this.deepCopy(checkpoint));
87
+ }
88
+ /**
89
+ * Load a checkpoint by thread ID.
90
+ *
91
+ * Returns a deep copy to prevent external mutation of stored data.
92
+ *
93
+ * @param threadId - The thread ID to load
94
+ * @returns The checkpoint if found, undefined otherwise
95
+ */
96
+ async load(threadId) {
97
+ const key = this.getKey(threadId);
98
+ const checkpoint = this.checkpoints.get(key);
99
+ // Return deep copy to prevent external mutation
100
+ return checkpoint ? this.deepCopy(checkpoint) : undefined;
101
+ }
102
+ /**
103
+ * List all thread IDs that have checkpoints.
104
+ *
105
+ * If a namespace is configured, only returns threads within that namespace.
106
+ *
107
+ * @returns Array of thread IDs
108
+ */
109
+ async list() {
110
+ const threads = [];
111
+ const prefix = this.namespace ? `${this.namespace}:` : "";
112
+ for (const key of this.checkpoints.keys()) {
113
+ if (this.namespace) {
114
+ if (key.startsWith(prefix)) {
115
+ threads.push(key.slice(prefix.length));
116
+ }
117
+ }
118
+ else {
119
+ threads.push(key);
120
+ }
121
+ }
122
+ return threads;
123
+ }
124
+ /**
125
+ * Delete a checkpoint.
126
+ *
127
+ * @param threadId - The thread ID to delete
128
+ * @returns True if a checkpoint was deleted, false if not found
129
+ */
130
+ async delete(threadId) {
131
+ const key = this.getKey(threadId);
132
+ return this.checkpoints.delete(key);
133
+ }
134
+ /**
135
+ * Check if a checkpoint exists.
136
+ *
137
+ * @param threadId - The thread ID to check
138
+ * @returns True if the checkpoint exists
139
+ */
140
+ async exists(threadId) {
141
+ const key = this.getKey(threadId);
142
+ return this.checkpoints.has(key);
143
+ }
144
+ // ===========================================================================
145
+ // Additional Utility Methods
146
+ // ===========================================================================
147
+ /**
148
+ * Get the number of stored checkpoints.
149
+ *
150
+ * If a namespace is configured, returns count within that namespace only.
151
+ */
152
+ get size() {
153
+ if (!this.namespace) {
154
+ return this.checkpoints.size;
155
+ }
156
+ const prefix = `${this.namespace}:`;
157
+ let count = 0;
158
+ for (const key of this.checkpoints.keys()) {
159
+ if (key.startsWith(prefix)) {
160
+ count++;
161
+ }
162
+ }
163
+ return count;
164
+ }
165
+ /**
166
+ * Clear all stored checkpoints.
167
+ *
168
+ * If a namespace is configured, only clears checkpoints within that namespace.
169
+ */
170
+ clear() {
171
+ if (!this.namespace) {
172
+ this.checkpoints.clear();
173
+ return;
174
+ }
175
+ const prefix = `${this.namespace}:`;
176
+ for (const key of [...this.checkpoints.keys()]) {
177
+ if (key.startsWith(prefix)) {
178
+ this.checkpoints.delete(key);
179
+ }
180
+ }
181
+ }
182
+ // ===========================================================================
183
+ // Private Helpers
184
+ // ===========================================================================
185
+ /**
186
+ * Get the storage key for a thread ID.
187
+ * @internal
188
+ */
189
+ getKey(threadId) {
190
+ return this.namespace ? `${this.namespace}:${threadId}` : threadId;
191
+ }
192
+ /**
193
+ * Deep copy a checkpoint to prevent mutation.
194
+ * @internal
195
+ */
196
+ deepCopy(checkpoint) {
197
+ return JSON.parse(JSON.stringify(checkpoint));
198
+ }
199
+ }
200
+ // =============================================================================
201
+ // Factory Function
202
+ // =============================================================================
203
+ /**
204
+ * Create a new MemorySaver instance.
205
+ *
206
+ * @param options - Optional configuration
207
+ * @returns A new MemorySaver instance
208
+ *
209
+ * @example
210
+ * ```typescript
211
+ * const saver = createMemorySaver();
212
+ *
213
+ * // Or with namespace for multi-tenant isolation
214
+ * const userSaver = createMemorySaver({ namespace: "user-123" });
215
+ * ```
216
+ *
217
+ * @category Checkpointer
218
+ */
219
+ export function createMemorySaver(options) {
220
+ return new MemorySaver(options);
221
+ }
222
+ //# sourceMappingURL=memory-saver.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memory-saver.js","sourceRoot":"","sources":["../../src/checkpointer/memory-saver.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,353 @@
1
+ /**
2
+ * Type definitions for the checkpointer system.
3
+ *
4
+ * Checkpointers provide session persistence and resumption across conversations,
5
+ * allowing agents to save and restore their state including message history,
6
+ * todos, files, and pending tool approvals.
7
+ *
8
+ * @packageDocumentation
9
+ */
10
+ import type { ModelMessage } from "ai";
11
+ import type { AgentState } from "../backends/state.js";
12
+ /**
13
+ * Base interrupt type - the shared mechanism for pausing agent execution.
14
+ *
15
+ * Interrupts allow the agent to pause execution and wait for external input.
16
+ * This is a generalized pattern that supports:
17
+ * - Tool approval requests (ApprovalInterrupt)
18
+ * - User questions during tool execution
19
+ * - Custom application-specific interrupts
20
+ *
21
+ * @example
22
+ * ```typescript
23
+ * const interrupt: Interrupt = {
24
+ * id: "int_abc123",
25
+ * threadId: "session-456",
26
+ * type: "approval",
27
+ * toolCallId: "call_abc123",
28
+ * toolName: "deleteFile",
29
+ * request: { toolName: "deleteFile", args: { path: "/important/file.txt" } },
30
+ * step: 5,
31
+ * createdAt: "2026-01-30T10:00:00Z",
32
+ * };
33
+ * ```
34
+ *
35
+ * @category Checkpointer
36
+ */
37
+ export interface Interrupt<TRequest = unknown, TResponse = unknown> {
38
+ /** Unique identifier for this interrupt */
39
+ id: string;
40
+ /** The thread this interrupt belongs to */
41
+ threadId: string;
42
+ /** Type of interrupt (e.g., "approval", "question", custom types) */
43
+ type: string;
44
+ /** The tool call ID if this interrupt is related to a tool call */
45
+ toolCallId?: string;
46
+ /** The tool name if this interrupt is related to a tool call */
47
+ toolName?: string;
48
+ /** The request data for this interrupt (type varies by interrupt type) */
49
+ request: TRequest;
50
+ /** The step number when the interrupt occurred */
51
+ step: number;
52
+ /** ISO 8601 timestamp when this interrupt was created */
53
+ createdAt: string;
54
+ /** The response to this interrupt (undefined = pending) */
55
+ response?: TResponse;
56
+ }
57
+ /**
58
+ * Request data for an approval interrupt.
59
+ *
60
+ * @category Checkpointer
61
+ */
62
+ export interface ApprovalRequest {
63
+ /** Name of the tool that requires approval */
64
+ toolName: string;
65
+ /** Arguments passed to the tool */
66
+ args: unknown;
67
+ }
68
+ /**
69
+ * Response data for an approval interrupt.
70
+ *
71
+ * @category Checkpointer
72
+ */
73
+ export interface ApprovalResponse {
74
+ /** Whether the tool call was approved */
75
+ approved: boolean;
76
+ /** Optional reason for the decision */
77
+ reason?: string;
78
+ }
79
+ /**
80
+ * Approval interrupt - a specialized interrupt for tool approval requests.
81
+ *
82
+ * When a tool requires user confirmation (via `canUseTool` returning "ask"),
83
+ * the agent creates an approval interrupt and pauses execution.
84
+ *
85
+ * @example
86
+ * ```typescript
87
+ * const approval: ApprovalInterrupt = {
88
+ * id: "int_abc123",
89
+ * threadId: "session-456",
90
+ * type: "approval",
91
+ * toolCallId: "call_abc123",
92
+ * toolName: "deleteFile",
93
+ * request: { toolName: "deleteFile", args: { path: "/important/file.txt" } },
94
+ * step: 5,
95
+ * createdAt: "2026-01-30T10:00:00Z",
96
+ * };
97
+ * ```
98
+ *
99
+ * @category Checkpointer
100
+ */
101
+ export interface ApprovalInterrupt extends Interrupt<ApprovalRequest, ApprovalResponse> {
102
+ type: "approval";
103
+ /** Tool call ID is required for approval interrupts */
104
+ toolCallId: string;
105
+ /** Tool name is required for approval interrupts */
106
+ toolName: string;
107
+ }
108
+ /**
109
+ * Complete snapshot of an agent session.
110
+ *
111
+ * A checkpoint captures the full state of a conversation, including:
112
+ * - Message history for context continuity
113
+ * - Agent state (todos, virtual files)
114
+ * - Any pending interrupts (tool approvals, questions, etc.)
115
+ *
116
+ * @example
117
+ * ```typescript
118
+ * const checkpoint: Checkpoint = {
119
+ * threadId: "session-123",
120
+ * step: 5,
121
+ * messages: [
122
+ * { role: "user", content: "Hello" },
123
+ * { role: "assistant", content: "Hi there!" },
124
+ * ],
125
+ * state: { todos: [], files: {} },
126
+ * createdAt: "2026-01-30T10:00:00Z",
127
+ * updatedAt: "2026-01-30T10:05:00Z",
128
+ * };
129
+ * ```
130
+ *
131
+ * @category Checkpointer
132
+ */
133
+ export interface Checkpoint {
134
+ /** Unique identifier for this conversation thread */
135
+ threadId: string;
136
+ /** Step number when this checkpoint was created */
137
+ step: number;
138
+ /** Full message history */
139
+ messages: ModelMessage[];
140
+ /** Agent state including todos and virtual filesystem */
141
+ state: AgentState;
142
+ /**
143
+ * Pending interrupt if the agent was interrupted.
144
+ */
145
+ pendingInterrupt?: Interrupt;
146
+ /** ISO 8601 timestamp when this checkpoint was first created */
147
+ createdAt: string;
148
+ /** ISO 8601 timestamp when this checkpoint was last updated */
149
+ updatedAt: string;
150
+ /** Optional metadata for custom data */
151
+ metadata?: Record<string, unknown>;
152
+ }
153
+ /**
154
+ * Options for creating a checkpoint saver.
155
+ *
156
+ * @category Checkpointer
157
+ */
158
+ export interface CheckpointSaverOptions {
159
+ /**
160
+ * Namespace for isolating checkpoints.
161
+ *
162
+ * Useful for multi-tenant scenarios where different users or projects
163
+ * need separate checkpoint storage.
164
+ *
165
+ * @defaultValue undefined (no namespace)
166
+ */
167
+ namespace?: string;
168
+ }
169
+ /**
170
+ * Abstract storage interface for checkpoints.
171
+ *
172
+ * Implement this interface to create custom checkpoint storage backends
173
+ * such as Redis, SQLite, cloud storage, or any other persistence layer.
174
+ *
175
+ * @example
176
+ * ```typescript
177
+ * class RedisCheckpointSaver implements BaseCheckpointSaver {
178
+ * constructor(private redis: RedisClient) {}
179
+ *
180
+ * async save(checkpoint: Checkpoint): Promise<void> {
181
+ * const key = `checkpoint:${checkpoint.threadId}`;
182
+ * await this.redis.set(key, JSON.stringify(checkpoint));
183
+ * }
184
+ *
185
+ * async load(threadId: string): Promise<Checkpoint | undefined> {
186
+ * const key = `checkpoint:${threadId}`;
187
+ * const data = await this.redis.get(key);
188
+ * return data ? JSON.parse(data) : undefined;
189
+ * }
190
+ *
191
+ * // ... other methods
192
+ * }
193
+ * ```
194
+ *
195
+ * @category Checkpointer
196
+ */
197
+ export interface BaseCheckpointSaver {
198
+ /**
199
+ * Save a checkpoint.
200
+ *
201
+ * If a checkpoint with the same `threadId` exists, it should be updated.
202
+ *
203
+ * @param checkpoint - The checkpoint to save
204
+ */
205
+ save(checkpoint: Checkpoint): Promise<void>;
206
+ /**
207
+ * Load a checkpoint by thread ID.
208
+ *
209
+ * @param threadId - The unique thread identifier
210
+ * @returns The checkpoint if found, undefined otherwise
211
+ */
212
+ load(threadId: string): Promise<Checkpoint | undefined>;
213
+ /**
214
+ * List all thread IDs that have checkpoints.
215
+ *
216
+ * @returns Array of thread IDs
217
+ */
218
+ list(): Promise<string[]>;
219
+ /**
220
+ * Delete a checkpoint.
221
+ *
222
+ * @param threadId - The thread ID to delete
223
+ * @returns True if a checkpoint was deleted, false if not found
224
+ */
225
+ delete(threadId: string): Promise<boolean>;
226
+ /**
227
+ * Check if a checkpoint exists.
228
+ *
229
+ * @param threadId - The thread ID to check
230
+ * @returns True if the checkpoint exists
231
+ */
232
+ exists(threadId: string): Promise<boolean>;
233
+ }
234
+ /**
235
+ * Event emitted when a checkpoint is saved.
236
+ *
237
+ * @category Checkpointer
238
+ */
239
+ export interface CheckpointSavedEvent {
240
+ type: "checkpoint-saved";
241
+ threadId: string;
242
+ step: number;
243
+ }
244
+ /**
245
+ * Event emitted when a checkpoint is loaded.
246
+ *
247
+ * @category Checkpointer
248
+ */
249
+ export interface CheckpointLoadedEvent {
250
+ type: "checkpoint-loaded";
251
+ threadId: string;
252
+ step: number;
253
+ messagesCount: number;
254
+ }
255
+ /**
256
+ * Union type of all checkpoint events.
257
+ *
258
+ * @category Checkpointer
259
+ */
260
+ export type CheckpointEvent = CheckpointSavedEvent | CheckpointLoadedEvent;
261
+ /**
262
+ * Create a new checkpoint with the given data.
263
+ *
264
+ * This is a convenience function that ensures timestamps are set correctly.
265
+ *
266
+ * @param data - Partial checkpoint data (threadId and messages required)
267
+ * @returns A complete checkpoint object
268
+ *
269
+ * @example
270
+ * ```typescript
271
+ * const checkpoint = createCheckpoint({
272
+ * threadId: "session-123",
273
+ * messages: [...],
274
+ * state: { todos: [], files: {} },
275
+ * });
276
+ * ```
277
+ *
278
+ * @category Checkpointer
279
+ */
280
+ export declare function createCheckpoint(data: Pick<Checkpoint, "threadId" | "messages" | "state"> & Partial<Omit<Checkpoint, "threadId" | "messages" | "state">>): Checkpoint;
281
+ /**
282
+ * Update an existing checkpoint with new data.
283
+ *
284
+ * Automatically updates the `updatedAt` timestamp and increments step.
285
+ *
286
+ * @param checkpoint - The existing checkpoint
287
+ * @param updates - Partial updates to apply
288
+ * @returns A new checkpoint object with updates applied
289
+ *
290
+ * @example
291
+ * ```typescript
292
+ * const updated = updateCheckpoint(checkpoint, {
293
+ * messages: [...newMessages],
294
+ * step: checkpoint.step + 1,
295
+ * });
296
+ * ```
297
+ *
298
+ * @category Checkpointer
299
+ */
300
+ export declare function updateCheckpoint(checkpoint: Checkpoint, updates: Partial<Omit<Checkpoint, "threadId" | "createdAt">>): Checkpoint;
301
+ /**
302
+ * Type guard to check if an object is a valid Checkpoint.
303
+ *
304
+ * @param value - The value to check
305
+ * @returns True if the value is a valid Checkpoint
306
+ *
307
+ * @category Checkpointer
308
+ */
309
+ export declare function isCheckpoint(value: unknown): value is Checkpoint;
310
+ /**
311
+ * Type guard to check if an object is a valid Interrupt.
312
+ *
313
+ * @param value - The value to check
314
+ * @returns True if the value is a valid Interrupt
315
+ *
316
+ * @category Checkpointer
317
+ */
318
+ export declare function isInterrupt(value: unknown): value is Interrupt;
319
+ /**
320
+ * Type guard to check if an interrupt is an ApprovalInterrupt.
321
+ *
322
+ * @param interrupt - The interrupt to check
323
+ * @returns True if the interrupt is an ApprovalInterrupt
324
+ *
325
+ * @category Checkpointer
326
+ */
327
+ export declare function isApprovalInterrupt(interrupt: Interrupt): interrupt is ApprovalInterrupt;
328
+ /**
329
+ * Create a new interrupt with the given data.
330
+ *
331
+ * @param data - Partial interrupt data (id, threadId, type, and request required)
332
+ * @returns A complete interrupt object
333
+ *
334
+ * @category Checkpointer
335
+ */
336
+ export declare function createInterrupt<TRequest = unknown, TResponse = unknown>(data: Pick<Interrupt<TRequest, TResponse>, "id" | "threadId" | "type" | "request"> & Partial<Omit<Interrupt<TRequest, TResponse>, "id" | "threadId" | "type" | "request">>): Interrupt<TRequest, TResponse>;
337
+ /**
338
+ * Create an approval interrupt for a tool call.
339
+ *
340
+ * @param data - The approval interrupt data
341
+ * @returns A complete ApprovalInterrupt object
342
+ *
343
+ * @category Checkpointer
344
+ */
345
+ export declare function createApprovalInterrupt(data: {
346
+ id: string;
347
+ threadId: string;
348
+ toolCallId: string;
349
+ toolName: string;
350
+ args: unknown;
351
+ step?: number;
352
+ }): ApprovalInterrupt;
353
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/checkpointer/types.ts"],"names":[],"mappings":"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"}