@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,436 @@
|
|
|
1
|
+
use serde_json::Value;
|
|
2
|
+
use std::fs::{self, File};
|
|
3
|
+
use std::io::Write;
|
|
4
|
+
use std::path::PathBuf;
|
|
5
|
+
use std::process::Command;
|
|
6
|
+
use tempfile::TempDir;
|
|
7
|
+
|
|
8
|
+
// Helper function to extract JSON from command output
|
|
9
|
+
fn extract_json_from_output(output: &str) -> &str {
|
|
10
|
+
// Find the first occurrence of '{'
|
|
11
|
+
if let Some(start_index) = output.find('{') {
|
|
12
|
+
// Return the substring from the first '{' to the end
|
|
13
|
+
&output[start_index..]
|
|
14
|
+
} else {
|
|
15
|
+
// If no '{' is found, return the original string
|
|
16
|
+
output
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
// Helper function to create test files
|
|
21
|
+
fn create_test_file(dir: &TempDir, filename: &str, content: &str) -> PathBuf {
|
|
22
|
+
let file_path = dir.path().join(filename);
|
|
23
|
+
let parent_dir = file_path.parent().unwrap();
|
|
24
|
+
fs::create_dir_all(parent_dir).expect("Failed to create parent directories");
|
|
25
|
+
let mut file = File::create(&file_path).expect("Failed to create test file");
|
|
26
|
+
file.write_all(content.as_bytes())
|
|
27
|
+
.expect("Failed to write test content");
|
|
28
|
+
file_path
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
// Helper function to create a test directory structure with various test files
|
|
32
|
+
fn create_test_directory_structure(root_dir: &TempDir) {
|
|
33
|
+
// Create a source directory
|
|
34
|
+
let src_dir = root_dir.path().join("src");
|
|
35
|
+
fs::create_dir(&src_dir).expect("Failed to create src directory");
|
|
36
|
+
|
|
37
|
+
// Create Rust files with search terms
|
|
38
|
+
let rust_content = r#"
|
|
39
|
+
// This is a Rust file with a search term
|
|
40
|
+
fn search_function(query: &str) -> bool {
|
|
41
|
+
println!("Searching for: {}", query);
|
|
42
|
+
query.contains("search")
|
|
43
|
+
}
|
|
44
|
+
"#;
|
|
45
|
+
create_test_file(root_dir, "src/search.rs", rust_content);
|
|
46
|
+
|
|
47
|
+
// Create a JavaScript file with search terms
|
|
48
|
+
let js_content = r#"
|
|
49
|
+
// This is a JavaScript file with a search term
|
|
50
|
+
function searchFunction(query) {
|
|
51
|
+
console.log(`Searching for: ${query}`);
|
|
52
|
+
return query.includes('search');
|
|
53
|
+
}
|
|
54
|
+
"#;
|
|
55
|
+
create_test_file(root_dir, "src/search.js", js_content);
|
|
56
|
+
|
|
57
|
+
// Create a file with special characters
|
|
58
|
+
let special_chars_content = r#"
|
|
59
|
+
// This file contains special characters: "quotes", 'apostrophes', <tags>, &ersands
|
|
60
|
+
function escapeTest(input) {
|
|
61
|
+
return input.replace(/[<>&"']/g, function(c) {
|
|
62
|
+
return {
|
|
63
|
+
'<': '<',
|
|
64
|
+
'>': '>',
|
|
65
|
+
'&': '&',
|
|
66
|
+
'"': '"',
|
|
67
|
+
"'": '''
|
|
68
|
+
}[c];
|
|
69
|
+
});
|
|
70
|
+
}
|
|
71
|
+
"#;
|
|
72
|
+
create_test_file(root_dir, "src/special_chars.js", special_chars_content);
|
|
73
|
+
|
|
74
|
+
// Create a file with multiple search terms
|
|
75
|
+
let multi_term_content = r#"
|
|
76
|
+
// This file contains multiple search terms
|
|
77
|
+
function processQuery(query) {
|
|
78
|
+
// Check if the query contains multiple terms
|
|
79
|
+
const terms = query.split(' ');
|
|
80
|
+
|
|
81
|
+
// Process each term
|
|
82
|
+
return terms.map(term => {
|
|
83
|
+
return {
|
|
84
|
+
term: term,
|
|
85
|
+
isValid: validateTerm(term)
|
|
86
|
+
};
|
|
87
|
+
});
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
function validateTerm(term) {
|
|
91
|
+
// Validate that the term is not empty and contains only allowed characters
|
|
92
|
+
return term.length > 0 && /^[a-zA-Z0-9_-]+$/.test(term);
|
|
93
|
+
}
|
|
94
|
+
"#;
|
|
95
|
+
create_test_file(root_dir, "src/multi_term.js", multi_term_content);
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
#[test]
|
|
99
|
+
fn test_json_output_format_basic() {
|
|
100
|
+
let temp_dir = TempDir::new().expect("Failed to create temp dir");
|
|
101
|
+
create_test_directory_structure(&temp_dir);
|
|
102
|
+
|
|
103
|
+
// Run the CLI with JSON output format
|
|
104
|
+
let output = Command::new("cargo")
|
|
105
|
+
.args([
|
|
106
|
+
"run",
|
|
107
|
+
"--",
|
|
108
|
+
"search",
|
|
109
|
+
"search", // Pattern to search for
|
|
110
|
+
temp_dir.path().to_str().unwrap(),
|
|
111
|
+
"--format",
|
|
112
|
+
"json",
|
|
113
|
+
])
|
|
114
|
+
.output()
|
|
115
|
+
.expect("Failed to execute command");
|
|
116
|
+
|
|
117
|
+
// Check that the command succeeded
|
|
118
|
+
assert!(output.status.success());
|
|
119
|
+
|
|
120
|
+
// Convert stdout to string
|
|
121
|
+
let stdout = String::from_utf8_lossy(&output.stdout);
|
|
122
|
+
|
|
123
|
+
// Extract the JSON part from the output
|
|
124
|
+
let json_str = extract_json_from_output(&stdout);
|
|
125
|
+
|
|
126
|
+
// Parse the JSON output
|
|
127
|
+
let json_result: Value = serde_json::from_str(json_str).expect("Failed to parse JSON output");
|
|
128
|
+
|
|
129
|
+
// Validate the structure of the JSON output
|
|
130
|
+
assert!(json_result.is_object(), "JSON output should be an object");
|
|
131
|
+
assert!(
|
|
132
|
+
json_result.get("results").is_some(),
|
|
133
|
+
"JSON output should have a 'results' field"
|
|
134
|
+
);
|
|
135
|
+
assert!(
|
|
136
|
+
json_result.get("summary").is_some(),
|
|
137
|
+
"JSON output should have a 'summary' field"
|
|
138
|
+
);
|
|
139
|
+
|
|
140
|
+
// Validate the results array
|
|
141
|
+
let results = json_result.get("results").unwrap();
|
|
142
|
+
assert!(results.is_array(), "'results' should be an array");
|
|
143
|
+
assert!(
|
|
144
|
+
!results.as_array().unwrap().is_empty(),
|
|
145
|
+
"'results' array should not be empty"
|
|
146
|
+
);
|
|
147
|
+
|
|
148
|
+
// Validate the structure of each result
|
|
149
|
+
for result in results.as_array().unwrap() {
|
|
150
|
+
assert!(
|
|
151
|
+
result.get("file").is_some(),
|
|
152
|
+
"Each result should have a 'file' field"
|
|
153
|
+
);
|
|
154
|
+
assert!(
|
|
155
|
+
result.get("lines").is_some(),
|
|
156
|
+
"Each result should have a 'lines' field"
|
|
157
|
+
);
|
|
158
|
+
assert!(
|
|
159
|
+
result.get("node_type").is_some(),
|
|
160
|
+
"Each result should have a 'node_type' field"
|
|
161
|
+
);
|
|
162
|
+
assert!(
|
|
163
|
+
result.get("code").is_some(),
|
|
164
|
+
"Each result should have a 'code' field"
|
|
165
|
+
);
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
// Validate the summary object
|
|
169
|
+
let summary = json_result.get("summary").unwrap();
|
|
170
|
+
assert!(summary.is_object(), "'summary' should be an object");
|
|
171
|
+
assert!(
|
|
172
|
+
summary.get("count").is_some(),
|
|
173
|
+
"'summary' should have a 'count' field"
|
|
174
|
+
);
|
|
175
|
+
assert!(
|
|
176
|
+
summary.get("total_bytes").is_some(),
|
|
177
|
+
"'summary' should have a 'total_bytes' field"
|
|
178
|
+
);
|
|
179
|
+
assert!(
|
|
180
|
+
summary.get("total_tokens").is_some(),
|
|
181
|
+
"'summary' should have a 'total_tokens' field"
|
|
182
|
+
);
|
|
183
|
+
|
|
184
|
+
// Validate the count matches the number of results
|
|
185
|
+
let count = summary.get("count").unwrap().as_u64().unwrap();
|
|
186
|
+
let results_count = results.as_array().unwrap().len() as u64;
|
|
187
|
+
assert_eq!(
|
|
188
|
+
count, results_count,
|
|
189
|
+
"The 'count' in summary should match the number of results"
|
|
190
|
+
);
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
#[test]
|
|
194
|
+
fn test_json_output_with_special_characters() {
|
|
195
|
+
let temp_dir = TempDir::new().expect("Failed to create temp dir");
|
|
196
|
+
create_test_directory_structure(&temp_dir);
|
|
197
|
+
|
|
198
|
+
// Run the CLI with JSON output format, searching for special characters
|
|
199
|
+
let output = Command::new("cargo")
|
|
200
|
+
.args([
|
|
201
|
+
"run",
|
|
202
|
+
"--",
|
|
203
|
+
"search",
|
|
204
|
+
"special", // Pattern to search for
|
|
205
|
+
temp_dir.path().to_str().unwrap(),
|
|
206
|
+
"--format",
|
|
207
|
+
"json",
|
|
208
|
+
])
|
|
209
|
+
.output()
|
|
210
|
+
.expect("Failed to execute command");
|
|
211
|
+
|
|
212
|
+
// Check that the command succeeded
|
|
213
|
+
assert!(output.status.success());
|
|
214
|
+
|
|
215
|
+
// Convert stdout to string
|
|
216
|
+
let stdout = String::from_utf8_lossy(&output.stdout);
|
|
217
|
+
|
|
218
|
+
// Extract the JSON part from the output
|
|
219
|
+
let json_str = extract_json_from_output(&stdout);
|
|
220
|
+
|
|
221
|
+
// Parse the JSON output
|
|
222
|
+
let json_result: Value = serde_json::from_str(json_str).expect("Failed to parse JSON output");
|
|
223
|
+
|
|
224
|
+
// Find the result with special characters
|
|
225
|
+
let results = json_result.get("results").unwrap().as_array().unwrap();
|
|
226
|
+
let special_chars_result = results.iter().find(|r| {
|
|
227
|
+
r.get("file")
|
|
228
|
+
.unwrap()
|
|
229
|
+
.as_str()
|
|
230
|
+
.unwrap()
|
|
231
|
+
.contains("special_chars.js")
|
|
232
|
+
});
|
|
233
|
+
|
|
234
|
+
assert!(
|
|
235
|
+
special_chars_result.is_some(),
|
|
236
|
+
"Should find the special_chars.js file"
|
|
237
|
+
);
|
|
238
|
+
|
|
239
|
+
// Verify that special characters are properly escaped in the JSON
|
|
240
|
+
let code = special_chars_result
|
|
241
|
+
.unwrap()
|
|
242
|
+
.get("code")
|
|
243
|
+
.unwrap()
|
|
244
|
+
.as_str()
|
|
245
|
+
.unwrap();
|
|
246
|
+
assert!(
|
|
247
|
+
code.contains("\"quotes\""),
|
|
248
|
+
"Double quotes should be properly escaped in JSON"
|
|
249
|
+
);
|
|
250
|
+
assert!(
|
|
251
|
+
code.contains("'apostrophes'"),
|
|
252
|
+
"Apostrophes should be properly escaped in JSON"
|
|
253
|
+
);
|
|
254
|
+
assert!(
|
|
255
|
+
code.contains("<tags>"),
|
|
256
|
+
"Tags should be properly escaped in JSON"
|
|
257
|
+
);
|
|
258
|
+
assert!(
|
|
259
|
+
code.contains("&ersands"),
|
|
260
|
+
"Ampersands should be properly escaped in JSON"
|
|
261
|
+
);
|
|
262
|
+
}
|
|
263
|
+
|
|
264
|
+
#[test]
|
|
265
|
+
fn test_json_output_with_multiple_terms() {
|
|
266
|
+
let temp_dir = TempDir::new().expect("Failed to create temp dir");
|
|
267
|
+
create_test_directory_structure(&temp_dir);
|
|
268
|
+
|
|
269
|
+
// Run the CLI with JSON output format, searching for multiple terms
|
|
270
|
+
let output = Command::new("cargo")
|
|
271
|
+
.args([
|
|
272
|
+
"run",
|
|
273
|
+
"--",
|
|
274
|
+
"search",
|
|
275
|
+
"term process", // Multiple terms to search for
|
|
276
|
+
temp_dir.path().to_str().unwrap(),
|
|
277
|
+
"--format",
|
|
278
|
+
"json",
|
|
279
|
+
])
|
|
280
|
+
.output()
|
|
281
|
+
.expect("Failed to execute command");
|
|
282
|
+
|
|
283
|
+
// Check that the command succeeded
|
|
284
|
+
assert!(output.status.success());
|
|
285
|
+
|
|
286
|
+
// Convert stdout to string
|
|
287
|
+
let stdout = String::from_utf8_lossy(&output.stdout);
|
|
288
|
+
|
|
289
|
+
// Extract the JSON part from the output
|
|
290
|
+
let json_str = extract_json_from_output(&stdout);
|
|
291
|
+
|
|
292
|
+
// Parse the JSON output
|
|
293
|
+
let json_result: Value = serde_json::from_str(json_str).expect("Failed to parse JSON output");
|
|
294
|
+
|
|
295
|
+
// Validate the results array
|
|
296
|
+
let results = json_result.get("results").unwrap().as_array().unwrap();
|
|
297
|
+
|
|
298
|
+
// Should find the multi_term.js file
|
|
299
|
+
let multi_term_result = results.iter().find(|r| {
|
|
300
|
+
r.get("file")
|
|
301
|
+
.unwrap()
|
|
302
|
+
.as_str()
|
|
303
|
+
.unwrap()
|
|
304
|
+
.contains("multi_term.js")
|
|
305
|
+
});
|
|
306
|
+
|
|
307
|
+
assert!(
|
|
308
|
+
multi_term_result.is_some(),
|
|
309
|
+
"Should find the multi_term.js file"
|
|
310
|
+
);
|
|
311
|
+
|
|
312
|
+
// Check if matched_keywords field contains both search terms
|
|
313
|
+
if let Some(matched_keywords) = multi_term_result.unwrap().get("matched_keywords") {
|
|
314
|
+
let keywords = matched_keywords.as_array().unwrap();
|
|
315
|
+
let has_term = keywords
|
|
316
|
+
.iter()
|
|
317
|
+
.any(|k| k.as_str().unwrap().contains("term"));
|
|
318
|
+
let has_process = keywords
|
|
319
|
+
.iter()
|
|
320
|
+
.any(|k| k.as_str().unwrap().contains("process"));
|
|
321
|
+
|
|
322
|
+
assert!(has_term, "matched_keywords should contain 'term'");
|
|
323
|
+
assert!(has_process, "matched_keywords should contain 'process'");
|
|
324
|
+
}
|
|
325
|
+
}
|
|
326
|
+
|
|
327
|
+
#[test]
|
|
328
|
+
fn test_json_output_with_no_results() {
|
|
329
|
+
let temp_dir = TempDir::new().expect("Failed to create temp dir");
|
|
330
|
+
create_test_directory_structure(&temp_dir);
|
|
331
|
+
|
|
332
|
+
// Run the CLI with JSON output format, searching for a term that doesn't exist
|
|
333
|
+
let output = Command::new("cargo")
|
|
334
|
+
.args([
|
|
335
|
+
"run",
|
|
336
|
+
"--",
|
|
337
|
+
"search",
|
|
338
|
+
"nonexistentterm", // Term that doesn't exist in any file
|
|
339
|
+
temp_dir.path().to_str().unwrap(),
|
|
340
|
+
"--format",
|
|
341
|
+
"json",
|
|
342
|
+
])
|
|
343
|
+
.output()
|
|
344
|
+
.expect("Failed to execute command");
|
|
345
|
+
|
|
346
|
+
// Check that the command succeeded
|
|
347
|
+
assert!(output.status.success());
|
|
348
|
+
|
|
349
|
+
// Convert stdout to string
|
|
350
|
+
let stdout = String::from_utf8_lossy(&output.stdout);
|
|
351
|
+
|
|
352
|
+
// Extract the JSON part from the output
|
|
353
|
+
let json_str = extract_json_from_output(&stdout);
|
|
354
|
+
|
|
355
|
+
// Parse the JSON output
|
|
356
|
+
let json_result: Value = serde_json::from_str(json_str).expect("Failed to parse JSON output");
|
|
357
|
+
|
|
358
|
+
// Validate the structure of the JSON output
|
|
359
|
+
assert!(json_result.is_object(), "JSON output should be an object");
|
|
360
|
+
assert!(
|
|
361
|
+
json_result.get("results").is_some(),
|
|
362
|
+
"JSON output should have a 'results' field"
|
|
363
|
+
);
|
|
364
|
+
assert!(
|
|
365
|
+
json_result.get("summary").is_some(),
|
|
366
|
+
"JSON output should have a 'summary' field"
|
|
367
|
+
);
|
|
368
|
+
|
|
369
|
+
// Validate the results array is empty
|
|
370
|
+
let results = json_result.get("results").unwrap().as_array().unwrap();
|
|
371
|
+
assert!(results.is_empty(), "'results' array should be empty");
|
|
372
|
+
|
|
373
|
+
// Validate the summary object
|
|
374
|
+
let summary = json_result.get("summary").unwrap();
|
|
375
|
+
assert_eq!(
|
|
376
|
+
summary.get("count").unwrap().as_u64().unwrap(),
|
|
377
|
+
0,
|
|
378
|
+
"'count' should be 0"
|
|
379
|
+
);
|
|
380
|
+
assert_eq!(
|
|
381
|
+
summary.get("total_bytes").unwrap().as_u64().unwrap(),
|
|
382
|
+
0,
|
|
383
|
+
"'total_bytes' should be 0"
|
|
384
|
+
);
|
|
385
|
+
assert_eq!(
|
|
386
|
+
summary.get("total_tokens").unwrap().as_u64().unwrap(),
|
|
387
|
+
0,
|
|
388
|
+
"'total_tokens' should be 0"
|
|
389
|
+
);
|
|
390
|
+
}
|
|
391
|
+
|
|
392
|
+
#[test]
|
|
393
|
+
fn test_json_output_with_files_only() {
|
|
394
|
+
let temp_dir = TempDir::new().expect("Failed to create temp dir");
|
|
395
|
+
create_test_directory_structure(&temp_dir);
|
|
396
|
+
|
|
397
|
+
// Run the CLI with JSON output format and files-only option
|
|
398
|
+
let output = Command::new("cargo")
|
|
399
|
+
.args([
|
|
400
|
+
"run",
|
|
401
|
+
"--",
|
|
402
|
+
"search",
|
|
403
|
+
"search", // Pattern to search for
|
|
404
|
+
temp_dir.path().to_str().unwrap(),
|
|
405
|
+
"--format",
|
|
406
|
+
"json",
|
|
407
|
+
"--files-only",
|
|
408
|
+
])
|
|
409
|
+
.output()
|
|
410
|
+
.expect("Failed to execute command");
|
|
411
|
+
|
|
412
|
+
// Check that the command succeeded
|
|
413
|
+
assert!(output.status.success());
|
|
414
|
+
|
|
415
|
+
// Convert stdout to string
|
|
416
|
+
let stdout = String::from_utf8_lossy(&output.stdout);
|
|
417
|
+
|
|
418
|
+
// Extract the JSON part from the output
|
|
419
|
+
let json_str = extract_json_from_output(&stdout);
|
|
420
|
+
|
|
421
|
+
// Parse the JSON output
|
|
422
|
+
let json_result: Value = serde_json::from_str(json_str).expect("Failed to parse JSON output");
|
|
423
|
+
|
|
424
|
+
// Validate the results array
|
|
425
|
+
let results = json_result.get("results").unwrap().as_array().unwrap();
|
|
426
|
+
assert!(!results.is_empty(), "'results' array should not be empty");
|
|
427
|
+
|
|
428
|
+
// Verify that all results have node_type = "file"
|
|
429
|
+
for result in results {
|
|
430
|
+
assert_eq!(
|
|
431
|
+
result.get("node_type").unwrap().as_str().unwrap(),
|
|
432
|
+
"file",
|
|
433
|
+
"With --files-only, all results should have node_type = 'file'"
|
|
434
|
+
);
|
|
435
|
+
}
|
|
436
|
+
}
|