@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,335 @@
|
|
|
1
|
+
// Example of using the probe npm package in Node.js
|
|
2
|
+
|
|
3
|
+
import { search, query, extract, tools } from '@probelabs/probe';
|
|
4
|
+
|
|
5
|
+
// Basic search example
|
|
6
|
+
async function basicSearchExample() {
|
|
7
|
+
console.log('=== Basic Search Example ===');
|
|
8
|
+
|
|
9
|
+
try {
|
|
10
|
+
const results = await search({
|
|
11
|
+
path: '/path/to/your/project',
|
|
12
|
+
query: 'function',
|
|
13
|
+
maxResults: 5
|
|
14
|
+
});
|
|
15
|
+
|
|
16
|
+
console.log('Search results:');
|
|
17
|
+
console.log(results);
|
|
18
|
+
} catch (error) {
|
|
19
|
+
console.error('Search error:', error);
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
// Advanced search with multiple options
|
|
24
|
+
async function advancedSearchExample() {
|
|
25
|
+
console.log('\n=== Advanced Search Example ===');
|
|
26
|
+
|
|
27
|
+
try {
|
|
28
|
+
const results = await search({
|
|
29
|
+
path: '/path/to/your/project',
|
|
30
|
+
query: 'config AND (parse OR tokenize)',
|
|
31
|
+
ignore: ['node_modules', 'dist'],
|
|
32
|
+
reranker: 'hybrid',
|
|
33
|
+
frequencySearch: true,
|
|
34
|
+
maxResults: 10,
|
|
35
|
+
maxTokens: 20000,
|
|
36
|
+
allowTests: false
|
|
37
|
+
});
|
|
38
|
+
|
|
39
|
+
console.log('Advanced search results:');
|
|
40
|
+
console.log(results);
|
|
41
|
+
} catch (error) {
|
|
42
|
+
console.error('Advanced search error:', error);
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
// Query for specific code structures
|
|
47
|
+
async function queryExample() {
|
|
48
|
+
console.log('\n=== Query Example ===');
|
|
49
|
+
|
|
50
|
+
try {
|
|
51
|
+
// Find all JavaScript functions
|
|
52
|
+
const jsResults = await query({
|
|
53
|
+
path: '/path/to/your/project',
|
|
54
|
+
pattern: 'function $NAME($$$PARAMS) $$$BODY',
|
|
55
|
+
language: 'javascript',
|
|
56
|
+
maxResults: 5
|
|
57
|
+
});
|
|
58
|
+
|
|
59
|
+
console.log('JavaScript functions:');
|
|
60
|
+
console.log(jsResults);
|
|
61
|
+
|
|
62
|
+
// Find all Rust structs
|
|
63
|
+
const rustResults = await query({
|
|
64
|
+
path: '/path/to/your/project',
|
|
65
|
+
pattern: 'struct $NAME $$$BODY',
|
|
66
|
+
language: 'rust',
|
|
67
|
+
maxResults: 5
|
|
68
|
+
});
|
|
69
|
+
|
|
70
|
+
console.log('Rust structs:');
|
|
71
|
+
console.log(rustResults);
|
|
72
|
+
} catch (error) {
|
|
73
|
+
console.error('Query error:', error);
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
// Extract code blocks from specific files
|
|
78
|
+
async function extractExample() {
|
|
79
|
+
console.log('\n=== Extract Example ===');
|
|
80
|
+
|
|
81
|
+
try {
|
|
82
|
+
const results = await extract({
|
|
83
|
+
files: [
|
|
84
|
+
'/path/to/your/project/src/main.js',
|
|
85
|
+
'/path/to/your/project/src/utils.js:42' // Extract from line 42
|
|
86
|
+
],
|
|
87
|
+
contextLines: 2,
|
|
88
|
+
format: 'markdown'
|
|
89
|
+
});
|
|
90
|
+
|
|
91
|
+
console.log('Extracted code:');
|
|
92
|
+
console.log(results);
|
|
93
|
+
} catch (error) {
|
|
94
|
+
console.error('Extract error:', error);
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
// Practical example: Find and analyze all API endpoints
|
|
99
|
+
async function findApiEndpoints() {
|
|
100
|
+
console.log('\n=== Find API Endpoints Example ===');
|
|
101
|
+
|
|
102
|
+
try {
|
|
103
|
+
// Search for route definitions in Express.js
|
|
104
|
+
const expressRoutes = await search({
|
|
105
|
+
path: '/path/to/your/project',
|
|
106
|
+
query: 'app.get OR app.post OR app.put OR app.delete',
|
|
107
|
+
maxResults: 20
|
|
108
|
+
});
|
|
109
|
+
|
|
110
|
+
console.log('Express.js routes:');
|
|
111
|
+
console.log(expressRoutes);
|
|
112
|
+
|
|
113
|
+
// Search for controller methods in a Spring Boot application
|
|
114
|
+
const springControllers = await query({
|
|
115
|
+
path: '/path/to/your/project',
|
|
116
|
+
pattern: '@RequestMapping($$$PARAMS) $$$BODY',
|
|
117
|
+
language: 'java',
|
|
118
|
+
maxResults: 20
|
|
119
|
+
});
|
|
120
|
+
|
|
121
|
+
console.log('Spring Boot controllers:');
|
|
122
|
+
console.log(springControllers);
|
|
123
|
+
} catch (error) {
|
|
124
|
+
console.error('API endpoint search error:', error);
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
// Practical example: Generate documentation from code comments
|
|
129
|
+
async function generateDocumentation() {
|
|
130
|
+
console.log('\n=== Generate Documentation Example ===');
|
|
131
|
+
|
|
132
|
+
try {
|
|
133
|
+
// Search for JSDoc comments
|
|
134
|
+
const jsdocComments = await search({
|
|
135
|
+
path: '/path/to/your/project',
|
|
136
|
+
query: '/**',
|
|
137
|
+
maxResults: 50
|
|
138
|
+
});
|
|
139
|
+
|
|
140
|
+
console.log('JSDoc comments:');
|
|
141
|
+
console.log(jsdocComments);
|
|
142
|
+
|
|
143
|
+
// Process the comments to generate documentation
|
|
144
|
+
const docs = processJsDocComments(jsdocComments);
|
|
145
|
+
console.log('Generated documentation:', docs);
|
|
146
|
+
} catch (error) {
|
|
147
|
+
console.error('Documentation generation error:', error);
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
// Helper function for the documentation example
|
|
152
|
+
function processJsDocComments(comments) {
|
|
153
|
+
// This would parse the JSDoc comments and convert them to documentation
|
|
154
|
+
return "Documentation would be generated here";
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
// Practical example: Find unused code
|
|
158
|
+
async function findUnusedCode() {
|
|
159
|
+
console.log('\n=== Find Unused Code Example ===');
|
|
160
|
+
|
|
161
|
+
try {
|
|
162
|
+
// First, find all function definitions
|
|
163
|
+
const functionDefs = await query({
|
|
164
|
+
path: '/path/to/your/project',
|
|
165
|
+
pattern: 'function $NAME($$$PARAMS) $$$BODY',
|
|
166
|
+
language: 'javascript',
|
|
167
|
+
maxResults: 100
|
|
168
|
+
});
|
|
169
|
+
|
|
170
|
+
// Extract function names
|
|
171
|
+
const functionNames = extractFunctionNames(functionDefs);
|
|
172
|
+
|
|
173
|
+
// For each function, search for its usage
|
|
174
|
+
const unusedFunctions = [];
|
|
175
|
+
|
|
176
|
+
for (const name of functionNames) {
|
|
177
|
+
const usages = await search({
|
|
178
|
+
path: '/path/to/your/project',
|
|
179
|
+
query: name,
|
|
180
|
+
maxResults: 2 // We only need to know if it's used at least once
|
|
181
|
+
});
|
|
182
|
+
|
|
183
|
+
// If only one result (the definition itself), it's unused
|
|
184
|
+
if (countOccurrences(usages) <= 1) {
|
|
185
|
+
unusedFunctions.push(name);
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
console.log('Potentially unused functions:');
|
|
190
|
+
console.log(unusedFunctions);
|
|
191
|
+
} catch (error) {
|
|
192
|
+
console.error('Unused code search error:', error);
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
// Helper functions for the unused code example
|
|
197
|
+
function extractFunctionNames(functionDefs) {
|
|
198
|
+
// This would extract function names from the query results
|
|
199
|
+
return ["someFunction", "anotherFunction"];
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
function countOccurrences(searchResults) {
|
|
203
|
+
// This would count occurrences in the search results
|
|
204
|
+
return 1;
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
// Example of using AI tools with Vercel AI SDK
|
|
208
|
+
async function vercelAiToolsExample() {
|
|
209
|
+
console.log('\n=== Vercel AI SDK Tools Example ===');
|
|
210
|
+
|
|
211
|
+
try {
|
|
212
|
+
// Import necessary modules (in a real application)
|
|
213
|
+
// import { generateText } from 'ai';
|
|
214
|
+
// import { createOpenAI } from '@ai-sdk/openai';
|
|
215
|
+
|
|
216
|
+
console.log('Using Vercel AI SDK tools:');
|
|
217
|
+
console.log('- searchTool:', typeof tools.searchTool);
|
|
218
|
+
console.log('- queryTool:', typeof tools.queryTool);
|
|
219
|
+
console.log('- extractTool:', typeof tools.extractTool);
|
|
220
|
+
|
|
221
|
+
// Example of how to use the tools with Vercel AI SDK
|
|
222
|
+
console.log('\nExample usage with Vercel AI SDK:');
|
|
223
|
+
console.log(`
|
|
224
|
+
async function chatWithAI(userMessage) {
|
|
225
|
+
const result = await generateText({
|
|
226
|
+
model: provider(modelName),
|
|
227
|
+
messages: [{ role: 'user', content: userMessage }],
|
|
228
|
+
system: "You are a code intelligence assistant. Use the provided tools to search and analyze code.",
|
|
229
|
+
tools: {
|
|
230
|
+
search: tools.searchTool,
|
|
231
|
+
query: tools.queryTool,
|
|
232
|
+
extract: tools.extractTool
|
|
233
|
+
},
|
|
234
|
+
maxSteps: 15,
|
|
235
|
+
temperature: 0.7
|
|
236
|
+
});
|
|
237
|
+
|
|
238
|
+
return result.text;
|
|
239
|
+
}`);
|
|
240
|
+
} catch (error) {
|
|
241
|
+
console.error('Vercel AI SDK tools error:', error);
|
|
242
|
+
}
|
|
243
|
+
}
|
|
244
|
+
|
|
245
|
+
// Example of using AI tools with LangChain
|
|
246
|
+
async function langchainToolsExample() {
|
|
247
|
+
console.log('\n=== LangChain Tools Example ===');
|
|
248
|
+
|
|
249
|
+
try {
|
|
250
|
+
// Create the LangChain tools
|
|
251
|
+
const searchTool = tools.createSearchTool();
|
|
252
|
+
const queryTool = tools.createQueryTool();
|
|
253
|
+
const extractTool = tools.createExtractTool();
|
|
254
|
+
|
|
255
|
+
console.log('Created LangChain tools:');
|
|
256
|
+
console.log('- searchTool:', typeof searchTool);
|
|
257
|
+
console.log('- queryTool:', typeof queryTool);
|
|
258
|
+
console.log('- extractTool:', typeof extractTool);
|
|
259
|
+
|
|
260
|
+
// Example of how to use the tools with LangChain
|
|
261
|
+
console.log('\nExample usage with LangChain:');
|
|
262
|
+
console.log(`
|
|
263
|
+
async function chatWithAI(userMessage) {
|
|
264
|
+
const model = new ChatOpenAI({
|
|
265
|
+
modelName: "gpt-4o",
|
|
266
|
+
temperature: 0.7
|
|
267
|
+
}).withTools([searchTool, queryTool, extractTool]);
|
|
268
|
+
|
|
269
|
+
const result = await model.invoke([
|
|
270
|
+
{ role: "system", content: "You are a code intelligence assistant. Use the provided tools to search and analyze code." },
|
|
271
|
+
{ role: "user", content: userMessage }
|
|
272
|
+
]);
|
|
273
|
+
|
|
274
|
+
return result.content;
|
|
275
|
+
}`);
|
|
276
|
+
} catch (error) {
|
|
277
|
+
console.error('LangChain tools error:', error);
|
|
278
|
+
}
|
|
279
|
+
}
|
|
280
|
+
|
|
281
|
+
// Example of using the DEFAULT_SYSTEM_MESSAGE
|
|
282
|
+
async function systemMessageExample() {
|
|
283
|
+
console.log('\n=== System Message Example ===');
|
|
284
|
+
|
|
285
|
+
try {
|
|
286
|
+
console.log('DEFAULT_SYSTEM_MESSAGE:', typeof tools.DEFAULT_SYSTEM_MESSAGE);
|
|
287
|
+
|
|
288
|
+
// Example of how to use the DEFAULT_SYSTEM_MESSAGE
|
|
289
|
+
console.log('\nExample usage of DEFAULT_SYSTEM_MESSAGE:');
|
|
290
|
+
console.log(`
|
|
291
|
+
// Use the default system message in your AI application
|
|
292
|
+
const systemMessage = tools.DEFAULT_SYSTEM_MESSAGE;
|
|
293
|
+
|
|
294
|
+
// Example with Vercel AI SDK
|
|
295
|
+
const result = await generateText({
|
|
296
|
+
model: provider(modelName),
|
|
297
|
+
messages: [{ role: 'user', content: userMessage }],
|
|
298
|
+
system: tools.DEFAULT_SYSTEM_MESSAGE,
|
|
299
|
+
tools: {
|
|
300
|
+
search: tools.searchTool,
|
|
301
|
+
query: tools.queryTool,
|
|
302
|
+
extract: tools.extractTool
|
|
303
|
+
}
|
|
304
|
+
});
|
|
305
|
+
|
|
306
|
+
// Example with LangChain
|
|
307
|
+
const model = new ChatOpenAI({
|
|
308
|
+
modelName: "gpt-4o",
|
|
309
|
+
temperature: 0.7
|
|
310
|
+
}).withTools([searchTool, queryTool, extractTool]);
|
|
311
|
+
|
|
312
|
+
const result = await model.invoke([
|
|
313
|
+
{ role: "system", content: tools.DEFAULT_SYSTEM_MESSAGE },
|
|
314
|
+
{ role: "user", content: userMessage }
|
|
315
|
+
]);`);
|
|
316
|
+
} catch (error) {
|
|
317
|
+
console.error('System message error:', error);
|
|
318
|
+
}
|
|
319
|
+
}
|
|
320
|
+
|
|
321
|
+
// Run all examples
|
|
322
|
+
async function runAllExamples() {
|
|
323
|
+
await basicSearchExample();
|
|
324
|
+
await advancedSearchExample();
|
|
325
|
+
await queryExample();
|
|
326
|
+
await extractExample();
|
|
327
|
+
await findApiEndpoints();
|
|
328
|
+
await generateDocumentation();
|
|
329
|
+
await findUnusedCode();
|
|
330
|
+
await vercelAiToolsExample();
|
|
331
|
+
await langchainToolsExample();
|
|
332
|
+
await systemMessageExample();
|
|
333
|
+
}
|
|
334
|
+
|
|
335
|
+
runAllExamples().catch(console.error);
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Demonstration of ProbeAgent with Claude Code integration
|
|
5
|
+
* Shows auto-fallback and provider selection
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
import { ProbeAgent } from '../src/agent/ProbeAgent.js';
|
|
9
|
+
import chalk from 'chalk';
|
|
10
|
+
|
|
11
|
+
console.log(chalk.blue('=' .repeat(70)));
|
|
12
|
+
console.log(chalk.blue(' CLAUDE CODE INTEGRATION DEMONSTRATION'));
|
|
13
|
+
console.log(chalk.blue('=' .repeat(70) + '\n'));
|
|
14
|
+
|
|
15
|
+
// Custom persona for code review
|
|
16
|
+
const codeReviewerPersona = `You are an expert code reviewer specializing in JavaScript/TypeScript.
|
|
17
|
+
Your role is to:
|
|
18
|
+
- Analyze code quality and patterns
|
|
19
|
+
- Identify potential bugs or issues
|
|
20
|
+
- Suggest improvements
|
|
21
|
+
- Focus on best practices and maintainability`;
|
|
22
|
+
|
|
23
|
+
async function demonstrateProvider(providerName, persona, question) {
|
|
24
|
+
console.log(chalk.cyan(`\nš§ Testing ${providerName || 'Auto-Detect'} Provider\n`));
|
|
25
|
+
console.log(chalk.gray('ā'.repeat(60)));
|
|
26
|
+
|
|
27
|
+
try {
|
|
28
|
+
const agentOptions = {
|
|
29
|
+
customPrompt: persona,
|
|
30
|
+
maxIterations: 3,
|
|
31
|
+
debug: false
|
|
32
|
+
};
|
|
33
|
+
|
|
34
|
+
if (providerName) {
|
|
35
|
+
agentOptions.provider = providerName;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
const agent = new ProbeAgent(agentOptions);
|
|
39
|
+
|
|
40
|
+
await agent.initialize();
|
|
41
|
+
|
|
42
|
+
console.log(chalk.green(`ā
Initialized (provider: ${agent.clientApiProvider || 'auto'})`));
|
|
43
|
+
|
|
44
|
+
let toolCalls = [];
|
|
45
|
+
if (agent.events) {
|
|
46
|
+
agent.events.on('toolCall', (event) => {
|
|
47
|
+
if (event.status === 'started') {
|
|
48
|
+
console.log(chalk.yellow(` Tool: ${event.name}`));
|
|
49
|
+
toolCalls.push(event.name);
|
|
50
|
+
}
|
|
51
|
+
});
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
console.log(chalk.magenta(`\nā Question: ${question}`));
|
|
55
|
+
const startTime = Date.now();
|
|
56
|
+
const response = await agent.answer(question);
|
|
57
|
+
const duration = ((Date.now() - startTime) / 1000).toFixed(2);
|
|
58
|
+
|
|
59
|
+
console.log(chalk.green(`\nā
Response received (${duration}s)`));
|
|
60
|
+
console.log(chalk.white(response.substring(0, 300) + '...'));
|
|
61
|
+
|
|
62
|
+
if (toolCalls.length > 0) {
|
|
63
|
+
console.log(chalk.cyan(`\nš Tools used: ${toolCalls.join(', ')}`));
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
} catch (error) {
|
|
67
|
+
console.error(chalk.red(`ā Error: ${error.message}`));
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
async function main() {
|
|
72
|
+
console.log(chalk.yellow('This demo shows Claude Code integration features:\n'));
|
|
73
|
+
console.log(chalk.gray(' ⢠Auto-fallback when no API keys present'));
|
|
74
|
+
console.log(chalk.gray(' ⢠Explicit provider selection'));
|
|
75
|
+
console.log(chalk.gray(' ⢠Custom personas and system prompts'));
|
|
76
|
+
console.log(chalk.gray(' ⢠Tool event extraction\n'));
|
|
77
|
+
|
|
78
|
+
// Demo 1: Auto-detect (will use Claude Code if no API keys)
|
|
79
|
+
console.log(chalk.blue('\n1ļøā£ AUTO-DETECT MODE'));
|
|
80
|
+
console.log(chalk.gray('ā'.repeat(60)));
|
|
81
|
+
await demonstrateProvider(
|
|
82
|
+
null, // Auto-detect
|
|
83
|
+
codeReviewerPersona,
|
|
84
|
+
'Find error handling patterns in this codebase'
|
|
85
|
+
);
|
|
86
|
+
|
|
87
|
+
// Demo 2: Explicit Claude Code
|
|
88
|
+
console.log(chalk.blue('\n\n2ļøā£ EXPLICIT CLAUDE CODE PROVIDER'));
|
|
89
|
+
console.log(chalk.gray('ā'.repeat(60)));
|
|
90
|
+
await demonstrateProvider(
|
|
91
|
+
'claude-code',
|
|
92
|
+
codeReviewerPersona,
|
|
93
|
+
'Analyze the ProbeAgent class structure'
|
|
94
|
+
);
|
|
95
|
+
|
|
96
|
+
console.log(chalk.blue('\n\n' + '=' .repeat(70)));
|
|
97
|
+
console.log(chalk.green('⨠Demonstration Complete!\n'));
|
|
98
|
+
|
|
99
|
+
console.log(chalk.cyan('Key Features:'));
|
|
100
|
+
console.log(chalk.gray(' ⢠Single "provider" parameter for all engines'));
|
|
101
|
+
console.log(chalk.gray(' ⢠Auto-detection when provider not specified'));
|
|
102
|
+
console.log(chalk.gray(' ⢠Custom system prompts and personas'));
|
|
103
|
+
console.log(chalk.gray(' ⢠Seamless tool integration'));
|
|
104
|
+
|
|
105
|
+
console.log(chalk.cyan('\nUsage Examples:'));
|
|
106
|
+
console.log(chalk.gray(' # Auto-detect (uses API keys or claude command)'));
|
|
107
|
+
console.log(chalk.gray(' const agent = new ProbeAgent({ allowedFolders: ["/path"] })'));
|
|
108
|
+
console.log(chalk.gray('\n # Explicit Claude Code'));
|
|
109
|
+
console.log(chalk.gray(' const agent = new ProbeAgent({ provider: "claude-code" })'));
|
|
110
|
+
console.log(chalk.gray('\n # CLI usage'));
|
|
111
|
+
console.log(chalk.gray(' node probe-agent-cli.js --provider claude-code "your question"\n'));
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
main().catch(error => {
|
|
115
|
+
console.error(chalk.red('Fatal error:'), error);
|
|
116
|
+
process.exit(1);
|
|
117
|
+
});
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* CLI for testing ProbeAgent with different providers
|
|
5
|
+
* Usage: node probe-agent-cli.js [--provider vercel|claude-code] "your question"
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
import { ProbeAgent } from '../src/agent/ProbeAgent.js';
|
|
9
|
+
import chalk from 'chalk';
|
|
10
|
+
|
|
11
|
+
// Parse command line arguments
|
|
12
|
+
const args = process.argv.slice(2);
|
|
13
|
+
// Detect provider from environment (claude-code auto-detects if no API keys)
|
|
14
|
+
let provider = process.env.USE_CLAUDE_CODE === 'true' ? 'claude-code' : null;
|
|
15
|
+
let question = '';
|
|
16
|
+
|
|
17
|
+
// Parse --provider flag (overrides environment)
|
|
18
|
+
if (args[0] === '--provider' && args[1]) {
|
|
19
|
+
provider = args[1];
|
|
20
|
+
question = args.slice(2).join(' ');
|
|
21
|
+
} else {
|
|
22
|
+
question = args.join(' ');
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
// Default question if none provided
|
|
26
|
+
if (!question) {
|
|
27
|
+
question = "Find all async functions in this codebase that handle errors";
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
// Color configuration
|
|
31
|
+
const colors = {
|
|
32
|
+
provider: chalk.cyan,
|
|
33
|
+
tool: chalk.yellow,
|
|
34
|
+
result: chalk.green,
|
|
35
|
+
error: chalk.red,
|
|
36
|
+
debug: chalk.gray,
|
|
37
|
+
prompt: chalk.magenta,
|
|
38
|
+
text: chalk.white
|
|
39
|
+
};
|
|
40
|
+
|
|
41
|
+
const displayProvider = provider || 'auto-detect';
|
|
42
|
+
console.log(colors.provider(`\nš Starting Probe Agent (provider: ${displayProvider})\n`));
|
|
43
|
+
console.log(colors.prompt(`Question: "${question}"\n`));
|
|
44
|
+
|
|
45
|
+
// Check for API key (not required for Claude Code)
|
|
46
|
+
if (provider === 'claude-code') {
|
|
47
|
+
console.log(colors.debug('Using Claude Code provider (requires claude command installed)'));
|
|
48
|
+
} else if (!provider && !process.env.ANTHROPIC_API_KEY && !process.env.OPENAI_API_KEY) {
|
|
49
|
+
console.log(colors.debug('No API keys found - will attempt Claude Code auto-fallback'));
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
async function runAgent(providerName) {
|
|
53
|
+
const startTime = Date.now();
|
|
54
|
+
|
|
55
|
+
try {
|
|
56
|
+
// Create agent - provider is optional (auto-detects)
|
|
57
|
+
const agentOptions = {
|
|
58
|
+
debug: true,
|
|
59
|
+
allowedFolders: [process.cwd()],
|
|
60
|
+
maxIterations: 5
|
|
61
|
+
};
|
|
62
|
+
|
|
63
|
+
// Set provider if specified (otherwise auto-detect)
|
|
64
|
+
if (providerName) {
|
|
65
|
+
agentOptions.provider = providerName;
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
const agent = new ProbeAgent(agentOptions);
|
|
69
|
+
|
|
70
|
+
console.log(colors.text('\nš Initializing agent...\n'));
|
|
71
|
+
|
|
72
|
+
await agent.initialize();
|
|
73
|
+
|
|
74
|
+
// Track tool calls
|
|
75
|
+
let toolCallCount = 0;
|
|
76
|
+
if (agent.events) {
|
|
77
|
+
agent.events.on('toolCall', (event) => {
|
|
78
|
+
toolCallCount++;
|
|
79
|
+
if (event.status === 'started') {
|
|
80
|
+
console.log(colors.tool(`\nš§ Tool ${toolCallCount}: ${event.name}`));
|
|
81
|
+
if (event.args && Object.keys(event.args).length > 0) {
|
|
82
|
+
console.log(colors.debug(` Args: ${JSON.stringify(event.args, null, 2).substring(0, 200)}...`));
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
});
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
console.log(colors.text('š¤ Querying agent...\n'));
|
|
89
|
+
|
|
90
|
+
const response = await agent.answer(question);
|
|
91
|
+
|
|
92
|
+
console.log(colors.result('\nā
Response:\n'));
|
|
93
|
+
console.log(colors.text(response));
|
|
94
|
+
console.log(colors.text('\n' + 'ā'.repeat(80)));
|
|
95
|
+
|
|
96
|
+
const duration = ((Date.now() - startTime) / 1000).toFixed(2);
|
|
97
|
+
console.log(colors.debug(`\nā±ļø Duration: ${duration}s`));
|
|
98
|
+
console.log(colors.debug(`š§ Tools used: ${toolCallCount}`));
|
|
99
|
+
console.log(colors.provider(`š Provider: ${agent.clientApiProvider || 'auto-detected'}\n`));
|
|
100
|
+
|
|
101
|
+
} catch (error) {
|
|
102
|
+
console.error(colors.error('\nā Error:'), error.message);
|
|
103
|
+
if (error.stack) {
|
|
104
|
+
console.error(colors.debug(error.stack));
|
|
105
|
+
}
|
|
106
|
+
process.exit(1);
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
runAgent(provider).catch(error => {
|
|
111
|
+
console.error(colors.error('Fatal error:'), error);
|
|
112
|
+
process.exit(1);
|
|
113
|
+
});
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Test script to verify edit and create tools are available with --allow-edit flag
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
import { ProbeAgent } from '../src/agent/ProbeAgent.js';
|
|
8
|
+
import { join } from 'path';
|
|
9
|
+
import { tmpdir } from 'os';
|
|
10
|
+
import { promises as fs } from 'fs';
|
|
11
|
+
import { existsSync } from 'fs';
|
|
12
|
+
|
|
13
|
+
async function testAgentWithEdit() {
|
|
14
|
+
const testDir = join(tmpdir(), 'probe-agent-edit-test');
|
|
15
|
+
await fs.mkdir(testDir, { recursive: true });
|
|
16
|
+
|
|
17
|
+
console.log('Testing ProbeAgent with edit tools...\n');
|
|
18
|
+
console.log(`Test directory: ${testDir}\n`);
|
|
19
|
+
|
|
20
|
+
try {
|
|
21
|
+
// Test 1: Without --allow-edit flag
|
|
22
|
+
console.log('1. Testing WITHOUT --allow-edit flag:');
|
|
23
|
+
const agentWithoutEdit = new ProbeAgent({
|
|
24
|
+
path: testDir,
|
|
25
|
+
allowedFolders: [testDir],
|
|
26
|
+
allowEdit: false, // Explicitly disabled
|
|
27
|
+
verbose: true
|
|
28
|
+
});
|
|
29
|
+
|
|
30
|
+
const tools1 = agentWithoutEdit.getTools();
|
|
31
|
+
console.log('Available tools without --allow-edit:', Object.keys(tools1));
|
|
32
|
+
console.log('Has editTool?', 'editTool' in tools1);
|
|
33
|
+
console.log('Has createTool?', 'createTool' in tools1);
|
|
34
|
+
console.log();
|
|
35
|
+
|
|
36
|
+
// Test 2: With --allow-edit flag
|
|
37
|
+
console.log('2. Testing WITH --allow-edit flag:');
|
|
38
|
+
const agentWithEdit = new ProbeAgent({
|
|
39
|
+
path: testDir,
|
|
40
|
+
allowedFolders: [testDir],
|
|
41
|
+
allowEdit: true, // Enabled
|
|
42
|
+
verbose: true
|
|
43
|
+
});
|
|
44
|
+
|
|
45
|
+
const tools2 = agentWithEdit.getTools();
|
|
46
|
+
console.log('Available tools with --allow-edit:', Object.keys(tools2));
|
|
47
|
+
console.log('Has editTool?', 'editTool' in tools2);
|
|
48
|
+
console.log('Has createTool?', 'createTool' in tools2);
|
|
49
|
+
console.log();
|
|
50
|
+
|
|
51
|
+
// Test 3: Actually use the tools if available
|
|
52
|
+
if (tools2.editTool && tools2.createTool) {
|
|
53
|
+
console.log('3. Testing actual tool usage through agent:');
|
|
54
|
+
|
|
55
|
+
// Create a file
|
|
56
|
+
console.log('Creating test.txt...');
|
|
57
|
+
const createResult = await tools2.createTool.execute({
|
|
58
|
+
file_path: join(testDir, 'test.txt'),
|
|
59
|
+
content: 'Hello from ProbeAgent!'
|
|
60
|
+
});
|
|
61
|
+
console.log('Create success:', createResult.success);
|
|
62
|
+
|
|
63
|
+
// Edit the file
|
|
64
|
+
console.log('Editing test.txt...');
|
|
65
|
+
const editResult = await tools2.editTool.execute({
|
|
66
|
+
file_path: join(testDir, 'test.txt'),
|
|
67
|
+
old_string: 'Hello from ProbeAgent!',
|
|
68
|
+
new_string: 'Hello from ProbeAgent with Edit tools!'
|
|
69
|
+
});
|
|
70
|
+
console.log('Edit success:', editResult.success);
|
|
71
|
+
|
|
72
|
+
// Verify the content
|
|
73
|
+
const content = await fs.readFile(join(testDir, 'test.txt'), 'utf-8');
|
|
74
|
+
console.log('Final content:', content);
|
|
75
|
+
console.log();
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
// Test 4: Test tool definitions
|
|
79
|
+
console.log('4. Testing tool definitions:');
|
|
80
|
+
const toolDefinitions = agentWithEdit.getToolDefinitions();
|
|
81
|
+
console.log('Available tool definitions:', toolDefinitions.length);
|
|
82
|
+
const hasEditDef = toolDefinitions.some(def => def.includes('## edit'));
|
|
83
|
+
const hasCreateDef = toolDefinitions.some(def => def.includes('## create'));
|
|
84
|
+
console.log('Has edit definition?', hasEditDef);
|
|
85
|
+
console.log('Has create definition?', hasCreateDef);
|
|
86
|
+
console.log();
|
|
87
|
+
|
|
88
|
+
// Test 5: Test with a simple prompt
|
|
89
|
+
console.log('5. Testing with a simple prompt (this would normally call the AI):');
|
|
90
|
+
console.log('Agent is configured with:');
|
|
91
|
+
console.log('- allowEdit:', agentWithEdit.config.allowEdit);
|
|
92
|
+
console.log('- allowedFolders:', agentWithEdit.config.allowedFolders);
|
|
93
|
+
console.log('- Available tools:', Object.keys(agentWithEdit.getTools()));
|
|
94
|
+
console.log();
|
|
95
|
+
|
|
96
|
+
// Clean up
|
|
97
|
+
console.log('Cleaning up...');
|
|
98
|
+
await fs.rm(testDir, { recursive: true, force: true });
|
|
99
|
+
console.log('\nā
All tests completed successfully!');
|
|
100
|
+
console.log('\nSummary:');
|
|
101
|
+
console.log('- Edit and Create tools are NOT available without --allow-edit flag');
|
|
102
|
+
console.log('- Edit and Create tools ARE available with --allow-edit flag');
|
|
103
|
+
console.log('- Tools can be executed successfully when enabled');
|
|
104
|
+
|
|
105
|
+
} catch (error) {
|
|
106
|
+
console.error('Test failed:', error);
|
|
107
|
+
// Clean up on error
|
|
108
|
+
await fs.rm(testDir, { recursive: true, force: true }).catch(() => {});
|
|
109
|
+
process.exit(1);
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
// Run the test
|
|
114
|
+
testAgentWithEdit().catch(console.error);
|