@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.
- package/autodoc/plugins/downloader/downloader.mdx +2 -2
- package/benchmarks/.dockerignore +7 -0
- package/benchmarks/README.md +166 -0
- package/benchmarks/docker/Dockerfile +68 -0
- package/benchmarks/example-config.yml +27 -0
- package/benchmarks/jest.config.js +13 -0
- package/benchmarks/package-lock.json +4297 -0
- package/benchmarks/package.json +39 -0
- package/benchmarks/results/4542435/2025-08-05/lms/lms-openai-gpt-oss-20b.json +2814 -0
- package/benchmarks/results/4542435/2025-08-05/lms/lms-qwen-qwen3-30b-a3b-2507.json +2014 -0
- package/benchmarks/results/4fb9125/2025-08-07/anthropic/anthropic-claude-sonnet-4-20250514.json +3121 -0
- package/benchmarks/results/5766aee/2025-08-02/lms-qwen/qwen3-coder-30b.json +98 -0
- package/benchmarks/results/6d73808/2025-08-07/openai/openai-gpt-5.json +3256 -0
- package/benchmarks/results/77bf0a6/2025-08-02/lms-qwen/qwen3-30b-a3b-2507.json +4298 -0
- package/benchmarks/results/8c0d445/2025-08-03/anthropic/anthropic-claude-sonnet-4-20250514.json +3031 -0
- package/benchmarks/results/8c0d445/2025-08-03/openai/openai-gpt-4.1-2025-04-14.json +2990 -0
- package/benchmarks/results/ac6b2ab/2025-08-03/anthropic/anthropic-claude-sonnet-4-20250514.json +3256 -0
- package/benchmarks/results/ac6b2ab/2025-08-03/lms/lms-qwen-qwen3-coder-30b.json +3007 -0
- package/benchmarks/results/ac6b2ab/2025-08-03/openai/openai-gpt-4.1-2025-04-14.json +3256 -0
- package/benchmarks/results/ac6b2ab/2025-08-03/openai/openai-gpt-4.1-mini-2025-04-14.json +3036 -0
- package/benchmarks/results/ac6b2ab/2025-08-03/openai/openai-gpt-4.1-nano-2025-04-14.json +3280 -0
- package/benchmarks/results/adff675/2025-08-04/lms/lms-qwen-qwen3-30b-a3b-2507.json +1920 -0
- package/benchmarks/results/adff675/2025-08-04/lms/lms-qwen-qwen3-coder-30b.json +3281 -0
- package/benchmarks/results/b502ed9/2025-08-03/lms-qwen/qwen3-coder-30b.json +2896 -0
- package/benchmarks/results/d1a8129/2025-08-03/lms/lms-qwen-qwen3-coder-30b.json +3011 -0
- package/benchmarks/results/e60471c/2025-08-03/lms/qwen3-30b-a3b-2507.json +3003 -0
- package/benchmarks/scripts/build-and-run.sh +47 -0
- package/benchmarks/scripts/clone-exercism.sh +92 -0
- package/benchmarks/scripts/validate.sh +48 -0
- package/benchmarks/src/__tests__/runner.test.ts +27 -0
- package/benchmarks/src/cli.ts +90 -0
- package/benchmarks/src/evaluators/EvaluatorRegistry.ts +64 -0
- package/benchmarks/src/evaluators/JavaScriptEvaluator.ts +183 -0
- package/benchmarks/src/evaluators/index.ts +3 -0
- package/benchmarks/src/evaluators/types.ts +22 -0
- package/benchmarks/src/index.ts +3 -0
- package/benchmarks/src/providers.ts +13 -0
- package/benchmarks/src/runner.ts +824 -0
- package/benchmarks/src/types.ts +63 -0
- package/benchmarks/tsconfig.json +19 -0
- package/jest.config.js +2 -1
- package/leaderboard/README.md +148 -0
- package/leaderboard/app/api/benchmark-data/route.ts +131 -0
- package/leaderboard/app/api/benchmark-detail/route.ts +172 -0
- package/leaderboard/app/details/[model]/[provider]/[language]/page.tsx +501 -0
- package/leaderboard/app/exercise/[model]/[provider]/[language]/[exercise]/page.tsx +375 -0
- package/leaderboard/app/globals.css +27 -0
- package/leaderboard/app/layout.tsx +21 -0
- package/leaderboard/app/page.tsx +170 -0
- package/leaderboard/components/LeaderboardTable.tsx +168 -0
- package/leaderboard/components/PerformanceChart.tsx +109 -0
- package/leaderboard/next-env.d.ts +5 -0
- package/leaderboard/next.config.js +4 -0
- package/leaderboard/package-lock.json +6363 -0
- package/leaderboard/package.json +28 -0
- package/leaderboard/postcss.config.js +6 -0
- package/leaderboard/tailwind.config.js +17 -0
- package/leaderboard/tsconfig.json +28 -0
- package/leaderboard/types/benchmark.ts +67 -0
- package/leaderboard/utils/dataProcessor.ts +33 -0
- package/package.json +2 -1
- package/src/agents/base/base.ts +147 -21
- package/src/agents/base/prompt.ts +28 -0
- package/src/agents/index.ts +3 -0
- package/src/agents/patcher/patcher.ts +6 -4
- package/src/agents/setup/setup.ts +56 -0
- package/src/agents/tools/agentCall.ts +6 -2
- package/src/agents/tools/aiClient.ts +74 -8
- package/src/agents/tools/execCommand.ts +13 -14
- package/src/agents/tools/executeScript/README.md +16 -0
- package/src/agents/tools/index.ts +2 -0
- package/src/agents/tools/list.ts +73 -16
- package/src/agents/tools/startAgentTask.ts +109 -0
- package/src/agents/tools/textSearch.ts +1 -1
- package/src/agents/tools/visionTool.ts +31 -2
- package/src/agents/tools/ycmd/client.ts +608 -0
- package/src/agents/tools/ycmd/definitions.ts +294 -0
- package/src/agents/tools/ycmd/detection.ts +211 -0
- package/src/agents/tools/ycmd/index.ts +11 -0
- package/src/agents/tools/ycmd/installer.ts +251 -0
- package/src/agents/tools/ycmd/server.ts +535 -0
- package/src/agents/tools/ycmd/serverManager.ts +316 -0
- package/src/agents/tools/ycmd/tools/completion.ts +113 -0
- package/src/agents/tools/ycmd/tools/diagnostics.ts +155 -0
- package/src/agents/tools/ycmd/tools/getLocations.ts +173 -0
- package/src/agents/tools/ycmd/tools/goto.ts +169 -0
- package/src/agents/tools/ycmd/tools/refactor.ts +204 -0
- package/src/agents/tools/ycmd/tools/signature.ts +174 -0
- package/src/agents/tools/ycmd/tools/start.ts +95 -0
- package/src/agents/tools/ycmd/utils/pathUtils.ts +59 -0
- package/src/ai.ts +15 -0
- package/src/chat/CliChatService.ts +277 -0
- package/src/chat/modules/AgentModule.ts +980 -0
- package/src/chat/modules/AskModule.ts +98 -0
- package/src/chat/modules/BaseChatModule.ts +66 -0
- package/src/chat/modules/InternalChatModule.ts +174 -0
- package/src/chat/modules/SearchModule.ts +166 -0
- package/src/chat/modules/SetupModule.ts +185 -0
- package/src/chat/modules/SystemModule.ts +120 -0
- package/src/chat/modules/VoiceModule.ts +70 -0
- package/src/chat/modules/index.js +5 -0
- package/src/chat/types.ts +97 -0
- package/src/chat.ts +9 -1
- package/src/chat2.ts +62 -0
- package/src/cli.ts +264 -35
- package/src/clients/anthropic.ts +14 -7
- package/src/clients/gemini.ts +15 -7
- package/src/clients/http.ts +17 -7
- package/src/clients/index.ts +117 -4
- package/src/clients/knowhow.ts +7 -2
- package/src/clients/knowhowMcp.ts +118 -0
- package/src/clients/openai.ts +32 -8
- package/src/clients/types.ts +1 -0
- package/src/clients/xai.ts +17 -5
- package/src/config.ts +30 -5
- package/src/conversion.ts +4 -1
- package/src/embeddings.ts +79 -23
- package/src/login.ts +26 -9
- package/src/microphone.ts +0 -1
- package/src/plugins/downloader/downloader.ts +72 -24
- package/src/plugins/downloader/plugin.ts +3 -1
- package/src/plugins/plugins.ts +3 -0
- package/src/processors/CustomVariables.ts +425 -0
- package/src/processors/HarmonyToolProcessor.ts +264 -0
- package/src/processors/XmlToolCallProcessor.ts +533 -0
- package/src/processors/index.ts +3 -0
- package/src/prompts/KnowhowConfigExamples.ts +376 -0
- package/src/services/KnowhowClient.ts +49 -3
- package/src/services/Mcp.ts +42 -3
- package/src/services/McpServer.ts +14 -4
- package/src/services/McpWebsocketTransport.ts +21 -7
- package/src/services/MessageProcessor.ts +10 -5
- package/src/services/index.ts +5 -0
- package/src/services/script-execution/ScriptExecutor.ts +34 -1
- package/src/services/types.ts +17 -14
- package/src/types.ts +17 -0
- package/src/utils/index.ts +138 -0
- package/tests/XmlToolCallProcessor.test.ts +468 -0
- package/tests/manual/ycmd/debug_diagnostics_test.ts +127 -0
- package/tests/manual/ycmd/fixtures/debug_diagnostics.ts +26 -0
- package/tests/manual/ycmd/fixtures/file_change_test.ts +17 -0
- package/tests/manual/ycmd/minimal_advanced_test.ts +108 -0
- package/tests/manual/ycmd/simple_diagnostics_test.ts +61 -0
- package/tests/manual/ycmd/simple_test.ts +74 -0
- package/tests/manual/ycmd/test-typescript-sample.ts +34 -0
- package/tests/manual/ycmd/test_advanced_features.ts +407 -0
- package/tests/manual/ycmd/test_advanced_with_tools.ts +320 -0
- package/tests/manual/ycmd/test_comprehensive_typescript.ts +179 -0
- package/tests/manual/ycmd/test_diagnostics_file_changes.ts +249 -0
- package/tests/manual/ycmd/test_diagnostics_fix.ts +99 -0
- package/tests/manual/ycmd/test_diagnostics_simple.ts +100 -0
- package/tests/manual/ycmd/test_diagnostics_timing.ts +120 -0
- package/tests/manual/ycmd/test_discover_commands.ts +310 -0
- package/tests/manual/ycmd/test_endpoints.ts +115 -0
- package/tests/manual/ycmd/test_final_comprehensive.ts +218 -0
- package/tests/manual/ycmd/test_final_validation.ts +150 -0
- package/tests/manual/ycmd/test_implementation.js +42 -0
- package/tests/manual/ycmd/test_individual_ycmd_tool.ts +39 -0
- package/tests/manual/ycmd/test_server_manager.ts +52 -0
- package/tests/manual/ycmd/test_simple_debug.ts +86 -0
- package/tests/manual/ycmd/test_tsserver_workflow.js +83 -0
- package/tests/manual/ycmd/test_tsserver_workflow.ts +122 -0
- package/tests/manual/ycmd/test_typescript_simple.ts +48 -0
- package/tests/manual/ycmd/test_typescript_ycmd.ts +105 -0
- package/tests/manual/ycmd/test_workspace_config.ts +90 -0
- package/tests/manual/ycmd/test_ycmd_auto_start.ts +137 -0
- package/tests/manual/ycmd/test_ycmd_comprehensive.ts +73 -0
- package/tests/manual/ycmd/test_ycmd_connection.py +10 -0
- package/tests/manual/ycmd/test_ycmd_direct.ts +142 -0
- package/tests/manual/ycmd/test_ycmd_experiment.ts +48 -0
- package/tests/manual/ycmd/test_ycmd_final.ts +200 -0
- package/tests/manual/ycmd/test_ycmd_fixed.py +18 -0
- package/tests/manual/ycmd/test_ycmd_integration.ts +112 -0
- package/tests/manual/ycmd/test_ycmd_simple.ts +45 -0
- package/tests/manual/ycmd/test_ycmd_usage.py +27 -0
- package/tests/manual/ycmd/working_simple_test.ts +134 -0
- package/ts_build/src/agents/base/base.d.ts +14 -1
- package/ts_build/src/agents/base/base.js +91 -17
- package/ts_build/src/agents/base/base.js.map +1 -1
- package/ts_build/src/agents/base/prompt.d.ts +1 -1
- package/ts_build/src/agents/base/prompt.js +28 -0
- package/ts_build/src/agents/base/prompt.js.map +1 -1
- package/ts_build/src/agents/index.d.ts +2 -0
- package/ts_build/src/agents/index.js +2 -0
- package/ts_build/src/agents/index.js.map +1 -1
- package/ts_build/src/agents/patcher/patcher.js +6 -3
- package/ts_build/src/agents/patcher/patcher.js.map +1 -1
- package/ts_build/src/agents/setup/setup.d.ts +8 -0
- package/ts_build/src/agents/setup/setup.js +59 -0
- package/ts_build/src/agents/setup/setup.js.map +1 -0
- package/ts_build/src/agents/tools/agentCall.js +5 -2
- package/ts_build/src/agents/tools/agentCall.js.map +1 -1
- package/ts_build/src/agents/tools/aiClient.d.ts +6 -5
- package/ts_build/src/agents/tools/aiClient.js +37 -6
- package/ts_build/src/agents/tools/aiClient.js.map +1 -1
- package/ts_build/src/agents/tools/execCommand.d.ts +2 -2
- package/ts_build/src/agents/tools/execCommand.js +5 -6
- package/ts_build/src/agents/tools/execCommand.js.map +1 -1
- package/ts_build/src/agents/tools/executeScript/index.d.ts +1 -1
- package/ts_build/src/agents/tools/index.d.ts +2 -0
- package/ts_build/src/agents/tools/index.js +2 -0
- package/ts_build/src/agents/tools/index.js.map +1 -1
- package/ts_build/src/agents/tools/list.js +66 -16
- package/ts_build/src/agents/tools/list.js.map +1 -1
- package/ts_build/src/agents/tools/startAgentTask.d.ts +13 -0
- package/ts_build/src/agents/tools/startAgentTask.js +74 -0
- package/ts_build/src/agents/tools/startAgentTask.js.map +1 -0
- package/ts_build/src/agents/tools/startChatTask.d.ts +13 -0
- package/ts_build/src/agents/tools/startChatTask.js +73 -0
- package/ts_build/src/agents/tools/startChatTask.js.map +1 -0
- package/ts_build/src/agents/tools/textSearch.js +1 -1
- package/ts_build/src/agents/tools/textSearch.js.map +1 -1
- package/ts_build/src/agents/tools/visionTool.d.ts +1 -1
- package/ts_build/src/agents/tools/visionTool.js +23 -3
- package/ts_build/src/agents/tools/visionTool.js.map +1 -1
- package/ts_build/src/agents/tools/ycmd/client.d.ts +93 -0
- package/ts_build/src/agents/tools/ycmd/client.js +355 -0
- package/ts_build/src/agents/tools/ycmd/client.js.map +1 -0
- package/ts_build/src/agents/tools/ycmd/definitions.d.ts +345 -0
- package/ts_build/src/agents/tools/ycmd/definitions.js +298 -0
- package/ts_build/src/agents/tools/ycmd/definitions.js.map +1 -0
- package/ts_build/src/agents/tools/ycmd/detection.d.ts +11 -0
- package/ts_build/src/agents/tools/ycmd/detection.js +175 -0
- package/ts_build/src/agents/tools/ycmd/detection.js.map +1 -0
- package/ts_build/src/agents/tools/ycmd/index.d.ts +8 -0
- package/ts_build/src/agents/tools/ycmd/index.js +20 -0
- package/ts_build/src/agents/tools/ycmd/index.js.map +1 -0
- package/ts_build/src/agents/tools/ycmd/installer.d.ts +19 -0
- package/ts_build/src/agents/tools/ycmd/installer.js +196 -0
- package/ts_build/src/agents/tools/ycmd/installer.js.map +1 -0
- package/ts_build/src/agents/tools/ycmd/server.d.ts +35 -0
- package/ts_build/src/agents/tools/ycmd/server.js +363 -0
- package/ts_build/src/agents/tools/ycmd/server.js.map +1 -0
- package/ts_build/src/agents/tools/ycmd/serverManager.d.ts +39 -0
- package/ts_build/src/agents/tools/ycmd/serverManager.js +210 -0
- package/ts_build/src/agents/tools/ycmd/serverManager.js.map +1 -0
- package/ts_build/src/agents/tools/ycmd/tools/completion.d.ts +22 -0
- package/ts_build/src/agents/tools/ycmd/tools/completion.js +72 -0
- package/ts_build/src/agents/tools/ycmd/tools/completion.js.map +1 -0
- package/ts_build/src/agents/tools/ycmd/tools/diagnostics.d.ts +42 -0
- package/ts_build/src/agents/tools/ycmd/tools/diagnostics.js +88 -0
- package/ts_build/src/agents/tools/ycmd/tools/diagnostics.js.map +1 -0
- package/ts_build/src/agents/tools/ycmd/tools/getLocations.d.ts +22 -0
- package/ts_build/src/agents/tools/ycmd/tools/getLocations.js +142 -0
- package/ts_build/src/agents/tools/ycmd/tools/getLocations.js.map +1 -0
- package/ts_build/src/agents/tools/ycmd/tools/goto.d.ts +20 -0
- package/ts_build/src/agents/tools/ycmd/tools/goto.js +101 -0
- package/ts_build/src/agents/tools/ycmd/tools/goto.js.map +1 -0
- package/ts_build/src/agents/tools/ycmd/tools/refactor.d.ts +32 -0
- package/ts_build/src/agents/tools/ycmd/tools/refactor.js +123 -0
- package/ts_build/src/agents/tools/ycmd/tools/refactor.js.map +1 -0
- package/ts_build/src/agents/tools/ycmd/tools/signature.d.ts +25 -0
- package/ts_build/src/agents/tools/ycmd/tools/signature.js +110 -0
- package/ts_build/src/agents/tools/ycmd/tools/signature.js.map +1 -0
- package/ts_build/src/agents/tools/ycmd/tools/start.d.ts +17 -0
- package/ts_build/src/agents/tools/ycmd/tools/start.js +65 -0
- package/ts_build/src/agents/tools/ycmd/tools/start.js.map +1 -0
- package/ts_build/src/agents/tools/ycmd/utils/pathUtils.d.ts +4 -0
- package/ts_build/src/agents/tools/ycmd/utils/pathUtils.js +67 -0
- package/ts_build/src/agents/tools/ycmd/utils/pathUtils.js.map +1 -0
- package/ts_build/src/ai.d.ts +1 -0
- package/ts_build/src/ai.js +40 -1
- package/ts_build/src/ai.js.map +1 -1
- package/ts_build/src/chat/ChatCommandHandler.d.ts +36 -0
- package/ts_build/src/chat/ChatCommandHandler.js +268 -0
- package/ts_build/src/chat/ChatCommandHandler.js.map +1 -0
- package/ts_build/src/chat/ChatInputManager.d.ts +22 -0
- package/ts_build/src/chat/ChatInputManager.js +85 -0
- package/ts_build/src/chat/ChatInputManager.js.map +1 -0
- package/ts_build/src/chat/ChatManager.d.ts +49 -0
- package/ts_build/src/chat/ChatManager.js +271 -0
- package/ts_build/src/chat/ChatManager.js.map +1 -0
- package/ts_build/src/chat/ChatSession.d.ts +32 -0
- package/ts_build/src/chat/ChatSession.js +3 -0
- package/ts_build/src/chat/ChatSession.js.map +1 -0
- package/ts_build/src/chat/ChatSessionManager.d.ts +19 -0
- package/ts_build/src/chat/ChatSessionManager.js +188 -0
- package/ts_build/src/chat/ChatSessionManager.js.map +1 -0
- package/ts_build/src/chat/ChatStateManager.d.ts +58 -0
- package/ts_build/src/chat/ChatStateManager.js +156 -0
- package/ts_build/src/chat/ChatStateManager.js.map +1 -0
- package/ts_build/src/chat/CliChatService.d.ts +35 -0
- package/ts_build/src/chat/CliChatService.js +201 -0
- package/ts_build/src/chat/CliChatService.js.map +1 -0
- package/ts_build/src/chat/InterruptibleInput.d.ts +20 -0
- package/ts_build/src/chat/InterruptibleInput.js +109 -0
- package/ts_build/src/chat/InterruptibleInput.js.map +1 -0
- package/ts_build/src/chat/interfaces/ChatModule.d.ts +6 -0
- package/ts_build/src/chat/interfaces/ChatModule.js +3 -0
- package/ts_build/src/chat/interfaces/ChatModule.js.map +1 -0
- package/ts_build/src/chat/modules/AgentModule.d.ts +56 -0
- package/ts_build/src/chat/modules/AgentModule.js +705 -0
- package/ts_build/src/chat/modules/AgentModule.js.map +1 -0
- package/ts_build/src/chat/modules/AskModule.d.ts +10 -0
- package/ts_build/src/chat/modules/AskModule.js +63 -0
- package/ts_build/src/chat/modules/AskModule.js.map +1 -0
- package/ts_build/src/chat/modules/BaseChatModule.d.ts +14 -0
- package/ts_build/src/chat/modules/BaseChatModule.js +32 -0
- package/ts_build/src/chat/modules/BaseChatModule.js.map +1 -0
- package/ts_build/src/chat/modules/InternalChatModule.d.ts +24 -0
- package/ts_build/src/chat/modules/InternalChatModule.js +127 -0
- package/ts_build/src/chat/modules/InternalChatModule.js.map +1 -0
- package/ts_build/src/chat/modules/SearchModule.d.ts +12 -0
- package/ts_build/src/chat/modules/SearchModule.js +119 -0
- package/ts_build/src/chat/modules/SearchModule.js.map +1 -0
- package/ts_build/src/chat/modules/SetupModule.d.ts +15 -0
- package/ts_build/src/chat/modules/SetupModule.js +147 -0
- package/ts_build/src/chat/modules/SetupModule.js.map +1 -0
- package/ts_build/src/chat/modules/SystemModule.d.ts +14 -0
- package/ts_build/src/chat/modules/SystemModule.js +90 -0
- package/ts_build/src/chat/modules/SystemModule.js.map +1 -0
- package/ts_build/src/chat/modules/VoiceModule.d.ts +11 -0
- package/ts_build/src/chat/modules/VoiceModule.js +57 -0
- package/ts_build/src/chat/modules/VoiceModule.js.map +1 -0
- package/ts_build/src/chat/types.d.ts +83 -0
- package/ts_build/src/chat/types.js +3 -0
- package/ts_build/src/chat/types.js.map +1 -0
- package/ts_build/src/chat.js +7 -1
- package/ts_build/src/chat.js.map +1 -1
- package/ts_build/src/chat2.d.ts +3 -0
- package/ts_build/src/chat2.js +47 -0
- package/ts_build/src/chat2.js.map +1 -0
- package/ts_build/src/cli.js +218 -37
- package/ts_build/src/cli.js.map +1 -1
- package/ts_build/src/clients/anthropic.d.ts +5 -2
- package/ts_build/src/clients/anthropic.js +12 -7
- package/ts_build/src/clients/anthropic.js.map +1 -1
- package/ts_build/src/clients/gemini.d.ts +6 -3
- package/ts_build/src/clients/gemini.js +13 -7
- package/ts_build/src/clients/gemini.js.map +1 -1
- package/ts_build/src/clients/http.d.ts +1 -0
- package/ts_build/src/clients/http.js +12 -5
- package/ts_build/src/clients/http.js.map +1 -1
- package/ts_build/src/clients/index.d.ts +10 -0
- package/ts_build/src/clients/index.js +74 -4
- package/ts_build/src/clients/index.js.map +1 -1
- package/ts_build/src/clients/knowhow.d.ts +3 -1
- package/ts_build/src/clients/knowhow.js +8 -2
- package/ts_build/src/clients/knowhow.js.map +1 -1
- package/ts_build/src/clients/knowhowMcp.d.ts +20 -0
- package/ts_build/src/clients/knowhowMcp.js +86 -0
- package/ts_build/src/clients/knowhowMcp.js.map +1 -0
- package/ts_build/src/clients/openai.d.ts +5 -2
- package/ts_build/src/clients/openai.js +29 -8
- package/ts_build/src/clients/openai.js.map +1 -1
- package/ts_build/src/clients/types.d.ts +1 -0
- package/ts_build/src/clients/xai.d.ts +5 -2
- package/ts_build/src/clients/xai.js +15 -5
- package/ts_build/src/clients/xai.js.map +1 -1
- package/ts_build/src/config.js +24 -3
- package/ts_build/src/config.js.map +1 -1
- package/ts_build/src/conversion.js +6 -4
- package/ts_build/src/conversion.js.map +1 -1
- package/ts_build/src/embeddings.d.ts +2 -1
- package/ts_build/src/embeddings.js +62 -17
- package/ts_build/src/embeddings.js.map +1 -1
- package/ts_build/src/login.d.ts +1 -1
- package/ts_build/src/login.js +21 -7
- package/ts_build/src/login.js.map +1 -1
- package/ts_build/src/microphone.js.map +1 -1
- package/ts_build/src/plugins/downloader/downloader.d.ts +4 -5
- package/ts_build/src/plugins/downloader/downloader.js +55 -26
- package/ts_build/src/plugins/downloader/downloader.js.map +1 -1
- package/ts_build/src/plugins/downloader/plugin.js +5 -3
- package/ts_build/src/plugins/downloader/plugin.js.map +1 -1
- package/ts_build/src/plugins/plugins.js +3 -0
- package/ts_build/src/plugins/plugins.js.map +1 -1
- package/ts_build/src/processors/CustomVariables.d.ts +32 -0
- package/ts_build/src/processors/CustomVariables.js +297 -0
- package/ts_build/src/processors/CustomVariables.js.map +1 -0
- package/ts_build/src/processors/HarmonyToolProcessor.d.ts +15 -0
- package/ts_build/src/processors/HarmonyToolProcessor.js +154 -0
- package/ts_build/src/processors/HarmonyToolProcessor.js.map +1 -0
- package/ts_build/src/processors/XmlToolCallProcessor.d.ts +14 -0
- package/ts_build/src/processors/XmlToolCallProcessor.js +357 -0
- package/ts_build/src/processors/XmlToolCallProcessor.js.map +1 -0
- package/ts_build/src/processors/index.d.ts +3 -0
- package/ts_build/src/processors/index.js +7 -1
- package/ts_build/src/processors/index.js.map +1 -1
- package/ts_build/src/prompts/KnowhowConfigExamples.d.ts +2 -0
- package/ts_build/src/prompts/KnowhowConfigExamples.js +379 -0
- package/ts_build/src/prompts/KnowhowConfigExamples.js.map +1 -0
- package/ts_build/src/services/KnowhowClient.d.ts +22 -0
- package/ts_build/src/services/KnowhowClient.js +14 -2
- package/ts_build/src/services/KnowhowClient.js.map +1 -1
- package/ts_build/src/services/Mcp.d.ts +1 -0
- package/ts_build/src/services/Mcp.js +20 -3
- package/ts_build/src/services/Mcp.js.map +1 -1
- package/ts_build/src/services/McpServer.d.ts +1 -1
- package/ts_build/src/services/McpServer.js +8 -4
- package/ts_build/src/services/McpServer.js.map +1 -1
- package/ts_build/src/services/McpWebsocketTransport.js +17 -7
- package/ts_build/src/services/McpWebsocketTransport.js.map +1 -1
- package/ts_build/src/services/MessageProcessor.d.ts +1 -1
- package/ts_build/src/services/MessageProcessor.js +4 -4
- package/ts_build/src/services/MessageProcessor.js.map +1 -1
- package/ts_build/src/services/index.d.ts +2 -0
- package/ts_build/src/services/index.js +4 -0
- package/ts_build/src/services/index.js.map +1 -1
- package/ts_build/src/services/script-execution/ScriptExecutor.d.ts +1 -0
- package/ts_build/src/services/script-execution/ScriptExecutor.js +23 -0
- package/ts_build/src/services/script-execution/ScriptExecutor.js.map +1 -1
- package/ts_build/src/services/types.d.ts +2 -6
- package/ts_build/src/services/types.js +4 -4
- package/ts_build/src/services/types.js.map +1 -1
- package/ts_build/src/types.d.ts +11 -0
- package/ts_build/src/types.js +8 -0
- package/ts_build/src/types.js.map +1 -1
- package/ts_build/src/utils/index.d.ts +2 -0
- package/ts_build/src/utils/index.js +102 -1
- package/ts_build/src/utils/index.js.map +1 -1
- package/ts_build/tests/XmlToolCallProcessor.test.d.ts +1 -0
- package/ts_build/tests/XmlToolCallProcessor.test.js +376 -0
- package/ts_build/tests/XmlToolCallProcessor.test.js.map +1 -0
- package/ts_build/tests/manual/ycmd/debug_diagnostics_test.d.ts +1 -0
- package/ts_build/tests/manual/ycmd/debug_diagnostics_test.js +114 -0
- package/ts_build/tests/manual/ycmd/debug_diagnostics_test.js.map +1 -0
- package/ts_build/tests/manual/ycmd/minimal_advanced_test.d.ts +2 -0
- package/ts_build/tests/manual/ycmd/minimal_advanced_test.js +104 -0
- package/ts_build/tests/manual/ycmd/minimal_advanced_test.js.map +1 -0
- package/ts_build/tests/manual/ycmd/simple_diagnostics_test.d.ts +1 -0
- package/ts_build/tests/manual/ycmd/simple_diagnostics_test.js +74 -0
- package/ts_build/tests/manual/ycmd/simple_diagnostics_test.js.map +1 -0
- package/ts_build/tests/manual/ycmd/simple_test.d.ts +2 -0
- package/ts_build/tests/manual/ycmd/simple_test.js +82 -0
- package/ts_build/tests/manual/ycmd/simple_test.js.map +1 -0
- package/ts_build/tests/manual/ycmd/test-typescript-sample.d.ts +14 -0
- package/ts_build/tests/manual/ycmd/test-typescript-sample.js +20 -0
- package/ts_build/tests/manual/ycmd/test-typescript-sample.js.map +1 -0
- package/ts_build/tests/manual/ycmd/test_advanced_features.d.ts +2 -0
- package/ts_build/tests/manual/ycmd/test_advanced_features.js +297 -0
- package/ts_build/tests/manual/ycmd/test_advanced_features.js.map +1 -0
- package/ts_build/tests/manual/ycmd/test_advanced_with_tools.d.ts +3 -0
- package/ts_build/tests/manual/ycmd/test_advanced_with_tools.js +262 -0
- package/ts_build/tests/manual/ycmd/test_advanced_with_tools.js.map +1 -0
- package/ts_build/tests/manual/ycmd/test_comprehensive_typescript.d.ts +2 -0
- package/ts_build/tests/manual/ycmd/test_comprehensive_typescript.js +186 -0
- package/ts_build/tests/manual/ycmd/test_comprehensive_typescript.js.map +1 -0
- package/ts_build/tests/manual/ycmd/test_diagnostics_file_changes.d.ts +1 -0
- package/ts_build/tests/manual/ycmd/test_diagnostics_file_changes.js +174 -0
- package/ts_build/tests/manual/ycmd/test_diagnostics_file_changes.js.map +1 -0
- package/ts_build/tests/manual/ycmd/test_diagnostics_fix.d.ts +2 -0
- package/ts_build/tests/manual/ycmd/test_diagnostics_fix.js +106 -0
- package/ts_build/tests/manual/ycmd/test_diagnostics_fix.js.map +1 -0
- package/ts_build/tests/manual/ycmd/test_diagnostics_simple.d.ts +1 -0
- package/ts_build/tests/manual/ycmd/test_diagnostics_simple.js +104 -0
- package/ts_build/tests/manual/ycmd/test_diagnostics_simple.js.map +1 -0
- package/ts_build/tests/manual/ycmd/test_diagnostics_timing.d.ts +1 -0
- package/ts_build/tests/manual/ycmd/test_diagnostics_timing.js +119 -0
- package/ts_build/tests/manual/ycmd/test_diagnostics_timing.js.map +1 -0
- package/ts_build/tests/manual/ycmd/test_discover_commands.d.ts +2 -0
- package/ts_build/tests/manual/ycmd/test_discover_commands.js +243 -0
- package/ts_build/tests/manual/ycmd/test_discover_commands.js.map +1 -0
- package/ts_build/tests/manual/ycmd/test_endpoints.d.ts +2 -0
- package/ts_build/tests/manual/ycmd/test_endpoints.js +120 -0
- package/ts_build/tests/manual/ycmd/test_endpoints.js.map +1 -0
- package/ts_build/tests/manual/ycmd/test_final_comprehensive.d.ts +2 -0
- package/ts_build/tests/manual/ycmd/test_final_comprehensive.js +221 -0
- package/ts_build/tests/manual/ycmd/test_final_comprehensive.js.map +1 -0
- package/ts_build/tests/manual/ycmd/test_final_validation.d.ts +2 -0
- package/ts_build/tests/manual/ycmd/test_final_validation.js +160 -0
- package/ts_build/tests/manual/ycmd/test_final_validation.js.map +1 -0
- package/ts_build/tests/manual/ycmd/test_individual_ycmd_tool.d.ts +2 -0
- package/ts_build/tests/manual/ycmd/test_individual_ycmd_tool.js +37 -0
- package/ts_build/tests/manual/ycmd/test_individual_ycmd_tool.js.map +1 -0
- package/ts_build/tests/manual/ycmd/test_server_manager.d.ts +1 -0
- package/ts_build/tests/manual/ycmd/test_server_manager.js +38 -0
- package/ts_build/tests/manual/ycmd/test_server_manager.js.map +1 -0
- package/ts_build/tests/manual/ycmd/test_simple_debug.d.ts +2 -0
- package/ts_build/tests/manual/ycmd/test_simple_debug.js +99 -0
- package/ts_build/tests/manual/ycmd/test_simple_debug.js.map +1 -0
- package/ts_build/tests/manual/ycmd/test_tsserver_workflow.d.ts +1 -0
- package/ts_build/tests/manual/ycmd/test_tsserver_workflow.js +128 -0
- package/ts_build/tests/manual/ycmd/test_tsserver_workflow.js.map +1 -0
- package/ts_build/tests/manual/ycmd/test_typescript_simple.d.ts +1 -0
- package/ts_build/tests/manual/ycmd/test_typescript_simple.js +66 -0
- package/ts_build/tests/manual/ycmd/test_typescript_simple.js.map +1 -0
- package/ts_build/tests/manual/ycmd/test_typescript_ycmd.d.ts +1 -0
- package/ts_build/tests/manual/ycmd/test_typescript_ycmd.js +105 -0
- package/ts_build/tests/manual/ycmd/test_typescript_ycmd.js.map +1 -0
- package/ts_build/tests/manual/ycmd/test_workspace_config.d.ts +1 -0
- package/ts_build/tests/manual/ycmd/test_workspace_config.js +89 -0
- package/ts_build/tests/manual/ycmd/test_workspace_config.js.map +1 -0
- package/ts_build/tests/manual/ycmd/test_ycmd_auto_start.d.ts +2 -0
- package/ts_build/tests/manual/ycmd/test_ycmd_auto_start.js +130 -0
- package/ts_build/tests/manual/ycmd/test_ycmd_auto_start.js.map +1 -0
- package/ts_build/tests/manual/ycmd/test_ycmd_comprehensive.d.ts +1 -0
- package/ts_build/tests/manual/ycmd/test_ycmd_comprehensive.js +83 -0
- package/ts_build/tests/manual/ycmd/test_ycmd_comprehensive.js.map +1 -0
- package/ts_build/tests/manual/ycmd/test_ycmd_direct.d.ts +2 -0
- package/ts_build/tests/manual/ycmd/test_ycmd_direct.js +149 -0
- package/ts_build/tests/manual/ycmd/test_ycmd_direct.js.map +1 -0
- package/ts_build/tests/manual/ycmd/test_ycmd_experiment.d.ts +15 -0
- package/ts_build/tests/manual/ycmd/test_ycmd_experiment.js +58 -0
- package/ts_build/tests/manual/ycmd/test_ycmd_experiment.js.map +1 -0
- package/ts_build/tests/manual/ycmd/test_ycmd_final.d.ts +2 -0
- package/ts_build/tests/manual/ycmd/test_ycmd_final.js +195 -0
- package/ts_build/tests/manual/ycmd/test_ycmd_final.js.map +1 -0
- package/ts_build/tests/manual/ycmd/test_ycmd_integration.d.ts +3 -0
- package/ts_build/tests/manual/ycmd/test_ycmd_integration.js +110 -0
- package/ts_build/tests/manual/ycmd/test_ycmd_integration.js.map +1 -0
- package/ts_build/tests/manual/ycmd/test_ycmd_simple.d.ts +2 -0
- package/ts_build/tests/manual/ycmd/test_ycmd_simple.js +36 -0
- package/ts_build/tests/manual/ycmd/test_ycmd_simple.js.map +1 -0
- package/ts_build/tests/manual/ycmd/working_simple_test.d.ts +2 -0
- package/ts_build/tests/manual/ycmd/working_simple_test.js +134 -0
- package/ts_build/tests/manual/ycmd/working_simple_test.js.map +1 -0
- 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 };
|