@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,195 @@
|
|
|
1
|
+
# Local Image Support in Probe Agent
|
|
2
|
+
|
|
3
|
+
The probe agent now supports reading local image files directly from file paths mentioned in user messages and **automatically loads images when mentioned during the agentic loop**.
|
|
4
|
+
|
|
5
|
+
## Features Added
|
|
6
|
+
|
|
7
|
+
### Automatic Local File Detection
|
|
8
|
+
- Detects local image file paths in user messages
|
|
9
|
+
- Supports both relative and absolute paths
|
|
10
|
+
- Recognizes common image extensions: `.png`, `.jpg`, `.jpeg`, `.webp`, `.bmp`, `.svg`
|
|
11
|
+
|
|
12
|
+
### 🚀 NEW: Agentic Loop Image Loading
|
|
13
|
+
- **Automatic detection**: Agent automatically detects when it mentions image files in its internal thinking
|
|
14
|
+
- **Smart loading**: Images are loaded and added to the AI context for subsequent iterations
|
|
15
|
+
- **Persistent context**: Loaded images remain available throughout the conversation
|
|
16
|
+
- **Tool result processing**: Images mentioned in tool outputs are also automatically loaded
|
|
17
|
+
- **Caching**: Prevents reloading the same images multiple times
|
|
18
|
+
|
|
19
|
+
### Security Features
|
|
20
|
+
- Path validation to prevent directory traversal attacks
|
|
21
|
+
- Restricts file access to allowed directories (respects `ALLOWED_FOLDERS` environment variable)
|
|
22
|
+
- Validates file existence and readability before processing
|
|
23
|
+
|
|
24
|
+
### Supported Path Formats
|
|
25
|
+
```
|
|
26
|
+
./image.png # Relative path from current directory
|
|
27
|
+
../assets/screenshot.jpg # Relative path with directory traversal
|
|
28
|
+
/absolute/path/to/image.webp # Absolute path
|
|
29
|
+
image.png # File in current directory
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
### Automatic Conversion
|
|
33
|
+
- Local files are automatically converted to base64 data URLs
|
|
34
|
+
- Maintains original MIME type based on file extension
|
|
35
|
+
- Seamlessly integrates with existing URL and base64 image support
|
|
36
|
+
|
|
37
|
+
## Usage Examples
|
|
38
|
+
|
|
39
|
+
### Basic Usage
|
|
40
|
+
```javascript
|
|
41
|
+
import { ProbeChat } from './probeChat.js';
|
|
42
|
+
|
|
43
|
+
const chat = new ProbeChat({ debug: true });
|
|
44
|
+
|
|
45
|
+
// The agent will automatically detect and process the local image
|
|
46
|
+
const response = await chat.chat('Analyze this screenshot: ./screenshot.png');
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
### Mixed Content
|
|
50
|
+
```javascript
|
|
51
|
+
// Mix local files with URLs
|
|
52
|
+
const message = `
|
|
53
|
+
Compare this local image ./local.png
|
|
54
|
+
with this remote image https://example.com/remote.jpg
|
|
55
|
+
`;
|
|
56
|
+
|
|
57
|
+
const response = await chat.chat(message);
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
### Direct Function Usage
|
|
61
|
+
```javascript
|
|
62
|
+
import { extractImageUrls } from './probeChat.js';
|
|
63
|
+
|
|
64
|
+
const message = 'Please review this diagram: ./architecture.png';
|
|
65
|
+
const result = await extractImageUrls(message, true);
|
|
66
|
+
|
|
67
|
+
console.log(`Found ${result.urls.length} images`);
|
|
68
|
+
console.log(`Cleaned message: "${result.cleanedMessage}"`);
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
## 🤖 Agentic Loop Integration
|
|
72
|
+
|
|
73
|
+
The most powerful feature is automatic image loading during the agent's internal reasoning process.
|
|
74
|
+
|
|
75
|
+
### How It Works
|
|
76
|
+
|
|
77
|
+
When the probe agent is working through a task, it can now:
|
|
78
|
+
|
|
79
|
+
1. **Mention an image file** in its reasoning: "I need to check ./screenshot.png"
|
|
80
|
+
2. **Automatically load the image** before the next AI iteration
|
|
81
|
+
3. **Use visual context** for enhanced analysis and problem-solving
|
|
82
|
+
|
|
83
|
+
### Agentic Flow Example
|
|
84
|
+
|
|
85
|
+
```
|
|
86
|
+
👤 USER: "Analyze the system architecture"
|
|
87
|
+
|
|
88
|
+
🤖 AGENT: "Let me search for architecture documentation..."
|
|
89
|
+
🔍 Tool: search "architecture design"
|
|
90
|
+
📊 Result: "Found ./docs/system-diagram.png"
|
|
91
|
+
|
|
92
|
+
🤖 AGENT: "I found a system diagram at ./docs/system-diagram.png. Let me analyze it."
|
|
93
|
+
🖼️ AUTO: Image ./docs/system-diagram.png loaded into context
|
|
94
|
+
|
|
95
|
+
🤖 AGENT: "Based on the diagram I can see..."
|
|
96
|
+
💭 AI now has visual access to the diagram and can analyze it
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
### Trigger Patterns
|
|
100
|
+
|
|
101
|
+
The agent automatically loads images when it mentions:
|
|
102
|
+
|
|
103
|
+
- **Direct paths**: `./screenshot.png`, `/path/to/image.jpg`
|
|
104
|
+
- **Contextual references**: "the file diagram.png shows", "looking at chart.png"
|
|
105
|
+
- **Tool results**: When tools return paths to image files
|
|
106
|
+
- **Generated content**: "saved visualization as ./output.png"
|
|
107
|
+
|
|
108
|
+
### Benefits
|
|
109
|
+
|
|
110
|
+
- **🧠 Enhanced reasoning**: Agent gains visual understanding of referenced images
|
|
111
|
+
- **🔄 Seamless workflow**: No manual image loading required
|
|
112
|
+
- **⚡ Performance**: Intelligent caching prevents reloading
|
|
113
|
+
- **🔒 Security**: Same security validations as manual loading
|
|
114
|
+
- **📱 Persistence**: Images remain available throughout the conversation
|
|
115
|
+
|
|
116
|
+
## Security Considerations
|
|
117
|
+
|
|
118
|
+
### Path Restrictions
|
|
119
|
+
- Files must be within the allowed directory structure
|
|
120
|
+
- Prevents access to system files (e.g., `/etc/passwd`)
|
|
121
|
+
- Respects the `ALLOWED_FOLDERS` environment variable
|
|
122
|
+
|
|
123
|
+
### File Validation
|
|
124
|
+
- Verifies file existence before attempting to read
|
|
125
|
+
- Validates file extensions against supported image formats
|
|
126
|
+
- Handles file reading errors gracefully
|
|
127
|
+
|
|
128
|
+
### Error Handling
|
|
129
|
+
- Failed file reads are logged but don't interrupt processing
|
|
130
|
+
- Invalid paths are silently ignored
|
|
131
|
+
- Maintains functionality for valid images even if some fail
|
|
132
|
+
|
|
133
|
+
## Implementation Details
|
|
134
|
+
|
|
135
|
+
### Pattern Matching
|
|
136
|
+
The system uses an enhanced regex pattern to detect:
|
|
137
|
+
```javascript
|
|
138
|
+
/(?:data:image\/[a-zA-Z]*;base64,[A-Za-z0-9+/=]+|https?:\/\/(?:(?:private-user-images\.githubusercontent\.com|github\.com\/user-attachments\/assets)\/[^\s"'<>]+|[^\s"'<>]+\.(?:png|jpg|jpeg|webp|bmp|svg)(?:\?[^\s"'<>]*)?)|(?:\.?\.?\/)?[^\s"'<>]*\.(?:png|jpg|jpeg|webp|bmp|svg))/gi
|
|
139
|
+
```
|
|
140
|
+
|
|
141
|
+
### Processing Pipeline
|
|
142
|
+
1. **Pattern Detection** - Find all potential image references in text
|
|
143
|
+
2. **Classification** - Distinguish between URLs, base64 data, and local paths
|
|
144
|
+
3. **Validation** - Verify local file paths for security and existence
|
|
145
|
+
4. **Conversion** - Read local files and convert to base64 data URLs
|
|
146
|
+
5. **Integration** - Pass processed images to AI models
|
|
147
|
+
|
|
148
|
+
### File Size Limitations
|
|
149
|
+
- No explicit file size limits implemented
|
|
150
|
+
- Memory usage scales with image size
|
|
151
|
+
- Large images may impact performance
|
|
152
|
+
|
|
153
|
+
## Testing
|
|
154
|
+
|
|
155
|
+
Run the test suite to verify functionality:
|
|
156
|
+
```bash
|
|
157
|
+
cd examples/chat
|
|
158
|
+
node test-local-image-reading.js
|
|
159
|
+
```
|
|
160
|
+
|
|
161
|
+
The test covers:
|
|
162
|
+
- Basic local file detection and conversion
|
|
163
|
+
- Mixed URL and local file processing
|
|
164
|
+
- Relative path handling
|
|
165
|
+
- Security validation
|
|
166
|
+
- Error handling for missing files
|
|
167
|
+
|
|
168
|
+
## Backward Compatibility
|
|
169
|
+
|
|
170
|
+
This enhancement is fully backward compatible:
|
|
171
|
+
- Existing URL-based image handling unchanged
|
|
172
|
+
- Base64 data URL support maintained
|
|
173
|
+
- No breaking changes to existing APIs
|
|
174
|
+
|
|
175
|
+
## Environment Configuration
|
|
176
|
+
|
|
177
|
+
Set allowed folders to restrict file access:
|
|
178
|
+
```bash
|
|
179
|
+
export ALLOWED_FOLDERS="/path/to/project,/path/to/assets"
|
|
180
|
+
```
|
|
181
|
+
|
|
182
|
+
If no `ALLOWED_FOLDERS` is set, defaults to current working directory.
|
|
183
|
+
|
|
184
|
+
## Error Handling
|
|
185
|
+
|
|
186
|
+
The system gracefully handles various error conditions:
|
|
187
|
+
- **File not found**: Logged and ignored
|
|
188
|
+
- **Permission denied**: Logged and ignored
|
|
189
|
+
- **Invalid format**: Logged and ignored
|
|
190
|
+
- **Path traversal attempts**: Blocked by security validation
|
|
191
|
+
|
|
192
|
+
Enable debug mode to see detailed logging:
|
|
193
|
+
```javascript
|
|
194
|
+
const chat = new ProbeChat({ debug: true });
|
|
195
|
+
```
|
|
@@ -0,0 +1,400 @@
|
|
|
1
|
+
# MCP (Model Context Protocol) Integration Guide
|
|
2
|
+
|
|
3
|
+
## Overview
|
|
4
|
+
|
|
5
|
+
The Probe Chat application now supports the Model Context Protocol (MCP), enabling it to connect to external tool servers and extend its capabilities beyond the built-in code search tools. This integration maintains backward compatibility with the existing XML-based tool syntax while adding support for MCP tools that use JSON parameters.
|
|
6
|
+
|
|
7
|
+
## Key Features
|
|
8
|
+
|
|
9
|
+
- ✅ **Multiple Transport Support**: stdio, WebSocket, SSE, and HTTP
|
|
10
|
+
- ✅ **Claude-Compatible Configuration**: Uses similar configuration format to Claude's MCP setup
|
|
11
|
+
- ✅ **Hybrid XML/JSON Syntax**: Native tools use XML parameters, MCP tools use JSON in `<params>` tags
|
|
12
|
+
- ✅ **Vercel AI SDK v5 Compatible**: Full support for the latest AI SDK version
|
|
13
|
+
- ✅ **Automatic Tool Discovery**: Dynamically discovers and registers tools from MCP servers
|
|
14
|
+
- ✅ **Seamless Integration**: MCP tools appear alongside native tools in the system prompt
|
|
15
|
+
|
|
16
|
+
## Quick Start
|
|
17
|
+
|
|
18
|
+
### 1. Enable MCP in ProbeChat
|
|
19
|
+
|
|
20
|
+
Set the environment variable or pass the option:
|
|
21
|
+
|
|
22
|
+
```bash
|
|
23
|
+
# Via environment variable
|
|
24
|
+
export ENABLE_MCP=1
|
|
25
|
+
npm start
|
|
26
|
+
|
|
27
|
+
# Or via command line
|
|
28
|
+
probe-chat --enable-mcp
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
### 2. Configure MCP Servers
|
|
32
|
+
|
|
33
|
+
Create a `.mcp/config.json` file in your project or home directory:
|
|
34
|
+
|
|
35
|
+
```json
|
|
36
|
+
{
|
|
37
|
+
"mcpServers": {
|
|
38
|
+
"probe": {
|
|
39
|
+
"command": "npx",
|
|
40
|
+
"args": ["-y", "@probelabs/probe@latest", "mcp"],
|
|
41
|
+
"transport": "stdio",
|
|
42
|
+
"enabled": true
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
## Configuration
|
|
49
|
+
|
|
50
|
+
### Configuration File Locations
|
|
51
|
+
|
|
52
|
+
The system looks for MCP configuration in these locations (in order):
|
|
53
|
+
|
|
54
|
+
1. Environment variable: `MCP_CONFIG_PATH`
|
|
55
|
+
2. Project directory: `./.mcp/config.json`
|
|
56
|
+
3. Project directory: `./mcp.config.json`
|
|
57
|
+
4. Home directory: `~/.config/probe/mcp.json`
|
|
58
|
+
5. Home directory: `~/.mcp/config.json`
|
|
59
|
+
6. Claude config: `~/Library/Application Support/Claude/mcp_config.json` (macOS)
|
|
60
|
+
|
|
61
|
+
### Configuration Format
|
|
62
|
+
|
|
63
|
+
```json
|
|
64
|
+
{
|
|
65
|
+
"mcpServers": {
|
|
66
|
+
"server-name": {
|
|
67
|
+
"command": "command-to-run",
|
|
68
|
+
"args": ["arg1", "arg2"],
|
|
69
|
+
"transport": "stdio|websocket|sse|http",
|
|
70
|
+
"enabled": true|false,
|
|
71
|
+
"description": "Optional description",
|
|
72
|
+
"env": {
|
|
73
|
+
"ENV_VAR": "value"
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
},
|
|
77
|
+
"settings": {
|
|
78
|
+
"timeout": 30000,
|
|
79
|
+
"retryCount": 3,
|
|
80
|
+
"debug": false
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
### Environment Variables
|
|
86
|
+
|
|
87
|
+
You can also configure MCP servers via environment variables:
|
|
88
|
+
|
|
89
|
+
```bash
|
|
90
|
+
# Basic server configuration
|
|
91
|
+
export MCP_SERVERS_PROBE_COMMAND="npx"
|
|
92
|
+
export MCP_SERVERS_PROBE_ARGS="-y,@probelabs/probe@latest,mcp"
|
|
93
|
+
export MCP_SERVERS_PROBE_TRANSPORT="stdio"
|
|
94
|
+
export MCP_SERVERS_PROBE_ENABLED="true"
|
|
95
|
+
|
|
96
|
+
# WebSocket server
|
|
97
|
+
export MCP_SERVERS_CUSTOM_URL="ws://localhost:8080"
|
|
98
|
+
export MCP_SERVERS_CUSTOM_TRANSPORT="websocket"
|
|
99
|
+
export MCP_SERVERS_CUSTOM_ENABLED="true"
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
## Tool Syntax
|
|
103
|
+
|
|
104
|
+
### Native Tools (XML Parameters)
|
|
105
|
+
|
|
106
|
+
Native Probe tools continue to use XML parameter format:
|
|
107
|
+
|
|
108
|
+
```xml
|
|
109
|
+
<search>
|
|
110
|
+
<query>authentication</query>
|
|
111
|
+
<path>./src</path>
|
|
112
|
+
<exact>true</exact>
|
|
113
|
+
</search>
|
|
114
|
+
|
|
115
|
+
<query>
|
|
116
|
+
<pattern>class $NAME extends Component</pattern>
|
|
117
|
+
<language>javascript</language>
|
|
118
|
+
</query>
|
|
119
|
+
|
|
120
|
+
<extract>
|
|
121
|
+
<targets>file.js:10-20</targets>
|
|
122
|
+
<format>markdown</format>
|
|
123
|
+
</extract>
|
|
124
|
+
```
|
|
125
|
+
|
|
126
|
+
### MCP Tools (JSON Parameters)
|
|
127
|
+
|
|
128
|
+
MCP tools use JSON within a `<params>` tag:
|
|
129
|
+
|
|
130
|
+
```xml
|
|
131
|
+
<probe_search_code>
|
|
132
|
+
<params>
|
|
133
|
+
{
|
|
134
|
+
"query": "authentication",
|
|
135
|
+
"path": "/absolute/path/to/project",
|
|
136
|
+
"max_results": 10,
|
|
137
|
+
"session": "session-id"
|
|
138
|
+
}
|
|
139
|
+
</params>
|
|
140
|
+
</probe_search_code>
|
|
141
|
+
|
|
142
|
+
<filesystem_read>
|
|
143
|
+
<params>
|
|
144
|
+
{
|
|
145
|
+
"path": "/etc/hosts",
|
|
146
|
+
"encoding": "utf-8"
|
|
147
|
+
}
|
|
148
|
+
</params>
|
|
149
|
+
</filesystem_read>
|
|
150
|
+
```
|
|
151
|
+
|
|
152
|
+
## Available MCP Servers
|
|
153
|
+
|
|
154
|
+
### Probe MCP Server
|
|
155
|
+
|
|
156
|
+
The official Probe MCP server provides code search capabilities:
|
|
157
|
+
|
|
158
|
+
```json
|
|
159
|
+
{
|
|
160
|
+
"probe": {
|
|
161
|
+
"command": "npx",
|
|
162
|
+
"args": ["-y", "@probelabs/probe@latest", "mcp"],
|
|
163
|
+
"transport": "stdio",
|
|
164
|
+
"enabled": true
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
```
|
|
168
|
+
|
|
169
|
+
**Tools provided:**
|
|
170
|
+
- `probe_search_code` - Elasticsearch-style code search
|
|
171
|
+
- `probe_query_code` - AST-based pattern matching
|
|
172
|
+
- `probe_extract_code` - Extract code blocks by file/line
|
|
173
|
+
|
|
174
|
+
### Filesystem Server
|
|
175
|
+
|
|
176
|
+
Access local filesystem:
|
|
177
|
+
|
|
178
|
+
```json
|
|
179
|
+
{
|
|
180
|
+
"filesystem": {
|
|
181
|
+
"command": "npx",
|
|
182
|
+
"args": ["-y", "@modelcontextprotocol/server-filesystem", "/path/to/allow"],
|
|
183
|
+
"transport": "stdio",
|
|
184
|
+
"enabled": true
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
```
|
|
188
|
+
|
|
189
|
+
### GitHub Server
|
|
190
|
+
|
|
191
|
+
Interact with GitHub API:
|
|
192
|
+
|
|
193
|
+
```json
|
|
194
|
+
{
|
|
195
|
+
"github": {
|
|
196
|
+
"command": "npx",
|
|
197
|
+
"args": ["-y", "@modelcontextprotocol/server-github"],
|
|
198
|
+
"transport": "stdio",
|
|
199
|
+
"enabled": true,
|
|
200
|
+
"env": {
|
|
201
|
+
"GITHUB_TOKEN": "your-token-here"
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
```
|
|
206
|
+
|
|
207
|
+
### PostgreSQL Server
|
|
208
|
+
|
|
209
|
+
Database operations:
|
|
210
|
+
|
|
211
|
+
```json
|
|
212
|
+
{
|
|
213
|
+
"postgres": {
|
|
214
|
+
"command": "npx",
|
|
215
|
+
"args": ["-y", "@modelcontextprotocol/server-postgres"],
|
|
216
|
+
"transport": "stdio",
|
|
217
|
+
"enabled": true,
|
|
218
|
+
"env": {
|
|
219
|
+
"DATABASE_URL": "postgresql://user:pass@localhost/db"
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
```
|
|
224
|
+
|
|
225
|
+
## Programmatic Usage
|
|
226
|
+
|
|
227
|
+
### Using ProbeChat with MCP
|
|
228
|
+
|
|
229
|
+
```javascript
|
|
230
|
+
import { ProbeChat } from './probeChat.js';
|
|
231
|
+
|
|
232
|
+
// Initialize with MCP enabled
|
|
233
|
+
const chat = new ProbeChat({
|
|
234
|
+
enableMcp: true,
|
|
235
|
+
mcpServers: {
|
|
236
|
+
mcpServers: {
|
|
237
|
+
'probe': {
|
|
238
|
+
command: 'npx',
|
|
239
|
+
args: ['-y', '@probelabs/probe@latest', 'mcp'],
|
|
240
|
+
transport: 'stdio',
|
|
241
|
+
enabled: true
|
|
242
|
+
}
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
});
|
|
246
|
+
|
|
247
|
+
// Use chat normally - MCP tools are automatically available
|
|
248
|
+
const response = await chat.chat('Search for authentication code');
|
|
249
|
+
|
|
250
|
+
// Cleanup when done
|
|
251
|
+
await chat.cleanup();
|
|
252
|
+
```
|
|
253
|
+
|
|
254
|
+
### Using MCP Client Manager Directly
|
|
255
|
+
|
|
256
|
+
```javascript
|
|
257
|
+
import { MCPClientManager } from './mcpClientV2.js';
|
|
258
|
+
|
|
259
|
+
// Create manager
|
|
260
|
+
const manager = new MCPClientManager({ debug: true });
|
|
261
|
+
|
|
262
|
+
// Initialize with configuration
|
|
263
|
+
await manager.initialize({
|
|
264
|
+
mcpServers: {
|
|
265
|
+
'probe': {
|
|
266
|
+
command: 'npx',
|
|
267
|
+
args: ['-y', '@probelabs/probe@latest', 'mcp'],
|
|
268
|
+
transport: 'stdio',
|
|
269
|
+
enabled: true
|
|
270
|
+
}
|
|
271
|
+
}
|
|
272
|
+
});
|
|
273
|
+
|
|
274
|
+
// Call a tool
|
|
275
|
+
const result = await manager.callTool('probe_search_code', {
|
|
276
|
+
query: 'function',
|
|
277
|
+
path: '/path/to/project'
|
|
278
|
+
});
|
|
279
|
+
|
|
280
|
+
// Get tools for Vercel AI SDK
|
|
281
|
+
const tools = manager.getVercelTools();
|
|
282
|
+
|
|
283
|
+
// Cleanup
|
|
284
|
+
await manager.disconnect();
|
|
285
|
+
```
|
|
286
|
+
|
|
287
|
+
### Integration with Vercel AI SDK v5
|
|
288
|
+
|
|
289
|
+
```javascript
|
|
290
|
+
import { generateText, tool } from 'ai';
|
|
291
|
+
import { z } from 'zod';
|
|
292
|
+
import { MCPClientManager } from './mcpClientV2.js';
|
|
293
|
+
|
|
294
|
+
// Initialize MCP
|
|
295
|
+
const mcpManager = new MCPClientManager();
|
|
296
|
+
await mcpManager.initialize();
|
|
297
|
+
|
|
298
|
+
// Get tools in Vercel format
|
|
299
|
+
const mcpTools = mcpManager.getVercelTools();
|
|
300
|
+
|
|
301
|
+
// Wrap tools for AI SDK v5
|
|
302
|
+
const aiTools = {};
|
|
303
|
+
for (const [name, mcpTool] of Object.entries(mcpTools)) {
|
|
304
|
+
aiTools[name] = tool({
|
|
305
|
+
description: mcpTool.description,
|
|
306
|
+
inputSchema: convertToZodSchema(mcpTool.inputSchema),
|
|
307
|
+
execute: mcpTool.execute
|
|
308
|
+
});
|
|
309
|
+
}
|
|
310
|
+
|
|
311
|
+
// Use with AI
|
|
312
|
+
const result = await generateText({
|
|
313
|
+
model: yourModel,
|
|
314
|
+
messages: [...],
|
|
315
|
+
tools: aiTools
|
|
316
|
+
});
|
|
317
|
+
```
|
|
318
|
+
|
|
319
|
+
## Testing
|
|
320
|
+
|
|
321
|
+
### Test MCP Server Connection
|
|
322
|
+
|
|
323
|
+
```bash
|
|
324
|
+
node test-mcp-probe-server.js
|
|
325
|
+
```
|
|
326
|
+
|
|
327
|
+
### Test Full Integration
|
|
328
|
+
|
|
329
|
+
```bash
|
|
330
|
+
node test-full-mcp-integration.js
|
|
331
|
+
```
|
|
332
|
+
|
|
333
|
+
### Test with AI Model
|
|
334
|
+
|
|
335
|
+
```bash
|
|
336
|
+
# Requires API key
|
|
337
|
+
export ANTHROPIC_API_KEY="your-key"
|
|
338
|
+
node test-mcp-with-ai.js
|
|
339
|
+
```
|
|
340
|
+
|
|
341
|
+
## Troubleshooting
|
|
342
|
+
|
|
343
|
+
### MCP Server Not Connecting
|
|
344
|
+
|
|
345
|
+
1. Check that the command exists and is executable
|
|
346
|
+
2. For npx commands, ensure npm is installed
|
|
347
|
+
3. Check server logs with `DEBUG_MCP=1`
|
|
348
|
+
|
|
349
|
+
### Tools Not Appearing
|
|
350
|
+
|
|
351
|
+
1. Ensure server is enabled in configuration
|
|
352
|
+
2. Check that MCP is enabled (`ENABLE_MCP=1`)
|
|
353
|
+
3. Verify server provides tools with `listTools` method
|
|
354
|
+
|
|
355
|
+
### JSON Parsing Errors
|
|
356
|
+
|
|
357
|
+
1. Ensure JSON in `<params>` tag is valid
|
|
358
|
+
2. Use proper escaping for special characters
|
|
359
|
+
3. Check quotes are properly balanced
|
|
360
|
+
|
|
361
|
+
## Architecture
|
|
362
|
+
|
|
363
|
+
### Components
|
|
364
|
+
|
|
365
|
+
1. **MCPClientManager** - Manages connections to multiple MCP servers
|
|
366
|
+
2. **MCPXmlBridge** - Bridges XML syntax with MCP JSON tools
|
|
367
|
+
3. **ProbeChat** - Main chat interface with MCP support
|
|
368
|
+
4. **Transport Layers** - stdio, WebSocket, SSE, HTTP support
|
|
369
|
+
|
|
370
|
+
### Flow
|
|
371
|
+
|
|
372
|
+
1. ProbeChat initializes with MCP enabled
|
|
373
|
+
2. MCPClientManager connects to configured servers
|
|
374
|
+
3. Tools are discovered and registered
|
|
375
|
+
4. MCPXmlBridge converts tools to XML definitions
|
|
376
|
+
5. System prompt includes both native and MCP tools
|
|
377
|
+
6. AI generates tool calls in appropriate format
|
|
378
|
+
7. Parser distinguishes native (XML) vs MCP (JSON) tools
|
|
379
|
+
8. Tools are executed and results returned
|
|
380
|
+
|
|
381
|
+
## Migration from v4 to v5
|
|
382
|
+
|
|
383
|
+
The integration includes full support for Vercel AI SDK v5:
|
|
384
|
+
|
|
385
|
+
1. **Tool definitions**: Changed from `parameters` to `inputSchema`
|
|
386
|
+
2. **Message types**: Support for new `UIMessage` and `ModelMessage` types
|
|
387
|
+
3. **MCP support**: Native integration with `experimental_createMCPClient`
|
|
388
|
+
|
|
389
|
+
## Future Enhancements
|
|
390
|
+
|
|
391
|
+
- [ ] Support for MCP resources and prompts
|
|
392
|
+
- [ ] Tool result caching and optimization
|
|
393
|
+
- [ ] Dynamic tool loading/unloading
|
|
394
|
+
- [ ] MCP server health monitoring
|
|
395
|
+
- [ ] Tool usage analytics
|
|
396
|
+
- [ ] Custom MCP server development kit
|
|
397
|
+
|
|
398
|
+
## License
|
|
399
|
+
|
|
400
|
+
This MCP integration is part of the Probe Chat application and follows the same license terms.
|