@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,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"}
|