@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,52 @@
|
|
|
1
|
+
/** @type {import('jest').Config} */
|
|
2
|
+
export default {
|
|
3
|
+
transform: {},
|
|
4
|
+
|
|
5
|
+
// Test environment
|
|
6
|
+
testEnvironment: 'node',
|
|
7
|
+
|
|
8
|
+
// Test file patterns - run stable test files
|
|
9
|
+
testMatch: [
|
|
10
|
+
'**/tests/**/*.test.js',
|
|
11
|
+
'**/src/agent/acp/tools.test.js',
|
|
12
|
+
'**/src/agent/acp/connection.test.js',
|
|
13
|
+
'**/src/agent/acp/types.test.js'
|
|
14
|
+
],
|
|
15
|
+
|
|
16
|
+
// Coverage configuration
|
|
17
|
+
collectCoverageFrom: [
|
|
18
|
+
'src/**/*.js',
|
|
19
|
+
'!src/**/*.test.js',
|
|
20
|
+
'!src/test-*.js',
|
|
21
|
+
'!**/node_modules/**',
|
|
22
|
+
'!**/build/**',
|
|
23
|
+
'!**/dist/**'
|
|
24
|
+
],
|
|
25
|
+
|
|
26
|
+
// Coverage thresholds
|
|
27
|
+
coverageThreshold: {
|
|
28
|
+
global: {
|
|
29
|
+
branches: 70,
|
|
30
|
+
functions: 70,
|
|
31
|
+
lines: 70,
|
|
32
|
+
statements: 70
|
|
33
|
+
}
|
|
34
|
+
},
|
|
35
|
+
|
|
36
|
+
// Coverage reporters
|
|
37
|
+
coverageReporters: [
|
|
38
|
+
'text',
|
|
39
|
+
'lcov',
|
|
40
|
+
'html'
|
|
41
|
+
],
|
|
42
|
+
|
|
43
|
+
// Setup files
|
|
44
|
+
setupFilesAfterEnv: ['<rootDir>/tests/setup.js'],
|
|
45
|
+
|
|
46
|
+
|
|
47
|
+
// Verbose output
|
|
48
|
+
verbose: true,
|
|
49
|
+
|
|
50
|
+
// Timeout for tests
|
|
51
|
+
testTimeout: 10000
|
|
52
|
+
};
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@probelabs/probe",
|
|
3
|
+
"version": "0.6.0-rc88",
|
|
4
|
+
"description": "Node.js wrapper for the probe code search tool",
|
|
5
|
+
"main": "src/index.js",
|
|
6
|
+
"module": "src/index.js",
|
|
7
|
+
"types": "index.d.ts",
|
|
8
|
+
"type": "module",
|
|
9
|
+
"exports": {
|
|
10
|
+
".": {
|
|
11
|
+
"types": "./index.d.ts",
|
|
12
|
+
"import": "./src/index.js",
|
|
13
|
+
"require": "./cjs/index.cjs"
|
|
14
|
+
},
|
|
15
|
+
"./agent": {
|
|
16
|
+
"types": "./src/agent/ProbeAgent.d.ts",
|
|
17
|
+
"import": "./src/agent/ProbeAgent.js",
|
|
18
|
+
"require": "./cjs/agent/ProbeAgent.cjs"
|
|
19
|
+
},
|
|
20
|
+
"./telemetry": {
|
|
21
|
+
"import": "./src/agent/simpleTelemetry.js",
|
|
22
|
+
"require": "./cjs/agent/simpleTelemetry.cjs"
|
|
23
|
+
},
|
|
24
|
+
"./agent/mcp": {
|
|
25
|
+
"import": "./src/agent/mcp/index.js"
|
|
26
|
+
},
|
|
27
|
+
"./agent/imageConfig": {
|
|
28
|
+
"import": "./src/agent/imageConfig.js"
|
|
29
|
+
}
|
|
30
|
+
},
|
|
31
|
+
"bin": {
|
|
32
|
+
"probe": "bin/probe"
|
|
33
|
+
},
|
|
34
|
+
"files": [
|
|
35
|
+
"src/**/*",
|
|
36
|
+
"cjs/**/*",
|
|
37
|
+
"*.d.ts",
|
|
38
|
+
"src/**/*.d.ts",
|
|
39
|
+
"bin/probe",
|
|
40
|
+
"bin/probe-binary",
|
|
41
|
+
"bin/probe.exe",
|
|
42
|
+
"bin/.gitkeep",
|
|
43
|
+
"bin/binaries/*.tar.gz",
|
|
44
|
+
"bin/binaries/*.zip",
|
|
45
|
+
"scripts/postinstall.js",
|
|
46
|
+
"build/**/*",
|
|
47
|
+
"MERMAID_SUPPORT_SUMMARY.md",
|
|
48
|
+
"GITHUB_MERMAID_COMPATIBILITY.md"
|
|
49
|
+
],
|
|
50
|
+
"scripts": {
|
|
51
|
+
"postinstall": "node scripts/postinstall.js",
|
|
52
|
+
"build:mcp": "node scripts/build-mcp.cjs",
|
|
53
|
+
"build:agent": "node scripts/build-agent.cjs",
|
|
54
|
+
"build:types": "echo 'TypeScript definitions already manually created'",
|
|
55
|
+
"build:cjs": "node scripts/build-cjs.js",
|
|
56
|
+
"build": "npm run build:types && npm run build:cjs && npm run build:mcp && npm run build:agent",
|
|
57
|
+
"prepack": "npm run build",
|
|
58
|
+
"test": "cross-env NODE_OPTIONS=--experimental-vm-modules jest",
|
|
59
|
+
"test:watch": "cross-env NODE_OPTIONS=--experimental-vm-modules jest --watch",
|
|
60
|
+
"test:coverage": "cross-env NODE_OPTIONS=--experimental-vm-modules jest --coverage",
|
|
61
|
+
"test:verbose": "cross-env NODE_OPTIONS=--experimental-vm-modules jest --verbose"
|
|
62
|
+
},
|
|
63
|
+
"keywords": [
|
|
64
|
+
"probe",
|
|
65
|
+
"code-search",
|
|
66
|
+
"search",
|
|
67
|
+
"ast",
|
|
68
|
+
"code-analysis",
|
|
69
|
+
"ai",
|
|
70
|
+
"llm",
|
|
71
|
+
"tools"
|
|
72
|
+
],
|
|
73
|
+
"author": "probelabs",
|
|
74
|
+
"license": "ISC",
|
|
75
|
+
"dependencies": {
|
|
76
|
+
"@ai-sdk/amazon-bedrock": "^1.0.8",
|
|
77
|
+
"@ai-sdk/anthropic": "^2.0.8",
|
|
78
|
+
"@ai-sdk/google": "^2.0.14",
|
|
79
|
+
"@ai-sdk/openai": "^2.0.10",
|
|
80
|
+
"@anthropic-ai/claude-agent-sdk": "^0.1.46",
|
|
81
|
+
"@modelcontextprotocol/sdk": "^1.0.0",
|
|
82
|
+
"@probelabs/maid": "^0.0.22",
|
|
83
|
+
"adm-zip": "^0.5.16",
|
|
84
|
+
"ai": "^5.0.0",
|
|
85
|
+
"ajv": "^8.17.1",
|
|
86
|
+
"axios": "^1.8.3",
|
|
87
|
+
"dotenv": "^16.4.7",
|
|
88
|
+
"fs-extra": "^11.1.1",
|
|
89
|
+
"glob": "^10.3.10",
|
|
90
|
+
"gpt-tokenizer": "^3.0.1",
|
|
91
|
+
"tar": "^6.2.0",
|
|
92
|
+
"zod": "^3.24.2"
|
|
93
|
+
},
|
|
94
|
+
"devDependencies": {
|
|
95
|
+
"@jest/globals": "^29.7.0",
|
|
96
|
+
"@types/fs-extra": "^11.0.4",
|
|
97
|
+
"@types/node": "^20.17.19",
|
|
98
|
+
"cross-env": "^7.0.3",
|
|
99
|
+
"esbuild": "^0.25.9",
|
|
100
|
+
"jest": "^29.7.0",
|
|
101
|
+
"typescript": "^5.9.2"
|
|
102
|
+
},
|
|
103
|
+
"peerDependencies": {
|
|
104
|
+
"ai": "^5.0.0"
|
|
105
|
+
},
|
|
106
|
+
"engines": {
|
|
107
|
+
"node": ">=14.16.0"
|
|
108
|
+
},
|
|
109
|
+
"repository": {
|
|
110
|
+
"type": "git",
|
|
111
|
+
"url": "git+https://github.com/probelabs/probe.git"
|
|
112
|
+
},
|
|
113
|
+
"bugs": {
|
|
114
|
+
"url": "https://github.com/probelabs/probe/issues"
|
|
115
|
+
},
|
|
116
|
+
"homepage": "https://github.com/probelabs/probe#readme"
|
|
117
|
+
}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
const esbuild = require('esbuild');
|
|
2
|
+
const path = require('path');
|
|
3
|
+
const fs = require('fs');
|
|
4
|
+
|
|
5
|
+
async function buildAgent() {
|
|
6
|
+
try {
|
|
7
|
+
console.log('Building agent...');
|
|
8
|
+
|
|
9
|
+
// Ensure build directory exists
|
|
10
|
+
const buildDir = path.resolve(__dirname, '..', 'build', 'agent');
|
|
11
|
+
if (!fs.existsSync(buildDir)) {
|
|
12
|
+
fs.mkdirSync(buildDir, { recursive: true });
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
const result = await esbuild.build({
|
|
16
|
+
entryPoints: [path.resolve(__dirname, '..', 'src', 'agent', 'index.js')],
|
|
17
|
+
bundle: true,
|
|
18
|
+
outfile: path.resolve(buildDir, 'index.js'),
|
|
19
|
+
platform: 'node',
|
|
20
|
+
target: 'node18',
|
|
21
|
+
format: 'esm',
|
|
22
|
+
external: [
|
|
23
|
+
// AI SDK packages - use dynamic requires, must be external
|
|
24
|
+
'@modelcontextprotocol/sdk',
|
|
25
|
+
'@ai-sdk/anthropic',
|
|
26
|
+
'@ai-sdk/openai',
|
|
27
|
+
'@ai-sdk/google',
|
|
28
|
+
'@ai-sdk/amazon-bedrock',
|
|
29
|
+
'ai',
|
|
30
|
+
// Packages with dynamic requires
|
|
31
|
+
'fs-extra',
|
|
32
|
+
'tar',
|
|
33
|
+
'axios',
|
|
34
|
+
'dotenv',
|
|
35
|
+
// Node.js built-in modules
|
|
36
|
+
'fs',
|
|
37
|
+
'path',
|
|
38
|
+
'crypto',
|
|
39
|
+
'util',
|
|
40
|
+
'child_process',
|
|
41
|
+
'stream',
|
|
42
|
+
'events',
|
|
43
|
+
'url',
|
|
44
|
+
'os',
|
|
45
|
+
'process'
|
|
46
|
+
// Will bundle: glob, zod
|
|
47
|
+
],
|
|
48
|
+
banner: {
|
|
49
|
+
js: '#!/usr/bin/env node'
|
|
50
|
+
},
|
|
51
|
+
minify: false, // Keep readable for debugging
|
|
52
|
+
sourcemap: false,
|
|
53
|
+
metafile: true,
|
|
54
|
+
logLevel: 'info'
|
|
55
|
+
});
|
|
56
|
+
|
|
57
|
+
// Make the output file executable
|
|
58
|
+
fs.chmodSync(path.resolve(buildDir, 'index.js'), 0o755);
|
|
59
|
+
|
|
60
|
+
console.log('Agent build completed successfully!');
|
|
61
|
+
|
|
62
|
+
if (result.metafile) {
|
|
63
|
+
// Optional: log build statistics
|
|
64
|
+
const analysis = await esbuild.analyzeMetafile(result.metafile);
|
|
65
|
+
console.log('Build analysis:');
|
|
66
|
+
console.log(analysis);
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
} catch (error) {
|
|
70
|
+
console.error('Agent build failed:', error);
|
|
71
|
+
process.exit(1);
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
buildAgent();
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
|
|
3
|
+
import { promises as fs } from 'fs';
|
|
4
|
+
import { join, dirname } from 'path';
|
|
5
|
+
import { fileURLToPath } from 'url';
|
|
6
|
+
import esbuild from 'esbuild';
|
|
7
|
+
|
|
8
|
+
const __filename = fileURLToPath(import.meta.url);
|
|
9
|
+
const __dirname = dirname(__filename);
|
|
10
|
+
const npmDir = join(__dirname, '..');
|
|
11
|
+
const cjsDir = join(npmDir, 'cjs');
|
|
12
|
+
|
|
13
|
+
// Clean CJS directory
|
|
14
|
+
try {
|
|
15
|
+
await fs.rm(cjsDir, { recursive: true, force: true });
|
|
16
|
+
} catch (err) {
|
|
17
|
+
// Directory might not exist
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
// Create CJS directory structure
|
|
21
|
+
await fs.mkdir(cjsDir, { recursive: true });
|
|
22
|
+
await fs.mkdir(join(cjsDir, 'agent'), { recursive: true });
|
|
23
|
+
|
|
24
|
+
console.log('Building CommonJS modules...');
|
|
25
|
+
|
|
26
|
+
// Build main index file
|
|
27
|
+
await esbuild.build({
|
|
28
|
+
entryPoints: [join(npmDir, 'src/index.js')],
|
|
29
|
+
bundle: true,
|
|
30
|
+
platform: 'node',
|
|
31
|
+
format: 'cjs',
|
|
32
|
+
outfile: join(cjsDir, 'index.cjs'),
|
|
33
|
+
external: [
|
|
34
|
+
'@ai-sdk/anthropic',
|
|
35
|
+
'@ai-sdk/openai',
|
|
36
|
+
'@ai-sdk/google',
|
|
37
|
+
'@modelcontextprotocol/sdk',
|
|
38
|
+
'@opentelemetry/*',
|
|
39
|
+
'ai',
|
|
40
|
+
'axios',
|
|
41
|
+
'fs-extra',
|
|
42
|
+
'tar',
|
|
43
|
+
'crypto',
|
|
44
|
+
'fs',
|
|
45
|
+
'path',
|
|
46
|
+
'events',
|
|
47
|
+
'child_process',
|
|
48
|
+
'stream',
|
|
49
|
+
'util',
|
|
50
|
+
'os'
|
|
51
|
+
],
|
|
52
|
+
define: {
|
|
53
|
+
'import.meta.url': '"file:///"'
|
|
54
|
+
}
|
|
55
|
+
});
|
|
56
|
+
|
|
57
|
+
// Build ProbeAgent separately
|
|
58
|
+
await esbuild.build({
|
|
59
|
+
entryPoints: [join(npmDir, 'src/agent/ProbeAgent.js')],
|
|
60
|
+
bundle: true,
|
|
61
|
+
platform: 'node',
|
|
62
|
+
format: 'cjs',
|
|
63
|
+
outfile: join(cjsDir, 'agent/ProbeAgent.cjs'),
|
|
64
|
+
external: [
|
|
65
|
+
'@ai-sdk/anthropic',
|
|
66
|
+
'@ai-sdk/openai',
|
|
67
|
+
'@ai-sdk/google',
|
|
68
|
+
'@modelcontextprotocol/sdk',
|
|
69
|
+
'@opentelemetry/*',
|
|
70
|
+
'ai',
|
|
71
|
+
'axios',
|
|
72
|
+
'fs-extra',
|
|
73
|
+
'tar',
|
|
74
|
+
'crypto',
|
|
75
|
+
'fs',
|
|
76
|
+
'path',
|
|
77
|
+
'events',
|
|
78
|
+
'child_process',
|
|
79
|
+
'stream',
|
|
80
|
+
'util',
|
|
81
|
+
'os'
|
|
82
|
+
],
|
|
83
|
+
define: {
|
|
84
|
+
'import.meta.url': '"file:///"'
|
|
85
|
+
}
|
|
86
|
+
});
|
|
87
|
+
|
|
88
|
+
// Build simpleTelemetry module
|
|
89
|
+
await esbuild.build({
|
|
90
|
+
entryPoints: [join(npmDir, 'src/agent/simpleTelemetry.js')],
|
|
91
|
+
bundle: true,
|
|
92
|
+
platform: 'node',
|
|
93
|
+
format: 'cjs',
|
|
94
|
+
outfile: join(cjsDir, 'agent/simpleTelemetry.cjs'),
|
|
95
|
+
external: [
|
|
96
|
+
'@opentelemetry/*',
|
|
97
|
+
'crypto',
|
|
98
|
+
'fs',
|
|
99
|
+
'path',
|
|
100
|
+
'os'
|
|
101
|
+
],
|
|
102
|
+
define: {
|
|
103
|
+
'import.meta.url': '"file:///"'
|
|
104
|
+
}
|
|
105
|
+
});
|
|
106
|
+
|
|
107
|
+
// Note: telemetry.js removed - using simpleTelemetry.js instead
|
|
108
|
+
|
|
109
|
+
// Create package.json for CJS directory
|
|
110
|
+
const cjsPackageJson = {
|
|
111
|
+
type: 'commonjs'
|
|
112
|
+
};
|
|
113
|
+
|
|
114
|
+
await fs.writeFile(
|
|
115
|
+
join(cjsDir, 'package.json'),
|
|
116
|
+
JSON.stringify(cjsPackageJson, null, 2)
|
|
117
|
+
);
|
|
118
|
+
|
|
119
|
+
console.log('✅ CommonJS build completed');
|
|
120
|
+
console.log(` 📁 Built to: ${cjsDir}`);
|
|
121
|
+
console.log(' 📦 Main: cjs/index.cjs');
|
|
122
|
+
console.log(' 🤖 Agent: cjs/agent/ProbeAgent.cjs');
|
|
123
|
+
console.log(' 📊 Simple Telemetry: cjs/agent/simpleTelemetry.cjs');
|
|
124
|
+
console.log(' 📈 Full Telemetry: cjs/agent/telemetry.cjs');
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
|
|
3
|
+
const fs = require('fs-extra');
|
|
4
|
+
const path = require('path');
|
|
5
|
+
const { execSync } = require('child_process');
|
|
6
|
+
|
|
7
|
+
async function buildMcp() {
|
|
8
|
+
try {
|
|
9
|
+
console.log('Building MCP TypeScript...');
|
|
10
|
+
|
|
11
|
+
// Ensure build directory exists
|
|
12
|
+
await fs.ensureDir('build');
|
|
13
|
+
|
|
14
|
+
// Copy src files to build directory
|
|
15
|
+
console.log('Copying source files...');
|
|
16
|
+
await fs.copy('src', 'build', {
|
|
17
|
+
overwrite: true,
|
|
18
|
+
errorOnExist: false
|
|
19
|
+
});
|
|
20
|
+
|
|
21
|
+
// Run TypeScript compiler
|
|
22
|
+
console.log('Compiling TypeScript...');
|
|
23
|
+
execSync('tsc src/mcp/index.ts --outDir build/mcp --module esnext --target es2020 --moduleResolution node --esModuleInterop --allowSyntheticDefaultImports --skipLibCheck', {
|
|
24
|
+
stdio: 'inherit',
|
|
25
|
+
cwd: process.cwd()
|
|
26
|
+
});
|
|
27
|
+
|
|
28
|
+
console.log('✅ MCP build completed successfully');
|
|
29
|
+
|
|
30
|
+
} catch (error) {
|
|
31
|
+
console.error('❌ MCP build failed:', error.message);
|
|
32
|
+
process.exit(1);
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
buildMcp();
|
|
@@ -0,0 +1,216 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Post-install script for the probe package
|
|
5
|
+
*
|
|
6
|
+
* This script is executed after the package is installed.
|
|
7
|
+
* It downloads the probe binary and replaces the placeholder binary with the actual one.
|
|
8
|
+
*/
|
|
9
|
+
|
|
10
|
+
import fs from 'fs-extra';
|
|
11
|
+
import path from 'path';
|
|
12
|
+
import { fileURLToPath } from 'url';
|
|
13
|
+
import { execFile } from 'child_process';
|
|
14
|
+
import { promisify } from 'util';
|
|
15
|
+
import { extractBundledBinary } from '../src/extractor.js';
|
|
16
|
+
import { downloadProbeBinary } from '../src/downloader.js';
|
|
17
|
+
|
|
18
|
+
const execFileAsync = promisify(execFile);
|
|
19
|
+
|
|
20
|
+
// Get the directory of the current module
|
|
21
|
+
const __filename = fileURLToPath(import.meta.url);
|
|
22
|
+
const __dirname = path.dirname(__filename);
|
|
23
|
+
|
|
24
|
+
// Path to the bin directory (relative to this script)
|
|
25
|
+
const binDir = path.resolve(__dirname, '..', 'bin');
|
|
26
|
+
|
|
27
|
+
/**
|
|
28
|
+
* Main function
|
|
29
|
+
*/
|
|
30
|
+
async function main() {
|
|
31
|
+
try {
|
|
32
|
+
// Skip postinstall in CI environments to prevent wrong binaries from being packaged
|
|
33
|
+
const isCI = process.env.CI || process.env.GITHUB_ACTIONS || process.env.CONTINUOUS_INTEGRATION ||
|
|
34
|
+
process.env.BUILD_NUMBER || process.env.JENKINS_URL || process.env.TRAVIS ||
|
|
35
|
+
process.env.CIRCLECI || process.env.GITLAB_CI;
|
|
36
|
+
|
|
37
|
+
if (isCI) {
|
|
38
|
+
if (process.env.DEBUG === '1' || process.env.VERBOSE === '1') {
|
|
39
|
+
console.log('Detected CI environment, skipping probe binary download');
|
|
40
|
+
}
|
|
41
|
+
return;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
// Skip postinstall if binary already exists (for development)
|
|
45
|
+
const isWindows = process.platform === 'win32';
|
|
46
|
+
const targetBinaryName = isWindows ? 'probe.exe' : 'probe-binary';
|
|
47
|
+
const targetBinaryPath = path.join(binDir, targetBinaryName);
|
|
48
|
+
|
|
49
|
+
if (await fs.pathExists(targetBinaryPath)) {
|
|
50
|
+
if (process.env.DEBUG === '1' || process.env.VERBOSE === '1') {
|
|
51
|
+
console.log(`Probe binary already exists at ${targetBinaryPath}, skipping download`);
|
|
52
|
+
}
|
|
53
|
+
return;
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
// Create the bin directory if it doesn't exist
|
|
57
|
+
if (process.env.DEBUG === '1' || process.env.VERBOSE === '1') {
|
|
58
|
+
console.log(`Creating bin directory at: ${binDir}`);
|
|
59
|
+
}
|
|
60
|
+
await fs.ensureDir(binDir);
|
|
61
|
+
if (process.env.DEBUG === '1' || process.env.VERBOSE === '1') {
|
|
62
|
+
console.log('Bin directory created successfully');
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
// Create a README file in the bin directory
|
|
66
|
+
const readmePath = path.join(binDir, 'README.md');
|
|
67
|
+
const readmeContent = `# Probe Binary Directory
|
|
68
|
+
|
|
69
|
+
This directory is used to store the downloaded probe binary.
|
|
70
|
+
|
|
71
|
+
The binary is automatically downloaded during package installation.
|
|
72
|
+
If you encounter any issues with the download, you can manually place the probe binary in this directory.
|
|
73
|
+
|
|
74
|
+
Binary name should be:
|
|
75
|
+
- \`probe\` (on Linux/macOS)
|
|
76
|
+
- \`probe.exe\` (on Windows)
|
|
77
|
+
|
|
78
|
+
You can download the binary from: https://github.com/probelabs/probe/releases
|
|
79
|
+
`;
|
|
80
|
+
|
|
81
|
+
await fs.writeFile(readmePath, readmeContent);
|
|
82
|
+
if (process.env.DEBUG === '1' || process.env.VERBOSE === '1') {
|
|
83
|
+
console.log('Created README file in bin directory');
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
// Create a .gitignore file to ignore binaries but keep the directory
|
|
87
|
+
const gitignorePath = path.join(binDir, '.gitignore');
|
|
88
|
+
const gitignoreContent = `# Ignore all files in this directory
|
|
89
|
+
*
|
|
90
|
+
# Except these files
|
|
91
|
+
!.gitignore
|
|
92
|
+
!.gitkeep
|
|
93
|
+
!README.md
|
|
94
|
+
!probe
|
|
95
|
+
`;
|
|
96
|
+
|
|
97
|
+
await fs.writeFile(gitignorePath, gitignoreContent);
|
|
98
|
+
if (process.env.DEBUG === '1' || process.env.VERBOSE === '1') {
|
|
99
|
+
console.log('Created .gitignore file in bin directory');
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
// Get the package version first
|
|
103
|
+
let packageVersion = '0.0.0';
|
|
104
|
+
const possiblePaths = [
|
|
105
|
+
path.resolve(__dirname, '..', 'package.json'), // When installed from npm: scripts/../package.json
|
|
106
|
+
path.resolve(__dirname, '..', '..', 'package.json') // In development: scripts/../../package.json
|
|
107
|
+
];
|
|
108
|
+
|
|
109
|
+
for (const packageJsonPath of possiblePaths) {
|
|
110
|
+
try {
|
|
111
|
+
if (fs.existsSync(packageJsonPath)) {
|
|
112
|
+
if (process.env.DEBUG === '1' || process.env.VERBOSE === '1') {
|
|
113
|
+
console.log(`Found package.json at: ${packageJsonPath}`);
|
|
114
|
+
}
|
|
115
|
+
const packageJson = JSON.parse(fs.readFileSync(packageJsonPath, 'utf-8'));
|
|
116
|
+
if (packageJson.version) {
|
|
117
|
+
packageVersion = packageJson.version;
|
|
118
|
+
if (process.env.DEBUG === '1' || process.env.VERBOSE === '1') {
|
|
119
|
+
console.log(`Using version from package.json: ${packageVersion}`);
|
|
120
|
+
}
|
|
121
|
+
break;
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
} catch (err) {
|
|
125
|
+
console.error(`Error reading package.json at ${packageJsonPath}:`, err);
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
// Try to extract bundled binary first
|
|
130
|
+
let binaryPath;
|
|
131
|
+
try {
|
|
132
|
+
if (process.env.DEBUG === '1' || process.env.VERBOSE === '1') {
|
|
133
|
+
console.log('Extracting bundled probe binary...');
|
|
134
|
+
}
|
|
135
|
+
binaryPath = await extractBundledBinary(packageVersion);
|
|
136
|
+
if (process.env.DEBUG === '1' || process.env.VERBOSE === '1') {
|
|
137
|
+
console.log(`Successfully extracted bundled binary to: ${binaryPath}`);
|
|
138
|
+
}
|
|
139
|
+
} catch (extractError) {
|
|
140
|
+
// If bundled binary extraction fails, fall back to downloading
|
|
141
|
+
if (process.env.DEBUG === '1' || process.env.VERBOSE === '1') {
|
|
142
|
+
console.log(`Bundled binary extraction failed: ${extractError.message}`);
|
|
143
|
+
console.log('Falling back to downloading binary from GitHub...');
|
|
144
|
+
} else {
|
|
145
|
+
console.log('Bundled binary not found, downloading from GitHub...');
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
try {
|
|
149
|
+
binaryPath = await downloadProbeBinary(packageVersion);
|
|
150
|
+
if (process.env.DEBUG === '1' || process.env.VERBOSE === '1') {
|
|
151
|
+
console.log(`Successfully downloaded probe binary to: ${binaryPath}`);
|
|
152
|
+
}
|
|
153
|
+
} catch (downloadError) {
|
|
154
|
+
throw new Error(
|
|
155
|
+
`Failed to install probe binary.\n` +
|
|
156
|
+
`Bundled extraction error: ${extractError.message}\n` +
|
|
157
|
+
`Download error: ${downloadError.message}\n` +
|
|
158
|
+
`\n` +
|
|
159
|
+
`Please check:\n` +
|
|
160
|
+
`1. Your platform is supported\n` +
|
|
161
|
+
`2. You have internet connectivity\n` +
|
|
162
|
+
`3. GitHub releases are accessible`
|
|
163
|
+
);
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
// Copy the extracted/downloaded binary to the correct location if needed
|
|
168
|
+
// (targetBinaryName and targetBinaryPath already declared at the beginning of main function)
|
|
169
|
+
if (binaryPath !== targetBinaryPath) {
|
|
170
|
+
if (process.env.DEBUG === '1' || process.env.VERBOSE === '1') {
|
|
171
|
+
console.log(`Copying binary to ${targetBinaryPath} from ${binaryPath}`);
|
|
172
|
+
}
|
|
173
|
+
await fs.copyFile(binaryPath, targetBinaryPath);
|
|
174
|
+
await fs.chmod(targetBinaryPath, 0o755); // Make it executable
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
// On macOS, try to remove quarantine attributes that might prevent execution
|
|
178
|
+
if (process.platform === 'darwin') {
|
|
179
|
+
try {
|
|
180
|
+
// Security: Use execFile with array args instead of exec to prevent command injection
|
|
181
|
+
// Validate that the path is within the bin directory
|
|
182
|
+
const normalizedPath = path.normalize(targetBinaryPath);
|
|
183
|
+
const normalizedBinDir = path.normalize(binDir);
|
|
184
|
+
if (!normalizedPath.startsWith(normalizedBinDir)) {
|
|
185
|
+
throw new Error('Invalid binary path - outside of bin directory');
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
await execFileAsync('xattr', ['-d', 'com.apple.quarantine', normalizedPath]).catch(() => {
|
|
189
|
+
// Ignore errors - xattr may not exist or file may not have quarantine attribute
|
|
190
|
+
});
|
|
191
|
+
|
|
192
|
+
if (process.env.DEBUG === '1' || process.env.VERBOSE === '1') {
|
|
193
|
+
console.log('Removed quarantine attributes from binary');
|
|
194
|
+
}
|
|
195
|
+
} catch (error) {
|
|
196
|
+
// Ignore errors - this is just a precaution
|
|
197
|
+
if (process.env.DEBUG === '1' || process.env.VERBOSE === '1') {
|
|
198
|
+
console.log('Note: Could not remove quarantine attributes (this is usually fine)');
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
if (process.env.DEBUG === '1' || process.env.VERBOSE === '1') {
|
|
204
|
+
console.log('\nProbe binary was successfully installed.');
|
|
205
|
+
console.log('You can now use the probe command directly from the command line.');
|
|
206
|
+
}
|
|
207
|
+
} catch (error) {
|
|
208
|
+
console.error(`Error in postinstall script: ${error.message}`);
|
|
209
|
+
console.error('You may need to manually create the bin directory or run with elevated privileges.');
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
|
|
213
|
+
// Execute the main function
|
|
214
|
+
main().catch(error => {
|
|
215
|
+
console.error('Unexpected error during postinstall:', error);
|
|
216
|
+
});
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* End-to-end test for Codex integration
|
|
5
|
+
* Run with: node test-codex-e2e.js
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
import { ProbeAgent } from './src/agent/ProbeAgent.js';
|
|
9
|
+
|
|
10
|
+
console.log('🧪 Codex Integration E2E Test\n');
|
|
11
|
+
console.log('Testing basic query with Codex engine...\n');
|
|
12
|
+
|
|
13
|
+
async function main() {
|
|
14
|
+
let agent;
|
|
15
|
+
|
|
16
|
+
try {
|
|
17
|
+
// Create agent with Codex provider (use default model, not gpt-4o)
|
|
18
|
+
console.log('1️⃣ Creating ProbeAgent with provider: codex (using default model)');
|
|
19
|
+
agent = new ProbeAgent({
|
|
20
|
+
provider: 'codex',
|
|
21
|
+
model: null, // Don't specify model, let Codex use its default
|
|
22
|
+
allowedFolders: [process.cwd()],
|
|
23
|
+
debug: true
|
|
24
|
+
});
|
|
25
|
+
|
|
26
|
+
console.log('\n2️⃣ Initializing agent...');
|
|
27
|
+
await agent.initialize();
|
|
28
|
+
|
|
29
|
+
console.log('\n✅ Agent initialized successfully!');
|
|
30
|
+
console.log(` Provider: ${agent.clientApiProvider}`);
|
|
31
|
+
console.log(` API Type: ${agent.apiType}`);
|
|
32
|
+
console.log(` Model: ${agent.model}`);
|
|
33
|
+
|
|
34
|
+
// Test simple query
|
|
35
|
+
console.log('\n3️⃣ Testing simple query: "What is 2 + 2?"');
|
|
36
|
+
console.log(' (This should trigger Codex CLI)\n');
|
|
37
|
+
|
|
38
|
+
const response = await agent.answer('What is 2 + 2?');
|
|
39
|
+
|
|
40
|
+
console.log('\n✅ Query completed!');
|
|
41
|
+
console.log('\n📝 Response:');
|
|
42
|
+
console.log('─'.repeat(60));
|
|
43
|
+
console.log(response);
|
|
44
|
+
console.log('─'.repeat(60));
|
|
45
|
+
|
|
46
|
+
// Clean up
|
|
47
|
+
console.log('\n4️⃣ Cleaning up...');
|
|
48
|
+
if (agent.engine && agent.engine.close) {
|
|
49
|
+
await agent.engine.close();
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
console.log('\n✅ All tests passed! 🎉\n');
|
|
53
|
+
process.exit(0);
|
|
54
|
+
|
|
55
|
+
} catch (error) {
|
|
56
|
+
console.error('\n❌ Test failed:', error.message);
|
|
57
|
+
console.error('\nStack trace:');
|
|
58
|
+
console.error(error.stack);
|
|
59
|
+
|
|
60
|
+
// Clean up on error
|
|
61
|
+
if (agent?.engine?.close) {
|
|
62
|
+
try {
|
|
63
|
+
await agent.engine.close();
|
|
64
|
+
} catch (cleanupError) {
|
|
65
|
+
// Ignore cleanup errors
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
console.log('\n💡 Common issues:');
|
|
70
|
+
console.log(' - Make sure Codex CLI is installed: https://openai.com/codex');
|
|
71
|
+
console.log(' - Check that you can run: codex --version');
|
|
72
|
+
console.log(' - Ensure you have an active Codex session');
|
|
73
|
+
|
|
74
|
+
process.exit(1);
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
main();
|