@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,161 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Test direct connection to Probe MCP server
|
|
5
|
+
* This tests the MCP server without requiring AI API keys
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
import { MCPClientManager } from '@probelabs/probe/agent/mcp';
|
|
9
|
+
import { dirname, join } from 'path';
|
|
10
|
+
import { fileURLToPath } from 'url';
|
|
11
|
+
|
|
12
|
+
async function testProbeMCP() {
|
|
13
|
+
console.log('=== Testing Probe MCP Server Connection ===\n');
|
|
14
|
+
|
|
15
|
+
// Create configuration for Probe MCP server
|
|
16
|
+
const config = {
|
|
17
|
+
mcpServers: {
|
|
18
|
+
'probe': {
|
|
19
|
+
command: 'npx',
|
|
20
|
+
args: ['-y', '@probelabs/probe@latest', 'mcp'],
|
|
21
|
+
transport: 'stdio',
|
|
22
|
+
enabled: true
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
};
|
|
26
|
+
|
|
27
|
+
const manager = new MCPClientManager({ debug: true });
|
|
28
|
+
|
|
29
|
+
try {
|
|
30
|
+
// Step 1: Connect to server
|
|
31
|
+
console.log('๐ก Connecting to Probe MCP server...\n');
|
|
32
|
+
const result = await manager.initialize(config);
|
|
33
|
+
|
|
34
|
+
console.log(`\nโ
Connected successfully!`);
|
|
35
|
+
console.log(`๐ Connection summary:`);
|
|
36
|
+
console.log(` - Servers connected: ${result.connected}/${result.total}`);
|
|
37
|
+
console.log(` - Total tools available: ${result.tools.length}`);
|
|
38
|
+
console.log(` - Tool names: ${result.tools.join(', ')}\n`);
|
|
39
|
+
|
|
40
|
+
// Step 2: Get tool details
|
|
41
|
+
const tools = manager.getTools();
|
|
42
|
+
console.log('๐ ๏ธ Tool Details:');
|
|
43
|
+
console.log('โ'.repeat(60));
|
|
44
|
+
|
|
45
|
+
for (const [name, tool] of Object.entries(tools)) {
|
|
46
|
+
console.log(`\n๐ฆ ${name}`);
|
|
47
|
+
console.log(` Server: ${tool.serverName}`);
|
|
48
|
+
console.log(` Description: ${tool.description}`);
|
|
49
|
+
|
|
50
|
+
if (tool.inputSchema) {
|
|
51
|
+
console.log(' Parameters:');
|
|
52
|
+
const props = tool.inputSchema.properties || {};
|
|
53
|
+
for (const [param, schema] of Object.entries(props)) {
|
|
54
|
+
const required = tool.inputSchema.required?.includes(param) ? ' (required)' : '';
|
|
55
|
+
console.log(` - ${param}: ${schema.type}${required} - ${schema.description || 'No description'}`);
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
console.log('\n' + 'โ'.repeat(60));
|
|
61
|
+
|
|
62
|
+
// Step 3: Test actual tool calls
|
|
63
|
+
console.log('\n๐งช Testing Tool Execution:\n');
|
|
64
|
+
|
|
65
|
+
// Test search_code
|
|
66
|
+
console.log('1. Testing probe_search_code...');
|
|
67
|
+
try {
|
|
68
|
+
const searchResult = await manager.callTool('probe_search_code', {
|
|
69
|
+
query: 'MCP',
|
|
70
|
+
path: process.cwd(),
|
|
71
|
+
max_results: 2
|
|
72
|
+
});
|
|
73
|
+
|
|
74
|
+
if (searchResult.content && searchResult.content[0]) {
|
|
75
|
+
const content = searchResult.content[0].text;
|
|
76
|
+
const lines = content.split('\n').slice(0, 10);
|
|
77
|
+
console.log(' โ
Search successful! First 10 lines of results:');
|
|
78
|
+
lines.forEach(line => console.log(` ${line}`));
|
|
79
|
+
}
|
|
80
|
+
} catch (error) {
|
|
81
|
+
console.log(` โ Search failed: ${error.message}`);
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
// Test query_code
|
|
85
|
+
console.log('\n2. Testing probe_query_code...');
|
|
86
|
+
try {
|
|
87
|
+
const queryResult = await manager.callTool('probe_query_code', {
|
|
88
|
+
pattern: 'class $NAME',
|
|
89
|
+
path: process.cwd(),
|
|
90
|
+
language: 'javascript',
|
|
91
|
+
max_results: 2
|
|
92
|
+
});
|
|
93
|
+
|
|
94
|
+
if (queryResult.content && queryResult.content[0]) {
|
|
95
|
+
const content = queryResult.content[0].text;
|
|
96
|
+
const lines = content.split('\n').slice(0, 10);
|
|
97
|
+
console.log(' โ
Query successful! First 10 lines of results:');
|
|
98
|
+
lines.forEach(line => console.log(` ${line}`));
|
|
99
|
+
}
|
|
100
|
+
} catch (error) {
|
|
101
|
+
console.log(` โ Query failed: ${error.message}`);
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
// Test extract_code
|
|
105
|
+
console.log('\n3. Testing probe_extract_code...');
|
|
106
|
+
try {
|
|
107
|
+
const extractResult = await manager.callTool('probe_extract_code', {
|
|
108
|
+
files: [`${join(dirname(fileURLToPath(import.meta.url)), 'probeChat.js')}:1-20`]
|
|
109
|
+
});
|
|
110
|
+
|
|
111
|
+
if (extractResult.content && extractResult.content[0]) {
|
|
112
|
+
const content = extractResult.content[0].text;
|
|
113
|
+
const lines = content.split('\n').slice(0, 10);
|
|
114
|
+
console.log(' โ
Extract successful! First 10 lines:');
|
|
115
|
+
lines.forEach(line => console.log(` ${line}`));
|
|
116
|
+
}
|
|
117
|
+
} catch (error) {
|
|
118
|
+
console.log(` โ Extract failed: ${error.message}`);
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
// Step 4: Test for Vercel AI SDK compatibility
|
|
122
|
+
console.log('\n\n๐ Testing Vercel AI SDK Compatibility:\n');
|
|
123
|
+
const vercelTools = manager.getVercelTools();
|
|
124
|
+
console.log(`โ
${Object.keys(vercelTools).length} tools converted for Vercel AI SDK`);
|
|
125
|
+
|
|
126
|
+
// Test executing a tool through Vercel wrapper
|
|
127
|
+
const searchTool = vercelTools['probe_search_code'];
|
|
128
|
+
if (searchTool) {
|
|
129
|
+
console.log('\nTesting Vercel-wrapped tool execution...');
|
|
130
|
+
try {
|
|
131
|
+
const result = await searchTool.execute({
|
|
132
|
+
query: 'export',
|
|
133
|
+
path: process.cwd(),
|
|
134
|
+
max_results: 1
|
|
135
|
+
});
|
|
136
|
+
|
|
137
|
+
console.log(' โ
Vercel wrapper works! Result preview:');
|
|
138
|
+
console.log(` ${result.substring(0, 200)}...`);
|
|
139
|
+
} catch (error) {
|
|
140
|
+
console.log(` โ Vercel wrapper failed: ${error.message}`);
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
// Cleanup
|
|
145
|
+
console.log('\n\n๐ Disconnecting...');
|
|
146
|
+
await manager.disconnect();
|
|
147
|
+
console.log('โ
Disconnected successfully');
|
|
148
|
+
|
|
149
|
+
console.log('\n' + '='.repeat(60));
|
|
150
|
+
console.log('โจ All tests completed successfully!');
|
|
151
|
+
console.log('='.repeat(60));
|
|
152
|
+
|
|
153
|
+
} catch (error) {
|
|
154
|
+
console.error('\nโ Test failed:', error);
|
|
155
|
+
await manager.disconnect().catch(() => {});
|
|
156
|
+
process.exit(1);
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
// Run the test
|
|
161
|
+
testProbeMCP().catch(console.error);
|
|
@@ -0,0 +1,279 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Test MCP integration with real AI model
|
|
5
|
+
* This tests the full flow: MCP server -> Tools -> AI -> Response
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
import 'dotenv/config';
|
|
9
|
+
import { createAnthropic } from '@ai-sdk/anthropic';
|
|
10
|
+
import { createOpenAI } from '@ai-sdk/openai';
|
|
11
|
+
import { createGoogleGenerativeAI } from '@ai-sdk/google';
|
|
12
|
+
import { generateText, tool } from 'ai';
|
|
13
|
+
import { z } from 'zod';
|
|
14
|
+
import { MCPClientManager } from '@probelabs/probe/agent/mcp';
|
|
15
|
+
import { writeFileSync } from 'fs';
|
|
16
|
+
|
|
17
|
+
// Check for API keys
|
|
18
|
+
const hasAnthropic = !!process.env.ANTHROPIC_API_KEY;
|
|
19
|
+
const hasOpenAI = !!process.env.OPENAI_API_KEY;
|
|
20
|
+
const hasGoogle = !!process.env.GOOGLE_API_KEY || !!process.env.GOOGLE_AI_API_KEY;
|
|
21
|
+
|
|
22
|
+
if (!hasAnthropic && !hasOpenAI && !hasGoogle) {
|
|
23
|
+
console.error('โ No API keys found. Please set ANTHROPIC_API_KEY, OPENAI_API_KEY, or GOOGLE_API_KEY');
|
|
24
|
+
process.exit(1);
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
async function testMCPWithAI() {
|
|
28
|
+
console.log('=== Testing MCP Integration with AI ===\n');
|
|
29
|
+
|
|
30
|
+
// Step 1: Create MCP configuration for Probe
|
|
31
|
+
const mcpConfig = {
|
|
32
|
+
mcpServers: {
|
|
33
|
+
'probe': {
|
|
34
|
+
command: 'npx',
|
|
35
|
+
args: ['-y', '@probelabs/probe@latest', 'mcp'],
|
|
36
|
+
transport: 'stdio',
|
|
37
|
+
enabled: true
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
};
|
|
41
|
+
|
|
42
|
+
console.log('๐ก Connecting to Probe MCP server...');
|
|
43
|
+
const mcpManager = new MCPClientManager({ debug: true });
|
|
44
|
+
|
|
45
|
+
try {
|
|
46
|
+
const initResult = await mcpManager.initialize(mcpConfig);
|
|
47
|
+
console.log(`โ
Connected to ${initResult.connected} server(s)`);
|
|
48
|
+
console.log(`๐ฆ Available tools: ${initResult.tools.join(', ')}\n`);
|
|
49
|
+
} catch (error) {
|
|
50
|
+
console.error('โ Failed to connect to MCP server:', error);
|
|
51
|
+
process.exit(1);
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
// Step 2: Get tools from MCP server
|
|
55
|
+
const mcpTools = mcpManager.getVercelTools();
|
|
56
|
+
console.log('๐ ๏ธ MCP Tools loaded:', Object.keys(mcpTools).length);
|
|
57
|
+
|
|
58
|
+
// Step 3: Create wrapped tools for AI SDK v5
|
|
59
|
+
const aiTools = {};
|
|
60
|
+
for (const [name, mcpTool] of Object.entries(mcpTools)) {
|
|
61
|
+
aiTools[name] = tool({
|
|
62
|
+
description: mcpTool.description,
|
|
63
|
+
inputSchema: z.object(
|
|
64
|
+
Object.entries(mcpTool.inputSchema?.properties || {}).reduce((acc, [key, schema]) => {
|
|
65
|
+
const isRequired = mcpTool.inputSchema?.required?.includes(key);
|
|
66
|
+
|
|
67
|
+
// Convert JSON schema to Zod schema (simplified)
|
|
68
|
+
let zodSchema;
|
|
69
|
+
if (schema.type === 'string') {
|
|
70
|
+
zodSchema = z.string();
|
|
71
|
+
} else if (schema.type === 'number') {
|
|
72
|
+
zodSchema = z.number();
|
|
73
|
+
} else if (schema.type === 'boolean') {
|
|
74
|
+
zodSchema = z.boolean();
|
|
75
|
+
} else if (schema.type === 'array') {
|
|
76
|
+
// Properly define array items based on the schema
|
|
77
|
+
if (schema.items?.type === 'string') {
|
|
78
|
+
zodSchema = z.array(z.string());
|
|
79
|
+
} else if (schema.items?.type === 'number') {
|
|
80
|
+
zodSchema = z.array(z.number());
|
|
81
|
+
} else {
|
|
82
|
+
zodSchema = z.array(z.string()); // Default to string array
|
|
83
|
+
}
|
|
84
|
+
} else {
|
|
85
|
+
zodSchema = z.any();
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
acc[key] = isRequired ? zodSchema : zodSchema.optional();
|
|
89
|
+
return acc;
|
|
90
|
+
}, {})
|
|
91
|
+
),
|
|
92
|
+
execute: mcpTool.execute
|
|
93
|
+
});
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
console.log('โ
Tools wrapped for AI SDK v5\n');
|
|
97
|
+
|
|
98
|
+
// Step 4: Choose AI model
|
|
99
|
+
let model;
|
|
100
|
+
if (hasGoogle) {
|
|
101
|
+
const google = createGoogleGenerativeAI({
|
|
102
|
+
apiKey: process.env.GOOGLE_API_KEY || process.env.GOOGLE_AI_API_KEY
|
|
103
|
+
});
|
|
104
|
+
model = google('gemini-2.0-flash-exp');
|
|
105
|
+
console.log('๐ค Using Google Gemini 2.0 Flash');
|
|
106
|
+
} else if (hasAnthropic) {
|
|
107
|
+
const anthropic = createAnthropic();
|
|
108
|
+
model = anthropic('claude-3-5-haiku-20241022');
|
|
109
|
+
console.log('๐ค Using Claude 3.5 Haiku');
|
|
110
|
+
} else {
|
|
111
|
+
const openai = createOpenAI();
|
|
112
|
+
model = openai('gpt-4o-mini');
|
|
113
|
+
console.log('๐ค Using GPT-4o Mini');
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
// Step 5: Test queries with the AI
|
|
117
|
+
const testQueries = [
|
|
118
|
+
{
|
|
119
|
+
name: 'Search Test',
|
|
120
|
+
query: 'Search for functions that handle MCP or Model Context Protocol in this project',
|
|
121
|
+
expectedTool: 'probe_search_code'
|
|
122
|
+
},
|
|
123
|
+
{
|
|
124
|
+
name: 'Query Test',
|
|
125
|
+
query: 'Find all JavaScript arrow functions that take options as a parameter',
|
|
126
|
+
expectedTool: 'probe_query_code'
|
|
127
|
+
},
|
|
128
|
+
{
|
|
129
|
+
name: 'Extract Test',
|
|
130
|
+
query: 'Extract the MCPClientManager class from mcpClientV2.js',
|
|
131
|
+
expectedTool: 'probe_extract_code'
|
|
132
|
+
}
|
|
133
|
+
];
|
|
134
|
+
|
|
135
|
+
console.log('\n=== Running AI Tests with MCP Tools ===\n');
|
|
136
|
+
|
|
137
|
+
for (const test of testQueries) {
|
|
138
|
+
console.log(`๐ Test: ${test.name}`);
|
|
139
|
+
console.log(` Query: "${test.query}"`);
|
|
140
|
+
|
|
141
|
+
try {
|
|
142
|
+
const startTime = Date.now();
|
|
143
|
+
|
|
144
|
+
// Call AI with MCP tools
|
|
145
|
+
const result = await generateText({
|
|
146
|
+
model,
|
|
147
|
+
messages: [
|
|
148
|
+
{
|
|
149
|
+
role: 'system',
|
|
150
|
+
content: `You are a code analysis assistant with access to MCP tools for searching and analyzing code.
|
|
151
|
+
Available tools:
|
|
152
|
+
- probe_search_code: Search for code using keywords
|
|
153
|
+
- probe_query_code: Query code using AST patterns
|
|
154
|
+
- probe_extract_code: Extract specific code blocks
|
|
155
|
+
|
|
156
|
+
Always use the appropriate tool to answer questions about code.
|
|
157
|
+
Set the path parameter to "${process.cwd()}" for searches.`
|
|
158
|
+
},
|
|
159
|
+
{
|
|
160
|
+
role: 'user',
|
|
161
|
+
content: test.query
|
|
162
|
+
}
|
|
163
|
+
],
|
|
164
|
+
tools: aiTools,
|
|
165
|
+
maxSteps: 3,
|
|
166
|
+
temperature: 0.3
|
|
167
|
+
});
|
|
168
|
+
|
|
169
|
+
const duration = Date.now() - startTime;
|
|
170
|
+
|
|
171
|
+
// Check if the expected tool was used
|
|
172
|
+
const toolCalls = result.steps?.filter(step => step.toolCalls?.length > 0) || [];
|
|
173
|
+
const usedTools = toolCalls.flatMap(step =>
|
|
174
|
+
step.toolCalls.map(call => call.toolName)
|
|
175
|
+
);
|
|
176
|
+
|
|
177
|
+
console.log(` โ
Response received in ${duration}ms`);
|
|
178
|
+
console.log(` ๐ง Tools used: ${usedTools.join(', ') || 'none'}`);
|
|
179
|
+
|
|
180
|
+
if (test.expectedTool && !usedTools.includes(test.expectedTool)) {
|
|
181
|
+
console.log(` โ ๏ธ Expected tool ${test.expectedTool} was not used`);
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
// Show a preview of the response
|
|
185
|
+
const preview = result.text.substring(0, 200);
|
|
186
|
+
console.log(` ๐ Response preview: ${preview}${result.text.length > 200 ? '...' : ''}`);
|
|
187
|
+
|
|
188
|
+
// Log token usage
|
|
189
|
+
if (result.usage) {
|
|
190
|
+
console.log(` ๐ฐ Tokens: ${result.usage.promptTokens} prompt, ${result.usage.completionTokens} completion`);
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
console.log('');
|
|
194
|
+
} catch (error) {
|
|
195
|
+
console.error(` โ Test failed: ${error.message}\n`);
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
|
|
199
|
+
// Step 6: Interactive test with complex query
|
|
200
|
+
console.log('=== Complex Query Test ===\n');
|
|
201
|
+
|
|
202
|
+
const complexQuery = `Using the MCP tools available, help me understand how the MCP integration works in this codebase.
|
|
203
|
+
Specifically:
|
|
204
|
+
1. Search for MCP-related code
|
|
205
|
+
2. Find the main MCP client implementation
|
|
206
|
+
3. Extract key functions that handle MCP connections`;
|
|
207
|
+
|
|
208
|
+
console.log('๐ Complex query:', complexQuery.replace(/\n\s+/g, ' '));
|
|
209
|
+
|
|
210
|
+
try {
|
|
211
|
+
const result = await generateText({
|
|
212
|
+
model,
|
|
213
|
+
messages: [
|
|
214
|
+
{
|
|
215
|
+
role: 'system',
|
|
216
|
+
content: `You are a code analysis expert. Use the MCP tools to thoroughly analyze code.
|
|
217
|
+
The codebase is located at: ${process.cwd()}
|
|
218
|
+
Be systematic and use multiple tools to gather comprehensive information.`
|
|
219
|
+
},
|
|
220
|
+
{
|
|
221
|
+
role: 'user',
|
|
222
|
+
content: complexQuery
|
|
223
|
+
}
|
|
224
|
+
],
|
|
225
|
+
tools: aiTools,
|
|
226
|
+
maxSteps: 10,
|
|
227
|
+
temperature: 0.3
|
|
228
|
+
});
|
|
229
|
+
|
|
230
|
+
console.log('\n๐ Analysis Results:');
|
|
231
|
+
console.log('โ'.repeat(50));
|
|
232
|
+
console.log(result.text);
|
|
233
|
+
console.log('โ'.repeat(50));
|
|
234
|
+
|
|
235
|
+
// Save detailed results
|
|
236
|
+
const reportPath = '/tmp/mcp-ai-test-report.md';
|
|
237
|
+
const report = `# MCP Integration Test Report
|
|
238
|
+
|
|
239
|
+
## Test Date
|
|
240
|
+
${new Date().toISOString()}
|
|
241
|
+
|
|
242
|
+
## Configuration
|
|
243
|
+
- Model: ${model.modelId}
|
|
244
|
+
- MCP Servers: ${Object.keys(mcpConfig.mcpServers).join(', ')}
|
|
245
|
+
- Available Tools: ${Object.keys(aiTools).join(', ')}
|
|
246
|
+
|
|
247
|
+
## Query
|
|
248
|
+
${complexQuery}
|
|
249
|
+
|
|
250
|
+
## Response
|
|
251
|
+
${result.text}
|
|
252
|
+
|
|
253
|
+
## Tool Usage
|
|
254
|
+
${result.steps?.map((step, i) =>
|
|
255
|
+
step.toolCalls?.map(call =>
|
|
256
|
+
`### Step ${i + 1}: ${call.toolName}\n\`\`\`json\n${JSON.stringify(call.args, null, 2)}\n\`\`\``
|
|
257
|
+
).join('\n')
|
|
258
|
+
).join('\n') || 'No tools used'}
|
|
259
|
+
|
|
260
|
+
## Token Usage
|
|
261
|
+
- Prompt Tokens: ${result.usage?.promptTokens || 'N/A'}
|
|
262
|
+
- Completion Tokens: ${result.usage?.completionTokens || 'N/A'}
|
|
263
|
+
- Total Tokens: ${result.usage?.totalTokens || 'N/A'}
|
|
264
|
+
`;
|
|
265
|
+
|
|
266
|
+
writeFileSync(reportPath, report);
|
|
267
|
+
console.log(`\n๐ Detailed report saved to: ${reportPath}`);
|
|
268
|
+
|
|
269
|
+
} catch (error) {
|
|
270
|
+
console.error('โ Complex query failed:', error.message);
|
|
271
|
+
}
|
|
272
|
+
|
|
273
|
+
// Cleanup
|
|
274
|
+
await mcpManager.disconnect();
|
|
275
|
+
console.log('\nโ
MCP connections closed');
|
|
276
|
+
}
|
|
277
|
+
|
|
278
|
+
// Run the test
|
|
279
|
+
testMCPWithAI().catch(console.error);
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
import { promises as fs } from 'fs';
|
|
2
|
+
import { resolve } from 'path';
|
|
3
|
+
import { ProbeAgent } from '../../npm/src/agent/ProbeAgent.js';
|
|
4
|
+
|
|
5
|
+
// Test that multiple allowed directories work correctly
|
|
6
|
+
async function testMultipleAllowedDirectories() {
|
|
7
|
+
console.log('๐งช Testing multiple allowed directories...\n');
|
|
8
|
+
|
|
9
|
+
// Create test directories and files
|
|
10
|
+
const testDirs = [
|
|
11
|
+
'./test-images-1',
|
|
12
|
+
'./test-images-2',
|
|
13
|
+
'./test-images-3'
|
|
14
|
+
];
|
|
15
|
+
|
|
16
|
+
const testFiles = [
|
|
17
|
+
{ dir: './test-images-1', file: 'image1.png' },
|
|
18
|
+
{ dir: './test-images-2', file: 'image2.jpg' },
|
|
19
|
+
{ dir: './test-images-3', file: 'image3.webp' }
|
|
20
|
+
];
|
|
21
|
+
|
|
22
|
+
try {
|
|
23
|
+
// Create test directories and dummy image files
|
|
24
|
+
console.log('๐ Creating test directories and files...');
|
|
25
|
+
for (const dir of testDirs) {
|
|
26
|
+
await fs.mkdir(dir, { recursive: true });
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
// Create small dummy image files (just text files with image extensions for testing)
|
|
30
|
+
const dummyImageContent = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mNkYPhfDwAChwGA60e6kgAAAABJRU5ErkJggg==';
|
|
31
|
+
|
|
32
|
+
for (const testFile of testFiles) {
|
|
33
|
+
await fs.writeFile(resolve(testFile.dir, testFile.file), dummyImageContent);
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
// Test 1: Create ProbeAgent with only first directory allowed
|
|
37
|
+
console.log('\n๐ Test 1: Single allowed directory');
|
|
38
|
+
const agent1 = new ProbeAgent({
|
|
39
|
+
debug: true,
|
|
40
|
+
allowedFolders: ['./test-images-1']
|
|
41
|
+
});
|
|
42
|
+
|
|
43
|
+
const result1a = await agent1.loadImageIfValid('./test-images-1/image1.png');
|
|
44
|
+
const result1b = await agent1.loadImageIfValid('./test-images-2/image2.jpg');
|
|
45
|
+
|
|
46
|
+
console.log(` โ Image in allowed dir 1: ${result1a} (expected: true)`);
|
|
47
|
+
console.log(` โ Image in disallowed dir 2: ${result1b} (expected: false)`);
|
|
48
|
+
|
|
49
|
+
// Test 2: Create ProbeAgent with multiple allowed directories
|
|
50
|
+
console.log('\n๐ Test 2: Multiple allowed directories');
|
|
51
|
+
const agent2 = new ProbeAgent({
|
|
52
|
+
debug: true,
|
|
53
|
+
allowedFolders: ['./test-images-1', './test-images-2']
|
|
54
|
+
});
|
|
55
|
+
|
|
56
|
+
const result2a = await agent2.loadImageIfValid('./test-images-1/image1.png');
|
|
57
|
+
const result2b = await agent2.loadImageIfValid('./test-images-2/image2.jpg');
|
|
58
|
+
const result2c = await agent2.loadImageIfValid('./test-images-3/image3.webp');
|
|
59
|
+
|
|
60
|
+
console.log(` โ Image in allowed dir 1: ${result2a} (expected: true)`);
|
|
61
|
+
console.log(` โ Image in allowed dir 2: ${result2b} (expected: true)`);
|
|
62
|
+
console.log(` โ Image in disallowed dir 3: ${result2c} (expected: false)`);
|
|
63
|
+
|
|
64
|
+
// Test 3: Test with all three directories allowed
|
|
65
|
+
console.log('\n๐ Test 3: All directories allowed');
|
|
66
|
+
const agent3 = new ProbeAgent({
|
|
67
|
+
debug: true,
|
|
68
|
+
allowedFolders: ['./test-images-1', './test-images-2', './test-images-3']
|
|
69
|
+
});
|
|
70
|
+
|
|
71
|
+
const result3a = await agent3.loadImageIfValid('./test-images-1/image1.png');
|
|
72
|
+
const result3b = await agent3.loadImageIfValid('./test-images-2/image2.jpg');
|
|
73
|
+
const result3c = await agent3.loadImageIfValid('./test-images-3/image3.webp');
|
|
74
|
+
|
|
75
|
+
console.log(` โ Image in allowed dir 1: ${result3a} (expected: true)`);
|
|
76
|
+
console.log(` โ Image in allowed dir 2: ${result3b} (expected: true)`);
|
|
77
|
+
console.log(` โ Image in allowed dir 3: ${result3c} (expected: true)`);
|
|
78
|
+
|
|
79
|
+
// Validation
|
|
80
|
+
const allTestsPassed =
|
|
81
|
+
result1a === true && result1b === false &&
|
|
82
|
+
result2a === true && result2b === true && result2c === false &&
|
|
83
|
+
result3a === true && result3b === true && result3c === true;
|
|
84
|
+
|
|
85
|
+
if (allTestsPassed) {
|
|
86
|
+
console.log('\n๐ All tests passed! Multiple allowed directories working correctly.');
|
|
87
|
+
} else {
|
|
88
|
+
console.log('\nโ Some tests failed. Check the implementation.');
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
} catch (error) {
|
|
92
|
+
console.error('โ Test failed with error:', error.message);
|
|
93
|
+
} finally {
|
|
94
|
+
// Clean up test files and directories
|
|
95
|
+
console.log('\n๐งน Cleaning up test files...');
|
|
96
|
+
try {
|
|
97
|
+
for (const testFile of testFiles) {
|
|
98
|
+
await fs.unlink(resolve(testFile.dir, testFile.file)).catch(() => {});
|
|
99
|
+
}
|
|
100
|
+
for (const dir of testDirs) {
|
|
101
|
+
await fs.rmdir(dir).catch(() => {});
|
|
102
|
+
}
|
|
103
|
+
console.log('โ
Cleanup completed.');
|
|
104
|
+
} catch (cleanupError) {
|
|
105
|
+
console.log('โ ๏ธ Some cleanup failed:', cleanupError.message);
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
// Run the test
|
|
111
|
+
testMultipleAllowedDirectories().catch(console.error);
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Test script to connect to probe MCP server and explore its capabilities
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
import { Client } from '@modelcontextprotocol/sdk/client/index.js';
|
|
8
|
+
import { StdioClientTransport } from '@modelcontextprotocol/sdk/client/stdio.js';
|
|
9
|
+
|
|
10
|
+
async function testProbeMcpServer() {
|
|
11
|
+
console.log('Testing Probe MCP Server...\n');
|
|
12
|
+
|
|
13
|
+
// Create transport to probe MCP server
|
|
14
|
+
const transport = new StdioClientTransport({
|
|
15
|
+
command: 'npx',
|
|
16
|
+
args: ['-y', '@probelabs/probe@latest', 'mcp']
|
|
17
|
+
});
|
|
18
|
+
|
|
19
|
+
const client = new Client(
|
|
20
|
+
{
|
|
21
|
+
name: 'test-client',
|
|
22
|
+
version: '1.0.0'
|
|
23
|
+
},
|
|
24
|
+
{
|
|
25
|
+
capabilities: {}
|
|
26
|
+
}
|
|
27
|
+
);
|
|
28
|
+
|
|
29
|
+
try {
|
|
30
|
+
// Connect to the server
|
|
31
|
+
console.log('Connecting to Probe MCP server...');
|
|
32
|
+
await client.connect(transport);
|
|
33
|
+
console.log('โ
Connected successfully\n');
|
|
34
|
+
|
|
35
|
+
// List available tools
|
|
36
|
+
console.log('Available tools:');
|
|
37
|
+
const tools = await client.listTools();
|
|
38
|
+
|
|
39
|
+
for (const tool of tools.tools) {
|
|
40
|
+
console.log(`\n๐ฆ Tool: ${tool.name}`);
|
|
41
|
+
console.log(` Description: ${tool.description}`);
|
|
42
|
+
|
|
43
|
+
if (tool.inputSchema) {
|
|
44
|
+
console.log(' Input Schema:');
|
|
45
|
+
console.log(JSON.stringify(tool.inputSchema, null, 4));
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
// Test a simple search
|
|
50
|
+
console.log('\n\nTesting search_code tool...');
|
|
51
|
+
const searchResult = await client.callTool({
|
|
52
|
+
name: 'search_code',
|
|
53
|
+
arguments: {
|
|
54
|
+
query: 'function',
|
|
55
|
+
path: process.cwd(),
|
|
56
|
+
max_results: 3
|
|
57
|
+
}
|
|
58
|
+
});
|
|
59
|
+
|
|
60
|
+
console.log('\nSearch result (truncated):');
|
|
61
|
+
if (searchResult.content && searchResult.content[0]) {
|
|
62
|
+
const content = searchResult.content[0].text;
|
|
63
|
+
console.log(content.substring(0, 500) + '...');
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
// Test query_code tool
|
|
67
|
+
console.log('\n\nTesting query_code tool...');
|
|
68
|
+
const queryResult = await client.callTool({
|
|
69
|
+
name: 'query_code',
|
|
70
|
+
arguments: {
|
|
71
|
+
pattern: 'function $NAME($$$PARAMS) { $$$BODY }',
|
|
72
|
+
path: process.cwd(),
|
|
73
|
+
language: 'javascript',
|
|
74
|
+
max_results: 2
|
|
75
|
+
}
|
|
76
|
+
});
|
|
77
|
+
|
|
78
|
+
console.log('\nQuery result (truncated):');
|
|
79
|
+
if (queryResult.content && queryResult.content[0]) {
|
|
80
|
+
const content = queryResult.content[0].text;
|
|
81
|
+
console.log(content.substring(0, 500) + '...');
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
// Test extract_code tool
|
|
85
|
+
console.log('\n\nTesting extract_code tool...');
|
|
86
|
+
const extractResult = await client.callTool({
|
|
87
|
+
name: 'extract_code',
|
|
88
|
+
arguments: {
|
|
89
|
+
files: [`${process.cwd()}/probeChat.js:230-250`]
|
|
90
|
+
}
|
|
91
|
+
});
|
|
92
|
+
|
|
93
|
+
console.log('\nExtract result (truncated):');
|
|
94
|
+
if (extractResult.content && extractResult.content[0]) {
|
|
95
|
+
const content = extractResult.content[0].text;
|
|
96
|
+
console.log(content.substring(0, 500) + '...');
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
// Close the connection
|
|
100
|
+
await client.close();
|
|
101
|
+
console.log('\nโ
All tests completed successfully!');
|
|
102
|
+
|
|
103
|
+
} catch (error) {
|
|
104
|
+
console.error('Error during testing:', error);
|
|
105
|
+
process.exit(1);
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
// Run the test
|
|
110
|
+
testProbeMcpServer().catch(console.error);
|