@everworker/oneringai 0.4.8 → 0.5.0
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/README.md +423 -43
- package/dist/{ImageModel-1uP-2vk7.d.ts → ImageModel-CV8OuP3Z.d.ts} +10 -4
- package/dist/{ImageModel-BDI37OED.d.cts → ImageModel-OjV5NvLY.d.cts} +10 -4
- package/dist/capabilities/agents/index.cjs +9 -0
- package/dist/capabilities/agents/index.cjs.map +1 -1
- package/dist/capabilities/agents/index.d.cts +1 -1
- package/dist/capabilities/agents/index.d.ts +1 -1
- package/dist/capabilities/agents/index.js +9 -0
- package/dist/capabilities/agents/index.js.map +1 -1
- package/dist/capabilities/images/index.cjs +262 -15
- package/dist/capabilities/images/index.cjs.map +1 -1
- package/dist/capabilities/images/index.d.cts +1 -1
- package/dist/capabilities/images/index.d.ts +1 -1
- package/dist/capabilities/images/index.js +262 -15
- package/dist/capabilities/images/index.js.map +1 -1
- package/dist/index-BlEwczd4.d.ts +320 -0
- package/dist/index-DrJYI_0l.d.cts +320 -0
- package/dist/{index-13HQuxEB.d.ts → index-hmTj59TM.d.ts} +352 -29
- package/dist/{index-Cbd5vY_8.d.cts → index-t4cRhBZW.d.cts} +352 -29
- package/dist/index.cjs +15543 -4232
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +3043 -586
- package/dist/index.d.ts +3043 -586
- package/dist/index.js +14567 -3281
- package/dist/index.js.map +1 -1
- package/dist/shared/index.cjs +596 -7
- package/dist/shared/index.cjs.map +1 -1
- package/dist/shared/index.d.cts +2 -284
- package/dist/shared/index.d.ts +2 -284
- package/dist/shared/index.js +596 -7
- package/dist/shared/index.js.map +1 -1
- package/package.json +1 -1
|
@@ -295,11 +295,17 @@ interface IImageModelDescription extends IBaseModelDescription {
|
|
|
295
295
|
}
|
|
296
296
|
declare const IMAGE_MODELS: {
|
|
297
297
|
readonly openai: {
|
|
298
|
-
/** GPT-Image-1:
|
|
298
|
+
/** GPT-Image-1.5: State-of-the-art image generation */
|
|
299
|
+
readonly GPT_IMAGE_1_5: "gpt-image-1.5";
|
|
300
|
+
/** ChatGPT-Image-Latest: Image model used in ChatGPT (floating alias) */
|
|
301
|
+
readonly CHATGPT_IMAGE_LATEST: "chatgpt-image-latest";
|
|
302
|
+
/** GPT-Image-1: Previous generation image model */
|
|
299
303
|
readonly GPT_IMAGE_1: "gpt-image-1";
|
|
300
|
-
/**
|
|
304
|
+
/** GPT-Image-1-Mini: Cost-efficient version of GPT Image 1 */
|
|
305
|
+
readonly GPT_IMAGE_1_MINI: "gpt-image-1-mini";
|
|
306
|
+
/** DALL-E 3: Deprecated. High quality image generation */
|
|
301
307
|
readonly DALL_E_3: "dall-e-3";
|
|
302
|
-
/** DALL-E 2:
|
|
308
|
+
/** DALL-E 2: Deprecated. Supports editing and variations */
|
|
303
309
|
readonly DALL_E_2: "dall-e-2";
|
|
304
310
|
};
|
|
305
311
|
readonly google: {
|
|
@@ -325,7 +331,7 @@ declare const IMAGE_MODELS: {
|
|
|
325
331
|
};
|
|
326
332
|
/**
|
|
327
333
|
* Complete image model registry
|
|
328
|
-
* Last full audit:
|
|
334
|
+
* Last full audit: March 2026
|
|
329
335
|
*/
|
|
330
336
|
declare const IMAGE_MODEL_REGISTRY: Record<string, IImageModelDescription>;
|
|
331
337
|
declare const getImageModelInfo: (modelName: string) => IImageModelDescription | undefined;
|
|
@@ -295,11 +295,17 @@ interface IImageModelDescription extends IBaseModelDescription {
|
|
|
295
295
|
}
|
|
296
296
|
declare const IMAGE_MODELS: {
|
|
297
297
|
readonly openai: {
|
|
298
|
-
/** GPT-Image-1:
|
|
298
|
+
/** GPT-Image-1.5: State-of-the-art image generation */
|
|
299
|
+
readonly GPT_IMAGE_1_5: "gpt-image-1.5";
|
|
300
|
+
/** ChatGPT-Image-Latest: Image model used in ChatGPT (floating alias) */
|
|
301
|
+
readonly CHATGPT_IMAGE_LATEST: "chatgpt-image-latest";
|
|
302
|
+
/** GPT-Image-1: Previous generation image model */
|
|
299
303
|
readonly GPT_IMAGE_1: "gpt-image-1";
|
|
300
|
-
/**
|
|
304
|
+
/** GPT-Image-1-Mini: Cost-efficient version of GPT Image 1 */
|
|
305
|
+
readonly GPT_IMAGE_1_MINI: "gpt-image-1-mini";
|
|
306
|
+
/** DALL-E 3: Deprecated. High quality image generation */
|
|
301
307
|
readonly DALL_E_3: "dall-e-3";
|
|
302
|
-
/** DALL-E 2:
|
|
308
|
+
/** DALL-E 2: Deprecated. Supports editing and variations */
|
|
303
309
|
readonly DALL_E_2: "dall-e-2";
|
|
304
310
|
};
|
|
305
311
|
readonly google: {
|
|
@@ -325,7 +331,7 @@ declare const IMAGE_MODELS: {
|
|
|
325
331
|
};
|
|
326
332
|
/**
|
|
327
333
|
* Complete image model registry
|
|
328
|
-
* Last full audit:
|
|
334
|
+
* Last full audit: March 2026
|
|
329
335
|
*/
|
|
330
336
|
declare const IMAGE_MODEL_REGISTRY: Record<string, IImageModelDescription>;
|
|
331
337
|
declare const getImageModelInfo: (modelName: string) => IImageModelDescription | undefined;
|
|
@@ -209,6 +209,7 @@ var ExecutionContext = class {
|
|
|
209
209
|
|
|
210
210
|
// src/capabilities/agents/HookManager.ts
|
|
211
211
|
var HookManager = class {
|
|
212
|
+
_isDestroyed = false;
|
|
212
213
|
hooks = /* @__PURE__ */ new Map();
|
|
213
214
|
timeout;
|
|
214
215
|
parallel;
|
|
@@ -399,10 +400,18 @@ var HookManager = class {
|
|
|
399
400
|
this.hookErrorCounts.clear();
|
|
400
401
|
this.disabledHooks.clear();
|
|
401
402
|
}
|
|
403
|
+
/**
|
|
404
|
+
* Check if the hook manager has been destroyed
|
|
405
|
+
*/
|
|
406
|
+
get isDestroyed() {
|
|
407
|
+
return this._isDestroyed;
|
|
408
|
+
}
|
|
402
409
|
/**
|
|
403
410
|
* Destroy the hook manager and release all references
|
|
404
411
|
*/
|
|
405
412
|
destroy() {
|
|
413
|
+
if (this._isDestroyed) return;
|
|
414
|
+
this._isDestroyed = true;
|
|
406
415
|
this.hooks.clear();
|
|
407
416
|
this.hookErrorCounts.clear();
|
|
408
417
|
this.disabledHooks.clear();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/capabilities/agents/ExecutionContext.ts","../../../src/capabilities/agents/HookManager.ts"],"names":[],"mappings":"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","file":"index.cjs","sourcesContent":["/**\n * Execution context - tracks state, metrics, and history for agent execution\n * Includes memory safety (circular buffers) and resource limits\n */\n\nimport { AgentResponse } from '../../domain/entities/Response.js';\nimport { TextGenerateOptions } from '../../domain/interfaces/ITextProvider.js';\nimport { ToolCall, ToolResult, ToolCallState } from '../../domain/entities/Tool.js';\n\nexport type HistoryMode = 'none' | 'summary' | 'full';\n\nexport interface ExecutionContextConfig {\n maxHistorySize?: number; // Max iterations to store (default: 10)\n historyMode?: HistoryMode; // What to store (default: 'summary')\n maxAuditTrailSize?: number; // Max audit entries (default: 1000)\n}\n\nexport interface IterationRecord {\n iteration: number;\n request: TextGenerateOptions;\n response: AgentResponse;\n toolCalls: ToolCall[];\n toolResults: ToolResult[];\n startTime: Date;\n endTime: Date;\n}\n\nexport interface IterationSummary {\n iteration: number;\n tokens: number;\n toolCount: number;\n duration: number;\n timestamp: Date;\n}\n\nexport interface ExecutionMetrics {\n // Timing\n totalDuration: number;\n llmDuration: number;\n toolDuration: number;\n hookDuration: number;\n\n // Counts\n iterationCount: number;\n toolCallCount: number;\n toolSuccessCount: number;\n toolFailureCount: number;\n toolTimeoutCount: number;\n\n // Tokens\n inputTokens: number;\n outputTokens: number;\n totalTokens: number;\n\n // Errors\n errors: Array<{ type: string; message: string; timestamp: Date }>;\n}\n\nexport interface AuditEntry {\n timestamp: Date;\n type:\n | 'hook_executed'\n | 'tool_modified'\n | 'tool_skipped'\n | 'execution_paused'\n | 'execution_resumed'\n | 'tool_approved'\n | 'tool_rejected'\n | 'tool_blocked'\n | 'tool_permission_approved';\n hookName?: string;\n toolName?: string;\n details: any;\n}\n\nexport class ExecutionContext {\n // Execution metadata\n readonly executionId: string;\n readonly startTime: Date;\n iteration: number = 0;\n\n // Tool tracking\n readonly toolCalls: Map<string, ToolCall> = new Map();\n readonly toolResults: Map<string, ToolResult> = new Map();\n\n // Control state\n paused: boolean = false;\n pauseReason?: string;\n cancelled: boolean = false;\n cancelReason?: string;\n\n // User data (for hooks to share state)\n readonly metadata: Map<string, any> = new Map();\n\n // History storage (memory-safe)\n private readonly config: ExecutionContextConfig;\n private readonly iterations: IterationRecord[] = [];\n private readonly iterationSummaries: IterationSummary[] = [];\n\n // Metrics\n readonly metrics: ExecutionMetrics = {\n totalDuration: 0,\n llmDuration: 0,\n toolDuration: 0,\n hookDuration: 0,\n iterationCount: 0,\n toolCallCount: 0,\n toolSuccessCount: 0,\n toolFailureCount: 0,\n toolTimeoutCount: 0,\n inputTokens: 0,\n outputTokens: 0,\n totalTokens: 0,\n errors: [],\n };\n\n // Audit trail\n private readonly auditTrail: AuditEntry[] = [];\n\n constructor(\n executionId: string,\n config: ExecutionContextConfig = {}\n ) {\n this.executionId = executionId;\n this.startTime = new Date();\n this.config = {\n maxHistorySize: config.maxHistorySize || 10,\n historyMode: config.historyMode || 'summary',\n maxAuditTrailSize: config.maxAuditTrailSize || 1000,\n };\n }\n\n /**\n * Add iteration to history (memory-safe)\n */\n addIteration(record: IterationRecord): void {\n switch (this.config.historyMode) {\n case 'none':\n // Don't store anything\n break;\n\n case 'summary':\n // Store lightweight summary only\n this.iterationSummaries.push({\n iteration: record.iteration,\n tokens: record.response.usage.total_tokens,\n toolCount: record.toolCalls.length,\n duration: record.endTime.getTime() - record.startTime.getTime(),\n timestamp: record.startTime,\n });\n\n // Keep circular buffer\n if (this.iterationSummaries.length > this.config.maxHistorySize!) {\n this.iterationSummaries.shift();\n }\n break;\n\n case 'full':\n // Store full iteration data\n this.iterations.push(record);\n\n // Keep circular buffer\n if (this.iterations.length > this.config.maxHistorySize!) {\n this.iterations.shift();\n }\n break;\n }\n }\n\n /**\n * Get iteration history\n */\n getHistory(): IterationRecord[] | IterationSummary[] {\n return this.config.historyMode === 'full' ? this.iterations : this.iterationSummaries;\n }\n\n /**\n * Add audit entry\n */\n audit(type: AuditEntry['type'], details: any, hookName?: string, toolName?: string): void {\n this.auditTrail.push({\n timestamp: new Date(),\n type,\n hookName,\n toolName,\n details,\n });\n\n // Keep circular buffer\n if (this.auditTrail.length > this.config.maxAuditTrailSize!) {\n this.auditTrail.shift();\n }\n }\n\n /**\n * Get audit trail\n */\n getAuditTrail(): readonly AuditEntry[] {\n return this.auditTrail;\n }\n\n /**\n * Update metrics\n */\n updateMetrics(update: Partial<ExecutionMetrics>): void {\n Object.assign(this.metrics, update);\n }\n\n /**\n * Add tool call to tracking\n */\n addToolCall(toolCall: ToolCall): void {\n this.toolCalls.set(toolCall.id, toolCall);\n this.metrics.toolCallCount++;\n }\n\n /**\n * Add tool result to tracking\n */\n addToolResult(result: ToolResult): void {\n this.toolResults.set(result.tool_use_id, result);\n\n // Update metrics\n if (result.state === ToolCallState.COMPLETED) {\n this.metrics.toolSuccessCount++;\n } else if (result.state === ToolCallState.FAILED) {\n this.metrics.toolFailureCount++;\n } else if (result.state === ToolCallState.TIMEOUT) {\n this.metrics.toolTimeoutCount++;\n }\n }\n\n /**\n * Check resource limits\n */\n checkLimits(limits?: {\n maxExecutionTime?: number;\n maxToolCalls?: number;\n maxContextSize?: number;\n }): void {\n if (!limits) return;\n\n // Check execution time\n if (limits.maxExecutionTime) {\n const elapsed = Date.now() - this.startTime.getTime();\n if (elapsed > limits.maxExecutionTime) {\n throw new Error(\n `Execution time limit exceeded: ${elapsed}ms > ${limits.maxExecutionTime}ms`\n );\n }\n }\n\n // Check tool call count\n if (limits.maxToolCalls && this.toolCalls.size > limits.maxToolCalls) {\n throw new Error(\n `Tool call limit exceeded: ${this.toolCalls.size} > ${limits.maxToolCalls}`\n );\n }\n\n // Check context size\n if (limits.maxContextSize) {\n const size = this.estimateSize();\n if (size > limits.maxContextSize) {\n throw new Error(\n `Context size limit exceeded: ${size} bytes > ${limits.maxContextSize} bytes`\n );\n }\n }\n }\n\n /**\n * Estimate memory usage (rough approximation)\n */\n private estimateSize(): number {\n try {\n const data = {\n toolCalls: Array.from(this.toolCalls.values()),\n toolResults: Array.from(this.toolResults.values()),\n iterations: this.config.historyMode === 'full' ? this.iterations : this.iterationSummaries,\n auditTrail: this.auditTrail,\n };\n return JSON.stringify(data).length;\n } catch {\n return 0; // Error estimating, return 0\n }\n }\n\n /**\n * Cleanup resources and release memory\n * Clears all internal arrays and maps to allow garbage collection\n */\n cleanup(): void {\n // Store execution summary before clearing\n const summary = {\n executionId: this.executionId,\n totalIterations: this.iteration,\n totalToolCalls: this.metrics.toolCallCount,\n totalDuration: Date.now() - this.startTime.getTime(),\n success: !this.cancelled && this.metrics.errors.length === 0,\n };\n\n // Clear all maps\n this.toolCalls.clear();\n this.toolResults.clear();\n this.metadata.clear();\n\n // Clear all arrays (modify length to allow GC of items)\n this.iterations.length = 0;\n this.iterationSummaries.length = 0;\n this.auditTrail.length = 0;\n this.metrics.errors.length = 0;\n\n // Store summary after clearing (for final access if needed)\n this.metadata.set('execution_summary', summary);\n }\n\n /**\n * Get execution summary\n */\n getSummary() {\n return {\n executionId: this.executionId,\n startTime: this.startTime,\n currentIteration: this.iteration,\n paused: this.paused,\n cancelled: this.cancelled,\n metrics: { ...this.metrics },\n totalDuration: Date.now() - this.startTime.getTime(),\n };\n }\n}\n","/**\n * Hook manager - handles hook registration and execution\n * Includes error isolation, timeouts, and optional parallel execution\n */\n\nimport { EventEmitter } from 'eventemitter3';\nimport {\n Hook,\n HookConfig,\n HookName,\n HookSignatures,\n} from './types/HookTypes.js';\n\nexport class HookManager {\n private hooks: Map<HookName, Hook<any, any>[]> = new Map();\n private timeout: number;\n private parallel: boolean;\n // Per-hook error tracking: hookKey -> consecutive error count\n private hookErrorCounts: Map<string, number> = new Map();\n // Disabled hooks that exceeded error threshold\n private disabledHooks: Set<string> = new Set();\n private maxConsecutiveErrors: number = 3;\n private emitter: EventEmitter;\n\n constructor(\n config: HookConfig = {},\n emitter: EventEmitter,\n errorHandling?: { maxConsecutiveErrors?: number }\n ) {\n this.timeout = config.hookTimeout || 5000; // 5 second default\n this.parallel = config.parallelHooks || false;\n this.emitter = emitter;\n this.maxConsecutiveErrors = errorHandling?.maxConsecutiveErrors || 3;\n\n // Register hooks from config\n this.registerFromConfig(config);\n }\n\n /**\n * Register hooks from configuration\n */\n private registerFromConfig(config: HookConfig): void {\n const hookNames: HookName[] = [\n 'before:execution',\n 'after:execution',\n 'before:llm',\n 'after:llm',\n 'before:tool',\n 'after:tool',\n 'approve:tool',\n 'pause:check',\n ];\n\n for (const name of hookNames) {\n const hook = config[name];\n if (hook) {\n this.register(name, hook);\n }\n }\n }\n\n /**\n * Register a hook\n */\n register(name: HookName, hook: Hook<any, any>): void {\n // Validate hook is a function\n if (typeof hook !== 'function') {\n throw new Error(`Hook must be a function, got: ${typeof hook}`);\n }\n\n // Get or create hooks array\n if (!this.hooks.has(name)) {\n this.hooks.set(name, []);\n }\n\n const existing = this.hooks.get(name)!;\n\n // Limit number of hooks per name\n if (existing.length >= 10) {\n throw new Error(`Too many hooks for ${name} (max: 10)`);\n }\n\n existing.push(hook);\n }\n\n /**\n * Unregister a specific hook function by reference.\n * Returns true if the hook was found and removed.\n */\n unregister(name: HookName, hook: Hook<any, any>): boolean {\n const hooks = this.hooks.get(name);\n if (!hooks) return false;\n\n const index = hooks.indexOf(hook);\n if (index === -1) return false;\n\n hooks.splice(index, 1);\n return true;\n }\n\n /**\n * Execute hooks for a given name\n */\n async executeHooks<K extends HookName>(\n name: K,\n context: HookSignatures[K]['context'],\n defaultResult: HookSignatures[K]['result']\n ): Promise<HookSignatures[K]['result']> {\n const hooks = this.hooks.get(name);\n\n if (!hooks || hooks.length === 0) {\n return defaultResult;\n }\n\n // Parallel execution (for independent hooks)\n if (this.parallel && hooks.length > 1) {\n return this.executeHooksParallel(hooks, context, defaultResult);\n }\n\n // Sequential execution (default)\n return this.executeHooksSequential(hooks, context, defaultResult);\n }\n\n /**\n * Execute hooks sequentially\n */\n private async executeHooksSequential<T>(\n hooks: Hook<any, any>[],\n context: any,\n defaultResult: T\n ): Promise<T> {\n let result = defaultResult;\n\n for (let i = 0; i < hooks.length; i++) {\n const hook = hooks[i]!;\n const hookKey = this.getHookKey(hook, i);\n const hookResult = await this.executeHookSafely(hook, context, hookKey);\n\n // Skip failed hooks (loose equality catches both null and undefined)\n if (hookResult == null) {\n continue;\n }\n\n // Merge hook result\n result = { ...result, ...hookResult };\n\n // Check for early exit\n if ((hookResult as any).skip === true) {\n break;\n }\n }\n\n return result;\n }\n\n /**\n * Execute hooks in parallel\n */\n private async executeHooksParallel<T>(\n hooks: Hook<any, any>[],\n context: any,\n defaultResult: T\n ): Promise<T> {\n // Execute all hooks concurrently with unique keys\n const results = await Promise.all(\n hooks.map((hook, i) => {\n const hookKey = this.getHookKey(hook, i);\n return this.executeHookSafely(hook, context, hookKey);\n })\n );\n\n // Filter out failures and merge results\n const validResults = results.filter((r) => r != null);\n\n return validResults.reduce(\n (acc, hookResult) => ({ ...acc, ...hookResult }),\n defaultResult\n );\n }\n\n /**\n * Generate unique key for a hook\n */\n private getHookKey(hook: Hook<any, any>, index: number): string {\n return `${hook.name || 'anonymous'}_${index}`;\n }\n\n /**\n * Execute single hook with error isolation and timeout (with per-hook error tracking)\n */\n private async executeHookSafely<T>(\n hook: Hook<any, any>,\n context: any,\n hookKey?: string\n ): Promise<T | null> {\n const key = hookKey || hook.name || 'anonymous';\n\n // Skip disabled hooks\n if (this.disabledHooks.has(key)) {\n return null;\n }\n\n const startTime = Date.now();\n\n try {\n // Execute with timeout\n const result = await Promise.race([\n hook(context),\n new Promise<never>((_, reject) =>\n setTimeout(() => reject(new Error('Hook timeout')), this.timeout)\n ),\n ]);\n\n // Reset error counter for this hook on success\n this.hookErrorCounts.delete(key);\n\n // Track timing\n const duration = Date.now() - startTime;\n if (context.context?.updateMetrics) {\n context.context.updateMetrics({\n hookDuration: (context.context.metrics.hookDuration || 0) + duration,\n });\n }\n\n return result as T;\n } catch (error) {\n // Increment error counter for this specific hook\n const errorCount = (this.hookErrorCounts.get(key) || 0) + 1;\n this.hookErrorCounts.set(key, errorCount);\n\n // Emit error event\n this.emitter.emit('hook:error', {\n executionId: context.executionId,\n hookName: hook.name || 'anonymous',\n error: error as Error,\n consecutiveErrors: errorCount,\n timestamp: new Date(),\n });\n\n // Check consecutive error threshold for this hook\n if (errorCount >= this.maxConsecutiveErrors) {\n // Disable this specific hook, not all hooks\n this.disabledHooks.add(key);\n console.warn(\n `Hook \"${key}\" disabled after ${errorCount} consecutive failures. Last error: ${(error as Error).message}`\n );\n } else {\n // Log warning but continue (degraded mode)\n console.warn(\n `Hook execution failed (${key}): ${(error as Error).message} (${errorCount}/${this.maxConsecutiveErrors} errors)`\n );\n }\n\n return null; // Hook failed, skip its result\n }\n }\n\n /**\n * Check if there are any hooks registered\n */\n hasHooks(name: HookName): boolean {\n const hooks = this.hooks.get(name);\n return !!hooks && hooks.length > 0;\n }\n\n /**\n * Get hook count\n */\n getHookCount(name?: HookName): number {\n if (name) {\n return this.hooks.get(name)?.length || 0;\n }\n // Total across all hooks\n return Array.from(this.hooks.values()).reduce((sum, arr) => sum + arr.length, 0);\n }\n\n /**\n * Clear all hooks and reset error tracking\n */\n clear(): void {\n this.hooks.clear();\n this.hookErrorCounts.clear();\n this.disabledHooks.clear();\n }\n\n /**\n * Destroy the hook manager and release all references\n */\n destroy(): void {\n this.hooks.clear();\n this.hookErrorCounts.clear();\n this.disabledHooks.clear();\n }\n\n /**\n * Re-enable a disabled hook\n */\n enableHook(hookKey: string): void {\n this.disabledHooks.delete(hookKey);\n this.hookErrorCounts.delete(hookKey);\n }\n\n /**\n * Get list of disabled hooks\n */\n getDisabledHooks(): string[] {\n return Array.from(this.disabledHooks);\n }\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../../../src/capabilities/agents/ExecutionContext.ts","../../../src/capabilities/agents/HookManager.ts"],"names":[],"mappings":"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","file":"index.cjs","sourcesContent":["/**\n * Execution context - tracks state, metrics, and history for agent execution\n * Includes memory safety (circular buffers) and resource limits\n */\n\nimport { AgentResponse } from '../../domain/entities/Response.js';\nimport { TextGenerateOptions } from '../../domain/interfaces/ITextProvider.js';\nimport { ToolCall, ToolResult, ToolCallState } from '../../domain/entities/Tool.js';\n\nexport type HistoryMode = 'none' | 'summary' | 'full';\n\nexport interface ExecutionContextConfig {\n maxHistorySize?: number; // Max iterations to store (default: 10)\n historyMode?: HistoryMode; // What to store (default: 'summary')\n maxAuditTrailSize?: number; // Max audit entries (default: 1000)\n}\n\nexport interface IterationRecord {\n iteration: number;\n request: TextGenerateOptions;\n response: AgentResponse;\n toolCalls: ToolCall[];\n toolResults: ToolResult[];\n startTime: Date;\n endTime: Date;\n}\n\nexport interface IterationSummary {\n iteration: number;\n tokens: number;\n toolCount: number;\n duration: number;\n timestamp: Date;\n}\n\nexport interface ExecutionMetrics {\n // Timing\n totalDuration: number;\n llmDuration: number;\n toolDuration: number;\n hookDuration: number;\n\n // Counts\n iterationCount: number;\n toolCallCount: number;\n toolSuccessCount: number;\n toolFailureCount: number;\n toolTimeoutCount: number;\n\n // Tokens\n inputTokens: number;\n outputTokens: number;\n totalTokens: number;\n\n // Errors\n errors: Array<{ type: string; message: string; timestamp: Date }>;\n}\n\nexport interface AuditEntry {\n timestamp: Date;\n type:\n | 'hook_executed'\n | 'tool_modified'\n | 'tool_skipped'\n | 'execution_paused'\n | 'execution_resumed'\n | 'tool_approved'\n | 'tool_rejected'\n | 'tool_blocked'\n | 'tool_permission_approved';\n hookName?: string;\n toolName?: string;\n details: any;\n}\n\nexport class ExecutionContext {\n // Execution metadata\n readonly executionId: string;\n readonly startTime: Date;\n iteration: number = 0;\n\n // Tool tracking\n readonly toolCalls: Map<string, ToolCall> = new Map();\n readonly toolResults: Map<string, ToolResult> = new Map();\n\n // Control state\n paused: boolean = false;\n pauseReason?: string;\n cancelled: boolean = false;\n cancelReason?: string;\n\n // User data (for hooks to share state)\n readonly metadata: Map<string, any> = new Map();\n\n // History storage (memory-safe)\n private readonly config: ExecutionContextConfig;\n private readonly iterations: IterationRecord[] = [];\n private readonly iterationSummaries: IterationSummary[] = [];\n\n // Metrics\n readonly metrics: ExecutionMetrics = {\n totalDuration: 0,\n llmDuration: 0,\n toolDuration: 0,\n hookDuration: 0,\n iterationCount: 0,\n toolCallCount: 0,\n toolSuccessCount: 0,\n toolFailureCount: 0,\n toolTimeoutCount: 0,\n inputTokens: 0,\n outputTokens: 0,\n totalTokens: 0,\n errors: [],\n };\n\n // Audit trail\n private readonly auditTrail: AuditEntry[] = [];\n\n constructor(\n executionId: string,\n config: ExecutionContextConfig = {}\n ) {\n this.executionId = executionId;\n this.startTime = new Date();\n this.config = {\n maxHistorySize: config.maxHistorySize || 10,\n historyMode: config.historyMode || 'summary',\n maxAuditTrailSize: config.maxAuditTrailSize || 1000,\n };\n }\n\n /**\n * Add iteration to history (memory-safe)\n */\n addIteration(record: IterationRecord): void {\n switch (this.config.historyMode) {\n case 'none':\n // Don't store anything\n break;\n\n case 'summary':\n // Store lightweight summary only\n this.iterationSummaries.push({\n iteration: record.iteration,\n tokens: record.response.usage.total_tokens,\n toolCount: record.toolCalls.length,\n duration: record.endTime.getTime() - record.startTime.getTime(),\n timestamp: record.startTime,\n });\n\n // Keep circular buffer\n if (this.iterationSummaries.length > this.config.maxHistorySize!) {\n this.iterationSummaries.shift();\n }\n break;\n\n case 'full':\n // Store full iteration data\n this.iterations.push(record);\n\n // Keep circular buffer\n if (this.iterations.length > this.config.maxHistorySize!) {\n this.iterations.shift();\n }\n break;\n }\n }\n\n /**\n * Get iteration history\n */\n getHistory(): IterationRecord[] | IterationSummary[] {\n return this.config.historyMode === 'full' ? this.iterations : this.iterationSummaries;\n }\n\n /**\n * Add audit entry\n */\n audit(type: AuditEntry['type'], details: any, hookName?: string, toolName?: string): void {\n this.auditTrail.push({\n timestamp: new Date(),\n type,\n hookName,\n toolName,\n details,\n });\n\n // Keep circular buffer\n if (this.auditTrail.length > this.config.maxAuditTrailSize!) {\n this.auditTrail.shift();\n }\n }\n\n /**\n * Get audit trail\n */\n getAuditTrail(): readonly AuditEntry[] {\n return this.auditTrail;\n }\n\n /**\n * Update metrics\n */\n updateMetrics(update: Partial<ExecutionMetrics>): void {\n Object.assign(this.metrics, update);\n }\n\n /**\n * Add tool call to tracking\n */\n addToolCall(toolCall: ToolCall): void {\n this.toolCalls.set(toolCall.id, toolCall);\n this.metrics.toolCallCount++;\n }\n\n /**\n * Add tool result to tracking\n */\n addToolResult(result: ToolResult): void {\n this.toolResults.set(result.tool_use_id, result);\n\n // Update metrics\n if (result.state === ToolCallState.COMPLETED) {\n this.metrics.toolSuccessCount++;\n } else if (result.state === ToolCallState.FAILED) {\n this.metrics.toolFailureCount++;\n } else if (result.state === ToolCallState.TIMEOUT) {\n this.metrics.toolTimeoutCount++;\n }\n }\n\n /**\n * Check resource limits\n */\n checkLimits(limits?: {\n maxExecutionTime?: number;\n maxToolCalls?: number;\n maxContextSize?: number;\n }): void {\n if (!limits) return;\n\n // Check execution time\n if (limits.maxExecutionTime) {\n const elapsed = Date.now() - this.startTime.getTime();\n if (elapsed > limits.maxExecutionTime) {\n throw new Error(\n `Execution time limit exceeded: ${elapsed}ms > ${limits.maxExecutionTime}ms`\n );\n }\n }\n\n // Check tool call count\n if (limits.maxToolCalls && this.toolCalls.size > limits.maxToolCalls) {\n throw new Error(\n `Tool call limit exceeded: ${this.toolCalls.size} > ${limits.maxToolCalls}`\n );\n }\n\n // Check context size\n if (limits.maxContextSize) {\n const size = this.estimateSize();\n if (size > limits.maxContextSize) {\n throw new Error(\n `Context size limit exceeded: ${size} bytes > ${limits.maxContextSize} bytes`\n );\n }\n }\n }\n\n /**\n * Estimate memory usage (rough approximation)\n */\n private estimateSize(): number {\n try {\n const data = {\n toolCalls: Array.from(this.toolCalls.values()),\n toolResults: Array.from(this.toolResults.values()),\n iterations: this.config.historyMode === 'full' ? this.iterations : this.iterationSummaries,\n auditTrail: this.auditTrail,\n };\n return JSON.stringify(data).length;\n } catch {\n return 0; // Error estimating, return 0\n }\n }\n\n /**\n * Cleanup resources and release memory\n * Clears all internal arrays and maps to allow garbage collection\n */\n cleanup(): void {\n // Store execution summary before clearing\n const summary = {\n executionId: this.executionId,\n totalIterations: this.iteration,\n totalToolCalls: this.metrics.toolCallCount,\n totalDuration: Date.now() - this.startTime.getTime(),\n success: !this.cancelled && this.metrics.errors.length === 0,\n };\n\n // Clear all maps\n this.toolCalls.clear();\n this.toolResults.clear();\n this.metadata.clear();\n\n // Clear all arrays (modify length to allow GC of items)\n this.iterations.length = 0;\n this.iterationSummaries.length = 0;\n this.auditTrail.length = 0;\n this.metrics.errors.length = 0;\n\n // Store summary after clearing (for final access if needed)\n this.metadata.set('execution_summary', summary);\n }\n\n /**\n * Get execution summary\n */\n getSummary() {\n return {\n executionId: this.executionId,\n startTime: this.startTime,\n currentIteration: this.iteration,\n paused: this.paused,\n cancelled: this.cancelled,\n metrics: { ...this.metrics },\n totalDuration: Date.now() - this.startTime.getTime(),\n };\n }\n}\n","/**\n * Hook manager - handles hook registration and execution\n * Includes error isolation, timeouts, and optional parallel execution\n */\n\nimport { EventEmitter } from 'eventemitter3';\nimport {\n Hook,\n HookConfig,\n HookName,\n HookSignatures,\n} from './types/HookTypes.js';\nimport type { IDisposable } from '../../domain/interfaces/IDisposable.js';\n\nexport class HookManager implements IDisposable {\n private _isDestroyed = false;\n private hooks: Map<HookName, Hook<any, any>[]> = new Map();\n private timeout: number;\n private parallel: boolean;\n // Per-hook error tracking: hookKey -> consecutive error count\n private hookErrorCounts: Map<string, number> = new Map();\n // Disabled hooks that exceeded error threshold\n private disabledHooks: Set<string> = new Set();\n private maxConsecutiveErrors: number = 3;\n private emitter: EventEmitter;\n\n constructor(\n config: HookConfig = {},\n emitter: EventEmitter,\n errorHandling?: { maxConsecutiveErrors?: number }\n ) {\n this.timeout = config.hookTimeout || 5000; // 5 second default\n this.parallel = config.parallelHooks || false;\n this.emitter = emitter;\n this.maxConsecutiveErrors = errorHandling?.maxConsecutiveErrors || 3;\n\n // Register hooks from config\n this.registerFromConfig(config);\n }\n\n /**\n * Register hooks from configuration\n */\n private registerFromConfig(config: HookConfig): void {\n const hookNames: HookName[] = [\n 'before:execution',\n 'after:execution',\n 'before:llm',\n 'after:llm',\n 'before:tool',\n 'after:tool',\n 'approve:tool',\n 'pause:check',\n ];\n\n for (const name of hookNames) {\n const hook = config[name];\n if (hook) {\n this.register(name, hook);\n }\n }\n }\n\n /**\n * Register a hook\n */\n register(name: HookName, hook: Hook<any, any>): void {\n // Validate hook is a function\n if (typeof hook !== 'function') {\n throw new Error(`Hook must be a function, got: ${typeof hook}`);\n }\n\n // Get or create hooks array\n if (!this.hooks.has(name)) {\n this.hooks.set(name, []);\n }\n\n const existing = this.hooks.get(name)!;\n\n // Limit number of hooks per name\n if (existing.length >= 10) {\n throw new Error(`Too many hooks for ${name} (max: 10)`);\n }\n\n existing.push(hook);\n }\n\n /**\n * Unregister a specific hook function by reference.\n * Returns true if the hook was found and removed.\n */\n unregister(name: HookName, hook: Hook<any, any>): boolean {\n const hooks = this.hooks.get(name);\n if (!hooks) return false;\n\n const index = hooks.indexOf(hook);\n if (index === -1) return false;\n\n hooks.splice(index, 1);\n return true;\n }\n\n /**\n * Execute hooks for a given name\n */\n async executeHooks<K extends HookName>(\n name: K,\n context: HookSignatures[K]['context'],\n defaultResult: HookSignatures[K]['result']\n ): Promise<HookSignatures[K]['result']> {\n const hooks = this.hooks.get(name);\n\n if (!hooks || hooks.length === 0) {\n return defaultResult;\n }\n\n // Parallel execution (for independent hooks)\n if (this.parallel && hooks.length > 1) {\n return this.executeHooksParallel(hooks, context, defaultResult);\n }\n\n // Sequential execution (default)\n return this.executeHooksSequential(hooks, context, defaultResult);\n }\n\n /**\n * Execute hooks sequentially\n */\n private async executeHooksSequential<T>(\n hooks: Hook<any, any>[],\n context: any,\n defaultResult: T\n ): Promise<T> {\n let result = defaultResult;\n\n for (let i = 0; i < hooks.length; i++) {\n const hook = hooks[i]!;\n const hookKey = this.getHookKey(hook, i);\n const hookResult = await this.executeHookSafely(hook, context, hookKey);\n\n // Skip failed hooks (loose equality catches both null and undefined)\n if (hookResult == null) {\n continue;\n }\n\n // Merge hook result\n result = { ...result, ...hookResult };\n\n // Check for early exit\n if ((hookResult as any).skip === true) {\n break;\n }\n }\n\n return result;\n }\n\n /**\n * Execute hooks in parallel\n */\n private async executeHooksParallel<T>(\n hooks: Hook<any, any>[],\n context: any,\n defaultResult: T\n ): Promise<T> {\n // Execute all hooks concurrently with unique keys\n const results = await Promise.all(\n hooks.map((hook, i) => {\n const hookKey = this.getHookKey(hook, i);\n return this.executeHookSafely(hook, context, hookKey);\n })\n );\n\n // Filter out failures and merge results\n const validResults = results.filter((r) => r != null);\n\n return validResults.reduce(\n (acc, hookResult) => ({ ...acc, ...hookResult }),\n defaultResult\n );\n }\n\n /**\n * Generate unique key for a hook\n */\n private getHookKey(hook: Hook<any, any>, index: number): string {\n return `${hook.name || 'anonymous'}_${index}`;\n }\n\n /**\n * Execute single hook with error isolation and timeout (with per-hook error tracking)\n */\n private async executeHookSafely<T>(\n hook: Hook<any, any>,\n context: any,\n hookKey?: string\n ): Promise<T | null> {\n const key = hookKey || hook.name || 'anonymous';\n\n // Skip disabled hooks\n if (this.disabledHooks.has(key)) {\n return null;\n }\n\n const startTime = Date.now();\n\n try {\n // Execute with timeout\n const result = await Promise.race([\n hook(context),\n new Promise<never>((_, reject) =>\n setTimeout(() => reject(new Error('Hook timeout')), this.timeout)\n ),\n ]);\n\n // Reset error counter for this hook on success\n this.hookErrorCounts.delete(key);\n\n // Track timing\n const duration = Date.now() - startTime;\n if (context.context?.updateMetrics) {\n context.context.updateMetrics({\n hookDuration: (context.context.metrics.hookDuration || 0) + duration,\n });\n }\n\n return result as T;\n } catch (error) {\n // Increment error counter for this specific hook\n const errorCount = (this.hookErrorCounts.get(key) || 0) + 1;\n this.hookErrorCounts.set(key, errorCount);\n\n // Emit error event\n this.emitter.emit('hook:error', {\n executionId: context.executionId,\n hookName: hook.name || 'anonymous',\n error: error as Error,\n consecutiveErrors: errorCount,\n timestamp: new Date(),\n });\n\n // Check consecutive error threshold for this hook\n if (errorCount >= this.maxConsecutiveErrors) {\n // Disable this specific hook, not all hooks\n this.disabledHooks.add(key);\n console.warn(\n `Hook \"${key}\" disabled after ${errorCount} consecutive failures. Last error: ${(error as Error).message}`\n );\n } else {\n // Log warning but continue (degraded mode)\n console.warn(\n `Hook execution failed (${key}): ${(error as Error).message} (${errorCount}/${this.maxConsecutiveErrors} errors)`\n );\n }\n\n return null; // Hook failed, skip its result\n }\n }\n\n /**\n * Check if there are any hooks registered\n */\n hasHooks(name: HookName): boolean {\n const hooks = this.hooks.get(name);\n return !!hooks && hooks.length > 0;\n }\n\n /**\n * Get hook count\n */\n getHookCount(name?: HookName): number {\n if (name) {\n return this.hooks.get(name)?.length || 0;\n }\n // Total across all hooks\n return Array.from(this.hooks.values()).reduce((sum, arr) => sum + arr.length, 0);\n }\n\n /**\n * Clear all hooks and reset error tracking\n */\n clear(): void {\n this.hooks.clear();\n this.hookErrorCounts.clear();\n this.disabledHooks.clear();\n }\n\n /**\n * Check if the hook manager has been destroyed\n */\n get isDestroyed(): boolean {\n return this._isDestroyed;\n }\n\n /**\n * Destroy the hook manager and release all references\n */\n destroy(): void {\n if (this._isDestroyed) return;\n this._isDestroyed = true;\n this.hooks.clear();\n this.hookErrorCounts.clear();\n this.disabledHooks.clear();\n }\n\n /**\n * Re-enable a disabled hook\n */\n enableHook(hookKey: string): void {\n this.disabledHooks.delete(hookKey);\n this.hookErrorCounts.delete(hookKey);\n }\n\n /**\n * Get list of disabled hooks\n */\n getDisabledHooks(): string[] {\n return Array.from(this.disabledHooks);\n }\n}\n"]}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export {
|
|
1
|
+
export { aj as AfterToolContext, ak as AgentEventName, Q as AgentEvents, al as AgenticLoopEventName, am as AgenticLoopEvents, an as ApprovalResult, ao as ApproveToolContext, bF as AsyncContinuationStartEvent, bG as AsyncToolCompleteEvent, bH as AsyncToolErrorEvent, bI as AsyncToolStartedEvent, bJ as AsyncToolTimeoutEvent, Z as AuditEntry, ar as BeforeToolContext, bK as ExecutionCompleteEvent, aD as ExecutionConfig, X as ExecutionContext, Y as ExecutionMetrics, bL as ExecutionStartEvent, K as HistoryMode, aF as Hook, J as HookConfig, aG as HookManager, _ as HookName, bM as LLMRequestEvent, bN as LLMResponseEvent, aS as ModifyingHook, bO as ToolCompleteEvent, be as ToolModification, bP as ToolStartEvent } from '../../index-t4cRhBZW.cjs';
|
|
2
2
|
import '../../IProvider-B8sqUzJG.cjs';
|
|
3
3
|
import '../../Vendor-DYh_bzwo.cjs';
|
|
4
4
|
import 'eventemitter3';
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export {
|
|
1
|
+
export { aj as AfterToolContext, ak as AgentEventName, Q as AgentEvents, al as AgenticLoopEventName, am as AgenticLoopEvents, an as ApprovalResult, ao as ApproveToolContext, bF as AsyncContinuationStartEvent, bG as AsyncToolCompleteEvent, bH as AsyncToolErrorEvent, bI as AsyncToolStartedEvent, bJ as AsyncToolTimeoutEvent, Z as AuditEntry, ar as BeforeToolContext, bK as ExecutionCompleteEvent, aD as ExecutionConfig, X as ExecutionContext, Y as ExecutionMetrics, bL as ExecutionStartEvent, K as HistoryMode, aF as Hook, J as HookConfig, aG as HookManager, _ as HookName, bM as LLMRequestEvent, bN as LLMResponseEvent, aS as ModifyingHook, bO as ToolCompleteEvent, be as ToolModification, bP as ToolStartEvent } from '../../index-hmTj59TM.js';
|
|
2
2
|
import '../../IProvider-CxDUGl6n.js';
|
|
3
3
|
import '../../Vendor-DYh_bzwo.js';
|
|
4
4
|
import 'eventemitter3';
|
|
@@ -207,6 +207,7 @@ var ExecutionContext = class {
|
|
|
207
207
|
|
|
208
208
|
// src/capabilities/agents/HookManager.ts
|
|
209
209
|
var HookManager = class {
|
|
210
|
+
_isDestroyed = false;
|
|
210
211
|
hooks = /* @__PURE__ */ new Map();
|
|
211
212
|
timeout;
|
|
212
213
|
parallel;
|
|
@@ -397,10 +398,18 @@ var HookManager = class {
|
|
|
397
398
|
this.hookErrorCounts.clear();
|
|
398
399
|
this.disabledHooks.clear();
|
|
399
400
|
}
|
|
401
|
+
/**
|
|
402
|
+
* Check if the hook manager has been destroyed
|
|
403
|
+
*/
|
|
404
|
+
get isDestroyed() {
|
|
405
|
+
return this._isDestroyed;
|
|
406
|
+
}
|
|
400
407
|
/**
|
|
401
408
|
* Destroy the hook manager and release all references
|
|
402
409
|
*/
|
|
403
410
|
destroy() {
|
|
411
|
+
if (this._isDestroyed) return;
|
|
412
|
+
this._isDestroyed = true;
|
|
404
413
|
this.hooks.clear();
|
|
405
414
|
this.hookErrorCounts.clear();
|
|
406
415
|
this.disabledHooks.clear();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/capabilities/agents/ExecutionContext.ts","../../../src/capabilities/agents/HookManager.ts"],"names":[],"mappings":"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","file":"index.js","sourcesContent":["/**\n * Execution context - tracks state, metrics, and history for agent execution\n * Includes memory safety (circular buffers) and resource limits\n */\n\nimport { AgentResponse } from '../../domain/entities/Response.js';\nimport { TextGenerateOptions } from '../../domain/interfaces/ITextProvider.js';\nimport { ToolCall, ToolResult, ToolCallState } from '../../domain/entities/Tool.js';\n\nexport type HistoryMode = 'none' | 'summary' | 'full';\n\nexport interface ExecutionContextConfig {\n maxHistorySize?: number; // Max iterations to store (default: 10)\n historyMode?: HistoryMode; // What to store (default: 'summary')\n maxAuditTrailSize?: number; // Max audit entries (default: 1000)\n}\n\nexport interface IterationRecord {\n iteration: number;\n request: TextGenerateOptions;\n response: AgentResponse;\n toolCalls: ToolCall[];\n toolResults: ToolResult[];\n startTime: Date;\n endTime: Date;\n}\n\nexport interface IterationSummary {\n iteration: number;\n tokens: number;\n toolCount: number;\n duration: number;\n timestamp: Date;\n}\n\nexport interface ExecutionMetrics {\n // Timing\n totalDuration: number;\n llmDuration: number;\n toolDuration: number;\n hookDuration: number;\n\n // Counts\n iterationCount: number;\n toolCallCount: number;\n toolSuccessCount: number;\n toolFailureCount: number;\n toolTimeoutCount: number;\n\n // Tokens\n inputTokens: number;\n outputTokens: number;\n totalTokens: number;\n\n // Errors\n errors: Array<{ type: string; message: string; timestamp: Date }>;\n}\n\nexport interface AuditEntry {\n timestamp: Date;\n type:\n | 'hook_executed'\n | 'tool_modified'\n | 'tool_skipped'\n | 'execution_paused'\n | 'execution_resumed'\n | 'tool_approved'\n | 'tool_rejected'\n | 'tool_blocked'\n | 'tool_permission_approved';\n hookName?: string;\n toolName?: string;\n details: any;\n}\n\nexport class ExecutionContext {\n // Execution metadata\n readonly executionId: string;\n readonly startTime: Date;\n iteration: number = 0;\n\n // Tool tracking\n readonly toolCalls: Map<string, ToolCall> = new Map();\n readonly toolResults: Map<string, ToolResult> = new Map();\n\n // Control state\n paused: boolean = false;\n pauseReason?: string;\n cancelled: boolean = false;\n cancelReason?: string;\n\n // User data (for hooks to share state)\n readonly metadata: Map<string, any> = new Map();\n\n // History storage (memory-safe)\n private readonly config: ExecutionContextConfig;\n private readonly iterations: IterationRecord[] = [];\n private readonly iterationSummaries: IterationSummary[] = [];\n\n // Metrics\n readonly metrics: ExecutionMetrics = {\n totalDuration: 0,\n llmDuration: 0,\n toolDuration: 0,\n hookDuration: 0,\n iterationCount: 0,\n toolCallCount: 0,\n toolSuccessCount: 0,\n toolFailureCount: 0,\n toolTimeoutCount: 0,\n inputTokens: 0,\n outputTokens: 0,\n totalTokens: 0,\n errors: [],\n };\n\n // Audit trail\n private readonly auditTrail: AuditEntry[] = [];\n\n constructor(\n executionId: string,\n config: ExecutionContextConfig = {}\n ) {\n this.executionId = executionId;\n this.startTime = new Date();\n this.config = {\n maxHistorySize: config.maxHistorySize || 10,\n historyMode: config.historyMode || 'summary',\n maxAuditTrailSize: config.maxAuditTrailSize || 1000,\n };\n }\n\n /**\n * Add iteration to history (memory-safe)\n */\n addIteration(record: IterationRecord): void {\n switch (this.config.historyMode) {\n case 'none':\n // Don't store anything\n break;\n\n case 'summary':\n // Store lightweight summary only\n this.iterationSummaries.push({\n iteration: record.iteration,\n tokens: record.response.usage.total_tokens,\n toolCount: record.toolCalls.length,\n duration: record.endTime.getTime() - record.startTime.getTime(),\n timestamp: record.startTime,\n });\n\n // Keep circular buffer\n if (this.iterationSummaries.length > this.config.maxHistorySize!) {\n this.iterationSummaries.shift();\n }\n break;\n\n case 'full':\n // Store full iteration data\n this.iterations.push(record);\n\n // Keep circular buffer\n if (this.iterations.length > this.config.maxHistorySize!) {\n this.iterations.shift();\n }\n break;\n }\n }\n\n /**\n * Get iteration history\n */\n getHistory(): IterationRecord[] | IterationSummary[] {\n return this.config.historyMode === 'full' ? this.iterations : this.iterationSummaries;\n }\n\n /**\n * Add audit entry\n */\n audit(type: AuditEntry['type'], details: any, hookName?: string, toolName?: string): void {\n this.auditTrail.push({\n timestamp: new Date(),\n type,\n hookName,\n toolName,\n details,\n });\n\n // Keep circular buffer\n if (this.auditTrail.length > this.config.maxAuditTrailSize!) {\n this.auditTrail.shift();\n }\n }\n\n /**\n * Get audit trail\n */\n getAuditTrail(): readonly AuditEntry[] {\n return this.auditTrail;\n }\n\n /**\n * Update metrics\n */\n updateMetrics(update: Partial<ExecutionMetrics>): void {\n Object.assign(this.metrics, update);\n }\n\n /**\n * Add tool call to tracking\n */\n addToolCall(toolCall: ToolCall): void {\n this.toolCalls.set(toolCall.id, toolCall);\n this.metrics.toolCallCount++;\n }\n\n /**\n * Add tool result to tracking\n */\n addToolResult(result: ToolResult): void {\n this.toolResults.set(result.tool_use_id, result);\n\n // Update metrics\n if (result.state === ToolCallState.COMPLETED) {\n this.metrics.toolSuccessCount++;\n } else if (result.state === ToolCallState.FAILED) {\n this.metrics.toolFailureCount++;\n } else if (result.state === ToolCallState.TIMEOUT) {\n this.metrics.toolTimeoutCount++;\n }\n }\n\n /**\n * Check resource limits\n */\n checkLimits(limits?: {\n maxExecutionTime?: number;\n maxToolCalls?: number;\n maxContextSize?: number;\n }): void {\n if (!limits) return;\n\n // Check execution time\n if (limits.maxExecutionTime) {\n const elapsed = Date.now() - this.startTime.getTime();\n if (elapsed > limits.maxExecutionTime) {\n throw new Error(\n `Execution time limit exceeded: ${elapsed}ms > ${limits.maxExecutionTime}ms`\n );\n }\n }\n\n // Check tool call count\n if (limits.maxToolCalls && this.toolCalls.size > limits.maxToolCalls) {\n throw new Error(\n `Tool call limit exceeded: ${this.toolCalls.size} > ${limits.maxToolCalls}`\n );\n }\n\n // Check context size\n if (limits.maxContextSize) {\n const size = this.estimateSize();\n if (size > limits.maxContextSize) {\n throw new Error(\n `Context size limit exceeded: ${size} bytes > ${limits.maxContextSize} bytes`\n );\n }\n }\n }\n\n /**\n * Estimate memory usage (rough approximation)\n */\n private estimateSize(): number {\n try {\n const data = {\n toolCalls: Array.from(this.toolCalls.values()),\n toolResults: Array.from(this.toolResults.values()),\n iterations: this.config.historyMode === 'full' ? this.iterations : this.iterationSummaries,\n auditTrail: this.auditTrail,\n };\n return JSON.stringify(data).length;\n } catch {\n return 0; // Error estimating, return 0\n }\n }\n\n /**\n * Cleanup resources and release memory\n * Clears all internal arrays and maps to allow garbage collection\n */\n cleanup(): void {\n // Store execution summary before clearing\n const summary = {\n executionId: this.executionId,\n totalIterations: this.iteration,\n totalToolCalls: this.metrics.toolCallCount,\n totalDuration: Date.now() - this.startTime.getTime(),\n success: !this.cancelled && this.metrics.errors.length === 0,\n };\n\n // Clear all maps\n this.toolCalls.clear();\n this.toolResults.clear();\n this.metadata.clear();\n\n // Clear all arrays (modify length to allow GC of items)\n this.iterations.length = 0;\n this.iterationSummaries.length = 0;\n this.auditTrail.length = 0;\n this.metrics.errors.length = 0;\n\n // Store summary after clearing (for final access if needed)\n this.metadata.set('execution_summary', summary);\n }\n\n /**\n * Get execution summary\n */\n getSummary() {\n return {\n executionId: this.executionId,\n startTime: this.startTime,\n currentIteration: this.iteration,\n paused: this.paused,\n cancelled: this.cancelled,\n metrics: { ...this.metrics },\n totalDuration: Date.now() - this.startTime.getTime(),\n };\n }\n}\n","/**\n * Hook manager - handles hook registration and execution\n * Includes error isolation, timeouts, and optional parallel execution\n */\n\nimport { EventEmitter } from 'eventemitter3';\nimport {\n Hook,\n HookConfig,\n HookName,\n HookSignatures,\n} from './types/HookTypes.js';\n\nexport class HookManager {\n private hooks: Map<HookName, Hook<any, any>[]> = new Map();\n private timeout: number;\n private parallel: boolean;\n // Per-hook error tracking: hookKey -> consecutive error count\n private hookErrorCounts: Map<string, number> = new Map();\n // Disabled hooks that exceeded error threshold\n private disabledHooks: Set<string> = new Set();\n private maxConsecutiveErrors: number = 3;\n private emitter: EventEmitter;\n\n constructor(\n config: HookConfig = {},\n emitter: EventEmitter,\n errorHandling?: { maxConsecutiveErrors?: number }\n ) {\n this.timeout = config.hookTimeout || 5000; // 5 second default\n this.parallel = config.parallelHooks || false;\n this.emitter = emitter;\n this.maxConsecutiveErrors = errorHandling?.maxConsecutiveErrors || 3;\n\n // Register hooks from config\n this.registerFromConfig(config);\n }\n\n /**\n * Register hooks from configuration\n */\n private registerFromConfig(config: HookConfig): void {\n const hookNames: HookName[] = [\n 'before:execution',\n 'after:execution',\n 'before:llm',\n 'after:llm',\n 'before:tool',\n 'after:tool',\n 'approve:tool',\n 'pause:check',\n ];\n\n for (const name of hookNames) {\n const hook = config[name];\n if (hook) {\n this.register(name, hook);\n }\n }\n }\n\n /**\n * Register a hook\n */\n register(name: HookName, hook: Hook<any, any>): void {\n // Validate hook is a function\n if (typeof hook !== 'function') {\n throw new Error(`Hook must be a function, got: ${typeof hook}`);\n }\n\n // Get or create hooks array\n if (!this.hooks.has(name)) {\n this.hooks.set(name, []);\n }\n\n const existing = this.hooks.get(name)!;\n\n // Limit number of hooks per name\n if (existing.length >= 10) {\n throw new Error(`Too many hooks for ${name} (max: 10)`);\n }\n\n existing.push(hook);\n }\n\n /**\n * Unregister a specific hook function by reference.\n * Returns true if the hook was found and removed.\n */\n unregister(name: HookName, hook: Hook<any, any>): boolean {\n const hooks = this.hooks.get(name);\n if (!hooks) return false;\n\n const index = hooks.indexOf(hook);\n if (index === -1) return false;\n\n hooks.splice(index, 1);\n return true;\n }\n\n /**\n * Execute hooks for a given name\n */\n async executeHooks<K extends HookName>(\n name: K,\n context: HookSignatures[K]['context'],\n defaultResult: HookSignatures[K]['result']\n ): Promise<HookSignatures[K]['result']> {\n const hooks = this.hooks.get(name);\n\n if (!hooks || hooks.length === 0) {\n return defaultResult;\n }\n\n // Parallel execution (for independent hooks)\n if (this.parallel && hooks.length > 1) {\n return this.executeHooksParallel(hooks, context, defaultResult);\n }\n\n // Sequential execution (default)\n return this.executeHooksSequential(hooks, context, defaultResult);\n }\n\n /**\n * Execute hooks sequentially\n */\n private async executeHooksSequential<T>(\n hooks: Hook<any, any>[],\n context: any,\n defaultResult: T\n ): Promise<T> {\n let result = defaultResult;\n\n for (let i = 0; i < hooks.length; i++) {\n const hook = hooks[i]!;\n const hookKey = this.getHookKey(hook, i);\n const hookResult = await this.executeHookSafely(hook, context, hookKey);\n\n // Skip failed hooks (loose equality catches both null and undefined)\n if (hookResult == null) {\n continue;\n }\n\n // Merge hook result\n result = { ...result, ...hookResult };\n\n // Check for early exit\n if ((hookResult as any).skip === true) {\n break;\n }\n }\n\n return result;\n }\n\n /**\n * Execute hooks in parallel\n */\n private async executeHooksParallel<T>(\n hooks: Hook<any, any>[],\n context: any,\n defaultResult: T\n ): Promise<T> {\n // Execute all hooks concurrently with unique keys\n const results = await Promise.all(\n hooks.map((hook, i) => {\n const hookKey = this.getHookKey(hook, i);\n return this.executeHookSafely(hook, context, hookKey);\n })\n );\n\n // Filter out failures and merge results\n const validResults = results.filter((r) => r != null);\n\n return validResults.reduce(\n (acc, hookResult) => ({ ...acc, ...hookResult }),\n defaultResult\n );\n }\n\n /**\n * Generate unique key for a hook\n */\n private getHookKey(hook: Hook<any, any>, index: number): string {\n return `${hook.name || 'anonymous'}_${index}`;\n }\n\n /**\n * Execute single hook with error isolation and timeout (with per-hook error tracking)\n */\n private async executeHookSafely<T>(\n hook: Hook<any, any>,\n context: any,\n hookKey?: string\n ): Promise<T | null> {\n const key = hookKey || hook.name || 'anonymous';\n\n // Skip disabled hooks\n if (this.disabledHooks.has(key)) {\n return null;\n }\n\n const startTime = Date.now();\n\n try {\n // Execute with timeout\n const result = await Promise.race([\n hook(context),\n new Promise<never>((_, reject) =>\n setTimeout(() => reject(new Error('Hook timeout')), this.timeout)\n ),\n ]);\n\n // Reset error counter for this hook on success\n this.hookErrorCounts.delete(key);\n\n // Track timing\n const duration = Date.now() - startTime;\n if (context.context?.updateMetrics) {\n context.context.updateMetrics({\n hookDuration: (context.context.metrics.hookDuration || 0) + duration,\n });\n }\n\n return result as T;\n } catch (error) {\n // Increment error counter for this specific hook\n const errorCount = (this.hookErrorCounts.get(key) || 0) + 1;\n this.hookErrorCounts.set(key, errorCount);\n\n // Emit error event\n this.emitter.emit('hook:error', {\n executionId: context.executionId,\n hookName: hook.name || 'anonymous',\n error: error as Error,\n consecutiveErrors: errorCount,\n timestamp: new Date(),\n });\n\n // Check consecutive error threshold for this hook\n if (errorCount >= this.maxConsecutiveErrors) {\n // Disable this specific hook, not all hooks\n this.disabledHooks.add(key);\n console.warn(\n `Hook \"${key}\" disabled after ${errorCount} consecutive failures. Last error: ${(error as Error).message}`\n );\n } else {\n // Log warning but continue (degraded mode)\n console.warn(\n `Hook execution failed (${key}): ${(error as Error).message} (${errorCount}/${this.maxConsecutiveErrors} errors)`\n );\n }\n\n return null; // Hook failed, skip its result\n }\n }\n\n /**\n * Check if there are any hooks registered\n */\n hasHooks(name: HookName): boolean {\n const hooks = this.hooks.get(name);\n return !!hooks && hooks.length > 0;\n }\n\n /**\n * Get hook count\n */\n getHookCount(name?: HookName): number {\n if (name) {\n return this.hooks.get(name)?.length || 0;\n }\n // Total across all hooks\n return Array.from(this.hooks.values()).reduce((sum, arr) => sum + arr.length, 0);\n }\n\n /**\n * Clear all hooks and reset error tracking\n */\n clear(): void {\n this.hooks.clear();\n this.hookErrorCounts.clear();\n this.disabledHooks.clear();\n }\n\n /**\n * Destroy the hook manager and release all references\n */\n destroy(): void {\n this.hooks.clear();\n this.hookErrorCounts.clear();\n this.disabledHooks.clear();\n }\n\n /**\n * Re-enable a disabled hook\n */\n enableHook(hookKey: string): void {\n this.disabledHooks.delete(hookKey);\n this.hookErrorCounts.delete(hookKey);\n }\n\n /**\n * Get list of disabled hooks\n */\n getDisabledHooks(): string[] {\n return Array.from(this.disabledHooks);\n }\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../../../src/capabilities/agents/ExecutionContext.ts","../../../src/capabilities/agents/HookManager.ts"],"names":[],"mappings":"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","file":"index.js","sourcesContent":["/**\n * Execution context - tracks state, metrics, and history for agent execution\n * Includes memory safety (circular buffers) and resource limits\n */\n\nimport { AgentResponse } from '../../domain/entities/Response.js';\nimport { TextGenerateOptions } from '../../domain/interfaces/ITextProvider.js';\nimport { ToolCall, ToolResult, ToolCallState } from '../../domain/entities/Tool.js';\n\nexport type HistoryMode = 'none' | 'summary' | 'full';\n\nexport interface ExecutionContextConfig {\n maxHistorySize?: number; // Max iterations to store (default: 10)\n historyMode?: HistoryMode; // What to store (default: 'summary')\n maxAuditTrailSize?: number; // Max audit entries (default: 1000)\n}\n\nexport interface IterationRecord {\n iteration: number;\n request: TextGenerateOptions;\n response: AgentResponse;\n toolCalls: ToolCall[];\n toolResults: ToolResult[];\n startTime: Date;\n endTime: Date;\n}\n\nexport interface IterationSummary {\n iteration: number;\n tokens: number;\n toolCount: number;\n duration: number;\n timestamp: Date;\n}\n\nexport interface ExecutionMetrics {\n // Timing\n totalDuration: number;\n llmDuration: number;\n toolDuration: number;\n hookDuration: number;\n\n // Counts\n iterationCount: number;\n toolCallCount: number;\n toolSuccessCount: number;\n toolFailureCount: number;\n toolTimeoutCount: number;\n\n // Tokens\n inputTokens: number;\n outputTokens: number;\n totalTokens: number;\n\n // Errors\n errors: Array<{ type: string; message: string; timestamp: Date }>;\n}\n\nexport interface AuditEntry {\n timestamp: Date;\n type:\n | 'hook_executed'\n | 'tool_modified'\n | 'tool_skipped'\n | 'execution_paused'\n | 'execution_resumed'\n | 'tool_approved'\n | 'tool_rejected'\n | 'tool_blocked'\n | 'tool_permission_approved';\n hookName?: string;\n toolName?: string;\n details: any;\n}\n\nexport class ExecutionContext {\n // Execution metadata\n readonly executionId: string;\n readonly startTime: Date;\n iteration: number = 0;\n\n // Tool tracking\n readonly toolCalls: Map<string, ToolCall> = new Map();\n readonly toolResults: Map<string, ToolResult> = new Map();\n\n // Control state\n paused: boolean = false;\n pauseReason?: string;\n cancelled: boolean = false;\n cancelReason?: string;\n\n // User data (for hooks to share state)\n readonly metadata: Map<string, any> = new Map();\n\n // History storage (memory-safe)\n private readonly config: ExecutionContextConfig;\n private readonly iterations: IterationRecord[] = [];\n private readonly iterationSummaries: IterationSummary[] = [];\n\n // Metrics\n readonly metrics: ExecutionMetrics = {\n totalDuration: 0,\n llmDuration: 0,\n toolDuration: 0,\n hookDuration: 0,\n iterationCount: 0,\n toolCallCount: 0,\n toolSuccessCount: 0,\n toolFailureCount: 0,\n toolTimeoutCount: 0,\n inputTokens: 0,\n outputTokens: 0,\n totalTokens: 0,\n errors: [],\n };\n\n // Audit trail\n private readonly auditTrail: AuditEntry[] = [];\n\n constructor(\n executionId: string,\n config: ExecutionContextConfig = {}\n ) {\n this.executionId = executionId;\n this.startTime = new Date();\n this.config = {\n maxHistorySize: config.maxHistorySize || 10,\n historyMode: config.historyMode || 'summary',\n maxAuditTrailSize: config.maxAuditTrailSize || 1000,\n };\n }\n\n /**\n * Add iteration to history (memory-safe)\n */\n addIteration(record: IterationRecord): void {\n switch (this.config.historyMode) {\n case 'none':\n // Don't store anything\n break;\n\n case 'summary':\n // Store lightweight summary only\n this.iterationSummaries.push({\n iteration: record.iteration,\n tokens: record.response.usage.total_tokens,\n toolCount: record.toolCalls.length,\n duration: record.endTime.getTime() - record.startTime.getTime(),\n timestamp: record.startTime,\n });\n\n // Keep circular buffer\n if (this.iterationSummaries.length > this.config.maxHistorySize!) {\n this.iterationSummaries.shift();\n }\n break;\n\n case 'full':\n // Store full iteration data\n this.iterations.push(record);\n\n // Keep circular buffer\n if (this.iterations.length > this.config.maxHistorySize!) {\n this.iterations.shift();\n }\n break;\n }\n }\n\n /**\n * Get iteration history\n */\n getHistory(): IterationRecord[] | IterationSummary[] {\n return this.config.historyMode === 'full' ? this.iterations : this.iterationSummaries;\n }\n\n /**\n * Add audit entry\n */\n audit(type: AuditEntry['type'], details: any, hookName?: string, toolName?: string): void {\n this.auditTrail.push({\n timestamp: new Date(),\n type,\n hookName,\n toolName,\n details,\n });\n\n // Keep circular buffer\n if (this.auditTrail.length > this.config.maxAuditTrailSize!) {\n this.auditTrail.shift();\n }\n }\n\n /**\n * Get audit trail\n */\n getAuditTrail(): readonly AuditEntry[] {\n return this.auditTrail;\n }\n\n /**\n * Update metrics\n */\n updateMetrics(update: Partial<ExecutionMetrics>): void {\n Object.assign(this.metrics, update);\n }\n\n /**\n * Add tool call to tracking\n */\n addToolCall(toolCall: ToolCall): void {\n this.toolCalls.set(toolCall.id, toolCall);\n this.metrics.toolCallCount++;\n }\n\n /**\n * Add tool result to tracking\n */\n addToolResult(result: ToolResult): void {\n this.toolResults.set(result.tool_use_id, result);\n\n // Update metrics\n if (result.state === ToolCallState.COMPLETED) {\n this.metrics.toolSuccessCount++;\n } else if (result.state === ToolCallState.FAILED) {\n this.metrics.toolFailureCount++;\n } else if (result.state === ToolCallState.TIMEOUT) {\n this.metrics.toolTimeoutCount++;\n }\n }\n\n /**\n * Check resource limits\n */\n checkLimits(limits?: {\n maxExecutionTime?: number;\n maxToolCalls?: number;\n maxContextSize?: number;\n }): void {\n if (!limits) return;\n\n // Check execution time\n if (limits.maxExecutionTime) {\n const elapsed = Date.now() - this.startTime.getTime();\n if (elapsed > limits.maxExecutionTime) {\n throw new Error(\n `Execution time limit exceeded: ${elapsed}ms > ${limits.maxExecutionTime}ms`\n );\n }\n }\n\n // Check tool call count\n if (limits.maxToolCalls && this.toolCalls.size > limits.maxToolCalls) {\n throw new Error(\n `Tool call limit exceeded: ${this.toolCalls.size} > ${limits.maxToolCalls}`\n );\n }\n\n // Check context size\n if (limits.maxContextSize) {\n const size = this.estimateSize();\n if (size > limits.maxContextSize) {\n throw new Error(\n `Context size limit exceeded: ${size} bytes > ${limits.maxContextSize} bytes`\n );\n }\n }\n }\n\n /**\n * Estimate memory usage (rough approximation)\n */\n private estimateSize(): number {\n try {\n const data = {\n toolCalls: Array.from(this.toolCalls.values()),\n toolResults: Array.from(this.toolResults.values()),\n iterations: this.config.historyMode === 'full' ? this.iterations : this.iterationSummaries,\n auditTrail: this.auditTrail,\n };\n return JSON.stringify(data).length;\n } catch {\n return 0; // Error estimating, return 0\n }\n }\n\n /**\n * Cleanup resources and release memory\n * Clears all internal arrays and maps to allow garbage collection\n */\n cleanup(): void {\n // Store execution summary before clearing\n const summary = {\n executionId: this.executionId,\n totalIterations: this.iteration,\n totalToolCalls: this.metrics.toolCallCount,\n totalDuration: Date.now() - this.startTime.getTime(),\n success: !this.cancelled && this.metrics.errors.length === 0,\n };\n\n // Clear all maps\n this.toolCalls.clear();\n this.toolResults.clear();\n this.metadata.clear();\n\n // Clear all arrays (modify length to allow GC of items)\n this.iterations.length = 0;\n this.iterationSummaries.length = 0;\n this.auditTrail.length = 0;\n this.metrics.errors.length = 0;\n\n // Store summary after clearing (for final access if needed)\n this.metadata.set('execution_summary', summary);\n }\n\n /**\n * Get execution summary\n */\n getSummary() {\n return {\n executionId: this.executionId,\n startTime: this.startTime,\n currentIteration: this.iteration,\n paused: this.paused,\n cancelled: this.cancelled,\n metrics: { ...this.metrics },\n totalDuration: Date.now() - this.startTime.getTime(),\n };\n }\n}\n","/**\n * Hook manager - handles hook registration and execution\n * Includes error isolation, timeouts, and optional parallel execution\n */\n\nimport { EventEmitter } from 'eventemitter3';\nimport {\n Hook,\n HookConfig,\n HookName,\n HookSignatures,\n} from './types/HookTypes.js';\nimport type { IDisposable } from '../../domain/interfaces/IDisposable.js';\n\nexport class HookManager implements IDisposable {\n private _isDestroyed = false;\n private hooks: Map<HookName, Hook<any, any>[]> = new Map();\n private timeout: number;\n private parallel: boolean;\n // Per-hook error tracking: hookKey -> consecutive error count\n private hookErrorCounts: Map<string, number> = new Map();\n // Disabled hooks that exceeded error threshold\n private disabledHooks: Set<string> = new Set();\n private maxConsecutiveErrors: number = 3;\n private emitter: EventEmitter;\n\n constructor(\n config: HookConfig = {},\n emitter: EventEmitter,\n errorHandling?: { maxConsecutiveErrors?: number }\n ) {\n this.timeout = config.hookTimeout || 5000; // 5 second default\n this.parallel = config.parallelHooks || false;\n this.emitter = emitter;\n this.maxConsecutiveErrors = errorHandling?.maxConsecutiveErrors || 3;\n\n // Register hooks from config\n this.registerFromConfig(config);\n }\n\n /**\n * Register hooks from configuration\n */\n private registerFromConfig(config: HookConfig): void {\n const hookNames: HookName[] = [\n 'before:execution',\n 'after:execution',\n 'before:llm',\n 'after:llm',\n 'before:tool',\n 'after:tool',\n 'approve:tool',\n 'pause:check',\n ];\n\n for (const name of hookNames) {\n const hook = config[name];\n if (hook) {\n this.register(name, hook);\n }\n }\n }\n\n /**\n * Register a hook\n */\n register(name: HookName, hook: Hook<any, any>): void {\n // Validate hook is a function\n if (typeof hook !== 'function') {\n throw new Error(`Hook must be a function, got: ${typeof hook}`);\n }\n\n // Get or create hooks array\n if (!this.hooks.has(name)) {\n this.hooks.set(name, []);\n }\n\n const existing = this.hooks.get(name)!;\n\n // Limit number of hooks per name\n if (existing.length >= 10) {\n throw new Error(`Too many hooks for ${name} (max: 10)`);\n }\n\n existing.push(hook);\n }\n\n /**\n * Unregister a specific hook function by reference.\n * Returns true if the hook was found and removed.\n */\n unregister(name: HookName, hook: Hook<any, any>): boolean {\n const hooks = this.hooks.get(name);\n if (!hooks) return false;\n\n const index = hooks.indexOf(hook);\n if (index === -1) return false;\n\n hooks.splice(index, 1);\n return true;\n }\n\n /**\n * Execute hooks for a given name\n */\n async executeHooks<K extends HookName>(\n name: K,\n context: HookSignatures[K]['context'],\n defaultResult: HookSignatures[K]['result']\n ): Promise<HookSignatures[K]['result']> {\n const hooks = this.hooks.get(name);\n\n if (!hooks || hooks.length === 0) {\n return defaultResult;\n }\n\n // Parallel execution (for independent hooks)\n if (this.parallel && hooks.length > 1) {\n return this.executeHooksParallel(hooks, context, defaultResult);\n }\n\n // Sequential execution (default)\n return this.executeHooksSequential(hooks, context, defaultResult);\n }\n\n /**\n * Execute hooks sequentially\n */\n private async executeHooksSequential<T>(\n hooks: Hook<any, any>[],\n context: any,\n defaultResult: T\n ): Promise<T> {\n let result = defaultResult;\n\n for (let i = 0; i < hooks.length; i++) {\n const hook = hooks[i]!;\n const hookKey = this.getHookKey(hook, i);\n const hookResult = await this.executeHookSafely(hook, context, hookKey);\n\n // Skip failed hooks (loose equality catches both null and undefined)\n if (hookResult == null) {\n continue;\n }\n\n // Merge hook result\n result = { ...result, ...hookResult };\n\n // Check for early exit\n if ((hookResult as any).skip === true) {\n break;\n }\n }\n\n return result;\n }\n\n /**\n * Execute hooks in parallel\n */\n private async executeHooksParallel<T>(\n hooks: Hook<any, any>[],\n context: any,\n defaultResult: T\n ): Promise<T> {\n // Execute all hooks concurrently with unique keys\n const results = await Promise.all(\n hooks.map((hook, i) => {\n const hookKey = this.getHookKey(hook, i);\n return this.executeHookSafely(hook, context, hookKey);\n })\n );\n\n // Filter out failures and merge results\n const validResults = results.filter((r) => r != null);\n\n return validResults.reduce(\n (acc, hookResult) => ({ ...acc, ...hookResult }),\n defaultResult\n );\n }\n\n /**\n * Generate unique key for a hook\n */\n private getHookKey(hook: Hook<any, any>, index: number): string {\n return `${hook.name || 'anonymous'}_${index}`;\n }\n\n /**\n * Execute single hook with error isolation and timeout (with per-hook error tracking)\n */\n private async executeHookSafely<T>(\n hook: Hook<any, any>,\n context: any,\n hookKey?: string\n ): Promise<T | null> {\n const key = hookKey || hook.name || 'anonymous';\n\n // Skip disabled hooks\n if (this.disabledHooks.has(key)) {\n return null;\n }\n\n const startTime = Date.now();\n\n try {\n // Execute with timeout\n const result = await Promise.race([\n hook(context),\n new Promise<never>((_, reject) =>\n setTimeout(() => reject(new Error('Hook timeout')), this.timeout)\n ),\n ]);\n\n // Reset error counter for this hook on success\n this.hookErrorCounts.delete(key);\n\n // Track timing\n const duration = Date.now() - startTime;\n if (context.context?.updateMetrics) {\n context.context.updateMetrics({\n hookDuration: (context.context.metrics.hookDuration || 0) + duration,\n });\n }\n\n return result as T;\n } catch (error) {\n // Increment error counter for this specific hook\n const errorCount = (this.hookErrorCounts.get(key) || 0) + 1;\n this.hookErrorCounts.set(key, errorCount);\n\n // Emit error event\n this.emitter.emit('hook:error', {\n executionId: context.executionId,\n hookName: hook.name || 'anonymous',\n error: error as Error,\n consecutiveErrors: errorCount,\n timestamp: new Date(),\n });\n\n // Check consecutive error threshold for this hook\n if (errorCount >= this.maxConsecutiveErrors) {\n // Disable this specific hook, not all hooks\n this.disabledHooks.add(key);\n console.warn(\n `Hook \"${key}\" disabled after ${errorCount} consecutive failures. Last error: ${(error as Error).message}`\n );\n } else {\n // Log warning but continue (degraded mode)\n console.warn(\n `Hook execution failed (${key}): ${(error as Error).message} (${errorCount}/${this.maxConsecutiveErrors} errors)`\n );\n }\n\n return null; // Hook failed, skip its result\n }\n }\n\n /**\n * Check if there are any hooks registered\n */\n hasHooks(name: HookName): boolean {\n const hooks = this.hooks.get(name);\n return !!hooks && hooks.length > 0;\n }\n\n /**\n * Get hook count\n */\n getHookCount(name?: HookName): number {\n if (name) {\n return this.hooks.get(name)?.length || 0;\n }\n // Total across all hooks\n return Array.from(this.hooks.values()).reduce((sum, arr) => sum + arr.length, 0);\n }\n\n /**\n * Clear all hooks and reset error tracking\n */\n clear(): void {\n this.hooks.clear();\n this.hookErrorCounts.clear();\n this.disabledHooks.clear();\n }\n\n /**\n * Check if the hook manager has been destroyed\n */\n get isDestroyed(): boolean {\n return this._isDestroyed;\n }\n\n /**\n * Destroy the hook manager and release all references\n */\n destroy(): void {\n if (this._isDestroyed) return;\n this._isDestroyed = true;\n this.hooks.clear();\n this.hookErrorCounts.clear();\n this.disabledHooks.clear();\n }\n\n /**\n * Re-enable a disabled hook\n */\n enableHook(hookKey: string): void {\n this.disabledHooks.delete(hookKey);\n this.hookErrorCounts.delete(hookKey);\n }\n\n /**\n * Get list of disabled hooks\n */\n getDisabledHooks(): string[] {\n return Array.from(this.disabledHooks);\n }\n}\n"]}
|