@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,596 @@
|
|
|
1
|
+
# ProbeAgent Session Cloning Guide
|
|
2
|
+
|
|
3
|
+
The `clone()` method provides a native, intelligent way to clone ProbeAgent sessions with automatic filtering of internal messages.
|
|
4
|
+
|
|
5
|
+
## Migration from Manual Cloning
|
|
6
|
+
|
|
7
|
+
If you were previously cloning sessions manually, here's how to migrate:
|
|
8
|
+
|
|
9
|
+
### Before (Manual Approach)
|
|
10
|
+
```javascript
|
|
11
|
+
// Create new agent
|
|
12
|
+
const clonedAgent = new ProbeAgent({
|
|
13
|
+
sessionId: 'clone-id',
|
|
14
|
+
path: './src'
|
|
15
|
+
});
|
|
16
|
+
|
|
17
|
+
await clonedAgent.initialize();
|
|
18
|
+
|
|
19
|
+
// Manually copy history (includes internal messages!)
|
|
20
|
+
clonedAgent.history = [...baseAgent.history];
|
|
21
|
+
|
|
22
|
+
// Use the clone
|
|
23
|
+
await clonedAgent.answer('Continue working...');
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
### After (Native Method)
|
|
27
|
+
```javascript
|
|
28
|
+
// One line - automatically filters internal messages!
|
|
29
|
+
const clonedAgent = baseAgent.clone({
|
|
30
|
+
sessionId: 'clone-id' // Optional, auto-generates if not provided
|
|
31
|
+
});
|
|
32
|
+
|
|
33
|
+
await clonedAgent.initialize();
|
|
34
|
+
|
|
35
|
+
// Use the clone with clean history
|
|
36
|
+
await clonedAgent.answer('Continue working...');
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
## Why Use the Clone Method?
|
|
40
|
+
|
|
41
|
+
The native `clone()` method offers several advantages over manual history copying:
|
|
42
|
+
|
|
43
|
+
1. **Smart Filtering**: Automatically removes internal messages (schema reminders, mermaid fixes, tool use prompts)
|
|
44
|
+
2. **Clean Context**: Cloned agents get only the meaningful conversation (system + user + assistant + tool results)
|
|
45
|
+
3. **Cache Efficiency**: Preserves the system message for prompt caching
|
|
46
|
+
4. **Configuration Copying**: Automatically copies all agent settings
|
|
47
|
+
5. **Type Safety**: Returns a properly configured ProbeAgent instance
|
|
48
|
+
|
|
49
|
+
## Basic Usage
|
|
50
|
+
|
|
51
|
+
### Example 1: Simple Clone
|
|
52
|
+
|
|
53
|
+
```javascript
|
|
54
|
+
import { ProbeAgent } from '@probelabs/probe';
|
|
55
|
+
|
|
56
|
+
// Create base agent
|
|
57
|
+
const baseAgent = new ProbeAgent({
|
|
58
|
+
sessionId: 'base',
|
|
59
|
+
path: './src',
|
|
60
|
+
debug: true
|
|
61
|
+
});
|
|
62
|
+
|
|
63
|
+
await baseAgent.initialize();
|
|
64
|
+
|
|
65
|
+
// Have a conversation with schema (creates internal messages)
|
|
66
|
+
await baseAgent.answer('What files are in this project?');
|
|
67
|
+
await baseAgent.answer(
|
|
68
|
+
'List all functions',
|
|
69
|
+
[],
|
|
70
|
+
{
|
|
71
|
+
schema: JSON.stringify({
|
|
72
|
+
type: 'object',
|
|
73
|
+
properties: {
|
|
74
|
+
functions: { type: 'array' }
|
|
75
|
+
}
|
|
76
|
+
})
|
|
77
|
+
}
|
|
78
|
+
);
|
|
79
|
+
|
|
80
|
+
console.log(`Base agent has ${baseAgent.history.length} messages`);
|
|
81
|
+
// Output: Base agent has 10 messages (includes internal schema reminders)
|
|
82
|
+
|
|
83
|
+
// Clone with automatic filtering
|
|
84
|
+
const clonedAgent = baseAgent.clone();
|
|
85
|
+
|
|
86
|
+
await clonedAgent.initialize();
|
|
87
|
+
|
|
88
|
+
console.log(`Cloned agent has ${clonedAgent.history.length} messages`);
|
|
89
|
+
// Output: Cloned agent has 5 messages (internal messages stripped)
|
|
90
|
+
|
|
91
|
+
// Use the cloned agent
|
|
92
|
+
await clonedAgent.answer('Based on what you learned, suggest improvements');
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
## Clone Options
|
|
96
|
+
|
|
97
|
+
### Example 2: Custom Session ID
|
|
98
|
+
|
|
99
|
+
```javascript
|
|
100
|
+
const clonedAgent = baseAgent.clone({
|
|
101
|
+
sessionId: 'my-custom-session-id'
|
|
102
|
+
});
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
### Example 3: Keep Internal Messages
|
|
106
|
+
|
|
107
|
+
```javascript
|
|
108
|
+
// Keep all messages including internal ones
|
|
109
|
+
const clonedAgent = baseAgent.clone({
|
|
110
|
+
stripInternalMessages: false
|
|
111
|
+
});
|
|
112
|
+
|
|
113
|
+
// Useful when you need the exact conversation state
|
|
114
|
+
```
|
|
115
|
+
|
|
116
|
+
### Example 4: Remove System Message
|
|
117
|
+
|
|
118
|
+
```javascript
|
|
119
|
+
// Clone without the system message (use new prompt type)
|
|
120
|
+
const clonedAgent = baseAgent.clone({
|
|
121
|
+
keepSystemMessage: false,
|
|
122
|
+
overrides: {
|
|
123
|
+
promptType: 'architect', // Use a different prompt
|
|
124
|
+
customPrompt: 'You are a security auditor...'
|
|
125
|
+
}
|
|
126
|
+
});
|
|
127
|
+
```
|
|
128
|
+
|
|
129
|
+
### Example 5: Override Configuration
|
|
130
|
+
|
|
131
|
+
```javascript
|
|
132
|
+
// Clone with different settings
|
|
133
|
+
const clonedAgent = baseAgent.clone({
|
|
134
|
+
overrides: {
|
|
135
|
+
debug: false, // Disable debug in clone
|
|
136
|
+
allowEdit: true, // Enable edit tool
|
|
137
|
+
maxIterations: 50, // Increase iteration limit
|
|
138
|
+
promptType: 'code-review' // Different prompt type
|
|
139
|
+
}
|
|
140
|
+
});
|
|
141
|
+
```
|
|
142
|
+
|
|
143
|
+
### Example 6: Shallow Copy (Performance)
|
|
144
|
+
|
|
145
|
+
```javascript
|
|
146
|
+
// Use shallow copy for better performance (be careful with mutations!)
|
|
147
|
+
const clonedAgent = baseAgent.clone({
|
|
148
|
+
deepCopy: false
|
|
149
|
+
});
|
|
150
|
+
```
|
|
151
|
+
|
|
152
|
+
## Real-World Use Cases
|
|
153
|
+
|
|
154
|
+
### Use Case 1: Parallel Checks (Visor Pattern)
|
|
155
|
+
|
|
156
|
+
```javascript
|
|
157
|
+
import { ProbeAgent } from '@probelabs/probe';
|
|
158
|
+
|
|
159
|
+
async function runParallelChecks(codebase) {
|
|
160
|
+
// Step 1: Build shared context
|
|
161
|
+
const baseAgent = new ProbeAgent({
|
|
162
|
+
sessionId: 'context-builder',
|
|
163
|
+
path: codebase,
|
|
164
|
+
debug: true
|
|
165
|
+
});
|
|
166
|
+
|
|
167
|
+
await baseAgent.initialize();
|
|
168
|
+
|
|
169
|
+
// Expensive context building (only done once)
|
|
170
|
+
await baseAgent.answer('Analyze the project structure');
|
|
171
|
+
await baseAgent.answer('List all API endpoints');
|
|
172
|
+
await baseAgent.answer('Identify database models');
|
|
173
|
+
|
|
174
|
+
console.log(`Base context: ${baseAgent.history.length} messages`);
|
|
175
|
+
|
|
176
|
+
// Step 2: Clone for parallel checks
|
|
177
|
+
const checks = [
|
|
178
|
+
{
|
|
179
|
+
name: 'security',
|
|
180
|
+
prompt: 'Analyze for security vulnerabilities',
|
|
181
|
+
schema: {
|
|
182
|
+
type: 'object',
|
|
183
|
+
properties: {
|
|
184
|
+
vulnerabilities: { type: 'array' },
|
|
185
|
+
severity: { type: 'string' }
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
},
|
|
189
|
+
{
|
|
190
|
+
name: 'performance',
|
|
191
|
+
prompt: 'Check for performance issues',
|
|
192
|
+
schema: {
|
|
193
|
+
type: 'object',
|
|
194
|
+
properties: {
|
|
195
|
+
issues: { type: 'array' },
|
|
196
|
+
impact: { type: 'string' }
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
},
|
|
200
|
+
{
|
|
201
|
+
name: 'style',
|
|
202
|
+
prompt: 'Check code style and best practices',
|
|
203
|
+
schema: {
|
|
204
|
+
type: 'object',
|
|
205
|
+
properties: {
|
|
206
|
+
violations: { type: 'array' },
|
|
207
|
+
suggestions: { type: 'array' }
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
];
|
|
212
|
+
|
|
213
|
+
// Run all checks in parallel with cloned context
|
|
214
|
+
const results = await Promise.all(
|
|
215
|
+
checks.map(async (check) => {
|
|
216
|
+
// Clone base agent for this check
|
|
217
|
+
const checkAgent = baseAgent.clone({
|
|
218
|
+
sessionId: `check-${check.name}`
|
|
219
|
+
});
|
|
220
|
+
|
|
221
|
+
await checkAgent.initialize();
|
|
222
|
+
|
|
223
|
+
// Run check with structured output
|
|
224
|
+
const result = await checkAgent.answer(
|
|
225
|
+
check.prompt,
|
|
226
|
+
[],
|
|
227
|
+
{ schema: JSON.stringify(check.schema) }
|
|
228
|
+
);
|
|
229
|
+
|
|
230
|
+
// Clean up
|
|
231
|
+
await checkAgent.cleanup();
|
|
232
|
+
|
|
233
|
+
return {
|
|
234
|
+
check: check.name,
|
|
235
|
+
result: JSON.parse(result)
|
|
236
|
+
};
|
|
237
|
+
})
|
|
238
|
+
);
|
|
239
|
+
|
|
240
|
+
// Clean up base agent
|
|
241
|
+
await baseAgent.cleanup();
|
|
242
|
+
|
|
243
|
+
return results;
|
|
244
|
+
}
|
|
245
|
+
|
|
246
|
+
// Usage
|
|
247
|
+
const checkResults = await runParallelChecks('./my-project');
|
|
248
|
+
console.log('Security:', checkResults[0]);
|
|
249
|
+
console.log('Performance:', checkResults[1]);
|
|
250
|
+
console.log('Style:', checkResults[2]);
|
|
251
|
+
```
|
|
252
|
+
|
|
253
|
+
### Use Case 2: Progressive Context Building
|
|
254
|
+
|
|
255
|
+
```javascript
|
|
256
|
+
async function progressiveAnalysis(codebase) {
|
|
257
|
+
// Stage 1: Basic exploration
|
|
258
|
+
const stage1 = new ProbeAgent({
|
|
259
|
+
sessionId: 'stage1-exploration',
|
|
260
|
+
path: codebase
|
|
261
|
+
});
|
|
262
|
+
|
|
263
|
+
await stage1.initialize();
|
|
264
|
+
await stage1.answer('What is the main purpose of this codebase?');
|
|
265
|
+
await stage1.answer('What are the key components?');
|
|
266
|
+
|
|
267
|
+
// Stage 2: Deep dive (clone stage 1)
|
|
268
|
+
const stage2 = stage1.clone({
|
|
269
|
+
sessionId: 'stage2-deepdive'
|
|
270
|
+
});
|
|
271
|
+
|
|
272
|
+
await stage2.initialize();
|
|
273
|
+
await stage2.answer('Analyze the authentication system in detail');
|
|
274
|
+
await stage2.answer('How does the database layer work?');
|
|
275
|
+
|
|
276
|
+
// Stage 3: Security audit (clone stage 2)
|
|
277
|
+
const stage3 = stage2.clone({
|
|
278
|
+
sessionId: 'stage3-security',
|
|
279
|
+
overrides: {
|
|
280
|
+
promptType: 'security-audit'
|
|
281
|
+
}
|
|
282
|
+
});
|
|
283
|
+
|
|
284
|
+
await stage3.initialize();
|
|
285
|
+
const securityReport = await stage3.answer(
|
|
286
|
+
'Generate a comprehensive security audit report',
|
|
287
|
+
[],
|
|
288
|
+
{
|
|
289
|
+
schema: JSON.stringify({
|
|
290
|
+
type: 'object',
|
|
291
|
+
properties: {
|
|
292
|
+
summary: { type: 'string' },
|
|
293
|
+
critical: { type: 'array' },
|
|
294
|
+
high: { type: 'array' },
|
|
295
|
+
medium: { type: 'array' },
|
|
296
|
+
recommendations: { type: 'array' }
|
|
297
|
+
}
|
|
298
|
+
})
|
|
299
|
+
}
|
|
300
|
+
);
|
|
301
|
+
|
|
302
|
+
// Each stage builds on the previous one
|
|
303
|
+
// But internal messages are automatically cleaned
|
|
304
|
+
console.log(`Stage 1: ${stage1.history.length} messages`);
|
|
305
|
+
console.log(`Stage 2: ${stage2.history.length} messages (filtered)`);
|
|
306
|
+
console.log(`Stage 3: ${stage3.history.length} messages (filtered)`);
|
|
307
|
+
|
|
308
|
+
return JSON.parse(securityReport);
|
|
309
|
+
}
|
|
310
|
+
```
|
|
311
|
+
|
|
312
|
+
### Use Case 3: A/B Testing Different Prompts
|
|
313
|
+
|
|
314
|
+
```javascript
|
|
315
|
+
async function comparePrompts(question, codebase) {
|
|
316
|
+
// Build base context
|
|
317
|
+
const baseAgent = new ProbeAgent({
|
|
318
|
+
sessionId: 'base-context',
|
|
319
|
+
path: codebase
|
|
320
|
+
});
|
|
321
|
+
|
|
322
|
+
await baseAgent.initialize();
|
|
323
|
+
await baseAgent.answer('Analyze the codebase structure');
|
|
324
|
+
|
|
325
|
+
// Clone with different prompt types
|
|
326
|
+
const architectAgent = baseAgent.clone({
|
|
327
|
+
sessionId: 'architect-test',
|
|
328
|
+
overrides: { promptType: 'architect' }
|
|
329
|
+
});
|
|
330
|
+
|
|
331
|
+
const reviewerAgent = baseAgent.clone({
|
|
332
|
+
sessionId: 'reviewer-test',
|
|
333
|
+
overrides: { promptType: 'code-review' }
|
|
334
|
+
});
|
|
335
|
+
|
|
336
|
+
const supportAgent = baseAgent.clone({
|
|
337
|
+
sessionId: 'support-test',
|
|
338
|
+
overrides: { promptType: 'support' }
|
|
339
|
+
});
|
|
340
|
+
|
|
341
|
+
// Initialize all clones
|
|
342
|
+
await Promise.all([
|
|
343
|
+
architectAgent.initialize(),
|
|
344
|
+
reviewerAgent.initialize(),
|
|
345
|
+
supportAgent.initialize()
|
|
346
|
+
]);
|
|
347
|
+
|
|
348
|
+
// Ask the same question with different prompts
|
|
349
|
+
const [architectResponse, reviewerResponse, supportResponse] = await Promise.all([
|
|
350
|
+
architectAgent.answer(question),
|
|
351
|
+
reviewerAgent.answer(question),
|
|
352
|
+
supportAgent.answer(question)
|
|
353
|
+
]);
|
|
354
|
+
|
|
355
|
+
return {
|
|
356
|
+
architect: architectResponse,
|
|
357
|
+
reviewer: reviewerResponse,
|
|
358
|
+
support: supportResponse
|
|
359
|
+
};
|
|
360
|
+
}
|
|
361
|
+
|
|
362
|
+
// Usage
|
|
363
|
+
const responses = await comparePrompts(
|
|
364
|
+
'How should we refactor the authentication module?',
|
|
365
|
+
'./src'
|
|
366
|
+
);
|
|
367
|
+
|
|
368
|
+
console.log('Architect says:', responses.architect);
|
|
369
|
+
console.log('Reviewer says:', responses.reviewer);
|
|
370
|
+
console.log('Support says:', responses.support);
|
|
371
|
+
```
|
|
372
|
+
|
|
373
|
+
### Use Case 4: Stateless API with Session Management
|
|
374
|
+
|
|
375
|
+
```javascript
|
|
376
|
+
import express from 'express';
|
|
377
|
+
import { ProbeAgent } from '@probelabs/probe';
|
|
378
|
+
|
|
379
|
+
const app = express();
|
|
380
|
+
const sessions = new Map(); // Store base agents
|
|
381
|
+
|
|
382
|
+
// Endpoint to create a session
|
|
383
|
+
app.post('/api/sessions', async (req, res) => {
|
|
384
|
+
const { codebase } = req.body;
|
|
385
|
+
|
|
386
|
+
const agent = new ProbeAgent({
|
|
387
|
+
sessionId: `session-${Date.now()}`,
|
|
388
|
+
path: codebase
|
|
389
|
+
});
|
|
390
|
+
|
|
391
|
+
await agent.initialize();
|
|
392
|
+
|
|
393
|
+
// Build initial context
|
|
394
|
+
await agent.answer('Analyze the project structure');
|
|
395
|
+
|
|
396
|
+
sessions.set(agent.sessionId, agent);
|
|
397
|
+
|
|
398
|
+
res.json({ sessionId: agent.sessionId });
|
|
399
|
+
});
|
|
400
|
+
|
|
401
|
+
// Endpoint to run a query (clones the session each time)
|
|
402
|
+
app.post('/api/query', async (req, res) => {
|
|
403
|
+
const { sessionId, question } = req.body;
|
|
404
|
+
|
|
405
|
+
const baseAgent = sessions.get(sessionId);
|
|
406
|
+
if (!baseAgent) {
|
|
407
|
+
return res.status(404).json({ error: 'Session not found' });
|
|
408
|
+
}
|
|
409
|
+
|
|
410
|
+
// Clone for this query (keeps base agent clean)
|
|
411
|
+
const queryAgent = baseAgent.clone({
|
|
412
|
+
sessionId: `${sessionId}-query-${Date.now()}`
|
|
413
|
+
});
|
|
414
|
+
|
|
415
|
+
await queryAgent.initialize();
|
|
416
|
+
|
|
417
|
+
try {
|
|
418
|
+
const answer = await queryAgent.answer(question);
|
|
419
|
+
res.json({ answer });
|
|
420
|
+
} finally {
|
|
421
|
+
// Clean up query agent
|
|
422
|
+
await queryAgent.cleanup();
|
|
423
|
+
}
|
|
424
|
+
});
|
|
425
|
+
|
|
426
|
+
// Endpoint to run structured analysis
|
|
427
|
+
app.post('/api/analyze', async (req, res) => {
|
|
428
|
+
const { sessionId, analysisType, schema } = req.body;
|
|
429
|
+
|
|
430
|
+
const baseAgent = sessions.get(sessionId);
|
|
431
|
+
if (!baseAgent) {
|
|
432
|
+
return res.status(404).json({ error: 'Session not found' });
|
|
433
|
+
}
|
|
434
|
+
|
|
435
|
+
// Clone with custom settings for analysis
|
|
436
|
+
const analysisAgent = baseAgent.clone({
|
|
437
|
+
sessionId: `${sessionId}-analysis-${Date.now()}`,
|
|
438
|
+
overrides: {
|
|
439
|
+
promptType: analysisType, // 'architect', 'code-review', etc.
|
|
440
|
+
maxIterations: 50
|
|
441
|
+
}
|
|
442
|
+
});
|
|
443
|
+
|
|
444
|
+
await analysisAgent.initialize();
|
|
445
|
+
|
|
446
|
+
try {
|
|
447
|
+
const result = await analysisAgent.answer(
|
|
448
|
+
`Perform ${analysisType} analysis`,
|
|
449
|
+
[],
|
|
450
|
+
{ schema: JSON.stringify(schema) }
|
|
451
|
+
);
|
|
452
|
+
res.json({ result: JSON.parse(result) });
|
|
453
|
+
} finally {
|
|
454
|
+
await analysisAgent.cleanup();
|
|
455
|
+
}
|
|
456
|
+
});
|
|
457
|
+
|
|
458
|
+
// Clean up sessions periodically
|
|
459
|
+
setInterval(() => {
|
|
460
|
+
const now = Date.now();
|
|
461
|
+
for (const [sessionId, agent] of sessions.entries()) {
|
|
462
|
+
// Remove sessions older than 1 hour
|
|
463
|
+
if (now - agent.createdAt > 3600000) {
|
|
464
|
+
agent.cleanup();
|
|
465
|
+
sessions.delete(sessionId);
|
|
466
|
+
}
|
|
467
|
+
}
|
|
468
|
+
}, 300000); // Every 5 minutes
|
|
469
|
+
|
|
470
|
+
app.listen(3000, () => {
|
|
471
|
+
console.log('API server listening on port 3000');
|
|
472
|
+
});
|
|
473
|
+
```
|
|
474
|
+
|
|
475
|
+
## What Gets Filtered?
|
|
476
|
+
|
|
477
|
+
The `stripInternalMessages` option removes:
|
|
478
|
+
|
|
479
|
+
### Schema Reminders
|
|
480
|
+
```
|
|
481
|
+
IMPORTANT: A schema was provided. You MUST respond with data that matches this schema.
|
|
482
|
+
Your response must conform to this schema: {...}
|
|
483
|
+
```
|
|
484
|
+
|
|
485
|
+
### Tool Use Prompts
|
|
486
|
+
```
|
|
487
|
+
Please use one of the available tools to help answer the question...
|
|
488
|
+
Remember: Use proper XML format with BOTH opening and closing tags...
|
|
489
|
+
```
|
|
490
|
+
|
|
491
|
+
### Mermaid Fix Prompts
|
|
492
|
+
```
|
|
493
|
+
The mermaid diagram in your response has syntax errors.
|
|
494
|
+
Please fix the mermaid syntax errors...
|
|
495
|
+
Here is the corrected version:
|
|
496
|
+
```
|
|
497
|
+
|
|
498
|
+
### JSON Correction Prompts
|
|
499
|
+
```
|
|
500
|
+
Your response does not match the expected JSON schema.
|
|
501
|
+
Please provide a valid JSON response.
|
|
502
|
+
Schema validation error: ...
|
|
503
|
+
```
|
|
504
|
+
|
|
505
|
+
### Empty Completion Reminders
|
|
506
|
+
```
|
|
507
|
+
When using <attempt_complete>, this must be the ONLY content in your response...
|
|
508
|
+
```
|
|
509
|
+
|
|
510
|
+
## What Gets Kept?
|
|
511
|
+
|
|
512
|
+
- ✅ System message (configurable)
|
|
513
|
+
- ✅ User questions
|
|
514
|
+
- ✅ Assistant responses
|
|
515
|
+
- ✅ Tool calls and results
|
|
516
|
+
- ✅ Images and attachments
|
|
517
|
+
- ✅ All meaningful conversation content
|
|
518
|
+
|
|
519
|
+
## Performance Considerations
|
|
520
|
+
|
|
521
|
+
### Deep Copy vs Shallow Copy
|
|
522
|
+
|
|
523
|
+
```javascript
|
|
524
|
+
// Deep copy (default) - Safe but slower
|
|
525
|
+
const clone1 = baseAgent.clone({
|
|
526
|
+
deepCopy: true // Default
|
|
527
|
+
});
|
|
528
|
+
|
|
529
|
+
// Shallow copy - Faster but be careful with mutations
|
|
530
|
+
const clone2 = baseAgent.clone({
|
|
531
|
+
deepCopy: false
|
|
532
|
+
});
|
|
533
|
+
|
|
534
|
+
// If you modify clone2.history, it may affect the original!
|
|
535
|
+
```
|
|
536
|
+
|
|
537
|
+
### Memory Management
|
|
538
|
+
|
|
539
|
+
```javascript
|
|
540
|
+
// Clean up clones when done
|
|
541
|
+
async function runManyChecks(baseAgent) {
|
|
542
|
+
for (let i = 0; i < 100; i++) {
|
|
543
|
+
const clone = baseAgent.clone();
|
|
544
|
+
await clone.initialize();
|
|
545
|
+
await clone.answer(`Check ${i}`);
|
|
546
|
+
await clone.cleanup(); // Important: free resources!
|
|
547
|
+
}
|
|
548
|
+
}
|
|
549
|
+
```
|
|
550
|
+
|
|
551
|
+
## Debug Output
|
|
552
|
+
|
|
553
|
+
With `debug: true`, you'll see:
|
|
554
|
+
|
|
555
|
+
```
|
|
556
|
+
[DEBUG] Cloned session base-session -> clone-abc123
|
|
557
|
+
[DEBUG] Cloned 5 messages (stripInternal: true)
|
|
558
|
+
[DEBUG] Stripping internal message at index 3: user
|
|
559
|
+
[DEBUG] Stripping internal message at index 7: user
|
|
560
|
+
[DEBUG] Reusing existing system message from history for cache efficiency
|
|
561
|
+
```
|
|
562
|
+
|
|
563
|
+
## TypeScript Support
|
|
564
|
+
|
|
565
|
+
```typescript
|
|
566
|
+
import { ProbeAgent, CloneOptions } from '@probelabs/probe';
|
|
567
|
+
|
|
568
|
+
const baseAgent = new ProbeAgent({ path: './src' });
|
|
569
|
+
await baseAgent.initialize();
|
|
570
|
+
|
|
571
|
+
const options: CloneOptions = {
|
|
572
|
+
sessionId: 'my-clone',
|
|
573
|
+
stripInternalMessages: true,
|
|
574
|
+
keepSystemMessage: true,
|
|
575
|
+
deepCopy: true,
|
|
576
|
+
overrides: {
|
|
577
|
+
debug: false,
|
|
578
|
+
maxIterations: 30
|
|
579
|
+
}
|
|
580
|
+
};
|
|
581
|
+
|
|
582
|
+
const clonedAgent: ProbeAgent = baseAgent.clone(options);
|
|
583
|
+
```
|
|
584
|
+
|
|
585
|
+
## Summary
|
|
586
|
+
|
|
587
|
+
The native `clone()` method provides:
|
|
588
|
+
|
|
589
|
+
- 🧹 **Automatic cleaning** of internal messages
|
|
590
|
+
- 🚀 **Cache efficiency** by preserving system message
|
|
591
|
+
- ⚙️ **Configuration inheritance** with override support
|
|
592
|
+
- 🎯 **Type safety** with proper ProbeAgent instances
|
|
593
|
+
- 🐛 **Debug visibility** into what's being filtered
|
|
594
|
+
- 🔧 **Flexible options** for different use cases
|
|
595
|
+
|
|
596
|
+
Perfect for production use cases like Visor, API servers, and parallel processing pipelines!
|