@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,623 @@
1
+ /**
2
+ * Filesystem backend for disk persistence.
3
+ *
4
+ * FilesystemBackend provides file operations on the real filesystem with
5
+ * security protections against directory traversal, symlink attacks, and
6
+ * excessive file sizes.
7
+ *
8
+ * This backend is ideal for:
9
+ * - Persistent agents that need to read/write real files
10
+ * - Development environments
11
+ * - Local tooling and automation
12
+ *
13
+ * @example
14
+ * ```typescript
15
+ * const backend = new FilesystemBackend({
16
+ * rootDir: process.cwd(),
17
+ * maxFileSizeMb: 10,
18
+ * });
19
+ *
20
+ * // Read a file
21
+ * const content = await backend.read("./src/index.ts");
22
+ *
23
+ * // Write a file
24
+ * await backend.write("./output.txt", "Generated content");
25
+ * ```
26
+ *
27
+ * @packageDocumentation
28
+ */
29
+ import * as fsSync from "node:fs";
30
+ import * as fs from "node:fs/promises";
31
+ import * as path from "node:path";
32
+ // =============================================================================
33
+ // Error Classes
34
+ // =============================================================================
35
+ /**
36
+ * Error thrown when a path traversal attack is detected.
37
+ *
38
+ * @category Backend
39
+ */
40
+ export class PathTraversalError extends Error {
41
+ attemptedPath;
42
+ rootDir;
43
+ constructor(attemptedPath, rootDir) {
44
+ super(`Path traversal detected: "${attemptedPath}" escapes root directory "${rootDir}"`);
45
+ this.attemptedPath = attemptedPath;
46
+ this.rootDir = rootDir;
47
+ this.name = "PathTraversalError";
48
+ }
49
+ }
50
+ /**
51
+ * Error thrown when a symlink is encountered and not allowed.
52
+ *
53
+ * @category Backend
54
+ */
55
+ export class SymlinkError extends Error {
56
+ path;
57
+ constructor(path) {
58
+ super(`Symbolic link not allowed: "${path}"`);
59
+ this.path = path;
60
+ this.name = "SymlinkError";
61
+ }
62
+ }
63
+ /**
64
+ * Error thrown when a file exceeds the size limit.
65
+ *
66
+ * @category Backend
67
+ */
68
+ export class FileSizeLimitError extends Error {
69
+ path;
70
+ sizeMb;
71
+ limitMb;
72
+ constructor(path, sizeMb, limitMb) {
73
+ super(`File "${path}" (${sizeMb.toFixed(2)}MB) exceeds size limit of ${limitMb}MB`);
74
+ this.path = path;
75
+ this.sizeMb = sizeMb;
76
+ this.limitMb = limitMb;
77
+ this.name = "FileSizeLimitError";
78
+ }
79
+ }
80
+ // =============================================================================
81
+ // Filesystem Backend Implementation
82
+ // =============================================================================
83
+ /**
84
+ * Filesystem backend implementation for real disk operations.
85
+ *
86
+ * Provides secure file operations with protections against:
87
+ * - Directory traversal attacks (../ paths)
88
+ * - Symlink attacks
89
+ * - Excessive file sizes
90
+ *
91
+ * @example
92
+ * ```typescript
93
+ * const backend = new FilesystemBackend({
94
+ * rootDir: "/home/user/project",
95
+ * maxFileSizeMb: 10,
96
+ * followSymlinks: false,
97
+ * });
98
+ *
99
+ * // List files
100
+ * const files = await backend.lsInfo("./src");
101
+ *
102
+ * // Read with line numbers
103
+ * const content = await backend.read("./src/index.ts");
104
+ *
105
+ * // Search for patterns
106
+ * const matches = await backend.grepRaw("TODO", "./src", "*.ts");
107
+ * ```
108
+ *
109
+ * @category Backend
110
+ */
111
+ export class FilesystemBackend {
112
+ rootDir;
113
+ maxFileSizeMb;
114
+ followSymlinks;
115
+ allowedPaths;
116
+ /**
117
+ * Create a new FilesystemBackend.
118
+ *
119
+ * @param options - Configuration options
120
+ */
121
+ constructor(options = {}) {
122
+ // Resolve symlinks in rootDir to handle cases like /tmp -> /private/tmp on macOS
123
+ // This ensures symlink checks within rootDir work correctly
124
+ const resolvedRoot = path.resolve(options.rootDir ?? process.cwd());
125
+ try {
126
+ this.rootDir = fsSync.realpathSync(resolvedRoot);
127
+ }
128
+ catch {
129
+ // If rootDir doesn't exist yet, use the resolved path
130
+ this.rootDir = resolvedRoot;
131
+ }
132
+ this.maxFileSizeMb = options.maxFileSizeMb ?? 10;
133
+ this.followSymlinks = options.followSymlinks ?? false;
134
+ // Also resolve symlinks in allowedPaths for consistency
135
+ this.allowedPaths = new Set((options.allowedPaths ?? []).map((p) => {
136
+ const resolved = path.resolve(p);
137
+ try {
138
+ return fsSync.realpathSync(resolved);
139
+ }
140
+ catch {
141
+ return resolved;
142
+ }
143
+ }));
144
+ }
145
+ /**
146
+ * List files and directories at the given path.
147
+ *
148
+ * @param dirPath - Directory path to list (non-recursive)
149
+ * @returns Array of file/directory info
150
+ */
151
+ async lsInfo(dirPath) {
152
+ const resolvedPath = await this.resolvePath(dirPath);
153
+ const results = [];
154
+ try {
155
+ const entries = await fs.readdir(resolvedPath, { withFileTypes: true });
156
+ for (const entry of entries) {
157
+ const entryPath = path.join(resolvedPath, entry.name);
158
+ // Skip symlinks if not following them
159
+ if (entry.isSymbolicLink() && !this.followSymlinks) {
160
+ continue;
161
+ }
162
+ try {
163
+ const stat = await fs.stat(entryPath);
164
+ const relativePath = this.makeRelativePath(entryPath);
165
+ results.push({
166
+ path: relativePath,
167
+ is_dir: stat.isDirectory(),
168
+ size: stat.isDirectory() ? undefined : stat.size,
169
+ modified_at: stat.mtime.toISOString(),
170
+ });
171
+ }
172
+ catch {
173
+ // Skip entries we can't stat (permission errors, etc.)
174
+ }
175
+ }
176
+ }
177
+ catch (error) {
178
+ if (this.isNodeError(error) && error.code === "ENOENT") {
179
+ return [];
180
+ }
181
+ throw error;
182
+ }
183
+ return results;
184
+ }
185
+ /**
186
+ * Read file content with line numbers.
187
+ *
188
+ * @param filePath - Path to the file to read
189
+ * @param offset - Starting line offset (0-indexed)
190
+ * @param limit - Maximum number of lines to read
191
+ * @returns Formatted content with line numbers
192
+ */
193
+ async read(filePath, offset, limit) {
194
+ const resolvedPath = await this.resolvePath(filePath);
195
+ await this.validateFileAccess(resolvedPath);
196
+ const content = await fs.readFile(resolvedPath, "utf-8");
197
+ const allLines = content.split("\n");
198
+ const startLine = offset ?? 0;
199
+ const maxLines = limit ?? 2000;
200
+ const lines = allLines.slice(startLine, startLine + maxLines);
201
+ // Format with line numbers (matching the Read tool format)
202
+ return lines
203
+ .map((line, i) => {
204
+ const lineNum = startLine + i + 1;
205
+ const padding = " ".repeat(Math.max(0, 6 - String(lineNum).length));
206
+ return `${padding}${lineNum}→${line}`;
207
+ })
208
+ .join("\n");
209
+ }
210
+ /**
211
+ * Read raw file content as FileData.
212
+ *
213
+ * @param filePath - Path to the file to read
214
+ * @returns Raw file data with content and timestamps
215
+ */
216
+ async readRaw(filePath) {
217
+ const resolvedPath = await this.resolvePath(filePath);
218
+ await this.validateFileAccess(resolvedPath);
219
+ const [content, stat] = await Promise.all([
220
+ fs.readFile(resolvedPath, "utf-8"),
221
+ fs.stat(resolvedPath),
222
+ ]);
223
+ return {
224
+ content: content.split("\n"),
225
+ created_at: stat.birthtime.toISOString(),
226
+ modified_at: stat.mtime.toISOString(),
227
+ };
228
+ }
229
+ /**
230
+ * Search for pattern matches using regex.
231
+ *
232
+ * @param pattern - Regular expression pattern to search for
233
+ * @param searchPath - Directory to search in (defaults to root)
234
+ * @param glob - Glob pattern to filter files (e.g., "*.ts")
235
+ * @returns Array of matches
236
+ */
237
+ async grepRaw(pattern, searchPath, glob) {
238
+ const basePath = searchPath ? await this.resolvePath(searchPath) : this.rootDir;
239
+ const regex = new RegExp(pattern);
240
+ const matches = [];
241
+ // Get all files recursively
242
+ const files = await this.walkDirectory(basePath, glob ?? undefined);
243
+ for (const filePath of files) {
244
+ try {
245
+ const content = await fs.readFile(filePath, "utf-8");
246
+ const lines = content.split("\n");
247
+ for (let i = 0; i < lines.length; i++) {
248
+ const line = lines[i];
249
+ if (regex.test(line)) {
250
+ matches.push({
251
+ path: this.makeRelativePath(filePath),
252
+ line: i + 1, // 1-indexed
253
+ text: line,
254
+ });
255
+ }
256
+ }
257
+ }
258
+ catch {
259
+ // Skip files we can't read
260
+ }
261
+ }
262
+ return matches;
263
+ }
264
+ /**
265
+ * Find files matching a glob pattern.
266
+ *
267
+ * @param pattern - Glob pattern (e.g., "**\/*.ts")
268
+ * @param basePath - Base directory for the search
269
+ * @returns Array of matching file info
270
+ */
271
+ async globInfo(pattern, basePath) {
272
+ const searchDir = basePath ? await this.resolvePath(basePath) : this.rootDir;
273
+ const results = [];
274
+ // Get all files and filter by pattern
275
+ const files = await this.walkDirectory(searchDir);
276
+ for (const filePath of files) {
277
+ const relativePath = path.relative(searchDir, filePath);
278
+ if (this.matchesGlob(relativePath, pattern)) {
279
+ try {
280
+ const stat = await fs.stat(filePath);
281
+ results.push({
282
+ path: this.makeRelativePath(filePath),
283
+ is_dir: false,
284
+ size: stat.size,
285
+ modified_at: stat.mtime.toISOString(),
286
+ });
287
+ }
288
+ catch {
289
+ // Skip files we can't stat
290
+ }
291
+ }
292
+ }
293
+ return results;
294
+ }
295
+ /**
296
+ * Create or overwrite a file.
297
+ *
298
+ * @param filePath - Path for the file
299
+ * @param content - Content to write
300
+ * @returns Result indicating success or failure
301
+ */
302
+ async write(filePath, content) {
303
+ try {
304
+ const resolvedPath = await this.resolvePath(filePath);
305
+ // Ensure parent directory exists
306
+ const parentDir = path.dirname(resolvedPath);
307
+ await fs.mkdir(parentDir, { recursive: true });
308
+ await fs.writeFile(resolvedPath, content, "utf-8");
309
+ return {
310
+ success: true,
311
+ path: this.makeRelativePath(resolvedPath),
312
+ };
313
+ }
314
+ catch (error) {
315
+ return {
316
+ success: false,
317
+ error: error instanceof Error ? error.message : String(error),
318
+ path: filePath,
319
+ };
320
+ }
321
+ }
322
+ /**
323
+ * Edit a file by replacing text.
324
+ *
325
+ * @param filePath - Path to the file to edit
326
+ * @param oldString - Text to find and replace
327
+ * @param newString - Replacement text
328
+ * @param replaceAll - If true, replace all occurrences
329
+ * @returns Result indicating success or failure
330
+ */
331
+ async edit(filePath, oldString, newString, replaceAll) {
332
+ try {
333
+ const resolvedPath = await this.resolvePath(filePath);
334
+ await this.validateFileAccess(resolvedPath);
335
+ const content = await fs.readFile(resolvedPath, "utf-8");
336
+ const occurrences = content.split(oldString).length - 1;
337
+ if (occurrences === 0) {
338
+ return {
339
+ success: false,
340
+ error: `String not found in file: "${oldString.slice(0, 50)}${oldString.length > 50 ? "..." : ""}"`,
341
+ path: this.makeRelativePath(resolvedPath),
342
+ };
343
+ }
344
+ if (occurrences > 1 && !replaceAll) {
345
+ return {
346
+ success: false,
347
+ error: `Multiple occurrences (${occurrences}) found. Use replace_all=true to replace all.`,
348
+ path: this.makeRelativePath(resolvedPath),
349
+ occurrences,
350
+ };
351
+ }
352
+ const newContent = replaceAll
353
+ ? content.replaceAll(oldString, newString)
354
+ : content.replace(oldString, newString);
355
+ await fs.writeFile(resolvedPath, newContent, "utf-8");
356
+ return {
357
+ success: true,
358
+ path: this.makeRelativePath(resolvedPath),
359
+ occurrences: replaceAll ? occurrences : 1,
360
+ };
361
+ }
362
+ catch (error) {
363
+ if (error instanceof PathTraversalError || error instanceof SymlinkError) {
364
+ return {
365
+ success: false,
366
+ error: error.message,
367
+ path: filePath,
368
+ };
369
+ }
370
+ if (this.isNodeError(error) && error.code === "ENOENT") {
371
+ return {
372
+ success: false,
373
+ error: `File not found: ${filePath}`,
374
+ path: filePath,
375
+ };
376
+ }
377
+ return {
378
+ success: false,
379
+ error: error instanceof Error ? error.message : String(error),
380
+ path: filePath,
381
+ };
382
+ }
383
+ }
384
+ // ===========================================================================
385
+ // Security Methods
386
+ // ===========================================================================
387
+ /**
388
+ * Resolve a path and validate it's within the allowed boundaries.
389
+ *
390
+ * @param inputPath - Path to resolve
391
+ * @returns Resolved absolute path
392
+ * @throws {PathTraversalError} If path escapes root directory
393
+ * @throws {SymlinkError} If path contains a symlink and followSymlinks is false
394
+ * @internal
395
+ */
396
+ async resolvePath(inputPath) {
397
+ let resolved;
398
+ // Check if this is an absolute path that might be in allowedPaths
399
+ if (path.isAbsolute(inputPath)) {
400
+ // Resolve symlinks in the path for consistent comparison with allowedPaths
401
+ // (which were also resolved during construction)
402
+ let normalizedAbsolute = path.resolve(inputPath);
403
+ try {
404
+ normalizedAbsolute = await fs.realpath(normalizedAbsolute);
405
+ }
406
+ catch {
407
+ // Path doesn't exist yet, use the resolved path
408
+ }
409
+ if (this.isPathInAllowedPaths(normalizedAbsolute)) {
410
+ resolved = normalizedAbsolute;
411
+ }
412
+ else {
413
+ // Treat paths starting with "/" as relative to rootDir
414
+ // This matches the behavior of StateBackend where "/" means the virtual root
415
+ const relativePath = inputPath.startsWith("/") ? inputPath.slice(1) : inputPath;
416
+ resolved = path.resolve(this.rootDir, relativePath);
417
+ }
418
+ }
419
+ else {
420
+ // Relative path - resolve relative to rootDir
421
+ resolved = path.resolve(this.rootDir, inputPath);
422
+ }
423
+ // Check if path is within rootDir or allowed paths
424
+ if (!this.isPathAllowed(resolved)) {
425
+ throw new PathTraversalError(inputPath, this.rootDir);
426
+ }
427
+ // Check for symlinks in the path components if not following them
428
+ if (!this.followSymlinks) {
429
+ await this.checkSymlinks(resolved);
430
+ }
431
+ return resolved;
432
+ }
433
+ /**
434
+ * Check if a resolved path is within allowed boundaries.
435
+ * @internal
436
+ */
437
+ isPathAllowed(resolved) {
438
+ // Check if within root directory
439
+ const relative = path.relative(this.rootDir, resolved);
440
+ const isWithinRoot = !relative.startsWith("..") && !path.isAbsolute(relative);
441
+ if (isWithinRoot) {
442
+ return true;
443
+ }
444
+ // Check if within any allowed path
445
+ return this.isPathInAllowedPaths(resolved);
446
+ }
447
+ /**
448
+ * Check if a resolved path is within any of the allowed paths.
449
+ * @internal
450
+ */
451
+ isPathInAllowedPaths(resolved) {
452
+ for (const allowedPath of this.allowedPaths) {
453
+ const relativeToAllowed = path.relative(allowedPath, resolved);
454
+ const isWithinAllowed = !relativeToAllowed.startsWith("..") && !path.isAbsolute(relativeToAllowed);
455
+ if (isWithinAllowed) {
456
+ return true;
457
+ }
458
+ }
459
+ return false;
460
+ }
461
+ /**
462
+ * Check for symlinks in path components.
463
+ * @throws {SymlinkError} If a symlink is found
464
+ * @internal
465
+ */
466
+ async checkSymlinks(targetPath) {
467
+ // Use '/' for splitting as Node normalizes paths, then handle platform paths
468
+ const normalizedPath = targetPath.replace(/\\/g, "/");
469
+ const parts = normalizedPath.split("/").filter(Boolean);
470
+ let currentPath = "/";
471
+ for (const part of parts) {
472
+ currentPath = path.join(currentPath, part);
473
+ try {
474
+ const lstat = await fs.lstat(currentPath);
475
+ if (lstat.isSymbolicLink()) {
476
+ throw new SymlinkError(currentPath);
477
+ }
478
+ }
479
+ catch (error) {
480
+ // Path component doesn't exist yet, that's OK for write operations
481
+ if (this.isNodeError(error) && error.code === "ENOENT") {
482
+ break;
483
+ }
484
+ if (error instanceof SymlinkError) {
485
+ throw error;
486
+ }
487
+ // Other errors (permission, etc.) - continue checking
488
+ }
489
+ }
490
+ }
491
+ /**
492
+ * Validate file access checking size limits and symlinks.
493
+ * @throws {FileSizeLimitError} If file exceeds size limit
494
+ * @throws {SymlinkError} If file is a symlink and not allowed
495
+ * @internal
496
+ */
497
+ async validateFileAccess(filePath) {
498
+ const stat = await fs.stat(filePath);
499
+ // Check file size
500
+ const sizeMb = stat.size / (1024 * 1024);
501
+ if (sizeMb > this.maxFileSizeMb) {
502
+ throw new FileSizeLimitError(filePath, sizeMb, this.maxFileSizeMb);
503
+ }
504
+ // Check if symlink (using lstat)
505
+ if (!this.followSymlinks) {
506
+ const lstat = await fs.lstat(filePath);
507
+ if (lstat.isSymbolicLink()) {
508
+ throw new SymlinkError(filePath);
509
+ }
510
+ }
511
+ }
512
+ // ===========================================================================
513
+ // Helper Methods
514
+ // ===========================================================================
515
+ /**
516
+ * Convert an absolute path to a relative path from rootDir.
517
+ * @internal
518
+ */
519
+ makeRelativePath(absolutePath) {
520
+ const relative = path.relative(this.rootDir, absolutePath);
521
+ // Ensure it starts with / for consistency
522
+ return `/${relative.replace(/\\/g, "/")}`;
523
+ }
524
+ /**
525
+ * Walk a directory recursively and return all file paths.
526
+ * @internal
527
+ */
528
+ async walkDirectory(dir, globPattern) {
529
+ const results = [];
530
+ const walk = async (currentDir) => {
531
+ try {
532
+ const entries = await fs.readdir(currentDir, { withFileTypes: true });
533
+ for (const entry of entries) {
534
+ const fullPath = path.join(currentDir, entry.name);
535
+ // Skip symlinks if not following
536
+ if (entry.isSymbolicLink() && !this.followSymlinks) {
537
+ continue;
538
+ }
539
+ if (entry.isDirectory()) {
540
+ await walk(fullPath);
541
+ }
542
+ else if (entry.isFile()) {
543
+ // If glob pattern provided, filter by extension (simple filtering)
544
+ if (globPattern) {
545
+ const relativePath = path.relative(dir, fullPath);
546
+ if (this.matchesGlob(relativePath, globPattern)) {
547
+ results.push(fullPath);
548
+ }
549
+ }
550
+ else {
551
+ results.push(fullPath);
552
+ }
553
+ }
554
+ }
555
+ }
556
+ catch {
557
+ // Skip directories we can't read
558
+ }
559
+ };
560
+ await walk(dir);
561
+ return results;
562
+ }
563
+ /**
564
+ * Check if a path matches a glob pattern.
565
+ * Supports basic glob patterns: *, **, ?
566
+ * @internal
567
+ */
568
+ matchesGlob(filePath, pattern) {
569
+ // Normalize path separators
570
+ const normalizedPath = filePath.replace(/\\/g, "/");
571
+ const normalizedPattern = pattern.replace(/\\/g, "/");
572
+ // Convert glob to regex
573
+ let regexPattern = normalizedPattern
574
+ // Escape special regex chars except * and ?
575
+ .replace(/[.+^${}()|[\]\\]/g, "\\$&")
576
+ // ** followed by / matches any path segments including empty
577
+ .replace(/\*\*\//g, "<<<GLOBSTAR_SLASH>>>")
578
+ // ** at end matches any remaining path
579
+ .replace(/\*\*/g, "<<<GLOBSTAR>>>")
580
+ // * matches anything except /
581
+ .replace(/\*/g, "[^/]*")
582
+ // ? matches single char except /
583
+ .replace(/\?/g, "[^/]")
584
+ // Restore globstars
585
+ .replace(/<<<GLOBSTAR_SLASH>>>/g, "(?:.*/)?")
586
+ .replace(/<<<GLOBSTAR>>>/g, ".*");
587
+ // Anchor the pattern
588
+ regexPattern = `^${regexPattern}$`;
589
+ return new RegExp(regexPattern).test(normalizedPath);
590
+ }
591
+ /**
592
+ * Type guard for Node.js errors with code property.
593
+ * @internal
594
+ */
595
+ isNodeError(error) {
596
+ return (error instanceof Error &&
597
+ "code" in error &&
598
+ typeof error.code === "string");
599
+ }
600
+ }
601
+ // =============================================================================
602
+ // Factory Function
603
+ // =============================================================================
604
+ /**
605
+ * Create a FilesystemBackend with the specified options.
606
+ *
607
+ * @param options - Configuration options
608
+ * @returns A new FilesystemBackend instance
609
+ *
610
+ * @example
611
+ * ```typescript
612
+ * const backend = createFilesystemBackend({
613
+ * rootDir: "/home/user/project",
614
+ * maxFileSizeMb: 5,
615
+ * });
616
+ * ```
617
+ *
618
+ * @category Backend
619
+ */
620
+ export function createFilesystemBackend(options) {
621
+ return new FilesystemBackend(options);
622
+ }
623
+ //# sourceMappingURL=filesystem.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"filesystem.js","sourceRoot":"","sources":["../../src/backends/filesystem.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Backend implementations for the agent SDK.
3
+ *
4
+ * This module provides various storage backends that implement the
5
+ * {@link BackendProtocol} interface.
6
+ *
7
+ * @packageDocumentation
8
+ */
9
+ export { CompositeBackend, type CompositeBackendOptions, createCompositeBackend, type RouteConfig, } from "./composite.js";
10
+ export { createFilesystemBackend, FileSizeLimitError, FilesystemBackend, type FilesystemBackendOptions, PathTraversalError, SymlinkError, } from "./filesystem.js";
11
+ export { createPersistentBackend, InMemoryStore, type KeyValueStore, PersistentBackend, type PersistentBackendOptions, } from "./persistent.js";
12
+ export { BaseSandbox, CommandBlockedError, CommandTimeoutError, createLocalSandbox, LocalSandbox, type LocalSandboxOptions, } from "./sandbox.js";
13
+ export { type AgentState, createAgentState, createStateBackend, StateBackend, type TodoItem, type TodoStatus, } from "./state.js";
14
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/backends/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EACL,gBAAgB,EAChB,KAAK,uBAAuB,EAC5B,sBAAsB,EACtB,KAAK,WAAW,GACjB,MAAM,gBAAgB,CAAC;AAExB,OAAO,EACL,uBAAuB,EACvB,kBAAkB,EAClB,iBAAiB,EACjB,KAAK,wBAAwB,EAC7B,kBAAkB,EAClB,YAAY,GACb,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EACL,uBAAuB,EACvB,aAAa,EACb,KAAK,aAAa,EAClB,iBAAiB,EACjB,KAAK,wBAAwB,GAC9B,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACL,WAAW,EACX,mBAAmB,EACnB,mBAAmB,EACnB,kBAAkB,EAClB,YAAY,EACZ,KAAK,mBAAmB,GACzB,MAAM,cAAc,CAAC;AACtB,OAAO,EACL,KAAK,UAAU,EACf,gBAAgB,EAChB,kBAAkB,EAClB,YAAY,EACZ,KAAK,QAAQ,EACb,KAAK,UAAU,GAChB,MAAM,YAAY,CAAC"}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Backend implementations for the agent SDK.
3
+ *
4
+ * This module provides various storage backends that implement the
5
+ * {@link BackendProtocol} interface.
6
+ *
7
+ * @packageDocumentation
8
+ */
9
+ export { CompositeBackend, createCompositeBackend, } from "./composite.js";
10
+ export { createFilesystemBackend, FileSizeLimitError, FilesystemBackend, PathTraversalError, SymlinkError, } from "./filesystem.js";
11
+ export { createPersistentBackend, InMemoryStore, PersistentBackend, } from "./persistent.js";
12
+ export { BaseSandbox, CommandBlockedError, CommandTimeoutError, createLocalSandbox, LocalSandbox, } from "./sandbox.js";
13
+ export { createAgentState, createStateBackend, StateBackend, } from "./state.js";
14
+ //# sourceMappingURL=index.js.map