@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.
- package/README.md +138 -0
- package/data/.env.example +22 -0
- package/data/.gitattributes +47 -0
- package/data/.glfrc.json +7 -0
- package/data/.husky/pre-commit +5 -0
- package/data/.nvmrc +1 -0
- package/data/CHANGELOG.md +75 -0
- package/data/CODE_OF_CONDUCT.md +129 -0
- package/data/CONTRIBUTING.md +203 -0
- package/data/DOCS-STRUCTURE.md +307 -0
- package/data/I18N.md +292 -0
- package/data/LICENSE +22 -0
- package/data/README.md +315 -0
- package/data/SECURITY.md +125 -0
- package/data/WIKI-DEPLOYMENT.md +348 -0
- package/data/docs/AI-FEATURES.md +610 -0
- package/data/docs/API-REFERENCE.md +1022 -0
- package/data/docs/AUTHENTICATION.md +301 -0
- package/data/docs/BACKEND-API.md +468 -0
- package/data/docs/DEVELOPMENT.md +375 -0
- package/data/docs/EXAMPLES.md +622 -0
- package/data/docs/MCP-SERVER.md +307 -0
- package/data/docs/MIGRATION-GUIDE.md +367 -0
- package/data/docs/NPM-PUBLISH.md +193 -0
- package/data/docs/QUICKSTART.md +206 -0
- package/data/docs/REDIS-SETUP.md +162 -0
- package/data/docs/SERVER.md +228 -0
- package/data/docs/TROUBLESHOOTING.md +657 -0
- package/data/docs/WIDGET-GUIDE.md +638 -0
- package/data/docs/WIKI-HOME.md +58 -0
- package/data/docs/WIKI-SIDEBAR.md +39 -0
- package/data/package.json +171 -0
- package/data/playwright.config.ts +64 -0
- package/data/probe/.cargo/config.toml +10 -0
- package/data/probe/.claude/commands/performance-review.md +15 -0
- package/data/probe/.clinerules +288 -0
- package/data/probe/.dockerignore +57 -0
- package/data/probe/.githooks/post-commit +11 -0
- package/data/probe/.githooks/pre-commit +99 -0
- package/data/probe/.githooks/pre-commit-vow +9 -0
- package/data/probe/.prompts/engineer.md +41 -0
- package/data/probe/.roomodes +28 -0
- package/data/probe/.windsurfrules +0 -0
- package/data/probe/BASH_TOOL_SUMMARY.md +148 -0
- package/data/probe/BENCHMARKING.md +256 -0
- package/data/probe/CLAUDE.md +226 -0
- package/data/probe/CODE_OF_CONDUCT.md +128 -0
- package/data/probe/CONTRIBUTING.md +193 -0
- package/data/probe/Cargo.toml +120 -0
- package/data/probe/Cross.toml +10 -0
- package/data/probe/DOCKER-README.md +224 -0
- package/data/probe/Dockerfile +32 -0
- package/data/probe/ENHANCED_DEBUG_TELEMETRY.md +188 -0
- package/data/probe/LICENSE +201 -0
- package/data/probe/Makefile +210 -0
- package/data/probe/README.md +824 -0
- package/data/probe/SECURITY.md +67 -0
- package/data/probe/WINDOWS-GUIDE.md +294 -0
- package/data/probe/benches/parsing_benchmarks.rs +370 -0
- package/data/probe/benches/search_benchmarks.rs +599 -0
- package/data/probe/benches/simd_benchmarks.rs +372 -0
- package/data/probe/benches/timing_benchmarks.rs +287 -0
- package/data/probe/build-windows.bat +229 -0
- package/data/probe/codex-config/config.toml +6 -0
- package/data/probe/docs/PERFORMANCE_OPTIMIZATION.md +161 -0
- package/data/probe/examples/cache_demo.rs +46 -0
- package/data/probe/examples/chat/.dockerignore +37 -0
- package/data/probe/examples/chat/ChatSessionManager.js +295 -0
- package/data/probe/examples/chat/Dockerfile +98 -0
- package/data/probe/examples/chat/LICENSE +201 -0
- package/data/probe/examples/chat/LOCAL_IMAGE_SUPPORT.md +195 -0
- package/data/probe/examples/chat/MCP_INTEGRATION.md +400 -0
- package/data/probe/examples/chat/README.md +338 -0
- package/data/probe/examples/chat/TRACING.md +226 -0
- package/data/probe/examples/chat/appTracer.js +968 -0
- package/data/probe/examples/chat/auth.js +76 -0
- package/data/probe/examples/chat/bin/probe-chat.js +13 -0
- package/data/probe/examples/chat/build.js +104 -0
- package/data/probe/examples/chat/cancelRequest.js +84 -0
- package/data/probe/examples/chat/demo-agentic-image-flow.js +88 -0
- package/data/probe/examples/chat/demo-local-images.js +128 -0
- package/data/probe/examples/chat/fileSpanExporter.js +181 -0
- package/data/probe/examples/chat/implement/README.md +228 -0
- package/data/probe/examples/chat/implement/backends/AiderBackend.js +750 -0
- package/data/probe/examples/chat/implement/backends/BaseBackend.js +276 -0
- package/data/probe/examples/chat/implement/backends/ClaudeCodeBackend.js +767 -0
- package/data/probe/examples/chat/implement/backends/MockBackend.js +237 -0
- package/data/probe/examples/chat/implement/backends/registry.js +85 -0
- package/data/probe/examples/chat/implement/core/BackendManager.js +567 -0
- package/data/probe/examples/chat/implement/core/ImplementTool.js +354 -0
- package/data/probe/examples/chat/implement/core/config.js +428 -0
- package/data/probe/examples/chat/implement/core/timeouts.js +58 -0
- package/data/probe/examples/chat/implement/core/utils.js +496 -0
- package/data/probe/examples/chat/implement/types/BackendTypes.js +126 -0
- package/data/probe/examples/chat/index.js +669 -0
- package/data/probe/examples/chat/mcpServer.js +341 -0
- package/data/probe/examples/chat/npm/LICENSE +15 -0
- package/data/probe/examples/chat/npm/README.md +168 -0
- package/data/probe/examples/chat/npm/bin/probe-chat.js +156 -0
- package/data/probe/examples/chat/npm/index.js +259 -0
- package/data/probe/examples/chat/npm/package.json +54 -0
- package/data/probe/examples/chat/package.json +102 -0
- package/data/probe/examples/chat/probeChat.js +456 -0
- package/data/probe/examples/chat/probeTool.js +491 -0
- package/data/probe/examples/chat/storage/JsonChatStorage.js +476 -0
- package/data/probe/examples/chat/telemetry.js +281 -0
- package/data/probe/examples/chat/test/integration/chatFlows.test.js +320 -0
- package/data/probe/examples/chat/test/integration/toolCalling.test.js +471 -0
- package/data/probe/examples/chat/test/mocks/mockLLMProvider.js +269 -0
- package/data/probe/examples/chat/test/test-backends.js +90 -0
- package/data/probe/examples/chat/test/testUtils.js +530 -0
- package/data/probe/examples/chat/test/unit/backendTimeout.test.js +161 -0
- package/data/probe/examples/chat/test/unit/packageFiles.test.js +120 -0
- package/data/probe/examples/chat/test/verify-tests.js +118 -0
- package/data/probe/examples/chat/test-agentic-image-loading.js +294 -0
- package/data/probe/examples/chat/test-ai-sdk-telemetry.js +204 -0
- package/data/probe/examples/chat/test-chat-tracing.js +38 -0
- package/data/probe/examples/chat/test-direct-function.js +49 -0
- package/data/probe/examples/chat/test-file-size-validation.js +103 -0
- package/data/probe/examples/chat/test-full-mcp-integration.js +258 -0
- package/data/probe/examples/chat/test-github-context.txt +12 -0
- package/data/probe/examples/chat/test-hierarchy.js +203 -0
- package/data/probe/examples/chat/test-image-spans.js +37 -0
- package/data/probe/examples/chat/test-local-image-reading.js +176 -0
- package/data/probe/examples/chat/test-mcp-integration.js +136 -0
- package/data/probe/examples/chat/test-mcp-probe-server.js +161 -0
- package/data/probe/examples/chat/test-mcp-with-ai.js +279 -0
- package/data/probe/examples/chat/test-multiple-allowed-dirs.js +111 -0
- package/data/probe/examples/chat/test-probe-mcp-server.js +110 -0
- package/data/probe/examples/chat/test-security-validation.js +145 -0
- package/data/probe/examples/chat/test-simple-tracing.js +32 -0
- package/data/probe/examples/chat/test-trace-verification.js +235 -0
- package/data/probe/examples/chat/test-tracing.js +114 -0
- package/data/probe/examples/chat/tokenCounter.js +419 -0
- package/data/probe/examples/chat/tokenUsageDisplay.js +134 -0
- package/data/probe/examples/chat/webServer.js +1103 -0
- package/data/probe/examples/reranker/Cargo.toml +33 -0
- package/data/probe/examples/reranker/DEBUG_OUTPUT_ANALYSIS.md +71 -0
- package/data/probe/examples/reranker/MODELS.md +66 -0
- package/data/probe/examples/reranker/MODEL_COMPARISON.md +60 -0
- package/data/probe/examples/reranker/MULTI_MODEL_ANALYSIS.md +176 -0
- package/data/probe/examples/reranker/PERFORMANCE_SUMMARY.md +156 -0
- package/data/probe/examples/reranker/README.md +347 -0
- package/data/probe/examples/reranker/RUST_BERT_COMPARISON.md +82 -0
- package/data/probe/examples/reranker/TOKENIZATION_GUIDE.md +120 -0
- package/data/probe/examples/reranker/check_rust_tokenizer.py +108 -0
- package/data/probe/examples/reranker/convert_to_torchscript.py +109 -0
- package/data/probe/examples/reranker/debug_scoring.py +189 -0
- package/data/probe/examples/reranker/debug_tokenization.py +154 -0
- package/data/probe/examples/reranker/download_models.sh +73 -0
- package/data/probe/examples/reranker/requirements.txt +13 -0
- package/data/probe/examples/reranker/run_comprehensive_benchmark.sh +83 -0
- package/data/probe/examples/reranker/rust_bert_test/Cargo.toml +12 -0
- package/data/probe/examples/reranker/rust_bert_test/README.md +54 -0
- package/data/probe/examples/reranker/simple_test.py +50 -0
- package/data/probe/examples/reranker/test_all_models.sh +63 -0
- package/data/probe/examples/reranker/test_bert_results.sh +44 -0
- package/data/probe/examples/reranker/test_cross_encoder.py +334 -0
- package/data/probe/examples/reranker/test_cross_encoder.sh +80 -0
- package/data/probe/examples/reranker/test_exact_comparison.py +151 -0
- package/data/probe/examples/reranker/test_parallel_performance.sh +56 -0
- package/data/probe/examples/reranker/test_scores.py +132 -0
- package/data/probe/install.ps1 +508 -0
- package/data/probe/install.sh +460 -0
- package/data/probe/npm/CLONE_METHOD_EXAMPLES.md +596 -0
- package/data/probe/npm/CONTEXT_COMPACTION.md +303 -0
- package/data/probe/npm/DELEGATE_TOOL_README.md +166 -0
- package/data/probe/npm/MAID_INTEGRATION.md +313 -0
- package/data/probe/npm/MCP_INTEGRATION_SUMMARY.md +241 -0
- package/data/probe/npm/README.md +824 -0
- package/data/probe/npm/bin/.gitignore +7 -0
- package/data/probe/npm/bin/.gitkeep +0 -0
- package/data/probe/npm/bin/README.md +12 -0
- package/data/probe/npm/bin/probe +167 -0
- package/data/probe/npm/docs/CLAUDE_CODE_INTEGRATION.md +414 -0
- package/data/probe/npm/docs/CODEX_INTEGRATION.md +502 -0
- package/data/probe/npm/docs/EDIT_CREATE_TOOLS.md +233 -0
- package/data/probe/npm/docs/RETRY_AND_FALLBACK.md +674 -0
- package/data/probe/npm/example-usage.js +335 -0
- package/data/probe/npm/examples/multi-engine-demo.js +117 -0
- package/data/probe/npm/examples/probe-agent-cli.js +113 -0
- package/data/probe/npm/examples/test-agent-edit.js +114 -0
- package/data/probe/npm/examples/test-edit-create.js +120 -0
- package/data/probe/npm/examples/test-edit-direct.js +114 -0
- package/data/probe/npm/index.d.ts +744 -0
- package/data/probe/npm/jest.config.js +52 -0
- package/data/probe/npm/package.json +117 -0
- package/data/probe/npm/scripts/build-agent.cjs +75 -0
- package/data/probe/npm/scripts/build-cjs.js +124 -0
- package/data/probe/npm/scripts/build-mcp.cjs +36 -0
- package/data/probe/npm/scripts/postinstall.js +216 -0
- package/data/probe/npm/test-codex-e2e.js +78 -0
- package/data/probe/npm/test-download-lock.js +109 -0
- package/data/probe/npm/test-grep-security.js +94 -0
- package/data/probe/npm/test-grep-simplified.js +63 -0
- package/data/probe/npm/test-grep.js +51 -0
- package/data/probe/npm/tests/README.md +96 -0
- package/data/probe/npm/tests/agent-compact-history.test.js +174 -0
- package/data/probe/npm/tests/allow-tests-default.test.js +151 -0
- package/data/probe/npm/tests/contextCompactor.test.js +498 -0
- package/data/probe/npm/tests/delegate-config.test.js +353 -0
- package/data/probe/npm/tests/delegate-integration.test.js +348 -0
- package/data/probe/npm/tests/extractor-integration.test.js +162 -0
- package/data/probe/npm/tests/extractor.test.js +317 -0
- package/data/probe/npm/tests/fixtures/sampleDiagrams.js +267 -0
- package/data/probe/npm/tests/integration/claude-code-auto-fallback.spec.js +148 -0
- package/data/probe/npm/tests/integration/claude-code-multi-step.spec.js +127 -0
- package/data/probe/npm/tests/integration/claude-code-tool-events.spec.js +163 -0
- package/data/probe/npm/tests/integration/codex-auto-fallback.spec.js +191 -0
- package/data/probe/npm/tests/integration/codex-tool-events.spec.js +147 -0
- package/data/probe/npm/tests/integration/examplesChatMcp.test.js +402 -0
- package/data/probe/npm/tests/integration/mcpDotenvSupport.test.js +174 -0
- package/data/probe/npm/tests/integration/mcpErrorHandling.test.js +566 -0
- package/data/probe/npm/tests/integration/mcpRobustness.test.js +564 -0
- package/data/probe/npm/tests/integration/mcpStdoutPurity.test.js +355 -0
- package/data/probe/npm/tests/integration/probeAgentMcp.test.js +398 -0
- package/data/probe/npm/tests/integration/retryFallback.test.js +368 -0
- package/data/probe/npm/tests/integration/schema-in-initial-message.test.js +318 -0
- package/data/probe/npm/tests/integration/schema-validation-loop-prevention.test.js +244 -0
- package/data/probe/npm/tests/integration/schemaRetryLogic.test.js +94 -0
- package/data/probe/npm/tests/integration/validationFlow.test.js +329 -0
- package/data/probe/npm/tests/manual/test-codex-basic.js +110 -0
- package/data/probe/npm/tests/mcp/mcpClientManager.test.js +614 -0
- package/data/probe/npm/tests/mcp/mcpConfig.test.js +359 -0
- package/data/probe/npm/tests/mcp/mcpXmlBridge.test.js +436 -0
- package/data/probe/npm/tests/mcp/mockMcpServer.js +510 -0
- package/data/probe/npm/tests/mcp-strict-syntax.test.js +319 -0
- package/data/probe/npm/tests/mermaidQuoteEscaping.test.js +214 -0
- package/data/probe/npm/tests/nestedQuoteFix.test.js +40 -0
- package/data/probe/npm/tests/setup.js +46 -0
- package/data/probe/npm/tests/unit/allowed-tools.test.js +513 -0
- package/data/probe/npm/tests/unit/attempt-completion-closing-tag-in-content.test.js +188 -0
- package/data/probe/npm/tests/unit/attemptCompletionJsonFix.test.js +238 -0
- package/data/probe/npm/tests/unit/attemptCompletionJsonIssue.test.js +128 -0
- package/data/probe/npm/tests/unit/backtickAutoFix.test.js +35 -0
- package/data/probe/npm/tests/unit/bash-probe-agent-integration.test.js +389 -0
- package/data/probe/npm/tests/unit/bash-simple-commands.test.js +324 -0
- package/data/probe/npm/tests/unit/bash-tool-comprehensive.test.js +371 -0
- package/data/probe/npm/tests/unit/bash-tool-integration.test.js +310 -0
- package/data/probe/npm/tests/unit/bash-tool.test.js +341 -0
- package/data/probe/npm/tests/unit/completion-prompt.test.js +379 -0
- package/data/probe/npm/tests/unit/cwd-path-options.test.js +287 -0
- package/data/probe/npm/tests/unit/delegate-limits.test.js +422 -0
- package/data/probe/npm/tests/unit/direct-content-attempt-completion.test.js +235 -0
- package/data/probe/npm/tests/unit/edit-create-tools.test.js +609 -0
- package/data/probe/npm/tests/unit/enhancedMermaidValidation.test.js +577 -0
- package/data/probe/npm/tests/unit/extract-content.test.js +83 -0
- package/data/probe/npm/tests/unit/extract-multiple-targets.test.js +89 -0
- package/data/probe/npm/tests/unit/fallbackManager.test.js +442 -0
- package/data/probe/npm/tests/unit/githubCompatibilityValidation.test.js +258 -0
- package/data/probe/npm/tests/unit/imageConfig.test.js +149 -0
- package/data/probe/npm/tests/unit/imagePathResolution.test.js +345 -0
- package/data/probe/npm/tests/unit/json-fixing-agent.test.js +238 -0
- package/data/probe/npm/tests/unit/json-validation-enhanced-errors.test.js +199 -0
- package/data/probe/npm/tests/unit/jsonValidationInfiniteLoopFix.test.js +228 -0
- package/data/probe/npm/tests/unit/maidIntegration.test.js +139 -0
- package/data/probe/npm/tests/unit/maxIterationsWarning.test.js +195 -0
- package/data/probe/npm/tests/unit/mermaidEdgeLabelFix.test.js +161 -0
- package/data/probe/npm/tests/unit/mermaidHtmlEntities.test.js +76 -0
- package/data/probe/npm/tests/unit/mermaidInfiniteLoopFix.test.js +64 -0
- package/data/probe/npm/tests/unit/mermaidValidation.test.js +723 -0
- package/data/probe/npm/tests/unit/mermaidValidationVisorExample.test.js +309 -0
- package/data/probe/npm/tests/unit/probe-agent-clone-realistic.test.js +643 -0
- package/data/probe/npm/tests/unit/probe-agent-clone.test.js +476 -0
- package/data/probe/npm/tests/unit/probe-agent-delegate.test.js +400 -0
- package/data/probe/npm/tests/unit/probe-agent-model-option.test.js +118 -0
- package/data/probe/npm/tests/unit/probeTool-security.test.js +283 -0
- package/data/probe/npm/tests/unit/readImageTool.test.js +418 -0
- package/data/probe/npm/tests/unit/retryManager.test.js +317 -0
- package/data/probe/npm/tests/unit/schema-aware-reminders.test.js +288 -0
- package/data/probe/npm/tests/unit/schemaDefinitionDetection.test.js +115 -0
- package/data/probe/npm/tests/unit/schemaUtils.test.js +1268 -0
- package/data/probe/npm/tests/unit/simpleTelemetry.test.js +282 -0
- package/data/probe/npm/tests/unit/simplified-attempt-completion.test.js +274 -0
- package/data/probe/npm/tests/unit/single-quote-json-bug.test.js +231 -0
- package/data/probe/npm/tests/unit/subgraphAutoFix.test.js +110 -0
- package/data/probe/npm/tests/unit/system-prompt.test.js +32 -0
- package/data/probe/npm/tests/unit/types-probe-agent-options.test.js +42 -0
- package/data/probe/npm/tests/unit/xmlParsing.test.js +720 -0
- package/data/probe/npm/tsconfig.json +21 -0
- package/data/probe/result1.txt +19 -0
- package/data/probe/result2.txt +26 -0
- package/data/probe/scripts/benchmark.sh +270 -0
- package/data/probe/scripts/cache_memory_analysis.rs +844 -0
- package/data/probe/scripts/claude-hook-wrapper.sh +56 -0
- package/data/probe/site/.env.example +10 -0
- package/data/probe/site/DEPLOYMENT.md +86 -0
- package/data/probe/site/README.md +183 -0
- package/data/probe/site/adding-languages.md +135 -0
- package/data/probe/site/ai-chat.md +427 -0
- package/data/probe/site/ai-integration.md +1488 -0
- package/data/probe/site/blog/agentic-flow-custom-xml-protocol.md +407 -0
- package/data/probe/site/blog/index.md +118 -0
- package/data/probe/site/blog/v0.6.0-release.md +426 -0
- package/data/probe/site/blog.md +8 -0
- package/data/probe/site/changelog.md +200 -0
- package/data/probe/site/cli-mode.md +437 -0
- package/data/probe/site/code-extraction.md +436 -0
- package/data/probe/site/contributing/README.md +9 -0
- package/data/probe/site/contributing/documentation-cross-references.md +215 -0
- package/data/probe/site/contributing/documentation-maintenance.md +275 -0
- package/data/probe/site/contributing/documentation-structure.md +75 -0
- package/data/probe/site/documentation-cross-references.md +215 -0
- package/data/probe/site/documentation-guide.md +132 -0
- package/data/probe/site/documentation-maintenance.md +275 -0
- package/data/probe/site/features.md +147 -0
- package/data/probe/site/how-it-works.md +118 -0
- package/data/probe/site/index.md +175 -0
- package/data/probe/site/index.md.bak +133 -0
- package/data/probe/site/installation.md +235 -0
- package/data/probe/site/integrations/docker.md +248 -0
- package/data/probe/site/integrations/github-actions.md +413 -0
- package/data/probe/site/language-support-overview.md +168 -0
- package/data/probe/site/mcp-integration.md +587 -0
- package/data/probe/site/mcp-server.md +304 -0
- package/data/probe/site/navigation-structure.md +76 -0
- package/data/probe/site/nodejs-sdk.md +798 -0
- package/data/probe/site/output-formats.md +625 -0
- package/data/probe/site/package.json +21 -0
- package/data/probe/site/public/_headers +28 -0
- package/data/probe/site/public/_redirects +11 -0
- package/data/probe/site/quick-start.md +289 -0
- package/data/probe/site/search-functionality.md +291 -0
- package/data/probe/site/search-reference.md +291 -0
- package/data/probe/site/supported-languages.md +215 -0
- package/data/probe/site/use-cases/README.md +8 -0
- package/data/probe/site/use-cases/advanced-cli.md +253 -0
- package/data/probe/site/use-cases/ai-code-editors.md +239 -0
- package/data/probe/site/use-cases/building-ai-tools.md +529 -0
- package/data/probe/site/use-cases/cli-ai-workflows.md +285 -0
- package/data/probe/site/use-cases/deploying-probe-web-interface.md +255 -0
- package/data/probe/site/use-cases/integrating-probe-into-ai-code-editors.md +161 -0
- package/data/probe/site/use-cases/nodejs-sdk.md +596 -0
- package/data/probe/site/use-cases/team-chat.md +350 -0
- package/data/probe/site/web-interface.md +434 -0
- package/data/probe/site/wrangler.toml +9 -0
- package/data/probe/test-api-key.sh +1 -0
- package/data/probe/test-probe-implementation/hello.js +7 -0
- package/data/probe/test_cases/demonstrate_early_termination_issues.sh +176 -0
- package/data/probe/test_cases/early_termination_issues.rs +533 -0
- package/data/probe/test_data/test_nested_struct.go +26 -0
- package/data/probe/tests/README.md +286 -0
- package/data/probe/tests/README_search_determinism_tests.md +116 -0
- package/data/probe/tests/adjacent_comment_test.rs +152 -0
- package/data/probe/tests/apostrophe_handling_tests.rs +132 -0
- package/data/probe/tests/block_filtering_with_ast_tests.rs +669 -0
- package/data/probe/tests/block_merging_tests.rs +396 -0
- package/data/probe/tests/c_outline_format_tests.rs +2179 -0
- package/data/probe/tests/cache_invalidation_issues.rs.disabled +682 -0
- package/data/probe/tests/cache_order_tests.rs +147 -0
- package/data/probe/tests/cache_query_scoping_tests.rs +221 -0
- package/data/probe/tests/cli_tests.rs +680 -0
- package/data/probe/tests/comment_context_integration_test.rs +240 -0
- package/data/probe/tests/common.rs +33 -0
- package/data/probe/tests/complex_block_merging_tests.rs +599 -0
- package/data/probe/tests/complex_query_block_filtering_tests.rs +422 -0
- package/data/probe/tests/control_flow_closing_braces_test.rs +91 -0
- package/data/probe/tests/cpp_outline_format_tests.rs +1507 -0
- package/data/probe/tests/csharp_outline_format_tests.rs +941 -0
- package/data/probe/tests/elastic_query_integration_tests.rs +922 -0
- package/data/probe/tests/extract_command_tests.rs +1848 -0
- package/data/probe/tests/extract_deduplication_tests.rs +146 -0
- package/data/probe/tests/extract_input_file_tests.rs +84 -0
- package/data/probe/tests/extract_prompt_tests.rs +102 -0
- package/data/probe/tests/filename_search_tests.rs +96 -0
- package/data/probe/tests/fixtures/user/AssemblyInfo.cs +3 -0
- package/data/probe/tests/github_extract_tests.rs +234 -0
- package/data/probe/tests/go_comment_test.rs +253 -0
- package/data/probe/tests/go_outline_format_tests.rs +2587 -0
- package/data/probe/tests/go_path_resolver_tests.rs +96 -0
- package/data/probe/tests/html_outline_format_tests.rs +637 -0
- package/data/probe/tests/integration_tests.rs +837 -0
- package/data/probe/tests/ip_whitelist_test.rs +148 -0
- package/data/probe/tests/java_outline_format_tests.rs +1611 -0
- package/data/probe/tests/javascript_extract_tests.rs +315 -0
- package/data/probe/tests/javascript_outline_format_tests.rs +1464 -0
- package/data/probe/tests/json_format_tests.rs +436 -0
- package/data/probe/tests/json_schema_validation_tests.rs +450 -0
- package/data/probe/tests/lib_usage.rs +60 -0
- package/data/probe/tests/line_comment_context_extension_test.rs +459 -0
- package/data/probe/tests/line_map_cache_tests.rs +114 -0
- package/data/probe/tests/markdown_integration_tests.rs +190 -0
- package/data/probe/tests/mocks/test_ip_whitelist.go +11 -0
- package/data/probe/tests/mocks/test_object.js +27 -0
- package/data/probe/tests/mocks/test_struct.go +50 -0
- package/data/probe/tests/multi_keyword_pattern_tests.rs +464 -0
- package/data/probe/tests/multi_language_syntax_integration_tests.rs +218 -0
- package/data/probe/tests/multiple_capture_groups_tests.rs +169 -0
- package/data/probe/tests/negative_compound_word_tests.rs +246 -0
- package/data/probe/tests/nested_symbol_extraction_tests.rs +99 -0
- package/data/probe/tests/outline_cross_file_interference_test.rs +335 -0
- package/data/probe/tests/outline_keyword_preservation_test.rs +67 -0
- package/data/probe/tests/output_format_edge_cases_tests.rs +693 -0
- package/data/probe/tests/parallel_extraction_tests.rs +178 -0
- package/data/probe/tests/parallel_search_tests.rs +355 -0
- package/data/probe/tests/path_resolver_tests.rs +698 -0
- package/data/probe/tests/php_outline_format_extended_tests.rs +928 -0
- package/data/probe/tests/php_outline_format_tests.rs +768 -0
- package/data/probe/tests/property_tests.proptest-regressions +9 -0
- package/data/probe/tests/property_tests.rs +118 -0
- package/data/probe/tests/python_outline_format_tests.rs +1538 -0
- package/data/probe/tests/query_command_json_tests.rs +438 -0
- package/data/probe/tests/query_command_tests.rs +232 -0
- package/data/probe/tests/query_command_xml_tests.rs +569 -0
- package/data/probe/tests/quoted_term_with_negative_keyword_tests.rs +216 -0
- package/data/probe/tests/required_terms_filename_tests.rs +116 -0
- package/data/probe/tests/ruby_outline_format_tests.rs +1011 -0
- package/data/probe/tests/rust_line_comment_context_test.rs +151 -0
- package/data/probe/tests/rust_outline_format_enhanced_tests.rs +725 -0
- package/data/probe/tests/rust_outline_format_tests.rs +843 -0
- package/data/probe/tests/schemas/xml_output_schema.xsd +38 -0
- package/data/probe/tests/search_determinism_tests.rs +451 -0
- package/data/probe/tests/search_hints_tests.rs +253 -0
- package/data/probe/tests/special_character_escaping_tests.rs +417 -0
- package/data/probe/tests/stemming_compound_word_filtering_tests.rs +535 -0
- package/data/probe/tests/strict_elastic_syntax_tests.rs +404 -0
- package/data/probe/tests/swift_outline_format_tests.rs +3319 -0
- package/data/probe/tests/symbols_tests.rs +166 -0
- package/data/probe/tests/test_file.rs +45 -0
- package/data/probe/tests/test_tokenize.rs +28 -0
- package/data/probe/tests/timeout_tests.rs +82 -0
- package/data/probe/tests/tokenization_tests.rs +195 -0
- package/data/probe/tests/tokenized_block_filtering_tests.rs +174 -0
- package/data/probe/tests/typescript_extract_tests.rs +214 -0
- package/data/probe/tests/typescript_outline_format_tests.rs +2188 -0
- package/data/probe/tests/xml_format_tests.rs +568 -0
- package/data/probe/tests/xml_schema_validation_tests.rs +497 -0
- package/data/scripts/postinstall.mjs +9 -0
- package/data/scripts/set-version.js +0 -0
- package/data/scripts/wiki-build.sh +111 -0
- package/data/scripts/wiki-deploy.sh +73 -0
- package/data/serve.json +12 -0
- package/data/test/demo-dynamic.html +134 -0
- package/data/test/demo-esm.html +105 -0
- package/data/test/demo-iife.html +78 -0
- package/data/tsconfig.json +7 -0
- package/data/vite.server.ts +483 -0
- package/data/vitest.config.ts +40 -0
- package/data/wiki/Home.md +58 -0
- package/data/wiki/_Sidebar.md +39 -0
- package/docs-mcp.config.json +20 -0
- package/package.json +56 -0
- package/src/config.js +111 -0
- 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)
|