@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,204 @@
1
+ #!/usr/bin/env node
2
+
3
+ import { TelemetryConfig } from './telemetry.js';
4
+ import { trace, context } from '@opentelemetry/api';
5
+ import { readFileSync, unlinkSync, existsSync } from 'fs';
6
+
7
+ /**
8
+ * Test script to simulate AI SDK telemetry behavior and verify tracing works end-to-end
9
+ */
10
+
11
+ console.log('🧪 Testing AI SDK Telemetry Integration...\n');
12
+
13
+ // Clean up any existing test files
14
+ const testTraceFile = './test-ai-sdk-traces.jsonl';
15
+ if (existsSync(testTraceFile)) {
16
+ unlinkSync(testTraceFile);
17
+ }
18
+
19
+ // Initialize telemetry
20
+ const telemetryConfig = new TelemetryConfig({
21
+ serviceName: 'probe-chat-ai-sdk-test',
22
+ serviceVersion: '1.0.0',
23
+ enableFile: true,
24
+ enableConsole: true,
25
+ enableRemote: false,
26
+ filePath: testTraceFile,
27
+ });
28
+
29
+ telemetryConfig.initialize();
30
+
31
+ console.log('āœ… Telemetry initialized');
32
+
33
+ // Simulate AI SDK behavior with telemetry
34
+ async function simulateAISDKCall() {
35
+ const tracer = telemetryConfig.getTracer();
36
+
37
+ if (!tracer) {
38
+ console.log('āŒ No tracer available');
39
+ return;
40
+ }
41
+
42
+ console.log('šŸŽÆ Starting simulated AI SDK call...');
43
+
44
+ // Create a parent span for the overall operation
45
+ const parentSpan = tracer.startSpan('ai.generateText', {
46
+ attributes: {
47
+ 'ai.model.id': 'claude-3-7-sonnet-20250219',
48
+ 'ai.model.provider': 'anthropic',
49
+ 'ai.operation.name': 'generateText',
50
+ 'ai.request.model': 'claude-3-7-sonnet-20250219',
51
+ 'ai.request.max_tokens': 4096,
52
+ 'ai.request.temperature': 0.3,
53
+ 'ai.telemetry.functionId': 'chat-test-session-123',
54
+ 'ai.telemetry.metadata.sessionId': 'test-session-123',
55
+ 'ai.telemetry.metadata.iteration': '1',
56
+ 'ai.telemetry.metadata.model': 'claude-3-7-sonnet-20250219',
57
+ 'ai.telemetry.metadata.apiType': 'anthropic',
58
+ 'ai.telemetry.metadata.allowEdit': 'false',
59
+ 'ai.telemetry.metadata.promptType': 'default'
60
+ }
61
+ });
62
+
63
+ try {
64
+ // Set the context with the parent span
65
+ await context.with(trace.setSpan(context.active(), parentSpan), async () => {
66
+
67
+ // Simulate request processing
68
+ parentSpan.addEvent('ai.request.start', {
69
+ 'ai.request.messages': '[{"role":"user","content":"Hello world"}]',
70
+ 'ai.request.system': 'You are a helpful assistant'
71
+ });
72
+
73
+ // Simulate some processing time
74
+ await new Promise(resolve => setTimeout(resolve, 100));
75
+
76
+ // Simulate stream processing
77
+ const streamSpan = tracer.startSpan('ai.stream.process', {
78
+ attributes: {
79
+ 'ai.stream.type': 'text',
80
+ 'ai.stream.provider': 'anthropic'
81
+ }
82
+ });
83
+
84
+ try {
85
+ streamSpan.addEvent('ai.stream.start');
86
+
87
+ // Simulate streaming chunks
88
+ for (let i = 0; i < 5; i++) {
89
+ streamSpan.addEvent('ai.stream.chunk', {
90
+ 'ai.stream.chunk.index': i,
91
+ 'ai.stream.chunk.content': `chunk_${i}`
92
+ });
93
+ await new Promise(resolve => setTimeout(resolve, 20));
94
+ }
95
+
96
+ streamSpan.addEvent('ai.stream.end');
97
+ streamSpan.setStatus({ code: 1 }); // OK status
98
+
99
+ } catch (error) {
100
+ streamSpan.setStatus({
101
+ code: 2, // ERROR status
102
+ message: error.message
103
+ });
104
+ streamSpan.recordException(error);
105
+ } finally {
106
+ streamSpan.end();
107
+ }
108
+
109
+ // Simulate response completion
110
+ parentSpan.addEvent('ai.response.complete', {
111
+ 'ai.response.text': 'Hello! How can I help you today?',
112
+ 'ai.response.finish_reason': 'stop',
113
+ 'ai.usage.prompt_tokens': 15,
114
+ 'ai.usage.completion_tokens': 8,
115
+ 'ai.usage.total_tokens': 23
116
+ });
117
+
118
+ parentSpan.setStatus({ code: 1 }); // OK status
119
+
120
+ });
121
+
122
+ } catch (error) {
123
+ parentSpan.setStatus({
124
+ code: 2, // ERROR status
125
+ message: error.message
126
+ });
127
+ parentSpan.recordException(error);
128
+ } finally {
129
+ parentSpan.end();
130
+ }
131
+ }
132
+
133
+ // Run the simulation
134
+ try {
135
+ await simulateAISDKCall();
136
+ console.log('āœ… AI SDK call simulation completed');
137
+
138
+ // Give it a moment to write to file
139
+ await new Promise(resolve => setTimeout(resolve, 500));
140
+
141
+ // Check if trace file was created and has content
142
+ if (existsSync(testTraceFile)) {
143
+ const traceData = readFileSync(testTraceFile, 'utf8');
144
+ console.log(`āœ… Trace file created with ${traceData.split('\n').filter(Boolean).length} trace entries`);
145
+
146
+ // Parse and validate trace data
147
+ const traceLines = traceData.split('\n').filter(Boolean);
148
+
149
+ if (traceLines.length > 0) {
150
+ console.log('\nšŸ“Š Trace Analysis:');
151
+
152
+ traceLines.forEach((line, index) => {
153
+ try {
154
+ const traceEntry = JSON.parse(line);
155
+ console.log(`\nšŸ” Trace Entry ${index + 1}:`);
156
+ console.log(` - Name: ${traceEntry.name}`);
157
+ console.log(` - Trace ID: ${traceEntry.traceId}`);
158
+ console.log(` - Span ID: ${traceEntry.spanId}`);
159
+ console.log(` - Status: ${traceEntry.status?.code || 'unknown'}`);
160
+ console.log(` - Start Time: ${new Date(traceEntry.startTimeUnixNano / 1000000).toISOString()}`);
161
+ console.log(` - Duration: ${(traceEntry.endTimeUnixNano - traceEntry.startTimeUnixNano) / 1000000}ms`);
162
+ console.log(` - Attributes: ${Object.keys(traceEntry.attributes || {}).length} attributes`);
163
+ console.log(` - Events: ${traceEntry.events?.length || 0} events`);
164
+
165
+ // Check for AI-specific attributes
166
+ const aiAttributes = Object.keys(traceEntry.attributes || {}).filter(key => key.startsWith('ai.'));
167
+ if (aiAttributes.length > 0) {
168
+ console.log(` - AI Attributes: ${aiAttributes.join(', ')}`);
169
+ }
170
+
171
+ } catch (error) {
172
+ console.log(` āŒ Error parsing trace entry ${index + 1}: ${error.message}`);
173
+ }
174
+ });
175
+
176
+ console.log('\nāœ… All trace data parsed successfully!');
177
+
178
+ // Save a sample for inspection
179
+ console.log('\nšŸ“ Sample trace entry:');
180
+ console.log(JSON.stringify(JSON.parse(traceLines[0]), null, 2));
181
+
182
+ } else {
183
+ console.log('āŒ Trace file is empty');
184
+ }
185
+
186
+ } else {
187
+ console.log('āŒ Trace file was not created');
188
+ }
189
+
190
+ } catch (error) {
191
+ console.error('āŒ Test failed:', error);
192
+ } finally {
193
+ // Clean up
194
+ await telemetryConfig.shutdown();
195
+ console.log('🧹 Telemetry shutdown complete');
196
+
197
+ // Clean up test file
198
+ if (existsSync(testTraceFile)) {
199
+ unlinkSync(testTraceFile);
200
+ console.log('🧹 Test trace file cleaned up');
201
+ }
202
+ }
203
+
204
+ console.log('\nšŸŽ‰ AI SDK Telemetry Integration Test Complete!');
@@ -0,0 +1,38 @@
1
+ import { ProbeChat } from './probeChat.js';
2
+
3
+ // Test chat function tracing
4
+ async function testChatTracing() {
5
+ console.log('Testing chat tracing...\n');
6
+
7
+ try {
8
+ // Create a ProbeChat instance with debug enabled
9
+ const probeChat = new ProbeChat({
10
+ debug: true,
11
+ noApiKeysMode: true
12
+ });
13
+
14
+ // Test message with images
15
+ const testMessage = 'Here is an image: https://github.com/user-attachments/assets/example.png and some text.';
16
+
17
+ console.log('šŸ” Testing chat function with tracing...');
18
+ console.log('Message:', testMessage);
19
+
20
+ // Call the chat function - this should create spans
21
+ const result = await probeChat.chat(testMessage);
22
+
23
+ console.log('āœ… Chat completed successfully');
24
+ console.log('šŸ“„ Response length:', result.response.length);
25
+ console.log('šŸ“„ Response preview:', result.response.substring(0, 100) + '...');
26
+
27
+ console.log('šŸŽ‰ Test completed! Check simple-traces.jsonl for trace data.');
28
+
29
+ // Wait a bit for telemetry to flush
30
+ console.log('ā³ Waiting for telemetry to flush...');
31
+ await new Promise(resolve => setTimeout(resolve, 2000));
32
+
33
+ } catch (error) {
34
+ console.error('āŒ Test failed:', error.message);
35
+ }
36
+ }
37
+
38
+ testChatTracing().catch(console.error);
@@ -0,0 +1,49 @@
1
+ // Test direct function call with telemetry
2
+ import { TelemetryConfig } from './telemetry.js';
3
+ import { trace } from '@opentelemetry/api';
4
+
5
+ // Initialize telemetry first
6
+ const telemetryConfig = new TelemetryConfig({
7
+ enableFile: true,
8
+ enableConsole: true,
9
+ filePath: './direct-test-traces.jsonl'
10
+ });
11
+
12
+ telemetryConfig.initialize();
13
+
14
+ // Test function with tracing
15
+ function testFunction() {
16
+ const tracer = trace.getTracer('direct-test');
17
+ return tracer.startActiveSpan('testFunction', (span) => {
18
+ try {
19
+ console.log('šŸ” Inside test function with span');
20
+
21
+ span.setAttributes({
22
+ 'test.name': 'direct-function-test',
23
+ 'test.timestamp': Date.now()
24
+ });
25
+
26
+ const result = 'Test completed successfully';
27
+ span.setStatus({ code: 1 }); // SUCCESS
28
+ return result;
29
+ } catch (error) {
30
+ span.recordException(error);
31
+ span.setStatus({ code: 2, message: error.message });
32
+ throw error;
33
+ } finally {
34
+ span.end();
35
+ }
36
+ });
37
+ }
38
+
39
+ // Test the function
40
+ console.log('Testing direct function call with telemetry...');
41
+ const result = testFunction();
42
+ console.log('āœ… Result:', result);
43
+
44
+ // Wait and shutdown
45
+ setTimeout(async () => {
46
+ console.log('ā³ Shutting down telemetry...');
47
+ await telemetryConfig.shutdown();
48
+ console.log('šŸŽ‰ Test completed!');
49
+ }, 2000);
@@ -0,0 +1,103 @@
1
+ #!/usr/bin/env node
2
+
3
+ /**
4
+ * Test script to verify file size validation prevents OOM attacks
5
+ */
6
+
7
+ import { writeFileSync, unlinkSync } from 'fs';
8
+ import { readFile, stat } from 'fs/promises';
9
+ import { resolve } from 'path';
10
+
11
+ // Same constants as in the implementation
12
+ const MAX_IMAGE_FILE_SIZE = 20 * 1024 * 1024;
13
+
14
+ // Simulate the file size validation logic
15
+ async function testFileSizeCheck(filePath) {
16
+ try {
17
+ const absolutePath = resolve(process.cwd(), filePath);
18
+ const fileStats = await stat(absolutePath);
19
+
20
+ if (fileStats.size > MAX_IMAGE_FILE_SIZE) {
21
+ console.log(`[DEBUG] Image file too large: ${absolutePath} (${fileStats.size} bytes, max: ${MAX_IMAGE_FILE_SIZE})`);
22
+ return false;
23
+ }
24
+
25
+ console.log(`[DEBUG] File size OK: ${absolutePath} (${fileStats.size} bytes)`);
26
+ return true;
27
+ } catch (error) {
28
+ console.log(`[DEBUG] File check failed: ${error.message}`);
29
+ return false;
30
+ }
31
+ }
32
+
33
+ async function testFileSizeValidation() {
34
+ console.log('šŸ”’ Testing File Size Validation\n');
35
+
36
+ const testImagePath = './large-test-image.png';
37
+
38
+ // Create a simple PNG header
39
+ const pngHeader = Buffer.from([
40
+ 0x89, 0x50, 0x4E, 0x47, 0x0D, 0x0A, 0x1A, 0x0A,
41
+ 0x00, 0x00, 0x00, 0x0D, 0x49, 0x48, 0x44, 0x52,
42
+ 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01,
43
+ 0x08, 0x06, 0x00, 0x00, 0x00, 0x1F, 0x15, 0xC4,
44
+ 0x89
45
+ ]);
46
+
47
+ try {
48
+ // Test 1: Create a file larger than 20MB (simulate large file)
49
+ console.log('šŸ“‹ Test 1: File size validation');
50
+
51
+ // Create a "large" file by padding with zeros (simulates large file)
52
+ const largeFileSize = 25 * 1024 * 1024; // 25MB
53
+ const largeBuffer = Buffer.alloc(largeFileSize);
54
+
55
+ // Copy PNG header to start
56
+ pngHeader.copy(largeBuffer, 0);
57
+
58
+ // Write the large file
59
+ writeFileSync(testImagePath, largeBuffer);
60
+ console.log(`āœ… Created large test file: ${testImagePath} (${largeFileSize} bytes)`);
61
+
62
+ // Try to validate it
63
+ const sizeCheckPassed = await testFileSizeCheck(testImagePath);
64
+
65
+ if (!sizeCheckPassed) {
66
+ console.log('āœ… File size validation working: Large file rejected');
67
+ } else {
68
+ console.log('āŒ File size validation failed: Large file was accepted');
69
+ }
70
+
71
+ // Test 2: Small file should work
72
+ console.log('\nšŸ“‹ Test 2: Small file acceptance');
73
+
74
+ unlinkSync(testImagePath);
75
+
76
+ // Create a small valid file
77
+ writeFileSync(testImagePath, pngHeader);
78
+ console.log(`āœ… Created small test file: ${testImagePath} (${pngHeader.length} bytes)`);
79
+
80
+ const sizeCheckPassed2 = await testFileSizeCheck(testImagePath);
81
+
82
+ if (sizeCheckPassed2) {
83
+ console.log('āœ… Small file accepted successfully');
84
+ } else {
85
+ console.log('āŒ Small file validation failed');
86
+ }
87
+
88
+ console.log('\nšŸŽ‰ File size validation tests completed!');
89
+
90
+ } catch (error) {
91
+ console.error('āŒ Test failed:', error);
92
+ } finally {
93
+ // Cleanup
94
+ try {
95
+ unlinkSync(testImagePath);
96
+ console.log('\n🧹 Test cleanup completed');
97
+ } catch (e) {
98
+ // Ignore cleanup errors
99
+ }
100
+ }
101
+ }
102
+
103
+ testFileSizeValidation().catch(console.error);
@@ -0,0 +1,258 @@
1
+ #!/usr/bin/env node
2
+
3
+ /**
4
+ * Full MCP Integration Test
5
+ * Tests the complete flow: ProbeChat with MCP enabled -> XML parsing -> Tool execution
6
+ */
7
+
8
+ import { ProbeChat } from './probeChat.js';
9
+ import { writeFileSync } from 'fs';
10
+ import { join } from 'path';
11
+
12
+ async function testFullMCPIntegration() {
13
+ console.log('=== Full MCP Integration Test ===\n');
14
+
15
+ // Step 1: Create MCP configuration
16
+ const mcpConfig = {
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
+ // Step 2: Initialize ProbeChat with MCP enabled
28
+ console.log('šŸš€ Initializing ProbeChat with MCP support...\n');
29
+
30
+ const chat = new ProbeChat({
31
+ enableMcp: true,
32
+ mcpServers: mcpConfig,
33
+ isNonInteractive: false,
34
+ debug: true
35
+ });
36
+
37
+ // Wait for MCP initialization
38
+ await new Promise(resolve => setTimeout(resolve, 2000));
39
+
40
+ try {
41
+ // Step 3: Test native tools (XML format)
42
+ console.log('\n=== Testing Native Tools (XML Format) ===\n');
43
+
44
+ const nativeQueries = [
45
+ {
46
+ name: 'Native Search',
47
+ message: 'Search for "export" in the current directory using the search tool',
48
+ expectedXml: '<search>'
49
+ },
50
+ {
51
+ name: 'Native Query',
52
+ message: 'Find all classes in JavaScript files using the query tool',
53
+ expectedXml: '<query>'
54
+ }
55
+ ];
56
+
57
+ for (const test of nativeQueries) {
58
+ console.log(`\nšŸ“ ${test.name}`);
59
+ console.log(` Query: "${test.message}"`);
60
+
61
+ // Simulate what the AI would generate
62
+ const mockResponse = test.name === 'Native Search'
63
+ ? '<search>\n<query>export</query>\n<path>.</path>\n</search>'
64
+ : '<query>\n<pattern>class $NAME</pattern>\n<path>.</path>\n<language>javascript</language>\n</query>';
65
+
66
+ console.log(` Mock XML: ${mockResponse.replace(/\n/g, ' ')}`);
67
+
68
+ // Test parsing
69
+ const parsed = chat.mcpBridge
70
+ ? parseHybridXmlToolCall(mockResponse, Object.keys(chat.toolImplementations), chat.mcpBridge)
71
+ : parseXmlToolCallWithThinking(mockResponse);
72
+
73
+ if (parsed) {
74
+ console.log(` āœ… Parsed successfully: ${parsed.toolName} (type: ${parsed.type || 'native'})`);
75
+ console.log(` šŸ“Š Parameters:`, parsed.params);
76
+ } else {
77
+ console.log(` āŒ Failed to parse XML`);
78
+ }
79
+ }
80
+
81
+ // Step 4: Test MCP tools (JSON in XML format)
82
+ console.log('\n\n=== Testing MCP Tools (JSON in XML Format) ===\n');
83
+
84
+ if (chat.mcpBridge && chat.mcpBridge.getToolNames().length > 0) {
85
+ const mcpQueries = [
86
+ {
87
+ name: 'MCP Search',
88
+ toolName: 'probe_search_code',
89
+ xml: `<probe_search_code>
90
+ <params>
91
+ {
92
+ "query": "MCP",
93
+ "path": process.cwd(),
94
+ "max_results": 2
95
+ }
96
+ </params>
97
+ </probe_search_code>`
98
+ },
99
+ {
100
+ name: 'MCP Query',
101
+ toolName: 'probe_query_code',
102
+ xml: `<probe_query_code>
103
+ <params>
104
+ {
105
+ "pattern": "function $NAME",
106
+ "path": process.cwd(),
107
+ "language": "javascript"
108
+ }
109
+ </params>
110
+ </probe_query_code>`
111
+ }
112
+ ];
113
+
114
+ for (const test of mcpQueries) {
115
+ console.log(`\nšŸ“ ${test.name}`);
116
+ console.log(` Tool: ${test.toolName}`);
117
+
118
+ // Test parsing
119
+ const parsed = parseHybridXmlToolCall(
120
+ test.xml,
121
+ Object.keys(chat.toolImplementations),
122
+ chat.mcpBridge
123
+ );
124
+
125
+ if (parsed) {
126
+ console.log(` āœ… Parsed successfully: ${parsed.toolName} (type: ${parsed.type})`);
127
+ console.log(` šŸ“Š Parameters:`, parsed.params);
128
+
129
+ // Try to execute the MCP tool
130
+ try {
131
+ if (chat.mcpBridge.isMcpTool(parsed.toolName)) {
132
+ const result = await chat.mcpBridge.mcpTools[parsed.toolName].execute(parsed.params);
133
+ const preview = typeof result === 'string'
134
+ ? result.substring(0, 150)
135
+ : JSON.stringify(result).substring(0, 150);
136
+ console.log(` āœ… Execution successful! Result preview: ${preview}...`);
137
+ }
138
+ } catch (error) {
139
+ console.log(` āŒ Execution failed: ${error.message}`);
140
+ }
141
+ } else {
142
+ console.log(` āŒ Failed to parse MCP XML`);
143
+ }
144
+ }
145
+ } else {
146
+ console.log('āŒ No MCP tools available');
147
+ }
148
+
149
+ // Step 5: Test system message generation
150
+ console.log('\n\n=== Testing System Message with MCP Tools ===\n');
151
+
152
+ const systemMessage = await chat.getSystemMessage();
153
+
154
+ // Check if MCP tools are included
155
+ const hasMCPSection = systemMessage.includes('MCP Tools');
156
+ const hasProbeSearch = systemMessage.includes('probe_search_code');
157
+
158
+ console.log(`šŸ“„ System message length: ${systemMessage.length} characters`);
159
+ console.log(` āœ… Has MCP section: ${hasMCPSection}`);
160
+ console.log(` āœ… Has probe_search_code: ${hasProbeSearch}`);
161
+
162
+ if (hasMCPSection) {
163
+ // Extract and show MCP tools section
164
+ const mcpStart = systemMessage.indexOf('## MCP Tools');
165
+ if (mcpStart !== -1) {
166
+ const mcpEnd = systemMessage.indexOf('\n## ', mcpStart + 1);
167
+ const mcpSection = systemMessage.substring(
168
+ mcpStart,
169
+ mcpEnd !== -1 ? mcpEnd : mcpStart + 500
170
+ );
171
+ console.log('\nšŸ“‹ MCP Tools Section Preview:');
172
+ console.log('─'.repeat(50));
173
+ console.log(mcpSection.substring(0, 300) + '...');
174
+ console.log('─'.repeat(50));
175
+ }
176
+ }
177
+
178
+ // Step 6: Generate summary report
179
+ const report = `# MCP Integration Test Report
180
+
181
+ ## Test Date
182
+ ${new Date().toISOString()}
183
+
184
+ ## Configuration
185
+ - MCP Enabled: ${chat.mcpEnabled}
186
+ - MCP Servers: ${JSON.stringify(mcpConfig.mcpServers, null, 2)}
187
+
188
+ ## Results
189
+
190
+ ### Native Tools
191
+ - Search tool: āœ… Parsed correctly with XML parameters
192
+ - Query tool: āœ… Parsed correctly with XML parameters
193
+
194
+ ### MCP Tools
195
+ - Available: ${chat.mcpBridge ? chat.mcpBridge.getToolNames().length : 0} tools
196
+ - probe_search_code: āœ… Parsed and executed
197
+ - probe_query_code: āœ… Parsed and executed
198
+
199
+ ### System Message
200
+ - Includes MCP section: ${hasMCPSection ? 'āœ…' : 'āŒ'}
201
+ - Includes MCP tools: ${hasProbeSearch ? 'āœ…' : 'āŒ'}
202
+
203
+ ## Conclusion
204
+ The MCP integration is ${hasMCPSection && hasProbeSearch ? 'fully functional' : 'partially working'}.
205
+
206
+ ### Key Features Working:
207
+ 1. āœ… MCP server connection via stdio transport
208
+ 2. āœ… Tool discovery and registration
209
+ 3. āœ… XML parsing with JSON parameters for MCP tools
210
+ 4. āœ… Native XML tool parsing still works
211
+ 5. āœ… Hybrid parsing distinguishes between native and MCP tools
212
+ 6. āœ… System message includes MCP tool definitions
213
+
214
+ ### XML Syntax Examples:
215
+
216
+ #### Native Tool (XML parameters):
217
+ \`\`\`xml
218
+ <search>
219
+ <query>search term</query>
220
+ <path>./src</path>
221
+ </search>
222
+ \`\`\`
223
+
224
+ #### MCP Tool (JSON parameters in params tag):
225
+ \`\`\`xml
226
+ <probe_search_code>
227
+ <params>
228
+ {
229
+ "query": "search term",
230
+ "path": "/absolute/path",
231
+ "max_results": 5
232
+ }
233
+ </params>
234
+ </probe_search_code>
235
+ \`\`\`
236
+ `;
237
+
238
+ const reportPath = '/tmp/mcp-integration-report.md';
239
+ writeFileSync(reportPath, report);
240
+ console.log(`\n\nšŸ“„ Full report saved to: ${reportPath}`);
241
+
242
+ // Cleanup
243
+ await chat.cleanup();
244
+ console.log('\nāœ… Test completed successfully!');
245
+
246
+ } catch (error) {
247
+ console.error('\nāŒ Test failed:', error);
248
+ await chat.cleanup().catch(() => {});
249
+ process.exit(1);
250
+ }
251
+ }
252
+
253
+ // Import functions we need
254
+ import { parseHybridXmlToolCall } from '@probelabs/probe/agent/mcp';
255
+ import { parseXmlToolCallWithThinking } from '../../npm/src/agent/tools.js';
256
+
257
+ // Run the test
258
+ testFullMCPIntegration().catch(console.error);
@@ -0,0 +1,12 @@
1
+ <github_context type="issue" number="63">
2
+ <details><title><![CDATA[Image test]]></title><body><![CDATA[<img width="1078" height="1872" alt="Image" src="https://github.com/user-attachments/assets/6c1292af-3e0b-4f45-8ef9-609102dea5fb" />
3
+
4
+ https://private-user-images.githubusercontent.com/221343105/467536716-0b9bb81b-8b8a-4b00-aae7-0d8d109e28ce.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3NTI3NjEwNTgsIm5iZiI6MTc1Mjc2MDc1OCwicGF0aCI6Ii8yMjEzNDMxMDUvNDY3NTM2NzE2LTBiOWJiODFiLThiOGEtNGIwMC1hYWU3LTBkOGQxMDllMjhjZS5wbmc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjUwNzE3JTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI1MDcxN1QxMzU5MThaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT0xMzJjOWJlZGEzZmEyZjEyNWQxNDRkZDI5Y2RkNTdhZDk2ZWExMzZhY2RlYTI0M2M2MjlkMTEyYTQzYWE0ODY1JlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCJ9.VanGvZZNDqamBAjEBaCjsMJusej89OjHxwY8O2R72i4
5
+
6
+ Probe - I want you to tell what you see on each image.]]></body></details>
7
+
8
+ <comments><comment type="issue"><author>buger</author><timestamp>2025-07-21T08:41:45Z</timestamp><content><![CDATA[/probe - I want you to tell what you see on each image ?]]></content></comment><comment type="issue"><author>buger</author><timestamp>2025-07-22T15:42:14Z</timestamp><content><![CDATA[/probe - I want you to tell what you see on each image ?]]></content></comment></comments>
9
+ <user_request author="buger" timestamp="2025-07-22T15:42:14Z"><![CDATA[- I want you to tell what you see on each image ?]]></user_request>
10
+ </github_context>
11
+
12
+ <instructions><![CDATA[You are an AI assistant analyzing a GitHub Issue...]]></instructions>