@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,267 @@
1
+ /**
2
+ * Test fixtures for Mermaid diagrams and JSON responses
3
+ * Used across multiple test files for consistency
4
+ */
5
+
6
+ export const validMermaidDiagrams = {
7
+ flowchart: {
8
+ simple: `graph TD
9
+ A[Start] --> B[Process]
10
+ B --> C[End]`,
11
+
12
+ complex: `graph TD
13
+ A[Start] --> B{Decision}
14
+ B -->|Yes| C[Process A]
15
+ B -->|No| D[Process B]
16
+ C --> E[End]
17
+ D --> E`,
18
+
19
+ withStyling: `graph TD
20
+ A[Start] --> B[Process]
21
+ B --> C[End]
22
+ style A fill:#f9f,stroke:#333,stroke-width:4px`
23
+ },
24
+
25
+ sequence: {
26
+ simple: `sequenceDiagram
27
+ Alice->>Bob: Hello Bob, how are you?
28
+ Bob-->>Alice: Great!`,
29
+
30
+ complex: `sequenceDiagram
31
+ participant Alice
32
+ participant Bob
33
+ participant Carol
34
+
35
+ Alice->>Bob: Hello Bob
36
+ Bob->>Carol: Hello Carol
37
+ Carol-->>Bob: Hi Bob
38
+ Bob-->>Alice: Hi Alice`,
39
+
40
+ withActivation: `sequenceDiagram
41
+ Alice->>+Bob: Request
42
+ Bob-->>-Alice: Response`
43
+ },
44
+
45
+ gantt: `gantt
46
+ title A Gantt Diagram
47
+ dateFormat YYYY-MM-DD
48
+ section Section
49
+ A task :a1, 2014-01-01, 30d
50
+ Another task :after a1, 20d`,
51
+
52
+ pie: `pie title Pets adopted by volunteers
53
+ "Dogs" : 386
54
+ "Cats" : 85.9
55
+ "Rats" : 15`,
56
+
57
+ state: `stateDiagram-v2
58
+ [*] --> Still
59
+ Still --> [*]
60
+ Still --> Moving
61
+ Moving --> Still
62
+ Moving --> Crash
63
+ Crash --> [*]`,
64
+
65
+ class: `classDiagram
66
+ Animal <|-- Duck
67
+ Animal <|-- Fish
68
+ Animal <|-- Zebra
69
+ Animal : +int age
70
+ Animal : +String gender
71
+ Animal: +isMammal()
72
+ Animal: +mate()
73
+ class Duck{
74
+ +String beakColor
75
+ +swim()
76
+ +quack()
77
+ }`
78
+ };
79
+
80
+ export const invalidMermaidDiagrams = {
81
+ unknownType: 'unknownDiagram\n some content',
82
+
83
+ missingBracket: `graph TD
84
+ A[Start --> B[Process]
85
+ B --> C[End]`,
86
+
87
+ missingColon: `sequenceDiagram
88
+ Alice->>Bob Hello world
89
+ Bob-->>Alice: Response`,
90
+
91
+ malformedSyntax: 'this is not a valid mermaid diagram',
92
+
93
+ withCodeBlocks: `\`\`\`mermaid
94
+ graph TD
95
+ A --> B
96
+ \`\`\``,
97
+
98
+ empty: '',
99
+ whitespaceOnly: ' \n\t '
100
+ };
101
+
102
+ export const validJsonResponses = {
103
+ simple: '{"test": "value"}',
104
+
105
+ complex: `{
106
+ "users": [
107
+ {"id": 1, "name": "Alice", "active": true},
108
+ {"id": 2, "name": "Bob", "active": false}
109
+ ],
110
+ "total": 2,
111
+ "metadata": {
112
+ "timestamp": "2023-01-01T00:00:00Z",
113
+ "version": "1.0"
114
+ }
115
+ }`,
116
+
117
+ array: '[1, 2, 3, {"nested": true}]',
118
+ primitives: {
119
+ null: 'null',
120
+ boolean: 'true',
121
+ number: '42',
122
+ string: '"hello world"'
123
+ }
124
+ };
125
+
126
+ export const invalidJsonResponses = {
127
+ missingQuotes: '{"test": value}',
128
+ trailingComma: '{"test": "value",}',
129
+ unquotedKeys: '{test: "value"}',
130
+ incomplete: '{"test":',
131
+ malformed: '{"test":: "value"}',
132
+ empty: '',
133
+ whitespace: ' \n\t '
134
+ };
135
+
136
+ export const mixedResponses = {
137
+ validBoth: `Here's the analysis:
138
+
139
+ \`\`\`json
140
+ {
141
+ "status": "completed",
142
+ "diagram_count": 1
143
+ }
144
+ \`\`\`
145
+
146
+ \`\`\`mermaid
147
+ graph TD
148
+ A[Analysis] --> B[Results]
149
+ B --> C[Complete]
150
+ \`\`\``,
151
+
152
+ validJsonInvalidMermaid: `Here's the analysis:
153
+
154
+ \`\`\`json
155
+ {
156
+ "status": "completed",
157
+ "errors": []
158
+ }
159
+ \`\`\`
160
+
161
+ \`\`\`mermaid
162
+ invalid diagram syntax
163
+ \`\`\``,
164
+
165
+ invalidJsonValidMermaid: `Here's the analysis:
166
+
167
+ \`\`\`json
168
+ {
169
+ "status": completed,
170
+ "errors": []
171
+ }
172
+ \`\`\`
173
+
174
+ \`\`\`mermaid
175
+ graph TD
176
+ A[Start] --> B[End]
177
+ \`\`\``,
178
+
179
+ invalidBoth: `Here's the analysis:
180
+
181
+ \`\`\`json
182
+ {
183
+ "status": completed
184
+ "errors": []
185
+ }
186
+ \`\`\`
187
+
188
+ \`\`\`mermaid
189
+ unknown diagram type
190
+ invalid syntax
191
+ \`\`\``,
192
+
193
+ multipleDiagrams: `Multiple diagrams:
194
+
195
+ \`\`\`mermaid
196
+ graph TD
197
+ A --> B
198
+ \`\`\`
199
+
200
+ \`\`\`mermaid
201
+ sequenceDiagram
202
+ Alice->>Bob: Hello
203
+ \`\`\`
204
+
205
+ \`\`\`mermaid
206
+ pie title Test
207
+ "A" : 50
208
+ "B" : 50
209
+ \`\`\``
210
+ };
211
+
212
+ export const schemas = {
213
+ jsonOnly: '{"type": "object", "properties": {"name": {"type": "string"}}}',
214
+ mermaidOnly: 'Create a mermaid flowchart showing the process',
215
+ mixed: 'Return JSON response with embedded mermaid diagram',
216
+ neither: 'Return plain text response',
217
+
218
+ specific: {
219
+ flowchart: 'Generate a mermaid flowchart diagram',
220
+ sequence: 'Create a sequence diagram using mermaid',
221
+ gantt: 'Show a gantt chart in mermaid format',
222
+ pie: 'Create a pie chart diagram',
223
+ json: 'Response must be valid JSON format'
224
+ }
225
+ };
226
+
227
+ export const errorScenarios = {
228
+ json: {
229
+ unexpectedToken: {
230
+ response: '{"test": value}',
231
+ error: 'Unexpected token v in JSON at position 9',
232
+ detailedError: 'Unexpected token v in JSON at position 9'
233
+ },
234
+
235
+ unexpectedEnd: {
236
+ response: '{"test":',
237
+ error: 'Unexpected end of JSON input',
238
+ detailedError: 'Unexpected end of JSON input'
239
+ },
240
+
241
+ duplicateKeys: {
242
+ response: '{"test": 1, "test": 2}',
243
+ error: 'Duplicate key "test"',
244
+ detailedError: 'JSON contains duplicate key "test"'
245
+ }
246
+ },
247
+
248
+ mermaid: {
249
+ unclosedBracket: {
250
+ diagram: 'graph TD\n A[Start --> B[Process]',
251
+ error: 'Unclosed bracket on line 2',
252
+ detailedError: 'Line "A[Start --> B[Process]" contains an unclosed bracket'
253
+ },
254
+
255
+ missingColon: {
256
+ diagram: 'sequenceDiagram\n Alice->>Bob Hello',
257
+ error: 'Missing colon in sequence message on line 2',
258
+ detailedError: 'Line "Alice->>Bob Hello" appears to be a sequence message but is missing a colon'
259
+ },
260
+
261
+ unknownType: {
262
+ diagram: 'invalidDiagram\n content',
263
+ error: 'Diagram does not match any known Mermaid diagram pattern',
264
+ detailedError: 'The diagram must start with a valid Mermaid diagram type (graph, sequenceDiagram, gantt, pie, etc.)'
265
+ }
266
+ }
267
+ };
@@ -0,0 +1,148 @@
1
+ #!/usr/bin/env node
2
+
3
+ /**
4
+ * Test that ProbeAgent auto-detects and falls back to claude-code provider
5
+ * when no API keys are present but claude command is available
6
+ */
7
+
8
+ import { ProbeAgent } from '../../src/agent/ProbeAgent.js';
9
+
10
+ async function testAutoFallback() {
11
+ console.log('๐Ÿงช Testing Auto-Fallback to Claude Code Provider\n');
12
+ console.log('='*60 + '\n');
13
+
14
+ // Temporarily remove all API key env vars
15
+ const savedEnv = {
16
+ ANTHROPIC_API_KEY: process.env.ANTHROPIC_API_KEY,
17
+ ANTHROPIC_AUTH_TOKEN: process.env.ANTHROPIC_AUTH_TOKEN,
18
+ OPENAI_API_KEY: process.env.OPENAI_API_KEY,
19
+ GOOGLE_GENERATIVE_AI_API_KEY: process.env.GOOGLE_GENERATIVE_AI_API_KEY,
20
+ GOOGLE_API_KEY: process.env.GOOGLE_API_KEY,
21
+ AWS_ACCESS_KEY_ID: process.env.AWS_ACCESS_KEY_ID,
22
+ AWS_SECRET_ACCESS_KEY: process.env.AWS_SECRET_ACCESS_KEY,
23
+ AWS_REGION: process.env.AWS_REGION,
24
+ AWS_BEDROCK_API_KEY: process.env.AWS_BEDROCK_API_KEY
25
+ };
26
+
27
+ // Remove all API keys
28
+ delete process.env.ANTHROPIC_API_KEY;
29
+ delete process.env.ANTHROPIC_AUTH_TOKEN;
30
+ delete process.env.OPENAI_API_KEY;
31
+ delete process.env.GOOGLE_GENERATIVE_AI_API_KEY;
32
+ delete process.env.GOOGLE_API_KEY;
33
+ delete process.env.AWS_ACCESS_KEY_ID;
34
+ delete process.env.AWS_SECRET_ACCESS_KEY;
35
+ delete process.env.AWS_REGION;
36
+ delete process.env.AWS_BEDROCK_API_KEY;
37
+
38
+ try {
39
+ console.log('Creating ProbeAgent with NO API keys...\n');
40
+
41
+ const agent = new ProbeAgent({
42
+ allowedFolders: [process.cwd()],
43
+ debug: true
44
+ });
45
+
46
+ console.log('\nInitializing agent...\n');
47
+ await agent.initialize();
48
+
49
+ // Check if it auto-switched to claude-code
50
+ if (agent.clientApiProvider === 'claude-code' && agent.apiType === 'claude-code') {
51
+ console.log('\nโœ… SUCCESS: Auto-detected and switched to claude-code provider!');
52
+ console.log(` Provider: ${agent.clientApiProvider}`);
53
+ console.log(` API Type: ${agent.apiType}`);
54
+ console.log(` Model: ${agent.model}`);
55
+
56
+ // Try a simple query
57
+ console.log('\n๐Ÿ“ Testing query: "What is 5 + 3?"\n');
58
+ const response = await agent.answer('What is 5 + 3?');
59
+
60
+ if (response && response.length > 0) {
61
+ console.log('โœ… Query successful!');
62
+ console.log('Response:', response.substring(0, 100) + (response.length > 100 ? '...' : ''));
63
+ } else {
64
+ console.log('โš ๏ธ Query returned empty response');
65
+ }
66
+
67
+ // Clean up
68
+ if (agent.engine && agent.engine.close) {
69
+ await agent.engine.close();
70
+ }
71
+
72
+ } else {
73
+ console.log('โŒ FAIL: Did not auto-switch to claude-code provider');
74
+ console.log(` Provider: ${agent.clientApiProvider}`);
75
+ console.log(` API Type: ${agent.apiType}`);
76
+ }
77
+
78
+ } catch (error) {
79
+ if (error.message.includes('claude command not found')) {
80
+ console.log('\nโš ๏ธ Test could not run: claude command not found on system');
81
+ console.log('This is expected if Claude Code is not installed');
82
+ console.log('\nTo install Claude Code:');
83
+ console.log(' https://docs.claude.com/en/docs/claude-code');
84
+ } else {
85
+ console.error('\nโŒ Test failed:', error.message);
86
+ }
87
+ } finally {
88
+ // Restore environment variables
89
+ Object.entries(savedEnv).forEach(([key, value]) => {
90
+ if (value !== undefined) {
91
+ process.env[key] = value;
92
+ }
93
+ });
94
+
95
+ console.log('\n' + '='*60);
96
+ console.log('๐Ÿ Auto-Fallback Test Complete\n');
97
+ }
98
+ }
99
+
100
+ async function testWithAPIKey() {
101
+ console.log('\n' + '='*60);
102
+ console.log('๐Ÿงช Testing Normal Behavior with API Key\n');
103
+
104
+ // Set a mock env var
105
+ const hadKey = !!process.env.ANTHROPIC_API_KEY;
106
+ if (!hadKey) {
107
+ process.env.ANTHROPIC_API_KEY = 'test-key';
108
+ }
109
+
110
+ try {
111
+ const agent = new ProbeAgent({
112
+ allowedFolders: [process.cwd()],
113
+ debug: false
114
+ });
115
+
116
+ await agent.initialize();
117
+
118
+ if (agent.apiType !== 'claude-code') {
119
+ console.log('โœ… With API key, did NOT auto-switch to claude-code');
120
+ console.log(` API Type: ${agent.apiType}`);
121
+ } else {
122
+ console.log('โš ๏ธ With API key, unexpectedly switched to claude-code');
123
+ }
124
+
125
+ } catch (error) {
126
+ console.log('โ„น๏ธ Expected error with test API key:', error.message.substring(0, 80));
127
+ } finally {
128
+ if (!hadKey) {
129
+ delete process.env.ANTHROPIC_API_KEY;
130
+ }
131
+ }
132
+ }
133
+
134
+ async function main() {
135
+ console.log('๐Ÿ”ฌ ProbeAgent Auto-Fallback to Claude Code Test\n');
136
+ console.log('This test verifies that ProbeAgent automatically uses claude-code');
137
+ console.log('provider when no API keys are found but claude command is available.\n');
138
+
139
+ await testAutoFallback();
140
+ await testWithAPIKey();
141
+
142
+ console.log('\n๐Ÿ“‹ Summary:');
143
+ console.log('- Auto-fallback activates when: No API keys + claude command available');
144
+ console.log('- Falls back to: provider="claude-code"');
145
+ console.log('- User benefit: Zero-config usage in Claude Code environment');
146
+ }
147
+
148
+ main().catch(console.error);
@@ -0,0 +1,127 @@
1
+ #!/usr/bin/env node
2
+
3
+ /**
4
+ * Integration test for multi-step Claude Code responses
5
+ * Tests that we properly handle responses when Claude Code uses internal agents/tools
6
+ */
7
+
8
+ import { ProbeAgent } from '../../src/agent/ProbeAgent.js';
9
+
10
+ async function testMultiStepQuery() {
11
+ console.log('Testing Multi-Step Claude Code Query (with internal tool use)\n');
12
+ console.log('='*60 + '\n');
13
+
14
+ const agent = new ProbeAgent({
15
+ allowedFolders: [process.cwd()],
16
+ debug: false, // Clean output
17
+ provider: 'claude-code'
18
+ });
19
+
20
+ try {
21
+ await agent.initialize();
22
+
23
+ // Query that might trigger internal tool use (like Task agent)
24
+ console.log('๐Ÿ“ Query: "Explain how this npm package works"\n');
25
+ console.log('Note: This query may trigger internal tool usage in Claude Code\n');
26
+
27
+ let streamedContent = '';
28
+ const result = await agent.answer(
29
+ 'Explain how this npm package (ProbeAgent) works - give a brief overview',
30
+ [],
31
+ {
32
+ onStream: (chunk) => {
33
+ streamedContent += chunk;
34
+ }
35
+ }
36
+ );
37
+
38
+ console.log('='*60 + '\n');
39
+ console.log('๐Ÿ” Response Analysis:\n');
40
+
41
+ if (result && result.length > 0) {
42
+ console.log('โœ… Got final response from Claude Code');
43
+ console.log('Response length:', result.length, 'characters');
44
+ console.log('\nFirst 300 characters of response:');
45
+ console.log(result.substring(0, 300) + '...\n');
46
+
47
+ // Check if response seems complete
48
+ if (result.includes('ProbeAgent') || result.includes('agent') || result.includes('AI')) {
49
+ console.log('โœ… Response contains relevant content about ProbeAgent');
50
+ } else {
51
+ console.log('โš ๏ธ Response may not contain expected content');
52
+ }
53
+ } else {
54
+ console.log('โŒ FAIL: Empty response received');
55
+ console.log('This indicates the multi-step fix may not be working');
56
+ }
57
+
58
+ // Check streaming
59
+ if (streamedContent.length > 0) {
60
+ console.log('\nโœ… Streaming also worked');
61
+ console.log('Streamed content length:', streamedContent.length);
62
+ } else {
63
+ console.log('\nโš ๏ธ No streamed content received');
64
+ }
65
+
66
+ // Clean up
67
+ if (agent.engine && agent.engine.close) {
68
+ await agent.engine.close();
69
+ }
70
+
71
+ } catch (error) {
72
+ console.error('Test failed:', error.message);
73
+ }
74
+ }
75
+
76
+ async function testSimpleQuery() {
77
+ console.log('\n' + '='*60);
78
+ console.log('Testing Simple Claude Code Query (baseline)\n');
79
+
80
+ const agent = new ProbeAgent({
81
+ allowedFolders: [process.cwd()],
82
+ debug: false,
83
+ provider: 'claude-code'
84
+ });
85
+
86
+ try {
87
+ await agent.initialize();
88
+
89
+ console.log('๐Ÿ“ Query: "Say hello"\n');
90
+
91
+ const result = await agent.answer('Say hello');
92
+
93
+ if (result && result.length > 0) {
94
+ console.log('โœ… Simple query works');
95
+ console.log('Response:', result.substring(0, 100));
96
+ } else {
97
+ console.log('โŒ Even simple query returned empty');
98
+ }
99
+
100
+ if (agent.engine && agent.engine.close) {
101
+ await agent.engine.close();
102
+ }
103
+
104
+ } catch (error) {
105
+ console.error('Simple test failed:', error.message);
106
+ }
107
+ }
108
+
109
+ async function main() {
110
+ console.log('๐Ÿงช Claude Code Multi-Step Response Integration Test\n');
111
+
112
+ // Test simple query first (baseline)
113
+ await testSimpleQuery();
114
+
115
+ // Test complex query that may trigger internal tools
116
+ await testMultiStepQuery();
117
+
118
+ console.log('\n' + '='*60);
119
+ console.log('๐Ÿ Integration Test Complete\n');
120
+ console.log('Key Points:');
121
+ console.log('- Claude Code may use internal agents/tools (Task, etc.)');
122
+ console.log('- These emit "assistant" type messages');
123
+ console.log('- Without handling "assistant" type, responses appear empty');
124
+ console.log('- The fix adds support for extracting text from "assistant" messages');
125
+ }
126
+
127
+ main().catch(console.error);
@@ -0,0 +1,163 @@
1
+ #!/usr/bin/env node
2
+
3
+ /**
4
+ * Test that Claude Code tool events are properly extracted and emitted
5
+ */
6
+
7
+ import { ProbeAgent } from '../../src/agent/ProbeAgent.js';
8
+
9
+ async function testToolEvents() {
10
+ console.log('Testing Tool Event Extraction from Claude Code\n');
11
+ console.log('='*60 + '\n');
12
+
13
+ const agent = new ProbeAgent({
14
+ allowedFolders: [process.cwd()],
15
+ debug: true, // Enable debug to see tool event emissions
16
+ provider: 'claude-code'
17
+ });
18
+
19
+ // Track tool events
20
+ const toolEvents = [];
21
+
22
+ try {
23
+ await agent.initialize();
24
+
25
+ // Listen for tool events
26
+ if (agent.events) {
27
+ agent.events.on('toolCall', (event) => {
28
+ toolEvents.push(event);
29
+ console.log('\n๐Ÿ“Š Tool Event Captured:');
30
+ console.log(' - Name:', event.name);
31
+ console.log(' - Status:', event.status);
32
+ console.log(' - Timestamp:', event.timestamp);
33
+ if (event.args) {
34
+ console.log(' - Args:', JSON.stringify(event.args).substring(0, 100));
35
+ }
36
+ if (event.resultPreview) {
37
+ console.log(' - Result:', event.resultPreview.substring(0, 100));
38
+ }
39
+ });
40
+ }
41
+
42
+ // Query that should trigger tool use
43
+ console.log('๐Ÿ“ Query: "List the main JavaScript files in this directory"\n');
44
+ console.log('This query should trigger tool use (listFiles or similar)\n');
45
+
46
+ const result = await agent.answer(
47
+ 'List the main JavaScript files in this directory',
48
+ [],
49
+ {
50
+ onStream: (chunk) => {
51
+ // Silent streaming to focus on events
52
+ }
53
+ }
54
+ );
55
+
56
+ console.log('\n' + '='*60 + '\n');
57
+ console.log('๐Ÿ“‹ Response Summary:');
58
+ console.log('Response length:', result.length, 'characters');
59
+ console.log('First 300 chars:', result.substring(0, 300) + '...\n');
60
+
61
+ console.log('='*60 + '\n');
62
+ console.log('๐Ÿ” Tool Event Analysis:\n');
63
+
64
+ if (toolEvents.length > 0) {
65
+ console.log(`โœ… Captured ${toolEvents.length} tool events`);
66
+
67
+ // Group by status
68
+ const started = toolEvents.filter(e => e.status === 'started');
69
+ const completed = toolEvents.filter(e => e.status === 'completed');
70
+ const errors = toolEvents.filter(e => e.status === 'error');
71
+
72
+ console.log(` - Started: ${started.length}`);
73
+ console.log(` - Completed: ${completed.length}`);
74
+ console.log(` - Errors: ${errors.length}`);
75
+
76
+ // List unique tool names
77
+ const toolNames = [...new Set(toolEvents.map(e => e.name))];
78
+ console.log('\n๐Ÿ“ฆ Tools used:');
79
+ toolNames.forEach(name => {
80
+ const count = toolEvents.filter(e => e.name === name).length;
81
+ console.log(` - ${name} (${count} events)`);
82
+ });
83
+
84
+ // Check if MCP tools were used
85
+ const mcpTools = toolEvents.filter(e => e.name && e.name.startsWith('mcp__'));
86
+ if (mcpTools.length > 0) {
87
+ console.log('\nโœ… MCP tools detected:', mcpTools.map(e => e.name).join(', '));
88
+ }
89
+
90
+ } else {
91
+ console.log('โš ๏ธ No tool events captured');
92
+ console.log('This could mean:');
93
+ console.log(' 1. Claude Code didn\'t use any tools for this query');
94
+ console.log(' 2. Tool event extraction needs adjustment');
95
+ }
96
+
97
+ // Clean up
98
+ if (agent.engine && agent.engine.close) {
99
+ await agent.engine.close();
100
+ }
101
+
102
+ } catch (error) {
103
+ console.error('Test failed:', error.message);
104
+ }
105
+ }
106
+
107
+ async function testSimpleQuery() {
108
+ console.log('\n' + '='*60);
109
+ console.log('Testing Simple Query (no tools expected)\n');
110
+
111
+ const agent = new ProbeAgent({
112
+ allowedFolders: [process.cwd()],
113
+ debug: false,
114
+ provider: 'claude-code'
115
+ });
116
+
117
+ const toolEvents = [];
118
+
119
+ try {
120
+ await agent.initialize();
121
+
122
+ if (agent.events) {
123
+ agent.events.on('toolCall', (event) => {
124
+ toolEvents.push(event);
125
+ });
126
+ }
127
+
128
+ console.log('๐Ÿ“ Query: "What is 2+2?"\n');
129
+ const result = await agent.answer('What is 2+2?');
130
+
131
+ if (toolEvents.length === 0) {
132
+ console.log('โœ… No tool events for simple query (expected)');
133
+ } else {
134
+ console.log(`โš ๏ธ ${toolEvents.length} tool events for simple query (unexpected)`);
135
+ }
136
+
137
+ if (agent.engine && agent.engine.close) {
138
+ await agent.engine.close();
139
+ }
140
+
141
+ } catch (error) {
142
+ console.error('Simple test failed:', error.message);
143
+ }
144
+ }
145
+
146
+ async function main() {
147
+ console.log('๐Ÿงช Claude Code Tool Event Extraction Test\n');
148
+
149
+ // Test with query that should trigger tools
150
+ await testToolEvents();
151
+
152
+ // Test with simple query (no tools expected)
153
+ await testSimpleQuery();
154
+
155
+ console.log('\n' + '='*60);
156
+ console.log('๐Ÿ Tool Event Test Complete\n');
157
+ console.log('Key Points:');
158
+ console.log('- Tool events are extracted from Claude Code\'s internal operations');
159
+ console.log('- Events are emitted as a batch after response completes');
160
+ console.log('- This maintains event compatibility with regular ProbeAgent');
161
+ }
162
+
163
+ main().catch(console.error);