@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,7 @@
1
+ # Ignore all files in this directory
2
+ *
3
+ # Except these files
4
+ !.gitignore
5
+ !.gitkeep
6
+ !README.md
7
+ !probe
File without changes
@@ -0,0 +1,12 @@
1
+ # Probe Binary Directory
2
+
3
+ This directory is used to store the downloaded probe binary.
4
+
5
+ The binary is automatically downloaded during package installation.
6
+ If you encounter any issues with the download, you can manually place the probe binary in this directory.
7
+
8
+ Binary name should be:
9
+ - `probe` (on Linux/macOS)
10
+ - `probe.exe` (on Windows)
11
+
12
+ You can download the binary from: https://github.com/probelabs/probe/releases
@@ -0,0 +1,167 @@
1
+ #!/usr/bin/env node
2
+
3
+ import { spawn } from 'child_process';
4
+ import { join, dirname } from 'path';
5
+ import { fileURLToPath } from 'url';
6
+ import { access, constants } from 'fs';
7
+ import { promisify } from 'util';
8
+
9
+ const accessAsync = promisify(access);
10
+ const __filename = fileURLToPath(import.meta.url);
11
+ const __dirname = dirname(__filename);
12
+
13
+ /**
14
+ * Check if a file exists and is executable
15
+ */
16
+ async function isExecutable(filePath) {
17
+ try {
18
+ await accessAsync(filePath, constants.F_OK | constants.X_OK);
19
+ return true;
20
+ } catch {
21
+ return false;
22
+ }
23
+ }
24
+
25
+ /**
26
+ * Attempt to download the binary if it's missing
27
+ */
28
+ async function ensureBinary(binaryPath) {
29
+ try {
30
+ // Try to import the downloader and download the binary
31
+ const { downloadProbeBinary } = await import('../src/downloader.js');
32
+ console.error('Probe binary not found, downloading...');
33
+ await downloadProbeBinary();
34
+
35
+ // Check if the binary now exists and is executable
36
+ if (await isExecutable(binaryPath)) {
37
+ console.error('Binary downloaded successfully.');
38
+
39
+ // On macOS, try to remove quarantine attributes that might prevent execution
40
+ if (process.platform === 'darwin') {
41
+ try {
42
+ const { exec } = await import('child_process');
43
+ const { promisify } = await import('util');
44
+ const execAsync = promisify(exec);
45
+ await execAsync(`xattr -d com.apple.quarantine "${binaryPath}" 2>/dev/null || true`);
46
+ } catch {
47
+ // Ignore errors - this is just a precaution
48
+ }
49
+ }
50
+
51
+ return true;
52
+ } else {
53
+ console.error('Binary downloaded but is not executable.');
54
+ return false;
55
+ }
56
+ } catch (error) {
57
+ console.error('Failed to download binary:', error.message);
58
+ return false;
59
+ }
60
+ }
61
+
62
+ /**
63
+ * Spawn the probe binary with proper error handling
64
+ */
65
+ async function spawnProbeBinary(binaryPath, args) {
66
+ return new Promise((resolve, reject) => {
67
+ const child = spawn(binaryPath, args, { stdio: 'inherit' });
68
+
69
+ child.on('error', async (error) => {
70
+ // Handle spawn errors, particularly the dreaded "spawn Unknown system error -8"
71
+ if (error.code === 'ENOENT') {
72
+ console.error(`Error: Binary not found at ${binaryPath}`);
73
+ process.exit(1);
74
+ } else if (error.code === 'EACCES' || error.message.includes('spawn') || error.errno === -8) {
75
+ console.error(`Error: Cannot execute binary at ${binaryPath}`);
76
+ console.error('This might be due to:');
77
+ console.error('1. Missing execute permissions');
78
+ console.error('2. Architecture mismatch');
79
+ console.error('3. Corrupted binary file');
80
+ console.error('');
81
+ console.error('Attempting to re-download the binary...');
82
+
83
+ const downloadSuccess = await ensureBinary(binaryPath);
84
+ if (downloadSuccess) {
85
+ // Retry execution after download
86
+ try {
87
+ const retryChild = spawn(binaryPath, args, { stdio: 'inherit' });
88
+ retryChild.on('exit', (code) => resolve(code || 0));
89
+ retryChild.on('error', (retryError) => {
90
+ console.error('Failed to execute binary even after re-download:', retryError.message);
91
+ reject(retryError);
92
+ });
93
+ } catch (retryError) {
94
+ console.error('Failed to retry execution:', retryError.message);
95
+ reject(retryError);
96
+ }
97
+ } else {
98
+ reject(error);
99
+ }
100
+ } else {
101
+ console.error('Unexpected error:', error.message);
102
+ reject(error);
103
+ }
104
+ });
105
+
106
+ child.on('exit', (code) => resolve(code || 0));
107
+ });
108
+ }
109
+
110
+ // Main execution logic
111
+ async function main() {
112
+ try {
113
+ // Check if first argument is 'mcp'
114
+ if (process.argv[2] === 'mcp') {
115
+ // Launch MCP server instead of binary
116
+ const mcpPath = join(__dirname, '..', 'build', 'mcp', 'index.js');
117
+ const mcpArgs = process.argv.slice(3); // Remove 'node', 'probe', and 'mcp'
118
+
119
+ const child = spawn('node', [mcpPath, ...mcpArgs], { stdio: 'inherit' });
120
+ child.on('exit', (code) => process.exit(code || 0));
121
+ } else if (process.argv[2] === 'agent') {
122
+ // Launch Agent server instead of binary (use bundled version to reduce dependencies)
123
+ const agentPath = join(__dirname, '..', 'build', 'agent', 'index.js');
124
+
125
+ // Verify bundled agent exists
126
+ try {
127
+ await accessAsync(agentPath, constants.F_OK);
128
+ } catch {
129
+ console.error('Error: Bundled agent not found at', agentPath);
130
+ console.error('Please run: npm run build:agent');
131
+ process.exit(1);
132
+ }
133
+
134
+ const agentArgs = process.argv.slice(3); // Remove 'node', 'probe', and 'agent'
135
+ const child = spawn('node', [agentPath, ...agentArgs], { stdio: 'inherit' });
136
+ child.on('exit', (code) => process.exit(code || 0));
137
+ } else {
138
+ // Normal probe binary execution
139
+ const isWindows = process.platform === 'win32';
140
+ const binaryName = isWindows ? 'probe.exe' : 'probe-binary';
141
+ const binaryPath = join(__dirname, binaryName);
142
+
143
+ // Check if binary exists and is executable
144
+ if (!(await isExecutable(binaryPath))) {
145
+ console.error('Probe binary not found or not executable, attempting to download...');
146
+ const downloadSuccess = await ensureBinary(binaryPath);
147
+ if (!downloadSuccess) {
148
+ console.error('Failed to download probe binary. Please try installing again or check your internet connection.');
149
+ process.exit(1);
150
+ }
151
+ }
152
+
153
+ // Execute the binary
154
+ const exitCode = await spawnProbeBinary(binaryPath, process.argv.slice(2));
155
+ process.exit(exitCode);
156
+ }
157
+ } catch (error) {
158
+ console.error('Unexpected error in probe wrapper:', error.message);
159
+ process.exit(1);
160
+ }
161
+ }
162
+
163
+ // Run the main function
164
+ main().catch(error => {
165
+ console.error('Fatal error:', error.message);
166
+ process.exit(1);
167
+ });
@@ -0,0 +1,414 @@
1
+ # Claude Code Integration Guide
2
+
3
+ Complete guide for using ProbeAgent with Claude Code's built-in `claude` command for zero-configuration AI-powered code assistance.
4
+
5
+ ## Table of Contents
6
+ - [Overview](#overview)
7
+ - [Quick Start](#quick-start)
8
+ - [How It Works](#how-it-works)
9
+ - [Auto-Fallback Feature](#auto-fallback-feature)
10
+ - [Tool Event Extraction](#tool-event-extraction)
11
+ - [Configuration](#configuration)
12
+ - [Examples](#examples)
13
+ - [Testing](#testing)
14
+ - [Troubleshooting](#troubleshooting)
15
+
16
+ ## Overview
17
+
18
+ ProbeAgent now supports Claude Code's `claude` command as a provider, enabling:
19
+ - **Zero-configuration usage** in Claude Code environments
20
+ - **Automatic fallback** when no API keys are present
21
+ - **Black-box operation** - Claude Code handles its own agentic loop
22
+ - **Tool event extraction** - Visibility into internal tool usage
23
+ - **Full MCP integration** - Access to Probe's semantic search tools
24
+
25
+ ## Quick Start
26
+
27
+ ### Automatic (Zero Config)
28
+
29
+ ```javascript
30
+ import { ProbeAgent } from 'probe-agent';
31
+
32
+ // Works automatically if claude command is installed!
33
+ const agent = new ProbeAgent({
34
+ allowedFolders: ['/path/to/your/code']
35
+ });
36
+
37
+ await agent.initialize();
38
+ const response = await agent.answer('Explain how this codebase works');
39
+ ```
40
+
41
+ ### Explicit Provider
42
+
43
+ ```javascript
44
+ const agent = new ProbeAgent({
45
+ provider: 'claude-code', // Explicit
46
+ allowedFolders: ['/path/to/your/code']
47
+ });
48
+ ```
49
+
50
+ ### Environment Variable
51
+
52
+ ```bash
53
+ USE_CLAUDE_CODE=true node your-script.js
54
+ ```
55
+
56
+ ## How It Works
57
+
58
+ ### Architecture
59
+
60
+ ```
61
+ ProbeAgent
62
+
63
+ provider: 'claude-code'
64
+
65
+ Enhanced Claude Code Engine
66
+
67
+ Spawns: claude --output-format json --mcp-config ...
68
+
69
+ Claude Code (black box)
70
+ - Handles its own agentic loop
71
+ - Uses MCP tools (mcp__probe__*)
72
+ - Returns final response
73
+
74
+ Tool Event Extraction
75
+
76
+ Response + Tool Events
77
+ ```
78
+
79
+ ### Black Box Mode
80
+
81
+ Unlike the native engine which controls tool iteration:
82
+ - **Claude Code manages its own loop** - ProbeAgent doesn't see intermediate steps
83
+ - **No XML formatting** - Uses native MCP protocol
84
+ - **Tool events extracted post-hoc** - Emitted as batch after response
85
+ - **Bypass tool loop** - ProbeAgent's iteration logic is skipped
86
+
87
+ ### Key Components
88
+
89
+ 1. **Enhanced Claude Code Engine** (`src/agent/engines/enhanced-claude-code.js`)
90
+ - Spawns `claude` command with MCP configuration
91
+ - Manages session persistence
92
+ - Extracts tool events from response stream
93
+
94
+ 2. **Built-in MCP Server** (`src/agent/mcp/built-in-server.js`)
95
+ - Provides Probe tools via MCP protocol
96
+ - Tools: search, extract, query, list_files, search_files
97
+ - Automatically configured and started
98
+
99
+ 3. **Auto-Detection Logic** (`src/agent/ProbeAgent.js`)
100
+ - Checks for `claude` command availability
101
+ - Falls back when no API keys present
102
+
103
+ ## Auto-Fallback Feature
104
+
105
+ ### Detection Flow
106
+
107
+ ```
108
+ Constructor → No API keys found
109
+
110
+ Mark apiType='uninitialized'
111
+
112
+ initialize() called
113
+
114
+ Check: is claude command available?
115
+
116
+ Yes → provider='claude-code'
117
+ No → Throw error with instructions
118
+ ```
119
+
120
+ ### Priority Order
121
+
122
+ 1. **Explicit provider** - Use if `options.provider` is set
123
+ 2. **API keys** - Use first available (Anthropic, OpenAI, Google, AWS)
124
+ 3. **Claude command** - Auto-fallback if installed
125
+ 4. **Error** - Neither API keys nor claude available
126
+
127
+ ### Error Messages
128
+
129
+ **No API keys, no claude command:**
130
+ ```
131
+ Error: No API key provided and claude command not found. Please either:
132
+ 1. Set an API key: ANTHROPIC_API_KEY, OPENAI_API_KEY, GOOGLE_GENERATIVE_AI_API_KEY, or AWS credentials
133
+ 2. Install claude command from https://docs.claude.com/en/docs/claude-code
134
+ ```
135
+
136
+ **With debug enabled:**
137
+ ```
138
+ [DEBUG] No API keys found - will check for claude command in initialize()
139
+ [DEBUG] No API keys found, but claude command detected
140
+ [DEBUG] Auto-switching to claude-code provider
141
+ ```
142
+
143
+ ## Tool Event Extraction
144
+
145
+ ### How It Works
146
+
147
+ Claude Code emits `assistant` messages containing tool use information:
148
+
149
+ ```javascript
150
+ {
151
+ type: 'assistant',
152
+ message: {
153
+ content: [
154
+ { type: 'text', text: 'Let me search for that...' },
155
+ { type: 'tool_use', id: 'toolu_123', name: 'Glob', input: {...} }
156
+ ]
157
+ }
158
+ }
159
+ ```
160
+
161
+ The engine extracts these and emits as events:
162
+
163
+ ```javascript
164
+ agent.events.on('toolCall', (event) => {
165
+ console.log(event.name); // 'Glob'
166
+ console.log(event.status); // 'started'
167
+ console.log(event.timestamp); // '2025-11-20T10:21:30.935Z'
168
+ console.log(event.args); // { pattern: '*.js', path: '...' }
169
+ });
170
+ ```
171
+
172
+ ### Event Structure
173
+
174
+ ```javascript
175
+ {
176
+ timestamp: '2025-11-20T10:21:30.935Z',
177
+ name: 'Glob',
178
+ args: { pattern: '*.js', path: '/path/to/code' },
179
+ id: 'toolu_012JAiRK7bho9vevZyyUYJgu',
180
+ status: 'started' // or 'completed'
181
+ }
182
+ ```
183
+
184
+ ### Batch Emission
185
+
186
+ Unlike native engine which emits in real-time:
187
+ - Events collected during response
188
+ - Emitted as batch after completion
189
+ - Maintains compatibility with native engine event listeners
190
+
191
+ ## Configuration
192
+
193
+ ### Options
194
+
195
+ ```javascript
196
+ const agent = new ProbeAgent({
197
+ // Provider
198
+ provider: 'claude-code', // Force claude-code provider
199
+
200
+ // Required
201
+ allowedFolders: ['/path'], // Allowed code directories
202
+
203
+ // Optional
204
+ debug: true, // Enable debug logging
205
+ sessionId: 'my-session', // Custom session ID
206
+ customPrompt: '...', // Custom system prompt
207
+ allowedTools: ['mcp__*'], // Tool filtering
208
+ });
209
+ ```
210
+
211
+ ### Environment Variables
212
+
213
+ ```bash
214
+ # Force claude-code provider
215
+ USE_CLAUDE_CODE=true
216
+
217
+ # Enable debug logging
218
+ DEBUG=probe:*
219
+ ```
220
+
221
+ ## Examples
222
+
223
+ ### Basic Usage
224
+
225
+ ```javascript
226
+ import { ProbeAgent } from 'probe-agent';
227
+
228
+ const agent = new ProbeAgent({
229
+ allowedFolders: [process.cwd()]
230
+ });
231
+
232
+ await agent.initialize();
233
+
234
+ const response = await agent.answer(
235
+ 'Find all async functions that handle errors'
236
+ );
237
+
238
+ console.log(response);
239
+ ```
240
+
241
+ ### With Tool Event Monitoring
242
+
243
+ ```javascript
244
+ const agent = new ProbeAgent({
245
+ provider: 'claude-code',
246
+ allowedFolders: [process.cwd()],
247
+ debug: true
248
+ });
249
+
250
+ await agent.initialize();
251
+
252
+ // Track tool usage
253
+ const toolsUsed = [];
254
+ agent.events.on('toolCall', (event) => {
255
+ if (event.status === 'started') {
256
+ toolsUsed.push(event.name);
257
+ }
258
+ });
259
+
260
+ const response = await agent.answer('Analyze this codebase');
261
+
262
+ console.log('Tools used:', [...new Set(toolsUsed)]);
263
+ ```
264
+
265
+ ### Multi-Step Queries
266
+
267
+ ```javascript
268
+ // Claude Code handles multi-step internally
269
+ const agent = new ProbeAgent({
270
+ provider: 'claude-code',
271
+ allowedFolders: ['/my/project']
272
+ });
273
+
274
+ await agent.initialize();
275
+
276
+ // This might trigger multiple internal tool uses
277
+ const response = await agent.answer(
278
+ 'Find the authentication logic and explain how it works'
279
+ );
280
+ // Claude Code will search, extract, and analyze automatically
281
+ ```
282
+
283
+ ## Testing
284
+
285
+ ### Integration Tests
286
+
287
+ Located in `tests/integration/`:
288
+
289
+ 1. **claude-code-auto-fallback.spec.js** - Tests automatic provider detection
290
+ 2. **claude-code-tool-events.spec.js** - Tests tool event extraction
291
+ 3. **claude-code-multi-step.spec.js** - Tests complex multi-step queries
292
+
293
+ These are standalone integration tests designed to work with the actual `claude` command.
294
+
295
+ ### Manual Testing
296
+
297
+ ```bash
298
+ # Test auto-fallback
299
+ node tests/integration/claude-code-auto-fallback.spec.js
300
+
301
+ # Test tool events
302
+ node tests/integration/claude-code-tool-events.spec.js
303
+
304
+ # Test multi-step
305
+ node tests/integration/claude-code-multi-step.spec.js
306
+ ```
307
+
308
+ ## Troubleshooting
309
+
310
+ ### Claude command not found
311
+
312
+ **Problem:** `Error: claude command not found`
313
+
314
+ **Solution:**
315
+ - Install Claude Code from https://docs.claude.com/en/docs/claude-code
316
+ - Verify: `claude --version`
317
+
318
+ ### Auto-fallback not working
319
+
320
+ **Problem:** Not detecting claude command
321
+
322
+ **Solutions:**
323
+ - Ensure `claude` is in PATH
324
+ - Check: `which claude`
325
+ - Verify API keys are not set (auto-fallback only when no keys)
326
+
327
+ ### Tool events not appearing
328
+
329
+ **Problem:** No tool events emitted
330
+
331
+ **Possible causes:**
332
+ 1. Query didn't trigger tool use
333
+ 2. Need to enable event listeners before query
334
+ 3. Check that `agent.events` exists
335
+
336
+ **Solution:**
337
+ ```javascript
338
+ // Enable events BEFORE query
339
+ agent.events.on('toolCall', (event) => {
340
+ console.log('Tool event:', event);
341
+ });
342
+
343
+ await agent.answer('query here');
344
+ ```
345
+
346
+ ### Session persistence issues
347
+
348
+ **Problem:** Context lost between queries
349
+
350
+ **Solution:**
351
+ - Use same `sessionId` for related queries
352
+ - Claude Code maintains conversation history automatically
353
+
354
+ ### MCP tools not working
355
+
356
+ **Problem:** Tools not accessible
357
+
358
+ **Checks:**
359
+ 1. MCP server started: Look for `[MCP] Built-in server started`
360
+ 2. Tools registered: Check debug output for tool list
361
+ 3. Tool filtering: Verify `allowedTools` configuration
362
+
363
+ ## Best Practices
364
+
365
+ 1. **Use in Claude Code Environment**
366
+ - Designed for Claude Code's native environment
367
+ - Leverages built-in authentication
368
+
369
+ 2. **Let Claude Code Handle Complexity**
370
+ - Don't try to control tool iterations
371
+ - Trust the black-box approach
372
+ - Monitor via tool events if needed
373
+
374
+ 3. **Enable Debug for Development**
375
+ ```javascript
376
+ const agent = new ProbeAgent({
377
+ provider: 'claude-code',
378
+ debug: true // See what's happening
379
+ });
380
+ ```
381
+
382
+ 4. **Handle Errors Gracefully**
383
+ ```javascript
384
+ try {
385
+ await agent.initialize();
386
+ const response = await agent.answer(query);
387
+ } catch (error) {
388
+ if (error.message.includes('claude command not found')) {
389
+ // Fallback to API key approach
390
+ }
391
+ }
392
+ ```
393
+
394
+ ## Comparison: Native vs Claude Code
395
+
396
+ | Feature | Native Engine | Claude Code Engine |
397
+ |---------|--------------|-------------------|
398
+ | Tool Loop | ProbeAgent controls (1-30 iterations) | Claude Code handles internally |
399
+ | Tool Events | Real-time (started/completed pairs) | Batch emission at end |
400
+ | Configuration | Requires API keys | Auto-detects claude command |
401
+ | Debug Output | Shows "Tool Loop Iteration X/Y" | Shows "bypassing tool loop" |
402
+ | MCP Protocol | XML-based tool format | Native MCP protocol |
403
+ | Use Case | Custom control, API-based | Claude Code environment |
404
+
405
+ ## Related Documentation
406
+
407
+ - See `examples/probe-agent-cli.js` for CLI usage
408
+ - See `examples/multi-engine-demo.js` for switching between engines
409
+ - See main README for general ProbeAgent documentation
410
+
411
+ ---
412
+
413
+ **Last Updated:** November 2025
414
+ **Version:** 0.6.0+