@caoxupei/ai-agent-cli 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +350 -0
- package/bin/ai-agent-cli.js +14 -0
- package/dist/adapters/anthropic.d.ts +15 -0
- package/dist/adapters/anthropic.d.ts.map +1 -0
- package/dist/adapters/anthropic.js +83 -0
- package/dist/adapters/anthropic.js.map +1 -0
- package/dist/adapters/base.d.ts +45 -0
- package/dist/adapters/base.d.ts.map +1 -0
- package/dist/adapters/base.js +27 -0
- package/dist/adapters/base.js.map +1 -0
- package/dist/adapters/factory.d.ts +17 -0
- package/dist/adapters/factory.d.ts.map +1 -0
- package/dist/adapters/factory.js +34 -0
- package/dist/adapters/factory.js.map +1 -0
- package/dist/adapters/gemini.d.ts +16 -0
- package/dist/adapters/gemini.d.ts.map +1 -0
- package/dist/adapters/gemini.js +164 -0
- package/dist/adapters/gemini.js.map +1 -0
- package/dist/adapters/openai.d.ts +15 -0
- package/dist/adapters/openai.d.ts.map +1 -0
- package/dist/adapters/openai.js +175 -0
- package/dist/adapters/openai.js.map +1 -0
- package/dist/commands/skillCommands.d.ts +21 -0
- package/dist/commands/skillCommands.d.ts.map +1 -0
- package/dist/commands/skillCommands.js +320 -0
- package/dist/commands/skillCommands.js.map +1 -0
- package/dist/config/Config.d.ts +35 -0
- package/dist/config/Config.d.ts.map +1 -0
- package/dist/config/Config.js +108 -0
- package/dist/config/Config.js.map +1 -0
- package/dist/config/types.d.ts +48 -0
- package/dist/config/types.d.ts.map +1 -0
- package/dist/config/types.js +32 -0
- package/dist/config/types.js.map +1 -0
- package/dist/core/agents.d.ts +32 -0
- package/dist/core/agents.d.ts.map +1 -0
- package/dist/core/agents.js +93 -0
- package/dist/core/agents.js.map +1 -0
- package/dist/core/constants.d.ts +97 -0
- package/dist/core/constants.d.ts.map +1 -0
- package/dist/core/constants.js +119 -0
- package/dist/core/constants.js.map +1 -0
- package/dist/core/loop.d.ts +33 -0
- package/dist/core/loop.d.ts.map +1 -0
- package/dist/core/loop.js +134 -0
- package/dist/core/loop.js.map +1 -0
- package/dist/core/outputStyles.d.ts +50 -0
- package/dist/core/outputStyles.d.ts.map +1 -0
- package/dist/core/outputStyles.js +165 -0
- package/dist/core/outputStyles.js.map +1 -0
- package/dist/core/planMode.d.ts +40 -0
- package/dist/core/planMode.d.ts.map +1 -0
- package/dist/core/planMode.js +143 -0
- package/dist/core/planMode.js.map +1 -0
- package/dist/core/projectContext.d.ts +68 -0
- package/dist/core/projectContext.d.ts.map +1 -0
- package/dist/core/projectContext.js +183 -0
- package/dist/core/projectContext.js.map +1 -0
- package/dist/core/prompts.d.ts +26 -0
- package/dist/core/prompts.d.ts.map +1 -0
- package/dist/core/prompts.js +267 -0
- package/dist/core/prompts.js.map +1 -0
- package/dist/core/reminder.d.ts +72 -0
- package/dist/core/reminder.d.ts.map +1 -0
- package/dist/core/reminder.js +152 -0
- package/dist/core/reminder.js.map +1 -0
- package/dist/core/theme.d.ts +35 -0
- package/dist/core/theme.d.ts.map +1 -0
- package/dist/core/theme.js +56 -0
- package/dist/core/theme.js.map +1 -0
- package/dist/core/types.d.ts +55 -0
- package/dist/core/types.d.ts.map +1 -0
- package/dist/core/types.js +5 -0
- package/dist/core/types.js.map +1 -0
- package/dist/core/ui/Banner.d.ts +47 -0
- package/dist/core/ui/Banner.d.ts.map +1 -0
- package/dist/core/ui/Banner.js +122 -0
- package/dist/core/ui/Banner.js.map +1 -0
- package/dist/core/ui/Input.d.ts +51 -0
- package/dist/core/ui/Input.d.ts.map +1 -0
- package/dist/core/ui/Input.js +322 -0
- package/dist/core/ui/Input.js.map +1 -0
- package/dist/core/ui/Logo.d.ts +21 -0
- package/dist/core/ui/Logo.d.ts.map +1 -0
- package/dist/core/ui/Logo.js +31 -0
- package/dist/core/ui/Logo.js.map +1 -0
- package/dist/core/ui/Messages.d.ts +45 -0
- package/dist/core/ui/Messages.d.ts.map +1 -0
- package/dist/core/ui/Messages.js +76 -0
- package/dist/core/ui/Messages.js.map +1 -0
- package/dist/core/ui/Spinner.d.ts +29 -0
- package/dist/core/ui/Spinner.d.ts.map +1 -0
- package/dist/core/ui/Spinner.js +64 -0
- package/dist/core/ui/Spinner.js.map +1 -0
- package/dist/core/ui/ToolDisplay.d.ts +49 -0
- package/dist/core/ui/ToolDisplay.d.ts.map +1 -0
- package/dist/core/ui/ToolDisplay.js +99 -0
- package/dist/core/ui/ToolDisplay.js.map +1 -0
- package/dist/core/ui/index.d.ts +16 -0
- package/dist/core/ui/index.d.ts.map +1 -0
- package/dist/core/ui/index.js +17 -0
- package/dist/core/ui/index.js.map +1 -0
- package/dist/core/ui/utils.d.ts +28 -0
- package/dist/core/ui/utils.d.ts.map +1 -0
- package/dist/core/ui/utils.js +76 -0
- package/dist/core/ui/utils.js.map +1 -0
- package/dist/entrypoints/cli.d.ts +5 -0
- package/dist/entrypoints/cli.d.ts.map +1 -0
- package/dist/entrypoints/cli.js +199 -0
- package/dist/entrypoints/cli.js.map +1 -0
- package/dist/entrypoints/index.d.ts +18 -0
- package/dist/entrypoints/index.d.ts.map +1 -0
- package/dist/entrypoints/index.js +21 -0
- package/dist/entrypoints/index.js.map +1 -0
- package/dist/index.d.ts +9 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +14 -0
- package/dist/index.js.map +1 -0
- package/dist/services/ai/adapters/anthropic.d.ts +15 -0
- package/dist/services/ai/adapters/anthropic.d.ts.map +1 -0
- package/dist/services/ai/adapters/anthropic.js +83 -0
- package/dist/services/ai/adapters/anthropic.js.map +1 -0
- package/dist/services/ai/adapters/base.d.ts +47 -0
- package/dist/services/ai/adapters/base.d.ts.map +1 -0
- package/dist/services/ai/adapters/base.js +24 -0
- package/dist/services/ai/adapters/base.js.map +1 -0
- package/dist/services/ai/adapters/factory.d.ts +17 -0
- package/dist/services/ai/adapters/factory.d.ts.map +1 -0
- package/dist/services/ai/adapters/factory.js +34 -0
- package/dist/services/ai/adapters/factory.js.map +1 -0
- package/dist/services/ai/adapters/gemini.d.ts +16 -0
- package/dist/services/ai/adapters/gemini.d.ts.map +1 -0
- package/dist/services/ai/adapters/gemini.js +164 -0
- package/dist/services/ai/adapters/gemini.js.map +1 -0
- package/dist/services/ai/adapters/openai.d.ts +15 -0
- package/dist/services/ai/adapters/openai.d.ts.map +1 -0
- package/dist/services/ai/adapters/openai.js +175 -0
- package/dist/services/ai/adapters/openai.js.map +1 -0
- package/dist/services/ai/index.d.ts +10 -0
- package/dist/services/ai/index.d.ts.map +1 -0
- package/dist/services/ai/index.js +11 -0
- package/dist/services/ai/index.js.map +1 -0
- package/dist/services/config/Config.d.ts +41 -0
- package/dist/services/config/Config.d.ts.map +1 -0
- package/dist/services/config/Config.js +131 -0
- package/dist/services/config/Config.js.map +1 -0
- package/dist/services/config/configStore.d.ts +42 -0
- package/dist/services/config/configStore.d.ts.map +1 -0
- package/dist/services/config/configStore.js +77 -0
- package/dist/services/config/configStore.js.map +1 -0
- package/dist/services/config/index.d.ts +7 -0
- package/dist/services/config/index.d.ts.map +1 -0
- package/dist/services/config/index.js +6 -0
- package/dist/services/config/index.js.map +1 -0
- package/dist/services/config/setup.d.ts +13 -0
- package/dist/services/config/setup.d.ts.map +1 -0
- package/dist/services/config/setup.js +157 -0
- package/dist/services/config/setup.js.map +1 -0
- package/dist/services/config/types.d.ts +56 -0
- package/dist/services/config/types.d.ts.map +1 -0
- package/dist/services/config/types.js +32 -0
- package/dist/services/config/types.js.map +1 -0
- package/dist/services/customCommands.d.ts +37 -0
- package/dist/services/customCommands.d.ts.map +1 -0
- package/dist/services/customCommands.js +453 -0
- package/dist/services/customCommands.js.map +1 -0
- package/dist/services/index.d.ts +7 -0
- package/dist/services/index.d.ts.map +1 -0
- package/dist/services/index.js +10 -0
- package/dist/services/index.js.map +1 -0
- package/dist/services/skillMarketplace.d.ts +74 -0
- package/dist/services/skillMarketplace.d.ts.map +1 -0
- package/dist/services/skillMarketplace.js +486 -0
- package/dist/services/skillMarketplace.js.map +1 -0
- package/dist/services/system/index.d.ts +6 -0
- package/dist/services/system/index.d.ts.map +1 -0
- package/dist/services/system/index.js +6 -0
- package/dist/services/system/index.js.map +1 -0
- package/dist/services/system/security.d.ts +30 -0
- package/dist/services/system/security.d.ts.map +1 -0
- package/dist/services/system/security.js +124 -0
- package/dist/services/system/security.js.map +1 -0
- package/dist/tools/agent/index.d.ts +6 -0
- package/dist/tools/agent/index.d.ts.map +1 -0
- package/dist/tools/agent/index.js +6 -0
- package/dist/tools/agent/index.js.map +1 -0
- package/dist/tools/agent/planMode.d.ts +12 -0
- package/dist/tools/agent/planMode.d.ts.map +1 -0
- package/dist/tools/agent/planMode.js +23 -0
- package/dist/tools/agent/planMode.js.map +1 -0
- package/dist/tools/agent/task.d.ts +10 -0
- package/dist/tools/agent/task.d.ts.map +1 -0
- package/dist/tools/agent/task.js +127 -0
- package/dist/tools/agent/task.js.map +1 -0
- package/dist/tools/ai/index.d.ts +5 -0
- package/dist/tools/ai/index.d.ts.map +1 -0
- package/dist/tools/ai/index.js +5 -0
- package/dist/tools/ai/index.js.map +1 -0
- package/dist/tools/ai/skill.d.ts +78 -0
- package/dist/tools/ai/skill.d.ts.map +1 -0
- package/dist/tools/ai/skill.js +315 -0
- package/dist/tools/ai/skill.js.map +1 -0
- package/dist/tools/askQuestion.d.ts +25 -0
- package/dist/tools/askQuestion.d.ts.map +1 -0
- package/dist/tools/askQuestion.js +99 -0
- package/dist/tools/askQuestion.js.map +1 -0
- package/dist/tools/bash.d.ts +11 -0
- package/dist/tools/bash.d.ts.map +1 -0
- package/dist/tools/bash.js +58 -0
- package/dist/tools/bash.js.map +1 -0
- package/dist/tools/definitions.d.ts +26 -0
- package/dist/tools/definitions.d.ts.map +1 -0
- package/dist/tools/definitions.js +599 -0
- package/dist/tools/definitions.js.map +1 -0
- package/dist/tools/dispatcher.d.ts +38 -0
- package/dist/tools/dispatcher.d.ts.map +1 -0
- package/dist/tools/dispatcher.js +75 -0
- package/dist/tools/dispatcher.js.map +1 -0
- package/dist/tools/fileOps.d.ts +16 -0
- package/dist/tools/fileOps.d.ts.map +1 -0
- package/dist/tools/fileOps.js +115 -0
- package/dist/tools/fileOps.js.map +1 -0
- package/dist/tools/filesystem/bash.d.ts +11 -0
- package/dist/tools/filesystem/bash.d.ts.map +1 -0
- package/dist/tools/filesystem/bash.js +58 -0
- package/dist/tools/filesystem/bash.js.map +1 -0
- package/dist/tools/filesystem/fileOps.d.ts +16 -0
- package/dist/tools/filesystem/fileOps.d.ts.map +1 -0
- package/dist/tools/filesystem/fileOps.js +115 -0
- package/dist/tools/filesystem/fileOps.js.map +1 -0
- package/dist/tools/filesystem/index.d.ts +1 -0
- package/dist/tools/filesystem/index.d.ts.map +1 -0
- package/dist/tools/filesystem/index.js +2 -0
- package/dist/tools/filesystem/index.js.map +1 -0
- package/dist/tools/glob.d.ts +18 -0
- package/dist/tools/glob.d.ts.map +1 -0
- package/dist/tools/glob.js +63 -0
- package/dist/tools/glob.js.map +1 -0
- package/dist/tools/grep.d.ts +26 -0
- package/dist/tools/grep.d.ts.map +1 -0
- package/dist/tools/grep.js +137 -0
- package/dist/tools/grep.js.map +1 -0
- package/dist/tools/index.d.ts +13 -0
- package/dist/tools/index.d.ts.map +1 -0
- package/dist/tools/index.js +14 -0
- package/dist/tools/index.js.map +1 -0
- package/dist/tools/interaction/askQuestion.d.ts +25 -0
- package/dist/tools/interaction/askQuestion.d.ts.map +1 -0
- package/dist/tools/interaction/askQuestion.js +99 -0
- package/dist/tools/interaction/askQuestion.js.map +1 -0
- package/dist/tools/interaction/index.d.ts +6 -0
- package/dist/tools/interaction/index.d.ts.map +1 -0
- package/dist/tools/interaction/index.js +6 -0
- package/dist/tools/interaction/index.js.map +1 -0
- package/dist/tools/interaction/todo.d.ts +36 -0
- package/dist/tools/interaction/todo.d.ts.map +1 -0
- package/dist/tools/interaction/todo.js +137 -0
- package/dist/tools/interaction/todo.js.map +1 -0
- package/dist/tools/network/index.d.ts +6 -0
- package/dist/tools/network/index.d.ts.map +1 -0
- package/dist/tools/network/index.js +6 -0
- package/dist/tools/network/index.js.map +1 -0
- package/dist/tools/network/webFetch.d.ts +8 -0
- package/dist/tools/network/webFetch.d.ts.map +1 -0
- package/dist/tools/network/webFetch.js +87 -0
- package/dist/tools/network/webFetch.js.map +1 -0
- package/dist/tools/network/webSearch.d.ts +8 -0
- package/dist/tools/network/webSearch.d.ts.map +1 -0
- package/dist/tools/network/webSearch.js +84 -0
- package/dist/tools/network/webSearch.js.map +1 -0
- package/dist/tools/planMode.d.ts +12 -0
- package/dist/tools/planMode.d.ts.map +1 -0
- package/dist/tools/planMode.js +23 -0
- package/dist/tools/planMode.js.map +1 -0
- package/dist/tools/search/glob.d.ts +18 -0
- package/dist/tools/search/glob.d.ts.map +1 -0
- package/dist/tools/search/glob.js +63 -0
- package/dist/tools/search/glob.js.map +1 -0
- package/dist/tools/search/grep.d.ts +26 -0
- package/dist/tools/search/grep.d.ts.map +1 -0
- package/dist/tools/search/grep.js +137 -0
- package/dist/tools/search/grep.js.map +1 -0
- package/dist/tools/search/index.d.ts +6 -0
- package/dist/tools/search/index.d.ts.map +1 -0
- package/dist/tools/search/index.js +6 -0
- package/dist/tools/search/index.js.map +1 -0
- package/dist/tools/skill.d.ts +41 -0
- package/dist/tools/skill.d.ts.map +1 -0
- package/dist/tools/skill.js +149 -0
- package/dist/tools/skill.js.map +1 -0
- package/dist/tools/system/index.d.ts +6 -0
- package/dist/tools/system/index.d.ts.map +1 -0
- package/dist/tools/system/index.js +6 -0
- package/dist/tools/system/index.js.map +1 -0
- package/dist/tools/task.d.ts +10 -0
- package/dist/tools/task.d.ts.map +1 -0
- package/dist/tools/task.js +127 -0
- package/dist/tools/task.js.map +1 -0
- package/dist/tools/todo.d.ts +36 -0
- package/dist/tools/todo.d.ts.map +1 -0
- package/dist/tools/todo.js +137 -0
- package/dist/tools/todo.js.map +1 -0
- package/dist/tools/types.d.ts +139 -0
- package/dist/tools/types.d.ts.map +1 -0
- package/dist/tools/types.js +5 -0
- package/dist/tools/types.js.map +1 -0
- package/dist/tools/webFetch.d.ts +8 -0
- package/dist/tools/webFetch.d.ts.map +1 -0
- package/dist/tools/webFetch.js +87 -0
- package/dist/tools/webFetch.js.map +1 -0
- package/dist/tools/webSearch.d.ts +8 -0
- package/dist/tools/webSearch.d.ts.map +1 -0
- package/dist/tools/webSearch.js +84 -0
- package/dist/tools/webSearch.js.map +1 -0
- package/dist/ui/Banner.d.ts +47 -0
- package/dist/ui/Banner.d.ts.map +1 -0
- package/dist/ui/Banner.js +122 -0
- package/dist/ui/Banner.js.map +1 -0
- package/dist/ui/Input.d.ts +42 -0
- package/dist/ui/Input.d.ts.map +1 -0
- package/dist/ui/Input.js +270 -0
- package/dist/ui/Input.js.map +1 -0
- package/dist/ui/Logo.d.ts +21 -0
- package/dist/ui/Logo.d.ts.map +1 -0
- package/dist/ui/Logo.js +31 -0
- package/dist/ui/Logo.js.map +1 -0
- package/dist/ui/Messages.d.ts +45 -0
- package/dist/ui/Messages.d.ts.map +1 -0
- package/dist/ui/Messages.js +76 -0
- package/dist/ui/Messages.js.map +1 -0
- package/dist/ui/Spinner.d.ts +29 -0
- package/dist/ui/Spinner.d.ts.map +1 -0
- package/dist/ui/Spinner.js +64 -0
- package/dist/ui/Spinner.js.map +1 -0
- package/dist/ui/ToolDisplay.d.ts +49 -0
- package/dist/ui/ToolDisplay.d.ts.map +1 -0
- package/dist/ui/ToolDisplay.js +99 -0
- package/dist/ui/ToolDisplay.js.map +1 -0
- package/dist/ui/components/Banner.d.ts +46 -0
- package/dist/ui/components/Banner.d.ts.map +1 -0
- package/dist/ui/components/Banner.js +121 -0
- package/dist/ui/components/Banner.js.map +1 -0
- package/dist/ui/components/Input.d.ts +51 -0
- package/dist/ui/components/Input.d.ts.map +1 -0
- package/dist/ui/components/Input.js +322 -0
- package/dist/ui/components/Input.js.map +1 -0
- package/dist/ui/components/Logo.d.ts +21 -0
- package/dist/ui/components/Logo.d.ts.map +1 -0
- package/dist/ui/components/Logo.js +31 -0
- package/dist/ui/components/Logo.js.map +1 -0
- package/dist/ui/components/Messages.d.ts +45 -0
- package/dist/ui/components/Messages.d.ts.map +1 -0
- package/dist/ui/components/Messages.js +76 -0
- package/dist/ui/components/Messages.js.map +1 -0
- package/dist/ui/components/Spinner.d.ts +29 -0
- package/dist/ui/components/Spinner.d.ts.map +1 -0
- package/dist/ui/components/Spinner.js +64 -0
- package/dist/ui/components/Spinner.js.map +1 -0
- package/dist/ui/components/ToolDisplay.d.ts +49 -0
- package/dist/ui/components/ToolDisplay.d.ts.map +1 -0
- package/dist/ui/components/ToolDisplay.js +99 -0
- package/dist/ui/components/ToolDisplay.js.map +1 -0
- package/dist/ui/index.d.ts +16 -0
- package/dist/ui/index.d.ts.map +1 -0
- package/dist/ui/index.js +17 -0
- package/dist/ui/index.js.map +1 -0
- package/dist/ui/theme.d.ts +34 -0
- package/dist/ui/theme.d.ts.map +1 -0
- package/dist/ui/theme.js +55 -0
- package/dist/ui/theme.js.map +1 -0
- package/dist/ui/utils.d.ts +28 -0
- package/dist/ui/utils.d.ts.map +1 -0
- package/dist/ui/utils.js +76 -0
- package/dist/ui/utils.js.map +1 -0
- package/dist/utils/fs/index.d.ts +24 -0
- package/dist/utils/fs/index.d.ts.map +1 -0
- package/dist/utils/fs/index.js +50 -0
- package/dist/utils/fs/index.js.map +1 -0
- package/dist/utils/index.d.ts +7 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +10 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/security.d.ts +26 -0
- package/dist/utils/security.d.ts.map +1 -0
- package/dist/utils/security.js +123 -0
- package/dist/utils/security.js.map +1 -0
- package/dist/utils/text/index.d.ts +28 -0
- package/dist/utils/text/index.d.ts.map +1 -0
- package/dist/utils/text/index.js +51 -0
- package/dist/utils/text/index.js.map +1 -0
- package/package.json +84 -0
- package/skills/web-dev/SKILL.md +91 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 AI Agent CLI Contributors
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,350 @@
|
|
|
1
|
+
# AI Agent CLI
|
|
2
|
+
|
|
3
|
+
一个功能完整的 AI 编程助手命令行工具,支持多个 LLM 提供商(Anthropic Claude、OpenAI、Google Gemini)。
|
|
4
|
+
|
|
5
|
+
## ✨ 核心特性
|
|
6
|
+
|
|
7
|
+
### 🤖 多提供商支持
|
|
8
|
+
- **Anthropic Claude**: Claude 3.5 Sonnet, Claude 3 Opus
|
|
9
|
+
- **OpenAI**: GPT-4, GPT-3.5 Turbo
|
|
10
|
+
- **Google Gemini**: Gemini 1.5 Pro, Gemini 1.5 Flash
|
|
11
|
+
|
|
12
|
+
### 🛠️ 15 个强大工具
|
|
13
|
+
|
|
14
|
+
#### 基础文件操作
|
|
15
|
+
- **bash** - 执行 Shell 命令
|
|
16
|
+
- **read_file** - 读取文件内容
|
|
17
|
+
- **write_file** - 创建或覆盖文件
|
|
18
|
+
- **edit_file** - 精确编辑文件
|
|
19
|
+
|
|
20
|
+
#### 高效搜索
|
|
21
|
+
- **Glob** - 快速文件模式匹配(支持 `**/*.ts` 等模式)
|
|
22
|
+
- **Grep** - 正则表达式内容搜索(支持上下文行)
|
|
23
|
+
|
|
24
|
+
#### 智能交互
|
|
25
|
+
- **AskUserQuestion** - 结构化提问(单选/多选)
|
|
26
|
+
- **TodoWrite** - 任务管理和进度跟踪
|
|
27
|
+
|
|
28
|
+
#### 高级功能
|
|
29
|
+
- **Task** - 启动子代理执行复杂任务
|
|
30
|
+
- **Skill** - 加载领域专业知识
|
|
31
|
+
- **EnterPlanMode** - 进入规划模式
|
|
32
|
+
- **ExitPlanMode** - 退出规划模式并提交计划
|
|
33
|
+
|
|
34
|
+
#### 网络能力
|
|
35
|
+
- **WebFetch** - 获取网页内容并转换为 Markdown
|
|
36
|
+
- **WebSearch** - 搜索网络内容(使用 DuckDuckGo)
|
|
37
|
+
|
|
38
|
+
### 🚀 性能优化
|
|
39
|
+
- **并行工具执行**: 多个独立工具同时运行,性能提升 2-5 倍
|
|
40
|
+
- **智能缓存**: 减少重复 API 调用
|
|
41
|
+
- **流式输出**: 实时显示 AI 响应
|
|
42
|
+
|
|
43
|
+
### 🎯 子代理系统
|
|
44
|
+
- **explore** - 只读探索代理(安全的代码库探索)
|
|
45
|
+
- **code** - 代码编写代理(完整工具访问)
|
|
46
|
+
- **plan** - 规划代理(设计实现方案)
|
|
47
|
+
|
|
48
|
+
### 📚 技能系统 (Production-grade)
|
|
49
|
+
|
|
50
|
+
#### 目录结构
|
|
51
|
+
```
|
|
52
|
+
项目级 (.ai-agent/):
|
|
53
|
+
├── commands/ # 命令文件 (*.md)
|
|
54
|
+
└── skills/ # 技能目录 (*/SKILL.md)
|
|
55
|
+
|
|
56
|
+
用户级 (~/.ai-agent/):
|
|
57
|
+
├── commands/
|
|
58
|
+
├── skills/
|
|
59
|
+
└── plugins/
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
#### 技能文件格式
|
|
63
|
+
```markdown
|
|
64
|
+
---
|
|
65
|
+
name: my-skill
|
|
66
|
+
description: 技能描述
|
|
67
|
+
when_to_use: AI 自动调用条件
|
|
68
|
+
allowed-tools: [read_file, Glob]
|
|
69
|
+
model: sonnet
|
|
70
|
+
---
|
|
71
|
+
技能内容。使用 $ARGUMENTS 获取参数。
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
#### CLI 命令
|
|
75
|
+
```bash
|
|
76
|
+
/skill list # 列出技能
|
|
77
|
+
/skill install # 安装 (本地/GitHub)
|
|
78
|
+
/skill uninstall # 卸载
|
|
79
|
+
/skill enable # 启用
|
|
80
|
+
/skill disable # 禁用
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
### 🔒 安全特性
|
|
84
|
+
- 只读模式(explore 代理)
|
|
85
|
+
- 路径验证和沙箱保护
|
|
86
|
+
- 危险命令拦截
|
|
87
|
+
|
|
88
|
+
## 📁 项目结构
|
|
89
|
+
|
|
90
|
+
```
|
|
91
|
+
ai-agent-cli/
|
|
92
|
+
├── src/ # 源代码目录
|
|
93
|
+
│ ├── entrypoints/ # 入口点
|
|
94
|
+
│ │ ├── cli.ts # CLI 主入口
|
|
95
|
+
│ │ └── index.ts # 库导出入口
|
|
96
|
+
│ │
|
|
97
|
+
│ ├── core/ # 核心逻辑(无 UI 依赖)
|
|
98
|
+
│ │ ├── types.ts # TypeScript 类型定义
|
|
99
|
+
│ │ ├── loop.ts # 主代理循环(支持并行工具执行)
|
|
100
|
+
│ │ ├── agents.ts # 子代理类型定义
|
|
101
|
+
│ │ ├── prompts.ts # 系统提示词生成
|
|
102
|
+
│ │ ├── constants.ts # 常量定义
|
|
103
|
+
│ │ ├── reminder.ts # 智能提醒管理器
|
|
104
|
+
│ │ ├── planMode.ts # 规划模式管理器
|
|
105
|
+
│ │ ├── projectContext.ts # 项目上下文管理
|
|
106
|
+
│ │ └── outputStyles.ts # 输出样式定义
|
|
107
|
+
│ │
|
|
108
|
+
│ ├── services/ # 服务层
|
|
109
|
+
│ │ ├── ai/ # AI 服务
|
|
110
|
+
│ │ │ └── adapters/ # LLM 提供商适配器
|
|
111
|
+
│ │ │ ├── base.ts # 抽象基类
|
|
112
|
+
│ │ │ ├── anthropic.ts # Anthropic Claude 适配器
|
|
113
|
+
│ │ │ ├── openai.ts # OpenAI GPT 适配器
|
|
114
|
+
│ │ │ ├── gemini.ts # Google Gemini 适配器
|
|
115
|
+
│ │ │ └── factory.ts # 适配器工厂
|
|
116
|
+
│ │ ├── config/ # 配置服务
|
|
117
|
+
│ │ │ ├── Config.ts # 配置管理类
|
|
118
|
+
│ │ │ └── types.ts # 配置类型定义
|
|
119
|
+
│ │ ├── system/ # 系统服务
|
|
120
|
+
│ │ │ └── security.ts # 安全验证(路径/命令检查)
|
|
121
|
+
│ │ ├── customCommands.ts # 命令/技能加载器 (Production-grade)
|
|
122
|
+
│ │ └── skillMarketplace.ts # 技能市场 (安装/卸载/启用/禁用)
|
|
123
|
+
│ │
|
|
124
|
+
│ ├── tools/ # 工具实现(按功能分组)
|
|
125
|
+
│ │ ├── definitions.ts # 工具定义(JSON Schema)
|
|
126
|
+
│ │ ├── dispatcher.ts # 工具分发器
|
|
127
|
+
│ │ ├── types.ts # 工具类型定义
|
|
128
|
+
│ │ ├── filesystem/ # 文件系统工具
|
|
129
|
+
│ │ │ ├── bash.ts # Bash 命令执行
|
|
130
|
+
│ │ │ ├── fileOps.ts # 文件操作(read/write/edit)
|
|
131
|
+
│ │ │ └── index.ts
|
|
132
|
+
│ │ ├── search/ # 搜索工具
|
|
133
|
+
│ │ │ ├── glob.ts # 文件模式匹配
|
|
134
|
+
│ │ │ ├── grep.ts # 内容搜索
|
|
135
|
+
│ │ │ └── index.ts
|
|
136
|
+
│ │ ├── interaction/ # 交互工具
|
|
137
|
+
│ │ │ ├── askQuestion.ts # 用户提问
|
|
138
|
+
│ │ │ ├── todo.ts # 任务管理
|
|
139
|
+
│ │ │ └── index.ts
|
|
140
|
+
│ │ ├── agent/ # 代理工具
|
|
141
|
+
│ │ │ ├── task.ts # 子代理任务
|
|
142
|
+
│ │ │ ├── planMode.ts # 规划模式工具
|
|
143
|
+
│ │ │ └── index.ts
|
|
144
|
+
│ │ ├── ai/ # AI 工具
|
|
145
|
+
│ │ │ ├── skill.ts # 技能加载 (Production-grade)
|
|
146
|
+
│ │ │ └── index.ts
|
|
147
|
+
│ │ └── network/ # 网络工具
|
|
148
|
+
│ │ ├── webFetch.ts # 网页获取
|
|
149
|
+
│ │ ├── webSearch.ts # 网络搜索
|
|
150
|
+
│ │ └── index.ts
|
|
151
|
+
│ │
|
|
152
|
+
│ ├── commands/ # CLI 命令
|
|
153
|
+
│ │ └── skillCommands.ts # /skill 命令实现
|
|
154
|
+
│ │
|
|
155
|
+
│ └── ui/ # UI 组件(独立于 core)
|
|
156
|
+
│ ├── index.ts # UI 模块导出
|
|
157
|
+
│ ├── theme.ts # 终端主题配置
|
|
158
|
+
│ ├── utils.ts # UI 工具函数
|
|
159
|
+
│ └── components/ # UI 组件
|
|
160
|
+
│ ├── Banner.ts # 启动横幅
|
|
161
|
+
│ ├── Input.ts # 输入组件(支持历史记录)
|
|
162
|
+
│ ├── Logo.ts # Logo 显示
|
|
163
|
+
│ ├── Messages.ts # 消息显示
|
|
164
|
+
│ ├── Spinner.ts # 思考动画
|
|
165
|
+
│ └── ToolDisplay.ts # 工具调用显示
|
|
166
|
+
│
|
|
167
|
+
├── .ai-agent/ # 项目级技能配置
|
|
168
|
+
│ ├── skills/ # 技能目录 (*/SKILL.md)
|
|
169
|
+
│ └── commands/ # 命令文件 (*.md)
|
|
170
|
+
│
|
|
171
|
+
├── bin/ # 可执行文件
|
|
172
|
+
│ └── ai-agent-cli.js # CLI 入口
|
|
173
|
+
│
|
|
174
|
+
├── dist/ # 编译输出(TypeScript → JavaScript)
|
|
175
|
+
│
|
|
176
|
+
├── .env.example # 环境变量示例
|
|
177
|
+
├── package.json # 项目配置
|
|
178
|
+
├── tsconfig.json # TypeScript 配置
|
|
179
|
+
├── INSTALLATION.md # 安装指南
|
|
180
|
+
├── QUICKSTART.md # 快速开始
|
|
181
|
+
└── README.md # 本文档
|
|
182
|
+
```
|
|
183
|
+
|
|
184
|
+
## 🚀 快速开始
|
|
185
|
+
|
|
186
|
+
### 安装
|
|
187
|
+
|
|
188
|
+
```bash
|
|
189
|
+
# 克隆仓库
|
|
190
|
+
git clone https://github.com/your-username/ai-agent-cli.git
|
|
191
|
+
cd ai-agent-cli
|
|
192
|
+
|
|
193
|
+
# 安装依赖
|
|
194
|
+
npm install
|
|
195
|
+
|
|
196
|
+
# 配置环境变量
|
|
197
|
+
cp .env.example .env
|
|
198
|
+
# 编辑 .env 文件,添加你的 API 密钥
|
|
199
|
+
```
|
|
200
|
+
|
|
201
|
+
### 配置 API 密钥
|
|
202
|
+
|
|
203
|
+
在 `.env` 文件中配置至少一个提供商的 API 密钥:
|
|
204
|
+
|
|
205
|
+
```bash
|
|
206
|
+
# Anthropic Claude
|
|
207
|
+
ANTHROPIC_API_KEY=your_anthropic_key
|
|
208
|
+
|
|
209
|
+
# OpenAI
|
|
210
|
+
OPENAI_API_KEY=your_openai_key
|
|
211
|
+
|
|
212
|
+
# Google Gemini
|
|
213
|
+
GEMINI_API_KEY=your_gemini_key
|
|
214
|
+
```
|
|
215
|
+
|
|
216
|
+
### 运行
|
|
217
|
+
|
|
218
|
+
```bash
|
|
219
|
+
# 开发模式
|
|
220
|
+
npm run dev
|
|
221
|
+
|
|
222
|
+
# 构建并运行
|
|
223
|
+
npm run build
|
|
224
|
+
npm start
|
|
225
|
+
```
|
|
226
|
+
|
|
227
|
+
## 💡 使用示例
|
|
228
|
+
|
|
229
|
+
### 基础对话
|
|
230
|
+
|
|
231
|
+
```
|
|
232
|
+
>>> 帮我创建一个 TypeScript 项目
|
|
233
|
+
```
|
|
234
|
+
|
|
235
|
+
### 使用子代理
|
|
236
|
+
|
|
237
|
+
```
|
|
238
|
+
>>> 使用 explore 代理查找所有 TypeScript 文件
|
|
239
|
+
```
|
|
240
|
+
|
|
241
|
+
### 规划模式
|
|
242
|
+
|
|
243
|
+
```
|
|
244
|
+
>>> 进入规划模式,设计一个用户认证系统
|
|
245
|
+
```
|
|
246
|
+
|
|
247
|
+
### 网络搜索
|
|
248
|
+
|
|
249
|
+
```
|
|
250
|
+
>>> 搜索 React 18 的新特性
|
|
251
|
+
```
|
|
252
|
+
|
|
253
|
+
## ⚙️ 配置
|
|
254
|
+
|
|
255
|
+
### 环境变量
|
|
256
|
+
|
|
257
|
+
| 变量名 | 说明 | 必需 |
|
|
258
|
+
|--------|------|------|
|
|
259
|
+
| `ANTHROPIC_API_KEY` | Anthropic Claude API 密钥 | 可选 |
|
|
260
|
+
| `OPENAI_API_KEY` | OpenAI API 密钥 | 可选 |
|
|
261
|
+
| `GEMINI_API_KEY` | Google Gemini API 密钥 | 可选 |
|
|
262
|
+
| `DEFAULT_PROVIDER` | 默认提供商 (anthropic/openai/gemini) | 否 |
|
|
263
|
+
| `DEFAULT_MODEL` | 默认模型名称 | 否 |
|
|
264
|
+
|
|
265
|
+
### 提供商和模型
|
|
266
|
+
|
|
267
|
+
**Anthropic Claude**:
|
|
268
|
+
- `claude-3-5-sonnet-20241022` (推荐)
|
|
269
|
+
- `claude-3-opus-20240229`
|
|
270
|
+
|
|
271
|
+
**OpenAI**:
|
|
272
|
+
- `gpt-4-turbo-preview`
|
|
273
|
+
- `gpt-3.5-turbo`
|
|
274
|
+
|
|
275
|
+
**Google Gemini**:
|
|
276
|
+
- `gemini-1.5-pro`
|
|
277
|
+
- `gemini-1.5-flash`
|
|
278
|
+
|
|
279
|
+
## 🛠️ 开发
|
|
280
|
+
|
|
281
|
+
### 项目脚本
|
|
282
|
+
|
|
283
|
+
```bash
|
|
284
|
+
# 开发模式(热重载)
|
|
285
|
+
npm run dev
|
|
286
|
+
|
|
287
|
+
# 构建项目
|
|
288
|
+
npm run build
|
|
289
|
+
|
|
290
|
+
# 运行测试
|
|
291
|
+
npm test
|
|
292
|
+
|
|
293
|
+
# 代码检查
|
|
294
|
+
npm run lint
|
|
295
|
+
|
|
296
|
+
# 修复代码风格
|
|
297
|
+
npm run lint:fix
|
|
298
|
+
```
|
|
299
|
+
|
|
300
|
+
### 技术栈
|
|
301
|
+
|
|
302
|
+
- **语言**: TypeScript 5.3+
|
|
303
|
+
- **运行时**: Node.js 18+
|
|
304
|
+
- **依赖管理**: npm
|
|
305
|
+
- **构建工具**: tsc
|
|
306
|
+
- **测试框架**: Vitest
|
|
307
|
+
- **代码检查**: ESLint
|
|
308
|
+
|
|
309
|
+
## 📚 学习路径
|
|
310
|
+
|
|
311
|
+
本项目提供渐进式学习示例,从简单到复杂:
|
|
312
|
+
|
|
313
|
+
1. **v0: Bash is All You Need** (~150行)
|
|
314
|
+
- 最简 Agent 实现
|
|
315
|
+
- 只有 1 个工具:bash
|
|
316
|
+
- 理解 Agent 的本质
|
|
317
|
+
|
|
318
|
+
2. **v1: Model as Agent** (~320行)
|
|
319
|
+
- 4 个基础工具
|
|
320
|
+
- Agent Loop 模式
|
|
321
|
+
- 安全防护机制
|
|
322
|
+
|
|
323
|
+
3. **v2-v4: 完整功能**
|
|
324
|
+
- 使用主项目体验完整功能
|
|
325
|
+
- TodoWrite、Subagent、Skills
|
|
326
|
+
|
|
327
|
+
详见 `examples/` 目录。
|
|
328
|
+
|
|
329
|
+
## 相关文档
|
|
330
|
+
|
|
331
|
+
- [快速开始](QUICKSTART.md) - 5 分钟上手指南
|
|
332
|
+
- [示例教程](examples/README.md) - 渐进式学习路径
|
|
333
|
+
|
|
334
|
+
|
|
335
|
+
## 参考项目
|
|
336
|
+
|
|
337
|
+
- [learn-claude-code](https://github.com/shareAI-lab/learn-claude-code) - 原始教育项目
|
|
338
|
+
- [Kode](https://github.com/shareAI-lab/Kode) - 生产级开源Agent
|
|
339
|
+
- [Agent Skills Spec](https://github.com/anthropics/agent-skills) - 官方技能规范
|
|
340
|
+
|
|
341
|
+
## 致谢
|
|
342
|
+
|
|
343
|
+
感谢 [shareAI Lab](https://github.com/shareAI-lab) 提供的优秀教育资源和设计理念。
|
|
344
|
+
|
|
345
|
+
|
|
346
|
+
## 🌟 特别说明
|
|
347
|
+
|
|
348
|
+
本项目是功能完整的生产级工具。
|
|
349
|
+
|
|
350
|
+
---
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* AI Agent CLI 可执行入口
|
|
5
|
+
*
|
|
6
|
+
* 这个文件是 npm 包的可执行入口点
|
|
7
|
+
* 它简单地导入并运行编译后的 entrypoints/cli.js
|
|
8
|
+
*/
|
|
9
|
+
|
|
10
|
+
// 导入编译后的主文件
|
|
11
|
+
import('../dist/entrypoints/cli.js').catch((error) => {
|
|
12
|
+
console.error('Failed to start AI Agent CLI:', error);
|
|
13
|
+
process.exit(1);
|
|
14
|
+
});
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Anthropic Claude 适配器
|
|
3
|
+
*/
|
|
4
|
+
import type { Message, ToolDefinition, ToolResult, LLMResponse } from '../core/types.js';
|
|
5
|
+
import { ProtocolAdapter } from './base.js';
|
|
6
|
+
export declare class AnthropicAdapter extends ProtocolAdapter {
|
|
7
|
+
private client;
|
|
8
|
+
initializeClient(): Promise<void>;
|
|
9
|
+
convertTools(tools: ToolDefinition[]): unknown[];
|
|
10
|
+
createMessage(system: string, messages: Message[], tools: unknown[], maxTokens: number): Promise<unknown>;
|
|
11
|
+
extractTextAndToolCalls(response: unknown): LLMResponse;
|
|
12
|
+
formatAssistantMessage(response: unknown): Message;
|
|
13
|
+
formatToolResults(results: ToolResult[]): Message;
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=anthropic.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"anthropic.d.ts","sourceRoot":"","sources":["../../src/adapters/anthropic.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,KAAK,EAAE,OAAO,EAAE,cAAc,EAAE,UAAU,EAAE,WAAW,EAAgB,MAAM,kBAAkB,CAAC;AACvG,OAAO,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAE5C,qBAAa,gBAAiB,SAAQ,eAAe;IACnD,OAAO,CAAC,MAAM,CAAa;IAErB,gBAAgB,IAAI,OAAO,CAAC,IAAI,CAAC;IAevC,YAAY,CAAC,KAAK,EAAE,cAAc,EAAE,GAAG,OAAO,EAAE;IAK1C,aAAa,CACjB,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,OAAO,EAAE,EACnB,KAAK,EAAE,OAAO,EAAE,EAChB,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,OAAO,CAAC;IAwBnB,uBAAuB,CAAC,QAAQ,EAAE,OAAO,GAAG,WAAW;IAwBvD,sBAAsB,CAAC,QAAQ,EAAE,OAAO,GAAG,OAAO;IASlD,iBAAiB,CAAC,OAAO,EAAE,UAAU,EAAE,GAAG,OAAO;CAalD"}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Anthropic Claude 适配器
|
|
3
|
+
*/
|
|
4
|
+
import Anthropic from '@anthropic-ai/sdk';
|
|
5
|
+
import { ProtocolAdapter } from './base.js';
|
|
6
|
+
export class AnthropicAdapter extends ProtocolAdapter {
|
|
7
|
+
client;
|
|
8
|
+
async initializeClient() {
|
|
9
|
+
const options = {
|
|
10
|
+
apiKey: this.apiKey,
|
|
11
|
+
};
|
|
12
|
+
if (this.baseUrl) {
|
|
13
|
+
options.baseURL = this.baseUrl;
|
|
14
|
+
}
|
|
15
|
+
this.client = new Anthropic(options);
|
|
16
|
+
}
|
|
17
|
+
convertTools(tools) {
|
|
18
|
+
// Anthropic 使用原生格式,无需转换
|
|
19
|
+
return tools;
|
|
20
|
+
}
|
|
21
|
+
async createMessage(system, messages, tools, maxTokens) {
|
|
22
|
+
// 确保客户端已初始化
|
|
23
|
+
if (!this.client) {
|
|
24
|
+
await this.initializeClient();
|
|
25
|
+
}
|
|
26
|
+
// 转换消息格式
|
|
27
|
+
const anthropicMessages = messages.map((msg) => ({
|
|
28
|
+
role: msg.role,
|
|
29
|
+
content: msg.content,
|
|
30
|
+
}));
|
|
31
|
+
// 调用 API
|
|
32
|
+
const response = await this.client.messages.create({
|
|
33
|
+
model: this.model,
|
|
34
|
+
system,
|
|
35
|
+
messages: anthropicMessages,
|
|
36
|
+
tools: tools,
|
|
37
|
+
max_tokens: maxTokens,
|
|
38
|
+
});
|
|
39
|
+
return response;
|
|
40
|
+
}
|
|
41
|
+
extractTextAndToolCalls(response) {
|
|
42
|
+
const msg = response;
|
|
43
|
+
const textBlocks = [];
|
|
44
|
+
const toolCalls = [];
|
|
45
|
+
for (const block of msg.content) {
|
|
46
|
+
if (block.type === 'text') {
|
|
47
|
+
textBlocks.push(block.text);
|
|
48
|
+
}
|
|
49
|
+
else if (block.type === 'tool_use') {
|
|
50
|
+
toolCalls.push({
|
|
51
|
+
id: block.id,
|
|
52
|
+
name: block.name,
|
|
53
|
+
input: block.input,
|
|
54
|
+
});
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
return {
|
|
58
|
+
textBlocks,
|
|
59
|
+
toolCalls,
|
|
60
|
+
stopReason: msg.stop_reason || 'end_turn',
|
|
61
|
+
};
|
|
62
|
+
}
|
|
63
|
+
formatAssistantMessage(response) {
|
|
64
|
+
const msg = response;
|
|
65
|
+
return {
|
|
66
|
+
role: 'assistant',
|
|
67
|
+
content: msg.content,
|
|
68
|
+
};
|
|
69
|
+
}
|
|
70
|
+
formatToolResults(results) {
|
|
71
|
+
const content = results.map((r) => ({
|
|
72
|
+
type: 'tool_result',
|
|
73
|
+
tool_use_id: r.tool_use_id,
|
|
74
|
+
content: r.content,
|
|
75
|
+
is_error: r.is_error,
|
|
76
|
+
}));
|
|
77
|
+
return {
|
|
78
|
+
role: 'user',
|
|
79
|
+
content,
|
|
80
|
+
};
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
//# sourceMappingURL=anthropic.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"anthropic.js","sourceRoot":"","sources":["../../src/adapters/anthropic.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 协议适配器抽象基类
|
|
3
|
+
* 定义所有 LLM 提供商适配器必须实现的接口
|
|
4
|
+
*/
|
|
5
|
+
import type { Message, ToolDefinition, ToolResult, LLMResponse } from '../core/types.js';
|
|
6
|
+
export declare abstract class ProtocolAdapter {
|
|
7
|
+
protected apiKey: string;
|
|
8
|
+
protected model: string;
|
|
9
|
+
protected baseUrl?: string;
|
|
10
|
+
constructor(apiKey: string, model: string, baseUrl?: string);
|
|
11
|
+
/**
|
|
12
|
+
* 初始化客户端(连接 API)
|
|
13
|
+
*/
|
|
14
|
+
abstract initializeClient(): Promise<void>;
|
|
15
|
+
/**
|
|
16
|
+
* 转换工具定义格式
|
|
17
|
+
* Anthropic 格式 → 提供商特定格式
|
|
18
|
+
*/
|
|
19
|
+
abstract convertTools(tools: ToolDefinition[]): unknown[];
|
|
20
|
+
/**
|
|
21
|
+
* 创建消息请求(调用 LLM API)
|
|
22
|
+
*/
|
|
23
|
+
abstract createMessage(system: string, messages: Message[], tools: unknown[], maxTokens: number): Promise<unknown>;
|
|
24
|
+
/**
|
|
25
|
+
* 从响应中提取文本块和工具调用
|
|
26
|
+
*/
|
|
27
|
+
abstract extractTextAndToolCalls(response: unknown): LLMResponse;
|
|
28
|
+
/**
|
|
29
|
+
* 格式化助手消息(用于添加到历史)
|
|
30
|
+
*/
|
|
31
|
+
abstract formatAssistantMessage(response: unknown): Message;
|
|
32
|
+
/**
|
|
33
|
+
* 格式化工具结果(用于发送回 LLM)
|
|
34
|
+
*/
|
|
35
|
+
abstract formatToolResults(results: ToolResult[]): Message;
|
|
36
|
+
/**
|
|
37
|
+
* 获取模型名称
|
|
38
|
+
*/
|
|
39
|
+
getModel(): string;
|
|
40
|
+
/**
|
|
41
|
+
* 获取基础 URL
|
|
42
|
+
*/
|
|
43
|
+
getBaseUrl(): string | undefined;
|
|
44
|
+
}
|
|
45
|
+
//# sourceMappingURL=base.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"base.d.ts","sourceRoot":"","sources":["../../src/adapters/base.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,cAAc,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAEzF,8BAAsB,eAAe;IACnC,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC;IACzB,SAAS,CAAC,KAAK,EAAE,MAAM,CAAC;IACxB,SAAS,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;gBAEf,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM;IAM3D;;OAEG;IACH,QAAQ,CAAC,gBAAgB,IAAI,OAAO,CAAC,IAAI,CAAC;IAE1C;;;OAGG;IACH,QAAQ,CAAC,YAAY,CAAC,KAAK,EAAE,cAAc,EAAE,GAAG,OAAO,EAAE;IAEzD;;OAEG;IACH,QAAQ,CAAC,aAAa,CACpB,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,OAAO,EAAE,EACnB,KAAK,EAAE,OAAO,EAAE,EAChB,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,OAAO,CAAC;IAEnB;;OAEG;IACH,QAAQ,CAAC,uBAAuB,CAAC,QAAQ,EAAE,OAAO,GAAG,WAAW;IAEhE;;OAEG;IACH,QAAQ,CAAC,sBAAsB,CAAC,QAAQ,EAAE,OAAO,GAAG,OAAO;IAE3D;;OAEG;IACH,QAAQ,CAAC,iBAAiB,CAAC,OAAO,EAAE,UAAU,EAAE,GAAG,OAAO;IAE1D;;OAEG;IACH,QAAQ,IAAI,MAAM;IAIlB;;OAEG;IACH,UAAU,IAAI,MAAM,GAAG,SAAS;CAGjC"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 协议适配器抽象基类
|
|
3
|
+
* 定义所有 LLM 提供商适配器必须实现的接口
|
|
4
|
+
*/
|
|
5
|
+
export class ProtocolAdapter {
|
|
6
|
+
apiKey;
|
|
7
|
+
model;
|
|
8
|
+
baseUrl;
|
|
9
|
+
constructor(apiKey, model, baseUrl) {
|
|
10
|
+
this.apiKey = apiKey;
|
|
11
|
+
this.model = model;
|
|
12
|
+
this.baseUrl = baseUrl;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* 获取模型名称
|
|
16
|
+
*/
|
|
17
|
+
getModel() {
|
|
18
|
+
return this.model;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* 获取基础 URL
|
|
22
|
+
*/
|
|
23
|
+
getBaseUrl() {
|
|
24
|
+
return this.baseUrl;
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
//# sourceMappingURL=base.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"base.js","sourceRoot":"","sources":["../../src/adapters/base.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,MAAM,OAAgB,eAAe;IACzB,MAAM,CAAS;IACf,KAAK,CAAS;IACd,OAAO,CAAU;IAE3B,YAAY,MAAc,EAAE,KAAa,EAAE,OAAgB;QACzD,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IACzB,CAAC;IAsCD;;OAEG;IACH,QAAQ;QACN,OAAO,IAAI,CAAC,KAAK,CAAC;IACpB,CAAC;IAED;;OAEG;IACH,UAAU;QACR,OAAO,IAAI,CAAC,OAAO,CAAC;IACtB,CAAC;CACF"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 适配器工厂 - 根据提供商创建相应的适配器实例
|
|
3
|
+
*/
|
|
4
|
+
import type { Provider } from '../core/types.js';
|
|
5
|
+
import { ProtocolAdapter } from './base.js';
|
|
6
|
+
import { AnthropicAdapter } from './anthropic.js';
|
|
7
|
+
import { OpenAIAdapter } from './openai.js';
|
|
8
|
+
import { GeminiAdapter } from './gemini.js';
|
|
9
|
+
/**
|
|
10
|
+
* 创建协议适配器
|
|
11
|
+
*/
|
|
12
|
+
export declare function createAdapter(provider: Provider, apiKey: string, model: string, baseUrl?: string): Promise<ProtocolAdapter>;
|
|
13
|
+
/**
|
|
14
|
+
* 导出所有适配器类(用于测试)
|
|
15
|
+
*/
|
|
16
|
+
export { ProtocolAdapter, AnthropicAdapter, OpenAIAdapter, GeminiAdapter };
|
|
17
|
+
//# sourceMappingURL=factory.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"factory.d.ts","sourceRoot":"","sources":["../../src/adapters/factory.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAC5C,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAE5C;;GAEG;AACH,wBAAsB,aAAa,CACjC,QAAQ,EAAE,QAAQ,EAClB,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,MAAM,EACb,OAAO,CAAC,EAAE,MAAM,GACf,OAAO,CAAC,eAAe,CAAC,CAwB1B;AAED;;GAEG;AACH,OAAO,EAAE,eAAe,EAAE,gBAAgB,EAAE,aAAa,EAAE,aAAa,EAAE,CAAC"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 适配器工厂 - 根据提供商创建相应的适配器实例
|
|
3
|
+
*/
|
|
4
|
+
import { ProtocolAdapter } from './base.js';
|
|
5
|
+
import { AnthropicAdapter } from './anthropic.js';
|
|
6
|
+
import { OpenAIAdapter } from './openai.js';
|
|
7
|
+
import { GeminiAdapter } from './gemini.js';
|
|
8
|
+
/**
|
|
9
|
+
* 创建协议适配器
|
|
10
|
+
*/
|
|
11
|
+
export async function createAdapter(provider, apiKey, model, baseUrl) {
|
|
12
|
+
let adapter;
|
|
13
|
+
switch (provider) {
|
|
14
|
+
case 'anthropic':
|
|
15
|
+
adapter = new AnthropicAdapter(apiKey, model, baseUrl);
|
|
16
|
+
break;
|
|
17
|
+
case 'openai':
|
|
18
|
+
adapter = new OpenAIAdapter(apiKey, model, baseUrl);
|
|
19
|
+
break;
|
|
20
|
+
case 'gemini':
|
|
21
|
+
adapter = new GeminiAdapter(apiKey, model, baseUrl);
|
|
22
|
+
break;
|
|
23
|
+
default:
|
|
24
|
+
throw new Error(`不支持的提供商: ${provider}`);
|
|
25
|
+
}
|
|
26
|
+
// 初始化客户端
|
|
27
|
+
await adapter.initializeClient();
|
|
28
|
+
return adapter;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* 导出所有适配器类(用于测试)
|
|
32
|
+
*/
|
|
33
|
+
export { ProtocolAdapter, AnthropicAdapter, OpenAIAdapter, GeminiAdapter };
|
|
34
|
+
//# sourceMappingURL=factory.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"factory.js","sourceRoot":"","sources":["../../src/adapters/factory.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAC5C,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAE5C;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,QAAkB,EAClB,MAAc,EACd,KAAa,EACb,OAAgB;IAEhB,IAAI,OAAwB,CAAC;IAE7B,QAAQ,QAAQ,EAAE,CAAC;QACjB,KAAK,WAAW;YACd,OAAO,GAAG,IAAI,gBAAgB,CAAC,MAAM,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;YACvD,MAAM;QAER,KAAK,QAAQ;YACX,OAAO,GAAG,IAAI,aAAa,CAAC,MAAM,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;YACpD,MAAM;QAER,KAAK,QAAQ;YACX,OAAO,GAAG,IAAI,aAAa,CAAC,MAAM,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;YACpD,MAAM;QAER;YACE,MAAM,IAAI,KAAK,CAAC,YAAY,QAAQ,EAAE,CAAC,CAAC;IAC5C,CAAC;IAED,SAAS;IACT,MAAM,OAAO,CAAC,gBAAgB,EAAE,CAAC;IAEjC,OAAO,OAAO,CAAC;AACjB,CAAC;AAED;;GAEG;AACH,OAAO,EAAE,eAAe,EAAE,gBAAgB,EAAE,aAAa,EAAE,aAAa,EAAE,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Google Gemini 适配器
|
|
3
|
+
*/
|
|
4
|
+
import type { Message, ToolDefinition, ToolResult, LLMResponse } from '../core/types.js';
|
|
5
|
+
import { ProtocolAdapter } from './base.js';
|
|
6
|
+
export declare class GeminiAdapter extends ProtocolAdapter {
|
|
7
|
+
private client;
|
|
8
|
+
private generativeModel;
|
|
9
|
+
initializeClient(): Promise<void>;
|
|
10
|
+
convertTools(tools: ToolDefinition[]): unknown[];
|
|
11
|
+
createMessage(system: string, messages: Message[], tools: unknown[], _maxTokens: number): Promise<unknown>;
|
|
12
|
+
extractTextAndToolCalls(response: unknown): LLMResponse;
|
|
13
|
+
formatAssistantMessage(response: unknown): Message;
|
|
14
|
+
formatToolResults(results: ToolResult[]): Message;
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=gemini.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gemini.d.ts","sourceRoot":"","sources":["../../src/adapters/gemini.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,KAAK,EAAE,OAAO,EAAE,cAAc,EAAE,UAAU,EAAE,WAAW,EAAgB,MAAM,kBAAkB,CAAC;AACvG,OAAO,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAE5C,qBAAa,aAAc,SAAQ,eAAe;IAChD,OAAO,CAAC,MAAM,CAAsB;IACpC,OAAO,CAAC,eAAe,CAAmB;IAEpC,gBAAgB,IAAI,OAAO,CAAC,IAAI,CAAC;IAMvC,YAAY,CAAC,KAAK,EAAE,cAAc,EAAE,GAAG,OAAO,EAAE;IAmB1C,aAAa,CACjB,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,OAAO,EAAE,EACnB,KAAK,EAAE,OAAO,EAAE,EAChB,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,OAAO,CAAC;IAmEnB,uBAAuB,CAAC,QAAQ,EAAE,OAAO,GAAG,WAAW;IAgCvD,sBAAsB,CAAC,QAAQ,EAAE,OAAO,GAAG,OAAO;IAiClD,iBAAiB,CAAC,OAAO,EAAE,UAAU,EAAE,GAAG,OAAO;CAalD"}
|