@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,529 @@
|
|
|
1
|
+
# Building AI Tools on Probe (Node.js SDK & LangChain)
|
|
2
|
+
|
|
3
|
+
This guide explains how to use Probe's Node.js SDK to build custom AI-powered code intelligence tools for your development workflow.
|
|
4
|
+
|
|
5
|
+
## Overview
|
|
6
|
+
|
|
7
|
+
Probe's Node.js SDK provides programmatic access to its powerful code search capabilities, allowing you to build custom tools, integrate with AI frameworks, and create specialized workflows for your development team.
|
|
8
|
+
|
|
9
|
+
## Installing @probelabs/probe as a Dependency
|
|
10
|
+
|
|
11
|
+
Start by adding Probe to your Node.js project:
|
|
12
|
+
|
|
13
|
+
```bash
|
|
14
|
+
# Add to your project
|
|
15
|
+
npm install @probelabs/probe@latest
|
|
16
|
+
|
|
17
|
+
# Or install globally
|
|
18
|
+
npm install -g @probelabs/probe@latest
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
During installation, the package will automatically download the appropriate Probe binary for your platform (Windows, macOS, or Linux).
|
|
22
|
+
|
|
23
|
+
## Basic SDK Usage
|
|
24
|
+
|
|
25
|
+
The SDK provides three main functions:
|
|
26
|
+
|
|
27
|
+
### Search: Find Code Patterns
|
|
28
|
+
|
|
29
|
+
```javascript
|
|
30
|
+
import { search } from '@probelabs/probe';
|
|
31
|
+
|
|
32
|
+
// Search for code patterns
|
|
33
|
+
const results = await search({
|
|
34
|
+
path: '/path/to/your/project',
|
|
35
|
+
query: 'authentication',
|
|
36
|
+
maxResults: 10
|
|
37
|
+
});
|
|
38
|
+
|
|
39
|
+
console.log(results);
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
### Query: Find Specific Code Structures
|
|
43
|
+
|
|
44
|
+
```javascript
|
|
45
|
+
import { query } from '@probelabs/probe';
|
|
46
|
+
|
|
47
|
+
// Find JavaScript functions
|
|
48
|
+
const functions = await query({
|
|
49
|
+
path: '/path/to/your/project',
|
|
50
|
+
pattern: 'function $NAME($$$PARAMS) $$$BODY',
|
|
51
|
+
language: 'javascript'
|
|
52
|
+
});
|
|
53
|
+
|
|
54
|
+
console.log(functions);
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
### Extract: Get Code from Specific Files
|
|
58
|
+
|
|
59
|
+
```javascript
|
|
60
|
+
import { extract } from '@probelabs/probe';
|
|
61
|
+
|
|
62
|
+
// Extract code from specific files
|
|
63
|
+
const code = await extract({
|
|
64
|
+
files: [
|
|
65
|
+
'/path/to/your/project/src/auth.js',
|
|
66
|
+
'/path/to/your/project/src/api.js:42' // Extract from line 42
|
|
67
|
+
]
|
|
68
|
+
});
|
|
69
|
+
|
|
70
|
+
// Extract with LLM prompt and instructions
|
|
71
|
+
const codeWithPrompt = await extract({
|
|
72
|
+
files: ['/path/to/your/project/src/auth.js#authenticate'],
|
|
73
|
+
prompt: 'engineer', // Use engineer template
|
|
74
|
+
instructions: 'Explain this authentication function'
|
|
75
|
+
});
|
|
76
|
+
|
|
77
|
+
// Extract with custom prompt template
|
|
78
|
+
const codeWithCustomPrompt = await extract({
|
|
79
|
+
files: ['/path/to/your/project/src/api.js:42'],
|
|
80
|
+
prompt: '/path/to/custom/prompt.txt', // Path to custom prompt file
|
|
81
|
+
instructions: 'Refactor this code'
|
|
82
|
+
});
|
|
83
|
+
|
|
84
|
+
console.log(code);
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
## Examples with LangChain
|
|
88
|
+
|
|
89
|
+
LangChain is a popular framework for building AI applications. Here's how to integrate Probe with LangChain:
|
|
90
|
+
|
|
91
|
+
### Creating LangChain Tools
|
|
92
|
+
|
|
93
|
+
```javascript
|
|
94
|
+
import { ChatOpenAI } from '@langchain/openai';
|
|
95
|
+
import { tools } from '@probelabs/probe';
|
|
96
|
+
|
|
97
|
+
// Create LangChain tools from Probe
|
|
98
|
+
const searchTool = tools.createSearchTool();
|
|
99
|
+
const queryTool = tools.createQueryTool();
|
|
100
|
+
const extractTool = tools.createExtractTool();
|
|
101
|
+
|
|
102
|
+
// Create a ChatOpenAI instance with tools
|
|
103
|
+
const model = new ChatOpenAI({
|
|
104
|
+
modelName: "gpt-4o",
|
|
105
|
+
temperature: 0.7
|
|
106
|
+
}).withTools([searchTool, queryTool, extractTool]);
|
|
107
|
+
|
|
108
|
+
// Use the model with tools
|
|
109
|
+
async function chatWithAI(userMessage) {
|
|
110
|
+
const result = await model.invoke([
|
|
111
|
+
{
|
|
112
|
+
role: "system",
|
|
113
|
+
content: "You are a code intelligence assistant. Use the provided tools to search and analyze code."
|
|
114
|
+
},
|
|
115
|
+
{
|
|
116
|
+
role: "user",
|
|
117
|
+
content: userMessage
|
|
118
|
+
}
|
|
119
|
+
]);
|
|
120
|
+
|
|
121
|
+
return result.content;
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
// Example usage
|
|
125
|
+
const response = await chatWithAI("How is authentication implemented in this project?");
|
|
126
|
+
console.log(response);
|
|
127
|
+
```
|
|
128
|
+
|
|
129
|
+
### Building a Code Explanation Chain
|
|
130
|
+
|
|
131
|
+
```javascript
|
|
132
|
+
import { search } from '@probelabs/probe';
|
|
133
|
+
import { ChatOpenAI } from '@langchain/openai';
|
|
134
|
+
import { PromptTemplate } from '@langchain/core/prompts';
|
|
135
|
+
import { StringOutputParser } from '@langchain/core/output_parsers';
|
|
136
|
+
|
|
137
|
+
// Create a chain for code explanation
|
|
138
|
+
async function createCodeExplainer() {
|
|
139
|
+
// Create a chat model
|
|
140
|
+
const model = new ChatOpenAI({
|
|
141
|
+
modelName: "gpt-4o",
|
|
142
|
+
temperature: 0.5
|
|
143
|
+
});
|
|
144
|
+
|
|
145
|
+
// Create a prompt template
|
|
146
|
+
const promptTemplate = PromptTemplate.fromTemplate(`
|
|
147
|
+
You are a code explanation expert. I'll provide you with a question and some code search results.
|
|
148
|
+
Please analyze the code and explain it in a clear, concise manner.
|
|
149
|
+
|
|
150
|
+
Question: {question}
|
|
151
|
+
|
|
152
|
+
Code search results:
|
|
153
|
+
{searchResults}
|
|
154
|
+
|
|
155
|
+
Your explanation:
|
|
156
|
+
`);
|
|
157
|
+
|
|
158
|
+
// Create a chain
|
|
159
|
+
const chain = promptTemplate
|
|
160
|
+
.pipe(model)
|
|
161
|
+
.pipe(new StringOutputParser());
|
|
162
|
+
|
|
163
|
+
// Function to explain code
|
|
164
|
+
async function explainCode(question, codebasePath) {
|
|
165
|
+
// Search for relevant code
|
|
166
|
+
const searchResults = await search({
|
|
167
|
+
path: codebasePath,
|
|
168
|
+
query: question,
|
|
169
|
+
maxResults: 5,
|
|
170
|
+
maxTokens: 8000
|
|
171
|
+
});
|
|
172
|
+
|
|
173
|
+
// Get the explanation from the AI
|
|
174
|
+
const explanation = await chain.invoke({
|
|
175
|
+
question,
|
|
176
|
+
searchResults
|
|
177
|
+
});
|
|
178
|
+
|
|
179
|
+
return explanation;
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
return { explainCode };
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
// Usage
|
|
186
|
+
const explainer = await createCodeExplainer();
|
|
187
|
+
const explanation = await explainer.explainCode(
|
|
188
|
+
"How does the authentication system work?",
|
|
189
|
+
"/path/to/your/project"
|
|
190
|
+
);
|
|
191
|
+
console.log(explanation);
|
|
192
|
+
```
|
|
193
|
+
|
|
194
|
+
## Examples with Vercel AI SDK
|
|
195
|
+
|
|
196
|
+
The Vercel AI SDK is another popular framework for building AI applications. The latest version of Probe provides tool generators that allow for better configuration and session isolation:
|
|
197
|
+
|
|
198
|
+
```javascript
|
|
199
|
+
import { generateText } from 'ai';
|
|
200
|
+
import { searchTool, queryTool, extractTool } from '@probelabs/probe';
|
|
201
|
+
import { randomUUID } from 'crypto';
|
|
202
|
+
|
|
203
|
+
// Generate a session ID for tool isolation
|
|
204
|
+
const sessionId = randomUUID();
|
|
205
|
+
console.log(`Generated session ID: ${sessionId}`);
|
|
206
|
+
|
|
207
|
+
// Configure tools with options
|
|
208
|
+
const configOptions = {
|
|
209
|
+
sessionId,
|
|
210
|
+
debug: process.env.DEBUG === 'true',
|
|
211
|
+
maxTokens: 30000 // Optional: override default max tokens
|
|
212
|
+
};
|
|
213
|
+
|
|
214
|
+
// Create configured tool instances
|
|
215
|
+
const configuredTools = {
|
|
216
|
+
search: searchTool(configOptions),
|
|
217
|
+
query: queryTool(configOptions),
|
|
218
|
+
extract: extractTool(configOptions)
|
|
219
|
+
};
|
|
220
|
+
|
|
221
|
+
// Use the configured tools with Vercel AI SDK
|
|
222
|
+
async function chatWithAI(userMessage) {
|
|
223
|
+
const result = await generateText({
|
|
224
|
+
model: provider(modelName),
|
|
225
|
+
messages: [{ role: 'user', content: userMessage }],
|
|
226
|
+
system: "You are a code intelligence assistant. Use the provided tools to search and analyze code.",
|
|
227
|
+
tools: configuredTools,
|
|
228
|
+
maxSteps: 15,
|
|
229
|
+
temperature: 0.7
|
|
230
|
+
});
|
|
231
|
+
|
|
232
|
+
return result.text;
|
|
233
|
+
}
|
|
234
|
+
|
|
235
|
+
// Example usage
|
|
236
|
+
const response = await chatWithAI("Find all API endpoints in this project");
|
|
237
|
+
console.log(response);
|
|
238
|
+
```
|
|
239
|
+
|
|
240
|
+
### Benefits of Tool Generators
|
|
241
|
+
|
|
242
|
+
The new tool generator approach provides several advantages:
|
|
243
|
+
|
|
244
|
+
1. **Session Isolation**: Each tool instance can have its own session ID, which is crucial in concurrent environments like web applications
|
|
245
|
+
2. **Configurable Options**: You can customize tools with options like debug logging and token limits
|
|
246
|
+
3. **Better Debugging**: Enable debug mode to see detailed logs of tool execution
|
|
247
|
+
4. **Backward Compatibility**: The package still exports pre-configured tools for backward compatibility
|
|
248
|
+
|
|
249
|
+
### Backward Compatibility
|
|
250
|
+
|
|
251
|
+
If you prefer the previous approach, you can still use the pre-configured tools:
|
|
252
|
+
|
|
253
|
+
```javascript
|
|
254
|
+
import { tools } from '@probelabs/probe';
|
|
255
|
+
|
|
256
|
+
// Use the pre-configured tools
|
|
257
|
+
const result = await generateText({
|
|
258
|
+
model: provider(modelName),
|
|
259
|
+
messages: [{ role: 'user', content: userMessage }],
|
|
260
|
+
system: "You are a code intelligence assistant.",
|
|
261
|
+
tools: {
|
|
262
|
+
search: tools.searchTool,
|
|
263
|
+
query: tools.queryTool,
|
|
264
|
+
extract: tools.extractTool
|
|
265
|
+
}
|
|
266
|
+
});
|
|
267
|
+
```
|
|
268
|
+
|
|
269
|
+
## Building a Custom Code Search API
|
|
270
|
+
|
|
271
|
+
Create a REST API for code search:
|
|
272
|
+
|
|
273
|
+
```javascript
|
|
274
|
+
import express from 'express';
|
|
275
|
+
import { search, query, extract } from '@probelabs/probe';
|
|
276
|
+
|
|
277
|
+
const app = express();
|
|
278
|
+
app.use(express.json());
|
|
279
|
+
|
|
280
|
+
// Search endpoint
|
|
281
|
+
app.post('/api/search', async (req, res) => {
|
|
282
|
+
try {
|
|
283
|
+
const { path, query, options } = req.body;
|
|
284
|
+
const results = await search({
|
|
285
|
+
path,
|
|
286
|
+
query,
|
|
287
|
+
...options
|
|
288
|
+
});
|
|
289
|
+
res.json({ results });
|
|
290
|
+
} catch (error) {
|
|
291
|
+
res.status(500).json({ error: error.message });
|
|
292
|
+
}
|
|
293
|
+
});
|
|
294
|
+
|
|
295
|
+
// Query endpoint
|
|
296
|
+
app.post('/api/query', async (req, res) => {
|
|
297
|
+
try {
|
|
298
|
+
const { path, pattern, language, options } = req.body;
|
|
299
|
+
const results = await query({
|
|
300
|
+
path,
|
|
301
|
+
pattern,
|
|
302
|
+
language,
|
|
303
|
+
...options
|
|
304
|
+
});
|
|
305
|
+
res.json({ results });
|
|
306
|
+
} catch (error) {
|
|
307
|
+
res.status(500).json({ error: error.message });
|
|
308
|
+
}
|
|
309
|
+
});
|
|
310
|
+
|
|
311
|
+
// Extract endpoint
|
|
312
|
+
app.post('/api/extract', async (req, res) => {
|
|
313
|
+
try {
|
|
314
|
+
const { files, prompt, instructions, options } = req.body;
|
|
315
|
+
const results = await extract({
|
|
316
|
+
files,
|
|
317
|
+
prompt,
|
|
318
|
+
instructions,
|
|
319
|
+
...options
|
|
320
|
+
});
|
|
321
|
+
res.json({ results });
|
|
322
|
+
} catch (error) {
|
|
323
|
+
res.status(500).json({ error: error.message });
|
|
324
|
+
}
|
|
325
|
+
});
|
|
326
|
+
|
|
327
|
+
app.listen(3000, () => {
|
|
328
|
+
console.log('Code search API running on port 3000');
|
|
329
|
+
});
|
|
330
|
+
```
|
|
331
|
+
|
|
332
|
+
## Handling Concurrency and Caching
|
|
333
|
+
|
|
334
|
+
For production applications, you'll want to handle concurrency and implement caching:
|
|
335
|
+
|
|
336
|
+
### Implementing a Cache Layer
|
|
337
|
+
|
|
338
|
+
```javascript
|
|
339
|
+
import { search } from '@probelabs/probe';
|
|
340
|
+
import NodeCache from 'node-cache';
|
|
341
|
+
|
|
342
|
+
// Create a cache with 1 hour TTL
|
|
343
|
+
const cache = new NodeCache({ stdTTL: 3600 });
|
|
344
|
+
|
|
345
|
+
// Cached search function
|
|
346
|
+
async function cachedSearch(params) {
|
|
347
|
+
// Create a cache key from the parameters
|
|
348
|
+
const cacheKey = JSON.stringify(params);
|
|
349
|
+
|
|
350
|
+
// Check if we have a cached result
|
|
351
|
+
const cachedResult = cache.get(cacheKey);
|
|
352
|
+
if (cachedResult) {
|
|
353
|
+
console.log('Cache hit!');
|
|
354
|
+
return cachedResult;
|
|
355
|
+
}
|
|
356
|
+
|
|
357
|
+
// Perform the search
|
|
358
|
+
console.log('Cache miss, performing search...');
|
|
359
|
+
const results = await search(params);
|
|
360
|
+
|
|
361
|
+
// Cache the results
|
|
362
|
+
cache.set(cacheKey, results);
|
|
363
|
+
|
|
364
|
+
return results;
|
|
365
|
+
}
|
|
366
|
+
|
|
367
|
+
// Example usage
|
|
368
|
+
const results = await cachedSearch({
|
|
369
|
+
path: '/path/to/your/project',
|
|
370
|
+
query: 'authentication',
|
|
371
|
+
maxResults: 10
|
|
372
|
+
});
|
|
373
|
+
```
|
|
374
|
+
|
|
375
|
+
### Managing Concurrency
|
|
376
|
+
|
|
377
|
+
```javascript
|
|
378
|
+
import { search } from '@probelabs/probe';
|
|
379
|
+
import pLimit from 'p-limit';
|
|
380
|
+
|
|
381
|
+
// Limit concurrency to 5 simultaneous searches
|
|
382
|
+
const limit = pLimit(5);
|
|
383
|
+
|
|
384
|
+
// Function to search multiple repositories
|
|
385
|
+
async function searchMultipleRepos(query, repositories) {
|
|
386
|
+
// Map each repository to a limited promise
|
|
387
|
+
const promises = repositories.map(repo =>
|
|
388
|
+
limit(() => search({
|
|
389
|
+
path: repo,
|
|
390
|
+
query,
|
|
391
|
+
maxResults: 10
|
|
392
|
+
}))
|
|
393
|
+
);
|
|
394
|
+
|
|
395
|
+
// Wait for all searches to complete
|
|
396
|
+
const results = await Promise.all(promises);
|
|
397
|
+
|
|
398
|
+
// Combine and return results
|
|
399
|
+
return repositories.reduce((acc, repo, index) => {
|
|
400
|
+
acc[repo] = results[index];
|
|
401
|
+
return acc;
|
|
402
|
+
}, {});
|
|
403
|
+
}
|
|
404
|
+
|
|
405
|
+
// Example usage
|
|
406
|
+
const results = await searchMultipleRepos(
|
|
407
|
+
'authentication',
|
|
408
|
+
[
|
|
409
|
+
'/path/to/repo1',
|
|
410
|
+
'/path/to/repo2',
|
|
411
|
+
'/path/to/repo3',
|
|
412
|
+
'/path/to/repo4',
|
|
413
|
+
'/path/to/repo5'
|
|
414
|
+
]
|
|
415
|
+
);
|
|
416
|
+
```
|
|
417
|
+
|
|
418
|
+
## Best Practices for Production
|
|
419
|
+
|
|
420
|
+
### Error Handling
|
|
421
|
+
|
|
422
|
+
```javascript
|
|
423
|
+
import { search } from '@probelabs/probe';
|
|
424
|
+
|
|
425
|
+
async function robustSearch(params) {
|
|
426
|
+
try {
|
|
427
|
+
return await search(params);
|
|
428
|
+
} catch (error) {
|
|
429
|
+
console.error('Search error:', error);
|
|
430
|
+
|
|
431
|
+
// Handle specific errors
|
|
432
|
+
if (error.message.includes('Binary not found')) {
|
|
433
|
+
// Handle missing binary
|
|
434
|
+
console.error('Probe binary not found. Trying to reinstall...');
|
|
435
|
+
// Implement reinstall logic
|
|
436
|
+
} else if (error.message.includes('Permission denied')) {
|
|
437
|
+
// Handle permission issues
|
|
438
|
+
console.error('Permission denied. Check file permissions.');
|
|
439
|
+
} else if (error.message.includes('timeout')) {
|
|
440
|
+
// Handle timeouts
|
|
441
|
+
console.error('Search timed out. Try with a more specific query.');
|
|
442
|
+
}
|
|
443
|
+
|
|
444
|
+
// Return a fallback result
|
|
445
|
+
return { error: error.message, fallback: true };
|
|
446
|
+
}
|
|
447
|
+
}
|
|
448
|
+
```
|
|
449
|
+
|
|
450
|
+
### Performance Optimization
|
|
451
|
+
|
|
452
|
+
```javascript
|
|
453
|
+
import { search } from '@probelabs/probe';
|
|
454
|
+
|
|
455
|
+
// Optimize search for performance
|
|
456
|
+
async function optimizedSearch(query, path) {
|
|
457
|
+
// First, do a quick search for files only
|
|
458
|
+
const fileResults = await search({
|
|
459
|
+
path,
|
|
460
|
+
query,
|
|
461
|
+
filesOnly: true,
|
|
462
|
+
maxResults: 50
|
|
463
|
+
});
|
|
464
|
+
|
|
465
|
+
// If we have too many files, refine the query
|
|
466
|
+
if (fileResults.files && fileResults.files.length > 20) {
|
|
467
|
+
console.log('Too many files, refining query...');
|
|
468
|
+
// Add more specific terms to narrow down results
|
|
469
|
+
return search({
|
|
470
|
+
path,
|
|
471
|
+
query: `${query} AND (function OR class OR method)`,
|
|
472
|
+
maxResults: 10
|
|
473
|
+
});
|
|
474
|
+
}
|
|
475
|
+
|
|
476
|
+
// Otherwise, search the content of the files we found
|
|
477
|
+
return search({
|
|
478
|
+
path,
|
|
479
|
+
query,
|
|
480
|
+
maxResults: 10
|
|
481
|
+
});
|
|
482
|
+
}
|
|
483
|
+
```
|
|
484
|
+
|
|
485
|
+
### Memory Management
|
|
486
|
+
|
|
487
|
+
```javascript
|
|
488
|
+
import { search } from '@probelabs/probe';
|
|
489
|
+
|
|
490
|
+
// Search with memory constraints
|
|
491
|
+
async function memoryEfficientSearch(query, path) {
|
|
492
|
+
// Split the search into smaller batches
|
|
493
|
+
const directories = [
|
|
494
|
+
`${path}/src`,
|
|
495
|
+
`${path}/lib`,
|
|
496
|
+
`${path}/packages`
|
|
497
|
+
];
|
|
498
|
+
|
|
499
|
+
const results = [];
|
|
500
|
+
|
|
501
|
+
// Process each directory separately
|
|
502
|
+
for (const dir of directories) {
|
|
503
|
+
const dirResults = await search({
|
|
504
|
+
path: dir,
|
|
505
|
+
query,
|
|
506
|
+
maxResults: 5
|
|
507
|
+
});
|
|
508
|
+
|
|
509
|
+
results.push(dirResults);
|
|
510
|
+
|
|
511
|
+
// Optional: Force garbage collection if available
|
|
512
|
+
if (global.gc) {
|
|
513
|
+
global.gc();
|
|
514
|
+
}
|
|
515
|
+
}
|
|
516
|
+
|
|
517
|
+
return results;
|
|
518
|
+
}
|
|
519
|
+
|
|
520
|
+
// Run with --expose-gc flag to enable manual garbage collection
|
|
521
|
+
// node --expose-gc your-script.js
|
|
522
|
+
```
|
|
523
|
+
|
|
524
|
+
## Next Steps
|
|
525
|
+
|
|
526
|
+
- For individual developer workflows, see [Integrating Probe into AI Code Editors](/use-cases/integrating-probe-into-ai-code-editors)
|
|
527
|
+
- For team collaboration, check out [Deploying the Probe Web Interface](/use-cases/deploying-probe-web-interface)
|
|
528
|
+
- For advanced CLI usage, explore [Advanced CLI: Speed, Token Limits, and Large Repos](/use-cases/advanced-cli)
|
|
529
|
+
- For complete API reference, see the [Node.js SDK API Reference](/nodejs-sdk)
|