@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,144 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Retry hook utilities.
|
|
3
|
+
*
|
|
4
|
+
* Provides retry hooks with exponential backoff that replace the retry
|
|
5
|
+
* middleware functionality using the unified hook system.
|
|
6
|
+
*
|
|
7
|
+
* @packageDocumentation
|
|
8
|
+
*/
|
|
9
|
+
import type { HookCallback } from "../types.js";
|
|
10
|
+
/**
|
|
11
|
+
* Options for creating retry hooks.
|
|
12
|
+
*
|
|
13
|
+
* @category Hooks
|
|
14
|
+
*/
|
|
15
|
+
export interface RetryHooksOptions {
|
|
16
|
+
/**
|
|
17
|
+
* Maximum number of retry attempts.
|
|
18
|
+
* @defaultValue 3
|
|
19
|
+
*/
|
|
20
|
+
maxRetries?: number;
|
|
21
|
+
/**
|
|
22
|
+
* Base delay in milliseconds for the first retry.
|
|
23
|
+
* @defaultValue 1000 (1 second)
|
|
24
|
+
*/
|
|
25
|
+
baseDelay?: number;
|
|
26
|
+
/**
|
|
27
|
+
* Maximum delay in milliseconds between retries.
|
|
28
|
+
* @defaultValue 30000 (30 seconds)
|
|
29
|
+
*/
|
|
30
|
+
maxDelay?: number;
|
|
31
|
+
/**
|
|
32
|
+
* Backoff multiplier for exponential backoff.
|
|
33
|
+
* @defaultValue 2 (doubles each retry)
|
|
34
|
+
*/
|
|
35
|
+
backoffMultiplier?: number;
|
|
36
|
+
/**
|
|
37
|
+
* Whether to add random jitter to retry delays (0-50% of delay).
|
|
38
|
+
* Helps avoid thundering herd problem.
|
|
39
|
+
* @defaultValue true
|
|
40
|
+
*/
|
|
41
|
+
jitter?: boolean;
|
|
42
|
+
/**
|
|
43
|
+
* Custom function to determine if an error should trigger a retry.
|
|
44
|
+
* @defaultValue Retries rate limits, server errors, network errors, timeouts
|
|
45
|
+
*/
|
|
46
|
+
shouldRetry?: (error: Error, attempt: number) => boolean;
|
|
47
|
+
/**
|
|
48
|
+
* Custom delay calculator.
|
|
49
|
+
* @defaultValue Exponential backoff with jitter
|
|
50
|
+
*/
|
|
51
|
+
calculateDelay?: (attempt: number) => number;
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Creates a retry hook for PostGenerateFailure events.
|
|
55
|
+
*
|
|
56
|
+
* The hook implements exponential backoff with optional jitter for handling
|
|
57
|
+
* transient failures. When a retryable error occurs, the hook signals the
|
|
58
|
+
* agent to retry with an appropriate delay.
|
|
59
|
+
*
|
|
60
|
+
* This replaces the retry middleware with hook-based retry that works
|
|
61
|
+
* correctly with the unified hook system.
|
|
62
|
+
*
|
|
63
|
+
* @param options - Configuration options
|
|
64
|
+
* @returns A PostGenerateFailure hook that handles retries
|
|
65
|
+
*
|
|
66
|
+
* @example
|
|
67
|
+
* ```typescript
|
|
68
|
+
* const retryHook = createRetryHooks({
|
|
69
|
+
* maxRetries: 3,
|
|
70
|
+
* baseDelay: 1000,
|
|
71
|
+
* backoffMultiplier: 2,
|
|
72
|
+
* });
|
|
73
|
+
*
|
|
74
|
+
* const agent = createAgent({
|
|
75
|
+
* model,
|
|
76
|
+
* hooks: {
|
|
77
|
+
* PostGenerateFailure: [{ hooks: [retryHook] }],
|
|
78
|
+
* },
|
|
79
|
+
* });
|
|
80
|
+
* ```
|
|
81
|
+
*
|
|
82
|
+
* @example
|
|
83
|
+
* ```typescript
|
|
84
|
+
* // Custom retry logic for specific errors
|
|
85
|
+
* const retryHook = createRetryHooks({
|
|
86
|
+
* shouldRetry: (error, attempt) => {
|
|
87
|
+
* // Only retry rate limits, and only up to 5 times
|
|
88
|
+
* return error.message.includes('rate limit') && attempt < 5;
|
|
89
|
+
* },
|
|
90
|
+
* baseDelay: 2000,
|
|
91
|
+
* });
|
|
92
|
+
* ```
|
|
93
|
+
*
|
|
94
|
+
* @example
|
|
95
|
+
* ```typescript
|
|
96
|
+
* // Custom delay calculation (linear backoff)
|
|
97
|
+
* const retryHook = createRetryHooks({
|
|
98
|
+
* calculateDelay: (attempt) => attempt * 1000, // 1s, 2s, 3s, ...
|
|
99
|
+
* });
|
|
100
|
+
* ```
|
|
101
|
+
*
|
|
102
|
+
* @category Hooks
|
|
103
|
+
*/
|
|
104
|
+
export declare function createRetryHooks(options?: RetryHooksOptions): HookCallback;
|
|
105
|
+
/**
|
|
106
|
+
* Creates a retry hook with custom statistics tracking.
|
|
107
|
+
*
|
|
108
|
+
* Returns the hook along with a function to get retry statistics.
|
|
109
|
+
*
|
|
110
|
+
* @param options - Configuration options
|
|
111
|
+
* @returns Object with hook and statistics getter
|
|
112
|
+
*
|
|
113
|
+
* @example
|
|
114
|
+
* ```typescript
|
|
115
|
+
* const { hook: retryHook, getStats } = createManagedRetryHooks({
|
|
116
|
+
* maxRetries: 5,
|
|
117
|
+
* baseDelay: 1000,
|
|
118
|
+
* });
|
|
119
|
+
*
|
|
120
|
+
* const agent = createAgent({
|
|
121
|
+
* model,
|
|
122
|
+
* hooks: {
|
|
123
|
+
* PostGenerateFailure: [{ hooks: [retryHook] }],
|
|
124
|
+
* },
|
|
125
|
+
* });
|
|
126
|
+
*
|
|
127
|
+
* // Later, check statistics
|
|
128
|
+
* const stats = getStats();
|
|
129
|
+
* console.log(`Retry rate: ${stats.retries / stats.failures}`);
|
|
130
|
+
* console.log(`Average retries per failure: ${stats.retries / Math.max(1, stats.retriedFailures)}`);
|
|
131
|
+
* ```
|
|
132
|
+
*
|
|
133
|
+
* @category Hooks
|
|
134
|
+
*/
|
|
135
|
+
export declare function createManagedRetryHooks(options?: RetryHooksOptions): {
|
|
136
|
+
hook: HookCallback;
|
|
137
|
+
getStats: () => {
|
|
138
|
+
failures: number;
|
|
139
|
+
retries: number;
|
|
140
|
+
retriedFailures: number;
|
|
141
|
+
successAfterRetry: number;
|
|
142
|
+
};
|
|
143
|
+
};
|
|
144
|
+
//# sourceMappingURL=retry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"retry.d.ts","sourceRoot":"","sources":["../../src/hooks/retry.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAiD,MAAM,aAAa,CAAC;AAE/F;;;;GAIG;AACH,MAAM,WAAW,iBAAiB;IAChC;;;OAGG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IAEpB;;;OAGG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB;;;OAGG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB;;;OAGG;IACH,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAE3B;;;;OAIG;IACH,MAAM,CAAC,EAAE,OAAO,CAAC;IAEjB;;;OAGG;IACH,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC;IAEzD;;;OAGG;IACH,cAAc,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,MAAM,CAAC;CAC9C;AA+CD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkDG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,GAAE,iBAAsB,GAAG,YAAY,CAuD9E;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,wBAAgB,uBAAuB,CAAC,OAAO,GAAE,iBAAsB,GAAG;IACxE,IAAI,EAAE,YAAY,CAAC;IACnB,QAAQ,EAAE,MAAM;QACd,QAAQ,EAAE,MAAM,CAAC;QACjB,OAAO,EAAE,MAAM,CAAC;QAChB,eAAe,EAAE,MAAM,CAAC;QACxB,iBAAiB,EAAE,MAAM,CAAC;KAC3B,CAAC;CACH,CAgEA"}
|
|
@@ -0,0 +1,210 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Retry hook utilities.
|
|
3
|
+
*
|
|
4
|
+
* Provides retry hooks with exponential backoff that replace the retry
|
|
5
|
+
* middleware functionality using the unified hook system.
|
|
6
|
+
*
|
|
7
|
+
* @packageDocumentation
|
|
8
|
+
*/
|
|
9
|
+
/**
|
|
10
|
+
* Default function to determine if an error should trigger a retry.
|
|
11
|
+
*
|
|
12
|
+
* Retries on:
|
|
13
|
+
* - Rate limit errors (429, "rate limit")
|
|
14
|
+
* - Server errors (5xx)
|
|
15
|
+
* - Network errors (ECONNRESET, ECONNREFUSED, ETIMEDOUT)
|
|
16
|
+
* - Timeout errors
|
|
17
|
+
*/
|
|
18
|
+
function defaultShouldRetry(error, _attempt) {
|
|
19
|
+
const message = error.message.toLowerCase();
|
|
20
|
+
// Rate limit
|
|
21
|
+
if (message.includes("rate limit") || message.includes("429")) {
|
|
22
|
+
return true;
|
|
23
|
+
}
|
|
24
|
+
// Server errors
|
|
25
|
+
if (message.includes("500") ||
|
|
26
|
+
message.includes("502") ||
|
|
27
|
+
message.includes("503") ||
|
|
28
|
+
message.includes("504")) {
|
|
29
|
+
return true;
|
|
30
|
+
}
|
|
31
|
+
// Network errors
|
|
32
|
+
if (message.includes("network") ||
|
|
33
|
+
message.includes("econnreset") ||
|
|
34
|
+
message.includes("econnrefused") ||
|
|
35
|
+
message.includes("etimedout")) {
|
|
36
|
+
return true;
|
|
37
|
+
}
|
|
38
|
+
// Timeout errors
|
|
39
|
+
if (message.includes("timeout")) {
|
|
40
|
+
return true;
|
|
41
|
+
}
|
|
42
|
+
return false;
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Creates a retry hook for PostGenerateFailure events.
|
|
46
|
+
*
|
|
47
|
+
* The hook implements exponential backoff with optional jitter for handling
|
|
48
|
+
* transient failures. When a retryable error occurs, the hook signals the
|
|
49
|
+
* agent to retry with an appropriate delay.
|
|
50
|
+
*
|
|
51
|
+
* This replaces the retry middleware with hook-based retry that works
|
|
52
|
+
* correctly with the unified hook system.
|
|
53
|
+
*
|
|
54
|
+
* @param options - Configuration options
|
|
55
|
+
* @returns A PostGenerateFailure hook that handles retries
|
|
56
|
+
*
|
|
57
|
+
* @example
|
|
58
|
+
* ```typescript
|
|
59
|
+
* const retryHook = createRetryHooks({
|
|
60
|
+
* maxRetries: 3,
|
|
61
|
+
* baseDelay: 1000,
|
|
62
|
+
* backoffMultiplier: 2,
|
|
63
|
+
* });
|
|
64
|
+
*
|
|
65
|
+
* const agent = createAgent({
|
|
66
|
+
* model,
|
|
67
|
+
* hooks: {
|
|
68
|
+
* PostGenerateFailure: [{ hooks: [retryHook] }],
|
|
69
|
+
* },
|
|
70
|
+
* });
|
|
71
|
+
* ```
|
|
72
|
+
*
|
|
73
|
+
* @example
|
|
74
|
+
* ```typescript
|
|
75
|
+
* // Custom retry logic for specific errors
|
|
76
|
+
* const retryHook = createRetryHooks({
|
|
77
|
+
* shouldRetry: (error, attempt) => {
|
|
78
|
+
* // Only retry rate limits, and only up to 5 times
|
|
79
|
+
* return error.message.includes('rate limit') && attempt < 5;
|
|
80
|
+
* },
|
|
81
|
+
* baseDelay: 2000,
|
|
82
|
+
* });
|
|
83
|
+
* ```
|
|
84
|
+
*
|
|
85
|
+
* @example
|
|
86
|
+
* ```typescript
|
|
87
|
+
* // Custom delay calculation (linear backoff)
|
|
88
|
+
* const retryHook = createRetryHooks({
|
|
89
|
+
* calculateDelay: (attempt) => attempt * 1000, // 1s, 2s, 3s, ...
|
|
90
|
+
* });
|
|
91
|
+
* ```
|
|
92
|
+
*
|
|
93
|
+
* @category Hooks
|
|
94
|
+
*/
|
|
95
|
+
export function createRetryHooks(options = {}) {
|
|
96
|
+
const { maxRetries = 3, baseDelay = 1000, maxDelay = 30000, backoffMultiplier = 2, jitter = true, shouldRetry = defaultShouldRetry, calculateDelay: customCalculateDelay, } = options;
|
|
97
|
+
/**
|
|
98
|
+
* Calculate delay for next retry with exponential backoff and optional jitter.
|
|
99
|
+
*/
|
|
100
|
+
function calculateDelay(attempt) {
|
|
101
|
+
// Exponential backoff: baseDelay * multiplier^(attempt-1)
|
|
102
|
+
let delay = baseDelay * backoffMultiplier ** (attempt - 1);
|
|
103
|
+
// Cap at maxDelay
|
|
104
|
+
delay = Math.min(delay, maxDelay);
|
|
105
|
+
// Add jitter (0-50% of delay)
|
|
106
|
+
if (jitter) {
|
|
107
|
+
delay = delay * (0.5 + Math.random() * 0.5);
|
|
108
|
+
}
|
|
109
|
+
return Math.round(delay);
|
|
110
|
+
}
|
|
111
|
+
const delayCalculator = customCalculateDelay || calculateDelay;
|
|
112
|
+
const retryHook = async (input, _toolUseId, context) => {
|
|
113
|
+
if (input.hook_event_name !== "PostGenerateFailure")
|
|
114
|
+
return {};
|
|
115
|
+
const failureInput = input;
|
|
116
|
+
const attempt = context.retryAttempt ?? 0;
|
|
117
|
+
// Check if we should retry
|
|
118
|
+
if (attempt < maxRetries && shouldRetry(failureInput.error, attempt + 1)) {
|
|
119
|
+
const delay = delayCalculator(attempt + 1);
|
|
120
|
+
return {
|
|
121
|
+
hookSpecificOutput: {
|
|
122
|
+
hookEventName: "PostGenerateFailure",
|
|
123
|
+
retry: true,
|
|
124
|
+
retryDelayMs: delay,
|
|
125
|
+
},
|
|
126
|
+
};
|
|
127
|
+
}
|
|
128
|
+
// Max retries reached or error not retryable - let error propagate
|
|
129
|
+
return {};
|
|
130
|
+
};
|
|
131
|
+
return retryHook;
|
|
132
|
+
}
|
|
133
|
+
/**
|
|
134
|
+
* Creates a retry hook with custom statistics tracking.
|
|
135
|
+
*
|
|
136
|
+
* Returns the hook along with a function to get retry statistics.
|
|
137
|
+
*
|
|
138
|
+
* @param options - Configuration options
|
|
139
|
+
* @returns Object with hook and statistics getter
|
|
140
|
+
*
|
|
141
|
+
* @example
|
|
142
|
+
* ```typescript
|
|
143
|
+
* const { hook: retryHook, getStats } = createManagedRetryHooks({
|
|
144
|
+
* maxRetries: 5,
|
|
145
|
+
* baseDelay: 1000,
|
|
146
|
+
* });
|
|
147
|
+
*
|
|
148
|
+
* const agent = createAgent({
|
|
149
|
+
* model,
|
|
150
|
+
* hooks: {
|
|
151
|
+
* PostGenerateFailure: [{ hooks: [retryHook] }],
|
|
152
|
+
* },
|
|
153
|
+
* });
|
|
154
|
+
*
|
|
155
|
+
* // Later, check statistics
|
|
156
|
+
* const stats = getStats();
|
|
157
|
+
* console.log(`Retry rate: ${stats.retries / stats.failures}`);
|
|
158
|
+
* console.log(`Average retries per failure: ${stats.retries / Math.max(1, stats.retriedFailures)}`);
|
|
159
|
+
* ```
|
|
160
|
+
*
|
|
161
|
+
* @category Hooks
|
|
162
|
+
*/
|
|
163
|
+
export function createManagedRetryHooks(options = {}) {
|
|
164
|
+
const { maxRetries = 3, baseDelay = 1000, maxDelay = 30000, backoffMultiplier = 2, jitter = true, shouldRetry = defaultShouldRetry, calculateDelay: customCalculateDelay, } = options;
|
|
165
|
+
let totalFailures = 0;
|
|
166
|
+
let totalRetries = 0;
|
|
167
|
+
let retriedFailures = 0;
|
|
168
|
+
const successAfterRetry = 0;
|
|
169
|
+
function calculateDelay(attempt) {
|
|
170
|
+
let delay = baseDelay * backoffMultiplier ** (attempt - 1);
|
|
171
|
+
delay = Math.min(delay, maxDelay);
|
|
172
|
+
if (jitter) {
|
|
173
|
+
delay = delay * (0.5 + Math.random() * 0.5);
|
|
174
|
+
}
|
|
175
|
+
return Math.round(delay);
|
|
176
|
+
}
|
|
177
|
+
const delayCalculator = customCalculateDelay || calculateDelay;
|
|
178
|
+
const retryHook = async (input, _toolUseId, context) => {
|
|
179
|
+
if (input.hook_event_name !== "PostGenerateFailure")
|
|
180
|
+
return {};
|
|
181
|
+
const failureInput = input;
|
|
182
|
+
const attempt = context.retryAttempt ?? 0;
|
|
183
|
+
totalFailures++;
|
|
184
|
+
if (attempt < maxRetries && shouldRetry(failureInput.error, attempt + 1)) {
|
|
185
|
+
if (attempt === 0) {
|
|
186
|
+
retriedFailures++;
|
|
187
|
+
}
|
|
188
|
+
totalRetries++;
|
|
189
|
+
const delay = delayCalculator(attempt + 1);
|
|
190
|
+
return {
|
|
191
|
+
hookSpecificOutput: {
|
|
192
|
+
hookEventName: "PostGenerateFailure",
|
|
193
|
+
retry: true,
|
|
194
|
+
retryDelayMs: delay,
|
|
195
|
+
},
|
|
196
|
+
};
|
|
197
|
+
}
|
|
198
|
+
return {};
|
|
199
|
+
};
|
|
200
|
+
return {
|
|
201
|
+
hook: retryHook,
|
|
202
|
+
getStats: () => ({
|
|
203
|
+
failures: totalFailures,
|
|
204
|
+
retries: totalRetries,
|
|
205
|
+
retriedFailures,
|
|
206
|
+
successAfterRetry,
|
|
207
|
+
}),
|
|
208
|
+
};
|
|
209
|
+
}
|
|
210
|
+
//# sourceMappingURL=retry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"retry.js","sourceRoot":"","sources":["../../src/hooks/retry.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,174 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Secrets filtering hook utilities.
|
|
3
|
+
*
|
|
4
|
+
* Provides hooks to detect and redact common secret patterns in inputs
|
|
5
|
+
* and outputs using the unified hook system.
|
|
6
|
+
*
|
|
7
|
+
* @packageDocumentation
|
|
8
|
+
*/
|
|
9
|
+
import type { HookCallback } from "../types.js";
|
|
10
|
+
/**
|
|
11
|
+
* Common secret patterns for automatic detection.
|
|
12
|
+
*
|
|
13
|
+
* @category Hooks
|
|
14
|
+
*/
|
|
15
|
+
export declare const COMMON_SECRET_PATTERNS: {
|
|
16
|
+
/** AWS access keys (AKIA...) */
|
|
17
|
+
AWS_ACCESS_KEY: RegExp;
|
|
18
|
+
/** AWS secret keys (40 chars base64) */
|
|
19
|
+
AWS_SECRET_KEY: RegExp;
|
|
20
|
+
/** GitHub personal access tokens */
|
|
21
|
+
GITHUB_TOKEN: RegExp;
|
|
22
|
+
/** GitHub OAuth tokens */
|
|
23
|
+
GITHUB_OAUTH: RegExp;
|
|
24
|
+
/** Generic API keys (common formats) */
|
|
25
|
+
API_KEY: RegExp;
|
|
26
|
+
/** Bearer tokens */
|
|
27
|
+
BEARER_TOKEN: RegExp;
|
|
28
|
+
/** JWT tokens */
|
|
29
|
+
JWT: RegExp;
|
|
30
|
+
/** Private keys (PEM format headers) */
|
|
31
|
+
PRIVATE_KEY: RegExp;
|
|
32
|
+
/** Generic passwords in common formats */
|
|
33
|
+
PASSWORD: RegExp;
|
|
34
|
+
/** Slack tokens */
|
|
35
|
+
SLACK_TOKEN: RegExp;
|
|
36
|
+
/** Stripe API keys */
|
|
37
|
+
STRIPE_KEY: RegExp;
|
|
38
|
+
/** Generic secrets in common formats */
|
|
39
|
+
GENERIC_SECRET: RegExp;
|
|
40
|
+
};
|
|
41
|
+
/**
|
|
42
|
+
* Options for creating secrets filter hooks.
|
|
43
|
+
*
|
|
44
|
+
* @category Hooks
|
|
45
|
+
*/
|
|
46
|
+
export interface SecretsFilterHooksOptions {
|
|
47
|
+
/**
|
|
48
|
+
* Custom secret patterns to detect (in addition to built-in patterns).
|
|
49
|
+
*/
|
|
50
|
+
customPatterns?: RegExp[];
|
|
51
|
+
/**
|
|
52
|
+
* Built-in patterns to use.
|
|
53
|
+
* @defaultValue All patterns from COMMON_SECRET_PATTERNS
|
|
54
|
+
*/
|
|
55
|
+
patterns?: RegExp[];
|
|
56
|
+
/**
|
|
57
|
+
* Replacement text for redacted secrets.
|
|
58
|
+
* @defaultValue "[REDACTED]"
|
|
59
|
+
*/
|
|
60
|
+
redactionText?: string;
|
|
61
|
+
/**
|
|
62
|
+
* Whether to filter input (user messages).
|
|
63
|
+
* @defaultValue true
|
|
64
|
+
*/
|
|
65
|
+
filterInput?: boolean;
|
|
66
|
+
/**
|
|
67
|
+
* Whether to filter output (model responses).
|
|
68
|
+
* @defaultValue true
|
|
69
|
+
*/
|
|
70
|
+
filterOutput?: boolean;
|
|
71
|
+
/**
|
|
72
|
+
* Callback when secrets are detected.
|
|
73
|
+
* Useful for logging/alerting.
|
|
74
|
+
*/
|
|
75
|
+
onSecretDetected?: (type: "input" | "output", pattern: RegExp, match: string) => void;
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Creates secrets filtering hooks for input and output.
|
|
79
|
+
*
|
|
80
|
+
* The PreGenerate hook redacts secrets from input messages before sending
|
|
81
|
+
* to the model. The PostGenerate hook redacts secrets from model responses.
|
|
82
|
+
*
|
|
83
|
+
* This addresses the secrets redaction requirement from CODE_REVIEW.md
|
|
84
|
+
* using the unified hook system.
|
|
85
|
+
*
|
|
86
|
+
* @param options - Configuration options
|
|
87
|
+
* @returns Array of two hooks: [PreGenerate input filter, PostGenerate output filter]
|
|
88
|
+
*
|
|
89
|
+
* @example
|
|
90
|
+
* ```typescript
|
|
91
|
+
* const [inputFilter, outputFilter] = createSecretsFilterHooks({
|
|
92
|
+
* redactionText: "***REDACTED***",
|
|
93
|
+
* });
|
|
94
|
+
*
|
|
95
|
+
* const agent = createAgent({
|
|
96
|
+
* model,
|
|
97
|
+
* hooks: {
|
|
98
|
+
* PreGenerate: [{ hooks: [inputFilter] }],
|
|
99
|
+
* PostGenerate: [{ hooks: [outputFilter] }],
|
|
100
|
+
* },
|
|
101
|
+
* });
|
|
102
|
+
* ```
|
|
103
|
+
*
|
|
104
|
+
* @example
|
|
105
|
+
* ```typescript
|
|
106
|
+
* // Custom patterns with alerting
|
|
107
|
+
* const hooks = createSecretsFilterHooks({
|
|
108
|
+
* customPatterns: [/my-secret-format-[A-Z0-9]{16}/g],
|
|
109
|
+
* onSecretDetected: (type, pattern, match) => {
|
|
110
|
+
* console.warn(`Secret detected in ${type}:`, pattern.source);
|
|
111
|
+
* alertSecurityTeam({ type, pattern: pattern.source });
|
|
112
|
+
* },
|
|
113
|
+
* });
|
|
114
|
+
* ```
|
|
115
|
+
*
|
|
116
|
+
* @example
|
|
117
|
+
* ```typescript
|
|
118
|
+
* // Only specific patterns
|
|
119
|
+
* const hooks = createSecretsFilterHooks({
|
|
120
|
+
* patterns: [
|
|
121
|
+
* COMMON_SECRET_PATTERNS.AWS_ACCESS_KEY,
|
|
122
|
+
* COMMON_SECRET_PATTERNS.GITHUB_TOKEN,
|
|
123
|
+
* ],
|
|
124
|
+
* });
|
|
125
|
+
* ```
|
|
126
|
+
*
|
|
127
|
+
* @category Hooks
|
|
128
|
+
*/
|
|
129
|
+
export declare function createSecretsFilterHooks(options?: SecretsFilterHooksOptions): [HookCallback, HookCallback];
|
|
130
|
+
/**
|
|
131
|
+
* Creates managed secrets filter hooks with detection statistics.
|
|
132
|
+
*
|
|
133
|
+
* Returns hooks along with functions to get detection statistics.
|
|
134
|
+
*
|
|
135
|
+
* @param options - Configuration options
|
|
136
|
+
* @returns Object with hooks and statistics getter
|
|
137
|
+
*
|
|
138
|
+
* @example
|
|
139
|
+
* ```typescript
|
|
140
|
+
* const { hooks, getStats, getDetections } = createManagedSecretsFilterHooks();
|
|
141
|
+
*
|
|
142
|
+
* const agent = createAgent({
|
|
143
|
+
* model,
|
|
144
|
+
* hooks: {
|
|
145
|
+
* PreGenerate: [{ hooks: [hooks[0]] }],
|
|
146
|
+
* PostGenerate: [{ hooks: [hooks[1]] }],
|
|
147
|
+
* },
|
|
148
|
+
* });
|
|
149
|
+
*
|
|
150
|
+
* // Check statistics
|
|
151
|
+
* const stats = getStats();
|
|
152
|
+
* console.log(`Secrets detected: ${stats.totalDetections} (${stats.inputDetections} input, ${stats.outputDetections} output)`);
|
|
153
|
+
*
|
|
154
|
+
* // Get detailed detections
|
|
155
|
+
* const detections = getDetections();
|
|
156
|
+
* console.log('Recent detections:', detections.slice(0, 10));
|
|
157
|
+
* ```
|
|
158
|
+
*
|
|
159
|
+
* @category Hooks
|
|
160
|
+
*/
|
|
161
|
+
export declare function createManagedSecretsFilterHooks(options?: SecretsFilterHooksOptions): {
|
|
162
|
+
hooks: [HookCallback, HookCallback];
|
|
163
|
+
getStats: () => {
|
|
164
|
+
inputDetections: number;
|
|
165
|
+
outputDetections: number;
|
|
166
|
+
totalDetections: number;
|
|
167
|
+
};
|
|
168
|
+
getDetections: () => Array<{
|
|
169
|
+
type: "input" | "output";
|
|
170
|
+
pattern: string;
|
|
171
|
+
timestamp: number;
|
|
172
|
+
}>;
|
|
173
|
+
};
|
|
174
|
+
//# sourceMappingURL=secrets.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"secrets.d.ts","sourceRoot":"","sources":["../../src/hooks/secrets.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAuC,MAAM,aAAa,CAAC;AAErF;;;;GAIG;AACH,eAAO,MAAM,sBAAsB;IACjC,gCAAgC;;IAGhC,wCAAwC;;IAGxC,oCAAoC;;IAGpC,0BAA0B;;IAG1B,wCAAwC;;IAGxC,oBAAoB;;IAGpB,iBAAiB;;IAGjB,wCAAwC;;IAIxC,0CAA0C;;IAG1C,mBAAmB;;IAGnB,sBAAsB;;IAGtB,wCAAwC;;CAEzC,CAAC;AAEF;;;;GAIG;AACH,MAAM,WAAW,yBAAyB;IACxC;;OAEG;IACH,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAE1B;;;OAGG;IACH,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IAEpB;;;OAGG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;IAEvB;;;OAGG;IACH,WAAW,CAAC,EAAE,OAAO,CAAC;IAEtB;;;OAGG;IACH,YAAY,CAAC,EAAE,OAAO,CAAC;IAEvB;;;OAGG;IACH,gBAAgB,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,GAAG,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;CACvF;AA6ED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmDG;AACH,wBAAgB,wBAAwB,CACtC,OAAO,GAAE,yBAA8B,GACtC,CAAC,YAAY,EAAE,YAAY,CAAC,CA6E9B;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,wBAAgB,+BAA+B,CAAC,OAAO,GAAE,yBAA8B,GAAG;IACxF,KAAK,EAAE,CAAC,YAAY,EAAE,YAAY,CAAC,CAAC;IACpC,QAAQ,EAAE,MAAM;QACd,eAAe,EAAE,MAAM,CAAC;QACxB,gBAAgB,EAAE,MAAM,CAAC;QACzB,eAAe,EAAE,MAAM,CAAC;KACzB,CAAC;IACF,aAAa,EAAE,MAAM,KAAK,CAAC;QACzB,IAAI,EAAE,OAAO,GAAG,QAAQ,CAAC;QACzB,OAAO,EAAE,MAAM,CAAC;QAChB,SAAS,EAAE,MAAM,CAAC;KACnB,CAAC,CAAC;CACJ,CAqGA"}
|