@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,267 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Test fixtures for Mermaid diagrams and JSON responses
|
|
3
|
+
* Used across multiple test files for consistency
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
export const validMermaidDiagrams = {
|
|
7
|
+
flowchart: {
|
|
8
|
+
simple: `graph TD
|
|
9
|
+
A[Start] --> B[Process]
|
|
10
|
+
B --> C[End]`,
|
|
11
|
+
|
|
12
|
+
complex: `graph TD
|
|
13
|
+
A[Start] --> B{Decision}
|
|
14
|
+
B -->|Yes| C[Process A]
|
|
15
|
+
B -->|No| D[Process B]
|
|
16
|
+
C --> E[End]
|
|
17
|
+
D --> E`,
|
|
18
|
+
|
|
19
|
+
withStyling: `graph TD
|
|
20
|
+
A[Start] --> B[Process]
|
|
21
|
+
B --> C[End]
|
|
22
|
+
style A fill:#f9f,stroke:#333,stroke-width:4px`
|
|
23
|
+
},
|
|
24
|
+
|
|
25
|
+
sequence: {
|
|
26
|
+
simple: `sequenceDiagram
|
|
27
|
+
Alice->>Bob: Hello Bob, how are you?
|
|
28
|
+
Bob-->>Alice: Great!`,
|
|
29
|
+
|
|
30
|
+
complex: `sequenceDiagram
|
|
31
|
+
participant Alice
|
|
32
|
+
participant Bob
|
|
33
|
+
participant Carol
|
|
34
|
+
|
|
35
|
+
Alice->>Bob: Hello Bob
|
|
36
|
+
Bob->>Carol: Hello Carol
|
|
37
|
+
Carol-->>Bob: Hi Bob
|
|
38
|
+
Bob-->>Alice: Hi Alice`,
|
|
39
|
+
|
|
40
|
+
withActivation: `sequenceDiagram
|
|
41
|
+
Alice->>+Bob: Request
|
|
42
|
+
Bob-->>-Alice: Response`
|
|
43
|
+
},
|
|
44
|
+
|
|
45
|
+
gantt: `gantt
|
|
46
|
+
title A Gantt Diagram
|
|
47
|
+
dateFormat YYYY-MM-DD
|
|
48
|
+
section Section
|
|
49
|
+
A task :a1, 2014-01-01, 30d
|
|
50
|
+
Another task :after a1, 20d`,
|
|
51
|
+
|
|
52
|
+
pie: `pie title Pets adopted by volunteers
|
|
53
|
+
"Dogs" : 386
|
|
54
|
+
"Cats" : 85.9
|
|
55
|
+
"Rats" : 15`,
|
|
56
|
+
|
|
57
|
+
state: `stateDiagram-v2
|
|
58
|
+
[*] --> Still
|
|
59
|
+
Still --> [*]
|
|
60
|
+
Still --> Moving
|
|
61
|
+
Moving --> Still
|
|
62
|
+
Moving --> Crash
|
|
63
|
+
Crash --> [*]`,
|
|
64
|
+
|
|
65
|
+
class: `classDiagram
|
|
66
|
+
Animal <|-- Duck
|
|
67
|
+
Animal <|-- Fish
|
|
68
|
+
Animal <|-- Zebra
|
|
69
|
+
Animal : +int age
|
|
70
|
+
Animal : +String gender
|
|
71
|
+
Animal: +isMammal()
|
|
72
|
+
Animal: +mate()
|
|
73
|
+
class Duck{
|
|
74
|
+
+String beakColor
|
|
75
|
+
+swim()
|
|
76
|
+
+quack()
|
|
77
|
+
}`
|
|
78
|
+
};
|
|
79
|
+
|
|
80
|
+
export const invalidMermaidDiagrams = {
|
|
81
|
+
unknownType: 'unknownDiagram\n some content',
|
|
82
|
+
|
|
83
|
+
missingBracket: `graph TD
|
|
84
|
+
A[Start --> B[Process]
|
|
85
|
+
B --> C[End]`,
|
|
86
|
+
|
|
87
|
+
missingColon: `sequenceDiagram
|
|
88
|
+
Alice->>Bob Hello world
|
|
89
|
+
Bob-->>Alice: Response`,
|
|
90
|
+
|
|
91
|
+
malformedSyntax: 'this is not a valid mermaid diagram',
|
|
92
|
+
|
|
93
|
+
withCodeBlocks: `\`\`\`mermaid
|
|
94
|
+
graph TD
|
|
95
|
+
A --> B
|
|
96
|
+
\`\`\``,
|
|
97
|
+
|
|
98
|
+
empty: '',
|
|
99
|
+
whitespaceOnly: ' \n\t '
|
|
100
|
+
};
|
|
101
|
+
|
|
102
|
+
export const validJsonResponses = {
|
|
103
|
+
simple: '{"test": "value"}',
|
|
104
|
+
|
|
105
|
+
complex: `{
|
|
106
|
+
"users": [
|
|
107
|
+
{"id": 1, "name": "Alice", "active": true},
|
|
108
|
+
{"id": 2, "name": "Bob", "active": false}
|
|
109
|
+
],
|
|
110
|
+
"total": 2,
|
|
111
|
+
"metadata": {
|
|
112
|
+
"timestamp": "2023-01-01T00:00:00Z",
|
|
113
|
+
"version": "1.0"
|
|
114
|
+
}
|
|
115
|
+
}`,
|
|
116
|
+
|
|
117
|
+
array: '[1, 2, 3, {"nested": true}]',
|
|
118
|
+
primitives: {
|
|
119
|
+
null: 'null',
|
|
120
|
+
boolean: 'true',
|
|
121
|
+
number: '42',
|
|
122
|
+
string: '"hello world"'
|
|
123
|
+
}
|
|
124
|
+
};
|
|
125
|
+
|
|
126
|
+
export const invalidJsonResponses = {
|
|
127
|
+
missingQuotes: '{"test": value}',
|
|
128
|
+
trailingComma: '{"test": "value",}',
|
|
129
|
+
unquotedKeys: '{test: "value"}',
|
|
130
|
+
incomplete: '{"test":',
|
|
131
|
+
malformed: '{"test":: "value"}',
|
|
132
|
+
empty: '',
|
|
133
|
+
whitespace: ' \n\t '
|
|
134
|
+
};
|
|
135
|
+
|
|
136
|
+
export const mixedResponses = {
|
|
137
|
+
validBoth: `Here's the analysis:
|
|
138
|
+
|
|
139
|
+
\`\`\`json
|
|
140
|
+
{
|
|
141
|
+
"status": "completed",
|
|
142
|
+
"diagram_count": 1
|
|
143
|
+
}
|
|
144
|
+
\`\`\`
|
|
145
|
+
|
|
146
|
+
\`\`\`mermaid
|
|
147
|
+
graph TD
|
|
148
|
+
A[Analysis] --> B[Results]
|
|
149
|
+
B --> C[Complete]
|
|
150
|
+
\`\`\``,
|
|
151
|
+
|
|
152
|
+
validJsonInvalidMermaid: `Here's the analysis:
|
|
153
|
+
|
|
154
|
+
\`\`\`json
|
|
155
|
+
{
|
|
156
|
+
"status": "completed",
|
|
157
|
+
"errors": []
|
|
158
|
+
}
|
|
159
|
+
\`\`\`
|
|
160
|
+
|
|
161
|
+
\`\`\`mermaid
|
|
162
|
+
invalid diagram syntax
|
|
163
|
+
\`\`\``,
|
|
164
|
+
|
|
165
|
+
invalidJsonValidMermaid: `Here's the analysis:
|
|
166
|
+
|
|
167
|
+
\`\`\`json
|
|
168
|
+
{
|
|
169
|
+
"status": completed,
|
|
170
|
+
"errors": []
|
|
171
|
+
}
|
|
172
|
+
\`\`\`
|
|
173
|
+
|
|
174
|
+
\`\`\`mermaid
|
|
175
|
+
graph TD
|
|
176
|
+
A[Start] --> B[End]
|
|
177
|
+
\`\`\``,
|
|
178
|
+
|
|
179
|
+
invalidBoth: `Here's the analysis:
|
|
180
|
+
|
|
181
|
+
\`\`\`json
|
|
182
|
+
{
|
|
183
|
+
"status": completed
|
|
184
|
+
"errors": []
|
|
185
|
+
}
|
|
186
|
+
\`\`\`
|
|
187
|
+
|
|
188
|
+
\`\`\`mermaid
|
|
189
|
+
unknown diagram type
|
|
190
|
+
invalid syntax
|
|
191
|
+
\`\`\``,
|
|
192
|
+
|
|
193
|
+
multipleDiagrams: `Multiple diagrams:
|
|
194
|
+
|
|
195
|
+
\`\`\`mermaid
|
|
196
|
+
graph TD
|
|
197
|
+
A --> B
|
|
198
|
+
\`\`\`
|
|
199
|
+
|
|
200
|
+
\`\`\`mermaid
|
|
201
|
+
sequenceDiagram
|
|
202
|
+
Alice->>Bob: Hello
|
|
203
|
+
\`\`\`
|
|
204
|
+
|
|
205
|
+
\`\`\`mermaid
|
|
206
|
+
pie title Test
|
|
207
|
+
"A" : 50
|
|
208
|
+
"B" : 50
|
|
209
|
+
\`\`\``
|
|
210
|
+
};
|
|
211
|
+
|
|
212
|
+
export const schemas = {
|
|
213
|
+
jsonOnly: '{"type": "object", "properties": {"name": {"type": "string"}}}',
|
|
214
|
+
mermaidOnly: 'Create a mermaid flowchart showing the process',
|
|
215
|
+
mixed: 'Return JSON response with embedded mermaid diagram',
|
|
216
|
+
neither: 'Return plain text response',
|
|
217
|
+
|
|
218
|
+
specific: {
|
|
219
|
+
flowchart: 'Generate a mermaid flowchart diagram',
|
|
220
|
+
sequence: 'Create a sequence diagram using mermaid',
|
|
221
|
+
gantt: 'Show a gantt chart in mermaid format',
|
|
222
|
+
pie: 'Create a pie chart diagram',
|
|
223
|
+
json: 'Response must be valid JSON format'
|
|
224
|
+
}
|
|
225
|
+
};
|
|
226
|
+
|
|
227
|
+
export const errorScenarios = {
|
|
228
|
+
json: {
|
|
229
|
+
unexpectedToken: {
|
|
230
|
+
response: '{"test": value}',
|
|
231
|
+
error: 'Unexpected token v in JSON at position 9',
|
|
232
|
+
detailedError: 'Unexpected token v in JSON at position 9'
|
|
233
|
+
},
|
|
234
|
+
|
|
235
|
+
unexpectedEnd: {
|
|
236
|
+
response: '{"test":',
|
|
237
|
+
error: 'Unexpected end of JSON input',
|
|
238
|
+
detailedError: 'Unexpected end of JSON input'
|
|
239
|
+
},
|
|
240
|
+
|
|
241
|
+
duplicateKeys: {
|
|
242
|
+
response: '{"test": 1, "test": 2}',
|
|
243
|
+
error: 'Duplicate key "test"',
|
|
244
|
+
detailedError: 'JSON contains duplicate key "test"'
|
|
245
|
+
}
|
|
246
|
+
},
|
|
247
|
+
|
|
248
|
+
mermaid: {
|
|
249
|
+
unclosedBracket: {
|
|
250
|
+
diagram: 'graph TD\n A[Start --> B[Process]',
|
|
251
|
+
error: 'Unclosed bracket on line 2',
|
|
252
|
+
detailedError: 'Line "A[Start --> B[Process]" contains an unclosed bracket'
|
|
253
|
+
},
|
|
254
|
+
|
|
255
|
+
missingColon: {
|
|
256
|
+
diagram: 'sequenceDiagram\n Alice->>Bob Hello',
|
|
257
|
+
error: 'Missing colon in sequence message on line 2',
|
|
258
|
+
detailedError: 'Line "Alice->>Bob Hello" appears to be a sequence message but is missing a colon'
|
|
259
|
+
},
|
|
260
|
+
|
|
261
|
+
unknownType: {
|
|
262
|
+
diagram: 'invalidDiagram\n content',
|
|
263
|
+
error: 'Diagram does not match any known Mermaid diagram pattern',
|
|
264
|
+
detailedError: 'The diagram must start with a valid Mermaid diagram type (graph, sequenceDiagram, gantt, pie, etc.)'
|
|
265
|
+
}
|
|
266
|
+
}
|
|
267
|
+
};
|
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Test that ProbeAgent auto-detects and falls back to claude-code provider
|
|
5
|
+
* when no API keys are present but claude command is available
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
import { ProbeAgent } from '../../src/agent/ProbeAgent.js';
|
|
9
|
+
|
|
10
|
+
async function testAutoFallback() {
|
|
11
|
+
console.log('๐งช Testing Auto-Fallback to Claude Code Provider\n');
|
|
12
|
+
console.log('='*60 + '\n');
|
|
13
|
+
|
|
14
|
+
// Temporarily remove all API key env vars
|
|
15
|
+
const savedEnv = {
|
|
16
|
+
ANTHROPIC_API_KEY: process.env.ANTHROPIC_API_KEY,
|
|
17
|
+
ANTHROPIC_AUTH_TOKEN: process.env.ANTHROPIC_AUTH_TOKEN,
|
|
18
|
+
OPENAI_API_KEY: process.env.OPENAI_API_KEY,
|
|
19
|
+
GOOGLE_GENERATIVE_AI_API_KEY: process.env.GOOGLE_GENERATIVE_AI_API_KEY,
|
|
20
|
+
GOOGLE_API_KEY: process.env.GOOGLE_API_KEY,
|
|
21
|
+
AWS_ACCESS_KEY_ID: process.env.AWS_ACCESS_KEY_ID,
|
|
22
|
+
AWS_SECRET_ACCESS_KEY: process.env.AWS_SECRET_ACCESS_KEY,
|
|
23
|
+
AWS_REGION: process.env.AWS_REGION,
|
|
24
|
+
AWS_BEDROCK_API_KEY: process.env.AWS_BEDROCK_API_KEY
|
|
25
|
+
};
|
|
26
|
+
|
|
27
|
+
// Remove all API keys
|
|
28
|
+
delete process.env.ANTHROPIC_API_KEY;
|
|
29
|
+
delete process.env.ANTHROPIC_AUTH_TOKEN;
|
|
30
|
+
delete process.env.OPENAI_API_KEY;
|
|
31
|
+
delete process.env.GOOGLE_GENERATIVE_AI_API_KEY;
|
|
32
|
+
delete process.env.GOOGLE_API_KEY;
|
|
33
|
+
delete process.env.AWS_ACCESS_KEY_ID;
|
|
34
|
+
delete process.env.AWS_SECRET_ACCESS_KEY;
|
|
35
|
+
delete process.env.AWS_REGION;
|
|
36
|
+
delete process.env.AWS_BEDROCK_API_KEY;
|
|
37
|
+
|
|
38
|
+
try {
|
|
39
|
+
console.log('Creating ProbeAgent with NO API keys...\n');
|
|
40
|
+
|
|
41
|
+
const agent = new ProbeAgent({
|
|
42
|
+
allowedFolders: [process.cwd()],
|
|
43
|
+
debug: true
|
|
44
|
+
});
|
|
45
|
+
|
|
46
|
+
console.log('\nInitializing agent...\n');
|
|
47
|
+
await agent.initialize();
|
|
48
|
+
|
|
49
|
+
// Check if it auto-switched to claude-code
|
|
50
|
+
if (agent.clientApiProvider === 'claude-code' && agent.apiType === 'claude-code') {
|
|
51
|
+
console.log('\nโ
SUCCESS: Auto-detected and switched to claude-code provider!');
|
|
52
|
+
console.log(` Provider: ${agent.clientApiProvider}`);
|
|
53
|
+
console.log(` API Type: ${agent.apiType}`);
|
|
54
|
+
console.log(` Model: ${agent.model}`);
|
|
55
|
+
|
|
56
|
+
// Try a simple query
|
|
57
|
+
console.log('\n๐ Testing query: "What is 5 + 3?"\n');
|
|
58
|
+
const response = await agent.answer('What is 5 + 3?');
|
|
59
|
+
|
|
60
|
+
if (response && response.length > 0) {
|
|
61
|
+
console.log('โ
Query successful!');
|
|
62
|
+
console.log('Response:', response.substring(0, 100) + (response.length > 100 ? '...' : ''));
|
|
63
|
+
} else {
|
|
64
|
+
console.log('โ ๏ธ Query returned empty response');
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
// Clean up
|
|
68
|
+
if (agent.engine && agent.engine.close) {
|
|
69
|
+
await agent.engine.close();
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
} else {
|
|
73
|
+
console.log('โ FAIL: Did not auto-switch to claude-code provider');
|
|
74
|
+
console.log(` Provider: ${agent.clientApiProvider}`);
|
|
75
|
+
console.log(` API Type: ${agent.apiType}`);
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
} catch (error) {
|
|
79
|
+
if (error.message.includes('claude command not found')) {
|
|
80
|
+
console.log('\nโ ๏ธ Test could not run: claude command not found on system');
|
|
81
|
+
console.log('This is expected if Claude Code is not installed');
|
|
82
|
+
console.log('\nTo install Claude Code:');
|
|
83
|
+
console.log(' https://docs.claude.com/en/docs/claude-code');
|
|
84
|
+
} else {
|
|
85
|
+
console.error('\nโ Test failed:', error.message);
|
|
86
|
+
}
|
|
87
|
+
} finally {
|
|
88
|
+
// Restore environment variables
|
|
89
|
+
Object.entries(savedEnv).forEach(([key, value]) => {
|
|
90
|
+
if (value !== undefined) {
|
|
91
|
+
process.env[key] = value;
|
|
92
|
+
}
|
|
93
|
+
});
|
|
94
|
+
|
|
95
|
+
console.log('\n' + '='*60);
|
|
96
|
+
console.log('๐ Auto-Fallback Test Complete\n');
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
async function testWithAPIKey() {
|
|
101
|
+
console.log('\n' + '='*60);
|
|
102
|
+
console.log('๐งช Testing Normal Behavior with API Key\n');
|
|
103
|
+
|
|
104
|
+
// Set a mock env var
|
|
105
|
+
const hadKey = !!process.env.ANTHROPIC_API_KEY;
|
|
106
|
+
if (!hadKey) {
|
|
107
|
+
process.env.ANTHROPIC_API_KEY = 'test-key';
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
try {
|
|
111
|
+
const agent = new ProbeAgent({
|
|
112
|
+
allowedFolders: [process.cwd()],
|
|
113
|
+
debug: false
|
|
114
|
+
});
|
|
115
|
+
|
|
116
|
+
await agent.initialize();
|
|
117
|
+
|
|
118
|
+
if (agent.apiType !== 'claude-code') {
|
|
119
|
+
console.log('โ
With API key, did NOT auto-switch to claude-code');
|
|
120
|
+
console.log(` API Type: ${agent.apiType}`);
|
|
121
|
+
} else {
|
|
122
|
+
console.log('โ ๏ธ With API key, unexpectedly switched to claude-code');
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
} catch (error) {
|
|
126
|
+
console.log('โน๏ธ Expected error with test API key:', error.message.substring(0, 80));
|
|
127
|
+
} finally {
|
|
128
|
+
if (!hadKey) {
|
|
129
|
+
delete process.env.ANTHROPIC_API_KEY;
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
async function main() {
|
|
135
|
+
console.log('๐ฌ ProbeAgent Auto-Fallback to Claude Code Test\n');
|
|
136
|
+
console.log('This test verifies that ProbeAgent automatically uses claude-code');
|
|
137
|
+
console.log('provider when no API keys are found but claude command is available.\n');
|
|
138
|
+
|
|
139
|
+
await testAutoFallback();
|
|
140
|
+
await testWithAPIKey();
|
|
141
|
+
|
|
142
|
+
console.log('\n๐ Summary:');
|
|
143
|
+
console.log('- Auto-fallback activates when: No API keys + claude command available');
|
|
144
|
+
console.log('- Falls back to: provider="claude-code"');
|
|
145
|
+
console.log('- User benefit: Zero-config usage in Claude Code environment');
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
main().catch(console.error);
|
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Integration test for multi-step Claude Code responses
|
|
5
|
+
* Tests that we properly handle responses when Claude Code uses internal agents/tools
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
import { ProbeAgent } from '../../src/agent/ProbeAgent.js';
|
|
9
|
+
|
|
10
|
+
async function testMultiStepQuery() {
|
|
11
|
+
console.log('Testing Multi-Step Claude Code Query (with internal tool use)\n');
|
|
12
|
+
console.log('='*60 + '\n');
|
|
13
|
+
|
|
14
|
+
const agent = new ProbeAgent({
|
|
15
|
+
allowedFolders: [process.cwd()],
|
|
16
|
+
debug: false, // Clean output
|
|
17
|
+
provider: 'claude-code'
|
|
18
|
+
});
|
|
19
|
+
|
|
20
|
+
try {
|
|
21
|
+
await agent.initialize();
|
|
22
|
+
|
|
23
|
+
// Query that might trigger internal tool use (like Task agent)
|
|
24
|
+
console.log('๐ Query: "Explain how this npm package works"\n');
|
|
25
|
+
console.log('Note: This query may trigger internal tool usage in Claude Code\n');
|
|
26
|
+
|
|
27
|
+
let streamedContent = '';
|
|
28
|
+
const result = await agent.answer(
|
|
29
|
+
'Explain how this npm package (ProbeAgent) works - give a brief overview',
|
|
30
|
+
[],
|
|
31
|
+
{
|
|
32
|
+
onStream: (chunk) => {
|
|
33
|
+
streamedContent += chunk;
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
);
|
|
37
|
+
|
|
38
|
+
console.log('='*60 + '\n');
|
|
39
|
+
console.log('๐ Response Analysis:\n');
|
|
40
|
+
|
|
41
|
+
if (result && result.length > 0) {
|
|
42
|
+
console.log('โ
Got final response from Claude Code');
|
|
43
|
+
console.log('Response length:', result.length, 'characters');
|
|
44
|
+
console.log('\nFirst 300 characters of response:');
|
|
45
|
+
console.log(result.substring(0, 300) + '...\n');
|
|
46
|
+
|
|
47
|
+
// Check if response seems complete
|
|
48
|
+
if (result.includes('ProbeAgent') || result.includes('agent') || result.includes('AI')) {
|
|
49
|
+
console.log('โ
Response contains relevant content about ProbeAgent');
|
|
50
|
+
} else {
|
|
51
|
+
console.log('โ ๏ธ Response may not contain expected content');
|
|
52
|
+
}
|
|
53
|
+
} else {
|
|
54
|
+
console.log('โ FAIL: Empty response received');
|
|
55
|
+
console.log('This indicates the multi-step fix may not be working');
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
// Check streaming
|
|
59
|
+
if (streamedContent.length > 0) {
|
|
60
|
+
console.log('\nโ
Streaming also worked');
|
|
61
|
+
console.log('Streamed content length:', streamedContent.length);
|
|
62
|
+
} else {
|
|
63
|
+
console.log('\nโ ๏ธ No streamed content received');
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
// Clean up
|
|
67
|
+
if (agent.engine && agent.engine.close) {
|
|
68
|
+
await agent.engine.close();
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
} catch (error) {
|
|
72
|
+
console.error('Test failed:', error.message);
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
async function testSimpleQuery() {
|
|
77
|
+
console.log('\n' + '='*60);
|
|
78
|
+
console.log('Testing Simple Claude Code Query (baseline)\n');
|
|
79
|
+
|
|
80
|
+
const agent = new ProbeAgent({
|
|
81
|
+
allowedFolders: [process.cwd()],
|
|
82
|
+
debug: false,
|
|
83
|
+
provider: 'claude-code'
|
|
84
|
+
});
|
|
85
|
+
|
|
86
|
+
try {
|
|
87
|
+
await agent.initialize();
|
|
88
|
+
|
|
89
|
+
console.log('๐ Query: "Say hello"\n');
|
|
90
|
+
|
|
91
|
+
const result = await agent.answer('Say hello');
|
|
92
|
+
|
|
93
|
+
if (result && result.length > 0) {
|
|
94
|
+
console.log('โ
Simple query works');
|
|
95
|
+
console.log('Response:', result.substring(0, 100));
|
|
96
|
+
} else {
|
|
97
|
+
console.log('โ Even simple query returned empty');
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
if (agent.engine && agent.engine.close) {
|
|
101
|
+
await agent.engine.close();
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
} catch (error) {
|
|
105
|
+
console.error('Simple test failed:', error.message);
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
async function main() {
|
|
110
|
+
console.log('๐งช Claude Code Multi-Step Response Integration Test\n');
|
|
111
|
+
|
|
112
|
+
// Test simple query first (baseline)
|
|
113
|
+
await testSimpleQuery();
|
|
114
|
+
|
|
115
|
+
// Test complex query that may trigger internal tools
|
|
116
|
+
await testMultiStepQuery();
|
|
117
|
+
|
|
118
|
+
console.log('\n' + '='*60);
|
|
119
|
+
console.log('๐ Integration Test Complete\n');
|
|
120
|
+
console.log('Key Points:');
|
|
121
|
+
console.log('- Claude Code may use internal agents/tools (Task, etc.)');
|
|
122
|
+
console.log('- These emit "assistant" type messages');
|
|
123
|
+
console.log('- Without handling "assistant" type, responses appear empty');
|
|
124
|
+
console.log('- The fix adds support for extracting text from "assistant" messages');
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
main().catch(console.error);
|
|
@@ -0,0 +1,163 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Test that Claude Code tool events are properly extracted and emitted
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
import { ProbeAgent } from '../../src/agent/ProbeAgent.js';
|
|
8
|
+
|
|
9
|
+
async function testToolEvents() {
|
|
10
|
+
console.log('Testing Tool Event Extraction from Claude Code\n');
|
|
11
|
+
console.log('='*60 + '\n');
|
|
12
|
+
|
|
13
|
+
const agent = new ProbeAgent({
|
|
14
|
+
allowedFolders: [process.cwd()],
|
|
15
|
+
debug: true, // Enable debug to see tool event emissions
|
|
16
|
+
provider: 'claude-code'
|
|
17
|
+
});
|
|
18
|
+
|
|
19
|
+
// Track tool events
|
|
20
|
+
const toolEvents = [];
|
|
21
|
+
|
|
22
|
+
try {
|
|
23
|
+
await agent.initialize();
|
|
24
|
+
|
|
25
|
+
// Listen for tool events
|
|
26
|
+
if (agent.events) {
|
|
27
|
+
agent.events.on('toolCall', (event) => {
|
|
28
|
+
toolEvents.push(event);
|
|
29
|
+
console.log('\n๐ Tool Event Captured:');
|
|
30
|
+
console.log(' - Name:', event.name);
|
|
31
|
+
console.log(' - Status:', event.status);
|
|
32
|
+
console.log(' - Timestamp:', event.timestamp);
|
|
33
|
+
if (event.args) {
|
|
34
|
+
console.log(' - Args:', JSON.stringify(event.args).substring(0, 100));
|
|
35
|
+
}
|
|
36
|
+
if (event.resultPreview) {
|
|
37
|
+
console.log(' - Result:', event.resultPreview.substring(0, 100));
|
|
38
|
+
}
|
|
39
|
+
});
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
// Query that should trigger tool use
|
|
43
|
+
console.log('๐ Query: "List the main JavaScript files in this directory"\n');
|
|
44
|
+
console.log('This query should trigger tool use (listFiles or similar)\n');
|
|
45
|
+
|
|
46
|
+
const result = await agent.answer(
|
|
47
|
+
'List the main JavaScript files in this directory',
|
|
48
|
+
[],
|
|
49
|
+
{
|
|
50
|
+
onStream: (chunk) => {
|
|
51
|
+
// Silent streaming to focus on events
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
);
|
|
55
|
+
|
|
56
|
+
console.log('\n' + '='*60 + '\n');
|
|
57
|
+
console.log('๐ Response Summary:');
|
|
58
|
+
console.log('Response length:', result.length, 'characters');
|
|
59
|
+
console.log('First 300 chars:', result.substring(0, 300) + '...\n');
|
|
60
|
+
|
|
61
|
+
console.log('='*60 + '\n');
|
|
62
|
+
console.log('๐ Tool Event Analysis:\n');
|
|
63
|
+
|
|
64
|
+
if (toolEvents.length > 0) {
|
|
65
|
+
console.log(`โ
Captured ${toolEvents.length} tool events`);
|
|
66
|
+
|
|
67
|
+
// Group by status
|
|
68
|
+
const started = toolEvents.filter(e => e.status === 'started');
|
|
69
|
+
const completed = toolEvents.filter(e => e.status === 'completed');
|
|
70
|
+
const errors = toolEvents.filter(e => e.status === 'error');
|
|
71
|
+
|
|
72
|
+
console.log(` - Started: ${started.length}`);
|
|
73
|
+
console.log(` - Completed: ${completed.length}`);
|
|
74
|
+
console.log(` - Errors: ${errors.length}`);
|
|
75
|
+
|
|
76
|
+
// List unique tool names
|
|
77
|
+
const toolNames = [...new Set(toolEvents.map(e => e.name))];
|
|
78
|
+
console.log('\n๐ฆ Tools used:');
|
|
79
|
+
toolNames.forEach(name => {
|
|
80
|
+
const count = toolEvents.filter(e => e.name === name).length;
|
|
81
|
+
console.log(` - ${name} (${count} events)`);
|
|
82
|
+
});
|
|
83
|
+
|
|
84
|
+
// Check if MCP tools were used
|
|
85
|
+
const mcpTools = toolEvents.filter(e => e.name && e.name.startsWith('mcp__'));
|
|
86
|
+
if (mcpTools.length > 0) {
|
|
87
|
+
console.log('\nโ
MCP tools detected:', mcpTools.map(e => e.name).join(', '));
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
} else {
|
|
91
|
+
console.log('โ ๏ธ No tool events captured');
|
|
92
|
+
console.log('This could mean:');
|
|
93
|
+
console.log(' 1. Claude Code didn\'t use any tools for this query');
|
|
94
|
+
console.log(' 2. Tool event extraction needs adjustment');
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
// Clean up
|
|
98
|
+
if (agent.engine && agent.engine.close) {
|
|
99
|
+
await agent.engine.close();
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
} catch (error) {
|
|
103
|
+
console.error('Test failed:', error.message);
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
async function testSimpleQuery() {
|
|
108
|
+
console.log('\n' + '='*60);
|
|
109
|
+
console.log('Testing Simple Query (no tools expected)\n');
|
|
110
|
+
|
|
111
|
+
const agent = new ProbeAgent({
|
|
112
|
+
allowedFolders: [process.cwd()],
|
|
113
|
+
debug: false,
|
|
114
|
+
provider: 'claude-code'
|
|
115
|
+
});
|
|
116
|
+
|
|
117
|
+
const toolEvents = [];
|
|
118
|
+
|
|
119
|
+
try {
|
|
120
|
+
await agent.initialize();
|
|
121
|
+
|
|
122
|
+
if (agent.events) {
|
|
123
|
+
agent.events.on('toolCall', (event) => {
|
|
124
|
+
toolEvents.push(event);
|
|
125
|
+
});
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
console.log('๐ Query: "What is 2+2?"\n');
|
|
129
|
+
const result = await agent.answer('What is 2+2?');
|
|
130
|
+
|
|
131
|
+
if (toolEvents.length === 0) {
|
|
132
|
+
console.log('โ
No tool events for simple query (expected)');
|
|
133
|
+
} else {
|
|
134
|
+
console.log(`โ ๏ธ ${toolEvents.length} tool events for simple query (unexpected)`);
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
if (agent.engine && agent.engine.close) {
|
|
138
|
+
await agent.engine.close();
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
} catch (error) {
|
|
142
|
+
console.error('Simple test failed:', error.message);
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
async function main() {
|
|
147
|
+
console.log('๐งช Claude Code Tool Event Extraction Test\n');
|
|
148
|
+
|
|
149
|
+
// Test with query that should trigger tools
|
|
150
|
+
await testToolEvents();
|
|
151
|
+
|
|
152
|
+
// Test with simple query (no tools expected)
|
|
153
|
+
await testSimpleQuery();
|
|
154
|
+
|
|
155
|
+
console.log('\n' + '='*60);
|
|
156
|
+
console.log('๐ Tool Event Test Complete\n');
|
|
157
|
+
console.log('Key Points:');
|
|
158
|
+
console.log('- Tool events are extracted from Claude Code\'s internal operations');
|
|
159
|
+
console.log('- Events are emitted as a batch after response completes');
|
|
160
|
+
console.log('- This maintains event compatibility with regular ProbeAgent');
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
main().catch(console.error);
|