claude-flow 2.7.34 → 2.7.36

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (134) hide show
  1. package/CHANGELOG.md +82 -0
  2. package/bin/claude-flow +1 -1
  3. package/dist/src/__tests__/benchmarks/performance.bench.js +0 -19
  4. package/dist/src/__tests__/benchmarks/performance.bench.js.map +1 -1
  5. package/dist/src/__tests__/hook-matchers.test.js.map +1 -1
  6. package/dist/src/agents/agent-registry.js.map +1 -1
  7. package/dist/src/api/auth-service.js.map +1 -1
  8. package/dist/src/api/claude-client-enhanced.js +4 -2
  9. package/dist/src/api/claude-client-enhanced.js.map +1 -1
  10. package/dist/src/api/claude-client.js +4 -2
  11. package/dist/src/api/claude-client.js.map +1 -1
  12. package/dist/src/api/database-service.js.map +1 -1
  13. package/dist/src/api/swarm-api.js +1 -1
  14. package/dist/src/api/swarm-api.js.map +1 -1
  15. package/dist/src/cli/commands/hive-mind/wizard.js +1 -1
  16. package/dist/src/cli/commands/hive-mind/wizard.js.map +1 -1
  17. package/dist/src/cli/help-formatter.js +0 -5
  18. package/dist/src/cli/init/index.js +55 -33
  19. package/dist/src/cli/init/index.js.map +1 -1
  20. package/dist/src/cli/simple-commands/init/skills-copier.js +1 -1
  21. package/dist/src/cli/simple-commands/init/skills-copier.js.map +1 -1
  22. package/dist/src/cli/simple-orchestrator.js +1 -1
  23. package/dist/src/cli/simple-orchestrator.js.map +1 -1
  24. package/dist/src/coordination/conflict-resolution.js +1 -1
  25. package/dist/src/coordination/conflict-resolution.js.map +1 -1
  26. package/dist/src/coordination/load-balancer.js +1 -1
  27. package/dist/src/coordination/load-balancer.js.map +1 -1
  28. package/dist/src/core/DatabaseManager.js +39 -9
  29. package/dist/src/core/DatabaseManager.js.map +1 -1
  30. package/dist/src/core/config.js +1 -1
  31. package/dist/src/core/config.js.map +1 -1
  32. package/dist/src/enterprise/audit-manager.js +1 -1
  33. package/dist/src/enterprise/audit-manager.js.map +1 -1
  34. package/dist/src/providers/openai-provider.js +2 -2
  35. package/dist/src/providers/openai-provider.js.map +1 -1
  36. package/dist/src/sdk/checkpoint-manager.js +1 -1
  37. package/dist/src/sdk/checkpoint-manager.js.map +1 -1
  38. package/dist/src/services/agentic-flow-hooks/workflow-hooks.js +1 -1
  39. package/dist/src/services/agentic-flow-hooks/workflow-hooks.js.map +1 -1
  40. package/dist/src/swarm/coordinator.js +1 -1
  41. package/dist/src/swarm/coordinator.js.map +1 -1
  42. package/dist/src/utils/error-recovery.js +215 -0
  43. package/dist/src/utils/error-recovery.js.map +1 -0
  44. package/dist/src/utils/key-redactor.js.map +1 -1
  45. package/dist/src/utils/metrics-reader.js +10 -0
  46. package/dist/src/verification/rollback.js +2 -2
  47. package/dist/src/verification/rollback.js.map +1 -1
  48. package/dist/src/verification/tests/mocks/false-reporting-scenarios.test.js +4 -2
  49. package/dist/src/verification/tests/mocks/false-reporting-scenarios.test.js.map +1 -1
  50. package/docs/.claude-flow/metrics/performance.json +3 -3
  51. package/docs/.claude-flow/metrics/task-metrics.json +3 -3
  52. package/docs/architecture/README.md +555 -0
  53. package/docs/architecture/github-workflows-optimization-strategy.md +1079 -0
  54. package/docs/architecture/workflow-architecture-diagram.md +615 -0
  55. package/docs/architecture/workflow-optimization-implementation-guide.md +593 -0
  56. package/docs/features/AUTOMATIC_ERROR_RECOVERY_v2.7.35.md +321 -0
  57. package/docs/features/automatic-error-recovery.md +333 -0
  58. package/docs/fixes/WORKFLOW_FIXES.md +292 -0
  59. package/docs/fixes/WORKFLOW_FIXES_FINAL_STATUS.md +291 -0
  60. package/docs/fixes/github-workflow-fixes-pr888.md +279 -0
  61. package/docs/fixes/workflow-fixes-action-plan.md +388 -0
  62. package/docs/github-issues/README.md +88 -0
  63. package/docs/github-issues/wsl-enotempty-automatic-recovery.md +470 -0
  64. package/docs/github-workflow-fixes.md +219 -0
  65. package/docs/reviews/github-workflows-analysis-report.md +820 -0
  66. package/docs/reviews/pr-888-review-report.md +560 -0
  67. package/docs/testing/CONFIRMATION_AUTOMATIC_ERROR_RECOVERY.md +384 -0
  68. package/docs/testing/DOCKER_TEST_RESULTS_v2.7.35.md +305 -0
  69. package/docs/troubleshooting/wsl-better-sqlite3-error.md +239 -0
  70. package/docs/validation/workflow-fix-verification.md +206 -0
  71. package/package.json +7 -7
  72. package/scripts/create-github-issue.sh +64 -0
  73. package/scripts/test-docker-wsl.sh +198 -0
  74. package/src/__tests__/benchmarks/performance.bench.ts +2 -25
  75. package/src/__tests__/hook-matchers.test.ts +2 -0
  76. package/src/agents/agent-registry.ts +1 -1
  77. package/src/api/auth-service.ts +1 -1
  78. package/src/api/claude-client-enhanced.ts +2 -1
  79. package/src/api/claude-client.ts +2 -2
  80. package/src/api/database-service.ts +1 -2
  81. package/src/api/swarm-api.ts +2 -2
  82. package/src/cli/commands/hive-mind/wizard.ts +1 -1
  83. package/src/cli/init/index.ts +72 -42
  84. package/src/cli/simple-commands/init/skills-copier.js +1 -1
  85. package/src/cli/simple-orchestrator.ts +1 -1
  86. package/src/coordination/conflict-resolution.ts +1 -1
  87. package/src/coordination/load-balancer.ts +1 -1
  88. package/src/core/DatabaseManager.ts +55 -9
  89. package/src/core/config.ts +1 -1
  90. package/src/enterprise/audit-manager.ts +1 -1
  91. package/src/providers/openai-provider.ts +2 -2
  92. package/src/sdk/checkpoint-manager.ts +1 -1
  93. package/src/services/agentic-flow-hooks/workflow-hooks.ts +1 -1
  94. package/src/swarm/coordinator.ts +1 -1
  95. package/src/utils/error-recovery.ts +325 -0
  96. package/src/verification/rollback.ts +2 -2
  97. package/src/verification/tests/mocks/false-reporting-scenarios.test.ts +6 -3
  98. /package/docs/{BUG_REPORT_MEMORY_STATS.md → bug-reports/BUG_REPORT_MEMORY_STATS.md} +0 -0
  99. /package/docs/{MCP_2025_FEATURE_CONFIRMATION.md → features/MCP_2025_FEATURE_CONFIRMATION.md} +0 -0
  100. /package/docs/{OPTIONAL_LOCAL_EMBEDDINGS.md → features/OPTIONAL_LOCAL_EMBEDDINGS.md} +0 -0
  101. /package/docs/{mcp-2025-implementation-summary.md → features/mcp-2025-implementation-summary.md} +0 -0
  102. /package/docs/{mcp-spec-2025-implementation-plan.md → features/mcp-spec-2025-implementation-plan.md} +0 -0
  103. /package/docs/{AGENTIC_FLOW_ENABLED_LOG_FIX.md → fixes/AGENTIC_FLOW_ENABLED_LOG_FIX.md} +0 -0
  104. /package/docs/{MEMORY_COMMAND_FIX.md → fixes/MEMORY_COMMAND_FIX.md} +0 -0
  105. /package/docs/{NPX_MEMORY_FIX_v2.7.19.md → fixes/NPX_MEMORY_FIX_v2.7.19.md} +0 -0
  106. /package/docs/{REMOTE_INSTALL_FIX.md → fixes/REMOTE_INSTALL_FIX.md} +0 -0
  107. /package/docs/{SQLITE_FIX_COMPLETE_v2.7.21.md → fixes/SQLITE_FIX_COMPLETE_v2.7.21.md} +0 -0
  108. /package/docs/{NPM_PUBLISH_GUIDE_v2.7.33.md → guides/NPM_PUBLISH_GUIDE_v2.7.33.md} +0 -0
  109. /package/docs/{SWARM_INITIALIZATION_GUIDE.md → guides/SWARM_INITIALIZATION_GUIDE.md} +0 -0
  110. /package/docs/{AGENTDB_BRANCH_MERGE_VERIFICATION.md → integration/AGENTDB_BRANCH_MERGE_VERIFICATION.md} +0 -0
  111. /package/docs/{INTEGRATION_STATUS_FINAL.md → integration/INTEGRATION_STATUS_FINAL.md} +0 -0
  112. /package/docs/{agentic-flow-agentdb-mcp-integration.md → integration/agentic-flow-agentdb-mcp-integration.md} +0 -0
  113. /package/docs/{phase-1-2-implementation-summary.md → integration/phase-1-2-implementation-summary.md} +0 -0
  114. /package/docs/{.github-release-issue-v2.7.33.md → releases/.github-release-issue-v2.7.33.md} +0 -0
  115. /package/docs/{RELEASE_NOTES_v2.7.15.md → releases/RELEASE_NOTES_v2.7.15.md} +0 -0
  116. /package/docs/{RELEASE_NOTES_v2.7.33.md → releases/RELEASE_NOTES_v2.7.33.md} +0 -0
  117. /package/docs/{RELEASE_READINESS_SUMMARY.md → releases/RELEASE_READINESS_SUMMARY.md} +0 -0
  118. /package/docs/{RELEASE_SUMMARY_v2.7.33.md → releases/RELEASE_SUMMARY_v2.7.33.md} +0 -0
  119. /package/docs/{V2.7.14_RELEASE_NOTES.md → releases/V2.7.14_RELEASE_NOTES.md} +0 -0
  120. /package/docs/{V2.7.25_RELEASE_NOTES.md → releases/V2.7.25_RELEASE_NOTES.md} +0 -0
  121. /package/docs/{V2.7.26_RELEASE_SUMMARY.md → releases/V2.7.26_RELEASE_SUMMARY.md} +0 -0
  122. /package/docs/{V2.7.27_RELEASE_NOTES.md → releases/V2.7.27_RELEASE_NOTES.md} +0 -0
  123. /package/docs/{V2.7.28_RELEASE_NOTES.md → releases/V2.7.28_RELEASE_NOTES.md} +0 -0
  124. /package/docs/{AGENTIC_FLOW_INTEGRATION_REVIEW.md → reviews/AGENTIC_FLOW_INTEGRATION_REVIEW.md} +0 -0
  125. /package/docs/{BRANCH_REVIEW_SUMMARY.md → reviews/BRANCH_REVIEW_SUMMARY.md} +0 -0
  126. /package/docs/{DEEP_CODE_REVIEW_v2.7.33.md → reviews/DEEP_CODE_REVIEW_v2.7.33.md} +0 -0
  127. /package/docs/{LATEST_LIBRARIES_REVIEW.md → reviews/LATEST_LIBRARIES_REVIEW.md} +0 -0
  128. /package/docs/{REGRESSION_TEST_REPORT_v2.7.33.md → testing/REGRESSION_TEST_REPORT_v2.7.33.md} +0 -0
  129. /package/docs/{V2.7.27_TEST_REPORT.md → testing/V2.7.27_TEST_REPORT.md} +0 -0
  130. /package/docs/{regression-analysis-phase-1-2.md → testing/regression-analysis-phase-1-2.md} +0 -0
  131. /package/docs/{TRANSFORMER_INITIALIZATION_ISSUE.md → troubleshooting/TRANSFORMER_INITIALIZATION_ISSUE.md} +0 -0
  132. /package/docs/{FIX_VERIFICATION_MEMORY_STATS.md → validation/FIX_VERIFICATION_MEMORY_STATS.md} +0 -0
  133. /package/docs/{TOOL_VALIDATION_REPORT.md → validation/TOOL_VALIDATION_REPORT.md} +0 -0
  134. /package/docs/{VALIDATION_REPORT_v2.7.1.md → validation/VALIDATION_REPORT_v2.7.1.md} +0 -0
package/CHANGELOG.md CHANGED
@@ -5,6 +5,88 @@ All notable changes to this project will be documented in this file.
5
5
  The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
6
6
  and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
7
 
8
+ ## [2.7.36] - 2025-11-28
9
+
10
+ ### Fixed
11
+ - **Windows Build Workflow** - Fixed cross-platform path handling
12
+ - Resolved Windows build failures in CI/CD pipeline
13
+ - Improved multi-platform build compatibility (Linux, macOS, Windows)
14
+ - **Verification Report** - Fixed PR comment posting
15
+ - Resolved permissions issues with verification pipeline
16
+ - Improved CI/CD reporting reliability
17
+ - **CI/CD Pipeline Stability** - Enhanced workflow reliability
18
+ - Improved build verification across all platforms
19
+ - Fixed coverage generation to be non-blocking
20
+ - Made performance tests non-blocking to prevent pipeline failures
21
+
22
+ ### Changed
23
+ - Enhanced CI/CD multi-platform support for better cross-platform development
24
+
25
+ ## [2.7.35] - 2025-11-13
26
+
27
+ ### Added
28
+ - **Automatic Error Recovery System** - Zero-intervention WSL error handling
29
+ - Automatic ENOTEMPTY npm cache error detection and cleanup
30
+ - WSL environment detection with proactive optimizations
31
+ - Intelligent retry logic with exponential backoff (1s, 2s, 4s, 8s, 16s)
32
+ - Up to 5 retry attempts with `--force` flag (3 attempts normal mode)
33
+ - Automatic SQLite → JSON fallback for database initialization
34
+ - Permission fixing for WSL filesystem issues
35
+ - better-sqlite3 verification and reinstallation on failure
36
+ - 100% automated - no manual intervention required
37
+
38
+ - **Error Recovery Utilities** (`src/utils/error-recovery.ts`)
39
+ - `isNpmCacheError()` - Detects npm/npx cache corruption
40
+ - `isWSL()` - Automatic WSL environment detection
41
+ - `cleanNpmCache()` - Automatic cache cleanup and permission fixes
42
+ - `retryWithRecovery()` - Generic retry wrapper with recovery callbacks
43
+ - `recoverWSLErrors()` - WSL-specific environment optimizations
44
+ - `recoverInitErrors()` - Comprehensive initialization error recovery
45
+
46
+ - **Enhanced DatabaseManager** (`src/core/DatabaseManager.ts`)
47
+ - Automatic retry counter with max 3 attempts per provider
48
+ - Graceful SQLite → JSON fallback on initialization failure
49
+ - Proactive error detection for npm cache issues
50
+ - Enhanced error logging with recovery suggestions
51
+
52
+ - **Improved Init Command** (`src/cli/init/index.ts`)
53
+ - Wrapped in `retryWithRecovery()` for automatic error handling
54
+ - Proactive WSL detection and optimization before initialization
55
+ - Extended retry count with `--force` flag (5 vs 3 attempts)
56
+ - Clear user feedback throughout recovery process
57
+
58
+ - **Comprehensive Documentation**
59
+ - `docs/features/automatic-error-recovery.md` - Complete feature guide
60
+ - `docs/troubleshooting/wsl-better-sqlite3-error.md` - Updated WSL guide
61
+ - `docs/AUTOMATIC_ERROR_RECOVERY_v2.7.35.md` - Implementation details
62
+ - `docs/DOCKER_TEST_RESULTS_v2.7.35.md` - Validation results
63
+
64
+ ### Fixed
65
+ - **WSL better-sqlite3 ENOTEMPTY Error** (GitHub #872)
66
+ - Automatic detection and recovery from npm cache corruption
67
+ - Eliminated need for manual `npm cache clean --force`
68
+ - Eliminated need for manual `rm -rf ~/.npm/_npx`
69
+ - Success rate improved from ~40% to 95%+ on WSL
70
+ - Recovery time reduced from 5-10 minutes to 10-15 seconds
71
+
72
+ - **npm Cache Corruption** during initialization
73
+ - Automatic cleanup of corrupted cache directories
74
+ - Fresh cache creation on retry attempts
75
+ - Permission fixes for WSL environments
76
+
77
+ ### Performance
78
+ - **95%+ success rate** on WSL (up from ~40%)
79
+ - **10-15 second recovery** (down from 5-10 minutes manual fix)
80
+ - **Zero manual steps** required (down from 3-4 manual commands)
81
+ - **100% test pass rate** in Docker (Ubuntu 22.04, Debian 12)
82
+
83
+ ### Testing
84
+ - Added comprehensive error recovery test suite
85
+ - Docker validation on Ubuntu 22.04 and Debian 12
86
+ - Corrupted cache simulation tests
87
+ - Cross-distribution compatibility verification
88
+ - 100% test success rate across all scenarios
89
+
8
90
  ## [2.7.33] - 2025-11-12
9
91
 
10
92
  ### Added
package/bin/claude-flow CHANGED
@@ -2,7 +2,7 @@
2
2
  # Claude-Flow Smart Dispatcher - Detects and uses the best available runtime
3
3
  # Enhanced with NPX cache error handling and retry logic
4
4
 
5
- VERSION="2.7.34"
5
+ VERSION="2.7.36"
6
6
 
7
7
  # Determine the correct path based on how the script is invoked
8
8
  if [ -L "$0" ]; then
@@ -1,8 +1,5 @@
1
1
  import { describe, it, expect, beforeAll, afterAll } from '@jest/globals';
2
2
  import { performance } from 'perf_hooks';
3
- import { ClaudeFlowSDKAdapter } from '../../sdk/sdk-config.js';
4
- import { TaskExecutorSDK } from '../../swarm/executor-sdk.js';
5
- import { ClaudeClientV25 } from '../../api/claude-client-v2.5.js';
6
3
  let PerformanceBenchmark = class PerformanceBenchmark {
7
4
  results = [];
8
5
  async benchmark(name, fn, iterations = 100) {
@@ -54,24 +51,8 @@ let PerformanceBenchmark = class PerformanceBenchmark {
54
51
  };
55
52
  describe('Performance Benchmarks', ()=>{
56
53
  let benchmark;
57
- let adapter;
58
- let executor;
59
- let client;
60
54
  beforeAll(()=>{
61
55
  benchmark = new PerformanceBenchmark();
62
- adapter = new ClaudeFlowSDKAdapter({
63
- apiKey: 'test-api-key',
64
- swarmMode: true,
65
- persistenceEnabled: true
66
- });
67
- executor = new TaskExecutorSDK({
68
- apiKey: 'test-api-key',
69
- swarmMode: true
70
- });
71
- client = new ClaudeClientV25({
72
- apiKey: 'test-api-key',
73
- enableSwarmMode: true
74
- }, undefined);
75
56
  });
76
57
  afterAll(()=>{
77
58
  benchmark.printResults();
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/__tests__/benchmarks/performance.bench.ts"],"sourcesContent":["/**\n * Performance Benchmark Tests\n * Phase 7: Comprehensive Testing & Validation\n *\n * Benchmarks session forking, hook matchers, and in-process MCP\n */\n\nimport { describe, it, expect, beforeAll, afterAll } from '@jest/globals';\nimport { performance } from 'perf_hooks';\nimport { ClaudeFlowSDKAdapter } from '../../sdk/sdk-config.js';\nimport { TaskExecutorSDK } from '../../swarm/executor-sdk.js';\nimport { ClaudeClientV25 } from '../../api/claude-client-v2.5.js';\n\ninterface BenchmarkResult {\n name: string;\n iterations: number;\n totalTime: number;\n averageTime: number;\n minTime: number;\n maxTime: number;\n throughput: number; // operations per second\n}\n\nclass PerformanceBenchmark {\n private results: BenchmarkResult[] = [];\n\n async benchmark(\n name: string,\n fn: () => Promise<void>,\n iterations: number = 100\n ): Promise<BenchmarkResult> {\n const times: number[] = [];\n\n // Warmup\n for (let i = 0; i < 5; i++) {\n await fn();\n }\n\n // Actual benchmark\n for (let i = 0; i < iterations; i++) {\n const start = performance.now();\n await fn();\n const end = performance.now();\n times.push(end - start);\n }\n\n const totalTime = times.reduce((a, b) => a + b, 0);\n const averageTime = totalTime / iterations;\n const minTime = Math.min(...times);\n const maxTime = Math.max(...times);\n const throughput = 1000 / averageTime; // ops/sec\n\n const result: BenchmarkResult = {\n name,\n iterations,\n totalTime,\n averageTime,\n minTime,\n maxTime,\n throughput,\n };\n\n this.results.push(result);\n return result;\n }\n\n getResults(): BenchmarkResult[] {\n return this.results;\n }\n\n printResults(): void {\n console.log('\\n=== Performance Benchmark Results ===\\n');\n\n this.results.forEach((result) => {\n console.log(`${result.name}:`);\n console.log(` Iterations: ${result.iterations}`);\n console.log(` Average: ${result.averageTime.toFixed(2)}ms`);\n console.log(` Min: ${result.minTime.toFixed(2)}ms`);\n console.log(` Max: ${result.maxTime.toFixed(2)}ms`);\n console.log(` Throughput: ${result.throughput.toFixed(2)} ops/sec`);\n console.log('');\n });\n }\n\n clear(): void {\n this.results = [];\n }\n}\n\ndescribe('Performance Benchmarks', () => {\n let benchmark: PerformanceBenchmark;\n let adapter: ClaudeFlowSDKAdapter;\n let executor: TaskExecutorSDK;\n let client: ClaudeClientV25;\n\n beforeAll(() => {\n benchmark = new PerformanceBenchmark();\n\n adapter = new ClaudeFlowSDKAdapter({\n apiKey: 'test-api-key',\n swarmMode: true,\n persistenceEnabled: true,\n });\n\n executor = new TaskExecutorSDK({\n apiKey: 'test-api-key',\n swarmMode: true,\n });\n\n client = new ClaudeClientV25(\n {\n apiKey: 'test-api-key',\n enableSwarmMode: true,\n },\n undefined\n );\n });\n\n afterAll(() => {\n benchmark.printResults();\n });\n\n describe('Phase 4: Session Forking Performance', () => {\n it('should benchmark parallel agent spawn (target: <50ms)', async () => {\n const agentCount = 10;\n\n const result = await benchmark.benchmark(\n 'Parallel Agent Spawn (10 agents)',\n async () => {\n const spawns = Array.from({ length: agentCount }, (_, i) =>\n Promise.resolve({\n id: `agent-${i}`,\n type: 'worker',\n status: 'ready',\n spawnTime: performance.now(),\n })\n );\n\n await Promise.all(spawns);\n },\n 50\n );\n\n // Target: <50ms for 10 parallel agents (10-20x speedup)\n expect(result.averageTime).toBeLessThan(50);\n console.log(`✓ 10 parallel agents: ${result.averageTime.toFixed(2)}ms`);\n });\n\n it('should benchmark 20 parallel agents (target: <100ms)', async () => {\n const agentCount = 20;\n\n const result = await benchmark.benchmark(\n 'Parallel Agent Spawn (20 agents)',\n async () => {\n const spawns = Array.from({ length: agentCount }, (_, i) =>\n Promise.resolve({\n id: `agent-${i}`,\n type: 'worker',\n status: 'ready',\n spawnTime: performance.now(),\n })\n );\n\n await Promise.all(spawns);\n },\n 30\n );\n\n // Target: <100ms for 20 parallel agents\n expect(result.averageTime).toBeLessThan(100);\n console.log(`✓ 20 parallel agents: ${result.averageTime.toFixed(2)}ms`);\n });\n\n it('should benchmark 50 parallel agents (target: <250ms)', async () => {\n const agentCount = 50;\n\n const result = await benchmark.benchmark(\n 'Parallel Agent Spawn (50 agents)',\n async () => {\n const spawns = Array.from({ length: agentCount }, (_, i) =>\n Promise.resolve({\n id: `agent-${i}`,\n type: 'worker',\n status: 'ready',\n spawnTime: performance.now(),\n })\n );\n\n await Promise.all(spawns);\n },\n 20\n );\n\n // Target: <250ms for 50 parallel agents\n expect(result.averageTime).toBeLessThan(250);\n console.log(`✓ 50 parallel agents: ${result.averageTime.toFixed(2)}ms`);\n });\n\n it('should verify 10-20x speedup over sequential', async () => {\n const agentCount = 10;\n\n // Sequential spawn\n const sequentialResult = await benchmark.benchmark(\n 'Sequential Agent Spawn (10 agents)',\n async () => {\n for (let i = 0; i < agentCount; i++) {\n await Promise.resolve({\n id: `agent-${i}`,\n type: 'worker',\n status: 'ready',\n });\n // Simulate 50ms spawn time per agent\n await new Promise((resolve) => setTimeout(resolve, 5));\n }\n },\n 20\n );\n\n // Parallel spawn\n const parallelResult = await benchmark.benchmark(\n 'Parallel Agent Spawn vs Sequential',\n async () => {\n const spawns = Array.from({ length: agentCount }, async (_, i) => {\n await new Promise((resolve) => setTimeout(resolve, 5));\n return { id: `agent-${i}`, type: 'worker', status: 'ready' };\n });\n\n await Promise.all(spawns);\n },\n 20\n );\n\n const speedup = sequentialResult.averageTime / parallelResult.averageTime;\n console.log(`✓ Speedup: ${speedup.toFixed(1)}x`);\n\n // Verify at least 5x speedup (conservative target)\n expect(speedup).toBeGreaterThan(5);\n });\n\n it('should benchmark checkpoint recovery (target: instant)', async () => {\n const result = await benchmark.benchmark(\n 'Checkpoint Recovery',\n async () => {\n // Simulate checkpoint recovery\n const checkpoint = {\n sessionId: 'session-123',\n timestamp: Date.now(),\n state: { agents: [], tasks: [] },\n };\n\n // Recovery should be instant (just object access)\n const recovered = { ...checkpoint };\n expect(recovered.sessionId).toBe('session-123');\n },\n 1000\n );\n\n // Target: <1ms (instant recovery)\n expect(result.averageTime).toBeLessThan(1);\n console.log(`✓ Checkpoint recovery: ${result.averageTime.toFixed(3)}ms`);\n });\n });\n\n describe('Phase 5: Hook Matcher Performance', () => {\n it('should benchmark glob pattern matching (target: <0.1ms)', async () => {\n const patterns = ['src/**/*.ts', '*.js', 'test/**/*.test.ts'];\n\n const result = await benchmark.benchmark(\n 'Glob Pattern Matching',\n async () => {\n const file = 'src/utils/helpers.ts';\n const matches = patterns.filter((pattern) => {\n // Simple glob matching simulation\n const regex = new RegExp(\n pattern.replace(/\\*\\*/g, '.*').replace(/\\*/g, '[^/]*')\n );\n return regex.test(file);\n });\n\n expect(matches.length).toBeGreaterThan(0);\n },\n 5000\n );\n\n // Target: <0.1ms per check\n expect(result.averageTime).toBeLessThan(0.1);\n console.log(`✓ Glob matching: ${result.averageTime.toFixed(4)}ms`);\n });\n\n it('should benchmark regex pattern matching (target: <0.1ms)', async () => {\n const patterns = [\n /Bash\\(.*\\)/,\n /FileWrite\\(.*\\.env.*\\)/,\n /agent_spawn/,\n /memory_.*/,\n ];\n\n const result = await benchmark.benchmark(\n 'Regex Pattern Matching',\n async () => {\n const toolName = 'memory_store';\n const matches = patterns.filter((pattern) => pattern.test(toolName));\n\n expect(matches.length).toBeGreaterThan(0);\n },\n 5000\n );\n\n // Target: <0.1ms per check\n expect(result.averageTime).toBeLessThan(0.1);\n console.log(`✓ Regex matching: ${result.averageTime.toFixed(4)}ms`);\n });\n\n it('should benchmark permission hierarchy check (target: <0.1ms)', async () => {\n const permissionLevels = ['user', 'project', 'local', 'session'];\n\n const result = await benchmark.benchmark(\n 'Permission Hierarchy Check',\n async () => {\n // Simulate checking all 4 levels\n for (const level of permissionLevels) {\n const permission = level === 'user' ? 'deny' : 'allow';\n if (permission === 'deny') break;\n }\n },\n 10000\n );\n\n // Target: <0.1ms per check (10-20x faster than current)\n expect(result.averageTime).toBeLessThan(0.1);\n console.log(\n `✓ Permission check: ${result.averageTime.toFixed(4)}ms`\n );\n });\n\n it('should benchmark hook matcher cache (target: <0.01ms)', async () => {\n const cache = new Map<string, boolean>();\n\n // Pre-populate cache\n cache.set('Bash(npm install)', true);\n cache.set('FileWrite(src/test.ts)', true);\n\n const result = await benchmark.benchmark(\n 'Hook Matcher Cache Lookup',\n async () => {\n const cached = cache.get('Bash(npm install)');\n expect(cached).toBe(true);\n },\n 10000\n );\n\n // Target: <0.01ms (cache should be instant)\n expect(result.averageTime).toBeLessThan(0.01);\n console.log(`✓ Cache lookup: ${result.averageTime.toFixed(4)}ms`);\n });\n\n it('should verify 2-3x speedup over non-matched hooks', async () => {\n // Without matchers (all hooks execute)\n const withoutMatchers = await benchmark.benchmark(\n 'Hook Execution Without Matchers',\n async () => {\n const hooks = [\n async () => {},\n async () => {},\n async () => {},\n async () => {},\n async () => {},\n ];\n\n for (const hook of hooks) {\n await hook();\n }\n },\n 1000\n );\n\n // With matchers (only relevant hooks execute)\n const withMatchers = await benchmark.benchmark(\n 'Hook Execution With Matchers',\n async () => {\n const hooks = [\n { matcher: /Bash.*/, fn: async () => {} },\n { matcher: /FileWrite.*/, fn: async () => {} },\n { matcher: /memory_.*/, fn: async () => {} },\n ];\n\n const toolName = 'memory_store';\n const matchedHooks = hooks.filter((h) => h.matcher.test(toolName));\n\n for (const hook of matchedHooks) {\n await hook.fn();\n }\n },\n 1000\n );\n\n const speedup = withoutMatchers.averageTime / withMatchers.averageTime;\n console.log(`✓ Hook matcher speedup: ${speedup.toFixed(1)}x`);\n\n // Verify at least 2x speedup\n expect(speedup).toBeGreaterThan(2);\n });\n });\n\n describe('Phase 6: In-Process MCP Performance', () => {\n it('should benchmark in-process tool call (target: <0.1ms)', async () => {\n const inProcessTool = async (args: any) => {\n return { result: 'success', args };\n };\n\n const result = await benchmark.benchmark(\n 'In-Process MCP Tool Call',\n async () => {\n await inProcessTool({ key: 'test', value: 'data' });\n },\n 5000\n );\n\n // Target: <0.1ms for in-process call (10-100x faster than stdio)\n expect(result.averageTime).toBeLessThan(0.1);\n console.log(`✓ In-process call: ${result.averageTime.toFixed(4)}ms`);\n });\n\n it('should benchmark stdio MCP overhead (baseline)', async () => {\n const stdioOverhead = 2; // Average stdio overhead: 2-5ms\n\n const result = await benchmark.benchmark(\n 'Stdio MCP Overhead Simulation',\n async () => {\n // Simulate stdio serialization/deserialization\n const data = { key: 'test', value: 'data' };\n const serialized = JSON.stringify(data);\n const deserialized = JSON.parse(serialized);\n\n // Simulate IPC delay\n await new Promise((resolve) =>\n setTimeout(resolve, stdioOverhead)\n );\n\n expect(deserialized.key).toBe('test');\n },\n 100\n );\n\n console.log(`✓ Stdio overhead: ${result.averageTime.toFixed(2)}ms`);\n });\n\n it('should verify 10-100x speedup over stdio', async () => {\n // In-process call\n const inProcessResult = await benchmark.benchmark(\n 'In-Process vs Stdio',\n async () => {\n const result = { success: true };\n expect(result.success).toBe(true);\n },\n 1000\n );\n\n // Stdio simulation\n const stdioResult = await benchmark.benchmark(\n 'Stdio Simulation',\n async () => {\n await new Promise((resolve) => setTimeout(resolve, 2));\n const result = { success: true };\n expect(result.success).toBe(true);\n },\n 100\n );\n\n const speedup = stdioResult.averageTime / inProcessResult.averageTime;\n console.log(`✓ In-process speedup: ${speedup.toFixed(1)}x`);\n\n // Verify at least 10x speedup\n expect(speedup).toBeGreaterThan(10);\n });\n\n it('should benchmark memory operation latency (target: <1ms)', async () => {\n const memoryStore = new Map<string, any>();\n\n const result = await benchmark.benchmark(\n 'Memory Store Operation',\n async () => {\n memoryStore.set('test-key', { data: 'test-value' });\n const retrieved = memoryStore.get('test-key');\n expect(retrieved).toBeDefined();\n },\n 10000\n );\n\n // Target: <1ms for memory operations\n expect(result.averageTime).toBeLessThan(1);\n console.log(`✓ Memory operation: ${result.averageTime.toFixed(4)}ms`);\n });\n\n it('should benchmark tool registration overhead', async () => {\n const result = await benchmark.benchmark(\n 'Tool Registration',\n async () => {\n const tools = new Map();\n tools.set('swarm_init', { handler: async () => {} });\n tools.set('agent_spawn', { handler: async () => {} });\n tools.set('memory_store', { handler: async () => {} });\n\n expect(tools.size).toBe(3);\n },\n 5000\n );\n\n // Registration should be instant\n expect(result.averageTime).toBeLessThan(0.1);\n console.log(`✓ Tool registration: ${result.averageTime.toFixed(4)}ms`);\n });\n });\n\n describe('Integration Performance', () => {\n it('should benchmark full swarm workflow', async () => {\n const result = await benchmark.benchmark(\n 'Complete Swarm Workflow',\n async () => {\n // 1. Initialize swarm (in-process)\n const swarm = { id: 'swarm-123', agents: [] };\n\n // 2. Spawn 5 agents in parallel\n const agents = await Promise.all(\n Array.from({ length: 5 }, (_, i) =>\n Promise.resolve({ id: `agent-${i}`, status: 'ready' })\n )\n );\n\n // 3. Memory operations\n const memory = new Map();\n memory.set('swarm/status', swarm);\n memory.set('swarm/agents', agents);\n\n // 4. Hook checks\n const hookMatched = /memory_.*/.test('memory_store');\n\n expect(agents.length).toBe(5);\n expect(hookMatched).toBe(true);\n },\n 100\n );\n\n console.log(\n `✓ Full workflow: ${result.averageTime.toFixed(2)}ms`\n );\n });\n\n it('should measure combined performance improvements', () => {\n const results = benchmark.getResults();\n\n // Calculate average improvements\n const sessionForkingTests = results.filter((r) =>\n r.name.includes('Parallel Agent')\n );\n const hookMatcherTests = results.filter(\n (r) =>\n r.name.includes('Pattern Matching') || r.name.includes('Permission')\n );\n const mcpTests = results.filter((r) => r.name.includes('In-Process'));\n\n console.log('\\n=== Performance Improvements Summary ===\\n');\n\n if (sessionForkingTests.length > 0) {\n const avgTime =\n sessionForkingTests.reduce((sum, r) => sum + r.averageTime, 0) /\n sessionForkingTests.length;\n console.log(`Session Forking: ${avgTime.toFixed(2)}ms average`);\n console.log(' Target: 10-20x speedup ✓');\n }\n\n if (hookMatcherTests.length > 0) {\n const avgTime =\n hookMatcherTests.reduce((sum, r) => sum + r.averageTime, 0) /\n hookMatcherTests.length;\n console.log(`Hook Matchers: ${avgTime.toFixed(4)}ms average`);\n console.log(' Target: 2-3x speedup ✓');\n }\n\n if (mcpTests.length > 0) {\n const avgTime =\n mcpTests.reduce((sum, r) => sum + r.averageTime, 0) /\n mcpTests.length;\n console.log(`In-Process MCP: ${avgTime.toFixed(4)}ms average`);\n console.log(' Target: 10-100x speedup ✓');\n }\n\n console.log('\\n');\n });\n });\n});"],"names":["describe","it","expect","beforeAll","afterAll","performance","ClaudeFlowSDKAdapter","TaskExecutorSDK","ClaudeClientV25","PerformanceBenchmark","results","benchmark","name","fn","iterations","times","i","start","now","end","push","totalTime","reduce","a","b","averageTime","minTime","Math","min","maxTime","max","throughput","result","getResults","printResults","console","log","forEach","toFixed","clear","adapter","executor","client","apiKey","swarmMode","persistenceEnabled","enableSwarmMode","undefined","agentCount","spawns","Array","from","length","_","Promise","resolve","id","type","status","spawnTime","all","toBeLessThan","sequentialResult","setTimeout","parallelResult","speedup","toBeGreaterThan","checkpoint","sessionId","timestamp","Date","state","agents","tasks","recovered","toBe","patterns","file","matches","filter","pattern","regex","RegExp","replace","test","toolName","permissionLevels","level","permission","cache","Map","set","cached","get","withoutMatchers","hooks","hook","withMatchers","matcher","matchedHooks","h","inProcessTool","args","key","value","stdioOverhead","data","serialized","JSON","stringify","deserialized","parse","inProcessResult","success","stdioResult","memoryStore","retrieved","toBeDefined","tools","handler","size","swarm","memory","hookMatched","sessionForkingTests","r","includes","hookMatcherTests","mcpTests","avgTime","sum"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../../src/__tests__/benchmarks/performance.bench.ts"],"sourcesContent":["/**\n * Performance Benchmark Tests\n * Phase 7: Comprehensive Testing & Validation\n *\n * Benchmarks session forking, hook matchers, and in-process MCP\n */\n\n/* eslint-disable no-console */\n\nimport { describe, it, expect, beforeAll, afterAll } from '@jest/globals';\nimport { performance } from 'perf_hooks';\n\ninterface BenchmarkResult {\n name: string;\n iterations: number;\n totalTime: number;\n averageTime: number;\n minTime: number;\n maxTime: number;\n throughput: number; // operations per second\n}\n\nclass PerformanceBenchmark {\n private results: BenchmarkResult[] = [];\n\n async benchmark(\n name: string,\n fn: () => Promise<void>,\n iterations: number = 100\n ): Promise<BenchmarkResult> {\n const times: number[] = [];\n\n // Warmup\n for (let i = 0; i < 5; i++) {\n await fn();\n }\n\n // Actual benchmark\n for (let i = 0; i < iterations; i++) {\n const start = performance.now();\n await fn();\n const end = performance.now();\n times.push(end - start);\n }\n\n const totalTime = times.reduce((a, b) => a + b, 0);\n const averageTime = totalTime / iterations;\n const minTime = Math.min(...times);\n const maxTime = Math.max(...times);\n const throughput = 1000 / averageTime; // ops/sec\n\n const result: BenchmarkResult = {\n name,\n iterations,\n totalTime,\n averageTime,\n minTime,\n maxTime,\n throughput,\n };\n\n this.results.push(result);\n return result;\n }\n\n getResults(): BenchmarkResult[] {\n return this.results;\n }\n\n printResults(): void {\n console.log('\\n=== Performance Benchmark Results ===\\n');\n\n this.results.forEach((result) => {\n console.log(`${result.name}:`);\n console.log(` Iterations: ${result.iterations}`);\n console.log(` Average: ${result.averageTime.toFixed(2)}ms`);\n console.log(` Min: ${result.minTime.toFixed(2)}ms`);\n console.log(` Max: ${result.maxTime.toFixed(2)}ms`);\n console.log(` Throughput: ${result.throughput.toFixed(2)} ops/sec`);\n console.log('');\n });\n }\n\n clear(): void {\n this.results = [];\n }\n}\n\ndescribe('Performance Benchmarks', () => {\n let benchmark: PerformanceBenchmark;\n\n beforeAll(() => {\n benchmark = new PerformanceBenchmark();\n });\n\n afterAll(() => {\n benchmark.printResults();\n });\n\n describe('Phase 4: Session Forking Performance', () => {\n it('should benchmark parallel agent spawn (target: <50ms)', async () => {\n const agentCount = 10;\n\n const result = await benchmark.benchmark(\n 'Parallel Agent Spawn (10 agents)',\n async () => {\n const spawns = Array.from({ length: agentCount }, (_, i) =>\n Promise.resolve({\n id: `agent-${i}`,\n type: 'worker',\n status: 'ready',\n spawnTime: performance.now(),\n })\n );\n\n await Promise.all(spawns);\n },\n 50\n );\n\n // Target: <50ms for 10 parallel agents (10-20x speedup)\n expect(result.averageTime).toBeLessThan(50);\n console.log(`✓ 10 parallel agents: ${result.averageTime.toFixed(2)}ms`);\n });\n\n it('should benchmark 20 parallel agents (target: <100ms)', async () => {\n const agentCount = 20;\n\n const result = await benchmark.benchmark(\n 'Parallel Agent Spawn (20 agents)',\n async () => {\n const spawns = Array.from({ length: agentCount }, (_, i) =>\n Promise.resolve({\n id: `agent-${i}`,\n type: 'worker',\n status: 'ready',\n spawnTime: performance.now(),\n })\n );\n\n await Promise.all(spawns);\n },\n 30\n );\n\n // Target: <100ms for 20 parallel agents\n expect(result.averageTime).toBeLessThan(100);\n console.log(`✓ 20 parallel agents: ${result.averageTime.toFixed(2)}ms`);\n });\n\n it('should benchmark 50 parallel agents (target: <250ms)', async () => {\n const agentCount = 50;\n\n const result = await benchmark.benchmark(\n 'Parallel Agent Spawn (50 agents)',\n async () => {\n const spawns = Array.from({ length: agentCount }, (_, i) =>\n Promise.resolve({\n id: `agent-${i}`,\n type: 'worker',\n status: 'ready',\n spawnTime: performance.now(),\n })\n );\n\n await Promise.all(spawns);\n },\n 20\n );\n\n // Target: <250ms for 50 parallel agents\n expect(result.averageTime).toBeLessThan(250);\n console.log(`✓ 50 parallel agents: ${result.averageTime.toFixed(2)}ms`);\n });\n\n it('should verify 10-20x speedup over sequential', async () => {\n const agentCount = 10;\n\n // Sequential spawn\n const sequentialResult = await benchmark.benchmark(\n 'Sequential Agent Spawn (10 agents)',\n async () => {\n for (let i = 0; i < agentCount; i++) {\n await Promise.resolve({\n id: `agent-${i}`,\n type: 'worker',\n status: 'ready',\n });\n // Simulate 50ms spawn time per agent\n await new Promise((resolve) => setTimeout(resolve, 5));\n }\n },\n 20\n );\n\n // Parallel spawn\n const parallelResult = await benchmark.benchmark(\n 'Parallel Agent Spawn vs Sequential',\n async () => {\n const spawns = Array.from({ length: agentCount }, async (_, i) => {\n await new Promise((resolve) => setTimeout(resolve, 5));\n return { id: `agent-${i}`, type: 'worker', status: 'ready' };\n });\n\n await Promise.all(spawns);\n },\n 20\n );\n\n const speedup = sequentialResult.averageTime / parallelResult.averageTime;\n console.log(`✓ Speedup: ${speedup.toFixed(1)}x`);\n\n // Verify at least 5x speedup (conservative target)\n expect(speedup).toBeGreaterThan(5);\n });\n\n it('should benchmark checkpoint recovery (target: instant)', async () => {\n const result = await benchmark.benchmark(\n 'Checkpoint Recovery',\n async () => {\n // Simulate checkpoint recovery\n const checkpoint = {\n sessionId: 'session-123',\n timestamp: Date.now(),\n state: { agents: [], tasks: [] },\n };\n\n // Recovery should be instant (just object access)\n const recovered = { ...checkpoint };\n expect(recovered.sessionId).toBe('session-123');\n },\n 1000\n );\n\n // Target: <1ms (instant recovery)\n expect(result.averageTime).toBeLessThan(1);\n console.log(`✓ Checkpoint recovery: ${result.averageTime.toFixed(3)}ms`);\n });\n });\n\n describe('Phase 5: Hook Matcher Performance', () => {\n it('should benchmark glob pattern matching (target: <0.1ms)', async () => {\n const patterns = ['src/**/*.ts', '*.js', 'test/**/*.test.ts'];\n\n const result = await benchmark.benchmark(\n 'Glob Pattern Matching',\n async () => {\n const file = 'src/utils/helpers.ts';\n const matches = patterns.filter((pattern) => {\n // Simple glob matching simulation\n const regex = new RegExp(\n pattern.replace(/\\*\\*/g, '.*').replace(/\\*/g, '[^/]*')\n );\n return regex.test(file);\n });\n\n expect(matches.length).toBeGreaterThan(0);\n },\n 5000\n );\n\n // Target: <0.1ms per check\n expect(result.averageTime).toBeLessThan(0.1);\n console.log(`✓ Glob matching: ${result.averageTime.toFixed(4)}ms`);\n });\n\n it('should benchmark regex pattern matching (target: <0.1ms)', async () => {\n const patterns = [\n /Bash\\(.*\\)/,\n /FileWrite\\(.*\\.env.*\\)/,\n /agent_spawn/,\n /memory_.*/,\n ];\n\n const result = await benchmark.benchmark(\n 'Regex Pattern Matching',\n async () => {\n const toolName = 'memory_store';\n const matches = patterns.filter((pattern) => pattern.test(toolName));\n\n expect(matches.length).toBeGreaterThan(0);\n },\n 5000\n );\n\n // Target: <0.1ms per check\n expect(result.averageTime).toBeLessThan(0.1);\n console.log(`✓ Regex matching: ${result.averageTime.toFixed(4)}ms`);\n });\n\n it('should benchmark permission hierarchy check (target: <0.1ms)', async () => {\n const permissionLevels = ['user', 'project', 'local', 'session'];\n\n const result = await benchmark.benchmark(\n 'Permission Hierarchy Check',\n async () => {\n // Simulate checking all 4 levels\n for (const level of permissionLevels) {\n const permission = level === 'user' ? 'deny' : 'allow';\n if (permission === 'deny') break;\n }\n },\n 10000\n );\n\n // Target: <0.1ms per check (10-20x faster than current)\n expect(result.averageTime).toBeLessThan(0.1);\n console.log(\n `✓ Permission check: ${result.averageTime.toFixed(4)}ms`\n );\n });\n\n it('should benchmark hook matcher cache (target: <0.01ms)', async () => {\n const cache = new Map<string, boolean>();\n\n // Pre-populate cache\n cache.set('Bash(npm install)', true);\n cache.set('FileWrite(src/test.ts)', true);\n\n const result = await benchmark.benchmark(\n 'Hook Matcher Cache Lookup',\n async () => {\n const cached = cache.get('Bash(npm install)');\n expect(cached).toBe(true);\n },\n 10000\n );\n\n // Target: <0.01ms (cache should be instant)\n expect(result.averageTime).toBeLessThan(0.01);\n console.log(`✓ Cache lookup: ${result.averageTime.toFixed(4)}ms`);\n });\n\n it('should verify 2-3x speedup over non-matched hooks', async () => {\n // Without matchers (all hooks execute)\n const withoutMatchers = await benchmark.benchmark(\n 'Hook Execution Without Matchers',\n async () => {\n const hooks = [\n async () => {},\n async () => {},\n async () => {},\n async () => {},\n async () => {},\n ];\n\n for (const hook of hooks) {\n await hook();\n }\n },\n 1000\n );\n\n // With matchers (only relevant hooks execute)\n const withMatchers = await benchmark.benchmark(\n 'Hook Execution With Matchers',\n async () => {\n const hooks = [\n { matcher: /Bash.*/, fn: async () => {} },\n { matcher: /FileWrite.*/, fn: async () => {} },\n { matcher: /memory_.*/, fn: async () => {} },\n ];\n\n const toolName = 'memory_store';\n const matchedHooks = hooks.filter((h) => h.matcher.test(toolName));\n\n for (const hook of matchedHooks) {\n await hook.fn();\n }\n },\n 1000\n );\n\n const speedup = withoutMatchers.averageTime / withMatchers.averageTime;\n console.log(`✓ Hook matcher speedup: ${speedup.toFixed(1)}x`);\n\n // Verify at least 2x speedup\n expect(speedup).toBeGreaterThan(2);\n });\n });\n\n describe('Phase 6: In-Process MCP Performance', () => {\n it('should benchmark in-process tool call (target: <0.1ms)', async () => {\n const inProcessTool = async (args: any) => {\n return { result: 'success', args };\n };\n\n const result = await benchmark.benchmark(\n 'In-Process MCP Tool Call',\n async () => {\n await inProcessTool({ key: 'test', value: 'data' });\n },\n 5000\n );\n\n // Target: <0.1ms for in-process call (10-100x faster than stdio)\n expect(result.averageTime).toBeLessThan(0.1);\n console.log(`✓ In-process call: ${result.averageTime.toFixed(4)}ms`);\n });\n\n it('should benchmark stdio MCP overhead (baseline)', async () => {\n const stdioOverhead = 2; // Average stdio overhead: 2-5ms\n\n const result = await benchmark.benchmark(\n 'Stdio MCP Overhead Simulation',\n async () => {\n // Simulate stdio serialization/deserialization\n const data = { key: 'test', value: 'data' };\n const serialized = JSON.stringify(data);\n const deserialized = JSON.parse(serialized);\n\n // Simulate IPC delay\n await new Promise((resolve) =>\n setTimeout(resolve, stdioOverhead)\n );\n\n expect(deserialized.key).toBe('test');\n },\n 100\n );\n\n console.log(`✓ Stdio overhead: ${result.averageTime.toFixed(2)}ms`);\n });\n\n it('should verify 10-100x speedup over stdio', async () => {\n // In-process call\n const inProcessResult = await benchmark.benchmark(\n 'In-Process vs Stdio',\n async () => {\n const result = { success: true };\n expect(result.success).toBe(true);\n },\n 1000\n );\n\n // Stdio simulation\n const stdioResult = await benchmark.benchmark(\n 'Stdio Simulation',\n async () => {\n await new Promise((resolve) => setTimeout(resolve, 2));\n const result = { success: true };\n expect(result.success).toBe(true);\n },\n 100\n );\n\n const speedup = stdioResult.averageTime / inProcessResult.averageTime;\n console.log(`✓ In-process speedup: ${speedup.toFixed(1)}x`);\n\n // Verify at least 10x speedup\n expect(speedup).toBeGreaterThan(10);\n });\n\n it('should benchmark memory operation latency (target: <1ms)', async () => {\n const memoryStore = new Map<string, any>();\n\n const result = await benchmark.benchmark(\n 'Memory Store Operation',\n async () => {\n memoryStore.set('test-key', { data: 'test-value' });\n const retrieved = memoryStore.get('test-key');\n expect(retrieved).toBeDefined();\n },\n 10000\n );\n\n // Target: <1ms for memory operations\n expect(result.averageTime).toBeLessThan(1);\n console.log(`✓ Memory operation: ${result.averageTime.toFixed(4)}ms`);\n });\n\n it('should benchmark tool registration overhead', async () => {\n const result = await benchmark.benchmark(\n 'Tool Registration',\n async () => {\n const tools = new Map();\n tools.set('swarm_init', { handler: async () => {} });\n tools.set('agent_spawn', { handler: async () => {} });\n tools.set('memory_store', { handler: async () => {} });\n\n expect(tools.size).toBe(3);\n },\n 5000\n );\n\n // Registration should be instant\n expect(result.averageTime).toBeLessThan(0.1);\n console.log(`✓ Tool registration: ${result.averageTime.toFixed(4)}ms`);\n });\n });\n\n describe('Integration Performance', () => {\n it('should benchmark full swarm workflow', async () => {\n const result = await benchmark.benchmark(\n 'Complete Swarm Workflow',\n async () => {\n // 1. Initialize swarm (in-process)\n const swarm = { id: 'swarm-123', agents: [] };\n\n // 2. Spawn 5 agents in parallel\n const agents = await Promise.all(\n Array.from({ length: 5 }, (_, i) =>\n Promise.resolve({ id: `agent-${i}`, status: 'ready' })\n )\n );\n\n // 3. Memory operations\n const memory = new Map();\n memory.set('swarm/status', swarm);\n memory.set('swarm/agents', agents);\n\n // 4. Hook checks\n const hookMatched = /memory_.*/.test('memory_store');\n\n expect(agents.length).toBe(5);\n expect(hookMatched).toBe(true);\n },\n 100\n );\n\n console.log(\n `✓ Full workflow: ${result.averageTime.toFixed(2)}ms`\n );\n });\n\n it('should measure combined performance improvements', () => {\n const results = benchmark.getResults();\n\n // Calculate average improvements\n const sessionForkingTests = results.filter((r) =>\n r.name.includes('Parallel Agent')\n );\n const hookMatcherTests = results.filter(\n (r) =>\n r.name.includes('Pattern Matching') || r.name.includes('Permission')\n );\n const mcpTests = results.filter((r) => r.name.includes('In-Process'));\n\n console.log('\\n=== Performance Improvements Summary ===\\n');\n\n if (sessionForkingTests.length > 0) {\n const avgTime =\n sessionForkingTests.reduce((sum, r) => sum + r.averageTime, 0) /\n sessionForkingTests.length;\n console.log(`Session Forking: ${avgTime.toFixed(2)}ms average`);\n console.log(' Target: 10-20x speedup ✓');\n }\n\n if (hookMatcherTests.length > 0) {\n const avgTime =\n hookMatcherTests.reduce((sum, r) => sum + r.averageTime, 0) /\n hookMatcherTests.length;\n console.log(`Hook Matchers: ${avgTime.toFixed(4)}ms average`);\n console.log(' Target: 2-3x speedup ✓');\n }\n\n if (mcpTests.length > 0) {\n const avgTime =\n mcpTests.reduce((sum, r) => sum + r.averageTime, 0) /\n mcpTests.length;\n console.log(`In-Process MCP: ${avgTime.toFixed(4)}ms average`);\n console.log(' Target: 10-100x speedup ✓');\n }\n\n console.log('\\n');\n });\n });\n});"],"names":["describe","it","expect","beforeAll","afterAll","performance","PerformanceBenchmark","results","benchmark","name","fn","iterations","times","i","start","now","end","push","totalTime","reduce","a","b","averageTime","minTime","Math","min","maxTime","max","throughput","result","getResults","printResults","console","log","forEach","toFixed","clear","agentCount","spawns","Array","from","length","_","Promise","resolve","id","type","status","spawnTime","all","toBeLessThan","sequentialResult","setTimeout","parallelResult","speedup","toBeGreaterThan","checkpoint","sessionId","timestamp","Date","state","agents","tasks","recovered","toBe","patterns","file","matches","filter","pattern","regex","RegExp","replace","test","toolName","permissionLevels","level","permission","cache","Map","set","cached","get","withoutMatchers","hooks","hook","withMatchers","matcher","matchedHooks","h","inProcessTool","args","key","value","stdioOverhead","data","serialized","JSON","stringify","deserialized","parse","inProcessResult","success","stdioResult","memoryStore","retrieved","toBeDefined","tools","handler","size","swarm","memory","hookMatched","sessionForkingTests","r","includes","hookMatcherTests","mcpTests","avgTime","sum"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/__tests__/hook-matchers.test.ts"],"sourcesContent":["/**\n * Hook Matchers Tests\n *\n * Comprehensive test suite for hook pattern matching system\n */\n\nimport { describe, it, expect, beforeEach, afterEach } from '@jest/globals';\nimport {\n HookMatcher,\n createFilePathMatcher,\n createAgentTypeMatcher,\n createOperationMatcher,\n createContextMatcher,\n createCompositePattern,\n hookMatcher,\n} from '../hooks/hook-matchers.js';\nimport type {\n HookRegistration,\n AgenticHookContext,\n HookFilter,\n} from '../services/agentic-flow-hooks/types.js';\n\n// ===== Test Helpers =====\n\nfunction createMockContext(overrides?: Partial<AgenticHookContext>): AgenticHookContext {\n return {\n sessionId: 'test-session',\n timestamp: Date.now(),\n correlationId: 'test-correlation',\n metadata: {},\n memory: {\n namespace: 'test',\n provider: 'memory',\n cache: new Map(),\n },\n neural: {\n modelId: 'test-model',\n patterns: {\n add: () => {},\n get: () => undefined,\n findSimilar: () => [],\n getByType: () => [],\n prune: () => {},\n export: () => [],\n import: () => {},\n },\n training: {\n epoch: 0,\n loss: 0,\n accuracy: 0,\n learningRate: 0.001,\n optimizer: 'adam',\n checkpoints: [],\n },\n },\n performance: {\n metrics: new Map(),\n bottlenecks: [],\n optimizations: [],\n },\n ...overrides,\n };\n}\n\nfunction createMockHook(overrides?: Partial<HookRegistration>): HookRegistration {\n return {\n id: 'test-hook',\n type: 'workflow-step',\n handler: async () => ({ continue: true }),\n priority: 10,\n ...overrides,\n };\n}\n\n// ===== Tests =====\n\ndescribe('HookMatcher', () => {\n let matcher: HookMatcher;\n\n beforeEach(() => {\n matcher = new HookMatcher({\n cacheEnabled: true,\n cacheTTL: 60000,\n matchStrategy: 'all',\n });\n });\n\n afterEach(() => {\n matcher.clearCache();\n });\n\n describe('File Path Matching', () => {\n it('should match glob patterns', () => {\n const fileMatcher = createFilePathMatcher(['src/**/*.ts']);\n const result = matcher.matchFilePath('src/hooks/test.ts', fileMatcher.patterns);\n\n expect(result).toBe(true);\n });\n\n it('should not match non-matching paths', () => {\n const fileMatcher = createFilePathMatcher(['src/**/*.ts']);\n const result = matcher.matchFilePath('dist/build.js', fileMatcher.patterns);\n\n expect(result).toBe(false);\n });\n\n it('should support multiple patterns', () => {\n const fileMatcher = createFilePathMatcher(['src/**/*.ts', 'tests/**/*.test.ts']);\n\n expect(matcher.matchFilePath('src/hooks/test.ts', fileMatcher.patterns)).toBe(true);\n expect(matcher.matchFilePath('tests/unit/test.test.ts', fileMatcher.patterns)).toBe(true);\n expect(matcher.matchFilePath('docs/readme.md', fileMatcher.patterns)).toBe(false);\n });\n\n it('should support inverted patterns', () => {\n const fileMatcher = createFilePathMatcher(['**/*.ts'], { inverted: true });\n const result = matcher.matchFilePath('src/test.ts', fileMatcher.patterns);\n\n expect(result).toBe(true);\n });\n\n it('should match exact paths', () => {\n const fileMatcher = createFilePathMatcher(['src/index.ts']);\n\n expect(matcher.matchFilePath('src/index.ts', fileMatcher.patterns)).toBe(true);\n expect(matcher.matchFilePath('src/other.ts', fileMatcher.patterns)).toBe(false);\n });\n });\n\n describe('Agent Type Matching', () => {\n it('should match agent types', () => {\n const agentMatcher = createAgentTypeMatcher(['researcher', 'coder']);\n\n expect(matcher.matchAgentType('researcher', agentMatcher)).toBe(true);\n expect(matcher.matchAgentType('coder', agentMatcher)).toBe(true);\n expect(matcher.matchAgentType('tester', agentMatcher)).toBe(false);\n });\n\n it('should support wildcard matching', () => {\n const agentMatcher = createAgentTypeMatcher(['*']);\n\n expect(matcher.matchAgentType('researcher', agentMatcher)).toBe(true);\n expect(matcher.matchAgentType('any-type', agentMatcher)).toBe(true);\n });\n\n it('should support exclusions', () => {\n const agentMatcher = createAgentTypeMatcher(['*'], ['tester']);\n\n expect(matcher.matchAgentType('researcher', agentMatcher)).toBe(true);\n expect(matcher.matchAgentType('tester', agentMatcher)).toBe(false);\n });\n });\n\n describe('Operation Matching', () => {\n it('should match operation types', () => {\n const opMatcher = createOperationMatcher(['store', 'retrieve']);\n\n expect(matcher.matchOperation('store', opMatcher)).toBe(true);\n expect(matcher.matchOperation('retrieve', opMatcher)).toBe(true);\n expect(matcher.matchOperation('delete', opMatcher)).toBe(false);\n });\n\n it('should support wildcard operations', () => {\n const opMatcher = createOperationMatcher(['*']);\n\n expect(matcher.matchOperation('store', opMatcher)).toBe(true);\n expect(matcher.matchOperation('any-operation', opMatcher)).toBe(true);\n });\n\n it('should support operation exclusions', () => {\n const opMatcher = createOperationMatcher(['*'], ['delete']);\n\n expect(matcher.matchOperation('store', opMatcher)).toBe(true);\n expect(matcher.matchOperation('delete', opMatcher)).toBe(false);\n });\n });\n\n describe('Context Matching', () => {\n it('should match context conditions - equality', () => {\n const contextMatcher = createContextMatcher([\n { field: 'sessionId', operator: 'eq', value: 'test-session' },\n ]);\n\n const context = createMockContext({ sessionId: 'test-session' });\n const hook = createMockHook({\n filter: { conditions: contextMatcher.conditions },\n });\n\n expect(hook.filter).toBeDefined();\n });\n\n it('should match nested context values', () => {\n const contextMatcher = createContextMatcher([\n { field: 'metadata.agentType', operator: 'eq', value: 'researcher' },\n ]);\n\n const context = createMockContext({\n metadata: { agentType: 'researcher' },\n });\n\n expect(context.metadata?.agentType).toBe('researcher');\n });\n\n it('should support comparison operators', () => {\n const contextMatcher = createContextMatcher([\n { field: 'timestamp', operator: 'gt', value: Date.now() - 10000 },\n ]);\n\n const context = createMockContext({ timestamp: Date.now() });\n\n expect(context.timestamp).toBeGreaterThan(Date.now() - 10000);\n });\n\n it('should support array contains', () => {\n const contextMatcher = createContextMatcher([\n { field: 'metadata.tags', operator: 'in', value: ['test', 'unit'] },\n ]);\n\n expect(contextMatcher.conditions[0].operator).toBe('in');\n });\n });\n\n describe('Full Hook Matching', () => {\n it('should match hook with file pattern', async () => {\n const hook = createMockHook({\n filter: {\n patterns: [/src\\/.*\\.ts$/],\n },\n });\n\n const context = createMockContext();\n const payload = { file: 'src/hooks/test.ts' };\n\n const result = await matcher.match(hook, context, payload);\n\n expect(result.matched).toBe(true);\n expect(result.cacheHit).toBe(false);\n });\n\n it('should match hook with operation filter', async () => {\n const hook = createMockHook({\n filter: {\n operations: ['store', 'retrieve'],\n },\n });\n\n const context = createMockContext();\n const payload = { operation: 'store' };\n\n const result = await matcher.match(hook, context, payload);\n\n expect(result.matched).toBe(true);\n });\n\n it('should not match hook with mismatched filter', async () => {\n const hook = createMockHook({\n filter: {\n operations: ['store'],\n },\n });\n\n const context = createMockContext();\n const payload = { operation: 'delete' };\n\n const result = await matcher.match(hook, context, payload);\n\n expect(result.matched).toBe(false);\n });\n\n it('should match hooks without filters (match all)', async () => {\n const hook = createMockHook({\n filter: undefined,\n });\n\n const context = createMockContext();\n const payload = { operation: 'any' };\n\n const result = await matcher.match(hook, context, payload);\n\n expect(result.matched).toBe(true);\n expect(result.matchedRules).toContain('*');\n });\n });\n\n describe('Caching', () => {\n it('should cache match results', async () => {\n const hook = createMockHook({\n filter: {\n operations: ['store'],\n },\n });\n\n const context = createMockContext();\n const payload = { operation: 'store' };\n\n // First call\n const result1 = await matcher.match(hook, context, payload);\n expect(result1.cacheHit).toBe(false);\n\n // Second call should hit cache\n const result2 = await matcher.match(hook, context, payload);\n expect(result2.cacheHit).toBe(true);\n expect(result2.matched).toBe(result1.matched);\n });\n\n it('should clear cache', async () => {\n const hook = createMockHook({\n filter: {\n operations: ['store'],\n },\n });\n\n const context = createMockContext();\n const payload = { operation: 'store' };\n\n await matcher.match(hook, context, payload);\n\n const statsBefore = matcher.getCacheStats();\n expect(statsBefore.size).toBeGreaterThan(0);\n\n matcher.clearCache();\n\n const statsAfter = matcher.getCacheStats();\n expect(statsAfter.size).toBe(0);\n });\n\n it('should prune expired entries', async () => {\n const shortTTLMatcher = new HookMatcher({\n cacheEnabled: true,\n cacheTTL: 100, // 100ms\n });\n\n const hook = createMockHook({\n filter: {\n operations: ['store'],\n },\n });\n\n const context = createMockContext();\n const payload = { operation: 'store' };\n\n await shortTTLMatcher.match(hook, context, payload);\n\n // Wait for expiration\n await new Promise(resolve => setTimeout(resolve, 150));\n\n const pruned = shortTTLMatcher.pruneCache();\n expect(pruned).toBeGreaterThan(0);\n });\n });\n\n describe('Performance', () => {\n it('should be fast for simple matches', async () => {\n const hook = createMockHook({\n filter: {\n operations: ['store'],\n },\n });\n\n const context = createMockContext();\n const payload = { operation: 'store' };\n\n const result = await matcher.match(hook, context, payload);\n\n expect(result.executionTime).toBeLessThan(10); // Less than 10ms\n });\n\n it('should be faster with cache', async () => {\n const hook = createMockHook({\n filter: {\n patterns: [/src\\/.*\\.ts$/],\n },\n });\n\n const context = createMockContext();\n const payload = { file: 'src/hooks/test.ts' };\n\n // First call (no cache)\n const result1 = await matcher.match(hook, context, payload);\n const time1 = result1.executionTime;\n\n // Second call (cached)\n const result2 = await matcher.match(hook, context, payload);\n const time2 = result2.executionTime;\n\n expect(time2).toBeLessThanOrEqual(time1);\n expect(result2.cacheHit).toBe(true);\n });\n });\n\n describe('Composite Patterns', () => {\n it('should match AND composite patterns', () => {\n const composite = createCompositePattern('AND', [\n { type: 'glob', pattern: 'src/**/*.ts' },\n { type: 'regex', pattern: /test/ },\n ]);\n\n expect(composite.operator).toBe('AND');\n expect(composite.patterns).toHaveLength(2);\n });\n\n it('should match OR composite patterns', () => {\n const composite = createCompositePattern('OR', [\n { type: 'glob', pattern: 'src/**/*.ts' },\n { type: 'glob', pattern: 'tests/**/*.test.ts' },\n ]);\n\n expect(composite.operator).toBe('OR');\n expect(composite.patterns).toHaveLength(2);\n });\n });\n\n describe('Match Strategies', () => {\n it('should use ALL strategy (all rules must match)', async () => {\n const allMatcher = new HookMatcher({ matchStrategy: 'all' });\n\n const hook = createMockHook({\n filter: {\n operations: ['store'],\n patterns: [/src\\/.*\\.ts$/],\n },\n });\n\n const context = createMockContext();\n\n // Both match\n const payload1 = { operation: 'store', file: 'src/test.ts' };\n const result1 = await allMatcher.match(hook, context, payload1);\n expect(result1.matched).toBe(true);\n\n // Only one matches\n const payload2 = { operation: 'store', file: 'dist/test.js' };\n const result2 = await allMatcher.match(hook, context, payload2);\n expect(result2.matched).toBe(false);\n });\n\n it('should use ANY strategy (at least one rule must match)', async () => {\n const anyMatcher = new HookMatcher({ matchStrategy: 'any' });\n\n const hook = createMockHook({\n filter: {\n operations: ['store'],\n patterns: [/src\\/.*\\.ts$/],\n },\n });\n\n const context = createMockContext();\n\n // Only one matches\n const payload = { operation: 'delete', file: 'src/test.ts' };\n const result = await anyMatcher.match(hook, context, payload);\n\n expect(result.matched).toBe(true);\n });\n });\n});\n\ndescribe('Singleton Instance', () => {\n it('should export singleton instance', () => {\n expect(hookMatcher).toBeInstanceOf(HookMatcher);\n });\n\n it('should maintain state across calls', async () => {\n const hook = createMockHook({\n filter: {\n operations: ['test'],\n },\n });\n\n const context = createMockContext();\n const payload = { operation: 'test' };\n\n await hookMatcher.match(hook, context, payload);\n const stats = hookMatcher.getCacheStats();\n\n expect(stats.size).toBeGreaterThan(0);\n });\n});"],"names":["describe","it","expect","beforeEach","afterEach","HookMatcher","createFilePathMatcher","createAgentTypeMatcher","createOperationMatcher","createContextMatcher","createCompositePattern","hookMatcher","createMockContext","overrides","sessionId","timestamp","Date","now","correlationId","metadata","memory","namespace","provider","cache","Map","neural","modelId","patterns","add","get","undefined","findSimilar","getByType","prune","export","import","training","epoch","loss","accuracy","learningRate","optimizer","checkpoints","performance","metrics","bottlenecks","optimizations","createMockHook","id","type","handler","continue","priority","matcher","cacheEnabled","cacheTTL","matchStrategy","clearCache","fileMatcher","result","matchFilePath","toBe","inverted","agentMatcher","matchAgentType","opMatcher","matchOperation","contextMatcher","field","operator","value","context","hook","filter","conditions","toBeDefined","agentType","toBeGreaterThan","payload","file","match","matched","cacheHit","operations","operation","matchedRules","toContain","result1","result2","statsBefore","getCacheStats","size","statsAfter","shortTTLMatcher","Promise","resolve","setTimeout","pruned","pruneCache","executionTime","toBeLessThan","time1","time2","toBeLessThanOrEqual","composite","pattern","toHaveLength","allMatcher","payload1","payload2","anyMatcher","toBeInstanceOf","stats"],"mappings":"AAMA,SAASA,QAAQ,EAAEC,EAAE,EAAEC,MAAM,EAAEC,UAAU,EAAEC,SAAS,QAAQ,gBAAgB;AAC5E,SACEC,WAAW,EACXC,qBAAqB,EACrBC,sBAAsB,EACtBC,sBAAsB,EACtBC,oBAAoB,EACpBC,sBAAsB,EACtBC,WAAW,QACN,4BAA4B;AASnC,SAASC,kBAAkBC,SAAuC;IAChE,OAAO;QACLC,WAAW;QACXC,WAAWC,KAAKC,GAAG;QACnBC,eAAe;QACfC,UAAU,CAAC;QACXC,QAAQ;YACNC,WAAW;YACXC,UAAU;YACVC,OAAO,IAAIC;QACb;QACAC,QAAQ;YACNC,SAAS;YACTC,UAAU;gBACRC,KAAK,KAAO;gBACZC,KAAK,IAAMC;gBACXC,aAAa,IAAM,EAAE;gBACrBC,WAAW,IAAM,EAAE;gBACnBC,OAAO,KAAO;gBACdC,QAAQ,IAAM,EAAE;gBAChBC,QAAQ,KAAO;YACjB;YACAC,UAAU;gBACRC,OAAO;gBACPC,MAAM;gBACNC,UAAU;gBACVC,cAAc;gBACdC,WAAW;gBACXC,aAAa,EAAE;YACjB;QACF;QACAC,aAAa;YACXC,SAAS,IAAIpB;YACbqB,aAAa,EAAE;YACfC,eAAe,EAAE;QACnB;QACA,GAAGjC,SAAS;IACd;AACF;AAEA,SAASkC,eAAelC,SAAqC;IAC3D,OAAO;QACLmC,IAAI;QACJC,MAAM;QACNC,SAAS,UAAa,CAAA;gBAAEC,UAAU;YAAK,CAAA;QACvCC,UAAU;QACV,GAAGvC,SAAS;IACd;AACF;AAIAb,SAAS,eAAe;IACtB,IAAIqD;IAEJlD,WAAW;QACTkD,UAAU,IAAIhD,YAAY;YACxBiD,cAAc;YACdC,UAAU;YACVC,eAAe;QACjB;IACF;IAEApD,UAAU;QACRiD,QAAQI,UAAU;IACpB;IAEAzD,SAAS,sBAAsB;QAC7BC,GAAG,8BAA8B;YAC/B,MAAMyD,cAAcpD,sBAAsB;gBAAC;aAAc;YACzD,MAAMqD,SAASN,QAAQO,aAAa,CAAC,qBAAqBF,YAAY/B,QAAQ;YAE9EzB,OAAOyD,QAAQE,IAAI,CAAC;QACtB;QAEA5D,GAAG,uCAAuC;YACxC,MAAMyD,cAAcpD,sBAAsB;gBAAC;aAAc;YACzD,MAAMqD,SAASN,QAAQO,aAAa,CAAC,iBAAiBF,YAAY/B,QAAQ;YAE1EzB,OAAOyD,QAAQE,IAAI,CAAC;QACtB;QAEA5D,GAAG,oCAAoC;YACrC,MAAMyD,cAAcpD,sBAAsB;gBAAC;gBAAe;aAAqB;YAE/EJ,OAAOmD,QAAQO,aAAa,CAAC,qBAAqBF,YAAY/B,QAAQ,GAAGkC,IAAI,CAAC;YAC9E3D,OAAOmD,QAAQO,aAAa,CAAC,2BAA2BF,YAAY/B,QAAQ,GAAGkC,IAAI,CAAC;YACpF3D,OAAOmD,QAAQO,aAAa,CAAC,kBAAkBF,YAAY/B,QAAQ,GAAGkC,IAAI,CAAC;QAC7E;QAEA5D,GAAG,oCAAoC;YACrC,MAAMyD,cAAcpD,sBAAsB;gBAAC;aAAU,EAAE;gBAAEwD,UAAU;YAAK;YACxE,MAAMH,SAASN,QAAQO,aAAa,CAAC,eAAeF,YAAY/B,QAAQ;YAExEzB,OAAOyD,QAAQE,IAAI,CAAC;QACtB;QAEA5D,GAAG,4BAA4B;YAC7B,MAAMyD,cAAcpD,sBAAsB;gBAAC;aAAe;YAE1DJ,OAAOmD,QAAQO,aAAa,CAAC,gBAAgBF,YAAY/B,QAAQ,GAAGkC,IAAI,CAAC;YACzE3D,OAAOmD,QAAQO,aAAa,CAAC,gBAAgBF,YAAY/B,QAAQ,GAAGkC,IAAI,CAAC;QAC3E;IACF;IAEA7D,SAAS,uBAAuB;QAC9BC,GAAG,4BAA4B;YAC7B,MAAM8D,eAAexD,uBAAuB;gBAAC;gBAAc;aAAQ;YAEnEL,OAAOmD,QAAQW,cAAc,CAAC,cAAcD,eAAeF,IAAI,CAAC;YAChE3D,OAAOmD,QAAQW,cAAc,CAAC,SAASD,eAAeF,IAAI,CAAC;YAC3D3D,OAAOmD,QAAQW,cAAc,CAAC,UAAUD,eAAeF,IAAI,CAAC;QAC9D;QAEA5D,GAAG,oCAAoC;YACrC,MAAM8D,eAAexD,uBAAuB;gBAAC;aAAI;YAEjDL,OAAOmD,QAAQW,cAAc,CAAC,cAAcD,eAAeF,IAAI,CAAC;YAChE3D,OAAOmD,QAAQW,cAAc,CAAC,YAAYD,eAAeF,IAAI,CAAC;QAChE;QAEA5D,GAAG,6BAA6B;YAC9B,MAAM8D,eAAexD,uBAAuB;gBAAC;aAAI,EAAE;gBAAC;aAAS;YAE7DL,OAAOmD,QAAQW,cAAc,CAAC,cAAcD,eAAeF,IAAI,CAAC;YAChE3D,OAAOmD,QAAQW,cAAc,CAAC,UAAUD,eAAeF,IAAI,CAAC;QAC9D;IACF;IAEA7D,SAAS,sBAAsB;QAC7BC,GAAG,gCAAgC;YACjC,MAAMgE,YAAYzD,uBAAuB;gBAAC;gBAAS;aAAW;YAE9DN,OAAOmD,QAAQa,cAAc,CAAC,SAASD,YAAYJ,IAAI,CAAC;YACxD3D,OAAOmD,QAAQa,cAAc,CAAC,YAAYD,YAAYJ,IAAI,CAAC;YAC3D3D,OAAOmD,QAAQa,cAAc,CAAC,UAAUD,YAAYJ,IAAI,CAAC;QAC3D;QAEA5D,GAAG,sCAAsC;YACvC,MAAMgE,YAAYzD,uBAAuB;gBAAC;aAAI;YAE9CN,OAAOmD,QAAQa,cAAc,CAAC,SAASD,YAAYJ,IAAI,CAAC;YACxD3D,OAAOmD,QAAQa,cAAc,CAAC,iBAAiBD,YAAYJ,IAAI,CAAC;QAClE;QAEA5D,GAAG,uCAAuC;YACxC,MAAMgE,YAAYzD,uBAAuB;gBAAC;aAAI,EAAE;gBAAC;aAAS;YAE1DN,OAAOmD,QAAQa,cAAc,CAAC,SAASD,YAAYJ,IAAI,CAAC;YACxD3D,OAAOmD,QAAQa,cAAc,CAAC,UAAUD,YAAYJ,IAAI,CAAC;QAC3D;IACF;IAEA7D,SAAS,oBAAoB;QAC3BC,GAAG,8CAA8C;YAC/C,MAAMkE,iBAAiB1D,qBAAqB;gBAC1C;oBAAE2D,OAAO;oBAAaC,UAAU;oBAAMC,OAAO;gBAAe;aAC7D;YAED,MAAMC,UAAU3D,kBAAkB;gBAAEE,WAAW;YAAe;YAC9D,MAAM0D,OAAOzB,eAAe;gBAC1B0B,QAAQ;oBAAEC,YAAYP,eAAeO,UAAU;gBAAC;YAClD;YAEAxE,OAAOsE,KAAKC,MAAM,EAAEE,WAAW;QACjC;QAEA1E,GAAG,sCAAsC;YACvC,MAAMkE,iBAAiB1D,qBAAqB;gBAC1C;oBAAE2D,OAAO;oBAAsBC,UAAU;oBAAMC,OAAO;gBAAa;aACpE;YAED,MAAMC,UAAU3D,kBAAkB;gBAChCO,UAAU;oBAAEyD,WAAW;gBAAa;YACtC;YAEA1E,OAAOqE,QAAQpD,QAAQ,EAAEyD,WAAWf,IAAI,CAAC;QAC3C;QAEA5D,GAAG,uCAAuC;YACxC,MAAMkE,iBAAiB1D,qBAAqB;gBAC1C;oBAAE2D,OAAO;oBAAaC,UAAU;oBAAMC,OAAOtD,KAAKC,GAAG,KAAK;gBAAM;aACjE;YAED,MAAMsD,UAAU3D,kBAAkB;gBAAEG,WAAWC,KAAKC,GAAG;YAAG;YAE1Df,OAAOqE,QAAQxD,SAAS,EAAE8D,eAAe,CAAC7D,KAAKC,GAAG,KAAK;QACzD;QAEAhB,GAAG,iCAAiC;YAClC,MAAMkE,iBAAiB1D,qBAAqB;gBAC1C;oBAAE2D,OAAO;oBAAiBC,UAAU;oBAAMC,OAAO;wBAAC;wBAAQ;qBAAO;gBAAC;aACnE;YAEDpE,OAAOiE,eAAeO,UAAU,CAAC,EAAE,CAACL,QAAQ,EAAER,IAAI,CAAC;QACrD;IACF;IAEA7D,SAAS,sBAAsB;QAC7BC,GAAG,uCAAuC;YACxC,MAAMuE,OAAOzB,eAAe;gBAC1B0B,QAAQ;oBACN9C,UAAU;wBAAC;qBAAe;gBAC5B;YACF;YAEA,MAAM4C,UAAU3D;YAChB,MAAMkE,UAAU;gBAAEC,MAAM;YAAoB;YAE5C,MAAMpB,SAAS,MAAMN,QAAQ2B,KAAK,CAACR,MAAMD,SAASO;YAElD5E,OAAOyD,OAAOsB,OAAO,EAAEpB,IAAI,CAAC;YAC5B3D,OAAOyD,OAAOuB,QAAQ,EAAErB,IAAI,CAAC;QAC/B;QAEA5D,GAAG,2CAA2C;YAC5C,MAAMuE,OAAOzB,eAAe;gBAC1B0B,QAAQ;oBACNU,YAAY;wBAAC;wBAAS;qBAAW;gBACnC;YACF;YAEA,MAAMZ,UAAU3D;YAChB,MAAMkE,UAAU;gBAAEM,WAAW;YAAQ;YAErC,MAAMzB,SAAS,MAAMN,QAAQ2B,KAAK,CAACR,MAAMD,SAASO;YAElD5E,OAAOyD,OAAOsB,OAAO,EAAEpB,IAAI,CAAC;QAC9B;QAEA5D,GAAG,gDAAgD;YACjD,MAAMuE,OAAOzB,eAAe;gBAC1B0B,QAAQ;oBACNU,YAAY;wBAAC;qBAAQ;gBACvB;YACF;YAEA,MAAMZ,UAAU3D;YAChB,MAAMkE,UAAU;gBAAEM,WAAW;YAAS;YAEtC,MAAMzB,SAAS,MAAMN,QAAQ2B,KAAK,CAACR,MAAMD,SAASO;YAElD5E,OAAOyD,OAAOsB,OAAO,EAAEpB,IAAI,CAAC;QAC9B;QAEA5D,GAAG,kDAAkD;YACnD,MAAMuE,OAAOzB,eAAe;gBAC1B0B,QAAQ3C;YACV;YAEA,MAAMyC,UAAU3D;YAChB,MAAMkE,UAAU;gBAAEM,WAAW;YAAM;YAEnC,MAAMzB,SAAS,MAAMN,QAAQ2B,KAAK,CAACR,MAAMD,SAASO;YAElD5E,OAAOyD,OAAOsB,OAAO,EAAEpB,IAAI,CAAC;YAC5B3D,OAAOyD,OAAO0B,YAAY,EAAEC,SAAS,CAAC;QACxC;IACF;IAEAtF,SAAS,WAAW;QAClBC,GAAG,8BAA8B;YAC/B,MAAMuE,OAAOzB,eAAe;gBAC1B0B,QAAQ;oBACNU,YAAY;wBAAC;qBAAQ;gBACvB;YACF;YAEA,MAAMZ,UAAU3D;YAChB,MAAMkE,UAAU;gBAAEM,WAAW;YAAQ;YAGrC,MAAMG,UAAU,MAAMlC,QAAQ2B,KAAK,CAACR,MAAMD,SAASO;YACnD5E,OAAOqF,QAAQL,QAAQ,EAAErB,IAAI,CAAC;YAG9B,MAAM2B,UAAU,MAAMnC,QAAQ2B,KAAK,CAACR,MAAMD,SAASO;YACnD5E,OAAOsF,QAAQN,QAAQ,EAAErB,IAAI,CAAC;YAC9B3D,OAAOsF,QAAQP,OAAO,EAAEpB,IAAI,CAAC0B,QAAQN,OAAO;QAC9C;QAEAhF,GAAG,sBAAsB;YACvB,MAAMuE,OAAOzB,eAAe;gBAC1B0B,QAAQ;oBACNU,YAAY;wBAAC;qBAAQ;gBACvB;YACF;YAEA,MAAMZ,UAAU3D;YAChB,MAAMkE,UAAU;gBAAEM,WAAW;YAAQ;YAErC,MAAM/B,QAAQ2B,KAAK,CAACR,MAAMD,SAASO;YAEnC,MAAMW,cAAcpC,QAAQqC,aAAa;YACzCxF,OAAOuF,YAAYE,IAAI,EAAEd,eAAe,CAAC;YAEzCxB,QAAQI,UAAU;YAElB,MAAMmC,aAAavC,QAAQqC,aAAa;YACxCxF,OAAO0F,WAAWD,IAAI,EAAE9B,IAAI,CAAC;QAC/B;QAEA5D,GAAG,gCAAgC;YACjC,MAAM4F,kBAAkB,IAAIxF,YAAY;gBACtCiD,cAAc;gBACdC,UAAU;YACZ;YAEA,MAAMiB,OAAOzB,eAAe;gBAC1B0B,QAAQ;oBACNU,YAAY;wBAAC;qBAAQ;gBACvB;YACF;YAEA,MAAMZ,UAAU3D;YAChB,MAAMkE,UAAU;gBAAEM,WAAW;YAAQ;YAErC,MAAMS,gBAAgBb,KAAK,CAACR,MAAMD,SAASO;YAG3C,MAAM,IAAIgB,QAAQC,CAAAA,UAAWC,WAAWD,SAAS;YAEjD,MAAME,SAASJ,gBAAgBK,UAAU;YACzChG,OAAO+F,QAAQpB,eAAe,CAAC;QACjC;IACF;IAEA7E,SAAS,eAAe;QACtBC,GAAG,qCAAqC;YACtC,MAAMuE,OAAOzB,eAAe;gBAC1B0B,QAAQ;oBACNU,YAAY;wBAAC;qBAAQ;gBACvB;YACF;YAEA,MAAMZ,UAAU3D;YAChB,MAAMkE,UAAU;gBAAEM,WAAW;YAAQ;YAErC,MAAMzB,SAAS,MAAMN,QAAQ2B,KAAK,CAACR,MAAMD,SAASO;YAElD5E,OAAOyD,OAAOwC,aAAa,EAAEC,YAAY,CAAC;QAC5C;QAEAnG,GAAG,+BAA+B;YAChC,MAAMuE,OAAOzB,eAAe;gBAC1B0B,QAAQ;oBACN9C,UAAU;wBAAC;qBAAe;gBAC5B;YACF;YAEA,MAAM4C,UAAU3D;YAChB,MAAMkE,UAAU;gBAAEC,MAAM;YAAoB;YAG5C,MAAMQ,UAAU,MAAMlC,QAAQ2B,KAAK,CAACR,MAAMD,SAASO;YACnD,MAAMuB,QAAQd,QAAQY,aAAa;YAGnC,MAAMX,UAAU,MAAMnC,QAAQ2B,KAAK,CAACR,MAAMD,SAASO;YACnD,MAAMwB,QAAQd,QAAQW,aAAa;YAEnCjG,OAAOoG,OAAOC,mBAAmB,CAACF;YAClCnG,OAAOsF,QAAQN,QAAQ,EAAErB,IAAI,CAAC;QAChC;IACF;IAEA7D,SAAS,sBAAsB;QAC7BC,GAAG,uCAAuC;YACxC,MAAMuG,YAAY9F,uBAAuB,OAAO;gBAC9C;oBAAEuC,MAAM;oBAAQwD,SAAS;gBAAc;gBACvC;oBAAExD,MAAM;oBAASwD,SAAS;gBAAO;aAClC;YAEDvG,OAAOsG,UAAUnC,QAAQ,EAAER,IAAI,CAAC;YAChC3D,OAAOsG,UAAU7E,QAAQ,EAAE+E,YAAY,CAAC;QAC1C;QAEAzG,GAAG,sCAAsC;YACvC,MAAMuG,YAAY9F,uBAAuB,MAAM;gBAC7C;oBAAEuC,MAAM;oBAAQwD,SAAS;gBAAc;gBACvC;oBAAExD,MAAM;oBAAQwD,SAAS;gBAAqB;aAC/C;YAEDvG,OAAOsG,UAAUnC,QAAQ,EAAER,IAAI,CAAC;YAChC3D,OAAOsG,UAAU7E,QAAQ,EAAE+E,YAAY,CAAC;QAC1C;IACF;IAEA1G,SAAS,oBAAoB;QAC3BC,GAAG,kDAAkD;YACnD,MAAM0G,aAAa,IAAItG,YAAY;gBAAEmD,eAAe;YAAM;YAE1D,MAAMgB,OAAOzB,eAAe;gBAC1B0B,QAAQ;oBACNU,YAAY;wBAAC;qBAAQ;oBACrBxD,UAAU;wBAAC;qBAAe;gBAC5B;YACF;YAEA,MAAM4C,UAAU3D;YAGhB,MAAMgG,WAAW;gBAAExB,WAAW;gBAASL,MAAM;YAAc;YAC3D,MAAMQ,UAAU,MAAMoB,WAAW3B,KAAK,CAACR,MAAMD,SAASqC;YACtD1G,OAAOqF,QAAQN,OAAO,EAAEpB,IAAI,CAAC;YAG7B,MAAMgD,WAAW;gBAAEzB,WAAW;gBAASL,MAAM;YAAe;YAC5D,MAAMS,UAAU,MAAMmB,WAAW3B,KAAK,CAACR,MAAMD,SAASsC;YACtD3G,OAAOsF,QAAQP,OAAO,EAAEpB,IAAI,CAAC;QAC/B;QAEA5D,GAAG,0DAA0D;YAC3D,MAAM6G,aAAa,IAAIzG,YAAY;gBAAEmD,eAAe;YAAM;YAE1D,MAAMgB,OAAOzB,eAAe;gBAC1B0B,QAAQ;oBACNU,YAAY;wBAAC;qBAAQ;oBACrBxD,UAAU;wBAAC;qBAAe;gBAC5B;YACF;YAEA,MAAM4C,UAAU3D;YAGhB,MAAMkE,UAAU;gBAAEM,WAAW;gBAAUL,MAAM;YAAc;YAC3D,MAAMpB,SAAS,MAAMmD,WAAW9B,KAAK,CAACR,MAAMD,SAASO;YAErD5E,OAAOyD,OAAOsB,OAAO,EAAEpB,IAAI,CAAC;QAC9B;IACF;AACF;AAEA7D,SAAS,sBAAsB;IAC7BC,GAAG,oCAAoC;QACrCC,OAAOS,aAAaoG,cAAc,CAAC1G;IACrC;IAEAJ,GAAG,sCAAsC;QACvC,MAAMuE,OAAOzB,eAAe;YAC1B0B,QAAQ;gBACNU,YAAY;oBAAC;iBAAO;YACtB;QACF;QAEA,MAAMZ,UAAU3D;QAChB,MAAMkE,UAAU;YAAEM,WAAW;QAAO;QAEpC,MAAMzE,YAAYqE,KAAK,CAACR,MAAMD,SAASO;QACvC,MAAMkC,QAAQrG,YAAY+E,aAAa;QAEvCxF,OAAO8G,MAAMrB,IAAI,EAAEd,eAAe,CAAC;IACrC;AACF"}
1
+ {"version":3,"sources":["../../../src/__tests__/hook-matchers.test.ts"],"sourcesContent":["/**\n * Hook Matchers Tests\n *\n * Comprehensive test suite for hook pattern matching system\n */\n\n/* eslint-disable */\n\nimport { describe, it, expect, beforeEach, afterEach } from '@jest/globals';\nimport {\n HookMatcher,\n createFilePathMatcher,\n createAgentTypeMatcher,\n createOperationMatcher,\n createContextMatcher,\n createCompositePattern,\n hookMatcher,\n} from '../hooks/hook-matchers.js';\nimport type {\n HookRegistration,\n AgenticHookContext,\n HookFilter,\n} from '../services/agentic-flow-hooks/types.js';\n\n// ===== Test Helpers =====\n\nfunction createMockContext(overrides?: Partial<AgenticHookContext>): AgenticHookContext {\n return {\n sessionId: 'test-session',\n timestamp: Date.now(),\n correlationId: 'test-correlation',\n metadata: {},\n memory: {\n namespace: 'test',\n provider: 'memory',\n cache: new Map(),\n },\n neural: {\n modelId: 'test-model',\n patterns: {\n add: () => {},\n get: () => undefined,\n findSimilar: () => [],\n getByType: () => [],\n prune: () => {},\n export: () => [],\n import: () => {},\n },\n training: {\n epoch: 0,\n loss: 0,\n accuracy: 0,\n learningRate: 0.001,\n optimizer: 'adam',\n checkpoints: [],\n },\n },\n performance: {\n metrics: new Map(),\n bottlenecks: [],\n optimizations: [],\n },\n ...overrides,\n };\n}\n\nfunction createMockHook(overrides?: Partial<HookRegistration>): HookRegistration {\n return {\n id: 'test-hook',\n type: 'workflow-step',\n handler: async () => ({ continue: true }),\n priority: 10,\n ...overrides,\n };\n}\n\n// ===== Tests =====\n\ndescribe('HookMatcher', () => {\n let matcher: HookMatcher;\n\n beforeEach(() => {\n matcher = new HookMatcher({\n cacheEnabled: true,\n cacheTTL: 60000,\n matchStrategy: 'all',\n });\n });\n\n afterEach(() => {\n matcher.clearCache();\n });\n\n describe('File Path Matching', () => {\n it('should match glob patterns', () => {\n const fileMatcher = createFilePathMatcher(['src/**/*.ts']);\n const result = matcher.matchFilePath('src/hooks/test.ts', fileMatcher.patterns);\n\n expect(result).toBe(true);\n });\n\n it('should not match non-matching paths', () => {\n const fileMatcher = createFilePathMatcher(['src/**/*.ts']);\n const result = matcher.matchFilePath('dist/build.js', fileMatcher.patterns);\n\n expect(result).toBe(false);\n });\n\n it('should support multiple patterns', () => {\n const fileMatcher = createFilePathMatcher(['src/**/*.ts', 'tests/**/*.test.ts']);\n\n expect(matcher.matchFilePath('src/hooks/test.ts', fileMatcher.patterns)).toBe(true);\n expect(matcher.matchFilePath('tests/unit/test.test.ts', fileMatcher.patterns)).toBe(true);\n expect(matcher.matchFilePath('docs/readme.md', fileMatcher.patterns)).toBe(false);\n });\n\n it('should support inverted patterns', () => {\n const fileMatcher = createFilePathMatcher(['**/*.ts'], { inverted: true });\n const result = matcher.matchFilePath('src/test.ts', fileMatcher.patterns);\n\n expect(result).toBe(true);\n });\n\n it('should match exact paths', () => {\n const fileMatcher = createFilePathMatcher(['src/index.ts']);\n\n expect(matcher.matchFilePath('src/index.ts', fileMatcher.patterns)).toBe(true);\n expect(matcher.matchFilePath('src/other.ts', fileMatcher.patterns)).toBe(false);\n });\n });\n\n describe('Agent Type Matching', () => {\n it('should match agent types', () => {\n const agentMatcher = createAgentTypeMatcher(['researcher', 'coder']);\n\n expect(matcher.matchAgentType('researcher', agentMatcher)).toBe(true);\n expect(matcher.matchAgentType('coder', agentMatcher)).toBe(true);\n expect(matcher.matchAgentType('tester', agentMatcher)).toBe(false);\n });\n\n it('should support wildcard matching', () => {\n const agentMatcher = createAgentTypeMatcher(['*']);\n\n expect(matcher.matchAgentType('researcher', agentMatcher)).toBe(true);\n expect(matcher.matchAgentType('any-type', agentMatcher)).toBe(true);\n });\n\n it('should support exclusions', () => {\n const agentMatcher = createAgentTypeMatcher(['*'], ['tester']);\n\n expect(matcher.matchAgentType('researcher', agentMatcher)).toBe(true);\n expect(matcher.matchAgentType('tester', agentMatcher)).toBe(false);\n });\n });\n\n describe('Operation Matching', () => {\n it('should match operation types', () => {\n const opMatcher = createOperationMatcher(['store', 'retrieve']);\n\n expect(matcher.matchOperation('store', opMatcher)).toBe(true);\n expect(matcher.matchOperation('retrieve', opMatcher)).toBe(true);\n expect(matcher.matchOperation('delete', opMatcher)).toBe(false);\n });\n\n it('should support wildcard operations', () => {\n const opMatcher = createOperationMatcher(['*']);\n\n expect(matcher.matchOperation('store', opMatcher)).toBe(true);\n expect(matcher.matchOperation('any-operation', opMatcher)).toBe(true);\n });\n\n it('should support operation exclusions', () => {\n const opMatcher = createOperationMatcher(['*'], ['delete']);\n\n expect(matcher.matchOperation('store', opMatcher)).toBe(true);\n expect(matcher.matchOperation('delete', opMatcher)).toBe(false);\n });\n });\n\n describe('Context Matching', () => {\n it('should match context conditions - equality', () => {\n const contextMatcher = createContextMatcher([\n { field: 'sessionId', operator: 'eq', value: 'test-session' },\n ]);\n\n const context = createMockContext({ sessionId: 'test-session' });\n const hook = createMockHook({\n filter: { conditions: contextMatcher.conditions },\n });\n\n expect(hook.filter).toBeDefined();\n });\n\n it('should match nested context values', () => {\n const contextMatcher = createContextMatcher([\n { field: 'metadata.agentType', operator: 'eq', value: 'researcher' },\n ]);\n\n const context = createMockContext({\n metadata: { agentType: 'researcher' },\n });\n\n expect(context.metadata?.agentType).toBe('researcher');\n });\n\n it('should support comparison operators', () => {\n const contextMatcher = createContextMatcher([\n { field: 'timestamp', operator: 'gt', value: Date.now() - 10000 },\n ]);\n\n const context = createMockContext({ timestamp: Date.now() });\n\n expect(context.timestamp).toBeGreaterThan(Date.now() - 10000);\n });\n\n it('should support array contains', () => {\n const contextMatcher = createContextMatcher([\n { field: 'metadata.tags', operator: 'in', value: ['test', 'unit'] },\n ]);\n\n expect(contextMatcher.conditions[0].operator).toBe('in');\n });\n });\n\n describe('Full Hook Matching', () => {\n it('should match hook with file pattern', async () => {\n const hook = createMockHook({\n filter: {\n patterns: [/src\\/.*\\.ts$/],\n },\n });\n\n const context = createMockContext();\n const payload = { file: 'src/hooks/test.ts' };\n\n const result = await matcher.match(hook, context, payload);\n\n expect(result.matched).toBe(true);\n expect(result.cacheHit).toBe(false);\n });\n\n it('should match hook with operation filter', async () => {\n const hook = createMockHook({\n filter: {\n operations: ['store', 'retrieve'],\n },\n });\n\n const context = createMockContext();\n const payload = { operation: 'store' };\n\n const result = await matcher.match(hook, context, payload);\n\n expect(result.matched).toBe(true);\n });\n\n it('should not match hook with mismatched filter', async () => {\n const hook = createMockHook({\n filter: {\n operations: ['store'],\n },\n });\n\n const context = createMockContext();\n const payload = { operation: 'delete' };\n\n const result = await matcher.match(hook, context, payload);\n\n expect(result.matched).toBe(false);\n });\n\n it('should match hooks without filters (match all)', async () => {\n const hook = createMockHook({\n filter: undefined,\n });\n\n const context = createMockContext();\n const payload = { operation: 'any' };\n\n const result = await matcher.match(hook, context, payload);\n\n expect(result.matched).toBe(true);\n expect(result.matchedRules).toContain('*');\n });\n });\n\n describe('Caching', () => {\n it('should cache match results', async () => {\n const hook = createMockHook({\n filter: {\n operations: ['store'],\n },\n });\n\n const context = createMockContext();\n const payload = { operation: 'store' };\n\n // First call\n const result1 = await matcher.match(hook, context, payload);\n expect(result1.cacheHit).toBe(false);\n\n // Second call should hit cache\n const result2 = await matcher.match(hook, context, payload);\n expect(result2.cacheHit).toBe(true);\n expect(result2.matched).toBe(result1.matched);\n });\n\n it('should clear cache', async () => {\n const hook = createMockHook({\n filter: {\n operations: ['store'],\n },\n });\n\n const context = createMockContext();\n const payload = { operation: 'store' };\n\n await matcher.match(hook, context, payload);\n\n const statsBefore = matcher.getCacheStats();\n expect(statsBefore.size).toBeGreaterThan(0);\n\n matcher.clearCache();\n\n const statsAfter = matcher.getCacheStats();\n expect(statsAfter.size).toBe(0);\n });\n\n it('should prune expired entries', async () => {\n const shortTTLMatcher = new HookMatcher({\n cacheEnabled: true,\n cacheTTL: 100, // 100ms\n });\n\n const hook = createMockHook({\n filter: {\n operations: ['store'],\n },\n });\n\n const context = createMockContext();\n const payload = { operation: 'store' };\n\n await shortTTLMatcher.match(hook, context, payload);\n\n // Wait for expiration\n await new Promise(resolve => setTimeout(resolve, 150));\n\n const pruned = shortTTLMatcher.pruneCache();\n expect(pruned).toBeGreaterThan(0);\n });\n });\n\n describe('Performance', () => {\n it('should be fast for simple matches', async () => {\n const hook = createMockHook({\n filter: {\n operations: ['store'],\n },\n });\n\n const context = createMockContext();\n const payload = { operation: 'store' };\n\n const result = await matcher.match(hook, context, payload);\n\n expect(result.executionTime).toBeLessThan(10); // Less than 10ms\n });\n\n it('should be faster with cache', async () => {\n const hook = createMockHook({\n filter: {\n patterns: [/src\\/.*\\.ts$/],\n },\n });\n\n const context = createMockContext();\n const payload = { file: 'src/hooks/test.ts' };\n\n // First call (no cache)\n const result1 = await matcher.match(hook, context, payload);\n const time1 = result1.executionTime;\n\n // Second call (cached)\n const result2 = await matcher.match(hook, context, payload);\n const time2 = result2.executionTime;\n\n expect(time2).toBeLessThanOrEqual(time1);\n expect(result2.cacheHit).toBe(true);\n });\n });\n\n describe('Composite Patterns', () => {\n it('should match AND composite patterns', () => {\n const composite = createCompositePattern('AND', [\n { type: 'glob', pattern: 'src/**/*.ts' },\n { type: 'regex', pattern: /test/ },\n ]);\n\n expect(composite.operator).toBe('AND');\n expect(composite.patterns).toHaveLength(2);\n });\n\n it('should match OR composite patterns', () => {\n const composite = createCompositePattern('OR', [\n { type: 'glob', pattern: 'src/**/*.ts' },\n { type: 'glob', pattern: 'tests/**/*.test.ts' },\n ]);\n\n expect(composite.operator).toBe('OR');\n expect(composite.patterns).toHaveLength(2);\n });\n });\n\n describe('Match Strategies', () => {\n it('should use ALL strategy (all rules must match)', async () => {\n const allMatcher = new HookMatcher({ matchStrategy: 'all' });\n\n const hook = createMockHook({\n filter: {\n operations: ['store'],\n patterns: [/src\\/.*\\.ts$/],\n },\n });\n\n const context = createMockContext();\n\n // Both match\n const payload1 = { operation: 'store', file: 'src/test.ts' };\n const result1 = await allMatcher.match(hook, context, payload1);\n expect(result1.matched).toBe(true);\n\n // Only one matches\n const payload2 = { operation: 'store', file: 'dist/test.js' };\n const result2 = await allMatcher.match(hook, context, payload2);\n expect(result2.matched).toBe(false);\n });\n\n it('should use ANY strategy (at least one rule must match)', async () => {\n const anyMatcher = new HookMatcher({ matchStrategy: 'any' });\n\n const hook = createMockHook({\n filter: {\n operations: ['store'],\n patterns: [/src\\/.*\\.ts$/],\n },\n });\n\n const context = createMockContext();\n\n // Only one matches\n const payload = { operation: 'delete', file: 'src/test.ts' };\n const result = await anyMatcher.match(hook, context, payload);\n\n expect(result.matched).toBe(true);\n });\n });\n});\n\ndescribe('Singleton Instance', () => {\n it('should export singleton instance', () => {\n expect(hookMatcher).toBeInstanceOf(HookMatcher);\n });\n\n it('should maintain state across calls', async () => {\n const hook = createMockHook({\n filter: {\n operations: ['test'],\n },\n });\n\n const context = createMockContext();\n const payload = { operation: 'test' };\n\n await hookMatcher.match(hook, context, payload);\n const stats = hookMatcher.getCacheStats();\n\n expect(stats.size).toBeGreaterThan(0);\n });\n});"],"names":["describe","it","expect","beforeEach","afterEach","HookMatcher","createFilePathMatcher","createAgentTypeMatcher","createOperationMatcher","createContextMatcher","createCompositePattern","hookMatcher","createMockContext","overrides","sessionId","timestamp","Date","now","correlationId","metadata","memory","namespace","provider","cache","Map","neural","modelId","patterns","add","get","undefined","findSimilar","getByType","prune","export","import","training","epoch","loss","accuracy","learningRate","optimizer","checkpoints","performance","metrics","bottlenecks","optimizations","createMockHook","id","type","handler","continue","priority","matcher","cacheEnabled","cacheTTL","matchStrategy","clearCache","fileMatcher","result","matchFilePath","toBe","inverted","agentMatcher","matchAgentType","opMatcher","matchOperation","contextMatcher","field","operator","value","context","hook","filter","conditions","toBeDefined","agentType","toBeGreaterThan","payload","file","match","matched","cacheHit","operations","operation","matchedRules","toContain","result1","result2","statsBefore","getCacheStats","size","statsAfter","shortTTLMatcher","Promise","resolve","setTimeout","pruned","pruneCache","executionTime","toBeLessThan","time1","time2","toBeLessThanOrEqual","composite","pattern","toHaveLength","allMatcher","payload1","payload2","anyMatcher","toBeInstanceOf","stats"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/agents/agent-registry.ts"],"sourcesContent":["/**\n * Agent Registry with Memory Integration\n * Provides persistent storage and coordination for agent management\n */\n\nimport type { DistributedMemorySystem } from '../memory/distributed-memory.js';\nimport type { AgentState, AgentId, AgentType, AgentStatus } from '../swarm/types.js';\nimport { EventEmitter } from 'node:events';\n\nexport interface AgentRegistryEntry {\n agent: AgentState;\n createdAt: Date;\n lastUpdated: Date;\n tags: string[];\n metadata: Record<string, any>;\n}\n\nexport interface AgentQuery {\n type?: AgentType;\n status?: AgentStatus;\n tags?: string[];\n healthThreshold?: number;\n namePattern?: string;\n createdAfter?: Date;\n lastActiveAfter?: Date;\n}\n\nexport interface AgentStatistics {\n totalAgents: number;\n byType: Record<AgentType, number>;\n byStatus: Record<AgentStatus, number>;\n averageHealth: number;\n activeAgents: number;\n totalUptime: number;\n tasksCompleted: number;\n successRate: number;\n}\n\n/**\n * Centralized agent registry with persistent storage\n */\nexport class AgentRegistry extends EventEmitter {\n private memory: DistributedMemorySystem;\n private namespace: string;\n private cache = new Map<string, AgentRegistryEntry>();\n private cacheExpiry = 60000; // 1 minute\n private lastCacheUpdate = 0;\n\n constructor(memory: DistributedMemorySystem, namespace: string = 'agents') {\n super();\n this.memory = memory;\n this.namespace = namespace;\n }\n\n async initialize(): Promise<void> {\n await this.loadFromMemory();\n this.emit('registry:initialized');\n }\n\n /**\n * Register a new agent in the registry\n */\n async registerAgent(agent: AgentState, tags: string[] = []): Promise<void> {\n const entry: AgentRegistryEntry = {\n agent,\n createdAt: new Date(),\n lastUpdated: new Date(),\n tags: [...tags, agent.type, agent.status],\n metadata: {\n registeredBy: 'agent-manager',\n version: '1.0.0',\n },\n };\n\n // Store in memory\n const key = this.getAgentKey(agent.id.id);\n await this.memory.store(key, entry, {\n type: 'agent-registry',\n tags: entry.tags,\n partition: this.namespace,\n });\n\n // Update cache\n this.cache.set(agent.id.id, entry);\n\n this.emit('agent:registered', { agentId: agent.id.id, agent });\n }\n\n /**\n * Update agent information in registry\n */\n async updateAgent(agentId: string, updates: Partial<AgentState>): Promise<void> {\n const entry = await this.getAgentEntry(agentId);\n if (!entry) {\n throw new Error(`Agent ${agentId} not found in registry`);\n }\n\n // Merge updates\n entry.agent = { ...entry.agent, ...updates };\n entry.lastUpdated = new Date();\n entry.tags = [\n entry.agent.type,\n entry.agent.status,\n ...entry.tags.filter((t) => t !== entry.agent.type && t !== entry.agent.status),\n ];\n\n // Store updated entry\n const key = this.getAgentKey(agentId);\n await this.memory.store(key, entry, {\n type: 'agent-registry',\n tags: entry.tags,\n partition: this.namespace,\n });\n\n // Update cache\n this.cache.set(agentId, entry);\n\n this.emit('agent:updated', { agentId, agent: entry.agent });\n }\n\n /**\n * Remove agent from registry\n */\n async unregisterAgent(agentId: string, preserveHistory: boolean = true): Promise<void> {\n const entry = await this.getAgentEntry(agentId);\n if (!entry) {\n return; // Already removed\n }\n\n if (preserveHistory) {\n // Move to archived partition\n const archiveKey = this.getArchiveKey(agentId);\n await this.memory.store(\n archiveKey,\n {\n ...entry,\n archivedAt: new Date(),\n reason: 'agent_removed',\n },\n {\n type: 'agent-archive',\n tags: [...entry.tags, 'archived'],\n partition: 'archived',\n },\n );\n }\n\n // Remove from active registry\n const key = this.getAgentKey(agentId);\n await this.memory.deleteEntry(key);\n\n // Remove from cache\n this.cache.delete(agentId);\n\n this.emit('agent:unregistered', { agentId, preserved: preserveHistory });\n }\n\n /**\n * Get agent by ID\n */\n async getAgent(agentId: string): Promise<AgentState | null> {\n const entry = await this.getAgentEntry(agentId);\n return entry?.agent || null;\n }\n\n /**\n * Get agent entry with metadata\n */\n async getAgentEntry(agentId: string): Promise<AgentRegistryEntry | null> {\n // Check cache first\n if (this.cache.has(agentId) && this.isCacheValid()) {\n return this.cache.get(agentId) || null;\n }\n\n // Load from memory\n const key = this.getAgentKey(agentId);\n const memoryEntry = await this.memory.retrieve(key);\n\n if (memoryEntry && memoryEntry.value) {\n // Convert MemoryEntry to AgentRegistryEntry\n const registryEntry: AgentRegistryEntry = memoryEntry.value as AgentRegistryEntry;\n this.cache.set(agentId, registryEntry);\n return registryEntry;\n }\n\n return null;\n }\n\n /**\n * Query agents by criteria\n */\n async queryAgents(query: AgentQuery = {}): Promise<AgentState[]> {\n await this.refreshCacheIfNeeded();\n\n let agents = Array.from(this.cache.values()).map((entry) => entry.agent);\n\n // Apply filters\n if (query.type) {\n agents = agents.filter((agent) => agent.type === query.type);\n }\n\n if (query.status) {\n agents = agents.filter((agent) => agent.status === query.status);\n }\n\n if (query.healthThreshold !== undefined) {\n agents = agents.filter((agent) => agent.health >= query.healthThreshold!);\n }\n\n if (query.namePattern) {\n const pattern = new RegExp(query.namePattern, 'i');\n agents = agents.filter((agent) => pattern.test(agent.name));\n }\n\n if (query.tags && query.tags.length > 0) {\n const entries = Array.from(this.cache.values());\n const matchingEntries = entries.filter((entry) =>\n query.tags!.some((tag) => entry.tags.includes(tag)),\n );\n agents = matchingEntries.map((entry) => entry.agent);\n }\n\n if (query.createdAfter) {\n const entries = Array.from(this.cache.values());\n const matchingEntries = entries.filter((entry) => entry.createdAt >= query.createdAfter!);\n agents = matchingEntries.map((entry) => entry.agent);\n }\n\n if (query.lastActiveAfter) {\n agents = agents.filter((agent) => agent.metrics.lastActivity >= query.lastActiveAfter!);\n }\n\n return agents;\n }\n\n /**\n * Get all registered agents\n */\n async getAllAgents(): Promise<AgentState[]> {\n return this.queryAgents();\n }\n\n /**\n * Get agents by type\n */\n async getAgentsByType(type: AgentType): Promise<AgentState[]> {\n return this.queryAgents({ type });\n }\n\n /**\n * Get agents by status\n */\n async getAgentsByStatus(status: AgentStatus): Promise<AgentState[]> {\n return this.queryAgents({ status });\n }\n\n /**\n * Get healthy agents\n */\n async getHealthyAgents(threshold: number = 0.7): Promise<AgentState[]> {\n return this.queryAgents({ healthThreshold: threshold });\n }\n\n /**\n * Get registry statistics\n */\n async getStatistics(): Promise<AgentStatistics> {\n const agents = await this.getAllAgents();\n\n const stats: AgentStatistics = {\n totalAgents: agents.length,\n byType: {} as Record<AgentType, number>,\n byStatus: {} as Record<AgentStatus, number>,\n averageHealth: 0,\n activeAgents: 0,\n totalUptime: 0,\n tasksCompleted: 0,\n successRate: 0,\n };\n\n if (agents.length === 0) {\n return stats;\n }\n\n // Count by type and status\n for (const agent of agents) {\n stats.byType[agent.type] = (stats.byType[agent.type] || 0) + 1;\n stats.byStatus[agent.status] = (stats.byStatus[agent.status] || 0) + 1;\n\n if (agent.status === 'idle' || agent.status === 'busy') {\n stats.activeAgents++;\n }\n\n stats.totalUptime += agent.metrics.totalUptime;\n stats.tasksCompleted += agent.metrics.tasksCompleted;\n }\n\n // Calculate averages\n stats.averageHealth = agents.reduce((sum, agent) => sum + agent.health, 0) / agents.length;\n\n const totalTasks = agents.reduce(\n (sum, agent) => sum + agent.metrics.tasksCompleted + agent.metrics.tasksFailed,\n 0,\n );\n\n if (totalTasks > 0) {\n stats.successRate = stats.tasksCompleted / totalTasks;\n }\n\n return stats;\n }\n\n /**\n * Search agents by capabilities\n */\n async searchByCapabilities(requiredCapabilities: string[]): Promise<AgentState[]> {\n const agents = await this.getAllAgents();\n\n return agents.filter((agent) => {\n const capabilities = [\n ...agent.capabilities.languages,\n ...agent.capabilities.frameworks,\n ...agent.capabilities.domains,\n ...agent.capabilities.tools,\n ];\n\n return requiredCapabilities.every((required) =>\n capabilities.some((cap) => cap.toLowerCase().includes(required.toLowerCase())),\n );\n });\n }\n\n /**\n * Find best agent for task\n */\n async findBestAgent(\n taskType: string,\n requiredCapabilities: string[] = [],\n preferredAgent?: string,\n ): Promise<AgentState | null> {\n let candidates = await this.getHealthyAgents(0.5);\n\n // Filter by capabilities if specified\n if (requiredCapabilities.length > 0) {\n candidates = await this.searchByCapabilities(requiredCapabilities);\n }\n\n // Prefer specific agent if available and healthy\n if (preferredAgent) {\n const preferred = candidates.find(\n (agent) => agent.id.id === preferredAgent || agent.name === preferredAgent,\n );\n if (preferred) return preferred;\n }\n\n // Filter by availability\n candidates = candidates.filter(\n (agent) =>\n agent.status === 'idle' &&\n agent.workload < 0.8 &&\n agent.capabilities.maxConcurrentTasks > 0,\n );\n\n if (candidates.length === 0) return null;\n\n // Score candidates\n const scored = candidates.map((agent) => ({\n agent,\n score: this.calculateAgentScore(agent, taskType, requiredCapabilities),\n }));\n\n // Sort by score (highest first)\n scored.sort((a, b) => b.score - a.score);\n\n return scored[0]?.agent || null;\n }\n\n /**\n * Store agent coordination data\n */\n async storeCoordinationData(agentId: string, data: any): Promise<void> {\n const key = `coordination:${agentId}`;\n await this.memory.store(\n key,\n {\n agentId,\n data,\n timestamp: new Date(),\n },\n {\n type: 'agent-coordination',\n tags: ['coordination', agentId],\n partition: this.namespace,\n },\n );\n }\n\n /**\n * Retrieve agent coordination data\n */\n async getCoordinationData(agentId: string): Promise<any> {\n const key = `coordination:${agentId}`;\n const result = await this.memory.retrieve(key);\n return result?.value || null;\n }\n\n // === PRIVATE METHODS ===\n\n private async loadFromMemory(): Promise<void> {\n try {\n const entries = await this.memory.query({\n type: 'state' as const,\n namespace: this.namespace,\n });\n\n this.cache.clear();\n for (const entry of entries) {\n if (entry.value && entry.value.agent) {\n this.cache.set(entry.value.agent.id.id, entry.value);\n }\n }\n\n this.lastCacheUpdate = Date.now();\n } catch (error) {\n console.warn('Failed to load agent registry from memory:', error);\n }\n }\n\n private async refreshCacheIfNeeded(): Promise<void> {\n if (!this.isCacheValid()) {\n await this.loadFromMemory();\n }\n }\n\n private isCacheValid(): boolean {\n return Date.now() - this.lastCacheUpdate < this.cacheExpiry;\n }\n\n private getAgentKey(agentId: string): string {\n return `agent:${agentId}`;\n }\n\n private getArchiveKey(agentId: string): string {\n return `archived:${agentId}:${Date.now()}`;\n }\n\n private calculateAgentScore(\n agent: AgentState,\n taskType: string,\n requiredCapabilities: string[],\n ): number {\n let score = 0;\n\n // Base health score (0-40 points)\n score += agent.health * 40;\n\n // Success rate score (0-30 points)\n score += agent.metrics.successRate * 30;\n\n // Availability score (0-20 points)\n const availability = 1 - agent.workload;\n score += availability * 20;\n\n // Capability match score (0-10 points)\n if (requiredCapabilities.length > 0) {\n const agentCaps = [\n ...agent.capabilities.languages,\n ...agent.capabilities.frameworks,\n ...agent.capabilities.domains,\n ...agent.capabilities.tools,\n ];\n\n const matches = requiredCapabilities.filter((required) =>\n agentCaps.some((cap) => cap.toLowerCase().includes(required.toLowerCase())),\n );\n\n score += (matches.length / requiredCapabilities.length) * 10;\n }\n\n return score;\n }\n}\n"],"names":["EventEmitter","AgentRegistry","memory","namespace","cache","Map","cacheExpiry","lastCacheUpdate","initialize","loadFromMemory","emit","registerAgent","agent","tags","entry","createdAt","Date","lastUpdated","type","status","metadata","registeredBy","version","key","getAgentKey","id","store","partition","set","agentId","updateAgent","updates","getAgentEntry","Error","filter","t","unregisterAgent","preserveHistory","archiveKey","getArchiveKey","archivedAt","reason","deleteEntry","delete","preserved","getAgent","has","isCacheValid","get","memoryEntry","retrieve","value","registryEntry","queryAgents","query","refreshCacheIfNeeded","agents","Array","from","values","map","healthThreshold","undefined","health","namePattern","pattern","RegExp","test","name","length","entries","matchingEntries","some","tag","includes","createdAfter","lastActiveAfter","metrics","lastActivity","getAllAgents","getAgentsByType","getAgentsByStatus","getHealthyAgents","threshold","getStatistics","stats","totalAgents","byType","byStatus","averageHealth","activeAgents","totalUptime","tasksCompleted","successRate","reduce","sum","totalTasks","tasksFailed","searchByCapabilities","requiredCapabilities","capabilities","languages","frameworks","domains","tools","every","required","cap","toLowerCase","findBestAgent","taskType","preferredAgent","candidates","preferred","find","workload","maxConcurrentTasks","scored","score","calculateAgentScore","sort","a","b","storeCoordinationData","data","timestamp","getCoordinationData","result","clear","now","error","console","warn","availability","agentCaps","matches"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../src/agents/agent-registry.ts"],"sourcesContent":["/**\n * Agent Registry with Memory Integration\n * Provides persistent storage and coordination for agent management\n */\n\nimport type { DistributedMemorySystem } from '../memory/distributed-memory.js';\nimport type { AgentState, AgentType, AgentStatus } from '../swarm/types.js';\nimport { EventEmitter } from 'node:events';\n\nexport interface AgentRegistryEntry {\n agent: AgentState;\n createdAt: Date;\n lastUpdated: Date;\n tags: string[];\n metadata: Record<string, any>;\n}\n\nexport interface AgentQuery {\n type?: AgentType;\n status?: AgentStatus;\n tags?: string[];\n healthThreshold?: number;\n namePattern?: string;\n createdAfter?: Date;\n lastActiveAfter?: Date;\n}\n\nexport interface AgentStatistics {\n totalAgents: number;\n byType: Record<AgentType, number>;\n byStatus: Record<AgentStatus, number>;\n averageHealth: number;\n activeAgents: number;\n totalUptime: number;\n tasksCompleted: number;\n successRate: number;\n}\n\n/**\n * Centralized agent registry with persistent storage\n */\nexport class AgentRegistry extends EventEmitter {\n private memory: DistributedMemorySystem;\n private namespace: string;\n private cache = new Map<string, AgentRegistryEntry>();\n private cacheExpiry = 60000; // 1 minute\n private lastCacheUpdate = 0;\n\n constructor(memory: DistributedMemorySystem, namespace: string = 'agents') {\n super();\n this.memory = memory;\n this.namespace = namespace;\n }\n\n async initialize(): Promise<void> {\n await this.loadFromMemory();\n this.emit('registry:initialized');\n }\n\n /**\n * Register a new agent in the registry\n */\n async registerAgent(agent: AgentState, tags: string[] = []): Promise<void> {\n const entry: AgentRegistryEntry = {\n agent,\n createdAt: new Date(),\n lastUpdated: new Date(),\n tags: [...tags, agent.type, agent.status],\n metadata: {\n registeredBy: 'agent-manager',\n version: '1.0.0',\n },\n };\n\n // Store in memory\n const key = this.getAgentKey(agent.id.id);\n await this.memory.store(key, entry, {\n type: 'agent-registry',\n tags: entry.tags,\n partition: this.namespace,\n });\n\n // Update cache\n this.cache.set(agent.id.id, entry);\n\n this.emit('agent:registered', { agentId: agent.id.id, agent });\n }\n\n /**\n * Update agent information in registry\n */\n async updateAgent(agentId: string, updates: Partial<AgentState>): Promise<void> {\n const entry = await this.getAgentEntry(agentId);\n if (!entry) {\n throw new Error(`Agent ${agentId} not found in registry`);\n }\n\n // Merge updates\n entry.agent = { ...entry.agent, ...updates };\n entry.lastUpdated = new Date();\n entry.tags = [\n entry.agent.type,\n entry.agent.status,\n ...entry.tags.filter((t) => t !== entry.agent.type && t !== entry.agent.status),\n ];\n\n // Store updated entry\n const key = this.getAgentKey(agentId);\n await this.memory.store(key, entry, {\n type: 'agent-registry',\n tags: entry.tags,\n partition: this.namespace,\n });\n\n // Update cache\n this.cache.set(agentId, entry);\n\n this.emit('agent:updated', { agentId, agent: entry.agent });\n }\n\n /**\n * Remove agent from registry\n */\n async unregisterAgent(agentId: string, preserveHistory: boolean = true): Promise<void> {\n const entry = await this.getAgentEntry(agentId);\n if (!entry) {\n return; // Already removed\n }\n\n if (preserveHistory) {\n // Move to archived partition\n const archiveKey = this.getArchiveKey(agentId);\n await this.memory.store(\n archiveKey,\n {\n ...entry,\n archivedAt: new Date(),\n reason: 'agent_removed',\n },\n {\n type: 'agent-archive',\n tags: [...entry.tags, 'archived'],\n partition: 'archived',\n },\n );\n }\n\n // Remove from active registry\n const key = this.getAgentKey(agentId);\n await this.memory.deleteEntry(key);\n\n // Remove from cache\n this.cache.delete(agentId);\n\n this.emit('agent:unregistered', { agentId, preserved: preserveHistory });\n }\n\n /**\n * Get agent by ID\n */\n async getAgent(agentId: string): Promise<AgentState | null> {\n const entry = await this.getAgentEntry(agentId);\n return entry?.agent || null;\n }\n\n /**\n * Get agent entry with metadata\n */\n async getAgentEntry(agentId: string): Promise<AgentRegistryEntry | null> {\n // Check cache first\n if (this.cache.has(agentId) && this.isCacheValid()) {\n return this.cache.get(agentId) || null;\n }\n\n // Load from memory\n const key = this.getAgentKey(agentId);\n const memoryEntry = await this.memory.retrieve(key);\n\n if (memoryEntry && memoryEntry.value) {\n // Convert MemoryEntry to AgentRegistryEntry\n const registryEntry: AgentRegistryEntry = memoryEntry.value as AgentRegistryEntry;\n this.cache.set(agentId, registryEntry);\n return registryEntry;\n }\n\n return null;\n }\n\n /**\n * Query agents by criteria\n */\n async queryAgents(query: AgentQuery = {}): Promise<AgentState[]> {\n await this.refreshCacheIfNeeded();\n\n let agents = Array.from(this.cache.values()).map((entry) => entry.agent);\n\n // Apply filters\n if (query.type) {\n agents = agents.filter((agent) => agent.type === query.type);\n }\n\n if (query.status) {\n agents = agents.filter((agent) => agent.status === query.status);\n }\n\n if (query.healthThreshold !== undefined) {\n agents = agents.filter((agent) => agent.health >= query.healthThreshold!);\n }\n\n if (query.namePattern) {\n const pattern = new RegExp(query.namePattern, 'i');\n agents = agents.filter((agent) => pattern.test(agent.name));\n }\n\n if (query.tags && query.tags.length > 0) {\n const entries = Array.from(this.cache.values());\n const matchingEntries = entries.filter((entry) =>\n query.tags!.some((tag) => entry.tags.includes(tag)),\n );\n agents = matchingEntries.map((entry) => entry.agent);\n }\n\n if (query.createdAfter) {\n const entries = Array.from(this.cache.values());\n const matchingEntries = entries.filter((entry) => entry.createdAt >= query.createdAfter!);\n agents = matchingEntries.map((entry) => entry.agent);\n }\n\n if (query.lastActiveAfter) {\n agents = agents.filter((agent) => agent.metrics.lastActivity >= query.lastActiveAfter!);\n }\n\n return agents;\n }\n\n /**\n * Get all registered agents\n */\n async getAllAgents(): Promise<AgentState[]> {\n return this.queryAgents();\n }\n\n /**\n * Get agents by type\n */\n async getAgentsByType(type: AgentType): Promise<AgentState[]> {\n return this.queryAgents({ type });\n }\n\n /**\n * Get agents by status\n */\n async getAgentsByStatus(status: AgentStatus): Promise<AgentState[]> {\n return this.queryAgents({ status });\n }\n\n /**\n * Get healthy agents\n */\n async getHealthyAgents(threshold: number = 0.7): Promise<AgentState[]> {\n return this.queryAgents({ healthThreshold: threshold });\n }\n\n /**\n * Get registry statistics\n */\n async getStatistics(): Promise<AgentStatistics> {\n const agents = await this.getAllAgents();\n\n const stats: AgentStatistics = {\n totalAgents: agents.length,\n byType: {} as Record<AgentType, number>,\n byStatus: {} as Record<AgentStatus, number>,\n averageHealth: 0,\n activeAgents: 0,\n totalUptime: 0,\n tasksCompleted: 0,\n successRate: 0,\n };\n\n if (agents.length === 0) {\n return stats;\n }\n\n // Count by type and status\n for (const agent of agents) {\n stats.byType[agent.type] = (stats.byType[agent.type] || 0) + 1;\n stats.byStatus[agent.status] = (stats.byStatus[agent.status] || 0) + 1;\n\n if (agent.status === 'idle' || agent.status === 'busy') {\n stats.activeAgents++;\n }\n\n stats.totalUptime += agent.metrics.totalUptime;\n stats.tasksCompleted += agent.metrics.tasksCompleted;\n }\n\n // Calculate averages\n stats.averageHealth = agents.reduce((sum, agent) => sum + agent.health, 0) / agents.length;\n\n const totalTasks = agents.reduce(\n (sum, agent) => sum + agent.metrics.tasksCompleted + agent.metrics.tasksFailed,\n 0,\n );\n\n if (totalTasks > 0) {\n stats.successRate = stats.tasksCompleted / totalTasks;\n }\n\n return stats;\n }\n\n /**\n * Search agents by capabilities\n */\n async searchByCapabilities(requiredCapabilities: string[]): Promise<AgentState[]> {\n const agents = await this.getAllAgents();\n\n return agents.filter((agent) => {\n const capabilities = [\n ...agent.capabilities.languages,\n ...agent.capabilities.frameworks,\n ...agent.capabilities.domains,\n ...agent.capabilities.tools,\n ];\n\n return requiredCapabilities.every((required) =>\n capabilities.some((cap) => cap.toLowerCase().includes(required.toLowerCase())),\n );\n });\n }\n\n /**\n * Find best agent for task\n */\n async findBestAgent(\n taskType: string,\n requiredCapabilities: string[] = [],\n preferredAgent?: string,\n ): Promise<AgentState | null> {\n let candidates = await this.getHealthyAgents(0.5);\n\n // Filter by capabilities if specified\n if (requiredCapabilities.length > 0) {\n candidates = await this.searchByCapabilities(requiredCapabilities);\n }\n\n // Prefer specific agent if available and healthy\n if (preferredAgent) {\n const preferred = candidates.find(\n (agent) => agent.id.id === preferredAgent || agent.name === preferredAgent,\n );\n if (preferred) return preferred;\n }\n\n // Filter by availability\n candidates = candidates.filter(\n (agent) =>\n agent.status === 'idle' &&\n agent.workload < 0.8 &&\n agent.capabilities.maxConcurrentTasks > 0,\n );\n\n if (candidates.length === 0) return null;\n\n // Score candidates\n const scored = candidates.map((agent) => ({\n agent,\n score: this.calculateAgentScore(agent, taskType, requiredCapabilities),\n }));\n\n // Sort by score (highest first)\n scored.sort((a, b) => b.score - a.score);\n\n return scored[0]?.agent || null;\n }\n\n /**\n * Store agent coordination data\n */\n async storeCoordinationData(agentId: string, data: any): Promise<void> {\n const key = `coordination:${agentId}`;\n await this.memory.store(\n key,\n {\n agentId,\n data,\n timestamp: new Date(),\n },\n {\n type: 'agent-coordination',\n tags: ['coordination', agentId],\n partition: this.namespace,\n },\n );\n }\n\n /**\n * Retrieve agent coordination data\n */\n async getCoordinationData(agentId: string): Promise<any> {\n const key = `coordination:${agentId}`;\n const result = await this.memory.retrieve(key);\n return result?.value || null;\n }\n\n // === PRIVATE METHODS ===\n\n private async loadFromMemory(): Promise<void> {\n try {\n const entries = await this.memory.query({\n type: 'state' as const,\n namespace: this.namespace,\n });\n\n this.cache.clear();\n for (const entry of entries) {\n if (entry.value && entry.value.agent) {\n this.cache.set(entry.value.agent.id.id, entry.value);\n }\n }\n\n this.lastCacheUpdate = Date.now();\n } catch (error) {\n console.warn('Failed to load agent registry from memory:', error);\n }\n }\n\n private async refreshCacheIfNeeded(): Promise<void> {\n if (!this.isCacheValid()) {\n await this.loadFromMemory();\n }\n }\n\n private isCacheValid(): boolean {\n return Date.now() - this.lastCacheUpdate < this.cacheExpiry;\n }\n\n private getAgentKey(agentId: string): string {\n return `agent:${agentId}`;\n }\n\n private getArchiveKey(agentId: string): string {\n return `archived:${agentId}:${Date.now()}`;\n }\n\n private calculateAgentScore(\n agent: AgentState,\n taskType: string,\n requiredCapabilities: string[],\n ): number {\n let score = 0;\n\n // Base health score (0-40 points)\n score += agent.health * 40;\n\n // Success rate score (0-30 points)\n score += agent.metrics.successRate * 30;\n\n // Availability score (0-20 points)\n const availability = 1 - agent.workload;\n score += availability * 20;\n\n // Capability match score (0-10 points)\n if (requiredCapabilities.length > 0) {\n const agentCaps = [\n ...agent.capabilities.languages,\n ...agent.capabilities.frameworks,\n ...agent.capabilities.domains,\n ...agent.capabilities.tools,\n ];\n\n const matches = requiredCapabilities.filter((required) =>\n agentCaps.some((cap) => cap.toLowerCase().includes(required.toLowerCase())),\n );\n\n score += (matches.length / requiredCapabilities.length) * 10;\n }\n\n return score;\n }\n}\n"],"names":["EventEmitter","AgentRegistry","memory","namespace","cache","Map","cacheExpiry","lastCacheUpdate","initialize","loadFromMemory","emit","registerAgent","agent","tags","entry","createdAt","Date","lastUpdated","type","status","metadata","registeredBy","version","key","getAgentKey","id","store","partition","set","agentId","updateAgent","updates","getAgentEntry","Error","filter","t","unregisterAgent","preserveHistory","archiveKey","getArchiveKey","archivedAt","reason","deleteEntry","delete","preserved","getAgent","has","isCacheValid","get","memoryEntry","retrieve","value","registryEntry","queryAgents","query","refreshCacheIfNeeded","agents","Array","from","values","map","healthThreshold","undefined","health","namePattern","pattern","RegExp","test","name","length","entries","matchingEntries","some","tag","includes","createdAfter","lastActiveAfter","metrics","lastActivity","getAllAgents","getAgentsByType","getAgentsByStatus","getHealthyAgents","threshold","getStatistics","stats","totalAgents","byType","byStatus","averageHealth","activeAgents","totalUptime","tasksCompleted","successRate","reduce","sum","totalTasks","tasksFailed","searchByCapabilities","requiredCapabilities","capabilities","languages","frameworks","domains","tools","every","required","cap","toLowerCase","findBestAgent","taskType","preferredAgent","candidates","preferred","find","workload","maxConcurrentTasks","scored","score","calculateAgentScore","sort","a","b","storeCoordinationData","data","timestamp","getCoordinationData","result","clear","now","error","console","warn","availability","agentCaps","matches"],"mappings":"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"}