@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,622 @@
1
+ This directory contains example implementations of the `@crownpeak/dqm-react-component`.
2
+
3
+ ## Basic React App Example
4
+
5
+ ```tsx
6
+ import React, {useState} from 'react';
7
+ import {DQMSidebar} from '@crownpeak/dqm-react-component';
8
+
9
+ function App() {
10
+ const [sidebarOpen, setSidebarOpen] = useState(false);
11
+
12
+ // Set DQM credentials (e.g., from environment variables)
13
+ React.useEffect(() => {
14
+ localStorage.setItem('dqm_apiKey', process.env.REACT_APP_DQM_API_KEY);
15
+ localStorage.setItem('dqm_websiteID', process.env.REACT_APP_DQM_WEBSITE_ID);
16
+ }, []);
17
+
18
+ return (
19
+ <div>
20
+ <h1>My Application with DQM</h1>
21
+ <p>This page is monitored by Crownpeak DQM for quality assurance.</p>
22
+
23
+ <DQMSidebar
24
+ open={sidebarOpen}
25
+ onClose={() => setSidebarOpen(false)}
26
+ onOpen={() => setSidebarOpen(true)}
27
+ />
28
+ </div>
29
+ );
30
+ }
31
+
32
+ export default App;
33
+ ```
34
+
35
+ ## Next.js Example
36
+
37
+ ```tsx
38
+ // pages/_app.tsx
39
+ import type {AppProps} from 'next/app';
40
+ import {useEffect, useState} from 'react';
41
+ import {DQMSidebar} from '@crownpeak/dqm-react-component';
42
+ import {createTheme} from '@mui/material/styles';
43
+
44
+ const theme = createTheme();
45
+
46
+ function MyApp({Component, pageProps}: AppProps) {
47
+ const [sidebarOpen, setSidebarOpen] = useState(false);
48
+
49
+ useEffect(() => {
50
+ if (typeof window !== 'undefined') {
51
+ localStorage.setItem('dqm_apiKey', process.env.NEXT_PUBLIC_DQM_API_KEY!);
52
+ localStorage.setItem('dqm_websiteID', process.env.NEXT_PUBLIC_DQM_WEBSITE_ID!);
53
+ }
54
+ }, []);
55
+
56
+ return (
57
+ <>
58
+ <Component {...pageProps} />
59
+ <DQMSidebar
60
+ open={sidebarOpen}
61
+ onClose={() => setSidebarOpen(false)}
62
+ onOpen={() => setSidebarOpen(true)}
63
+ />
64
+ </>
65
+ );
66
+ }
67
+
68
+ export default MyApp;
69
+ ```
70
+
71
+ ## TypeScript Example with Custom Configuration
72
+
73
+ ```tsx
74
+ import React, { useState, useCallback } from 'react';
75
+ import { DQMSidebar, ErrorBoundary } from '@crownpeak/dqm-react-component';
76
+ import type { DQMSidebarProps } from '@crownpeak/dqm-react-component';
77
+
78
+ interface DQMConfig {
79
+ apiKey: string;
80
+ websiteId: string;
81
+ enabled: boolean;
82
+ }
83
+
84
+ const config: DQMConfig = {
85
+ apiKey: process.env.REACT_APP_DQM_API_KEY!,
86
+ websiteId: process.env.REACT_APP_DQM_WEBSITE_ID!,
87
+ enabled: process.env.NODE_ENV === 'production'
88
+ };
89
+
90
+ function App() {
91
+ const [sidebarOpen, setSidebarOpen] = useState(false);
92
+
93
+ React.useEffect(() => {
94
+ if (config.enabled) {
95
+ localStorage.setItem('dqm_apiKey', config.apiKey);
96
+ localStorage.setItem('dqm_websiteID', config.websiteId);
97
+ }
98
+ }, []);
99
+
100
+ const handleOpen = useCallback(() => {
101
+ setSidebarOpen(true);
102
+ }, []);
103
+
104
+ const handleClose = useCallback(() => {
105
+ setSidebarOpen(false);
106
+ }, []);
107
+
108
+ if (!config.enabled) {
109
+ return <div>DQM is disabled in this environment</div>;
110
+ }
111
+
112
+ return (
113
+ <ErrorBoundary>
114
+ <div>
115
+ <h1>App with DQM Quality Monitoring</h1>
116
+ <DQMSidebar
117
+ open={sidebarOpen}
118
+ onClose={handleClose}
119
+ onOpen={handleOpen}
120
+ />
121
+ </div>
122
+ </ErrorBoundary>
123
+ );
124
+ }
125
+
126
+ export default App;
127
+ ```
128
+
129
+ ## Conditional Rendering (Development Only)
130
+
131
+ ```tsx
132
+ import React from 'react';
133
+ import { DQMSidebar } from '@crownpeak/dqm-react-component';
134
+
135
+ function App() {
136
+ const [sidebarOpen, setSidebarOpen] = React.useState(false);
137
+ const isDevelopment = process.env.NODE_ENV === 'development';
138
+
139
+ return (
140
+ <div>
141
+ <h1>My App</h1>
142
+
143
+ {/* Only show DQM in development */}
144
+ {isDevelopment && (
145
+ <DQMSidebar
146
+ open={sidebarOpen}
147
+ onClose={() => setSidebarOpen(false)}
148
+ onOpen={() => setSidebarOpen(true)}
149
+ />
150
+ )}
151
+ </div>
152
+ );
153
+ }
154
+ ```
155
+
156
+ ## With Custom Button Trigger
157
+
158
+ ```tsx
159
+ import React, { useState } from 'react';
160
+ import { DQMSidebar } from '@crownpeak/dqm-react-component';
161
+ import { Button } from '@mui/material';
162
+ import { Assessment } from '@mui/icons-material';
163
+
164
+ function App() {
165
+ const [sidebarOpen, setSidebarOpen] = useState(false);
166
+
167
+ return (
168
+ <div>
169
+ <header>
170
+ <Button
171
+ variant="outlined"
172
+ startIcon={<Assessment />}
173
+ onClick={() => setSidebarOpen(true)}
174
+ >
175
+ Quality Check
176
+ </Button>
177
+ </header>
178
+
179
+ <main>
180
+ <h1>Content</h1>
181
+ </main>
182
+
183
+ <DQMSidebar
184
+ open={sidebarOpen}
185
+ onClose={() => setSidebarOpen(false)}
186
+ onOpen={() => setSidebarOpen(true)}
187
+ />
188
+ </div>
189
+ );
190
+ }
191
+ ```
192
+
193
+ ## With Overlay/Toolbar Configuration
194
+
195
+ Use `overlayConfig` to offset the sidebar when toolbars or overlays are present.
196
+
197
+ ### Auto-Detection (Toolbar Selector)
198
+
199
+ ```tsx
200
+ import { DQMSidebar } from '@crownpeak/dqm-react-component';
201
+
202
+ function App() {
203
+ const [sidebarOpen, setSidebarOpen] = useState(false);
204
+
205
+ return (
206
+ <DQMSidebar
207
+ open={sidebarOpen}
208
+ onClose={() => setSidebarOpen(false)}
209
+ onOpen={() => setSidebarOpen(true)}
210
+ config={{
211
+ overlayConfig: {
212
+ // Example toolbar anchored to the top edge
213
+ selector: '.preview-toolbar',
214
+ validateIframe: false
215
+ }
216
+ }}
217
+ />
218
+ );
219
+ }
220
+ ```
221
+ ### Auto-Detection (Custom Selector)
222
+
223
+ ```tsx
224
+ import { DQMSidebar } from '@crownpeak/dqm-react-component';
225
+
226
+ function App() {
227
+ const [open, setOpen] = useState(false);
228
+
229
+ return (
230
+ <DQMSidebar
231
+ open={open}
232
+ onClose={() => setOpen(false)}
233
+ onOpen={() => setOpen(true)}
234
+ config={{
235
+ overlayConfig: {
236
+ selector: 'iframe#my-overlay',
237
+ }
238
+ }}
239
+ />
240
+ );
241
+ }
242
+ ```
243
+
244
+ ### Custom Selector
245
+
246
+ ```tsx
247
+ import { DQMSidebar } from '@crownpeak/dqm-react-component';
248
+
249
+ function App() {
250
+ const [open, setOpen] = useState(false);
251
+
252
+ return (
253
+ <DQMSidebar
254
+ open={open}
255
+ onClose={() => setOpen(false)}
256
+ onOpen={() => setOpen(true)}
257
+ config={{
258
+ overlayConfig: {
259
+ // Custom selector for your admin toolbar
260
+ selector: '.admin-toolbar-header',
261
+ // Disable iFrame validation for non-iFrame elements
262
+ validateIframe: false,
263
+ }
264
+ }}
265
+ />
266
+ );
267
+ }
268
+ ```
269
+
270
+ ### Manual Offset (for Cross-Origin iFrames)
271
+
272
+ When the overlay is a cross-origin iFrame that fills the entire screen but has
273
+ a smaller internal toolbar, auto-detection won't work. Use manual offset:
274
+
275
+ ```tsx
276
+ import { DQMSidebar } from '@crownpeak/dqm-react-component';
277
+
278
+ function App() {
279
+ const [open, setOpen] = useState(false);
280
+
281
+ return (
282
+ <DQMSidebar
283
+ open={open}
284
+ onClose={() => setOpen(false)}
285
+ onOpen={() => setOpen(true)}
286
+ config={{
287
+ overlayConfig: {
288
+ // Manual offset: 50px from the top
289
+ manualOffset: {
290
+ position: 'top',
291
+ pixels: 50
292
+ }
293
+ }
294
+ }}
295
+ />
296
+ );
297
+ }
298
+ ```
299
+
300
+ ### Disable Overlay Detection
301
+
302
+ ```tsx
303
+ import { DQMSidebar } from '@crownpeak/dqm-react-component';
304
+
305
+ function App() {
306
+ const [open, setOpen] = useState(false);
307
+
308
+ return (
309
+ <DQMSidebar
310
+ open={open}
311
+ onClose={() => setOpen(false)}
312
+ onOpen={() => setOpen(true)}
313
+ config={{
314
+ overlayConfig: {
315
+ // Disable all overlay detection
316
+ selector: null
317
+ }
318
+ }}
319
+ />
320
+ );
321
+ }
322
+ ```
323
+
324
+ ### Disable Logout Button
325
+
326
+ ```tsx
327
+ import { DQMSidebar } from '@crownpeak/dqm-react-component';
328
+
329
+ function App() {
330
+ const [open, setOpen] = useState(false);
331
+
332
+ return (
333
+ <DQMSidebar
334
+ open={open}
335
+ onClose={() => setOpen(false)}
336
+ onOpen={() => setOpen(true)}
337
+ config={{
338
+ // Host app controls session lifecycle; hide logout control in the sidebar
339
+ disableLogout: true,
340
+ }}
341
+ />
342
+ );
343
+ }
344
+ ```
345
+
346
+ ### Advanced: Using the Hook Directly
347
+
348
+ For custom UI components that need overlay information:
349
+
350
+ ```tsx
351
+ import { useOverlayResistant } from '@crownpeak/dqm-react-component';
352
+ import type { OverlayInfo } from '@crownpeak/dqm-react-component';
353
+
354
+ function MyFloatingButton() {
355
+ const overlay: OverlayInfo = useOverlayResistant({
356
+ selector: '...',
357
+ validateIframe: true,
358
+ pollMs: 1000,
359
+ });
360
+
361
+ return (
362
+ <button
363
+ style={{
364
+ position: 'fixed',
365
+ top: overlay.present
366
+ ? `${overlay.contentOffset.top + 16}px`
367
+ : '16px',
368
+ right: '16px',
369
+ zIndex: 9999,
370
+ }}
371
+ >
372
+ {overlay.present
373
+ ? `Toolbar at ${overlay.position} (${overlay.height}px)`
374
+ : 'No toolbar detected'}
375
+ </button>
376
+ );
377
+ }
378
+ ```
379
+
380
+ ---
381
+
382
+ ## AI Features Examples
383
+
384
+ ### Example 6: AI Translation with OpenAI
385
+
386
+ Translate checkpoint descriptions into any language using OpenAI's GPT models.
387
+
388
+ ```typescript
389
+ import React, { useState } from 'react';
390
+ import { DQMSidebar } from '@crownpeak/dqm-react-component';
391
+
392
+ function App() {
393
+ const [sidebarOpen, setSidebarOpen] = useState(false);
394
+
395
+ return (
396
+ <div>
397
+ <h1>DQM with AI Translation (OpenAI)</h1>
398
+
399
+ <DQMSidebar
400
+ open={sidebarOpen}
401
+ onClose={() => setSidebarOpen(false)}
402
+ onOpen={() => setSidebarOpen(true)}
403
+ config={{
404
+ websiteId: 'your-website-id',
405
+ apiKey: 'your-dqm-api-key',
406
+
407
+ // AI Translation Configuration
408
+ translation: {
409
+ enabledByDefault: true, // Enable translation by default
410
+ computeBudgetMs: 15000, // 15s timeout
411
+ }
412
+ }}
413
+ />
414
+ </div>
415
+ );
416
+ }
417
+
418
+ export default App;
419
+ ```
420
+
421
+ **Key Features:**
422
+ - **Backend:** OpenAI (gpt-4o-mini, gpt-4o, gpt-4.1)
423
+ - **Performance:** ~2-5s for 50 checkpoints (batch processing with 3 concurrent requests)
424
+ - **Caching:** Automatic IndexedDB + In-Memory caching (FNV-1a hash-based)
425
+ - **Mode:** `fast` (15s timeout, fails gracefully) or `full` (120s timeout, complete translation)
426
+ - **Cost:** ~$0.001-0.003 per checkpoint (gpt-4o-mini)
427
+
428
+ ### Example 7: AI Summary Generation
429
+
430
+ Generate concise bullet-point summaries of analysis results.
431
+
432
+ ```typescript
433
+ import React, { useState } from 'react';
434
+ import { DQMSidebar } from '@crownpeak/dqm-react-component';
435
+
436
+ function App() {
437
+ const [sidebarOpen, setSidebarOpen] = useState(false);
438
+
439
+ return (
440
+ <div>
441
+ <h1>DQM with AI Summary</h1>
442
+
443
+ <DQMSidebar
444
+ open={sidebarOpen}
445
+ onClose={() => setSidebarOpen(false)}
446
+ onOpen={() => setSidebarOpen(true)}
447
+ config={{
448
+ websiteId: 'your-website-id',
449
+ apiKey: 'your-dqm-api-key',
450
+
451
+ // AI Summary Configuration
452
+ summary: {
453
+ timeoutMs: 45000, // 45s timeout
454
+ }
455
+ }}
456
+ />
457
+ </div>
458
+ );
459
+ }
460
+
461
+ export default App;
462
+ ```
463
+
464
+ **Key Features:**
465
+ - **Backend:** OpenAI (gpt-4o-mini, gpt-4o, gpt-4.1)
466
+ - **Performance:** ~3-8s for 50 checkpoints
467
+ - **Chunking:** Automatic chunking based on token count (single/chunk/tiny strategies)
468
+ - **Caching:** Persistent IndexedDB cache (reuses summaries across sessions)
469
+ - **Output:** 3-7 bullet points highlighting key issues
470
+ - **Cost:** ~$0.002-0.005 per summary
471
+
472
+ **Chunking Strategies:**
473
+ - **Single:** All checkpoints in one request (<100 items)
474
+ - **Chunk:** Split into 3 batches (100-300 items)
475
+ - **Tiny:** Individual summaries per checkpoint, merged (300+ items)
476
+
477
+ ### Example 8: Combined AI Features (Translation + Summary)
478
+
479
+ Use both translation and summary generation together.
480
+
481
+ ```typescript
482
+ import React, { useState } from 'react';
483
+ import { DQMSidebar } from '@crownpeak/dqm-react-component';
484
+
485
+ function App() {
486
+ const [sidebarOpen, setSidebarOpen] = useState(false);
487
+
488
+ return (
489
+ <div>
490
+ <h1>DQM with Full AI Features</h1>
491
+
492
+ <DQMSidebar
493
+ open={sidebarOpen}
494
+ onClose={() => setSidebarOpen(false)}
495
+ onOpen={() => setSidebarOpen(true)}
496
+ config={{
497
+ websiteId: 'your-website-id',
498
+ apiKey: 'your-dqm-api-key',
499
+
500
+ // Translation
501
+ translation: {
502
+ enabledByDefault: true,
503
+ computeBudgetMs: 15000,
504
+ },
505
+
506
+ // Summary
507
+ summary: {
508
+ timeoutMs: 45000,
509
+ }
510
+ }}
511
+ />
512
+ </div>
513
+ );
514
+ }
515
+
516
+ export default App;
517
+ ```
518
+
519
+ **Processing Order:**
520
+ 1. **Analysis:** DQM API analyzes HTML (1-5s)
521
+ 2. **Translation:** Checkpoints translated to target language (~2-5s)
522
+ 3. **Summary:** AI generates bullet-point summary (~3-8s)
523
+ 4. **Display:** Sidebar shows translated checkpoints + summary
524
+
525
+ **Performance Tips:**
526
+ - Use `mode: 'fast'` for translation if you prioritize speed over completeness
527
+ - Enable caching to avoid re-translation on subsequent analyses
528
+ - Use gpt-4o-mini for cost efficiency, gpt-4o for best quality
529
+
530
+ ### Example 9: AI Settings UI (Advanced)
531
+
532
+ Allow users to configure AI settings via UI instead of hardcoding in config.
533
+
534
+ ```typescript
535
+ import React, { useState, useEffect } from 'react';
536
+ import { DQMSidebar } from '@crownpeak/dqm-react-component';
537
+
538
+ function App() {
539
+ const [sidebarOpen, setSidebarOpen] = useState(false);
540
+
541
+ // Read AI settings from localStorage (persisted by sidebar)
542
+ const [aiConfig, setAiConfig] = useState({
543
+ translationEnabled: localStorage.getItem('dqm_translate_results_enabled') === 'true',
544
+ targetLanguage: localStorage.getItem('dqm_target_language') || 'en',
545
+ summaryEnabled: localStorage.getItem('dqm_ai_summary_enabled') === 'true',
546
+ });
547
+
548
+ // Listen for AI setting changes
549
+ useEffect(() => {
550
+ const handleStorageChange = () => {
551
+ setAiConfig({
552
+ translationEnabled: localStorage.getItem('dqm_translate_results_enabled') === 'true',
553
+ targetLanguage: localStorage.getItem('dqm_target_language') || 'en',
554
+ summaryEnabled: localStorage.getItem('dqm_ai_summary_enabled') === 'true',
555
+ });
556
+ };
557
+
558
+ window.addEventListener('storage', handleStorageChange);
559
+ return () => window.removeEventListener('storage', handleStorageChange);
560
+ }, []);
561
+
562
+ return (
563
+ <div>
564
+ <h1>DQM with User-Controlled AI Settings</h1>
565
+
566
+ {/* Display current AI settings */}
567
+ <div style={{ padding: '16px', background: '#f5f5f5', marginBottom: '16px' }}>
568
+ <h3>Current AI Settings</h3>
569
+ <p>Translation: {aiConfig.translationEnabled ? 'ON' : 'OFF'}</p>
570
+ <p>Target Language: {aiConfig.targetLanguage}</p>
571
+ <p>Summary: {aiConfig.summaryEnabled ? 'ON' : 'OFF'}</p>
572
+ </div>
573
+
574
+ <DQMSidebar
575
+ open={sidebarOpen}
576
+ onClose={() => setSidebarOpen(false)}
577
+ onOpen={() => setSidebarOpen(true)}
578
+ config={{
579
+ websiteId: 'your-website-id',
580
+ apiKey: 'your-dqm-api-key',
581
+
582
+ // Enable AI features - users configure via localStorage keys
583
+ // or through the AI Settings UI in the sidebar
584
+ translation: {
585
+ enabledByDefault: true, // Users can toggle in sidebar
586
+ computeBudgetMs: 15000,
587
+ },
588
+ summary: {
589
+ timeoutMs: 30000, // Users can toggle in sidebar
590
+ }
591
+ }}
592
+ />
593
+ </div>
594
+ );
595
+ }
596
+
597
+ export default App;
598
+ ```
599
+
600
+ **localStorage Keys Used by Sidebar:**
601
+ - `dqm_translate_results_enabled` - Toggle translation on/off
602
+ - `dqm_target_language` - Target language (ISO 639-1 code)
603
+ - `dqm_ai_summary_enabled` - Toggle summary on/off
604
+ - `dqm_translation_mode` - Translation mode ('fast' | 'full')
605
+ - `dqm_openai_apiKey` - OpenAI API key (if user provides via UI)
606
+ - `dqm_openai_model` - OpenAI model selection
607
+
608
+ **UI Features:**
609
+ - **Settings Dialog:** Click gear icon in sidebar header to open AI settings
610
+ - **Real-time Toggle:** Enable/disable translation and summary without reloading
611
+ - **Model Selection:** Choose between OpenAI models (gpt-4o-mini, gpt-4o, gpt-4.1)
612
+ - **Language Selection:** Change target language on the fly
613
+ - **Persistent Settings:** All settings saved to localStorage
614
+
615
+ ---
616
+
617
+ ## See Also
618
+
619
+ - **[AI Features Guide](./AI-FEATURES.md)** - Complete AI documentation with architecture diagrams
620
+ - **[API Reference](./API-REFERENCE.md)** - Full TypeScript API including AI hooks
621
+ - **[Troubleshooting](./TROUBLESHOOTING.md)** - Common AI-related issues and solutions
622
+