@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,497 @@
1
+ use roxmltree::{Document, Node};
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
+ // We'll use roxmltree for XML validation since xml-schema doesn't have the expected validator module
8
+
9
+ // Helper function to extract XML from command output
10
+ fn extract_xml_from_output(output: &str) -> &str {
11
+ // Find the first occurrence of '<?xml'
12
+ if let Some(start_index) = output.find("<?xml") {
13
+ // Return the substring from the first '<?xml' to the end
14
+ &output[start_index..]
15
+ } else {
16
+ // If no '<?xml' is found, return the original string
17
+ output
18
+ }
19
+ }
20
+
21
+ // Helper function to create test files
22
+ fn create_test_file(dir: &TempDir, filename: &str, content: &str) -> PathBuf {
23
+ let file_path = dir.path().join(filename);
24
+ let parent_dir = file_path.parent().unwrap();
25
+ fs::create_dir_all(parent_dir).expect("Failed to create parent directories");
26
+ let mut file = File::create(&file_path).expect("Failed to create test file");
27
+ file.write_all(content.as_bytes())
28
+ .expect("Failed to write test content");
29
+ file_path
30
+ }
31
+
32
+ // Helper function to create a test directory structure with various test files
33
+ fn create_test_directory_structure(root_dir: &TempDir) {
34
+ // Create a source directory
35
+ let src_dir = root_dir.path().join("src");
36
+ fs::create_dir(&src_dir).expect("Failed to create src directory");
37
+
38
+ // Create Rust files with search terms
39
+ let rust_content = r#"
40
+ // This is a Rust file with a search term
41
+ fn search_function(query: &str) -> bool {
42
+ println!("Searching for: {}", query);
43
+ query.contains("search")
44
+ }
45
+ "#;
46
+ create_test_file(root_dir, "src/search.rs", rust_content);
47
+
48
+ // Create a JavaScript file with search terms
49
+ let js_content = r#"
50
+ // This is a JavaScript file with a search term
51
+ function searchFunction(query) {
52
+ console.log(`Searching for: ${query}`);
53
+ return query.includes('search');
54
+ }
55
+ "#;
56
+ create_test_file(root_dir, "src/search.js", js_content);
57
+
58
+ // Create a file with special characters
59
+ let special_chars_content = r#"
60
+ // This file contains special characters: "quotes", 'apostrophes', <tags>, &ampersands
61
+ function escapeTest(input) {
62
+ return input.replace(/[<>&"']/g, function(c) {
63
+ return {
64
+ '<': '&lt;',
65
+ '>': '&gt;',
66
+ '&': '&amp;',
67
+ '"': '&quot;',
68
+ "'": '&#39;'
69
+ }[c];
70
+ });
71
+ }
72
+ "#;
73
+ create_test_file(root_dir, "src/special_chars.js", special_chars_content);
74
+
75
+ // Create a file with multiple search terms
76
+ let multi_term_content = r#"
77
+ // This file contains multiple search terms
78
+ function processQuery(query) {
79
+ // Check if the query contains multiple terms
80
+ const terms = query.split(' ');
81
+
82
+ // Process each term
83
+ return terms.map(term => {
84
+ return {
85
+ term: term,
86
+ isValid: validateTerm(term)
87
+ };
88
+ });
89
+ }
90
+
91
+ function validateTerm(term) {
92
+ // Validate that the term is not empty and contains only allowed characters
93
+ return term.length > 0 && /^[a-zA-Z0-9_-]+$/.test(term);
94
+ }
95
+ "#;
96
+ create_test_file(root_dir, "src/multi_term.js", multi_term_content);
97
+ }
98
+
99
+ // Helper function to validate XML structure
100
+ fn validate_xml_structure(xml_str: &str) -> Result<(), String> {
101
+ // Parse the XML to verify its structure
102
+ let doc = Document::parse(xml_str).map_err(|e| format!("Failed to parse XML: {e}"))?;
103
+
104
+ let root = doc.root_element();
105
+
106
+ // Check root element name
107
+ if root.tag_name().name() != "probe_results" {
108
+ return Err(format!(
109
+ "Root element should be 'probe_results', found '{}'",
110
+ root.tag_name().name()
111
+ ));
112
+ }
113
+
114
+ // Check for summary element
115
+ let summary = root
116
+ .children()
117
+ .find(|n| n.is_element() && n.tag_name().name() == "summary");
118
+ if summary.is_none() {
119
+ return Err("Missing required 'summary' element".to_string());
120
+ }
121
+
122
+ // Check summary structure
123
+ if let Some(summary) = summary {
124
+ let count = summary
125
+ .children()
126
+ .find(|n| n.is_element() && n.tag_name().name() == "count");
127
+ if count.is_none() {
128
+ return Err("Missing required 'count' element in summary".to_string());
129
+ }
130
+
131
+ let total_bytes = summary
132
+ .children()
133
+ .find(|n| n.is_element() && n.tag_name().name() == "total_bytes");
134
+ if total_bytes.is_none() {
135
+ return Err("Missing required 'total_bytes' element in summary".to_string());
136
+ }
137
+
138
+ let total_tokens = summary
139
+ .children()
140
+ .find(|n| n.is_element() && n.tag_name().name() == "total_tokens");
141
+ if total_tokens.is_none() {
142
+ return Err("Missing required 'total_tokens' element in summary".to_string());
143
+ }
144
+ }
145
+
146
+ // Check result elements (if any)
147
+ let results: Vec<Node> = root
148
+ .children()
149
+ .filter(|n| n.is_element() && n.tag_name().name() == "result")
150
+ .collect();
151
+ for result in results {
152
+ // Check required elements in each result
153
+ let file = result
154
+ .children()
155
+ .find(|n| n.is_element() && n.tag_name().name() == "file");
156
+ if file.is_none() {
157
+ return Err("Missing required 'file' element in result".to_string());
158
+ }
159
+
160
+ let lines = result
161
+ .children()
162
+ .find(|n| n.is_element() && n.tag_name().name() == "lines");
163
+ if lines.is_none() {
164
+ return Err("Missing required 'lines' element in result".to_string());
165
+ }
166
+
167
+ let node_type = result
168
+ .children()
169
+ .find(|n| n.is_element() && n.tag_name().name() == "node_type");
170
+ if node_type.is_none() {
171
+ return Err("Missing required 'node_type' element in result".to_string());
172
+ }
173
+
174
+ let code = result
175
+ .children()
176
+ .find(|n| n.is_element() && n.tag_name().name() == "code");
177
+ if code.is_none() {
178
+ return Err("Missing required 'code' element in result".to_string());
179
+ }
180
+ }
181
+
182
+ Ok(())
183
+ }
184
+
185
+ #[test]
186
+ fn test_xml_schema_validation_basic() {
187
+ let temp_dir = TempDir::new().expect("Failed to create temp dir");
188
+ create_test_directory_structure(&temp_dir);
189
+
190
+ // Run the CLI with XML output format
191
+ let output = Command::new("cargo")
192
+ .args([
193
+ "run",
194
+ "--",
195
+ "search",
196
+ "search", // Pattern to search for
197
+ temp_dir.path().to_str().unwrap(),
198
+ "--format",
199
+ "xml",
200
+ ])
201
+ .output()
202
+ .expect("Failed to execute command");
203
+
204
+ // Check that the command succeeded
205
+ assert!(output.status.success());
206
+
207
+ // Convert stdout to string
208
+ let stdout = String::from_utf8_lossy(&output.stdout);
209
+
210
+ // Extract the XML part from the output
211
+ let xml_str = extract_xml_from_output(&stdout);
212
+
213
+ // Validate the XML structure
214
+ let validation_result = validate_xml_structure(xml_str);
215
+ assert!(
216
+ validation_result.is_ok(),
217
+ "XML output does not conform to expected structure: {:?}",
218
+ validation_result.err()
219
+ );
220
+
221
+ // Parse the XML to verify its structure
222
+ let doc = Document::parse(xml_str).expect("Failed to parse XML output");
223
+ let root = doc.root_element();
224
+
225
+ // Validate the structure of the XML output
226
+ assert_eq!(
227
+ root.tag_name().name(),
228
+ "probe_results",
229
+ "Root element should be 'probe_results'"
230
+ );
231
+
232
+ // Validate that there are result elements
233
+ let results: Vec<Node> = root
234
+ .children()
235
+ .filter(|n| n.is_element() && n.tag_name().name() == "result")
236
+ .collect();
237
+ assert!(
238
+ !results.is_empty(),
239
+ "Should have at least one result element"
240
+ );
241
+ }
242
+
243
+ #[test]
244
+ fn test_xml_schema_validation_special_characters() {
245
+ let temp_dir = TempDir::new().expect("Failed to create temp dir");
246
+ create_test_directory_structure(&temp_dir);
247
+
248
+ // Run the CLI with XML output format, searching for special characters
249
+ let output = Command::new("cargo")
250
+ .args([
251
+ "run",
252
+ "--",
253
+ "search",
254
+ "special", // Pattern to search for
255
+ temp_dir.path().to_str().unwrap(),
256
+ "--format",
257
+ "xml",
258
+ ])
259
+ .output()
260
+ .expect("Failed to execute command");
261
+
262
+ // Check that the command succeeded
263
+ assert!(output.status.success());
264
+
265
+ // Convert stdout to string
266
+ let stdout = String::from_utf8_lossy(&output.stdout);
267
+
268
+ // Extract the XML part from the output
269
+ let xml_str = extract_xml_from_output(&stdout);
270
+
271
+ // Validate the XML structure
272
+ let validation_result = validate_xml_structure(xml_str);
273
+ assert!(
274
+ validation_result.is_ok(),
275
+ "XML output with special characters does not conform to expected structure: {:?}",
276
+ validation_result.err()
277
+ );
278
+
279
+ // Parse the XML to verify its structure
280
+ let doc = Document::parse(xml_str).expect("Failed to parse XML output");
281
+ let root = doc.root_element();
282
+
283
+ // Find the result with special characters
284
+ let results: Vec<Node> = root
285
+ .children()
286
+ .filter(|n| n.is_element() && n.tag_name().name() == "result")
287
+ .collect();
288
+ let special_chars_result = results.iter().find(|&r| {
289
+ if let Some(file) = r
290
+ .children()
291
+ .find(|n| n.is_element() && n.tag_name().name() == "file")
292
+ {
293
+ if let Some(text) = file.text() {
294
+ return text.contains("special_chars.js");
295
+ }
296
+ }
297
+ false
298
+ });
299
+
300
+ assert!(
301
+ special_chars_result.is_some(),
302
+ "Should find the special_chars.js file"
303
+ );
304
+
305
+ // Verify that special characters are properly escaped in the XML
306
+ if let Some(result) = special_chars_result {
307
+ if let Some(code) = result
308
+ .children()
309
+ .find(|n| n.is_element() && n.tag_name().name() == "code")
310
+ {
311
+ if let Some(text) = code.text() {
312
+ // The special characters should be properly escaped in XML
313
+ // Since we're using CDATA, the characters should be preserved as-is
314
+ assert!(
315
+ text.contains("\"quotes\""),
316
+ "Double quotes should be preserved in CDATA"
317
+ );
318
+ assert!(
319
+ text.contains("'apostrophes'"),
320
+ "Apostrophes should be preserved in CDATA"
321
+ );
322
+ assert!(text.contains("<tags>"), "Tags should be preserved in CDATA");
323
+ assert!(
324
+ text.contains("&ampersands"),
325
+ "Ampersands should be preserved in CDATA"
326
+ );
327
+ } else {
328
+ panic!("Code element should have text content");
329
+ }
330
+ } else {
331
+ panic!("Result should have a code element");
332
+ }
333
+ }
334
+ }
335
+
336
+ #[test]
337
+ fn test_xml_schema_validation_empty_results() {
338
+ let temp_dir = TempDir::new().expect("Failed to create temp dir");
339
+ create_test_directory_structure(&temp_dir);
340
+
341
+ // Run the CLI with XML output format, searching for a term that doesn't exist
342
+ let output = Command::new("cargo")
343
+ .args([
344
+ "run",
345
+ "--",
346
+ "search",
347
+ "nonexistentterm", // Term that doesn't exist in any file
348
+ temp_dir.path().to_str().unwrap(),
349
+ "--format",
350
+ "xml",
351
+ ])
352
+ .output()
353
+ .expect("Failed to execute command");
354
+
355
+ // Check that the command succeeded
356
+ assert!(output.status.success());
357
+
358
+ // Convert stdout to string
359
+ let stdout = String::from_utf8_lossy(&output.stdout);
360
+
361
+ // Extract the XML part from the output
362
+ let xml_str = extract_xml_from_output(&stdout);
363
+
364
+ // Validate the XML structure
365
+ let validation_result = validate_xml_structure(xml_str);
366
+ assert!(
367
+ validation_result.is_ok(),
368
+ "XML output with empty results does not conform to expected structure: {:?}",
369
+ validation_result.err()
370
+ );
371
+
372
+ // Parse the XML to verify its structure
373
+ let doc = Document::parse(xml_str).expect("Failed to parse XML output");
374
+ let root = doc.root_element();
375
+
376
+ // Validate that there are no result elements
377
+ let results: Vec<Node> = root
378
+ .children()
379
+ .filter(|n| n.is_element() && n.tag_name().name() == "result")
380
+ .collect();
381
+ assert!(results.is_empty(), "Should have no result elements");
382
+
383
+ // Validate the summary element
384
+ let summary = root
385
+ .children()
386
+ .find(|n| n.is_element() && n.tag_name().name() == "summary");
387
+ assert!(summary.is_some(), "Should have a summary element");
388
+
389
+ if let Some(summary) = summary {
390
+ // Validate the summary contains count, total_bytes, and total_tokens with zero values
391
+ if let Some(count) = summary
392
+ .children()
393
+ .find(|n| n.is_element() && n.tag_name().name() == "count")
394
+ {
395
+ let count_value = count.text().unwrap_or("0").parse::<usize>().unwrap_or(0);
396
+ assert_eq!(count_value, 0, "Count should be 0");
397
+ } else {
398
+ panic!("Summary should have a count element");
399
+ }
400
+ }
401
+ }
402
+
403
+ #[test]
404
+ fn test_xml_schema_validation_multiple_terms() {
405
+ let temp_dir = TempDir::new().expect("Failed to create temp dir");
406
+ create_test_directory_structure(&temp_dir);
407
+
408
+ // Run the CLI with XML output format, searching for multiple terms
409
+ let output = Command::new("cargo")
410
+ .args([
411
+ "run",
412
+ "--",
413
+ "search",
414
+ "term process", // Multiple terms to search for
415
+ temp_dir.path().to_str().unwrap(),
416
+ "--format",
417
+ "xml",
418
+ ])
419
+ .output()
420
+ .expect("Failed to execute command");
421
+
422
+ // Check that the command succeeded
423
+ assert!(output.status.success());
424
+
425
+ // Convert stdout to string
426
+ let stdout = String::from_utf8_lossy(&output.stdout);
427
+
428
+ // Extract the XML part from the output
429
+ let xml_str = extract_xml_from_output(&stdout);
430
+
431
+ // Validate the XML structure
432
+ let validation_result = validate_xml_structure(xml_str);
433
+ assert!(
434
+ validation_result.is_ok(),
435
+ "XML output with multiple terms does not conform to expected structure: {:?}",
436
+ validation_result.err()
437
+ );
438
+
439
+ // Parse the XML to verify its structure
440
+ let doc = Document::parse(xml_str).expect("Failed to parse XML output");
441
+ let root = doc.root_element();
442
+
443
+ // Find the result with multiple terms
444
+ let results: Vec<Node> = root
445
+ .children()
446
+ .filter(|n| n.is_element() && n.tag_name().name() == "result")
447
+ .collect();
448
+ let multi_term_result = results.iter().find(|&r| {
449
+ if let Some(file) = r
450
+ .children()
451
+ .find(|n| n.is_element() && n.tag_name().name() == "file")
452
+ {
453
+ if let Some(text) = file.text() {
454
+ return text.contains("multi_term.js");
455
+ }
456
+ }
457
+ false
458
+ });
459
+
460
+ assert!(
461
+ multi_term_result.is_some(),
462
+ "Should find the multi_term.js file"
463
+ );
464
+
465
+ // Check if matched_keywords element contains both search terms
466
+ if let Some(result) = multi_term_result {
467
+ if let Some(matched_keywords) = result
468
+ .children()
469
+ .find(|n| n.is_element() && n.tag_name().name() == "matched_keywords")
470
+ {
471
+ let keywords: Vec<Node> = matched_keywords
472
+ .children()
473
+ .filter(|n| n.is_element() && n.tag_name().name() == "keyword")
474
+ .collect();
475
+
476
+ // Check if both terms are present
477
+ let has_term = keywords.iter().any(|k| {
478
+ if let Some(text) = k.text() {
479
+ text.contains("term")
480
+ } else {
481
+ false
482
+ }
483
+ });
484
+
485
+ let has_process = keywords.iter().any(|k| {
486
+ if let Some(text) = k.text() {
487
+ text.contains("process")
488
+ } else {
489
+ false
490
+ }
491
+ });
492
+
493
+ assert!(has_term, "matched_keywords should contain 'term'");
494
+ assert!(has_process, "matched_keywords should contain 'process'");
495
+ }
496
+ }
497
+ }
@@ -0,0 +1,9 @@
1
+ import { execSync } from "node:child_process";
2
+ import { isWebContainer } from "@webcontainer/env";
3
+
4
+ if (isWebContainer()) {
5
+ console.log("[postinstall] WebContainer/StackBlitz erkannt → build wird ausgeführt…");
6
+ execSync("npm run build", { stdio: "inherit" });
7
+ } else {
8
+ console.log("[postinstall] Kein WebContainer → build wird übersprungen.");
9
+ }
File without changes
@@ -0,0 +1,111 @@
1
+ #!/bin/bash
2
+ #
3
+ # Wiki Build Script
4
+ # Builds wiki/ directory from docs/ source files
5
+ #
6
+ # Usage: ./scripts/wiki-build.sh
7
+ #
8
+
9
+ set -e
10
+
11
+ DOCS_DIR="docs"
12
+ WIKI_DIR="wiki"
13
+
14
+ echo "📦 Building Wiki from docs/"
15
+ echo "=============================="
16
+ echo ""
17
+
18
+ # Check if docs directory exists
19
+ if [ ! -d "$DOCS_DIR" ]; then
20
+ echo "❌ Error: $DOCS_DIR/ directory not found"
21
+ exit 1
22
+ fi
23
+
24
+ # Create wiki directory if not exists
25
+ mkdir -p "$WIKI_DIR"
26
+
27
+ # Copy templates from docs/
28
+ echo "📄 Copying wiki templates from docs/..."
29
+ cp "$DOCS_DIR/WIKI-HOME.md" "$WIKI_DIR/Home.md" 2>/dev/null && echo " ✓ Home.md (from WIKI-HOME.md)" || echo " ⚠ WIKI-HOME.md not found"
30
+ cp "$DOCS_DIR/WIKI-SIDEBAR.md" "$WIKI_DIR/_Sidebar.md" 2>/dev/null && echo " ✓ _Sidebar.md (from WIKI-SIDEBAR.md)" || echo " ⚠ WIKI-SIDEBAR.md not found"
31
+
32
+ # File mapping: docs/*.md → wiki/Wiki-Name.md (names based on document headings)
33
+ echo "📋 Copying files from docs/ to wiki/..."
34
+
35
+ cp "$DOCS_DIR/QUICKSTART.md" "$WIKI_DIR/Quick-Start-Guide.md" 2>/dev/null && echo " ✓ Quick-Start-Guide.md" || echo " ⚠ QUICKSTART.md not found"
36
+ cp "$DOCS_DIR/EXAMPLES.md" "$WIKI_DIR/Example-Usage.md" 2>/dev/null && echo " ✓ Example-Usage.md" || echo " ⚠ EXAMPLES.md not found"
37
+ cp "$DOCS_DIR/AUTHENTICATION.md" "$WIKI_DIR/Authentication-Configuration.md" 2>/dev/null && echo " ✓ Authentication-Configuration.md" || echo " ⚠ AUTHENTICATION.md not found"
38
+ cp "$DOCS_DIR/AI-FEATURES.md" "$WIKI_DIR/AI-Features-Guide.md" 2>/dev/null && echo " ✓ AI-Features-Guide.md" || echo " ⚠ AI-FEATURES.md not found"
39
+ cp "$DOCS_DIR/WIDGET-GUIDE.md" "$WIKI_DIR/Widget-Bundle-Guide.md" 2>/dev/null && echo " ✓ Widget-Bundle-Guide.md" || echo " ⚠ WIDGET-GUIDE.md not found"
40
+ cp "$DOCS_DIR/MIGRATION-GUIDE.md" "$WIKI_DIR/Migration-Guide.md" 2>/dev/null && echo " ✓ Migration-Guide.md" || echo " ⚠ MIGRATION-GUIDE.md not found"
41
+ cp "$DOCS_DIR/API-REFERENCE.md" "$WIKI_DIR/API-Reference.md" 2>/dev/null && echo " ✓ API-Reference.md" || echo " ⚠ API-REFERENCE.md not found"
42
+ cp "$DOCS_DIR/TROUBLESHOOTING.md" "$WIKI_DIR/Troubleshooting-Guide.md" 2>/dev/null && echo " ✓ Troubleshooting-Guide.md" || echo " ⚠ TROUBLESHOOTING.md not found"
43
+ cp "$DOCS_DIR/BACKEND-API.md" "$WIKI_DIR/Backend-API-Guide.md" 2>/dev/null && echo " ✓ Backend-API-Guide.md" || echo " ⚠ BACKEND-API.md not found"
44
+ cp "$DOCS_DIR/DEVELOPMENT.md" "$WIKI_DIR/Development-Guide.md" 2>/dev/null && echo " ✓ Development-Guide.md" || echo " ⚠ DEVELOPMENT.md not found"
45
+ cp "$DOCS_DIR/NPM-PUBLISH.md" "$WIKI_DIR/NPM-Publishing-Guide.md" 2>/dev/null && echo " ✓ NPM-Publishing-Guide.md" || echo " ⚠ NPM-PUBLISH.md not found"
46
+ cp "$DOCS_DIR/REDIS-SETUP.md" "$WIKI_DIR/Redis-Production-Setup.md" 2>/dev/null && echo " ✓ Redis-Production-Setup.md" || echo " ⚠ REDIS-SETUP.md not found"
47
+ cp "$DOCS_DIR/SERVER.md" "$WIKI_DIR/Backend-Server.md" 2>/dev/null && echo " ✓ Backend-Server.md" || echo " ⚠ SERVER.md not found"
48
+ cp "$DOCS_DIR/MCP-SERVER.md" "$WIKI_DIR/MCP-Server-Integration.md" 2>/dev/null && echo " ✓ MCP-Server-Integration.md" || echo " ⚠ MCP-SERVER.md not found"
49
+
50
+ echo ""
51
+ echo "🔗 Fixing wiki links..."
52
+
53
+ # Fix all markdown links for wiki format
54
+ cd "$WIKI_DIR"
55
+
56
+ # Remove .md extensions from links and map to new wiki page names
57
+ sed -i '' 's|\](./docs/QUICKSTART\.md)|\](Quick-Start-Guide)|g' *.md 2>/dev/null || true
58
+ sed -i '' 's|\](./docs/EXAMPLES\.md)|\](Example-Usage)|g' *.md 2>/dev/null || true
59
+ sed -i '' 's|\](./docs/AUTHENTICATION\.md)|\](Authentication-Configuration)|g' *.md 2>/dev/null || true
60
+ sed -i '' 's|\](./docs/AI-FEATURES\.md)|\](AI-Features-Guide)|g' *.md 2>/dev/null || true
61
+ sed -i '' 's|\](./docs/WIDGET-GUIDE\.md)|\](Widget-Bundle-Guide)|g' *.md 2>/dev/null || true
62
+ sed -i '' 's|\](./docs/MIGRATION-GUIDE\.md)|\](Migration-Guide)|g' *.md 2>/dev/null || true
63
+ sed -i '' 's|\](./docs/API-REFERENCE\.md)|\](API-Reference)|g' *.md 2>/dev/null || true
64
+ sed -i '' 's|\](./docs/TROUBLESHOOTING\.md)|\](Troubleshooting-Guide)|g' *.md 2>/dev/null || true
65
+ sed -i '' 's|\](./docs/BACKEND-API\.md)|\](Backend-API-Guide)|g' *.md 2>/dev/null || true
66
+ sed -i '' 's|\](./docs/DEVELOPMENT\.md)|\](Development-Guide)|g' *.md 2>/dev/null || true
67
+ sed -i '' 's|\](./docs/NPM-PUBLISH\.md)|\](NPM-Publishing-Guide)|g' *.md 2>/dev/null || true
68
+ sed -i '' 's|\](./docs/REDIS-SETUP\.md)|\](Redis-Production-Setup)|g' *.md 2>/dev/null || true
69
+ sed -i '' 's|\](./docs/SERVER\.md)|\](Backend-Server)|g' *.md 2>/dev/null || true
70
+ sed -i '' 's|\](./docs/MCP-SERVER\.md)|\](MCP-Server-Integration)|g' *.md 2>/dev/null || true
71
+
72
+ # Also handle root-level links (within docs/ folder)
73
+ sed -i '' 's|\](./QUICKSTART\.md)|\](Quick-Start-Guide)|g' *.md 2>/dev/null || true
74
+ sed -i '' 's|\](./EXAMPLES\.md)|\](Example-Usage)|g' *.md 2>/dev/null || true
75
+ sed -i '' 's|\](./AUTHENTICATION\.md)|\](Authentication-Configuration)|g' *.md 2>/dev/null || true
76
+ sed -i '' 's|\](./AI-FEATURES\.md)|\](AI-Features-Guide)|g' *.md 2>/dev/null || true
77
+ sed -i '' 's|\](./WIDGET-GUIDE\.md)|\](Widget-Bundle-Guide)|g' *.md 2>/dev/null || true
78
+ sed -i '' 's|\](./MIGRATION-GUIDE\.md)|\](Migration-Guide)|g' *.md 2>/dev/null || true
79
+ sed -i '' 's|\](./API-REFERENCE\.md)|\](API-Reference)|g' *.md 2>/dev/null || true
80
+ sed -i '' 's|\](./TROUBLESHOOTING\.md)|\](Troubleshooting-Guide)|g' *.md 2>/dev/null || true
81
+ sed -i '' 's|\](./BACKEND-API\.md)|\](Backend-API-Guide)|g' *.md 2>/dev/null || true
82
+ sed -i '' 's|\](./DEVELOPMENT\.md)|\](Development-Guide)|g' *.md 2>/dev/null || true
83
+ sed -i '' 's|\](./NPM-PUBLISH\.md)|\](NPM-Publishing-Guide)|g' *.md 2>/dev/null || true
84
+ sed -i '' 's|\](./REDIS-SETUP\.md)|\](Redis-Production-Setup)|g' *.md 2>/dev/null || true
85
+ sed -i '' 's|\](./SERVER\.md)|\](Backend-Server)|g' *.md 2>/dev/null || true
86
+ sed -i '' 's|\](./MCP-SERVER\.md)|\](MCP-Server-Integration)|g' *.md 2>/dev/null || true
87
+
88
+ # Handle links without ./ prefix (e.g., ](EXAMPLES.md))
89
+ sed -i '' 's|\](QUICKSTART\.md)|\](Quick-Start-Guide)|g' *.md 2>/dev/null || true
90
+ sed -i '' 's|\](EXAMPLES\.md)|\](Example-Usage)|g' *.md 2>/dev/null || true
91
+ sed -i '' 's|\](AUTHENTICATION\.md)|\](Authentication-Configuration)|g' *.md 2>/dev/null || true
92
+ sed -i '' 's|\](AI-FEATURES\.md)|\](AI-Features-Guide)|g' *.md 2>/dev/null || true
93
+ sed -i '' 's|\](WIDGET-GUIDE\.md)|\](Widget-Bundle-Guide)|g' *.md 2>/dev/null || true
94
+ sed -i '' 's|\](MIGRATION-GUIDE\.md)|\](Migration-Guide)|g' *.md 2>/dev/null || true
95
+ sed -i '' 's|\](API-REFERENCE\.md)|\](API-Reference)|g' *.md 2>/dev/null || true
96
+ sed -i '' 's|\](TROUBLESHOOTING\.md)|\](Troubleshooting-Guide)|g' *.md 2>/dev/null || true
97
+ sed -i '' 's|\](BACKEND-API\.md)|\](Backend-API-Guide)|g' *.md 2>/dev/null || true
98
+ sed -i '' 's|\](DEVELOPMENT\.md)|\](Development-Guide)|g' *.md 2>/dev/null || true
99
+ sed -i '' 's|\](NPM-PUBLISH\.md)|\](NPM-Publishing-Guide)|g' *.md 2>/dev/null || true
100
+ sed -i '' 's|\](REDIS-SETUP\.md)|\](Redis-Production-Setup)|g' *.md 2>/dev/null || true
101
+ sed -i '' 's|\](SERVER\.md)|\](Backend-Server)|g' *.md 2>/dev/null || true
102
+ sed -i '' 's|\](MCP-SERVER\.md)|\](MCP-Server-Integration)|g' *.md 2>/dev/null || true
103
+
104
+ cd ..
105
+
106
+ echo ""
107
+ echo "✅ Wiki build complete!"
108
+ echo "📁 Files: $(ls -1 $WIKI_DIR/*.md 2>/dev/null | wc -l | tr -d ' ')"
109
+ echo ""
110
+ echo "Next steps:"
111
+ echo " ./scripts/wiki-deploy.sh \"Update documentation\""