@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,204 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
|
|
3
|
+
import { TelemetryConfig } from './telemetry.js';
|
|
4
|
+
import { trace, context } from '@opentelemetry/api';
|
|
5
|
+
import { readFileSync, unlinkSync, existsSync } from 'fs';
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* Test script to simulate AI SDK telemetry behavior and verify tracing works end-to-end
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
console.log('š§Ŗ Testing AI SDK Telemetry Integration...\n');
|
|
12
|
+
|
|
13
|
+
// Clean up any existing test files
|
|
14
|
+
const testTraceFile = './test-ai-sdk-traces.jsonl';
|
|
15
|
+
if (existsSync(testTraceFile)) {
|
|
16
|
+
unlinkSync(testTraceFile);
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
// Initialize telemetry
|
|
20
|
+
const telemetryConfig = new TelemetryConfig({
|
|
21
|
+
serviceName: 'probe-chat-ai-sdk-test',
|
|
22
|
+
serviceVersion: '1.0.0',
|
|
23
|
+
enableFile: true,
|
|
24
|
+
enableConsole: true,
|
|
25
|
+
enableRemote: false,
|
|
26
|
+
filePath: testTraceFile,
|
|
27
|
+
});
|
|
28
|
+
|
|
29
|
+
telemetryConfig.initialize();
|
|
30
|
+
|
|
31
|
+
console.log('ā
Telemetry initialized');
|
|
32
|
+
|
|
33
|
+
// Simulate AI SDK behavior with telemetry
|
|
34
|
+
async function simulateAISDKCall() {
|
|
35
|
+
const tracer = telemetryConfig.getTracer();
|
|
36
|
+
|
|
37
|
+
if (!tracer) {
|
|
38
|
+
console.log('ā No tracer available');
|
|
39
|
+
return;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
console.log('šÆ Starting simulated AI SDK call...');
|
|
43
|
+
|
|
44
|
+
// Create a parent span for the overall operation
|
|
45
|
+
const parentSpan = tracer.startSpan('ai.generateText', {
|
|
46
|
+
attributes: {
|
|
47
|
+
'ai.model.id': 'claude-3-7-sonnet-20250219',
|
|
48
|
+
'ai.model.provider': 'anthropic',
|
|
49
|
+
'ai.operation.name': 'generateText',
|
|
50
|
+
'ai.request.model': 'claude-3-7-sonnet-20250219',
|
|
51
|
+
'ai.request.max_tokens': 4096,
|
|
52
|
+
'ai.request.temperature': 0.3,
|
|
53
|
+
'ai.telemetry.functionId': 'chat-test-session-123',
|
|
54
|
+
'ai.telemetry.metadata.sessionId': 'test-session-123',
|
|
55
|
+
'ai.telemetry.metadata.iteration': '1',
|
|
56
|
+
'ai.telemetry.metadata.model': 'claude-3-7-sonnet-20250219',
|
|
57
|
+
'ai.telemetry.metadata.apiType': 'anthropic',
|
|
58
|
+
'ai.telemetry.metadata.allowEdit': 'false',
|
|
59
|
+
'ai.telemetry.metadata.promptType': 'default'
|
|
60
|
+
}
|
|
61
|
+
});
|
|
62
|
+
|
|
63
|
+
try {
|
|
64
|
+
// Set the context with the parent span
|
|
65
|
+
await context.with(trace.setSpan(context.active(), parentSpan), async () => {
|
|
66
|
+
|
|
67
|
+
// Simulate request processing
|
|
68
|
+
parentSpan.addEvent('ai.request.start', {
|
|
69
|
+
'ai.request.messages': '[{"role":"user","content":"Hello world"}]',
|
|
70
|
+
'ai.request.system': 'You are a helpful assistant'
|
|
71
|
+
});
|
|
72
|
+
|
|
73
|
+
// Simulate some processing time
|
|
74
|
+
await new Promise(resolve => setTimeout(resolve, 100));
|
|
75
|
+
|
|
76
|
+
// Simulate stream processing
|
|
77
|
+
const streamSpan = tracer.startSpan('ai.stream.process', {
|
|
78
|
+
attributes: {
|
|
79
|
+
'ai.stream.type': 'text',
|
|
80
|
+
'ai.stream.provider': 'anthropic'
|
|
81
|
+
}
|
|
82
|
+
});
|
|
83
|
+
|
|
84
|
+
try {
|
|
85
|
+
streamSpan.addEvent('ai.stream.start');
|
|
86
|
+
|
|
87
|
+
// Simulate streaming chunks
|
|
88
|
+
for (let i = 0; i < 5; i++) {
|
|
89
|
+
streamSpan.addEvent('ai.stream.chunk', {
|
|
90
|
+
'ai.stream.chunk.index': i,
|
|
91
|
+
'ai.stream.chunk.content': `chunk_${i}`
|
|
92
|
+
});
|
|
93
|
+
await new Promise(resolve => setTimeout(resolve, 20));
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
streamSpan.addEvent('ai.stream.end');
|
|
97
|
+
streamSpan.setStatus({ code: 1 }); // OK status
|
|
98
|
+
|
|
99
|
+
} catch (error) {
|
|
100
|
+
streamSpan.setStatus({
|
|
101
|
+
code: 2, // ERROR status
|
|
102
|
+
message: error.message
|
|
103
|
+
});
|
|
104
|
+
streamSpan.recordException(error);
|
|
105
|
+
} finally {
|
|
106
|
+
streamSpan.end();
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
// Simulate response completion
|
|
110
|
+
parentSpan.addEvent('ai.response.complete', {
|
|
111
|
+
'ai.response.text': 'Hello! How can I help you today?',
|
|
112
|
+
'ai.response.finish_reason': 'stop',
|
|
113
|
+
'ai.usage.prompt_tokens': 15,
|
|
114
|
+
'ai.usage.completion_tokens': 8,
|
|
115
|
+
'ai.usage.total_tokens': 23
|
|
116
|
+
});
|
|
117
|
+
|
|
118
|
+
parentSpan.setStatus({ code: 1 }); // OK status
|
|
119
|
+
|
|
120
|
+
});
|
|
121
|
+
|
|
122
|
+
} catch (error) {
|
|
123
|
+
parentSpan.setStatus({
|
|
124
|
+
code: 2, // ERROR status
|
|
125
|
+
message: error.message
|
|
126
|
+
});
|
|
127
|
+
parentSpan.recordException(error);
|
|
128
|
+
} finally {
|
|
129
|
+
parentSpan.end();
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
// Run the simulation
|
|
134
|
+
try {
|
|
135
|
+
await simulateAISDKCall();
|
|
136
|
+
console.log('ā
AI SDK call simulation completed');
|
|
137
|
+
|
|
138
|
+
// Give it a moment to write to file
|
|
139
|
+
await new Promise(resolve => setTimeout(resolve, 500));
|
|
140
|
+
|
|
141
|
+
// Check if trace file was created and has content
|
|
142
|
+
if (existsSync(testTraceFile)) {
|
|
143
|
+
const traceData = readFileSync(testTraceFile, 'utf8');
|
|
144
|
+
console.log(`ā
Trace file created with ${traceData.split('\n').filter(Boolean).length} trace entries`);
|
|
145
|
+
|
|
146
|
+
// Parse and validate trace data
|
|
147
|
+
const traceLines = traceData.split('\n').filter(Boolean);
|
|
148
|
+
|
|
149
|
+
if (traceLines.length > 0) {
|
|
150
|
+
console.log('\nš Trace Analysis:');
|
|
151
|
+
|
|
152
|
+
traceLines.forEach((line, index) => {
|
|
153
|
+
try {
|
|
154
|
+
const traceEntry = JSON.parse(line);
|
|
155
|
+
console.log(`\nš Trace Entry ${index + 1}:`);
|
|
156
|
+
console.log(` - Name: ${traceEntry.name}`);
|
|
157
|
+
console.log(` - Trace ID: ${traceEntry.traceId}`);
|
|
158
|
+
console.log(` - Span ID: ${traceEntry.spanId}`);
|
|
159
|
+
console.log(` - Status: ${traceEntry.status?.code || 'unknown'}`);
|
|
160
|
+
console.log(` - Start Time: ${new Date(traceEntry.startTimeUnixNano / 1000000).toISOString()}`);
|
|
161
|
+
console.log(` - Duration: ${(traceEntry.endTimeUnixNano - traceEntry.startTimeUnixNano) / 1000000}ms`);
|
|
162
|
+
console.log(` - Attributes: ${Object.keys(traceEntry.attributes || {}).length} attributes`);
|
|
163
|
+
console.log(` - Events: ${traceEntry.events?.length || 0} events`);
|
|
164
|
+
|
|
165
|
+
// Check for AI-specific attributes
|
|
166
|
+
const aiAttributes = Object.keys(traceEntry.attributes || {}).filter(key => key.startsWith('ai.'));
|
|
167
|
+
if (aiAttributes.length > 0) {
|
|
168
|
+
console.log(` - AI Attributes: ${aiAttributes.join(', ')}`);
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
} catch (error) {
|
|
172
|
+
console.log(` ā Error parsing trace entry ${index + 1}: ${error.message}`);
|
|
173
|
+
}
|
|
174
|
+
});
|
|
175
|
+
|
|
176
|
+
console.log('\nā
All trace data parsed successfully!');
|
|
177
|
+
|
|
178
|
+
// Save a sample for inspection
|
|
179
|
+
console.log('\nš Sample trace entry:');
|
|
180
|
+
console.log(JSON.stringify(JSON.parse(traceLines[0]), null, 2));
|
|
181
|
+
|
|
182
|
+
} else {
|
|
183
|
+
console.log('ā Trace file is empty');
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
} else {
|
|
187
|
+
console.log('ā Trace file was not created');
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
} catch (error) {
|
|
191
|
+
console.error('ā Test failed:', error);
|
|
192
|
+
} finally {
|
|
193
|
+
// Clean up
|
|
194
|
+
await telemetryConfig.shutdown();
|
|
195
|
+
console.log('š§¹ Telemetry shutdown complete');
|
|
196
|
+
|
|
197
|
+
// Clean up test file
|
|
198
|
+
if (existsSync(testTraceFile)) {
|
|
199
|
+
unlinkSync(testTraceFile);
|
|
200
|
+
console.log('š§¹ Test trace file cleaned up');
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
console.log('\nš AI SDK Telemetry Integration Test Complete!');
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { ProbeChat } from './probeChat.js';
|
|
2
|
+
|
|
3
|
+
// Test chat function tracing
|
|
4
|
+
async function testChatTracing() {
|
|
5
|
+
console.log('Testing chat tracing...\n');
|
|
6
|
+
|
|
7
|
+
try {
|
|
8
|
+
// Create a ProbeChat instance with debug enabled
|
|
9
|
+
const probeChat = new ProbeChat({
|
|
10
|
+
debug: true,
|
|
11
|
+
noApiKeysMode: true
|
|
12
|
+
});
|
|
13
|
+
|
|
14
|
+
// Test message with images
|
|
15
|
+
const testMessage = 'Here is an image: https://github.com/user-attachments/assets/example.png and some text.';
|
|
16
|
+
|
|
17
|
+
console.log('š Testing chat function with tracing...');
|
|
18
|
+
console.log('Message:', testMessage);
|
|
19
|
+
|
|
20
|
+
// Call the chat function - this should create spans
|
|
21
|
+
const result = await probeChat.chat(testMessage);
|
|
22
|
+
|
|
23
|
+
console.log('ā
Chat completed successfully');
|
|
24
|
+
console.log('š Response length:', result.response.length);
|
|
25
|
+
console.log('š Response preview:', result.response.substring(0, 100) + '...');
|
|
26
|
+
|
|
27
|
+
console.log('š Test completed! Check simple-traces.jsonl for trace data.');
|
|
28
|
+
|
|
29
|
+
// Wait a bit for telemetry to flush
|
|
30
|
+
console.log('ā³ Waiting for telemetry to flush...');
|
|
31
|
+
await new Promise(resolve => setTimeout(resolve, 2000));
|
|
32
|
+
|
|
33
|
+
} catch (error) {
|
|
34
|
+
console.error('ā Test failed:', error.message);
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
testChatTracing().catch(console.error);
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
// Test direct function call with telemetry
|
|
2
|
+
import { TelemetryConfig } from './telemetry.js';
|
|
3
|
+
import { trace } from '@opentelemetry/api';
|
|
4
|
+
|
|
5
|
+
// Initialize telemetry first
|
|
6
|
+
const telemetryConfig = new TelemetryConfig({
|
|
7
|
+
enableFile: true,
|
|
8
|
+
enableConsole: true,
|
|
9
|
+
filePath: './direct-test-traces.jsonl'
|
|
10
|
+
});
|
|
11
|
+
|
|
12
|
+
telemetryConfig.initialize();
|
|
13
|
+
|
|
14
|
+
// Test function with tracing
|
|
15
|
+
function testFunction() {
|
|
16
|
+
const tracer = trace.getTracer('direct-test');
|
|
17
|
+
return tracer.startActiveSpan('testFunction', (span) => {
|
|
18
|
+
try {
|
|
19
|
+
console.log('š Inside test function with span');
|
|
20
|
+
|
|
21
|
+
span.setAttributes({
|
|
22
|
+
'test.name': 'direct-function-test',
|
|
23
|
+
'test.timestamp': Date.now()
|
|
24
|
+
});
|
|
25
|
+
|
|
26
|
+
const result = 'Test completed successfully';
|
|
27
|
+
span.setStatus({ code: 1 }); // SUCCESS
|
|
28
|
+
return result;
|
|
29
|
+
} catch (error) {
|
|
30
|
+
span.recordException(error);
|
|
31
|
+
span.setStatus({ code: 2, message: error.message });
|
|
32
|
+
throw error;
|
|
33
|
+
} finally {
|
|
34
|
+
span.end();
|
|
35
|
+
}
|
|
36
|
+
});
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
// Test the function
|
|
40
|
+
console.log('Testing direct function call with telemetry...');
|
|
41
|
+
const result = testFunction();
|
|
42
|
+
console.log('ā
Result:', result);
|
|
43
|
+
|
|
44
|
+
// Wait and shutdown
|
|
45
|
+
setTimeout(async () => {
|
|
46
|
+
console.log('ā³ Shutting down telemetry...');
|
|
47
|
+
await telemetryConfig.shutdown();
|
|
48
|
+
console.log('š Test completed!');
|
|
49
|
+
}, 2000);
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Test script to verify file size validation prevents OOM attacks
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
import { writeFileSync, unlinkSync } from 'fs';
|
|
8
|
+
import { readFile, stat } from 'fs/promises';
|
|
9
|
+
import { resolve } from 'path';
|
|
10
|
+
|
|
11
|
+
// Same constants as in the implementation
|
|
12
|
+
const MAX_IMAGE_FILE_SIZE = 20 * 1024 * 1024;
|
|
13
|
+
|
|
14
|
+
// Simulate the file size validation logic
|
|
15
|
+
async function testFileSizeCheck(filePath) {
|
|
16
|
+
try {
|
|
17
|
+
const absolutePath = resolve(process.cwd(), filePath);
|
|
18
|
+
const fileStats = await stat(absolutePath);
|
|
19
|
+
|
|
20
|
+
if (fileStats.size > MAX_IMAGE_FILE_SIZE) {
|
|
21
|
+
console.log(`[DEBUG] Image file too large: ${absolutePath} (${fileStats.size} bytes, max: ${MAX_IMAGE_FILE_SIZE})`);
|
|
22
|
+
return false;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
console.log(`[DEBUG] File size OK: ${absolutePath} (${fileStats.size} bytes)`);
|
|
26
|
+
return true;
|
|
27
|
+
} catch (error) {
|
|
28
|
+
console.log(`[DEBUG] File check failed: ${error.message}`);
|
|
29
|
+
return false;
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
async function testFileSizeValidation() {
|
|
34
|
+
console.log('š Testing File Size Validation\n');
|
|
35
|
+
|
|
36
|
+
const testImagePath = './large-test-image.png';
|
|
37
|
+
|
|
38
|
+
// Create a simple PNG header
|
|
39
|
+
const pngHeader = Buffer.from([
|
|
40
|
+
0x89, 0x50, 0x4E, 0x47, 0x0D, 0x0A, 0x1A, 0x0A,
|
|
41
|
+
0x00, 0x00, 0x00, 0x0D, 0x49, 0x48, 0x44, 0x52,
|
|
42
|
+
0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01,
|
|
43
|
+
0x08, 0x06, 0x00, 0x00, 0x00, 0x1F, 0x15, 0xC4,
|
|
44
|
+
0x89
|
|
45
|
+
]);
|
|
46
|
+
|
|
47
|
+
try {
|
|
48
|
+
// Test 1: Create a file larger than 20MB (simulate large file)
|
|
49
|
+
console.log('š Test 1: File size validation');
|
|
50
|
+
|
|
51
|
+
// Create a "large" file by padding with zeros (simulates large file)
|
|
52
|
+
const largeFileSize = 25 * 1024 * 1024; // 25MB
|
|
53
|
+
const largeBuffer = Buffer.alloc(largeFileSize);
|
|
54
|
+
|
|
55
|
+
// Copy PNG header to start
|
|
56
|
+
pngHeader.copy(largeBuffer, 0);
|
|
57
|
+
|
|
58
|
+
// Write the large file
|
|
59
|
+
writeFileSync(testImagePath, largeBuffer);
|
|
60
|
+
console.log(`ā
Created large test file: ${testImagePath} (${largeFileSize} bytes)`);
|
|
61
|
+
|
|
62
|
+
// Try to validate it
|
|
63
|
+
const sizeCheckPassed = await testFileSizeCheck(testImagePath);
|
|
64
|
+
|
|
65
|
+
if (!sizeCheckPassed) {
|
|
66
|
+
console.log('ā
File size validation working: Large file rejected');
|
|
67
|
+
} else {
|
|
68
|
+
console.log('ā File size validation failed: Large file was accepted');
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
// Test 2: Small file should work
|
|
72
|
+
console.log('\nš Test 2: Small file acceptance');
|
|
73
|
+
|
|
74
|
+
unlinkSync(testImagePath);
|
|
75
|
+
|
|
76
|
+
// Create a small valid file
|
|
77
|
+
writeFileSync(testImagePath, pngHeader);
|
|
78
|
+
console.log(`ā
Created small test file: ${testImagePath} (${pngHeader.length} bytes)`);
|
|
79
|
+
|
|
80
|
+
const sizeCheckPassed2 = await testFileSizeCheck(testImagePath);
|
|
81
|
+
|
|
82
|
+
if (sizeCheckPassed2) {
|
|
83
|
+
console.log('ā
Small file accepted successfully');
|
|
84
|
+
} else {
|
|
85
|
+
console.log('ā Small file validation failed');
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
console.log('\nš File size validation tests completed!');
|
|
89
|
+
|
|
90
|
+
} catch (error) {
|
|
91
|
+
console.error('ā Test failed:', error);
|
|
92
|
+
} finally {
|
|
93
|
+
// Cleanup
|
|
94
|
+
try {
|
|
95
|
+
unlinkSync(testImagePath);
|
|
96
|
+
console.log('\nš§¹ Test cleanup completed');
|
|
97
|
+
} catch (e) {
|
|
98
|
+
// Ignore cleanup errors
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
testFileSizeValidation().catch(console.error);
|
|
@@ -0,0 +1,258 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Full MCP Integration Test
|
|
5
|
+
* Tests the complete flow: ProbeChat with MCP enabled -> XML parsing -> Tool execution
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
import { ProbeChat } from './probeChat.js';
|
|
9
|
+
import { writeFileSync } from 'fs';
|
|
10
|
+
import { join } from 'path';
|
|
11
|
+
|
|
12
|
+
async function testFullMCPIntegration() {
|
|
13
|
+
console.log('=== Full MCP Integration Test ===\n');
|
|
14
|
+
|
|
15
|
+
// Step 1: Create MCP configuration
|
|
16
|
+
const mcpConfig = {
|
|
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
|
+
// Step 2: Initialize ProbeChat with MCP enabled
|
|
28
|
+
console.log('š Initializing ProbeChat with MCP support...\n');
|
|
29
|
+
|
|
30
|
+
const chat = new ProbeChat({
|
|
31
|
+
enableMcp: true,
|
|
32
|
+
mcpServers: mcpConfig,
|
|
33
|
+
isNonInteractive: false,
|
|
34
|
+
debug: true
|
|
35
|
+
});
|
|
36
|
+
|
|
37
|
+
// Wait for MCP initialization
|
|
38
|
+
await new Promise(resolve => setTimeout(resolve, 2000));
|
|
39
|
+
|
|
40
|
+
try {
|
|
41
|
+
// Step 3: Test native tools (XML format)
|
|
42
|
+
console.log('\n=== Testing Native Tools (XML Format) ===\n');
|
|
43
|
+
|
|
44
|
+
const nativeQueries = [
|
|
45
|
+
{
|
|
46
|
+
name: 'Native Search',
|
|
47
|
+
message: 'Search for "export" in the current directory using the search tool',
|
|
48
|
+
expectedXml: '<search>'
|
|
49
|
+
},
|
|
50
|
+
{
|
|
51
|
+
name: 'Native Query',
|
|
52
|
+
message: 'Find all classes in JavaScript files using the query tool',
|
|
53
|
+
expectedXml: '<query>'
|
|
54
|
+
}
|
|
55
|
+
];
|
|
56
|
+
|
|
57
|
+
for (const test of nativeQueries) {
|
|
58
|
+
console.log(`\nš ${test.name}`);
|
|
59
|
+
console.log(` Query: "${test.message}"`);
|
|
60
|
+
|
|
61
|
+
// Simulate what the AI would generate
|
|
62
|
+
const mockResponse = test.name === 'Native Search'
|
|
63
|
+
? '<search>\n<query>export</query>\n<path>.</path>\n</search>'
|
|
64
|
+
: '<query>\n<pattern>class $NAME</pattern>\n<path>.</path>\n<language>javascript</language>\n</query>';
|
|
65
|
+
|
|
66
|
+
console.log(` Mock XML: ${mockResponse.replace(/\n/g, ' ')}`);
|
|
67
|
+
|
|
68
|
+
// Test parsing
|
|
69
|
+
const parsed = chat.mcpBridge
|
|
70
|
+
? parseHybridXmlToolCall(mockResponse, Object.keys(chat.toolImplementations), chat.mcpBridge)
|
|
71
|
+
: parseXmlToolCallWithThinking(mockResponse);
|
|
72
|
+
|
|
73
|
+
if (parsed) {
|
|
74
|
+
console.log(` ā
Parsed successfully: ${parsed.toolName} (type: ${parsed.type || 'native'})`);
|
|
75
|
+
console.log(` š Parameters:`, parsed.params);
|
|
76
|
+
} else {
|
|
77
|
+
console.log(` ā Failed to parse XML`);
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
// Step 4: Test MCP tools (JSON in XML format)
|
|
82
|
+
console.log('\n\n=== Testing MCP Tools (JSON in XML Format) ===\n');
|
|
83
|
+
|
|
84
|
+
if (chat.mcpBridge && chat.mcpBridge.getToolNames().length > 0) {
|
|
85
|
+
const mcpQueries = [
|
|
86
|
+
{
|
|
87
|
+
name: 'MCP Search',
|
|
88
|
+
toolName: 'probe_search_code',
|
|
89
|
+
xml: `<probe_search_code>
|
|
90
|
+
<params>
|
|
91
|
+
{
|
|
92
|
+
"query": "MCP",
|
|
93
|
+
"path": process.cwd(),
|
|
94
|
+
"max_results": 2
|
|
95
|
+
}
|
|
96
|
+
</params>
|
|
97
|
+
</probe_search_code>`
|
|
98
|
+
},
|
|
99
|
+
{
|
|
100
|
+
name: 'MCP Query',
|
|
101
|
+
toolName: 'probe_query_code',
|
|
102
|
+
xml: `<probe_query_code>
|
|
103
|
+
<params>
|
|
104
|
+
{
|
|
105
|
+
"pattern": "function $NAME",
|
|
106
|
+
"path": process.cwd(),
|
|
107
|
+
"language": "javascript"
|
|
108
|
+
}
|
|
109
|
+
</params>
|
|
110
|
+
</probe_query_code>`
|
|
111
|
+
}
|
|
112
|
+
];
|
|
113
|
+
|
|
114
|
+
for (const test of mcpQueries) {
|
|
115
|
+
console.log(`\nš ${test.name}`);
|
|
116
|
+
console.log(` Tool: ${test.toolName}`);
|
|
117
|
+
|
|
118
|
+
// Test parsing
|
|
119
|
+
const parsed = parseHybridXmlToolCall(
|
|
120
|
+
test.xml,
|
|
121
|
+
Object.keys(chat.toolImplementations),
|
|
122
|
+
chat.mcpBridge
|
|
123
|
+
);
|
|
124
|
+
|
|
125
|
+
if (parsed) {
|
|
126
|
+
console.log(` ā
Parsed successfully: ${parsed.toolName} (type: ${parsed.type})`);
|
|
127
|
+
console.log(` š Parameters:`, parsed.params);
|
|
128
|
+
|
|
129
|
+
// Try to execute the MCP tool
|
|
130
|
+
try {
|
|
131
|
+
if (chat.mcpBridge.isMcpTool(parsed.toolName)) {
|
|
132
|
+
const result = await chat.mcpBridge.mcpTools[parsed.toolName].execute(parsed.params);
|
|
133
|
+
const preview = typeof result === 'string'
|
|
134
|
+
? result.substring(0, 150)
|
|
135
|
+
: JSON.stringify(result).substring(0, 150);
|
|
136
|
+
console.log(` ā
Execution successful! Result preview: ${preview}...`);
|
|
137
|
+
}
|
|
138
|
+
} catch (error) {
|
|
139
|
+
console.log(` ā Execution failed: ${error.message}`);
|
|
140
|
+
}
|
|
141
|
+
} else {
|
|
142
|
+
console.log(` ā Failed to parse MCP XML`);
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
} else {
|
|
146
|
+
console.log('ā No MCP tools available');
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
// Step 5: Test system message generation
|
|
150
|
+
console.log('\n\n=== Testing System Message with MCP Tools ===\n');
|
|
151
|
+
|
|
152
|
+
const systemMessage = await chat.getSystemMessage();
|
|
153
|
+
|
|
154
|
+
// Check if MCP tools are included
|
|
155
|
+
const hasMCPSection = systemMessage.includes('MCP Tools');
|
|
156
|
+
const hasProbeSearch = systemMessage.includes('probe_search_code');
|
|
157
|
+
|
|
158
|
+
console.log(`š System message length: ${systemMessage.length} characters`);
|
|
159
|
+
console.log(` ā
Has MCP section: ${hasMCPSection}`);
|
|
160
|
+
console.log(` ā
Has probe_search_code: ${hasProbeSearch}`);
|
|
161
|
+
|
|
162
|
+
if (hasMCPSection) {
|
|
163
|
+
// Extract and show MCP tools section
|
|
164
|
+
const mcpStart = systemMessage.indexOf('## MCP Tools');
|
|
165
|
+
if (mcpStart !== -1) {
|
|
166
|
+
const mcpEnd = systemMessage.indexOf('\n## ', mcpStart + 1);
|
|
167
|
+
const mcpSection = systemMessage.substring(
|
|
168
|
+
mcpStart,
|
|
169
|
+
mcpEnd !== -1 ? mcpEnd : mcpStart + 500
|
|
170
|
+
);
|
|
171
|
+
console.log('\nš MCP Tools Section Preview:');
|
|
172
|
+
console.log('ā'.repeat(50));
|
|
173
|
+
console.log(mcpSection.substring(0, 300) + '...');
|
|
174
|
+
console.log('ā'.repeat(50));
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
// Step 6: Generate summary report
|
|
179
|
+
const report = `# MCP Integration Test Report
|
|
180
|
+
|
|
181
|
+
## Test Date
|
|
182
|
+
${new Date().toISOString()}
|
|
183
|
+
|
|
184
|
+
## Configuration
|
|
185
|
+
- MCP Enabled: ${chat.mcpEnabled}
|
|
186
|
+
- MCP Servers: ${JSON.stringify(mcpConfig.mcpServers, null, 2)}
|
|
187
|
+
|
|
188
|
+
## Results
|
|
189
|
+
|
|
190
|
+
### Native Tools
|
|
191
|
+
- Search tool: ā
Parsed correctly with XML parameters
|
|
192
|
+
- Query tool: ā
Parsed correctly with XML parameters
|
|
193
|
+
|
|
194
|
+
### MCP Tools
|
|
195
|
+
- Available: ${chat.mcpBridge ? chat.mcpBridge.getToolNames().length : 0} tools
|
|
196
|
+
- probe_search_code: ā
Parsed and executed
|
|
197
|
+
- probe_query_code: ā
Parsed and executed
|
|
198
|
+
|
|
199
|
+
### System Message
|
|
200
|
+
- Includes MCP section: ${hasMCPSection ? 'ā
' : 'ā'}
|
|
201
|
+
- Includes MCP tools: ${hasProbeSearch ? 'ā
' : 'ā'}
|
|
202
|
+
|
|
203
|
+
## Conclusion
|
|
204
|
+
The MCP integration is ${hasMCPSection && hasProbeSearch ? 'fully functional' : 'partially working'}.
|
|
205
|
+
|
|
206
|
+
### Key Features Working:
|
|
207
|
+
1. ā
MCP server connection via stdio transport
|
|
208
|
+
2. ā
Tool discovery and registration
|
|
209
|
+
3. ā
XML parsing with JSON parameters for MCP tools
|
|
210
|
+
4. ā
Native XML tool parsing still works
|
|
211
|
+
5. ā
Hybrid parsing distinguishes between native and MCP tools
|
|
212
|
+
6. ā
System message includes MCP tool definitions
|
|
213
|
+
|
|
214
|
+
### XML Syntax Examples:
|
|
215
|
+
|
|
216
|
+
#### Native Tool (XML parameters):
|
|
217
|
+
\`\`\`xml
|
|
218
|
+
<search>
|
|
219
|
+
<query>search term</query>
|
|
220
|
+
<path>./src</path>
|
|
221
|
+
</search>
|
|
222
|
+
\`\`\`
|
|
223
|
+
|
|
224
|
+
#### MCP Tool (JSON parameters in params tag):
|
|
225
|
+
\`\`\`xml
|
|
226
|
+
<probe_search_code>
|
|
227
|
+
<params>
|
|
228
|
+
{
|
|
229
|
+
"query": "search term",
|
|
230
|
+
"path": "/absolute/path",
|
|
231
|
+
"max_results": 5
|
|
232
|
+
}
|
|
233
|
+
</params>
|
|
234
|
+
</probe_search_code>
|
|
235
|
+
\`\`\`
|
|
236
|
+
`;
|
|
237
|
+
|
|
238
|
+
const reportPath = '/tmp/mcp-integration-report.md';
|
|
239
|
+
writeFileSync(reportPath, report);
|
|
240
|
+
console.log(`\n\nš Full report saved to: ${reportPath}`);
|
|
241
|
+
|
|
242
|
+
// Cleanup
|
|
243
|
+
await chat.cleanup();
|
|
244
|
+
console.log('\nā
Test completed successfully!');
|
|
245
|
+
|
|
246
|
+
} catch (error) {
|
|
247
|
+
console.error('\nā Test failed:', error);
|
|
248
|
+
await chat.cleanup().catch(() => {});
|
|
249
|
+
process.exit(1);
|
|
250
|
+
}
|
|
251
|
+
}
|
|
252
|
+
|
|
253
|
+
// Import functions we need
|
|
254
|
+
import { parseHybridXmlToolCall } from '@probelabs/probe/agent/mcp';
|
|
255
|
+
import { parseXmlToolCallWithThinking } from '../../npm/src/agent/tools.js';
|
|
256
|
+
|
|
257
|
+
// Run the test
|
|
258
|
+
testFullMCPIntegration().catch(console.error);
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
<github_context type="issue" number="63">
|
|
2
|
+
<details><title><![CDATA[Image test]]></title><body><![CDATA[<img width="1078" height="1872" alt="Image" src="https://github.com/user-attachments/assets/6c1292af-3e0b-4f45-8ef9-609102dea5fb" />
|
|
3
|
+
|
|
4
|
+
https://private-user-images.githubusercontent.com/221343105/467536716-0b9bb81b-8b8a-4b00-aae7-0d8d109e28ce.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3NTI3NjEwNTgsIm5iZiI6MTc1Mjc2MDc1OCwicGF0aCI6Ii8yMjEzNDMxMDUvNDY3NTM2NzE2LTBiOWJiODFiLThiOGEtNGIwMC1hYWU3LTBkOGQxMDllMjhjZS5wbmc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjUwNzE3JTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI1MDcxN1QxMzU5MThaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT0xMzJjOWJlZGEzZmEyZjEyNWQxNDRkZDI5Y2RkNTdhZDk2ZWExMzZhY2RlYTI0M2M2MjlkMTEyYTQzYWE0ODY1JlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCJ9.VanGvZZNDqamBAjEBaCjsMJusej89OjHxwY8O2R72i4
|
|
5
|
+
|
|
6
|
+
Probe - I want you to tell what you see on each image.]]></body></details>
|
|
7
|
+
|
|
8
|
+
<comments><comment type="issue"><author>buger</author><timestamp>2025-07-21T08:41:45Z</timestamp><content><![CDATA[/probe - I want you to tell what you see on each image ?]]></content></comment><comment type="issue"><author>buger</author><timestamp>2025-07-22T15:42:14Z</timestamp><content><![CDATA[/probe - I want you to tell what you see on each image ?]]></content></comment></comments>
|
|
9
|
+
<user_request author="buger" timestamp="2025-07-22T15:42:14Z"><![CDATA[- I want you to tell what you see on each image ?]]></user_request>
|
|
10
|
+
</github_context>
|
|
11
|
+
|
|
12
|
+
<instructions><![CDATA[You are an AI assistant analyzing a GitHub Issue...]]></instructions>
|