@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,52 @@
1
+ /** @type {import('jest').Config} */
2
+ export default {
3
+ transform: {},
4
+
5
+ // Test environment
6
+ testEnvironment: 'node',
7
+
8
+ // Test file patterns - run stable test files
9
+ testMatch: [
10
+ '**/tests/**/*.test.js',
11
+ '**/src/agent/acp/tools.test.js',
12
+ '**/src/agent/acp/connection.test.js',
13
+ '**/src/agent/acp/types.test.js'
14
+ ],
15
+
16
+ // Coverage configuration
17
+ collectCoverageFrom: [
18
+ 'src/**/*.js',
19
+ '!src/**/*.test.js',
20
+ '!src/test-*.js',
21
+ '!**/node_modules/**',
22
+ '!**/build/**',
23
+ '!**/dist/**'
24
+ ],
25
+
26
+ // Coverage thresholds
27
+ coverageThreshold: {
28
+ global: {
29
+ branches: 70,
30
+ functions: 70,
31
+ lines: 70,
32
+ statements: 70
33
+ }
34
+ },
35
+
36
+ // Coverage reporters
37
+ coverageReporters: [
38
+ 'text',
39
+ 'lcov',
40
+ 'html'
41
+ ],
42
+
43
+ // Setup files
44
+ setupFilesAfterEnv: ['<rootDir>/tests/setup.js'],
45
+
46
+
47
+ // Verbose output
48
+ verbose: true,
49
+
50
+ // Timeout for tests
51
+ testTimeout: 10000
52
+ };
@@ -0,0 +1,117 @@
1
+ {
2
+ "name": "@probelabs/probe",
3
+ "version": "0.6.0-rc88",
4
+ "description": "Node.js wrapper for the probe code search tool",
5
+ "main": "src/index.js",
6
+ "module": "src/index.js",
7
+ "types": "index.d.ts",
8
+ "type": "module",
9
+ "exports": {
10
+ ".": {
11
+ "types": "./index.d.ts",
12
+ "import": "./src/index.js",
13
+ "require": "./cjs/index.cjs"
14
+ },
15
+ "./agent": {
16
+ "types": "./src/agent/ProbeAgent.d.ts",
17
+ "import": "./src/agent/ProbeAgent.js",
18
+ "require": "./cjs/agent/ProbeAgent.cjs"
19
+ },
20
+ "./telemetry": {
21
+ "import": "./src/agent/simpleTelemetry.js",
22
+ "require": "./cjs/agent/simpleTelemetry.cjs"
23
+ },
24
+ "./agent/mcp": {
25
+ "import": "./src/agent/mcp/index.js"
26
+ },
27
+ "./agent/imageConfig": {
28
+ "import": "./src/agent/imageConfig.js"
29
+ }
30
+ },
31
+ "bin": {
32
+ "probe": "bin/probe"
33
+ },
34
+ "files": [
35
+ "src/**/*",
36
+ "cjs/**/*",
37
+ "*.d.ts",
38
+ "src/**/*.d.ts",
39
+ "bin/probe",
40
+ "bin/probe-binary",
41
+ "bin/probe.exe",
42
+ "bin/.gitkeep",
43
+ "bin/binaries/*.tar.gz",
44
+ "bin/binaries/*.zip",
45
+ "scripts/postinstall.js",
46
+ "build/**/*",
47
+ "MERMAID_SUPPORT_SUMMARY.md",
48
+ "GITHUB_MERMAID_COMPATIBILITY.md"
49
+ ],
50
+ "scripts": {
51
+ "postinstall": "node scripts/postinstall.js",
52
+ "build:mcp": "node scripts/build-mcp.cjs",
53
+ "build:agent": "node scripts/build-agent.cjs",
54
+ "build:types": "echo 'TypeScript definitions already manually created'",
55
+ "build:cjs": "node scripts/build-cjs.js",
56
+ "build": "npm run build:types && npm run build:cjs && npm run build:mcp && npm run build:agent",
57
+ "prepack": "npm run build",
58
+ "test": "cross-env NODE_OPTIONS=--experimental-vm-modules jest",
59
+ "test:watch": "cross-env NODE_OPTIONS=--experimental-vm-modules jest --watch",
60
+ "test:coverage": "cross-env NODE_OPTIONS=--experimental-vm-modules jest --coverage",
61
+ "test:verbose": "cross-env NODE_OPTIONS=--experimental-vm-modules jest --verbose"
62
+ },
63
+ "keywords": [
64
+ "probe",
65
+ "code-search",
66
+ "search",
67
+ "ast",
68
+ "code-analysis",
69
+ "ai",
70
+ "llm",
71
+ "tools"
72
+ ],
73
+ "author": "probelabs",
74
+ "license": "ISC",
75
+ "dependencies": {
76
+ "@ai-sdk/amazon-bedrock": "^1.0.8",
77
+ "@ai-sdk/anthropic": "^2.0.8",
78
+ "@ai-sdk/google": "^2.0.14",
79
+ "@ai-sdk/openai": "^2.0.10",
80
+ "@anthropic-ai/claude-agent-sdk": "^0.1.46",
81
+ "@modelcontextprotocol/sdk": "^1.0.0",
82
+ "@probelabs/maid": "^0.0.22",
83
+ "adm-zip": "^0.5.16",
84
+ "ai": "^5.0.0",
85
+ "ajv": "^8.17.1",
86
+ "axios": "^1.8.3",
87
+ "dotenv": "^16.4.7",
88
+ "fs-extra": "^11.1.1",
89
+ "glob": "^10.3.10",
90
+ "gpt-tokenizer": "^3.0.1",
91
+ "tar": "^6.2.0",
92
+ "zod": "^3.24.2"
93
+ },
94
+ "devDependencies": {
95
+ "@jest/globals": "^29.7.0",
96
+ "@types/fs-extra": "^11.0.4",
97
+ "@types/node": "^20.17.19",
98
+ "cross-env": "^7.0.3",
99
+ "esbuild": "^0.25.9",
100
+ "jest": "^29.7.0",
101
+ "typescript": "^5.9.2"
102
+ },
103
+ "peerDependencies": {
104
+ "ai": "^5.0.0"
105
+ },
106
+ "engines": {
107
+ "node": ">=14.16.0"
108
+ },
109
+ "repository": {
110
+ "type": "git",
111
+ "url": "git+https://github.com/probelabs/probe.git"
112
+ },
113
+ "bugs": {
114
+ "url": "https://github.com/probelabs/probe/issues"
115
+ },
116
+ "homepage": "https://github.com/probelabs/probe#readme"
117
+ }
@@ -0,0 +1,75 @@
1
+ const esbuild = require('esbuild');
2
+ const path = require('path');
3
+ const fs = require('fs');
4
+
5
+ async function buildAgent() {
6
+ try {
7
+ console.log('Building agent...');
8
+
9
+ // Ensure build directory exists
10
+ const buildDir = path.resolve(__dirname, '..', 'build', 'agent');
11
+ if (!fs.existsSync(buildDir)) {
12
+ fs.mkdirSync(buildDir, { recursive: true });
13
+ }
14
+
15
+ const result = await esbuild.build({
16
+ entryPoints: [path.resolve(__dirname, '..', 'src', 'agent', 'index.js')],
17
+ bundle: true,
18
+ outfile: path.resolve(buildDir, 'index.js'),
19
+ platform: 'node',
20
+ target: 'node18',
21
+ format: 'esm',
22
+ external: [
23
+ // AI SDK packages - use dynamic requires, must be external
24
+ '@modelcontextprotocol/sdk',
25
+ '@ai-sdk/anthropic',
26
+ '@ai-sdk/openai',
27
+ '@ai-sdk/google',
28
+ '@ai-sdk/amazon-bedrock',
29
+ 'ai',
30
+ // Packages with dynamic requires
31
+ 'fs-extra',
32
+ 'tar',
33
+ 'axios',
34
+ 'dotenv',
35
+ // Node.js built-in modules
36
+ 'fs',
37
+ 'path',
38
+ 'crypto',
39
+ 'util',
40
+ 'child_process',
41
+ 'stream',
42
+ 'events',
43
+ 'url',
44
+ 'os',
45
+ 'process'
46
+ // Will bundle: glob, zod
47
+ ],
48
+ banner: {
49
+ js: '#!/usr/bin/env node'
50
+ },
51
+ minify: false, // Keep readable for debugging
52
+ sourcemap: false,
53
+ metafile: true,
54
+ logLevel: 'info'
55
+ });
56
+
57
+ // Make the output file executable
58
+ fs.chmodSync(path.resolve(buildDir, 'index.js'), 0o755);
59
+
60
+ console.log('Agent build completed successfully!');
61
+
62
+ if (result.metafile) {
63
+ // Optional: log build statistics
64
+ const analysis = await esbuild.analyzeMetafile(result.metafile);
65
+ console.log('Build analysis:');
66
+ console.log(analysis);
67
+ }
68
+
69
+ } catch (error) {
70
+ console.error('Agent build failed:', error);
71
+ process.exit(1);
72
+ }
73
+ }
74
+
75
+ buildAgent();
@@ -0,0 +1,124 @@
1
+ #!/usr/bin/env node
2
+
3
+ import { promises as fs } from 'fs';
4
+ import { join, dirname } from 'path';
5
+ import { fileURLToPath } from 'url';
6
+ import esbuild from 'esbuild';
7
+
8
+ const __filename = fileURLToPath(import.meta.url);
9
+ const __dirname = dirname(__filename);
10
+ const npmDir = join(__dirname, '..');
11
+ const cjsDir = join(npmDir, 'cjs');
12
+
13
+ // Clean CJS directory
14
+ try {
15
+ await fs.rm(cjsDir, { recursive: true, force: true });
16
+ } catch (err) {
17
+ // Directory might not exist
18
+ }
19
+
20
+ // Create CJS directory structure
21
+ await fs.mkdir(cjsDir, { recursive: true });
22
+ await fs.mkdir(join(cjsDir, 'agent'), { recursive: true });
23
+
24
+ console.log('Building CommonJS modules...');
25
+
26
+ // Build main index file
27
+ await esbuild.build({
28
+ entryPoints: [join(npmDir, 'src/index.js')],
29
+ bundle: true,
30
+ platform: 'node',
31
+ format: 'cjs',
32
+ outfile: join(cjsDir, 'index.cjs'),
33
+ external: [
34
+ '@ai-sdk/anthropic',
35
+ '@ai-sdk/openai',
36
+ '@ai-sdk/google',
37
+ '@modelcontextprotocol/sdk',
38
+ '@opentelemetry/*',
39
+ 'ai',
40
+ 'axios',
41
+ 'fs-extra',
42
+ 'tar',
43
+ 'crypto',
44
+ 'fs',
45
+ 'path',
46
+ 'events',
47
+ 'child_process',
48
+ 'stream',
49
+ 'util',
50
+ 'os'
51
+ ],
52
+ define: {
53
+ 'import.meta.url': '"file:///"'
54
+ }
55
+ });
56
+
57
+ // Build ProbeAgent separately
58
+ await esbuild.build({
59
+ entryPoints: [join(npmDir, 'src/agent/ProbeAgent.js')],
60
+ bundle: true,
61
+ platform: 'node',
62
+ format: 'cjs',
63
+ outfile: join(cjsDir, 'agent/ProbeAgent.cjs'),
64
+ external: [
65
+ '@ai-sdk/anthropic',
66
+ '@ai-sdk/openai',
67
+ '@ai-sdk/google',
68
+ '@modelcontextprotocol/sdk',
69
+ '@opentelemetry/*',
70
+ 'ai',
71
+ 'axios',
72
+ 'fs-extra',
73
+ 'tar',
74
+ 'crypto',
75
+ 'fs',
76
+ 'path',
77
+ 'events',
78
+ 'child_process',
79
+ 'stream',
80
+ 'util',
81
+ 'os'
82
+ ],
83
+ define: {
84
+ 'import.meta.url': '"file:///"'
85
+ }
86
+ });
87
+
88
+ // Build simpleTelemetry module
89
+ await esbuild.build({
90
+ entryPoints: [join(npmDir, 'src/agent/simpleTelemetry.js')],
91
+ bundle: true,
92
+ platform: 'node',
93
+ format: 'cjs',
94
+ outfile: join(cjsDir, 'agent/simpleTelemetry.cjs'),
95
+ external: [
96
+ '@opentelemetry/*',
97
+ 'crypto',
98
+ 'fs',
99
+ 'path',
100
+ 'os'
101
+ ],
102
+ define: {
103
+ 'import.meta.url': '"file:///"'
104
+ }
105
+ });
106
+
107
+ // Note: telemetry.js removed - using simpleTelemetry.js instead
108
+
109
+ // Create package.json for CJS directory
110
+ const cjsPackageJson = {
111
+ type: 'commonjs'
112
+ };
113
+
114
+ await fs.writeFile(
115
+ join(cjsDir, 'package.json'),
116
+ JSON.stringify(cjsPackageJson, null, 2)
117
+ );
118
+
119
+ console.log('✅ CommonJS build completed');
120
+ console.log(` 📁 Built to: ${cjsDir}`);
121
+ console.log(' 📦 Main: cjs/index.cjs');
122
+ console.log(' 🤖 Agent: cjs/agent/ProbeAgent.cjs');
123
+ console.log(' 📊 Simple Telemetry: cjs/agent/simpleTelemetry.cjs');
124
+ console.log(' 📈 Full Telemetry: cjs/agent/telemetry.cjs');
@@ -0,0 +1,36 @@
1
+ #!/usr/bin/env node
2
+
3
+ const fs = require('fs-extra');
4
+ const path = require('path');
5
+ const { execSync } = require('child_process');
6
+
7
+ async function buildMcp() {
8
+ try {
9
+ console.log('Building MCP TypeScript...');
10
+
11
+ // Ensure build directory exists
12
+ await fs.ensureDir('build');
13
+
14
+ // Copy src files to build directory
15
+ console.log('Copying source files...');
16
+ await fs.copy('src', 'build', {
17
+ overwrite: true,
18
+ errorOnExist: false
19
+ });
20
+
21
+ // Run TypeScript compiler
22
+ console.log('Compiling TypeScript...');
23
+ execSync('tsc src/mcp/index.ts --outDir build/mcp --module esnext --target es2020 --moduleResolution node --esModuleInterop --allowSyntheticDefaultImports --skipLibCheck', {
24
+ stdio: 'inherit',
25
+ cwd: process.cwd()
26
+ });
27
+
28
+ console.log('✅ MCP build completed successfully');
29
+
30
+ } catch (error) {
31
+ console.error('❌ MCP build failed:', error.message);
32
+ process.exit(1);
33
+ }
34
+ }
35
+
36
+ buildMcp();
@@ -0,0 +1,216 @@
1
+ #!/usr/bin/env node
2
+
3
+ /**
4
+ * Post-install script for the probe package
5
+ *
6
+ * This script is executed after the package is installed.
7
+ * It downloads the probe binary and replaces the placeholder binary with the actual one.
8
+ */
9
+
10
+ import fs from 'fs-extra';
11
+ import path from 'path';
12
+ import { fileURLToPath } from 'url';
13
+ import { execFile } from 'child_process';
14
+ import { promisify } from 'util';
15
+ import { extractBundledBinary } from '../src/extractor.js';
16
+ import { downloadProbeBinary } from '../src/downloader.js';
17
+
18
+ const execFileAsync = promisify(execFile);
19
+
20
+ // Get the directory of the current module
21
+ const __filename = fileURLToPath(import.meta.url);
22
+ const __dirname = path.dirname(__filename);
23
+
24
+ // Path to the bin directory (relative to this script)
25
+ const binDir = path.resolve(__dirname, '..', 'bin');
26
+
27
+ /**
28
+ * Main function
29
+ */
30
+ async function main() {
31
+ try {
32
+ // Skip postinstall in CI environments to prevent wrong binaries from being packaged
33
+ const isCI = process.env.CI || process.env.GITHUB_ACTIONS || process.env.CONTINUOUS_INTEGRATION ||
34
+ process.env.BUILD_NUMBER || process.env.JENKINS_URL || process.env.TRAVIS ||
35
+ process.env.CIRCLECI || process.env.GITLAB_CI;
36
+
37
+ if (isCI) {
38
+ if (process.env.DEBUG === '1' || process.env.VERBOSE === '1') {
39
+ console.log('Detected CI environment, skipping probe binary download');
40
+ }
41
+ return;
42
+ }
43
+
44
+ // Skip postinstall if binary already exists (for development)
45
+ const isWindows = process.platform === 'win32';
46
+ const targetBinaryName = isWindows ? 'probe.exe' : 'probe-binary';
47
+ const targetBinaryPath = path.join(binDir, targetBinaryName);
48
+
49
+ if (await fs.pathExists(targetBinaryPath)) {
50
+ if (process.env.DEBUG === '1' || process.env.VERBOSE === '1') {
51
+ console.log(`Probe binary already exists at ${targetBinaryPath}, skipping download`);
52
+ }
53
+ return;
54
+ }
55
+
56
+ // Create the bin directory if it doesn't exist
57
+ if (process.env.DEBUG === '1' || process.env.VERBOSE === '1') {
58
+ console.log(`Creating bin directory at: ${binDir}`);
59
+ }
60
+ await fs.ensureDir(binDir);
61
+ if (process.env.DEBUG === '1' || process.env.VERBOSE === '1') {
62
+ console.log('Bin directory created successfully');
63
+ }
64
+
65
+ // Create a README file in the bin directory
66
+ const readmePath = path.join(binDir, 'README.md');
67
+ const readmeContent = `# Probe Binary Directory
68
+
69
+ This directory is used to store the downloaded probe binary.
70
+
71
+ The binary is automatically downloaded during package installation.
72
+ If you encounter any issues with the download, you can manually place the probe binary in this directory.
73
+
74
+ Binary name should be:
75
+ - \`probe\` (on Linux/macOS)
76
+ - \`probe.exe\` (on Windows)
77
+
78
+ You can download the binary from: https://github.com/probelabs/probe/releases
79
+ `;
80
+
81
+ await fs.writeFile(readmePath, readmeContent);
82
+ if (process.env.DEBUG === '1' || process.env.VERBOSE === '1') {
83
+ console.log('Created README file in bin directory');
84
+ }
85
+
86
+ // Create a .gitignore file to ignore binaries but keep the directory
87
+ const gitignorePath = path.join(binDir, '.gitignore');
88
+ const gitignoreContent = `# Ignore all files in this directory
89
+ *
90
+ # Except these files
91
+ !.gitignore
92
+ !.gitkeep
93
+ !README.md
94
+ !probe
95
+ `;
96
+
97
+ await fs.writeFile(gitignorePath, gitignoreContent);
98
+ if (process.env.DEBUG === '1' || process.env.VERBOSE === '1') {
99
+ console.log('Created .gitignore file in bin directory');
100
+ }
101
+
102
+ // Get the package version first
103
+ let packageVersion = '0.0.0';
104
+ const possiblePaths = [
105
+ path.resolve(__dirname, '..', 'package.json'), // When installed from npm: scripts/../package.json
106
+ path.resolve(__dirname, '..', '..', 'package.json') // In development: scripts/../../package.json
107
+ ];
108
+
109
+ for (const packageJsonPath of possiblePaths) {
110
+ try {
111
+ if (fs.existsSync(packageJsonPath)) {
112
+ if (process.env.DEBUG === '1' || process.env.VERBOSE === '1') {
113
+ console.log(`Found package.json at: ${packageJsonPath}`);
114
+ }
115
+ const packageJson = JSON.parse(fs.readFileSync(packageJsonPath, 'utf-8'));
116
+ if (packageJson.version) {
117
+ packageVersion = packageJson.version;
118
+ if (process.env.DEBUG === '1' || process.env.VERBOSE === '1') {
119
+ console.log(`Using version from package.json: ${packageVersion}`);
120
+ }
121
+ break;
122
+ }
123
+ }
124
+ } catch (err) {
125
+ console.error(`Error reading package.json at ${packageJsonPath}:`, err);
126
+ }
127
+ }
128
+
129
+ // Try to extract bundled binary first
130
+ let binaryPath;
131
+ try {
132
+ if (process.env.DEBUG === '1' || process.env.VERBOSE === '1') {
133
+ console.log('Extracting bundled probe binary...');
134
+ }
135
+ binaryPath = await extractBundledBinary(packageVersion);
136
+ if (process.env.DEBUG === '1' || process.env.VERBOSE === '1') {
137
+ console.log(`Successfully extracted bundled binary to: ${binaryPath}`);
138
+ }
139
+ } catch (extractError) {
140
+ // If bundled binary extraction fails, fall back to downloading
141
+ if (process.env.DEBUG === '1' || process.env.VERBOSE === '1') {
142
+ console.log(`Bundled binary extraction failed: ${extractError.message}`);
143
+ console.log('Falling back to downloading binary from GitHub...');
144
+ } else {
145
+ console.log('Bundled binary not found, downloading from GitHub...');
146
+ }
147
+
148
+ try {
149
+ binaryPath = await downloadProbeBinary(packageVersion);
150
+ if (process.env.DEBUG === '1' || process.env.VERBOSE === '1') {
151
+ console.log(`Successfully downloaded probe binary to: ${binaryPath}`);
152
+ }
153
+ } catch (downloadError) {
154
+ throw new Error(
155
+ `Failed to install probe binary.\n` +
156
+ `Bundled extraction error: ${extractError.message}\n` +
157
+ `Download error: ${downloadError.message}\n` +
158
+ `\n` +
159
+ `Please check:\n` +
160
+ `1. Your platform is supported\n` +
161
+ `2. You have internet connectivity\n` +
162
+ `3. GitHub releases are accessible`
163
+ );
164
+ }
165
+ }
166
+
167
+ // Copy the extracted/downloaded binary to the correct location if needed
168
+ // (targetBinaryName and targetBinaryPath already declared at the beginning of main function)
169
+ if (binaryPath !== targetBinaryPath) {
170
+ if (process.env.DEBUG === '1' || process.env.VERBOSE === '1') {
171
+ console.log(`Copying binary to ${targetBinaryPath} from ${binaryPath}`);
172
+ }
173
+ await fs.copyFile(binaryPath, targetBinaryPath);
174
+ await fs.chmod(targetBinaryPath, 0o755); // Make it executable
175
+ }
176
+
177
+ // On macOS, try to remove quarantine attributes that might prevent execution
178
+ if (process.platform === 'darwin') {
179
+ try {
180
+ // Security: Use execFile with array args instead of exec to prevent command injection
181
+ // Validate that the path is within the bin directory
182
+ const normalizedPath = path.normalize(targetBinaryPath);
183
+ const normalizedBinDir = path.normalize(binDir);
184
+ if (!normalizedPath.startsWith(normalizedBinDir)) {
185
+ throw new Error('Invalid binary path - outside of bin directory');
186
+ }
187
+
188
+ await execFileAsync('xattr', ['-d', 'com.apple.quarantine', normalizedPath]).catch(() => {
189
+ // Ignore errors - xattr may not exist or file may not have quarantine attribute
190
+ });
191
+
192
+ if (process.env.DEBUG === '1' || process.env.VERBOSE === '1') {
193
+ console.log('Removed quarantine attributes from binary');
194
+ }
195
+ } catch (error) {
196
+ // Ignore errors - this is just a precaution
197
+ if (process.env.DEBUG === '1' || process.env.VERBOSE === '1') {
198
+ console.log('Note: Could not remove quarantine attributes (this is usually fine)');
199
+ }
200
+ }
201
+ }
202
+
203
+ if (process.env.DEBUG === '1' || process.env.VERBOSE === '1') {
204
+ console.log('\nProbe binary was successfully installed.');
205
+ console.log('You can now use the probe command directly from the command line.');
206
+ }
207
+ } catch (error) {
208
+ console.error(`Error in postinstall script: ${error.message}`);
209
+ console.error('You may need to manually create the bin directory or run with elevated privileges.');
210
+ }
211
+ }
212
+
213
+ // Execute the main function
214
+ main().catch(error => {
215
+ console.error('Unexpected error during postinstall:', error);
216
+ });
@@ -0,0 +1,78 @@
1
+ #!/usr/bin/env node
2
+
3
+ /**
4
+ * End-to-end test for Codex integration
5
+ * Run with: node test-codex-e2e.js
6
+ */
7
+
8
+ import { ProbeAgent } from './src/agent/ProbeAgent.js';
9
+
10
+ console.log('🧪 Codex Integration E2E Test\n');
11
+ console.log('Testing basic query with Codex engine...\n');
12
+
13
+ async function main() {
14
+ let agent;
15
+
16
+ try {
17
+ // Create agent with Codex provider (use default model, not gpt-4o)
18
+ console.log('1️⃣ Creating ProbeAgent with provider: codex (using default model)');
19
+ agent = new ProbeAgent({
20
+ provider: 'codex',
21
+ model: null, // Don't specify model, let Codex use its default
22
+ allowedFolders: [process.cwd()],
23
+ debug: true
24
+ });
25
+
26
+ console.log('\n2️⃣ Initializing agent...');
27
+ await agent.initialize();
28
+
29
+ console.log('\n✅ Agent initialized successfully!');
30
+ console.log(` Provider: ${agent.clientApiProvider}`);
31
+ console.log(` API Type: ${agent.apiType}`);
32
+ console.log(` Model: ${agent.model}`);
33
+
34
+ // Test simple query
35
+ console.log('\n3️⃣ Testing simple query: "What is 2 + 2?"');
36
+ console.log(' (This should trigger Codex CLI)\n');
37
+
38
+ const response = await agent.answer('What is 2 + 2?');
39
+
40
+ console.log('\n✅ Query completed!');
41
+ console.log('\n📝 Response:');
42
+ console.log('─'.repeat(60));
43
+ console.log(response);
44
+ console.log('─'.repeat(60));
45
+
46
+ // Clean up
47
+ console.log('\n4️⃣ Cleaning up...');
48
+ if (agent.engine && agent.engine.close) {
49
+ await agent.engine.close();
50
+ }
51
+
52
+ console.log('\n✅ All tests passed! 🎉\n');
53
+ process.exit(0);
54
+
55
+ } catch (error) {
56
+ console.error('\n❌ Test failed:', error.message);
57
+ console.error('\nStack trace:');
58
+ console.error(error.stack);
59
+
60
+ // Clean up on error
61
+ if (agent?.engine?.close) {
62
+ try {
63
+ await agent.engine.close();
64
+ } catch (cleanupError) {
65
+ // Ignore cleanup errors
66
+ }
67
+ }
68
+
69
+ console.log('\n💡 Common issues:');
70
+ console.log(' - Make sure Codex CLI is installed: https://openai.com/codex');
71
+ console.log(' - Check that you can run: codex --version');
72
+ console.log(' - Ensure you have an active Codex session');
73
+
74
+ process.exit(1);
75
+ }
76
+ }
77
+
78
+ main();