@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,374 @@
1
+ /**
2
+ * Logging middleware.
3
+ *
4
+ * Provides middleware for logging agent lifecycle events using the SDK's
5
+ * logging primitives. The middleware is transport-agnostic - users provide
6
+ * their own transport which determines where logs go.
7
+ *
8
+ * @packageDocumentation
9
+ */
10
+ import { createLogger } from "../observability/logger.js";
11
+ /**
12
+ * Truncates a string to the specified length.
13
+ */
14
+ function truncate(str, maxLen) {
15
+ if (str.length <= maxLen)
16
+ return str;
17
+ return `${str.slice(0, maxLen)}...`;
18
+ }
19
+ /**
20
+ * Safely stringifies a value for logging.
21
+ */
22
+ function safeStringify(value, maxLen) {
23
+ try {
24
+ const str = JSON.stringify(value);
25
+ return truncate(str, maxLen);
26
+ }
27
+ catch {
28
+ return "[Unable to stringify]";
29
+ }
30
+ }
31
+ /**
32
+ * Creates logging middleware that logs agent lifecycle events.
33
+ *
34
+ * The transport determines where logs go - SDK is agnostic. If you want
35
+ * streaming to a client, create a transport that writes to your stream.
36
+ *
37
+ * @param options - Logging middleware configuration
38
+ * @returns AgentMiddleware instance
39
+ *
40
+ * @example
41
+ * ```typescript
42
+ * // Console logging
43
+ * import { createAgent, createLoggingMiddleware, createConsoleTransport } from "@lleverage-ai/agent-sdk";
44
+ *
45
+ * const agent = createAgent({
46
+ * model,
47
+ * middleware: [
48
+ * createLoggingMiddleware({ transport: createConsoleTransport() }),
49
+ * ],
50
+ * });
51
+ * ```
52
+ *
53
+ * @example
54
+ * ```typescript
55
+ * // Custom transport (e.g., streaming to client)
56
+ * const streamTransport: LogTransport = {
57
+ * name: "client-stream",
58
+ * write: (entry) => {
59
+ * // User decides how to get this to the client
60
+ * res.write(`data: ${JSON.stringify(entry)}\n\n`);
61
+ * },
62
+ * };
63
+ *
64
+ * const agent = createAgent({
65
+ * model,
66
+ * middleware: [
67
+ * createLoggingMiddleware({ transport: streamTransport }),
68
+ * ],
69
+ * });
70
+ * ```
71
+ *
72
+ * @example
73
+ * ```typescript
74
+ * // External service (e.g., Datadog)
75
+ * const datadogTransport: LogTransport = {
76
+ * name: "datadog",
77
+ * write: (entry) => datadog.log(entry.level, entry.message, entry.context),
78
+ * };
79
+ *
80
+ * const agent = createAgent({
81
+ * model,
82
+ * middleware: [
83
+ * createLoggingMiddleware({ transport: datadogTransport }),
84
+ * ],
85
+ * });
86
+ * ```
87
+ *
88
+ * @category Middleware
89
+ */
90
+ export function createLoggingMiddleware(options) {
91
+ const { transport, level = "info", events = {}, maxContentLength = 500, includeTiming = true, name = "agent", } = options;
92
+ // Default all events to enabled
93
+ const { generation = true, tools = true, compaction = true, failures = true, subagents = true, interrupts = true, } = events;
94
+ // Create logger with the provided transport
95
+ const logger = createLogger({
96
+ name,
97
+ level,
98
+ transports: [transport],
99
+ });
100
+ // Track timing for operations
101
+ const generationStartTimes = new Map();
102
+ const toolStartTimes = new Map();
103
+ const compactionStartTimes = new Map();
104
+ const subagentStartTimes = new Map();
105
+ return {
106
+ name: "logging",
107
+ register(ctx) {
108
+ // Generation logging
109
+ if (generation) {
110
+ ctx.onPreGenerate(async (input) => {
111
+ if (input.hook_event_name !== "PreGenerate")
112
+ return {};
113
+ const preInput = input;
114
+ if (includeTiming) {
115
+ generationStartTimes.set(preInput.session_id, Date.now());
116
+ }
117
+ logger.info("Generation starting", {
118
+ messageCount: preInput.options.messages?.length ?? 0,
119
+ hasPrompt: !!preInput.options.prompt,
120
+ threadId: preInput.options.threadId,
121
+ });
122
+ return {};
123
+ });
124
+ ctx.onPostGenerate(async (input) => {
125
+ if (input.hook_event_name !== "PostGenerate")
126
+ return {};
127
+ const postInput = input;
128
+ const context = {
129
+ finishReason: postInput.result.finishReason,
130
+ text: truncate(postInput.result.text ?? "", maxContentLength),
131
+ stepCount: postInput.result.steps?.length ?? 0,
132
+ };
133
+ if (postInput.result.usage) {
134
+ context.tokens = {
135
+ input: postInput.result.usage.inputTokens,
136
+ output: postInput.result.usage.outputTokens,
137
+ total: postInput.result.usage.totalTokens,
138
+ };
139
+ }
140
+ if (includeTiming) {
141
+ const startTime = generationStartTimes.get(postInput.session_id);
142
+ if (startTime) {
143
+ context.durationMs = Date.now() - startTime;
144
+ generationStartTimes.delete(postInput.session_id);
145
+ }
146
+ }
147
+ logger.info("Generation complete", context);
148
+ return {};
149
+ });
150
+ }
151
+ // Generation failure logging
152
+ if (failures) {
153
+ ctx.onPostGenerateFailure(async (input) => {
154
+ if (input.hook_event_name !== "PostGenerateFailure")
155
+ return {};
156
+ const failInput = input;
157
+ const context = {
158
+ error: failInput.error?.message ?? "Unknown error",
159
+ };
160
+ if (includeTiming) {
161
+ const startTime = generationStartTimes.get(failInput.session_id);
162
+ if (startTime) {
163
+ context.durationMs = Date.now() - startTime;
164
+ generationStartTimes.delete(failInput.session_id);
165
+ }
166
+ }
167
+ logger.error("Generation failed", failInput.error, context);
168
+ return {};
169
+ });
170
+ }
171
+ // Tool logging
172
+ if (tools) {
173
+ ctx.onPreToolUse(async (input, toolUseId) => {
174
+ if (input.hook_event_name !== "PreToolUse")
175
+ return {};
176
+ const toolInput = input;
177
+ if (includeTiming && toolUseId) {
178
+ toolStartTimes.set(toolUseId, Date.now());
179
+ }
180
+ logger.info(`Tool call: ${toolInput.tool_name}`, {
181
+ toolName: toolInput.tool_name,
182
+ input: safeStringify(toolInput.tool_input, maxContentLength),
183
+ });
184
+ return {};
185
+ });
186
+ ctx.onPostToolUse(async (input, toolUseId) => {
187
+ if (input.hook_event_name !== "PostToolUse")
188
+ return {};
189
+ const toolInput = input;
190
+ const context = {
191
+ toolName: toolInput.tool_name,
192
+ output: safeStringify(toolInput.tool_response, maxContentLength),
193
+ };
194
+ if (includeTiming && toolUseId) {
195
+ const startTime = toolStartTimes.get(toolUseId);
196
+ if (startTime) {
197
+ context.durationMs = Date.now() - startTime;
198
+ toolStartTimes.delete(toolUseId);
199
+ }
200
+ }
201
+ logger.info(`Tool complete: ${toolInput.tool_name}`, context);
202
+ return {};
203
+ });
204
+ }
205
+ // Tool failure logging
206
+ if (failures) {
207
+ ctx.onPostToolUseFailure(async (input, toolUseId) => {
208
+ if (input.hook_event_name !== "PostToolUseFailure")
209
+ return {};
210
+ const toolInput = input;
211
+ const errorMessage = typeof toolInput.error === "string"
212
+ ? toolInput.error
213
+ : (toolInput.error?.message ?? "Unknown error");
214
+ const context = {
215
+ toolName: toolInput.tool_name,
216
+ error: errorMessage,
217
+ };
218
+ if (includeTiming && toolUseId) {
219
+ const startTime = toolStartTimes.get(toolUseId);
220
+ if (startTime) {
221
+ context.durationMs = Date.now() - startTime;
222
+ toolStartTimes.delete(toolUseId);
223
+ }
224
+ }
225
+ logger.error(`Tool failed: ${toolInput.tool_name}`, context);
226
+ return {};
227
+ });
228
+ }
229
+ // Compaction logging
230
+ if (compaction) {
231
+ ctx.onPreCompact(async (input) => {
232
+ if (input.hook_event_name !== "PreCompact")
233
+ return {};
234
+ const compactInput = input;
235
+ if (includeTiming) {
236
+ compactionStartTimes.set(compactInput.session_id, Date.now());
237
+ }
238
+ logger.info("Context compaction starting", {
239
+ messageCount: compactInput.message_count,
240
+ tokensBefore: compactInput.tokens_before,
241
+ });
242
+ return {};
243
+ });
244
+ ctx.onPostCompact(async (input) => {
245
+ if (input.hook_event_name !== "PostCompact")
246
+ return {};
247
+ const compactInput = input;
248
+ const reductionPercent = compactInput.tokens_before > 0
249
+ ? ((compactInput.tokens_saved / compactInput.tokens_before) * 100).toFixed(1)
250
+ : "0.0";
251
+ const context = {
252
+ messagesBefore: compactInput.messages_before,
253
+ messagesAfter: compactInput.messages_after,
254
+ tokensBefore: compactInput.tokens_before,
255
+ tokensAfter: compactInput.tokens_after,
256
+ tokensSaved: compactInput.tokens_saved,
257
+ reductionPercent,
258
+ };
259
+ if (includeTiming) {
260
+ const startTime = compactionStartTimes.get(compactInput.session_id);
261
+ if (startTime) {
262
+ context.durationMs = Date.now() - startTime;
263
+ compactionStartTimes.delete(compactInput.session_id);
264
+ }
265
+ }
266
+ logger.info("Context compaction complete", context);
267
+ return {};
268
+ });
269
+ }
270
+ // Subagent logging
271
+ if (subagents) {
272
+ ctx.onSubagentStart(async (input) => {
273
+ if (input.hook_event_name !== "SubagentStart")
274
+ return {};
275
+ const subagentInput = input;
276
+ if (includeTiming) {
277
+ subagentStartTimes.set(subagentInput.agent_id, Date.now());
278
+ }
279
+ logger.info(`Subagent started: ${subagentInput.agent_type}`, {
280
+ agentId: subagentInput.agent_id,
281
+ agentType: subagentInput.agent_type,
282
+ prompt: subagentInput.prompt
283
+ ? truncate(subagentInput.prompt, maxContentLength)
284
+ : undefined,
285
+ });
286
+ return {};
287
+ });
288
+ ctx.onSubagentStop(async (input) => {
289
+ if (input.hook_event_name !== "SubagentStop")
290
+ return {};
291
+ const subagentInput = input;
292
+ const context = {
293
+ agentId: subagentInput.agent_id,
294
+ agentType: subagentInput.agent_type,
295
+ };
296
+ if (subagentInput.error) {
297
+ context.error = subagentInput.error.message;
298
+ }
299
+ if (includeTiming) {
300
+ const startTime = subagentStartTimes.get(subagentInput.agent_id);
301
+ if (startTime) {
302
+ context.durationMs = Date.now() - startTime;
303
+ subagentStartTimes.delete(subagentInput.agent_id);
304
+ }
305
+ }
306
+ if (subagentInput.error) {
307
+ logger.error(`Subagent failed: ${subagentInput.agent_type}`, context);
308
+ }
309
+ else {
310
+ logger.info(`Subagent complete: ${subagentInput.agent_type}`, context);
311
+ }
312
+ return {};
313
+ });
314
+ }
315
+ // Interrupt logging
316
+ if (interrupts) {
317
+ ctx.onInterruptRequested(async (input) => {
318
+ if (input.hook_event_name !== "InterruptRequested")
319
+ return {};
320
+ const interruptInput = input;
321
+ const context = {
322
+ interruptId: interruptInput.interrupt_id,
323
+ interruptType: interruptInput.interrupt_type,
324
+ };
325
+ if (interruptInput.tool_name) {
326
+ context.toolName = interruptInput.tool_name;
327
+ }
328
+ if (interruptInput.tool_call_id) {
329
+ context.toolCallId = interruptInput.tool_call_id;
330
+ }
331
+ // For approval interrupts, log the request details
332
+ if (interruptInput.interrupt_type === "approval") {
333
+ logger.info(`Approval requested: ${interruptInput.tool_name}`, context);
334
+ }
335
+ else {
336
+ logger.info(`Interrupt requested: ${interruptInput.interrupt_type}`, context);
337
+ }
338
+ return {};
339
+ });
340
+ ctx.onInterruptResolved(async (input) => {
341
+ if (input.hook_event_name !== "InterruptResolved")
342
+ return {};
343
+ const interruptInput = input;
344
+ const context = {
345
+ interruptId: interruptInput.interrupt_id,
346
+ interruptType: interruptInput.interrupt_type,
347
+ };
348
+ if (interruptInput.tool_name) {
349
+ context.toolName = interruptInput.tool_name;
350
+ }
351
+ if (interruptInput.tool_call_id) {
352
+ context.toolCallId = interruptInput.tool_call_id;
353
+ }
354
+ // For approval interrupts, log the approval decision
355
+ if (interruptInput.interrupt_type === "approval") {
356
+ context.approved = interruptInput.approved;
357
+ const decision = interruptInput.approved ? "approved" : "denied";
358
+ logger.info(`Approval ${decision}: ${interruptInput.tool_name}`, context);
359
+ }
360
+ else {
361
+ logger.info(`Interrupt resolved: ${interruptInput.interrupt_type}`, context);
362
+ }
363
+ return {};
364
+ });
365
+ }
366
+ },
367
+ async teardown() {
368
+ // Flush and close the logger
369
+ await logger.flush();
370
+ await logger.close();
371
+ },
372
+ };
373
+ }
374
+ //# sourceMappingURL=logging.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logging.js","sourceRoot":"","sources":["../../src/middleware/logging.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,183 @@
1
+ /**
2
+ * Middleware type definitions.
3
+ *
4
+ * Middleware provides a clean API for adding cross-cutting concerns like
5
+ * logging, metrics, caching, and rate limiting to agents. Middleware wraps
6
+ * the underlying hook system with a more ergonomic interface.
7
+ *
8
+ * @packageDocumentation
9
+ */
10
+ import type { HookCallback, HookRegistration } from "../types.js";
11
+ /**
12
+ * Context provided to middleware for registering hooks.
13
+ *
14
+ * Middleware uses this context to register event handlers during agent
15
+ * creation. Hooks are registered in middleware order, preserving the
16
+ * order in which middleware was added.
17
+ *
18
+ * @category Middleware
19
+ */
20
+ export interface MiddlewareContext {
21
+ /**
22
+ * Register a PreGenerate hook.
23
+ * Called before each generation request.
24
+ */
25
+ onPreGenerate(callback: HookCallback): void;
26
+ /**
27
+ * Register a PostGenerate hook.
28
+ * Called after each successful generation.
29
+ */
30
+ onPostGenerate(callback: HookCallback): void;
31
+ /**
32
+ * Register a PostGenerateFailure hook.
33
+ * Called when generation fails.
34
+ */
35
+ onPostGenerateFailure(callback: HookCallback): void;
36
+ /**
37
+ * Register a PreToolUse hook.
38
+ * Called before each tool execution.
39
+ *
40
+ * @param callback - The hook callback to invoke
41
+ * @param matcher - Optional regex pattern to match tool names (e.g., "Write|Edit")
42
+ */
43
+ onPreToolUse(callback: HookCallback, matcher?: string): void;
44
+ /**
45
+ * Register a PostToolUse hook.
46
+ * Called after each successful tool execution.
47
+ *
48
+ * @param callback - The hook callback to invoke
49
+ * @param matcher - Optional regex pattern to match tool names
50
+ */
51
+ onPostToolUse(callback: HookCallback, matcher?: string): void;
52
+ /**
53
+ * Register a PostToolUseFailure hook.
54
+ * Called when tool execution fails.
55
+ *
56
+ * @param callback - The hook callback to invoke
57
+ * @param matcher - Optional regex pattern to match tool names
58
+ */
59
+ onPostToolUseFailure(callback: HookCallback, matcher?: string): void;
60
+ /**
61
+ * Register a PreCompact hook.
62
+ * Called before context compaction.
63
+ */
64
+ onPreCompact(callback: HookCallback): void;
65
+ /**
66
+ * Register a PostCompact hook.
67
+ * Called after context compaction.
68
+ */
69
+ onPostCompact(callback: HookCallback): void;
70
+ /**
71
+ * Register a SessionStart hook.
72
+ * Called when a session starts.
73
+ */
74
+ onSessionStart(callback: HookCallback): void;
75
+ /**
76
+ * Register a SessionEnd hook.
77
+ * Called when a session ends.
78
+ */
79
+ onSessionEnd(callback: HookCallback): void;
80
+ /**
81
+ * Register a SubagentStart hook.
82
+ * Called when a subagent starts.
83
+ */
84
+ onSubagentStart(callback: HookCallback): void;
85
+ /**
86
+ * Register a SubagentStop hook.
87
+ * Called when a subagent stops.
88
+ */
89
+ onSubagentStop(callback: HookCallback): void;
90
+ /**
91
+ * Register an MCPConnectionFailed hook.
92
+ * Called when an MCP connection fails.
93
+ */
94
+ onMCPConnectionFailed(callback: HookCallback): void;
95
+ /**
96
+ * Register an MCPConnectionRestored hook.
97
+ * Called when an MCP connection is restored.
98
+ */
99
+ onMCPConnectionRestored(callback: HookCallback): void;
100
+ /**
101
+ * Register an InterruptRequested hook.
102
+ * Called when an interrupt is requested (approval request, custom interrupt, etc.).
103
+ */
104
+ onInterruptRequested(callback: HookCallback): void;
105
+ /**
106
+ * Register an InterruptResolved hook.
107
+ * Called when an interrupt is resolved (approved, denied, or custom response).
108
+ */
109
+ onInterruptResolved(callback: HookCallback): void;
110
+ }
111
+ /**
112
+ * Agent middleware interface.
113
+ *
114
+ * Middleware registers hooks and can have lifecycle methods for setup and
115
+ * teardown. Middleware provides a cleaner API than raw hooks for adding
116
+ * cross-cutting concerns to agents.
117
+ *
118
+ * @example
119
+ * ```typescript
120
+ * const loggingMiddleware: AgentMiddleware = {
121
+ * name: "logging",
122
+ * register(ctx) {
123
+ * ctx.onPreGenerate(async (input) => {
124
+ * console.log("Generation starting");
125
+ * return {};
126
+ * });
127
+ * ctx.onPostGenerate(async (input) => {
128
+ * console.log("Generation complete");
129
+ * return {};
130
+ * });
131
+ * },
132
+ * };
133
+ * ```
134
+ *
135
+ * @category Middleware
136
+ */
137
+ export interface AgentMiddleware {
138
+ /**
139
+ * Unique middleware name.
140
+ * Used for debugging and error messages.
141
+ */
142
+ name: string;
143
+ /**
144
+ * Called during agent creation to register hooks.
145
+ *
146
+ * Use the context to register event handlers for various lifecycle events.
147
+ * Hooks are executed in the order middleware was added to the agent.
148
+ *
149
+ * @param context - The middleware context for registering hooks
150
+ */
151
+ register(context: MiddlewareContext): void;
152
+ /**
153
+ * Optional setup called during agent creation.
154
+ *
155
+ * Use this for initialization that needs to happen before the agent
156
+ * starts processing requests, such as establishing connections or
157
+ * loading configuration.
158
+ */
159
+ setup?(): Promise<void> | void;
160
+ /**
161
+ * Optional teardown for cleanup.
162
+ *
163
+ * Use this to clean up resources when the agent is being disposed,
164
+ * such as closing connections or flushing buffers.
165
+ */
166
+ teardown?(): Promise<void> | void;
167
+ }
168
+ /**
169
+ * Result of creating a middleware context.
170
+ *
171
+ * Contains the context for registering hooks and a function to retrieve
172
+ * the collected hook registrations.
173
+ *
174
+ * @category Middleware
175
+ * @internal
176
+ */
177
+ export interface MiddlewareContextResult {
178
+ /** The context provided to middleware for registering hooks */
179
+ context: MiddlewareContext;
180
+ /** Get the collected hook registrations */
181
+ getHooks(): HookRegistration;
182
+ }
183
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/middleware/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAElE;;;;;;;;GAQG;AACH,MAAM,WAAW,iBAAiB;IAChC;;;OAGG;IACH,aAAa,CAAC,QAAQ,EAAE,YAAY,GAAG,IAAI,CAAC;IAE5C;;;OAGG;IACH,cAAc,CAAC,QAAQ,EAAE,YAAY,GAAG,IAAI,CAAC;IAE7C;;;OAGG;IACH,qBAAqB,CAAC,QAAQ,EAAE,YAAY,GAAG,IAAI,CAAC;IAEpD;;;;;;OAMG;IACH,YAAY,CAAC,QAAQ,EAAE,YAAY,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAE7D;;;;;;OAMG;IACH,aAAa,CAAC,QAAQ,EAAE,YAAY,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAE9D;;;;;;OAMG;IACH,oBAAoB,CAAC,QAAQ,EAAE,YAAY,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAErE;;;OAGG;IACH,YAAY,CAAC,QAAQ,EAAE,YAAY,GAAG,IAAI,CAAC;IAE3C;;;OAGG;IACH,aAAa,CAAC,QAAQ,EAAE,YAAY,GAAG,IAAI,CAAC;IAE5C;;;OAGG;IACH,cAAc,CAAC,QAAQ,EAAE,YAAY,GAAG,IAAI,CAAC;IAE7C;;;OAGG;IACH,YAAY,CAAC,QAAQ,EAAE,YAAY,GAAG,IAAI,CAAC;IAE3C;;;OAGG;IACH,eAAe,CAAC,QAAQ,EAAE,YAAY,GAAG,IAAI,CAAC;IAE9C;;;OAGG;IACH,cAAc,CAAC,QAAQ,EAAE,YAAY,GAAG,IAAI,CAAC;IAE7C;;;OAGG;IACH,qBAAqB,CAAC,QAAQ,EAAE,YAAY,GAAG,IAAI,CAAC;IAEpD;;;OAGG;IACH,uBAAuB,CAAC,QAAQ,EAAE,YAAY,GAAG,IAAI,CAAC;IAEtD;;;OAGG;IACH,oBAAoB,CAAC,QAAQ,EAAE,YAAY,GAAG,IAAI,CAAC;IAEnD;;;OAGG;IACH,mBAAmB,CAAC,QAAQ,EAAE,YAAY,GAAG,IAAI,CAAC;CACnD;AAED;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,MAAM,WAAW,eAAe;IAC9B;;;OAGG;IACH,IAAI,EAAE,MAAM,CAAC;IAEb;;;;;;;OAOG;IACH,QAAQ,CAAC,OAAO,EAAE,iBAAiB,GAAG,IAAI,CAAC;IAE3C;;;;;;OAMG;IACH,KAAK,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;IAE/B;;;;;OAKG;IACH,QAAQ,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;CACnC;AAED;;;;;;;;GAQG;AACH,MAAM,WAAW,uBAAuB;IACtC,+DAA+D;IAC/D,OAAO,EAAE,iBAAiB,CAAC;IAC3B,2CAA2C;IAC3C,QAAQ,IAAI,gBAAgB,CAAC;CAC9B"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Middleware type definitions.
3
+ *
4
+ * Middleware provides a clean API for adding cross-cutting concerns like
5
+ * logging, metrics, caching, and rate limiting to agents. Middleware wraps
6
+ * the underlying hook system with a more ergonomic interface.
7
+ *
8
+ * @packageDocumentation
9
+ */
10
+ export {};
11
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/middleware/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG"}