@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.
- package/LICENSE +21 -0
- package/README.md +2321 -0
- package/dist/agent.d.ts +52 -0
- package/dist/agent.d.ts.map +1 -0
- package/dist/agent.js +2122 -0
- package/dist/agent.js.map +1 -0
- package/dist/backend.d.ts +378 -0
- package/dist/backend.d.ts.map +1 -0
- package/dist/backend.js +71 -0
- package/dist/backend.js.map +1 -0
- package/dist/backends/composite.d.ts +258 -0
- package/dist/backends/composite.d.ts.map +1 -0
- package/dist/backends/composite.js +437 -0
- package/dist/backends/composite.js.map +1 -0
- package/dist/backends/filesystem.d.ts +268 -0
- package/dist/backends/filesystem.d.ts.map +1 -0
- package/dist/backends/filesystem.js +623 -0
- package/dist/backends/filesystem.js.map +1 -0
- package/dist/backends/index.d.ts +14 -0
- package/dist/backends/index.d.ts.map +1 -0
- package/dist/backends/index.js +14 -0
- package/dist/backends/index.js.map +1 -0
- package/dist/backends/persistent.d.ts +312 -0
- package/dist/backends/persistent.d.ts.map +1 -0
- package/dist/backends/persistent.js +519 -0
- package/dist/backends/persistent.js.map +1 -0
- package/dist/backends/sandbox.d.ts +315 -0
- package/dist/backends/sandbox.d.ts.map +1 -0
- package/dist/backends/sandbox.js +490 -0
- package/dist/backends/sandbox.js.map +1 -0
- package/dist/backends/state.d.ts +225 -0
- package/dist/backends/state.d.ts.map +1 -0
- package/dist/backends/state.js +396 -0
- package/dist/backends/state.js.map +1 -0
- package/dist/checkpointer/file-saver.d.ts +182 -0
- package/dist/checkpointer/file-saver.d.ts.map +1 -0
- package/dist/checkpointer/file-saver.js +298 -0
- package/dist/checkpointer/file-saver.js.map +1 -0
- package/dist/checkpointer/index.d.ts +40 -0
- package/dist/checkpointer/index.d.ts.map +1 -0
- package/dist/checkpointer/index.js +40 -0
- package/dist/checkpointer/index.js.map +1 -0
- package/dist/checkpointer/kv-saver.d.ts +142 -0
- package/dist/checkpointer/kv-saver.d.ts.map +1 -0
- package/dist/checkpointer/kv-saver.js +176 -0
- package/dist/checkpointer/kv-saver.js.map +1 -0
- package/dist/checkpointer/memory-saver.d.ts +158 -0
- package/dist/checkpointer/memory-saver.d.ts.map +1 -0
- package/dist/checkpointer/memory-saver.js +222 -0
- package/dist/checkpointer/memory-saver.js.map +1 -0
- package/dist/checkpointer/types.d.ts +353 -0
- package/dist/checkpointer/types.d.ts.map +1 -0
- package/dist/checkpointer/types.js +159 -0
- package/dist/checkpointer/types.js.map +1 -0
- package/dist/context-manager.d.ts +627 -0
- package/dist/context-manager.d.ts.map +1 -0
- package/dist/context-manager.js +1039 -0
- package/dist/context-manager.js.map +1 -0
- package/dist/context.d.ts +57 -0
- package/dist/context.d.ts.map +1 -0
- package/dist/context.js +76 -0
- package/dist/context.js.map +1 -0
- package/dist/errors/index.d.ts +611 -0
- package/dist/errors/index.d.ts.map +1 -0
- package/dist/errors/index.js +1023 -0
- package/dist/errors/index.js.map +1 -0
- package/dist/generation-helpers.d.ts +126 -0
- package/dist/generation-helpers.d.ts.map +1 -0
- package/dist/generation-helpers.js +181 -0
- package/dist/generation-helpers.js.map +1 -0
- package/dist/hooks/audit.d.ts +210 -0
- package/dist/hooks/audit.d.ts.map +1 -0
- package/dist/hooks/audit.js +305 -0
- package/dist/hooks/audit.js.map +1 -0
- package/dist/hooks/cache.d.ts +180 -0
- package/dist/hooks/cache.d.ts.map +1 -0
- package/dist/hooks/cache.js +273 -0
- package/dist/hooks/cache.js.map +1 -0
- package/dist/hooks/guardrails.d.ts +145 -0
- package/dist/hooks/guardrails.d.ts.map +1 -0
- package/dist/hooks/guardrails.js +326 -0
- package/dist/hooks/guardrails.js.map +1 -0
- package/dist/hooks/index.d.ts +18 -0
- package/dist/hooks/index.d.ts.map +1 -0
- package/dist/hooks/index.js +32 -0
- package/dist/hooks/index.js.map +1 -0
- package/dist/hooks/logging.d.ts +193 -0
- package/dist/hooks/logging.d.ts.map +1 -0
- package/dist/hooks/logging.js +345 -0
- package/dist/hooks/logging.js.map +1 -0
- package/dist/hooks/parallel-guardrails.d.ts +268 -0
- package/dist/hooks/parallel-guardrails.d.ts.map +1 -0
- package/dist/hooks/parallel-guardrails.js +416 -0
- package/dist/hooks/parallel-guardrails.js.map +1 -0
- package/dist/hooks/rate-limit.d.ts +305 -0
- package/dist/hooks/rate-limit.d.ts.map +1 -0
- package/dist/hooks/rate-limit.js +372 -0
- package/dist/hooks/rate-limit.js.map +1 -0
- package/dist/hooks/retry.d.ts +144 -0
- package/dist/hooks/retry.d.ts.map +1 -0
- package/dist/hooks/retry.js +210 -0
- package/dist/hooks/retry.js.map +1 -0
- package/dist/hooks/secrets.d.ts +174 -0
- package/dist/hooks/secrets.d.ts.map +1 -0
- package/dist/hooks/secrets.js +306 -0
- package/dist/hooks/secrets.js.map +1 -0
- package/dist/hooks.d.ts +229 -0
- package/dist/hooks.d.ts.map +1 -0
- package/dist/hooks.js +352 -0
- package/dist/hooks.js.map +1 -0
- package/dist/index.d.ts +97 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +182 -0
- package/dist/index.js.map +1 -0
- package/dist/mcp/env.d.ts +25 -0
- package/dist/mcp/env.d.ts.map +1 -0
- package/dist/mcp/env.js +18 -0
- package/dist/mcp/env.js.map +1 -0
- package/dist/mcp/index.d.ts +16 -0
- package/dist/mcp/index.d.ts.map +1 -0
- package/dist/mcp/index.js +17 -0
- package/dist/mcp/index.js.map +1 -0
- package/dist/mcp/manager.d.ts +184 -0
- package/dist/mcp/manager.d.ts.map +1 -0
- package/dist/mcp/manager.js +446 -0
- package/dist/mcp/manager.js.map +1 -0
- package/dist/mcp/types.d.ts +58 -0
- package/dist/mcp/types.d.ts.map +1 -0
- package/dist/mcp/types.js +7 -0
- package/dist/mcp/types.js.map +1 -0
- package/dist/mcp/validation.d.ts +119 -0
- package/dist/mcp/validation.d.ts.map +1 -0
- package/dist/mcp/validation.js +407 -0
- package/dist/mcp/validation.js.map +1 -0
- package/dist/mcp/virtual-server.d.ts +78 -0
- package/dist/mcp/virtual-server.d.ts.map +1 -0
- package/dist/mcp/virtual-server.js +137 -0
- package/dist/mcp/virtual-server.js.map +1 -0
- package/dist/memory/filesystem-store.d.ts +217 -0
- package/dist/memory/filesystem-store.d.ts.map +1 -0
- package/dist/memory/filesystem-store.js +343 -0
- package/dist/memory/filesystem-store.js.map +1 -0
- package/dist/memory/index.d.ts +46 -0
- package/dist/memory/index.d.ts.map +1 -0
- package/dist/memory/index.js +46 -0
- package/dist/memory/index.js.map +1 -0
- package/dist/memory/loader.d.ts +396 -0
- package/dist/memory/loader.d.ts.map +1 -0
- package/dist/memory/loader.js +419 -0
- package/dist/memory/loader.js.map +1 -0
- package/dist/memory/permissions.d.ts +282 -0
- package/dist/memory/permissions.d.ts.map +1 -0
- package/dist/memory/permissions.js +297 -0
- package/dist/memory/permissions.js.map +1 -0
- package/dist/memory/rules.d.ts +249 -0
- package/dist/memory/rules.d.ts.map +1 -0
- package/dist/memory/rules.js +362 -0
- package/dist/memory/rules.js.map +1 -0
- package/dist/memory/store.d.ts +286 -0
- package/dist/memory/store.d.ts.map +1 -0
- package/dist/memory/store.js +263 -0
- package/dist/memory/store.js.map +1 -0
- package/dist/middleware/apply.d.ts +73 -0
- package/dist/middleware/apply.d.ts.map +1 -0
- package/dist/middleware/apply.js +219 -0
- package/dist/middleware/apply.js.map +1 -0
- package/dist/middleware/context.d.ts +33 -0
- package/dist/middleware/context.d.ts.map +1 -0
- package/dist/middleware/context.js +176 -0
- package/dist/middleware/context.js.map +1 -0
- package/dist/middleware/index.d.ts +31 -0
- package/dist/middleware/index.d.ts.map +1 -0
- package/dist/middleware/index.js +32 -0
- package/dist/middleware/index.js.map +1 -0
- package/dist/middleware/logging.d.ts +137 -0
- package/dist/middleware/logging.d.ts.map +1 -0
- package/dist/middleware/logging.js +374 -0
- package/dist/middleware/logging.js.map +1 -0
- package/dist/middleware/types.d.ts +183 -0
- package/dist/middleware/types.d.ts.map +1 -0
- package/dist/middleware/types.js +11 -0
- package/dist/middleware/types.js.map +1 -0
- package/dist/observability/events.d.ts +183 -0
- package/dist/observability/events.d.ts.map +1 -0
- package/dist/observability/events.js +305 -0
- package/dist/observability/events.js.map +1 -0
- package/dist/observability/index.d.ts +55 -0
- package/dist/observability/index.d.ts.map +1 -0
- package/dist/observability/index.js +87 -0
- package/dist/observability/index.js.map +1 -0
- package/dist/observability/logger.d.ts +318 -0
- package/dist/observability/logger.d.ts.map +1 -0
- package/dist/observability/logger.js +436 -0
- package/dist/observability/logger.js.map +1 -0
- package/dist/observability/metrics.d.ts +341 -0
- package/dist/observability/metrics.d.ts.map +1 -0
- package/dist/observability/metrics.js +490 -0
- package/dist/observability/metrics.js.map +1 -0
- package/dist/observability/preset.d.ts +161 -0
- package/dist/observability/preset.d.ts.map +1 -0
- package/dist/observability/preset.js +133 -0
- package/dist/observability/preset.js.map +1 -0
- package/dist/observability/streaming.d.ts +113 -0
- package/dist/observability/streaming.d.ts.map +1 -0
- package/dist/observability/streaming.js +114 -0
- package/dist/observability/streaming.js.map +1 -0
- package/dist/observability/tracing.d.ts +378 -0
- package/dist/observability/tracing.d.ts.map +1 -0
- package/dist/observability/tracing.js +539 -0
- package/dist/observability/tracing.js.map +1 -0
- package/dist/plugins.d.ts +55 -0
- package/dist/plugins.d.ts.map +1 -0
- package/dist/plugins.js +63 -0
- package/dist/plugins.js.map +1 -0
- package/dist/presets/index.d.ts +7 -0
- package/dist/presets/index.d.ts.map +1 -0
- package/dist/presets/index.js +7 -0
- package/dist/presets/index.js.map +1 -0
- package/dist/presets/production.d.ts +262 -0
- package/dist/presets/production.d.ts.map +1 -0
- package/dist/presets/production.js +295 -0
- package/dist/presets/production.js.map +1 -0
- package/dist/security/index.d.ts +179 -0
- package/dist/security/index.d.ts.map +1 -0
- package/dist/security/index.js +323 -0
- package/dist/security/index.js.map +1 -0
- package/dist/subagents/advanced.d.ts +413 -0
- package/dist/subagents/advanced.d.ts.map +1 -0
- package/dist/subagents/advanced.js +396 -0
- package/dist/subagents/advanced.js.map +1 -0
- package/dist/subagents/index.d.ts +14 -0
- package/dist/subagents/index.d.ts.map +1 -0
- package/dist/subagents/index.js +15 -0
- package/dist/subagents/index.js.map +1 -0
- package/dist/subagents.d.ts +73 -0
- package/dist/subagents.d.ts.map +1 -0
- package/dist/subagents.js +213 -0
- package/dist/subagents.js.map +1 -0
- package/dist/task-store/file-store.d.ts +76 -0
- package/dist/task-store/file-store.d.ts.map +1 -0
- package/dist/task-store/file-store.js +190 -0
- package/dist/task-store/file-store.js.map +1 -0
- package/dist/task-store/index.d.ts +11 -0
- package/dist/task-store/index.d.ts.map +1 -0
- package/dist/task-store/index.js +10 -0
- package/dist/task-store/index.js.map +1 -0
- package/dist/task-store/kv-store.d.ts +140 -0
- package/dist/task-store/kv-store.d.ts.map +1 -0
- package/dist/task-store/kv-store.js +169 -0
- package/dist/task-store/kv-store.js.map +1 -0
- package/dist/task-store/memory-store.d.ts +66 -0
- package/dist/task-store/memory-store.d.ts.map +1 -0
- package/dist/task-store/memory-store.js +125 -0
- package/dist/task-store/memory-store.js.map +1 -0
- package/dist/task-store/types.d.ts +235 -0
- package/dist/task-store/types.d.ts.map +1 -0
- package/dist/task-store/types.js +110 -0
- package/dist/task-store/types.js.map +1 -0
- package/dist/testing/assertions.d.ts +401 -0
- package/dist/testing/assertions.d.ts.map +1 -0
- package/dist/testing/assertions.js +630 -0
- package/dist/testing/assertions.js.map +1 -0
- package/dist/testing/index.d.ts +343 -0
- package/dist/testing/index.d.ts.map +1 -0
- package/dist/testing/index.js +360 -0
- package/dist/testing/index.js.map +1 -0
- package/dist/testing/mock-agent.d.ts +214 -0
- package/dist/testing/mock-agent.d.ts.map +1 -0
- package/dist/testing/mock-agent.js +448 -0
- package/dist/testing/mock-agent.js.map +1 -0
- package/dist/testing/recorder.d.ts +288 -0
- package/dist/testing/recorder.d.ts.map +1 -0
- package/dist/testing/recorder.js +499 -0
- package/dist/testing/recorder.js.map +1 -0
- package/dist/tools/execute.d.ts +104 -0
- package/dist/tools/execute.d.ts.map +1 -0
- package/dist/tools/execute.js +191 -0
- package/dist/tools/execute.js.map +1 -0
- package/dist/tools/factory.d.ts +260 -0
- package/dist/tools/factory.d.ts.map +1 -0
- package/dist/tools/factory.js +241 -0
- package/dist/tools/factory.js.map +1 -0
- package/dist/tools/filesystem.d.ts +215 -0
- package/dist/tools/filesystem.d.ts.map +1 -0
- package/dist/tools/filesystem.js +311 -0
- package/dist/tools/filesystem.js.map +1 -0
- package/dist/tools/index.d.ts +33 -0
- package/dist/tools/index.d.ts.map +1 -0
- package/dist/tools/index.js +33 -0
- package/dist/tools/index.js.map +1 -0
- package/dist/tools/search.d.ts +59 -0
- package/dist/tools/search.d.ts.map +1 -0
- package/dist/tools/search.js +94 -0
- package/dist/tools/search.js.map +1 -0
- package/dist/tools/skills.d.ts +354 -0
- package/dist/tools/skills.d.ts.map +1 -0
- package/dist/tools/skills.js +413 -0
- package/dist/tools/skills.js.map +1 -0
- package/dist/tools/task.d.ts +272 -0
- package/dist/tools/task.d.ts.map +1 -0
- package/dist/tools/task.js +521 -0
- package/dist/tools/task.js.map +1 -0
- package/dist/tools/todos.d.ts +131 -0
- package/dist/tools/todos.d.ts.map +1 -0
- package/dist/tools/todos.js +120 -0
- package/dist/tools/todos.js.map +1 -0
- package/dist/tools/tool-registry.d.ts +424 -0
- package/dist/tools/tool-registry.d.ts.map +1 -0
- package/dist/tools/tool-registry.js +607 -0
- package/dist/tools/tool-registry.js.map +1 -0
- package/dist/tools/user-interaction.d.ts +116 -0
- package/dist/tools/user-interaction.d.ts.map +1 -0
- package/dist/tools/user-interaction.js +147 -0
- package/dist/tools/user-interaction.js.map +1 -0
- package/dist/tools/utils.d.ts +124 -0
- package/dist/tools/utils.d.ts.map +1 -0
- package/dist/tools/utils.js +189 -0
- package/dist/tools/utils.js.map +1 -0
- package/dist/tools.d.ts +74 -0
- package/dist/tools.d.ts.map +1 -0
- package/dist/tools.js +73 -0
- package/dist/tools.js.map +1 -0
- package/dist/types.d.ts +2421 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +55 -0
- package/dist/types.js.map +1 -0
- 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"}
|