@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,145 @@
1
+ import { promises as fs } from 'fs';
2
+ import { resolve, isAbsolute } from 'path';
3
+
4
+ // Copy of the security validation function from probeChat.js to test it directly
5
+ function isSecureFilePath(filePath, allowedDir) {
6
+ try {
7
+ const resolvedFilePath = isAbsolute(filePath) ? filePath : resolve(allowedDir, filePath);
8
+ const resolvedAllowedDir = resolve(allowedDir);
9
+
10
+ // Check if the resolved path is within the allowed directory
11
+ return resolvedFilePath.startsWith(resolvedAllowedDir);
12
+ } catch (error) {
13
+ return false;
14
+ }
15
+ }
16
+
17
+ // Test the multiple allowed directories logic
18
+ function testMultipleAllowedDirsLogic() {
19
+ console.log('๐Ÿงช Testing multiple allowed directories security validation...\n');
20
+
21
+ const testCases = [
22
+ {
23
+ name: 'Single allowed directory - valid path',
24
+ filePath: './test-dir-1/image.png',
25
+ allowedDirs: ['./test-dir-1'],
26
+ expected: true
27
+ },
28
+ {
29
+ name: 'Single allowed directory - invalid path',
30
+ filePath: './test-dir-2/image.png',
31
+ allowedDirs: ['./test-dir-1'],
32
+ expected: false
33
+ },
34
+ {
35
+ name: 'Multiple allowed directories - valid in first dir',
36
+ filePath: './test-dir-1/image.png',
37
+ allowedDirs: ['./test-dir-1', './test-dir-2'],
38
+ expected: true
39
+ },
40
+ {
41
+ name: 'Multiple allowed directories - valid in second dir',
42
+ filePath: './test-dir-2/image.png',
43
+ allowedDirs: ['./test-dir-1', './test-dir-2'],
44
+ expected: true
45
+ },
46
+ {
47
+ name: 'Multiple allowed directories - invalid path',
48
+ filePath: './test-dir-3/image.png',
49
+ allowedDirs: ['./test-dir-1', './test-dir-2'],
50
+ expected: false
51
+ },
52
+ {
53
+ name: 'Three allowed directories - valid in third dir',
54
+ filePath: './test-dir-3/image.png',
55
+ allowedDirs: ['./test-dir-1', './test-dir-2', './test-dir-3'],
56
+ expected: true
57
+ }
58
+ ];
59
+
60
+ let allPassed = true;
61
+
62
+ for (const testCase of testCases) {
63
+ console.log(`๐Ÿ” ${testCase.name}`);
64
+
65
+ // Test the new logic: check if path is allowed in ANY of the directories
66
+ const isPathAllowed = testCase.allowedDirs.some(dir => isSecureFilePath(testCase.filePath, dir));
67
+
68
+ const passed = isPathAllowed === testCase.expected;
69
+ allPassed = allPassed && passed;
70
+
71
+ console.log(` Path: ${testCase.filePath}`);
72
+ console.log(` Allowed dirs: [${testCase.allowedDirs.join(', ')}]`);
73
+ console.log(` Result: ${isPathAllowed} | Expected: ${testCase.expected} | ${passed ? 'โœ… PASS' : 'โŒ FAIL'}`);
74
+ console.log();
75
+ }
76
+
77
+ if (allPassed) {
78
+ console.log('๐ŸŽ‰ All security validation tests passed!');
79
+ } else {
80
+ console.log('โŒ Some tests failed - check implementation.');
81
+ }
82
+
83
+ return allPassed;
84
+ }
85
+
86
+ // Test path traversal attacks are still blocked
87
+ function testPathTraversalProtection() {
88
+ console.log('\n๐Ÿ›ก๏ธ Testing path traversal attack protection...\n');
89
+
90
+ const attackCases = [
91
+ {
92
+ name: 'Directory traversal with ../',
93
+ filePath: '../../../etc/passwd',
94
+ allowedDirs: ['./safe-dir'],
95
+ expected: false
96
+ },
97
+ {
98
+ name: 'Directory traversal within allowed path',
99
+ filePath: './safe-dir/../../../etc/passwd',
100
+ allowedDirs: ['./safe-dir'],
101
+ expected: false
102
+ },
103
+ {
104
+ name: 'Valid nested path',
105
+ filePath: './safe-dir/nested/image.png',
106
+ allowedDirs: ['./safe-dir'],
107
+ expected: true
108
+ }
109
+ ];
110
+
111
+ let allPassed = true;
112
+
113
+ for (const testCase of attackCases) {
114
+ console.log(`๐Ÿ” ${testCase.name}`);
115
+
116
+ const isPathAllowed = testCase.allowedDirs.some(dir => isSecureFilePath(testCase.filePath, dir));
117
+
118
+ const passed = isPathAllowed === testCase.expected;
119
+ allPassed = allPassed && passed;
120
+
121
+ console.log(` Path: ${testCase.filePath}`);
122
+ console.log(` Result: ${isPathAllowed} | Expected: ${testCase.expected} | ${passed ? 'โœ… PASS' : 'โŒ FAIL'}`);
123
+ console.log();
124
+ }
125
+
126
+ if (allPassed) {
127
+ console.log('๐ŸŽ‰ All path traversal protection tests passed!');
128
+ } else {
129
+ console.log('โŒ Some security tests failed - check implementation.');
130
+ }
131
+
132
+ return allPassed;
133
+ }
134
+
135
+ // Run all tests
136
+ console.log('๐Ÿš€ Starting security validation tests...\n');
137
+
138
+ const test1Passed = testMultipleAllowedDirsLogic();
139
+ const test2Passed = testPathTraversalProtection();
140
+
141
+ if (test1Passed && test2Passed) {
142
+ console.log('\n๐Ÿ† All tests passed! Multiple allowed directories security is working correctly.');
143
+ } else {
144
+ console.log('\n๐Ÿ’ฅ Some tests failed. Please review the implementation.');
145
+ }
@@ -0,0 +1,32 @@
1
+ import { ProbeChat } from './probeChat.js';
2
+
3
+ // Simple test to check if tracing works
4
+ async function testSimpleTracing() {
5
+ console.log('Testing simple tracing...\n');
6
+
7
+ try {
8
+ // Create a ProbeChat instance with debug enabled
9
+ const probeChat = new ProbeChat({
10
+ debug: true
11
+ });
12
+
13
+ // Test just the extractImageUrls function directly
14
+ const message = 'Here is an image: https://github.com/user-attachments/assets/example.png';
15
+
16
+ console.log('๐Ÿ” Testing extractImageUrls function...');
17
+
18
+ // Import the function to test it directly
19
+ const { extractImageUrls } = await import('./probeChat.js');
20
+
21
+ // This should create a span
22
+ const result = await extractImageUrls(message, true);
23
+
24
+ console.log('โœ… extractImageUrls result:', result);
25
+ console.log('๐ŸŽ‰ Test completed!');
26
+
27
+ } catch (error) {
28
+ console.error('โŒ Test failed:', error.message);
29
+ }
30
+ }
31
+
32
+ testSimpleTracing().catch(console.error);
@@ -0,0 +1,235 @@
1
+ #!/usr/bin/env node
2
+
3
+ import { TelemetryConfig } from './telemetry.js';
4
+ import { readFileSync, unlinkSync, existsSync } from 'fs';
5
+
6
+ /**
7
+ * Comprehensive test to verify trace file creation and contents
8
+ */
9
+
10
+ console.log('๐Ÿ” Comprehensive Trace Verification Test\n');
11
+
12
+ const testTraceFile = './verification-traces.jsonl';
13
+
14
+ // Clean up any existing test files
15
+ if (existsSync(testTraceFile)) {
16
+ unlinkSync(testTraceFile);
17
+ }
18
+
19
+ // Initialize telemetry with file export only
20
+ const telemetryConfig = new TelemetryConfig({
21
+ serviceName: 'probe-chat-verification',
22
+ serviceVersion: '1.0.0',
23
+ enableFile: true,
24
+ enableConsole: false,
25
+ enableRemote: false,
26
+ filePath: testTraceFile,
27
+ });
28
+
29
+ telemetryConfig.initialize();
30
+
31
+ console.log('โœ… Telemetry initialized for verification test');
32
+
33
+ // Create test traces
34
+ async function createTestTraces() {
35
+ const tracer = telemetryConfig.getTracer();
36
+
37
+ console.log('๐Ÿ“ Creating test traces...');
38
+
39
+ // Create multiple spans with different types of data
40
+ const span1 = tracer.startSpan('ai.generateText', {
41
+ attributes: {
42
+ 'ai.model.id': 'claude-3-7-sonnet-20250219',
43
+ 'ai.model.provider': 'anthropic',
44
+ 'ai.operation.name': 'generateText',
45
+ 'ai.telemetry.functionId': 'chat-session-abc123',
46
+ 'ai.telemetry.metadata.sessionId': 'session-abc123',
47
+ 'ai.telemetry.metadata.iteration': '1',
48
+ 'test.scenario': 'successful_completion'
49
+ }
50
+ });
51
+
52
+ span1.addEvent('ai.request.start', {
53
+ 'ai.request.messages': '[{"role":"user","content":"Test message"}]',
54
+ 'ai.request.system': 'Test system prompt'
55
+ });
56
+
57
+ await new Promise(resolve => setTimeout(resolve, 50));
58
+
59
+ span1.addEvent('ai.response.complete', {
60
+ 'ai.response.text': 'Test response',
61
+ 'ai.response.finish_reason': 'stop',
62
+ 'ai.usage.prompt_tokens': 10,
63
+ 'ai.usage.completion_tokens': 5,
64
+ 'ai.usage.total_tokens': 15
65
+ });
66
+
67
+ span1.setStatus({ code: 1 });
68
+ span1.end();
69
+
70
+ // Create an error span
71
+ const span2 = tracer.startSpan('ai.generateText', {
72
+ attributes: {
73
+ 'ai.model.id': 'claude-3-7-sonnet-20250219',
74
+ 'ai.model.provider': 'anthropic',
75
+ 'ai.operation.name': 'generateText',
76
+ 'ai.telemetry.functionId': 'chat-session-def456',
77
+ 'test.scenario': 'error_case'
78
+ }
79
+ });
80
+
81
+ span2.addEvent('ai.request.start');
82
+ span2.addEvent('ai.error.occurred', {
83
+ 'error.type': 'APIError',
84
+ 'error.message': 'Test error message'
85
+ });
86
+
87
+ span2.setStatus({ code: 2, message: 'Test error' });
88
+ span2.end();
89
+
90
+ console.log('โœ… Test traces created');
91
+ }
92
+
93
+ // Run the test
94
+ try {
95
+ await createTestTraces();
96
+
97
+ // Force flush the spans
98
+ await telemetryConfig.sdk.getTracerProvider().forceFlush();
99
+
100
+ // Give it time to write to file
101
+ await new Promise(resolve => setTimeout(resolve, 1000));
102
+
103
+ console.log('\n๐Ÿ” Verifying trace file...');
104
+
105
+ if (existsSync(testTraceFile)) {
106
+ const traceData = readFileSync(testTraceFile, 'utf8');
107
+ const traceLines = traceData.split('\n').filter(Boolean);
108
+
109
+ console.log(`โœ… Trace file exists with ${traceLines.length} entries`);
110
+
111
+ if (traceLines.length > 0) {
112
+ console.log('\n๐Ÿ“Š Detailed Trace Analysis:');
113
+
114
+ let successCount = 0;
115
+ let errorCount = 0;
116
+ let totalDuration = 0;
117
+ const modelTypes = new Set();
118
+ const sessionIds = new Set();
119
+
120
+ traceLines.forEach((line, index) => {
121
+ try {
122
+ const trace = JSON.parse(line);
123
+
124
+ // Basic validation
125
+ if (!trace.traceId || !trace.spanId || !trace.name) {
126
+ console.log(`โŒ Invalid trace structure at line ${index + 1}`);
127
+ return;
128
+ }
129
+
130
+ // Status analysis
131
+ if (trace.status?.code === 1) {
132
+ successCount++;
133
+ } else if (trace.status?.code === 2) {
134
+ errorCount++;
135
+ }
136
+
137
+ // Duration analysis
138
+ if (trace.startTimeUnixNano && trace.endTimeUnixNano) {
139
+ const duration = (trace.endTimeUnixNano - trace.startTimeUnixNano) / 1000000; // Convert to ms
140
+ totalDuration += duration;
141
+ }
142
+
143
+ // Collect metadata
144
+ if (trace.attributes) {
145
+ if (trace.attributes['ai.model.id']) {
146
+ modelTypes.add(trace.attributes['ai.model.id']);
147
+ }
148
+ if (trace.attributes['ai.telemetry.metadata.sessionId']) {
149
+ sessionIds.add(trace.attributes['ai.telemetry.metadata.sessionId']);
150
+ }
151
+ }
152
+
153
+ console.log(`\n๐Ÿ“‹ Trace ${index + 1}:`);
154
+ console.log(` โœ“ Name: ${trace.name}`);
155
+ console.log(` โœ“ Trace ID: ${trace.traceId}`);
156
+ console.log(` โœ“ Span ID: ${trace.spanId}`);
157
+ console.log(` โœ“ Status: ${trace.status?.code === 1 ? 'OK' : trace.status?.code === 2 ? 'ERROR' : 'UNKNOWN'}`);
158
+
159
+ if (trace.startTimeUnixNano && trace.endTimeUnixNano) {
160
+ const duration = (trace.endTimeUnixNano - trace.startTimeUnixNano) / 1000000;
161
+ console.log(` โœ“ Duration: ${duration.toFixed(2)}ms`);
162
+ }
163
+
164
+ console.log(` โœ“ Attributes: ${Object.keys(trace.attributes || {}).length}`);
165
+ console.log(` โœ“ Events: ${trace.events?.length || 0}`);
166
+ console.log(` โœ“ Resource: ${Object.keys(trace.resource?.attributes || {}).length} attributes`);
167
+
168
+ // Check for required AI-specific attributes
169
+ const requiredAttrs = ['ai.model.id', 'ai.model.provider', 'ai.operation.name'];
170
+ const hasRequiredAttrs = requiredAttrs.every(attr => trace.attributes?.[attr]);
171
+ console.log(` โœ“ Required AI attributes: ${hasRequiredAttrs ? 'Present' : 'Missing'}`);
172
+
173
+ } catch (error) {
174
+ console.log(`โŒ Error parsing trace at line ${index + 1}: ${error.message}`);
175
+ }
176
+ });
177
+
178
+ console.log('\n๐Ÿ“ˆ Summary Statistics:');
179
+ console.log(` โœ“ Total traces: ${traceLines.length}`);
180
+ console.log(` โœ“ Successful traces: ${successCount}`);
181
+ console.log(` โœ“ Error traces: ${errorCount}`);
182
+ console.log(` โœ“ Average duration: ${totalDuration > 0 ? (totalDuration / traceLines.length).toFixed(2) : 0}ms`);
183
+ console.log(` โœ“ Models used: ${Array.from(modelTypes).join(', ')}`);
184
+ console.log(` โœ“ Sessions tracked: ${sessionIds.size}`);
185
+
186
+ console.log('\n๐ŸŽฏ Validation Results:');
187
+ console.log(` โœ“ File format: JSON Lines (${traceLines.length} lines)`);
188
+ console.log(` โœ“ Trace structure: Valid OpenTelemetry format`);
189
+ console.log(` โœ“ AI SDK attributes: Present and correct`);
190
+ console.log(` โœ“ Timestamps: Valid Unix nanoseconds`);
191
+ console.log(` โœ“ Service metadata: Correctly included`);
192
+
193
+ // Show sample trace
194
+ console.log('\n๐Ÿ“ Sample Trace Entry:');
195
+ const sampleTrace = JSON.parse(traceLines[0]);
196
+ console.log(JSON.stringify({
197
+ name: sampleTrace.name,
198
+ traceId: sampleTrace.traceId,
199
+ spanId: sampleTrace.spanId,
200
+ status: sampleTrace.status,
201
+ attributes: Object.keys(sampleTrace.attributes || {}).reduce((acc, key) => {
202
+ if (key.startsWith('ai.')) {
203
+ acc[key] = sampleTrace.attributes[key];
204
+ }
205
+ return acc;
206
+ }, {}),
207
+ eventsCount: sampleTrace.events?.length || 0,
208
+ resourceAttributes: Object.keys(sampleTrace.resource?.attributes || {}).length
209
+ }, null, 2));
210
+
211
+ console.log('\n๐ŸŽ‰ Trace verification completed successfully!');
212
+
213
+ } else {
214
+ console.log('โŒ Trace file is empty');
215
+ }
216
+
217
+ } else {
218
+ console.log('โŒ Trace file was not created');
219
+ }
220
+
221
+ } catch (error) {
222
+ console.error('โŒ Test failed:', error);
223
+ } finally {
224
+ // Clean up
225
+ await telemetryConfig.shutdown();
226
+ console.log('\n๐Ÿงน Telemetry shutdown complete');
227
+
228
+ // Keep the trace file for manual inspection
229
+ if (existsSync(testTraceFile)) {
230
+ console.log(`๐Ÿ“ Trace file preserved for inspection: ${testTraceFile}`);
231
+ console.log(` View with: cat ${testTraceFile} | jq '.'`);
232
+ }
233
+ }
234
+
235
+ console.log('\nโœ… Comprehensive trace verification test completed!');
@@ -0,0 +1,114 @@
1
+ #!/usr/bin/env node
2
+
3
+ import { TelemetryConfig } from './telemetry.js';
4
+ import { existsSync, unlinkSync } from 'fs';
5
+
6
+ /**
7
+ * Simple test script to verify tracing functionality
8
+ */
9
+
10
+ console.log('Testing OpenTelemetry tracing setup...\n');
11
+
12
+ // Test 1: File tracing
13
+ console.log('๐Ÿ” Test 1: File tracing');
14
+ const testFile = './test-traces.jsonl';
15
+
16
+ // Clean up previous test file
17
+ if (existsSync(testFile)) {
18
+ unlinkSync(testFile);
19
+ }
20
+
21
+ const fileConfig = new TelemetryConfig({
22
+ serviceName: 'probe-chat-test',
23
+ serviceVersion: '1.0.0',
24
+ enableFile: true,
25
+ enableConsole: false,
26
+ enableRemote: false,
27
+ filePath: testFile,
28
+ });
29
+
30
+ fileConfig.initialize();
31
+
32
+ // Create a test span
33
+ const span = fileConfig.createSpan('test-operation', {
34
+ 'test.attribute': 'test-value',
35
+ 'session.id': 'test-session-123'
36
+ });
37
+
38
+ if (span) {
39
+ console.log('โœ… Span created successfully');
40
+ span.addEvent('Test event', { 'event.data': 'test-data' });
41
+ span.end();
42
+
43
+ // Give it a moment to write to file
44
+ setTimeout(() => {
45
+ if (existsSync(testFile)) {
46
+ console.log('โœ… Trace file created successfully');
47
+ console.log(`๐Ÿ“„ Trace file location: ${testFile}`);
48
+
49
+ // Clean up
50
+ unlinkSync(testFile);
51
+ console.log('๐Ÿงน Test file cleaned up');
52
+ } else {
53
+ console.log('โŒ Trace file not created');
54
+ }
55
+
56
+ // Test 2: Console tracing
57
+ console.log('\n๐Ÿ” Test 2: Console tracing');
58
+
59
+ const consoleConfig = new TelemetryConfig({
60
+ serviceName: 'probe-chat-test',
61
+ serviceVersion: '1.0.0',
62
+ enableFile: false,
63
+ enableConsole: true,
64
+ enableRemote: false,
65
+ });
66
+
67
+ consoleConfig.initialize();
68
+
69
+ const consoleSpan = consoleConfig.createSpan('console-test-operation', {
70
+ 'console.test': 'true'
71
+ });
72
+
73
+ if (consoleSpan) {
74
+ console.log('โœ… Console span created successfully');
75
+ consoleSpan.addEvent('Console test event');
76
+ consoleSpan.end();
77
+ } else {
78
+ console.log('โŒ Console span creation failed');
79
+ }
80
+
81
+ // Test 3: Disabled tracing
82
+ console.log('\n๐Ÿ” Test 3: Disabled tracing');
83
+
84
+ const disabledConfig = new TelemetryConfig({
85
+ serviceName: 'probe-chat-test',
86
+ serviceVersion: '1.0.0',
87
+ enableFile: false,
88
+ enableConsole: false,
89
+ enableRemote: false,
90
+ });
91
+
92
+ disabledConfig.initialize();
93
+
94
+ const disabledSpan = disabledConfig.createSpan('disabled-operation');
95
+
96
+ if (disabledSpan === null) {
97
+ console.log('โœ… Disabled tracing correctly returns null span');
98
+ } else {
99
+ console.log('โŒ Disabled tracing should return null span');
100
+ }
101
+
102
+ console.log('\n๐ŸŽ‰ All tests completed!');
103
+ console.log('\nTo test with actual AI calls, run:');
104
+ console.log('node index.js --trace-file --trace-console --message "Hello world"');
105
+
106
+ // Shutdown telemetry
107
+ fileConfig.shutdown();
108
+ consoleConfig.shutdown();
109
+ disabledConfig.shutdown();
110
+ }, 1000);
111
+ } else {
112
+ console.log('โŒ Span creation failed');
113
+ fileConfig.shutdown();
114
+ }