@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
|
File without changes
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
# Probe Binary Directory
|
|
2
|
+
|
|
3
|
+
This directory is used to store the downloaded probe binary.
|
|
4
|
+
|
|
5
|
+
The binary is automatically downloaded during package installation.
|
|
6
|
+
If you encounter any issues with the download, you can manually place the probe binary in this directory.
|
|
7
|
+
|
|
8
|
+
Binary name should be:
|
|
9
|
+
- `probe` (on Linux/macOS)
|
|
10
|
+
- `probe.exe` (on Windows)
|
|
11
|
+
|
|
12
|
+
You can download the binary from: https://github.com/probelabs/probe/releases
|
|
@@ -0,0 +1,167 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
|
|
3
|
+
import { spawn } from 'child_process';
|
|
4
|
+
import { join, dirname } from 'path';
|
|
5
|
+
import { fileURLToPath } from 'url';
|
|
6
|
+
import { access, constants } from 'fs';
|
|
7
|
+
import { promisify } from 'util';
|
|
8
|
+
|
|
9
|
+
const accessAsync = promisify(access);
|
|
10
|
+
const __filename = fileURLToPath(import.meta.url);
|
|
11
|
+
const __dirname = dirname(__filename);
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* Check if a file exists and is executable
|
|
15
|
+
*/
|
|
16
|
+
async function isExecutable(filePath) {
|
|
17
|
+
try {
|
|
18
|
+
await accessAsync(filePath, constants.F_OK | constants.X_OK);
|
|
19
|
+
return true;
|
|
20
|
+
} catch {
|
|
21
|
+
return false;
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
/**
|
|
26
|
+
* Attempt to download the binary if it's missing
|
|
27
|
+
*/
|
|
28
|
+
async function ensureBinary(binaryPath) {
|
|
29
|
+
try {
|
|
30
|
+
// Try to import the downloader and download the binary
|
|
31
|
+
const { downloadProbeBinary } = await import('../src/downloader.js');
|
|
32
|
+
console.error('Probe binary not found, downloading...');
|
|
33
|
+
await downloadProbeBinary();
|
|
34
|
+
|
|
35
|
+
// Check if the binary now exists and is executable
|
|
36
|
+
if (await isExecutable(binaryPath)) {
|
|
37
|
+
console.error('Binary downloaded successfully.');
|
|
38
|
+
|
|
39
|
+
// On macOS, try to remove quarantine attributes that might prevent execution
|
|
40
|
+
if (process.platform === 'darwin') {
|
|
41
|
+
try {
|
|
42
|
+
const { exec } = await import('child_process');
|
|
43
|
+
const { promisify } = await import('util');
|
|
44
|
+
const execAsync = promisify(exec);
|
|
45
|
+
await execAsync(`xattr -d com.apple.quarantine "${binaryPath}" 2>/dev/null || true`);
|
|
46
|
+
} catch {
|
|
47
|
+
// Ignore errors - this is just a precaution
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
return true;
|
|
52
|
+
} else {
|
|
53
|
+
console.error('Binary downloaded but is not executable.');
|
|
54
|
+
return false;
|
|
55
|
+
}
|
|
56
|
+
} catch (error) {
|
|
57
|
+
console.error('Failed to download binary:', error.message);
|
|
58
|
+
return false;
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
/**
|
|
63
|
+
* Spawn the probe binary with proper error handling
|
|
64
|
+
*/
|
|
65
|
+
async function spawnProbeBinary(binaryPath, args) {
|
|
66
|
+
return new Promise((resolve, reject) => {
|
|
67
|
+
const child = spawn(binaryPath, args, { stdio: 'inherit' });
|
|
68
|
+
|
|
69
|
+
child.on('error', async (error) => {
|
|
70
|
+
// Handle spawn errors, particularly the dreaded "spawn Unknown system error -8"
|
|
71
|
+
if (error.code === 'ENOENT') {
|
|
72
|
+
console.error(`Error: Binary not found at ${binaryPath}`);
|
|
73
|
+
process.exit(1);
|
|
74
|
+
} else if (error.code === 'EACCES' || error.message.includes('spawn') || error.errno === -8) {
|
|
75
|
+
console.error(`Error: Cannot execute binary at ${binaryPath}`);
|
|
76
|
+
console.error('This might be due to:');
|
|
77
|
+
console.error('1. Missing execute permissions');
|
|
78
|
+
console.error('2. Architecture mismatch');
|
|
79
|
+
console.error('3. Corrupted binary file');
|
|
80
|
+
console.error('');
|
|
81
|
+
console.error('Attempting to re-download the binary...');
|
|
82
|
+
|
|
83
|
+
const downloadSuccess = await ensureBinary(binaryPath);
|
|
84
|
+
if (downloadSuccess) {
|
|
85
|
+
// Retry execution after download
|
|
86
|
+
try {
|
|
87
|
+
const retryChild = spawn(binaryPath, args, { stdio: 'inherit' });
|
|
88
|
+
retryChild.on('exit', (code) => resolve(code || 0));
|
|
89
|
+
retryChild.on('error', (retryError) => {
|
|
90
|
+
console.error('Failed to execute binary even after re-download:', retryError.message);
|
|
91
|
+
reject(retryError);
|
|
92
|
+
});
|
|
93
|
+
} catch (retryError) {
|
|
94
|
+
console.error('Failed to retry execution:', retryError.message);
|
|
95
|
+
reject(retryError);
|
|
96
|
+
}
|
|
97
|
+
} else {
|
|
98
|
+
reject(error);
|
|
99
|
+
}
|
|
100
|
+
} else {
|
|
101
|
+
console.error('Unexpected error:', error.message);
|
|
102
|
+
reject(error);
|
|
103
|
+
}
|
|
104
|
+
});
|
|
105
|
+
|
|
106
|
+
child.on('exit', (code) => resolve(code || 0));
|
|
107
|
+
});
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
// Main execution logic
|
|
111
|
+
async function main() {
|
|
112
|
+
try {
|
|
113
|
+
// Check if first argument is 'mcp'
|
|
114
|
+
if (process.argv[2] === 'mcp') {
|
|
115
|
+
// Launch MCP server instead of binary
|
|
116
|
+
const mcpPath = join(__dirname, '..', 'build', 'mcp', 'index.js');
|
|
117
|
+
const mcpArgs = process.argv.slice(3); // Remove 'node', 'probe', and 'mcp'
|
|
118
|
+
|
|
119
|
+
const child = spawn('node', [mcpPath, ...mcpArgs], { stdio: 'inherit' });
|
|
120
|
+
child.on('exit', (code) => process.exit(code || 0));
|
|
121
|
+
} else if (process.argv[2] === 'agent') {
|
|
122
|
+
// Launch Agent server instead of binary (use bundled version to reduce dependencies)
|
|
123
|
+
const agentPath = join(__dirname, '..', 'build', 'agent', 'index.js');
|
|
124
|
+
|
|
125
|
+
// Verify bundled agent exists
|
|
126
|
+
try {
|
|
127
|
+
await accessAsync(agentPath, constants.F_OK);
|
|
128
|
+
} catch {
|
|
129
|
+
console.error('Error: Bundled agent not found at', agentPath);
|
|
130
|
+
console.error('Please run: npm run build:agent');
|
|
131
|
+
process.exit(1);
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
const agentArgs = process.argv.slice(3); // Remove 'node', 'probe', and 'agent'
|
|
135
|
+
const child = spawn('node', [agentPath, ...agentArgs], { stdio: 'inherit' });
|
|
136
|
+
child.on('exit', (code) => process.exit(code || 0));
|
|
137
|
+
} else {
|
|
138
|
+
// Normal probe binary execution
|
|
139
|
+
const isWindows = process.platform === 'win32';
|
|
140
|
+
const binaryName = isWindows ? 'probe.exe' : 'probe-binary';
|
|
141
|
+
const binaryPath = join(__dirname, binaryName);
|
|
142
|
+
|
|
143
|
+
// Check if binary exists and is executable
|
|
144
|
+
if (!(await isExecutable(binaryPath))) {
|
|
145
|
+
console.error('Probe binary not found or not executable, attempting to download...');
|
|
146
|
+
const downloadSuccess = await ensureBinary(binaryPath);
|
|
147
|
+
if (!downloadSuccess) {
|
|
148
|
+
console.error('Failed to download probe binary. Please try installing again or check your internet connection.');
|
|
149
|
+
process.exit(1);
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
// Execute the binary
|
|
154
|
+
const exitCode = await spawnProbeBinary(binaryPath, process.argv.slice(2));
|
|
155
|
+
process.exit(exitCode);
|
|
156
|
+
}
|
|
157
|
+
} catch (error) {
|
|
158
|
+
console.error('Unexpected error in probe wrapper:', error.message);
|
|
159
|
+
process.exit(1);
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
// Run the main function
|
|
164
|
+
main().catch(error => {
|
|
165
|
+
console.error('Fatal error:', error.message);
|
|
166
|
+
process.exit(1);
|
|
167
|
+
});
|
|
@@ -0,0 +1,414 @@
|
|
|
1
|
+
# Claude Code Integration Guide
|
|
2
|
+
|
|
3
|
+
Complete guide for using ProbeAgent with Claude Code's built-in `claude` command for zero-configuration AI-powered code assistance.
|
|
4
|
+
|
|
5
|
+
## Table of Contents
|
|
6
|
+
- [Overview](#overview)
|
|
7
|
+
- [Quick Start](#quick-start)
|
|
8
|
+
- [How It Works](#how-it-works)
|
|
9
|
+
- [Auto-Fallback Feature](#auto-fallback-feature)
|
|
10
|
+
- [Tool Event Extraction](#tool-event-extraction)
|
|
11
|
+
- [Configuration](#configuration)
|
|
12
|
+
- [Examples](#examples)
|
|
13
|
+
- [Testing](#testing)
|
|
14
|
+
- [Troubleshooting](#troubleshooting)
|
|
15
|
+
|
|
16
|
+
## Overview
|
|
17
|
+
|
|
18
|
+
ProbeAgent now supports Claude Code's `claude` command as a provider, enabling:
|
|
19
|
+
- **Zero-configuration usage** in Claude Code environments
|
|
20
|
+
- **Automatic fallback** when no API keys are present
|
|
21
|
+
- **Black-box operation** - Claude Code handles its own agentic loop
|
|
22
|
+
- **Tool event extraction** - Visibility into internal tool usage
|
|
23
|
+
- **Full MCP integration** - Access to Probe's semantic search tools
|
|
24
|
+
|
|
25
|
+
## Quick Start
|
|
26
|
+
|
|
27
|
+
### Automatic (Zero Config)
|
|
28
|
+
|
|
29
|
+
```javascript
|
|
30
|
+
import { ProbeAgent } from 'probe-agent';
|
|
31
|
+
|
|
32
|
+
// Works automatically if claude command is installed!
|
|
33
|
+
const agent = new ProbeAgent({
|
|
34
|
+
allowedFolders: ['/path/to/your/code']
|
|
35
|
+
});
|
|
36
|
+
|
|
37
|
+
await agent.initialize();
|
|
38
|
+
const response = await agent.answer('Explain how this codebase works');
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
### Explicit Provider
|
|
42
|
+
|
|
43
|
+
```javascript
|
|
44
|
+
const agent = new ProbeAgent({
|
|
45
|
+
provider: 'claude-code', // Explicit
|
|
46
|
+
allowedFolders: ['/path/to/your/code']
|
|
47
|
+
});
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
### Environment Variable
|
|
51
|
+
|
|
52
|
+
```bash
|
|
53
|
+
USE_CLAUDE_CODE=true node your-script.js
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
## How It Works
|
|
57
|
+
|
|
58
|
+
### Architecture
|
|
59
|
+
|
|
60
|
+
```
|
|
61
|
+
ProbeAgent
|
|
62
|
+
↓
|
|
63
|
+
provider: 'claude-code'
|
|
64
|
+
↓
|
|
65
|
+
Enhanced Claude Code Engine
|
|
66
|
+
↓
|
|
67
|
+
Spawns: claude --output-format json --mcp-config ...
|
|
68
|
+
↓
|
|
69
|
+
Claude Code (black box)
|
|
70
|
+
- Handles its own agentic loop
|
|
71
|
+
- Uses MCP tools (mcp__probe__*)
|
|
72
|
+
- Returns final response
|
|
73
|
+
↓
|
|
74
|
+
Tool Event Extraction
|
|
75
|
+
↓
|
|
76
|
+
Response + Tool Events
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
### Black Box Mode
|
|
80
|
+
|
|
81
|
+
Unlike the native engine which controls tool iteration:
|
|
82
|
+
- **Claude Code manages its own loop** - ProbeAgent doesn't see intermediate steps
|
|
83
|
+
- **No XML formatting** - Uses native MCP protocol
|
|
84
|
+
- **Tool events extracted post-hoc** - Emitted as batch after response
|
|
85
|
+
- **Bypass tool loop** - ProbeAgent's iteration logic is skipped
|
|
86
|
+
|
|
87
|
+
### Key Components
|
|
88
|
+
|
|
89
|
+
1. **Enhanced Claude Code Engine** (`src/agent/engines/enhanced-claude-code.js`)
|
|
90
|
+
- Spawns `claude` command with MCP configuration
|
|
91
|
+
- Manages session persistence
|
|
92
|
+
- Extracts tool events from response stream
|
|
93
|
+
|
|
94
|
+
2. **Built-in MCP Server** (`src/agent/mcp/built-in-server.js`)
|
|
95
|
+
- Provides Probe tools via MCP protocol
|
|
96
|
+
- Tools: search, extract, query, list_files, search_files
|
|
97
|
+
- Automatically configured and started
|
|
98
|
+
|
|
99
|
+
3. **Auto-Detection Logic** (`src/agent/ProbeAgent.js`)
|
|
100
|
+
- Checks for `claude` command availability
|
|
101
|
+
- Falls back when no API keys present
|
|
102
|
+
|
|
103
|
+
## Auto-Fallback Feature
|
|
104
|
+
|
|
105
|
+
### Detection Flow
|
|
106
|
+
|
|
107
|
+
```
|
|
108
|
+
Constructor → No API keys found
|
|
109
|
+
↓
|
|
110
|
+
Mark apiType='uninitialized'
|
|
111
|
+
↓
|
|
112
|
+
initialize() called
|
|
113
|
+
↓
|
|
114
|
+
Check: is claude command available?
|
|
115
|
+
↓
|
|
116
|
+
Yes → provider='claude-code'
|
|
117
|
+
No → Throw error with instructions
|
|
118
|
+
```
|
|
119
|
+
|
|
120
|
+
### Priority Order
|
|
121
|
+
|
|
122
|
+
1. **Explicit provider** - Use if `options.provider` is set
|
|
123
|
+
2. **API keys** - Use first available (Anthropic, OpenAI, Google, AWS)
|
|
124
|
+
3. **Claude command** - Auto-fallback if installed
|
|
125
|
+
4. **Error** - Neither API keys nor claude available
|
|
126
|
+
|
|
127
|
+
### Error Messages
|
|
128
|
+
|
|
129
|
+
**No API keys, no claude command:**
|
|
130
|
+
```
|
|
131
|
+
Error: No API key provided and claude command not found. Please either:
|
|
132
|
+
1. Set an API key: ANTHROPIC_API_KEY, OPENAI_API_KEY, GOOGLE_GENERATIVE_AI_API_KEY, or AWS credentials
|
|
133
|
+
2. Install claude command from https://docs.claude.com/en/docs/claude-code
|
|
134
|
+
```
|
|
135
|
+
|
|
136
|
+
**With debug enabled:**
|
|
137
|
+
```
|
|
138
|
+
[DEBUG] No API keys found - will check for claude command in initialize()
|
|
139
|
+
[DEBUG] No API keys found, but claude command detected
|
|
140
|
+
[DEBUG] Auto-switching to claude-code provider
|
|
141
|
+
```
|
|
142
|
+
|
|
143
|
+
## Tool Event Extraction
|
|
144
|
+
|
|
145
|
+
### How It Works
|
|
146
|
+
|
|
147
|
+
Claude Code emits `assistant` messages containing tool use information:
|
|
148
|
+
|
|
149
|
+
```javascript
|
|
150
|
+
{
|
|
151
|
+
type: 'assistant',
|
|
152
|
+
message: {
|
|
153
|
+
content: [
|
|
154
|
+
{ type: 'text', text: 'Let me search for that...' },
|
|
155
|
+
{ type: 'tool_use', id: 'toolu_123', name: 'Glob', input: {...} }
|
|
156
|
+
]
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
```
|
|
160
|
+
|
|
161
|
+
The engine extracts these and emits as events:
|
|
162
|
+
|
|
163
|
+
```javascript
|
|
164
|
+
agent.events.on('toolCall', (event) => {
|
|
165
|
+
console.log(event.name); // 'Glob'
|
|
166
|
+
console.log(event.status); // 'started'
|
|
167
|
+
console.log(event.timestamp); // '2025-11-20T10:21:30.935Z'
|
|
168
|
+
console.log(event.args); // { pattern: '*.js', path: '...' }
|
|
169
|
+
});
|
|
170
|
+
```
|
|
171
|
+
|
|
172
|
+
### Event Structure
|
|
173
|
+
|
|
174
|
+
```javascript
|
|
175
|
+
{
|
|
176
|
+
timestamp: '2025-11-20T10:21:30.935Z',
|
|
177
|
+
name: 'Glob',
|
|
178
|
+
args: { pattern: '*.js', path: '/path/to/code' },
|
|
179
|
+
id: 'toolu_012JAiRK7bho9vevZyyUYJgu',
|
|
180
|
+
status: 'started' // or 'completed'
|
|
181
|
+
}
|
|
182
|
+
```
|
|
183
|
+
|
|
184
|
+
### Batch Emission
|
|
185
|
+
|
|
186
|
+
Unlike native engine which emits in real-time:
|
|
187
|
+
- Events collected during response
|
|
188
|
+
- Emitted as batch after completion
|
|
189
|
+
- Maintains compatibility with native engine event listeners
|
|
190
|
+
|
|
191
|
+
## Configuration
|
|
192
|
+
|
|
193
|
+
### Options
|
|
194
|
+
|
|
195
|
+
```javascript
|
|
196
|
+
const agent = new ProbeAgent({
|
|
197
|
+
// Provider
|
|
198
|
+
provider: 'claude-code', // Force claude-code provider
|
|
199
|
+
|
|
200
|
+
// Required
|
|
201
|
+
allowedFolders: ['/path'], // Allowed code directories
|
|
202
|
+
|
|
203
|
+
// Optional
|
|
204
|
+
debug: true, // Enable debug logging
|
|
205
|
+
sessionId: 'my-session', // Custom session ID
|
|
206
|
+
customPrompt: '...', // Custom system prompt
|
|
207
|
+
allowedTools: ['mcp__*'], // Tool filtering
|
|
208
|
+
});
|
|
209
|
+
```
|
|
210
|
+
|
|
211
|
+
### Environment Variables
|
|
212
|
+
|
|
213
|
+
```bash
|
|
214
|
+
# Force claude-code provider
|
|
215
|
+
USE_CLAUDE_CODE=true
|
|
216
|
+
|
|
217
|
+
# Enable debug logging
|
|
218
|
+
DEBUG=probe:*
|
|
219
|
+
```
|
|
220
|
+
|
|
221
|
+
## Examples
|
|
222
|
+
|
|
223
|
+
### Basic Usage
|
|
224
|
+
|
|
225
|
+
```javascript
|
|
226
|
+
import { ProbeAgent } from 'probe-agent';
|
|
227
|
+
|
|
228
|
+
const agent = new ProbeAgent({
|
|
229
|
+
allowedFolders: [process.cwd()]
|
|
230
|
+
});
|
|
231
|
+
|
|
232
|
+
await agent.initialize();
|
|
233
|
+
|
|
234
|
+
const response = await agent.answer(
|
|
235
|
+
'Find all async functions that handle errors'
|
|
236
|
+
);
|
|
237
|
+
|
|
238
|
+
console.log(response);
|
|
239
|
+
```
|
|
240
|
+
|
|
241
|
+
### With Tool Event Monitoring
|
|
242
|
+
|
|
243
|
+
```javascript
|
|
244
|
+
const agent = new ProbeAgent({
|
|
245
|
+
provider: 'claude-code',
|
|
246
|
+
allowedFolders: [process.cwd()],
|
|
247
|
+
debug: true
|
|
248
|
+
});
|
|
249
|
+
|
|
250
|
+
await agent.initialize();
|
|
251
|
+
|
|
252
|
+
// Track tool usage
|
|
253
|
+
const toolsUsed = [];
|
|
254
|
+
agent.events.on('toolCall', (event) => {
|
|
255
|
+
if (event.status === 'started') {
|
|
256
|
+
toolsUsed.push(event.name);
|
|
257
|
+
}
|
|
258
|
+
});
|
|
259
|
+
|
|
260
|
+
const response = await agent.answer('Analyze this codebase');
|
|
261
|
+
|
|
262
|
+
console.log('Tools used:', [...new Set(toolsUsed)]);
|
|
263
|
+
```
|
|
264
|
+
|
|
265
|
+
### Multi-Step Queries
|
|
266
|
+
|
|
267
|
+
```javascript
|
|
268
|
+
// Claude Code handles multi-step internally
|
|
269
|
+
const agent = new ProbeAgent({
|
|
270
|
+
provider: 'claude-code',
|
|
271
|
+
allowedFolders: ['/my/project']
|
|
272
|
+
});
|
|
273
|
+
|
|
274
|
+
await agent.initialize();
|
|
275
|
+
|
|
276
|
+
// This might trigger multiple internal tool uses
|
|
277
|
+
const response = await agent.answer(
|
|
278
|
+
'Find the authentication logic and explain how it works'
|
|
279
|
+
);
|
|
280
|
+
// Claude Code will search, extract, and analyze automatically
|
|
281
|
+
```
|
|
282
|
+
|
|
283
|
+
## Testing
|
|
284
|
+
|
|
285
|
+
### Integration Tests
|
|
286
|
+
|
|
287
|
+
Located in `tests/integration/`:
|
|
288
|
+
|
|
289
|
+
1. **claude-code-auto-fallback.spec.js** - Tests automatic provider detection
|
|
290
|
+
2. **claude-code-tool-events.spec.js** - Tests tool event extraction
|
|
291
|
+
3. **claude-code-multi-step.spec.js** - Tests complex multi-step queries
|
|
292
|
+
|
|
293
|
+
These are standalone integration tests designed to work with the actual `claude` command.
|
|
294
|
+
|
|
295
|
+
### Manual Testing
|
|
296
|
+
|
|
297
|
+
```bash
|
|
298
|
+
# Test auto-fallback
|
|
299
|
+
node tests/integration/claude-code-auto-fallback.spec.js
|
|
300
|
+
|
|
301
|
+
# Test tool events
|
|
302
|
+
node tests/integration/claude-code-tool-events.spec.js
|
|
303
|
+
|
|
304
|
+
# Test multi-step
|
|
305
|
+
node tests/integration/claude-code-multi-step.spec.js
|
|
306
|
+
```
|
|
307
|
+
|
|
308
|
+
## Troubleshooting
|
|
309
|
+
|
|
310
|
+
### Claude command not found
|
|
311
|
+
|
|
312
|
+
**Problem:** `Error: claude command not found`
|
|
313
|
+
|
|
314
|
+
**Solution:**
|
|
315
|
+
- Install Claude Code from https://docs.claude.com/en/docs/claude-code
|
|
316
|
+
- Verify: `claude --version`
|
|
317
|
+
|
|
318
|
+
### Auto-fallback not working
|
|
319
|
+
|
|
320
|
+
**Problem:** Not detecting claude command
|
|
321
|
+
|
|
322
|
+
**Solutions:**
|
|
323
|
+
- Ensure `claude` is in PATH
|
|
324
|
+
- Check: `which claude`
|
|
325
|
+
- Verify API keys are not set (auto-fallback only when no keys)
|
|
326
|
+
|
|
327
|
+
### Tool events not appearing
|
|
328
|
+
|
|
329
|
+
**Problem:** No tool events emitted
|
|
330
|
+
|
|
331
|
+
**Possible causes:**
|
|
332
|
+
1. Query didn't trigger tool use
|
|
333
|
+
2. Need to enable event listeners before query
|
|
334
|
+
3. Check that `agent.events` exists
|
|
335
|
+
|
|
336
|
+
**Solution:**
|
|
337
|
+
```javascript
|
|
338
|
+
// Enable events BEFORE query
|
|
339
|
+
agent.events.on('toolCall', (event) => {
|
|
340
|
+
console.log('Tool event:', event);
|
|
341
|
+
});
|
|
342
|
+
|
|
343
|
+
await agent.answer('query here');
|
|
344
|
+
```
|
|
345
|
+
|
|
346
|
+
### Session persistence issues
|
|
347
|
+
|
|
348
|
+
**Problem:** Context lost between queries
|
|
349
|
+
|
|
350
|
+
**Solution:**
|
|
351
|
+
- Use same `sessionId` for related queries
|
|
352
|
+
- Claude Code maintains conversation history automatically
|
|
353
|
+
|
|
354
|
+
### MCP tools not working
|
|
355
|
+
|
|
356
|
+
**Problem:** Tools not accessible
|
|
357
|
+
|
|
358
|
+
**Checks:**
|
|
359
|
+
1. MCP server started: Look for `[MCP] Built-in server started`
|
|
360
|
+
2. Tools registered: Check debug output for tool list
|
|
361
|
+
3. Tool filtering: Verify `allowedTools` configuration
|
|
362
|
+
|
|
363
|
+
## Best Practices
|
|
364
|
+
|
|
365
|
+
1. **Use in Claude Code Environment**
|
|
366
|
+
- Designed for Claude Code's native environment
|
|
367
|
+
- Leverages built-in authentication
|
|
368
|
+
|
|
369
|
+
2. **Let Claude Code Handle Complexity**
|
|
370
|
+
- Don't try to control tool iterations
|
|
371
|
+
- Trust the black-box approach
|
|
372
|
+
- Monitor via tool events if needed
|
|
373
|
+
|
|
374
|
+
3. **Enable Debug for Development**
|
|
375
|
+
```javascript
|
|
376
|
+
const agent = new ProbeAgent({
|
|
377
|
+
provider: 'claude-code',
|
|
378
|
+
debug: true // See what's happening
|
|
379
|
+
});
|
|
380
|
+
```
|
|
381
|
+
|
|
382
|
+
4. **Handle Errors Gracefully**
|
|
383
|
+
```javascript
|
|
384
|
+
try {
|
|
385
|
+
await agent.initialize();
|
|
386
|
+
const response = await agent.answer(query);
|
|
387
|
+
} catch (error) {
|
|
388
|
+
if (error.message.includes('claude command not found')) {
|
|
389
|
+
// Fallback to API key approach
|
|
390
|
+
}
|
|
391
|
+
}
|
|
392
|
+
```
|
|
393
|
+
|
|
394
|
+
## Comparison: Native vs Claude Code
|
|
395
|
+
|
|
396
|
+
| Feature | Native Engine | Claude Code Engine |
|
|
397
|
+
|---------|--------------|-------------------|
|
|
398
|
+
| Tool Loop | ProbeAgent controls (1-30 iterations) | Claude Code handles internally |
|
|
399
|
+
| Tool Events | Real-time (started/completed pairs) | Batch emission at end |
|
|
400
|
+
| Configuration | Requires API keys | Auto-detects claude command |
|
|
401
|
+
| Debug Output | Shows "Tool Loop Iteration X/Y" | Shows "bypassing tool loop" |
|
|
402
|
+
| MCP Protocol | XML-based tool format | Native MCP protocol |
|
|
403
|
+
| Use Case | Custom control, API-based | Claude Code environment |
|
|
404
|
+
|
|
405
|
+
## Related Documentation
|
|
406
|
+
|
|
407
|
+
- See `examples/probe-agent-cli.js` for CLI usage
|
|
408
|
+
- See `examples/multi-engine-demo.js` for switching between engines
|
|
409
|
+
- See main README for general ProbeAgent documentation
|
|
410
|
+
|
|
411
|
+
---
|
|
412
|
+
|
|
413
|
+
**Last Updated:** November 2025
|
|
414
|
+
**Version:** 0.6.0+
|