@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,533 @@
1
+ // Test Cases for Early Termination Validation Issues
2
+ // This file contains examples of code structures that could be missed
3
+ // by the current early termination optimizations in the probe codebase
4
+
5
+ use std::collections::HashMap;
6
+ use serde::{Serialize, Deserialize};
7
+
8
+ // TEST CASE 1: Multiline Function Signature with Generic Constraints
9
+ // Issue: If target lines are [15-20] but function signature spans lines 10-14,
10
+ // AST filtering might skip this entire function node
11
+ pub fn complex_database_query<T, U, E>(
12
+ connection: &mut DatabaseConnection,
13
+ query_params: QueryParameters<T>,
14
+ result_transformer: impl Fn(RawResult) -> Result<U, E> + Send + Sync,
15
+ retry_config: RetryConfiguration
16
+ ) -> Result<Vec<U>, DatabaseError<E>>
17
+ where
18
+ T: Serialize + Clone + Send + 'static,
19
+ U: Deserialize<'static> + Clone + Debug,
20
+ E: std::error::Error + Send + Sync + 'static
21
+ {
22
+ // If search targets these implementation lines but misses the signature above,
23
+ // the semantic context of the function's purpose is lost
24
+ let mut results = Vec::new();
25
+ let mut retry_count = 0;
26
+
27
+ loop {
28
+ match connection.execute_query(&query_params) {
29
+ Ok(raw_results) => {
30
+ for raw_result in raw_results {
31
+ match result_transformer(raw_result) {
32
+ Ok(transformed) => results.push(transformed),
33
+ Err(transform_error) => {
34
+ return Err(DatabaseError::TransformationFailed(transform_error));
35
+ }
36
+ }
37
+ }
38
+ break;
39
+ }
40
+ Err(db_error) if retry_count < retry_config.max_retries => {
41
+ retry_count += 1;
42
+ std::thread::sleep(retry_config.delay);
43
+ continue;
44
+ }
45
+ Err(db_error) => return Err(DatabaseError::QueryFailed(db_error)),
46
+ }
47
+ }
48
+
49
+ Ok(results)
50
+ }
51
+
52
+ // TEST CASE 2: Complex Trait Implementation with Associated Types
53
+ // Issue: The trait bounds and where clauses might place the actual implementation
54
+ // outside the initially estimated line ranges
55
+ impl<T, R> DataProcessor<T> for ComplexProcessor<T, R>
56
+ where
57
+ T: Clone + Debug + Send + Sync + 'static,
58
+ R: ProcessingResult<T> + Clone + Debug,
59
+ T::Error: From<ProcessingError>,
60
+ R::Output: Serialize + DeserializeOwned
61
+ {
62
+ type Output = ProcessedData<T, R>;
63
+ type Error = ComplexProcessingError<T::Error>;
64
+
65
+ // This implementation might be missed if line range filtering
66
+ // doesn't account for the trait bounds above
67
+ async fn process_batch(
68
+ &self,
69
+ input: Vec<T>,
70
+ config: ProcessingConfig
71
+ ) -> Result<Self::Output, Self::Error> {
72
+ let mut processed_items = Vec::new();
73
+ let processing_context = self.create_context(&config)?;
74
+
75
+ for item in input {
76
+ let result = self.process_single_item(item, &processing_context).await?;
77
+ processed_items.push(result);
78
+ }
79
+
80
+ Ok(ProcessedData {
81
+ items: processed_items,
82
+ metadata: processing_context.extract_metadata(),
83
+ processing_time: processing_context.elapsed(),
84
+ })
85
+ }
86
+
87
+ // Additional methods that form semantic units with the above
88
+ fn validate_input(&self, input: &[T]) -> Result<(), Self::Error> {
89
+ // Validation logic that's semantically related to process_batch
90
+ // but might be in a different "line range" from the perspective of early termination
91
+ for (index, item) in input.iter().enumerate() {
92
+ if !self.is_valid_item(item) {
93
+ return Err(ComplexProcessingError::InvalidInput {
94
+ index,
95
+ item: item.clone()
96
+ });
97
+ }
98
+ }
99
+ Ok(())
100
+ }
101
+ }
102
+
103
+ // TEST CASE 3: Macro-Generated Code with Dynamic Patterns
104
+ // Issue: Macro expansions create nodes at unexpected line ranges
105
+ macro_rules! generate_service_endpoints {
106
+ (
107
+ $(
108
+ $service_name:ident {
109
+ $(
110
+ $method:ident($($param:ident: $param_type:ty),*) -> $return_type:ty
111
+ => $endpoint:expr
112
+ ),*
113
+ }
114
+ ),*
115
+ ) => {
116
+ $( // Each service generates multiple functions
117
+ pub mod $service_name {
118
+ use super::*;
119
+
120
+ $( // Each method becomes a function
121
+ pub async fn $method(
122
+ client: &HttpClient,
123
+ $($param: $param_type),*
124
+ ) -> Result<$return_type, ApiError> {
125
+ let url = format!("{}{}", client.base_url(), $endpoint);
126
+ let response = client
127
+ .post(&url)
128
+ .json(&serde_json::json!({
129
+ $(stringify!($param): $param),*
130
+ }))
131
+ .send()
132
+ .await?;
133
+
134
+ if response.status().is_success() {
135
+ Ok(response.json().await?)
136
+ } else {
137
+ Err(ApiError::RequestFailed(response.status()))
138
+ }
139
+ }
140
+ )*
141
+ }
142
+ )*
143
+ };
144
+ }
145
+
146
+ // The macro expansion below creates many functions, but if AST filtering
147
+ // targets specific lines within the expansion, it might miss the broader context
148
+ generate_service_endpoints! {
149
+ user_service {
150
+ create_user(name: String, email: String) -> User => "/users",
151
+ get_user(id: u64) -> User => "/users/{id}",
152
+ update_user(id: u64, data: UserUpdateData) -> User => "/users/{id}",
153
+ delete_user(id: u64) -> () => "/users/{id}",
154
+ list_users(page: u32, limit: u32) -> Vec<User> => "/users"
155
+ },
156
+ auth_service {
157
+ login(username: String, password: String) -> AuthToken => "/auth/login",
158
+ refresh_token(token: String) -> AuthToken => "/auth/refresh",
159
+ logout(token: String) -> () => "/auth/logout",
160
+ validate_token(token: String) -> bool => "/auth/validate"
161
+ }
162
+ }
163
+
164
+ // TEST CASE 4: Documentation with Embedded Code Examples
165
+ /// A complex service that demonstrates various patterns that might be missed
166
+ /// by early termination optimizations.
167
+ ///
168
+ /// # Usage Examples
169
+ ///
170
+ /// Basic usage:
171
+ /// ```rust
172
+ /// let service = ComplexService::new(config);
173
+ /// let result = service.process_data(input).await?;
174
+ /// ```
175
+ ///
176
+ /// Advanced usage with custom transformers:
177
+ /// ```rust
178
+ /// let service = ComplexService::builder()
179
+ /// .with_custom_transformer(|data| {
180
+ /// // Complex transformation logic
181
+ /// transform_data_with_validation(data)
182
+ /// })
183
+ /// .with_retry_policy(RetryPolicy::exponential_backoff())
184
+ /// .with_timeout(Duration::from_secs(30))
185
+ /// .build()?;
186
+ ///
187
+ /// let processed = service
188
+ /// .process_batch(input_data)
189
+ /// .with_context("batch_processing")
190
+ /// .await?;
191
+ /// ```
192
+ ///
193
+ /// Error handling patterns:
194
+ /// ```rust
195
+ /// match service.process_data(risky_input).await {
196
+ /// Ok(result) => handle_success(result),
197
+ /// Err(ProcessingError::ValidationFailed(details)) => {
198
+ /// log::warn!("Validation failed: {:?}", details);
199
+ /// fallback_processing(risky_input).await?
200
+ /// },
201
+ /// Err(ProcessingError::TimeoutError) => {
202
+ /// log::error!("Processing timed out");
203
+ /// Err(ServiceError::ProcessingTimeout)
204
+ /// },
205
+ /// Err(other_error) => {
206
+ /// log::error!("Unexpected error: {:?}", other_error);
207
+ /// Err(ServiceError::UnexpectedError(other_error))
208
+ /// }
209
+ /// }
210
+ /// ```
211
+ pub struct ComplexService<T, R> {
212
+ processor: Arc<dyn DataProcessor<T, Output = R> + Send + Sync>,
213
+ config: ServiceConfiguration,
214
+ metrics: Arc<Mutex<ServiceMetrics>>,
215
+ }
216
+
217
+ // The implementation methods below might be missed if the search targets
218
+ // the documentation examples above, but AST filtering only considers
219
+ // the method implementation line ranges
220
+ impl<T, R> ComplexService<T, R>
221
+ where
222
+ T: Send + Sync + 'static,
223
+ R: Send + Sync + 'static
224
+ {
225
+ /// Creates a new service instance with the provided configuration.
226
+ /// This method demonstrates how semantic relationships can span multiple
227
+ /// "optimization boundaries" in the current early termination logic.
228
+ pub fn new(config: ServiceConfiguration) -> Result<Self, ServiceCreationError> {
229
+ let processor = Self::create_default_processor(&config)?;
230
+ let metrics = Arc::new(Mutex::new(ServiceMetrics::new()));
231
+
232
+ Ok(ComplexService {
233
+ processor,
234
+ config,
235
+ metrics,
236
+ })
237
+ }
238
+
239
+ /// Process data with comprehensive error handling and metrics collection.
240
+ /// This method contains patterns that might be split across different
241
+ /// line ranges from an AST filtering perspective.
242
+ pub async fn process_data(
243
+ &self,
244
+ input: ProcessingInput<T>
245
+ ) -> Result<ProcessingOutput<R>, ProcessingError> {
246
+ let start_time = Instant::now();
247
+ let processing_id = Uuid::new_v4();
248
+
249
+ // Pre-processing validation - might be in different "optimization zone"
250
+ self.validate_processing_input(&input)
251
+ .map_err(|e| ProcessingError::ValidationFailed {
252
+ processing_id,
253
+ details: e.to_string()
254
+ })?;
255
+
256
+ // Main processing logic - could be separated by line range filtering
257
+ let processing_context = ProcessingContext::new(processing_id, &self.config);
258
+ let intermediate_result = self
259
+ .processor
260
+ .process_with_context(input, processing_context)
261
+ .await
262
+ .map_err(|e| ProcessingError::ProcessorFailed {
263
+ processing_id,
264
+ source: e
265
+ })?;
266
+
267
+ // Post-processing and metrics - might be in yet another "zone"
268
+ let final_result = self
269
+ .apply_post_processing_rules(intermediate_result)
270
+ .await?;
271
+
272
+ self.update_processing_metrics(processing_id, start_time.elapsed())
273
+ .await;
274
+
275
+ Ok(final_result)
276
+ }
277
+
278
+ // Helper methods that form semantic units but might be missed
279
+ // by line-range-based early termination
280
+ fn validate_processing_input(
281
+ &self,
282
+ input: &ProcessingInput<T>
283
+ ) -> Result<(), ValidationError> {
284
+ // Validation logic that's semantically connected to process_data
285
+ // but might be filtered out if not in the target line ranges
286
+ if input.data.is_empty() {
287
+ return Err(ValidationError::EmptyInput);
288
+ }
289
+
290
+ if input.data.len() > self.config.max_batch_size {
291
+ return Err(ValidationError::BatchTooLarge {
292
+ size: input.data.len(),
293
+ max_allowed: self.config.max_batch_size
294
+ });
295
+ }
296
+
297
+ Ok(())
298
+ }
299
+
300
+ async fn apply_post_processing_rules(
301
+ &self,
302
+ intermediate: IntermediateResult<R>
303
+ ) -> Result<ProcessingOutput<R>, ProcessingError> {
304
+ // Post-processing logic that completes the semantic picture
305
+ // but might be separated from the main processing logic
306
+ // by AST node boundary calculations
307
+ let mut output = ProcessingOutput::from_intermediate(intermediate);
308
+
309
+ for rule in &self.config.post_processing_rules {
310
+ output = rule.apply(output).await?;
311
+ }
312
+
313
+ output.finalize_with_metadata(&self.config);
314
+ Ok(output)
315
+ }
316
+ }
317
+
318
+ // TEST CASE 5: Complex Generic Constraints That Span Multiple Lines
319
+ // Issue: The where clause and generic bounds might be considered separate
320
+ // from the implementation by simple line intersection checks
321
+ pub struct GenericRepository<T, K, E>
322
+ where
323
+ T: Entity<Key = K> + Serialize + DeserializeOwned + Clone + Debug + Send + Sync + 'static,
324
+ K: EntityKey + Hash + Eq + Clone + Debug + Send + Sync + 'static,
325
+ E: RepositoryError + From<DatabaseError> + Send + Sync + 'static,
326
+ T::QueryBuilder: QueryBuilder<T, K> + Send + Sync,
327
+ T::Validator: EntityValidator<T> + Send + Sync,
328
+ {
329
+ connection_pool: Arc<ConnectionPool>,
330
+ query_cache: Arc<RwLock<HashMap<K, CachedQuery<T>>>>,
331
+ validation_rules: Vec<Box<dyn ValidationRule<T> + Send + Sync>>,
332
+ metrics_collector: Option<Arc<dyn MetricsCollector + Send + Sync>>,
333
+ _phantom: PhantomData<(T, K, E)>,
334
+ }
335
+
336
+ // The implementation methods might be missed if the search focuses on specific
337
+ // method bodies but the generic constraints above define the semantic context
338
+ impl<T, K, E> GenericRepository<T, K, E>
339
+ where
340
+ T: Entity<Key = K> + Serialize + DeserializeOwned + Clone + Debug + Send + Sync + 'static,
341
+ K: EntityKey + Hash + Eq + Clone + Debug + Send + Sync + 'static,
342
+ E: RepositoryError + From<DatabaseError> + Send + Sync + 'static,
343
+ T::QueryBuilder: QueryBuilder<T, K> + Send + Sync,
344
+ T::Validator: EntityValidator<T> + Send + Sync,
345
+ {
346
+ // This method's implementation might be targeted by search, but without
347
+ // the generic constraints context above, the semantic meaning is incomplete
348
+ pub async fn find_with_complex_criteria(
349
+ &self,
350
+ criteria: ComplexQueryCriteria<T, K>
351
+ ) -> Result<PaginatedResult<T>, E> {
352
+ // Method implementation that relies heavily on the generic constraints
353
+ // defined above but might be filtered separately by line range optimization
354
+ let query_builder = T::QueryBuilder::new();
355
+ let validated_criteria = T::Validator::validate_query_criteria(&criteria)
356
+ .map_err(|validation_error| E::from(DatabaseError::ValidationFailed(validation_error)))?;
357
+
358
+ let paginated_query = query_builder
359
+ .with_criteria(validated_criteria)
360
+ .with_pagination(criteria.pagination.clone())
361
+ .with_ordering(criteria.sort_options.clone())
362
+ .build()?;
363
+
364
+ let results = self.execute_paginated_query(paginated_query).await?;
365
+ Ok(results)
366
+ }
367
+ }
368
+
369
+ // TEST CASE 6: Nested Module Structure with Cross-References
370
+ pub mod complex_nested_structure {
371
+ use super::*;
372
+
373
+ pub mod data_access {
374
+ use super::*;
375
+
376
+ // This function references types and functions defined in other modules
377
+ // Early termination might miss these cross-module dependencies
378
+ pub async fn load_user_with_permissions(
379
+ user_id: u64,
380
+ repository: &impl UserRepository,
381
+ permission_service: &impl PermissionService
382
+ ) -> Result<UserWithPermissions, DataAccessError> {
383
+ // The function body references external services and types
384
+ // If search targets this implementation but misses the service interfaces,
385
+ // the complete semantic picture is lost
386
+ let user = repository.find_by_id(user_id).await?
387
+ .ok_or(DataAccessError::UserNotFound(user_id))?;
388
+
389
+ let permissions = permission_service
390
+ .get_user_permissions(user_id)
391
+ .await
392
+ .map_err(DataAccessError::PermissionServiceError)?;
393
+
394
+ let role_permissions = permission_service
395
+ .get_role_permissions(&user.role)
396
+ .await
397
+ .map_err(DataAccessError::PermissionServiceError)?;
398
+
399
+ Ok(UserWithPermissions {
400
+ user,
401
+ direct_permissions: permissions,
402
+ role_permissions,
403
+ computed_at: Utc::now(),
404
+ })
405
+ }
406
+ }
407
+
408
+ pub mod business_logic {
409
+ use super::*;
410
+ use super::data_access::*;
411
+
412
+ // This service uses the data access functions above
413
+ // but might be considered in a separate "optimization zone"
414
+ pub struct UserManagementService {
415
+ user_repository: Arc<dyn UserRepository + Send + Sync>,
416
+ permission_service: Arc<dyn PermissionService + Send + Sync>,
417
+ audit_logger: Arc<dyn AuditLogger + Send + Sync>,
418
+ }
419
+
420
+ impl UserManagementService {
421
+ // This method creates semantic relationships with the data_access module
422
+ // but early termination might not capture these relationships
423
+ pub async fn update_user_with_permission_check(
424
+ &self,
425
+ user_id: u64,
426
+ updates: UserUpdateRequest,
427
+ requesting_user_id: u64
428
+ ) -> Result<User, UserManagementError> {
429
+ // Load the requesting user with permissions (cross-module dependency)
430
+ let requesting_user = load_user_with_permissions(
431
+ requesting_user_id,
432
+ self.user_repository.as_ref(),
433
+ self.permission_service.as_ref()
434
+ ).await
435
+ .map_err(UserManagementError::DataAccessError)?;
436
+
437
+ // Permission check logic that spans multiple semantic boundaries
438
+ if !requesting_user.can_modify_user(user_id) {
439
+ self.audit_logger.log_unauthorized_access(
440
+ requesting_user_id,
441
+ "update_user",
442
+ user_id
443
+ ).await;
444
+ return Err(UserManagementError::InsufficientPermissions);
445
+ }
446
+
447
+ // The actual update logic references many external components
448
+ let updated_user = self.user_repository
449
+ .update(user_id, updates)
450
+ .await
451
+ .map_err(UserManagementError::RepositoryError)?;
452
+
453
+ self.audit_logger.log_user_update(
454
+ requesting_user_id,
455
+ user_id,
456
+ &updates
457
+ ).await;
458
+
459
+ Ok(updated_user)
460
+ }
461
+ }
462
+ }
463
+ }
464
+
465
+ // Dummy types and traits for compilation
466
+ trait Entity {
467
+ type Key;
468
+ type QueryBuilder;
469
+ type Validator;
470
+ }
471
+
472
+ trait EntityKey {}
473
+ trait RepositoryError {}
474
+ trait EntityValidator<T> {
475
+ fn validate_query_criteria<K>(criteria: &ComplexQueryCriteria<T, K>) -> Result<(), String>;
476
+ }
477
+ trait QueryBuilder<T, K> {
478
+ fn new() -> Self;
479
+ fn with_criteria(self, criteria: ValidatedCriteria<T, K>) -> Self;
480
+ fn with_pagination(self, pagination: PaginationOptions) -> Self;
481
+ fn with_ordering(self, sort: SortOptions) -> Self;
482
+ fn build(self) -> Result<PaginatedQuery<T>, DatabaseError>;
483
+ }
484
+
485
+ // Additional supporting types...
486
+ struct DatabaseConnection;
487
+ struct QueryParameters<T>(T);
488
+ struct RetryConfiguration { max_retries: u32, delay: std::time::Duration }
489
+ struct DatabaseError<E>(E);
490
+ struct RawResult;
491
+ struct ProcessedData<T, R> { items: Vec<T>, metadata: String, processing_time: std::time::Duration }
492
+ struct ProcessingConfig;
493
+ struct ComplexProcessingError<E>(E);
494
+ struct ProcessingContext;
495
+ struct HttpClient { base_url: String }
496
+ struct ApiError;
497
+ struct ServiceConfiguration { max_batch_size: usize, post_processing_rules: Vec<PostProcessingRule> }
498
+ struct ServiceMetrics;
499
+ struct ServiceCreationError;
500
+ struct ProcessingInput<T> { data: Vec<T> }
501
+ struct ProcessingOutput<R>(R);
502
+ struct ProcessingError;
503
+ struct ValidationError;
504
+ struct IntermediateResult<R>(R);
505
+ struct PostProcessingRule;
506
+ struct ConnectionPool;
507
+ struct CachedQuery<T>(T);
508
+ trait ValidationRule<T> {}
509
+ trait MetricsCollector {}
510
+ struct ComplexQueryCriteria<T, K> { pagination: PaginationOptions, sort_options: SortOptions, _phantom: PhantomData<(T, K)> }
511
+ struct PaginatedResult<T>(Vec<T>);
512
+ struct ValidatedCriteria<T, K>(PhantomData<(T, K)>);
513
+ struct PaginationOptions;
514
+ struct SortOptions;
515
+ struct PaginatedQuery<T>(T);
516
+ struct DataAccessError;
517
+ trait UserRepository {
518
+ async fn find_by_id(&self, id: u64) -> Result<Option<User>, DatabaseError<String>>;
519
+ async fn update(&self, id: u64, updates: UserUpdateRequest) -> Result<User, DatabaseError<String>>;
520
+ }
521
+ trait PermissionService {
522
+ async fn get_user_permissions(&self, user_id: u64) -> Result<Vec<Permission>, String>;
523
+ async fn get_role_permissions(&self, role: &str) -> Result<Vec<Permission>, String>;
524
+ }
525
+ struct UserWithPermissions { user: User, direct_permissions: Vec<Permission>, role_permissions: Vec<Permission>, computed_at: chrono::DateTime<chrono::Utc> }
526
+ struct User { role: String }
527
+ struct Permission;
528
+ struct UserManagementError;
529
+ struct UserUpdateRequest;
530
+ trait AuditLogger {
531
+ async fn log_unauthorized_access(&self, user_id: u64, action: &str, target_id: u64);
532
+ async fn log_user_update(&self, requesting_user_id: u64, target_user_id: u64, updates: &UserUpdateRequest);
533
+ }
@@ -0,0 +1,26 @@
1
+ package main
2
+
3
+ import (
4
+ "net/http"
5
+
6
+ "github.com/gin-gonic/gin"
7
+ )
8
+
9
+ func HandleNotFound(c *gin.Context) {
10
+ c.JSON(http.StatusNotFound, ErrorResponse{
11
+ Errors: []struct {
12
+ Title string `json:"title"`
13
+ Detail string `json:"detail"`
14
+ }{{Title: "Not Found", Detail: "Model price not found"}},
15
+ })
16
+ }
17
+
18
+ type ErrorResponse struct {
19
+ Errors interface{} `json:"errors"`
20
+ }
21
+
22
+ func main() {
23
+ r := gin.Default()
24
+ r.NoRoute(HandleNotFound)
25
+ r.Run()
26
+ }