@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,178 @@
1
+ use probe_code::extract::{handle_extract, ExtractOptions};
2
+ use std::fs;
3
+ use tempfile::tempdir;
4
+
5
+ #[test]
6
+ fn test_parallel_file_extraction() {
7
+ // Create a temporary directory for test files
8
+ let temp_dir = tempdir().unwrap();
9
+ let base_path = temp_dir.path();
10
+
11
+ // Create multiple test files
12
+ let file_count = 10;
13
+ let mut file_paths = Vec::new();
14
+
15
+ for i in 0..file_count {
16
+ let file_path = base_path.join(format!("test_file_{i}.rs"));
17
+ let content = format!(
18
+ "// Test file {i}\n\nfn function_a() {{\n println!(\"Hello from function A\");\n}}\n\nfn function_b() {{\n println!(\"Hello from function B\");\n}}\n"
19
+ );
20
+ fs::write(&file_path, content).unwrap();
21
+ file_paths.push(file_path.to_string_lossy().to_string());
22
+ }
23
+
24
+ // Create options for extraction
25
+ let options = ExtractOptions {
26
+ files: file_paths,
27
+ custom_ignores: Vec::new(),
28
+ context_lines: 0,
29
+ format: "plain".to_string(),
30
+ from_clipboard: false,
31
+ input_file: None,
32
+ to_clipboard: false,
33
+ dry_run: false,
34
+ diff: false,
35
+ allow_tests: true,
36
+ instructions: None,
37
+ keep_input: false,
38
+ prompt: None,
39
+ no_gitignore: false,
40
+ };
41
+
42
+ // Run the extraction
43
+ let result = handle_extract(options);
44
+ assert!(result.is_ok(), "Extraction should succeed");
45
+
46
+ // Verify that all files were processed by checking the output
47
+ // This is a basic test - in a real scenario, you might want to capture
48
+ // and parse the output to verify each file was processed correctly
49
+ }
50
+
51
+ #[test]
52
+ fn test_parallel_extraction_with_specific_lines() {
53
+ // Create a temporary directory for test files
54
+ let temp_dir = tempdir().unwrap();
55
+ let base_path = temp_dir.path();
56
+
57
+ // Create a test file with multiple functions
58
+ let file_path = base_path.join("multi_function.rs");
59
+ let content = r#"
60
+ fn function_one() {
61
+ println!("This is function one");
62
+ }
63
+
64
+ fn function_two() {
65
+ println!("This is function two");
66
+ }
67
+
68
+ fn function_three() {
69
+ println!("This is function three");
70
+ }
71
+
72
+ fn function_four() {
73
+ println!("This is function four");
74
+ }
75
+ "#;
76
+ fs::write(&file_path, content).unwrap();
77
+
78
+ // Create multiple files with the same content to test parallelism
79
+ let file_count = 5;
80
+ let mut file_paths = Vec::new();
81
+
82
+ for i in 0..file_count {
83
+ let path = base_path.join(format!("multi_function_{i}.rs"));
84
+ fs::write(&path, content).unwrap();
85
+ file_paths.push(path.to_string_lossy().to_string());
86
+ }
87
+ // Create options for extraction with specific lines
88
+ let options = ExtractOptions {
89
+ files: file_paths,
90
+ custom_ignores: Vec::new(),
91
+ context_lines: 0,
92
+ format: "plain".to_string(),
93
+ from_clipboard: false,
94
+ input_file: None,
95
+ to_clipboard: false,
96
+ dry_run: false,
97
+ diff: false,
98
+ allow_tests: true,
99
+ instructions: None,
100
+ keep_input: false,
101
+ prompt: None,
102
+ no_gitignore: false,
103
+ };
104
+
105
+ // Run the extraction
106
+ let result = handle_extract(options);
107
+ assert!(result.is_ok(), "Extraction should succeed");
108
+
109
+ // In a real test, you might want to capture the output and verify
110
+ // that all functions were extracted correctly from all files
111
+ }
112
+
113
+ #[test]
114
+ fn test_parallel_extraction_performance() {
115
+ // This test is designed to verify that parallel extraction is faster
116
+ // than sequential extraction for a large number of files
117
+
118
+ // Skip this test in CI environments where performance might vary
119
+ if std::env::var("CI").is_ok() {
120
+ return;
121
+ }
122
+
123
+ // Create a temporary directory for test files
124
+ let temp_dir = tempdir().unwrap();
125
+ let base_path = temp_dir.path();
126
+
127
+ // Create a large number of test files
128
+ let file_count = 50; // Adjust based on your system capabilities
129
+ let mut file_paths = Vec::new();
130
+
131
+ for i in 0..file_count {
132
+ let file_path = base_path.join(format!("perf_test_{i}.rs"));
133
+
134
+ // Create a file with multiple functions to make parsing non-trivial
135
+ let content = format!(
136
+ "// Performance test file {}\n\n{}\n",
137
+ i,
138
+ (0..20)
139
+ .map(|j| format!(
140
+ "fn function_{i}_{j}() {{\n let x = {j};\n println!(\"Value: {{}}\", x);\n}}\n"
141
+ ))
142
+ .collect::<Vec<_>>()
143
+ .join("\n")
144
+ );
145
+
146
+ fs::write(&file_path, content).unwrap();
147
+ file_paths.push(file_path.to_string_lossy().to_string());
148
+ }
149
+
150
+ // Note: In a real performance test, you would measure the time taken
151
+ // and compare it with a sequential implementation. For this example,
152
+ // we're just verifying that the parallel implementation works correctly
153
+ // with a large number of files.
154
+
155
+ let options = ExtractOptions {
156
+ files: file_paths,
157
+ custom_ignores: Vec::new(),
158
+ context_lines: 0,
159
+ format: "plain".to_string(),
160
+ from_clipboard: false,
161
+ input_file: None,
162
+ to_clipboard: false,
163
+ dry_run: true, // Use dry run to avoid large output
164
+ diff: false,
165
+ allow_tests: true,
166
+ instructions: None,
167
+ keep_input: false,
168
+ prompt: None,
169
+ no_gitignore: false,
170
+ };
171
+
172
+ // Run the extraction
173
+ let result = handle_extract(options);
174
+ assert!(
175
+ result.is_ok(),
176
+ "Parallel extraction should succeed with many files"
177
+ );
178
+ }
@@ -0,0 +1,355 @@
1
+ use probe_code::search::search_runner::{
2
+ perform_probe, search_with_structured_patterns, SearchConfig,
3
+ };
4
+ use probe_code::search::SearchOptions;
5
+ use std::fs;
6
+ use std::path::{Path, PathBuf};
7
+ use std::time::Instant;
8
+ use tempfile::tempdir;
9
+
10
+ // Helper function to create test files
11
+ fn create_test_files(dir: &Path, count: usize, lines_per_file: usize) -> Vec<PathBuf> {
12
+ let mut paths = Vec::new();
13
+
14
+ for i in 0..count {
15
+ let file_path = dir.join(format!("test_file_{i}.rs"));
16
+
17
+ // Create file content with multiple functions and searchable terms
18
+ let mut content = format!("// Test file {i}\n\n");
19
+
20
+ for j in 0..lines_per_file / 10 {
21
+ content.push_str(&format!(
22
+ "/// Function documentation for function_{}_{}
23
+ fn function_{}_{}() {{
24
+ // Initialize variables
25
+ let search_term_alpha = {};
26
+ let search_term_beta = {};
27
+
28
+ // Process data
29
+ println!(\"Processing data with search_term_gamma\");
30
+
31
+ // Return result
32
+ search_term_alpha + search_term_beta
33
+ }}
34
+
35
+ ",
36
+ i,
37
+ j,
38
+ i,
39
+ j,
40
+ j * 2,
41
+ j * 3
42
+ ));
43
+ }
44
+
45
+ fs::write(&file_path, content).unwrap();
46
+ paths.push(file_path);
47
+ }
48
+
49
+ paths
50
+ }
51
+
52
+ #[test]
53
+ fn test_parallel_file_search() {
54
+ // Create a temporary directory for test files
55
+ let temp_dir = tempdir().unwrap();
56
+ let base_path = temp_dir.path();
57
+
58
+ // Create multiple test files (50 files with 100 lines each)
59
+ let file_count = 50;
60
+ let lines_per_file = 100;
61
+ let _file_paths = create_test_files(base_path, file_count, lines_per_file);
62
+
63
+ // Create search options
64
+ let queries = vec![
65
+ "search_term_alpha".to_string(),
66
+ "search_term_beta".to_string(),
67
+ ];
68
+ let custom_ignores = Vec::new();
69
+
70
+ let options = SearchOptions {
71
+ path: base_path,
72
+ queries: &queries,
73
+ files_only: false,
74
+ custom_ignores: &custom_ignores,
75
+ exclude_filenames: false,
76
+ language: None,
77
+ reranker: "hybrid",
78
+ frequency_search: false,
79
+ max_results: Some(100),
80
+ max_bytes: Some(1_000_000),
81
+ max_tokens: Some(100_000),
82
+ allow_tests: true,
83
+ no_merge: false,
84
+ merge_threshold: Some(5),
85
+ dry_run: false,
86
+ session: None,
87
+ timeout: 30,
88
+ question: None,
89
+ exact: false,
90
+ no_gitignore: false,
91
+ };
92
+
93
+ // Measure search time
94
+ let start_time = Instant::now();
95
+ let result = perform_probe(&options);
96
+ let duration = start_time.elapsed();
97
+
98
+ // Verify search results
99
+ assert!(result.is_ok(), "Search should succeed");
100
+ let search_results = result.unwrap();
101
+
102
+ // Ensure we found matches
103
+ assert!(
104
+ !search_results.results.is_empty(),
105
+ "Search should find matches"
106
+ );
107
+
108
+ // Print performance information
109
+ println!("Parallel search completed in {duration:?} for {file_count} files");
110
+ println!("Found {} results", search_results.results.len());
111
+ }
112
+
113
+ #[test]
114
+ fn test_structured_patterns_search() {
115
+ // Create a temporary directory for test files
116
+ let temp_dir = tempdir().unwrap();
117
+ let base_path = temp_dir.path();
118
+
119
+ // Create test files
120
+ let file_count = 20;
121
+ let lines_per_file = 50;
122
+ let _file_paths = create_test_files(base_path, file_count, lines_per_file);
123
+
124
+ // Create a simple query plan and patterns for testing
125
+ let query_plan = probe_code::search::query::create_query_plan(
126
+ "search_term_alpha OR search_term_beta",
127
+ false,
128
+ )
129
+ .unwrap();
130
+
131
+ // Create patterns from the query plan
132
+ let patterns = probe_code::search::query::create_structured_patterns(&query_plan);
133
+
134
+ // Create empty custom ignores
135
+ let custom_ignores: Vec<String> = Vec::new();
136
+
137
+ // Measure search time
138
+ let start_time = Instant::now();
139
+ let search_filters = probe_code::search::filters::SearchFilters::new();
140
+ let search_config = SearchConfig {
141
+ custom_ignores: &custom_ignores,
142
+ allow_tests: true,
143
+ language: None,
144
+ no_gitignore: false,
145
+ };
146
+ let result = search_with_structured_patterns(
147
+ base_path,
148
+ &query_plan,
149
+ &patterns,
150
+ &search_config,
151
+ &search_filters,
152
+ );
153
+ let duration = start_time.elapsed();
154
+
155
+ // Verify search results
156
+ assert!(result.is_ok(), "Structured pattern search should succeed");
157
+ let file_term_maps = result.unwrap();
158
+
159
+ // Ensure we found matches
160
+ assert!(!file_term_maps.is_empty(), "Search should find matches");
161
+
162
+ // Print performance information
163
+ println!("Parallel structured pattern search completed in {duration:?} for {file_count} files");
164
+ println!("Found matches in {} files", file_term_maps.len());
165
+ }
166
+
167
+ #[test]
168
+ fn test_ast_parallel_processing() {
169
+ // Create a temporary directory for test files
170
+ let temp_dir = tempdir().unwrap();
171
+ let base_path = temp_dir.path();
172
+
173
+ // Create a single large file with many top-level nodes to test AST parallelization
174
+ let file_path = base_path.join("large_file.rs");
175
+
176
+ // Create file content with many top-level functions
177
+ let mut content = "// Large test file with many top-level nodes\n\n".to_string();
178
+
179
+ for i in 0..100 {
180
+ content.push_str(&format!(
181
+ "/// Function documentation for function_{}
182
+ fn function_{}() {{
183
+ // Function body with search terms
184
+ let search_term_alpha = {};
185
+ let search_term_beta = {};
186
+ println!(\"Processing with search_term_gamma\");
187
+ }}
188
+
189
+ ",
190
+ i,
191
+ i,
192
+ i * 2,
193
+ i * 3
194
+ ));
195
+ }
196
+
197
+ fs::write(&file_path, content).unwrap();
198
+
199
+ // Create search options targeting the large file
200
+ let queries = vec![
201
+ "search_term_alpha".to_string(),
202
+ "search_term_beta".to_string(),
203
+ ];
204
+ let custom_ignores = Vec::new();
205
+
206
+ let options = SearchOptions {
207
+ path: base_path,
208
+ queries: &queries,
209
+ files_only: false,
210
+ custom_ignores: &custom_ignores,
211
+ exclude_filenames: false,
212
+ language: None,
213
+ reranker: "hybrid",
214
+ frequency_search: false,
215
+ max_results: Some(100),
216
+ max_bytes: Some(1_000_000),
217
+ max_tokens: Some(100_000),
218
+ allow_tests: true,
219
+ no_merge: false,
220
+ merge_threshold: Some(5),
221
+ dry_run: false,
222
+ session: None,
223
+ timeout: 30,
224
+ question: None,
225
+ exact: false,
226
+ no_gitignore: false,
227
+ };
228
+
229
+ // Measure search time
230
+ let start_time = Instant::now();
231
+ let result = perform_probe(&options);
232
+ let duration = start_time.elapsed();
233
+
234
+ // Verify search results
235
+ assert!(
236
+ result.is_ok(),
237
+ "AST parallel processing search should succeed"
238
+ );
239
+ let search_results = result.unwrap();
240
+
241
+ // Ensure we found matches
242
+ assert!(
243
+ !search_results.results.is_empty(),
244
+ "Search should find matches"
245
+ );
246
+
247
+ // Print performance information
248
+ println!("AST parallel processing completed in {duration:?}");
249
+ println!("Found {} results", search_results.results.len());
250
+ }
251
+
252
+ #[test]
253
+ fn test_block_parallel_processing() {
254
+ // Create a temporary directory for test files
255
+ let temp_dir = tempdir().unwrap();
256
+ let base_path = temp_dir.path();
257
+
258
+ // Create a file with many code blocks to test block parallelization
259
+ let file_path = base_path.join("multi_block.rs");
260
+
261
+ // Create file content with a large number of functions and nested blocks
262
+ let mut content = "// Test file with many code blocks\n\n".to_string();
263
+
264
+ for i in 0..50 {
265
+ content.push_str(&format!(
266
+ "/// Function with multiple blocks
267
+ fn function_with_blocks_{}() {{
268
+ // Block 1
269
+ {{
270
+ let search_term_alpha = {};
271
+ println!(\"Block 1\");
272
+ }}
273
+
274
+ // Block 2
275
+ {{
276
+ let search_term_beta = {};
277
+ println!(\"Block 2\");
278
+ }}
279
+
280
+ // Block 3
281
+ {{
282
+ let search_term_gamma = {};
283
+ println!(\"Block 3\");
284
+ }}
285
+
286
+ // Block 4
287
+ if true {{
288
+ let search_term_delta = {};
289
+ println!(\"Block 4\");
290
+ }}
291
+ }}
292
+
293
+ ",
294
+ i,
295
+ i,
296
+ i * 2,
297
+ i * 3,
298
+ i * 4
299
+ ));
300
+ }
301
+
302
+ fs::write(&file_path, content).unwrap();
303
+
304
+ // Create search options targeting the multi-block file
305
+ let queries = vec![
306
+ "search_term_alpha".to_string(),
307
+ "search_term_beta".to_string(),
308
+ ];
309
+ let custom_ignores = Vec::new();
310
+
311
+ let options = SearchOptions {
312
+ path: base_path,
313
+ queries: &queries,
314
+ files_only: false,
315
+ custom_ignores: &custom_ignores,
316
+ exclude_filenames: false,
317
+ language: None,
318
+ reranker: "hybrid",
319
+ frequency_search: false,
320
+ max_results: Some(100),
321
+ max_bytes: Some(1_000_000),
322
+ max_tokens: Some(100_000),
323
+ allow_tests: true,
324
+ no_merge: false,
325
+ merge_threshold: Some(5),
326
+ dry_run: false,
327
+ session: None,
328
+ timeout: 30,
329
+ question: None,
330
+ exact: false,
331
+ no_gitignore: false,
332
+ };
333
+
334
+ // Measure search time
335
+ let start_time = Instant::now();
336
+ let result = perform_probe(&options);
337
+ let duration = start_time.elapsed();
338
+
339
+ // Verify search results
340
+ assert!(
341
+ result.is_ok(),
342
+ "Block parallel processing search should succeed"
343
+ );
344
+ let search_results = result.unwrap();
345
+
346
+ // Ensure we found matches
347
+ assert!(
348
+ !search_results.results.is_empty(),
349
+ "Search should find matches"
350
+ );
351
+
352
+ // Print performance information
353
+ println!("Block parallel processing completed in {duration:?}");
354
+ println!("Found {} results", search_results.results.len());
355
+ }