@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,282 @@
1
+ /**
2
+ * Memory permission management with approval persistence and change detection.
3
+ *
4
+ * Provides security features for the agent memory system:
5
+ * - Approval persistence: Remember which paths the user has approved for loading
6
+ * - Hash-based change detection: Detect when memory files have been modified
7
+ * - Automatic revocation: Require re-approval when memory content changes
8
+ *
9
+ * @example
10
+ * ```typescript
11
+ * import { MemoryPermissionStore, createMemoryPermissionStore } from "@lleverage-ai/agent-sdk";
12
+ *
13
+ * const permStore = createMemoryPermissionStore("/path/to/.memory-permissions.json");
14
+ *
15
+ * // Check if a path is approved
16
+ * const approved = await permStore.isApproved("/project/.deepagents/agent.md", contentHash);
17
+ *
18
+ * // Grant approval
19
+ * await permStore.grantApproval("/project/.deepagents/agent.md", contentHash);
20
+ *
21
+ * // Revoke approval
22
+ * await permStore.revokeApproval("/project/.deepagents/agent.md");
23
+ * ```
24
+ *
25
+ * @packageDocumentation
26
+ */
27
+ /**
28
+ * Approval record for a memory file.
29
+ *
30
+ * Tracks when a file was approved and its content hash at approval time.
31
+ *
32
+ * @category Memory
33
+ */
34
+ export interface MemoryApproval {
35
+ /**
36
+ * Full path to the approved memory file.
37
+ */
38
+ path: string;
39
+ /**
40
+ * SHA-256 hash of the file content at approval time.
41
+ */
42
+ contentHash: string;
43
+ /**
44
+ * Timestamp when approval was granted (Unix ms).
45
+ */
46
+ approvedAt: number;
47
+ /**
48
+ * Optional user identifier who granted approval.
49
+ */
50
+ approvedBy?: string;
51
+ }
52
+ /**
53
+ * Store interface for memory permissions.
54
+ *
55
+ * Implement this to provide custom storage backends.
56
+ *
57
+ * @category Memory
58
+ */
59
+ export interface MemoryPermissionStore {
60
+ /**
61
+ * Check if a path is approved with a specific content hash.
62
+ *
63
+ * Returns true only if:
64
+ * 1. The path has been approved
65
+ * 2. The content hash matches the approved hash
66
+ *
67
+ * @param path - Path to check
68
+ * @param contentHash - Current content hash
69
+ * @returns True if approved and hash matches
70
+ */
71
+ isApproved(path: string, contentHash: string): Promise<boolean>;
72
+ /**
73
+ * Grant approval for a path with a specific content hash.
74
+ *
75
+ * If the path was previously approved with a different hash,
76
+ * this updates the approval to the new hash.
77
+ *
78
+ * @param path - Path to approve
79
+ * @param contentHash - Content hash at approval time
80
+ * @param approvedBy - Optional user identifier
81
+ */
82
+ grantApproval(path: string, contentHash: string, approvedBy?: string): Promise<void>;
83
+ /**
84
+ * Revoke approval for a path.
85
+ *
86
+ * @param path - Path to revoke
87
+ * @returns True if approval was revoked, false if it wasn't approved
88
+ */
89
+ revokeApproval(path: string): Promise<boolean>;
90
+ /**
91
+ * List all approved paths.
92
+ *
93
+ * @returns Array of approval records
94
+ */
95
+ listApprovals(): Promise<MemoryApproval[]>;
96
+ /**
97
+ * Clear all approvals.
98
+ *
99
+ * Useful for resetting permissions or testing.
100
+ */
101
+ clearAll(): Promise<void>;
102
+ }
103
+ /**
104
+ * Compute SHA-256 hash of a string.
105
+ *
106
+ * @param content - Content to hash
107
+ * @returns Hex-encoded hash
108
+ *
109
+ * @example
110
+ * ```typescript
111
+ * const hash = computeContentHash("# My Memory\n\nContent here");
112
+ * // Returns: "a1b2c3d4..."
113
+ * ```
114
+ *
115
+ * @category Memory
116
+ */
117
+ export declare function computeContentHash(content: string): string;
118
+ /**
119
+ * Compute content hash from a file path.
120
+ *
121
+ * @param filePath - Path to the file
122
+ * @returns Hex-encoded hash, or undefined if file doesn't exist
123
+ *
124
+ * @example
125
+ * ```typescript
126
+ * const hash = await computeFileHash("/path/to/memory.md");
127
+ * ```
128
+ *
129
+ * @category Memory
130
+ */
131
+ export declare function computeFileHash(filePath: string): Promise<string | undefined>;
132
+ /**
133
+ * Options for FileMemoryPermissionStore.
134
+ *
135
+ * @category Memory
136
+ */
137
+ export interface FileMemoryPermissionStoreOptions {
138
+ /**
139
+ * Path to the permissions file.
140
+ *
141
+ * @defaultValue ~/.deepagents/.memory-permissions.json
142
+ */
143
+ permissionsFilePath?: string;
144
+ /**
145
+ * Create parent directories if they don't exist.
146
+ *
147
+ * @defaultValue true
148
+ */
149
+ createDirs?: boolean;
150
+ }
151
+ /**
152
+ * File-based implementation of MemoryPermissionStore.
153
+ *
154
+ * Stores approvals in a JSON file on disk.
155
+ *
156
+ * @example
157
+ * ```typescript
158
+ * const store = new FileMemoryPermissionStore({
159
+ * permissionsFilePath: "/home/user/.deepagents/.memory-permissions.json",
160
+ * });
161
+ *
162
+ * // Grant approval
163
+ * await store.grantApproval("/project/.deepagents/agent.md", contentHash, "user");
164
+ *
165
+ * // Check if approved
166
+ * const approved = await store.isApproved("/project/.deepagents/agent.md", contentHash);
167
+ * ```
168
+ *
169
+ * @category Memory
170
+ */
171
+ export declare class FileMemoryPermissionStore implements MemoryPermissionStore {
172
+ private readonly permissionsFilePath;
173
+ private readonly createDirs;
174
+ private approvals;
175
+ private loaded;
176
+ /**
177
+ * Create a new FileMemoryPermissionStore.
178
+ *
179
+ * @param options - Configuration options
180
+ */
181
+ constructor(options?: FileMemoryPermissionStoreOptions);
182
+ /**
183
+ * Load approvals from disk if not already loaded.
184
+ *
185
+ * @internal
186
+ */
187
+ private ensureLoaded;
188
+ /**
189
+ * Save approvals to disk.
190
+ *
191
+ * @internal
192
+ */
193
+ private save;
194
+ /**
195
+ * Check if a path is approved with a specific content hash.
196
+ */
197
+ isApproved(path: string, contentHash: string): Promise<boolean>;
198
+ /**
199
+ * Grant approval for a path with a specific content hash.
200
+ */
201
+ grantApproval(path: string, contentHash: string, approvedBy?: string): Promise<void>;
202
+ /**
203
+ * Revoke approval for a path.
204
+ */
205
+ revokeApproval(path: string): Promise<boolean>;
206
+ /**
207
+ * List all approved paths.
208
+ */
209
+ listApprovals(): Promise<MemoryApproval[]>;
210
+ /**
211
+ * Clear all approvals.
212
+ */
213
+ clearAll(): Promise<void>;
214
+ }
215
+ /**
216
+ * In-memory implementation of MemoryPermissionStore for testing.
217
+ *
218
+ * Approvals are stored in memory and not persisted.
219
+ *
220
+ * @example
221
+ * ```typescript
222
+ * const store = new InMemoryPermissionStore();
223
+ *
224
+ * await store.grantApproval("/test.md", hash);
225
+ * const approved = await store.isApproved("/test.md", hash);
226
+ * ```
227
+ *
228
+ * @category Memory
229
+ */
230
+ export declare class InMemoryPermissionStore implements MemoryPermissionStore {
231
+ private approvals;
232
+ /**
233
+ * Check if a path is approved with a specific content hash.
234
+ */
235
+ isApproved(path: string, contentHash: string): Promise<boolean>;
236
+ /**
237
+ * Grant approval for a path with a specific content hash.
238
+ */
239
+ grantApproval(path: string, contentHash: string, approvedBy?: string): Promise<void>;
240
+ /**
241
+ * Revoke approval for a path.
242
+ */
243
+ revokeApproval(path: string): Promise<boolean>;
244
+ /**
245
+ * List all approved paths.
246
+ */
247
+ listApprovals(): Promise<MemoryApproval[]>;
248
+ /**
249
+ * Clear all approvals.
250
+ */
251
+ clearAll(): Promise<void>;
252
+ }
253
+ /**
254
+ * Create a new FileMemoryPermissionStore.
255
+ *
256
+ * @param options - Configuration options
257
+ * @returns A new FileMemoryPermissionStore instance
258
+ *
259
+ * @example
260
+ * ```typescript
261
+ * const store = createMemoryPermissionStore({
262
+ * permissionsFilePath: "/path/to/.memory-permissions.json",
263
+ * });
264
+ * ```
265
+ *
266
+ * @category Memory
267
+ */
268
+ export declare function createMemoryPermissionStore(options?: FileMemoryPermissionStoreOptions): FileMemoryPermissionStore;
269
+ /**
270
+ * Create a new InMemoryPermissionStore.
271
+ *
272
+ * @returns A new InMemoryPermissionStore instance
273
+ *
274
+ * @example
275
+ * ```typescript
276
+ * const store = createInMemoryPermissionStore();
277
+ * ```
278
+ *
279
+ * @category Memory
280
+ */
281
+ export declare function createInMemoryPermissionStore(): InMemoryPermissionStore;
282
+ //# sourceMappingURL=permissions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"permissions.d.ts","sourceRoot":"","sources":["../../src/memory/permissions.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,297 @@
1
+ /**
2
+ * Memory permission management with approval persistence and change detection.
3
+ *
4
+ * Provides security features for the agent memory system:
5
+ * - Approval persistence: Remember which paths the user has approved for loading
6
+ * - Hash-based change detection: Detect when memory files have been modified
7
+ * - Automatic revocation: Require re-approval when memory content changes
8
+ *
9
+ * @example
10
+ * ```typescript
11
+ * import { MemoryPermissionStore, createMemoryPermissionStore } from "@lleverage-ai/agent-sdk";
12
+ *
13
+ * const permStore = createMemoryPermissionStore("/path/to/.memory-permissions.json");
14
+ *
15
+ * // Check if a path is approved
16
+ * const approved = await permStore.isApproved("/project/.deepagents/agent.md", contentHash);
17
+ *
18
+ * // Grant approval
19
+ * await permStore.grantApproval("/project/.deepagents/agent.md", contentHash);
20
+ *
21
+ * // Revoke approval
22
+ * await permStore.revokeApproval("/project/.deepagents/agent.md");
23
+ * ```
24
+ *
25
+ * @packageDocumentation
26
+ */
27
+ import * as crypto from "node:crypto";
28
+ import * as fs from "node:fs/promises";
29
+ import * as path from "node:path";
30
+ // =============================================================================
31
+ // Hash Utilities
32
+ // =============================================================================
33
+ /**
34
+ * Compute SHA-256 hash of a string.
35
+ *
36
+ * @param content - Content to hash
37
+ * @returns Hex-encoded hash
38
+ *
39
+ * @example
40
+ * ```typescript
41
+ * const hash = computeContentHash("# My Memory\n\nContent here");
42
+ * // Returns: "a1b2c3d4..."
43
+ * ```
44
+ *
45
+ * @category Memory
46
+ */
47
+ export function computeContentHash(content) {
48
+ return crypto.createHash("sha256").update(content, "utf-8").digest("hex");
49
+ }
50
+ /**
51
+ * Compute content hash from a file path.
52
+ *
53
+ * @param filePath - Path to the file
54
+ * @returns Hex-encoded hash, or undefined if file doesn't exist
55
+ *
56
+ * @example
57
+ * ```typescript
58
+ * const hash = await computeFileHash("/path/to/memory.md");
59
+ * ```
60
+ *
61
+ * @category Memory
62
+ */
63
+ export async function computeFileHash(filePath) {
64
+ try {
65
+ const content = await fs.readFile(filePath, "utf-8");
66
+ return computeContentHash(content);
67
+ }
68
+ catch (error) {
69
+ if (error.code === "ENOENT") {
70
+ return undefined;
71
+ }
72
+ throw error;
73
+ }
74
+ }
75
+ /**
76
+ * File-based implementation of MemoryPermissionStore.
77
+ *
78
+ * Stores approvals in a JSON file on disk.
79
+ *
80
+ * @example
81
+ * ```typescript
82
+ * const store = new FileMemoryPermissionStore({
83
+ * permissionsFilePath: "/home/user/.deepagents/.memory-permissions.json",
84
+ * });
85
+ *
86
+ * // Grant approval
87
+ * await store.grantApproval("/project/.deepagents/agent.md", contentHash, "user");
88
+ *
89
+ * // Check if approved
90
+ * const approved = await store.isApproved("/project/.deepagents/agent.md", contentHash);
91
+ * ```
92
+ *
93
+ * @category Memory
94
+ */
95
+ export class FileMemoryPermissionStore {
96
+ permissionsFilePath;
97
+ createDirs;
98
+ approvals = new Map();
99
+ loaded = false;
100
+ /**
101
+ * Create a new FileMemoryPermissionStore.
102
+ *
103
+ * @param options - Configuration options
104
+ */
105
+ constructor(options = {}) {
106
+ const homeDir = process.env.HOME ?? "~";
107
+ this.permissionsFilePath =
108
+ options.permissionsFilePath ?? path.join(homeDir, ".deepagents", ".memory-permissions.json");
109
+ this.createDirs = options.createDirs ?? true;
110
+ }
111
+ /**
112
+ * Load approvals from disk if not already loaded.
113
+ *
114
+ * @internal
115
+ */
116
+ async ensureLoaded() {
117
+ if (this.loaded)
118
+ return;
119
+ try {
120
+ const content = await fs.readFile(this.permissionsFilePath, "utf-8");
121
+ const data = JSON.parse(content);
122
+ this.approvals.clear();
123
+ for (const approval of data) {
124
+ this.approvals.set(approval.path, approval);
125
+ }
126
+ }
127
+ catch (error) {
128
+ if (error.code !== "ENOENT") {
129
+ throw error;
130
+ }
131
+ // File doesn't exist yet, start with empty approvals
132
+ }
133
+ this.loaded = true;
134
+ }
135
+ /**
136
+ * Save approvals to disk.
137
+ *
138
+ * @internal
139
+ */
140
+ async save() {
141
+ await this.ensureLoaded();
142
+ if (this.createDirs) {
143
+ const dir = path.dirname(this.permissionsFilePath);
144
+ await fs.mkdir(dir, { recursive: true });
145
+ }
146
+ const data = Array.from(this.approvals.values());
147
+ const content = JSON.stringify(data, null, 2);
148
+ await fs.writeFile(this.permissionsFilePath, content, "utf-8");
149
+ }
150
+ /**
151
+ * Check if a path is approved with a specific content hash.
152
+ */
153
+ async isApproved(path, contentHash) {
154
+ await this.ensureLoaded();
155
+ const approval = this.approvals.get(path);
156
+ if (!approval)
157
+ return false;
158
+ // Approval is valid only if hash matches
159
+ return approval.contentHash === contentHash;
160
+ }
161
+ /**
162
+ * Grant approval for a path with a specific content hash.
163
+ */
164
+ async grantApproval(path, contentHash, approvedBy) {
165
+ await this.ensureLoaded();
166
+ this.approvals.set(path, {
167
+ path,
168
+ contentHash,
169
+ approvedAt: Date.now(),
170
+ approvedBy,
171
+ });
172
+ await this.save();
173
+ }
174
+ /**
175
+ * Revoke approval for a path.
176
+ */
177
+ async revokeApproval(path) {
178
+ await this.ensureLoaded();
179
+ const hadApproval = this.approvals.has(path);
180
+ this.approvals.delete(path);
181
+ if (hadApproval) {
182
+ await this.save();
183
+ }
184
+ return hadApproval;
185
+ }
186
+ /**
187
+ * List all approved paths.
188
+ */
189
+ async listApprovals() {
190
+ await this.ensureLoaded();
191
+ return Array.from(this.approvals.values());
192
+ }
193
+ /**
194
+ * Clear all approvals.
195
+ */
196
+ async clearAll() {
197
+ await this.ensureLoaded();
198
+ this.approvals.clear();
199
+ await this.save();
200
+ }
201
+ }
202
+ // =============================================================================
203
+ // In-Memory Permission Store (for testing)
204
+ // =============================================================================
205
+ /**
206
+ * In-memory implementation of MemoryPermissionStore for testing.
207
+ *
208
+ * Approvals are stored in memory and not persisted.
209
+ *
210
+ * @example
211
+ * ```typescript
212
+ * const store = new InMemoryPermissionStore();
213
+ *
214
+ * await store.grantApproval("/test.md", hash);
215
+ * const approved = await store.isApproved("/test.md", hash);
216
+ * ```
217
+ *
218
+ * @category Memory
219
+ */
220
+ export class InMemoryPermissionStore {
221
+ approvals = new Map();
222
+ /**
223
+ * Check if a path is approved with a specific content hash.
224
+ */
225
+ async isApproved(path, contentHash) {
226
+ const approval = this.approvals.get(path);
227
+ if (!approval)
228
+ return false;
229
+ return approval.contentHash === contentHash;
230
+ }
231
+ /**
232
+ * Grant approval for a path with a specific content hash.
233
+ */
234
+ async grantApproval(path, contentHash, approvedBy) {
235
+ this.approvals.set(path, {
236
+ path,
237
+ contentHash,
238
+ approvedAt: Date.now(),
239
+ approvedBy,
240
+ });
241
+ }
242
+ /**
243
+ * Revoke approval for a path.
244
+ */
245
+ async revokeApproval(path) {
246
+ return this.approvals.delete(path);
247
+ }
248
+ /**
249
+ * List all approved paths.
250
+ */
251
+ async listApprovals() {
252
+ return Array.from(this.approvals.values());
253
+ }
254
+ /**
255
+ * Clear all approvals.
256
+ */
257
+ async clearAll() {
258
+ this.approvals.clear();
259
+ }
260
+ }
261
+ // =============================================================================
262
+ // Factory Functions
263
+ // =============================================================================
264
+ /**
265
+ * Create a new FileMemoryPermissionStore.
266
+ *
267
+ * @param options - Configuration options
268
+ * @returns A new FileMemoryPermissionStore instance
269
+ *
270
+ * @example
271
+ * ```typescript
272
+ * const store = createMemoryPermissionStore({
273
+ * permissionsFilePath: "/path/to/.memory-permissions.json",
274
+ * });
275
+ * ```
276
+ *
277
+ * @category Memory
278
+ */
279
+ export function createMemoryPermissionStore(options) {
280
+ return new FileMemoryPermissionStore(options);
281
+ }
282
+ /**
283
+ * Create a new InMemoryPermissionStore.
284
+ *
285
+ * @returns A new InMemoryPermissionStore instance
286
+ *
287
+ * @example
288
+ * ```typescript
289
+ * const store = createInMemoryPermissionStore();
290
+ * ```
291
+ *
292
+ * @category Memory
293
+ */
294
+ export function createInMemoryPermissionStore() {
295
+ return new InMemoryPermissionStore();
296
+ }
297
+ //# sourceMappingURL=permissions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"permissions.js","sourceRoot":"","sources":["../../src/memory/permissions.ts"],"names":[],"mappings":"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"}