@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,428 @@
1
+ /**
2
+ * Configuration management for the implementation tool
3
+ * @module config
4
+ */
5
+
6
+ import fs from 'fs';
7
+ import path from 'path';
8
+ import { promisify } from 'util';
9
+ import { fileURLToPath } from 'url';
10
+ import { TIMEOUTS, getDefaultTimeoutMs, secondsToMs, isValidTimeout } from './timeouts.js';
11
+
12
+ const __dirname = path.dirname(fileURLToPath(import.meta.url));
13
+
14
+ const readFile = promisify(fs.readFile);
15
+ const writeFile = promisify(fs.writeFile);
16
+ const exists = promisify(fs.exists);
17
+
18
+ /**
19
+ * Configuration manager for implementation backends
20
+ * @class
21
+ */
22
+ class ConfigManager {
23
+ constructor() {
24
+ this.config = null;
25
+ this.configPath = null;
26
+ this.watchers = new Map();
27
+ this.changeCallbacks = [];
28
+ }
29
+
30
+ /**
31
+ * Initialize configuration
32
+ * @param {string} [configPath] - Path to configuration file
33
+ * @returns {Promise<void>}
34
+ */
35
+ async initialize(configPath = null) {
36
+ // Determine config path
37
+ this.configPath = this.resolveConfigPath(configPath);
38
+
39
+ // Load configuration
40
+ await this.loadConfig();
41
+
42
+ // Apply environment overrides
43
+ this.applyEnvironmentOverrides();
44
+
45
+ // Set up file watching
46
+ if (this.configPath && fs.existsSync(this.configPath)) {
47
+ this.setupWatcher();
48
+ }
49
+ }
50
+
51
+ /**
52
+ * Resolve configuration file path
53
+ * @param {string} [providedPath] - User-provided path
54
+ * @returns {string|null}
55
+ * @private
56
+ */
57
+ resolveConfigPath(providedPath) {
58
+ // Priority order:
59
+ // 1. Provided path
60
+ // 2. Environment variable
61
+ // 3. Local config file
62
+ // 4. Default config file
63
+
64
+ if (providedPath && fs.existsSync(providedPath)) {
65
+ return providedPath;
66
+ }
67
+
68
+ if (process.env.IMPLEMENT_TOOL_CONFIG_PATH) {
69
+ const envPath = process.env.IMPLEMENT_TOOL_CONFIG_PATH;
70
+ if (fs.existsSync(envPath)) {
71
+ return envPath;
72
+ }
73
+ }
74
+
75
+ // Check for local config in current directory
76
+ const localConfig = path.join(process.cwd(), 'implement-config.json');
77
+ if (fs.existsSync(localConfig)) {
78
+ return localConfig;
79
+ }
80
+
81
+ // Fall back to default config
82
+ const defaultConfig = path.join(__dirname, '..', 'config', 'default.json');
83
+ if (fs.existsSync(defaultConfig)) {
84
+ return defaultConfig;
85
+ }
86
+
87
+ return null;
88
+ }
89
+
90
+ /**
91
+ * Load configuration from file
92
+ * @returns {Promise<void>}
93
+ * @private
94
+ */
95
+ async loadConfig() {
96
+ if (this.configPath && fs.existsSync(this.configPath)) {
97
+ try {
98
+ const configData = await readFile(this.configPath, 'utf8');
99
+ this.config = JSON.parse(configData);
100
+ console.error(`Loaded configuration from: ${this.configPath}`);
101
+ } catch (error) {
102
+ console.error(`Failed to load configuration from ${this.configPath}:`, error.message);
103
+ this.config = this.getDefaultConfig();
104
+ }
105
+ } else {
106
+ console.error('Using default configuration');
107
+ this.config = this.getDefaultConfig();
108
+ }
109
+ }
110
+
111
+ /**
112
+ * Get default configuration
113
+ * @returns {Object}
114
+ * @private
115
+ */
116
+ getDefaultConfig() {
117
+ return {
118
+ implement: {
119
+ defaultBackend: 'aider',
120
+ selectionStrategy: 'auto',
121
+ maxConcurrentSessions: 3,
122
+ timeout: getDefaultTimeoutMs(), // Use centralized default (20 minutes)
123
+ retryAttempts: 2,
124
+ retryDelay: 5000
125
+ },
126
+ backends: {
127
+ aider: {
128
+ command: 'aider',
129
+ timeout: getDefaultTimeoutMs(), // Use centralized default (20 minutes)
130
+ maxOutputSize: 10485760,
131
+ additionalArgs: [],
132
+ environment: {},
133
+ autoCommit: false,
134
+ modelSelection: 'auto'
135
+ },
136
+ 'claude-code': {
137
+ timeout: getDefaultTimeoutMs(), // Use centralized default (20 minutes)
138
+ maxTokens: 8000,
139
+ temperature: 0.3,
140
+ model: 'claude-3-5-sonnet-20241022',
141
+ systemPrompt: null,
142
+ tools: ['edit', 'search', 'bash'],
143
+ maxTurns: 100
144
+ }
145
+ }
146
+ };
147
+ }
148
+
149
+ /**
150
+ * Apply environment variable overrides
151
+ * @private
152
+ */
153
+ applyEnvironmentOverrides() {
154
+ // Backend selection
155
+ if (process.env.IMPLEMENT_TOOL_BACKEND) {
156
+ this.config.implement.defaultBackend = process.env.IMPLEMENT_TOOL_BACKEND;
157
+ console.error(`[ImplementConfig] Setting default backend from env: ${process.env.IMPLEMENT_TOOL_BACKEND}`);
158
+ }
159
+
160
+ if (process.env.IMPLEMENT_TOOL_FALLBACKS) {
161
+ this.config.implement.fallbackBackends = process.env.IMPLEMENT_TOOL_FALLBACKS
162
+ .split(',')
163
+ .map(s => s.trim())
164
+ .filter(Boolean);
165
+ }
166
+
167
+ if (process.env.IMPLEMENT_TOOL_SELECTION_STRATEGY) {
168
+ this.config.implement.selectionStrategy = process.env.IMPLEMENT_TOOL_SELECTION_STRATEGY;
169
+ }
170
+
171
+ if (process.env.IMPLEMENT_TOOL_TIMEOUT) {
172
+ // Convert seconds to milliseconds for backend compatibility
173
+ const timeoutSeconds = parseInt(process.env.IMPLEMENT_TOOL_TIMEOUT, 10);
174
+
175
+ if (isNaN(timeoutSeconds)) {
176
+ console.warn(`[Config] Invalid IMPLEMENT_TOOL_TIMEOUT value: ${process.env.IMPLEMENT_TOOL_TIMEOUT}. Using default: ${TIMEOUTS.IMPLEMENT_DEFAULT}s`);
177
+ } else if (!isValidTimeout(timeoutSeconds)) {
178
+ console.warn(`[Config] IMPLEMENT_TOOL_TIMEOUT ${timeoutSeconds}s outside valid range ${TIMEOUTS.IMPLEMENT_MINIMUM}-${TIMEOUTS.IMPLEMENT_MAXIMUM}s. Using default: ${TIMEOUTS.IMPLEMENT_DEFAULT}s`);
179
+ } else {
180
+ this.config.implement.timeout = secondsToMs(timeoutSeconds);
181
+ // Log message removed to prevent stdout pollution
182
+ }
183
+ }
184
+
185
+ // Aider backend configuration
186
+ if (process.env.AIDER_MODEL) {
187
+ this.config.backends.aider = this.config.backends.aider || {};
188
+ this.config.backends.aider.model = process.env.AIDER_MODEL;
189
+ }
190
+
191
+ if (process.env.AIDER_TIMEOUT) {
192
+ this.config.backends.aider = this.config.backends.aider || {};
193
+ this.config.backends.aider.timeout = parseInt(process.env.AIDER_TIMEOUT, 10);
194
+ }
195
+
196
+ if (process.env.AIDER_AUTO_COMMIT) {
197
+ this.config.backends.aider = this.config.backends.aider || {};
198
+ this.config.backends.aider.autoCommit = process.env.AIDER_AUTO_COMMIT === 'true';
199
+ }
200
+
201
+ if (process.env.AIDER_ADDITIONAL_ARGS) {
202
+ this.config.backends.aider = this.config.backends.aider || {};
203
+ this.config.backends.aider.additionalArgs = process.env.AIDER_ADDITIONAL_ARGS
204
+ .split(',')
205
+ .map(s => s.trim())
206
+ .filter(Boolean);
207
+ }
208
+
209
+ // Claude Code backend configuration
210
+ if (process.env.CLAUDE_CODE_MODEL) {
211
+ this.config.backends['claude-code'] = this.config.backends['claude-code'] || {};
212
+ this.config.backends['claude-code'].model = process.env.CLAUDE_CODE_MODEL;
213
+ }
214
+
215
+ if (process.env.CLAUDE_CODE_MAX_TOKENS) {
216
+ this.config.backends['claude-code'] = this.config.backends['claude-code'] || {};
217
+ this.config.backends['claude-code'].maxTokens = parseInt(process.env.CLAUDE_CODE_MAX_TOKENS, 10);
218
+ }
219
+
220
+ if (process.env.CLAUDE_CODE_TEMPERATURE) {
221
+ this.config.backends['claude-code'] = this.config.backends['claude-code'] || {};
222
+ this.config.backends['claude-code'].temperature = parseFloat(process.env.CLAUDE_CODE_TEMPERATURE);
223
+ }
224
+
225
+ if (process.env.CLAUDE_CODE_MAX_TURNS) {
226
+ this.config.backends['claude-code'] = this.config.backends['claude-code'] || {};
227
+ this.config.backends['claude-code'].maxTurns = parseInt(process.env.CLAUDE_CODE_MAX_TURNS, 10);
228
+ }
229
+ }
230
+
231
+ /**
232
+ * Set up file watcher for configuration changes
233
+ * @private
234
+ */
235
+ setupWatcher() {
236
+ if (!this.configPath) return;
237
+
238
+ fs.watchFile(this.configPath, { interval: 2000 }, async (curr, prev) => {
239
+ if (curr.mtime !== prev.mtime) {
240
+ console.error('Configuration file changed, reloading...');
241
+ await this.reloadConfig();
242
+ }
243
+ });
244
+ }
245
+
246
+ /**
247
+ * Reload configuration from file
248
+ * @returns {Promise<void>}
249
+ */
250
+ async reloadConfig() {
251
+ try {
252
+ const oldConfig = JSON.stringify(this.config);
253
+ await this.loadConfig();
254
+ this.applyEnvironmentOverrides();
255
+
256
+ const newConfig = JSON.stringify(this.config);
257
+ if (oldConfig !== newConfig) {
258
+ this.notifyChangeCallbacks();
259
+ }
260
+ } catch (error) {
261
+ console.error('Failed to reload configuration:', error);
262
+ }
263
+ }
264
+
265
+ /**
266
+ * Register a callback for configuration changes
267
+ * @param {Function} callback - Callback function
268
+ */
269
+ onChange(callback) {
270
+ this.changeCallbacks.push(callback);
271
+ }
272
+
273
+ /**
274
+ * Notify all change callbacks
275
+ * @private
276
+ */
277
+ notifyChangeCallbacks() {
278
+ for (const callback of this.changeCallbacks) {
279
+ try {
280
+ callback(this.config);
281
+ } catch (error) {
282
+ console.error('Error in configuration change callback:', error);
283
+ }
284
+ }
285
+ }
286
+
287
+ /**
288
+ * Get configuration value by path
289
+ * @param {string} [path] - Dot-separated path (e.g., 'implement.defaultBackend')
290
+ * @returns {*}
291
+ */
292
+ get(path = null) {
293
+ if (!path) {
294
+ return this.config;
295
+ }
296
+
297
+ const parts = path.split('.');
298
+ let value = this.config;
299
+
300
+ for (const part of parts) {
301
+ if (value && typeof value === 'object' && part in value) {
302
+ value = value[part];
303
+ } else {
304
+ return undefined;
305
+ }
306
+ }
307
+
308
+ return value;
309
+ }
310
+
311
+ /**
312
+ * Set configuration value by path
313
+ * @param {string} path - Dot-separated path
314
+ * @param {*} value - Value to set
315
+ */
316
+ set(path, value) {
317
+ const parts = path.split('.');
318
+ const lastPart = parts.pop();
319
+
320
+ let target = this.config;
321
+ for (const part of parts) {
322
+ if (!(part in target) || typeof target[part] !== 'object') {
323
+ target[part] = {};
324
+ }
325
+ target = target[part];
326
+ }
327
+
328
+ target[lastPart] = value;
329
+ }
330
+
331
+ /**
332
+ * Save configuration to file
333
+ * @param {string} [path] - Path to save to (defaults to current config path)
334
+ * @returns {Promise<void>}
335
+ */
336
+ async save(path = null) {
337
+ const savePath = path || this.configPath;
338
+ if (!savePath) {
339
+ throw new Error('No configuration file path specified');
340
+ }
341
+
342
+ try {
343
+ const configData = JSON.stringify(this.config, null, 2);
344
+ await writeFile(savePath, configData, 'utf8');
345
+ console.error(`Configuration saved to: ${savePath}`);
346
+ } catch (error) {
347
+ throw new Error(`Failed to save configuration: ${error.message}`);
348
+ }
349
+ }
350
+
351
+ /**
352
+ * Get backend-specific configuration
353
+ * @param {string} backendName - Backend name
354
+ * @returns {Object}
355
+ */
356
+ getBackendConfig(backendName) {
357
+ return this.config.backends?.[backendName] || {};
358
+ }
359
+
360
+ /**
361
+ * Get implementation tool configuration
362
+ * @returns {Object}
363
+ */
364
+ getImplementConfig() {
365
+ return this.config.implement || {};
366
+ }
367
+
368
+ /**
369
+ * Validate configuration
370
+ * @returns {Object} Validation result
371
+ */
372
+ validate() {
373
+ const errors = [];
374
+ const warnings = [];
375
+
376
+ // Check required fields
377
+ if (!this.config.implement?.defaultBackend) {
378
+ errors.push('implement.defaultBackend is required');
379
+ }
380
+
381
+ // Check backend configurations exist
382
+ const defaultBackend = this.config.implement?.defaultBackend;
383
+ if (defaultBackend && !this.config.backends?.[defaultBackend]) {
384
+ warnings.push(`Configuration for default backend '${defaultBackend}' not found`);
385
+ }
386
+
387
+ // Check fallback backends
388
+ const fallbackBackends = this.config.implement?.fallbackBackends || [];
389
+ for (const backend of fallbackBackends) {
390
+ if (!this.config.backends?.[backend]) {
391
+ warnings.push(`Configuration for fallback backend '${backend}' not found`);
392
+ }
393
+ }
394
+
395
+ // Validate selection strategy
396
+ const validStrategies = ['auto', 'preference', 'capability'];
397
+ const strategy = this.config.implement?.selectionStrategy;
398
+ if (strategy && !validStrategies.includes(strategy)) {
399
+ errors.push(`Invalid selection strategy: ${strategy}. Must be one of: ${validStrategies.join(', ')}`);
400
+ }
401
+
402
+ return {
403
+ valid: errors.length === 0,
404
+ errors,
405
+ warnings
406
+ };
407
+ }
408
+
409
+ /**
410
+ * Clean up resources
411
+ */
412
+ cleanup() {
413
+ if (this.configPath) {
414
+ fs.unwatchFile(this.configPath);
415
+ }
416
+
417
+ this.changeCallbacks = [];
418
+ this.watchers.clear();
419
+ }
420
+ }
421
+
422
+ // Create singleton instance
423
+ const configManager = new ConfigManager();
424
+
425
+ export {
426
+ ConfigManager,
427
+ configManager
428
+ };
@@ -0,0 +1,58 @@
1
+ /**
2
+ * Centralized timeout configuration for the implementation system
3
+ *
4
+ * This file defines all timeout values used across the implementation pipeline
5
+ * to ensure consistency and maintainability.
6
+ */
7
+
8
+ export const TIMEOUTS = {
9
+ // Main implementation timeouts (in seconds - user-friendly)
10
+ IMPLEMENT_DEFAULT: 1200, // 20 minutes - default for Claude Code/Aider execution
11
+ IMPLEMENT_MINIMUM: 60, // 1 minute - minimum allowed timeout
12
+ IMPLEMENT_MAXIMUM: 3600, // 1 hour - maximum allowed timeout
13
+
14
+ // Quick verification checks (in milliseconds)
15
+ VERSION_CHECK: 5000, // 5 seconds - claude --version, aider --version
16
+ PATH_CHECK: 2000, // 2 seconds - command existence checks
17
+ NPM_CHECK: 5000, // 5 seconds - npm operations
18
+ WSL_CHECK: 2000, // 2 seconds - WSL availability checks
19
+
20
+ // Network operations (in milliseconds)
21
+ HTTP_REQUEST: 10000, // 10 seconds - GitHub URLs, remote requests
22
+ FILE_FLUSH: 5000, // 5 seconds - file operations and flushing
23
+ };
24
+
25
+ /**
26
+ * Convert seconds to milliseconds for internal use
27
+ * @param {number} seconds - Timeout in seconds
28
+ * @returns {number} Timeout in milliseconds
29
+ */
30
+ export function secondsToMs(seconds) {
31
+ return seconds * 1000;
32
+ }
33
+
34
+ /**
35
+ * Convert milliseconds to seconds for user display
36
+ * @param {number} milliseconds - Timeout in milliseconds
37
+ * @returns {number} Timeout in seconds
38
+ */
39
+ export function msToSeconds(milliseconds) {
40
+ return Math.floor(milliseconds / 1000);
41
+ }
42
+
43
+ /**
44
+ * Validate timeout value is within acceptable bounds
45
+ * @param {number} seconds - Timeout in seconds
46
+ * @returns {boolean} True if valid
47
+ */
48
+ export function isValidTimeout(seconds) {
49
+ return seconds >= TIMEOUTS.IMPLEMENT_MINIMUM && seconds <= TIMEOUTS.IMPLEMENT_MAXIMUM;
50
+ }
51
+
52
+ /**
53
+ * Get default timeout in milliseconds for internal use
54
+ * @returns {number} Default timeout in milliseconds
55
+ */
56
+ export function getDefaultTimeoutMs() {
57
+ return secondsToMs(TIMEOUTS.IMPLEMENT_DEFAULT);
58
+ }