@crownpeak/dqm-react-component-dev-mcp 1.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (444) hide show
  1. package/README.md +138 -0
  2. package/data/.env.example +22 -0
  3. package/data/.gitattributes +47 -0
  4. package/data/.glfrc.json +7 -0
  5. package/data/.husky/pre-commit +5 -0
  6. package/data/.nvmrc +1 -0
  7. package/data/CHANGELOG.md +75 -0
  8. package/data/CODE_OF_CONDUCT.md +129 -0
  9. package/data/CONTRIBUTING.md +203 -0
  10. package/data/DOCS-STRUCTURE.md +307 -0
  11. package/data/I18N.md +292 -0
  12. package/data/LICENSE +22 -0
  13. package/data/README.md +315 -0
  14. package/data/SECURITY.md +125 -0
  15. package/data/WIKI-DEPLOYMENT.md +348 -0
  16. package/data/docs/AI-FEATURES.md +610 -0
  17. package/data/docs/API-REFERENCE.md +1022 -0
  18. package/data/docs/AUTHENTICATION.md +301 -0
  19. package/data/docs/BACKEND-API.md +468 -0
  20. package/data/docs/DEVELOPMENT.md +375 -0
  21. package/data/docs/EXAMPLES.md +622 -0
  22. package/data/docs/MCP-SERVER.md +307 -0
  23. package/data/docs/MIGRATION-GUIDE.md +367 -0
  24. package/data/docs/NPM-PUBLISH.md +193 -0
  25. package/data/docs/QUICKSTART.md +206 -0
  26. package/data/docs/REDIS-SETUP.md +162 -0
  27. package/data/docs/SERVER.md +228 -0
  28. package/data/docs/TROUBLESHOOTING.md +657 -0
  29. package/data/docs/WIDGET-GUIDE.md +638 -0
  30. package/data/docs/WIKI-HOME.md +58 -0
  31. package/data/docs/WIKI-SIDEBAR.md +39 -0
  32. package/data/package.json +171 -0
  33. package/data/playwright.config.ts +64 -0
  34. package/data/probe/.cargo/config.toml +10 -0
  35. package/data/probe/.claude/commands/performance-review.md +15 -0
  36. package/data/probe/.clinerules +288 -0
  37. package/data/probe/.dockerignore +57 -0
  38. package/data/probe/.githooks/post-commit +11 -0
  39. package/data/probe/.githooks/pre-commit +99 -0
  40. package/data/probe/.githooks/pre-commit-vow +9 -0
  41. package/data/probe/.prompts/engineer.md +41 -0
  42. package/data/probe/.roomodes +28 -0
  43. package/data/probe/.windsurfrules +0 -0
  44. package/data/probe/BASH_TOOL_SUMMARY.md +148 -0
  45. package/data/probe/BENCHMARKING.md +256 -0
  46. package/data/probe/CLAUDE.md +226 -0
  47. package/data/probe/CODE_OF_CONDUCT.md +128 -0
  48. package/data/probe/CONTRIBUTING.md +193 -0
  49. package/data/probe/Cargo.toml +120 -0
  50. package/data/probe/Cross.toml +10 -0
  51. package/data/probe/DOCKER-README.md +224 -0
  52. package/data/probe/Dockerfile +32 -0
  53. package/data/probe/ENHANCED_DEBUG_TELEMETRY.md +188 -0
  54. package/data/probe/LICENSE +201 -0
  55. package/data/probe/Makefile +210 -0
  56. package/data/probe/README.md +824 -0
  57. package/data/probe/SECURITY.md +67 -0
  58. package/data/probe/WINDOWS-GUIDE.md +294 -0
  59. package/data/probe/benches/parsing_benchmarks.rs +370 -0
  60. package/data/probe/benches/search_benchmarks.rs +599 -0
  61. package/data/probe/benches/simd_benchmarks.rs +372 -0
  62. package/data/probe/benches/timing_benchmarks.rs +287 -0
  63. package/data/probe/build-windows.bat +229 -0
  64. package/data/probe/codex-config/config.toml +6 -0
  65. package/data/probe/docs/PERFORMANCE_OPTIMIZATION.md +161 -0
  66. package/data/probe/examples/cache_demo.rs +46 -0
  67. package/data/probe/examples/chat/.dockerignore +37 -0
  68. package/data/probe/examples/chat/ChatSessionManager.js +295 -0
  69. package/data/probe/examples/chat/Dockerfile +98 -0
  70. package/data/probe/examples/chat/LICENSE +201 -0
  71. package/data/probe/examples/chat/LOCAL_IMAGE_SUPPORT.md +195 -0
  72. package/data/probe/examples/chat/MCP_INTEGRATION.md +400 -0
  73. package/data/probe/examples/chat/README.md +338 -0
  74. package/data/probe/examples/chat/TRACING.md +226 -0
  75. package/data/probe/examples/chat/appTracer.js +968 -0
  76. package/data/probe/examples/chat/auth.js +76 -0
  77. package/data/probe/examples/chat/bin/probe-chat.js +13 -0
  78. package/data/probe/examples/chat/build.js +104 -0
  79. package/data/probe/examples/chat/cancelRequest.js +84 -0
  80. package/data/probe/examples/chat/demo-agentic-image-flow.js +88 -0
  81. package/data/probe/examples/chat/demo-local-images.js +128 -0
  82. package/data/probe/examples/chat/fileSpanExporter.js +181 -0
  83. package/data/probe/examples/chat/implement/README.md +228 -0
  84. package/data/probe/examples/chat/implement/backends/AiderBackend.js +750 -0
  85. package/data/probe/examples/chat/implement/backends/BaseBackend.js +276 -0
  86. package/data/probe/examples/chat/implement/backends/ClaudeCodeBackend.js +767 -0
  87. package/data/probe/examples/chat/implement/backends/MockBackend.js +237 -0
  88. package/data/probe/examples/chat/implement/backends/registry.js +85 -0
  89. package/data/probe/examples/chat/implement/core/BackendManager.js +567 -0
  90. package/data/probe/examples/chat/implement/core/ImplementTool.js +354 -0
  91. package/data/probe/examples/chat/implement/core/config.js +428 -0
  92. package/data/probe/examples/chat/implement/core/timeouts.js +58 -0
  93. package/data/probe/examples/chat/implement/core/utils.js +496 -0
  94. package/data/probe/examples/chat/implement/types/BackendTypes.js +126 -0
  95. package/data/probe/examples/chat/index.js +669 -0
  96. package/data/probe/examples/chat/mcpServer.js +341 -0
  97. package/data/probe/examples/chat/npm/LICENSE +15 -0
  98. package/data/probe/examples/chat/npm/README.md +168 -0
  99. package/data/probe/examples/chat/npm/bin/probe-chat.js +156 -0
  100. package/data/probe/examples/chat/npm/index.js +259 -0
  101. package/data/probe/examples/chat/npm/package.json +54 -0
  102. package/data/probe/examples/chat/package.json +102 -0
  103. package/data/probe/examples/chat/probeChat.js +456 -0
  104. package/data/probe/examples/chat/probeTool.js +491 -0
  105. package/data/probe/examples/chat/storage/JsonChatStorage.js +476 -0
  106. package/data/probe/examples/chat/telemetry.js +281 -0
  107. package/data/probe/examples/chat/test/integration/chatFlows.test.js +320 -0
  108. package/data/probe/examples/chat/test/integration/toolCalling.test.js +471 -0
  109. package/data/probe/examples/chat/test/mocks/mockLLMProvider.js +269 -0
  110. package/data/probe/examples/chat/test/test-backends.js +90 -0
  111. package/data/probe/examples/chat/test/testUtils.js +530 -0
  112. package/data/probe/examples/chat/test/unit/backendTimeout.test.js +161 -0
  113. package/data/probe/examples/chat/test/unit/packageFiles.test.js +120 -0
  114. package/data/probe/examples/chat/test/verify-tests.js +118 -0
  115. package/data/probe/examples/chat/test-agentic-image-loading.js +294 -0
  116. package/data/probe/examples/chat/test-ai-sdk-telemetry.js +204 -0
  117. package/data/probe/examples/chat/test-chat-tracing.js +38 -0
  118. package/data/probe/examples/chat/test-direct-function.js +49 -0
  119. package/data/probe/examples/chat/test-file-size-validation.js +103 -0
  120. package/data/probe/examples/chat/test-full-mcp-integration.js +258 -0
  121. package/data/probe/examples/chat/test-github-context.txt +12 -0
  122. package/data/probe/examples/chat/test-hierarchy.js +203 -0
  123. package/data/probe/examples/chat/test-image-spans.js +37 -0
  124. package/data/probe/examples/chat/test-local-image-reading.js +176 -0
  125. package/data/probe/examples/chat/test-mcp-integration.js +136 -0
  126. package/data/probe/examples/chat/test-mcp-probe-server.js +161 -0
  127. package/data/probe/examples/chat/test-mcp-with-ai.js +279 -0
  128. package/data/probe/examples/chat/test-multiple-allowed-dirs.js +111 -0
  129. package/data/probe/examples/chat/test-probe-mcp-server.js +110 -0
  130. package/data/probe/examples/chat/test-security-validation.js +145 -0
  131. package/data/probe/examples/chat/test-simple-tracing.js +32 -0
  132. package/data/probe/examples/chat/test-trace-verification.js +235 -0
  133. package/data/probe/examples/chat/test-tracing.js +114 -0
  134. package/data/probe/examples/chat/tokenCounter.js +419 -0
  135. package/data/probe/examples/chat/tokenUsageDisplay.js +134 -0
  136. package/data/probe/examples/chat/webServer.js +1103 -0
  137. package/data/probe/examples/reranker/Cargo.toml +33 -0
  138. package/data/probe/examples/reranker/DEBUG_OUTPUT_ANALYSIS.md +71 -0
  139. package/data/probe/examples/reranker/MODELS.md +66 -0
  140. package/data/probe/examples/reranker/MODEL_COMPARISON.md +60 -0
  141. package/data/probe/examples/reranker/MULTI_MODEL_ANALYSIS.md +176 -0
  142. package/data/probe/examples/reranker/PERFORMANCE_SUMMARY.md +156 -0
  143. package/data/probe/examples/reranker/README.md +347 -0
  144. package/data/probe/examples/reranker/RUST_BERT_COMPARISON.md +82 -0
  145. package/data/probe/examples/reranker/TOKENIZATION_GUIDE.md +120 -0
  146. package/data/probe/examples/reranker/check_rust_tokenizer.py +108 -0
  147. package/data/probe/examples/reranker/convert_to_torchscript.py +109 -0
  148. package/data/probe/examples/reranker/debug_scoring.py +189 -0
  149. package/data/probe/examples/reranker/debug_tokenization.py +154 -0
  150. package/data/probe/examples/reranker/download_models.sh +73 -0
  151. package/data/probe/examples/reranker/requirements.txt +13 -0
  152. package/data/probe/examples/reranker/run_comprehensive_benchmark.sh +83 -0
  153. package/data/probe/examples/reranker/rust_bert_test/Cargo.toml +12 -0
  154. package/data/probe/examples/reranker/rust_bert_test/README.md +54 -0
  155. package/data/probe/examples/reranker/simple_test.py +50 -0
  156. package/data/probe/examples/reranker/test_all_models.sh +63 -0
  157. package/data/probe/examples/reranker/test_bert_results.sh +44 -0
  158. package/data/probe/examples/reranker/test_cross_encoder.py +334 -0
  159. package/data/probe/examples/reranker/test_cross_encoder.sh +80 -0
  160. package/data/probe/examples/reranker/test_exact_comparison.py +151 -0
  161. package/data/probe/examples/reranker/test_parallel_performance.sh +56 -0
  162. package/data/probe/examples/reranker/test_scores.py +132 -0
  163. package/data/probe/install.ps1 +508 -0
  164. package/data/probe/install.sh +460 -0
  165. package/data/probe/npm/CLONE_METHOD_EXAMPLES.md +596 -0
  166. package/data/probe/npm/CONTEXT_COMPACTION.md +303 -0
  167. package/data/probe/npm/DELEGATE_TOOL_README.md +166 -0
  168. package/data/probe/npm/MAID_INTEGRATION.md +313 -0
  169. package/data/probe/npm/MCP_INTEGRATION_SUMMARY.md +241 -0
  170. package/data/probe/npm/README.md +824 -0
  171. package/data/probe/npm/bin/.gitignore +7 -0
  172. package/data/probe/npm/bin/.gitkeep +0 -0
  173. package/data/probe/npm/bin/README.md +12 -0
  174. package/data/probe/npm/bin/probe +167 -0
  175. package/data/probe/npm/docs/CLAUDE_CODE_INTEGRATION.md +414 -0
  176. package/data/probe/npm/docs/CODEX_INTEGRATION.md +502 -0
  177. package/data/probe/npm/docs/EDIT_CREATE_TOOLS.md +233 -0
  178. package/data/probe/npm/docs/RETRY_AND_FALLBACK.md +674 -0
  179. package/data/probe/npm/example-usage.js +335 -0
  180. package/data/probe/npm/examples/multi-engine-demo.js +117 -0
  181. package/data/probe/npm/examples/probe-agent-cli.js +113 -0
  182. package/data/probe/npm/examples/test-agent-edit.js +114 -0
  183. package/data/probe/npm/examples/test-edit-create.js +120 -0
  184. package/data/probe/npm/examples/test-edit-direct.js +114 -0
  185. package/data/probe/npm/index.d.ts +744 -0
  186. package/data/probe/npm/jest.config.js +52 -0
  187. package/data/probe/npm/package.json +117 -0
  188. package/data/probe/npm/scripts/build-agent.cjs +75 -0
  189. package/data/probe/npm/scripts/build-cjs.js +124 -0
  190. package/data/probe/npm/scripts/build-mcp.cjs +36 -0
  191. package/data/probe/npm/scripts/postinstall.js +216 -0
  192. package/data/probe/npm/test-codex-e2e.js +78 -0
  193. package/data/probe/npm/test-download-lock.js +109 -0
  194. package/data/probe/npm/test-grep-security.js +94 -0
  195. package/data/probe/npm/test-grep-simplified.js +63 -0
  196. package/data/probe/npm/test-grep.js +51 -0
  197. package/data/probe/npm/tests/README.md +96 -0
  198. package/data/probe/npm/tests/agent-compact-history.test.js +174 -0
  199. package/data/probe/npm/tests/allow-tests-default.test.js +151 -0
  200. package/data/probe/npm/tests/contextCompactor.test.js +498 -0
  201. package/data/probe/npm/tests/delegate-config.test.js +353 -0
  202. package/data/probe/npm/tests/delegate-integration.test.js +348 -0
  203. package/data/probe/npm/tests/extractor-integration.test.js +162 -0
  204. package/data/probe/npm/tests/extractor.test.js +317 -0
  205. package/data/probe/npm/tests/fixtures/sampleDiagrams.js +267 -0
  206. package/data/probe/npm/tests/integration/claude-code-auto-fallback.spec.js +148 -0
  207. package/data/probe/npm/tests/integration/claude-code-multi-step.spec.js +127 -0
  208. package/data/probe/npm/tests/integration/claude-code-tool-events.spec.js +163 -0
  209. package/data/probe/npm/tests/integration/codex-auto-fallback.spec.js +191 -0
  210. package/data/probe/npm/tests/integration/codex-tool-events.spec.js +147 -0
  211. package/data/probe/npm/tests/integration/examplesChatMcp.test.js +402 -0
  212. package/data/probe/npm/tests/integration/mcpDotenvSupport.test.js +174 -0
  213. package/data/probe/npm/tests/integration/mcpErrorHandling.test.js +566 -0
  214. package/data/probe/npm/tests/integration/mcpRobustness.test.js +564 -0
  215. package/data/probe/npm/tests/integration/mcpStdoutPurity.test.js +355 -0
  216. package/data/probe/npm/tests/integration/probeAgentMcp.test.js +398 -0
  217. package/data/probe/npm/tests/integration/retryFallback.test.js +368 -0
  218. package/data/probe/npm/tests/integration/schema-in-initial-message.test.js +318 -0
  219. package/data/probe/npm/tests/integration/schema-validation-loop-prevention.test.js +244 -0
  220. package/data/probe/npm/tests/integration/schemaRetryLogic.test.js +94 -0
  221. package/data/probe/npm/tests/integration/validationFlow.test.js +329 -0
  222. package/data/probe/npm/tests/manual/test-codex-basic.js +110 -0
  223. package/data/probe/npm/tests/mcp/mcpClientManager.test.js +614 -0
  224. package/data/probe/npm/tests/mcp/mcpConfig.test.js +359 -0
  225. package/data/probe/npm/tests/mcp/mcpXmlBridge.test.js +436 -0
  226. package/data/probe/npm/tests/mcp/mockMcpServer.js +510 -0
  227. package/data/probe/npm/tests/mcp-strict-syntax.test.js +319 -0
  228. package/data/probe/npm/tests/mermaidQuoteEscaping.test.js +214 -0
  229. package/data/probe/npm/tests/nestedQuoteFix.test.js +40 -0
  230. package/data/probe/npm/tests/setup.js +46 -0
  231. package/data/probe/npm/tests/unit/allowed-tools.test.js +513 -0
  232. package/data/probe/npm/tests/unit/attempt-completion-closing-tag-in-content.test.js +188 -0
  233. package/data/probe/npm/tests/unit/attemptCompletionJsonFix.test.js +238 -0
  234. package/data/probe/npm/tests/unit/attemptCompletionJsonIssue.test.js +128 -0
  235. package/data/probe/npm/tests/unit/backtickAutoFix.test.js +35 -0
  236. package/data/probe/npm/tests/unit/bash-probe-agent-integration.test.js +389 -0
  237. package/data/probe/npm/tests/unit/bash-simple-commands.test.js +324 -0
  238. package/data/probe/npm/tests/unit/bash-tool-comprehensive.test.js +371 -0
  239. package/data/probe/npm/tests/unit/bash-tool-integration.test.js +310 -0
  240. package/data/probe/npm/tests/unit/bash-tool.test.js +341 -0
  241. package/data/probe/npm/tests/unit/completion-prompt.test.js +379 -0
  242. package/data/probe/npm/tests/unit/cwd-path-options.test.js +287 -0
  243. package/data/probe/npm/tests/unit/delegate-limits.test.js +422 -0
  244. package/data/probe/npm/tests/unit/direct-content-attempt-completion.test.js +235 -0
  245. package/data/probe/npm/tests/unit/edit-create-tools.test.js +609 -0
  246. package/data/probe/npm/tests/unit/enhancedMermaidValidation.test.js +577 -0
  247. package/data/probe/npm/tests/unit/extract-content.test.js +83 -0
  248. package/data/probe/npm/tests/unit/extract-multiple-targets.test.js +89 -0
  249. package/data/probe/npm/tests/unit/fallbackManager.test.js +442 -0
  250. package/data/probe/npm/tests/unit/githubCompatibilityValidation.test.js +258 -0
  251. package/data/probe/npm/tests/unit/imageConfig.test.js +149 -0
  252. package/data/probe/npm/tests/unit/imagePathResolution.test.js +345 -0
  253. package/data/probe/npm/tests/unit/json-fixing-agent.test.js +238 -0
  254. package/data/probe/npm/tests/unit/json-validation-enhanced-errors.test.js +199 -0
  255. package/data/probe/npm/tests/unit/jsonValidationInfiniteLoopFix.test.js +228 -0
  256. package/data/probe/npm/tests/unit/maidIntegration.test.js +139 -0
  257. package/data/probe/npm/tests/unit/maxIterationsWarning.test.js +195 -0
  258. package/data/probe/npm/tests/unit/mermaidEdgeLabelFix.test.js +161 -0
  259. package/data/probe/npm/tests/unit/mermaidHtmlEntities.test.js +76 -0
  260. package/data/probe/npm/tests/unit/mermaidInfiniteLoopFix.test.js +64 -0
  261. package/data/probe/npm/tests/unit/mermaidValidation.test.js +723 -0
  262. package/data/probe/npm/tests/unit/mermaidValidationVisorExample.test.js +309 -0
  263. package/data/probe/npm/tests/unit/probe-agent-clone-realistic.test.js +643 -0
  264. package/data/probe/npm/tests/unit/probe-agent-clone.test.js +476 -0
  265. package/data/probe/npm/tests/unit/probe-agent-delegate.test.js +400 -0
  266. package/data/probe/npm/tests/unit/probe-agent-model-option.test.js +118 -0
  267. package/data/probe/npm/tests/unit/probeTool-security.test.js +283 -0
  268. package/data/probe/npm/tests/unit/readImageTool.test.js +418 -0
  269. package/data/probe/npm/tests/unit/retryManager.test.js +317 -0
  270. package/data/probe/npm/tests/unit/schema-aware-reminders.test.js +288 -0
  271. package/data/probe/npm/tests/unit/schemaDefinitionDetection.test.js +115 -0
  272. package/data/probe/npm/tests/unit/schemaUtils.test.js +1268 -0
  273. package/data/probe/npm/tests/unit/simpleTelemetry.test.js +282 -0
  274. package/data/probe/npm/tests/unit/simplified-attempt-completion.test.js +274 -0
  275. package/data/probe/npm/tests/unit/single-quote-json-bug.test.js +231 -0
  276. package/data/probe/npm/tests/unit/subgraphAutoFix.test.js +110 -0
  277. package/data/probe/npm/tests/unit/system-prompt.test.js +32 -0
  278. package/data/probe/npm/tests/unit/types-probe-agent-options.test.js +42 -0
  279. package/data/probe/npm/tests/unit/xmlParsing.test.js +720 -0
  280. package/data/probe/npm/tsconfig.json +21 -0
  281. package/data/probe/result1.txt +19 -0
  282. package/data/probe/result2.txt +26 -0
  283. package/data/probe/scripts/benchmark.sh +270 -0
  284. package/data/probe/scripts/cache_memory_analysis.rs +844 -0
  285. package/data/probe/scripts/claude-hook-wrapper.sh +56 -0
  286. package/data/probe/site/.env.example +10 -0
  287. package/data/probe/site/DEPLOYMENT.md +86 -0
  288. package/data/probe/site/README.md +183 -0
  289. package/data/probe/site/adding-languages.md +135 -0
  290. package/data/probe/site/ai-chat.md +427 -0
  291. package/data/probe/site/ai-integration.md +1488 -0
  292. package/data/probe/site/blog/agentic-flow-custom-xml-protocol.md +407 -0
  293. package/data/probe/site/blog/index.md +118 -0
  294. package/data/probe/site/blog/v0.6.0-release.md +426 -0
  295. package/data/probe/site/blog.md +8 -0
  296. package/data/probe/site/changelog.md +200 -0
  297. package/data/probe/site/cli-mode.md +437 -0
  298. package/data/probe/site/code-extraction.md +436 -0
  299. package/data/probe/site/contributing/README.md +9 -0
  300. package/data/probe/site/contributing/documentation-cross-references.md +215 -0
  301. package/data/probe/site/contributing/documentation-maintenance.md +275 -0
  302. package/data/probe/site/contributing/documentation-structure.md +75 -0
  303. package/data/probe/site/documentation-cross-references.md +215 -0
  304. package/data/probe/site/documentation-guide.md +132 -0
  305. package/data/probe/site/documentation-maintenance.md +275 -0
  306. package/data/probe/site/features.md +147 -0
  307. package/data/probe/site/how-it-works.md +118 -0
  308. package/data/probe/site/index.md +175 -0
  309. package/data/probe/site/index.md.bak +133 -0
  310. package/data/probe/site/installation.md +235 -0
  311. package/data/probe/site/integrations/docker.md +248 -0
  312. package/data/probe/site/integrations/github-actions.md +413 -0
  313. package/data/probe/site/language-support-overview.md +168 -0
  314. package/data/probe/site/mcp-integration.md +587 -0
  315. package/data/probe/site/mcp-server.md +304 -0
  316. package/data/probe/site/navigation-structure.md +76 -0
  317. package/data/probe/site/nodejs-sdk.md +798 -0
  318. package/data/probe/site/output-formats.md +625 -0
  319. package/data/probe/site/package.json +21 -0
  320. package/data/probe/site/public/_headers +28 -0
  321. package/data/probe/site/public/_redirects +11 -0
  322. package/data/probe/site/quick-start.md +289 -0
  323. package/data/probe/site/search-functionality.md +291 -0
  324. package/data/probe/site/search-reference.md +291 -0
  325. package/data/probe/site/supported-languages.md +215 -0
  326. package/data/probe/site/use-cases/README.md +8 -0
  327. package/data/probe/site/use-cases/advanced-cli.md +253 -0
  328. package/data/probe/site/use-cases/ai-code-editors.md +239 -0
  329. package/data/probe/site/use-cases/building-ai-tools.md +529 -0
  330. package/data/probe/site/use-cases/cli-ai-workflows.md +285 -0
  331. package/data/probe/site/use-cases/deploying-probe-web-interface.md +255 -0
  332. package/data/probe/site/use-cases/integrating-probe-into-ai-code-editors.md +161 -0
  333. package/data/probe/site/use-cases/nodejs-sdk.md +596 -0
  334. package/data/probe/site/use-cases/team-chat.md +350 -0
  335. package/data/probe/site/web-interface.md +434 -0
  336. package/data/probe/site/wrangler.toml +9 -0
  337. package/data/probe/test-api-key.sh +1 -0
  338. package/data/probe/test-probe-implementation/hello.js +7 -0
  339. package/data/probe/test_cases/demonstrate_early_termination_issues.sh +176 -0
  340. package/data/probe/test_cases/early_termination_issues.rs +533 -0
  341. package/data/probe/test_data/test_nested_struct.go +26 -0
  342. package/data/probe/tests/README.md +286 -0
  343. package/data/probe/tests/README_search_determinism_tests.md +116 -0
  344. package/data/probe/tests/adjacent_comment_test.rs +152 -0
  345. package/data/probe/tests/apostrophe_handling_tests.rs +132 -0
  346. package/data/probe/tests/block_filtering_with_ast_tests.rs +669 -0
  347. package/data/probe/tests/block_merging_tests.rs +396 -0
  348. package/data/probe/tests/c_outline_format_tests.rs +2179 -0
  349. package/data/probe/tests/cache_invalidation_issues.rs.disabled +682 -0
  350. package/data/probe/tests/cache_order_tests.rs +147 -0
  351. package/data/probe/tests/cache_query_scoping_tests.rs +221 -0
  352. package/data/probe/tests/cli_tests.rs +680 -0
  353. package/data/probe/tests/comment_context_integration_test.rs +240 -0
  354. package/data/probe/tests/common.rs +33 -0
  355. package/data/probe/tests/complex_block_merging_tests.rs +599 -0
  356. package/data/probe/tests/complex_query_block_filtering_tests.rs +422 -0
  357. package/data/probe/tests/control_flow_closing_braces_test.rs +91 -0
  358. package/data/probe/tests/cpp_outline_format_tests.rs +1507 -0
  359. package/data/probe/tests/csharp_outline_format_tests.rs +941 -0
  360. package/data/probe/tests/elastic_query_integration_tests.rs +922 -0
  361. package/data/probe/tests/extract_command_tests.rs +1848 -0
  362. package/data/probe/tests/extract_deduplication_tests.rs +146 -0
  363. package/data/probe/tests/extract_input_file_tests.rs +84 -0
  364. package/data/probe/tests/extract_prompt_tests.rs +102 -0
  365. package/data/probe/tests/filename_search_tests.rs +96 -0
  366. package/data/probe/tests/fixtures/user/AssemblyInfo.cs +3 -0
  367. package/data/probe/tests/github_extract_tests.rs +234 -0
  368. package/data/probe/tests/go_comment_test.rs +253 -0
  369. package/data/probe/tests/go_outline_format_tests.rs +2587 -0
  370. package/data/probe/tests/go_path_resolver_tests.rs +96 -0
  371. package/data/probe/tests/html_outline_format_tests.rs +637 -0
  372. package/data/probe/tests/integration_tests.rs +837 -0
  373. package/data/probe/tests/ip_whitelist_test.rs +148 -0
  374. package/data/probe/tests/java_outline_format_tests.rs +1611 -0
  375. package/data/probe/tests/javascript_extract_tests.rs +315 -0
  376. package/data/probe/tests/javascript_outline_format_tests.rs +1464 -0
  377. package/data/probe/tests/json_format_tests.rs +436 -0
  378. package/data/probe/tests/json_schema_validation_tests.rs +450 -0
  379. package/data/probe/tests/lib_usage.rs +60 -0
  380. package/data/probe/tests/line_comment_context_extension_test.rs +459 -0
  381. package/data/probe/tests/line_map_cache_tests.rs +114 -0
  382. package/data/probe/tests/markdown_integration_tests.rs +190 -0
  383. package/data/probe/tests/mocks/test_ip_whitelist.go +11 -0
  384. package/data/probe/tests/mocks/test_object.js +27 -0
  385. package/data/probe/tests/mocks/test_struct.go +50 -0
  386. package/data/probe/tests/multi_keyword_pattern_tests.rs +464 -0
  387. package/data/probe/tests/multi_language_syntax_integration_tests.rs +218 -0
  388. package/data/probe/tests/multiple_capture_groups_tests.rs +169 -0
  389. package/data/probe/tests/negative_compound_word_tests.rs +246 -0
  390. package/data/probe/tests/nested_symbol_extraction_tests.rs +99 -0
  391. package/data/probe/tests/outline_cross_file_interference_test.rs +335 -0
  392. package/data/probe/tests/outline_keyword_preservation_test.rs +67 -0
  393. package/data/probe/tests/output_format_edge_cases_tests.rs +693 -0
  394. package/data/probe/tests/parallel_extraction_tests.rs +178 -0
  395. package/data/probe/tests/parallel_search_tests.rs +355 -0
  396. package/data/probe/tests/path_resolver_tests.rs +698 -0
  397. package/data/probe/tests/php_outline_format_extended_tests.rs +928 -0
  398. package/data/probe/tests/php_outline_format_tests.rs +768 -0
  399. package/data/probe/tests/property_tests.proptest-regressions +9 -0
  400. package/data/probe/tests/property_tests.rs +118 -0
  401. package/data/probe/tests/python_outline_format_tests.rs +1538 -0
  402. package/data/probe/tests/query_command_json_tests.rs +438 -0
  403. package/data/probe/tests/query_command_tests.rs +232 -0
  404. package/data/probe/tests/query_command_xml_tests.rs +569 -0
  405. package/data/probe/tests/quoted_term_with_negative_keyword_tests.rs +216 -0
  406. package/data/probe/tests/required_terms_filename_tests.rs +116 -0
  407. package/data/probe/tests/ruby_outline_format_tests.rs +1011 -0
  408. package/data/probe/tests/rust_line_comment_context_test.rs +151 -0
  409. package/data/probe/tests/rust_outline_format_enhanced_tests.rs +725 -0
  410. package/data/probe/tests/rust_outline_format_tests.rs +843 -0
  411. package/data/probe/tests/schemas/xml_output_schema.xsd +38 -0
  412. package/data/probe/tests/search_determinism_tests.rs +451 -0
  413. package/data/probe/tests/search_hints_tests.rs +253 -0
  414. package/data/probe/tests/special_character_escaping_tests.rs +417 -0
  415. package/data/probe/tests/stemming_compound_word_filtering_tests.rs +535 -0
  416. package/data/probe/tests/strict_elastic_syntax_tests.rs +404 -0
  417. package/data/probe/tests/swift_outline_format_tests.rs +3319 -0
  418. package/data/probe/tests/symbols_tests.rs +166 -0
  419. package/data/probe/tests/test_file.rs +45 -0
  420. package/data/probe/tests/test_tokenize.rs +28 -0
  421. package/data/probe/tests/timeout_tests.rs +82 -0
  422. package/data/probe/tests/tokenization_tests.rs +195 -0
  423. package/data/probe/tests/tokenized_block_filtering_tests.rs +174 -0
  424. package/data/probe/tests/typescript_extract_tests.rs +214 -0
  425. package/data/probe/tests/typescript_outline_format_tests.rs +2188 -0
  426. package/data/probe/tests/xml_format_tests.rs +568 -0
  427. package/data/probe/tests/xml_schema_validation_tests.rs +497 -0
  428. package/data/scripts/postinstall.mjs +9 -0
  429. package/data/scripts/set-version.js +0 -0
  430. package/data/scripts/wiki-build.sh +111 -0
  431. package/data/scripts/wiki-deploy.sh +73 -0
  432. package/data/serve.json +12 -0
  433. package/data/test/demo-dynamic.html +134 -0
  434. package/data/test/demo-esm.html +105 -0
  435. package/data/test/demo-iife.html +78 -0
  436. package/data/tsconfig.json +7 -0
  437. package/data/vite.server.ts +483 -0
  438. package/data/vitest.config.ts +40 -0
  439. package/data/wiki/Home.md +58 -0
  440. package/data/wiki/_Sidebar.md +39 -0
  441. package/docs-mcp.config.json +20 -0
  442. package/package.json +56 -0
  443. package/src/config.js +111 -0
  444. package/src/index.js +395 -0
@@ -0,0 +1,564 @@
1
+ /**
2
+ * Robustness tests for MCP integration under stress and edge conditions
3
+ */
4
+
5
+ import { jest } from '@jest/globals';
6
+ import { MCPClientManager } from '../../src/agent/mcp/client.js';
7
+ import { MCPXmlBridge } from '../../src/agent/mcp/xmlBridge.js';
8
+ import { ProbeAgent } from '../../src/agent/ProbeAgent.js';
9
+ import { join, dirname } from 'path';
10
+ import { fileURLToPath } from 'url';
11
+ import { mkdtemp, writeFile, rm } from 'fs/promises';
12
+ import { tmpdir } from 'os';
13
+
14
+ const __filename = fileURLToPath(import.meta.url);
15
+ const __dirname = dirname(__filename);
16
+
17
+ describe('MCP Robustness Tests', () => {
18
+ let tempDir;
19
+
20
+ beforeEach(async () => {
21
+ tempDir = await mkdtemp(join(tmpdir(), 'mcp-robustness-test-'));
22
+ });
23
+
24
+ afterEach(async () => {
25
+ if (tempDir) {
26
+ await rm(tempDir, { recursive: true, force: true });
27
+ }
28
+ // Clean up environment variables
29
+ delete process.env.MCP_CONFIG_PATH;
30
+ delete process.env.ANTHROPIC_API_KEY;
31
+ delete process.env.DEBUG_MCP;
32
+ });
33
+
34
+ describe('High Load Testing', () => {
35
+ test('should handle rapid tool execution requests', async () => {
36
+ const bridge = new MCPXmlBridge({ debug: false });
37
+
38
+ // Mock a fast-responding tool
39
+ bridge.mcpTools = {
40
+ 'fast_tool': {
41
+ execute: async (params) => {
42
+ return `Fast response for: ${params.input}`;
43
+ }
44
+ }
45
+ };
46
+
47
+ // Execute 50 tool calls rapidly
48
+ const startTime = Date.now();
49
+ const promises = [];
50
+
51
+ for (let i = 0; i < 50; i++) {
52
+ promises.push(
53
+ bridge.executeFromXml(`<fast_tool><params>{"input": "request_${i}"}</params></fast_tool>`)
54
+ );
55
+ }
56
+
57
+ const results = await Promise.all(promises);
58
+ const endTime = Date.now();
59
+
60
+ expect(results).toHaveLength(50);
61
+ results.forEach((result, index) => {
62
+ expect(result.success).toBe(true);
63
+ expect(result.result).toContain(`request_${index}`);
64
+ });
65
+
66
+ console.log(`Executed 50 tool calls in ${endTime - startTime}ms`);
67
+ expect(endTime - startTime).toBeLessThan(5000); // Should complete within 5 seconds
68
+
69
+ await bridge.cleanup();
70
+ });
71
+
72
+ test('should handle mixed tool execution patterns', async () => {
73
+ const bridge = new MCPXmlBridge({ debug: false });
74
+
75
+ // Mock tools with different response times
76
+ bridge.mcpTools = {
77
+ 'instant_tool': {
78
+ execute: async (params) => `Instant: ${params.id}`
79
+ },
80
+ 'slow_tool': {
81
+ execute: async (params) => {
82
+ await new Promise(resolve => setTimeout(resolve, 100));
83
+ return `Slow: ${params.id}`;
84
+ }
85
+ },
86
+ 'variable_tool': {
87
+ execute: async (params) => {
88
+ const delay = Math.random() * 50;
89
+ await new Promise(resolve => setTimeout(resolve, delay));
90
+ return `Variable: ${params.id}`;
91
+ }
92
+ }
93
+ };
94
+
95
+ // Execute mixed pattern of tools
96
+ const promises = [];
97
+ const tools = ['instant_tool', 'slow_tool', 'variable_tool'];
98
+
99
+ for (let i = 0; i < 30; i++) {
100
+ const tool = tools[i % tools.length];
101
+ promises.push(
102
+ bridge.executeFromXml(`<${tool}><params>{"id": ${i}}</params></${tool}>`)
103
+ );
104
+ }
105
+
106
+ const results = await Promise.all(promises);
107
+
108
+ expect(results).toHaveLength(30);
109
+ results.forEach((result, index) => {
110
+ expect(result.success).toBe(true);
111
+ expect(result.result).toContain(`${index}`);
112
+ });
113
+
114
+ await bridge.cleanup();
115
+ });
116
+ });
117
+
118
+ describe('Network Resilience', () => {
119
+ test('should handle HTTP transport with network simulation', async () => {
120
+ let fetchCallCount = 0;
121
+ let shouldFail = false;
122
+
123
+ // Mock fetch with network simulation
124
+ global.fetch = jest.fn().mockImplementation(async (url, options) => {
125
+ fetchCallCount++;
126
+
127
+ if (shouldFail && fetchCallCount % 3 === 0) {
128
+ throw new Error('Network timeout');
129
+ }
130
+
131
+ if (url.includes('/initialize')) {
132
+ return {
133
+ ok: true,
134
+ json: () => Promise.resolve({ protocolVersion: '2024-11-05' })
135
+ };
136
+ }
137
+
138
+ if (url.includes('/message')) {
139
+ return {
140
+ ok: true,
141
+ json: () => Promise.resolve({ result: `Response ${fetchCallCount}` })
142
+ };
143
+ }
144
+
145
+ return { ok: true };
146
+ });
147
+
148
+ const { createTransport } = await import('../../src/agent/mcp/client.js');
149
+
150
+ const transport = createTransport({
151
+ transport: 'http',
152
+ url: 'http://localhost:3000/mcp'
153
+ });
154
+
155
+ // Test successful initialization
156
+ await expect(transport.start()).resolves.toBeDefined();
157
+
158
+ // Test successful messages
159
+ await expect(transport.send({ method: 'test1' })).resolves.toBeDefined();
160
+ await expect(transport.send({ method: 'test2' })).resolves.toBeDefined();
161
+
162
+ // Enable failures
163
+ shouldFail = true;
164
+
165
+ // Test that the transport still works (some may fail due to network simulation)
166
+ try {
167
+ await transport.send({ method: 'test3' });
168
+ } catch (error) {
169
+ expect(error.message).toContain('Network timeout');
170
+ }
171
+
172
+ // But others should succeed
173
+ await expect(transport.send({ method: 'test4' })).resolves.toBeDefined();
174
+
175
+ await transport.close();
176
+
177
+ expect(fetchCallCount).toBeGreaterThan(3);
178
+ });
179
+
180
+ test('should handle gradual server degradation', async () => {
181
+ let responseDelay = 0;
182
+
183
+ const bridge = new MCPXmlBridge({ debug: false });
184
+
185
+ // Mock tool with increasing delay
186
+ bridge.mcpTools = {
187
+ 'degrading_tool': {
188
+ execute: async (params) => {
189
+ await new Promise(resolve => setTimeout(resolve, responseDelay));
190
+ responseDelay += 10; // Increase delay each time
191
+ return `Response after ${responseDelay - 10}ms delay`;
192
+ }
193
+ }
194
+ };
195
+
196
+ const results = [];
197
+ const promises = [];
198
+
199
+ // Execute 10 tool calls with increasing delays
200
+ for (let i = 0; i < 10; i++) {
201
+ promises.push(
202
+ bridge.executeFromXml(`<degrading_tool><params>{"call": ${i}}</params></degrading_tool>`)
203
+ );
204
+ }
205
+
206
+ const allResults = await Promise.all(promises);
207
+
208
+ expect(allResults).toHaveLength(10);
209
+ allResults.forEach((result) => {
210
+ expect(result.success).toBe(true);
211
+ });
212
+
213
+ await bridge.cleanup();
214
+ });
215
+ });
216
+
217
+ describe('Memory Management Under Stress', () => {
218
+ test('should handle large payloads', async () => {
219
+ const bridge = new MCPXmlBridge({ debug: false });
220
+
221
+ // Mock tool that handles large data
222
+ bridge.mcpTools = {
223
+ 'large_data_tool': {
224
+ execute: async (params) => {
225
+ const size = params.size || 1000;
226
+ const data = new Array(size).fill(0).map((_, i) => `item_${i}`);
227
+ return {
228
+ processed_items: data.length,
229
+ sample: data.slice(0, 5),
230
+ total_size: JSON.stringify(data).length
231
+ };
232
+ }
233
+ }
234
+ };
235
+
236
+ // Test with increasing payload sizes
237
+ const sizes = [100, 1000, 5000, 10000];
238
+ const results = [];
239
+
240
+ for (const size of sizes) {
241
+ const result = await bridge.executeFromXml(
242
+ `<large_data_tool><params>{"size": ${size}}</params></large_data_tool>`
243
+ );
244
+ results.push(result);
245
+ }
246
+
247
+ expect(results).toHaveLength(4);
248
+ results.forEach((result, index) => {
249
+ expect(result.success).toBe(true);
250
+ const parsed = typeof result.result === 'string'
251
+ ? JSON.parse(result.result)
252
+ : result.result;
253
+ expect(parsed.processed_items).toBe(sizes[index]);
254
+ });
255
+
256
+ await bridge.cleanup();
257
+ });
258
+
259
+ test('should handle memory pressure scenarios', async () => {
260
+ const bridge = new MCPXmlBridge({ debug: false });
261
+
262
+ // Mock tool that creates temporary large objects
263
+ bridge.mcpTools = {
264
+ 'memory_pressure_tool': {
265
+ execute: async (params) => {
266
+ // Create and immediately discard large objects
267
+ for (let i = 0; i < 100; i++) {
268
+ const largeArray = new Array(10000).fill(`data_${i}`);
269
+ // Process the array briefly
270
+ const sum = largeArray.length;
271
+ }
272
+ return `Processed memory pressure test: ${params.iteration}`;
273
+ }
274
+ }
275
+ };
276
+
277
+ // Execute multiple memory-intensive operations
278
+ const promises = [];
279
+ for (let i = 0; i < 20; i++) {
280
+ promises.push(
281
+ bridge.executeFromXml(`<memory_pressure_tool><params>{"iteration": ${i}}</params></memory_pressure_tool>`)
282
+ );
283
+ }
284
+
285
+ const results = await Promise.all(promises);
286
+
287
+ expect(results).toHaveLength(20);
288
+ results.forEach((result) => {
289
+ expect(result.success).toBe(true);
290
+ });
291
+
292
+ await bridge.cleanup();
293
+ });
294
+ });
295
+
296
+ describe('Configuration Edge Cases', () => {
297
+ test('should handle extremely large configuration files', async () => {
298
+ // Create a configuration with many servers
299
+ const mcpConfig = {
300
+ mcpServers: {}
301
+ };
302
+
303
+ // Add 100 mock servers (most disabled)
304
+ for (let i = 0; i < 100; i++) {
305
+ mcpConfig.mcpServers[`server_${i}`] = {
306
+ command: 'echo',
307
+ args: [`server_${i}`],
308
+ transport: 'stdio',
309
+ enabled: i < 5 // Only enable first 5
310
+ };
311
+ }
312
+
313
+ const configPath = join(tempDir, 'large-config.json');
314
+ await writeFile(configPath, JSON.stringify(mcpConfig, null, 2));
315
+
316
+ process.env.MCP_CONFIG_PATH = configPath;
317
+
318
+ const manager = new MCPClientManager({ debug: false });
319
+ const result = await manager.initialize();
320
+
321
+ // Should only attempt to connect to enabled servers
322
+ expect(result.total).toBe(5);
323
+
324
+ await manager.disconnect();
325
+ });
326
+
327
+ test('should handle configuration with invalid JSON structures', async () => {
328
+ // Create configuration with edge case JSON
329
+ const edgeCaseConfig = {
330
+ mcpServers: {
331
+ 'unicode_server': {
332
+ command: 'echo',
333
+ args: ['🚀', '测试', '🌟'],
334
+ transport: 'stdio',
335
+ enabled: false,
336
+ description: 'Server with unicode characters: émojis 🎉'
337
+ },
338
+ 'special_chars': {
339
+ command: 'echo',
340
+ args: ['arg with spaces', 'arg"with"quotes', 'arg\\with\\backslashes'],
341
+ transport: 'stdio',
342
+ enabled: false,
343
+ env: {
344
+ 'VAR_WITH_SPACES': 'value with spaces',
345
+ 'VAR_WITH_QUOTES': 'value "with" quotes',
346
+ 'VAR_WITH_UNICODE': '🌍 global variable'
347
+ }
348
+ }
349
+ }
350
+ };
351
+
352
+ const configPath = join(tempDir, 'edge-case-config.json');
353
+ await writeFile(configPath, JSON.stringify(edgeCaseConfig, null, 2));
354
+
355
+ process.env.MCP_CONFIG_PATH = configPath;
356
+
357
+ const { loadMCPConfiguration, parseEnabledServers } = await import('../../src/agent/mcp/config.js');
358
+
359
+ // Should load without throwing
360
+ const config = loadMCPConfiguration();
361
+ expect(config).toBeDefined();
362
+ expect(config.mcpServers.unicode_server).toBeDefined();
363
+ expect(config.mcpServers.special_chars).toBeDefined();
364
+
365
+ // Should parse without throwing
366
+ const servers = parseEnabledServers(config);
367
+ expect(servers).toEqual([]); // All servers are disabled
368
+ });
369
+ });
370
+
371
+ describe('Long-Running Stability', () => {
372
+ test('should maintain stability over many operations', async () => {
373
+ const bridge = new MCPXmlBridge({ debug: false });
374
+
375
+ // Mock a stateful tool
376
+ let callCount = 0;
377
+ bridge.mcpTools = {
378
+ 'stateful_tool': {
379
+ execute: async (params) => {
380
+ callCount++;
381
+ return {
382
+ call_number: callCount,
383
+ input: params.input,
384
+ timestamp: Date.now()
385
+ };
386
+ }
387
+ }
388
+ };
389
+
390
+ // Execute many operations over time
391
+ const totalOperations = 200;
392
+ const batchSize = 20;
393
+ const results = [];
394
+
395
+ for (let batch = 0; batch < totalOperations / batchSize; batch++) {
396
+ const batchPromises = [];
397
+
398
+ for (let i = 0; i < batchSize; i++) {
399
+ const opNumber = batch * batchSize + i;
400
+ batchPromises.push(
401
+ bridge.executeFromXml(`<stateful_tool><params>{"input": "op_${opNumber}"}</params></stateful_tool>`)
402
+ );
403
+ }
404
+
405
+ const batchResults = await Promise.all(batchPromises);
406
+ results.push(...batchResults);
407
+
408
+ // Small delay between batches
409
+ await new Promise(resolve => setTimeout(resolve, 10));
410
+ }
411
+
412
+ expect(results).toHaveLength(totalOperations);
413
+ results.forEach((result, index) => {
414
+ expect(result.success).toBe(true);
415
+ const parsed = typeof result.result === 'string'
416
+ ? JSON.parse(result.result)
417
+ : result.result;
418
+ expect(parsed.call_number).toBe(index + 1);
419
+ });
420
+
421
+ await bridge.cleanup();
422
+ });
423
+
424
+ test('should handle intermittent failures gracefully', async () => {
425
+ const bridge = new MCPXmlBridge({ debug: false });
426
+
427
+ // Mock tool that fails intermittently
428
+ let callCount = 0;
429
+ bridge.mcpTools = {
430
+ 'flaky_tool': {
431
+ execute: async (params) => {
432
+ callCount++;
433
+
434
+ // Fail every 7th call
435
+ if (callCount % 7 === 0) {
436
+ throw new Error(`Intermittent failure on call ${callCount}`);
437
+ }
438
+
439
+ return `Success on call ${callCount}`;
440
+ }
441
+ }
442
+ };
443
+
444
+ const promises = [];
445
+ for (let i = 0; i < 50; i++) {
446
+ promises.push(
447
+ bridge.executeFromXml(`<flaky_tool><params>{"call": ${i}}</params></flaky_tool>`)
448
+ );
449
+ }
450
+
451
+ const results = await Promise.all(promises);
452
+
453
+ expect(results).toHaveLength(50);
454
+
455
+ let successCount = 0;
456
+ let failureCount = 0;
457
+
458
+ results.forEach((result) => {
459
+ if (result.success) {
460
+ successCount++;
461
+ } else {
462
+ failureCount++;
463
+ expect(result.error).toContain('Intermittent failure');
464
+ }
465
+ });
466
+
467
+ // Should have approximately 7 failures (every 7th call)
468
+ expect(failureCount).toBeGreaterThan(5);
469
+ expect(failureCount).toBeLessThan(10);
470
+ expect(successCount).toBe(50 - failureCount);
471
+
472
+ await bridge.cleanup();
473
+ });
474
+ });
475
+
476
+ describe('Integration Stress Tests', () => {
477
+ test('should handle ProbeAgent with mock server under load', async () => {
478
+ process.env.ANTHROPIC_API_KEY = 'test-key';
479
+
480
+ // Create configuration for mock server
481
+ const mcpConfig = {
482
+ mcpServers: {
483
+ 'stress-test-server': {
484
+ command: 'node',
485
+ args: [join(__dirname, '../mcp/mockMcpServer.js')],
486
+ transport: 'stdio',
487
+ enabled: true
488
+ }
489
+ }
490
+ };
491
+
492
+ const configPath = join(tempDir, 'stress-test-config.json');
493
+ await writeFile(configPath, JSON.stringify(mcpConfig, null, 2));
494
+
495
+ process.env.MCP_CONFIG_PATH = configPath;
496
+
497
+ const agent = new ProbeAgent({
498
+ enableMcp: true,
499
+ debug: false,
500
+ path: tempDir
501
+ });
502
+
503
+ // Wait for initialization
504
+ await new Promise(resolve => setTimeout(resolve, 3000));
505
+
506
+ if (agent.mcpBridge && agent.mcpBridge.getToolNames().length > 0) {
507
+ // Test system message generation under rapid calls
508
+ const systemMessagePromises = [];
509
+ for (let i = 0; i < 10; i++) {
510
+ systemMessagePromises.push(agent.getSystemMessage());
511
+ }
512
+
513
+ const systemMessages = await Promise.all(systemMessagePromises);
514
+ expect(systemMessages).toHaveLength(10);
515
+
516
+ // All messages should be identical and contain MCP tools
517
+ systemMessages.forEach(message => {
518
+ expect(message).toContain('foobar');
519
+ expect(message).toBe(systemMessages[0]);
520
+ });
521
+
522
+ console.log('Stress test completed successfully');
523
+ } else {
524
+ console.warn('Mock server not available for stress testing');
525
+ }
526
+
527
+ await agent.cleanup();
528
+ }, 20000);
529
+
530
+ test('should handle multiple ProbeAgent instances with MCP', async () => {
531
+ process.env.ANTHROPIC_API_KEY = 'test-key';
532
+
533
+ const agents = [];
534
+
535
+ try {
536
+ // Create multiple agents with MCP enabled
537
+ for (let i = 0; i < 5; i++) {
538
+ const agent = new ProbeAgent({
539
+ enableMcp: true,
540
+ debug: false,
541
+ path: tempDir,
542
+ sessionId: `stress-test-${i}`
543
+ });
544
+ agents.push(agent);
545
+ }
546
+
547
+ // Wait for all initializations
548
+ await new Promise(resolve => setTimeout(resolve, 2000));
549
+
550
+ // Verify all agents are independent
551
+ for (let i = 0; i < agents.length; i++) {
552
+ const agent = agents[i];
553
+ expect(agent.sessionId).toContain(`stress-test-${i}`);
554
+ expect(agent.enableMcp).toBe(true);
555
+ }
556
+
557
+ console.log('Multiple agent test completed successfully');
558
+ } finally {
559
+ // Cleanup all agents
560
+ await Promise.all(agents.map(agent => agent.cleanup()));
561
+ }
562
+ });
563
+ });
564
+ });