@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,282 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Unit tests for SimpleTelemetry and SimpleAppTracer
|
|
3
|
+
* @module tests/unit/simpleTelemetry
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
import { jest, describe, test, expect, beforeEach, afterEach } from '@jest/globals';
|
|
7
|
+
import { SimpleTelemetry, SimpleAppTracer } from '../../src/agent/simpleTelemetry.js';
|
|
8
|
+
|
|
9
|
+
describe('SimpleTelemetry', () => {
|
|
10
|
+
let telemetry;
|
|
11
|
+
|
|
12
|
+
beforeEach(() => {
|
|
13
|
+
telemetry = new SimpleTelemetry({
|
|
14
|
+
serviceName: 'test-service',
|
|
15
|
+
enableConsole: false,
|
|
16
|
+
enableFile: false
|
|
17
|
+
});
|
|
18
|
+
});
|
|
19
|
+
|
|
20
|
+
afterEach(async () => {
|
|
21
|
+
await telemetry.shutdown();
|
|
22
|
+
});
|
|
23
|
+
|
|
24
|
+
describe('createSpan', () => {
|
|
25
|
+
test('should create a span with name and attributes', () => {
|
|
26
|
+
const span = telemetry.createSpan('test-span', { 'test.attr': 'value' });
|
|
27
|
+
|
|
28
|
+
expect(span.name).toBe('test-span');
|
|
29
|
+
expect(span.attributes).toMatchObject({
|
|
30
|
+
'test.attr': 'value',
|
|
31
|
+
service: 'test-service'
|
|
32
|
+
});
|
|
33
|
+
expect(span.traceId).toBeDefined();
|
|
34
|
+
expect(span.spanId).toBeDefined();
|
|
35
|
+
});
|
|
36
|
+
|
|
37
|
+
test('should allow adding events to spans', () => {
|
|
38
|
+
const span = telemetry.createSpan('test-span');
|
|
39
|
+
|
|
40
|
+
span.addEvent('test-event', { 'event.data': 'test' });
|
|
41
|
+
|
|
42
|
+
expect(span.events).toHaveLength(1);
|
|
43
|
+
expect(span.events[0].name).toBe('test-event');
|
|
44
|
+
expect(span.events[0].attributes).toMatchObject({ 'event.data': 'test' });
|
|
45
|
+
});
|
|
46
|
+
|
|
47
|
+
test('should allow setting attributes', () => {
|
|
48
|
+
const span = telemetry.createSpan('test-span');
|
|
49
|
+
|
|
50
|
+
span.setAttributes({ 'new.attr': 'new-value' });
|
|
51
|
+
|
|
52
|
+
expect(span.attributes['new.attr']).toBe('new-value');
|
|
53
|
+
});
|
|
54
|
+
|
|
55
|
+
test('should allow setting status', () => {
|
|
56
|
+
const span = telemetry.createSpan('test-span');
|
|
57
|
+
|
|
58
|
+
// setStatus modifies the internal span state used during export
|
|
59
|
+
// The function should not throw and should be callable
|
|
60
|
+
expect(() => span.setStatus('ERROR')).not.toThrow();
|
|
61
|
+
});
|
|
62
|
+
});
|
|
63
|
+
});
|
|
64
|
+
|
|
65
|
+
describe('SimpleAppTracer', () => {
|
|
66
|
+
let telemetry;
|
|
67
|
+
let tracer;
|
|
68
|
+
|
|
69
|
+
beforeEach(() => {
|
|
70
|
+
telemetry = new SimpleTelemetry({
|
|
71
|
+
serviceName: 'test-service',
|
|
72
|
+
enableConsole: false,
|
|
73
|
+
enableFile: false
|
|
74
|
+
});
|
|
75
|
+
tracer = new SimpleAppTracer(telemetry, 'test-session-123');
|
|
76
|
+
});
|
|
77
|
+
|
|
78
|
+
afterEach(async () => {
|
|
79
|
+
await tracer.shutdown();
|
|
80
|
+
});
|
|
81
|
+
|
|
82
|
+
describe('constructor', () => {
|
|
83
|
+
test('should initialize with provided session ID', () => {
|
|
84
|
+
expect(tracer.sessionId).toBe('test-session-123');
|
|
85
|
+
});
|
|
86
|
+
|
|
87
|
+
test('should generate session ID if not provided', () => {
|
|
88
|
+
const tracerWithoutSession = new SimpleAppTracer(telemetry);
|
|
89
|
+
expect(tracerWithoutSession.sessionId).toBeDefined();
|
|
90
|
+
expect(tracerWithoutSession.sessionId.length).toBeGreaterThan(0);
|
|
91
|
+
});
|
|
92
|
+
});
|
|
93
|
+
|
|
94
|
+
describe('isEnabled', () => {
|
|
95
|
+
test('should return true when telemetry is provided', () => {
|
|
96
|
+
expect(tracer.isEnabled()).toBe(true);
|
|
97
|
+
});
|
|
98
|
+
|
|
99
|
+
test('should return false when telemetry is null', () => {
|
|
100
|
+
const disabledTracer = new SimpleAppTracer(null, 'session-123');
|
|
101
|
+
expect(disabledTracer.isEnabled()).toBe(false);
|
|
102
|
+
});
|
|
103
|
+
});
|
|
104
|
+
|
|
105
|
+
describe('recordEvent', () => {
|
|
106
|
+
test('should record event with name and attributes', () => {
|
|
107
|
+
// Mock addEvent
|
|
108
|
+
const addEventSpy = jest.spyOn(tracer, 'addEvent');
|
|
109
|
+
|
|
110
|
+
tracer.recordEvent('test.event', { 'custom.attr': 'value' });
|
|
111
|
+
|
|
112
|
+
expect(addEventSpy).toHaveBeenCalledWith('test.event', {
|
|
113
|
+
'session.id': 'test-session-123',
|
|
114
|
+
'custom.attr': 'value'
|
|
115
|
+
});
|
|
116
|
+
});
|
|
117
|
+
|
|
118
|
+
test('should not record event when tracer is disabled', () => {
|
|
119
|
+
const disabledTracer = new SimpleAppTracer(null, 'session-123');
|
|
120
|
+
const addEventSpy = jest.spyOn(disabledTracer, 'addEvent');
|
|
121
|
+
|
|
122
|
+
disabledTracer.recordEvent('test.event', { 'custom.attr': 'value' });
|
|
123
|
+
|
|
124
|
+
expect(addEventSpy).not.toHaveBeenCalled();
|
|
125
|
+
});
|
|
126
|
+
|
|
127
|
+
test('should support completion_prompt.started event', () => {
|
|
128
|
+
const addEventSpy = jest.spyOn(tracer, 'addEvent');
|
|
129
|
+
|
|
130
|
+
tracer.recordEvent('completion_prompt.started', {
|
|
131
|
+
'completion_prompt.original_result_length': 100
|
|
132
|
+
});
|
|
133
|
+
|
|
134
|
+
expect(addEventSpy).toHaveBeenCalledWith('completion_prompt.started', {
|
|
135
|
+
'session.id': 'test-session-123',
|
|
136
|
+
'completion_prompt.original_result_length': 100
|
|
137
|
+
});
|
|
138
|
+
});
|
|
139
|
+
|
|
140
|
+
test('should support completion_prompt.completed event', () => {
|
|
141
|
+
const addEventSpy = jest.spyOn(tracer, 'addEvent');
|
|
142
|
+
|
|
143
|
+
tracer.recordEvent('completion_prompt.completed', {
|
|
144
|
+
'completion_prompt.final_result_length': 200
|
|
145
|
+
});
|
|
146
|
+
|
|
147
|
+
expect(addEventSpy).toHaveBeenCalledWith('completion_prompt.completed', {
|
|
148
|
+
'session.id': 'test-session-123',
|
|
149
|
+
'completion_prompt.final_result_length': 200
|
|
150
|
+
});
|
|
151
|
+
});
|
|
152
|
+
|
|
153
|
+
test('should support completion_prompt.error event', () => {
|
|
154
|
+
const addEventSpy = jest.spyOn(tracer, 'addEvent');
|
|
155
|
+
|
|
156
|
+
tracer.recordEvent('completion_prompt.error', {
|
|
157
|
+
'completion_prompt.error': 'Test error message'
|
|
158
|
+
});
|
|
159
|
+
|
|
160
|
+
expect(addEventSpy).toHaveBeenCalledWith('completion_prompt.error', {
|
|
161
|
+
'session.id': 'test-session-123',
|
|
162
|
+
'completion_prompt.error': 'Test error message'
|
|
163
|
+
});
|
|
164
|
+
});
|
|
165
|
+
});
|
|
166
|
+
|
|
167
|
+
describe('recordDelegationEvent', () => {
|
|
168
|
+
test('should record delegation event with type and data', () => {
|
|
169
|
+
const addEventSpy = jest.spyOn(tracer, 'addEvent');
|
|
170
|
+
|
|
171
|
+
tracer.recordDelegationEvent('started', { task: 'analyze code' });
|
|
172
|
+
|
|
173
|
+
expect(addEventSpy).toHaveBeenCalledWith('delegation.started', {
|
|
174
|
+
'session.id': 'test-session-123',
|
|
175
|
+
task: 'analyze code'
|
|
176
|
+
});
|
|
177
|
+
});
|
|
178
|
+
});
|
|
179
|
+
|
|
180
|
+
describe('recordJsonValidationEvent', () => {
|
|
181
|
+
test('should record JSON validation event with type and data', () => {
|
|
182
|
+
const addEventSpy = jest.spyOn(tracer, 'addEvent');
|
|
183
|
+
|
|
184
|
+
tracer.recordJsonValidationEvent('validation_started', { schema: 'user' });
|
|
185
|
+
|
|
186
|
+
expect(addEventSpy).toHaveBeenCalledWith('json_validation.validation_started', {
|
|
187
|
+
'session.id': 'test-session-123',
|
|
188
|
+
schema: 'user'
|
|
189
|
+
});
|
|
190
|
+
});
|
|
191
|
+
});
|
|
192
|
+
|
|
193
|
+
describe('recordMermaidValidationEvent', () => {
|
|
194
|
+
test('should record Mermaid validation event with type and data', () => {
|
|
195
|
+
const addEventSpy = jest.spyOn(tracer, 'addEvent');
|
|
196
|
+
|
|
197
|
+
tracer.recordMermaidValidationEvent('validation_complete', { valid: true });
|
|
198
|
+
|
|
199
|
+
expect(addEventSpy).toHaveBeenCalledWith('mermaid_validation.validation_complete', {
|
|
200
|
+
'session.id': 'test-session-123',
|
|
201
|
+
valid: true
|
|
202
|
+
});
|
|
203
|
+
});
|
|
204
|
+
});
|
|
205
|
+
|
|
206
|
+
describe('createSessionSpan', () => {
|
|
207
|
+
test('should create session span with attributes', () => {
|
|
208
|
+
const span = tracer.createSessionSpan({ 'custom.attr': 'value' });
|
|
209
|
+
|
|
210
|
+
expect(span).not.toBeNull();
|
|
211
|
+
expect(span.name).toBe('agent.session');
|
|
212
|
+
expect(span.attributes).toMatchObject({
|
|
213
|
+
'session.id': 'test-session-123',
|
|
214
|
+
'custom.attr': 'value'
|
|
215
|
+
});
|
|
216
|
+
});
|
|
217
|
+
|
|
218
|
+
test('should return null when tracer is disabled', () => {
|
|
219
|
+
const disabledTracer = new SimpleAppTracer(null);
|
|
220
|
+
const span = disabledTracer.createSessionSpan();
|
|
221
|
+
|
|
222
|
+
expect(span).toBeNull();
|
|
223
|
+
});
|
|
224
|
+
});
|
|
225
|
+
|
|
226
|
+
describe('createAISpan', () => {
|
|
227
|
+
test('should create AI span with model and provider', () => {
|
|
228
|
+
const span = tracer.createAISpan('gpt-4', 'openai', { 'custom.attr': 'value' });
|
|
229
|
+
|
|
230
|
+
expect(span).not.toBeNull();
|
|
231
|
+
expect(span.name).toBe('ai.request');
|
|
232
|
+
expect(span.attributes).toMatchObject({
|
|
233
|
+
'ai.model': 'gpt-4',
|
|
234
|
+
'ai.provider': 'openai',
|
|
235
|
+
'session.id': 'test-session-123',
|
|
236
|
+
'custom.attr': 'value'
|
|
237
|
+
});
|
|
238
|
+
});
|
|
239
|
+
});
|
|
240
|
+
|
|
241
|
+
describe('createToolSpan', () => {
|
|
242
|
+
test('should create tool span with tool name', () => {
|
|
243
|
+
const span = tracer.createToolSpan('search', { query: 'test' });
|
|
244
|
+
|
|
245
|
+
expect(span).not.toBeNull();
|
|
246
|
+
expect(span.name).toBe('tool.call');
|
|
247
|
+
expect(span.attributes).toMatchObject({
|
|
248
|
+
'tool.name': 'search',
|
|
249
|
+
'session.id': 'test-session-123',
|
|
250
|
+
query: 'test'
|
|
251
|
+
});
|
|
252
|
+
});
|
|
253
|
+
});
|
|
254
|
+
|
|
255
|
+
describe('withSpan', () => {
|
|
256
|
+
test('should execute function within span context', async () => {
|
|
257
|
+
let result;
|
|
258
|
+
|
|
259
|
+
result = await tracer.withSpan('test.operation', async () => {
|
|
260
|
+
return 'success';
|
|
261
|
+
}, { 'operation.type': 'test' });
|
|
262
|
+
|
|
263
|
+
expect(result).toBe('success');
|
|
264
|
+
});
|
|
265
|
+
|
|
266
|
+
test('should handle errors within span', async () => {
|
|
267
|
+
await expect(tracer.withSpan('test.operation', async () => {
|
|
268
|
+
throw new Error('Test error');
|
|
269
|
+
})).rejects.toThrow('Test error');
|
|
270
|
+
});
|
|
271
|
+
|
|
272
|
+
test('should execute function directly when tracer is disabled', async () => {
|
|
273
|
+
const disabledTracer = new SimpleAppTracer(null);
|
|
274
|
+
|
|
275
|
+
const result = await disabledTracer.withSpan('test.operation', async () => {
|
|
276
|
+
return 'executed';
|
|
277
|
+
});
|
|
278
|
+
|
|
279
|
+
expect(result).toBe('executed');
|
|
280
|
+
});
|
|
281
|
+
});
|
|
282
|
+
});
|
|
@@ -0,0 +1,274 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tests for simplified attempt_completion tool - without command parameter and JSON issues
|
|
3
|
+
*/
|
|
4
|
+
import { jest, describe, test, expect, beforeEach } from '@jest/globals';
|
|
5
|
+
import { attemptCompletionSchema } from '../../src/tools/common.js';
|
|
6
|
+
import { parseXmlToolCallWithThinking } from '../../src/agent/tools.js';
|
|
7
|
+
|
|
8
|
+
describe('Simplified attempt_completion Schema', () => {
|
|
9
|
+
test('should accept valid plain text result', () => {
|
|
10
|
+
const params = {
|
|
11
|
+
result: 'I have successfully analyzed the authentication system. It uses JWT tokens with RS256 encryption.'
|
|
12
|
+
};
|
|
13
|
+
|
|
14
|
+
const validation = attemptCompletionSchema.safeParse(params);
|
|
15
|
+
expect(validation.success).toBe(true);
|
|
16
|
+
expect(validation.data.result).toBe(params.result);
|
|
17
|
+
});
|
|
18
|
+
|
|
19
|
+
test('should accept multiline text result', () => {
|
|
20
|
+
const params = {
|
|
21
|
+
result: `Analysis complete:
|
|
22
|
+
|
|
23
|
+
1. The authentication system uses JWT tokens
|
|
24
|
+
2. Password hashing is implemented with bcrypt
|
|
25
|
+
3. Rate limiting is in place for login attempts
|
|
26
|
+
|
|
27
|
+
Security recommendations:
|
|
28
|
+
- Consider adding 2FA
|
|
29
|
+
- Implement session timeout`
|
|
30
|
+
};
|
|
31
|
+
|
|
32
|
+
const validation = attemptCompletionSchema.safeParse(params);
|
|
33
|
+
expect(validation.success).toBe(true);
|
|
34
|
+
expect(validation.data.result).toBe(params.result);
|
|
35
|
+
});
|
|
36
|
+
|
|
37
|
+
test('should accept empty result', () => {
|
|
38
|
+
const params = {
|
|
39
|
+
result: ''
|
|
40
|
+
};
|
|
41
|
+
|
|
42
|
+
const validation = attemptCompletionSchema.safeParse(params);
|
|
43
|
+
expect(validation.success).toBe(true);
|
|
44
|
+
});
|
|
45
|
+
|
|
46
|
+
test('should reject missing result parameter', () => {
|
|
47
|
+
const params = {};
|
|
48
|
+
|
|
49
|
+
const validation = attemptCompletionSchema.safeParse(params);
|
|
50
|
+
expect(validation.success).toBe(false);
|
|
51
|
+
expect(validation.error.issues[0].code).toBe('invalid_type');
|
|
52
|
+
});
|
|
53
|
+
|
|
54
|
+
test('should reject non-string result', () => {
|
|
55
|
+
const params = {
|
|
56
|
+
result: 123
|
|
57
|
+
};
|
|
58
|
+
|
|
59
|
+
const validation = attemptCompletionSchema.safeParse(params);
|
|
60
|
+
expect(validation.success).toBe(false);
|
|
61
|
+
});
|
|
62
|
+
|
|
63
|
+
test('should not have command parameter in schema', () => {
|
|
64
|
+
// Test that the command parameter is no longer accepted
|
|
65
|
+
const params = {
|
|
66
|
+
result: 'Test result',
|
|
67
|
+
command: 'echo "test"'
|
|
68
|
+
};
|
|
69
|
+
|
|
70
|
+
const validation = attemptCompletionSchema.safeParse(params);
|
|
71
|
+
expect(validation.success).toBe(true);
|
|
72
|
+
|
|
73
|
+
// Command should be ignored (not present in validated data)
|
|
74
|
+
expect(validation.data).toEqual({ result: 'Test result' });
|
|
75
|
+
expect(validation.data.command).toBeUndefined();
|
|
76
|
+
});
|
|
77
|
+
});
|
|
78
|
+
|
|
79
|
+
describe('Simplified attempt_completion XML Parsing', () => {
|
|
80
|
+
test('should parse simple attempt_completion with direct content (no result wrapper)', () => {
|
|
81
|
+
const xml = `<attempt_completion>
|
|
82
|
+
The authentication system has been analyzed successfully. It uses secure JWT tokens.
|
|
83
|
+
</attempt_completion>`;
|
|
84
|
+
|
|
85
|
+
const parsed = parseXmlToolCallWithThinking(xml);
|
|
86
|
+
|
|
87
|
+
expect(parsed).toBeDefined();
|
|
88
|
+
expect(parsed.toolName).toBe('attempt_completion');
|
|
89
|
+
expect(parsed.params.result).toBe('The authentication system has been analyzed successfully. It uses secure JWT tokens.');
|
|
90
|
+
});
|
|
91
|
+
|
|
92
|
+
test('should parse multiline result with formatting', () => {
|
|
93
|
+
const xml = `<attempt_completion>
|
|
94
|
+
Analysis Complete:
|
|
95
|
+
|
|
96
|
+
**Security Findings:**
|
|
97
|
+
- JWT tokens are properly signed
|
|
98
|
+
- Password hashing uses bcrypt
|
|
99
|
+
- Rate limiting is implemented
|
|
100
|
+
|
|
101
|
+
**Recommendations:**
|
|
102
|
+
1. Add 2FA support
|
|
103
|
+
2. Implement session timeouts
|
|
104
|
+
3. Add audit logging
|
|
105
|
+
</attempt_completion>`;
|
|
106
|
+
|
|
107
|
+
const parsed = parseXmlToolCallWithThinking(xml);
|
|
108
|
+
|
|
109
|
+
expect(parsed).toBeDefined();
|
|
110
|
+
expect(parsed.toolName).toBe('attempt_completion');
|
|
111
|
+
expect(parsed.params.result).toContain('Analysis Complete:');
|
|
112
|
+
expect(parsed.params.result).toContain('**Security Findings:**');
|
|
113
|
+
expect(parsed.params.result).toContain('**Recommendations:**');
|
|
114
|
+
});
|
|
115
|
+
|
|
116
|
+
test('should handle result with code blocks', () => {
|
|
117
|
+
const xml = `<attempt_completion>
|
|
118
|
+
I found the authentication function:
|
|
119
|
+
|
|
120
|
+
\`\`\`javascript
|
|
121
|
+
function authenticate(token) {
|
|
122
|
+
return jwt.verify(token, secret);
|
|
123
|
+
}
|
|
124
|
+
\`\`\`
|
|
125
|
+
|
|
126
|
+
This function validates JWT tokens using the secret key.
|
|
127
|
+
</attempt_completion>`;
|
|
128
|
+
|
|
129
|
+
const parsed = parseXmlToolCallWithThinking(xml);
|
|
130
|
+
|
|
131
|
+
expect(parsed).toBeDefined();
|
|
132
|
+
expect(parsed.toolName).toBe('attempt_completion');
|
|
133
|
+
expect(parsed.params.result).toContain('```javascript');
|
|
134
|
+
expect(parsed.params.result).toContain('function authenticate');
|
|
135
|
+
});
|
|
136
|
+
|
|
137
|
+
test('should handle result with XML-like content', () => {
|
|
138
|
+
const xml = `<attempt_completion>
|
|
139
|
+
The config file contains: <database><host>localhost</host></database>
|
|
140
|
+
</attempt_completion>`;
|
|
141
|
+
|
|
142
|
+
const parsed = parseXmlToolCallWithThinking(xml);
|
|
143
|
+
|
|
144
|
+
expect(parsed).toBeDefined();
|
|
145
|
+
// XML entities should remain as-is in the result (not decoded)
|
|
146
|
+
expect(parsed.params.result).toContain('<database><host>localhost</host></database>');
|
|
147
|
+
});
|
|
148
|
+
|
|
149
|
+
test('should treat all content as direct content (including old-style tags)', () => {
|
|
150
|
+
// Test that everything inside attempt_completion is treated as content
|
|
151
|
+
const xml = `<attempt_completion>
|
|
152
|
+
<result>Analysis complete. The system is secure.</result>
|
|
153
|
+
<command>echo "test"</command>
|
|
154
|
+
</attempt_completion>`;
|
|
155
|
+
|
|
156
|
+
const parsed = parseXmlToolCallWithThinking(xml);
|
|
157
|
+
|
|
158
|
+
expect(parsed).toBeDefined();
|
|
159
|
+
expect(parsed.toolName).toBe('attempt_completion');
|
|
160
|
+
expect(parsed.params.result).toContain('Analysis complete. The system is secure.');
|
|
161
|
+
expect(parsed.params.result).toContain('<result>');
|
|
162
|
+
expect(parsed.params.result).toContain('<command>echo "test"</command>');
|
|
163
|
+
expect(parsed.params.command).toBeUndefined(); // Command should not be a separate parameter
|
|
164
|
+
});
|
|
165
|
+
|
|
166
|
+
test('should handle empty content', () => {
|
|
167
|
+
const xml = `<attempt_completion>
|
|
168
|
+
</attempt_completion>`;
|
|
169
|
+
|
|
170
|
+
const parsed = parseXmlToolCallWithThinking(xml);
|
|
171
|
+
|
|
172
|
+
expect(parsed).toBeDefined();
|
|
173
|
+
expect(parsed.params.result).toBe('');
|
|
174
|
+
});
|
|
175
|
+
|
|
176
|
+
test('should handle content with special characters', () => {
|
|
177
|
+
const xml = `<attempt_completion>
|
|
178
|
+
Found 5 files with "special" characters: @#$%^&*()[]{}|\\:";'<>?,./
|
|
179
|
+
</attempt_completion>`;
|
|
180
|
+
|
|
181
|
+
const parsed = parseXmlToolCallWithThinking(xml);
|
|
182
|
+
|
|
183
|
+
expect(parsed).toBeDefined();
|
|
184
|
+
expect(parsed.params.result).toContain('special');
|
|
185
|
+
expect(parsed.params.result).toContain('@#$%^&*()[]{}|\\:');
|
|
186
|
+
});
|
|
187
|
+
});
|
|
188
|
+
|
|
189
|
+
describe('Integration with ProbeAgent (Mocked)', () => {
|
|
190
|
+
test('should handle valid attempt_completion without JSON validation', () => {
|
|
191
|
+
// Mock the schema validation that would happen in ProbeAgent
|
|
192
|
+
const params = {
|
|
193
|
+
result: 'The search functionality has been implemented successfully with BM25 ranking.'
|
|
194
|
+
};
|
|
195
|
+
|
|
196
|
+
const validation = attemptCompletionSchema.safeParse(params);
|
|
197
|
+
expect(validation.success).toBe(true);
|
|
198
|
+
|
|
199
|
+
// Simulate what ProbeAgent.js does - just extract the result
|
|
200
|
+
const finalResult = validation.data.result;
|
|
201
|
+
|
|
202
|
+
expect(finalResult).toBe(params.result);
|
|
203
|
+
expect(typeof finalResult).toBe('string');
|
|
204
|
+
});
|
|
205
|
+
|
|
206
|
+
test('should handle attempt_completion with markdown formatting', () => {
|
|
207
|
+
const params = {
|
|
208
|
+
result: `# Authentication Analysis
|
|
209
|
+
|
|
210
|
+
## Overview
|
|
211
|
+
The system implements secure authentication using:
|
|
212
|
+
- JWT tokens with RS256 signing
|
|
213
|
+
- bcrypt password hashing
|
|
214
|
+
- Rate limiting on login attempts
|
|
215
|
+
|
|
216
|
+
## Security Score: A-
|
|
217
|
+
|
|
218
|
+
The implementation follows security best practices.`
|
|
219
|
+
};
|
|
220
|
+
|
|
221
|
+
const validation = attemptCompletionSchema.safeParse(params);
|
|
222
|
+
expect(validation.success).toBe(true);
|
|
223
|
+
|
|
224
|
+
const finalResult = validation.data.result;
|
|
225
|
+
expect(finalResult).toContain('# Authentication Analysis');
|
|
226
|
+
expect(finalResult).toContain('## Security Score: A-');
|
|
227
|
+
});
|
|
228
|
+
|
|
229
|
+
test('should not require JSON cleaning or validation for plain text', () => {
|
|
230
|
+
// This test ensures we don't need the complex JSON cleaning logic anymore
|
|
231
|
+
const plainTextResult = 'Simple analysis result without any JSON formatting.';
|
|
232
|
+
|
|
233
|
+
// Direct validation - no JSON parsing needed
|
|
234
|
+
const validation = attemptCompletionSchema.safeParse({ result: plainTextResult });
|
|
235
|
+
expect(validation.success).toBe(true);
|
|
236
|
+
|
|
237
|
+
// No need for cleanSchemaResponse or validateJsonResponse
|
|
238
|
+
expect(validation.data.result).toBe(plainTextResult);
|
|
239
|
+
});
|
|
240
|
+
});
|
|
241
|
+
|
|
242
|
+
describe('Legacy Compatibility', () => {
|
|
243
|
+
test('should maintain backward compatibility with direct content format', () => {
|
|
244
|
+
// Ensure direct content attempt_completion XML works
|
|
245
|
+
const directXml = `<attempt_completion>
|
|
246
|
+
Task completed successfully.
|
|
247
|
+
</attempt_completion>`;
|
|
248
|
+
|
|
249
|
+
const parsed = parseXmlToolCallWithThinking(directXml);
|
|
250
|
+
|
|
251
|
+
expect(parsed).toBeDefined();
|
|
252
|
+
expect(parsed.toolName).toBe('attempt_completion');
|
|
253
|
+
expect(parsed.params.result).toBe('Task completed successfully.');
|
|
254
|
+
});
|
|
255
|
+
|
|
256
|
+
test('should handle content that includes old-style tags', () => {
|
|
257
|
+
// Content might include old-style tags, which should be treated as content now
|
|
258
|
+
const xmlWithOldTags = `<attempt_completion>
|
|
259
|
+
Task completed.
|
|
260
|
+
<command>npm test</command>
|
|
261
|
+
</attempt_completion>`;
|
|
262
|
+
|
|
263
|
+
const parsed = parseXmlToolCallWithThinking(xmlWithOldTags);
|
|
264
|
+
|
|
265
|
+
expect(parsed).toBeDefined();
|
|
266
|
+
expect(parsed.toolName).toBe('attempt_completion');
|
|
267
|
+
expect(parsed.params.result).toContain('Task completed.');
|
|
268
|
+
expect(parsed.params.result).toContain('<command>npm test</command>');
|
|
269
|
+
|
|
270
|
+
// The result should include everything as content
|
|
271
|
+
const validation = attemptCompletionSchema.safeParse(parsed.params);
|
|
272
|
+
expect(validation.success).toBe(true);
|
|
273
|
+
});
|
|
274
|
+
});
|