@tyvm/knowhow 0.0.32 → 0.0.34

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 (508) hide show
  1. package/autodoc/plugins/downloader/downloader.mdx +2 -2
  2. package/benchmarks/.dockerignore +7 -0
  3. package/benchmarks/README.md +166 -0
  4. package/benchmarks/docker/Dockerfile +68 -0
  5. package/benchmarks/example-config.yml +27 -0
  6. package/benchmarks/jest.config.js +13 -0
  7. package/benchmarks/package-lock.json +4297 -0
  8. package/benchmarks/package.json +39 -0
  9. package/benchmarks/results/4542435/2025-08-05/lms/lms-openai-gpt-oss-20b.json +2814 -0
  10. package/benchmarks/results/4542435/2025-08-05/lms/lms-qwen-qwen3-30b-a3b-2507.json +2014 -0
  11. package/benchmarks/results/4fb9125/2025-08-07/anthropic/anthropic-claude-sonnet-4-20250514.json +3121 -0
  12. package/benchmarks/results/5766aee/2025-08-02/lms-qwen/qwen3-coder-30b.json +98 -0
  13. package/benchmarks/results/6d73808/2025-08-07/openai/openai-gpt-5.json +3256 -0
  14. package/benchmarks/results/77bf0a6/2025-08-02/lms-qwen/qwen3-30b-a3b-2507.json +4298 -0
  15. package/benchmarks/results/8c0d445/2025-08-03/anthropic/anthropic-claude-sonnet-4-20250514.json +3031 -0
  16. package/benchmarks/results/8c0d445/2025-08-03/openai/openai-gpt-4.1-2025-04-14.json +2990 -0
  17. package/benchmarks/results/ac6b2ab/2025-08-03/anthropic/anthropic-claude-sonnet-4-20250514.json +3256 -0
  18. package/benchmarks/results/ac6b2ab/2025-08-03/lms/lms-qwen-qwen3-coder-30b.json +3007 -0
  19. package/benchmarks/results/ac6b2ab/2025-08-03/openai/openai-gpt-4.1-2025-04-14.json +3256 -0
  20. package/benchmarks/results/ac6b2ab/2025-08-03/openai/openai-gpt-4.1-mini-2025-04-14.json +3036 -0
  21. package/benchmarks/results/ac6b2ab/2025-08-03/openai/openai-gpt-4.1-nano-2025-04-14.json +3280 -0
  22. package/benchmarks/results/adff675/2025-08-04/lms/lms-qwen-qwen3-30b-a3b-2507.json +1920 -0
  23. package/benchmarks/results/adff675/2025-08-04/lms/lms-qwen-qwen3-coder-30b.json +3281 -0
  24. package/benchmarks/results/b502ed9/2025-08-03/lms-qwen/qwen3-coder-30b.json +2896 -0
  25. package/benchmarks/results/d1a8129/2025-08-03/lms/lms-qwen-qwen3-coder-30b.json +3011 -0
  26. package/benchmarks/results/e60471c/2025-08-03/lms/qwen3-30b-a3b-2507.json +3003 -0
  27. package/benchmarks/scripts/build-and-run.sh +47 -0
  28. package/benchmarks/scripts/clone-exercism.sh +92 -0
  29. package/benchmarks/scripts/validate.sh +48 -0
  30. package/benchmarks/src/__tests__/runner.test.ts +27 -0
  31. package/benchmarks/src/cli.ts +90 -0
  32. package/benchmarks/src/evaluators/EvaluatorRegistry.ts +64 -0
  33. package/benchmarks/src/evaluators/JavaScriptEvaluator.ts +183 -0
  34. package/benchmarks/src/evaluators/index.ts +3 -0
  35. package/benchmarks/src/evaluators/types.ts +22 -0
  36. package/benchmarks/src/index.ts +3 -0
  37. package/benchmarks/src/providers.ts +13 -0
  38. package/benchmarks/src/runner.ts +824 -0
  39. package/benchmarks/src/types.ts +63 -0
  40. package/benchmarks/tsconfig.json +19 -0
  41. package/jest.config.js +2 -1
  42. package/leaderboard/README.md +148 -0
  43. package/leaderboard/app/api/benchmark-data/route.ts +131 -0
  44. package/leaderboard/app/api/benchmark-detail/route.ts +172 -0
  45. package/leaderboard/app/details/[model]/[provider]/[language]/page.tsx +501 -0
  46. package/leaderboard/app/exercise/[model]/[provider]/[language]/[exercise]/page.tsx +375 -0
  47. package/leaderboard/app/globals.css +27 -0
  48. package/leaderboard/app/layout.tsx +21 -0
  49. package/leaderboard/app/page.tsx +170 -0
  50. package/leaderboard/components/LeaderboardTable.tsx +168 -0
  51. package/leaderboard/components/PerformanceChart.tsx +109 -0
  52. package/leaderboard/next-env.d.ts +5 -0
  53. package/leaderboard/next.config.js +4 -0
  54. package/leaderboard/package-lock.json +6363 -0
  55. package/leaderboard/package.json +28 -0
  56. package/leaderboard/postcss.config.js +6 -0
  57. package/leaderboard/tailwind.config.js +17 -0
  58. package/leaderboard/tsconfig.json +28 -0
  59. package/leaderboard/types/benchmark.ts +67 -0
  60. package/leaderboard/utils/dataProcessor.ts +33 -0
  61. package/package.json +2 -1
  62. package/src/agents/base/base.ts +147 -21
  63. package/src/agents/base/prompt.ts +28 -0
  64. package/src/agents/index.ts +3 -0
  65. package/src/agents/patcher/patcher.ts +6 -4
  66. package/src/agents/setup/setup.ts +56 -0
  67. package/src/agents/tools/agentCall.ts +6 -2
  68. package/src/agents/tools/aiClient.ts +74 -8
  69. package/src/agents/tools/execCommand.ts +13 -14
  70. package/src/agents/tools/executeScript/README.md +16 -0
  71. package/src/agents/tools/index.ts +2 -0
  72. package/src/agents/tools/list.ts +73 -16
  73. package/src/agents/tools/startAgentTask.ts +109 -0
  74. package/src/agents/tools/textSearch.ts +1 -1
  75. package/src/agents/tools/visionTool.ts +31 -2
  76. package/src/agents/tools/ycmd/client.ts +608 -0
  77. package/src/agents/tools/ycmd/definitions.ts +294 -0
  78. package/src/agents/tools/ycmd/detection.ts +211 -0
  79. package/src/agents/tools/ycmd/index.ts +11 -0
  80. package/src/agents/tools/ycmd/installer.ts +251 -0
  81. package/src/agents/tools/ycmd/server.ts +535 -0
  82. package/src/agents/tools/ycmd/serverManager.ts +316 -0
  83. package/src/agents/tools/ycmd/tools/completion.ts +113 -0
  84. package/src/agents/tools/ycmd/tools/diagnostics.ts +155 -0
  85. package/src/agents/tools/ycmd/tools/getLocations.ts +173 -0
  86. package/src/agents/tools/ycmd/tools/goto.ts +169 -0
  87. package/src/agents/tools/ycmd/tools/refactor.ts +204 -0
  88. package/src/agents/tools/ycmd/tools/signature.ts +174 -0
  89. package/src/agents/tools/ycmd/tools/start.ts +95 -0
  90. package/src/agents/tools/ycmd/utils/pathUtils.ts +59 -0
  91. package/src/ai.ts +15 -0
  92. package/src/chat/CliChatService.ts +277 -0
  93. package/src/chat/modules/AgentModule.ts +980 -0
  94. package/src/chat/modules/AskModule.ts +98 -0
  95. package/src/chat/modules/BaseChatModule.ts +66 -0
  96. package/src/chat/modules/InternalChatModule.ts +174 -0
  97. package/src/chat/modules/SearchModule.ts +166 -0
  98. package/src/chat/modules/SetupModule.ts +185 -0
  99. package/src/chat/modules/SystemModule.ts +120 -0
  100. package/src/chat/modules/VoiceModule.ts +70 -0
  101. package/src/chat/modules/index.js +5 -0
  102. package/src/chat/types.ts +97 -0
  103. package/src/chat.ts +9 -1
  104. package/src/chat2.ts +62 -0
  105. package/src/cli.ts +264 -35
  106. package/src/clients/anthropic.ts +14 -7
  107. package/src/clients/gemini.ts +15 -7
  108. package/src/clients/http.ts +17 -7
  109. package/src/clients/index.ts +117 -4
  110. package/src/clients/knowhow.ts +7 -2
  111. package/src/clients/knowhowMcp.ts +118 -0
  112. package/src/clients/openai.ts +32 -8
  113. package/src/clients/types.ts +1 -0
  114. package/src/clients/xai.ts +17 -5
  115. package/src/config.ts +30 -5
  116. package/src/conversion.ts +4 -1
  117. package/src/embeddings.ts +79 -23
  118. package/src/login.ts +26 -9
  119. package/src/microphone.ts +0 -1
  120. package/src/plugins/downloader/downloader.ts +72 -24
  121. package/src/plugins/downloader/plugin.ts +3 -1
  122. package/src/plugins/plugins.ts +3 -0
  123. package/src/processors/CustomVariables.ts +425 -0
  124. package/src/processors/HarmonyToolProcessor.ts +264 -0
  125. package/src/processors/XmlToolCallProcessor.ts +533 -0
  126. package/src/processors/index.ts +3 -0
  127. package/src/prompts/KnowhowConfigExamples.ts +376 -0
  128. package/src/services/KnowhowClient.ts +49 -3
  129. package/src/services/Mcp.ts +42 -3
  130. package/src/services/McpServer.ts +14 -4
  131. package/src/services/McpWebsocketTransport.ts +21 -7
  132. package/src/services/MessageProcessor.ts +10 -5
  133. package/src/services/index.ts +5 -0
  134. package/src/services/script-execution/ScriptExecutor.ts +34 -1
  135. package/src/services/types.ts +17 -14
  136. package/src/types.ts +17 -0
  137. package/src/utils/index.ts +138 -0
  138. package/tests/XmlToolCallProcessor.test.ts +468 -0
  139. package/tests/manual/ycmd/debug_diagnostics_test.ts +127 -0
  140. package/tests/manual/ycmd/fixtures/debug_diagnostics.ts +26 -0
  141. package/tests/manual/ycmd/fixtures/file_change_test.ts +17 -0
  142. package/tests/manual/ycmd/minimal_advanced_test.ts +108 -0
  143. package/tests/manual/ycmd/simple_diagnostics_test.ts +61 -0
  144. package/tests/manual/ycmd/simple_test.ts +74 -0
  145. package/tests/manual/ycmd/test-typescript-sample.ts +34 -0
  146. package/tests/manual/ycmd/test_advanced_features.ts +407 -0
  147. package/tests/manual/ycmd/test_advanced_with_tools.ts +320 -0
  148. package/tests/manual/ycmd/test_comprehensive_typescript.ts +179 -0
  149. package/tests/manual/ycmd/test_diagnostics_file_changes.ts +249 -0
  150. package/tests/manual/ycmd/test_diagnostics_fix.ts +99 -0
  151. package/tests/manual/ycmd/test_diagnostics_simple.ts +100 -0
  152. package/tests/manual/ycmd/test_diagnostics_timing.ts +120 -0
  153. package/tests/manual/ycmd/test_discover_commands.ts +310 -0
  154. package/tests/manual/ycmd/test_endpoints.ts +115 -0
  155. package/tests/manual/ycmd/test_final_comprehensive.ts +218 -0
  156. package/tests/manual/ycmd/test_final_validation.ts +150 -0
  157. package/tests/manual/ycmd/test_implementation.js +42 -0
  158. package/tests/manual/ycmd/test_individual_ycmd_tool.ts +39 -0
  159. package/tests/manual/ycmd/test_server_manager.ts +52 -0
  160. package/tests/manual/ycmd/test_simple_debug.ts +86 -0
  161. package/tests/manual/ycmd/test_tsserver_workflow.js +83 -0
  162. package/tests/manual/ycmd/test_tsserver_workflow.ts +122 -0
  163. package/tests/manual/ycmd/test_typescript_simple.ts +48 -0
  164. package/tests/manual/ycmd/test_typescript_ycmd.ts +105 -0
  165. package/tests/manual/ycmd/test_workspace_config.ts +90 -0
  166. package/tests/manual/ycmd/test_ycmd_auto_start.ts +137 -0
  167. package/tests/manual/ycmd/test_ycmd_comprehensive.ts +73 -0
  168. package/tests/manual/ycmd/test_ycmd_connection.py +10 -0
  169. package/tests/manual/ycmd/test_ycmd_direct.ts +142 -0
  170. package/tests/manual/ycmd/test_ycmd_experiment.ts +48 -0
  171. package/tests/manual/ycmd/test_ycmd_final.ts +200 -0
  172. package/tests/manual/ycmd/test_ycmd_fixed.py +18 -0
  173. package/tests/manual/ycmd/test_ycmd_integration.ts +112 -0
  174. package/tests/manual/ycmd/test_ycmd_simple.ts +45 -0
  175. package/tests/manual/ycmd/test_ycmd_usage.py +27 -0
  176. package/tests/manual/ycmd/working_simple_test.ts +134 -0
  177. package/ts_build/src/agents/base/base.d.ts +14 -1
  178. package/ts_build/src/agents/base/base.js +91 -17
  179. package/ts_build/src/agents/base/base.js.map +1 -1
  180. package/ts_build/src/agents/base/prompt.d.ts +1 -1
  181. package/ts_build/src/agents/base/prompt.js +28 -0
  182. package/ts_build/src/agents/base/prompt.js.map +1 -1
  183. package/ts_build/src/agents/index.d.ts +2 -0
  184. package/ts_build/src/agents/index.js +2 -0
  185. package/ts_build/src/agents/index.js.map +1 -1
  186. package/ts_build/src/agents/patcher/patcher.js +6 -3
  187. package/ts_build/src/agents/patcher/patcher.js.map +1 -1
  188. package/ts_build/src/agents/setup/setup.d.ts +8 -0
  189. package/ts_build/src/agents/setup/setup.js +59 -0
  190. package/ts_build/src/agents/setup/setup.js.map +1 -0
  191. package/ts_build/src/agents/tools/agentCall.js +5 -2
  192. package/ts_build/src/agents/tools/agentCall.js.map +1 -1
  193. package/ts_build/src/agents/tools/aiClient.d.ts +6 -5
  194. package/ts_build/src/agents/tools/aiClient.js +37 -6
  195. package/ts_build/src/agents/tools/aiClient.js.map +1 -1
  196. package/ts_build/src/agents/tools/execCommand.d.ts +2 -2
  197. package/ts_build/src/agents/tools/execCommand.js +5 -6
  198. package/ts_build/src/agents/tools/execCommand.js.map +1 -1
  199. package/ts_build/src/agents/tools/executeScript/index.d.ts +1 -1
  200. package/ts_build/src/agents/tools/index.d.ts +2 -0
  201. package/ts_build/src/agents/tools/index.js +2 -0
  202. package/ts_build/src/agents/tools/index.js.map +1 -1
  203. package/ts_build/src/agents/tools/list.js +66 -16
  204. package/ts_build/src/agents/tools/list.js.map +1 -1
  205. package/ts_build/src/agents/tools/startAgentTask.d.ts +13 -0
  206. package/ts_build/src/agents/tools/startAgentTask.js +74 -0
  207. package/ts_build/src/agents/tools/startAgentTask.js.map +1 -0
  208. package/ts_build/src/agents/tools/startChatTask.d.ts +13 -0
  209. package/ts_build/src/agents/tools/startChatTask.js +73 -0
  210. package/ts_build/src/agents/tools/startChatTask.js.map +1 -0
  211. package/ts_build/src/agents/tools/textSearch.js +1 -1
  212. package/ts_build/src/agents/tools/textSearch.js.map +1 -1
  213. package/ts_build/src/agents/tools/visionTool.d.ts +1 -1
  214. package/ts_build/src/agents/tools/visionTool.js +23 -3
  215. package/ts_build/src/agents/tools/visionTool.js.map +1 -1
  216. package/ts_build/src/agents/tools/ycmd/client.d.ts +93 -0
  217. package/ts_build/src/agents/tools/ycmd/client.js +355 -0
  218. package/ts_build/src/agents/tools/ycmd/client.js.map +1 -0
  219. package/ts_build/src/agents/tools/ycmd/definitions.d.ts +345 -0
  220. package/ts_build/src/agents/tools/ycmd/definitions.js +298 -0
  221. package/ts_build/src/agents/tools/ycmd/definitions.js.map +1 -0
  222. package/ts_build/src/agents/tools/ycmd/detection.d.ts +11 -0
  223. package/ts_build/src/agents/tools/ycmd/detection.js +175 -0
  224. package/ts_build/src/agents/tools/ycmd/detection.js.map +1 -0
  225. package/ts_build/src/agents/tools/ycmd/index.d.ts +8 -0
  226. package/ts_build/src/agents/tools/ycmd/index.js +20 -0
  227. package/ts_build/src/agents/tools/ycmd/index.js.map +1 -0
  228. package/ts_build/src/agents/tools/ycmd/installer.d.ts +19 -0
  229. package/ts_build/src/agents/tools/ycmd/installer.js +196 -0
  230. package/ts_build/src/agents/tools/ycmd/installer.js.map +1 -0
  231. package/ts_build/src/agents/tools/ycmd/server.d.ts +35 -0
  232. package/ts_build/src/agents/tools/ycmd/server.js +363 -0
  233. package/ts_build/src/agents/tools/ycmd/server.js.map +1 -0
  234. package/ts_build/src/agents/tools/ycmd/serverManager.d.ts +39 -0
  235. package/ts_build/src/agents/tools/ycmd/serverManager.js +210 -0
  236. package/ts_build/src/agents/tools/ycmd/serverManager.js.map +1 -0
  237. package/ts_build/src/agents/tools/ycmd/tools/completion.d.ts +22 -0
  238. package/ts_build/src/agents/tools/ycmd/tools/completion.js +72 -0
  239. package/ts_build/src/agents/tools/ycmd/tools/completion.js.map +1 -0
  240. package/ts_build/src/agents/tools/ycmd/tools/diagnostics.d.ts +42 -0
  241. package/ts_build/src/agents/tools/ycmd/tools/diagnostics.js +88 -0
  242. package/ts_build/src/agents/tools/ycmd/tools/diagnostics.js.map +1 -0
  243. package/ts_build/src/agents/tools/ycmd/tools/getLocations.d.ts +22 -0
  244. package/ts_build/src/agents/tools/ycmd/tools/getLocations.js +142 -0
  245. package/ts_build/src/agents/tools/ycmd/tools/getLocations.js.map +1 -0
  246. package/ts_build/src/agents/tools/ycmd/tools/goto.d.ts +20 -0
  247. package/ts_build/src/agents/tools/ycmd/tools/goto.js +101 -0
  248. package/ts_build/src/agents/tools/ycmd/tools/goto.js.map +1 -0
  249. package/ts_build/src/agents/tools/ycmd/tools/refactor.d.ts +32 -0
  250. package/ts_build/src/agents/tools/ycmd/tools/refactor.js +123 -0
  251. package/ts_build/src/agents/tools/ycmd/tools/refactor.js.map +1 -0
  252. package/ts_build/src/agents/tools/ycmd/tools/signature.d.ts +25 -0
  253. package/ts_build/src/agents/tools/ycmd/tools/signature.js +110 -0
  254. package/ts_build/src/agents/tools/ycmd/tools/signature.js.map +1 -0
  255. package/ts_build/src/agents/tools/ycmd/tools/start.d.ts +17 -0
  256. package/ts_build/src/agents/tools/ycmd/tools/start.js +65 -0
  257. package/ts_build/src/agents/tools/ycmd/tools/start.js.map +1 -0
  258. package/ts_build/src/agents/tools/ycmd/utils/pathUtils.d.ts +4 -0
  259. package/ts_build/src/agents/tools/ycmd/utils/pathUtils.js +67 -0
  260. package/ts_build/src/agents/tools/ycmd/utils/pathUtils.js.map +1 -0
  261. package/ts_build/src/ai.d.ts +1 -0
  262. package/ts_build/src/ai.js +40 -1
  263. package/ts_build/src/ai.js.map +1 -1
  264. package/ts_build/src/chat/ChatCommandHandler.d.ts +36 -0
  265. package/ts_build/src/chat/ChatCommandHandler.js +268 -0
  266. package/ts_build/src/chat/ChatCommandHandler.js.map +1 -0
  267. package/ts_build/src/chat/ChatInputManager.d.ts +22 -0
  268. package/ts_build/src/chat/ChatInputManager.js +85 -0
  269. package/ts_build/src/chat/ChatInputManager.js.map +1 -0
  270. package/ts_build/src/chat/ChatManager.d.ts +49 -0
  271. package/ts_build/src/chat/ChatManager.js +271 -0
  272. package/ts_build/src/chat/ChatManager.js.map +1 -0
  273. package/ts_build/src/chat/ChatSession.d.ts +32 -0
  274. package/ts_build/src/chat/ChatSession.js +3 -0
  275. package/ts_build/src/chat/ChatSession.js.map +1 -0
  276. package/ts_build/src/chat/ChatSessionManager.d.ts +19 -0
  277. package/ts_build/src/chat/ChatSessionManager.js +188 -0
  278. package/ts_build/src/chat/ChatSessionManager.js.map +1 -0
  279. package/ts_build/src/chat/ChatStateManager.d.ts +58 -0
  280. package/ts_build/src/chat/ChatStateManager.js +156 -0
  281. package/ts_build/src/chat/ChatStateManager.js.map +1 -0
  282. package/ts_build/src/chat/CliChatService.d.ts +35 -0
  283. package/ts_build/src/chat/CliChatService.js +201 -0
  284. package/ts_build/src/chat/CliChatService.js.map +1 -0
  285. package/ts_build/src/chat/InterruptibleInput.d.ts +20 -0
  286. package/ts_build/src/chat/InterruptibleInput.js +109 -0
  287. package/ts_build/src/chat/InterruptibleInput.js.map +1 -0
  288. package/ts_build/src/chat/interfaces/ChatModule.d.ts +6 -0
  289. package/ts_build/src/chat/interfaces/ChatModule.js +3 -0
  290. package/ts_build/src/chat/interfaces/ChatModule.js.map +1 -0
  291. package/ts_build/src/chat/modules/AgentModule.d.ts +56 -0
  292. package/ts_build/src/chat/modules/AgentModule.js +705 -0
  293. package/ts_build/src/chat/modules/AgentModule.js.map +1 -0
  294. package/ts_build/src/chat/modules/AskModule.d.ts +10 -0
  295. package/ts_build/src/chat/modules/AskModule.js +63 -0
  296. package/ts_build/src/chat/modules/AskModule.js.map +1 -0
  297. package/ts_build/src/chat/modules/BaseChatModule.d.ts +14 -0
  298. package/ts_build/src/chat/modules/BaseChatModule.js +32 -0
  299. package/ts_build/src/chat/modules/BaseChatModule.js.map +1 -0
  300. package/ts_build/src/chat/modules/InternalChatModule.d.ts +24 -0
  301. package/ts_build/src/chat/modules/InternalChatModule.js +127 -0
  302. package/ts_build/src/chat/modules/InternalChatModule.js.map +1 -0
  303. package/ts_build/src/chat/modules/SearchModule.d.ts +12 -0
  304. package/ts_build/src/chat/modules/SearchModule.js +119 -0
  305. package/ts_build/src/chat/modules/SearchModule.js.map +1 -0
  306. package/ts_build/src/chat/modules/SetupModule.d.ts +15 -0
  307. package/ts_build/src/chat/modules/SetupModule.js +147 -0
  308. package/ts_build/src/chat/modules/SetupModule.js.map +1 -0
  309. package/ts_build/src/chat/modules/SystemModule.d.ts +14 -0
  310. package/ts_build/src/chat/modules/SystemModule.js +90 -0
  311. package/ts_build/src/chat/modules/SystemModule.js.map +1 -0
  312. package/ts_build/src/chat/modules/VoiceModule.d.ts +11 -0
  313. package/ts_build/src/chat/modules/VoiceModule.js +57 -0
  314. package/ts_build/src/chat/modules/VoiceModule.js.map +1 -0
  315. package/ts_build/src/chat/types.d.ts +83 -0
  316. package/ts_build/src/chat/types.js +3 -0
  317. package/ts_build/src/chat/types.js.map +1 -0
  318. package/ts_build/src/chat.js +7 -1
  319. package/ts_build/src/chat.js.map +1 -1
  320. package/ts_build/src/chat2.d.ts +3 -0
  321. package/ts_build/src/chat2.js +47 -0
  322. package/ts_build/src/chat2.js.map +1 -0
  323. package/ts_build/src/cli.js +218 -37
  324. package/ts_build/src/cli.js.map +1 -1
  325. package/ts_build/src/clients/anthropic.d.ts +5 -2
  326. package/ts_build/src/clients/anthropic.js +12 -7
  327. package/ts_build/src/clients/anthropic.js.map +1 -1
  328. package/ts_build/src/clients/gemini.d.ts +6 -3
  329. package/ts_build/src/clients/gemini.js +13 -7
  330. package/ts_build/src/clients/gemini.js.map +1 -1
  331. package/ts_build/src/clients/http.d.ts +1 -0
  332. package/ts_build/src/clients/http.js +12 -5
  333. package/ts_build/src/clients/http.js.map +1 -1
  334. package/ts_build/src/clients/index.d.ts +10 -0
  335. package/ts_build/src/clients/index.js +74 -4
  336. package/ts_build/src/clients/index.js.map +1 -1
  337. package/ts_build/src/clients/knowhow.d.ts +3 -1
  338. package/ts_build/src/clients/knowhow.js +8 -2
  339. package/ts_build/src/clients/knowhow.js.map +1 -1
  340. package/ts_build/src/clients/knowhowMcp.d.ts +20 -0
  341. package/ts_build/src/clients/knowhowMcp.js +86 -0
  342. package/ts_build/src/clients/knowhowMcp.js.map +1 -0
  343. package/ts_build/src/clients/openai.d.ts +5 -2
  344. package/ts_build/src/clients/openai.js +29 -8
  345. package/ts_build/src/clients/openai.js.map +1 -1
  346. package/ts_build/src/clients/types.d.ts +1 -0
  347. package/ts_build/src/clients/xai.d.ts +5 -2
  348. package/ts_build/src/clients/xai.js +15 -5
  349. package/ts_build/src/clients/xai.js.map +1 -1
  350. package/ts_build/src/config.js +24 -3
  351. package/ts_build/src/config.js.map +1 -1
  352. package/ts_build/src/conversion.js +6 -4
  353. package/ts_build/src/conversion.js.map +1 -1
  354. package/ts_build/src/embeddings.d.ts +2 -1
  355. package/ts_build/src/embeddings.js +62 -17
  356. package/ts_build/src/embeddings.js.map +1 -1
  357. package/ts_build/src/login.d.ts +1 -1
  358. package/ts_build/src/login.js +21 -7
  359. package/ts_build/src/login.js.map +1 -1
  360. package/ts_build/src/microphone.js.map +1 -1
  361. package/ts_build/src/plugins/downloader/downloader.d.ts +4 -5
  362. package/ts_build/src/plugins/downloader/downloader.js +55 -26
  363. package/ts_build/src/plugins/downloader/downloader.js.map +1 -1
  364. package/ts_build/src/plugins/downloader/plugin.js +5 -3
  365. package/ts_build/src/plugins/downloader/plugin.js.map +1 -1
  366. package/ts_build/src/plugins/plugins.js +3 -0
  367. package/ts_build/src/plugins/plugins.js.map +1 -1
  368. package/ts_build/src/processors/CustomVariables.d.ts +32 -0
  369. package/ts_build/src/processors/CustomVariables.js +297 -0
  370. package/ts_build/src/processors/CustomVariables.js.map +1 -0
  371. package/ts_build/src/processors/HarmonyToolProcessor.d.ts +15 -0
  372. package/ts_build/src/processors/HarmonyToolProcessor.js +154 -0
  373. package/ts_build/src/processors/HarmonyToolProcessor.js.map +1 -0
  374. package/ts_build/src/processors/XmlToolCallProcessor.d.ts +14 -0
  375. package/ts_build/src/processors/XmlToolCallProcessor.js +357 -0
  376. package/ts_build/src/processors/XmlToolCallProcessor.js.map +1 -0
  377. package/ts_build/src/processors/index.d.ts +3 -0
  378. package/ts_build/src/processors/index.js +7 -1
  379. package/ts_build/src/processors/index.js.map +1 -1
  380. package/ts_build/src/prompts/KnowhowConfigExamples.d.ts +2 -0
  381. package/ts_build/src/prompts/KnowhowConfigExamples.js +379 -0
  382. package/ts_build/src/prompts/KnowhowConfigExamples.js.map +1 -0
  383. package/ts_build/src/services/KnowhowClient.d.ts +22 -0
  384. package/ts_build/src/services/KnowhowClient.js +14 -2
  385. package/ts_build/src/services/KnowhowClient.js.map +1 -1
  386. package/ts_build/src/services/Mcp.d.ts +1 -0
  387. package/ts_build/src/services/Mcp.js +20 -3
  388. package/ts_build/src/services/Mcp.js.map +1 -1
  389. package/ts_build/src/services/McpServer.d.ts +1 -1
  390. package/ts_build/src/services/McpServer.js +8 -4
  391. package/ts_build/src/services/McpServer.js.map +1 -1
  392. package/ts_build/src/services/McpWebsocketTransport.js +17 -7
  393. package/ts_build/src/services/McpWebsocketTransport.js.map +1 -1
  394. package/ts_build/src/services/MessageProcessor.d.ts +1 -1
  395. package/ts_build/src/services/MessageProcessor.js +4 -4
  396. package/ts_build/src/services/MessageProcessor.js.map +1 -1
  397. package/ts_build/src/services/index.d.ts +2 -0
  398. package/ts_build/src/services/index.js +4 -0
  399. package/ts_build/src/services/index.js.map +1 -1
  400. package/ts_build/src/services/script-execution/ScriptExecutor.d.ts +1 -0
  401. package/ts_build/src/services/script-execution/ScriptExecutor.js +23 -0
  402. package/ts_build/src/services/script-execution/ScriptExecutor.js.map +1 -1
  403. package/ts_build/src/services/types.d.ts +2 -6
  404. package/ts_build/src/services/types.js +4 -4
  405. package/ts_build/src/services/types.js.map +1 -1
  406. package/ts_build/src/types.d.ts +11 -0
  407. package/ts_build/src/types.js +8 -0
  408. package/ts_build/src/types.js.map +1 -1
  409. package/ts_build/src/utils/index.d.ts +2 -0
  410. package/ts_build/src/utils/index.js +102 -1
  411. package/ts_build/src/utils/index.js.map +1 -1
  412. package/ts_build/tests/XmlToolCallProcessor.test.d.ts +1 -0
  413. package/ts_build/tests/XmlToolCallProcessor.test.js +376 -0
  414. package/ts_build/tests/XmlToolCallProcessor.test.js.map +1 -0
  415. package/ts_build/tests/manual/ycmd/debug_diagnostics_test.d.ts +1 -0
  416. package/ts_build/tests/manual/ycmd/debug_diagnostics_test.js +114 -0
  417. package/ts_build/tests/manual/ycmd/debug_diagnostics_test.js.map +1 -0
  418. package/ts_build/tests/manual/ycmd/minimal_advanced_test.d.ts +2 -0
  419. package/ts_build/tests/manual/ycmd/minimal_advanced_test.js +104 -0
  420. package/ts_build/tests/manual/ycmd/minimal_advanced_test.js.map +1 -0
  421. package/ts_build/tests/manual/ycmd/simple_diagnostics_test.d.ts +1 -0
  422. package/ts_build/tests/manual/ycmd/simple_diagnostics_test.js +74 -0
  423. package/ts_build/tests/manual/ycmd/simple_diagnostics_test.js.map +1 -0
  424. package/ts_build/tests/manual/ycmd/simple_test.d.ts +2 -0
  425. package/ts_build/tests/manual/ycmd/simple_test.js +82 -0
  426. package/ts_build/tests/manual/ycmd/simple_test.js.map +1 -0
  427. package/ts_build/tests/manual/ycmd/test-typescript-sample.d.ts +14 -0
  428. package/ts_build/tests/manual/ycmd/test-typescript-sample.js +20 -0
  429. package/ts_build/tests/manual/ycmd/test-typescript-sample.js.map +1 -0
  430. package/ts_build/tests/manual/ycmd/test_advanced_features.d.ts +2 -0
  431. package/ts_build/tests/manual/ycmd/test_advanced_features.js +297 -0
  432. package/ts_build/tests/manual/ycmd/test_advanced_features.js.map +1 -0
  433. package/ts_build/tests/manual/ycmd/test_advanced_with_tools.d.ts +3 -0
  434. package/ts_build/tests/manual/ycmd/test_advanced_with_tools.js +262 -0
  435. package/ts_build/tests/manual/ycmd/test_advanced_with_tools.js.map +1 -0
  436. package/ts_build/tests/manual/ycmd/test_comprehensive_typescript.d.ts +2 -0
  437. package/ts_build/tests/manual/ycmd/test_comprehensive_typescript.js +186 -0
  438. package/ts_build/tests/manual/ycmd/test_comprehensive_typescript.js.map +1 -0
  439. package/ts_build/tests/manual/ycmd/test_diagnostics_file_changes.d.ts +1 -0
  440. package/ts_build/tests/manual/ycmd/test_diagnostics_file_changes.js +174 -0
  441. package/ts_build/tests/manual/ycmd/test_diagnostics_file_changes.js.map +1 -0
  442. package/ts_build/tests/manual/ycmd/test_diagnostics_fix.d.ts +2 -0
  443. package/ts_build/tests/manual/ycmd/test_diagnostics_fix.js +106 -0
  444. package/ts_build/tests/manual/ycmd/test_diagnostics_fix.js.map +1 -0
  445. package/ts_build/tests/manual/ycmd/test_diagnostics_simple.d.ts +1 -0
  446. package/ts_build/tests/manual/ycmd/test_diagnostics_simple.js +104 -0
  447. package/ts_build/tests/manual/ycmd/test_diagnostics_simple.js.map +1 -0
  448. package/ts_build/tests/manual/ycmd/test_diagnostics_timing.d.ts +1 -0
  449. package/ts_build/tests/manual/ycmd/test_diagnostics_timing.js +119 -0
  450. package/ts_build/tests/manual/ycmd/test_diagnostics_timing.js.map +1 -0
  451. package/ts_build/tests/manual/ycmd/test_discover_commands.d.ts +2 -0
  452. package/ts_build/tests/manual/ycmd/test_discover_commands.js +243 -0
  453. package/ts_build/tests/manual/ycmd/test_discover_commands.js.map +1 -0
  454. package/ts_build/tests/manual/ycmd/test_endpoints.d.ts +2 -0
  455. package/ts_build/tests/manual/ycmd/test_endpoints.js +120 -0
  456. package/ts_build/tests/manual/ycmd/test_endpoints.js.map +1 -0
  457. package/ts_build/tests/manual/ycmd/test_final_comprehensive.d.ts +2 -0
  458. package/ts_build/tests/manual/ycmd/test_final_comprehensive.js +221 -0
  459. package/ts_build/tests/manual/ycmd/test_final_comprehensive.js.map +1 -0
  460. package/ts_build/tests/manual/ycmd/test_final_validation.d.ts +2 -0
  461. package/ts_build/tests/manual/ycmd/test_final_validation.js +160 -0
  462. package/ts_build/tests/manual/ycmd/test_final_validation.js.map +1 -0
  463. package/ts_build/tests/manual/ycmd/test_individual_ycmd_tool.d.ts +2 -0
  464. package/ts_build/tests/manual/ycmd/test_individual_ycmd_tool.js +37 -0
  465. package/ts_build/tests/manual/ycmd/test_individual_ycmd_tool.js.map +1 -0
  466. package/ts_build/tests/manual/ycmd/test_server_manager.d.ts +1 -0
  467. package/ts_build/tests/manual/ycmd/test_server_manager.js +38 -0
  468. package/ts_build/tests/manual/ycmd/test_server_manager.js.map +1 -0
  469. package/ts_build/tests/manual/ycmd/test_simple_debug.d.ts +2 -0
  470. package/ts_build/tests/manual/ycmd/test_simple_debug.js +99 -0
  471. package/ts_build/tests/manual/ycmd/test_simple_debug.js.map +1 -0
  472. package/ts_build/tests/manual/ycmd/test_tsserver_workflow.d.ts +1 -0
  473. package/ts_build/tests/manual/ycmd/test_tsserver_workflow.js +128 -0
  474. package/ts_build/tests/manual/ycmd/test_tsserver_workflow.js.map +1 -0
  475. package/ts_build/tests/manual/ycmd/test_typescript_simple.d.ts +1 -0
  476. package/ts_build/tests/manual/ycmd/test_typescript_simple.js +66 -0
  477. package/ts_build/tests/manual/ycmd/test_typescript_simple.js.map +1 -0
  478. package/ts_build/tests/manual/ycmd/test_typescript_ycmd.d.ts +1 -0
  479. package/ts_build/tests/manual/ycmd/test_typescript_ycmd.js +105 -0
  480. package/ts_build/tests/manual/ycmd/test_typescript_ycmd.js.map +1 -0
  481. package/ts_build/tests/manual/ycmd/test_workspace_config.d.ts +1 -0
  482. package/ts_build/tests/manual/ycmd/test_workspace_config.js +89 -0
  483. package/ts_build/tests/manual/ycmd/test_workspace_config.js.map +1 -0
  484. package/ts_build/tests/manual/ycmd/test_ycmd_auto_start.d.ts +2 -0
  485. package/ts_build/tests/manual/ycmd/test_ycmd_auto_start.js +130 -0
  486. package/ts_build/tests/manual/ycmd/test_ycmd_auto_start.js.map +1 -0
  487. package/ts_build/tests/manual/ycmd/test_ycmd_comprehensive.d.ts +1 -0
  488. package/ts_build/tests/manual/ycmd/test_ycmd_comprehensive.js +83 -0
  489. package/ts_build/tests/manual/ycmd/test_ycmd_comprehensive.js.map +1 -0
  490. package/ts_build/tests/manual/ycmd/test_ycmd_direct.d.ts +2 -0
  491. package/ts_build/tests/manual/ycmd/test_ycmd_direct.js +149 -0
  492. package/ts_build/tests/manual/ycmd/test_ycmd_direct.js.map +1 -0
  493. package/ts_build/tests/manual/ycmd/test_ycmd_experiment.d.ts +15 -0
  494. package/ts_build/tests/manual/ycmd/test_ycmd_experiment.js +58 -0
  495. package/ts_build/tests/manual/ycmd/test_ycmd_experiment.js.map +1 -0
  496. package/ts_build/tests/manual/ycmd/test_ycmd_final.d.ts +2 -0
  497. package/ts_build/tests/manual/ycmd/test_ycmd_final.js +195 -0
  498. package/ts_build/tests/manual/ycmd/test_ycmd_final.js.map +1 -0
  499. package/ts_build/tests/manual/ycmd/test_ycmd_integration.d.ts +3 -0
  500. package/ts_build/tests/manual/ycmd/test_ycmd_integration.js +110 -0
  501. package/ts_build/tests/manual/ycmd/test_ycmd_integration.js.map +1 -0
  502. package/ts_build/tests/manual/ycmd/test_ycmd_simple.d.ts +2 -0
  503. package/ts_build/tests/manual/ycmd/test_ycmd_simple.js +36 -0
  504. package/ts_build/tests/manual/ycmd/test_ycmd_simple.js.map +1 -0
  505. package/ts_build/tests/manual/ycmd/working_simple_test.d.ts +2 -0
  506. package/ts_build/tests/manual/ycmd/working_simple_test.js +134 -0
  507. package/ts_build/tests/manual/ycmd/working_simple_test.js.map +1 -0
  508. package/tsconfig.json +3 -1
@@ -0,0 +1,108 @@
1
+ #!/usr/bin/env npx tsx
2
+
3
+ /**
4
+ * Minimal test of ycmd advanced features
5
+ */
6
+
7
+ import {
8
+ ycmdStart,
9
+ ycmdDiagnostics,
10
+ ycmdCompletion,
11
+ ycmdRefactor,
12
+ } from "../../../src/agents/tools/ycmd";
13
+ import * as fs from "fs";
14
+ import * as path from "path";
15
+
16
+ async function minimalAdvancedTest() {
17
+ console.log("🧪 Minimal ycmd Advanced Features Test\n");
18
+
19
+ // Create a test file with TypeScript code
20
+ const testFile = path.join(process.cwd(), "minimal_test.ts");
21
+ const testContent = `function hello(name: string): string {
22
+ return "Hello " + name;
23
+ }
24
+
25
+ const result = hello("World");
26
+ console.log(result);
27
+ `;
28
+
29
+ fs.writeFileSync(testFile, testContent);
30
+ console.log("✅ Created minimal test file");
31
+
32
+ try {
33
+ // Start ycmd with shorter timeout expectation
34
+ console.log("🚀 Starting ycmd (this may take a moment)...");
35
+ const startResult = await ycmdStart({});
36
+ console.log(
37
+ "✅ ycmd start result:",
38
+ startResult.success ? "SUCCESS" : "FAILED"
39
+ );
40
+
41
+ if (!startResult.success) {
42
+ console.log("❌ ycmd failed to start:", startResult.message);
43
+ return;
44
+ }
45
+
46
+ // Test 1: Basic diagnostics
47
+ console.log("\n🔍 Test 1: Basic diagnostics...");
48
+ const diagnosticsResult = await ycmdDiagnostics({
49
+ filepath: testFile,
50
+ fileContents: testContent,
51
+ });
52
+
53
+ console.log("Diagnostics result:", {
54
+ success: diagnosticsResult.success,
55
+ diagnosticCount: diagnosticsResult.diagnostics?.length || 0,
56
+ message: diagnosticsResult.message,
57
+ });
58
+
59
+ // Test 2: Basic completions
60
+ console.log("\n⚡ Test 2: Basic completions...");
61
+ const completionsResult = await ycmdCompletion({
62
+ filepath: testFile,
63
+ line: 2,
64
+ column: 15,
65
+ contents: testContent,
66
+ });
67
+
68
+ console.log("Completions result:", {
69
+ success: completionsResult.success,
70
+ completionCount: completionsResult.completions?.length || 0,
71
+ message: completionsResult.message,
72
+ });
73
+
74
+ // Test 3: Organize imports (even if no imports present)
75
+ console.log("\n📦 Test 3: Organize imports...");
76
+ const organizeResult = await ycmdRefactor({
77
+ filepath: testFile,
78
+ line: 1,
79
+ column: 1,
80
+ command: "organize_imports",
81
+ contents: testContent,
82
+ });
83
+
84
+ console.log("Organize imports result:", {
85
+ success: organizeResult.success,
86
+ message: organizeResult.message,
87
+ hasEdits: organizeResult.result?.edits
88
+ ? organizeResult.result.edits.length > 0
89
+ : false,
90
+ });
91
+
92
+ console.log("\n🎉 Minimal test completed successfully");
93
+ } catch (error: any) {
94
+ console.error("❌ Test failed:", error.message);
95
+ } finally {
96
+ // Cleanup
97
+ try {
98
+ fs.unlinkSync(testFile);
99
+ console.log("🧹 Cleaned up test file");
100
+ } catch (e) {
101
+ // Silent cleanup failure
102
+ }
103
+ }
104
+ }
105
+
106
+ if (require.main === module) {
107
+ minimalAdvancedTest().catch(console.error);
108
+ }
@@ -0,0 +1,61 @@
1
+ import { ycmdStart, ycmdDiagnostics } from '../../../src/agents/tools/ycmd';
2
+ import * as fs from 'fs';
3
+ import * as path from 'path';
4
+
5
+ async function testDiagnostics() {
6
+ console.log('🔧 Testing ycmd diagnostics...');
7
+
8
+ try {
9
+ // Start ycmd server
10
+ console.log('Starting ycmd server...');
11
+ const startResult = await ycmdStart({
12
+ workspaceRoot: process.cwd(),
13
+ logLevel: 'debug'
14
+ });
15
+ console.log('✅ ycmd server started:', startResult);
16
+
17
+ // Wait for server to initialize
18
+ console.log('⏳ Waiting 5 seconds for server initialization...');
19
+ await new Promise(resolve => setTimeout(resolve, 5000));
20
+
21
+ const testFile = path.join(process.cwd(), 'tests/ycmd/fixtures/debug_diagnostics.ts');
22
+
23
+ console.log('📁 Test file path:', testFile);
24
+
25
+ // Test diagnostics
26
+ console.log('🔍 Testing diagnostics...');
27
+ const diagnostics = await ycmdDiagnostics({
28
+ filepath: testFile,
29
+ line: 1,
30
+ column: 1
31
+ });
32
+
33
+ console.log('📊 Diagnostics result:');
34
+ console.log(JSON.stringify(diagnostics, null, 2));
35
+
36
+ // Check if we got meaningful results
37
+ if (diagnostics && typeof diagnostics === 'object' && 'content' in diagnostics) {
38
+ const content = diagnostics.content;
39
+ if (Array.isArray(content) && content.length > 0) {
40
+ console.log(`✅ SUCCESS: Found ${content.length} diagnostic(s)!`);
41
+ content.forEach((diag, index) => {
42
+ console.log(` ${index + 1}. ${diag.text || diag.message || JSON.stringify(diag)}`);
43
+ });
44
+ } else {
45
+ console.log('⚠️ No diagnostics found in content array');
46
+ }
47
+ } else {
48
+ console.log('⚠️ Unexpected diagnostics response format');
49
+ }
50
+
51
+ console.log('✅ Test completed successfully');
52
+ process.exit(0);
53
+
54
+ } catch (error) {
55
+ console.error('❌ Test failed:', error.message);
56
+ console.error('Stack trace:', error.stack);
57
+ process.exit(1);
58
+ }
59
+ }
60
+
61
+ testDiagnostics();
@@ -0,0 +1,74 @@
1
+ #!/usr/bin/env npx tsx
2
+
3
+ /**
4
+ * Simple focused test of ycmd advanced features
5
+ */
6
+
7
+ import { ycmdStart, ycmdDiagnostics, ycmdCompletion, ycmdRefactor } from '../../../src/agents/tools/ycmd';
8
+ import * as fs from 'fs';
9
+ import * as path from 'path';
10
+
11
+ async function simpleTest() {
12
+ console.log('🧪 Simple ycmd Advanced Features Test\n');
13
+
14
+ // Create a simple test file
15
+ const testFile = path.join(process.cwd(), 'test_temp.ts');
16
+ const testContent = `function greet(name: string): string {
17
+ return "Hello " + name;
18
+ }
19
+
20
+ const result = greet("World");
21
+ `;
22
+
23
+ fs.writeFileSync(testFile, testContent);
24
+ console.log('✅ Created test file');
25
+
26
+ try {
27
+ // Start ycmd
28
+ console.log('🚀 Starting ycmd...');
29
+ await ycmdStart({});
30
+ console.log('✅ ycmd started');
31
+
32
+ // Test diagnostics
33
+ console.log('🔍 Testing diagnostics...');
34
+ const diagnostics = await ycmdDiagnostics({ filepath: testFile });
35
+ console.log('✅ Diagnostics result:', diagnostics);
36
+
37
+ // Test completions
38
+ console.log('⚡ Testing completions...');
39
+ const completions = await ycmdCompletion({
40
+ filepath: testFile,
41
+ line: 2,
42
+ column: 15
43
+ });
44
+ console.log('✅ Completions result:', completions);
45
+
46
+ // Test refactor rename
47
+ console.log('🔧 Testing refactor rename...');
48
+ const rename = await ycmdRefactor({
49
+ filepath: testFile,
50
+ line: 1,
51
+ column: 10,
52
+ command: 'rename',
53
+ newName: 'sayHello'
54
+ });
55
+ console.log('✅ Rename result:', rename);
56
+
57
+ } catch (error: any) {
58
+ console.error('❌ Test failed:', error.message);
59
+ } finally {
60
+ // Cleanup
61
+ try {
62
+ fs.unlinkSync(testFile);
63
+ console.log('🧹 Cleaned up test file');
64
+ } catch (e) {
65
+ console.log('⚠️ Could not clean up test file');
66
+ }
67
+ }
68
+
69
+ console.log('🎉 Simple test complete');
70
+ }
71
+
72
+ if (require.main === module) {
73
+ simpleTest().catch(console.error);
74
+ }
@@ -0,0 +1,34 @@
1
+ // Sample TypeScript file to test ycmd completion
2
+ interface User {
3
+ id: number;
4
+ name: string;
5
+ email: string;
6
+ }
7
+
8
+ class UserService {
9
+ private users: User[] = [];
10
+
11
+ addUser(user: User): void {
12
+ this.users.push(user);
13
+ }
14
+
15
+ findUserById(id: number): User | undefined {
16
+ return this.users.find(u => u.id === id);
17
+ }
18
+
19
+ getAllUsers(): User[] {
20
+ return this.users;
21
+ }
22
+ }
23
+
24
+ const service = new UserService();
25
+ service.addUser({ id: 1, name: "John", email: "john@example.com" });
26
+
27
+ // Test completion at this point - should show User properties
28
+ const user = service.findUserById(1);
29
+ if (user) {
30
+ console.log(user.name); // <- cursor here for completion test
31
+ }
32
+
33
+ // Test go-to-definition on UserService
34
+ const anotherService = new UserService(); // <- should jump to class definition
@@ -0,0 +1,407 @@
1
+ import { YcmdServer } from "../../../src/agents/tools/ycmd/server";
2
+ import {
3
+ YcmdClient,
4
+ getFileTypes,
5
+ } from "../../../src/agents/tools/ycmd/client";
6
+ import * as path from "path";
7
+ import * as fs from "fs";
8
+ import { ycmdServerManager } from "../../../src/agents/tools/ycmd/serverManager";
9
+ import { getLocations } from "../../../src/agents/tools/ycmd/tools/getLocations";
10
+ import { wait } from "../../../src/utils";
11
+
12
+ async function testAdvancedFeatures() {
13
+ console.log("🧪 Testing Advanced ycmd Features\n");
14
+
15
+ const workspaceRoot = process.cwd();
16
+ // Test files directory
17
+ const testDir = path.join(workspaceRoot, "tests", "ycmd", "fixtures");
18
+ if (!fs.existsSync(testDir)) {
19
+ fs.mkdirSync(testDir, { recursive: true });
20
+ }
21
+
22
+ console.log("📁 Creating test files...\n");
23
+
24
+ // === Test File 1: TypeScript with missing imports ===
25
+ const tsFile = path.join(testDir, "test_imports.ts");
26
+ const tsContent = `// TypeScript file with missing imports and issues
27
+ const fs = require('fs'); // Should suggest import
28
+ const path = require('path');
29
+
30
+ interface User {
31
+ name: string;
32
+ age: number;
33
+ email?: string;
34
+ }
35
+
36
+ function createUser(name: string, age: number): User {
37
+ return { name, age };
38
+ }
39
+
40
+ // Missing import for React (if available)
41
+ const component = React.createElement('div');
42
+
43
+ // Type error - missing property
44
+ const user: User = { name: 'Alice' }; // Missing age
45
+
46
+ // Unused variable
47
+ const unusedVar = 'test';
48
+
49
+ export { createUser };
50
+ `;
51
+
52
+ const userLocations = await getLocations({
53
+ filepath: tsFile,
54
+ fileContents: tsContent,
55
+ searchString: "user",
56
+ });
57
+ const userLocation = userLocations.locations[0];
58
+
59
+ const createUserLocations = await getLocations({
60
+ filepath: tsFile,
61
+ fileContents: tsContent,
62
+ searchString: "createUser",
63
+ });
64
+ const createUserLocation = createUserLocations.locations[0];
65
+
66
+ const returnLocations = await getLocations({
67
+ filepath: tsFile,
68
+ fileContents: tsContent,
69
+ searchString: "return",
70
+ });
71
+ const returnLocation = returnLocations.locations[0];
72
+
73
+ const { client: tsClient } = await ycmdServerManager.setupClientAndNotifyFile(
74
+ {
75
+ filepath: tsFile,
76
+ fileContents: tsContent,
77
+ }
78
+ );
79
+
80
+ fs.writeFileSync(tsFile, tsContent);
81
+ console.log(`✅ Created ${tsFile}`);
82
+
83
+ // === Test File 2: JavaScript with formatting issues ===
84
+ const jsFile = path.join(testDir, "test_format.js");
85
+ const jsContent = `// JavaScript file with formatting issues
86
+ function badlyFormatted( a,b, c )
87
+ {
88
+ return a+b+c;
89
+ }
90
+
91
+ const obj={a:1,b:2,c:3};
92
+
93
+ if(true){
94
+ console.log("badly formatted");
95
+ }
96
+ `;
97
+
98
+ fs.writeFileSync(jsFile, jsContent);
99
+ console.log(`✅ Created ${jsFile}\n`);
100
+
101
+ // === BEGIN TESTING ===
102
+
103
+ console.log("🔍 TESTING DIAGNOSTICS AND FIXITS\n");
104
+
105
+ // Test 1: Get diagnostics for TypeScript file
106
+ try {
107
+ console.log("1. Getting diagnostics for TypeScript file...");
108
+ const filetypes = getFileTypes(tsFile);
109
+
110
+ const brokenCode = tsContent.replace("return { name", "return { nade");
111
+ fs.writeFileSync(tsFile, brokenCode);
112
+
113
+ const { client } = await ycmdServerManager.setupClientAndNotifyFile({
114
+ filepath: tsFile,
115
+ fileContents: brokenCode,
116
+ });
117
+
118
+ const diagnostics = await client.getDiagnostics(
119
+ tsFile,
120
+ tsContent,
121
+ filetypes
122
+ );
123
+
124
+ console.log(`✅ Found ${diagnostics.length} diagnostics`);
125
+
126
+ for (let i = 0; i < diagnostics.length; i++) {
127
+ const diag = diagnostics[i];
128
+ console.log(` Diagnostic ${i + 1}:`);
129
+ console.log(
130
+ ` - Line ${diag.location.line_num}, Col ${diag.location.column_num}`
131
+ );
132
+ console.log(` - Kind: ${diag.kind}`);
133
+ console.log(` - Text: ${diag.text}`);
134
+
135
+ // Check if fixit is available
136
+ if (diag.fixit_available) {
137
+ console.log(` - ✅ Fixit available!`);
138
+
139
+ try {
140
+ const fixitResult = await client.refactorFixIt(
141
+ tsFile,
142
+ diag.location.line_num,
143
+ diag.location.column_num,
144
+ tsContent,
145
+ filetypes,
146
+ 0
147
+ );
148
+
149
+ console.log(` - ✅ Fixit applied successfully`);
150
+ console.log(` - Result:`, JSON.stringify(fixitResult, null, 4));
151
+ } catch (fixitError: any) {
152
+ console.log(` - ❌ Fixit failed: ${fixitError.message}`);
153
+ }
154
+ } else {
155
+ console.log(` - ❌ No fixit available`);
156
+ }
157
+ console.log("");
158
+ }
159
+ } catch (error: any) {
160
+ console.log(`❌ Diagnostics failed: ${error.message}\n`);
161
+ }
162
+
163
+ console.log("🔧 TESTING AUTO-IMPORT FEATURES\n");
164
+
165
+ // Test 2: Try organize imports
166
+ try {
167
+ console.log("2. Testing RefactorOrganizeImports...");
168
+ const filetypes = getFileTypes(tsFile);
169
+
170
+ const { client } = await ycmdServerManager.setupClientAndNotifyFile({
171
+ filepath: tsFile,
172
+ fileContents: jsContent,
173
+ });
174
+
175
+ const organizeResult = await client.refactorOrganizeImports(
176
+ tsFile,
177
+ 1,
178
+ 1,
179
+ tsContent,
180
+ filetypes
181
+ );
182
+
183
+ console.log("✅ RefactorOrganizeImports succeeded");
184
+ console.log("Result:", JSON.stringify(organizeResult, null, 2));
185
+ } catch (error: any) {
186
+ console.log(`❌ RefactorOrganizeImports failed: ${error.message}`);
187
+ }
188
+
189
+ // Test 3: Test completions for import suggestions
190
+ try {
191
+ console.log("\n3. Testing completions for import suggestions...");
192
+ const filetypes = getFileTypes(tsFile);
193
+
194
+ // Test at position where React is used but not imported
195
+ const completionRequest = {
196
+ filepath: tsFile,
197
+ line_num: 15, // Line with React.createElement
198
+ column_num: 15, // Column after "React"
199
+ file_data: {
200
+ [tsFile]: {
201
+ contents: tsContent,
202
+ filetypes,
203
+ },
204
+ },
205
+ };
206
+
207
+ const completionResponse = await tsClient.getCompletions(completionRequest);
208
+ const completions = completionResponse.completions;
209
+
210
+ console.log(`✅ Found ${completions.length} completions`);
211
+
212
+ // Look for import-related completions
213
+ const importCompletions = completions.filter(
214
+ (c) =>
215
+ c.insertion_text?.includes("import") ||
216
+ c.detailed_info?.includes("import") ||
217
+ c.kind?.includes("import")
218
+ );
219
+
220
+ if (importCompletions.length > 0) {
221
+ console.log(
222
+ `✅ Found ${importCompletions.length} import-related completions:`
223
+ );
224
+ importCompletions.forEach((comp, i) => {
225
+ console.log(` ${i + 1}. ${comp.insertion_text} (${comp.kind})`);
226
+ if (comp.detailed_info) {
227
+ console.log(` Info: ${comp.detailed_info}`);
228
+ }
229
+ });
230
+ } else {
231
+ console.log("❌ No import-related completions found");
232
+ }
233
+ } catch (error: any) {
234
+ console.log(`❌ Completions test failed: ${error.message}`);
235
+ }
236
+
237
+ console.log("\n🔄 TESTING ADVANCED REFACTORING\n");
238
+
239
+ // Test 4: Test RefactorRename
240
+ try {
241
+ console.log("4. Testing RefactorRename...");
242
+ const filetypes = getFileTypes(tsFile);
243
+ const renameResult = await tsClient.refactorRename(
244
+ tsFile,
245
+ userLocation.line,
246
+ userLocation.column,
247
+ tsContent,
248
+ filetypes,
249
+ "buildUser"
250
+ );
251
+
252
+ console.log("✅ RefactorRename succeeded");
253
+ console.log("Result:", JSON.stringify(renameResult, null, 2));
254
+ } catch (error: any) {
255
+ console.log(`❌ RefactorRename failed: ${error.message}`);
256
+ }
257
+
258
+ // Test 5: Test RefactorExtractMethod
259
+ try {
260
+ console.log("\n5. Testing RefactorExtractMethod...");
261
+ const filetypes = getFileTypes(tsFile);
262
+ const extractResult = await tsClient.refactorExtractMethod(
263
+ tsFile,
264
+ returnLocation.line,
265
+ returnLocation.column,
266
+ tsContent,
267
+ filetypes
268
+ );
269
+
270
+ console.log("✅ RefactorExtractMethod succeeded");
271
+ console.log("Result:", JSON.stringify(extractResult, null, 2));
272
+ } catch (error: any) {
273
+ console.log(`❌ RefactorExtractMethod failed: ${error.message}`);
274
+ }
275
+
276
+ console.log("\n📋 TESTING CODE INTELLIGENCE\n");
277
+
278
+ // Test 6: Test GetType using signature help
279
+ try {
280
+ console.log("6. Testing GetType...");
281
+ const filetypes = getFileTypes(tsFile);
282
+ const typeResult = await tsClient.getSignatureHelp(
283
+ tsFile,
284
+ userLocation.line,
285
+ userLocation.column,
286
+ tsContent,
287
+ filetypes
288
+ );
289
+
290
+ console.log("✅ GetType succeeded");
291
+ console.log("Result:", JSON.stringify(typeResult, null, 2));
292
+ } catch (error: any) {
293
+ console.log(`❌ GetType failed: ${error.message}`);
294
+ }
295
+
296
+ // Test 7: Test GoToDefinition
297
+ try {
298
+ console.log("\n7. Testing GoToDefinition...");
299
+ const filetypes = getFileTypes(tsFile);
300
+ const defResult = await tsClient.goToDefinition(
301
+ tsFile,
302
+ userLocation.line, // Line on "user"
303
+ userLocation.column, // Column on "user"
304
+ tsContent,
305
+ filetypes
306
+ );
307
+
308
+ console.log("✅ GoToDefinition succeeded");
309
+ console.log("Result:", JSON.stringify(defResult, null, 2));
310
+ } catch (error: any) {
311
+ console.log(`❌ GoToDefinition failed: ${error.message}`);
312
+ }
313
+
314
+ // Test 8: Test GoToReferences
315
+ try {
316
+ console.log("\n8. Testing GoToReferences...");
317
+ const filetypes = getFileTypes(tsFile);
318
+ const refsResult = await tsClient.goToReferences(
319
+ tsFile,
320
+ createUserLocation.line,
321
+ createUserLocation.column,
322
+ tsContent,
323
+ filetypes
324
+ );
325
+
326
+ console.log("✅ GoToReferences succeeded");
327
+ console.log("Result:", JSON.stringify(refsResult, null, 2));
328
+ } catch (error: any) {
329
+ console.log(`❌ GoToReferences failed: ${error.message}`);
330
+ }
331
+
332
+ console.log("\n🔍 TESTING COMMAND DISCOVERY\n");
333
+
334
+ // Test 9: Get available refactor commands
335
+ try {
336
+ console.log("9. Testing command discovery...");
337
+ const filetypes = getFileTypes(tsFile);
338
+ const commands = await tsClient.getRefactorCommands(
339
+ tsFile,
340
+ 9, // createUser function line
341
+ 10, // createUser function column
342
+ tsContent,
343
+ filetypes
344
+ );
345
+
346
+ console.log("✅ Command discovery succeeded");
347
+ console.log(`Found ${commands.length} available commands:`);
348
+ commands.forEach((cmd, i) => {
349
+ console.log(` ${i + 1}. ${cmd}`);
350
+ });
351
+ } catch (error: any) {
352
+ console.log(`❌ Command discovery failed: ${error.message}`);
353
+ }
354
+
355
+ console.log("\n🔄 TESTING EDGE CASES\n");
356
+
357
+ // Test 10: Refactoring on file with syntax errors
358
+ const syntaxErrorFile = path.join(testDir, "syntax_error.ts");
359
+ const syntaxErrorContent = `
360
+ function broken(
361
+ // Missing closing parenthesis and body
362
+ `;
363
+
364
+ fs.writeFileSync(syntaxErrorFile, syntaxErrorContent);
365
+
366
+ try {
367
+ console.log("10. Testing refactoring on file with syntax errors...");
368
+ const filetypes = getFileTypes(syntaxErrorFile);
369
+ const syntaxRefactorResult = await tsClient.refactorRename(
370
+ syntaxErrorFile,
371
+ 2, // broken function line
372
+ 10, // broken function column
373
+ syntaxErrorContent,
374
+ filetypes,
375
+ "fixed"
376
+ );
377
+
378
+ console.log("⚠️ Syntax error refactor succeeded (unexpected)");
379
+ console.log("Result:", JSON.stringify(syntaxRefactorResult, null, 2));
380
+ } catch (error: any) {
381
+ console.log(`✅ Syntax error refactor correctly failed: ${error.message}`);
382
+ }
383
+
384
+ // Cleanup test files
385
+ console.log("\n🧹 Cleaning up test files...");
386
+ try {
387
+ fs.unlinkSync(tsFile);
388
+ fs.unlinkSync(jsFile);
389
+ fs.unlinkSync(syntaxErrorFile);
390
+ console.log("✅ Test files cleaned up");
391
+ } catch (error) {
392
+ console.log("⚠️ Could not clean up all test files");
393
+ }
394
+
395
+ console.log("\n🎉 Advanced features testing complete!");
396
+ process.exit(0);
397
+ }
398
+
399
+ // Run the test
400
+ if (require.main === module) {
401
+ testAdvancedFeatures().catch((error) => {
402
+ console.error("Test failed:", error);
403
+ process.exit(1);
404
+ });
405
+ }
406
+
407
+ export { testAdvancedFeatures };