@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,1022 @@
1
+ Complete TypeScript API documentation for `@crownpeak/dqm-react-component`.
2
+
3
+ ## Table of Contents
4
+ - [Components](#components)
5
+ - [Configuration](#configuration)
6
+ - [Hooks](#hooks)
7
+ - [Types](#types)
8
+ - [Redux Store](#redux-store)
9
+ - [Utilities](#utilities)
10
+
11
+ ## Components
12
+
13
+ ### DQMSidebar
14
+
15
+ Main component for displaying DQM quality analysis in a sidebar.
16
+
17
+ ```typescript
18
+ import { DQMSidebar } from '@crownpeak/dqm-react-component';
19
+
20
+ interface DQMSidebarProps {
21
+ open: boolean;
22
+ onOpen: () => void;
23
+ onClose: () => void;
24
+ config?: DQMConfig;
25
+ onAuthSuccess?: (credentials: AuthCredentials) => void;
26
+ onAuthError?: (error: Error) => void;
27
+ debugHtml?: string; // DEBUG ONLY
28
+ }
29
+ ```
30
+
31
+ #### Props
32
+
33
+ | Prop | Type | Required | Description |
34
+ |------|------|----------|-------------|
35
+ | `open` | `boolean` | ✅ | Controls sidebar visibility |
36
+ | `onOpen` | `() => void` | ✅ | Callback when sidebar opens |
37
+ | `onClose` | `() => void` | ✅ | Callback when sidebar closes |
38
+ | `config` | `DQMConfig` | ❌ | Configuration options (auth, AI, overlay) |
39
+ | `onAuthSuccess` | `(credentials) => void` | ❌ | Callback on successful authentication |
40
+ | `onAuthError` | `(error) => void` | ❌ | Callback on authentication error |
41
+ | `debugHtml` | `string` | ❌ | Custom HTML for testing (dev only) |
42
+
43
+ #### AuthCredentials
44
+
45
+ ```typescript
46
+ interface AuthCredentials {
47
+ apiKey: string;
48
+ websiteId: string;
49
+ sessionToken?: string;
50
+ sessionType: 'direct' | 'backend';
51
+ }
52
+ ```
53
+
54
+ #### Example
55
+
56
+ ```typescript
57
+ import { DQMSidebar } from '@crownpeak/dqm-react-component';
58
+
59
+ function App() {
60
+ const [open, setOpen] = useState(false);
61
+
62
+ return (
63
+ <DQMSidebar
64
+ open={open}
65
+ onOpen={() => setOpen(true)}
66
+ onClose={() => setOpen(false)}
67
+ config={{
68
+ websiteId: 'your-website-id',
69
+ apiKey: 'your-api-key',
70
+ }}
71
+ onAuthSuccess={(credentials) => {
72
+ console.log('Authenticated:', credentials.sessionType);
73
+ }}
74
+ onAuthError={(error) => {
75
+ console.error('Auth failed:', error.message);
76
+ }}
77
+ />
78
+ );
79
+ }
80
+ ```
81
+
82
+ ---
83
+
84
+ ### ErrorBoundary
85
+
86
+ React Error Boundary for catching and displaying component errors.
87
+
88
+ ```typescript
89
+ import { ErrorBoundary } from '@crownpeak/dqm-react-component';
90
+
91
+ interface ErrorBoundaryProps {
92
+ children: React.ReactNode;
93
+ resetKeys?: unknown[];
94
+ }
95
+ ```
96
+
97
+ #### Props
98
+
99
+ | Prop | Type | Required | Description |
100
+ |------|------|----------|-------------|
101
+ | `children` | `React.ReactNode` | ✅ | Child components to wrap |
102
+ | `resetKeys` | `unknown[]` | ❌ | Array of values - boundary resets when any value changes |
103
+
104
+ #### Example
105
+
106
+ ```typescript
107
+ import { ErrorBoundary, DQMSidebar } from '@crownpeak/dqm-react-component';
108
+ import { useLocation } from 'react-router-dom';
109
+
110
+ function App() {
111
+ const location = useLocation();
112
+
113
+ return (
114
+ <ErrorBoundary resetKeys={[location.pathname]}>
115
+ <DQMSidebar
116
+ open={open}
117
+ onOpen={() => setOpen(true)}
118
+ onClose={() => setOpen(false)}
119
+ />
120
+ </ErrorBoundary>
121
+ );
122
+ }
123
+ ```
124
+
125
+ ---
126
+
127
+ ### withErrorBoundary
128
+
129
+ Higher-Order Component (HOC) to wrap any component with an ErrorBoundary.
130
+
131
+ ```typescript
132
+ import { withErrorBoundary } from '@crownpeak/dqm-react-component';
133
+
134
+ const SafeComponent = withErrorBoundary(MyComponent, {
135
+ resetKeys: ['some-key'],
136
+ });
137
+ ```
138
+
139
+ #### Signature
140
+
141
+ ```typescript
142
+ function withErrorBoundary<P extends object>(
143
+ Component: React.ComponentType<P>,
144
+ errorBoundaryProps?: Omit<ErrorBoundaryProps, 'children'>
145
+ ): React.FC<P>;
146
+ ```
147
+
148
+ #### Example
149
+
150
+ ```typescript
151
+ import { withErrorBoundary } from '@crownpeak/dqm-react-component';
152
+
153
+ // Wrap a component that might throw errors
154
+ const SafeDQMIntegration = withErrorBoundary(DQMIntegration, {
155
+ resetKeys: [userId, pageId],
156
+ });
157
+
158
+ function App() {
159
+ return <SafeDQMIntegration userId={userId} pageId={pageId} />;
160
+ }
161
+ ```
162
+
163
+ ---
164
+
165
+ ## Configuration
166
+
167
+ ### DQMConfig
168
+
169
+ Root configuration interface for DQM component.
170
+
171
+ ```typescript
172
+ interface DQMConfig {
173
+ // Authentication
174
+ apiKey?: string;
175
+ websiteId?: string;
176
+ authBackendUrl?: string;
177
+
178
+ // Storage & Behavior
179
+ useLocalStorage?: boolean; // Default: true
180
+ disabled?: boolean; // Default: false
181
+ disableLogout?: boolean; // Default: false
182
+ apiEndpoint?: string; // Default: Crownpeak API
183
+ shadowDomMode?: boolean; // Default: false
184
+
185
+ // Features
186
+ overlayConfig?: OverlayConfig;
187
+ translation?: TranslationConfig;
188
+ summary?: SummaryConfig;
189
+ }
190
+ ```
191
+
192
+ #### Authentication Properties
193
+
194
+ | Property | Type | Default | Description |
195
+ |----------|------|---------|-------------|
196
+ | `apiKey` | `string` | - | DQM API key (direct auth, highest priority) |
197
+ | `websiteId` | `string` | - | DQM Website ID (direct auth) |
198
+ | `authBackendUrl` | `string` | - | Backend server URL for proxy auth |
199
+
200
+ #### Storage & Behavior Properties
201
+
202
+ | Property | Type | Default | Description |
203
+ |----------|------|---------|-------------|
204
+ | `useLocalStorage` | `boolean` | `true` | Store credentials in localStorage |
205
+ | `disabled` | `boolean` | `false` | Disable DQM completely (shows "Permission Denied") |
206
+ | `disableLogout` | `boolean` | `false` | Hide logout button (host app manages session) |
207
+ | `apiEndpoint` | `string` | Crownpeak | Custom DQM API endpoint |
208
+ | `shadowDomMode` | `boolean` | `false` | Disable React portals for Shadow DOM compatibility |
209
+
210
+ #### Feature Properties
211
+
212
+ | Property | Type | Default | Description |
213
+ |----------|------|---------|-------------|
214
+ | `overlayConfig` | `OverlayConfig` | - | Overlay/toolbar detection configuration |
215
+ | `translation` | `TranslationConfig` | - | AI translation configuration |
216
+ | `summary` | `SummaryConfig` | - | AI summary configuration |
217
+
218
+ ---
219
+
220
+ ### OverlayConfig
221
+
222
+ Configuration for adapting sidebar position to overlays (toolbars, preview bars).
223
+
224
+ ```typescript
225
+ interface OverlayConfig {
226
+ selector?: string | null;
227
+ validateIframe?: boolean;
228
+ pollMs?: number;
229
+ manualOffset?: {
230
+ position: 'top' | 'bottom' | 'left' | 'right';
231
+ pixels: number;
232
+ };
233
+ }
234
+ ```
235
+
236
+ | Property | Type | Default | Description |
237
+ |----------|------|---------|-------------|
238
+ | `selector` | `string \| null` | - | CSS selector for overlay element |
239
+ | `validateIframe` | `boolean` | `true` | Check if iFrame.contentWindow exists |
240
+ | `pollMs` | `number` | `1000` | Polling interval for cross-origin iFrames (0 = disable) |
241
+ | `manualOffset` | `object` | - | Manual offset (overrides auto-detection) |
242
+
243
+ #### Example
244
+
245
+ ```typescript
246
+ // Auto-detect toolbar
247
+ overlayConfig: {
248
+ selector: '.admin-toolbar',
249
+ validateIframe: true,
250
+ pollMs: 1000,
251
+ }
252
+
253
+ // Manual offset
254
+ overlayConfig: {
255
+ manualOffset: {
256
+ position: 'top',
257
+ pixels: 50,
258
+ }
259
+ }
260
+ ```
261
+
262
+ ---
263
+
264
+ ### TranslationConfig
265
+
266
+ AI translation configuration.
267
+
268
+ ```typescript
269
+ interface TranslationConfig {
270
+ enabledByDefault?: boolean; // Default: false
271
+ computeBudgetMs?: number; // Default: 15000
272
+ }
273
+ ```
274
+
275
+ | Property | Type | Default | Description |
276
+ |----------|------|---------|-------------|
277
+ | `enabledByDefault` | `boolean` | `false` | Enable auto-translation by default (user can toggle at runtime) |
278
+ | `computeBudgetMs` | `number` | `15000` | Translation compute budget in milliseconds |
279
+
280
+ > **Note:** OpenAI API configuration (API key, model, target language) is managed via localStorage keys. See [localStorage Keys](#localstorage-keys) section.
281
+
282
+ #### Example
283
+
284
+ ```typescript
285
+ translation: {
286
+ enabledByDefault: true,
287
+ computeBudgetMs: 30000,
288
+ }
289
+ ```
290
+
291
+ ---
292
+
293
+ ### SummaryConfig
294
+
295
+ AI summary generation configuration.
296
+
297
+ ```typescript
298
+ interface SummaryConfig {
299
+ timeoutMs?: number; // Default: 45000
300
+ }
301
+ ```
302
+
303
+ | Property | Type | Default | Description |
304
+ |----------|------|---------|-------------|
305
+ | `timeoutMs` | `number` | `45000` | Summary generation timeout in milliseconds |
306
+
307
+ > **Note:** OpenAI API configuration (API key, model) is managed via localStorage keys. See [localStorage Keys](#localstorage-keys) section.
308
+
309
+ #### Example
310
+
311
+ ```typescript
312
+ summary: {
313
+ timeoutMs: 60000,
314
+ }
315
+ ```
316
+
317
+ ---
318
+
319
+ ## Hooks
320
+
321
+ ### AI Hooks
322
+
323
+ The AI hooks are exported from `@crownpeak/dqm-react-component` for advanced usage. They are designed to work together as a composable system.
324
+
325
+ #### useAIEngine
326
+
327
+ Hook for managing AI engine initialization and access (OpenAI client).
328
+
329
+ ```typescript
330
+ import { useAIEngine } from '@crownpeak/dqm-react-component';
331
+ import type { UseAIEngineOptions, UseAIEngineReturn } from '@crownpeak/dqm-react-component';
332
+
333
+ function MyComponent() {
334
+ const engine = useAIEngine({
335
+ enabled: true,
336
+ openAiApiKey: 'sk-...',
337
+ openAiModel: 'gpt-4.1-mini', // Optional, default: 'gpt-4.1-mini'
338
+ openAiBaseUrl: 'https://api.openai.com/v1', // Optional
339
+ });
340
+ }
341
+ ```
342
+
343
+ ##### Options (UseAIEngineOptions)
344
+
345
+ | Property | Type | Required | Description |
346
+ |----------|------|----------|-------------|
347
+ | `enabled` | `boolean` | ✅ | Whether AI features are enabled |
348
+ | `openAiApiKey` | `string` | ❌ | OpenAI API key |
349
+ | `openAiModel` | `string` | ❌ | OpenAI model name (default: 'gpt-4.1-mini') |
350
+ | `openAiBaseUrl` | `string` | ❌ | OpenAI base URL (default: 'https://api.openai.com/v1') |
351
+
352
+ ##### Returns (UseAIEngineReturn)
353
+
354
+ | Property | Type | Description |
355
+ |----------|------|-------------|
356
+ | `client` | `JsonChatClient \| null` | The OpenAI client instance |
357
+ | `state` | `TranslationState` | Current engine state |
358
+ | `loadedModelId` | `string \| null` | Currently loaded model ID |
359
+ | `isReady` | `boolean` | True when engine is ready for inference |
360
+ | `error` | `string \| null` | Error message if state is 'error' |
361
+ | `runWithLock` | `<T>(task: () => Promise<T>) => Promise<T>` | Run task with exclusive access |
362
+ | `stop` | `() => void` | Stop any ongoing AI operation |
363
+
364
+ ##### TranslationState
365
+
366
+ ```typescript
367
+ type TranslationState = 'disabled' | 'initializing' | 'ready' | 'translating' | 'error';
368
+ ```
369
+
370
+ ---
371
+
372
+ #### useAITranslation
373
+
374
+ Hook for translating DQM analysis results using AI. **Note:** Translation runs automatically when enabled - there is no manual `translate()` function.
375
+
376
+ ```typescript
377
+ import { useAITranslation } from '@crownpeak/dqm-react-component';
378
+ import type { UseAITranslationOptions, UseAITranslationReturn } from '@crownpeak/dqm-react-component';
379
+
380
+ function MyComponent() {
381
+ const engine = useAIEngine({ enabled: true, openAiApiKey: '...' });
382
+ const cacheManager = useTranslationCache();
383
+
384
+ const translation = useAITranslation({
385
+ engine,
386
+ cacheManager,
387
+ originalData: analysisData,
388
+ targetLang: 'de',
389
+ modelId: 'gpt-4.1-mini',
390
+ enabled: true,
391
+ mode: 'fast',
392
+ computeBudgetMs: 15000,
393
+ persistentCache: cacheManager.cache,
394
+ });
395
+
396
+ // Use translation.translatedData instead of originalData
397
+ }
398
+ ```
399
+
400
+ ##### Options (UseAITranslationOptions)
401
+
402
+ | Property | Type | Required | Description |
403
+ |----------|------|----------|-------------|
404
+ | `engine` | `UseAIEngineReturn` | ✅ | AI engine hook return value |
405
+ | `cacheManager` | `UseTranslationCacheReturn` | ✅ | Translation cache hook return value |
406
+ | `originalData` | `AnalysisData \| null` | ✅ | Original analysis data |
407
+ | `targetLang` | `string` | ✅ | Target language code (e.g., 'de', 'fr') |
408
+ | `modelId` | `string` | ✅ | Model ID being used |
409
+ | `enabled` | `boolean` | ✅ | Whether translation is enabled |
410
+ | `mode` | `TranslationMode` | ✅ | Translation mode ('fast' or 'full') |
411
+ | `computeBudgetMs` | `number` | ✅ | Compute budget in milliseconds |
412
+ | `persistentCache` | `TranslationCache` | ✅ | IndexedDB translation cache |
413
+ | `summaryGenerating` | `boolean` | ❌ | Whether summary is generating (translation waits) |
414
+
415
+ ##### Returns (UseAITranslationReturn)
416
+
417
+ | Property | Type | Description |
418
+ |----------|------|-------------|
419
+ | `translatedData` | `AnalysisData \| null` | Translated data (or original if not translated) |
420
+ | `progress` | `TranslationProgress \| null` | Translation progress |
421
+ | `error` | `string \| null` | Error message |
422
+ | `translatingIds` | `Set<string>` | Checkpoint IDs currently being translated |
423
+ | `translatedIds` | `Set<string>` | Checkpoint IDs that have been translated |
424
+ | `isTranslating` | `boolean` | Whether translation is in progress |
425
+ | `restart` | `() => void` | Restart translation (clears cache for current asset) |
426
+ | `stop` | `() => void` | Stop ongoing translation |
427
+ | `retrySingleCheckpoint` | `(checkpointId: string) => Promise<void>` | Retry single checkpoint |
428
+ | `resetToOriginal` | `() => void` | Reset to original data |
429
+
430
+ ##### TranslationProgress
431
+
432
+ ```typescript
433
+ interface TranslationProgress {
434
+ translated: number; // Number of checkpoints translated
435
+ total: number; // Total checkpoints to translate
436
+ tokens: number; // Tokens used
437
+ fromCache: number; // Checkpoints retrieved from cache
438
+ errors: number; // Number of errors
439
+ }
440
+ ```
441
+
442
+ ##### TranslationMode
443
+
444
+ ```typescript
445
+ type TranslationMode = 'fast' | 'full';
446
+ ```
447
+
448
+ - `fast` - Budget-limited translation (stops after `computeBudgetMs`)
449
+ - `full` - Translate all checkpoints (120s budget)
450
+
451
+ ---
452
+
453
+ #### useAISummary
454
+
455
+ Hook for generating AI-powered summary of DQM results. **Note:** Summary generation runs automatically when enabled - there is no manual `generateSummary()` function.
456
+
457
+ ```typescript
458
+ import { useAISummary } from '@crownpeak/dqm-react-component';
459
+ import type { UseAISummaryOptions, UseAISummaryReturn } from '@crownpeak/dqm-react-component';
460
+
461
+ function MyComponent() {
462
+ const engine = useAIEngine({ enabled: true, openAiApiKey: '...' });
463
+ const cacheManager = useTranslationCache();
464
+
465
+ const summary = useAISummary({
466
+ engine,
467
+ originalData: analysisData,
468
+ targetLang: 'de',
469
+ modelId: 'gpt-4.1-mini',
470
+ enabled: true,
471
+ cache: cacheManager.cache,
472
+ });
473
+
474
+ // Use summary.bullets for the generated summary points
475
+ }
476
+ ```
477
+
478
+ ##### Options (UseAISummaryOptions)
479
+
480
+ | Property | Type | Required | Description |
481
+ |----------|------|----------|-------------|
482
+ | `engine` | `UseAIEngineReturn` | ✅ | AI engine hook return value |
483
+ | `originalData` | `AnalysisData \| null` | ✅ | Original analysis data |
484
+ | `targetLang` | `string` | ✅ | Target language for summary |
485
+ | `modelId` | `string` | ✅ | Model ID being used |
486
+ | `enabled` | `boolean` | ✅ | Whether summary is enabled |
487
+ | `cache` | `TranslationCache` | ✅ | Translation cache for summary caching |
488
+ | `timeoutMs` | `number` | ❌ | Timeout in milliseconds (default: 45000) |
489
+ | `translationInProgress` | `boolean` | ❌ | Whether translation is in progress (summary waits) |
490
+
491
+ ##### Returns (UseAISummaryReturn)
492
+
493
+ | Property | Type | Description |
494
+ |----------|------|-------------|
495
+ | `state` | `SummaryState` | Current summary state |
496
+ | `bullets` | `string[] \| null` | Generated bullet points |
497
+ | `error` | `string \| null` | Error message |
498
+ | `stats` | `SummaryStats \| null` | Stats for last summary run |
499
+ | `restart` | `() => void` | Restart summary generation |
500
+
501
+ ##### SummaryState
502
+
503
+ ```typescript
504
+ type SummaryState = 'idle' | 'generating' | 'ready' | 'error';
505
+ ```
506
+
507
+ ##### SummaryStats
508
+
509
+ ```typescript
510
+ interface SummaryStats {
511
+ durationMs: number;
512
+ inputTokens: number;
513
+ outputTokens: number;
514
+ totalTokens: number;
515
+ model: string;
516
+ cached: boolean;
517
+ }
518
+ ```
519
+
520
+ ---
521
+
522
+ #### useTranslationCache
523
+
524
+ Hook for managing translation cache (IndexedDB + in-memory).
525
+
526
+ ```typescript
527
+ import { useTranslationCache } from '@crownpeak/dqm-react-component';
528
+ import type { UseTranslationCacheReturn } from '@crownpeak/dqm-react-component';
529
+
530
+ function MyComponent() {
531
+ const cacheManager = useTranslationCache();
532
+
533
+ // Clear all caches
534
+ await cacheManager.clearAll();
535
+ }
536
+ ```
537
+
538
+ ##### Returns (UseTranslationCacheReturn)
539
+
540
+ | Property | Type | Description |
541
+ |----------|------|-------------|
542
+ | `cache` | `TranslationCache` | IndexedDB-backed translation cache |
543
+ | `assetCache` | `Map<string, AnalysisData>` | In-memory cache per asset |
544
+ | `storagePersisted` | `boolean \| null` | Whether storage survives browser eviction |
545
+ | `refreshStorageState` | `() => Promise<void>` | Refresh persistence state |
546
+ | `clearAll` | `() => Promise<void>` | Clear all cached translations |
547
+ | `clearAssetCache` | `() => void` | Clear in-memory cache only |
548
+
549
+ ---
550
+
551
+ ### AI Context
552
+
553
+ #### AIProvider
554
+
555
+ Provider component for AI features configuration. Wrap your app with this to use AI hooks.
556
+
557
+ ```typescript
558
+ import { AIProvider } from '@crownpeak/dqm-react-component';
559
+ import type { AIProviderProps } from '@crownpeak/dqm-react-component';
560
+
561
+ function App() {
562
+ return (
563
+ <AIProvider
564
+ translationConfig={{ enabledByDefault: false, computeBudgetMs: 15000 }}
565
+ summaryConfig={{ timeoutMs: 45000 }}
566
+ >
567
+ <MyApp />
568
+ </AIProvider>
569
+ );
570
+ }
571
+ ```
572
+
573
+ ##### Props (AIProviderProps)
574
+
575
+ | Prop | Type | Required | Description |
576
+ |------|------|----------|-------------|
577
+ | `children` | `React.ReactNode` | ✅ | Child components |
578
+ | `translationConfig` | `TranslationConfig` | ❌ | Translation configuration |
579
+ | `summaryConfig` | `SummaryConfig` | ❌ | Summary configuration |
580
+
581
+ ---
582
+
583
+ #### useAI
584
+
585
+ Hook to access AI context settings. Must be used within an AIProvider.
586
+
587
+ ```typescript
588
+ import { useAI } from '@crownpeak/dqm-react-component';
589
+ import type { AIContextValue } from '@crownpeak/dqm-react-component';
590
+
591
+ function MyComponent() {
592
+ const ai = useAI();
593
+
594
+ // Toggle translation
595
+ ai.setTranslationEnabled(!ai.translationEnabled);
596
+
597
+ // Change translation mode
598
+ ai.setTranslationMode('full');
599
+
600
+ // Update OpenAI settings
601
+ ai.setOpenAiApiKey('sk-...');
602
+ ai.setOpenAiModel('gpt-4o-mini');
603
+ }
604
+ ```
605
+
606
+ ##### Returns (AIContextValue)
607
+
608
+ | Property | Type | Description |
609
+ |----------|------|-------------|
610
+ | `translationEnabled` | `boolean` | Translation feature enabled |
611
+ | `setTranslationEnabled` | `(value: boolean) => void` | Toggle translation |
612
+ | `translationMode` | `TranslationMode` | Current translation mode |
613
+ | `setTranslationMode` | `(value: TranslationMode) => void` | Set translation mode |
614
+ | `translationDialogOpen` | `boolean` | Translation dialog visibility |
615
+ | `setTranslationDialogOpen` | `(value: boolean) => void` | Toggle dialog |
616
+ | `summaryEnabled` | `boolean` | Summary feature enabled |
617
+ | `setSummaryEnabled` | `(value: boolean) => void` | Toggle summary |
618
+ | `openAiApiKey` | `string` | Current OpenAI API key |
619
+ | `setOpenAiApiKey` | `(value: string) => void` | Set API key |
620
+ | `openAiModel` | `string` | Current OpenAI model |
621
+ | `setOpenAiModel` | `(value: string) => void` | Set model |
622
+ | `openAiBaseUrl` | `string` | Current OpenAI base URL |
623
+ | `setOpenAiBaseUrl` | `(value: string) => void` | Set base URL |
624
+ | `targetLang` | `string` | Target language (from i18n) |
625
+ | `translationNeeded` | `boolean` | True if target !== 'en' |
626
+ | `aiEnabled` | `boolean` | Any AI feature enabled |
627
+ | `computeBudgetMs` | `number` | Current compute budget |
628
+ | `effectiveModelId` | `string` | Resolved model ID |
629
+
630
+ ---
631
+
632
+ ### Utility Hooks
633
+
634
+ #### useOverlayResistant
635
+
636
+ Hook for detecting overlays and calculating content offsets.
637
+
638
+ ```typescript
639
+ import { useOverlayResistant } from '@crownpeak/dqm-react-component';
640
+
641
+ function MyComponent() {
642
+ const overlay = useOverlayResistant({
643
+ selector: '.admin-toolbar',
644
+ validateIframe: true,
645
+ pollMs: 1000,
646
+ });
647
+ }
648
+ ```
649
+
650
+ ##### Returns
651
+
652
+ ```typescript
653
+ interface OverlayInfo {
654
+ present: boolean;
655
+ height: number;
656
+ width: number;
657
+ position: 'top' | 'bottom' | 'left' | 'right' | 'center' | null;
658
+ contentOffset: {
659
+ top: number;
660
+ bottom: number;
661
+ left: number;
662
+ right: number;
663
+ };
664
+ isManualOffset: boolean;
665
+ }
666
+ ```
667
+
668
+ ##### Example
669
+
670
+ ```typescript
671
+ const overlay = useOverlayResistant({ selector: '.toolbar' });
672
+
673
+ <div style={{
674
+ marginTop: overlay.present ? `${overlay.contentOffset.top}px` : 0
675
+ }}>
676
+ Content adjusted for toolbar
677
+ </div>
678
+ ```
679
+
680
+ ---
681
+
682
+ ## Types
683
+
684
+ ### Core Types
685
+
686
+ #### AnalysisState
687
+
688
+ ```typescript
689
+ type AnalysisState = 'idle' | 'analyzing' | 'completed' | 'error';
690
+ ```
691
+
692
+ ---
693
+
694
+ #### SessionType
695
+
696
+ ```typescript
697
+ type SessionType = 'direct' | 'backend';
698
+ ```
699
+
700
+ - `direct` - Direct API calls to Crownpeak DQM
701
+ - `backend` - Proxy API calls through backend server
702
+
703
+ ---
704
+
705
+ #### Checkpoint
706
+
707
+ ```typescript
708
+ interface Checkpoint {
709
+ colors: { bg: string; text: string };
710
+ id: string;
711
+ name: string;
712
+ description?: string;
713
+ reference: string;
714
+ number: number;
715
+ categoryNumber: number;
716
+ category: string;
717
+ priority: boolean;
718
+ failed: boolean;
719
+ topics: string[];
720
+ canHighlight: {
721
+ page: boolean;
722
+ source: boolean;
723
+ };
724
+ restricted: boolean;
725
+ checkpointType?: {
726
+ name: string;
727
+ modifiedBy: string;
728
+ modified: string;
729
+ };
730
+ created: string;
731
+ modified: string;
732
+ }
733
+ ```
734
+
735
+ ---
736
+
737
+ #### AnalysisData
738
+
739
+ ```typescript
740
+ interface AnalysisData {
741
+ assetId: string;
742
+ created: string;
743
+ siteName: string;
744
+ totalCheckpoints: number;
745
+ totalErrors: number;
746
+ checkpoints: Checkpoint[];
747
+ }
748
+ ```
749
+
750
+ ---
751
+
752
+ ## Redux Store
753
+
754
+ > **Note:** The Redux store is used internally by the DQM component. These types are documented for advanced users who need to integrate with the store directly. Most users should use the provided hooks instead.
755
+
756
+ ### Store Structure
757
+
758
+ ```typescript
759
+ interface RootState {
760
+ locale: LocaleState;
761
+ analysis: AnalysisSliceState;
762
+ highlight: HighlightSliceState;
763
+ auth: AuthSliceState;
764
+ ai: AISliceState;
765
+ dqmApi: RTKQueryState; // RTK Query cache
766
+ }
767
+ ```
768
+
769
+ ### AnalysisSliceState
770
+
771
+ ```typescript
772
+ interface AnalysisSliceState {
773
+ state: AnalysisState; // 'idle' | 'analyzing' | 'completed' | 'error'
774
+ assetId: string | null;
775
+ data: AnalysisData | null;
776
+ error: string | null;
777
+ isAnalyzing: boolean;
778
+ startedAt: number | null;
779
+ completedAt: number | null;
780
+ }
781
+ ```
782
+
783
+ ### AuthSliceState
784
+
785
+ ```typescript
786
+ interface AuthSliceState {
787
+ apiKey: string | null;
788
+ websiteId: string | null;
789
+ isAuthenticated: boolean;
790
+ sessionType: 'direct' | 'backend' | null;
791
+ sessionToken: string | null;
792
+ accessToken: string | null;
793
+ refreshToken: string | null;
794
+ rememberMe: boolean;
795
+ isLoading: boolean;
796
+ error: string | null;
797
+ storageWarningAcknowledged: boolean;
798
+ }
799
+ ```
800
+
801
+ ### HighlightSliceState
802
+
803
+ ```typescript
804
+ interface HighlightSliceState {
805
+ selectedCheckpoint: Checkpoint | null;
806
+ selectedCheckpointId: string | null;
807
+ viewMode: 'browser' | 'source';
808
+ showAllHighlights: boolean;
809
+ currentHighlightIndex: number; // 1-based
810
+ totalHighlights: number;
811
+ visibleHighlightIndex: number; // 1-based
812
+ cache: Record<string, HighlightCacheEntry>;
813
+ scrollPositions: Record<string, { browser: number; source: number }>;
814
+ isModalOpen: boolean;
815
+ isLoading: boolean;
816
+ error: string | null;
817
+ highlightedContent: string;
818
+ scriptsDisabled: boolean;
819
+ hasAutoScrolled: boolean;
820
+ }
821
+ ```
822
+
823
+ ### AISliceState
824
+
825
+ ```typescript
826
+ interface AISliceState {
827
+ settings: {
828
+ provider: 'openai' | 'none';
829
+ openaiApiKey: string | null;
830
+ openaiModel: string;
831
+ enabled: boolean;
832
+ translationProvider: 'openai' | 'none';
833
+ };
834
+ summaries: Record<string, AISummary>;
835
+ isSettingsOpen: boolean;
836
+ isGenerating: boolean;
837
+ generatingFor: string | null;
838
+ error: string | null;
839
+ }
840
+ ```
841
+
842
+ ### LocaleState
843
+
844
+ ```typescript
845
+ interface LocaleState {
846
+ locale: 'en' | 'de' | 'es';
847
+ }
848
+ ```
849
+
850
+ ---
851
+
852
+ ## Utilities
853
+
854
+ ### i18n
855
+
856
+ The library exports its i18next instance and locale utilities for language management.
857
+
858
+ ```typescript
859
+ import {
860
+ i18n,
861
+ resolveLanguage,
862
+ SUPPORTED_LOCALES,
863
+ DEFAULT_LOCALE,
864
+ normalizeLocale,
865
+ } from '@crownpeak/dqm-react-component';
866
+ import type { SupportedLocale, AvailableLanguage } from '@crownpeak/dqm-react-component';
867
+ ```
868
+
869
+ #### Exports
870
+
871
+ | Export | Type | Description |
872
+ |--------|------|-------------|
873
+ | `i18n` | `i18n` | i18next instance used by the library |
874
+ | `resolveLanguage` | `(locale: string) => AvailableLanguage` | Resolve locale to available language (handles regional variants) |
875
+ | `SUPPORTED_LOCALES` | `readonly ['en', 'de', 'es']` | Array of supported locale codes |
876
+ | `DEFAULT_LOCALE` | `'en'` | Default fallback locale |
877
+ | `normalizeLocale` | `(input: string) => SupportedLocale \| null` | Normalize locale string to supported locale |
878
+
879
+ #### Changing Language
880
+
881
+ ```typescript
882
+ import { i18n } from '@crownpeak/dqm-react-component';
883
+
884
+ // Change language programmatically
885
+ i18n.changeLanguage('de');
886
+
887
+ // Get current language
888
+ const currentLang = i18n.language; // 'de'
889
+
890
+ // Listen for language changes
891
+ i18n.on('languageChanged', (lng) => {
892
+ console.log('Language changed to:', lng);
893
+ });
894
+ ```
895
+
896
+ #### Handling Regional Variants
897
+
898
+ ```typescript
899
+ import { resolveLanguage } from '@crownpeak/dqm-react-component';
900
+
901
+ resolveLanguage('de-AT'); // Returns 'de'
902
+ resolveLanguage('es-MX'); // Returns 'es'
903
+ resolveLanguage('fr'); // Returns 'en' (fallback)
904
+ ```
905
+
906
+ #### Validating Locales
907
+
908
+ ```typescript
909
+ import { normalizeLocale, SUPPORTED_LOCALES } from '@crownpeak/dqm-react-component';
910
+
911
+ normalizeLocale('de'); // 'de'
912
+ normalizeLocale('de-AT'); // 'de'
913
+ normalizeLocale('fr'); // null (not supported)
914
+
915
+ // Check if locale is supported
916
+ const isSupported = SUPPORTED_LOCALES.includes('de'); // true
917
+ ```
918
+
919
+ ---
920
+
921
+ ### loadDQMWidget (IIFE/ESM Only)
922
+
923
+ Load DQM widget in standalone mode (for IIFE/ESM bundles).
924
+
925
+ ```typescript
926
+ interface DQMWidget {
927
+ loadDQMWidget(options: {
928
+ config: DQMConfig;
929
+ containerId?: string;
930
+ open?: boolean;
931
+ }): () => void;
932
+
933
+ version: string;
934
+ }
935
+ ```
936
+
937
+ #### Example (IIFE)
938
+
939
+ ```html
940
+ <script src="https://unpkg.com/@crownpeak/dqm-react-component/dist/dqm-widget.iife.js"></script>
941
+ <script>
942
+ const cleanup = window.DQMWidget.loadDQMWidget({
943
+ open: true,
944
+ config: {
945
+ websiteId: 'your-website-id',
946
+ apiKey: 'your-api-key',
947
+ }
948
+ });
949
+
950
+ // Later: cleanup() to remove widget
951
+ </script>
952
+ ```
953
+
954
+ #### Example (ESM)
955
+
956
+ ```html
957
+ <script type="module">
958
+ import { loadDQMWidget } from 'https://unpkg.com/@crownpeak/dqm-react-component/dist/dqm-widget.esm.js';
959
+
960
+ const cleanup = loadDQMWidget({
961
+ config: {
962
+ websiteId: 'your-website-id',
963
+ apiKey: 'your-api-key',
964
+ }
965
+ });
966
+ </script>
967
+ ```
968
+
969
+ ---
970
+
971
+ ## localStorage Keys
972
+
973
+ The DQM component uses localStorage for persisting user preferences and authentication state.
974
+
975
+ ### Authentication Keys
976
+
977
+ | Key | Type | Description |
978
+ |-----|------|-------------|
979
+ | `dqm_apiKey` | `string` | DQM API key (direct auth mode) |
980
+ | `dqm_websiteID` | `string` | DQM Website ID |
981
+ | `dqm_sessionToken` | `string` | Backend session token (backend auth mode) |
982
+ | `dqm_sessionType` | `'direct' \| 'backend'` | Current authentication mode |
983
+ | `dqm_rememberMe` | `'true' \| 'false'` | Remember credentials preference |
984
+ | `dqm_storageWarningAcknowledged` | `'true'` | User acknowledged localStorage security warning |
985
+
986
+ ### AI Feature Keys
987
+
988
+ | Key | Type | Description |
989
+ |-----|------|-------------|
990
+ | `dqm_openai_apiKey` | `string` | OpenAI API key for translation/summary |
991
+ | `dqm_openai_model` | `string` | OpenAI model (default: 'gpt-4.1-mini') |
992
+ | `dqm_target_language` | `string` | Target language for translation (ISO 639-1) |
993
+ | `dqm_translate_results_enabled` | `'true' \| 'false'` | Translation feature enabled |
994
+ | `dqm_ai_summary_enabled` | `'true' \| 'false'` | AI summary feature enabled |
995
+ | `dqm_ai_provider` | `'openai' \| 'none'` | AI provider selection |
996
+
997
+ ### UI State Keys
998
+
999
+ | Key | Type | Description |
1000
+ |-----|------|-------------|
1001
+ | `dqm_locale` | `'en' \| 'de' \| 'es'` | UI language |
1002
+ | `dqm_debug` | `'true' \| 'false'` | Debug logging enabled |
1003
+ | `dqm_quality_breakdown_expanded` | `'true' \| 'false'` | Quality breakdown accordion state |
1004
+
1005
+ #### Example: Pre-configure AI settings
1006
+
1007
+ ```typescript
1008
+ // Set OpenAI configuration before loading DQM
1009
+ localStorage.setItem('dqm_openai_apiKey', 'sk-...');
1010
+ localStorage.setItem('dqm_openai_model', 'gpt-4o-mini');
1011
+ localStorage.setItem('dqm_target_language', 'de');
1012
+ localStorage.setItem('dqm_translate_results_enabled', 'true');
1013
+ ```
1014
+
1015
+ ---
1016
+
1017
+ ## See Also
1018
+
1019
+ - **[Examples](./EXAMPLES.md)** - Integration examples with code
1020
+ - **[AI Features Guide](./AI-FEATURES.md)** - AI translation and summary
1021
+ - **[Widget Guide](./WIDGET-GUIDE.md)** - Standalone widget usage
1022
+ - **[Troubleshooting](./TROUBLESHOOTING.md)** - Common issues and solutions