@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,599 @@
1
+ use criterion::{black_box, criterion_group, criterion_main, BenchmarkId, Criterion};
2
+ use probe_code::search::{perform_probe, SearchOptions};
3
+ use std::fs;
4
+ use tempfile::TempDir;
5
+
6
+ /// Create a temporary directory with test files for benchmarking
7
+ fn create_test_codebase() -> TempDir {
8
+ let temp_dir = TempDir::new().unwrap();
9
+ let base_path = temp_dir.path();
10
+
11
+ // Create different file types with varying complexity
12
+ let test_files = vec![
13
+ (
14
+ "src/main.rs",
15
+ r#"
16
+ use std::collections::HashMap;
17
+ use std::io;
18
+
19
+ fn main() {
20
+ println!("Hello, world!");
21
+ let mut map = HashMap::new();
22
+ map.insert("key", "value");
23
+
24
+ for i in 0..1000 {
25
+ process_item(i);
26
+ }
27
+ }
28
+
29
+ fn process_item(item: i32) -> Result<(), io::Error> {
30
+ if item % 2 == 0 {
31
+ println!("Even: {}", item);
32
+ } else {
33
+ println!("Odd: {}", item);
34
+ }
35
+ Ok(())
36
+ }
37
+
38
+ struct DataProcessor {
39
+ data: Vec<i32>,
40
+ processed: bool,
41
+ }
42
+
43
+ impl DataProcessor {
44
+ fn new() -> Self {
45
+ Self {
46
+ data: Vec::new(),
47
+ processed: false,
48
+ }
49
+ }
50
+
51
+ fn process(&mut self) {
52
+ self.data.sort();
53
+ self.processed = true;
54
+ }
55
+ }
56
+ "#,
57
+ ),
58
+ (
59
+ "src/lib.rs",
60
+ r#"
61
+ pub mod utils;
62
+ pub mod search;
63
+ pub mod parser;
64
+
65
+ pub use search::*;
66
+ pub use parser::*;
67
+
68
+ /// Main library functionality
69
+ pub fn run_search(query: &str, path: &str) -> Vec<String> {
70
+ let mut results = Vec::new();
71
+
72
+ // Simulate search logic
73
+ for i in 0..100 {
74
+ if i % 10 == 0 {
75
+ results.push(format!("Result {}: {}", i, query));
76
+ }
77
+ }
78
+
79
+ results
80
+ }
81
+
82
+ #[cfg(test)]
83
+ mod tests {
84
+ use super::*;
85
+
86
+ #[test]
87
+ fn test_search() {
88
+ let results = run_search("test", ".");
89
+ assert!(!results.is_empty());
90
+ }
91
+ }
92
+ "#,
93
+ ),
94
+ (
95
+ "src/utils.rs",
96
+ r#"
97
+ use std::collections::HashMap;
98
+
99
+ pub fn calculate_metrics(data: &[i32]) -> HashMap<String, f64> {
100
+ let mut metrics = HashMap::new();
101
+
102
+ if data.is_empty() {
103
+ return metrics;
104
+ }
105
+
106
+ let sum: i32 = data.iter().sum();
107
+ let avg = sum as f64 / data.len() as f64;
108
+ let min = *data.iter().min().unwrap();
109
+ let max = *data.iter().max().unwrap();
110
+
111
+ metrics.insert("average".to_string(), avg);
112
+ metrics.insert("min".to_string(), min as f64);
113
+ metrics.insert("max".to_string(), max as f64);
114
+ metrics.insert("sum".to_string(), sum as f64);
115
+
116
+ metrics
117
+ }
118
+
119
+ pub fn process_text(text: &str) -> String {
120
+ text.lines()
121
+ .map(|line| line.trim())
122
+ .filter(|line| !line.is_empty())
123
+ .collect::<Vec<_>>()
124
+ .join("\n")
125
+ }
126
+
127
+ pub fn fibonacci(n: usize) -> u64 {
128
+ match n {
129
+ 0 => 0,
130
+ 1 => 1,
131
+ _ => fibonacci(n - 1) + fibonacci(n - 2),
132
+ }
133
+ }
134
+ "#,
135
+ ),
136
+ (
137
+ "src/parser.rs",
138
+ r#"
139
+ use std::collections::HashMap;
140
+
141
+ #[derive(Debug, Clone)]
142
+ pub enum Token {
143
+ Identifier(String),
144
+ Number(i32),
145
+ String(String),
146
+ Operator(String),
147
+ Keyword(String),
148
+ }
149
+
150
+ pub struct Parser {
151
+ tokens: Vec<Token>,
152
+ position: usize,
153
+ }
154
+
155
+ impl Parser {
156
+ pub fn new(tokens: Vec<Token>) -> Self {
157
+ Self { tokens, position: 0 }
158
+ }
159
+
160
+ pub fn parse(&mut self) -> Result<HashMap<String, Token>, String> {
161
+ let mut symbols = HashMap::new();
162
+
163
+ while self.position < self.tokens.len() {
164
+ match &self.tokens[self.position] {
165
+ Token::Identifier(name) => {
166
+ symbols.insert(name.clone(), self.tokens[self.position].clone());
167
+ }
168
+ Token::Keyword(keyword) => {
169
+ if keyword == "function" {
170
+ self.parse_function(&mut symbols)?;
171
+ }
172
+ }
173
+ _ => {}
174
+ }
175
+ self.position += 1;
176
+ }
177
+
178
+ Ok(symbols)
179
+ }
180
+
181
+ fn parse_function(&mut self, symbols: &mut HashMap<String, Token>) -> Result<(), String> {
182
+ self.position += 1;
183
+ if self.position < self.tokens.len() {
184
+ if let Token::Identifier(name) = &self.tokens[self.position] {
185
+ symbols.insert(format!("function_{}", name), self.tokens[self.position].clone());
186
+ }
187
+ }
188
+ Ok(())
189
+ }
190
+ }
191
+
192
+ pub fn tokenize(input: &str) -> Vec<Token> {
193
+ let mut tokens = Vec::new();
194
+ let words: Vec<&str> = input.split_whitespace().collect();
195
+
196
+ for word in words {
197
+ if word.chars().all(|c| c.is_ascii_digit()) {
198
+ if let Ok(num) = word.parse::<i32>() {
199
+ tokens.push(Token::Number(num));
200
+ }
201
+ } else if word.starts_with('"') && word.ends_with('"') {
202
+ tokens.push(Token::String(word[1..word.len()-1].to_string()));
203
+ } else if ["fn", "struct", "impl", "use", "mod"].contains(&word) {
204
+ tokens.push(Token::Keyword(word.to_string()));
205
+ } else if ["+", "-", "*", "/", "=", "==", "!="].contains(&word) {
206
+ tokens.push(Token::Operator(word.to_string()));
207
+ } else {
208
+ tokens.push(Token::Identifier(word.to_string()));
209
+ }
210
+ }
211
+
212
+ tokens
213
+ }
214
+ "#,
215
+ ),
216
+ (
217
+ "tests/integration_tests.rs",
218
+ r#"
219
+ use probe_code::*;
220
+
221
+ #[test]
222
+ fn test_basic_search() {
223
+ let results = run_search("main", "src/");
224
+ assert!(!results.is_empty());
225
+ }
226
+
227
+ #[test]
228
+ fn test_complex_search() {
229
+ let results = run_search("HashMap", "src/");
230
+ assert!(!results.is_empty());
231
+ }
232
+
233
+ #[test]
234
+ fn test_function_search() {
235
+ let results = run_search("process_item", "src/");
236
+ assert!(!results.is_empty());
237
+ }
238
+
239
+ #[test]
240
+ fn test_struct_search() {
241
+ let results = run_search("DataProcessor", "src/");
242
+ assert!(!results.is_empty());
243
+ }
244
+
245
+ #[test]
246
+ fn test_empty_search() {
247
+ let results = run_search("nonexistent_term", "src/");
248
+ assert!(results.is_empty());
249
+ }
250
+ "#,
251
+ ),
252
+ (
253
+ "README.md",
254
+ r#"
255
+ # Test Project
256
+
257
+ This is a test project for benchmarking the probe search tool.
258
+
259
+ ## Features
260
+
261
+ - Fast search capabilities
262
+ - AST-based parsing
263
+ - Multiple language support
264
+ - Efficient indexing
265
+
266
+ ## Usage
267
+
268
+ ```bash
269
+ probe "search term" /path/to/code
270
+ ```
271
+
272
+ ## Architecture
273
+
274
+ The system consists of several key components:
275
+
276
+ 1. **Parser** - Tokenizes and parses code
277
+ 2. **Search Engine** - Performs semantic search
278
+ 3. **Indexer** - Builds efficient search indices
279
+ 4. **CLI** - Command-line interface
280
+
281
+ ## Performance
282
+
283
+ The tool is designed for high performance with:
284
+
285
+ - Parallel processing using Rayon
286
+ - Efficient data structures
287
+ - Optimized search algorithms
288
+ - Memory-efficient parsing
289
+
290
+ ## Examples
291
+
292
+ Search for function definitions:
293
+ ```bash
294
+ probe "fn main" src/
295
+ ```
296
+
297
+ Search for struct usage:
298
+ ```bash
299
+ probe "HashMap" src/
300
+ ```
301
+
302
+ Search for specific patterns:
303
+ ```bash
304
+ probe "process_item" src/
305
+ ```
306
+ "#,
307
+ ),
308
+ ];
309
+
310
+ // Create directory structure
311
+ fs::create_dir_all(base_path.join("src")).unwrap();
312
+ fs::create_dir_all(base_path.join("tests")).unwrap();
313
+
314
+ // Write test files
315
+ for (path, content) in test_files {
316
+ fs::write(base_path.join(path), content).unwrap();
317
+ }
318
+
319
+ temp_dir
320
+ }
321
+
322
+ /// Benchmark different search patterns
323
+ fn benchmark_search_patterns(c: &mut Criterion) {
324
+ let temp_dir = create_test_codebase();
325
+ let search_path = temp_dir.path().to_path_buf();
326
+
327
+ let test_patterns = vec![
328
+ ("simple_word", "main"),
329
+ ("function_call", "process_item"),
330
+ ("type_usage", "HashMap"),
331
+ ("struct_def", "DataProcessor"),
332
+ ("keyword", "fn"),
333
+ ("common_word", "use"),
334
+ ("rare_word", "fibonacci"),
335
+ ("number", "1000"),
336
+ ("empty_result", "nonexistent_xyz"),
337
+ ];
338
+
339
+ let mut group = c.benchmark_group("search_patterns");
340
+
341
+ for (name, pattern) in test_patterns {
342
+ group.bench_with_input(BenchmarkId::new("pattern", name), &pattern, |b, pattern| {
343
+ b.iter(|| {
344
+ let query = vec![pattern.to_string()];
345
+ let options = SearchOptions {
346
+ path: &search_path,
347
+ queries: &query,
348
+ files_only: false,
349
+ custom_ignores: &[],
350
+ exclude_filenames: false,
351
+ reranker: "hybrid",
352
+ frequency_search: true,
353
+ exact: false,
354
+ language: None,
355
+ max_results: Some(100),
356
+ max_bytes: None,
357
+ max_tokens: None,
358
+ allow_tests: true,
359
+ no_merge: false,
360
+ merge_threshold: None,
361
+ dry_run: false,
362
+ session: None,
363
+ timeout: 30,
364
+ question: None,
365
+ no_gitignore: false,
366
+ };
367
+
368
+ black_box(perform_probe(&options).unwrap())
369
+ })
370
+ });
371
+ }
372
+
373
+ group.finish();
374
+ }
375
+
376
+ /// Benchmark different result limits
377
+ fn benchmark_result_limits(c: &mut Criterion) {
378
+ let temp_dir = create_test_codebase();
379
+ let search_path = temp_dir.path().to_path_buf();
380
+
381
+ let limits = vec![1, 10, 50, 100, 500];
382
+ let mut group = c.benchmark_group("result_limits");
383
+
384
+ for limit in limits {
385
+ group.bench_with_input(BenchmarkId::new("limit", limit), &limit, |b, &limit| {
386
+ b.iter(|| {
387
+ let query = vec!["use".to_string()]; // Common pattern
388
+ let options = SearchOptions {
389
+ path: &search_path,
390
+ queries: &query,
391
+ files_only: false,
392
+ custom_ignores: &[],
393
+ exclude_filenames: false,
394
+ reranker: "hybrid",
395
+ frequency_search: true,
396
+ exact: false,
397
+ language: None,
398
+ max_results: Some(limit),
399
+ max_bytes: None,
400
+ max_tokens: None,
401
+ allow_tests: true,
402
+ no_merge: false,
403
+ merge_threshold: None,
404
+ dry_run: false,
405
+ session: None,
406
+ timeout: 30,
407
+ question: None,
408
+ no_gitignore: false,
409
+ };
410
+
411
+ black_box(perform_probe(&options).unwrap())
412
+ })
413
+ });
414
+ }
415
+
416
+ group.finish();
417
+ }
418
+
419
+ /// Benchmark different search options
420
+ fn benchmark_search_options(c: &mut Criterion) {
421
+ let temp_dir = create_test_codebase();
422
+ let search_path = temp_dir.path().to_path_buf();
423
+
424
+ let mut group = c.benchmark_group("search_options");
425
+
426
+ // Test different rerankers
427
+ let rerankers = vec!["hybrid", "frequency", "semantic"];
428
+ for reranker in rerankers {
429
+ group.bench_with_input(
430
+ BenchmarkId::new("reranker", reranker),
431
+ &reranker,
432
+ |b, &reranker| {
433
+ b.iter(|| {
434
+ let query = vec!["HashMap".to_string()];
435
+ let options = SearchOptions {
436
+ path: &search_path,
437
+ queries: &query,
438
+ files_only: false,
439
+ custom_ignores: &[],
440
+ exclude_filenames: false,
441
+ reranker,
442
+ frequency_search: true,
443
+ exact: false,
444
+ language: None,
445
+ max_results: Some(50),
446
+ max_bytes: None,
447
+ max_tokens: None,
448
+ allow_tests: true,
449
+ no_merge: false,
450
+ merge_threshold: None,
451
+ dry_run: false,
452
+ session: None,
453
+ timeout: 30,
454
+ question: None,
455
+ no_gitignore: false,
456
+ };
457
+
458
+ black_box(perform_probe(&options).unwrap())
459
+ })
460
+ },
461
+ );
462
+ }
463
+
464
+ // Test with/without frequency search
465
+ group.bench_with_input(
466
+ BenchmarkId::new("frequency", "enabled"),
467
+ &true,
468
+ |b, &freq| {
469
+ b.iter(|| {
470
+ let query = vec!["HashMap".to_string()];
471
+ let options = SearchOptions {
472
+ path: &search_path,
473
+ queries: &query,
474
+ files_only: false,
475
+ custom_ignores: &[],
476
+ exclude_filenames: false,
477
+ reranker: "hybrid",
478
+ frequency_search: freq,
479
+ exact: false,
480
+ language: None,
481
+ max_results: Some(50),
482
+ max_bytes: None,
483
+ max_tokens: None,
484
+ allow_tests: true,
485
+ no_merge: false,
486
+ merge_threshold: None,
487
+ dry_run: false,
488
+ session: None,
489
+ timeout: 30,
490
+ question: None,
491
+ no_gitignore: false,
492
+ };
493
+
494
+ black_box(perform_probe(&options).unwrap())
495
+ })
496
+ },
497
+ );
498
+
499
+ group.bench_with_input(
500
+ BenchmarkId::new("frequency", "disabled"),
501
+ &false,
502
+ |b, &freq| {
503
+ b.iter(|| {
504
+ let query = vec!["HashMap".to_string()];
505
+ let options = SearchOptions {
506
+ path: &search_path,
507
+ queries: &query,
508
+ files_only: false,
509
+ custom_ignores: &[],
510
+ exclude_filenames: false,
511
+ reranker: "hybrid",
512
+ frequency_search: freq,
513
+ exact: false,
514
+ language: None,
515
+ max_results: Some(50),
516
+ max_bytes: None,
517
+ max_tokens: None,
518
+ allow_tests: true,
519
+ no_merge: false,
520
+ merge_threshold: None,
521
+ dry_run: false,
522
+ session: None,
523
+ timeout: 30,
524
+ question: None,
525
+ no_gitignore: false,
526
+ };
527
+
528
+ black_box(perform_probe(&options).unwrap())
529
+ })
530
+ },
531
+ );
532
+
533
+ group.finish();
534
+ }
535
+
536
+ /// Benchmark query complexity
537
+ fn benchmark_query_complexity(c: &mut Criterion) {
538
+ let temp_dir = create_test_codebase();
539
+ let search_path = temp_dir.path().to_path_buf();
540
+
541
+ let queries = vec![
542
+ ("simple", vec!["main"]),
543
+ ("compound", vec!["HashMap", "Vec"]),
544
+ (
545
+ "complex",
546
+ vec!["process_item", "DataProcessor", "fibonacci"],
547
+ ),
548
+ ("multi_term", vec!["fn", "struct", "impl", "use"]),
549
+ ];
550
+
551
+ let mut group = c.benchmark_group("query_complexity");
552
+
553
+ for (name, query_terms) in queries {
554
+ group.bench_with_input(
555
+ BenchmarkId::new("complexity", name),
556
+ &query_terms,
557
+ |b, query_terms| {
558
+ b.iter(|| {
559
+ let query: Vec<String> = query_terms.iter().map(|s| s.to_string()).collect();
560
+ let options = SearchOptions {
561
+ path: &search_path,
562
+ queries: &query,
563
+ files_only: false,
564
+ custom_ignores: &[],
565
+ exclude_filenames: false,
566
+ reranker: "hybrid",
567
+ frequency_search: true,
568
+ exact: false,
569
+ language: None,
570
+ max_results: Some(100),
571
+ max_bytes: None,
572
+ max_tokens: None,
573
+ allow_tests: true,
574
+ no_merge: false,
575
+ merge_threshold: None,
576
+ dry_run: false,
577
+ session: None,
578
+ timeout: 30,
579
+ question: None,
580
+ no_gitignore: false,
581
+ };
582
+
583
+ black_box(perform_probe(&options).unwrap())
584
+ })
585
+ },
586
+ );
587
+ }
588
+
589
+ group.finish();
590
+ }
591
+
592
+ criterion_group!(
593
+ benches,
594
+ benchmark_search_patterns,
595
+ benchmark_result_limits,
596
+ benchmark_search_options,
597
+ benchmark_query_complexity
598
+ );
599
+ criterion_main!(benches);