@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,824 @@
1
+ <p align="center">
2
+ <img src="logo.png?2" alt="Probe Logo" width="400">
3
+ </p>
4
+
5
+ # Probe
6
+
7
+ Probe is an **AI-friendly, fully local, semantic code search** tool designed to power the next generation of AI coding assistants. By combining the speed of [ripgrep](https://github.com/BurntSushi/ripgrep) with the code-aware parsing of [tree-sitter](https://tree-sitter.github.io/tree-sitter/), Probe delivers precise results with complete code blocks—perfect for large codebases and AI-driven development workflows.
8
+
9
+ ---
10
+
11
+ ## Table of Contents
12
+
13
+ - [Quick Start](#quick-start)
14
+ - [Features](#features)
15
+ - [Installation](#installation)
16
+ - [Quick Installation](#quick-installation)
17
+ - [Requirements](#requirements)
18
+ - [Manual Installation](#manual-installation)
19
+ - [Building from Source](#building-from-source)
20
+ - [Verifying the Installation](#verifying-the-installation)
21
+ - [Troubleshooting](#troubleshooting)
22
+ - [Uninstalling](#uninstalling)
23
+ - [Usage](#usage)
24
+ - [CLI Mode](#cli-mode)
25
+ - [MCP Server Mode](#mcp-server-mode)
26
+ - [AI Chat Mode](#ai-chat-mode) (Example in examples/chat)
27
+ - [Web Interface](#web-interface)
28
+ - [Supported Languages](#supported-languages)
29
+ - [How It Works](#how-it-works)
30
+ - [Adding Support for New Languages](#adding-support-for-new-languages)
31
+ - [Releasing New Versions](#releasing-new-versions)
32
+
33
+ ---
34
+
35
+ ## Quick Start
36
+
37
+ **NPM Installation**
38
+ The easiest way to install Probe is via npm, which also installs the binary:
39
+
40
+ ~~~bash
41
+ npm install -g @probelabs/probe
42
+ ~~~
43
+
44
+ **Basic Search Example**
45
+ Search for code containing the phrase "llm pricing" in the current directory:
46
+
47
+ ~~~bash
48
+ probe search "llm pricing" ./
49
+ ~~~
50
+
51
+ **Advanced Search (with Token Limiting)**
52
+ Search for "partial prompt injection" in the current directory but limit the total tokens to 10000 (useful for AI tools with context window constraints):
53
+
54
+ ~~~bash
55
+ probe search "prompt injection" ./ --max-tokens 10000
56
+ ~~~
57
+
58
+ **Elastic Search Queries**
59
+ Use advanced query syntax for more powerful searches:
60
+
61
+ ~~~bash
62
+ # Use AND operator for terms that must appear together
63
+ probe search "error AND handling" ./
64
+
65
+ # Use OR operator for alternative terms
66
+ probe search "login OR authentication OR auth" ./src
67
+
68
+ # Group terms with parentheses for complex queries
69
+ probe search "(error OR exception) AND (handle OR process)" ./
70
+
71
+ # Use wildcards for partial matching
72
+ probe search "auth* connect*" ./
73
+
74
+ # Exclude terms with NOT operator
75
+ probe search "database NOT sqlite" ./
76
+
77
+ # Use search hints to filter results by file properties
78
+ probe search "function AND ext:rs" ./ # Only search in .rs files
79
+ probe search "class AND file:src/**/*.py" ./ # Only search in Python files under src/
80
+ probe search "error AND dir:tests" ./ # Only search in files under tests/ directory
81
+ probe search "struct AND type:rust" ./ # Only search in Rust files
82
+ probe search "component AND lang:javascript" ./ # Only search in JavaScript files
83
+ ~~~
84
+
85
+ **Extract Code Blocks**
86
+ Extract a specific function or code block containing line 42 in main.rs:
87
+
88
+ ~~~bash
89
+ probe extract src/main.rs:42
90
+ ~~~
91
+
92
+ You can even paste failing test output and it will extract needed files and AST out of it, like:
93
+
94
+ ~~~bash
95
+ go test | probe extract
96
+ ~~~
97
+
98
+ **Interactive AI Chat**
99
+ Use the AI assistant to ask questions about your codebase:
100
+
101
+ ~~~bash
102
+ # Run directly with npx (no installation needed)
103
+ npx -y @probelabs/probe-chat
104
+
105
+ # Set your API key first
106
+ export ANTHROPIC_API_KEY=your_api_key
107
+ # Or for OpenAI
108
+ # export OPENAI_API_KEY=your_api_key
109
+
110
+ # Specify a directory to search (optional)
111
+ npx -y @probelabs/probe-chat /path/to/your/project
112
+ ~~~
113
+
114
+ **Node.js SDK Usage**
115
+ Use Probe programmatically in your Node.js applications with the Vercel AI SDK:
116
+
117
+ ~~~javascript
118
+ import { ProbeChat } from '@probelabs/probe-chat';
119
+ import { StreamingTextResponse } from 'ai';
120
+
121
+ // Create a chat instance
122
+ const chat = new ProbeChat({
123
+ model: 'claude-3-sonnet-20240229',
124
+ anthropicApiKey: process.env.ANTHROPIC_API_KEY,
125
+ allowedFolders: ['/path/to/your/project']
126
+ });
127
+
128
+ // In an API route or Express handler
129
+ export async function POST(req) {
130
+ const { messages } = await req.json();
131
+ const userMessage = messages[messages.length - 1].content;
132
+
133
+ // Get a streaming response from the AI
134
+ const stream = await chat.chat(userMessage, { stream: true });
135
+
136
+ // Return a streaming response
137
+ return new StreamingTextResponse(stream);
138
+ }
139
+
140
+ // Or use it in a non-streaming way
141
+ const response = await chat.chat('How is authentication implemented?');
142
+ console.log(response);
143
+ ~~~
144
+
145
+ **MCP server**
146
+
147
+ Integrate with any AI editor:
148
+
149
+ ~~~json
150
+ {
151
+ "mcpServers": {
152
+ "probe": {
153
+ "command": "npx",
154
+ "args": [
155
+ "-y",
156
+ "@probelabs/probe",
157
+ "mcp"
158
+ ]
159
+ }
160
+ }
161
+ }
162
+ ~~~
163
+
164
+ Example queries:
165
+ > "Do the probe and search my codebase for implementations of the ranking algorithm"
166
+ >
167
+ > "Using probe find all functions related to error handling in the src directory"
168
+
169
+ ---
170
+
171
+ ## Features
172
+
173
+ - **AI-Friendly**: Extracts **entire functions, classes, or structs** so AI models get full context.
174
+ - **Fully Local**: Keeps your code on your machine—no external APIs.
175
+ - **Powered by ripgrep**: Extremely fast scanning of large codebases.
176
+ - **Tree-sitter Integration**: Parses and understands code structure accurately.
177
+ - **Re-Rankers & NLP**: Uses tokenization, stemming, BM25, TF-IDF, or hybrid ranking methods for better search results.
178
+ - **Code Extraction**: Extract specific code blocks or entire files with the `extract` command.
179
+ - **Multi-Language**: Works with popular languages like Rust, Python, JavaScript, TypeScript, Java, Go, C/C++, Swift, C#, and more.
180
+ - **Interactive AI Chat**: AI assistant example in the examples directory that can answer questions about your codebase using Claude or GPT models.
181
+ - **Flexible**: Run as a CLI tool, an MCP server, or an interactive AI chat.
182
+
183
+ ---
184
+
185
+ ## Installation
186
+
187
+ ### Quick Installation
188
+
189
+ You can install Probe with a single command using npm, curl, or PowerShell:
190
+
191
+ **Using npm (Recommended for Node.js users)**
192
+ ~~~bash
193
+ npm install -g @probelabs/probe
194
+ ~~~
195
+
196
+ **Using curl (For macOS and Linux)**
197
+ ~~~bash
198
+ curl -fsSL https://raw.githubusercontent.com/buger/probe/main/install.sh | bash
199
+ ~~~
200
+
201
+ **What the curl script does**:
202
+
203
+ 1. Detects your operating system and architecture
204
+ 2. Fetches the latest release from GitHub
205
+ 3. Downloads the appropriate binary for your system
206
+ 4. Verifies the checksum for security
207
+ 5. Installs the binary to `/usr/local/bin`
208
+
209
+ **Using PowerShell (For Windows)**
210
+ ~~~powershell
211
+ iwr -useb https://raw.githubusercontent.com/buger/probe/main/install.ps1 | iex
212
+ ~~~
213
+
214
+ **What the PowerShell script does**:
215
+
216
+ 1. Detects your system architecture (x86_64 or ARM64)
217
+ 2. Fetches the latest release from GitHub
218
+ 3. Downloads the appropriate Windows binary
219
+ 4. Verifies the checksum for security
220
+ 5. Installs the binary to your user directory (`%LOCALAPPDATA%\Probe`) by default
221
+ 6. Provides instructions to add the binary to your PATH if needed
222
+
223
+ **Installation options**:
224
+
225
+ The PowerShell script supports several options:
226
+
227
+ ~~~powershell
228
+ # Install for current user (default)
229
+ iwr -useb https://raw.githubusercontent.com/buger/probe/main/install.ps1 | iex
230
+
231
+ # Install system-wide (requires admin privileges)
232
+ iwr -useb https://raw.githubusercontent.com/buger/probe/main/install.ps1 | iex -args "--system"
233
+
234
+ # Install to a custom directory
235
+ iwr -useb https://raw.githubusercontent.com/buger/probe/main/install.ps1 | iex -args "--dir", "C:\Tools\Probe"
236
+
237
+ # Show help
238
+ iwr -useb https://raw.githubusercontent.com/buger/probe/main/install.ps1 | iex -args "--help"
239
+ ~~~
240
+
241
+ ### Requirements
242
+
243
+ - **Operating Systems**: macOS, Linux, or Windows
244
+ - **Architectures**: x86_64 (all platforms) or ARM64 (macOS and Windows)
245
+ - **Tools**:
246
+ - For macOS/Linux: `curl`, `bash`, and `sudo`/root privileges
247
+ - For Windows: PowerShell 5.1 or later
248
+
249
+ ### Manual Installation
250
+
251
+ 1. Download the appropriate binary for your platform from the [GitHub Releases](https://github.com/probelabs/probe/releases) page:
252
+ - `probe-x86_64-linux.tar.gz` for Linux (x86_64)
253
+ - `probe-x86_64-darwin.tar.gz` for macOS (Intel)
254
+ - `probe-aarch64-darwin.tar.gz` for macOS (Apple Silicon)
255
+ - `probe-x86_64-windows.zip` for Windows (x86_64)
256
+ - `probe-aarch64-windows.zip` for Windows (ARM64)
257
+ 2. Extract the archive:
258
+ ~~~bash
259
+ # For Linux/macOS
260
+ tar -xzf probe-*-*.tar.gz
261
+
262
+ # For Windows (using PowerShell)
263
+ Expand-Archive -Path probe-*-windows.zip -DestinationPath .\probe
264
+ ~~~
265
+ 3. Move the binary to a location in your PATH:
266
+ ~~~bash
267
+ # For Linux/macOS
268
+ sudo mv probe /usr/local/bin/
269
+
270
+ # For Windows (using PowerShell)
271
+ # Create a directory for the binary (if it doesn't exist)
272
+ $installDir = "$env:LOCALAPPDATA\Probe"
273
+ New-Item -ItemType Directory -Path $installDir -Force
274
+
275
+ # Move the binary
276
+ Move-Item -Path .\probe\probe.exe -Destination $installDir
277
+
278
+ # Add to PATH (optional)
279
+ [Environment]::SetEnvironmentVariable('PATH', [Environment]::GetEnvironmentVariable('PATH', 'User') + ";$installDir", 'User')
280
+ ~~~
281
+
282
+ ### Building from Source
283
+
284
+ 1. Install Rust and Cargo (if not already installed):
285
+
286
+ For macOS/Linux:
287
+ ~~~bash
288
+ curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
289
+ ~~~
290
+
291
+ For Windows:
292
+ ~~~powershell
293
+ # Download and run the Rust installer
294
+ Invoke-WebRequest -Uri https://win.rustup.rs/x86_64 -OutFile rustup-init.exe
295
+ .\rustup-init.exe
296
+ # Follow the on-screen instructions
297
+ ~~~
298
+
299
+ 2. Clone this repository:
300
+ ~~~bash
301
+ git clone https://github.com/probelabs/probe.git
302
+ cd code-search
303
+ ~~~
304
+ 3. Build the project:
305
+ ~~~bash
306
+ cargo build --release
307
+ ~~~
308
+ 4. (Optional) Install globally:
309
+ ~~~bash
310
+ cargo install --path .
311
+ ~~~
312
+
313
+ This will install the binary to your Cargo bin directory, which is typically:
314
+ - `$HOME/.cargo/bin` on macOS/Linux
315
+ - `%USERPROFILE%\.cargo\bin` on Windows
316
+
317
+ ### Verifying the Installation
318
+
319
+ For macOS/Linux:
320
+ ~~~bash
321
+ probe --version
322
+ ~~~
323
+
324
+ For Windows:
325
+ ~~~powershell
326
+ probe --version
327
+ ~~~
328
+
329
+ If you get a "command not found" error on Windows, make sure the installation directory is in your PATH or use the full path to the executable:
330
+ ~~~powershell
331
+ # If installed to the default user location
332
+ & "$env:LOCALAPPDATA\Probe\probe.exe" --version
333
+
334
+ # If installed to the default system location
335
+ & "$env:ProgramFiles\Probe\probe.exe" --version
336
+ ~~~
337
+
338
+ ### Troubleshooting
339
+
340
+ - **Permissions**:
341
+ - For macOS/Linux: Ensure you can write to `/usr/local/bin`
342
+ - For Windows: Ensure you have write permissions to the installation directory
343
+ - **System Requirements**: Double-check your OS/architecture compatibility
344
+ - **PATH Issues**:
345
+ - For Windows: Restart your terminal after adding the installation directory to PATH
346
+ - For macOS/Linux: Verify that `/usr/local/bin` is in your PATH
347
+ - **Manual Install**: If the quick install script fails, try [Manual Installation](#manual-installation)
348
+ - **GitHub Issues**: Report issues on the [GitHub repository](https://github.com/probelabs/probe/issues)
349
+
350
+ ### Uninstalling
351
+
352
+ For macOS/Linux:
353
+ ~~~bash
354
+ # If installed via npm
355
+ npm uninstall -g @probelabs/probe
356
+
357
+ # If installed via curl script or manually
358
+ sudo rm /usr/local/bin/probe
359
+ ~~~
360
+
361
+ For Windows:
362
+ ~~~powershell
363
+ # If installed via PowerShell script to default user location
364
+ Remove-Item -Path "$env:LOCALAPPDATA\Probe\probe.exe" -Force
365
+
366
+ # If installed via PowerShell script to system location
367
+ Remove-Item -Path "$env:ProgramFiles\Probe\probe.exe" -Force
368
+
369
+ # If you added the installation directory to PATH, you may want to remove it
370
+ # For user PATH:
371
+ $userPath = [Environment]::GetEnvironmentVariable('PATH', 'User')
372
+ $userPath = ($userPath -split ';' | Where-Object { $_ -ne "$env:LOCALAPPDATA\Probe" }) -join ';'
373
+ [Environment]::SetEnvironmentVariable('PATH', $userPath, 'User')
374
+ ~~~
375
+
376
+ ---
377
+ ## Usage
378
+
379
+ Probe can be used in three main modes:
380
+
381
+ 1. **CLI Mode**: Direct code search and extraction from the command line
382
+ 2. **MCP Server Mode**: Run as a server exposing search functionality via MCP
383
+ 3. **Web Interface**: Browser-based UI for code exploration
384
+
385
+ Additionally, there are example implementations in the examples directory:
386
+
387
+ - **AI Chat Example**: Interactive AI assistant for code exploration (in examples/chat)
388
+ - **Web Interface Example**: Browser-based UI for code exploration (in examples/web)
389
+
390
+ ### CLI Mode
391
+
392
+ #### Search Command
393
+
394
+ ~~~bash
395
+ probe search <SEARCH_PATTERN> [OPTIONS]
396
+ ~~~
397
+
398
+ ##### Key Options
399
+
400
+ - `<SEARCH_PATTERN>`: Pattern to search for (required)
401
+ - `--files-only`: Skip AST parsing; only list files with matches
402
+ - `--ignore`: Custom ignore patterns (in addition to `.gitignore`)
403
+ - `--exclude-filenames, -n`: Exclude files whose names match query words (filename matching is enabled by default)
404
+ - `--reranker, -r`: Choose a re-ranking algorithm (`hybrid`, `hybrid2`, `bm25`, `tfidf`)
405
+ - `--frequency, -s`: Frequency-based search (tokenization, stemming, stopword removal)
406
+ =======
407
+ - `--max-results`: Maximum number of results to return
408
+ - `--max-bytes`: Maximum total bytes of code to return
409
+ - `--max-tokens`: Maximum total tokens of code to return (useful for AI)
410
+ - `--allow-tests`: Include test files and test code blocks
411
+ - `--any-term`: Match files containing **any** query terms (default behavior)
412
+ - `--no-merge`: Disable merging of adjacent code blocks after ranking (merging enabled by default)
413
+ - `--merge-threshold`: Max lines between code blocks to consider them adjacent for merging (default: 5)
414
+
415
+ ##### Search Hints
416
+
417
+ You can filter search results by file properties using search hints. These filters are applied at the file discovery stage and removed from the query before content searching:
418
+
419
+ | Hint | Description | Example |
420
+ |------|-------------|---------|
421
+ | `ext:<extension>` | Filter by file extension | `ext:rs`, `ext:py,js,ts` |
422
+ | `file:<pattern>` | Filter by file path pattern (supports globs) | `file:src/**/*.rs`, `file:*test*` |
423
+ | `path:<pattern>` | Alias for `file:` | `path:src/main.rs` |
424
+ | `dir:<pattern>` | Filter by directory pattern | `dir:src`, `dir:tests` |
425
+ | `type:<filetype>` | Filter by ripgrep file type | `type:rust`, `type:javascript` |
426
+ | `lang:<language>` | Filter by programming language | `lang:rust`, `lang:python` |
427
+
428
+ **Search Hint Examples:**
429
+
430
+ ~~~bash
431
+ # Search for "function" only in Rust files
432
+ probe search "function AND ext:rs" ./
433
+
434
+ # Search for "error" only in test directories
435
+ probe search "error AND dir:tests" ./
436
+
437
+ # Search for "class" in Python files under src/
438
+ probe search "class AND file:src/**/*.py" ./
439
+
440
+ # Search for "component" in JavaScript/TypeScript files
441
+ probe search "component AND type:javascript" ./
442
+
443
+ # Search for "struct" in Rust language files
444
+ probe search "struct AND lang:rust" ./
445
+
446
+ # Combine multiple filters
447
+ probe search "config AND ext:rs AND dir:src" ./
448
+
449
+ # Use multiple extensions
450
+ probe search "import AND ext:js,ts,jsx,tsx" ./
451
+ ~~~
452
+
453
+ ##### Examples
454
+
455
+ ~~~bash
456
+ # 1) Search for "setTools" in the current directory with frequency-based search
457
+ probe search "setTools"
458
+
459
+ # 2) Search for "impl" in ./src
460
+ probe search "impl" ./src
461
+
462
+ # 3) Search for "keyword" returning only the top 5 results
463
+ probe search "keyword" --max-tokens 10000
464
+
465
+ # 4) Search for "function" and disable merging of adjacent code blocks
466
+ probe search "function" --no-merge
467
+ ~~~
468
+
469
+ #### Extract Command
470
+
471
+ The extract command allows you to extract code blocks from files. When a line number is specified, it uses tree-sitter to find the closest suitable parent node (function, struct, class, etc.) for that line. You can also specify a symbol name to extract the code block for that specific symbol.
472
+
473
+ ~~~bash
474
+ probe extract <FILES> [OPTIONS]
475
+ ~~~
476
+
477
+ ##### Key Options
478
+
479
+ - `<FILES>`: Files to extract from (can include line numbers with colon, e.g., `file.rs:10`, or symbol names with hash, e.g., `file.rs#function_name`)
480
+ - `--allow-tests`: Include test files and test code blocks in results
481
+ - `-c, --context <LINES>`: Number of context lines to include before and after the extracted block (default: 0)
482
+ - `-f, --format <FORMAT>`: Output format (`markdown`, `plain`, `json`) (default: `markdown`)
483
+
484
+ ##### Examples
485
+
486
+ ~~~bash
487
+ # 1) Extract a function containing line 42 from main.rs
488
+ probe extract src/main.rs:42
489
+
490
+ # 2) Extract multiple files or blocks
491
+ probe extract src/main.rs:42 src/lib.rs:15 src/cli.rs
492
+
493
+ # 3) Extract with JSON output format
494
+ probe extract src/main.rs:42 --format json
495
+
496
+ # 4) Extract with 5 lines of context around the specified line
497
+ probe extract src/main.rs:42 --context 5
498
+
499
+ # 5) Extract a specific function by name (using # symbol syntax)
500
+ probe extract src/main.rs#handle_extract
501
+
502
+ # 6) Extract a specific line range (using : syntax)
503
+ probe extract src/main.rs:10-20
504
+
505
+ # 7) Extract from stdin (useful with error messages or compiler output)
506
+ cat error_log.txt | probe extract
507
+ ~~~
508
+
509
+ The extract command can also read file paths from stdin, making it useful for processing compiler errors or log files:
510
+
511
+ ~~~bash
512
+ # Extract code blocks from files mentioned in error logs
513
+ grep -r "error" ./logs/ | probe extract
514
+ ~~~
515
+
516
+ ### MCP Server
517
+
518
+ Run Probe as an MCP (Model Context Protocol) server to integrate with AI assistants like Claude Desktop:
519
+
520
+ ~~~bash
521
+ probe mcp
522
+ ~~~
523
+
524
+ Add the following to your AI editor's MCP configuration file:
525
+
526
+ ~~~json
527
+ {
528
+ "mcpServers": {
529
+ "probe": {
530
+ "command": "npx",
531
+ "args": [
532
+ "-y",
533
+ "@probelabs/probe",
534
+ "mcp"
535
+ ]
536
+ }
537
+ }
538
+ }
539
+ ~~~
540
+
541
+ To use a custom timeout (e.g., 60 seconds):
542
+
543
+ ~~~json
544
+ {
545
+ "mcpServers": {
546
+ "probe": {
547
+ "command": "npx",
548
+ "args": [
549
+ "-y",
550
+ "@probelabs/probe",
551
+ "mcp",
552
+ "--timeout",
553
+ "60"
554
+ ]
555
+ }
556
+ }
557
+ }
558
+ ~~~
559
+
560
+ - **Example Usage in AI Editors**:
561
+
562
+ Once configured, you can ask your AI assistant to search your codebase with natural language queries like:
563
+
564
+ > "Do the probe and search my codebase for implementations of the ranking algorithm"
565
+ >
566
+ > "Using probe find all functions related to error handling in the src directory"
567
+
568
+ ### AI Chat Mode
569
+
570
+ The AI chat functionality is available as a standalone npm package that can be run directly with npx.
571
+
572
+ #### Using npx (Recommended)
573
+
574
+ ~~~bash
575
+ # Run directly with npx (no installation needed)
576
+ npx -y @probelabs/probe-chat
577
+
578
+ # Set your API key
579
+ export ANTHROPIC_API_KEY=your_api_key
580
+ # Or for OpenAI
581
+ # export OPENAI_API_KEY=your_api_key
582
+
583
+ # Or specify a directory to search
584
+ npx -y @probelabs/probe-chat /path/to/your/project
585
+ ~~~
586
+
587
+ #### Using the npm package
588
+
589
+ ~~~bash
590
+ # Install globally
591
+ npm install -g @probelabs/probe-chat
592
+
593
+ # Start the chat interface
594
+ probe-chat
595
+ ~~~
596
+
597
+ #### Using the example code
598
+
599
+ ~~~bash
600
+ # Navigate to the examples directory
601
+ cd examples/chat
602
+
603
+ # Install dependencies
604
+ npm install
605
+
606
+ # Set your API key
607
+ export ANTHROPIC_API_KEY=your_api_key
608
+ # Or for OpenAI
609
+ # export OPENAI_API_KEY=your_api_key
610
+
611
+ # Start the chat interface
612
+ node index.js
613
+ ~~~
614
+
615
+ This starts an interactive CLI interface where you can ask questions about your codebase and get AI-powered responses.
616
+
617
+ #### Features
618
+
619
+ - **AI-Powered Search**: Uses LLMs to understand your questions and search the codebase intelligently
620
+ - **Multi-Model Support**: Works with both Anthropic's Claude and OpenAI's GPT models
621
+ - **Token Tracking**: Monitors token usage for both requests and responses
622
+ - **Conversation History**: Maintains context across multiple interactions
623
+ - **Colored Output**: Provides a user-friendly terminal interface with syntax highlighting
624
+
625
+ #### Configuration
626
+
627
+ Configure the chat using environment variables:
628
+
629
+ ~~~bash
630
+ # Use Claude models (recommended)
631
+ export ANTHROPIC_API_KEY=your_api_key
632
+
633
+ # Or use OpenAI models
634
+ export OPENAI_API_KEY=your_api_key
635
+
636
+ # Override the default model
637
+ export MODEL_NAME=claude-3-opus-20240229
638
+
639
+ # Override API URLs (useful for proxies or enterprise deployments)
640
+ export ANTHROPIC_API_URL=https://your-anthropic-proxy.com
641
+ export OPENAI_API_URL=https://your-openai-proxy.com/v1
642
+
643
+ # Enable debug mode for detailed logging
644
+ export DEBUG=1
645
+ ~~~
646
+
647
+ #### Example Usage
648
+
649
+ ~~~
650
+ ❯ How does the ranking algorithm work?
651
+
652
+ ─ Response ─────────────────────────────────────────────────────────
653
+ I'll explain how the ranking algorithm works in the codebase.
654
+
655
+ The ranking system in Probe uses multiple algorithms to sort search results by relevance. The main ranking algorithms are:
656
+
657
+ 1. TF-IDF (Term Frequency-Inverse Document Frequency)
658
+ 2. BM25 (Best Matching 25)
659
+ 3. Hybrid (a combination approach)
660
+
661
+ Let me break down each approach:
662
+
663
+ ## TF-IDF Ranking
664
+
665
+ TF-IDF weighs terms based on how frequently they appear in a document versus how common they are across all documents.
666
+
667
+ Key implementation details:
668
+ - Term frequency (TF) measures how often a term appears in a document
669
+ - Inverse document frequency (IDF) measures how rare a term is across all documents
670
+ - Final score is calculated as TF × IDF
671
+
672
+ ## BM25 Ranking
673
+
674
+ BM25 is an advanced ranking function that improves upon TF-IDF by adding document length normalization.
675
+
676
+ Key implementation details:
677
+ - Uses parameters k1 (term frequency saturation) and b (document length normalization)
678
+ - Handles edge cases like empty documents and rare terms
679
+ - Provides better results for longer documents
680
+
681
+ ## Hybrid Ranking
682
+
683
+ The hybrid approach combines multiple ranking signals for better results:
684
+
685
+ 1. Combines scores from both TF-IDF and BM25
686
+ 2. Considers document length and term positions
687
+ 3. Applies normalization to ensure fair comparison
688
+
689
+ The default reranker is "hybrid" which provides the best overall results for code search.
690
+
691
+ The ranking implementation can be found in `src/search/result_ranking.rs`.
692
+ ─────────────────────────────────────────────────────────────────────
693
+ Token Usage: Request: 1245 Response: 1532 (Current message only: ~1532)
694
+ Total: 2777 tokens (Cumulative for entire session)
695
+ ─────────────────────────────────────────────────────────────────────
696
+ ~~~
697
+
698
+ ### Web Interface
699
+
700
+ Probe includes a web-based chat interface that provides a user-friendly way to interact with your codebase using AI. You can run it directly with npx or set it up manually.
701
+
702
+ #### Quick Start with npx
703
+
704
+ ~~~bash
705
+ # Run directly with npx (no installation needed)
706
+ npx -y @probelabs/probe-web
707
+
708
+ # Set your API key first
709
+ export ANTHROPIC_API_KEY=your_api_key
710
+
711
+ # Configure allowed folders (optional)
712
+ export ALLOWED_FOLDERS=/path/to/folder1,/path/to/folder2
713
+ ~~~
714
+
715
+ #### Manual Setup and Configuration
716
+
717
+ 1. **Navigate to the web directory**:
718
+ ```bash
719
+ cd web
720
+ ```
721
+
722
+ 2. **Install dependencies**:
723
+ ```bash
724
+ npm install
725
+ ```
726
+
727
+ 3. **Configure environment variables**:
728
+ Create or edit the `.env` file in the web directory:
729
+ ```
730
+ ANTHROPIC_API_KEY=your_anthropic_api_key
731
+ PORT=8080
732
+ ALLOWED_FOLDERS=/path/to/folder1,/path/to/folder2
733
+ ```
734
+
735
+ 4. **Start the server**:
736
+ ```bash
737
+ npm start
738
+ ```
739
+
740
+ 5. **Access the web interface**:
741
+ Open your browser and navigate to `http://localhost:8080`
742
+
743
+ #### Technical Details
744
+
745
+ - Built with vanilla JavaScript and Node.js
746
+ - Uses the Vercel AI SDK for Claude integration
747
+ - Executes Probe commands via the probeTool.js module
748
+ - Renders markdown with Marked.js and syntax highlighting with Highlight.js
749
+ - Supports Mermaid.js for diagram generation and visualization
750
+
751
+ ---
752
+
753
+ ## Supported Languages
754
+
755
+ Probe currently supports:
756
+
757
+ - **Rust** (`.rs`)
758
+ - **JavaScript / JSX** (`.js`, `.jsx`)
759
+ - **TypeScript / TSX** (`.ts`, `.tsx`)
760
+ - **Python** (`.py`)
761
+ - **Go** (`.go`)
762
+ - **C / C++** (`.c`, `.h`, `.cpp`, `.cc`, `.cxx`, `.hpp`, `.hxx`)
763
+ - **Java** (`.java`)
764
+ - **Ruby** (`.rb`)
765
+ - **PHP** (`.php`)
766
+ - **Swift** (`.swift`)
767
+ - **C#** (`.cs`)
768
+ - **Markdown** (`.md`, `.markdown`)
769
+
770
+ ---
771
+
772
+ ## How It Works
773
+
774
+ Probe combines **fast file scanning** with **deep code parsing** to provide highly relevant, context-aware results:
775
+
776
+ 1. **Ripgrep Scanning**
777
+ Probe uses ripgrep to quickly search across your files, identifying lines that match your query. Ripgrep's efficiency allows it to handle massive codebases at lightning speed.
778
+
779
+ 2. **AST Parsing with Tree-sitter**
780
+ For each file containing matches, Probe uses tree-sitter to parse the file into an Abstract Syntax Tree (AST). This process ensures that code blocks (functions, classes, structs) can be identified precisely.
781
+
782
+ 3. **NLP & Re-Rankers**
783
+ Next, Probe applies classical NLP methods—tokenization, stemming, and stopword removal—alongside re-rankers such as **BM25**, **TF-IDF**, or the **hybrid** approach (combining multiple ranking signals). This step elevates the most relevant code blocks to the top, especially helpful for AI-driven searches.
784
+
785
+ 4. **Block Extraction**
786
+ Probe identifies the smallest complete AST node containing each match (e.g., a full function or class). It extracts these code blocks and aggregates them into search results.
787
+
788
+ 5. **Context for AI**
789
+ Finally, these structured blocks can be returned directly or fed into an AI system. By providing the full context of each code segment, Probe helps AI models navigate large codebases and produce more accurate insights.
790
+
791
+ ---
792
+
793
+ ## Adding Support for New Languages
794
+
795
+ 1. **Tree-sitter Grammar**: In `Cargo.toml`, add the tree-sitter parser for the new language.
796
+ 2. **Language Module**: Create a new file in `src/language/` for parsing logic.
797
+ 3. **Implement Language Trait**: Adapt the parse method for the new language constructs.
798
+ 4. **Factory Update**: Register your new language in Probe's detection mechanism.
799
+
800
+ ---
801
+
802
+ ## Releasing New Versions
803
+
804
+ Probe uses GitHub Actions for multi-platform builds and releases.
805
+
806
+ 1. **Update `Cargo.toml`** with the new version.
807
+ 2. **Create a new Git tag**:
808
+ ~~~bash
809
+ git tag -a vX.Y.Z -m "Release vX.Y.Z"
810
+ git push origin vX.Y.Z
811
+ ~~~
812
+ 3. **GitHub Actions** will build, package, and draft a new release with checksums.
813
+
814
+ Each release includes:
815
+ - Linux binary (x86_64)
816
+ - macOS binaries (x86_64 and aarch64)
817
+ - Windows binaries (x86_64 and aarch64)
818
+ - SHA256 checksums
819
+
820
+ ---
821
+
822
+ We believe that **local, privacy-focused, semantic code search** is essential for the future of AI-assisted development. Probe is built to empower developers and AI alike to navigate and comprehend large codebases more effectively.
823
+
824
+ For questions or contributions, please open an issue on [GitHub](https://github.com/probelabs/probe/issues) or join our [Discord community](https://discord.gg/hBN4UsTZ) for discussions and support. Happy coding—and searching!