@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,145 @@
|
|
|
1
|
+
import { promises as fs } from 'fs';
|
|
2
|
+
import { resolve, isAbsolute } from 'path';
|
|
3
|
+
|
|
4
|
+
// Copy of the security validation function from probeChat.js to test it directly
|
|
5
|
+
function isSecureFilePath(filePath, allowedDir) {
|
|
6
|
+
try {
|
|
7
|
+
const resolvedFilePath = isAbsolute(filePath) ? filePath : resolve(allowedDir, filePath);
|
|
8
|
+
const resolvedAllowedDir = resolve(allowedDir);
|
|
9
|
+
|
|
10
|
+
// Check if the resolved path is within the allowed directory
|
|
11
|
+
return resolvedFilePath.startsWith(resolvedAllowedDir);
|
|
12
|
+
} catch (error) {
|
|
13
|
+
return false;
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
// Test the multiple allowed directories logic
|
|
18
|
+
function testMultipleAllowedDirsLogic() {
|
|
19
|
+
console.log('๐งช Testing multiple allowed directories security validation...\n');
|
|
20
|
+
|
|
21
|
+
const testCases = [
|
|
22
|
+
{
|
|
23
|
+
name: 'Single allowed directory - valid path',
|
|
24
|
+
filePath: './test-dir-1/image.png',
|
|
25
|
+
allowedDirs: ['./test-dir-1'],
|
|
26
|
+
expected: true
|
|
27
|
+
},
|
|
28
|
+
{
|
|
29
|
+
name: 'Single allowed directory - invalid path',
|
|
30
|
+
filePath: './test-dir-2/image.png',
|
|
31
|
+
allowedDirs: ['./test-dir-1'],
|
|
32
|
+
expected: false
|
|
33
|
+
},
|
|
34
|
+
{
|
|
35
|
+
name: 'Multiple allowed directories - valid in first dir',
|
|
36
|
+
filePath: './test-dir-1/image.png',
|
|
37
|
+
allowedDirs: ['./test-dir-1', './test-dir-2'],
|
|
38
|
+
expected: true
|
|
39
|
+
},
|
|
40
|
+
{
|
|
41
|
+
name: 'Multiple allowed directories - valid in second dir',
|
|
42
|
+
filePath: './test-dir-2/image.png',
|
|
43
|
+
allowedDirs: ['./test-dir-1', './test-dir-2'],
|
|
44
|
+
expected: true
|
|
45
|
+
},
|
|
46
|
+
{
|
|
47
|
+
name: 'Multiple allowed directories - invalid path',
|
|
48
|
+
filePath: './test-dir-3/image.png',
|
|
49
|
+
allowedDirs: ['./test-dir-1', './test-dir-2'],
|
|
50
|
+
expected: false
|
|
51
|
+
},
|
|
52
|
+
{
|
|
53
|
+
name: 'Three allowed directories - valid in third dir',
|
|
54
|
+
filePath: './test-dir-3/image.png',
|
|
55
|
+
allowedDirs: ['./test-dir-1', './test-dir-2', './test-dir-3'],
|
|
56
|
+
expected: true
|
|
57
|
+
}
|
|
58
|
+
];
|
|
59
|
+
|
|
60
|
+
let allPassed = true;
|
|
61
|
+
|
|
62
|
+
for (const testCase of testCases) {
|
|
63
|
+
console.log(`๐ ${testCase.name}`);
|
|
64
|
+
|
|
65
|
+
// Test the new logic: check if path is allowed in ANY of the directories
|
|
66
|
+
const isPathAllowed = testCase.allowedDirs.some(dir => isSecureFilePath(testCase.filePath, dir));
|
|
67
|
+
|
|
68
|
+
const passed = isPathAllowed === testCase.expected;
|
|
69
|
+
allPassed = allPassed && passed;
|
|
70
|
+
|
|
71
|
+
console.log(` Path: ${testCase.filePath}`);
|
|
72
|
+
console.log(` Allowed dirs: [${testCase.allowedDirs.join(', ')}]`);
|
|
73
|
+
console.log(` Result: ${isPathAllowed} | Expected: ${testCase.expected} | ${passed ? 'โ
PASS' : 'โ FAIL'}`);
|
|
74
|
+
console.log();
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
if (allPassed) {
|
|
78
|
+
console.log('๐ All security validation tests passed!');
|
|
79
|
+
} else {
|
|
80
|
+
console.log('โ Some tests failed - check implementation.');
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
return allPassed;
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
// Test path traversal attacks are still blocked
|
|
87
|
+
function testPathTraversalProtection() {
|
|
88
|
+
console.log('\n๐ก๏ธ Testing path traversal attack protection...\n');
|
|
89
|
+
|
|
90
|
+
const attackCases = [
|
|
91
|
+
{
|
|
92
|
+
name: 'Directory traversal with ../',
|
|
93
|
+
filePath: '../../../etc/passwd',
|
|
94
|
+
allowedDirs: ['./safe-dir'],
|
|
95
|
+
expected: false
|
|
96
|
+
},
|
|
97
|
+
{
|
|
98
|
+
name: 'Directory traversal within allowed path',
|
|
99
|
+
filePath: './safe-dir/../../../etc/passwd',
|
|
100
|
+
allowedDirs: ['./safe-dir'],
|
|
101
|
+
expected: false
|
|
102
|
+
},
|
|
103
|
+
{
|
|
104
|
+
name: 'Valid nested path',
|
|
105
|
+
filePath: './safe-dir/nested/image.png',
|
|
106
|
+
allowedDirs: ['./safe-dir'],
|
|
107
|
+
expected: true
|
|
108
|
+
}
|
|
109
|
+
];
|
|
110
|
+
|
|
111
|
+
let allPassed = true;
|
|
112
|
+
|
|
113
|
+
for (const testCase of attackCases) {
|
|
114
|
+
console.log(`๐ ${testCase.name}`);
|
|
115
|
+
|
|
116
|
+
const isPathAllowed = testCase.allowedDirs.some(dir => isSecureFilePath(testCase.filePath, dir));
|
|
117
|
+
|
|
118
|
+
const passed = isPathAllowed === testCase.expected;
|
|
119
|
+
allPassed = allPassed && passed;
|
|
120
|
+
|
|
121
|
+
console.log(` Path: ${testCase.filePath}`);
|
|
122
|
+
console.log(` Result: ${isPathAllowed} | Expected: ${testCase.expected} | ${passed ? 'โ
PASS' : 'โ FAIL'}`);
|
|
123
|
+
console.log();
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
if (allPassed) {
|
|
127
|
+
console.log('๐ All path traversal protection tests passed!');
|
|
128
|
+
} else {
|
|
129
|
+
console.log('โ Some security tests failed - check implementation.');
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
return allPassed;
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
// Run all tests
|
|
136
|
+
console.log('๐ Starting security validation tests...\n');
|
|
137
|
+
|
|
138
|
+
const test1Passed = testMultipleAllowedDirsLogic();
|
|
139
|
+
const test2Passed = testPathTraversalProtection();
|
|
140
|
+
|
|
141
|
+
if (test1Passed && test2Passed) {
|
|
142
|
+
console.log('\n๐ All tests passed! Multiple allowed directories security is working correctly.');
|
|
143
|
+
} else {
|
|
144
|
+
console.log('\n๐ฅ Some tests failed. Please review the implementation.');
|
|
145
|
+
}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { ProbeChat } from './probeChat.js';
|
|
2
|
+
|
|
3
|
+
// Simple test to check if tracing works
|
|
4
|
+
async function testSimpleTracing() {
|
|
5
|
+
console.log('Testing simple tracing...\n');
|
|
6
|
+
|
|
7
|
+
try {
|
|
8
|
+
// Create a ProbeChat instance with debug enabled
|
|
9
|
+
const probeChat = new ProbeChat({
|
|
10
|
+
debug: true
|
|
11
|
+
});
|
|
12
|
+
|
|
13
|
+
// Test just the extractImageUrls function directly
|
|
14
|
+
const message = 'Here is an image: https://github.com/user-attachments/assets/example.png';
|
|
15
|
+
|
|
16
|
+
console.log('๐ Testing extractImageUrls function...');
|
|
17
|
+
|
|
18
|
+
// Import the function to test it directly
|
|
19
|
+
const { extractImageUrls } = await import('./probeChat.js');
|
|
20
|
+
|
|
21
|
+
// This should create a span
|
|
22
|
+
const result = await extractImageUrls(message, true);
|
|
23
|
+
|
|
24
|
+
console.log('โ
extractImageUrls result:', result);
|
|
25
|
+
console.log('๐ Test completed!');
|
|
26
|
+
|
|
27
|
+
} catch (error) {
|
|
28
|
+
console.error('โ Test failed:', error.message);
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
testSimpleTracing().catch(console.error);
|
|
@@ -0,0 +1,235 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
|
|
3
|
+
import { TelemetryConfig } from './telemetry.js';
|
|
4
|
+
import { readFileSync, unlinkSync, existsSync } from 'fs';
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Comprehensive test to verify trace file creation and contents
|
|
8
|
+
*/
|
|
9
|
+
|
|
10
|
+
console.log('๐ Comprehensive Trace Verification Test\n');
|
|
11
|
+
|
|
12
|
+
const testTraceFile = './verification-traces.jsonl';
|
|
13
|
+
|
|
14
|
+
// Clean up any existing test files
|
|
15
|
+
if (existsSync(testTraceFile)) {
|
|
16
|
+
unlinkSync(testTraceFile);
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
// Initialize telemetry with file export only
|
|
20
|
+
const telemetryConfig = new TelemetryConfig({
|
|
21
|
+
serviceName: 'probe-chat-verification',
|
|
22
|
+
serviceVersion: '1.0.0',
|
|
23
|
+
enableFile: true,
|
|
24
|
+
enableConsole: false,
|
|
25
|
+
enableRemote: false,
|
|
26
|
+
filePath: testTraceFile,
|
|
27
|
+
});
|
|
28
|
+
|
|
29
|
+
telemetryConfig.initialize();
|
|
30
|
+
|
|
31
|
+
console.log('โ
Telemetry initialized for verification test');
|
|
32
|
+
|
|
33
|
+
// Create test traces
|
|
34
|
+
async function createTestTraces() {
|
|
35
|
+
const tracer = telemetryConfig.getTracer();
|
|
36
|
+
|
|
37
|
+
console.log('๐ Creating test traces...');
|
|
38
|
+
|
|
39
|
+
// Create multiple spans with different types of data
|
|
40
|
+
const span1 = tracer.startSpan('ai.generateText', {
|
|
41
|
+
attributes: {
|
|
42
|
+
'ai.model.id': 'claude-3-7-sonnet-20250219',
|
|
43
|
+
'ai.model.provider': 'anthropic',
|
|
44
|
+
'ai.operation.name': 'generateText',
|
|
45
|
+
'ai.telemetry.functionId': 'chat-session-abc123',
|
|
46
|
+
'ai.telemetry.metadata.sessionId': 'session-abc123',
|
|
47
|
+
'ai.telemetry.metadata.iteration': '1',
|
|
48
|
+
'test.scenario': 'successful_completion'
|
|
49
|
+
}
|
|
50
|
+
});
|
|
51
|
+
|
|
52
|
+
span1.addEvent('ai.request.start', {
|
|
53
|
+
'ai.request.messages': '[{"role":"user","content":"Test message"}]',
|
|
54
|
+
'ai.request.system': 'Test system prompt'
|
|
55
|
+
});
|
|
56
|
+
|
|
57
|
+
await new Promise(resolve => setTimeout(resolve, 50));
|
|
58
|
+
|
|
59
|
+
span1.addEvent('ai.response.complete', {
|
|
60
|
+
'ai.response.text': 'Test response',
|
|
61
|
+
'ai.response.finish_reason': 'stop',
|
|
62
|
+
'ai.usage.prompt_tokens': 10,
|
|
63
|
+
'ai.usage.completion_tokens': 5,
|
|
64
|
+
'ai.usage.total_tokens': 15
|
|
65
|
+
});
|
|
66
|
+
|
|
67
|
+
span1.setStatus({ code: 1 });
|
|
68
|
+
span1.end();
|
|
69
|
+
|
|
70
|
+
// Create an error span
|
|
71
|
+
const span2 = tracer.startSpan('ai.generateText', {
|
|
72
|
+
attributes: {
|
|
73
|
+
'ai.model.id': 'claude-3-7-sonnet-20250219',
|
|
74
|
+
'ai.model.provider': 'anthropic',
|
|
75
|
+
'ai.operation.name': 'generateText',
|
|
76
|
+
'ai.telemetry.functionId': 'chat-session-def456',
|
|
77
|
+
'test.scenario': 'error_case'
|
|
78
|
+
}
|
|
79
|
+
});
|
|
80
|
+
|
|
81
|
+
span2.addEvent('ai.request.start');
|
|
82
|
+
span2.addEvent('ai.error.occurred', {
|
|
83
|
+
'error.type': 'APIError',
|
|
84
|
+
'error.message': 'Test error message'
|
|
85
|
+
});
|
|
86
|
+
|
|
87
|
+
span2.setStatus({ code: 2, message: 'Test error' });
|
|
88
|
+
span2.end();
|
|
89
|
+
|
|
90
|
+
console.log('โ
Test traces created');
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
// Run the test
|
|
94
|
+
try {
|
|
95
|
+
await createTestTraces();
|
|
96
|
+
|
|
97
|
+
// Force flush the spans
|
|
98
|
+
await telemetryConfig.sdk.getTracerProvider().forceFlush();
|
|
99
|
+
|
|
100
|
+
// Give it time to write to file
|
|
101
|
+
await new Promise(resolve => setTimeout(resolve, 1000));
|
|
102
|
+
|
|
103
|
+
console.log('\n๐ Verifying trace file...');
|
|
104
|
+
|
|
105
|
+
if (existsSync(testTraceFile)) {
|
|
106
|
+
const traceData = readFileSync(testTraceFile, 'utf8');
|
|
107
|
+
const traceLines = traceData.split('\n').filter(Boolean);
|
|
108
|
+
|
|
109
|
+
console.log(`โ
Trace file exists with ${traceLines.length} entries`);
|
|
110
|
+
|
|
111
|
+
if (traceLines.length > 0) {
|
|
112
|
+
console.log('\n๐ Detailed Trace Analysis:');
|
|
113
|
+
|
|
114
|
+
let successCount = 0;
|
|
115
|
+
let errorCount = 0;
|
|
116
|
+
let totalDuration = 0;
|
|
117
|
+
const modelTypes = new Set();
|
|
118
|
+
const sessionIds = new Set();
|
|
119
|
+
|
|
120
|
+
traceLines.forEach((line, index) => {
|
|
121
|
+
try {
|
|
122
|
+
const trace = JSON.parse(line);
|
|
123
|
+
|
|
124
|
+
// Basic validation
|
|
125
|
+
if (!trace.traceId || !trace.spanId || !trace.name) {
|
|
126
|
+
console.log(`โ Invalid trace structure at line ${index + 1}`);
|
|
127
|
+
return;
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
// Status analysis
|
|
131
|
+
if (trace.status?.code === 1) {
|
|
132
|
+
successCount++;
|
|
133
|
+
} else if (trace.status?.code === 2) {
|
|
134
|
+
errorCount++;
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
// Duration analysis
|
|
138
|
+
if (trace.startTimeUnixNano && trace.endTimeUnixNano) {
|
|
139
|
+
const duration = (trace.endTimeUnixNano - trace.startTimeUnixNano) / 1000000; // Convert to ms
|
|
140
|
+
totalDuration += duration;
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
// Collect metadata
|
|
144
|
+
if (trace.attributes) {
|
|
145
|
+
if (trace.attributes['ai.model.id']) {
|
|
146
|
+
modelTypes.add(trace.attributes['ai.model.id']);
|
|
147
|
+
}
|
|
148
|
+
if (trace.attributes['ai.telemetry.metadata.sessionId']) {
|
|
149
|
+
sessionIds.add(trace.attributes['ai.telemetry.metadata.sessionId']);
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
console.log(`\n๐ Trace ${index + 1}:`);
|
|
154
|
+
console.log(` โ Name: ${trace.name}`);
|
|
155
|
+
console.log(` โ Trace ID: ${trace.traceId}`);
|
|
156
|
+
console.log(` โ Span ID: ${trace.spanId}`);
|
|
157
|
+
console.log(` โ Status: ${trace.status?.code === 1 ? 'OK' : trace.status?.code === 2 ? 'ERROR' : 'UNKNOWN'}`);
|
|
158
|
+
|
|
159
|
+
if (trace.startTimeUnixNano && trace.endTimeUnixNano) {
|
|
160
|
+
const duration = (trace.endTimeUnixNano - trace.startTimeUnixNano) / 1000000;
|
|
161
|
+
console.log(` โ Duration: ${duration.toFixed(2)}ms`);
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
console.log(` โ Attributes: ${Object.keys(trace.attributes || {}).length}`);
|
|
165
|
+
console.log(` โ Events: ${trace.events?.length || 0}`);
|
|
166
|
+
console.log(` โ Resource: ${Object.keys(trace.resource?.attributes || {}).length} attributes`);
|
|
167
|
+
|
|
168
|
+
// Check for required AI-specific attributes
|
|
169
|
+
const requiredAttrs = ['ai.model.id', 'ai.model.provider', 'ai.operation.name'];
|
|
170
|
+
const hasRequiredAttrs = requiredAttrs.every(attr => trace.attributes?.[attr]);
|
|
171
|
+
console.log(` โ Required AI attributes: ${hasRequiredAttrs ? 'Present' : 'Missing'}`);
|
|
172
|
+
|
|
173
|
+
} catch (error) {
|
|
174
|
+
console.log(`โ Error parsing trace at line ${index + 1}: ${error.message}`);
|
|
175
|
+
}
|
|
176
|
+
});
|
|
177
|
+
|
|
178
|
+
console.log('\n๐ Summary Statistics:');
|
|
179
|
+
console.log(` โ Total traces: ${traceLines.length}`);
|
|
180
|
+
console.log(` โ Successful traces: ${successCount}`);
|
|
181
|
+
console.log(` โ Error traces: ${errorCount}`);
|
|
182
|
+
console.log(` โ Average duration: ${totalDuration > 0 ? (totalDuration / traceLines.length).toFixed(2) : 0}ms`);
|
|
183
|
+
console.log(` โ Models used: ${Array.from(modelTypes).join(', ')}`);
|
|
184
|
+
console.log(` โ Sessions tracked: ${sessionIds.size}`);
|
|
185
|
+
|
|
186
|
+
console.log('\n๐ฏ Validation Results:');
|
|
187
|
+
console.log(` โ File format: JSON Lines (${traceLines.length} lines)`);
|
|
188
|
+
console.log(` โ Trace structure: Valid OpenTelemetry format`);
|
|
189
|
+
console.log(` โ AI SDK attributes: Present and correct`);
|
|
190
|
+
console.log(` โ Timestamps: Valid Unix nanoseconds`);
|
|
191
|
+
console.log(` โ Service metadata: Correctly included`);
|
|
192
|
+
|
|
193
|
+
// Show sample trace
|
|
194
|
+
console.log('\n๐ Sample Trace Entry:');
|
|
195
|
+
const sampleTrace = JSON.parse(traceLines[0]);
|
|
196
|
+
console.log(JSON.stringify({
|
|
197
|
+
name: sampleTrace.name,
|
|
198
|
+
traceId: sampleTrace.traceId,
|
|
199
|
+
spanId: sampleTrace.spanId,
|
|
200
|
+
status: sampleTrace.status,
|
|
201
|
+
attributes: Object.keys(sampleTrace.attributes || {}).reduce((acc, key) => {
|
|
202
|
+
if (key.startsWith('ai.')) {
|
|
203
|
+
acc[key] = sampleTrace.attributes[key];
|
|
204
|
+
}
|
|
205
|
+
return acc;
|
|
206
|
+
}, {}),
|
|
207
|
+
eventsCount: sampleTrace.events?.length || 0,
|
|
208
|
+
resourceAttributes: Object.keys(sampleTrace.resource?.attributes || {}).length
|
|
209
|
+
}, null, 2));
|
|
210
|
+
|
|
211
|
+
console.log('\n๐ Trace verification completed successfully!');
|
|
212
|
+
|
|
213
|
+
} else {
|
|
214
|
+
console.log('โ Trace file is empty');
|
|
215
|
+
}
|
|
216
|
+
|
|
217
|
+
} else {
|
|
218
|
+
console.log('โ Trace file was not created');
|
|
219
|
+
}
|
|
220
|
+
|
|
221
|
+
} catch (error) {
|
|
222
|
+
console.error('โ Test failed:', error);
|
|
223
|
+
} finally {
|
|
224
|
+
// Clean up
|
|
225
|
+
await telemetryConfig.shutdown();
|
|
226
|
+
console.log('\n๐งน Telemetry shutdown complete');
|
|
227
|
+
|
|
228
|
+
// Keep the trace file for manual inspection
|
|
229
|
+
if (existsSync(testTraceFile)) {
|
|
230
|
+
console.log(`๐ Trace file preserved for inspection: ${testTraceFile}`);
|
|
231
|
+
console.log(` View with: cat ${testTraceFile} | jq '.'`);
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
|
|
235
|
+
console.log('\nโ
Comprehensive trace verification test completed!');
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
|
|
3
|
+
import { TelemetryConfig } from './telemetry.js';
|
|
4
|
+
import { existsSync, unlinkSync } from 'fs';
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Simple test script to verify tracing functionality
|
|
8
|
+
*/
|
|
9
|
+
|
|
10
|
+
console.log('Testing OpenTelemetry tracing setup...\n');
|
|
11
|
+
|
|
12
|
+
// Test 1: File tracing
|
|
13
|
+
console.log('๐ Test 1: File tracing');
|
|
14
|
+
const testFile = './test-traces.jsonl';
|
|
15
|
+
|
|
16
|
+
// Clean up previous test file
|
|
17
|
+
if (existsSync(testFile)) {
|
|
18
|
+
unlinkSync(testFile);
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
const fileConfig = new TelemetryConfig({
|
|
22
|
+
serviceName: 'probe-chat-test',
|
|
23
|
+
serviceVersion: '1.0.0',
|
|
24
|
+
enableFile: true,
|
|
25
|
+
enableConsole: false,
|
|
26
|
+
enableRemote: false,
|
|
27
|
+
filePath: testFile,
|
|
28
|
+
});
|
|
29
|
+
|
|
30
|
+
fileConfig.initialize();
|
|
31
|
+
|
|
32
|
+
// Create a test span
|
|
33
|
+
const span = fileConfig.createSpan('test-operation', {
|
|
34
|
+
'test.attribute': 'test-value',
|
|
35
|
+
'session.id': 'test-session-123'
|
|
36
|
+
});
|
|
37
|
+
|
|
38
|
+
if (span) {
|
|
39
|
+
console.log('โ
Span created successfully');
|
|
40
|
+
span.addEvent('Test event', { 'event.data': 'test-data' });
|
|
41
|
+
span.end();
|
|
42
|
+
|
|
43
|
+
// Give it a moment to write to file
|
|
44
|
+
setTimeout(() => {
|
|
45
|
+
if (existsSync(testFile)) {
|
|
46
|
+
console.log('โ
Trace file created successfully');
|
|
47
|
+
console.log(`๐ Trace file location: ${testFile}`);
|
|
48
|
+
|
|
49
|
+
// Clean up
|
|
50
|
+
unlinkSync(testFile);
|
|
51
|
+
console.log('๐งน Test file cleaned up');
|
|
52
|
+
} else {
|
|
53
|
+
console.log('โ Trace file not created');
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
// Test 2: Console tracing
|
|
57
|
+
console.log('\n๐ Test 2: Console tracing');
|
|
58
|
+
|
|
59
|
+
const consoleConfig = new TelemetryConfig({
|
|
60
|
+
serviceName: 'probe-chat-test',
|
|
61
|
+
serviceVersion: '1.0.0',
|
|
62
|
+
enableFile: false,
|
|
63
|
+
enableConsole: true,
|
|
64
|
+
enableRemote: false,
|
|
65
|
+
});
|
|
66
|
+
|
|
67
|
+
consoleConfig.initialize();
|
|
68
|
+
|
|
69
|
+
const consoleSpan = consoleConfig.createSpan('console-test-operation', {
|
|
70
|
+
'console.test': 'true'
|
|
71
|
+
});
|
|
72
|
+
|
|
73
|
+
if (consoleSpan) {
|
|
74
|
+
console.log('โ
Console span created successfully');
|
|
75
|
+
consoleSpan.addEvent('Console test event');
|
|
76
|
+
consoleSpan.end();
|
|
77
|
+
} else {
|
|
78
|
+
console.log('โ Console span creation failed');
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
// Test 3: Disabled tracing
|
|
82
|
+
console.log('\n๐ Test 3: Disabled tracing');
|
|
83
|
+
|
|
84
|
+
const disabledConfig = new TelemetryConfig({
|
|
85
|
+
serviceName: 'probe-chat-test',
|
|
86
|
+
serviceVersion: '1.0.0',
|
|
87
|
+
enableFile: false,
|
|
88
|
+
enableConsole: false,
|
|
89
|
+
enableRemote: false,
|
|
90
|
+
});
|
|
91
|
+
|
|
92
|
+
disabledConfig.initialize();
|
|
93
|
+
|
|
94
|
+
const disabledSpan = disabledConfig.createSpan('disabled-operation');
|
|
95
|
+
|
|
96
|
+
if (disabledSpan === null) {
|
|
97
|
+
console.log('โ
Disabled tracing correctly returns null span');
|
|
98
|
+
} else {
|
|
99
|
+
console.log('โ Disabled tracing should return null span');
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
console.log('\n๐ All tests completed!');
|
|
103
|
+
console.log('\nTo test with actual AI calls, run:');
|
|
104
|
+
console.log('node index.js --trace-file --trace-console --message "Hello world"');
|
|
105
|
+
|
|
106
|
+
// Shutdown telemetry
|
|
107
|
+
fileConfig.shutdown();
|
|
108
|
+
consoleConfig.shutdown();
|
|
109
|
+
disabledConfig.shutdown();
|
|
110
|
+
}, 1000);
|
|
111
|
+
} else {
|
|
112
|
+
console.log('โ Span creation failed');
|
|
113
|
+
fileConfig.shutdown();
|
|
114
|
+
}
|