@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,496 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Utility functions and classes for the implement tool
|
|
3
|
+
* @module utils
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Error types for backend operations
|
|
8
|
+
* @enum {string}
|
|
9
|
+
*/
|
|
10
|
+
const ErrorTypes = {
|
|
11
|
+
INITIALIZATION_FAILED: 'initialization_failed',
|
|
12
|
+
DEPENDENCY_MISSING: 'dependency_missing',
|
|
13
|
+
CONFIGURATION_INVALID: 'configuration_invalid',
|
|
14
|
+
EXECUTION_FAILED: 'execution_failed',
|
|
15
|
+
TIMEOUT: 'timeout',
|
|
16
|
+
CANCELLATION: 'cancellation',
|
|
17
|
+
NETWORK_ERROR: 'network_error',
|
|
18
|
+
API_ERROR: 'api_error',
|
|
19
|
+
AUTHENTICATION: 'authentication',
|
|
20
|
+
FILE_ACCESS_ERROR: 'file_access_error',
|
|
21
|
+
VALIDATION_ERROR: 'validation_error',
|
|
22
|
+
BACKEND_NOT_FOUND: 'backend_not_found',
|
|
23
|
+
SESSION_NOT_FOUND: 'session_not_found',
|
|
24
|
+
QUOTA_EXCEEDED: 'quota_exceeded'
|
|
25
|
+
};
|
|
26
|
+
|
|
27
|
+
/**
|
|
28
|
+
* Standardized error class for backend operations
|
|
29
|
+
* @class
|
|
30
|
+
* @extends Error
|
|
31
|
+
*/
|
|
32
|
+
class BackendError extends Error {
|
|
33
|
+
/**
|
|
34
|
+
* @param {string} message - Error message
|
|
35
|
+
* @param {string} type - Error type from ErrorTypes
|
|
36
|
+
* @param {string} [code] - Error code
|
|
37
|
+
* @param {Object} [details] - Additional error details
|
|
38
|
+
*/
|
|
39
|
+
constructor(message, type, code = null, details = {}) {
|
|
40
|
+
super(message);
|
|
41
|
+
this.name = 'BackendError';
|
|
42
|
+
this.type = type;
|
|
43
|
+
this.code = code;
|
|
44
|
+
this.details = details;
|
|
45
|
+
this.timestamp = new Date().toISOString();
|
|
46
|
+
|
|
47
|
+
// Capture stack trace
|
|
48
|
+
if (Error.captureStackTrace) {
|
|
49
|
+
Error.captureStackTrace(this, BackendError);
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
/**
|
|
54
|
+
* Convert error to JSON representation
|
|
55
|
+
* @returns {Object}
|
|
56
|
+
*/
|
|
57
|
+
toJSON() {
|
|
58
|
+
return {
|
|
59
|
+
name: this.name,
|
|
60
|
+
message: this.message,
|
|
61
|
+
type: this.type,
|
|
62
|
+
code: this.code,
|
|
63
|
+
details: this.details,
|
|
64
|
+
timestamp: this.timestamp,
|
|
65
|
+
stack: this.stack
|
|
66
|
+
};
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
/**
|
|
71
|
+
* Error handling utilities
|
|
72
|
+
* @class
|
|
73
|
+
*/
|
|
74
|
+
class ErrorHandler {
|
|
75
|
+
/**
|
|
76
|
+
* Create a new BackendError
|
|
77
|
+
* @param {string} type - Error type
|
|
78
|
+
* @param {string} message - Error message
|
|
79
|
+
* @param {string} [code] - Error code
|
|
80
|
+
* @param {Object} [details] - Additional details
|
|
81
|
+
* @returns {BackendError}
|
|
82
|
+
*/
|
|
83
|
+
static createError(type, message, code = null, details = {}) {
|
|
84
|
+
return new BackendError(message, type, code, details);
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
/**
|
|
88
|
+
* Check if an error is retryable
|
|
89
|
+
* @param {Error|BackendError} error - Error to check
|
|
90
|
+
* @returns {boolean}
|
|
91
|
+
*/
|
|
92
|
+
static isRetryable(error) {
|
|
93
|
+
if (error instanceof BackendError) {
|
|
94
|
+
const retryableTypes = [
|
|
95
|
+
ErrorTypes.NETWORK_ERROR,
|
|
96
|
+
ErrorTypes.TIMEOUT,
|
|
97
|
+
ErrorTypes.API_ERROR
|
|
98
|
+
];
|
|
99
|
+
return retryableTypes.includes(error.type);
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
// Check for common retryable error patterns
|
|
103
|
+
const message = error.message.toLowerCase();
|
|
104
|
+
return message.includes('timeout') ||
|
|
105
|
+
message.includes('network') ||
|
|
106
|
+
message.includes('connection');
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
/**
|
|
110
|
+
* Get recovery strategy for an error
|
|
111
|
+
* @param {Error|BackendError} error - Error to analyze
|
|
112
|
+
* @returns {string} Recovery strategy
|
|
113
|
+
*/
|
|
114
|
+
static getRecoveryStrategy(error) {
|
|
115
|
+
if (!(error instanceof BackendError)) {
|
|
116
|
+
return 'manual_intervention';
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
switch (error.type) {
|
|
120
|
+
case ErrorTypes.DEPENDENCY_MISSING:
|
|
121
|
+
return 'install_dependencies';
|
|
122
|
+
case ErrorTypes.CONFIGURATION_INVALID:
|
|
123
|
+
return 'fix_configuration';
|
|
124
|
+
case ErrorTypes.TIMEOUT:
|
|
125
|
+
return 'retry_with_longer_timeout';
|
|
126
|
+
case ErrorTypes.AUTHENTICATION:
|
|
127
|
+
return 'check_api_credentials';
|
|
128
|
+
case ErrorTypes.NETWORK_ERROR:
|
|
129
|
+
return 'retry_with_backoff';
|
|
130
|
+
case ErrorTypes.QUOTA_EXCEEDED:
|
|
131
|
+
return 'wait_or_upgrade';
|
|
132
|
+
case ErrorTypes.API_ERROR:
|
|
133
|
+
return 'check_api_key';
|
|
134
|
+
default:
|
|
135
|
+
return 'manual_intervention';
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
/**
|
|
140
|
+
* Format error for user display
|
|
141
|
+
* @param {Error|BackendError} error - Error to format
|
|
142
|
+
* @returns {string}
|
|
143
|
+
*/
|
|
144
|
+
static formatForDisplay(error) {
|
|
145
|
+
if (error instanceof BackendError) {
|
|
146
|
+
let message = `${error.message}`;
|
|
147
|
+
|
|
148
|
+
if (error.code) {
|
|
149
|
+
message += ` (${error.code})`;
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
// Add helpful context for specific error types
|
|
153
|
+
const strategy = this.getRecoveryStrategy(error);
|
|
154
|
+
switch (strategy) {
|
|
155
|
+
case 'install_dependencies':
|
|
156
|
+
message += '\n💡 Try installing missing dependencies';
|
|
157
|
+
break;
|
|
158
|
+
case 'fix_configuration':
|
|
159
|
+
message += '\n💡 Check your configuration settings';
|
|
160
|
+
break;
|
|
161
|
+
case 'retry_with_longer_timeout':
|
|
162
|
+
message += '\n💡 Consider increasing the timeout value';
|
|
163
|
+
break;
|
|
164
|
+
case 'check_api_credentials':
|
|
165
|
+
message += '\n💡 Check your API key and authentication settings';
|
|
166
|
+
break;
|
|
167
|
+
case 'check_api_key':
|
|
168
|
+
message += '\n💡 Verify your API key is valid';
|
|
169
|
+
break;
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
return message;
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
return error.message;
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
/**
|
|
180
|
+
* Retry utility for handling transient failures
|
|
181
|
+
* @class
|
|
182
|
+
*/
|
|
183
|
+
class RetryHandler {
|
|
184
|
+
/**
|
|
185
|
+
* Execute a function with retry logic
|
|
186
|
+
* @param {Function} fn - Function to execute
|
|
187
|
+
* @param {Object} [options] - Retry options
|
|
188
|
+
* @param {number} [options.maxAttempts=3] - Maximum retry attempts
|
|
189
|
+
* @param {number} [options.initialDelay=1000] - Initial delay in ms
|
|
190
|
+
* @param {number} [options.maxDelay=30000] - Maximum delay in ms
|
|
191
|
+
* @param {number} [options.backoffFactor=2] - Backoff multiplier
|
|
192
|
+
* @param {Function} [options.shouldRetry] - Custom retry predicate
|
|
193
|
+
* @returns {Promise<*>}
|
|
194
|
+
*/
|
|
195
|
+
static async withRetry(fn, options = {}) {
|
|
196
|
+
const {
|
|
197
|
+
maxAttempts = 3,
|
|
198
|
+
initialDelay = 1000,
|
|
199
|
+
maxDelay = 30000,
|
|
200
|
+
backoffFactor = 2,
|
|
201
|
+
shouldRetry = ErrorHandler.isRetryable
|
|
202
|
+
} = options;
|
|
203
|
+
|
|
204
|
+
let lastError;
|
|
205
|
+
let delay = initialDelay;
|
|
206
|
+
|
|
207
|
+
for (let attempt = 1; attempt <= maxAttempts; attempt++) {
|
|
208
|
+
try {
|
|
209
|
+
return await fn();
|
|
210
|
+
} catch (error) {
|
|
211
|
+
lastError = error;
|
|
212
|
+
|
|
213
|
+
if (attempt === maxAttempts || !shouldRetry(error)) {
|
|
214
|
+
throw error;
|
|
215
|
+
}
|
|
216
|
+
|
|
217
|
+
console.error(`[ERROR] ========================================`);
|
|
218
|
+
console.error(`[ERROR] Attempt ${attempt} failed, retrying in ${delay}ms...`);
|
|
219
|
+
console.error(`[ERROR] Error message: ${error.message}`);
|
|
220
|
+
console.error(`[ERROR] Error type: ${error.type || 'unknown'}`);
|
|
221
|
+
console.error(`[ERROR] Error code: ${error.code || 'unknown'}`);
|
|
222
|
+
if (error.metadata) {
|
|
223
|
+
console.error(`[ERROR] Error metadata:`, JSON.stringify(error.metadata, null, 2));
|
|
224
|
+
}
|
|
225
|
+
console.error(`[ERROR] ========================================`);
|
|
226
|
+
await this.sleep(delay);
|
|
227
|
+
|
|
228
|
+
// Calculate next delay with exponential backoff
|
|
229
|
+
delay = Math.min(delay * backoffFactor, maxDelay);
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
|
|
233
|
+
throw lastError;
|
|
234
|
+
}
|
|
235
|
+
|
|
236
|
+
/**
|
|
237
|
+
* Sleep for specified milliseconds
|
|
238
|
+
* @param {number} ms - Milliseconds to sleep
|
|
239
|
+
* @returns {Promise<void>}
|
|
240
|
+
*/
|
|
241
|
+
static sleep(ms) {
|
|
242
|
+
return new Promise(resolve => setTimeout(resolve, ms));
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
|
|
246
|
+
/**
|
|
247
|
+
* Progress tracking utility
|
|
248
|
+
* @class
|
|
249
|
+
*/
|
|
250
|
+
class ProgressTracker {
|
|
251
|
+
/**
|
|
252
|
+
* @param {string} sessionId - Session ID
|
|
253
|
+
* @param {Function} [onProgress] - Progress callback
|
|
254
|
+
*/
|
|
255
|
+
constructor(sessionId, onProgress = null) {
|
|
256
|
+
this.sessionId = sessionId;
|
|
257
|
+
this.onProgress = onProgress;
|
|
258
|
+
this.startTime = Date.now();
|
|
259
|
+
this.steps = [];
|
|
260
|
+
this.currentStep = null;
|
|
261
|
+
}
|
|
262
|
+
|
|
263
|
+
/**
|
|
264
|
+
* Start a new step
|
|
265
|
+
* @param {string} name - Step name
|
|
266
|
+
* @param {string} [message] - Step message
|
|
267
|
+
*/
|
|
268
|
+
startStep(name, message = null) {
|
|
269
|
+
if (this.currentStep) {
|
|
270
|
+
this.endStep();
|
|
271
|
+
}
|
|
272
|
+
|
|
273
|
+
this.currentStep = {
|
|
274
|
+
name,
|
|
275
|
+
message,
|
|
276
|
+
startTime: Date.now()
|
|
277
|
+
};
|
|
278
|
+
|
|
279
|
+
this.reportProgress({
|
|
280
|
+
type: 'step_start',
|
|
281
|
+
step: name,
|
|
282
|
+
message
|
|
283
|
+
});
|
|
284
|
+
}
|
|
285
|
+
|
|
286
|
+
/**
|
|
287
|
+
* End the current step
|
|
288
|
+
* @param {string} [result] - Step result
|
|
289
|
+
*/
|
|
290
|
+
endStep(result = 'completed') {
|
|
291
|
+
if (!this.currentStep) return;
|
|
292
|
+
|
|
293
|
+
const duration = Date.now() - this.currentStep.startTime;
|
|
294
|
+
this.currentStep.duration = duration;
|
|
295
|
+
this.currentStep.result = result;
|
|
296
|
+
|
|
297
|
+
this.steps.push(this.currentStep);
|
|
298
|
+
|
|
299
|
+
this.reportProgress({
|
|
300
|
+
type: 'step_end',
|
|
301
|
+
step: this.currentStep.name,
|
|
302
|
+
result,
|
|
303
|
+
duration
|
|
304
|
+
});
|
|
305
|
+
|
|
306
|
+
this.currentStep = null;
|
|
307
|
+
}
|
|
308
|
+
|
|
309
|
+
/**
|
|
310
|
+
* Report progress update
|
|
311
|
+
* @param {Object} update - Progress update
|
|
312
|
+
*/
|
|
313
|
+
reportProgress(update) {
|
|
314
|
+
if (!this.onProgress) return;
|
|
315
|
+
|
|
316
|
+
const progress = {
|
|
317
|
+
sessionId: this.sessionId,
|
|
318
|
+
timestamp: Date.now(),
|
|
319
|
+
elapsed: Date.now() - this.startTime,
|
|
320
|
+
...update
|
|
321
|
+
};
|
|
322
|
+
|
|
323
|
+
try {
|
|
324
|
+
this.onProgress(progress);
|
|
325
|
+
} catch (error) {
|
|
326
|
+
console.error('Progress callback error:', error);
|
|
327
|
+
}
|
|
328
|
+
}
|
|
329
|
+
|
|
330
|
+
/**
|
|
331
|
+
* Report a message
|
|
332
|
+
* @param {string} message - Message to report
|
|
333
|
+
* @param {string} [type='info'] - Message type
|
|
334
|
+
*/
|
|
335
|
+
reportMessage(message, type = 'info') {
|
|
336
|
+
this.reportProgress({
|
|
337
|
+
type: 'message',
|
|
338
|
+
messageType: type,
|
|
339
|
+
message
|
|
340
|
+
});
|
|
341
|
+
}
|
|
342
|
+
|
|
343
|
+
/**
|
|
344
|
+
* Get execution summary
|
|
345
|
+
* @returns {Object}
|
|
346
|
+
*/
|
|
347
|
+
getSummary() {
|
|
348
|
+
return {
|
|
349
|
+
sessionId: this.sessionId,
|
|
350
|
+
totalDuration: Date.now() - this.startTime,
|
|
351
|
+
steps: this.steps,
|
|
352
|
+
currentStep: this.currentStep
|
|
353
|
+
};
|
|
354
|
+
}
|
|
355
|
+
}
|
|
356
|
+
|
|
357
|
+
/**
|
|
358
|
+
* Utility for parsing and extracting file changes from output
|
|
359
|
+
* @class
|
|
360
|
+
*/
|
|
361
|
+
class FileChangeParser {
|
|
362
|
+
/**
|
|
363
|
+
* Parse file changes from command output
|
|
364
|
+
* @param {string} output - Command output
|
|
365
|
+
* @param {string} [workingDir] - Working directory
|
|
366
|
+
* @returns {import('../types/BackendTypes').FileChange[]}
|
|
367
|
+
*/
|
|
368
|
+
static parseChanges(output, workingDir = process.cwd()) {
|
|
369
|
+
const changes = [];
|
|
370
|
+
const patterns = {
|
|
371
|
+
created: /(?:created?|new file|added?):?\s+(.+)/gi,
|
|
372
|
+
modified: /(?:modified?|changed?|updated?):?\s+(.+)/gi,
|
|
373
|
+
deleted: /(?:deleted?|removed?):?\s+(.+)/gi,
|
|
374
|
+
diff: /^[-+]{3}\s+(.+)$/gm
|
|
375
|
+
};
|
|
376
|
+
|
|
377
|
+
// Extract file changes
|
|
378
|
+
for (const [type, pattern] of Object.entries(patterns)) {
|
|
379
|
+
if (type === 'diff') continue;
|
|
380
|
+
|
|
381
|
+
let match;
|
|
382
|
+
while ((match = pattern.exec(output)) !== null) {
|
|
383
|
+
const filePath = match[1].trim();
|
|
384
|
+
if (filePath && !changes.some(c => c.path === filePath)) {
|
|
385
|
+
changes.push({
|
|
386
|
+
path: filePath,
|
|
387
|
+
type,
|
|
388
|
+
description: `File ${filePath} was ${type}`
|
|
389
|
+
});
|
|
390
|
+
}
|
|
391
|
+
}
|
|
392
|
+
}
|
|
393
|
+
|
|
394
|
+
// Git status parsing
|
|
395
|
+
const gitStatusPattern = /^([AMD])\s+(.+)$/gm;
|
|
396
|
+
let match;
|
|
397
|
+
while ((match = gitStatusPattern.exec(output)) !== null) {
|
|
398
|
+
const status = match[1];
|
|
399
|
+
const filePath = match[2];
|
|
400
|
+
|
|
401
|
+
const typeMap = {
|
|
402
|
+
'A': 'created',
|
|
403
|
+
'M': 'modified',
|
|
404
|
+
'D': 'deleted'
|
|
405
|
+
};
|
|
406
|
+
|
|
407
|
+
if (typeMap[status] && !changes.some(c => c.path === filePath)) {
|
|
408
|
+
changes.push({
|
|
409
|
+
path: filePath,
|
|
410
|
+
type: typeMap[status],
|
|
411
|
+
description: `File ${filePath} was ${typeMap[status]}`
|
|
412
|
+
});
|
|
413
|
+
}
|
|
414
|
+
}
|
|
415
|
+
|
|
416
|
+
return changes;
|
|
417
|
+
}
|
|
418
|
+
|
|
419
|
+
/**
|
|
420
|
+
* Extract diff statistics from output
|
|
421
|
+
* @param {string} output - Command output
|
|
422
|
+
* @returns {Object}
|
|
423
|
+
*/
|
|
424
|
+
static extractDiffStats(output) {
|
|
425
|
+
const stats = {
|
|
426
|
+
filesChanged: 0,
|
|
427
|
+
insertions: 0,
|
|
428
|
+
deletions: 0
|
|
429
|
+
};
|
|
430
|
+
|
|
431
|
+
// Git diff stat pattern
|
|
432
|
+
const statPattern = /(\d+)\s+files?\s+changed(?:,\s+(\d+)\s+insertions?)?(?:,\s+(\d+)\s+deletions?)?/;
|
|
433
|
+
const match = output.match(statPattern);
|
|
434
|
+
|
|
435
|
+
if (match) {
|
|
436
|
+
stats.filesChanged = parseInt(match[1], 10);
|
|
437
|
+
stats.insertions = match[2] ? parseInt(match[2], 10) : 0;
|
|
438
|
+
stats.deletions = match[3] ? parseInt(match[3], 10) : 0;
|
|
439
|
+
}
|
|
440
|
+
|
|
441
|
+
return stats;
|
|
442
|
+
}
|
|
443
|
+
}
|
|
444
|
+
|
|
445
|
+
/**
|
|
446
|
+
* Simple token estimation utility
|
|
447
|
+
* @class
|
|
448
|
+
*/
|
|
449
|
+
class TokenEstimator {
|
|
450
|
+
/**
|
|
451
|
+
* Estimate token count for text
|
|
452
|
+
* @param {string} text - Text to estimate
|
|
453
|
+
* @returns {number} Estimated token count
|
|
454
|
+
*/
|
|
455
|
+
static estimate(text) {
|
|
456
|
+
// Simple estimation: ~4 characters per token
|
|
457
|
+
// This is a rough approximation; real tokenizers are more complex
|
|
458
|
+
return Math.ceil(text.length / 4);
|
|
459
|
+
}
|
|
460
|
+
|
|
461
|
+
/**
|
|
462
|
+
* Check if text exceeds token limit
|
|
463
|
+
* @param {string} text - Text to check
|
|
464
|
+
* @param {number} limit - Token limit
|
|
465
|
+
* @returns {boolean}
|
|
466
|
+
*/
|
|
467
|
+
static exceedsLimit(text, limit) {
|
|
468
|
+
return this.estimate(text) > limit;
|
|
469
|
+
}
|
|
470
|
+
|
|
471
|
+
/**
|
|
472
|
+
* Truncate text to fit within token limit
|
|
473
|
+
* @param {string} text - Text to truncate
|
|
474
|
+
* @param {number} limit - Token limit
|
|
475
|
+
* @param {string} [suffix='...'] - Suffix to add
|
|
476
|
+
* @returns {string}
|
|
477
|
+
*/
|
|
478
|
+
static truncate(text, limit, suffix = '...') {
|
|
479
|
+
const estimatedChars = limit * 4;
|
|
480
|
+
if (text.length <= estimatedChars) {
|
|
481
|
+
return text;
|
|
482
|
+
}
|
|
483
|
+
|
|
484
|
+
return text.substring(0, estimatedChars - suffix.length) + suffix;
|
|
485
|
+
}
|
|
486
|
+
}
|
|
487
|
+
|
|
488
|
+
export {
|
|
489
|
+
ErrorTypes,
|
|
490
|
+
BackendError,
|
|
491
|
+
ErrorHandler,
|
|
492
|
+
RetryHandler,
|
|
493
|
+
ProgressTracker,
|
|
494
|
+
FileChangeParser,
|
|
495
|
+
TokenEstimator
|
|
496
|
+
};
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Type definitions for implementation backends
|
|
3
|
+
* @module BackendTypes
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* @typedef {Object} BackendCapabilities
|
|
8
|
+
* @property {string[]} supportsLanguages - Supported programming languages
|
|
9
|
+
* @property {boolean} supportsStreaming - Whether backend supports streaming output
|
|
10
|
+
* @property {boolean} supportsRollback - Whether backend supports rollback operations
|
|
11
|
+
* @property {boolean} supportsDirectFileEdit - Whether backend can directly edit files
|
|
12
|
+
* @property {boolean} supportsPlanGeneration - Whether backend can generate implementation plans
|
|
13
|
+
* @property {boolean} supportsTestGeneration - Whether backend can generate tests
|
|
14
|
+
* @property {number} maxConcurrentSessions - Maximum concurrent implementation sessions
|
|
15
|
+
*/
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* @typedef {Object} ImplementRequest
|
|
19
|
+
* @property {string} sessionId - Unique session identifier
|
|
20
|
+
* @property {string} task - Implementation task description
|
|
21
|
+
* @property {Object} [context] - Optional context information
|
|
22
|
+
* @property {string} [context.workingDirectory] - Working directory for implementation
|
|
23
|
+
* @property {string[]} [context.allowedFiles] - List of files allowed to be modified
|
|
24
|
+
* @property {string} [context.language] - Primary programming language
|
|
25
|
+
* @property {string} [context.additionalContext] - Additional context information
|
|
26
|
+
* @property {Object} [options] - Optional implementation options
|
|
27
|
+
* @property {boolean} [options.autoCommit] - Whether to auto-commit changes
|
|
28
|
+
* @property {boolean} [options.generateTests] - Whether to generate tests
|
|
29
|
+
* @property {boolean} [options.dryRun] - Whether to perform a dry run
|
|
30
|
+
* @property {number} [options.maxTokens] - Maximum tokens to use
|
|
31
|
+
* @property {number} [options.temperature] - Model temperature
|
|
32
|
+
* @property {Object} [callbacks] - Optional callback functions
|
|
33
|
+
* @property {Function} [callbacks.onProgress] - Progress update callback
|
|
34
|
+
* @property {Function} [callbacks.onFileChange] - File change callback
|
|
35
|
+
* @property {Function} [callbacks.onError] - Error callback
|
|
36
|
+
*/
|
|
37
|
+
|
|
38
|
+
/**
|
|
39
|
+
* @typedef {Object} ImplementResult
|
|
40
|
+
* @property {boolean} success - Whether implementation was successful
|
|
41
|
+
* @property {string} sessionId - Session identifier
|
|
42
|
+
* @property {string} output - Implementation output
|
|
43
|
+
* @property {FileChange[]} [changes] - List of file changes
|
|
44
|
+
* @property {Object} [metrics] - Implementation metrics
|
|
45
|
+
* @property {number} [metrics.executionTime] - Execution time in milliseconds
|
|
46
|
+
* @property {number} [metrics.tokensUsed] - Number of tokens used
|
|
47
|
+
* @property {number} [metrics.filesModified] - Number of files modified
|
|
48
|
+
* @property {number} [metrics.linesChanged] - Number of lines changed
|
|
49
|
+
* @property {BackendError} [error] - Error information if failed
|
|
50
|
+
* @property {Object} [metadata] - Additional metadata
|
|
51
|
+
*/
|
|
52
|
+
|
|
53
|
+
/**
|
|
54
|
+
* @typedef {Object} FileChange
|
|
55
|
+
* @property {string} path - File path
|
|
56
|
+
* @property {string} type - Change type: 'created', 'modified', 'deleted'
|
|
57
|
+
* @property {string} [description] - Description of change
|
|
58
|
+
* @property {number} [linesAdded] - Number of lines added
|
|
59
|
+
* @property {number} [linesRemoved] - Number of lines removed
|
|
60
|
+
* @property {string} [diff] - Diff content
|
|
61
|
+
*/
|
|
62
|
+
|
|
63
|
+
/**
|
|
64
|
+
* @typedef {Object} BackendStatus
|
|
65
|
+
* @property {string} status - Status: 'pending', 'running', 'completed', 'failed', 'cancelled'
|
|
66
|
+
* @property {number} [progress] - Progress percentage (0-100)
|
|
67
|
+
* @property {string} [message] - Status message
|
|
68
|
+
* @property {Object} [details] - Additional status details
|
|
69
|
+
*/
|
|
70
|
+
|
|
71
|
+
/**
|
|
72
|
+
* @typedef {Object} ProgressUpdate
|
|
73
|
+
* @property {string} sessionId - Session identifier
|
|
74
|
+
* @property {string} message - Progress message
|
|
75
|
+
* @property {string} [type] - Message type: 'stdout', 'stderr', 'info'
|
|
76
|
+
* @property {number} [progress] - Progress percentage
|
|
77
|
+
* @property {Object} [data] - Additional data
|
|
78
|
+
*/
|
|
79
|
+
|
|
80
|
+
/**
|
|
81
|
+
* @typedef {Object} BackendError
|
|
82
|
+
* @property {string} message - Error message
|
|
83
|
+
* @property {string} type - Error type
|
|
84
|
+
* @property {string} [code] - Error code
|
|
85
|
+
* @property {Object} [details] - Additional error details
|
|
86
|
+
* @property {string} timestamp - Error timestamp
|
|
87
|
+
*/
|
|
88
|
+
|
|
89
|
+
/**
|
|
90
|
+
* @typedef {Object} Dependency
|
|
91
|
+
* @property {string} name - Dependency name
|
|
92
|
+
* @property {string} type - Dependency type: 'npm', 'pip', 'environment', 'system'
|
|
93
|
+
* @property {string} [version] - Required version
|
|
94
|
+
* @property {string} [description] - Dependency description
|
|
95
|
+
* @property {string} [installCommand] - Installation command
|
|
96
|
+
*/
|
|
97
|
+
|
|
98
|
+
/**
|
|
99
|
+
* @typedef {Object} BackendConfig
|
|
100
|
+
* @property {string} [apiKey] - API key for cloud-based backends
|
|
101
|
+
* @property {string} [model] - Model to use
|
|
102
|
+
* @property {number} [timeout] - Timeout in milliseconds
|
|
103
|
+
* @property {Object} [environment] - Environment variables
|
|
104
|
+
* @property {Object} [additional] - Additional backend-specific configuration
|
|
105
|
+
*/
|
|
106
|
+
|
|
107
|
+
/**
|
|
108
|
+
* @typedef {Object} BackendInfo
|
|
109
|
+
* @property {string} name - Backend name
|
|
110
|
+
* @property {string} version - Backend version
|
|
111
|
+
* @property {string} description - Backend description
|
|
112
|
+
* @property {boolean} available - Whether backend is available
|
|
113
|
+
* @property {BackendCapabilities} capabilities - Backend capabilities
|
|
114
|
+
* @property {Dependency[]} dependencies - Required dependencies
|
|
115
|
+
*/
|
|
116
|
+
|
|
117
|
+
/**
|
|
118
|
+
* @typedef {Object} ValidationResult
|
|
119
|
+
* @property {boolean} valid - Whether validation passed
|
|
120
|
+
* @property {string[]} errors - List of validation errors
|
|
121
|
+
* @property {string[]} [warnings] - List of validation warnings
|
|
122
|
+
*/
|
|
123
|
+
|
|
124
|
+
module.exports = {
|
|
125
|
+
// Type exports for JSDoc references
|
|
126
|
+
};
|