@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,305 @@
1
+ /**
2
+ * Audit hook utilities.
3
+ *
4
+ * Provides structured audit event emission for compliance and monitoring
5
+ * using the unified hook system.
6
+ *
7
+ * @packageDocumentation
8
+ */
9
+ /**
10
+ * Determines audit category from tool name.
11
+ */
12
+ function categorizeToolUse(toolName) {
13
+ const name = toolName.toLowerCase();
14
+ if (name === "bash" || name === "execute") {
15
+ return "command_execution";
16
+ }
17
+ if (name === "read" ||
18
+ name === "write" ||
19
+ name === "edit" ||
20
+ name === "glob" ||
21
+ name === "grep") {
22
+ return "file_access";
23
+ }
24
+ return "tool_execution";
25
+ }
26
+ /**
27
+ * Creates audit hooks for all lifecycle events.
28
+ *
29
+ * Emits structured audit events for tool execution, generation,
30
+ * and errors. Useful for compliance, security monitoring, and
31
+ * debugging.
32
+ *
33
+ * This addresses the audit events requirement from CODE_REVIEW.md
34
+ * using the unified hook system.
35
+ *
36
+ * @param options - Configuration options
37
+ * @returns Array of hooks for all audited events
38
+ *
39
+ * @example
40
+ * ```typescript
41
+ * const auditHooks = createAuditHooks({
42
+ * onEvent: (event) => {
43
+ * // Send to your logging service
44
+ * logger.info('Audit event', event);
45
+ *
46
+ * // Send to SIEM
47
+ * siem.send(event);
48
+ *
49
+ * // Store in database
50
+ * db.auditEvents.insert(event);
51
+ * },
52
+ * });
53
+ *
54
+ * const agent = createAgent({
55
+ * model,
56
+ * hooks: {
57
+ * PreToolUse: [{ hooks: [auditHooks[0]] }],
58
+ * PostToolUse: [{ hooks: [auditHooks[1]] }],
59
+ * PostToolUseFailure: [{ hooks: [auditHooks[2]] }],
60
+ * PreGenerate: [{ hooks: [auditHooks[3]] }],
61
+ * PostGenerate: [{ hooks: [auditHooks[4]] }],
62
+ * PostGenerateFailure: [{ hooks: [auditHooks[5]] }],
63
+ * },
64
+ * });
65
+ * ```
66
+ *
67
+ * @example
68
+ * ```typescript
69
+ * // Selective auditing
70
+ * const auditHooks = createAuditHooks({
71
+ * categories: ['command_execution', 'file_access', 'policy_denial'],
72
+ * onEvent: (event) => {
73
+ * if (event.category === 'command_execution') {
74
+ * securityLog.command(event);
75
+ * }
76
+ * },
77
+ * });
78
+ * ```
79
+ *
80
+ * @example
81
+ * ```typescript
82
+ * // JSON lines export for log aggregation
83
+ * const auditHooks = createAuditHooks({
84
+ * onEvent: (event) => {
85
+ * console.log(JSON.stringify(event));
86
+ * },
87
+ * });
88
+ * ```
89
+ *
90
+ * @category Hooks
91
+ */
92
+ export function createAuditHooks(options) {
93
+ const { onEvent, categories, auditTools = true, auditGeneration = true, auditErrors = true, metadata = {}, } = options;
94
+ const shouldAuditCategory = (category) => {
95
+ if (!categories)
96
+ return true;
97
+ return categories.includes(category);
98
+ };
99
+ // PreToolUse: Audit tool calls
100
+ const preToolUse = async (input, toolUseId) => {
101
+ if (input.hook_event_name !== "PreToolUse")
102
+ return {};
103
+ if (!auditTools)
104
+ return {};
105
+ const preToolInput = input;
106
+ const category = categorizeToolUse(preToolInput.tool_name);
107
+ if (!shouldAuditCategory(category))
108
+ return {};
109
+ const event = {
110
+ category,
111
+ event: "PreToolUse",
112
+ timestamp: Date.now(),
113
+ sessionId: preToolInput.session_id,
114
+ toolUseId,
115
+ toolName: preToolInput.tool_name,
116
+ toolInput: preToolInput.tool_input,
117
+ metadata,
118
+ };
119
+ await onEvent(event);
120
+ return {};
121
+ };
122
+ // PostToolUse: Audit successful tool execution
123
+ const postToolUse = async (input, toolUseId) => {
124
+ if (input.hook_event_name !== "PostToolUse")
125
+ return {};
126
+ if (!auditTools)
127
+ return {};
128
+ const postToolInput = input;
129
+ const category = categorizeToolUse(postToolInput.tool_name);
130
+ if (!shouldAuditCategory(category))
131
+ return {};
132
+ const event = {
133
+ category,
134
+ event: "PostToolUse",
135
+ timestamp: Date.now(),
136
+ sessionId: postToolInput.session_id,
137
+ toolUseId,
138
+ toolName: postToolInput.tool_name,
139
+ toolInput: postToolInput.tool_input,
140
+ toolOutput: postToolInput.tool_response,
141
+ metadata,
142
+ };
143
+ await onEvent(event);
144
+ return {};
145
+ };
146
+ // PostToolUseFailure: Audit tool errors
147
+ const postToolUseFailure = async (input, toolUseId) => {
148
+ if (input.hook_event_name !== "PostToolUseFailure")
149
+ return {};
150
+ if (!auditErrors)
151
+ return {};
152
+ const failureInput = input;
153
+ const category = categorizeToolUse(failureInput.tool_name);
154
+ if (!shouldAuditCategory(category) && !shouldAuditCategory("error"))
155
+ return {};
156
+ const event = {
157
+ category: "error",
158
+ event: "PostToolUseFailure",
159
+ timestamp: Date.now(),
160
+ sessionId: failureInput.session_id,
161
+ toolUseId,
162
+ toolName: failureInput.tool_name,
163
+ toolInput: failureInput.tool_input,
164
+ error: typeof failureInput.error === "string" ? failureInput.error : failureInput.error.message,
165
+ metadata,
166
+ };
167
+ await onEvent(event);
168
+ return {};
169
+ };
170
+ // PreGenerate: Audit generation requests
171
+ const preGenerate = async (input) => {
172
+ if (input.hook_event_name !== "PreGenerate")
173
+ return {};
174
+ if (!auditGeneration)
175
+ return {};
176
+ if (!shouldAuditCategory("generation"))
177
+ return {};
178
+ const preGenInput = input;
179
+ const event = {
180
+ category: "generation",
181
+ event: "PreGenerate",
182
+ timestamp: Date.now(),
183
+ sessionId: preGenInput.session_id,
184
+ metadata: {
185
+ ...metadata,
186
+ messageCount: preGenInput.options.messages?.length || 0,
187
+ },
188
+ };
189
+ await onEvent(event);
190
+ return {};
191
+ };
192
+ // PostGenerate: Audit generation results
193
+ const postGenerate = async (input) => {
194
+ if (input.hook_event_name !== "PostGenerate")
195
+ return {};
196
+ if (!auditGeneration)
197
+ return {};
198
+ if (!shouldAuditCategory("generation"))
199
+ return {};
200
+ const postGenInput = input;
201
+ const event = {
202
+ category: "generation",
203
+ event: "PostGenerate",
204
+ timestamp: Date.now(),
205
+ sessionId: postGenInput.session_id,
206
+ usage: postGenInput.result.usage,
207
+ metadata: {
208
+ ...metadata,
209
+ finishReason: postGenInput.result.finishReason,
210
+ },
211
+ };
212
+ await onEvent(event);
213
+ return {};
214
+ };
215
+ // PostGenerateFailure: Audit generation errors
216
+ const postGenerateFailure = async (input) => {
217
+ if (input.hook_event_name !== "PostGenerateFailure")
218
+ return {};
219
+ if (!auditErrors)
220
+ return {};
221
+ if (!shouldAuditCategory("error"))
222
+ return {};
223
+ const failureInput = input;
224
+ const event = {
225
+ category: "error",
226
+ event: "PostGenerateFailure",
227
+ timestamp: Date.now(),
228
+ sessionId: failureInput.session_id,
229
+ error: failureInput.error.message,
230
+ metadata,
231
+ };
232
+ await onEvent(event);
233
+ return {};
234
+ };
235
+ return [
236
+ preToolUse,
237
+ postToolUse,
238
+ postToolUseFailure,
239
+ preGenerate,
240
+ postGenerate,
241
+ postGenerateFailure,
242
+ ];
243
+ }
244
+ /**
245
+ * Export audit events to JSON Lines format.
246
+ *
247
+ * Returns a function that writes audit events to console.log
248
+ * in JSON Lines format (one JSON object per line), suitable for
249
+ * log aggregation tools.
250
+ *
251
+ * @returns Audit event handler for JSON Lines export
252
+ *
253
+ * @example
254
+ * ```typescript
255
+ * const auditHooks = createAuditHooks({
256
+ * onEvent: exportAuditEventsJSONLines(),
257
+ * });
258
+ * ```
259
+ *
260
+ * @category Hooks
261
+ */
262
+ export function exportAuditEventsJSONLines() {
263
+ return (event) => {
264
+ console.log(JSON.stringify(event));
265
+ };
266
+ }
267
+ /**
268
+ * Creates an in-memory audit event store.
269
+ *
270
+ * Useful for testing and development. Events are kept in memory
271
+ * with a configurable size limit.
272
+ *
273
+ * @param maxEvents - Maximum events to keep
274
+ * @returns Object with event handler and getter
275
+ *
276
+ * @example
277
+ * ```typescript
278
+ * const { onEvent, getEvents, clear } = createInMemoryAuditStore(1000);
279
+ *
280
+ * const auditHooks = createAuditHooks({ onEvent });
281
+ *
282
+ * // Later, retrieve events
283
+ * const events = getEvents();
284
+ * console.log(`Captured ${events.length} audit events`);
285
+ * ```
286
+ *
287
+ * @category Hooks
288
+ */
289
+ export function createInMemoryAuditStore(maxEvents = 1000) {
290
+ const events = [];
291
+ return {
292
+ onEvent: (event) => {
293
+ events.push(event);
294
+ // LRU eviction
295
+ if (events.length > maxEvents) {
296
+ events.shift();
297
+ }
298
+ },
299
+ getEvents: () => [...events],
300
+ clear: () => {
301
+ events.length = 0;
302
+ },
303
+ };
304
+ }
305
+ //# sourceMappingURL=audit.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"audit.js","sourceRoot":"","sources":["../../src/hooks/audit.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,180 @@
1
+ /**
2
+ * Cache hook utilities.
3
+ *
4
+ * Provides cache hooks that replace the cache middleware functionality
5
+ * using the unified hook system.
6
+ *
7
+ * @packageDocumentation
8
+ */
9
+ import type { HookCallback, HookCallbackContext, PreGenerateInput } from "../types.js";
10
+ /**
11
+ * Cache entry with timestamp for TTL enforcement.
12
+ *
13
+ * @category Hooks
14
+ */
15
+ export interface CacheEntry {
16
+ /** Cached result */
17
+ result: unknown;
18
+ /** Timestamp when cached (milliseconds since epoch) */
19
+ timestamp: number;
20
+ }
21
+ /**
22
+ * Cache storage interface.
23
+ *
24
+ * Implement this interface to provide custom cache backends
25
+ * (Redis, file-based, etc.).
26
+ *
27
+ * @category Hooks
28
+ */
29
+ export interface CacheStore {
30
+ /** Get a cached entry by key */
31
+ get(key: string): Promise<CacheEntry | undefined> | CacheEntry | undefined;
32
+ /** Store a cache entry */
33
+ set(key: string, value: CacheEntry): Promise<void> | void;
34
+ /** Delete a cache entry */
35
+ delete(key: string): Promise<boolean> | boolean;
36
+ /** Clear all cache entries */
37
+ clear(): Promise<void> | void;
38
+ }
39
+ /**
40
+ * Default in-memory cache store implementation with LRU eviction.
41
+ *
42
+ * @category Hooks
43
+ */
44
+ export declare class InMemoryCacheStore implements CacheStore {
45
+ private cache;
46
+ private maxSize;
47
+ constructor(maxSize?: number);
48
+ get(key: string): CacheEntry | undefined;
49
+ set(key: string, value: CacheEntry): void;
50
+ delete(key: string): boolean;
51
+ clear(): void;
52
+ /** Get current cache size */
53
+ get size(): number;
54
+ }
55
+ /**
56
+ * Options for creating cache hooks.
57
+ *
58
+ * @category Hooks
59
+ */
60
+ export interface CacheHooksOptions {
61
+ /**
62
+ * Time-to-live in milliseconds. Cached entries older than this are ignored.
63
+ * @defaultValue 300000 (5 minutes)
64
+ */
65
+ ttl?: number;
66
+ /**
67
+ * Maximum number of cache entries (for in-memory store).
68
+ * @defaultValue 100
69
+ */
70
+ maxSize?: number;
71
+ /**
72
+ * Custom cache key generator.
73
+ * @defaultValue Hashes messages, model, temperature, and maxTokens
74
+ */
75
+ keyGenerator?: (input: PreGenerateInput, context?: HookCallbackContext) => string;
76
+ /**
77
+ * Cache storage backend.
78
+ * @defaultValue New InMemoryCacheStore
79
+ */
80
+ store?: CacheStore;
81
+ /**
82
+ * Optional predicate to determine if a request should be cached.
83
+ * @defaultValue Always cache
84
+ */
85
+ shouldCache?: (input: PreGenerateInput) => boolean;
86
+ }
87
+ /**
88
+ * Creates cache hooks for PreGenerate and PostGenerate events.
89
+ *
90
+ * The PreGenerate hook checks for cached results and returns them via
91
+ * `respondWith` to short-circuit generation. The PostGenerate hook stores
92
+ * results in the cache.
93
+ *
94
+ * This replaces the cache middleware with hook-based caching that works
95
+ * correctly with streaming (hooks fire at lifecycle boundaries).
96
+ *
97
+ * @param options - Configuration options
98
+ * @returns Array of two hooks: [PreGenerate cache check, PostGenerate cache store]
99
+ *
100
+ * @example
101
+ * ```typescript
102
+ * const [cacheCheck, cacheStore] = createCacheHooks({
103
+ * ttl: 60000, // 1 minute
104
+ * maxSize: 50,
105
+ * });
106
+ *
107
+ * const agent = createAgent({
108
+ * model,
109
+ * hooks: {
110
+ * PreGenerate: [{ hooks: [cacheCheck] }],
111
+ * PostGenerate: [{ hooks: [cacheStore] }],
112
+ * },
113
+ * });
114
+ * ```
115
+ *
116
+ * @example
117
+ * ```typescript
118
+ * // Custom cache key based on last message
119
+ * const hooks = createCacheHooks({
120
+ * keyGenerator: (input) => {
121
+ * const lastMsg = input.options.messages?.[input.options.messages.length - 1];
122
+ * return JSON.stringify(lastMsg);
123
+ * },
124
+ * });
125
+ * ```
126
+ *
127
+ * @example
128
+ * ```typescript
129
+ * // Conditional caching (only cache when no tools)
130
+ * const hooks = createCacheHooks({
131
+ * shouldCache: (input) => !input.options.tools || Object.keys(input.options.tools).length === 0,
132
+ * ttl: 300000,
133
+ * });
134
+ * ```
135
+ *
136
+ * @category Hooks
137
+ */
138
+ export declare function createCacheHooks(options?: CacheHooksOptions): [HookCallback, HookCallback];
139
+ /**
140
+ * Creates managed cache hooks with programmatic cache control.
141
+ *
142
+ * Returns hooks along with functions to clear cache, delete entries,
143
+ * and get statistics.
144
+ *
145
+ * @param options - Configuration options
146
+ * @returns Object with hooks and cache control functions
147
+ *
148
+ * @example
149
+ * ```typescript
150
+ * const { hooks, clearCache, getStats } = createManagedCacheHooks();
151
+ *
152
+ * const agent = createAgent({
153
+ * model,
154
+ * hooks: {
155
+ * PreGenerate: [{ hooks: [hooks[0]] }],
156
+ * PostGenerate: [{ hooks: [hooks[1]] }],
157
+ * },
158
+ * });
159
+ *
160
+ * // Clear cache when needed
161
+ * await clearCache();
162
+ *
163
+ * // Get cache statistics
164
+ * const { size, hits, misses } = getStats();
165
+ * console.log(`Cache hit rate: ${hits / (hits + misses)}`);
166
+ * ```
167
+ *
168
+ * @category Hooks
169
+ */
170
+ export declare function createManagedCacheHooks(options?: CacheHooksOptions): {
171
+ hooks: [HookCallback, HookCallback];
172
+ clearCache: () => Promise<void> | void;
173
+ deleteEntry: (key: string) => Promise<boolean> | boolean;
174
+ getStats: () => {
175
+ size: number;
176
+ hits: number;
177
+ misses: number;
178
+ };
179
+ };
180
+ //# sourceMappingURL=cache.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cache.d.ts","sourceRoot":"","sources":["../../src/hooks/cache.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EACV,YAAY,EACZ,mBAAmB,EAEnB,gBAAgB,EACjB,MAAM,aAAa,CAAC;AAErB;;;;GAIG;AACH,MAAM,WAAW,UAAU;IACzB,oBAAoB;IACpB,MAAM,EAAE,OAAO,CAAC;IAChB,uDAAuD;IACvD,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;;;;;;GAOG;AACH,MAAM,WAAW,UAAU;IACzB,gCAAgC;IAChC,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,GAAG,SAAS,CAAC,GAAG,UAAU,GAAG,SAAS,CAAC;IAC3E,0BAA0B;IAC1B,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;IAC1D,2BAA2B;IAC3B,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,OAAO,CAAC;IAChD,8BAA8B;IAC9B,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;CAC/B;AAED;;;;GAIG;AACH,qBAAa,kBAAmB,YAAW,UAAU;IACnD,OAAO,CAAC,KAAK,CAAiC;IAC9C,OAAO,CAAC,OAAO,CAAS;gBAEZ,OAAO,SAAM;IAIzB,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,UAAU,GAAG,SAAS;IAIxC,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,GAAG,IAAI;IAWzC,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAI5B,KAAK,IAAI,IAAI;IAIb,6BAA6B;IAC7B,IAAI,IAAI,IAAI,MAAM,CAEjB;CACF;AAED;;;;GAIG;AACH,MAAM,WAAW,iBAAiB;IAChC;;;OAGG;IACH,GAAG,CAAC,EAAE,MAAM,CAAC;IAEb;;;OAGG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB;;;OAGG;IACH,YAAY,CAAC,EAAE,CAAC,KAAK,EAAE,gBAAgB,EAAE,OAAO,CAAC,EAAE,mBAAmB,KAAK,MAAM,CAAC;IAElF;;;OAGG;IACH,KAAK,CAAC,EAAE,UAAU,CAAC;IAEnB;;;OAGG;IACH,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,gBAAgB,KAAK,OAAO,CAAC;CACpD;AAoCD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkDG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,GAAE,iBAAsB,GAAG,CAAC,YAAY,EAAE,YAAY,CAAC,CAqE9F;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,wBAAgB,uBAAuB,CAAC,OAAO,GAAE,iBAAsB,GAAG;IACxE,KAAK,EAAE,CAAC,YAAY,EAAE,YAAY,CAAC,CAAC;IACpC,UAAU,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;IACvC,WAAW,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,GAAG,OAAO,CAAC;IACzD,QAAQ,EAAE,MAAM;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;CAChE,CA4EA"}