@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,610 @@
1
+ The Crownpeak DQM React Component includes powerful AI-driven features to enhance the analysis experience through **automatic translation** and **intelligent summaries**.
2
+
3
+ ## Table of Contents
4
+
5
+ - [Overview](#overview)
6
+ - [AI Translation](#ai-translation)
7
+ - [Translation Flow](#translation-flow)
8
+ - [OpenAI Backend](#openai-backend)
9
+ - [Translation Modes](#translation-modes)
10
+ - [Caching Strategy](#caching-strategy)
11
+ - [AI Summary](#ai-summary)
12
+ - [Summary Generation Flow](#summary-generation-flow)
13
+ - [Chunking Strategy](#chunking-strategy)
14
+ - [Configuration](#configuration)
15
+ - [localStorage Keys](#localstorage-keys)
16
+ - [Performance](#performance)
17
+ - [Troubleshooting](#troubleshooting)
18
+
19
+ ---
20
+
21
+ ## Overview
22
+
23
+ The AI features provide two main capabilities:
24
+
25
+ 1. **🌐 Translation**: Automatically translate DQM analysis results (checkpoints, categories, topics) into the user's preferred language
26
+ 2. **📝 Summary**: Generate AI-powered bullet-point summaries of the most critical quality issues
27
+
28
+ Both features use **OpenAI** (cloud-based) for fast, high-quality results.
29
+
30
+ | Feature | Capabilities |
31
+ |---------|--------------|
32
+ | **Translation** | ✅ Supported |
33
+ | **Summary** | ✅ Supported |
34
+ | **Speed** | ⚡ Fast (~2-5s) |
35
+ | **Browser Support** | All modern browsers |
36
+ | **Concurrent Requests** | ✅ Parallel (3 batches) |
37
+
38
+ ---
39
+
40
+ ## AI Translation
41
+
42
+ ### Translation Flow
43
+
44
+ ```mermaid
45
+ flowchart TD
46
+ A[Analysis Completed] --> B{Translation Enabled?}
47
+ B -->|No| Z[Display Original English]
48
+ B -->|Yes| C[Detect Target Language]
49
+ C --> D[Check Cache]
50
+ D --> E{Cache Hit?}
51
+ E -->|Yes| F[Use Cached Translation]
52
+ E -->|No| G[Group by Category]
53
+ G --> H[Parallel Batch Translation]
54
+ H --> K[Merge Results]
55
+ K --> L[Store in Cache]
56
+ L --> M[Update UI]
57
+ F --> M
58
+ M --> Z
59
+ ```
60
+
61
+ **Key Steps**:
62
+ 1. **Analysis Completed**: DQM API returns English results
63
+ 2. **Target Language Detection**: From i18n context (`en`, `de`, `es`)
64
+ 3. **Cache Check**: IndexedDB lookup by checkpoint hash
65
+ 4. **Translation**: Batch processing with progress tracking
66
+ 5. **Cache Storage**: Persist to IndexedDB for future use
67
+ 6. **UI Update**: Replace English text with translations
68
+
69
+ ### OpenAI Backend
70
+
71
+ **Models Supported**:
72
+ - `gpt-4o-mini` (Recommended, fast & cheap)
73
+ - `gpt-4o` (Higher quality)
74
+ - `gpt-4.1-mini`
75
+ - `gpt-4.1`
76
+
77
+ **Setup**:
78
+
79
+ ```typescript
80
+ import { DQMSidebar } from '@crownpeak/dqm-react-component';
81
+
82
+ function App() {
83
+ return (
84
+ <DQMSidebar
85
+ open={true}
86
+ onClose={() => {}}
87
+ onOpen={() => {}}
88
+ config={{
89
+ apiKey: 'your-dqm-api-key',
90
+ websiteId: 'your-website-id',
91
+ translation: {
92
+ enabledByDefault: true,
93
+ computeBudgetMs: 15000, // 15 seconds timeout
94
+ },
95
+ }}
96
+ />
97
+ );
98
+ }
99
+ ```
100
+
101
+ **API Key Configuration**:
102
+
103
+ ```typescript
104
+ // Option 1: Via localStorage (before component mount)
105
+ localStorage.setItem('dqm_openai_apiKey', 'sk-...');
106
+
107
+ // Option 2: Via AISettingsDialog component (user enters key in UI)
108
+ // Users can configure via settings modal
109
+ ```
110
+
111
+ **Environment Variables** (for build-time injection):
112
+
113
+ ```bash
114
+ # .env.local
115
+ VITE_OPENAI_API_KEY=sk-...
116
+ VITE_OPENAI_BASE_URL=https://api.openai.com/v1 # Optional, for custom endpoints
117
+ ```
118
+
119
+ **Features**:
120
+ - ✅ JSON Mode with structured output (type-safe responses)
121
+ - ✅ Parallel batch translation (3 concurrent requests, 12 items per batch)
122
+ - ✅ Fast mode (~5s) and Full mode (~30s)
123
+ - ✅ Automatic retry with exponential backoff
124
+ - ✅ Rate limit handling (429 errors)
125
+
126
+ ### Translation Modes
127
+
128
+ #### Fast Mode (Default)
129
+ - **Timeout**: 15 seconds (configurable via `computeBudgetMs`)
130
+ - **Behavior**: Partial results allowed
131
+ - **Use Case**: Quick translations, user doesn't want to wait
132
+ - **Result**: Most checkpoints translated, some may be skipped
133
+
134
+ ```typescript
135
+ translation: {
136
+ enabledByDefault: true,
137
+ computeBudgetMs: 15000, // 15s
138
+ }
139
+ ```
140
+
141
+ #### Full Mode
142
+ - **Timeout**: 120 seconds
143
+ - **Behavior**: Translate all checkpoints or fail
144
+ - **Use Case**: Comprehensive translations, accuracy > speed
145
+ - **Result**: All checkpoints translated or error shown
146
+
147
+ ```typescript
148
+ translation: {
149
+ enabledByDefault: true,
150
+ computeBudgetMs: 120000, // 120s
151
+ }
152
+ ```
153
+
154
+ **User Control**:
155
+ Users can switch between modes via the AI Settings dialog:
156
+ - Fast Mode: ⚡ Quick Translation (partial results OK)
157
+ - Full Mode: 🎯 Complete Translation (all or nothing)
158
+
159
+ ### Caching Strategy
160
+
161
+ ```mermaid
162
+ flowchart LR
163
+ A[Checkpoint] --> B{In-Memory Cache?}
164
+ B -->|Hit| C[Return Cached]
165
+ B -->|Miss| D{IndexedDB Cache?}
166
+ D -->|Hit| E[Load to Memory]
167
+ D -->|Miss| F[Translate via AI]
168
+ F --> G[Store in IndexedDB]
169
+ G --> H[Store in Memory]
170
+ E --> C
171
+ H --> C
172
+ ```
173
+
174
+ **Cache Layers**:
175
+
176
+ 1. **In-Memory Cache** (Fastest)
177
+ - Lifetime: Current session only
178
+ - Scope: Per `assetId`
179
+ - Storage: Redux store (`translatedData`)
180
+ - Cleared: On page reload or logout
181
+
182
+ 2. **IndexedDB Cache** (Persistent)
183
+ - Database: `DQMTranslationCache`
184
+ - Stores:
185
+ - `checkpoints`: Translated checkpoint objects (key: `${hash}-${lang}`)
186
+ - `labels`: Category/Topic labels (key: `label-${text}-${lang}`)
187
+ - Hash Algorithm: FNV-1a (fast, deterministic)
188
+ - Lifetime: Permanent (until manually cleared)
189
+ - Size: ~10MB typical, can grow to 50MB+
190
+
191
+ **Cache Key Format**:
192
+ ```typescript
193
+ // Checkpoint cache key
194
+ `${fnv1aHash(checkpoint.topic + checkpoint.description)}-${targetLanguage}`
195
+ // Example: "a1b2c3d4-de"
196
+
197
+ // Label cache key
198
+ `label-${originalText}-${targetLanguage}`
199
+ // Example: "label-Performance-de"
200
+ ```
201
+
202
+ **Cache Management**:
203
+
204
+ ```typescript
205
+ // Clear all translation cache
206
+ localStorage.removeItem('dqm_translation_cache_checkpoints');
207
+ localStorage.removeItem('dqm_translation_cache_labels');
208
+
209
+ // Or via IndexedDB API
210
+ indexedDB.deleteDatabase('DQMTranslationCache');
211
+ ```
212
+
213
+ **Deduplication**:
214
+ - Identical checkpoints (same hash) across multiple analyses → translated once, reused
215
+ - Reduces API calls and improves speed
216
+ - Example: "Image missing alt attribute" appears in 10 analyses → cached once
217
+
218
+ ---
219
+
220
+ ## AI Summary
221
+
222
+ ### Summary Generation Flow
223
+
224
+ ```mermaid
225
+ flowchart TD
226
+ A[Analysis Completed] --> B{Summary Enabled?}
227
+ B -->|No| Z[Skip Summary]
228
+ B -->|Yes| C[Extract Failed Checkpoints]
229
+ C --> D{Count Failed?}
230
+ D -->|< 5| E[Single Prompt]
231
+ D -->|5-20| F[Chunk by Category]
232
+ D -->|> 20| G[Chunk by Priority]
233
+ E --> H[Call OpenAI API]
234
+ F --> I[Call OpenAI API per Chunk]
235
+ G --> I
236
+ H --> J{Response OK?}
237
+ I --> J
238
+ J -->|Yes| K[Parse Bullet Points]
239
+ J -->|No| L[Retry with Fallback]
240
+ L --> M{Fallback Level?}
241
+ M -->|1| O[Try Tiny Subset]
242
+ M -->|2| N[Try Single Item]
243
+ M -->|3| P[Fail Gracefully]
244
+ N --> J
245
+ O --> J
246
+ K --> Q[Cache Summary]
247
+ Q --> R[Display in Card]
248
+ P --> S[Show Error Message]
249
+ ```
250
+
251
+ **Key Steps**:
252
+ 1. **Extract Failed Checkpoints**: Filter to `checkpoint.failed === true`
253
+ 2. **Count & Chunk**: Divide into manageable chunks (5-20 per chunk)
254
+ 3. **OpenAI API Call**: Use `gpt-4o-mini` with JSON mode
255
+ 4. **Retry Logic**: Exponential backoff with fallback strategies
256
+ 5. **Parse Results**: Extract `<li>` bullet points
257
+ 6. **Cache**: Store in-memory per `assetId`
258
+ 7. **Display**: Show in AISummaryCard component
259
+
260
+ ### Chunking Strategy
261
+
262
+ ```mermaid
263
+ graph TD
264
+ A[Failed Checkpoints] --> B{Total Count?}
265
+ B -->|< 5| C[Strategy: Single]
266
+ B -->|5-20| D[Strategy: Chunk by Category]
267
+ B -->|20-50| E[Strategy: Chunk by Priority]
268
+ B -->|> 50| F[Strategy: Tiny Subset]
269
+
270
+ C --> G[Prompt: All in one]
271
+ D --> H[Prompt: Per category]
272
+ E --> I[Prompt: Top 20 only]
273
+ F --> J[Prompt: Top 5 critical]
274
+
275
+ G --> K[OpenAI API]
276
+ H --> K
277
+ I --> K
278
+ J --> K
279
+ ```
280
+
281
+ **Chunking Sizes**:
282
+ - **Single**: 1-4 checkpoints → One prompt
283
+ - **Chunk**: 5-20 checkpoints → Split by category (max 8 per chunk)
284
+ - **Tiny**: 20+ checkpoints → Top 5 most critical only
285
+ - **Fail**: > 50 checkpoints → Skip summary (too large)
286
+
287
+ **Prompt Template**:
288
+
289
+ ```typescript
290
+ const prompt = `Summarize the following web quality issues in ${targetLanguage}.
291
+ Provide 3-5 bullet points highlighting the most critical problems.
292
+ Format each point as an HTML <li> element.
293
+
294
+ Issues:
295
+ ${checkpoints.map(cp => `- ${cp.topic}: ${cp.description}`).join('\n')}`;
296
+ ```
297
+
298
+ **Response Format** (JSON Mode):
299
+
300
+ ```json
301
+ {
302
+ "bullets": [
303
+ "<li>Missing alt text on 23 images impacts accessibility</li>",
304
+ "<li>5 broken links found, affecting user navigation</li>",
305
+ "<li>Performance issues: 3 images exceed 1MB</li>"
306
+ ]
307
+ }
308
+ ```
309
+
310
+ **Stats Tracking**:
311
+
312
+ ```typescript
313
+ interface SummaryStats {
314
+ chunked: boolean; // Was chunking used?
315
+ chunkCount: number; // Number of chunks (1-5)
316
+ totalFailed: number; // Total failed checkpoints
317
+ attempts: number; // API call attempts (incl. retries)
318
+ emptyResponses: number; // Empty API responses
319
+ fallbackUsed: 'none' | 'chunk' | 'single' | 'tiny' | 'fail';
320
+ durationMs: number; // Total generation time
321
+ }
322
+ ```
323
+
324
+ **Configuration**:
325
+
326
+ ```typescript
327
+ summary: {
328
+ timeoutMs: 45000, // 45 seconds timeout
329
+ }
330
+ ```
331
+
332
+ > **Note:** Summary is enabled/disabled via the AI Settings dialog or localStorage (`dqm_ai_summary_enabled`).
333
+
334
+ ---
335
+
336
+ ## Configuration
337
+
338
+ ### DQMConfig Interface
339
+
340
+ ```typescript
341
+ interface DQMConfig {
342
+ // ... other config options
343
+
344
+ /** AI Translation Configuration */
345
+ translation?: {
346
+ /** Enable translation by default */
347
+ enabledByDefault?: boolean; // Default: false
348
+
349
+ /** Compute budget in milliseconds (timeout) */
350
+ computeBudgetMs?: number; // Default: 15000 (Fast mode)
351
+ };
352
+
353
+ /** AI Summary Configuration */
354
+ summary?: {
355
+ /** Summary generation timeout in milliseconds */
356
+ timeoutMs?: number; // Default: 45000
357
+ };
358
+ }
359
+ ```
360
+
361
+ > **Note:** The OpenAI model is configured via localStorage (`dqm_openai_model`) or the AI Settings dialog, not via `DQMConfig`. See [localStorage Keys](#localstorage-keys).
362
+
363
+ **Example: Full AI Configuration**
364
+
365
+ ```typescript
366
+ <DQMSidebar
367
+ open={true}
368
+ onClose={() => {}}
369
+ onOpen={() => {}}
370
+ config={{
371
+ apiKey: 'your-dqm-api-key',
372
+ websiteId: 'your-website-id',
373
+
374
+ // AI Translation
375
+ translation: {
376
+ enabledByDefault: true,
377
+ computeBudgetMs: 30000, // 30s for Full mode
378
+ },
379
+
380
+ // AI Summary
381
+ summary: {
382
+ timeoutMs: 60000, // 60s for complex analyses
383
+ },
384
+ }}
385
+ />
386
+ ```
387
+
388
+ ---
389
+
390
+ ## localStorage Keys
391
+
392
+ The AI features store configuration in `localStorage`:
393
+
394
+ | Key | Type | Default | Description |
395
+ |-----|------|---------|-------------|
396
+ | `dqm_translate_results_enabled` | `'true' \| 'false'` | `'false'` | Translation toggle |
397
+ | `dqm_translate_results_mode` | `'fast' \| 'full'` | `'fast'` | Translation mode |
398
+ | `dqm_ai_summary_enabled` | `'true' \| 'false'` | `'true'` | Summary toggle |
399
+ | `dqm_openai_apiKey` | `string` | `null` | OpenAI API key |
400
+ | `dqm_openai_model` | `string` | `'gpt-4.1-mini'` | OpenAI model name |
401
+ | `dqm_openai_baseUrl` | `string` | `'https://api.openai.com/v1'` | OpenAI base URL |
402
+
403
+ **Access Pattern**:
404
+
405
+ ```typescript
406
+ import { getLocalStorageItem, setLocalStorageItem } from './utils/localStorage';
407
+
408
+ // Get translation setting
409
+ const translationEnabled = getLocalStorageItem('dqm_translate_results_enabled') === 'true';
410
+
411
+ // Set OpenAI API key
412
+ setLocalStorageItem('dqm_openai_apiKey', 'sk-...');
413
+ ```
414
+
415
+ ---
416
+
417
+ ## Performance
418
+
419
+ ### Translation Speed
420
+
421
+ | Checkpoint Count | Time (Fast Mode) | Time (Full Mode) |
422
+ |------------------|------------------|------------------|
423
+ | 10 | ~2-3s | ~5-8s |
424
+ | 50 | ~5-8s | ~15-25s |
425
+ | 100 | ~10-15s | ~30-60s |
426
+
427
+ **Notes**:
428
+ - Times assume good network connection (50ms latency)
429
+ - Cached checkpoints: instant (0ms)
430
+
431
+ ### Summary Speed
432
+
433
+ | Checkpoint Count | Time (OpenAI) | Fallback Attempts |
434
+ |------------------|---------------|-------------------|
435
+ | 5 | ~1-2s | 0 (single prompt) |
436
+ | 20 | ~3-5s | 0-1 (chunked) |
437
+ | 50 | ~8-12s | 1-2 (tiny subset) |
438
+ | 100+ | N/A | Fails (too large) |
439
+
440
+ ### Cost Estimation (OpenAI)
441
+
442
+ Based on `gpt-4o-mini` pricing (~$0.15/1M input tokens, ~$0.60/1M output tokens):
443
+
444
+ | Operation | Average Tokens | Cost per Call |
445
+ |-----------|----------------|---------------|
446
+ | Translate 1 checkpoint | ~200 input, ~100 output | ~$0.00009 |
447
+ | Translate 50 checkpoints | ~10k input, ~5k output | ~$0.0045 |
448
+ | Summary (5 issues) | ~500 input, ~200 output | ~$0.0002 |
449
+ | Summary (20 issues) | ~2k input, ~500 output | ~$0.0006 |
450
+
451
+ **Monthly costs** (assuming 1000 analyses/month with 20 checkpoints each):
452
+ - Translation only: ~$4.50/month
453
+ - Summary only: ~$0.60/month
454
+ - Both: ~$5.10/month
455
+
456
+ ---
457
+
458
+ ## Troubleshooting
459
+
460
+ ### Translation Not Working
461
+
462
+ **Problem**: Translation toggle enabled but results still in English
463
+
464
+ **Solutions**:
465
+ 1. **Check OpenAI API Key**:
466
+ ```typescript
467
+ const apiKey = localStorage.getItem('dqm_openai_apiKey');
468
+ console.log('API Key set:', !!apiKey);
469
+ ```
470
+ - Missing key → Add via `AISettingsDialog` or `localStorage.setItem()`
471
+ - Invalid key → Check OpenAI dashboard for correct key
472
+
473
+ 2. **Check Translation Enabled**:
474
+ ```typescript
475
+ const enabled = localStorage.getItem('dqm_translate_results_enabled');
476
+ console.log('Translation enabled:', enabled === 'true');
477
+ ```
478
+
479
+ 3. **Check Console for Errors**:
480
+ ```bash
481
+ # Enable debug logging
482
+ logger.setDebugMode(true);
483
+ ```
484
+
485
+ ### Translation Timeout
486
+
487
+ **Problem**: "Translation timeout" error after 15 seconds
488
+
489
+ **Solutions**:
490
+
491
+ 1. **Increase Timeout** (Fast → Full mode):
492
+ ```typescript
493
+ translation: {
494
+ computeBudgetMs: 120000, // 2 minutes
495
+ }
496
+ ```
497
+
498
+ 2. **Reduce Checkpoint Count**:
499
+ - Fewer categories → faster translation
500
+ - Or use Fast mode and accept partial results
501
+
502
+ 3. **Check Network**:
503
+ ```bash
504
+ # Test OpenAI API connectivity
505
+ curl https://api.openai.com/v1/models -H "Authorization: Bearer sk-..."
506
+ ```
507
+
508
+ ### Summary Generation Failed
509
+
510
+ **Problem**: "Summary generation failed" error
511
+
512
+ **Solutions**:
513
+
514
+ 1. **Check OpenAI API Quota**:
515
+ - Visit OpenAI dashboard → Usage
516
+ - Error 429 (rate limit) → Wait or upgrade plan
517
+ - Error 401 (invalid key) → Check API key
518
+
519
+ 2. **Check Too Many Checkpoints**:
520
+ - > 50 failed checkpoints may fail
521
+ - Solution: Summary auto-switches to "tiny subset" (top 5)
522
+
523
+ 3. **Increase Timeout**:
524
+ ```typescript
525
+ summary: {
526
+ timeoutMs: 90000, // 90 seconds
527
+ }
528
+ ```
529
+
530
+ 4. **Check Console Logs**:
531
+ ```typescript
532
+ logger.setDebugMode(true);
533
+ // Look for "Summary: failed" messages
534
+ ```
535
+
536
+ ### OpenAI API Errors
537
+
538
+ | Error Code | Meaning | Solution |
539
+ |------------|---------|----------|
540
+ | 401 | Invalid API key | Check key in localStorage or OpenAI dashboard |
541
+ | 429 | Rate limit exceeded | Wait or upgrade OpenAI plan |
542
+ | 500 | OpenAI server error | Retry later, or check OpenAI status page |
543
+ | 503 | Service unavailable | Temporary outage, retry in 5 minutes |
544
+
545
+ ---
546
+
547
+ ## Advanced Topics
548
+
549
+ ### Custom Model Configuration
550
+
551
+ **OpenAI Custom Model** (via localStorage):
552
+
553
+ ```typescript
554
+ // Set model via localStorage before component mounts
555
+ localStorage.setItem('dqm_openai_model', 'gpt-4o'); // Higher quality than gpt-4.1-mini
556
+
557
+ // Or users can configure via the AI Settings dialog in the UI
558
+ ```
559
+
560
+ ### Translation Cache Clearing
561
+
562
+ **Clear all AI caches**:
563
+
564
+ ```typescript
565
+ // Clear translation cache
566
+ indexedDB.deleteDatabase('DQMTranslationCache');
567
+
568
+ // Clear localStorage settings
569
+ localStorage.removeItem('dqm_translate_results_enabled');
570
+ localStorage.removeItem('dqm_openai_apiKey');
571
+ // ... (see localStorage Keys table)
572
+ ```
573
+
574
+ ### Custom Summary Formatting
575
+
576
+ The summary generates HTML `<li>` elements. To customize styling:
577
+
578
+ ```css
579
+ /* Target summary bullet points */
580
+ .dqm-summary-card li {
581
+ color: #333;
582
+ font-size: 14px;
583
+ margin-bottom: 8px;
584
+ line-height: 1.6;
585
+ }
586
+
587
+ /* Highlight critical issues */
588
+ .dqm-summary-card li:first-child {
589
+ font-weight: bold;
590
+ color: #d32f2f;
591
+ }
592
+ ```
593
+
594
+ ---
595
+
596
+ ## Related Documentation
597
+
598
+ - [API Reference](API-REFERENCE.md) - Full TypeScript API documentation
599
+ - [Examples](EXAMPLES.md) - Code examples with AI features
600
+ - [Troubleshooting](TROUBLESHOOTING.md) - Common issues and solutions
601
+ - [GitHub Wiki](https://github.com/Crownpeak/dqm-react-component/wiki/AI-Features) - Interactive documentation
602
+
603
+ ---
604
+
605
+ ## Need Help?
606
+
607
+ - 🐛 **Bug Reports**: [GitHub Issues](https://github.com/Crownpeak/dqm-react-component/issues)
608
+ - 💬 **Discussions**: [GitHub Discussions](https://github.com/Crownpeak/dqm-react-component/discussions)
609
+ - 📧 **Email**: support@crownpeak.com
610
+ - 📚 **Full Docs**: [GitHub Wiki](https://github.com/Crownpeak/dqm-react-component/wiki)