@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,436 @@
1
+ use serde_json::Value;
2
+ use std::fs::{self, File};
3
+ use std::io::Write;
4
+ use std::path::PathBuf;
5
+ use std::process::Command;
6
+ use tempfile::TempDir;
7
+
8
+ // Helper function to extract JSON from command output
9
+ fn extract_json_from_output(output: &str) -> &str {
10
+ // Find the first occurrence of '{'
11
+ if let Some(start_index) = output.find('{') {
12
+ // Return the substring from the first '{' to the end
13
+ &output[start_index..]
14
+ } else {
15
+ // If no '{' is found, return the original string
16
+ output
17
+ }
18
+ }
19
+
20
+ // Helper function to create test files
21
+ fn create_test_file(dir: &TempDir, filename: &str, content: &str) -> PathBuf {
22
+ let file_path = dir.path().join(filename);
23
+ let parent_dir = file_path.parent().unwrap();
24
+ fs::create_dir_all(parent_dir).expect("Failed to create parent directories");
25
+ let mut file = File::create(&file_path).expect("Failed to create test file");
26
+ file.write_all(content.as_bytes())
27
+ .expect("Failed to write test content");
28
+ file_path
29
+ }
30
+
31
+ // Helper function to create a test directory structure with various test files
32
+ fn create_test_directory_structure(root_dir: &TempDir) {
33
+ // Create a source directory
34
+ let src_dir = root_dir.path().join("src");
35
+ fs::create_dir(&src_dir).expect("Failed to create src directory");
36
+
37
+ // Create Rust files with search terms
38
+ let rust_content = r#"
39
+ // This is a Rust file with a search term
40
+ fn search_function(query: &str) -> bool {
41
+ println!("Searching for: {}", query);
42
+ query.contains("search")
43
+ }
44
+ "#;
45
+ create_test_file(root_dir, "src/search.rs", rust_content);
46
+
47
+ // Create a JavaScript file with search terms
48
+ let js_content = r#"
49
+ // This is a JavaScript file with a search term
50
+ function searchFunction(query) {
51
+ console.log(`Searching for: ${query}`);
52
+ return query.includes('search');
53
+ }
54
+ "#;
55
+ create_test_file(root_dir, "src/search.js", js_content);
56
+
57
+ // Create a file with special characters
58
+ let special_chars_content = r#"
59
+ // This file contains special characters: "quotes", 'apostrophes', <tags>, &ampersands
60
+ function escapeTest(input) {
61
+ return input.replace(/[<>&"']/g, function(c) {
62
+ return {
63
+ '<': '&lt;',
64
+ '>': '&gt;',
65
+ '&': '&amp;',
66
+ '"': '&quot;',
67
+ "'": '&#39;'
68
+ }[c];
69
+ });
70
+ }
71
+ "#;
72
+ create_test_file(root_dir, "src/special_chars.js", special_chars_content);
73
+
74
+ // Create a file with multiple search terms
75
+ let multi_term_content = r#"
76
+ // This file contains multiple search terms
77
+ function processQuery(query) {
78
+ // Check if the query contains multiple terms
79
+ const terms = query.split(' ');
80
+
81
+ // Process each term
82
+ return terms.map(term => {
83
+ return {
84
+ term: term,
85
+ isValid: validateTerm(term)
86
+ };
87
+ });
88
+ }
89
+
90
+ function validateTerm(term) {
91
+ // Validate that the term is not empty and contains only allowed characters
92
+ return term.length > 0 && /^[a-zA-Z0-9_-]+$/.test(term);
93
+ }
94
+ "#;
95
+ create_test_file(root_dir, "src/multi_term.js", multi_term_content);
96
+ }
97
+
98
+ #[test]
99
+ fn test_json_output_format_basic() {
100
+ let temp_dir = TempDir::new().expect("Failed to create temp dir");
101
+ create_test_directory_structure(&temp_dir);
102
+
103
+ // Run the CLI with JSON output format
104
+ let output = Command::new("cargo")
105
+ .args([
106
+ "run",
107
+ "--",
108
+ "search",
109
+ "search", // Pattern to search for
110
+ temp_dir.path().to_str().unwrap(),
111
+ "--format",
112
+ "json",
113
+ ])
114
+ .output()
115
+ .expect("Failed to execute command");
116
+
117
+ // Check that the command succeeded
118
+ assert!(output.status.success());
119
+
120
+ // Convert stdout to string
121
+ let stdout = String::from_utf8_lossy(&output.stdout);
122
+
123
+ // Extract the JSON part from the output
124
+ let json_str = extract_json_from_output(&stdout);
125
+
126
+ // Parse the JSON output
127
+ let json_result: Value = serde_json::from_str(json_str).expect("Failed to parse JSON output");
128
+
129
+ // Validate the structure of the JSON output
130
+ assert!(json_result.is_object(), "JSON output should be an object");
131
+ assert!(
132
+ json_result.get("results").is_some(),
133
+ "JSON output should have a 'results' field"
134
+ );
135
+ assert!(
136
+ json_result.get("summary").is_some(),
137
+ "JSON output should have a 'summary' field"
138
+ );
139
+
140
+ // Validate the results array
141
+ let results = json_result.get("results").unwrap();
142
+ assert!(results.is_array(), "'results' should be an array");
143
+ assert!(
144
+ !results.as_array().unwrap().is_empty(),
145
+ "'results' array should not be empty"
146
+ );
147
+
148
+ // Validate the structure of each result
149
+ for result in results.as_array().unwrap() {
150
+ assert!(
151
+ result.get("file").is_some(),
152
+ "Each result should have a 'file' field"
153
+ );
154
+ assert!(
155
+ result.get("lines").is_some(),
156
+ "Each result should have a 'lines' field"
157
+ );
158
+ assert!(
159
+ result.get("node_type").is_some(),
160
+ "Each result should have a 'node_type' field"
161
+ );
162
+ assert!(
163
+ result.get("code").is_some(),
164
+ "Each result should have a 'code' field"
165
+ );
166
+ }
167
+
168
+ // Validate the summary object
169
+ let summary = json_result.get("summary").unwrap();
170
+ assert!(summary.is_object(), "'summary' should be an object");
171
+ assert!(
172
+ summary.get("count").is_some(),
173
+ "'summary' should have a 'count' field"
174
+ );
175
+ assert!(
176
+ summary.get("total_bytes").is_some(),
177
+ "'summary' should have a 'total_bytes' field"
178
+ );
179
+ assert!(
180
+ summary.get("total_tokens").is_some(),
181
+ "'summary' should have a 'total_tokens' field"
182
+ );
183
+
184
+ // Validate the count matches the number of results
185
+ let count = summary.get("count").unwrap().as_u64().unwrap();
186
+ let results_count = results.as_array().unwrap().len() as u64;
187
+ assert_eq!(
188
+ count, results_count,
189
+ "The 'count' in summary should match the number of results"
190
+ );
191
+ }
192
+
193
+ #[test]
194
+ fn test_json_output_with_special_characters() {
195
+ let temp_dir = TempDir::new().expect("Failed to create temp dir");
196
+ create_test_directory_structure(&temp_dir);
197
+
198
+ // Run the CLI with JSON output format, searching for special characters
199
+ let output = Command::new("cargo")
200
+ .args([
201
+ "run",
202
+ "--",
203
+ "search",
204
+ "special", // Pattern to search for
205
+ temp_dir.path().to_str().unwrap(),
206
+ "--format",
207
+ "json",
208
+ ])
209
+ .output()
210
+ .expect("Failed to execute command");
211
+
212
+ // Check that the command succeeded
213
+ assert!(output.status.success());
214
+
215
+ // Convert stdout to string
216
+ let stdout = String::from_utf8_lossy(&output.stdout);
217
+
218
+ // Extract the JSON part from the output
219
+ let json_str = extract_json_from_output(&stdout);
220
+
221
+ // Parse the JSON output
222
+ let json_result: Value = serde_json::from_str(json_str).expect("Failed to parse JSON output");
223
+
224
+ // Find the result with special characters
225
+ let results = json_result.get("results").unwrap().as_array().unwrap();
226
+ let special_chars_result = results.iter().find(|r| {
227
+ r.get("file")
228
+ .unwrap()
229
+ .as_str()
230
+ .unwrap()
231
+ .contains("special_chars.js")
232
+ });
233
+
234
+ assert!(
235
+ special_chars_result.is_some(),
236
+ "Should find the special_chars.js file"
237
+ );
238
+
239
+ // Verify that special characters are properly escaped in the JSON
240
+ let code = special_chars_result
241
+ .unwrap()
242
+ .get("code")
243
+ .unwrap()
244
+ .as_str()
245
+ .unwrap();
246
+ assert!(
247
+ code.contains("\"quotes\""),
248
+ "Double quotes should be properly escaped in JSON"
249
+ );
250
+ assert!(
251
+ code.contains("'apostrophes'"),
252
+ "Apostrophes should be properly escaped in JSON"
253
+ );
254
+ assert!(
255
+ code.contains("<tags>"),
256
+ "Tags should be properly escaped in JSON"
257
+ );
258
+ assert!(
259
+ code.contains("&ampersands"),
260
+ "Ampersands should be properly escaped in JSON"
261
+ );
262
+ }
263
+
264
+ #[test]
265
+ fn test_json_output_with_multiple_terms() {
266
+ let temp_dir = TempDir::new().expect("Failed to create temp dir");
267
+ create_test_directory_structure(&temp_dir);
268
+
269
+ // Run the CLI with JSON output format, searching for multiple terms
270
+ let output = Command::new("cargo")
271
+ .args([
272
+ "run",
273
+ "--",
274
+ "search",
275
+ "term process", // Multiple terms to search for
276
+ temp_dir.path().to_str().unwrap(),
277
+ "--format",
278
+ "json",
279
+ ])
280
+ .output()
281
+ .expect("Failed to execute command");
282
+
283
+ // Check that the command succeeded
284
+ assert!(output.status.success());
285
+
286
+ // Convert stdout to string
287
+ let stdout = String::from_utf8_lossy(&output.stdout);
288
+
289
+ // Extract the JSON part from the output
290
+ let json_str = extract_json_from_output(&stdout);
291
+
292
+ // Parse the JSON output
293
+ let json_result: Value = serde_json::from_str(json_str).expect("Failed to parse JSON output");
294
+
295
+ // Validate the results array
296
+ let results = json_result.get("results").unwrap().as_array().unwrap();
297
+
298
+ // Should find the multi_term.js file
299
+ let multi_term_result = results.iter().find(|r| {
300
+ r.get("file")
301
+ .unwrap()
302
+ .as_str()
303
+ .unwrap()
304
+ .contains("multi_term.js")
305
+ });
306
+
307
+ assert!(
308
+ multi_term_result.is_some(),
309
+ "Should find the multi_term.js file"
310
+ );
311
+
312
+ // Check if matched_keywords field contains both search terms
313
+ if let Some(matched_keywords) = multi_term_result.unwrap().get("matched_keywords") {
314
+ let keywords = matched_keywords.as_array().unwrap();
315
+ let has_term = keywords
316
+ .iter()
317
+ .any(|k| k.as_str().unwrap().contains("term"));
318
+ let has_process = keywords
319
+ .iter()
320
+ .any(|k| k.as_str().unwrap().contains("process"));
321
+
322
+ assert!(has_term, "matched_keywords should contain 'term'");
323
+ assert!(has_process, "matched_keywords should contain 'process'");
324
+ }
325
+ }
326
+
327
+ #[test]
328
+ fn test_json_output_with_no_results() {
329
+ let temp_dir = TempDir::new().expect("Failed to create temp dir");
330
+ create_test_directory_structure(&temp_dir);
331
+
332
+ // Run the CLI with JSON output format, searching for a term that doesn't exist
333
+ let output = Command::new("cargo")
334
+ .args([
335
+ "run",
336
+ "--",
337
+ "search",
338
+ "nonexistentterm", // Term that doesn't exist in any file
339
+ temp_dir.path().to_str().unwrap(),
340
+ "--format",
341
+ "json",
342
+ ])
343
+ .output()
344
+ .expect("Failed to execute command");
345
+
346
+ // Check that the command succeeded
347
+ assert!(output.status.success());
348
+
349
+ // Convert stdout to string
350
+ let stdout = String::from_utf8_lossy(&output.stdout);
351
+
352
+ // Extract the JSON part from the output
353
+ let json_str = extract_json_from_output(&stdout);
354
+
355
+ // Parse the JSON output
356
+ let json_result: Value = serde_json::from_str(json_str).expect("Failed to parse JSON output");
357
+
358
+ // Validate the structure of the JSON output
359
+ assert!(json_result.is_object(), "JSON output should be an object");
360
+ assert!(
361
+ json_result.get("results").is_some(),
362
+ "JSON output should have a 'results' field"
363
+ );
364
+ assert!(
365
+ json_result.get("summary").is_some(),
366
+ "JSON output should have a 'summary' field"
367
+ );
368
+
369
+ // Validate the results array is empty
370
+ let results = json_result.get("results").unwrap().as_array().unwrap();
371
+ assert!(results.is_empty(), "'results' array should be empty");
372
+
373
+ // Validate the summary object
374
+ let summary = json_result.get("summary").unwrap();
375
+ assert_eq!(
376
+ summary.get("count").unwrap().as_u64().unwrap(),
377
+ 0,
378
+ "'count' should be 0"
379
+ );
380
+ assert_eq!(
381
+ summary.get("total_bytes").unwrap().as_u64().unwrap(),
382
+ 0,
383
+ "'total_bytes' should be 0"
384
+ );
385
+ assert_eq!(
386
+ summary.get("total_tokens").unwrap().as_u64().unwrap(),
387
+ 0,
388
+ "'total_tokens' should be 0"
389
+ );
390
+ }
391
+
392
+ #[test]
393
+ fn test_json_output_with_files_only() {
394
+ let temp_dir = TempDir::new().expect("Failed to create temp dir");
395
+ create_test_directory_structure(&temp_dir);
396
+
397
+ // Run the CLI with JSON output format and files-only option
398
+ let output = Command::new("cargo")
399
+ .args([
400
+ "run",
401
+ "--",
402
+ "search",
403
+ "search", // Pattern to search for
404
+ temp_dir.path().to_str().unwrap(),
405
+ "--format",
406
+ "json",
407
+ "--files-only",
408
+ ])
409
+ .output()
410
+ .expect("Failed to execute command");
411
+
412
+ // Check that the command succeeded
413
+ assert!(output.status.success());
414
+
415
+ // Convert stdout to string
416
+ let stdout = String::from_utf8_lossy(&output.stdout);
417
+
418
+ // Extract the JSON part from the output
419
+ let json_str = extract_json_from_output(&stdout);
420
+
421
+ // Parse the JSON output
422
+ let json_result: Value = serde_json::from_str(json_str).expect("Failed to parse JSON output");
423
+
424
+ // Validate the results array
425
+ let results = json_result.get("results").unwrap().as_array().unwrap();
426
+ assert!(!results.is_empty(), "'results' array should not be empty");
427
+
428
+ // Verify that all results have node_type = "file"
429
+ for result in results {
430
+ assert_eq!(
431
+ result.get("node_type").unwrap().as_str().unwrap(),
432
+ "file",
433
+ "With --files-only, all results should have node_type = 'file'"
434
+ );
435
+ }
436
+ }