agentic-flow 2.0.7 → 2.0.8

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 (316) hide show
  1. package/.claude/settings.json +133 -9
  2. package/.claude/skills/agentic-flow-quickstart/skill.md +69 -0
  3. package/.claude/skills/hooks-automation/skill.md +155 -0
  4. package/.claude/skills/memory-patterns/skill.md +110 -0
  5. package/.claude/skills/sparc-methodology/skill.md +137 -0
  6. package/.claude/skills/swarm-coordination/skill.md +94 -0
  7. package/.claude/skills/worker-benchmarks/skill.md +135 -0
  8. package/.claude/skills/worker-integration/skill.md +154 -0
  9. package/.claude/statusline.mjs +109 -0
  10. package/.claude/statusline.sh +71 -0
  11. package/README.md +1797 -624
  12. package/dist/.tsbuildinfo +1 -1
  13. package/dist/agentdb/index.d.ts +2 -0
  14. package/dist/agentdb/index.d.ts.map +1 -1
  15. package/dist/agentdb/index.js +5 -0
  16. package/dist/agentdb/index.js.map +1 -1
  17. package/dist/agentdb/prerequisites.d.ts +25 -0
  18. package/dist/agentdb/prerequisites.d.ts.map +1 -0
  19. package/dist/agentdb/prerequisites.js +180 -0
  20. package/dist/agentdb/prerequisites.js.map +1 -0
  21. package/dist/benchmarks/embeddings-benchmark.d.ts +38 -0
  22. package/dist/benchmarks/embeddings-benchmark.d.ts.map +1 -0
  23. package/dist/benchmarks/embeddings-benchmark.js +282 -0
  24. package/dist/benchmarks/embeddings-benchmark.js.map +1 -0
  25. package/dist/billing/mcp/tools.js +1 -0
  26. package/dist/billing/mcp/tools.js.map +1 -1
  27. package/dist/cli/commands/embeddings.d.ts +12 -0
  28. package/dist/cli/commands/embeddings.d.ts.map +1 -0
  29. package/dist/cli/commands/embeddings.js +386 -0
  30. package/dist/cli/commands/embeddings.js.map +1 -0
  31. package/dist/cli/commands/hooks.d.ts.map +1 -1
  32. package/dist/cli/commands/hooks.js +79 -4
  33. package/dist/cli/commands/hooks.js.map +1 -1
  34. package/dist/cli/commands/init.d.ts +8 -0
  35. package/dist/cli/commands/init.d.ts.map +1 -0
  36. package/dist/cli/commands/init.js +514 -0
  37. package/dist/cli/commands/init.js.map +1 -0
  38. package/dist/cli/commands/workers.d.ts +9 -0
  39. package/dist/cli/commands/workers.d.ts.map +1 -0
  40. package/dist/cli/commands/workers.js +991 -0
  41. package/dist/cli/commands/workers.js.map +1 -0
  42. package/dist/cli/config-wizard.d.ts.map +1 -1
  43. package/dist/cli/config-wizard.js +47 -25
  44. package/dist/cli/config-wizard.js.map +1 -1
  45. package/dist/cli-proxy.js +89 -1
  46. package/dist/cli-proxy.js.map +1 -1
  47. package/dist/core/agentdb-fast.js +3 -3
  48. package/dist/core/agentdb-fast.js.map +1 -1
  49. package/dist/core/agentdb-wrapper-enhanced.d.ts.map +1 -1
  50. package/dist/core/agentdb-wrapper-enhanced.js +37 -11
  51. package/dist/core/agentdb-wrapper-enhanced.js.map +1 -1
  52. package/dist/core/agentdb-wrapper.d.ts +3 -2
  53. package/dist/core/agentdb-wrapper.d.ts.map +1 -1
  54. package/dist/core/agentdb-wrapper.js +15 -1
  55. package/dist/core/agentdb-wrapper.js.map +1 -1
  56. package/dist/core/attention-native.d.ts +4 -0
  57. package/dist/core/attention-native.d.ts.map +1 -1
  58. package/dist/core/attention-native.js +14 -2
  59. package/dist/core/attention-native.js.map +1 -1
  60. package/dist/core/gnn-wrapper.d.ts.map +1 -1
  61. package/dist/core/gnn-wrapper.js +14 -0
  62. package/dist/core/gnn-wrapper.js.map +1 -1
  63. package/dist/embeddings/index.d.ts +17 -0
  64. package/dist/embeddings/index.d.ts.map +1 -0
  65. package/dist/embeddings/index.js +17 -0
  66. package/dist/embeddings/index.js.map +1 -0
  67. package/dist/embeddings/neural-substrate.d.ts +206 -0
  68. package/dist/embeddings/neural-substrate.d.ts.map +1 -0
  69. package/dist/embeddings/neural-substrate.js +629 -0
  70. package/dist/embeddings/neural-substrate.js.map +1 -0
  71. package/dist/embeddings/optimized-embedder.d.ts +103 -0
  72. package/dist/embeddings/optimized-embedder.d.ts.map +1 -0
  73. package/dist/embeddings/optimized-embedder.js +730 -0
  74. package/dist/embeddings/optimized-embedder.js.map +1 -0
  75. package/dist/examples/embedding-geometry.d.ts +105 -0
  76. package/dist/examples/embedding-geometry.d.ts.map +1 -0
  77. package/dist/examples/embedding-geometry.js +528 -0
  78. package/dist/examples/embedding-geometry.js.map +1 -0
  79. package/dist/federation/SecurityManager.d.ts +11 -2
  80. package/dist/federation/SecurityManager.d.ts.map +1 -1
  81. package/dist/federation/SecurityManager.js +50 -17
  82. package/dist/federation/SecurityManager.js.map +1 -1
  83. package/dist/federation/integrations/supabase-adapter-debug.js +3 -3
  84. package/dist/federation/integrations/supabase-adapter-debug.js.map +1 -1
  85. package/dist/hooks/swarm-learning-optimizer.js +5 -5
  86. package/dist/hooks/swarm-learning-optimizer.js.map +1 -1
  87. package/dist/index.d.ts +5 -3
  88. package/dist/index.d.ts.map +1 -1
  89. package/dist/index.js +89 -51
  90. package/dist/index.js.map +1 -1
  91. package/dist/intelligence/IntelligenceStore.d.ts +35 -26
  92. package/dist/intelligence/IntelligenceStore.d.ts.map +1 -1
  93. package/dist/intelligence/IntelligenceStore.js +308 -123
  94. package/dist/intelligence/IntelligenceStore.js.map +1 -1
  95. package/dist/intelligence/RuVectorIntelligence.d.ts +26 -1
  96. package/dist/intelligence/RuVectorIntelligence.d.ts.map +1 -1
  97. package/dist/intelligence/RuVectorIntelligence.js +49 -10
  98. package/dist/intelligence/RuVectorIntelligence.js.map +1 -1
  99. package/dist/intelligence/agent-booster-enhanced.d.ts +1 -0
  100. package/dist/intelligence/agent-booster-enhanced.d.ts.map +1 -1
  101. package/dist/intelligence/agent-booster-enhanced.js +24 -3
  102. package/dist/intelligence/agent-booster-enhanced.js.map +1 -1
  103. package/dist/intelligence/index.d.ts +29 -3
  104. package/dist/intelligence/index.d.ts.map +1 -1
  105. package/dist/intelligence/index.js +13 -3
  106. package/dist/intelligence/index.js.map +1 -1
  107. package/dist/mcp/claudeFlowSdkServer.d.ts.map +1 -1
  108. package/dist/mcp/claudeFlowSdkServer.js +162 -115
  109. package/dist/mcp/claudeFlowSdkServer.js.map +1 -1
  110. package/dist/mcp/fastmcp/tools/hooks/intelligence-bridge.js +5 -5
  111. package/dist/mcp/fastmcp/tools/hooks/intelligence-bridge.js.map +1 -1
  112. package/dist/mcp/fastmcp/tools/swarm/init.d.ts.map +1 -1
  113. package/dist/mcp/fastmcp/tools/swarm/init.js +36 -7
  114. package/dist/mcp/fastmcp/tools/swarm/init.js.map +1 -1
  115. package/dist/mcp/fastmcp/tools/swarm/spawn.d.ts.map +1 -1
  116. package/dist/mcp/fastmcp/tools/swarm/spawn.js +47 -8
  117. package/dist/mcp/fastmcp/tools/swarm/spawn.js.map +1 -1
  118. package/dist/mcp/tools/agent-booster-tools.d.ts +15 -1
  119. package/dist/mcp/tools/agent-booster-tools.d.ts.map +1 -1
  120. package/dist/mcp/tools/agent-booster-tools.js +79 -63
  121. package/dist/mcp/tools/agent-booster-tools.js.map +1 -1
  122. package/dist/mcp/tools/sona-tools.d.ts.map +1 -1
  123. package/dist/mcp/tools/sona-tools.js +6 -0
  124. package/dist/mcp/tools/sona-tools.js.map +1 -1
  125. package/dist/memory/SharedMemoryPool.d.ts +103 -0
  126. package/dist/memory/SharedMemoryPool.d.ts.map +1 -0
  127. package/dist/memory/SharedMemoryPool.js +263 -0
  128. package/dist/memory/SharedMemoryPool.js.map +1 -0
  129. package/dist/optimizations/agent-booster-migration.d.ts +2 -1
  130. package/dist/optimizations/agent-booster-migration.d.ts.map +1 -1
  131. package/dist/optimizations/agent-booster-migration.js +69 -45
  132. package/dist/optimizations/agent-booster-migration.js.map +1 -1
  133. package/dist/orchestration/index.d.ts +11 -0
  134. package/dist/orchestration/index.d.ts.map +1 -0
  135. package/dist/orchestration/index.js +10 -0
  136. package/dist/orchestration/index.js.map +1 -0
  137. package/dist/orchestration/memory-plane-types.d.ts +23 -0
  138. package/dist/orchestration/memory-plane-types.d.ts.map +1 -0
  139. package/dist/orchestration/memory-plane-types.js +5 -0
  140. package/dist/orchestration/memory-plane-types.js.map +1 -0
  141. package/dist/orchestration/memory-plane.d.ts +41 -0
  142. package/dist/orchestration/memory-plane.d.ts.map +1 -0
  143. package/dist/orchestration/memory-plane.js +84 -0
  144. package/dist/orchestration/memory-plane.js.map +1 -0
  145. package/dist/orchestration/orchestration-client.d.ts +104 -0
  146. package/dist/orchestration/orchestration-client.d.ts.map +1 -0
  147. package/dist/orchestration/orchestration-client.js +94 -0
  148. package/dist/orchestration/orchestration-client.js.map +1 -0
  149. package/dist/orchestration/orchestration-runtime.d.ts +26 -0
  150. package/dist/orchestration/orchestration-runtime.d.ts.map +1 -0
  151. package/dist/orchestration/orchestration-runtime.js +78 -0
  152. package/dist/orchestration/orchestration-runtime.js.map +1 -0
  153. package/dist/orchestration/orchestration-types.d.ts +124 -0
  154. package/dist/orchestration/orchestration-types.d.ts.map +1 -0
  155. package/dist/orchestration/orchestration-types.js +7 -0
  156. package/dist/orchestration/orchestration-types.js.map +1 -0
  157. package/dist/proxy/anthropic-to-openrouter.js.map +1 -1
  158. package/dist/proxy/anthropic-to-requesty.js.map +1 -1
  159. package/dist/proxy/quic-proxy.d.ts +0 -1
  160. package/dist/proxy/quic-proxy.d.ts.map +1 -1
  161. package/dist/proxy/quic-proxy.js +2 -2
  162. package/dist/proxy/quic-proxy.js.map +1 -1
  163. package/dist/reasoningbank/AdvancedMemory.js +1 -1
  164. package/dist/reasoningbank/AdvancedMemory.js.map +1 -1
  165. package/dist/reasoningbank/HybridBackend.d.ts.map +1 -1
  166. package/dist/reasoningbank/HybridBackend.js +2 -5
  167. package/dist/reasoningbank/HybridBackend.js.map +1 -1
  168. package/dist/reasoningbank/backend-selector.d.ts +10 -0
  169. package/dist/reasoningbank/backend-selector.d.ts.map +1 -1
  170. package/dist/reasoningbank/backend-selector.js +45 -5
  171. package/dist/reasoningbank/backend-selector.js.map +1 -1
  172. package/dist/reasoningbank/core/consolidate.d.ts.map +1 -1
  173. package/dist/reasoningbank/core/consolidate.js +113 -45
  174. package/dist/reasoningbank/core/consolidate.js.map +1 -1
  175. package/dist/reasoningbank/index-new.d.ts +1 -6
  176. package/dist/reasoningbank/index-new.d.ts.map +1 -1
  177. package/dist/reasoningbank/index-new.js +1 -6
  178. package/dist/reasoningbank/index-new.js.map +1 -1
  179. package/dist/reasoningbank/index.d.ts +6 -0
  180. package/dist/reasoningbank/index.d.ts.map +1 -1
  181. package/dist/reasoningbank/index.js +6 -13
  182. package/dist/reasoningbank/index.js.map +1 -1
  183. package/dist/reasoningbank/utils/embeddings.d.ts +1 -0
  184. package/dist/reasoningbank/utils/embeddings.d.ts.map +1 -1
  185. package/dist/reasoningbank/utils/embeddings.js +53 -26
  186. package/dist/reasoningbank/utils/embeddings.js.map +1 -1
  187. package/dist/router/index.d.ts +2 -1
  188. package/dist/router/index.d.ts.map +1 -1
  189. package/dist/router/index.js +1 -0
  190. package/dist/router/index.js.map +1 -1
  191. package/dist/router/providers/ollama.d.ts +20 -0
  192. package/dist/router/providers/ollama.d.ts.map +1 -0
  193. package/dist/router/providers/ollama.js +242 -0
  194. package/dist/router/providers/ollama.js.map +1 -0
  195. package/dist/router/providers/onnx-local-optimized.d.ts +2 -0
  196. package/dist/router/providers/onnx-local-optimized.d.ts.map +1 -1
  197. package/dist/router/providers/onnx-local-optimized.js +10 -0
  198. package/dist/router/providers/onnx-local-optimized.js.map +1 -1
  199. package/dist/router/providers/onnx-local.d.ts +1 -0
  200. package/dist/router/providers/onnx-local.d.ts.map +1 -1
  201. package/dist/router/providers/onnx-local.js +22 -5
  202. package/dist/router/providers/onnx-local.js.map +1 -1
  203. package/dist/router/router.d.ts.map +1 -1
  204. package/dist/router/router.js +39 -23
  205. package/dist/router/router.js.map +1 -1
  206. package/dist/sdk/index.d.ts +2 -1
  207. package/dist/sdk/index.d.ts.map +1 -1
  208. package/dist/sdk/index.js +3 -1
  209. package/dist/sdk/index.js.map +1 -1
  210. package/dist/services/embedding-service.js.map +1 -1
  211. package/dist/services/sona-agent-training.d.ts +1 -0
  212. package/dist/services/sona-agent-training.d.ts.map +1 -1
  213. package/dist/services/sona-agent-training.js.map +1 -1
  214. package/dist/services/sona-agentdb-integration.d.ts.map +1 -1
  215. package/dist/services/sona-agentdb-integration.js +9 -6
  216. package/dist/services/sona-agentdb-integration.js.map +1 -1
  217. package/dist/services/sona-service.d.ts.map +1 -1
  218. package/dist/services/sona-service.js +6 -5
  219. package/dist/services/sona-service.js.map +1 -1
  220. package/dist/utils/cli.d.ts +1 -1
  221. package/dist/utils/cli.d.ts.map +1 -1
  222. package/dist/utils/cli.js +21 -0
  223. package/dist/utils/cli.js.map +1 -1
  224. package/dist/utils/index.d.ts +6 -0
  225. package/dist/utils/index.d.ts.map +1 -0
  226. package/dist/utils/index.js +6 -0
  227. package/dist/utils/index.js.map +1 -0
  228. package/dist/utils/model-cache.d.ts +61 -0
  229. package/dist/utils/model-cache.d.ts.map +1 -0
  230. package/dist/utils/model-cache.js +176 -0
  231. package/dist/utils/model-cache.js.map +1 -0
  232. package/dist/utils/suppress-warnings.d.ts +19 -0
  233. package/dist/utils/suppress-warnings.d.ts.map +1 -0
  234. package/dist/utils/suppress-warnings.js +59 -0
  235. package/dist/utils/suppress-warnings.js.map +1 -0
  236. package/dist/workers/consolidated-phases.d.ts +40 -0
  237. package/dist/workers/consolidated-phases.d.ts.map +1 -0
  238. package/dist/workers/consolidated-phases.js +497 -0
  239. package/dist/workers/consolidated-phases.js.map +1 -0
  240. package/dist/workers/custom-worker-config.d.ts +133 -0
  241. package/dist/workers/custom-worker-config.d.ts.map +1 -0
  242. package/dist/workers/custom-worker-config.js +215 -0
  243. package/dist/workers/custom-worker-config.js.map +1 -0
  244. package/dist/workers/custom-worker-factory.d.ts +89 -0
  245. package/dist/workers/custom-worker-factory.d.ts.map +1 -0
  246. package/dist/workers/custom-worker-factory.js +404 -0
  247. package/dist/workers/custom-worker-factory.js.map +1 -0
  248. package/dist/workers/dispatch-service.d.ts +123 -0
  249. package/dist/workers/dispatch-service.d.ts.map +1 -0
  250. package/dist/workers/dispatch-service.js +1024 -0
  251. package/dist/workers/dispatch-service.js.map +1 -0
  252. package/dist/workers/hooks-integration.d.ts +79 -0
  253. package/dist/workers/hooks-integration.d.ts.map +1 -0
  254. package/dist/workers/hooks-integration.js +286 -0
  255. package/dist/workers/hooks-integration.js.map +1 -0
  256. package/dist/workers/index.d.ts +42 -0
  257. package/dist/workers/index.d.ts.map +1 -0
  258. package/dist/workers/index.js +52 -0
  259. package/dist/workers/index.js.map +1 -0
  260. package/dist/workers/mcp-tools.d.ts +56 -0
  261. package/dist/workers/mcp-tools.d.ts.map +1 -0
  262. package/dist/workers/mcp-tools.js +359 -0
  263. package/dist/workers/mcp-tools.js.map +1 -0
  264. package/dist/workers/phase-executors.d.ts +22 -0
  265. package/dist/workers/phase-executors.d.ts.map +1 -0
  266. package/dist/workers/phase-executors.js +445 -0
  267. package/dist/workers/phase-executors.js.map +1 -0
  268. package/dist/workers/resource-governor.d.ts +75 -0
  269. package/dist/workers/resource-governor.d.ts.map +1 -0
  270. package/dist/workers/resource-governor.js +187 -0
  271. package/dist/workers/resource-governor.js.map +1 -0
  272. package/dist/workers/ruvector-integration.d.ts +163 -0
  273. package/dist/workers/ruvector-integration.d.ts.map +1 -0
  274. package/dist/workers/ruvector-integration.js +543 -0
  275. package/dist/workers/ruvector-integration.js.map +1 -0
  276. package/dist/workers/ruvector-native-integration.d.ts +91 -0
  277. package/dist/workers/ruvector-native-integration.d.ts.map +1 -0
  278. package/dist/workers/ruvector-native-integration.js +254 -0
  279. package/dist/workers/ruvector-native-integration.js.map +1 -0
  280. package/dist/workers/trigger-detector.d.ts +68 -0
  281. package/dist/workers/trigger-detector.d.ts.map +1 -0
  282. package/dist/workers/trigger-detector.js +281 -0
  283. package/dist/workers/trigger-detector.js.map +1 -0
  284. package/dist/workers/types.d.ts +145 -0
  285. package/dist/workers/types.d.ts.map +1 -0
  286. package/dist/workers/types.js +6 -0
  287. package/dist/workers/types.js.map +1 -0
  288. package/dist/workers/worker-agent-integration.d.ts +140 -0
  289. package/dist/workers/worker-agent-integration.d.ts.map +1 -0
  290. package/dist/workers/worker-agent-integration.js +471 -0
  291. package/dist/workers/worker-agent-integration.js.map +1 -0
  292. package/dist/workers/worker-benchmarks.d.ts +88 -0
  293. package/dist/workers/worker-benchmarks.d.ts.map +1 -0
  294. package/dist/workers/worker-benchmarks.js +452 -0
  295. package/dist/workers/worker-benchmarks.js.map +1 -0
  296. package/dist/workers/worker-registry.d.ts +85 -0
  297. package/dist/workers/worker-registry.d.ts.map +1 -0
  298. package/dist/workers/worker-registry.js +547 -0
  299. package/dist/workers/worker-registry.js.map +1 -0
  300. package/docs/embeddings/EMBEDDING_GEOMETRY.md +935 -0
  301. package/package.json +27 -9
  302. package/scripts/postinstall.js +45 -4
  303. package/wasm/reasoningbank/reasoningbank_wasm.js +1 -1
  304. package/wasm/reasoningbank/reasoningbank_wasm_bg.js +54 -54
  305. package/wasm/reasoningbank/reasoningbank_wasm_bg.wasm +0 -0
  306. package/wasm/reasoningbank/reasoningbank_wasm_bg.wasm.d.ts +4 -3
  307. package/.claude/agents/test-neural.md +0 -14
  308. /package/.claude/agents/analysis/{code-review/analyze-code-quality.md → analyze-code-quality.md} +0 -0
  309. /package/.claude/agents/architecture/{system-design/arch-system-design.md → arch-system-design.md} +0 -0
  310. /package/.claude/agents/data/{ml/data-ml-model.md → data-ml-model.md} +0 -0
  311. /package/.claude/agents/development/{backend/dev-backend-api.md → dev-backend-api.md} +0 -0
  312. /package/.claude/agents/devops/{ci-cd/ops-cicd-github.md → ops-cicd-github.md} +0 -0
  313. /package/.claude/agents/documentation/{api-docs/docs-api-openapi.md → docs-api-openapi.md} +0 -0
  314. /package/.claude/agents/specialized/{mobile/spec-mobile-react-native.md → spec-mobile-react-native.md} +0 -0
  315. /package/.claude/agents/testing/{validation/production-validator.md → production-validator.md} +0 -0
  316. /package/.claude/agents/testing/{unit/tdd-london-swarm.md → tdd-london-swarm.md} +0 -0
@@ -0,0 +1,452 @@
1
+ /**
2
+ * Worker Benchmark System
3
+ *
4
+ * Comprehensive performance benchmarking for the worker system including:
5
+ * - Dispatch latency measurement
6
+ * - Phase execution timing
7
+ * - Memory tracking
8
+ * - Throughput analysis
9
+ * - Integration with agents
10
+ */
11
+ import { getWorkerRegistry } from './worker-registry.js';
12
+ import { workerAgentIntegration } from './worker-agent-integration.js';
13
+ import { modelCache } from '../utils/model-cache.js';
14
+ // ============================================================================
15
+ // Benchmark Utilities
16
+ // ============================================================================
17
+ function calculatePercentile(sorted, percentile) {
18
+ const index = Math.ceil((percentile / 100) * sorted.length) - 1;
19
+ return sorted[Math.max(0, index)] || 0;
20
+ }
21
+ function getMemoryUsageMB() {
22
+ const mem = process.memoryUsage();
23
+ return mem.heapUsed / 1024 / 1024;
24
+ }
25
+ function createLatencyHistogram(latencies) {
26
+ const buckets = [
27
+ { max: 1, label: '<1ms' },
28
+ { max: 5, label: '1-5ms' },
29
+ { max: 10, label: '5-10ms' },
30
+ { max: 50, label: '10-50ms' },
31
+ { max: 100, label: '50-100ms' },
32
+ { max: 500, label: '100-500ms' },
33
+ { max: 1000, label: '500ms-1s' },
34
+ { max: Infinity, label: '>1s' }
35
+ ];
36
+ const counts = new Array(buckets.length).fill(0);
37
+ for (const latency of latencies) {
38
+ for (let i = 0; i < buckets.length; i++) {
39
+ if (latency <= buckets[i].max) {
40
+ counts[i]++;
41
+ break;
42
+ }
43
+ }
44
+ }
45
+ return buckets.map((bucket, i) => ({
46
+ range: bucket.label,
47
+ count: counts[i],
48
+ percentage: (counts[i] / latencies.length) * 100
49
+ }));
50
+ }
51
+ // ============================================================================
52
+ // Worker Benchmarks
53
+ // ============================================================================
54
+ export class WorkerBenchmarks {
55
+ results = [];
56
+ /**
57
+ * Benchmark trigger detection speed
58
+ */
59
+ async benchmarkTriggerDetection(iterations = 1000) {
60
+ const prompts = [
61
+ 'ultralearn the authentication system architecture',
62
+ 'optimize the database query performance',
63
+ 'audit security vulnerabilities in the payment module',
64
+ 'benchmark the API response times',
65
+ 'testgaps in the user module tests',
66
+ 'document the REST API endpoints',
67
+ 'deepdive into the message queue implementation',
68
+ 'refactor the UserService class for better maintainability',
69
+ 'Please help me write some code', // No trigger
70
+ 'How does this function work?' // No trigger
71
+ ];
72
+ const latencies = [];
73
+ const memStart = getMemoryUsageMB();
74
+ // Import detector dynamically to avoid circular deps
75
+ const { getTriggerDetector } = await import('./trigger-detector.js');
76
+ const detector = getTriggerDetector();
77
+ for (let i = 0; i < iterations; i++) {
78
+ const prompt = prompts[i % prompts.length];
79
+ const start = performance.now();
80
+ detector.detect(prompt);
81
+ latencies.push(performance.now() - start);
82
+ }
83
+ const sorted = [...latencies].sort((a, b) => a - b);
84
+ const memEnd = getMemoryUsageMB();
85
+ const result = {
86
+ name: 'Trigger Detection',
87
+ operation: 'detect',
88
+ count: iterations,
89
+ totalTimeMs: latencies.reduce((a, b) => a + b, 0),
90
+ avgTimeMs: latencies.reduce((a, b) => a + b, 0) / latencies.length,
91
+ minMs: sorted[0],
92
+ maxMs: sorted[sorted.length - 1],
93
+ p50Ms: calculatePercentile(sorted, 50),
94
+ p95Ms: calculatePercentile(sorted, 95),
95
+ p99Ms: calculatePercentile(sorted, 99),
96
+ throughput: (iterations / (latencies.reduce((a, b) => a + b, 0) / 1000)),
97
+ memoryDeltaMB: memEnd - memStart,
98
+ passed: calculatePercentile(sorted, 95) < 5, // Target: p95 < 5ms
99
+ target: 5,
100
+ details: {
101
+ histogram: createLatencyHistogram(latencies),
102
+ promptsWithTriggers: 8,
103
+ promptsWithoutTriggers: 2
104
+ }
105
+ };
106
+ this.results.push(result);
107
+ return result;
108
+ }
109
+ /**
110
+ * Benchmark worker registry operations
111
+ */
112
+ async benchmarkRegistryOperations(iterations = 500) {
113
+ const triggers = ['ultralearn', 'optimize', 'audit', 'benchmark', 'testgaps'];
114
+ const sessionId = `benchmark-${Date.now()}`;
115
+ const createLatencies = [];
116
+ const getLatencies = [];
117
+ const updateLatencies = [];
118
+ const workerIds = [];
119
+ const memStart = getMemoryUsageMB();
120
+ // Benchmark creates
121
+ for (let i = 0; i < iterations; i++) {
122
+ const trigger = triggers[i % triggers.length];
123
+ const start = performance.now();
124
+ const workerId = getWorkerRegistry().create(trigger, sessionId, `topic-${i}`);
125
+ createLatencies.push(performance.now() - start);
126
+ workerIds.push(workerId);
127
+ }
128
+ // Benchmark gets
129
+ for (const workerId of workerIds) {
130
+ const start = performance.now();
131
+ getWorkerRegistry().get(workerId);
132
+ getLatencies.push(performance.now() - start);
133
+ }
134
+ // Benchmark updates
135
+ for (const workerId of workerIds) {
136
+ const start = performance.now();
137
+ getWorkerRegistry().updateStatus(workerId, 'running', { progress: 50 });
138
+ updateLatencies.push(performance.now() - start);
139
+ }
140
+ const allLatencies = [...createLatencies, ...getLatencies, ...updateLatencies];
141
+ const sorted = [...allLatencies].sort((a, b) => a - b);
142
+ const memEnd = getMemoryUsageMB();
143
+ // Cleanup
144
+ for (const workerId of workerIds) {
145
+ try {
146
+ getWorkerRegistry().updateStatus(workerId, 'complete');
147
+ }
148
+ catch {
149
+ // Ignore cleanup errors
150
+ }
151
+ }
152
+ const result = {
153
+ name: 'Worker Registry',
154
+ operation: 'crud',
155
+ count: allLatencies.length,
156
+ totalTimeMs: allLatencies.reduce((a, b) => a + b, 0),
157
+ avgTimeMs: allLatencies.reduce((a, b) => a + b, 0) / allLatencies.length,
158
+ minMs: sorted[0],
159
+ maxMs: sorted[sorted.length - 1],
160
+ p50Ms: calculatePercentile(sorted, 50),
161
+ p95Ms: calculatePercentile(sorted, 95),
162
+ p99Ms: calculatePercentile(sorted, 99),
163
+ throughput: (allLatencies.length / (allLatencies.reduce((a, b) => a + b, 0) / 1000)),
164
+ memoryDeltaMB: memEnd - memStart,
165
+ passed: calculatePercentile(sorted, 95) < 10, // Target: p95 < 10ms
166
+ target: 10,
167
+ details: {
168
+ createAvgMs: createLatencies.reduce((a, b) => a + b, 0) / createLatencies.length,
169
+ getAvgMs: getLatencies.reduce((a, b) => a + b, 0) / getLatencies.length,
170
+ updateAvgMs: updateLatencies.reduce((a, b) => a + b, 0) / updateLatencies.length
171
+ }
172
+ };
173
+ this.results.push(result);
174
+ return result;
175
+ }
176
+ /**
177
+ * Benchmark agent selection performance
178
+ */
179
+ async benchmarkAgentSelection(iterations = 1000) {
180
+ const triggers = [
181
+ 'ultralearn', 'optimize', 'audit', 'benchmark', 'testgaps',
182
+ 'document', 'deepdive', 'refactor', 'map', 'preload'
183
+ ];
184
+ const latencies = [];
185
+ const memStart = getMemoryUsageMB();
186
+ for (let i = 0; i < iterations; i++) {
187
+ const trigger = triggers[i % triggers.length];
188
+ const start = performance.now();
189
+ workerAgentIntegration.selectBestAgent(trigger);
190
+ latencies.push(performance.now() - start);
191
+ }
192
+ const sorted = [...latencies].sort((a, b) => a - b);
193
+ const memEnd = getMemoryUsageMB();
194
+ const result = {
195
+ name: 'Agent Selection',
196
+ operation: 'selectBestAgent',
197
+ count: iterations,
198
+ totalTimeMs: latencies.reduce((a, b) => a + b, 0),
199
+ avgTimeMs: latencies.reduce((a, b) => a + b, 0) / latencies.length,
200
+ minMs: sorted[0],
201
+ maxMs: sorted[sorted.length - 1],
202
+ p50Ms: calculatePercentile(sorted, 50),
203
+ p95Ms: calculatePercentile(sorted, 95),
204
+ p99Ms: calculatePercentile(sorted, 99),
205
+ throughput: (iterations / (latencies.reduce((a, b) => a + b, 0) / 1000)),
206
+ memoryDeltaMB: memEnd - memStart,
207
+ passed: calculatePercentile(sorted, 95) < 1, // Target: p95 < 1ms
208
+ target: 1,
209
+ details: {
210
+ triggersPerAgent: triggers.length
211
+ }
212
+ };
213
+ this.results.push(result);
214
+ return result;
215
+ }
216
+ /**
217
+ * Benchmark model cache performance
218
+ */
219
+ async benchmarkModelCache(iterations = 100) {
220
+ const latencies = [];
221
+ const memStart = getMemoryUsageMB();
222
+ // Simulate cache operations
223
+ for (let i = 0; i < iterations; i++) {
224
+ const start = performance.now();
225
+ // Test cache stats retrieval
226
+ modelCache.getStats();
227
+ // Test cache key generation
228
+ const key = `benchmark-model-${i % 10}`;
229
+ modelCache.has(key);
230
+ latencies.push(performance.now() - start);
231
+ }
232
+ const sorted = [...latencies].sort((a, b) => a - b);
233
+ const memEnd = getMemoryUsageMB();
234
+ const cacheStats = modelCache.getStats();
235
+ const result = {
236
+ name: 'Model Cache',
237
+ operation: 'cache-ops',
238
+ count: iterations,
239
+ totalTimeMs: latencies.reduce((a, b) => a + b, 0),
240
+ avgTimeMs: latencies.reduce((a, b) => a + b, 0) / latencies.length,
241
+ minMs: sorted[0],
242
+ maxMs: sorted[sorted.length - 1],
243
+ p50Ms: calculatePercentile(sorted, 50),
244
+ p95Ms: calculatePercentile(sorted, 95),
245
+ p99Ms: calculatePercentile(sorted, 99),
246
+ throughput: (iterations / (latencies.reduce((a, b) => a + b, 0) / 1000)),
247
+ memoryDeltaMB: memEnd - memStart,
248
+ passed: calculatePercentile(sorted, 95) < 0.5, // Target: p95 < 0.5ms
249
+ target: 0.5,
250
+ details: {
251
+ cacheHits: cacheStats.hits,
252
+ cacheMisses: cacheStats.misses,
253
+ cacheHitRate: cacheStats.hitRate,
254
+ cacheSize: cacheStats.size
255
+ }
256
+ };
257
+ this.results.push(result);
258
+ return result;
259
+ }
260
+ /**
261
+ * Benchmark concurrent worker handling
262
+ */
263
+ async benchmarkConcurrentWorkers(workerCount = 10) {
264
+ const triggers = ['ultralearn', 'optimize', 'audit'];
265
+ const sessionId = `concurrent-${Date.now()}`;
266
+ const workerIds = [];
267
+ const memStart = getMemoryUsageMB();
268
+ const startTime = performance.now();
269
+ // Create workers concurrently
270
+ const createPromises = Array.from({ length: workerCount }, (_, i) => Promise.resolve().then(() => {
271
+ const trigger = triggers[i % triggers.length];
272
+ return getWorkerRegistry().create(trigger, sessionId, `concurrent-${i}`);
273
+ }));
274
+ const ids = await Promise.all(createPromises);
275
+ workerIds.push(...ids);
276
+ // Simulate concurrent status updates
277
+ const updatePromises = workerIds.map((id, i) => Promise.resolve().then(() => {
278
+ getWorkerRegistry().updateStatus(id, 'running', { progress: i * 10 });
279
+ }));
280
+ await Promise.all(updatePromises);
281
+ const totalTime = performance.now() - startTime;
282
+ const memEnd = getMemoryUsageMB();
283
+ // Cleanup
284
+ for (const workerId of workerIds) {
285
+ try {
286
+ getWorkerRegistry().updateStatus(workerId, 'complete');
287
+ }
288
+ catch {
289
+ // Ignore
290
+ }
291
+ }
292
+ const result = {
293
+ name: 'Concurrent Workers',
294
+ operation: 'parallel-create-update',
295
+ count: workerCount * 2, // Creates + updates
296
+ totalTimeMs: totalTime,
297
+ avgTimeMs: totalTime / (workerCount * 2),
298
+ minMs: totalTime / (workerCount * 2),
299
+ maxMs: totalTime,
300
+ p50Ms: totalTime / 2,
301
+ p95Ms: totalTime,
302
+ p99Ms: totalTime,
303
+ throughput: ((workerCount * 2) / (totalTime / 1000)),
304
+ memoryDeltaMB: memEnd - memStart,
305
+ passed: totalTime < 1000, // Target: < 1s for all concurrent ops
306
+ target: 1000,
307
+ details: {
308
+ workerCount,
309
+ avgPerWorker: totalTime / workerCount
310
+ }
311
+ };
312
+ this.results.push(result);
313
+ return result;
314
+ }
315
+ /**
316
+ * Benchmark memory key generation
317
+ */
318
+ async benchmarkMemoryKeyGeneration(iterations = 5000) {
319
+ const triggers = ['ultralearn', 'optimize', 'audit', 'benchmark'];
320
+ const topics = ['auth', 'payment', 'user', 'api', 'database'];
321
+ const phases = ['discovery', 'analysis', 'extraction', 'storage'];
322
+ const latencies = [];
323
+ const memStart = getMemoryUsageMB();
324
+ for (let i = 0; i < iterations; i++) {
325
+ const trigger = triggers[i % triggers.length];
326
+ const topic = topics[i % topics.length];
327
+ const phase = phases[i % phases.length];
328
+ const start = performance.now();
329
+ workerAgentIntegration.generateMemoryKey(trigger, topic, phase);
330
+ latencies.push(performance.now() - start);
331
+ }
332
+ const sorted = [...latencies].sort((a, b) => a - b);
333
+ const memEnd = getMemoryUsageMB();
334
+ const result = {
335
+ name: 'Memory Key Generation',
336
+ operation: 'generateMemoryKey',
337
+ count: iterations,
338
+ totalTimeMs: latencies.reduce((a, b) => a + b, 0),
339
+ avgTimeMs: latencies.reduce((a, b) => a + b, 0) / latencies.length,
340
+ minMs: sorted[0],
341
+ maxMs: sorted[sorted.length - 1],
342
+ p50Ms: calculatePercentile(sorted, 50),
343
+ p95Ms: calculatePercentile(sorted, 95),
344
+ p99Ms: calculatePercentile(sorted, 99),
345
+ throughput: (iterations / (latencies.reduce((a, b) => a + b, 0) / 1000)),
346
+ memoryDeltaMB: memEnd - memStart,
347
+ passed: calculatePercentile(sorted, 95) < 0.1, // Target: p95 < 0.1ms
348
+ target: 0.1,
349
+ details: {
350
+ uniquePatterns: triggers.length * topics.length * phases.length
351
+ }
352
+ };
353
+ this.results.push(result);
354
+ return result;
355
+ }
356
+ /**
357
+ * Run full benchmark suite
358
+ */
359
+ async runFullSuite() {
360
+ this.results = [];
361
+ const startTime = Date.now();
362
+ const memStart = getMemoryUsageMB();
363
+ console.log('\nšŸ“Š Running Worker Benchmark Suite\n');
364
+ console.log('═'.repeat(60));
365
+ // Run all benchmarks
366
+ console.log('\nšŸ” Trigger Detection...');
367
+ await this.benchmarkTriggerDetection();
368
+ console.log('šŸ’¾ Worker Registry...');
369
+ await this.benchmarkRegistryOperations();
370
+ console.log('šŸ¤– Agent Selection...');
371
+ await this.benchmarkAgentSelection();
372
+ console.log('šŸ“¦ Model Cache...');
373
+ await this.benchmarkModelCache();
374
+ console.log('⚔ Concurrent Workers...');
375
+ await this.benchmarkConcurrentWorkers();
376
+ console.log('šŸ”‘ Memory Key Generation...');
377
+ await this.benchmarkMemoryKeyGeneration();
378
+ const totalDuration = Date.now() - startTime;
379
+ const peakMemory = getMemoryUsageMB() - memStart;
380
+ const passed = this.results.filter(r => r.passed).length;
381
+ const avgLatency = this.results.reduce((sum, r) => sum + r.avgTimeMs, 0) / this.results.length;
382
+ const suite = {
383
+ name: 'Worker System Benchmarks',
384
+ description: 'Comprehensive performance tests for agentic-flow worker system',
385
+ timestamp: startTime,
386
+ results: this.results,
387
+ summary: {
388
+ totalTests: this.results.length,
389
+ passed,
390
+ failed: this.results.length - passed,
391
+ avgLatencyMs: avgLatency,
392
+ totalDurationMs: totalDuration,
393
+ peakMemoryMB: peakMemory
394
+ }
395
+ };
396
+ this.printResults(suite);
397
+ return suite;
398
+ }
399
+ /**
400
+ * Print formatted results
401
+ */
402
+ printResults(suite) {
403
+ console.log('\n' + '═'.repeat(60));
404
+ console.log('šŸ“ˆ BENCHMARK RESULTS');
405
+ console.log('═'.repeat(60));
406
+ for (const result of suite.results) {
407
+ const status = result.passed ? 'āœ…' : 'āŒ';
408
+ const target = result.target ? ` (target: ${result.target}ms)` : '';
409
+ console.log(`\n${status} ${result.name}`);
410
+ console.log(` Operation: ${result.operation}`);
411
+ console.log(` Count: ${result.count.toLocaleString()}`);
412
+ console.log(` Avg: ${result.avgTimeMs.toFixed(3)}ms | p95: ${result.p95Ms.toFixed(3)}ms${target}`);
413
+ console.log(` Throughput: ${result.throughput.toFixed(0)} ops/s`);
414
+ console.log(` Memory Ī”: ${result.memoryDeltaMB.toFixed(2)}MB`);
415
+ }
416
+ console.log('\n' + '─'.repeat(60));
417
+ console.log('šŸ“Š SUMMARY');
418
+ console.log('─'.repeat(60));
419
+ console.log(`Total Tests: ${suite.summary.totalTests}`);
420
+ console.log(`Passed: ${suite.summary.passed} | Failed: ${suite.summary.failed}`);
421
+ console.log(`Avg Latency: ${suite.summary.avgLatencyMs.toFixed(3)}ms`);
422
+ console.log(`Total Duration: ${suite.summary.totalDurationMs}ms`);
423
+ console.log(`Peak Memory: ${suite.summary.peakMemoryMB.toFixed(2)}MB`);
424
+ console.log('═'.repeat(60) + '\n');
425
+ }
426
+ /**
427
+ * Get last results
428
+ */
429
+ getResults() {
430
+ return this.results;
431
+ }
432
+ }
433
+ // Singleton instance
434
+ export const workerBenchmarks = new WorkerBenchmarks();
435
+ // ============================================================================
436
+ // CLI Runner
437
+ // ============================================================================
438
+ export async function runBenchmarks() {
439
+ return workerBenchmarks.runFullSuite();
440
+ }
441
+ // Run if executed directly
442
+ if (import.meta.url === `file://${process.argv[1]}`) {
443
+ runBenchmarks()
444
+ .then(suite => {
445
+ process.exit(suite.summary.failed > 0 ? 1 : 0);
446
+ })
447
+ .catch(err => {
448
+ console.error('Benchmark error:', err);
449
+ process.exit(1);
450
+ });
451
+ }
452
+ //# sourceMappingURL=worker-benchmarks.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"worker-benchmarks.js","sourceRoot":"","sources":["../../src/workers/worker-benchmarks.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Worker Benchmark System\n *\n * Comprehensive performance benchmarking for the worker system including:\n * - Dispatch latency measurement\n * - Phase execution timing\n * - Memory tracking\n * - Throughput analysis\n * - Integration with agents\n */\n\nimport { WorkerTrigger, WorkerInfo } from './types.js';\nimport { getWorkerRegistry } from './worker-registry.js';\nimport { workerAgentIntegration } from './worker-agent-integration.js';\nimport { modelCache } from '../utils/model-cache.js';\n\n// ============================================================================\n// Types\n// ============================================================================\n\nexport interface BenchmarkResult {\n name: string;\n operation: string;\n count: number;\n totalTimeMs: number;\n avgTimeMs: number;\n minMs: number;\n maxMs: number;\n p50Ms: number;\n p95Ms: number;\n p99Ms: number;\n throughput: number;\n memoryDeltaMB: number;\n passed: boolean;\n target?: number;\n details?: Record<string, unknown>;\n}\n\nexport interface BenchmarkSuite {\n name: string;\n description: string;\n timestamp: number;\n results: BenchmarkResult[];\n summary: {\n totalTests: number;\n passed: number;\n failed: number;\n avgLatencyMs: number;\n totalDurationMs: number;\n peakMemoryMB: number;\n };\n}\n\nexport interface LatencyBucket {\n range: string;\n count: number;\n percentage: number;\n}\n\n// ============================================================================\n// Benchmark Utilities\n// ============================================================================\n\nfunction calculatePercentile(sorted: number[], percentile: number): number {\n const index = Math.ceil((percentile / 100) * sorted.length) - 1;\n return sorted[Math.max(0, index)] || 0;\n}\n\nfunction getMemoryUsageMB(): number {\n const mem = process.memoryUsage();\n return mem.heapUsed / 1024 / 1024;\n}\n\nfunction createLatencyHistogram(latencies: number[]): LatencyBucket[] {\n const buckets = [\n { max: 1, label: '<1ms' },\n { max: 5, label: '1-5ms' },\n { max: 10, label: '5-10ms' },\n { max: 50, label: '10-50ms' },\n { max: 100, label: '50-100ms' },\n { max: 500, label: '100-500ms' },\n { max: 1000, label: '500ms-1s' },\n { max: Infinity, label: '>1s' }\n ];\n\n const counts = new Array(buckets.length).fill(0);\n\n for (const latency of latencies) {\n for (let i = 0; i < buckets.length; i++) {\n if (latency <= buckets[i].max) {\n counts[i]++;\n break;\n }\n }\n }\n\n return buckets.map((bucket, i) => ({\n range: bucket.label,\n count: counts[i],\n percentage: (counts[i] / latencies.length) * 100\n }));\n}\n\n// ============================================================================\n// Worker Benchmarks\n// ============================================================================\n\nexport class WorkerBenchmarks {\n private results: BenchmarkResult[] = [];\n\n /**\n * Benchmark trigger detection speed\n */\n async benchmarkTriggerDetection(iterations: number = 1000): Promise<BenchmarkResult> {\n const prompts = [\n 'ultralearn the authentication system architecture',\n 'optimize the database query performance',\n 'audit security vulnerabilities in the payment module',\n 'benchmark the API response times',\n 'testgaps in the user module tests',\n 'document the REST API endpoints',\n 'deepdive into the message queue implementation',\n 'refactor the UserService class for better maintainability',\n 'Please help me write some code', // No trigger\n 'How does this function work?' // No trigger\n ];\n\n const latencies: number[] = [];\n const memStart = getMemoryUsageMB();\n\n // Import detector dynamically to avoid circular deps\n const { getTriggerDetector } = await import('./trigger-detector.js');\n const detector = getTriggerDetector();\n\n for (let i = 0; i < iterations; i++) {\n const prompt = prompts[i % prompts.length];\n const start = performance.now();\n detector.detect(prompt);\n latencies.push(performance.now() - start);\n }\n\n const sorted = [...latencies].sort((a, b) => a - b);\n const memEnd = getMemoryUsageMB();\n\n const result: BenchmarkResult = {\n name: 'Trigger Detection',\n operation: 'detect',\n count: iterations,\n totalTimeMs: latencies.reduce((a, b) => a + b, 0),\n avgTimeMs: latencies.reduce((a, b) => a + b, 0) / latencies.length,\n minMs: sorted[0],\n maxMs: sorted[sorted.length - 1],\n p50Ms: calculatePercentile(sorted, 50),\n p95Ms: calculatePercentile(sorted, 95),\n p99Ms: calculatePercentile(sorted, 99),\n throughput: (iterations / (latencies.reduce((a, b) => a + b, 0) / 1000)),\n memoryDeltaMB: memEnd - memStart,\n passed: calculatePercentile(sorted, 95) < 5, // Target: p95 < 5ms\n target: 5,\n details: {\n histogram: createLatencyHistogram(latencies),\n promptsWithTriggers: 8,\n promptsWithoutTriggers: 2\n }\n };\n\n this.results.push(result);\n return result;\n }\n\n /**\n * Benchmark worker registry operations\n */\n async benchmarkRegistryOperations(iterations: number = 500): Promise<BenchmarkResult> {\n const triggers: WorkerTrigger[] = ['ultralearn', 'optimize', 'audit', 'benchmark', 'testgaps'];\n const sessionId = `benchmark-${Date.now()}`;\n\n const createLatencies: number[] = [];\n const getLatencies: number[] = [];\n const updateLatencies: number[] = [];\n const workerIds: string[] = [];\n\n const memStart = getMemoryUsageMB();\n\n // Benchmark creates\n for (let i = 0; i < iterations; i++) {\n const trigger = triggers[i % triggers.length];\n const start = performance.now();\n const workerId = getWorkerRegistry().create(trigger, sessionId, `topic-${i}`);\n createLatencies.push(performance.now() - start);\n workerIds.push(workerId);\n }\n\n // Benchmark gets\n for (const workerId of workerIds) {\n const start = performance.now();\n getWorkerRegistry().get(workerId);\n getLatencies.push(performance.now() - start);\n }\n\n // Benchmark updates\n for (const workerId of workerIds) {\n const start = performance.now();\n getWorkerRegistry().updateStatus(workerId, 'running', { progress: 50 });\n updateLatencies.push(performance.now() - start);\n }\n\n const allLatencies = [...createLatencies, ...getLatencies, ...updateLatencies];\n const sorted = [...allLatencies].sort((a, b) => a - b);\n const memEnd = getMemoryUsageMB();\n\n // Cleanup\n for (const workerId of workerIds) {\n try {\n getWorkerRegistry().updateStatus(workerId, 'complete');\n } catch {\n // Ignore cleanup errors\n }\n }\n\n const result: BenchmarkResult = {\n name: 'Worker Registry',\n operation: 'crud',\n count: allLatencies.length,\n totalTimeMs: allLatencies.reduce((a, b) => a + b, 0),\n avgTimeMs: allLatencies.reduce((a, b) => a + b, 0) / allLatencies.length,\n minMs: sorted[0],\n maxMs: sorted[sorted.length - 1],\n p50Ms: calculatePercentile(sorted, 50),\n p95Ms: calculatePercentile(sorted, 95),\n p99Ms: calculatePercentile(sorted, 99),\n throughput: (allLatencies.length / (allLatencies.reduce((a, b) => a + b, 0) / 1000)),\n memoryDeltaMB: memEnd - memStart,\n passed: calculatePercentile(sorted, 95) < 10, // Target: p95 < 10ms\n target: 10,\n details: {\n createAvgMs: createLatencies.reduce((a, b) => a + b, 0) / createLatencies.length,\n getAvgMs: getLatencies.reduce((a, b) => a + b, 0) / getLatencies.length,\n updateAvgMs: updateLatencies.reduce((a, b) => a + b, 0) / updateLatencies.length\n }\n };\n\n this.results.push(result);\n return result;\n }\n\n /**\n * Benchmark agent selection performance\n */\n async benchmarkAgentSelection(iterations: number = 1000): Promise<BenchmarkResult> {\n const triggers: WorkerTrigger[] = [\n 'ultralearn', 'optimize', 'audit', 'benchmark', 'testgaps',\n 'document', 'deepdive', 'refactor', 'map', 'preload'\n ];\n\n const latencies: number[] = [];\n const memStart = getMemoryUsageMB();\n\n for (let i = 0; i < iterations; i++) {\n const trigger = triggers[i % triggers.length];\n const start = performance.now();\n workerAgentIntegration.selectBestAgent(trigger);\n latencies.push(performance.now() - start);\n }\n\n const sorted = [...latencies].sort((a, b) => a - b);\n const memEnd = getMemoryUsageMB();\n\n const result: BenchmarkResult = {\n name: 'Agent Selection',\n operation: 'selectBestAgent',\n count: iterations,\n totalTimeMs: latencies.reduce((a, b) => a + b, 0),\n avgTimeMs: latencies.reduce((a, b) => a + b, 0) / latencies.length,\n minMs: sorted[0],\n maxMs: sorted[sorted.length - 1],\n p50Ms: calculatePercentile(sorted, 50),\n p95Ms: calculatePercentile(sorted, 95),\n p99Ms: calculatePercentile(sorted, 99),\n throughput: (iterations / (latencies.reduce((a, b) => a + b, 0) / 1000)),\n memoryDeltaMB: memEnd - memStart,\n passed: calculatePercentile(sorted, 95) < 1, // Target: p95 < 1ms\n target: 1,\n details: {\n triggersPerAgent: triggers.length\n }\n };\n\n this.results.push(result);\n return result;\n }\n\n /**\n * Benchmark model cache performance\n */\n async benchmarkModelCache(iterations: number = 100): Promise<BenchmarkResult> {\n const latencies: number[] = [];\n const memStart = getMemoryUsageMB();\n\n // Simulate cache operations\n for (let i = 0; i < iterations; i++) {\n const start = performance.now();\n\n // Test cache stats retrieval\n modelCache.getStats();\n\n // Test cache key generation\n const key = `benchmark-model-${i % 10}`;\n modelCache.has(key);\n\n latencies.push(performance.now() - start);\n }\n\n const sorted = [...latencies].sort((a, b) => a - b);\n const memEnd = getMemoryUsageMB();\n const cacheStats = modelCache.getStats();\n\n const result: BenchmarkResult = {\n name: 'Model Cache',\n operation: 'cache-ops',\n count: iterations,\n totalTimeMs: latencies.reduce((a, b) => a + b, 0),\n avgTimeMs: latencies.reduce((a, b) => a + b, 0) / latencies.length,\n minMs: sorted[0],\n maxMs: sorted[sorted.length - 1],\n p50Ms: calculatePercentile(sorted, 50),\n p95Ms: calculatePercentile(sorted, 95),\n p99Ms: calculatePercentile(sorted, 99),\n throughput: (iterations / (latencies.reduce((a, b) => a + b, 0) / 1000)),\n memoryDeltaMB: memEnd - memStart,\n passed: calculatePercentile(sorted, 95) < 0.5, // Target: p95 < 0.5ms\n target: 0.5,\n details: {\n cacheHits: cacheStats.hits,\n cacheMisses: cacheStats.misses,\n cacheHitRate: cacheStats.hitRate,\n cacheSize: cacheStats.size\n }\n };\n\n this.results.push(result);\n return result;\n }\n\n /**\n * Benchmark concurrent worker handling\n */\n async benchmarkConcurrentWorkers(workerCount: number = 10): Promise<BenchmarkResult> {\n const triggers: WorkerTrigger[] = ['ultralearn', 'optimize', 'audit'];\n const sessionId = `concurrent-${Date.now()}`;\n const workerIds: string[] = [];\n\n const memStart = getMemoryUsageMB();\n const startTime = performance.now();\n\n // Create workers concurrently\n const createPromises = Array.from({ length: workerCount }, (_, i) =>\n Promise.resolve().then(() => {\n const trigger = triggers[i % triggers.length];\n return getWorkerRegistry().create(trigger, sessionId, `concurrent-${i}`);\n })\n );\n\n const ids = await Promise.all(createPromises);\n workerIds.push(...ids);\n\n // Simulate concurrent status updates\n const updatePromises = workerIds.map((id, i) =>\n Promise.resolve().then(() => {\n getWorkerRegistry().updateStatus(id, 'running', { progress: i * 10 });\n })\n );\n\n await Promise.all(updatePromises);\n\n const totalTime = performance.now() - startTime;\n const memEnd = getMemoryUsageMB();\n\n // Cleanup\n for (const workerId of workerIds) {\n try {\n getWorkerRegistry().updateStatus(workerId, 'complete');\n } catch {\n // Ignore\n }\n }\n\n const result: BenchmarkResult = {\n name: 'Concurrent Workers',\n operation: 'parallel-create-update',\n count: workerCount * 2, // Creates + updates\n totalTimeMs: totalTime,\n avgTimeMs: totalTime / (workerCount * 2),\n minMs: totalTime / (workerCount * 2),\n maxMs: totalTime,\n p50Ms: totalTime / 2,\n p95Ms: totalTime,\n p99Ms: totalTime,\n throughput: ((workerCount * 2) / (totalTime / 1000)),\n memoryDeltaMB: memEnd - memStart,\n passed: totalTime < 1000, // Target: < 1s for all concurrent ops\n target: 1000,\n details: {\n workerCount,\n avgPerWorker: totalTime / workerCount\n }\n };\n\n this.results.push(result);\n return result;\n }\n\n /**\n * Benchmark memory key generation\n */\n async benchmarkMemoryKeyGeneration(iterations: number = 5000): Promise<BenchmarkResult> {\n const triggers: WorkerTrigger[] = ['ultralearn', 'optimize', 'audit', 'benchmark'];\n const topics = ['auth', 'payment', 'user', 'api', 'database'];\n const phases = ['discovery', 'analysis', 'extraction', 'storage'];\n\n const latencies: number[] = [];\n const memStart = getMemoryUsageMB();\n\n for (let i = 0; i < iterations; i++) {\n const trigger = triggers[i % triggers.length];\n const topic = topics[i % topics.length];\n const phase = phases[i % phases.length];\n\n const start = performance.now();\n workerAgentIntegration.generateMemoryKey(trigger, topic, phase);\n latencies.push(performance.now() - start);\n }\n\n const sorted = [...latencies].sort((a, b) => a - b);\n const memEnd = getMemoryUsageMB();\n\n const result: BenchmarkResult = {\n name: 'Memory Key Generation',\n operation: 'generateMemoryKey',\n count: iterations,\n totalTimeMs: latencies.reduce((a, b) => a + b, 0),\n avgTimeMs: latencies.reduce((a, b) => a + b, 0) / latencies.length,\n minMs: sorted[0],\n maxMs: sorted[sorted.length - 1],\n p50Ms: calculatePercentile(sorted, 50),\n p95Ms: calculatePercentile(sorted, 95),\n p99Ms: calculatePercentile(sorted, 99),\n throughput: (iterations / (latencies.reduce((a, b) => a + b, 0) / 1000)),\n memoryDeltaMB: memEnd - memStart,\n passed: calculatePercentile(sorted, 95) < 0.1, // Target: p95 < 0.1ms\n target: 0.1,\n details: {\n uniquePatterns: triggers.length * topics.length * phases.length\n }\n };\n\n this.results.push(result);\n return result;\n }\n\n /**\n * Run full benchmark suite\n */\n async runFullSuite(): Promise<BenchmarkSuite> {\n this.results = [];\n const startTime = Date.now();\n const memStart = getMemoryUsageMB();\n\n console.log('\\nšŸ“Š Running Worker Benchmark Suite\\n');\n console.log('═'.repeat(60));\n\n // Run all benchmarks\n console.log('\\nšŸ” Trigger Detection...');\n await this.benchmarkTriggerDetection();\n\n console.log('šŸ’¾ Worker Registry...');\n await this.benchmarkRegistryOperations();\n\n console.log('šŸ¤– Agent Selection...');\n await this.benchmarkAgentSelection();\n\n console.log('šŸ“¦ Model Cache...');\n await this.benchmarkModelCache();\n\n console.log('⚔ Concurrent Workers...');\n await this.benchmarkConcurrentWorkers();\n\n console.log('šŸ”‘ Memory Key Generation...');\n await this.benchmarkMemoryKeyGeneration();\n\n const totalDuration = Date.now() - startTime;\n const peakMemory = getMemoryUsageMB() - memStart;\n\n const passed = this.results.filter(r => r.passed).length;\n const avgLatency = this.results.reduce((sum, r) => sum + r.avgTimeMs, 0) / this.results.length;\n\n const suite: BenchmarkSuite = {\n name: 'Worker System Benchmarks',\n description: 'Comprehensive performance tests for agentic-flow worker system',\n timestamp: startTime,\n results: this.results,\n summary: {\n totalTests: this.results.length,\n passed,\n failed: this.results.length - passed,\n avgLatencyMs: avgLatency,\n totalDurationMs: totalDuration,\n peakMemoryMB: peakMemory\n }\n };\n\n this.printResults(suite);\n return suite;\n }\n\n /**\n * Print formatted results\n */\n private printResults(suite: BenchmarkSuite): void {\n console.log('\\n' + '═'.repeat(60));\n console.log('šŸ“ˆ BENCHMARK RESULTS');\n console.log('═'.repeat(60));\n\n for (const result of suite.results) {\n const status = result.passed ? 'āœ…' : 'āŒ';\n const target = result.target ? ` (target: ${result.target}ms)` : '';\n\n console.log(`\\n${status} ${result.name}`);\n console.log(` Operation: ${result.operation}`);\n console.log(` Count: ${result.count.toLocaleString()}`);\n console.log(` Avg: ${result.avgTimeMs.toFixed(3)}ms | p95: ${result.p95Ms.toFixed(3)}ms${target}`);\n console.log(` Throughput: ${result.throughput.toFixed(0)} ops/s`);\n console.log(` Memory Ī”: ${result.memoryDeltaMB.toFixed(2)}MB`);\n }\n\n console.log('\\n' + '─'.repeat(60));\n console.log('šŸ“Š SUMMARY');\n console.log('─'.repeat(60));\n console.log(`Total Tests: ${suite.summary.totalTests}`);\n console.log(`Passed: ${suite.summary.passed} | Failed: ${suite.summary.failed}`);\n console.log(`Avg Latency: ${suite.summary.avgLatencyMs.toFixed(3)}ms`);\n console.log(`Total Duration: ${suite.summary.totalDurationMs}ms`);\n console.log(`Peak Memory: ${suite.summary.peakMemoryMB.toFixed(2)}MB`);\n console.log('═'.repeat(60) + '\\n');\n }\n\n /**\n * Get last results\n */\n getResults(): BenchmarkResult[] {\n return this.results;\n }\n}\n\n// Singleton instance\nexport const workerBenchmarks = new WorkerBenchmarks();\n\n// ============================================================================\n// CLI Runner\n// ============================================================================\n\nexport async function runBenchmarks(): Promise<BenchmarkSuite> {\n return workerBenchmarks.runFullSuite();\n}\n\n// Run if executed directly\nif (import.meta.url === `file://${process.argv[1]}`) {\n runBenchmarks()\n .then(suite => {\n process.exit(suite.summary.failed > 0 ? 1 : 0);\n })\n .catch(err => {\n console.error('Benchmark error:', err);\n process.exit(1);\n });\n}\n"]}
@@ -0,0 +1,85 @@
1
+ /**
2
+ * WorkerRegistry - SQLite-backed persistence for background workers
3
+ *
4
+ * Supports both better-sqlite3 (native) and sql.js (WASM) backends.
5
+ * Automatically falls back to sql.js on Windows or when native fails.
6
+ */
7
+ import { WorkerId, WorkerTrigger, WorkerStatus, WorkerInfo, WorkerMetrics } from './types.js';
8
+ export declare class WorkerRegistry {
9
+ private db;
10
+ private initialized;
11
+ private dbBackend;
12
+ private dbPath;
13
+ constructor(dbPath?: string);
14
+ private initializeSync;
15
+ private useMemoryFallback;
16
+ private initialize;
17
+ /**
18
+ * Create a new worker entry
19
+ */
20
+ create(trigger: WorkerTrigger, sessionId: string, topic?: string | null): WorkerId;
21
+ /**
22
+ * Get worker by ID
23
+ */
24
+ get(workerId: WorkerId): WorkerInfo | null;
25
+ /**
26
+ * Update worker status
27
+ */
28
+ updateStatus(workerId: WorkerId, status: WorkerStatus, extra?: {
29
+ progress?: number;
30
+ currentPhase?: string;
31
+ error?: string;
32
+ results?: Record<string, unknown>;
33
+ }): void;
34
+ /**
35
+ * Increment memory deposits counter
36
+ */
37
+ incrementMemoryDeposits(workerId: WorkerId, key?: string): void;
38
+ /**
39
+ * Update worker metrics
40
+ */
41
+ updateMetrics(workerId: WorkerId, metrics: Partial<WorkerMetrics>): void;
42
+ /**
43
+ * Get all workers, optionally filtered
44
+ */
45
+ getAll(options?: {
46
+ sessionId?: string;
47
+ status?: WorkerStatus | WorkerStatus[];
48
+ trigger?: WorkerTrigger;
49
+ limit?: number;
50
+ since?: number;
51
+ }): WorkerInfo[];
52
+ /**
53
+ * Get active workers (queued or running)
54
+ */
55
+ getActive(sessionId?: string): WorkerInfo[];
56
+ /**
57
+ * Count workers by status
58
+ */
59
+ countByStatus(sessionId?: string): Record<WorkerStatus, number>;
60
+ /**
61
+ * Get worker metrics
62
+ */
63
+ getMetrics(workerId: WorkerId): WorkerMetrics | null;
64
+ /**
65
+ * Delete old workers
66
+ */
67
+ cleanup(maxAge?: number): number;
68
+ /**
69
+ * Get aggregated stats for dashboard
70
+ */
71
+ getStats(timeframe?: '1h' | '24h' | '7d'): {
72
+ total: number;
73
+ byStatus: Record<WorkerStatus, number>;
74
+ byTrigger: Record<string, number>;
75
+ avgDuration: number;
76
+ };
77
+ private countByTrigger;
78
+ private rowToWorkerInfo;
79
+ /**
80
+ * Close database connection
81
+ */
82
+ close(): void;
83
+ }
84
+ export declare function getWorkerRegistry(): WorkerRegistry;
85
+ //# sourceMappingURL=worker-registry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"worker-registry.d.ts","sourceRoot":"","sources":["../../src/workers/worker-registry.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAKH,OAAO,EACL,QAAQ,EACR,aAAa,EACb,YAAY,EACZ,UAAU,EACV,aAAa,EACd,MAAM,YAAY,CAAC;AAiHpB,qBAAa,cAAc;IACzB,OAAO,CAAC,EAAE,CAAa;IACvB,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,SAAS,CAAoD;IACrE,OAAO,CAAC,MAAM,CAAS;gBAEX,MAAM,CAAC,EAAE,MAAM;IAU3B,OAAO,CAAC,cAAc;IA8CtB,OAAO,CAAC,iBAAiB;IAgCzB,OAAO,CAAC,UAAU;IA8ClB;;OAEG;IACH,MAAM,CACJ,OAAO,EAAE,aAAa,EACtB,SAAS,EAAE,MAAM,EACjB,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,GACpB,QAAQ;IAoBX;;OAEG;IACH,GAAG,CAAC,QAAQ,EAAE,QAAQ,GAAG,UAAU,GAAG,IAAI;IAW1C;;OAEG;IACH,YAAY,CACV,QAAQ,EAAE,QAAQ,EAClB,MAAM,EAAE,YAAY,EACpB,KAAK,CAAC,EAAE;QACN,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;KACnC,GACA,IAAI;IA6CP;;OAEG;IACH,uBAAuB,CAAC,QAAQ,EAAE,QAAQ,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI;IAW/D;;OAEG;IACH,aAAa,CAAC,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,CAAC,aAAa,CAAC,GAAG,IAAI;IA0CxE;;OAEG;IACH,MAAM,CAAC,OAAO,CAAC,EAAE;QACf,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,MAAM,CAAC,EAAE,YAAY,GAAG,YAAY,EAAE,CAAC;QACvC,OAAO,CAAC,EAAE,aAAa,CAAC;QACxB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,KAAK,CAAC,EAAE,MAAM,CAAC;KAChB,GAAG,UAAU,EAAE;IA8ChB;;OAEG;IACH,SAAS,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,UAAU,EAAE;IAO3C;;OAEG;IACH,aAAa,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC,YAAY,EAAE,MAAM,CAAC;IAiC/D;;OAEG;IACH,UAAU,CAAC,QAAQ,EAAE,QAAQ,GAAG,aAAa,GAAG,IAAI;IAmBpD;;OAEG;IACH,OAAO,CAAC,MAAM,GAAE,MAA4B,GAAG,MAAM;IAYrD;;OAEG;IACH,QAAQ,CAAC,SAAS,GAAE,IAAI,GAAG,KAAK,GAAG,IAAY,GAAG;QAChD,KAAK,EAAE,MAAM,CAAC;QACd,QAAQ,EAAE,MAAM,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC;QACvC,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAClC,WAAW,EAAE,MAAM,CAAC;KACrB;IAyBD,OAAO,CAAC,cAAc;IAkBtB,OAAO,CAAC,eAAe;IA6BvB;;OAEG;IACH,KAAK,IAAI,IAAI;CAGd;AAKD,wBAAgB,iBAAiB,IAAI,cAAc,CAKlD"}