@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
|
@@ -0,0 +1,376 @@
|
|
|
1
|
+
export default `
|
|
2
|
+
|
|
3
|
+
Here is an overview of examples from various \`.knowhow/knowhow.json\` configuration files found, illustrating the configuration capabilities that Knowhow supports:
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## General Configuration Template
|
|
8
|
+
|
|
9
|
+
\`\`\`json
|
|
10
|
+
{
|
|
11
|
+
"promptsDir": ".knowhow/prompts",
|
|
12
|
+
"plugins": [
|
|
13
|
+
"embeddings",
|
|
14
|
+
"language",
|
|
15
|
+
"vim",
|
|
16
|
+
"github",
|
|
17
|
+
"asana",
|
|
18
|
+
"jira",
|
|
19
|
+
"linear",
|
|
20
|
+
"download",
|
|
21
|
+
"figma"
|
|
22
|
+
],
|
|
23
|
+
"sources": [
|
|
24
|
+
{
|
|
25
|
+
"input": "src/**/*.mdx",
|
|
26
|
+
"output": ".knowhow/docs/",
|
|
27
|
+
"prompt": "BasicCodeDocumenter"
|
|
28
|
+
}
|
|
29
|
+
],
|
|
30
|
+
|
|
31
|
+
// Generate embeddings from a series of files on your machine
|
|
32
|
+
// Remote knowhow with the kb id allows you to leverage knowhow upload
|
|
33
|
+
"embedSources": [
|
|
34
|
+
{
|
|
35
|
+
"input": ".knowhow/docs/**/*.mdx",
|
|
36
|
+
"output": ".knowhow/embeddings",
|
|
37
|
+
"chunkSize": 2000,
|
|
38
|
+
"remoteType": "knowhow",
|
|
39
|
+
"remoteId": "141d9c4d-1589-4ccc-bf39-031f4259b89f"
|
|
40
|
+
}
|
|
41
|
+
],
|
|
42
|
+
|
|
43
|
+
// Define aditional agents you can interact with via chat
|
|
44
|
+
"agents": [
|
|
45
|
+
{
|
|
46
|
+
"name": "linter",
|
|
47
|
+
"description": "Clean up your code",
|
|
48
|
+
"instructions": "Read the files that are loaded via vim plugin and provide debugging and linter suggestions"
|
|
49
|
+
}
|
|
50
|
+
{
|
|
51
|
+
"name": "Codebase Helper",
|
|
52
|
+
"description": "Helps you code",
|
|
53
|
+
"instructions": "Codebase helper, use files and tools to help us code",
|
|
54
|
+
"model": "gpt-4-1106-preview",
|
|
55
|
+
"tools": [
|
|
56
|
+
{
|
|
57
|
+
"type": "code_interpreter"
|
|
58
|
+
}
|
|
59
|
+
],
|
|
60
|
+
"files": [
|
|
61
|
+
".knowhow/docs/**/*.mdx"
|
|
62
|
+
]
|
|
63
|
+
}
|
|
64
|
+
]
|
|
65
|
+
}
|
|
66
|
+
\`\`\`
|
|
67
|
+
|
|
68
|
+
## Video Download Support
|
|
69
|
+
\`\`\`json
|
|
70
|
+
"embedSources": [
|
|
71
|
+
{
|
|
72
|
+
"input": "https://www.youtube.com/shorts/BYuMBK5Ll-s",
|
|
73
|
+
"output": ".knowhow/embeddings/video.json",
|
|
74
|
+
"chunkSize": 2000,
|
|
75
|
+
"kind": "download"
|
|
76
|
+
}
|
|
77
|
+
],
|
|
78
|
+
\`\`\`
|
|
79
|
+
|
|
80
|
+
## MCP Setup
|
|
81
|
+
|
|
82
|
+
\`\`\`json
|
|
83
|
+
"mcps": [
|
|
84
|
+
{
|
|
85
|
+
"name": "browser",
|
|
86
|
+
"command": "npx",
|
|
87
|
+
"args": ["-y", "@modelcontextprotocol/server-puppeteer"]
|
|
88
|
+
}
|
|
89
|
+
],
|
|
90
|
+
\`\`\`
|
|
91
|
+
|
|
92
|
+
## Expose Tools to Knowhow Site via workers
|
|
93
|
+
After you've connected via \`knowhow login\` you can connect tools from your local machine
|
|
94
|
+
Run \`knowhow worker\` to generate a block like below. Edit it to include the tools you want to expose.
|
|
95
|
+
Then run \`knowhow worker\` again to connect
|
|
96
|
+
\`\`\`json
|
|
97
|
+
"worker": {
|
|
98
|
+
"allowedTools": [
|
|
99
|
+
"embeddingSearch",
|
|
100
|
+
"finalAnswer",
|
|
101
|
+
"callPlugin",
|
|
102
|
+
"readFile",
|
|
103
|
+
"readBlocks",
|
|
104
|
+
"patchFile",
|
|
105
|
+
"lintFile",
|
|
106
|
+
"textSearch",
|
|
107
|
+
"fileSearch",
|
|
108
|
+
"writeFileChunk",
|
|
109
|
+
"createAiCompletion",
|
|
110
|
+
"listAllModels",
|
|
111
|
+
"listAllProviders",
|
|
112
|
+
"getPullRequest",
|
|
113
|
+
"getPullRequestBuildStatuses",
|
|
114
|
+
"getRunLogs",
|
|
115
|
+
"getPullRequestBuildFailureLogs",
|
|
116
|
+
"addLanguageTerm",
|
|
117
|
+
"getAllLanguageTerms",
|
|
118
|
+
"lookupLanguageTerm",
|
|
119
|
+
"mcp_0_puppeteer_navigate",
|
|
120
|
+
"mcp_0_puppeteer_screenshot",
|
|
121
|
+
"mcp_0_puppeteer_click",
|
|
122
|
+
"mcp_0_puppeteer_fill",
|
|
123
|
+
"mcp_0_puppeteer_select",
|
|
124
|
+
"mcp_0_puppeteer_hover",
|
|
125
|
+
"mcp_0_puppeteer_evaluate"
|
|
126
|
+
]
|
|
127
|
+
},
|
|
128
|
+
\`\`\`
|
|
129
|
+
|
|
130
|
+
## Custom Models Via LMS Studio
|
|
131
|
+
\`\`\`json
|
|
132
|
+
"modelProviders": [
|
|
133
|
+
{
|
|
134
|
+
"url": "http://localhost:1234",
|
|
135
|
+
"provider": "lms"
|
|
136
|
+
}
|
|
137
|
+
],
|
|
138
|
+
\`\`\`
|
|
139
|
+
|
|
140
|
+
## Agent Tasks: rename all video files in a folder
|
|
141
|
+
\`\`\`
|
|
142
|
+
"sources": [
|
|
143
|
+
{
|
|
144
|
+
"input": ".knowhow/downloads/**/*.webm",
|
|
145
|
+
"output": ".knowhow/organized/",
|
|
146
|
+
"prompt": "FSOrganizer",
|
|
147
|
+
"agent": "Developer"
|
|
148
|
+
}
|
|
149
|
+
],
|
|
150
|
+
\`\`\`
|
|
151
|
+
|
|
152
|
+
Prompt Example:
|
|
153
|
+
|
|
154
|
+
\`\`\`
|
|
155
|
+
We have this file, we want to generate a nice name for it, please copy the file to .knowhow/org/{better file name}
|
|
156
|
+
|
|
157
|
+
{text}
|
|
158
|
+
\`\`\`
|
|
159
|
+
|
|
160
|
+
## knowhow generate: meeting transcripts
|
|
161
|
+
\`\`\`json
|
|
162
|
+
"sources": [
|
|
163
|
+
{
|
|
164
|
+
"input": "./meetings/**/*.mov",
|
|
165
|
+
"output": "./meetings/ai-notes/",
|
|
166
|
+
"prompt": "MeetingNotes"
|
|
167
|
+
},
|
|
168
|
+
{
|
|
169
|
+
"input": "./meetings/TaskRelatedCall/transcript.txt",
|
|
170
|
+
"output": "./meetings/tasks/RewardsTasks.txt",
|
|
171
|
+
"prompt": "AsanaTasks"
|
|
172
|
+
},
|
|
173
|
+
{
|
|
174
|
+
"input": "./meetings/EngineeringCall/transcript.txt",
|
|
175
|
+
"output": "./meetings/tasks/SchemaChanges.txt",
|
|
176
|
+
"prompt": "Schema"
|
|
177
|
+
}
|
|
178
|
+
],
|
|
179
|
+
\`\`\`
|
|
180
|
+
|
|
181
|
+
|
|
182
|
+
Use the source block alongside \`knowhow generate\` to process a pipeline of files, applying prompts to generate documentation or other artifacts. This example demonstrates the configuration for processing meeting recordings, and then running prompts on the resulting transcripts.
|
|
183
|
+
|
|
184
|
+
I've been using \`CMD+SHIFT+5\` to record meetings and then using the \`sources\` block to process the recordings into notes and tasks.
|
|
185
|
+
|
|
186
|
+
When a .mov or audio file is an input, it will automatically create a transcript.txt in the same directory, so we can leverage that txt input in the next step. The pipeline is useful for apply one or more prompts to one or more input files.
|
|
187
|
+
|
|
188
|
+
## knowhow embed: documentation embeddings
|
|
189
|
+
\`\`\`json
|
|
190
|
+
"embedSources": [
|
|
191
|
+
{
|
|
192
|
+
"input": "./documentation/docusaurus/docs/dev-docs/**/*.md",
|
|
193
|
+
"output": ".knowhow/embeddings/strapi-docs.json",
|
|
194
|
+
"chunkSize": 2000
|
|
195
|
+
}
|
|
196
|
+
]
|
|
197
|
+
\`\`\`
|
|
198
|
+
|
|
199
|
+
## knowhow embed: codebase embeddings
|
|
200
|
+
\`\`\`json
|
|
201
|
+
|
|
202
|
+
"embedSources": [
|
|
203
|
+
{
|
|
204
|
+
"input": "./packages/p2p/src/**/*.ts",
|
|
205
|
+
"output": ".knowhow/embeddings/p2p.json",
|
|
206
|
+
"chunkSize": 2000
|
|
207
|
+
},
|
|
208
|
+
{
|
|
209
|
+
"input": "./packages/openai_proxy/src/**/*.ts",
|
|
210
|
+
"output": ".knowhow/embeddings/openai_proxy.json",
|
|
211
|
+
"chunkSize": 2000
|
|
212
|
+
},
|
|
213
|
+
{
|
|
214
|
+
"input": "./packages/contracts/src/**/*.sol",
|
|
215
|
+
"output": ".knowhow/embeddings/contracts.json",
|
|
216
|
+
"chunkSize": 2000
|
|
217
|
+
}
|
|
218
|
+
],
|
|
219
|
+
\`\`\`
|
|
220
|
+
You can use \`knowhow embed\` to generate json embeddings from a set of files. If you want to run a prompt on the input, before embedding, you set an optional \`prompt\` field to match the filename of the prompt stored in your \`.knowhow/prompts\` directory.
|
|
221
|
+
|
|
222
|
+
These embeddings are leveraged by the chat in \`knowhow chat\` or by the agents to accomplish their tasks
|
|
223
|
+
|
|
224
|
+
## knowhow embed: asana tasks
|
|
225
|
+
\`\`\`
|
|
226
|
+
"embedSources": [
|
|
227
|
+
{
|
|
228
|
+
"input": "https://app.asana.com/0/111111111111111/list",
|
|
229
|
+
"output": ".knowhow/embeddings/asana.json",
|
|
230
|
+
"remote": "mybucket",
|
|
231
|
+
"remoteType": "s3",
|
|
232
|
+
"kind": "asana",
|
|
233
|
+
"chunkSize": 2000
|
|
234
|
+
}
|
|
235
|
+
],
|
|
236
|
+
\`\`\`
|
|
237
|
+
|
|
238
|
+
|
|
239
|
+
Any plugin that implements the embedding function, can generate embeddings if you set the \`kind\` field to the plugin name. The \`remote\` field is optional, and if set, the embeddings will be uploaded to the specified S3 bucket via \`knowhow upload\`.
|
|
240
|
+
|
|
241
|
+
You can download remote embeddings via \`knowhow download\` and use them in your local environment.
|
|
242
|
+
|
|
243
|
+
For downloads we support the following remote options:
|
|
244
|
+
- s3
|
|
245
|
+
- github* - downloads files
|
|
246
|
+
|
|
247
|
+
For uploads we support the following remote options:
|
|
248
|
+
- s3
|
|
249
|
+
- github* - use git lfs to commit the embeddings to your repository
|
|
250
|
+
|
|
251
|
+
|
|
252
|
+
## knowhow embed: github embeddings
|
|
253
|
+
\`\`\`
|
|
254
|
+
"embedSources": [
|
|
255
|
+
{
|
|
256
|
+
"input": "./src/**/*.ts",
|
|
257
|
+
"output": ".knowhow/embeddings/knowhow.json",
|
|
258
|
+
"chunkSize": 2000,
|
|
259
|
+
"remote": "micahriggan/knowhow",
|
|
260
|
+
"remoteType": "github"
|
|
261
|
+
}
|
|
262
|
+
],
|
|
263
|
+
\`\`\`
|
|
264
|
+
Here's an example where you could download embeddings from github. As the code updates occasionally I'll run \`knowhow embed\` and commit the updated embeddings.
|
|
265
|
+
|
|
266
|
+
## Plugins
|
|
267
|
+
\`\`\`json
|
|
268
|
+
{
|
|
269
|
+
"plugins": [
|
|
270
|
+
"embeddings",
|
|
271
|
+
"language",
|
|
272
|
+
"vim",
|
|
273
|
+
"github",
|
|
274
|
+
"asana",
|
|
275
|
+
"jira",
|
|
276
|
+
"linear",
|
|
277
|
+
"download",
|
|
278
|
+
"figma",
|
|
279
|
+
"notion"
|
|
280
|
+
],
|
|
281
|
+
}
|
|
282
|
+
\`\`\`
|
|
283
|
+
Plugins are used to resolve urls or other references to data that the AI can use. For example, the \`asana\` plugin can be used to resolve tasks and projects from Asana, and the \`figma\` plugin can be used to resolve design files from Figma.
|
|
284
|
+
|
|
285
|
+
The language plugin allows you to define hotkeys that resolve to larger blocks of texts or files, or urls. For example, you can define a language entry \`#asana\` that resolves to a link to your current asana task, so that you can easily load that without pasting the link each time.
|
|
286
|
+
|
|
287
|
+
|
|
288
|
+
## knowhow chat:
|
|
289
|
+
After generating embeddings, you can use \`knowhow chat\` to speak with a base agent, that does not have any tools, but does have plugins.
|
|
290
|
+
|
|
291
|
+
You can use \`agent\` once you're in a chat to start talking to a Developer agent, that has a prompt and tools designed to help develop software.
|
|
292
|
+
You can use \`agents\` to see a list of configured agents you can speak with.
|
|
293
|
+
If you need multi-line input you can use \`multi\` to open a multi-line editor.
|
|
294
|
+
|
|
295
|
+
There are many commands you can call from a chat session, try TAB to see a list of available options.
|
|
296
|
+
|
|
297
|
+
|
|
298
|
+
### knowhow chat: custom agents
|
|
299
|
+
\`\`\`json
|
|
300
|
+
"assistants": [
|
|
301
|
+
{
|
|
302
|
+
"name": "linter",
|
|
303
|
+
"description": "Clean up your code",
|
|
304
|
+
"instructions": "Read the files that are loaded via vim plugin and provide debugging and linter suggestions"
|
|
305
|
+
}
|
|
306
|
+
]
|
|
307
|
+
\`\`\`
|
|
308
|
+
You can configure new agents via the config above. This would create a new option when you use \`agents\` in a chat session.
|
|
309
|
+
|
|
310
|
+
## Lint Commands
|
|
311
|
+
|
|
312
|
+
\`\`\`json
|
|
313
|
+
{
|
|
314
|
+
"lintCommands": {
|
|
315
|
+
"js": "eslint",
|
|
316
|
+
"ts": "tslint $1 && tsc -p tsconfig.json"
|
|
317
|
+
}
|
|
318
|
+
}
|
|
319
|
+
\`\`\`
|
|
320
|
+
lintCommands are automatically run after an agent successfully patches a file, if the file extension matches. So you can configure the AI to receive feedback from tsc and the linter after modifying a TypeScript file. $1 will be replaced with the filepath that was patched.
|
|
321
|
+
|
|
322
|
+
|
|
323
|
+
|
|
324
|
+
## Language Plugin
|
|
325
|
+
|
|
326
|
+
Configured in \`.knowhow/language.json\`
|
|
327
|
+
|
|
328
|
+
Knowhow has a language file, which allows you to define additional context that is included when you use certain phrases in your messages. For instance, you could load a Pull Request when you say "My PR", or load a file from the codebase when you reference it. Languages have "terms" which then load various sources into context. Sources currently can be files, text, or github links.
|
|
329
|
+
|
|
330
|
+
I primarily use this to define terms like "frontend" or "backend" to load prompt files
|
|
331
|
+
|
|
332
|
+
## Example Language Definition
|
|
333
|
+
|
|
334
|
+
\`\`\`
|
|
335
|
+
{
|
|
336
|
+
"ui,frontend,component,page": {
|
|
337
|
+
"sources": [
|
|
338
|
+
{
|
|
339
|
+
"data": [
|
|
340
|
+
"./.knowhow/prompts/frontend.mdx"
|
|
341
|
+
],
|
|
342
|
+
"kind": "file"
|
|
343
|
+
}
|
|
344
|
+
]
|
|
345
|
+
}
|
|
346
|
+
}
|
|
347
|
+
\`\`\`
|
|
348
|
+
|
|
349
|
+
|
|
350
|
+
Here's and example of having a language term that triggers a plugin.
|
|
351
|
+
This example would load the diff of a PR every time we said "my pr"
|
|
352
|
+
\`\`\`
|
|
353
|
+
{
|
|
354
|
+
"knowhow config": {
|
|
355
|
+
"sources": [
|
|
356
|
+
{
|
|
357
|
+
"kind": "file",
|
|
358
|
+
"data": [
|
|
359
|
+
".knowhow/knowhow.json"
|
|
360
|
+
]
|
|
361
|
+
}
|
|
362
|
+
]
|
|
363
|
+
},
|
|
364
|
+
"My PR": {
|
|
365
|
+
"sources": [
|
|
366
|
+
{
|
|
367
|
+
"kind": "github",
|
|
368
|
+
"data": [
|
|
369
|
+
"https://github.com/tyvm-ai/knowhow/pulls/1"
|
|
370
|
+
]
|
|
371
|
+
}
|
|
372
|
+
]
|
|
373
|
+
}
|
|
374
|
+
}
|
|
375
|
+
\`\`\`
|
|
376
|
+
`
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import axios from "axios";
|
|
2
2
|
import fs from "fs";
|
|
3
|
+
import { Message } from "../clients/types";
|
|
3
4
|
import path from "path";
|
|
4
5
|
import {
|
|
5
6
|
CompletionOptions,
|
|
@@ -9,6 +10,29 @@ import {
|
|
|
9
10
|
} from "src/clients";
|
|
10
11
|
import { Config } from "../types";
|
|
11
12
|
|
|
13
|
+
// Chat Task interfaces
|
|
14
|
+
export interface CreateMessageTaskRequest {
|
|
15
|
+
messageId: string;
|
|
16
|
+
prompt: string;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
export interface CreateMessageTaskResponse {
|
|
20
|
+
id: string;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
export interface UpdateOrgTaskRequest {
|
|
24
|
+
threads: Message[][];
|
|
25
|
+
totalCostUsd: number;
|
|
26
|
+
inProgress: boolean;
|
|
27
|
+
result?: string;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
export interface UpdateOrgTaskResponse {
|
|
31
|
+
threadCount: Message[][];
|
|
32
|
+
totalCostUsd: number;
|
|
33
|
+
inProgress: boolean;
|
|
34
|
+
}
|
|
35
|
+
|
|
12
36
|
export function loadKnowhowJwt(): string {
|
|
13
37
|
const jwtFile = path.join(process.cwd(), ".knowhow", ".jwt");
|
|
14
38
|
if (!fs.existsSync(jwtFile)) {
|
|
@@ -17,6 +41,9 @@ export function loadKnowhowJwt(): string {
|
|
|
17
41
|
return fs.readFileSync(jwtFile, "utf-8").trim();
|
|
18
42
|
}
|
|
19
43
|
|
|
44
|
+
export const KNOWHOW_API_URL =
|
|
45
|
+
process.env.KNOWHOW_API_URL || "https://api.knowhow.tyvm.ai";
|
|
46
|
+
|
|
20
47
|
export class KnowhowSimpleClient {
|
|
21
48
|
headers = {};
|
|
22
49
|
|
|
@@ -72,8 +99,6 @@ export class KnowhowSimpleClient {
|
|
|
72
99
|
}
|
|
73
100
|
);
|
|
74
101
|
|
|
75
|
-
console.log(presignedUrlResp.data);
|
|
76
|
-
|
|
77
102
|
const presignedUrl = presignedUrlResp.data.downloadUrl;
|
|
78
103
|
return presignedUrl;
|
|
79
104
|
}
|
|
@@ -106,5 +131,26 @@ export class KnowhowSimpleClient {
|
|
|
106
131
|
headers: this.headers,
|
|
107
132
|
});
|
|
108
133
|
}
|
|
109
|
-
}
|
|
110
134
|
|
|
135
|
+
createChatTask(request: CreateMessageTaskRequest) {
|
|
136
|
+
this.checkJwt();
|
|
137
|
+
return axios.post<CreateMessageTaskResponse>(
|
|
138
|
+
`${this.baseUrl}/api/chat/tasks`,
|
|
139
|
+
request,
|
|
140
|
+
{
|
|
141
|
+
headers: this.headers,
|
|
142
|
+
}
|
|
143
|
+
);
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
updateChatTask(taskId: string, updates: UpdateOrgTaskRequest) {
|
|
147
|
+
this.checkJwt();
|
|
148
|
+
return axios.put<UpdateOrgTaskResponse>(
|
|
149
|
+
`${this.baseUrl}/api/chat/tasks/${taskId}`,
|
|
150
|
+
updates,
|
|
151
|
+
{
|
|
152
|
+
headers: this.headers,
|
|
153
|
+
}
|
|
154
|
+
);
|
|
155
|
+
}
|
|
156
|
+
}
|
package/src/services/Mcp.ts
CHANGED
|
@@ -32,6 +32,13 @@ export const knowhowConfig = {
|
|
|
32
32
|
export * from "./McpServer";
|
|
33
33
|
export * from "./McpWebsocketTransport";
|
|
34
34
|
|
|
35
|
+
/*
|
|
36
|
+
*
|
|
37
|
+
* McpService is a service that manages connections to multiple MCP servers.
|
|
38
|
+
* Allows us to connect the tools exposed by MCP servers to our internal ToolService, which agents can use.
|
|
39
|
+
* Each of the tools are namespaced with a prefix: mcp_index_servername_toolName
|
|
40
|
+
* This services handles calls made to the namespaced function name, and finds the proper client to call the tool on.
|
|
41
|
+
*/
|
|
35
42
|
export class McpService {
|
|
36
43
|
connected = [];
|
|
37
44
|
transports: Transport[] = [];
|
|
@@ -133,11 +140,11 @@ export class McpService {
|
|
|
133
140
|
await Promise.all(
|
|
134
141
|
this.transports.map(async (transport, index) => {
|
|
135
142
|
this.connected[index] = false;
|
|
136
|
-
return transport.close();
|
|
143
|
+
return transport && transport.close();
|
|
137
144
|
})
|
|
138
145
|
);
|
|
139
146
|
|
|
140
|
-
this.transports = [];
|
|
147
|
+
// this.transports = [];
|
|
141
148
|
this.connected = [];
|
|
142
149
|
}
|
|
143
150
|
|
|
@@ -207,7 +214,7 @@ export class McpService {
|
|
|
207
214
|
|
|
208
215
|
const realName = this.parseToolName(toolName);
|
|
209
216
|
return async (args: any) => {
|
|
210
|
-
console.log("Calling tool", realName, "with args", args);
|
|
217
|
+
console.log("Calling tool via mcp client", realName, "with args", args);
|
|
211
218
|
const tool = await client.callTool(
|
|
212
219
|
{
|
|
213
220
|
name: realName,
|
|
@@ -223,6 +230,38 @@ export class McpService {
|
|
|
223
230
|
};
|
|
224
231
|
}
|
|
225
232
|
|
|
233
|
+
/**
|
|
234
|
+
* Call a function and unwrap the MCP response content array with type casting
|
|
235
|
+
* @param toolName The name of the tool/function to call
|
|
236
|
+
* @param args The arguments to pass to the function
|
|
237
|
+
* @returns The parsed result with type T
|
|
238
|
+
*/
|
|
239
|
+
async callFunction<T = any>(toolName: string, args: any = {}): Promise<T> {
|
|
240
|
+
try {
|
|
241
|
+
const fn = this.getFunction(toolName);
|
|
242
|
+
const result = await fn(args);
|
|
243
|
+
|
|
244
|
+
// Parse the MCP result
|
|
245
|
+
if (result.content && Array.isArray(result.content)) {
|
|
246
|
+
const textContent = result.content.find((c: any) => c.type === "text");
|
|
247
|
+
if (textContent && textContent.text) {
|
|
248
|
+
const parsedResult = JSON.parse(textContent.text);
|
|
249
|
+
return parsedResult as T;
|
|
250
|
+
}
|
|
251
|
+
}
|
|
252
|
+
|
|
253
|
+
throw new Error(
|
|
254
|
+
`Invalid response format from MCP service for tool ${toolName}`
|
|
255
|
+
);
|
|
256
|
+
} catch (error) {
|
|
257
|
+
const errorMessage =
|
|
258
|
+
error instanceof Error ? error.message : String(error);
|
|
259
|
+
throw new Error(
|
|
260
|
+
`Failed to call MCP function ${toolName}: ${errorMessage}`
|
|
261
|
+
);
|
|
262
|
+
}
|
|
263
|
+
}
|
|
264
|
+
|
|
226
265
|
async getFunctions() {
|
|
227
266
|
const tools = await this.getTools();
|
|
228
267
|
return tools.map((tool) => {
|
|
@@ -25,7 +25,10 @@ export class McpServerService {
|
|
|
25
25
|
return this;
|
|
26
26
|
}
|
|
27
27
|
|
|
28
|
-
toZodSchema(
|
|
28
|
+
toZodSchema(
|
|
29
|
+
properties: { [key: string]: ToolProp },
|
|
30
|
+
required?: string[]
|
|
31
|
+
): z.ZodObject<any> {
|
|
29
32
|
const schema: Record<string, z.ZodTypeAny> = {};
|
|
30
33
|
for (const [key, value] of Object.entries(properties)) {
|
|
31
34
|
if (value.type === "string") {
|
|
@@ -35,19 +38,26 @@ export class McpServerService {
|
|
|
35
38
|
} else if (value.type === "boolean") {
|
|
36
39
|
schema[key] = z.boolean();
|
|
37
40
|
} else if (value.type === "array" && value?.items?.properties) {
|
|
38
|
-
schema[key] = z.array(this.toZodSchema(value.items.properties));
|
|
41
|
+
schema[key] = z.array(this.toZodSchema(value.items.properties, required));
|
|
39
42
|
} else if (value.type === "object" && value.properties) {
|
|
40
|
-
schema[key] = this.toZodSchema(value.properties);
|
|
43
|
+
schema[key] = this.toZodSchema(value.properties, required);
|
|
41
44
|
} else {
|
|
42
45
|
schema[key] = z.any();
|
|
43
46
|
}
|
|
47
|
+
|
|
48
|
+
// Make field optional if it's not in the required array
|
|
49
|
+
if (required && !required.includes(key)) {
|
|
50
|
+
schema[key] = schema[key].optional();
|
|
51
|
+
}
|
|
44
52
|
}
|
|
53
|
+
|
|
45
54
|
return z.object(schema);
|
|
46
55
|
}
|
|
47
56
|
|
|
48
57
|
withTools(tools: Tool[]) {
|
|
49
58
|
for (const tool of tools) {
|
|
50
59
|
const props = tool.function.parameters.properties;
|
|
60
|
+
const required = tool.function.parameters.required;
|
|
51
61
|
|
|
52
62
|
if (!props) {
|
|
53
63
|
console.warn(`Tool ${tool.function.name} has no properties`);
|
|
@@ -62,7 +72,7 @@ export class McpServerService {
|
|
|
62
72
|
console.log(`Registering tool ${tool.function.name}`);
|
|
63
73
|
this.registeredTools.add(tool.function.name);
|
|
64
74
|
|
|
65
|
-
const shape = this.toZodSchema(props).shape;
|
|
75
|
+
const shape = this.toZodSchema(props, required).shape;
|
|
66
76
|
|
|
67
77
|
this.server.tool(
|
|
68
78
|
tool.function.name,
|
|
@@ -48,13 +48,27 @@ export class MCPWebSocketTransport implements Transport {
|
|
|
48
48
|
return new Promise((resolve, reject) => {
|
|
49
49
|
const json = JSON.stringify(message);
|
|
50
50
|
console.log("MCPWs sending", json);
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
51
|
+
|
|
52
|
+
if (this._socket.readyState !== WebSocket.OPEN) {
|
|
53
|
+
return reject(
|
|
54
|
+
new Error(
|
|
55
|
+
`WebSocket is not open: readyState ${this._socket.readyState}`
|
|
56
|
+
)
|
|
57
|
+
);
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
try {
|
|
61
|
+
this._socket.send(json, (error?: Error) => {
|
|
62
|
+
if (error) {
|
|
63
|
+
this.onerror?.(error);
|
|
64
|
+
return reject(error);
|
|
65
|
+
}
|
|
66
|
+
resolve();
|
|
67
|
+
});
|
|
68
|
+
} catch (error) {
|
|
69
|
+
this.onerror?.(error as Error);
|
|
70
|
+
reject(error);
|
|
71
|
+
}
|
|
58
72
|
});
|
|
59
73
|
}
|
|
60
74
|
|
|
@@ -1,6 +1,11 @@
|
|
|
1
1
|
import { Message } from "../clients/types";
|
|
2
2
|
|
|
3
|
-
export type ProcessorLifecycle =
|
|
3
|
+
export type ProcessorLifecycle =
|
|
4
|
+
| "initial_call"
|
|
5
|
+
| "pre_call"
|
|
6
|
+
| "post_call"
|
|
7
|
+
| "pre_tools"
|
|
8
|
+
| "post_tools";
|
|
4
9
|
|
|
5
10
|
export type MessageProcessorFunction = (
|
|
6
11
|
originalMessages: Message[],
|
|
@@ -18,9 +23,7 @@ export class MessageProcessor {
|
|
|
18
23
|
|
|
19
24
|
constructor() {
|
|
20
25
|
// Initialize lifecycle maps
|
|
21
|
-
this.
|
|
22
|
-
this.processors.set("per_call", []);
|
|
23
|
-
this.processors.set("post_call", []);
|
|
26
|
+
this.clearProcessors();
|
|
24
27
|
}
|
|
25
28
|
|
|
26
29
|
setProcessors(
|
|
@@ -100,8 +103,10 @@ export class MessageProcessor {
|
|
|
100
103
|
} else {
|
|
101
104
|
this.processors.clear();
|
|
102
105
|
this.processors.set("initial_call", []);
|
|
103
|
-
this.processors.set("
|
|
106
|
+
this.processors.set("pre_call", []);
|
|
104
107
|
this.processors.set("post_call", []);
|
|
108
|
+
this.processors.set("pre_tools", []);
|
|
109
|
+
this.processors.set("post_tools", []);
|
|
105
110
|
}
|
|
106
111
|
}
|
|
107
112
|
}
|
package/src/services/index.ts
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import { openai } from "../ai";
|
|
2
|
+
import { DownloaderService } from "../plugins/downloader/downloader";
|
|
1
3
|
import { Clients } from "../clients";
|
|
2
4
|
import { Plugins } from "../plugins/plugins";
|
|
3
5
|
import { AgentService } from "./AgentService";
|
|
@@ -31,6 +33,7 @@ let Singletons = {} as {
|
|
|
31
33
|
knowhowApiClient: KnowhowSimpleClient;
|
|
32
34
|
Plugins: typeof Plugins;
|
|
33
35
|
Clients: typeof Clients;
|
|
36
|
+
Downloader: DownloaderService;
|
|
34
37
|
};
|
|
35
38
|
|
|
36
39
|
export const services = (): typeof Singletons => {
|
|
@@ -38,10 +41,12 @@ export const services = (): typeof Singletons => {
|
|
|
38
41
|
const Tools = new ToolsService();
|
|
39
42
|
const Events = new EventService();
|
|
40
43
|
const Agents = new AgentService(Tools, Events);
|
|
44
|
+
const Downloader = new DownloaderService(openai, Clients);
|
|
41
45
|
Singletons = {
|
|
42
46
|
Tools,
|
|
43
47
|
Events,
|
|
44
48
|
Agents,
|
|
49
|
+
Downloader,
|
|
45
50
|
|
|
46
51
|
Flags: new FlagsService(),
|
|
47
52
|
GitHub: new GitHubService(),
|