@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,407 @@
1
+ ---
2
+ title: "Technical Guide: Agentic Flow via Custom XML Protocol"
3
+ description: Learn how to implement agentic AI flows using a custom XML protocol for reliable tool interactions.
4
+ layout: doc
5
+ date: 2025-07-04
6
+ tags:
7
+ - agentic-ai
8
+ - xml-protocol
9
+ - tool-use
10
+ - llm
11
+ - technical-guide
12
+ ---
13
+
14
+ This guide details the technical implementation of an agentic AI flow where tool interactions are managed via a custom XML protocol embedded within the LLM's text output.
15
+
16
+ **1. XML Protocol Definition**
17
+
18
+ Define a strict XML schema for LLM communication.
19
+
20
+ * **Reasoning:** LLM explains its thought process.
21
+ ```xml
22
+ <thinking>Analyzing user request. Need to find files related to 'authentication'. The 'search' tool is appropriate.</thinking>
23
+ ```
24
+ * **Tool Invocation:** LLM requests a tool execution. The root tag is the tool name. Parameters are nested.
25
+ ```xml
26
+ <search>
27
+ <query>authentication implementation</query>
28
+ <path>src/server</path>
29
+ <allow_tests>false</allow_tests>
30
+ </search>
31
+ ```
32
+ ```xml
33
+ <extract>
34
+ <file_path>src/server/auth.js#loginUser</file_path>
35
+ </extract>
36
+ ```
37
+ * **Task Completion:** LLM signals task completion and provides the final result.
38
+ ```xml
39
+ <attempt_completion>
40
+ <result>The authentication flow uses JWT tokens stored in httpOnly cookies. Key functions are `loginUser` and `verifyToken` in `src/server/auth.js`.</result>
41
+ </attempt_completion>
42
+ ```
43
+ * **Result Feedback (Orchestrator -> LLM):** How the orchestrator sends tool results back to the LLM (as a `user` role message).
44
+ ```xml
45
+ <tool_result tool_name="search">
46
+ File: src/server/auth.js
47
+ Lines: 50-75
48
+ ```javascript
49
+ function loginUser(username, password) {
50
+ // ... implementation ...
51
+ const token = generateJwt(user.id);
52
+ return { success: true, token };
53
+ }
54
+ ```
55
+ (Content should be XML-escaped or use CDATA if necessary)
56
+ </tool_result>
57
+ ```
58
+ ```xml
59
+ <tool_result tool_name="extract">
60
+ Error: File not found at path 'src/server/auth.js#loginUser'
61
+ </tool_result>
62
+ ```
63
+
64
+ **2. System Prompt Engineering (Critical Instructions)**
65
+
66
+ The system prompt *must* enforce the protocol rigorously.
67
+
68
+ ```bash
69
+ # Role Definition
70
+ You are a code assistant...
71
+
72
+ # Core Instructions
73
+ - Your primary goal is to fulfill the user's request by reasoning and using the available tools.
74
+ - You MUST use the <thinking> tag to explain your reasoning before every action (tool call or completion).
75
+ - You MUST use XML tags for ALL tool calls and for signaling task completion. DO NOT respond with plain text unless it is inside the <result> tag of a final <attempt_completion>.
76
+ - You MUST choose EXACTLY ONE action per response turn: either ONE tool call (e.g., <search>...</search>) OR the final <attempt_completion> tag.
77
+
78
+ # XML Protocol Specification
79
+ 1. **Thinking:** Use `<thinking>Your reasoning here</thinking>` before any tool or completion tag.
80
+ 2. **Tool Calls:** Use `<tool_name>...</tool_name>` where `tool_name` is one of the available tools listed below. Parameters MUST be nested as `<param_name>value</param_name>`. Example:
81
+ <search>
82
+ <query>user session</query>
83
+ <path>./src</path>
84
+ </search>
85
+ 3. **Completion:** When the task is fully complete, respond ONLY with `<attempt_completion><result>Your final answer here</result></attempt_completion>`.
86
+ 4. **Parameter Values:** Ensure parameter values are valid text. Use XML entities (<, >, &amp;) if needed for special characters within values.
87
+
88
+ # Available Tools
89
+ - `<search>`: Searches code. Parameters: `<query>(string, required)`, `<path>(string, optional)`, `<allow_tests>(boolean, optional)`.
90
+ - `<extract>`: Extracts code snippets. Parameters: `<file_path>(string, required)`, `<line>(number, optional)`, `<end_line>(number, optional)`.
91
+ - `<query>`: (Add description if used)
92
+
93
+ # Tool Result Feedback
94
+ - After you request a tool, I will provide the result in the next message, enclosed in `<tool_result tool_name="invoked_tool_name">...</tool_result>`.
95
+ - If the tool succeeded, the content will be the tool's output.
96
+ - If the tool failed, the content will start with "Error:".
97
+ - Analyze the content of \`<tool_result>\` to inform your next <thinking> step and subsequent action. If an error occurred, adapt your plan.
98
+ ```
99
+
100
+ # Example Interaction Flow
101
+ User: How does login work?
102
+ Assistant:
103
+ <thinking>User wants to understand the login flow. I should search for relevant code.</thinking>
104
+ <search>
105
+ <query>login user function</query>
106
+ <path>./src/auth</path>
107
+ </search>
108
+ User:
109
+ <tool_result tool_name="search">
110
+ File: src/auth/login.js: ... (function loginUser(...) { ... }) ...
111
+ </tool_result>
112
+ Assistant:
113
+ <thinking>The search found `loginUser` in `src/auth/login.js`. I should extract this function to show the user.</thinking>
114
+ <extract>
115
+ <file_path>src/auth/login.js#loginUser</file_path>
116
+ </extract>
117
+ User:
118
+ <tool_result tool_name="extract">
119
+ ```javascript
120
+ function loginUser(email, password) { /* ... */ }
121
+ ```
122
+ </tool_result>
123
+ Assistant:
124
+ <thinking>I have the function code. The task is complete. I will provide the code and explanation.</thinking>
125
+ <attempt_completion>
126
+ <result>Login is handled by the `loginUser` function in `src/auth/login.js`:
127
+ ```javascript
128
+ function loginUser(email, password) { /* ... */ }
129
+ ```
130
+ It likely validates credentials and generates a session token.</result>
131
+ </attempt_completion>
132
+ ```
133
+
134
+ **3. Orchestrator Implementation**
135
+
136
+ This component manages the loop, calls the LLM, parses the XML from the stream, executes tools, and feeds results back.
137
+
138
+ **3.1. Core Loop Structure**
139
+
140
+ ```typescript
141
+ import { streamText, CoreMessage } from 'ai';
142
+ import { openai } from '@ai-sdk/openai'; // Or other provider
143
+
144
+ async function processUserRequest(initialMessages: CoreMessage[], systemPrompt: string): Promise<string> {
145
+ let messages: CoreMessage[] = [...initialMessages];
146
+ const maxIterations = 10; // Prevent infinite loops
147
+
148
+ for (let i = 0; i < maxIterations; i++) {
149
+ // --- 1. Call LLM for next action ---
150
+ const { textStream } = await streamText({
151
+ model: openai('gpt-4o-mini'), // Choose appropriate model
152
+ system: systemPrompt,
153
+ messages: messages,
154
+ // DO NOT pass 'tools' or 'toolChoice' here
155
+ });
156
+
157
+ // --- 2. Process Stream for Custom XML ---
158
+ let assistantResponse = ""; // Full raw text from this turn
159
+ let parsedAction: ParsedAction | null = null; // Result from XML parser
160
+
161
+ // Use a stateful streaming XML parser (see section 3.2)
162
+ const xmlParser = new StreamingXmlParser(['thinking', 'search', 'extract', 'query', 'attempt_completion']);
163
+
164
+ for await (const textDelta of textStream) {
165
+ assistantResponse += textDelta;
166
+ parsedAction = xmlParser.processChunk(textDelta);
167
+ if (parsedAction && (parsedAction.type === 'tool' || parsedAction.type === 'completion')) {
168
+ // Found a terminal action (tool call or completion), stop processing stream for this turn
169
+ // Note: A real implementation might need to drain the rest of the stream silently
170
+ // or handle the LLM potentially generating text *after* the XML block.
171
+ break;
172
+ }
173
+ // Handle 'thinking' block if needed (e.g., logging)
174
+ if (parsedAction && parsedAction.type === 'thinking') {
175
+ console.log("LLM Thinking:", parsedAction.content);
176
+ parsedAction = null; // Reset after logging thinking
177
+ }
178
+ }
179
+
180
+ // Ensure the parser is finalized after the stream ends
181
+ if (!parsedAction) {
182
+ parsedAction = xmlParser.finalize();
183
+ }
184
+
185
+ // Add raw assistant response to history
186
+ messages.push({ role: 'assistant', content: assistantResponse });
187
+
188
+ // --- 3. Analyze Parsed Action ---
189
+ if (!parsedAction || (parsedAction.type !== 'tool' && parsedAction.type !== 'completion')) {
190
+ // LLM failed to produce a valid tool/completion XML block
191
+ const errorFeedback = "Error: Response did not contain a valid XML action (<tool_name>...</tool_name> or <attempt_completion>...). Adhere strictly to the protocol.";
192
+ messages.push({ role: 'user', content: `<tool_result>Error: ${errorFeedback}</tool_result>` }); // Use tool_result structure for feedback
193
+ if (i === maxIterations - 1) throw new Error("Max iterations reached: LLM failed to provide valid action.");
194
+ continue; // Next iteration, hope LLM corrects
195
+ }
196
+
197
+ if (parsedAction.type === 'completion') {
198
+ // Task Complete
199
+ return parsedAction.result;
200
+ }
201
+
202
+ if (parsedAction.type === 'tool') {
203
+ // --- 4. Execute Tool ---
204
+ let toolOutput: string;
205
+ try {
206
+ // Add validation logic here based on parsedAction.params and tool schema
207
+ toolOutput = await executeTool(parsedAction.name, parsedAction.params);
208
+ } catch (error: any) {
209
+ toolOutput = `Error: Tool execution failed. ${error.message}`;
210
+ }
211
+
212
+ // --- 5. Feed Result Back ---
213
+ // Ensure output is XML-safe
214
+ const escapedOutput = toolOutput.replace(/[<>&'"]/g, (c: string) => {
215
+ return { '<': '<', '>': '>', '&': '&amp;', "'": '&apos;', '"': '"' }[c]!;
216
+ });
217
+ const resultMessageContent = `<tool_result tool_name="${parsedAction.name}">${escapedOutput}</tool_result>`;
218
+ messages.push({ role: 'user', content: resultMessageContent });
219
+
220
+ if (i === maxIterations - 1) throw new Error("Max iterations reached after last tool call.");
221
+ // Continue to next iteration
222
+ }
223
+ } // End loop
224
+
225
+ throw new Error("Agent loop finished unexpectedly (max iterations likely).");
226
+ }
227
+
228
+ // Placeholder types/functions
229
+ type ParsedAction =
230
+ | { type: 'tool'; name: string; params: Record<string, string> }
231
+ | { type: 'completion'; result: string }
232
+ | { type: 'thinking'; content: string };
233
+
234
+ declare class StreamingXmlParser {
235
+ constructor(knownTags: string[]);
236
+ processChunk(chunk: string): ParsedAction | null;
237
+ finalize(): ParsedAction | null;
238
+ }
239
+ declare function executeTool(name: string, params: Record<string, string>): Promise<string>;
240
+
241
+ ```
242
+
243
+ **3.2. Streaming XML Parsing (The Hard Part)**
244
+
245
+ Parsing XML reliably from a stream where tags can be split across arbitrary text chunks (`textDelta`) is non-trivial. Simple string searching or regex on the accumulating buffer is brittle.
246
+
247
+ **Required Approach: Stateful Parser**
248
+
249
+ 1. **Buffer:** Maintain a buffer of incoming text chunks.
250
+ 2. **State Machine:** Track the current parsing state (e.g., `OUTSIDE_TAG`, `INSIDE_THINKING`, `INSIDE_SEARCH_TAG`, `INSIDE_SEARCH_QUERY_PARAM`, `INSIDE_COMPLETION_TAG`, `INSIDE_RESULT_TAG`).
251
+ 3. **Tag Detection:** Use regex or string searching optimized for finding potential start (`<tag>`) and end (`</tag>`) tags within the buffer.
252
+ 4. **Accumulation:** When a known start tag is detected, change state and start accumulating the tag's content and parameters.
253
+ 5. **Completion:** When the corresponding end tag for the *current state* is detected:
254
+ * Extract the fully accumulated content/parameters since the start tag.
255
+ * Perform final parsing/validation on the complete block.
256
+ * Create the `ParsedAction` object.
257
+ * Clear the relevant part of the buffer.
258
+ * Reset state to `OUTSIDE_TAG`.
259
+ 6. **Parameter Parsing:** Once a complete tool tag block is found (e.g., `<search>...</search>`), parse its inner content to extract parameter tags (`<query>...</query>`) and their values.
260
+ 7. **Error Handling:** Handle cases like unexpected tags, mismatched tags, or the stream ending while inside a tag.
261
+
262
+ **Conceptual Pseudocode for `StreamingXmlParser.processChunk`:**
263
+
264
+ ```text
265
+ class StreamingXmlParser:
266
+ buffer = ""
267
+ state = "OUTSIDE" // e.g., OUTSIDE, IN_THINKING, IN_SEARCH, IN_SEARCH_QUERY
268
+ currentAction = null // Stores partially built action { type, name, params }
269
+ knownToolTags = ["search", "extract", ...]
270
+ allKnownTags = ["thinking", "attempt_completion", "result"] + knownToolTags + paramTags...
271
+
272
+ processChunk(chunk):
273
+ buffer += chunk
274
+ actionCompleted = null
275
+
276
+ while true: // Process buffer repeatedly until no more actions found in current buffer
277
+ foundActionThisPass = false
278
+ if state == "OUTSIDE":
279
+ // Check buffer for start tags <thinking>, <attempt_completion>, <search>, etc.
280
+ match = find_earliest_start_tag(buffer, allKnownTags)
281
+ if match:
282
+ // Consume buffer up to tag start
283
+ buffer = buffer.substring(match.index)
284
+ state = "IN_" + match.tagName.toUpperCase()
285
+ if match.tagName is a tool tag:
286
+ currentAction = { type: "tool", name: match.tagName, params: {} }
287
+ else if match.tagName == "thinking":
288
+ currentAction = { type: "thinking", content: "" }
289
+ else if match.tagName == "attempt_completion":
290
+ currentAction = { type: "completion", result: "" } // Need to find <result> later
291
+ // Consume the start tag itself
292
+ buffer = buffer.substring(match.tagLength)
293
+ foundActionThisPass = true
294
+ else:
295
+ break // No more start tags found in buffer for now
296
+
297
+ else if state == "IN_THINKING":
298
+ endTagIndex = buffer.indexOf("</thinking>")
299
+ if endTagIndex != -1:
300
+ currentAction.content = buffer.substring(0, endTagIndex) // Extract content
301
+ actionCompleted = currentAction // Finalize this action
302
+ buffer = buffer.substring(endTagIndex + len("</thinking>")) // Consume tag
303
+ state = "OUTSIDE"
304
+ currentAction = null
305
+ foundActionThisPass = true
306
+ else:
307
+ break // End tag not yet in buffer
308
+
309
+ else if state == "IN_SEARCH": // Example tool state
310
+ // Look for parameter tags <query>, <path> OR the end tag </search>
311
+ queryStart = buffer.indexOf("<query>")
312
+ pathStart = buffer.indexOf("<path>")
313
+ endSearch = buffer.indexOf("</search>")
314
+
315
+ // Find the earliest relevant tag index... (complex logic here)
316
+ earliestIndex = min_positive(queryStart, pathStart, endSearch)
317
+
318
+ if earliestIndex == endSearch:
319
+ // Found the end of the search tool call
320
+ actionCompleted = currentAction
321
+ buffer = buffer.substring(endSearch + len("</search>"))
322
+ state = "OUTSIDE"
323
+ currentAction = null
324
+ foundActionThisPass = true
325
+ else if earliestIndex == queryStart:
326
+ // Found a query parameter tag, transition state
327
+ state = "IN_SEARCH_QUERY"
328
+ buffer = buffer.substring(queryStart + len("<query>"))
329
+ foundActionThisPass = true
330
+ else if earliestIndex == pathStart:
331
+ // Found a path parameter tag...
332
+ state = "IN_SEARCH_PATH"
333
+ buffer = buffer.substring(pathStart + len("<path>"))
334
+ foundActionThisPass = true
335
+ else:
336
+ break // No relevant tags found yet
337
+
338
+ else if state == "IN_SEARCH_QUERY":
339
+ endQuery = buffer.indexOf("</query>")
340
+ if endQuery != -1:
341
+ currentAction.params["query"] = buffer.substring(0, endQuery) // Extract value
342
+ buffer = buffer.substring(endQuery + len("</query>"))
343
+ state = "IN_SEARCH" // Go back to looking for more params or end tag
344
+ foundActionThisPass = true
345
+ else:
346
+ break
347
+
348
+ // ... other states for other tools, params, completion, result ...
349
+
350
+ if not foundActionThisPass:
351
+ break // Nothing more to process in the buffer currently
352
+
353
+ return actionCompleted // Return completed action, or null if none finished
354
+ ```
355
+ **Note:** This pseudocode is highly simplified. A production implementation requires careful handling of edge cases, buffering, potential nesting (if allowed), and efficient searching. Consider using a dedicated streaming XML parsing library if available for your language, adapted for finding specific top-level tags.
356
+
357
+ **4. Tool Execution Function (`executeTool`)**
358
+
359
+ ```typescript
360
+ async function executeTool(name: string, params: Record<string, string>): Promise<string> {
361
+ console.log(`Executing tool: ${name}`, params);
362
+ try {
363
+ switch (name) {
364
+ case 'search':
365
+ // Validate params.query exists, etc.
366
+ const query = params.query;
367
+ if (!query) throw new Error("Missing required parameter: query");
368
+ const path = params.path || '.'; // Default path
369
+ // Call actual search implementation
370
+ const searchResults = await performCodeSearch(query, path);
371
+ return formatSearchResults(searchResults); // Return results as a string
372
+
373
+ case 'extract':
374
+ // Validate params.file_path
375
+ const filePath = params.file_path;
376
+ if (!filePath) throw new Error("Missing required parameter: file_path");
377
+ // Call actual extract implementation
378
+ const extractedCode = await performCodeExtraction(filePath);
379
+ return extractedCode; // Return code as string
380
+
381
+ // Add cases for other tools
382
+
383
+ default:
384
+ throw new Error(`Unknown tool name: ${name}`);
385
+ }
386
+ } catch (error: any) {
387
+ console.error(`Tool ${name} failed:`, error);
388
+ // Re-throw or format error string for LLM
389
+ throw new Error(`Tool ${name} execution failed: ${error.message}`);
390
+ }
391
+ }
392
+
393
+ // Placeholder implementations
394
+ declare function performCodeSearch(query: string, path: string): Promise<any>;
395
+ declare function formatSearchResults(results: any): string;
396
+ declare function performCodeExtraction(filePath: string): Promise<string>;
397
+ ```
398
+
399
+ **5. State and Error Handling Summary**
400
+
401
+ * **State:** The `messages` array holds the complete interaction history, including user prompts, raw assistant responses (containing XML), and formatted `<tool_result>` messages (acting as user-role feedback).
402
+ * **LLM Format Errors:** Detected when `parsedAction` is null after stream processing. Feedback sent in `<tool_result>Error: ...</tool_result>`.
403
+ * **XML Parse Errors:** Should be caught by the `StreamingXmlParser` and potentially reported back similarly.
404
+ * **Tool Validation Errors:** Caught before `executeTool` call. Feedback sent in `<tool_result>Error: Invalid parameters...</tool_result>`.
405
+ * **Tool Execution Errors:** Caught by `executeTool`. Error message propagated back in `<tool_result>Error: Tool execution failed...</tool_result>`.
406
+
407
+ This detailed guide provides the technical foundation for building agentic flows using a custom XML protocol, addressing the complexities of stream parsing and strict LLM instruction.
@@ -0,0 +1,118 @@
1
+ ---
2
+ title: Probe Blog
3
+ description: Latest news, updates, and insights about Probe - the AI-friendly code search tool
4
+ layout: doc
5
+ ---
6
+
7
+ # Probe Blog
8
+
9
+ Welcome to the Probe blog! Here you'll find the latest news, updates, and insights about Probe, the AI-friendly code search tool designed to power the next generation of AI coding assistants.
10
+
11
+ ## Latest Posts
12
+
13
+ <div class="blog-post-list">
14
+ <div class="blog-post-card">
15
+ <h3><a href="/blog/v0.6.0-release">Probe v0.6.0 Release: Enhanced AI Integration and Code Editing Capabilities</a></h3>
16
+ <div class="blog-post-meta">
17
+ <span class="blog-post-date">July 17, 2025</span>
18
+ <span class="blog-post-author">By Probe Team</span>
19
+ </div>
20
+ <p>Announcing Probe v0.6.0 with the new implement tool, enhanced GitHub Actions integration, crates.io publishing, and major improvements for AI coding assistants.</p>
21
+ <div class="blog-post-tags">
22
+ <span class="blog-post-tag">release</span>
23
+ <span class="blog-post-tag">v0.6.0</span>
24
+ <span class="blog-post-tag">ai-integration</span>
25
+ <span class="blog-post-tag">code-editing</span>
26
+ <span class="blog-post-tag">github-actions</span>
27
+ <span class="blog-post-tag">crates-io</span>
28
+ </div>
29
+ <a href="/blog/v0.6.0-release" class="blog-post-read-more">Read More →</a>
30
+ </div>
31
+
32
+ <div class="blog-post-card">
33
+ <h3><a href="/blog/agentic-flow-custom-xml-protocol">Technical Guide: Agentic Flow via Custom XML Protocol</a></h3>
34
+ <div class="blog-post-meta">
35
+ <span class="blog-post-date">July 4, 2025</span>
36
+ <span class="blog-post-author">By Probe Team</span>
37
+ </div>
38
+ <p>Learn how to implement agentic AI flows using a custom XML protocol for reliable tool interactions.</p>
39
+ <div class="blog-post-tags">
40
+ <span class="blog-post-tag">agentic-ai</span>
41
+ <span class="blog-post-tag">xml-protocol</span>
42
+ <span class="blog-post-tag">tool-use</span>
43
+ <span class="blog-post-tag">llm</span>
44
+ <span class="blog-post-tag">technical-guide</span>
45
+ </div>
46
+ <a href="/blog/agentic-flow-custom-xml-protocol" class="blog-post-read-more">Read More →</a>
47
+ </div>
48
+ </div>
49
+
50
+ <style>
51
+ .blog-post-list {
52
+ /* display: grid; */
53
+ /* grid-template-columns: repeat(auto-fill, minmax(300px, 1fr)); */
54
+ /* gap: 2rem; */
55
+ /* margin-top: 2rem; */
56
+ }
57
+
58
+ .blog-post-card {
59
+ margin-top: 1em;
60
+ border: 1px solid var(--vp-c-divider);
61
+ border-radius: 8px;
62
+ padding: 1.5rem;
63
+ transition: transform 0.2s, box-shadow 0.2s;
64
+ }
65
+
66
+ .blog-post-card:hover {
67
+ transform: translateY(-5px);
68
+ box-shadow: 0 5px 15px rgba(0, 0, 0, 0.1);
69
+ }
70
+
71
+ .blog-post-card h3 {
72
+ margin-top: 0;
73
+ font-size: 1.3rem;
74
+ }
75
+
76
+ .blog-post-card h3 a {
77
+ color: var(--vp-c-brand);
78
+ text-decoration: none;
79
+ }
80
+
81
+ .blog-post-meta {
82
+ display: flex;
83
+ flex-wrap: wrap;
84
+ gap: 1rem;
85
+ margin-bottom: 1rem;
86
+ font-size: 0.9rem;
87
+ color: var(--vp-c-text-2);
88
+ }
89
+
90
+ .blog-post-tags {
91
+ display: flex;
92
+ flex-wrap: wrap;
93
+ gap: 0.5rem;
94
+ margin-top: 1rem;
95
+ }
96
+
97
+ .blog-post-tag {
98
+ font-size: 0.8rem;
99
+ padding: 0.2rem 0.6rem;
100
+ border-radius: 4px;
101
+ background-color: var(--vp-c-brand-soft);
102
+ color: var(--vp-c-brand-dark);
103
+ }
104
+
105
+ .blog-post-read-more {
106
+ display: inline-block;
107
+ margin-top: 1rem;
108
+ color: var(--vp-c-brand);
109
+ font-weight: 500;
110
+ text-decoration: none;
111
+ }
112
+
113
+ @media (max-width: 768px) {
114
+ .blog-post-list {
115
+ grid-template-columns: 1fr;
116
+ }
117
+ }
118
+ </style>