@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,161 @@
1
+ #!/usr/bin/env node
2
+
3
+ /**
4
+ * Test direct connection to Probe MCP server
5
+ * This tests the MCP server without requiring AI API keys
6
+ */
7
+
8
+ import { MCPClientManager } from '@probelabs/probe/agent/mcp';
9
+ import { dirname, join } from 'path';
10
+ import { fileURLToPath } from 'url';
11
+
12
+ async function testProbeMCP() {
13
+ console.log('=== Testing Probe MCP Server Connection ===\n');
14
+
15
+ // Create configuration for Probe MCP server
16
+ const config = {
17
+ mcpServers: {
18
+ 'probe': {
19
+ command: 'npx',
20
+ args: ['-y', '@probelabs/probe@latest', 'mcp'],
21
+ transport: 'stdio',
22
+ enabled: true
23
+ }
24
+ }
25
+ };
26
+
27
+ const manager = new MCPClientManager({ debug: true });
28
+
29
+ try {
30
+ // Step 1: Connect to server
31
+ console.log('๐Ÿ“ก Connecting to Probe MCP server...\n');
32
+ const result = await manager.initialize(config);
33
+
34
+ console.log(`\nโœ… Connected successfully!`);
35
+ console.log(`๐Ÿ“Š Connection summary:`);
36
+ console.log(` - Servers connected: ${result.connected}/${result.total}`);
37
+ console.log(` - Total tools available: ${result.tools.length}`);
38
+ console.log(` - Tool names: ${result.tools.join(', ')}\n`);
39
+
40
+ // Step 2: Get tool details
41
+ const tools = manager.getTools();
42
+ console.log('๐Ÿ› ๏ธ Tool Details:');
43
+ console.log('โ”€'.repeat(60));
44
+
45
+ for (const [name, tool] of Object.entries(tools)) {
46
+ console.log(`\n๐Ÿ“ฆ ${name}`);
47
+ console.log(` Server: ${tool.serverName}`);
48
+ console.log(` Description: ${tool.description}`);
49
+
50
+ if (tool.inputSchema) {
51
+ console.log(' Parameters:');
52
+ const props = tool.inputSchema.properties || {};
53
+ for (const [param, schema] of Object.entries(props)) {
54
+ const required = tool.inputSchema.required?.includes(param) ? ' (required)' : '';
55
+ console.log(` - ${param}: ${schema.type}${required} - ${schema.description || 'No description'}`);
56
+ }
57
+ }
58
+ }
59
+
60
+ console.log('\n' + 'โ”€'.repeat(60));
61
+
62
+ // Step 3: Test actual tool calls
63
+ console.log('\n๐Ÿงช Testing Tool Execution:\n');
64
+
65
+ // Test search_code
66
+ console.log('1. Testing probe_search_code...');
67
+ try {
68
+ const searchResult = await manager.callTool('probe_search_code', {
69
+ query: 'MCP',
70
+ path: process.cwd(),
71
+ max_results: 2
72
+ });
73
+
74
+ if (searchResult.content && searchResult.content[0]) {
75
+ const content = searchResult.content[0].text;
76
+ const lines = content.split('\n').slice(0, 10);
77
+ console.log(' โœ… Search successful! First 10 lines of results:');
78
+ lines.forEach(line => console.log(` ${line}`));
79
+ }
80
+ } catch (error) {
81
+ console.log(` โŒ Search failed: ${error.message}`);
82
+ }
83
+
84
+ // Test query_code
85
+ console.log('\n2. Testing probe_query_code...');
86
+ try {
87
+ const queryResult = await manager.callTool('probe_query_code', {
88
+ pattern: 'class $NAME',
89
+ path: process.cwd(),
90
+ language: 'javascript',
91
+ max_results: 2
92
+ });
93
+
94
+ if (queryResult.content && queryResult.content[0]) {
95
+ const content = queryResult.content[0].text;
96
+ const lines = content.split('\n').slice(0, 10);
97
+ console.log(' โœ… Query successful! First 10 lines of results:');
98
+ lines.forEach(line => console.log(` ${line}`));
99
+ }
100
+ } catch (error) {
101
+ console.log(` โŒ Query failed: ${error.message}`);
102
+ }
103
+
104
+ // Test extract_code
105
+ console.log('\n3. Testing probe_extract_code...');
106
+ try {
107
+ const extractResult = await manager.callTool('probe_extract_code', {
108
+ files: [`${join(dirname(fileURLToPath(import.meta.url)), 'probeChat.js')}:1-20`]
109
+ });
110
+
111
+ if (extractResult.content && extractResult.content[0]) {
112
+ const content = extractResult.content[0].text;
113
+ const lines = content.split('\n').slice(0, 10);
114
+ console.log(' โœ… Extract successful! First 10 lines:');
115
+ lines.forEach(line => console.log(` ${line}`));
116
+ }
117
+ } catch (error) {
118
+ console.log(` โŒ Extract failed: ${error.message}`);
119
+ }
120
+
121
+ // Step 4: Test for Vercel AI SDK compatibility
122
+ console.log('\n\n๐Ÿ”„ Testing Vercel AI SDK Compatibility:\n');
123
+ const vercelTools = manager.getVercelTools();
124
+ console.log(`โœ… ${Object.keys(vercelTools).length} tools converted for Vercel AI SDK`);
125
+
126
+ // Test executing a tool through Vercel wrapper
127
+ const searchTool = vercelTools['probe_search_code'];
128
+ if (searchTool) {
129
+ console.log('\nTesting Vercel-wrapped tool execution...');
130
+ try {
131
+ const result = await searchTool.execute({
132
+ query: 'export',
133
+ path: process.cwd(),
134
+ max_results: 1
135
+ });
136
+
137
+ console.log(' โœ… Vercel wrapper works! Result preview:');
138
+ console.log(` ${result.substring(0, 200)}...`);
139
+ } catch (error) {
140
+ console.log(` โŒ Vercel wrapper failed: ${error.message}`);
141
+ }
142
+ }
143
+
144
+ // Cleanup
145
+ console.log('\n\n๐Ÿ”Œ Disconnecting...');
146
+ await manager.disconnect();
147
+ console.log('โœ… Disconnected successfully');
148
+
149
+ console.log('\n' + '='.repeat(60));
150
+ console.log('โœจ All tests completed successfully!');
151
+ console.log('='.repeat(60));
152
+
153
+ } catch (error) {
154
+ console.error('\nโŒ Test failed:', error);
155
+ await manager.disconnect().catch(() => {});
156
+ process.exit(1);
157
+ }
158
+ }
159
+
160
+ // Run the test
161
+ testProbeMCP().catch(console.error);
@@ -0,0 +1,279 @@
1
+ #!/usr/bin/env node
2
+
3
+ /**
4
+ * Test MCP integration with real AI model
5
+ * This tests the full flow: MCP server -> Tools -> AI -> Response
6
+ */
7
+
8
+ import 'dotenv/config';
9
+ import { createAnthropic } from '@ai-sdk/anthropic';
10
+ import { createOpenAI } from '@ai-sdk/openai';
11
+ import { createGoogleGenerativeAI } from '@ai-sdk/google';
12
+ import { generateText, tool } from 'ai';
13
+ import { z } from 'zod';
14
+ import { MCPClientManager } from '@probelabs/probe/agent/mcp';
15
+ import { writeFileSync } from 'fs';
16
+
17
+ // Check for API keys
18
+ const hasAnthropic = !!process.env.ANTHROPIC_API_KEY;
19
+ const hasOpenAI = !!process.env.OPENAI_API_KEY;
20
+ const hasGoogle = !!process.env.GOOGLE_API_KEY || !!process.env.GOOGLE_AI_API_KEY;
21
+
22
+ if (!hasAnthropic && !hasOpenAI && !hasGoogle) {
23
+ console.error('โŒ No API keys found. Please set ANTHROPIC_API_KEY, OPENAI_API_KEY, or GOOGLE_API_KEY');
24
+ process.exit(1);
25
+ }
26
+
27
+ async function testMCPWithAI() {
28
+ console.log('=== Testing MCP Integration with AI ===\n');
29
+
30
+ // Step 1: Create MCP configuration for Probe
31
+ const mcpConfig = {
32
+ mcpServers: {
33
+ 'probe': {
34
+ command: 'npx',
35
+ args: ['-y', '@probelabs/probe@latest', 'mcp'],
36
+ transport: 'stdio',
37
+ enabled: true
38
+ }
39
+ }
40
+ };
41
+
42
+ console.log('๐Ÿ“ก Connecting to Probe MCP server...');
43
+ const mcpManager = new MCPClientManager({ debug: true });
44
+
45
+ try {
46
+ const initResult = await mcpManager.initialize(mcpConfig);
47
+ console.log(`โœ… Connected to ${initResult.connected} server(s)`);
48
+ console.log(`๐Ÿ“ฆ Available tools: ${initResult.tools.join(', ')}\n`);
49
+ } catch (error) {
50
+ console.error('โŒ Failed to connect to MCP server:', error);
51
+ process.exit(1);
52
+ }
53
+
54
+ // Step 2: Get tools from MCP server
55
+ const mcpTools = mcpManager.getVercelTools();
56
+ console.log('๐Ÿ› ๏ธ MCP Tools loaded:', Object.keys(mcpTools).length);
57
+
58
+ // Step 3: Create wrapped tools for AI SDK v5
59
+ const aiTools = {};
60
+ for (const [name, mcpTool] of Object.entries(mcpTools)) {
61
+ aiTools[name] = tool({
62
+ description: mcpTool.description,
63
+ inputSchema: z.object(
64
+ Object.entries(mcpTool.inputSchema?.properties || {}).reduce((acc, [key, schema]) => {
65
+ const isRequired = mcpTool.inputSchema?.required?.includes(key);
66
+
67
+ // Convert JSON schema to Zod schema (simplified)
68
+ let zodSchema;
69
+ if (schema.type === 'string') {
70
+ zodSchema = z.string();
71
+ } else if (schema.type === 'number') {
72
+ zodSchema = z.number();
73
+ } else if (schema.type === 'boolean') {
74
+ zodSchema = z.boolean();
75
+ } else if (schema.type === 'array') {
76
+ // Properly define array items based on the schema
77
+ if (schema.items?.type === 'string') {
78
+ zodSchema = z.array(z.string());
79
+ } else if (schema.items?.type === 'number') {
80
+ zodSchema = z.array(z.number());
81
+ } else {
82
+ zodSchema = z.array(z.string()); // Default to string array
83
+ }
84
+ } else {
85
+ zodSchema = z.any();
86
+ }
87
+
88
+ acc[key] = isRequired ? zodSchema : zodSchema.optional();
89
+ return acc;
90
+ }, {})
91
+ ),
92
+ execute: mcpTool.execute
93
+ });
94
+ }
95
+
96
+ console.log('โœ… Tools wrapped for AI SDK v5\n');
97
+
98
+ // Step 4: Choose AI model
99
+ let model;
100
+ if (hasGoogle) {
101
+ const google = createGoogleGenerativeAI({
102
+ apiKey: process.env.GOOGLE_API_KEY || process.env.GOOGLE_AI_API_KEY
103
+ });
104
+ model = google('gemini-2.0-flash-exp');
105
+ console.log('๐Ÿค– Using Google Gemini 2.0 Flash');
106
+ } else if (hasAnthropic) {
107
+ const anthropic = createAnthropic();
108
+ model = anthropic('claude-3-5-haiku-20241022');
109
+ console.log('๐Ÿค– Using Claude 3.5 Haiku');
110
+ } else {
111
+ const openai = createOpenAI();
112
+ model = openai('gpt-4o-mini');
113
+ console.log('๐Ÿค– Using GPT-4o Mini');
114
+ }
115
+
116
+ // Step 5: Test queries with the AI
117
+ const testQueries = [
118
+ {
119
+ name: 'Search Test',
120
+ query: 'Search for functions that handle MCP or Model Context Protocol in this project',
121
+ expectedTool: 'probe_search_code'
122
+ },
123
+ {
124
+ name: 'Query Test',
125
+ query: 'Find all JavaScript arrow functions that take options as a parameter',
126
+ expectedTool: 'probe_query_code'
127
+ },
128
+ {
129
+ name: 'Extract Test',
130
+ query: 'Extract the MCPClientManager class from mcpClientV2.js',
131
+ expectedTool: 'probe_extract_code'
132
+ }
133
+ ];
134
+
135
+ console.log('\n=== Running AI Tests with MCP Tools ===\n');
136
+
137
+ for (const test of testQueries) {
138
+ console.log(`๐Ÿ“ Test: ${test.name}`);
139
+ console.log(` Query: "${test.query}"`);
140
+
141
+ try {
142
+ const startTime = Date.now();
143
+
144
+ // Call AI with MCP tools
145
+ const result = await generateText({
146
+ model,
147
+ messages: [
148
+ {
149
+ role: 'system',
150
+ content: `You are a code analysis assistant with access to MCP tools for searching and analyzing code.
151
+ Available tools:
152
+ - probe_search_code: Search for code using keywords
153
+ - probe_query_code: Query code using AST patterns
154
+ - probe_extract_code: Extract specific code blocks
155
+
156
+ Always use the appropriate tool to answer questions about code.
157
+ Set the path parameter to "${process.cwd()}" for searches.`
158
+ },
159
+ {
160
+ role: 'user',
161
+ content: test.query
162
+ }
163
+ ],
164
+ tools: aiTools,
165
+ maxSteps: 3,
166
+ temperature: 0.3
167
+ });
168
+
169
+ const duration = Date.now() - startTime;
170
+
171
+ // Check if the expected tool was used
172
+ const toolCalls = result.steps?.filter(step => step.toolCalls?.length > 0) || [];
173
+ const usedTools = toolCalls.flatMap(step =>
174
+ step.toolCalls.map(call => call.toolName)
175
+ );
176
+
177
+ console.log(` โœ… Response received in ${duration}ms`);
178
+ console.log(` ๐Ÿ”ง Tools used: ${usedTools.join(', ') || 'none'}`);
179
+
180
+ if (test.expectedTool && !usedTools.includes(test.expectedTool)) {
181
+ console.log(` โš ๏ธ Expected tool ${test.expectedTool} was not used`);
182
+ }
183
+
184
+ // Show a preview of the response
185
+ const preview = result.text.substring(0, 200);
186
+ console.log(` ๐Ÿ“„ Response preview: ${preview}${result.text.length > 200 ? '...' : ''}`);
187
+
188
+ // Log token usage
189
+ if (result.usage) {
190
+ console.log(` ๐Ÿ’ฐ Tokens: ${result.usage.promptTokens} prompt, ${result.usage.completionTokens} completion`);
191
+ }
192
+
193
+ console.log('');
194
+ } catch (error) {
195
+ console.error(` โŒ Test failed: ${error.message}\n`);
196
+ }
197
+ }
198
+
199
+ // Step 6: Interactive test with complex query
200
+ console.log('=== Complex Query Test ===\n');
201
+
202
+ const complexQuery = `Using the MCP tools available, help me understand how the MCP integration works in this codebase.
203
+ Specifically:
204
+ 1. Search for MCP-related code
205
+ 2. Find the main MCP client implementation
206
+ 3. Extract key functions that handle MCP connections`;
207
+
208
+ console.log('๐Ÿ“ Complex query:', complexQuery.replace(/\n\s+/g, ' '));
209
+
210
+ try {
211
+ const result = await generateText({
212
+ model,
213
+ messages: [
214
+ {
215
+ role: 'system',
216
+ content: `You are a code analysis expert. Use the MCP tools to thoroughly analyze code.
217
+ The codebase is located at: ${process.cwd()}
218
+ Be systematic and use multiple tools to gather comprehensive information.`
219
+ },
220
+ {
221
+ role: 'user',
222
+ content: complexQuery
223
+ }
224
+ ],
225
+ tools: aiTools,
226
+ maxSteps: 10,
227
+ temperature: 0.3
228
+ });
229
+
230
+ console.log('\n๐Ÿ“Š Analysis Results:');
231
+ console.log('โ”€'.repeat(50));
232
+ console.log(result.text);
233
+ console.log('โ”€'.repeat(50));
234
+
235
+ // Save detailed results
236
+ const reportPath = '/tmp/mcp-ai-test-report.md';
237
+ const report = `# MCP Integration Test Report
238
+
239
+ ## Test Date
240
+ ${new Date().toISOString()}
241
+
242
+ ## Configuration
243
+ - Model: ${model.modelId}
244
+ - MCP Servers: ${Object.keys(mcpConfig.mcpServers).join(', ')}
245
+ - Available Tools: ${Object.keys(aiTools).join(', ')}
246
+
247
+ ## Query
248
+ ${complexQuery}
249
+
250
+ ## Response
251
+ ${result.text}
252
+
253
+ ## Tool Usage
254
+ ${result.steps?.map((step, i) =>
255
+ step.toolCalls?.map(call =>
256
+ `### Step ${i + 1}: ${call.toolName}\n\`\`\`json\n${JSON.stringify(call.args, null, 2)}\n\`\`\``
257
+ ).join('\n')
258
+ ).join('\n') || 'No tools used'}
259
+
260
+ ## Token Usage
261
+ - Prompt Tokens: ${result.usage?.promptTokens || 'N/A'}
262
+ - Completion Tokens: ${result.usage?.completionTokens || 'N/A'}
263
+ - Total Tokens: ${result.usage?.totalTokens || 'N/A'}
264
+ `;
265
+
266
+ writeFileSync(reportPath, report);
267
+ console.log(`\n๐Ÿ“„ Detailed report saved to: ${reportPath}`);
268
+
269
+ } catch (error) {
270
+ console.error('โŒ Complex query failed:', error.message);
271
+ }
272
+
273
+ // Cleanup
274
+ await mcpManager.disconnect();
275
+ console.log('\nโœ… MCP connections closed');
276
+ }
277
+
278
+ // Run the test
279
+ testMCPWithAI().catch(console.error);
@@ -0,0 +1,111 @@
1
+ import { promises as fs } from 'fs';
2
+ import { resolve } from 'path';
3
+ import { ProbeAgent } from '../../npm/src/agent/ProbeAgent.js';
4
+
5
+ // Test that multiple allowed directories work correctly
6
+ async function testMultipleAllowedDirectories() {
7
+ console.log('๐Ÿงช Testing multiple allowed directories...\n');
8
+
9
+ // Create test directories and files
10
+ const testDirs = [
11
+ './test-images-1',
12
+ './test-images-2',
13
+ './test-images-3'
14
+ ];
15
+
16
+ const testFiles = [
17
+ { dir: './test-images-1', file: 'image1.png' },
18
+ { dir: './test-images-2', file: 'image2.jpg' },
19
+ { dir: './test-images-3', file: 'image3.webp' }
20
+ ];
21
+
22
+ try {
23
+ // Create test directories and dummy image files
24
+ console.log('๐Ÿ“ Creating test directories and files...');
25
+ for (const dir of testDirs) {
26
+ await fs.mkdir(dir, { recursive: true });
27
+ }
28
+
29
+ // Create small dummy image files (just text files with image extensions for testing)
30
+ const dummyImageContent = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mNkYPhfDwAChwGA60e6kgAAAABJRU5ErkJggg==';
31
+
32
+ for (const testFile of testFiles) {
33
+ await fs.writeFile(resolve(testFile.dir, testFile.file), dummyImageContent);
34
+ }
35
+
36
+ // Test 1: Create ProbeAgent with only first directory allowed
37
+ console.log('\n๐Ÿ”’ Test 1: Single allowed directory');
38
+ const agent1 = new ProbeAgent({
39
+ debug: true,
40
+ allowedFolders: ['./test-images-1']
41
+ });
42
+
43
+ const result1a = await agent1.loadImageIfValid('./test-images-1/image1.png');
44
+ const result1b = await agent1.loadImageIfValid('./test-images-2/image2.jpg');
45
+
46
+ console.log(` โœ“ Image in allowed dir 1: ${result1a} (expected: true)`);
47
+ console.log(` โœ— Image in disallowed dir 2: ${result1b} (expected: false)`);
48
+
49
+ // Test 2: Create ProbeAgent with multiple allowed directories
50
+ console.log('\n๐Ÿ”“ Test 2: Multiple allowed directories');
51
+ const agent2 = new ProbeAgent({
52
+ debug: true,
53
+ allowedFolders: ['./test-images-1', './test-images-2']
54
+ });
55
+
56
+ const result2a = await agent2.loadImageIfValid('./test-images-1/image1.png');
57
+ const result2b = await agent2.loadImageIfValid('./test-images-2/image2.jpg');
58
+ const result2c = await agent2.loadImageIfValid('./test-images-3/image3.webp');
59
+
60
+ console.log(` โœ“ Image in allowed dir 1: ${result2a} (expected: true)`);
61
+ console.log(` โœ“ Image in allowed dir 2: ${result2b} (expected: true)`);
62
+ console.log(` โœ— Image in disallowed dir 3: ${result2c} (expected: false)`);
63
+
64
+ // Test 3: Test with all three directories allowed
65
+ console.log('\n๐ŸŒ Test 3: All directories allowed');
66
+ const agent3 = new ProbeAgent({
67
+ debug: true,
68
+ allowedFolders: ['./test-images-1', './test-images-2', './test-images-3']
69
+ });
70
+
71
+ const result3a = await agent3.loadImageIfValid('./test-images-1/image1.png');
72
+ const result3b = await agent3.loadImageIfValid('./test-images-2/image2.jpg');
73
+ const result3c = await agent3.loadImageIfValid('./test-images-3/image3.webp');
74
+
75
+ console.log(` โœ“ Image in allowed dir 1: ${result3a} (expected: true)`);
76
+ console.log(` โœ“ Image in allowed dir 2: ${result3b} (expected: true)`);
77
+ console.log(` โœ“ Image in allowed dir 3: ${result3c} (expected: true)`);
78
+
79
+ // Validation
80
+ const allTestsPassed =
81
+ result1a === true && result1b === false &&
82
+ result2a === true && result2b === true && result2c === false &&
83
+ result3a === true && result3b === true && result3c === true;
84
+
85
+ if (allTestsPassed) {
86
+ console.log('\n๐ŸŽ‰ All tests passed! Multiple allowed directories working correctly.');
87
+ } else {
88
+ console.log('\nโŒ Some tests failed. Check the implementation.');
89
+ }
90
+
91
+ } catch (error) {
92
+ console.error('โŒ Test failed with error:', error.message);
93
+ } finally {
94
+ // Clean up test files and directories
95
+ console.log('\n๐Ÿงน Cleaning up test files...');
96
+ try {
97
+ for (const testFile of testFiles) {
98
+ await fs.unlink(resolve(testFile.dir, testFile.file)).catch(() => {});
99
+ }
100
+ for (const dir of testDirs) {
101
+ await fs.rmdir(dir).catch(() => {});
102
+ }
103
+ console.log('โœ… Cleanup completed.');
104
+ } catch (cleanupError) {
105
+ console.log('โš ๏ธ Some cleanup failed:', cleanupError.message);
106
+ }
107
+ }
108
+ }
109
+
110
+ // Run the test
111
+ testMultipleAllowedDirectories().catch(console.error);
@@ -0,0 +1,110 @@
1
+ #!/usr/bin/env node
2
+
3
+ /**
4
+ * Test script to connect to probe MCP server and explore its capabilities
5
+ */
6
+
7
+ import { Client } from '@modelcontextprotocol/sdk/client/index.js';
8
+ import { StdioClientTransport } from '@modelcontextprotocol/sdk/client/stdio.js';
9
+
10
+ async function testProbeMcpServer() {
11
+ console.log('Testing Probe MCP Server...\n');
12
+
13
+ // Create transport to probe MCP server
14
+ const transport = new StdioClientTransport({
15
+ command: 'npx',
16
+ args: ['-y', '@probelabs/probe@latest', 'mcp']
17
+ });
18
+
19
+ const client = new Client(
20
+ {
21
+ name: 'test-client',
22
+ version: '1.0.0'
23
+ },
24
+ {
25
+ capabilities: {}
26
+ }
27
+ );
28
+
29
+ try {
30
+ // Connect to the server
31
+ console.log('Connecting to Probe MCP server...');
32
+ await client.connect(transport);
33
+ console.log('โœ… Connected successfully\n');
34
+
35
+ // List available tools
36
+ console.log('Available tools:');
37
+ const tools = await client.listTools();
38
+
39
+ for (const tool of tools.tools) {
40
+ console.log(`\n๐Ÿ“ฆ Tool: ${tool.name}`);
41
+ console.log(` Description: ${tool.description}`);
42
+
43
+ if (tool.inputSchema) {
44
+ console.log(' Input Schema:');
45
+ console.log(JSON.stringify(tool.inputSchema, null, 4));
46
+ }
47
+ }
48
+
49
+ // Test a simple search
50
+ console.log('\n\nTesting search_code tool...');
51
+ const searchResult = await client.callTool({
52
+ name: 'search_code',
53
+ arguments: {
54
+ query: 'function',
55
+ path: process.cwd(),
56
+ max_results: 3
57
+ }
58
+ });
59
+
60
+ console.log('\nSearch result (truncated):');
61
+ if (searchResult.content && searchResult.content[0]) {
62
+ const content = searchResult.content[0].text;
63
+ console.log(content.substring(0, 500) + '...');
64
+ }
65
+
66
+ // Test query_code tool
67
+ console.log('\n\nTesting query_code tool...');
68
+ const queryResult = await client.callTool({
69
+ name: 'query_code',
70
+ arguments: {
71
+ pattern: 'function $NAME($$$PARAMS) { $$$BODY }',
72
+ path: process.cwd(),
73
+ language: 'javascript',
74
+ max_results: 2
75
+ }
76
+ });
77
+
78
+ console.log('\nQuery result (truncated):');
79
+ if (queryResult.content && queryResult.content[0]) {
80
+ const content = queryResult.content[0].text;
81
+ console.log(content.substring(0, 500) + '...');
82
+ }
83
+
84
+ // Test extract_code tool
85
+ console.log('\n\nTesting extract_code tool...');
86
+ const extractResult = await client.callTool({
87
+ name: 'extract_code',
88
+ arguments: {
89
+ files: [`${process.cwd()}/probeChat.js:230-250`]
90
+ }
91
+ });
92
+
93
+ console.log('\nExtract result (truncated):');
94
+ if (extractResult.content && extractResult.content[0]) {
95
+ const content = extractResult.content[0].text;
96
+ console.log(content.substring(0, 500) + '...');
97
+ }
98
+
99
+ // Close the connection
100
+ await client.close();
101
+ console.log('\nโœ… All tests completed successfully!');
102
+
103
+ } catch (error) {
104
+ console.error('Error during testing:', error);
105
+ process.exit(1);
106
+ }
107
+ }
108
+
109
+ // Run the test
110
+ testProbeMcpServer().catch(console.error);