@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.
Files changed (444) hide show
  1. package/README.md +138 -0
  2. package/data/.env.example +22 -0
  3. package/data/.gitattributes +47 -0
  4. package/data/.glfrc.json +7 -0
  5. package/data/.husky/pre-commit +5 -0
  6. package/data/.nvmrc +1 -0
  7. package/data/CHANGELOG.md +75 -0
  8. package/data/CODE_OF_CONDUCT.md +129 -0
  9. package/data/CONTRIBUTING.md +203 -0
  10. package/data/DOCS-STRUCTURE.md +307 -0
  11. package/data/I18N.md +292 -0
  12. package/data/LICENSE +22 -0
  13. package/data/README.md +315 -0
  14. package/data/SECURITY.md +125 -0
  15. package/data/WIKI-DEPLOYMENT.md +348 -0
  16. package/data/docs/AI-FEATURES.md +610 -0
  17. package/data/docs/API-REFERENCE.md +1022 -0
  18. package/data/docs/AUTHENTICATION.md +301 -0
  19. package/data/docs/BACKEND-API.md +468 -0
  20. package/data/docs/DEVELOPMENT.md +375 -0
  21. package/data/docs/EXAMPLES.md +622 -0
  22. package/data/docs/MCP-SERVER.md +307 -0
  23. package/data/docs/MIGRATION-GUIDE.md +367 -0
  24. package/data/docs/NPM-PUBLISH.md +193 -0
  25. package/data/docs/QUICKSTART.md +206 -0
  26. package/data/docs/REDIS-SETUP.md +162 -0
  27. package/data/docs/SERVER.md +228 -0
  28. package/data/docs/TROUBLESHOOTING.md +657 -0
  29. package/data/docs/WIDGET-GUIDE.md +638 -0
  30. package/data/docs/WIKI-HOME.md +58 -0
  31. package/data/docs/WIKI-SIDEBAR.md +39 -0
  32. package/data/package.json +171 -0
  33. package/data/playwright.config.ts +64 -0
  34. package/data/probe/.cargo/config.toml +10 -0
  35. package/data/probe/.claude/commands/performance-review.md +15 -0
  36. package/data/probe/.clinerules +288 -0
  37. package/data/probe/.dockerignore +57 -0
  38. package/data/probe/.githooks/post-commit +11 -0
  39. package/data/probe/.githooks/pre-commit +99 -0
  40. package/data/probe/.githooks/pre-commit-vow +9 -0
  41. package/data/probe/.prompts/engineer.md +41 -0
  42. package/data/probe/.roomodes +28 -0
  43. package/data/probe/.windsurfrules +0 -0
  44. package/data/probe/BASH_TOOL_SUMMARY.md +148 -0
  45. package/data/probe/BENCHMARKING.md +256 -0
  46. package/data/probe/CLAUDE.md +226 -0
  47. package/data/probe/CODE_OF_CONDUCT.md +128 -0
  48. package/data/probe/CONTRIBUTING.md +193 -0
  49. package/data/probe/Cargo.toml +120 -0
  50. package/data/probe/Cross.toml +10 -0
  51. package/data/probe/DOCKER-README.md +224 -0
  52. package/data/probe/Dockerfile +32 -0
  53. package/data/probe/ENHANCED_DEBUG_TELEMETRY.md +188 -0
  54. package/data/probe/LICENSE +201 -0
  55. package/data/probe/Makefile +210 -0
  56. package/data/probe/README.md +824 -0
  57. package/data/probe/SECURITY.md +67 -0
  58. package/data/probe/WINDOWS-GUIDE.md +294 -0
  59. package/data/probe/benches/parsing_benchmarks.rs +370 -0
  60. package/data/probe/benches/search_benchmarks.rs +599 -0
  61. package/data/probe/benches/simd_benchmarks.rs +372 -0
  62. package/data/probe/benches/timing_benchmarks.rs +287 -0
  63. package/data/probe/build-windows.bat +229 -0
  64. package/data/probe/codex-config/config.toml +6 -0
  65. package/data/probe/docs/PERFORMANCE_OPTIMIZATION.md +161 -0
  66. package/data/probe/examples/cache_demo.rs +46 -0
  67. package/data/probe/examples/chat/.dockerignore +37 -0
  68. package/data/probe/examples/chat/ChatSessionManager.js +295 -0
  69. package/data/probe/examples/chat/Dockerfile +98 -0
  70. package/data/probe/examples/chat/LICENSE +201 -0
  71. package/data/probe/examples/chat/LOCAL_IMAGE_SUPPORT.md +195 -0
  72. package/data/probe/examples/chat/MCP_INTEGRATION.md +400 -0
  73. package/data/probe/examples/chat/README.md +338 -0
  74. package/data/probe/examples/chat/TRACING.md +226 -0
  75. package/data/probe/examples/chat/appTracer.js +968 -0
  76. package/data/probe/examples/chat/auth.js +76 -0
  77. package/data/probe/examples/chat/bin/probe-chat.js +13 -0
  78. package/data/probe/examples/chat/build.js +104 -0
  79. package/data/probe/examples/chat/cancelRequest.js +84 -0
  80. package/data/probe/examples/chat/demo-agentic-image-flow.js +88 -0
  81. package/data/probe/examples/chat/demo-local-images.js +128 -0
  82. package/data/probe/examples/chat/fileSpanExporter.js +181 -0
  83. package/data/probe/examples/chat/implement/README.md +228 -0
  84. package/data/probe/examples/chat/implement/backends/AiderBackend.js +750 -0
  85. package/data/probe/examples/chat/implement/backends/BaseBackend.js +276 -0
  86. package/data/probe/examples/chat/implement/backends/ClaudeCodeBackend.js +767 -0
  87. package/data/probe/examples/chat/implement/backends/MockBackend.js +237 -0
  88. package/data/probe/examples/chat/implement/backends/registry.js +85 -0
  89. package/data/probe/examples/chat/implement/core/BackendManager.js +567 -0
  90. package/data/probe/examples/chat/implement/core/ImplementTool.js +354 -0
  91. package/data/probe/examples/chat/implement/core/config.js +428 -0
  92. package/data/probe/examples/chat/implement/core/timeouts.js +58 -0
  93. package/data/probe/examples/chat/implement/core/utils.js +496 -0
  94. package/data/probe/examples/chat/implement/types/BackendTypes.js +126 -0
  95. package/data/probe/examples/chat/index.js +669 -0
  96. package/data/probe/examples/chat/mcpServer.js +341 -0
  97. package/data/probe/examples/chat/npm/LICENSE +15 -0
  98. package/data/probe/examples/chat/npm/README.md +168 -0
  99. package/data/probe/examples/chat/npm/bin/probe-chat.js +156 -0
  100. package/data/probe/examples/chat/npm/index.js +259 -0
  101. package/data/probe/examples/chat/npm/package.json +54 -0
  102. package/data/probe/examples/chat/package.json +102 -0
  103. package/data/probe/examples/chat/probeChat.js +456 -0
  104. package/data/probe/examples/chat/probeTool.js +491 -0
  105. package/data/probe/examples/chat/storage/JsonChatStorage.js +476 -0
  106. package/data/probe/examples/chat/telemetry.js +281 -0
  107. package/data/probe/examples/chat/test/integration/chatFlows.test.js +320 -0
  108. package/data/probe/examples/chat/test/integration/toolCalling.test.js +471 -0
  109. package/data/probe/examples/chat/test/mocks/mockLLMProvider.js +269 -0
  110. package/data/probe/examples/chat/test/test-backends.js +90 -0
  111. package/data/probe/examples/chat/test/testUtils.js +530 -0
  112. package/data/probe/examples/chat/test/unit/backendTimeout.test.js +161 -0
  113. package/data/probe/examples/chat/test/unit/packageFiles.test.js +120 -0
  114. package/data/probe/examples/chat/test/verify-tests.js +118 -0
  115. package/data/probe/examples/chat/test-agentic-image-loading.js +294 -0
  116. package/data/probe/examples/chat/test-ai-sdk-telemetry.js +204 -0
  117. package/data/probe/examples/chat/test-chat-tracing.js +38 -0
  118. package/data/probe/examples/chat/test-direct-function.js +49 -0
  119. package/data/probe/examples/chat/test-file-size-validation.js +103 -0
  120. package/data/probe/examples/chat/test-full-mcp-integration.js +258 -0
  121. package/data/probe/examples/chat/test-github-context.txt +12 -0
  122. package/data/probe/examples/chat/test-hierarchy.js +203 -0
  123. package/data/probe/examples/chat/test-image-spans.js +37 -0
  124. package/data/probe/examples/chat/test-local-image-reading.js +176 -0
  125. package/data/probe/examples/chat/test-mcp-integration.js +136 -0
  126. package/data/probe/examples/chat/test-mcp-probe-server.js +161 -0
  127. package/data/probe/examples/chat/test-mcp-with-ai.js +279 -0
  128. package/data/probe/examples/chat/test-multiple-allowed-dirs.js +111 -0
  129. package/data/probe/examples/chat/test-probe-mcp-server.js +110 -0
  130. package/data/probe/examples/chat/test-security-validation.js +145 -0
  131. package/data/probe/examples/chat/test-simple-tracing.js +32 -0
  132. package/data/probe/examples/chat/test-trace-verification.js +235 -0
  133. package/data/probe/examples/chat/test-tracing.js +114 -0
  134. package/data/probe/examples/chat/tokenCounter.js +419 -0
  135. package/data/probe/examples/chat/tokenUsageDisplay.js +134 -0
  136. package/data/probe/examples/chat/webServer.js +1103 -0
  137. package/data/probe/examples/reranker/Cargo.toml +33 -0
  138. package/data/probe/examples/reranker/DEBUG_OUTPUT_ANALYSIS.md +71 -0
  139. package/data/probe/examples/reranker/MODELS.md +66 -0
  140. package/data/probe/examples/reranker/MODEL_COMPARISON.md +60 -0
  141. package/data/probe/examples/reranker/MULTI_MODEL_ANALYSIS.md +176 -0
  142. package/data/probe/examples/reranker/PERFORMANCE_SUMMARY.md +156 -0
  143. package/data/probe/examples/reranker/README.md +347 -0
  144. package/data/probe/examples/reranker/RUST_BERT_COMPARISON.md +82 -0
  145. package/data/probe/examples/reranker/TOKENIZATION_GUIDE.md +120 -0
  146. package/data/probe/examples/reranker/check_rust_tokenizer.py +108 -0
  147. package/data/probe/examples/reranker/convert_to_torchscript.py +109 -0
  148. package/data/probe/examples/reranker/debug_scoring.py +189 -0
  149. package/data/probe/examples/reranker/debug_tokenization.py +154 -0
  150. package/data/probe/examples/reranker/download_models.sh +73 -0
  151. package/data/probe/examples/reranker/requirements.txt +13 -0
  152. package/data/probe/examples/reranker/run_comprehensive_benchmark.sh +83 -0
  153. package/data/probe/examples/reranker/rust_bert_test/Cargo.toml +12 -0
  154. package/data/probe/examples/reranker/rust_bert_test/README.md +54 -0
  155. package/data/probe/examples/reranker/simple_test.py +50 -0
  156. package/data/probe/examples/reranker/test_all_models.sh +63 -0
  157. package/data/probe/examples/reranker/test_bert_results.sh +44 -0
  158. package/data/probe/examples/reranker/test_cross_encoder.py +334 -0
  159. package/data/probe/examples/reranker/test_cross_encoder.sh +80 -0
  160. package/data/probe/examples/reranker/test_exact_comparison.py +151 -0
  161. package/data/probe/examples/reranker/test_parallel_performance.sh +56 -0
  162. package/data/probe/examples/reranker/test_scores.py +132 -0
  163. package/data/probe/install.ps1 +508 -0
  164. package/data/probe/install.sh +460 -0
  165. package/data/probe/npm/CLONE_METHOD_EXAMPLES.md +596 -0
  166. package/data/probe/npm/CONTEXT_COMPACTION.md +303 -0
  167. package/data/probe/npm/DELEGATE_TOOL_README.md +166 -0
  168. package/data/probe/npm/MAID_INTEGRATION.md +313 -0
  169. package/data/probe/npm/MCP_INTEGRATION_SUMMARY.md +241 -0
  170. package/data/probe/npm/README.md +824 -0
  171. package/data/probe/npm/bin/.gitignore +7 -0
  172. package/data/probe/npm/bin/.gitkeep +0 -0
  173. package/data/probe/npm/bin/README.md +12 -0
  174. package/data/probe/npm/bin/probe +167 -0
  175. package/data/probe/npm/docs/CLAUDE_CODE_INTEGRATION.md +414 -0
  176. package/data/probe/npm/docs/CODEX_INTEGRATION.md +502 -0
  177. package/data/probe/npm/docs/EDIT_CREATE_TOOLS.md +233 -0
  178. package/data/probe/npm/docs/RETRY_AND_FALLBACK.md +674 -0
  179. package/data/probe/npm/example-usage.js +335 -0
  180. package/data/probe/npm/examples/multi-engine-demo.js +117 -0
  181. package/data/probe/npm/examples/probe-agent-cli.js +113 -0
  182. package/data/probe/npm/examples/test-agent-edit.js +114 -0
  183. package/data/probe/npm/examples/test-edit-create.js +120 -0
  184. package/data/probe/npm/examples/test-edit-direct.js +114 -0
  185. package/data/probe/npm/index.d.ts +744 -0
  186. package/data/probe/npm/jest.config.js +52 -0
  187. package/data/probe/npm/package.json +117 -0
  188. package/data/probe/npm/scripts/build-agent.cjs +75 -0
  189. package/data/probe/npm/scripts/build-cjs.js +124 -0
  190. package/data/probe/npm/scripts/build-mcp.cjs +36 -0
  191. package/data/probe/npm/scripts/postinstall.js +216 -0
  192. package/data/probe/npm/test-codex-e2e.js +78 -0
  193. package/data/probe/npm/test-download-lock.js +109 -0
  194. package/data/probe/npm/test-grep-security.js +94 -0
  195. package/data/probe/npm/test-grep-simplified.js +63 -0
  196. package/data/probe/npm/test-grep.js +51 -0
  197. package/data/probe/npm/tests/README.md +96 -0
  198. package/data/probe/npm/tests/agent-compact-history.test.js +174 -0
  199. package/data/probe/npm/tests/allow-tests-default.test.js +151 -0
  200. package/data/probe/npm/tests/contextCompactor.test.js +498 -0
  201. package/data/probe/npm/tests/delegate-config.test.js +353 -0
  202. package/data/probe/npm/tests/delegate-integration.test.js +348 -0
  203. package/data/probe/npm/tests/extractor-integration.test.js +162 -0
  204. package/data/probe/npm/tests/extractor.test.js +317 -0
  205. package/data/probe/npm/tests/fixtures/sampleDiagrams.js +267 -0
  206. package/data/probe/npm/tests/integration/claude-code-auto-fallback.spec.js +148 -0
  207. package/data/probe/npm/tests/integration/claude-code-multi-step.spec.js +127 -0
  208. package/data/probe/npm/tests/integration/claude-code-tool-events.spec.js +163 -0
  209. package/data/probe/npm/tests/integration/codex-auto-fallback.spec.js +191 -0
  210. package/data/probe/npm/tests/integration/codex-tool-events.spec.js +147 -0
  211. package/data/probe/npm/tests/integration/examplesChatMcp.test.js +402 -0
  212. package/data/probe/npm/tests/integration/mcpDotenvSupport.test.js +174 -0
  213. package/data/probe/npm/tests/integration/mcpErrorHandling.test.js +566 -0
  214. package/data/probe/npm/tests/integration/mcpRobustness.test.js +564 -0
  215. package/data/probe/npm/tests/integration/mcpStdoutPurity.test.js +355 -0
  216. package/data/probe/npm/tests/integration/probeAgentMcp.test.js +398 -0
  217. package/data/probe/npm/tests/integration/retryFallback.test.js +368 -0
  218. package/data/probe/npm/tests/integration/schema-in-initial-message.test.js +318 -0
  219. package/data/probe/npm/tests/integration/schema-validation-loop-prevention.test.js +244 -0
  220. package/data/probe/npm/tests/integration/schemaRetryLogic.test.js +94 -0
  221. package/data/probe/npm/tests/integration/validationFlow.test.js +329 -0
  222. package/data/probe/npm/tests/manual/test-codex-basic.js +110 -0
  223. package/data/probe/npm/tests/mcp/mcpClientManager.test.js +614 -0
  224. package/data/probe/npm/tests/mcp/mcpConfig.test.js +359 -0
  225. package/data/probe/npm/tests/mcp/mcpXmlBridge.test.js +436 -0
  226. package/data/probe/npm/tests/mcp/mockMcpServer.js +510 -0
  227. package/data/probe/npm/tests/mcp-strict-syntax.test.js +319 -0
  228. package/data/probe/npm/tests/mermaidQuoteEscaping.test.js +214 -0
  229. package/data/probe/npm/tests/nestedQuoteFix.test.js +40 -0
  230. package/data/probe/npm/tests/setup.js +46 -0
  231. package/data/probe/npm/tests/unit/allowed-tools.test.js +513 -0
  232. package/data/probe/npm/tests/unit/attempt-completion-closing-tag-in-content.test.js +188 -0
  233. package/data/probe/npm/tests/unit/attemptCompletionJsonFix.test.js +238 -0
  234. package/data/probe/npm/tests/unit/attemptCompletionJsonIssue.test.js +128 -0
  235. package/data/probe/npm/tests/unit/backtickAutoFix.test.js +35 -0
  236. package/data/probe/npm/tests/unit/bash-probe-agent-integration.test.js +389 -0
  237. package/data/probe/npm/tests/unit/bash-simple-commands.test.js +324 -0
  238. package/data/probe/npm/tests/unit/bash-tool-comprehensive.test.js +371 -0
  239. package/data/probe/npm/tests/unit/bash-tool-integration.test.js +310 -0
  240. package/data/probe/npm/tests/unit/bash-tool.test.js +341 -0
  241. package/data/probe/npm/tests/unit/completion-prompt.test.js +379 -0
  242. package/data/probe/npm/tests/unit/cwd-path-options.test.js +287 -0
  243. package/data/probe/npm/tests/unit/delegate-limits.test.js +422 -0
  244. package/data/probe/npm/tests/unit/direct-content-attempt-completion.test.js +235 -0
  245. package/data/probe/npm/tests/unit/edit-create-tools.test.js +609 -0
  246. package/data/probe/npm/tests/unit/enhancedMermaidValidation.test.js +577 -0
  247. package/data/probe/npm/tests/unit/extract-content.test.js +83 -0
  248. package/data/probe/npm/tests/unit/extract-multiple-targets.test.js +89 -0
  249. package/data/probe/npm/tests/unit/fallbackManager.test.js +442 -0
  250. package/data/probe/npm/tests/unit/githubCompatibilityValidation.test.js +258 -0
  251. package/data/probe/npm/tests/unit/imageConfig.test.js +149 -0
  252. package/data/probe/npm/tests/unit/imagePathResolution.test.js +345 -0
  253. package/data/probe/npm/tests/unit/json-fixing-agent.test.js +238 -0
  254. package/data/probe/npm/tests/unit/json-validation-enhanced-errors.test.js +199 -0
  255. package/data/probe/npm/tests/unit/jsonValidationInfiniteLoopFix.test.js +228 -0
  256. package/data/probe/npm/tests/unit/maidIntegration.test.js +139 -0
  257. package/data/probe/npm/tests/unit/maxIterationsWarning.test.js +195 -0
  258. package/data/probe/npm/tests/unit/mermaidEdgeLabelFix.test.js +161 -0
  259. package/data/probe/npm/tests/unit/mermaidHtmlEntities.test.js +76 -0
  260. package/data/probe/npm/tests/unit/mermaidInfiniteLoopFix.test.js +64 -0
  261. package/data/probe/npm/tests/unit/mermaidValidation.test.js +723 -0
  262. package/data/probe/npm/tests/unit/mermaidValidationVisorExample.test.js +309 -0
  263. package/data/probe/npm/tests/unit/probe-agent-clone-realistic.test.js +643 -0
  264. package/data/probe/npm/tests/unit/probe-agent-clone.test.js +476 -0
  265. package/data/probe/npm/tests/unit/probe-agent-delegate.test.js +400 -0
  266. package/data/probe/npm/tests/unit/probe-agent-model-option.test.js +118 -0
  267. package/data/probe/npm/tests/unit/probeTool-security.test.js +283 -0
  268. package/data/probe/npm/tests/unit/readImageTool.test.js +418 -0
  269. package/data/probe/npm/tests/unit/retryManager.test.js +317 -0
  270. package/data/probe/npm/tests/unit/schema-aware-reminders.test.js +288 -0
  271. package/data/probe/npm/tests/unit/schemaDefinitionDetection.test.js +115 -0
  272. package/data/probe/npm/tests/unit/schemaUtils.test.js +1268 -0
  273. package/data/probe/npm/tests/unit/simpleTelemetry.test.js +282 -0
  274. package/data/probe/npm/tests/unit/simplified-attempt-completion.test.js +274 -0
  275. package/data/probe/npm/tests/unit/single-quote-json-bug.test.js +231 -0
  276. package/data/probe/npm/tests/unit/subgraphAutoFix.test.js +110 -0
  277. package/data/probe/npm/tests/unit/system-prompt.test.js +32 -0
  278. package/data/probe/npm/tests/unit/types-probe-agent-options.test.js +42 -0
  279. package/data/probe/npm/tests/unit/xmlParsing.test.js +720 -0
  280. package/data/probe/npm/tsconfig.json +21 -0
  281. package/data/probe/result1.txt +19 -0
  282. package/data/probe/result2.txt +26 -0
  283. package/data/probe/scripts/benchmark.sh +270 -0
  284. package/data/probe/scripts/cache_memory_analysis.rs +844 -0
  285. package/data/probe/scripts/claude-hook-wrapper.sh +56 -0
  286. package/data/probe/site/.env.example +10 -0
  287. package/data/probe/site/DEPLOYMENT.md +86 -0
  288. package/data/probe/site/README.md +183 -0
  289. package/data/probe/site/adding-languages.md +135 -0
  290. package/data/probe/site/ai-chat.md +427 -0
  291. package/data/probe/site/ai-integration.md +1488 -0
  292. package/data/probe/site/blog/agentic-flow-custom-xml-protocol.md +407 -0
  293. package/data/probe/site/blog/index.md +118 -0
  294. package/data/probe/site/blog/v0.6.0-release.md +426 -0
  295. package/data/probe/site/blog.md +8 -0
  296. package/data/probe/site/changelog.md +200 -0
  297. package/data/probe/site/cli-mode.md +437 -0
  298. package/data/probe/site/code-extraction.md +436 -0
  299. package/data/probe/site/contributing/README.md +9 -0
  300. package/data/probe/site/contributing/documentation-cross-references.md +215 -0
  301. package/data/probe/site/contributing/documentation-maintenance.md +275 -0
  302. package/data/probe/site/contributing/documentation-structure.md +75 -0
  303. package/data/probe/site/documentation-cross-references.md +215 -0
  304. package/data/probe/site/documentation-guide.md +132 -0
  305. package/data/probe/site/documentation-maintenance.md +275 -0
  306. package/data/probe/site/features.md +147 -0
  307. package/data/probe/site/how-it-works.md +118 -0
  308. package/data/probe/site/index.md +175 -0
  309. package/data/probe/site/index.md.bak +133 -0
  310. package/data/probe/site/installation.md +235 -0
  311. package/data/probe/site/integrations/docker.md +248 -0
  312. package/data/probe/site/integrations/github-actions.md +413 -0
  313. package/data/probe/site/language-support-overview.md +168 -0
  314. package/data/probe/site/mcp-integration.md +587 -0
  315. package/data/probe/site/mcp-server.md +304 -0
  316. package/data/probe/site/navigation-structure.md +76 -0
  317. package/data/probe/site/nodejs-sdk.md +798 -0
  318. package/data/probe/site/output-formats.md +625 -0
  319. package/data/probe/site/package.json +21 -0
  320. package/data/probe/site/public/_headers +28 -0
  321. package/data/probe/site/public/_redirects +11 -0
  322. package/data/probe/site/quick-start.md +289 -0
  323. package/data/probe/site/search-functionality.md +291 -0
  324. package/data/probe/site/search-reference.md +291 -0
  325. package/data/probe/site/supported-languages.md +215 -0
  326. package/data/probe/site/use-cases/README.md +8 -0
  327. package/data/probe/site/use-cases/advanced-cli.md +253 -0
  328. package/data/probe/site/use-cases/ai-code-editors.md +239 -0
  329. package/data/probe/site/use-cases/building-ai-tools.md +529 -0
  330. package/data/probe/site/use-cases/cli-ai-workflows.md +285 -0
  331. package/data/probe/site/use-cases/deploying-probe-web-interface.md +255 -0
  332. package/data/probe/site/use-cases/integrating-probe-into-ai-code-editors.md +161 -0
  333. package/data/probe/site/use-cases/nodejs-sdk.md +596 -0
  334. package/data/probe/site/use-cases/team-chat.md +350 -0
  335. package/data/probe/site/web-interface.md +434 -0
  336. package/data/probe/site/wrangler.toml +9 -0
  337. package/data/probe/test-api-key.sh +1 -0
  338. package/data/probe/test-probe-implementation/hello.js +7 -0
  339. package/data/probe/test_cases/demonstrate_early_termination_issues.sh +176 -0
  340. package/data/probe/test_cases/early_termination_issues.rs +533 -0
  341. package/data/probe/test_data/test_nested_struct.go +26 -0
  342. package/data/probe/tests/README.md +286 -0
  343. package/data/probe/tests/README_search_determinism_tests.md +116 -0
  344. package/data/probe/tests/adjacent_comment_test.rs +152 -0
  345. package/data/probe/tests/apostrophe_handling_tests.rs +132 -0
  346. package/data/probe/tests/block_filtering_with_ast_tests.rs +669 -0
  347. package/data/probe/tests/block_merging_tests.rs +396 -0
  348. package/data/probe/tests/c_outline_format_tests.rs +2179 -0
  349. package/data/probe/tests/cache_invalidation_issues.rs.disabled +682 -0
  350. package/data/probe/tests/cache_order_tests.rs +147 -0
  351. package/data/probe/tests/cache_query_scoping_tests.rs +221 -0
  352. package/data/probe/tests/cli_tests.rs +680 -0
  353. package/data/probe/tests/comment_context_integration_test.rs +240 -0
  354. package/data/probe/tests/common.rs +33 -0
  355. package/data/probe/tests/complex_block_merging_tests.rs +599 -0
  356. package/data/probe/tests/complex_query_block_filtering_tests.rs +422 -0
  357. package/data/probe/tests/control_flow_closing_braces_test.rs +91 -0
  358. package/data/probe/tests/cpp_outline_format_tests.rs +1507 -0
  359. package/data/probe/tests/csharp_outline_format_tests.rs +941 -0
  360. package/data/probe/tests/elastic_query_integration_tests.rs +922 -0
  361. package/data/probe/tests/extract_command_tests.rs +1848 -0
  362. package/data/probe/tests/extract_deduplication_tests.rs +146 -0
  363. package/data/probe/tests/extract_input_file_tests.rs +84 -0
  364. package/data/probe/tests/extract_prompt_tests.rs +102 -0
  365. package/data/probe/tests/filename_search_tests.rs +96 -0
  366. package/data/probe/tests/fixtures/user/AssemblyInfo.cs +3 -0
  367. package/data/probe/tests/github_extract_tests.rs +234 -0
  368. package/data/probe/tests/go_comment_test.rs +253 -0
  369. package/data/probe/tests/go_outline_format_tests.rs +2587 -0
  370. package/data/probe/tests/go_path_resolver_tests.rs +96 -0
  371. package/data/probe/tests/html_outline_format_tests.rs +637 -0
  372. package/data/probe/tests/integration_tests.rs +837 -0
  373. package/data/probe/tests/ip_whitelist_test.rs +148 -0
  374. package/data/probe/tests/java_outline_format_tests.rs +1611 -0
  375. package/data/probe/tests/javascript_extract_tests.rs +315 -0
  376. package/data/probe/tests/javascript_outline_format_tests.rs +1464 -0
  377. package/data/probe/tests/json_format_tests.rs +436 -0
  378. package/data/probe/tests/json_schema_validation_tests.rs +450 -0
  379. package/data/probe/tests/lib_usage.rs +60 -0
  380. package/data/probe/tests/line_comment_context_extension_test.rs +459 -0
  381. package/data/probe/tests/line_map_cache_tests.rs +114 -0
  382. package/data/probe/tests/markdown_integration_tests.rs +190 -0
  383. package/data/probe/tests/mocks/test_ip_whitelist.go +11 -0
  384. package/data/probe/tests/mocks/test_object.js +27 -0
  385. package/data/probe/tests/mocks/test_struct.go +50 -0
  386. package/data/probe/tests/multi_keyword_pattern_tests.rs +464 -0
  387. package/data/probe/tests/multi_language_syntax_integration_tests.rs +218 -0
  388. package/data/probe/tests/multiple_capture_groups_tests.rs +169 -0
  389. package/data/probe/tests/negative_compound_word_tests.rs +246 -0
  390. package/data/probe/tests/nested_symbol_extraction_tests.rs +99 -0
  391. package/data/probe/tests/outline_cross_file_interference_test.rs +335 -0
  392. package/data/probe/tests/outline_keyword_preservation_test.rs +67 -0
  393. package/data/probe/tests/output_format_edge_cases_tests.rs +693 -0
  394. package/data/probe/tests/parallel_extraction_tests.rs +178 -0
  395. package/data/probe/tests/parallel_search_tests.rs +355 -0
  396. package/data/probe/tests/path_resolver_tests.rs +698 -0
  397. package/data/probe/tests/php_outline_format_extended_tests.rs +928 -0
  398. package/data/probe/tests/php_outline_format_tests.rs +768 -0
  399. package/data/probe/tests/property_tests.proptest-regressions +9 -0
  400. package/data/probe/tests/property_tests.rs +118 -0
  401. package/data/probe/tests/python_outline_format_tests.rs +1538 -0
  402. package/data/probe/tests/query_command_json_tests.rs +438 -0
  403. package/data/probe/tests/query_command_tests.rs +232 -0
  404. package/data/probe/tests/query_command_xml_tests.rs +569 -0
  405. package/data/probe/tests/quoted_term_with_negative_keyword_tests.rs +216 -0
  406. package/data/probe/tests/required_terms_filename_tests.rs +116 -0
  407. package/data/probe/tests/ruby_outline_format_tests.rs +1011 -0
  408. package/data/probe/tests/rust_line_comment_context_test.rs +151 -0
  409. package/data/probe/tests/rust_outline_format_enhanced_tests.rs +725 -0
  410. package/data/probe/tests/rust_outline_format_tests.rs +843 -0
  411. package/data/probe/tests/schemas/xml_output_schema.xsd +38 -0
  412. package/data/probe/tests/search_determinism_tests.rs +451 -0
  413. package/data/probe/tests/search_hints_tests.rs +253 -0
  414. package/data/probe/tests/special_character_escaping_tests.rs +417 -0
  415. package/data/probe/tests/stemming_compound_word_filtering_tests.rs +535 -0
  416. package/data/probe/tests/strict_elastic_syntax_tests.rs +404 -0
  417. package/data/probe/tests/swift_outline_format_tests.rs +3319 -0
  418. package/data/probe/tests/symbols_tests.rs +166 -0
  419. package/data/probe/tests/test_file.rs +45 -0
  420. package/data/probe/tests/test_tokenize.rs +28 -0
  421. package/data/probe/tests/timeout_tests.rs +82 -0
  422. package/data/probe/tests/tokenization_tests.rs +195 -0
  423. package/data/probe/tests/tokenized_block_filtering_tests.rs +174 -0
  424. package/data/probe/tests/typescript_extract_tests.rs +214 -0
  425. package/data/probe/tests/typescript_outline_format_tests.rs +2188 -0
  426. package/data/probe/tests/xml_format_tests.rs +568 -0
  427. package/data/probe/tests/xml_schema_validation_tests.rs +497 -0
  428. package/data/scripts/postinstall.mjs +9 -0
  429. package/data/scripts/set-version.js +0 -0
  430. package/data/scripts/wiki-build.sh +111 -0
  431. package/data/scripts/wiki-deploy.sh +73 -0
  432. package/data/serve.json +12 -0
  433. package/data/test/demo-dynamic.html +134 -0
  434. package/data/test/demo-esm.html +105 -0
  435. package/data/test/demo-iife.html +78 -0
  436. package/data/tsconfig.json +7 -0
  437. package/data/vite.server.ts +483 -0
  438. package/data/vitest.config.ts +40 -0
  439. package/data/wiki/Home.md +58 -0
  440. package/data/wiki/_Sidebar.md +39 -0
  441. package/docs-mcp.config.json +20 -0
  442. package/package.json +56 -0
  443. package/src/config.js +111 -0
  444. package/src/index.js +395 -0
@@ -0,0 +1,674 @@
1
+ # Retry and Fallback System
2
+
3
+ The ProbeAgent SDK includes a comprehensive retry and fallback system to handle API failures gracefully, ensuring maximum reliability for your AI applications.
4
+
5
+ ## Features
6
+
7
+ - **Exponential Backoff**: Automatic retry with increasing delays
8
+ - **Provider Fallback**: Seamlessly switch between AI providers
9
+ - **Model Fallback**: Try different models on the same provider
10
+ - **Cross-Provider Fallback**: Fall back from Anthropic → OpenAI → Google → Bedrock
11
+ - **Configurable Retry Logic**: Custom retry limits, delays, and error patterns
12
+ - **Detailed Statistics**: Track retry attempts, successful fallbacks, and failures
13
+
14
+ ## Quick Start
15
+
16
+ ### Basic Retry Configuration
17
+
18
+ ```javascript
19
+ import { ProbeAgent } from '@probelabs/probe';
20
+
21
+ const agent = new ProbeAgent({
22
+ path: '/path/to/code',
23
+ provider: 'anthropic',
24
+
25
+ // Configure retry behavior
26
+ retry: {
27
+ maxRetries: 5, // Retry up to 5 times per provider
28
+ initialDelay: 1000, // Start with 1 second delay
29
+ maxDelay: 30000, // Cap delays at 30 seconds
30
+ backoffFactor: 2 // Double the delay each time
31
+ }
32
+ });
33
+
34
+ // API calls will automatically retry on failures
35
+ const result = await agent.answer('Explain this code');
36
+ ```
37
+
38
+ ### Provider Fallback Configuration
39
+
40
+ ```javascript
41
+ const agent = new ProbeAgent({
42
+ path: '/path/to/code',
43
+
44
+ // Configure fallback providers
45
+ fallback: {
46
+ strategy: 'custom',
47
+ providers: [
48
+ {
49
+ provider: 'anthropic',
50
+ apiKey: process.env.ANTHROPIC_API_KEY,
51
+ baseURL: 'https://api.anthropic.com/v1',
52
+ model: 'claude-3-7-sonnet-20250219',
53
+ maxRetries: 5 // Retry 5 times on this provider
54
+ },
55
+ {
56
+ provider: 'bedrock',
57
+ region: 'us-west-2',
58
+ accessKeyId: process.env.AWS_ACCESS_KEY_ID,
59
+ secretAccessKey: process.env.AWS_SECRET_ACCESS_KEY,
60
+ model: 'anthropic.claude-sonnet-4-20250514-v1:0',
61
+ maxRetries: 3
62
+ },
63
+ {
64
+ provider: 'openai',
65
+ apiKey: process.env.OPENAI_API_KEY,
66
+ model: 'gpt-4o',
67
+ maxRetries: 3
68
+ }
69
+ ],
70
+ maxTotalAttempts: 15 // Maximum total attempts across all providers
71
+ }
72
+ });
73
+ ```
74
+
75
+ ## Configuration Options
76
+
77
+ ### Retry Configuration
78
+
79
+ The `retry` object supports the following options:
80
+
81
+ | Option | Type | Default | Description |
82
+ |--------|------|---------|-------------|
83
+ | `maxRetries` | number | 3 | Maximum retry attempts per provider |
84
+ | `initialDelay` | number | 1000 | Initial delay in milliseconds |
85
+ | `maxDelay` | number | 30000 | Maximum delay in milliseconds |
86
+ | `backoffFactor` | number | 2 | Exponential backoff multiplier |
87
+ | `retryableErrors` | string[] | See below | List of retryable error patterns |
88
+
89
+ **Default Retryable Errors:**
90
+ - `Overloaded`, `overloaded`
91
+ - `rate_limit`, `rate limit`
92
+ - `429`, `500`, `502`, `503`, `504` (HTTP status codes)
93
+ - `timeout`, `ECONNRESET`, `ETIMEDOUT`, `ENOTFOUND`
94
+ - `api_error`
95
+
96
+ ### Fallback Configuration
97
+
98
+ The `fallback` object supports the following options:
99
+
100
+ | Option | Type | Default | Description |
101
+ |--------|------|---------|-------------|
102
+ | `strategy` | string | 'any' | Fallback strategy (see below) |
103
+ | `providers` | array | [] | List of provider configurations |
104
+ | `models` | array | [] | List of models for same-provider fallback |
105
+ | `stopOnSuccess` | boolean | true | Stop on first successful response |
106
+ | `maxTotalAttempts` | number | 10 | Max attempts across all providers |
107
+
108
+ **Fallback Strategies:**
109
+ - `'same-model'`: Try the same model on different providers
110
+ - `'same-provider'`: Try different models on the same provider
111
+ - `'any'`: Try any available provider/model
112
+ - `'custom'`: Use custom provider list (recommended)
113
+
114
+ ### Provider Configuration
115
+
116
+ Each provider in the `providers` array can have:
117
+
118
+ | Field | Type | Required | Description |
119
+ |-------|------|----------|-------------|
120
+ | `provider` | string | ✅ | Provider name: 'anthropic', 'openai', 'google', 'bedrock' |
121
+ | `model` | string | ❌ | Model name (uses provider default if omitted) |
122
+ | `apiKey` | string | ✅* | API key for the provider |
123
+ | `baseURL` | string | ❌ | Custom API endpoint |
124
+ | `maxRetries` | number | ❌ | Override global retry count for this provider |
125
+ | `region` | string | ❌** | AWS region (Bedrock only) |
126
+ | `accessKeyId` | string | ❌** | AWS access key ID (Bedrock only) |
127
+ | `secretAccessKey` | string | ❌** | AWS secret key (Bedrock only) |
128
+ | `sessionToken` | string | ❌ | AWS session token (Bedrock only) |
129
+
130
+ \* Required for all providers except Bedrock (which can use AWS credentials)
131
+ \*\* Required for Bedrock if not using `apiKey`
132
+
133
+ ## Environment Variable Configuration
134
+
135
+ You can configure retry and fallback behavior via environment variables:
136
+
137
+ ### Retry Environment Variables
138
+
139
+ ```bash
140
+ # Retry configuration
141
+ MAX_RETRIES=5 # Max retries per provider
142
+ RETRY_INITIAL_DELAY=1000 # Initial delay in ms
143
+ RETRY_MAX_DELAY=30000 # Maximum delay in ms
144
+ RETRY_BACKOFF_FACTOR=2 # Exponential backoff multiplier
145
+ ```
146
+
147
+ ### Fallback Environment Variables
148
+
149
+ ```bash
150
+ # Disable fallback
151
+ DISABLE_FALLBACK=1
152
+
153
+ # Auto-fallback (automatically use all available providers)
154
+ AUTO_FALLBACK=1
155
+
156
+ # Custom fallback providers (JSON array)
157
+ FALLBACK_PROVIDERS='[
158
+ {
159
+ "provider": "anthropic",
160
+ "apiKey": "sk-ant-xxx",
161
+ "model": "claude-3-7-sonnet-20250219"
162
+ },
163
+ {
164
+ "provider": "bedrock",
165
+ "region": "us-west-2",
166
+ "accessKeyId": "xxx",
167
+ "secretAccessKey": "xxx",
168
+ "model": "anthropic.claude-sonnet-4-20250514-v1:0"
169
+ }
170
+ ]'
171
+
172
+ # Fallback models (JSON array, for same-provider fallback)
173
+ FALLBACK_MODELS='["claude-3-7-sonnet-20250219", "claude-3-5-sonnet-20241022"]'
174
+
175
+ # Max total attempts across all providers
176
+ FALLBACK_MAX_TOTAL_ATTEMPTS=15
177
+ ```
178
+
179
+ ## Usage Examples
180
+
181
+ ### Example 1: Azure Claude → Bedrock Claude Fallback
182
+
183
+ Perfect for when you want to use the same model across different cloud providers:
184
+
185
+ ```javascript
186
+ const agent = new ProbeAgent({
187
+ path: '/path/to/code',
188
+ fallback: {
189
+ strategy: 'custom',
190
+ providers: [
191
+ {
192
+ provider: 'anthropic',
193
+ apiKey: process.env.AZURE_CLAUDE_API_KEY,
194
+ baseURL: 'https://your-azure-endpoint.com/v1',
195
+ model: 'claude-3-7-sonnet-20250219'
196
+ },
197
+ {
198
+ provider: 'bedrock',
199
+ region: 'us-west-2',
200
+ accessKeyId: process.env.AWS_ACCESS_KEY_ID,
201
+ secretAccessKey: process.env.AWS_SECRET_ACCESS_KEY,
202
+ model: 'anthropic.claude-sonnet-4-20250514-v1:0'
203
+ }
204
+ ]
205
+ }
206
+ });
207
+ ```
208
+
209
+ ### Example 2: Model Degradation (Claude 3.7 → Claude 3.5 → GPT-4)
210
+
211
+ Gracefully degrade to less powerful models if the primary is unavailable:
212
+
213
+ ```javascript
214
+ const agent = new ProbeAgent({
215
+ path: '/path/to/code',
216
+ fallback: {
217
+ strategy: 'custom',
218
+ providers: [
219
+ {
220
+ provider: 'anthropic',
221
+ apiKey: process.env.ANTHROPIC_API_KEY,
222
+ model: 'claude-3-7-sonnet-20250219'
223
+ },
224
+ {
225
+ provider: 'anthropic',
226
+ apiKey: process.env.ANTHROPIC_API_KEY,
227
+ model: 'claude-3-5-sonnet-20241022'
228
+ },
229
+ {
230
+ provider: 'openai',
231
+ apiKey: process.env.OPENAI_API_KEY,
232
+ model: 'gpt-4o'
233
+ }
234
+ ]
235
+ }
236
+ });
237
+ ```
238
+
239
+ ### Example 3: Auto-Fallback
240
+
241
+ Automatically use all available providers from environment variables:
242
+
243
+ ```bash
244
+ # Set all your API keys
245
+ export ANTHROPIC_API_KEY=sk-ant-xxx
246
+ export OPENAI_API_KEY=sk-xxx
247
+ export GOOGLE_API_KEY=xxx
248
+ export AUTO_FALLBACK=1
249
+ ```
250
+
251
+ ```javascript
252
+ const agent = new ProbeAgent({
253
+ path: '/path/to/code',
254
+ provider: 'anthropic', // Primary provider
255
+ fallback: {
256
+ auto: true // Automatically fallback to other providers
257
+ }
258
+ });
259
+ ```
260
+
261
+ ### Example 4: Custom Retryable Errors
262
+
263
+ Only retry on specific error types:
264
+
265
+ ```javascript
266
+ const agent = new ProbeAgent({
267
+ path: '/path/to/code',
268
+ retry: {
269
+ maxRetries: 5,
270
+ retryableErrors: [
271
+ 'Overloaded',
272
+ 'rate_limit',
273
+ '429',
274
+ '503',
275
+ 'CustomError' // Your custom error pattern
276
+ ]
277
+ }
278
+ });
279
+ ```
280
+
281
+ ### Example 5: Different Retry Limits Per Provider
282
+
283
+ Configure different retry strategies for different providers:
284
+
285
+ ```javascript
286
+ const agent = new ProbeAgent({
287
+ path: '/path/to/code',
288
+ retry: {
289
+ maxRetries: 3 // Global default
290
+ },
291
+ fallback: {
292
+ strategy: 'custom',
293
+ providers: [
294
+ {
295
+ provider: 'anthropic',
296
+ apiKey: process.env.ANTHROPIC_API_KEY,
297
+ maxRetries: 10 // Retry Anthropic more aggressively
298
+ },
299
+ {
300
+ provider: 'openai',
301
+ apiKey: process.env.OPENAI_API_KEY,
302
+ maxRetries: 2 // Retry OpenAI less
303
+ }
304
+ ]
305
+ }
306
+ });
307
+ ```
308
+
309
+ ## How It Works
310
+
311
+ ### Retry Flow
312
+
313
+ When an API call fails:
314
+
315
+ ```
316
+ 1. Check if error is retryable (matches error patterns)
317
+ 2. If not retryable → fail immediately
318
+ 3. If retryable:
319
+ a. Wait initialDelay milliseconds
320
+ b. Retry the request
321
+ c. If fails again, increase delay by backoffFactor
322
+ d. Repeat until maxRetries exhausted
323
+ 4. If all retries fail → proceed to fallback (if configured)
324
+ ```
325
+
326
+ ### Fallback Flow
327
+
328
+ When a provider exhausts all retries:
329
+
330
+ ```
331
+ 1. Mark current provider as failed
332
+ 2. Move to next provider in the list
333
+ 3. Apply retry logic to the new provider
334
+ 4. Repeat until:
335
+ - A provider succeeds → return result
336
+ - maxTotalAttempts reached → fail
337
+ - All providers exhausted → fail
338
+ ```
339
+
340
+ ### Complete Flow Example
341
+
342
+ ```
343
+ Primary: Anthropic Claude 3.7 (Azure)
344
+ ├─ Attempt 1: ❌ Overloaded (wait 1s)
345
+ ├─ Attempt 2: ❌ Overloaded (wait 2s)
346
+ ├─ Attempt 3: ❌ Overloaded (wait 4s)
347
+ └─ Exhausted → Fallback
348
+
349
+ Fallback 1: Bedrock Claude Sonnet 4
350
+ ├─ Attempt 1: ❌ 503 Service Unavailable (wait 1s)
351
+ ├─ Attempt 2: ❌ 503 (wait 2s)
352
+ └─ Exhausted → Fallback
353
+
354
+ Fallback 2: OpenAI GPT-4
355
+ ├─ Attempt 1: ✅ Success!
356
+ └─ Return result
357
+ ```
358
+
359
+ ## Monitoring and Statistics
360
+
361
+ ### Getting Statistics
362
+
363
+ Both `RetryManager` and `FallbackManager` track detailed statistics:
364
+
365
+ ```javascript
366
+ const agent = new ProbeAgent({
367
+ // ... configuration
368
+ debug: true // Enable debug logging
369
+ });
370
+
371
+ // Make a request
372
+ await agent.answer('Explain this code');
373
+
374
+ // Access internal managers (if needed for debugging)
375
+ if (agent.retryManager) {
376
+ const retryStats = agent.retryManager.getStats();
377
+ console.log('Retry Stats:', retryStats);
378
+ // {
379
+ // totalAttempts: 7,
380
+ // totalRetries: 4,
381
+ // successfulRetries: 1,
382
+ // failedRetries: 0
383
+ // }
384
+ }
385
+
386
+ if (agent.fallbackManager) {
387
+ const fallbackStats = agent.fallbackManager.getStats();
388
+ console.log('Fallback Stats:', fallbackStats);
389
+ // {
390
+ // totalAttempts: 3,
391
+ // providerAttempts: {
392
+ // 'anthropic/claude-3-7-sonnet-20250219': 1,
393
+ // 'bedrock/anthropic.claude-sonnet-4-20250514-v1:0': 1,
394
+ // 'openai/gpt-4o': 1
395
+ // },
396
+ // successfulProvider: 'openai/gpt-4o',
397
+ // failedProviders: [
398
+ // { provider: 'anthropic/...', error: {...} },
399
+ // { provider: 'bedrock/...', error: {...} }
400
+ // ]
401
+ // }
402
+ }
403
+ ```
404
+
405
+ ### Debug Logging
406
+
407
+ Enable debug mode to see detailed logs:
408
+
409
+ ```javascript
410
+ const agent = new ProbeAgent({
411
+ debug: true,
412
+ retry: { maxRetries: 3 },
413
+ fallback: { /* ... */ }
414
+ });
415
+
416
+ // Logs will show:
417
+ // [RetryManager] Retry attempt 1/3 { provider: 'anthropic', model: 'claude-3-7-...' }
418
+ // [RetryManager] Waiting 1000ms before retry...
419
+ // [FallbackManager] Attempting provider: anthropic/claude-3-7-... (attempt 1/10)
420
+ // [FallbackManager] ❌ Failed with provider: anthropic/claude-3-7-...
421
+ // [FallbackManager] Trying next provider (2 remaining)...
422
+ // [FallbackManager] ✅ Success with provider: openai/gpt-4o
423
+ ```
424
+
425
+ ## Best Practices
426
+
427
+ ### 1. Start Conservative, Scale Up
428
+
429
+ ```javascript
430
+ // Development: Low retries, quick failures
431
+ const devAgent = new ProbeAgent({
432
+ retry: { maxRetries: 1 },
433
+ fallback: false
434
+ });
435
+
436
+ // Production: Aggressive retries, full fallback
437
+ const prodAgent = new ProbeAgent({
438
+ retry: { maxRetries: 5 },
439
+ fallback: {
440
+ strategy: 'custom',
441
+ providers: [/* multiple providers */],
442
+ maxTotalAttempts: 20
443
+ }
444
+ });
445
+ ```
446
+
447
+ ### 2. Use Provider-Specific Retry Limits
448
+
449
+ ```javascript
450
+ {
451
+ providers: [
452
+ {
453
+ provider: 'anthropic',
454
+ maxRetries: 10 // More retries for primary
455
+ },
456
+ {
457
+ provider: 'openai',
458
+ maxRetries: 3 // Fewer for fallback
459
+ }
460
+ ]
461
+ }
462
+ ```
463
+
464
+ ### 3. Configure Delays Based on Your Use Case
465
+
466
+ ```javascript
467
+ // User-facing: Shorter delays for faster response
468
+ {
469
+ retry: {
470
+ initialDelay: 500, // 0.5s
471
+ maxDelay: 5000 // 5s
472
+ }
473
+ }
474
+
475
+ // Background processing: Longer delays, more retries
476
+ {
477
+ retry: {
478
+ initialDelay: 2000, // 2s
479
+ maxDelay: 60000, // 60s
480
+ maxRetries: 10
481
+ }
482
+ }
483
+ ```
484
+
485
+ ### 4. Monitor Failures
486
+
487
+ ```javascript
488
+ const agent = new ProbeAgent({
489
+ retry: { maxRetries: 5 },
490
+ fallback: { /* ... */ }
491
+ });
492
+
493
+ try {
494
+ const result = await agent.answer('Question');
495
+ } catch (error) {
496
+ if (error.allProvidersFailed) {
497
+ // Log to monitoring service
498
+ console.error('All providers failed:', error.stats);
499
+ // Send alert
500
+ }
501
+ }
502
+ ```
503
+
504
+ ### 5. Use Environment Variables for Secrets
505
+
506
+ ```javascript
507
+ // Good: Use environment variables
508
+ {
509
+ provider: 'anthropic',
510
+ apiKey: process.env.ANTHROPIC_API_KEY
511
+ }
512
+
513
+ // Bad: Hardcode API keys
514
+ {
515
+ provider: 'anthropic',
516
+ apiKey: 'sk-ant-hardcoded-key' // Don't do this!
517
+ }
518
+ ```
519
+
520
+ ## Troubleshooting
521
+
522
+ ### Issue: Retries Not Working
523
+
524
+ **Symptoms:** API calls fail immediately without retrying
525
+
526
+ **Solutions:**
527
+ 1. Check if error is in retryable error list
528
+ 2. Verify `maxRetries` is set > 0
529
+ 3. Enable debug logging to see retry attempts
530
+ 4. Check if fallback is disabled unintentionally
531
+
532
+ ```javascript
533
+ // Debug retryable errors
534
+ import { isRetryableError } from '@probelabs/probe/agent/RetryManager.js';
535
+ console.log(isRetryableError(yourError));
536
+ ```
537
+
538
+ ### Issue: Fallback Not Triggering
539
+
540
+ **Symptoms:** Falls back to same provider or doesn't fallback at all
541
+
542
+ **Solutions:**
543
+ 1. Ensure fallback providers are properly configured
544
+ 2. Check API keys are valid
545
+ 3. Verify provider names are correct ('anthropic', 'openai', 'google', 'bedrock')
546
+ 4. Enable debug logging
547
+
548
+ ### Issue: Too Many Retries
549
+
550
+ **Symptoms:** Requests take too long to fail
551
+
552
+ **Solutions:**
553
+ 1. Reduce `maxRetries`
554
+ 2. Reduce `maxTotalAttempts`
555
+ 3. Shorten `maxDelay`
556
+ 4. Remove problematic providers from fallback list
557
+
558
+ ### Issue: Rate Limits Still Occurring
559
+
560
+ **Symptoms:** Getting rate limited despite retries
561
+
562
+ **Solutions:**
563
+ 1. Increase `initialDelay` and `maxDelay`
564
+ 2. Increase `backoffFactor` (3 or 4 instead of 2)
565
+ 3. Add '429' and 'rate_limit' to `retryableErrors`
566
+ 4. Consider implementing request queuing
567
+
568
+ ## API Reference
569
+
570
+ ### RetryManager
571
+
572
+ ```javascript
573
+ import { RetryManager } from '@probelabs/probe/agent/RetryManager.js';
574
+
575
+ const retry = new RetryManager({
576
+ maxRetries: 3,
577
+ initialDelay: 1000,
578
+ maxDelay: 30000,
579
+ backoffFactor: 2,
580
+ retryableErrors: ['Overloaded', '429'],
581
+ debug: false
582
+ });
583
+
584
+ // Execute with retry
585
+ const result = await retry.executeWithRetry(
586
+ async () => {
587
+ return await someAsyncFunction();
588
+ },
589
+ { provider: 'anthropic', model: 'claude-3' }
590
+ );
591
+
592
+ // Get statistics
593
+ const stats = retry.getStats();
594
+
595
+ // Reset statistics
596
+ retry.resetStats();
597
+ ```
598
+
599
+ ### FallbackManager
600
+
601
+ ```javascript
602
+ import { FallbackManager } from '@probelabs/probe/agent/FallbackManager.js';
603
+
604
+ const fallback = new FallbackManager({
605
+ strategy: 'custom',
606
+ providers: [/* ... */],
607
+ maxTotalAttempts: 10,
608
+ debug: false
609
+ });
610
+
611
+ // Execute with fallback
612
+ const result = await fallback.executeWithFallback(
613
+ async (provider, model, config) => {
614
+ // provider: AI SDK provider instance
615
+ // model: Model name
616
+ // config: Full provider configuration
617
+ return await streamText({ model: provider(model), /* ... */ });
618
+ }
619
+ );
620
+
621
+ // Get statistics
622
+ const stats = fallback.getStats();
623
+
624
+ // Reset statistics
625
+ fallback.resetStats();
626
+ ```
627
+
628
+ ## Migration Guide
629
+
630
+ ### From Simple Configuration
631
+
632
+ **Before:**
633
+ ```javascript
634
+ const agent = new ProbeAgent({
635
+ provider: 'anthropic'
636
+ });
637
+ ```
638
+
639
+ **After (with retry and fallback):**
640
+ ```javascript
641
+ const agent = new ProbeAgent({
642
+ provider: 'anthropic',
643
+ retry: {
644
+ maxRetries: 5
645
+ },
646
+ fallback: {
647
+ auto: true // Use all available providers
648
+ }
649
+ });
650
+ ```
651
+
652
+ ### From Environment-Based Fallback
653
+
654
+ **Before:**
655
+ ```bash
656
+ export ANTHROPIC_API_KEY=xxx
657
+ export OPENAI_API_KEY=xxx
658
+ ```
659
+
660
+ **After:**
661
+ ```bash
662
+ export ANTHROPIC_API_KEY=xxx
663
+ export OPENAI_API_KEY=xxx
664
+ export AUTO_FALLBACK=1
665
+ export MAX_RETRIES=5
666
+ ```
667
+
668
+ No code changes required! The agent will automatically use available providers.
669
+
670
+ ## See Also
671
+
672
+ - [ProbeAgent API Reference](./PROBEAGENT.md)
673
+ - [Error Handling Guide](./ERROR_HANDLING.md)
674
+ - [Environment Variables](./ENVIRONMENT_VARIABLES.md)