@tyvm/knowhow 0.0.33 → 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/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/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
package/src/cli.ts
CHANGED
|
@@ -1,5 +1,9 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import "source-map-support/register";
|
|
3
|
+
import * as fs from "fs";
|
|
4
|
+
import * as path from "path";
|
|
5
|
+
import * as os from "os";
|
|
6
|
+
import { Command } from "commander";
|
|
3
7
|
import { generate, embed, upload, chat } from "./index";
|
|
4
8
|
import { init } from "./config";
|
|
5
9
|
|
|
@@ -10,59 +14,284 @@ import { services } from "./services";
|
|
|
10
14
|
import { login } from "./login";
|
|
11
15
|
import { worker } from "./worker";
|
|
12
16
|
import { agents } from "./agents";
|
|
17
|
+
import { startChat2 } from "./chat2";
|
|
18
|
+
import { askAI } from "./chat";
|
|
19
|
+
import { getConfiguredEmbeddingMap, queryEmbedding } from "./embeddings";
|
|
20
|
+
import { getConfig } from "./config";
|
|
21
|
+
import { marked } from "marked";
|
|
22
|
+
import { BaseAgent } from "./agents/base/base";
|
|
23
|
+
import { AskModule } from "./chat/modules/AskModule";
|
|
24
|
+
import { SearchModule } from "./chat/modules/SearchModule";
|
|
25
|
+
import { AgentModule } from "./chat/modules/AgentModule";
|
|
26
|
+
import { readPromptFile } from "./ai";
|
|
27
|
+
import { SetupModule } from "./chat/modules/SetupModule";
|
|
28
|
+
import { CliChatService } from "./chat/CliChatService";
|
|
13
29
|
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
async function main() {
|
|
30
|
+
async function setupServices() {
|
|
17
31
|
const { Tools, Agents, Mcp, Clients } = services();
|
|
18
|
-
const { Researcher, Developer, Patcher } = agents();
|
|
32
|
+
const { Researcher, Developer, Patcher, Setup } = agents();
|
|
19
33
|
Agents.registerAgent(Researcher);
|
|
20
34
|
Agents.registerAgent(Patcher);
|
|
21
35
|
Agents.registerAgent(Developer);
|
|
36
|
+
Agents.registerAgent(Setup);
|
|
22
37
|
Agents.loadAgentsFromConfig(services());
|
|
23
38
|
|
|
24
39
|
Tools.defineTools(includedTools, allTools);
|
|
25
40
|
|
|
26
|
-
await
|
|
27
|
-
|
|
41
|
+
await Promise.all([
|
|
42
|
+
Mcp.connectToConfigured(Tools),
|
|
43
|
+
Clients.registerConfiguredModels(),
|
|
44
|
+
]);
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
// Utility function to read from stdin
|
|
48
|
+
async function readStdin(): Promise<string> {
|
|
49
|
+
return new Promise((resolve) => {
|
|
50
|
+
let data = "";
|
|
51
|
+
process.stdin.setEncoding("utf8");
|
|
52
|
+
|
|
53
|
+
if (process.stdin.isTTY) {
|
|
54
|
+
resolve("");
|
|
55
|
+
return;
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
process.stdin.on("readable", () => {
|
|
59
|
+
const chunk = process.stdin.read();
|
|
60
|
+
if (chunk !== null) data += chunk;
|
|
61
|
+
});
|
|
62
|
+
|
|
63
|
+
process.stdin.on("end", () => resolve(data.trim()));
|
|
64
|
+
});
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
async function main() {
|
|
68
|
+
const program = new Command();
|
|
69
|
+
const config = await getConfig();
|
|
70
|
+
|
|
71
|
+
program
|
|
72
|
+
.name("knowhow")
|
|
73
|
+
.description("AI CLI with plugins and agents")
|
|
74
|
+
.version("0.0.33");
|
|
28
75
|
|
|
29
|
-
//
|
|
30
|
-
|
|
76
|
+
// Initialize services for all commands
|
|
77
|
+
await setupServices();
|
|
31
78
|
|
|
32
|
-
|
|
33
|
-
|
|
79
|
+
program
|
|
80
|
+
.command("init")
|
|
81
|
+
.description("Initialize knowhow configuration")
|
|
82
|
+
.action(async () => {
|
|
34
83
|
await init();
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
84
|
+
});
|
|
85
|
+
|
|
86
|
+
program
|
|
87
|
+
.command("login")
|
|
88
|
+
.description("Login to knowhow")
|
|
89
|
+
.option("--jwt", "should use JWT login", "true")
|
|
90
|
+
.action(async (opts) => {
|
|
91
|
+
await login(opts.jwt);
|
|
92
|
+
});
|
|
93
|
+
|
|
94
|
+
program
|
|
95
|
+
.command("generate")
|
|
96
|
+
.description("Generate documentation")
|
|
97
|
+
.action(async () => {
|
|
40
98
|
await generate();
|
|
41
|
-
|
|
42
|
-
|
|
99
|
+
});
|
|
100
|
+
|
|
101
|
+
program
|
|
102
|
+
.command("embed")
|
|
103
|
+
.description("Create embeddings")
|
|
104
|
+
.action(async () => {
|
|
43
105
|
await embed();
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
106
|
+
});
|
|
107
|
+
|
|
108
|
+
program
|
|
109
|
+
.command("embed:purge")
|
|
110
|
+
.description("Purge embeddings matching a glob pattern")
|
|
111
|
+
.argument("<pattern>", "Glob pattern to match files for purging")
|
|
112
|
+
.action(async (pattern) => {
|
|
113
|
+
await purge(pattern);
|
|
114
|
+
});
|
|
115
|
+
|
|
116
|
+
program
|
|
117
|
+
.command("upload")
|
|
118
|
+
.description("Upload data")
|
|
119
|
+
.action(async () => {
|
|
49
120
|
await upload();
|
|
50
|
-
|
|
51
|
-
|
|
121
|
+
});
|
|
122
|
+
|
|
123
|
+
program
|
|
124
|
+
.command("download")
|
|
125
|
+
.description("Download data")
|
|
126
|
+
.action(async () => {
|
|
52
127
|
await download();
|
|
53
|
-
|
|
54
|
-
|
|
128
|
+
});
|
|
129
|
+
|
|
130
|
+
program
|
|
131
|
+
.command("chat")
|
|
132
|
+
.description("Start chat interface")
|
|
133
|
+
.action(async () => {
|
|
55
134
|
await chat();
|
|
56
|
-
|
|
57
|
-
|
|
135
|
+
});
|
|
136
|
+
|
|
137
|
+
program
|
|
138
|
+
.command("chat2")
|
|
139
|
+
.description("Start new chat interface")
|
|
140
|
+
.action(async () => {
|
|
141
|
+
await startChat2();
|
|
142
|
+
});
|
|
143
|
+
|
|
144
|
+
program
|
|
145
|
+
.command("agent")
|
|
146
|
+
.description("Spin up agents directly from CLI")
|
|
147
|
+
.option(
|
|
148
|
+
"--provider <provider>",
|
|
149
|
+
"AI provider (openai, anthropic, google, xai)",
|
|
150
|
+
"openai"
|
|
151
|
+
)
|
|
152
|
+
.option("--model <model>", "Specific model for the provider")
|
|
153
|
+
.option("--agent-name <name>", "Which agent to use", "Patcher")
|
|
154
|
+
.option(
|
|
155
|
+
"--max-time-limit <minutes>",
|
|
156
|
+
"Time limit for agent execution (minutes)",
|
|
157
|
+
"30"
|
|
158
|
+
)
|
|
159
|
+
.option(
|
|
160
|
+
"--max-spend-limit <dollars>",
|
|
161
|
+
"Cost limit for agent execution (dollars)",
|
|
162
|
+
"10"
|
|
163
|
+
)
|
|
164
|
+
.option("--message-id <messageId>", "Knowhow message ID for task tracking")
|
|
165
|
+
.option("--prompt-file <path>", "Custom prompt template file with {text}")
|
|
166
|
+
.option("--input <text>", "Task input (fallback to stdin if not provided)")
|
|
167
|
+
.action(async (options) => {
|
|
168
|
+
try {
|
|
169
|
+
let input = options.input;
|
|
170
|
+
if (!input) {
|
|
171
|
+
input = await readStdin();
|
|
172
|
+
if (!input) {
|
|
173
|
+
console.error(
|
|
174
|
+
"Error: No input provided. Use --input flag or pipe input via stdin."
|
|
175
|
+
);
|
|
176
|
+
process.exit(1);
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
input = readPromptFile(options.promptFile, input);
|
|
181
|
+
const { taskCompleted } = await new AgentModule().setupAgent({
|
|
182
|
+
...options,
|
|
183
|
+
input,
|
|
184
|
+
maxTimeLimit: parseInt(options.maxTimeLimit, 10),
|
|
185
|
+
maxSpendLimit: parseFloat(options.maxSpendLimit),
|
|
186
|
+
run: true,
|
|
187
|
+
});
|
|
188
|
+
await taskCompleted;
|
|
189
|
+
} catch (error) {
|
|
190
|
+
console.error("Error running agent:", error);
|
|
191
|
+
process.exit(1);
|
|
192
|
+
}
|
|
193
|
+
});
|
|
194
|
+
|
|
195
|
+
program
|
|
196
|
+
.command("ask")
|
|
197
|
+
.description("Direct AI questioning without agent overhead")
|
|
198
|
+
.option("--provider <provider>", "AI provider to use", "openai")
|
|
199
|
+
.option("--model <model>", "Specific model")
|
|
200
|
+
.option("--input <text>", "Question (fallback to stdin if not provided)")
|
|
201
|
+
.option("--prompt-file <path>", "Custom prompt template file")
|
|
202
|
+
.action(async (options) => {
|
|
203
|
+
try {
|
|
204
|
+
let input = options.input;
|
|
205
|
+
if (!input) {
|
|
206
|
+
input = await readStdin();
|
|
207
|
+
if (!input) {
|
|
208
|
+
console.error(
|
|
209
|
+
"Error: No question provided. Use --input flag or pipe input via stdin."
|
|
210
|
+
);
|
|
211
|
+
process.exit(1);
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
|
|
215
|
+
input = readPromptFile(options.promptFile, input);
|
|
216
|
+
|
|
217
|
+
await new AskModule().processAIQuery(input, {
|
|
218
|
+
plugins: config.plugins,
|
|
219
|
+
currentModel: options.model,
|
|
220
|
+
currentProvider: options.provider,
|
|
221
|
+
});
|
|
222
|
+
} catch (error) {
|
|
223
|
+
console.error("Error asking AI:", error);
|
|
224
|
+
process.exit(1);
|
|
225
|
+
}
|
|
226
|
+
});
|
|
227
|
+
|
|
228
|
+
program
|
|
229
|
+
.command("setup")
|
|
230
|
+
.description("Ask the agent to configure knowhow")
|
|
231
|
+
.action(async (options) => {
|
|
232
|
+
try {
|
|
233
|
+
const chatService = new CliChatService(config.plugins);
|
|
234
|
+
const setupModule = new SetupModule();
|
|
235
|
+
await setupModule.initialize(chatService);
|
|
236
|
+
await setupModule.handleSetupCommand([]);
|
|
237
|
+
} catch (error) {
|
|
238
|
+
console.error("Error running agent:", error);
|
|
239
|
+
process.exit(1);
|
|
240
|
+
}
|
|
241
|
+
});
|
|
242
|
+
|
|
243
|
+
program
|
|
244
|
+
.command("search")
|
|
245
|
+
.description("Search embeddings directly from CLI")
|
|
246
|
+
.option(
|
|
247
|
+
"--input <text>",
|
|
248
|
+
"Search query (fallback to stdin if not provided)"
|
|
249
|
+
)
|
|
250
|
+
.option(
|
|
251
|
+
"-e, --embedding <path>",
|
|
252
|
+
"Specific embedding path (default: all)",
|
|
253
|
+
"all"
|
|
254
|
+
)
|
|
255
|
+
.action(async (options) => {
|
|
256
|
+
try {
|
|
257
|
+
let input = options.input;
|
|
258
|
+
if (!input) {
|
|
259
|
+
input = await readStdin();
|
|
260
|
+
if (!input) {
|
|
261
|
+
console.error(
|
|
262
|
+
"Error: No search query provided. Use --input flag or pipe input via stdin."
|
|
263
|
+
);
|
|
264
|
+
process.exit(1);
|
|
265
|
+
}
|
|
266
|
+
}
|
|
267
|
+
|
|
268
|
+
await new SearchModule().searchEmbeddingsCLI(input, options.embedding);
|
|
269
|
+
} catch (error) {
|
|
270
|
+
console.error("Error searching embeddings:", error);
|
|
271
|
+
process.exit(1);
|
|
272
|
+
}
|
|
273
|
+
});
|
|
274
|
+
|
|
275
|
+
program
|
|
276
|
+
.command("sessions")
|
|
277
|
+
.description("Manage agent sessions from CLI")
|
|
278
|
+
.action(async () => {
|
|
279
|
+
try {
|
|
280
|
+
await new AgentModule().logSessionTable();
|
|
281
|
+
} catch (error) {
|
|
282
|
+
console.error("Error listing sessions:", error);
|
|
283
|
+
process.exit(1);
|
|
284
|
+
}
|
|
285
|
+
});
|
|
286
|
+
|
|
287
|
+
program
|
|
288
|
+
.command("worker")
|
|
289
|
+
.description("Start worker process")
|
|
290
|
+
.action(async () => {
|
|
58
291
|
await worker();
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
"Unknown command. Please use one of the following: init, login, generate, embed, embed:purge, upload, download, chat"
|
|
63
|
-
);
|
|
64
|
-
break;
|
|
65
|
-
}
|
|
292
|
+
});
|
|
293
|
+
|
|
294
|
+
await program.parseAsync(process.argv);
|
|
66
295
|
}
|
|
67
296
|
|
|
68
297
|
if (require.main === module) {
|
package/src/clients/anthropic.ts
CHANGED
|
@@ -14,10 +14,18 @@ import {
|
|
|
14
14
|
type MessageParam = Anthropic.MessageParam;
|
|
15
15
|
type Usage = Anthropic.Usage;
|
|
16
16
|
|
|
17
|
-
export class GenericAnthropicClient
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
17
|
+
export class GenericAnthropicClient implements GenericClient {
|
|
18
|
+
private client: Anthropic;
|
|
19
|
+
private apiKey?: string;
|
|
20
|
+
|
|
21
|
+
constructor(apiKey?: string) {
|
|
22
|
+
this.setKey(apiKey || process.env.ANTHROPIC_API_KEY || "");
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
setKey(apiKey: string) {
|
|
26
|
+
this.apiKey = apiKey;
|
|
27
|
+
this.client = new Anthropic({
|
|
28
|
+
apiKey: apiKey || process.env.ANTHROPIC_API_KEY,
|
|
21
29
|
});
|
|
22
30
|
}
|
|
23
31
|
|
|
@@ -26,7 +34,6 @@ export class GenericAnthropicClient extends Anthropic implements GenericClient {
|
|
|
26
34
|
|
|
27
35
|
if (lastTool) {
|
|
28
36
|
lastTool.cache_control = { type: "ephemeral" };
|
|
29
|
-
console.log("caching last tool");
|
|
30
37
|
}
|
|
31
38
|
}
|
|
32
39
|
|
|
@@ -242,7 +249,7 @@ export class GenericAnthropicClient extends Anthropic implements GenericClient {
|
|
|
242
249
|
|
|
243
250
|
const tools = this.transformTools(options.tools);
|
|
244
251
|
try {
|
|
245
|
-
const response = await this.messages.create({
|
|
252
|
+
const response = await this.client.messages.create({
|
|
246
253
|
model: options.model,
|
|
247
254
|
messages: claudeMessages,
|
|
248
255
|
system: systemMessage
|
|
@@ -382,7 +389,7 @@ export class GenericAnthropicClient extends Anthropic implements GenericClient {
|
|
|
382
389
|
}
|
|
383
390
|
|
|
384
391
|
async getModels() {
|
|
385
|
-
const models = await this.models.list();
|
|
392
|
+
const models = await this.client.models.list();
|
|
386
393
|
return models.data.map((m) => ({
|
|
387
394
|
id: m.id,
|
|
388
395
|
}));
|
package/src/clients/gemini.ts
CHANGED
|
@@ -32,10 +32,18 @@ function getMimeTypeFromUrl(url: string): string {
|
|
|
32
32
|
return "image/jpeg";
|
|
33
33
|
}
|
|
34
34
|
|
|
35
|
-
export class GenericGeminiClient
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
35
|
+
export class GenericGeminiClient implements GenericClient {
|
|
36
|
+
private client: GoogleGenAI;
|
|
37
|
+
private apiKey?: string;
|
|
38
|
+
|
|
39
|
+
constructor(apiKey?: string) {
|
|
40
|
+
this.setKey(apiKey || process.env.GEMINI_API_KEY || "");
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
setKey(apiKey: string) {
|
|
44
|
+
this.apiKey = apiKey;
|
|
45
|
+
this.client = new GoogleGenAI({
|
|
46
|
+
apiKey: apiKey || process.env.GEMINI_API_KEY,
|
|
39
47
|
});
|
|
40
48
|
}
|
|
41
49
|
|
|
@@ -250,7 +258,7 @@ export class GenericGeminiClient extends GoogleGenAI implements GenericClient {
|
|
|
250
258
|
|
|
251
259
|
try {
|
|
252
260
|
await wait(2000);
|
|
253
|
-
const response = await this.models.generateContent({
|
|
261
|
+
const response = await this.client.models.generateContent({
|
|
254
262
|
model: options.model,
|
|
255
263
|
contents,
|
|
256
264
|
config: {
|
|
@@ -428,7 +436,7 @@ export class GenericGeminiClient extends GoogleGenAI implements GenericClient {
|
|
|
428
436
|
|
|
429
437
|
async getModels() {
|
|
430
438
|
try {
|
|
431
|
-
const models = await this.models.list();
|
|
439
|
+
const models = await this.client.models.list();
|
|
432
440
|
return models.page.map((m) => ({
|
|
433
441
|
id: m.name!,
|
|
434
442
|
}));
|
|
@@ -446,7 +454,7 @@ export class GenericGeminiClient extends GoogleGenAI implements GenericClient {
|
|
|
446
454
|
}
|
|
447
455
|
|
|
448
456
|
try {
|
|
449
|
-
const googleEmbedding = await this.models.embedContent({
|
|
457
|
+
const googleEmbedding = await this.client.models.embedContent({
|
|
450
458
|
model: options.model,
|
|
451
459
|
contents: options.input,
|
|
452
460
|
});
|
package/src/clients/http.ts
CHANGED
|
@@ -23,6 +23,10 @@ export class HttpClient implements GenericClient {
|
|
|
23
23
|
this.baseUrl = baseUrl;
|
|
24
24
|
}
|
|
25
25
|
|
|
26
|
+
setKey(key: string) {
|
|
27
|
+
this.setJwt(key);
|
|
28
|
+
}
|
|
29
|
+
|
|
26
30
|
loadJwtFile(filePath: string) {
|
|
27
31
|
try {
|
|
28
32
|
const jwtFile = path.join(process.cwd(), filePath);
|
|
@@ -39,15 +43,21 @@ export class HttpClient implements GenericClient {
|
|
|
39
43
|
async createChatCompletion(
|
|
40
44
|
options: CompletionOptions
|
|
41
45
|
): Promise<CompletionResponse> {
|
|
46
|
+
const body = {
|
|
47
|
+
...options,
|
|
48
|
+
model: options.model,
|
|
49
|
+
messages: options.messages,
|
|
50
|
+
max_tokens: options.max_tokens || 3000,
|
|
51
|
+
|
|
52
|
+
...(options.tools && {
|
|
53
|
+
tools: options.tools,
|
|
54
|
+
tool_choice: "auto",
|
|
55
|
+
}),
|
|
56
|
+
};
|
|
57
|
+
|
|
42
58
|
const response = await axios.post(
|
|
43
59
|
`${this.baseUrl}/v1/chat/completions`,
|
|
44
|
-
|
|
45
|
-
model: options.model,
|
|
46
|
-
messages: options.messages,
|
|
47
|
-
max_tokens: options.max_tokens,
|
|
48
|
-
tools: options.tools,
|
|
49
|
-
tool_choice: options.tool_choice,
|
|
50
|
-
},
|
|
60
|
+
body,
|
|
51
61
|
{
|
|
52
62
|
headers: this.headers,
|
|
53
63
|
}
|
package/src/clients/index.ts
CHANGED
|
@@ -12,6 +12,8 @@ import { HttpClient } from "./http";
|
|
|
12
12
|
import { EmbeddingModels, Models } from "../types";
|
|
13
13
|
import { getConfig } from "../config";
|
|
14
14
|
import { GenericXAIClient } from "./xai";
|
|
15
|
+
import { KnowhowGenericClient } from "./knowhow";
|
|
16
|
+
import { loadKnowhowJwt } from "../services/KnowhowClient";
|
|
15
17
|
|
|
16
18
|
function envCheck(key: string): boolean {
|
|
17
19
|
const value = process.env[key];
|
|
@@ -31,6 +33,7 @@ export class AIClient {
|
|
|
31
33
|
|
|
32
34
|
...(envCheck("GEMINI_API_KEY") && { google: new GenericGeminiClient() }),
|
|
33
35
|
...(envCheck("XAI_API_KEY") && { xai: new GenericXAIClient() }),
|
|
36
|
+
...(loadKnowhowJwt() && { knowhow: new KnowhowGenericClient() }),
|
|
34
37
|
};
|
|
35
38
|
|
|
36
39
|
completionModels = {
|
|
@@ -101,6 +104,12 @@ export class AIClient {
|
|
|
101
104
|
this.clients[provider] = client;
|
|
102
105
|
}
|
|
103
106
|
|
|
107
|
+
setKey(provider: string, apiKey: string) {
|
|
108
|
+
const { client } = this.getClient(provider); // Ensure provider is registered
|
|
109
|
+
client.setKey(apiKey);
|
|
110
|
+
this.clients[provider].setKey(apiKey);
|
|
111
|
+
}
|
|
112
|
+
|
|
104
113
|
async registerConfiguredModels() {
|
|
105
114
|
const config = await getConfig();
|
|
106
115
|
const modelProviders = config.modelProviders || [];
|
|
@@ -115,9 +124,7 @@ export class AIClient {
|
|
|
115
124
|
this.registerClient(modelProvider.provider, client);
|
|
116
125
|
|
|
117
126
|
try {
|
|
118
|
-
|
|
119
|
-
const ids = models.map((model) => model.id);
|
|
120
|
-
this.registerModels(modelProvider.provider, ids);
|
|
127
|
+
await this.loadProviderModels(modelProvider.provider);
|
|
121
128
|
} catch (error) {
|
|
122
129
|
console.error(
|
|
123
130
|
`Failed to register models for provider ${modelProvider.provider}:`,
|
|
@@ -127,6 +134,23 @@ export class AIClient {
|
|
|
127
134
|
}
|
|
128
135
|
}
|
|
129
136
|
|
|
137
|
+
async loadProviderModels(provider: string) {
|
|
138
|
+
if (!this.clients[provider]) {
|
|
139
|
+
throw new Error(`Provider ${provider} not registered.`);
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
try {
|
|
143
|
+
const models = await this.clients[provider].getModels();
|
|
144
|
+
const ids = models.map((model) => model.id);
|
|
145
|
+
this.registerModels(provider, ids);
|
|
146
|
+
} catch (error) {
|
|
147
|
+
console.error(
|
|
148
|
+
`Failed to load models for provider ${provider}:`,
|
|
149
|
+
error.message
|
|
150
|
+
);
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
|
|
130
154
|
registerModels(provider: string, models: string[]) {
|
|
131
155
|
const currentModels = this.clientModels[provider] || [];
|
|
132
156
|
const currentCompletionModels = this.completionModels[provider] || [];
|
|
@@ -140,6 +164,21 @@ export class AIClient {
|
|
|
140
164
|
);
|
|
141
165
|
}
|
|
142
166
|
|
|
167
|
+
/*
|
|
168
|
+
* Some clients support multiple providers, most clients are single provider
|
|
169
|
+
* For the mult-provider clients, we register them with this method
|
|
170
|
+
* TODO: currently registering overwrites any existing providers, but a fallback list could be useful
|
|
171
|
+
*/
|
|
172
|
+
registerClientProviderModels(
|
|
173
|
+
client: GenericClient,
|
|
174
|
+
providerModels: Record<string, string[]>
|
|
175
|
+
) {
|
|
176
|
+
for (const [provider, models] of Object.entries(providerModels)) {
|
|
177
|
+
this.registerClient(provider, client);
|
|
178
|
+
this.registerModels(provider, models);
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
|
|
143
182
|
registerEmbeddingModels(provider: string, models: string[]) {
|
|
144
183
|
const currentModels = this.clientModels[provider] || [];
|
|
145
184
|
const currentEmbeddingModels = this.embeddingModels[provider] || [];
|
|
@@ -175,7 +214,7 @@ export class AIClient {
|
|
|
175
214
|
return { provider, model };
|
|
176
215
|
}
|
|
177
216
|
|
|
178
|
-
if (model
|
|
217
|
+
if (model?.includes("/")) {
|
|
179
218
|
const split = model.split("/");
|
|
180
219
|
|
|
181
220
|
const inferredProvider = split[0];
|
|
@@ -206,6 +245,13 @@ export class AIClient {
|
|
|
206
245
|
options: CompletionOptions
|
|
207
246
|
): Promise<CompletionResponse> {
|
|
208
247
|
const { client, model } = this.getClient(provider, options.model);
|
|
248
|
+
if (!model || !client) {
|
|
249
|
+
throw new Error(
|
|
250
|
+
`provider: ${provider} does not have ${
|
|
251
|
+
options.model
|
|
252
|
+
} model registered. Try using ${JSON.stringify(this.listAllModels())}`
|
|
253
|
+
);
|
|
254
|
+
}
|
|
209
255
|
return client.createChatCompletion({ ...options, model });
|
|
210
256
|
}
|
|
211
257
|
|
|
@@ -214,6 +260,13 @@ export class AIClient {
|
|
|
214
260
|
options: EmbeddingOptions
|
|
215
261
|
): Promise<EmbeddingResponse> {
|
|
216
262
|
const { client, model } = this.getClient(provider, options.model);
|
|
263
|
+
if (!model || !client) {
|
|
264
|
+
throw new Error(
|
|
265
|
+
`provider: ${provider} does not have ${
|
|
266
|
+
options.model
|
|
267
|
+
} model registered. Try using ${JSON.stringify(this.listAllModels())}`
|
|
268
|
+
);
|
|
269
|
+
}
|
|
217
270
|
return client.createEmbedding({ ...options, model });
|
|
218
271
|
}
|
|
219
272
|
|
|
@@ -225,6 +278,65 @@ export class AIClient {
|
|
|
225
278
|
return this.clientModels;
|
|
226
279
|
}
|
|
227
280
|
|
|
281
|
+
listAllModelsWithProvider() {
|
|
282
|
+
return Object.entries(this.listAllModels())
|
|
283
|
+
.map(([provider, models]) =>
|
|
284
|
+
models.map((m) => ({ id: `${provider}/${m}` }))
|
|
285
|
+
)
|
|
286
|
+
.flat();
|
|
287
|
+
}
|
|
288
|
+
|
|
289
|
+
/*
|
|
290
|
+
*
|
|
291
|
+
* some clients return models in the format "provider/model_name"
|
|
292
|
+
* this function parses those models into our {provider, model} format
|
|
293
|
+
* then creates a provider -> [models] map
|
|
294
|
+
* the models will not have the provider prefix
|
|
295
|
+
*
|
|
296
|
+
* if the client doesn't return models in that format, use knownProvider
|
|
297
|
+
* to set the provider
|
|
298
|
+
*/
|
|
299
|
+
async parseProviderPrefixedModels(
|
|
300
|
+
client: GenericClient,
|
|
301
|
+
knownProvider = ""
|
|
302
|
+
): Promise<Record<string, string[]>> {
|
|
303
|
+
const models = await client.getModels();
|
|
304
|
+
const providerModels = models
|
|
305
|
+
.map((m) => {
|
|
306
|
+
if (knownProvider) {
|
|
307
|
+
return {
|
|
308
|
+
provider: knownProvider,
|
|
309
|
+
model: m.id,
|
|
310
|
+
};
|
|
311
|
+
}
|
|
312
|
+
|
|
313
|
+
const splitModel = m.id.split("/");
|
|
314
|
+
|
|
315
|
+
if (splitModel.length < 2) {
|
|
316
|
+
console.error(`Cannot parse model format: ${m.id}`);
|
|
317
|
+
}
|
|
318
|
+
|
|
319
|
+
const provider = splitModel.length > 1 ? splitModel[0] : "";
|
|
320
|
+
const modelName = splitModel.slice(1).join("/");
|
|
321
|
+
return {
|
|
322
|
+
provider,
|
|
323
|
+
model: modelName,
|
|
324
|
+
};
|
|
325
|
+
})
|
|
326
|
+
.reduce((acc, { provider, model }) => {
|
|
327
|
+
acc[provider] = acc[provider] || [];
|
|
328
|
+
acc[provider].push(model);
|
|
329
|
+
return acc;
|
|
330
|
+
}, {});
|
|
331
|
+
|
|
332
|
+
for (const provider in providerModels) {
|
|
333
|
+
if (!providerModels[provider].length) {
|
|
334
|
+
delete providerModels[provider];
|
|
335
|
+
}
|
|
336
|
+
}
|
|
337
|
+
return providerModels;
|
|
338
|
+
}
|
|
339
|
+
|
|
228
340
|
listAllEmbeddingModels() {
|
|
229
341
|
return this.embeddingModels;
|
|
230
342
|
}
|
|
@@ -248,3 +360,4 @@ export * from "./anthropic";
|
|
|
248
360
|
export * from "./knowhow";
|
|
249
361
|
export * from "./gemini";
|
|
250
362
|
export * from "./xai";
|
|
363
|
+
export * from "./knowhowMcp";
|
package/src/clients/knowhow.ts
CHANGED
|
@@ -7,11 +7,16 @@ import {
|
|
|
7
7
|
} from "./types";
|
|
8
8
|
import { KnowhowSimpleClient } from "../services/KnowhowClient";
|
|
9
9
|
|
|
10
|
+
const envUrl = process.env.KNOWHOW_API_URL;
|
|
10
11
|
export class KnowhowGenericClient implements GenericClient {
|
|
11
12
|
private client: KnowhowSimpleClient;
|
|
12
13
|
|
|
13
|
-
constructor(baseUrl
|
|
14
|
-
this.
|
|
14
|
+
constructor(private baseUrl = envUrl, jwt?: string) {
|
|
15
|
+
this.setKey(jwt);
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
setKey(jwt: string): void {
|
|
19
|
+
this.client = new KnowhowSimpleClient(this.baseUrl, jwt);
|
|
15
20
|
}
|
|
16
21
|
|
|
17
22
|
async createChatCompletion(
|