@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,335 @@
1
+ // Example of using the probe npm package in Node.js
2
+
3
+ import { search, query, extract, tools } from '@probelabs/probe';
4
+
5
+ // Basic search example
6
+ async function basicSearchExample() {
7
+ console.log('=== Basic Search Example ===');
8
+
9
+ try {
10
+ const results = await search({
11
+ path: '/path/to/your/project',
12
+ query: 'function',
13
+ maxResults: 5
14
+ });
15
+
16
+ console.log('Search results:');
17
+ console.log(results);
18
+ } catch (error) {
19
+ console.error('Search error:', error);
20
+ }
21
+ }
22
+
23
+ // Advanced search with multiple options
24
+ async function advancedSearchExample() {
25
+ console.log('\n=== Advanced Search Example ===');
26
+
27
+ try {
28
+ const results = await search({
29
+ path: '/path/to/your/project',
30
+ query: 'config AND (parse OR tokenize)',
31
+ ignore: ['node_modules', 'dist'],
32
+ reranker: 'hybrid',
33
+ frequencySearch: true,
34
+ maxResults: 10,
35
+ maxTokens: 20000,
36
+ allowTests: false
37
+ });
38
+
39
+ console.log('Advanced search results:');
40
+ console.log(results);
41
+ } catch (error) {
42
+ console.error('Advanced search error:', error);
43
+ }
44
+ }
45
+
46
+ // Query for specific code structures
47
+ async function queryExample() {
48
+ console.log('\n=== Query Example ===');
49
+
50
+ try {
51
+ // Find all JavaScript functions
52
+ const jsResults = await query({
53
+ path: '/path/to/your/project',
54
+ pattern: 'function $NAME($$$PARAMS) $$$BODY',
55
+ language: 'javascript',
56
+ maxResults: 5
57
+ });
58
+
59
+ console.log('JavaScript functions:');
60
+ console.log(jsResults);
61
+
62
+ // Find all Rust structs
63
+ const rustResults = await query({
64
+ path: '/path/to/your/project',
65
+ pattern: 'struct $NAME $$$BODY',
66
+ language: 'rust',
67
+ maxResults: 5
68
+ });
69
+
70
+ console.log('Rust structs:');
71
+ console.log(rustResults);
72
+ } catch (error) {
73
+ console.error('Query error:', error);
74
+ }
75
+ }
76
+
77
+ // Extract code blocks from specific files
78
+ async function extractExample() {
79
+ console.log('\n=== Extract Example ===');
80
+
81
+ try {
82
+ const results = await extract({
83
+ files: [
84
+ '/path/to/your/project/src/main.js',
85
+ '/path/to/your/project/src/utils.js:42' // Extract from line 42
86
+ ],
87
+ contextLines: 2,
88
+ format: 'markdown'
89
+ });
90
+
91
+ console.log('Extracted code:');
92
+ console.log(results);
93
+ } catch (error) {
94
+ console.error('Extract error:', error);
95
+ }
96
+ }
97
+
98
+ // Practical example: Find and analyze all API endpoints
99
+ async function findApiEndpoints() {
100
+ console.log('\n=== Find API Endpoints Example ===');
101
+
102
+ try {
103
+ // Search for route definitions in Express.js
104
+ const expressRoutes = await search({
105
+ path: '/path/to/your/project',
106
+ query: 'app.get OR app.post OR app.put OR app.delete',
107
+ maxResults: 20
108
+ });
109
+
110
+ console.log('Express.js routes:');
111
+ console.log(expressRoutes);
112
+
113
+ // Search for controller methods in a Spring Boot application
114
+ const springControllers = await query({
115
+ path: '/path/to/your/project',
116
+ pattern: '@RequestMapping($$$PARAMS) $$$BODY',
117
+ language: 'java',
118
+ maxResults: 20
119
+ });
120
+
121
+ console.log('Spring Boot controllers:');
122
+ console.log(springControllers);
123
+ } catch (error) {
124
+ console.error('API endpoint search error:', error);
125
+ }
126
+ }
127
+
128
+ // Practical example: Generate documentation from code comments
129
+ async function generateDocumentation() {
130
+ console.log('\n=== Generate Documentation Example ===');
131
+
132
+ try {
133
+ // Search for JSDoc comments
134
+ const jsdocComments = await search({
135
+ path: '/path/to/your/project',
136
+ query: '/**',
137
+ maxResults: 50
138
+ });
139
+
140
+ console.log('JSDoc comments:');
141
+ console.log(jsdocComments);
142
+
143
+ // Process the comments to generate documentation
144
+ const docs = processJsDocComments(jsdocComments);
145
+ console.log('Generated documentation:', docs);
146
+ } catch (error) {
147
+ console.error('Documentation generation error:', error);
148
+ }
149
+ }
150
+
151
+ // Helper function for the documentation example
152
+ function processJsDocComments(comments) {
153
+ // This would parse the JSDoc comments and convert them to documentation
154
+ return "Documentation would be generated here";
155
+ }
156
+
157
+ // Practical example: Find unused code
158
+ async function findUnusedCode() {
159
+ console.log('\n=== Find Unused Code Example ===');
160
+
161
+ try {
162
+ // First, find all function definitions
163
+ const functionDefs = await query({
164
+ path: '/path/to/your/project',
165
+ pattern: 'function $NAME($$$PARAMS) $$$BODY',
166
+ language: 'javascript',
167
+ maxResults: 100
168
+ });
169
+
170
+ // Extract function names
171
+ const functionNames = extractFunctionNames(functionDefs);
172
+
173
+ // For each function, search for its usage
174
+ const unusedFunctions = [];
175
+
176
+ for (const name of functionNames) {
177
+ const usages = await search({
178
+ path: '/path/to/your/project',
179
+ query: name,
180
+ maxResults: 2 // We only need to know if it's used at least once
181
+ });
182
+
183
+ // If only one result (the definition itself), it's unused
184
+ if (countOccurrences(usages) <= 1) {
185
+ unusedFunctions.push(name);
186
+ }
187
+ }
188
+
189
+ console.log('Potentially unused functions:');
190
+ console.log(unusedFunctions);
191
+ } catch (error) {
192
+ console.error('Unused code search error:', error);
193
+ }
194
+ }
195
+
196
+ // Helper functions for the unused code example
197
+ function extractFunctionNames(functionDefs) {
198
+ // This would extract function names from the query results
199
+ return ["someFunction", "anotherFunction"];
200
+ }
201
+
202
+ function countOccurrences(searchResults) {
203
+ // This would count occurrences in the search results
204
+ return 1;
205
+ }
206
+
207
+ // Example of using AI tools with Vercel AI SDK
208
+ async function vercelAiToolsExample() {
209
+ console.log('\n=== Vercel AI SDK Tools Example ===');
210
+
211
+ try {
212
+ // Import necessary modules (in a real application)
213
+ // import { generateText } from 'ai';
214
+ // import { createOpenAI } from '@ai-sdk/openai';
215
+
216
+ console.log('Using Vercel AI SDK tools:');
217
+ console.log('- searchTool:', typeof tools.searchTool);
218
+ console.log('- queryTool:', typeof tools.queryTool);
219
+ console.log('- extractTool:', typeof tools.extractTool);
220
+
221
+ // Example of how to use the tools with Vercel AI SDK
222
+ console.log('\nExample usage with Vercel AI SDK:');
223
+ console.log(`
224
+ async function chatWithAI(userMessage) {
225
+ const result = await generateText({
226
+ model: provider(modelName),
227
+ messages: [{ role: 'user', content: userMessage }],
228
+ system: "You are a code intelligence assistant. Use the provided tools to search and analyze code.",
229
+ tools: {
230
+ search: tools.searchTool,
231
+ query: tools.queryTool,
232
+ extract: tools.extractTool
233
+ },
234
+ maxSteps: 15,
235
+ temperature: 0.7
236
+ });
237
+
238
+ return result.text;
239
+ }`);
240
+ } catch (error) {
241
+ console.error('Vercel AI SDK tools error:', error);
242
+ }
243
+ }
244
+
245
+ // Example of using AI tools with LangChain
246
+ async function langchainToolsExample() {
247
+ console.log('\n=== LangChain Tools Example ===');
248
+
249
+ try {
250
+ // Create the LangChain tools
251
+ const searchTool = tools.createSearchTool();
252
+ const queryTool = tools.createQueryTool();
253
+ const extractTool = tools.createExtractTool();
254
+
255
+ console.log('Created LangChain tools:');
256
+ console.log('- searchTool:', typeof searchTool);
257
+ console.log('- queryTool:', typeof queryTool);
258
+ console.log('- extractTool:', typeof extractTool);
259
+
260
+ // Example of how to use the tools with LangChain
261
+ console.log('\nExample usage with LangChain:');
262
+ console.log(`
263
+ async function chatWithAI(userMessage) {
264
+ const model = new ChatOpenAI({
265
+ modelName: "gpt-4o",
266
+ temperature: 0.7
267
+ }).withTools([searchTool, queryTool, extractTool]);
268
+
269
+ const result = await model.invoke([
270
+ { role: "system", content: "You are a code intelligence assistant. Use the provided tools to search and analyze code." },
271
+ { role: "user", content: userMessage }
272
+ ]);
273
+
274
+ return result.content;
275
+ }`);
276
+ } catch (error) {
277
+ console.error('LangChain tools error:', error);
278
+ }
279
+ }
280
+
281
+ // Example of using the DEFAULT_SYSTEM_MESSAGE
282
+ async function systemMessageExample() {
283
+ console.log('\n=== System Message Example ===');
284
+
285
+ try {
286
+ console.log('DEFAULT_SYSTEM_MESSAGE:', typeof tools.DEFAULT_SYSTEM_MESSAGE);
287
+
288
+ // Example of how to use the DEFAULT_SYSTEM_MESSAGE
289
+ console.log('\nExample usage of DEFAULT_SYSTEM_MESSAGE:');
290
+ console.log(`
291
+ // Use the default system message in your AI application
292
+ const systemMessage = tools.DEFAULT_SYSTEM_MESSAGE;
293
+
294
+ // Example with Vercel AI SDK
295
+ const result = await generateText({
296
+ model: provider(modelName),
297
+ messages: [{ role: 'user', content: userMessage }],
298
+ system: tools.DEFAULT_SYSTEM_MESSAGE,
299
+ tools: {
300
+ search: tools.searchTool,
301
+ query: tools.queryTool,
302
+ extract: tools.extractTool
303
+ }
304
+ });
305
+
306
+ // Example with LangChain
307
+ const model = new ChatOpenAI({
308
+ modelName: "gpt-4o",
309
+ temperature: 0.7
310
+ }).withTools([searchTool, queryTool, extractTool]);
311
+
312
+ const result = await model.invoke([
313
+ { role: "system", content: tools.DEFAULT_SYSTEM_MESSAGE },
314
+ { role: "user", content: userMessage }
315
+ ]);`);
316
+ } catch (error) {
317
+ console.error('System message error:', error);
318
+ }
319
+ }
320
+
321
+ // Run all examples
322
+ async function runAllExamples() {
323
+ await basicSearchExample();
324
+ await advancedSearchExample();
325
+ await queryExample();
326
+ await extractExample();
327
+ await findApiEndpoints();
328
+ await generateDocumentation();
329
+ await findUnusedCode();
330
+ await vercelAiToolsExample();
331
+ await langchainToolsExample();
332
+ await systemMessageExample();
333
+ }
334
+
335
+ runAllExamples().catch(console.error);
@@ -0,0 +1,117 @@
1
+ #!/usr/bin/env node
2
+
3
+ /**
4
+ * Demonstration of ProbeAgent with Claude Code integration
5
+ * Shows auto-fallback and provider selection
6
+ */
7
+
8
+ import { ProbeAgent } from '../src/agent/ProbeAgent.js';
9
+ import chalk from 'chalk';
10
+
11
+ console.log(chalk.blue('=' .repeat(70)));
12
+ console.log(chalk.blue(' CLAUDE CODE INTEGRATION DEMONSTRATION'));
13
+ console.log(chalk.blue('=' .repeat(70) + '\n'));
14
+
15
+ // Custom persona for code review
16
+ const codeReviewerPersona = `You are an expert code reviewer specializing in JavaScript/TypeScript.
17
+ Your role is to:
18
+ - Analyze code quality and patterns
19
+ - Identify potential bugs or issues
20
+ - Suggest improvements
21
+ - Focus on best practices and maintainability`;
22
+
23
+ async function demonstrateProvider(providerName, persona, question) {
24
+ console.log(chalk.cyan(`\nšŸ”§ Testing ${providerName || 'Auto-Detect'} Provider\n`));
25
+ console.log(chalk.gray('─'.repeat(60)));
26
+
27
+ try {
28
+ const agentOptions = {
29
+ customPrompt: persona,
30
+ maxIterations: 3,
31
+ debug: false
32
+ };
33
+
34
+ if (providerName) {
35
+ agentOptions.provider = providerName;
36
+ }
37
+
38
+ const agent = new ProbeAgent(agentOptions);
39
+
40
+ await agent.initialize();
41
+
42
+ console.log(chalk.green(`āœ… Initialized (provider: ${agent.clientApiProvider || 'auto'})`));
43
+
44
+ let toolCalls = [];
45
+ if (agent.events) {
46
+ agent.events.on('toolCall', (event) => {
47
+ if (event.status === 'started') {
48
+ console.log(chalk.yellow(` Tool: ${event.name}`));
49
+ toolCalls.push(event.name);
50
+ }
51
+ });
52
+ }
53
+
54
+ console.log(chalk.magenta(`\nā“ Question: ${question}`));
55
+ const startTime = Date.now();
56
+ const response = await agent.answer(question);
57
+ const duration = ((Date.now() - startTime) / 1000).toFixed(2);
58
+
59
+ console.log(chalk.green(`\nāœ… Response received (${duration}s)`));
60
+ console.log(chalk.white(response.substring(0, 300) + '...'));
61
+
62
+ if (toolCalls.length > 0) {
63
+ console.log(chalk.cyan(`\nšŸ“Š Tools used: ${toolCalls.join(', ')}`));
64
+ }
65
+
66
+ } catch (error) {
67
+ console.error(chalk.red(`āŒ Error: ${error.message}`));
68
+ }
69
+ }
70
+
71
+ async function main() {
72
+ console.log(chalk.yellow('This demo shows Claude Code integration features:\n'));
73
+ console.log(chalk.gray(' • Auto-fallback when no API keys present'));
74
+ console.log(chalk.gray(' • Explicit provider selection'));
75
+ console.log(chalk.gray(' • Custom personas and system prompts'));
76
+ console.log(chalk.gray(' • Tool event extraction\n'));
77
+
78
+ // Demo 1: Auto-detect (will use Claude Code if no API keys)
79
+ console.log(chalk.blue('\n1ļøāƒ£ AUTO-DETECT MODE'));
80
+ console.log(chalk.gray('─'.repeat(60)));
81
+ await demonstrateProvider(
82
+ null, // Auto-detect
83
+ codeReviewerPersona,
84
+ 'Find error handling patterns in this codebase'
85
+ );
86
+
87
+ // Demo 2: Explicit Claude Code
88
+ console.log(chalk.blue('\n\n2ļøāƒ£ EXPLICIT CLAUDE CODE PROVIDER'));
89
+ console.log(chalk.gray('─'.repeat(60)));
90
+ await demonstrateProvider(
91
+ 'claude-code',
92
+ codeReviewerPersona,
93
+ 'Analyze the ProbeAgent class structure'
94
+ );
95
+
96
+ console.log(chalk.blue('\n\n' + '=' .repeat(70)));
97
+ console.log(chalk.green('✨ Demonstration Complete!\n'));
98
+
99
+ console.log(chalk.cyan('Key Features:'));
100
+ console.log(chalk.gray(' • Single "provider" parameter for all engines'));
101
+ console.log(chalk.gray(' • Auto-detection when provider not specified'));
102
+ console.log(chalk.gray(' • Custom system prompts and personas'));
103
+ console.log(chalk.gray(' • Seamless tool integration'));
104
+
105
+ console.log(chalk.cyan('\nUsage Examples:'));
106
+ console.log(chalk.gray(' # Auto-detect (uses API keys or claude command)'));
107
+ console.log(chalk.gray(' const agent = new ProbeAgent({ allowedFolders: ["/path"] })'));
108
+ console.log(chalk.gray('\n # Explicit Claude Code'));
109
+ console.log(chalk.gray(' const agent = new ProbeAgent({ provider: "claude-code" })'));
110
+ console.log(chalk.gray('\n # CLI usage'));
111
+ console.log(chalk.gray(' node probe-agent-cli.js --provider claude-code "your question"\n'));
112
+ }
113
+
114
+ main().catch(error => {
115
+ console.error(chalk.red('Fatal error:'), error);
116
+ process.exit(1);
117
+ });
@@ -0,0 +1,113 @@
1
+ #!/usr/bin/env node
2
+
3
+ /**
4
+ * CLI for testing ProbeAgent with different providers
5
+ * Usage: node probe-agent-cli.js [--provider vercel|claude-code] "your question"
6
+ */
7
+
8
+ import { ProbeAgent } from '../src/agent/ProbeAgent.js';
9
+ import chalk from 'chalk';
10
+
11
+ // Parse command line arguments
12
+ const args = process.argv.slice(2);
13
+ // Detect provider from environment (claude-code auto-detects if no API keys)
14
+ let provider = process.env.USE_CLAUDE_CODE === 'true' ? 'claude-code' : null;
15
+ let question = '';
16
+
17
+ // Parse --provider flag (overrides environment)
18
+ if (args[0] === '--provider' && args[1]) {
19
+ provider = args[1];
20
+ question = args.slice(2).join(' ');
21
+ } else {
22
+ question = args.join(' ');
23
+ }
24
+
25
+ // Default question if none provided
26
+ if (!question) {
27
+ question = "Find all async functions in this codebase that handle errors";
28
+ }
29
+
30
+ // Color configuration
31
+ const colors = {
32
+ provider: chalk.cyan,
33
+ tool: chalk.yellow,
34
+ result: chalk.green,
35
+ error: chalk.red,
36
+ debug: chalk.gray,
37
+ prompt: chalk.magenta,
38
+ text: chalk.white
39
+ };
40
+
41
+ const displayProvider = provider || 'auto-detect';
42
+ console.log(colors.provider(`\nšŸš€ Starting Probe Agent (provider: ${displayProvider})\n`));
43
+ console.log(colors.prompt(`Question: "${question}"\n`));
44
+
45
+ // Check for API key (not required for Claude Code)
46
+ if (provider === 'claude-code') {
47
+ console.log(colors.debug('Using Claude Code provider (requires claude command installed)'));
48
+ } else if (!provider && !process.env.ANTHROPIC_API_KEY && !process.env.OPENAI_API_KEY) {
49
+ console.log(colors.debug('No API keys found - will attempt Claude Code auto-fallback'));
50
+ }
51
+
52
+ async function runAgent(providerName) {
53
+ const startTime = Date.now();
54
+
55
+ try {
56
+ // Create agent - provider is optional (auto-detects)
57
+ const agentOptions = {
58
+ debug: true,
59
+ allowedFolders: [process.cwd()],
60
+ maxIterations: 5
61
+ };
62
+
63
+ // Set provider if specified (otherwise auto-detect)
64
+ if (providerName) {
65
+ agentOptions.provider = providerName;
66
+ }
67
+
68
+ const agent = new ProbeAgent(agentOptions);
69
+
70
+ console.log(colors.text('\nšŸ“Š Initializing agent...\n'));
71
+
72
+ await agent.initialize();
73
+
74
+ // Track tool calls
75
+ let toolCallCount = 0;
76
+ if (agent.events) {
77
+ agent.events.on('toolCall', (event) => {
78
+ toolCallCount++;
79
+ if (event.status === 'started') {
80
+ console.log(colors.tool(`\nšŸ”§ Tool ${toolCallCount}: ${event.name}`));
81
+ if (event.args && Object.keys(event.args).length > 0) {
82
+ console.log(colors.debug(` Args: ${JSON.stringify(event.args, null, 2).substring(0, 200)}...`));
83
+ }
84
+ }
85
+ });
86
+ }
87
+
88
+ console.log(colors.text('šŸ¤” Querying agent...\n'));
89
+
90
+ const response = await agent.answer(question);
91
+
92
+ console.log(colors.result('\nāœ… Response:\n'));
93
+ console.log(colors.text(response));
94
+ console.log(colors.text('\n' + '─'.repeat(80)));
95
+
96
+ const duration = ((Date.now() - startTime) / 1000).toFixed(2);
97
+ console.log(colors.debug(`\nā±ļø Duration: ${duration}s`));
98
+ console.log(colors.debug(`šŸ”§ Tools used: ${toolCallCount}`));
99
+ console.log(colors.provider(`šŸš€ Provider: ${agent.clientApiProvider || 'auto-detected'}\n`));
100
+
101
+ } catch (error) {
102
+ console.error(colors.error('\nāŒ Error:'), error.message);
103
+ if (error.stack) {
104
+ console.error(colors.debug(error.stack));
105
+ }
106
+ process.exit(1);
107
+ }
108
+ }
109
+
110
+ runAgent(provider).catch(error => {
111
+ console.error(colors.error('Fatal error:'), error);
112
+ process.exit(1);
113
+ });
@@ -0,0 +1,114 @@
1
+ #!/usr/bin/env node
2
+
3
+ /**
4
+ * Test script to verify edit and create tools are available with --allow-edit flag
5
+ */
6
+
7
+ import { ProbeAgent } from '../src/agent/ProbeAgent.js';
8
+ import { join } from 'path';
9
+ import { tmpdir } from 'os';
10
+ import { promises as fs } from 'fs';
11
+ import { existsSync } from 'fs';
12
+
13
+ async function testAgentWithEdit() {
14
+ const testDir = join(tmpdir(), 'probe-agent-edit-test');
15
+ await fs.mkdir(testDir, { recursive: true });
16
+
17
+ console.log('Testing ProbeAgent with edit tools...\n');
18
+ console.log(`Test directory: ${testDir}\n`);
19
+
20
+ try {
21
+ // Test 1: Without --allow-edit flag
22
+ console.log('1. Testing WITHOUT --allow-edit flag:');
23
+ const agentWithoutEdit = new ProbeAgent({
24
+ path: testDir,
25
+ allowedFolders: [testDir],
26
+ allowEdit: false, // Explicitly disabled
27
+ verbose: true
28
+ });
29
+
30
+ const tools1 = agentWithoutEdit.getTools();
31
+ console.log('Available tools without --allow-edit:', Object.keys(tools1));
32
+ console.log('Has editTool?', 'editTool' in tools1);
33
+ console.log('Has createTool?', 'createTool' in tools1);
34
+ console.log();
35
+
36
+ // Test 2: With --allow-edit flag
37
+ console.log('2. Testing WITH --allow-edit flag:');
38
+ const agentWithEdit = new ProbeAgent({
39
+ path: testDir,
40
+ allowedFolders: [testDir],
41
+ allowEdit: true, // Enabled
42
+ verbose: true
43
+ });
44
+
45
+ const tools2 = agentWithEdit.getTools();
46
+ console.log('Available tools with --allow-edit:', Object.keys(tools2));
47
+ console.log('Has editTool?', 'editTool' in tools2);
48
+ console.log('Has createTool?', 'createTool' in tools2);
49
+ console.log();
50
+
51
+ // Test 3: Actually use the tools if available
52
+ if (tools2.editTool && tools2.createTool) {
53
+ console.log('3. Testing actual tool usage through agent:');
54
+
55
+ // Create a file
56
+ console.log('Creating test.txt...');
57
+ const createResult = await tools2.createTool.execute({
58
+ file_path: join(testDir, 'test.txt'),
59
+ content: 'Hello from ProbeAgent!'
60
+ });
61
+ console.log('Create success:', createResult.success);
62
+
63
+ // Edit the file
64
+ console.log('Editing test.txt...');
65
+ const editResult = await tools2.editTool.execute({
66
+ file_path: join(testDir, 'test.txt'),
67
+ old_string: 'Hello from ProbeAgent!',
68
+ new_string: 'Hello from ProbeAgent with Edit tools!'
69
+ });
70
+ console.log('Edit success:', editResult.success);
71
+
72
+ // Verify the content
73
+ const content = await fs.readFile(join(testDir, 'test.txt'), 'utf-8');
74
+ console.log('Final content:', content);
75
+ console.log();
76
+ }
77
+
78
+ // Test 4: Test tool definitions
79
+ console.log('4. Testing tool definitions:');
80
+ const toolDefinitions = agentWithEdit.getToolDefinitions();
81
+ console.log('Available tool definitions:', toolDefinitions.length);
82
+ const hasEditDef = toolDefinitions.some(def => def.includes('## edit'));
83
+ const hasCreateDef = toolDefinitions.some(def => def.includes('## create'));
84
+ console.log('Has edit definition?', hasEditDef);
85
+ console.log('Has create definition?', hasCreateDef);
86
+ console.log();
87
+
88
+ // Test 5: Test with a simple prompt
89
+ console.log('5. Testing with a simple prompt (this would normally call the AI):');
90
+ console.log('Agent is configured with:');
91
+ console.log('- allowEdit:', agentWithEdit.config.allowEdit);
92
+ console.log('- allowedFolders:', agentWithEdit.config.allowedFolders);
93
+ console.log('- Available tools:', Object.keys(agentWithEdit.getTools()));
94
+ console.log();
95
+
96
+ // Clean up
97
+ console.log('Cleaning up...');
98
+ await fs.rm(testDir, { recursive: true, force: true });
99
+ console.log('\nāœ… All tests completed successfully!');
100
+ console.log('\nSummary:');
101
+ console.log('- Edit and Create tools are NOT available without --allow-edit flag');
102
+ console.log('- Edit and Create tools ARE available with --allow-edit flag');
103
+ console.log('- Tools can be executed successfully when enabled');
104
+
105
+ } catch (error) {
106
+ console.error('Test failed:', error);
107
+ // Clean up on error
108
+ await fs.rm(testDir, { recursive: true, force: true }).catch(() => {});
109
+ process.exit(1);
110
+ }
111
+ }
112
+
113
+ // Run the test
114
+ testAgentWithEdit().catch(console.error);