@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
|
@@ -0,0 +1,165 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 输出风格系统
|
|
3
|
+
* 支持多种响应风格切换,包括默认、解释型、学习型
|
|
4
|
+
*/
|
|
5
|
+
import fs from 'fs-extra';
|
|
6
|
+
import path from 'node:path';
|
|
7
|
+
/**
|
|
8
|
+
* 当前输出风格(默认为 default)
|
|
9
|
+
*/
|
|
10
|
+
let currentOutputStyle = 'default';
|
|
11
|
+
/**
|
|
12
|
+
* 内置输出风格
|
|
13
|
+
*/
|
|
14
|
+
const OUTPUT_STYLES = {
|
|
15
|
+
default: {
|
|
16
|
+
name: 'default',
|
|
17
|
+
description: '默认风格,极简回复',
|
|
18
|
+
prompt: '',
|
|
19
|
+
keepCodingInstructions: true,
|
|
20
|
+
},
|
|
21
|
+
explanatory: {
|
|
22
|
+
name: 'explanatory',
|
|
23
|
+
description: '解释型风格,提供教育性见解和实现选择说明',
|
|
24
|
+
prompt: `# 输出风格: 解释型
|
|
25
|
+
|
|
26
|
+
你是一个帮助用户完成软件工程任务的交互式 CLI 工具。除了软件工程任务,你还应该在过程中提供关于代码库的教育性见解。
|
|
27
|
+
|
|
28
|
+
你应该清晰且具有教育性,在保持专注于任务的同时提供有用的解释。平衡教育内容和任务完成。提供见解时,可以超出典型的长度限制,但要保持专注和相关。
|
|
29
|
+
|
|
30
|
+
## 见解
|
|
31
|
+
|
|
32
|
+
为了鼓励学习,在编写代码前后,始终使用以下格式提供关于实现选择的简短教育性解释:
|
|
33
|
+
|
|
34
|
+
\`💡 见解 ─────────────────────────────────────\`
|
|
35
|
+
[2-3 个关键教育要点]
|
|
36
|
+
\`─────────────────────────────────────────────────\`
|
|
37
|
+
|
|
38
|
+
这些见解应该包含在对话中,而不是代码库中。你应该主要关注特定于代码库或你刚写的代码的有趣见解,而不是一般的编程概念。`,
|
|
39
|
+
keepCodingInstructions: true,
|
|
40
|
+
},
|
|
41
|
+
learning: {
|
|
42
|
+
name: 'learning',
|
|
43
|
+
description: '学习型风格,暂停让用户编写小段代码进行实践',
|
|
44
|
+
prompt: `# 输出风格: 学习型
|
|
45
|
+
|
|
46
|
+
你是一个帮助用户完成软件工程任务的交互式 CLI 工具。除了软件工程任务,你还应该通过实践和教育性见解帮助用户更多地了解代码库。
|
|
47
|
+
|
|
48
|
+
你应该协作且鼓励。通过请求用户输入有意义的设计决策来平衡任务完成和学习,同时自己处理常规实现。
|
|
49
|
+
|
|
50
|
+
## 请求用户贡献
|
|
51
|
+
|
|
52
|
+
为了鼓励学习,当生成 20+ 行涉及以下内容的代码时,请用户贡献 2-10 行代码:
|
|
53
|
+
- 设计决策(错误处理、数据结构)
|
|
54
|
+
- 有多种有效方法的业务逻辑
|
|
55
|
+
- 关键算法或接口定义
|
|
56
|
+
|
|
57
|
+
### 请求格式
|
|
58
|
+
|
|
59
|
+
\`\`\`
|
|
60
|
+
📝 **动手学习**
|
|
61
|
+
**背景:** [已构建的内容以及为什么这个决策很重要]
|
|
62
|
+
**你的任务:** [文件中的具体函数/部分,提及文件和 TODO(human) 但不包含行号]
|
|
63
|
+
**指导:** [需要考虑的权衡和约束]
|
|
64
|
+
\`\`\`
|
|
65
|
+
|
|
66
|
+
### 关键指南
|
|
67
|
+
|
|
68
|
+
- 将贡献定位为有价值的设计决策,而不是繁忙的工作
|
|
69
|
+
- 你必须先使用编辑工具在代码库中添加 TODO(human) 部分,然后再发出动手学习请求
|
|
70
|
+
- 确保代码中只有一个 TODO(human) 部分
|
|
71
|
+
- 发出动手学习请求后不要采取任何行动或输出任何内容。等待用户实现后再继续。
|
|
72
|
+
|
|
73
|
+
### 贡献后
|
|
74
|
+
|
|
75
|
+
分享一个将他们的代码与更广泛的模式或系统效果联系起来的见解。避免赞美或重复。
|
|
76
|
+
|
|
77
|
+
## 见解
|
|
78
|
+
|
|
79
|
+
在编写代码前后,始终使用以下格式提供关于实现选择的简短教育性解释:
|
|
80
|
+
|
|
81
|
+
\`💡 见解 ─────────────────────────────────────\`
|
|
82
|
+
[2-3 个关键教育要点]
|
|
83
|
+
\`─────────────────────────────────────────────────\``,
|
|
84
|
+
keepCodingInstructions: true,
|
|
85
|
+
},
|
|
86
|
+
};
|
|
87
|
+
/**
|
|
88
|
+
* 获取当前输出风格
|
|
89
|
+
*/
|
|
90
|
+
export function getCurrentOutputStyle() {
|
|
91
|
+
return currentOutputStyle;
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* 设置当前输出风格
|
|
95
|
+
*/
|
|
96
|
+
export function setCurrentOutputStyle(style) {
|
|
97
|
+
if (!(style in OUTPUT_STYLES)) {
|
|
98
|
+
throw new Error(`未知的输出风格: ${style}`);
|
|
99
|
+
}
|
|
100
|
+
currentOutputStyle = style;
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* 获取当前输出风格的提示词
|
|
104
|
+
*/
|
|
105
|
+
export function getOutputStylePrompt() {
|
|
106
|
+
const style = OUTPUT_STYLES[currentOutputStyle];
|
|
107
|
+
return style.prompt;
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* 获取当前输出风格定义
|
|
111
|
+
*/
|
|
112
|
+
export function getCurrentOutputStyleDefinition() {
|
|
113
|
+
return OUTPUT_STYLES[currentOutputStyle];
|
|
114
|
+
}
|
|
115
|
+
/**
|
|
116
|
+
* 获取所有可用的输出风格
|
|
117
|
+
*/
|
|
118
|
+
export function getAvailableOutputStyles() {
|
|
119
|
+
return Object.values(OUTPUT_STYLES);
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* 列出输出风格(用于显示)
|
|
123
|
+
*/
|
|
124
|
+
export function listOutputStyles() {
|
|
125
|
+
return Object.values(OUTPUT_STYLES)
|
|
126
|
+
.map(style => `- ${style.name}: ${style.description}`)
|
|
127
|
+
.join('\n');
|
|
128
|
+
}
|
|
129
|
+
/**
|
|
130
|
+
* 从项目配置加载输出风格
|
|
131
|
+
*/
|
|
132
|
+
export function loadOutputStyleFromConfig(workdir) {
|
|
133
|
+
const configPath = path.join(workdir, '.ai-agent', 'settings.json');
|
|
134
|
+
if (fs.existsSync(configPath)) {
|
|
135
|
+
try {
|
|
136
|
+
const config = fs.readJsonSync(configPath);
|
|
137
|
+
if (config.outputStyle && config.outputStyle in OUTPUT_STYLES) {
|
|
138
|
+
currentOutputStyle = config.outputStyle;
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
catch {
|
|
142
|
+
// 忽略配置读取错误
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
/**
|
|
147
|
+
* 保存输出风格到项目配置
|
|
148
|
+
*/
|
|
149
|
+
export function saveOutputStyleToConfig(workdir, style) {
|
|
150
|
+
const configDir = path.join(workdir, '.ai-agent');
|
|
151
|
+
const configPath = path.join(configDir, 'settings.json');
|
|
152
|
+
fs.ensureDirSync(configDir);
|
|
153
|
+
let config = {};
|
|
154
|
+
if (fs.existsSync(configPath)) {
|
|
155
|
+
try {
|
|
156
|
+
config = fs.readJsonSync(configPath);
|
|
157
|
+
}
|
|
158
|
+
catch {
|
|
159
|
+
// 忽略读取错误,使用空配置
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
config.outputStyle = style;
|
|
163
|
+
fs.writeJsonSync(configPath, config, { spaces: 2 });
|
|
164
|
+
}
|
|
165
|
+
//# sourceMappingURL=outputStyles.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"outputStyles.js","sourceRoot":"","sources":["../../src/core/outputStyles.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 规划模式管理器
|
|
3
|
+
*
|
|
4
|
+
* 规划模式允许代理在执行前先探索和设计实现方案
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* 规划模式管理器
|
|
8
|
+
*/
|
|
9
|
+
export declare class PlanModeManager {
|
|
10
|
+
private state;
|
|
11
|
+
private workdir;
|
|
12
|
+
constructor(workdir: string);
|
|
13
|
+
/**
|
|
14
|
+
* 进入规划模式
|
|
15
|
+
*/
|
|
16
|
+
enterPlanMode(taskDescription: string): string;
|
|
17
|
+
/**
|
|
18
|
+
* 退出规划模式
|
|
19
|
+
*/
|
|
20
|
+
exitPlanMode(): {
|
|
21
|
+
success: boolean;
|
|
22
|
+
plan: string;
|
|
23
|
+
error?: string;
|
|
24
|
+
};
|
|
25
|
+
/**
|
|
26
|
+
* 检查是否在规划模式中
|
|
27
|
+
*/
|
|
28
|
+
isInPlanMode(): boolean;
|
|
29
|
+
/**
|
|
30
|
+
* 获取计划文件路径
|
|
31
|
+
*/
|
|
32
|
+
getPlanFilePath(): string | null;
|
|
33
|
+
/**
|
|
34
|
+
* 获取任务描述
|
|
35
|
+
*/
|
|
36
|
+
getTaskDescription(): string | null;
|
|
37
|
+
}
|
|
38
|
+
export declare function getPlanModeManager(workdir?: string): PlanModeManager;
|
|
39
|
+
export declare function resetPlanModeManager(): void;
|
|
40
|
+
//# sourceMappingURL=planMode.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"planMode.d.ts","sourceRoot":"","sources":["../../src/core/planMode.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAeH;;GAEG;AACH,qBAAa,eAAe;IAC1B,OAAO,CAAC,KAAK,CAA8B;IAC3C,OAAO,CAAC,OAAO,CAAS;gBAEZ,OAAO,EAAE,MAAM;IAI3B;;OAEG;IACH,aAAa,CAAC,eAAe,EAAE,MAAM,GAAG,MAAM;IAgD9C;;OAEG;IACH,YAAY,IAAI;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE;IA8ClE;;OAEG;IACH,YAAY,IAAI,OAAO;IAIvB;;OAEG;IACH,eAAe,IAAI,MAAM,GAAG,IAAI;IAIhC;;OAEG;IACH,kBAAkB,IAAI,MAAM,GAAG,IAAI;CAGpC;AAOD,wBAAgB,kBAAkB,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,eAAe,CAQpE;AAED,wBAAgB,oBAAoB,IAAI,IAAI,CAE3C"}
|
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 规划模式管理器
|
|
3
|
+
*
|
|
4
|
+
* 规划模式允许代理在执行前先探索和设计实现方案
|
|
5
|
+
*/
|
|
6
|
+
import path from 'node:path';
|
|
7
|
+
import fs from 'fs-extra';
|
|
8
|
+
/**
|
|
9
|
+
* 规划模式管理器
|
|
10
|
+
*/
|
|
11
|
+
export class PlanModeManager {
|
|
12
|
+
state = null;
|
|
13
|
+
workdir;
|
|
14
|
+
constructor(workdir) {
|
|
15
|
+
this.workdir = workdir;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* 进入规划模式
|
|
19
|
+
*/
|
|
20
|
+
enterPlanMode(taskDescription) {
|
|
21
|
+
if (this.state?.isActive) {
|
|
22
|
+
return '错误: 已经处于规划模式中';
|
|
23
|
+
}
|
|
24
|
+
const planFilePath = path.join(this.workdir, '.ai-agent-plan.md');
|
|
25
|
+
this.state = {
|
|
26
|
+
isActive: true,
|
|
27
|
+
planFilePath,
|
|
28
|
+
taskDescription,
|
|
29
|
+
startTime: Date.now(),
|
|
30
|
+
};
|
|
31
|
+
// 创建初始计划文件
|
|
32
|
+
const initialContent = `# 实现计划
|
|
33
|
+
|
|
34
|
+
## 任务描述
|
|
35
|
+
${taskDescription}
|
|
36
|
+
|
|
37
|
+
## 分析
|
|
38
|
+
(在这里记录你的分析...)
|
|
39
|
+
|
|
40
|
+
## 实现步骤
|
|
41
|
+
1. (步骤1)
|
|
42
|
+
2. (步骤2)
|
|
43
|
+
...
|
|
44
|
+
|
|
45
|
+
## 风险和注意事项
|
|
46
|
+
- (风险1)
|
|
47
|
+
- (风险2)
|
|
48
|
+
`;
|
|
49
|
+
fs.writeFileSync(planFilePath, initialContent, 'utf-8');
|
|
50
|
+
return `已进入规划模式!
|
|
51
|
+
|
|
52
|
+
**规划文件**: ${planFilePath}
|
|
53
|
+
|
|
54
|
+
**你现在可以**:
|
|
55
|
+
- 使用 read_file, glob, grep 等工具探索代码库
|
|
56
|
+
- 在规划文件中记录你的分析和计划
|
|
57
|
+
- 使用 write_file 或 edit_file 更新计划文件
|
|
58
|
+
- 完成后使用 ExitPlanMode 工具提交计划
|
|
59
|
+
|
|
60
|
+
**注意**: 规划模式下不应执行实际的代码修改,只做探索和规划。`;
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* 退出规划模式
|
|
64
|
+
*/
|
|
65
|
+
exitPlanMode() {
|
|
66
|
+
if (!this.state?.isActive) {
|
|
67
|
+
return {
|
|
68
|
+
success: false,
|
|
69
|
+
plan: '',
|
|
70
|
+
error: '错误: 当前不在规划模式中',
|
|
71
|
+
};
|
|
72
|
+
}
|
|
73
|
+
// 读取计划文件
|
|
74
|
+
let planContent = '';
|
|
75
|
+
try {
|
|
76
|
+
if (fs.existsSync(this.state.planFilePath)) {
|
|
77
|
+
planContent = fs.readFileSync(this.state.planFilePath, 'utf-8');
|
|
78
|
+
}
|
|
79
|
+
else {
|
|
80
|
+
return {
|
|
81
|
+
success: false,
|
|
82
|
+
plan: '',
|
|
83
|
+
error: '错误: 计划文件不存在',
|
|
84
|
+
};
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
catch (error) {
|
|
88
|
+
return {
|
|
89
|
+
success: false,
|
|
90
|
+
plan: '',
|
|
91
|
+
error: `错误: 无法读取计划文件: ${error}`,
|
|
92
|
+
};
|
|
93
|
+
}
|
|
94
|
+
const elapsed = (Date.now() - this.state.startTime) / 1000;
|
|
95
|
+
// 清除状态
|
|
96
|
+
this.state = null;
|
|
97
|
+
return {
|
|
98
|
+
success: true,
|
|
99
|
+
plan: `规划完成!(用时 ${elapsed.toFixed(1)}s)
|
|
100
|
+
|
|
101
|
+
${planContent}
|
|
102
|
+
|
|
103
|
+
---
|
|
104
|
+
|
|
105
|
+
请审阅上述计划。如果同意,我将开始实施。`,
|
|
106
|
+
};
|
|
107
|
+
}
|
|
108
|
+
/**
|
|
109
|
+
* 检查是否在规划模式中
|
|
110
|
+
*/
|
|
111
|
+
isInPlanMode() {
|
|
112
|
+
return this.state?.isActive ?? false;
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* 获取计划文件路径
|
|
116
|
+
*/
|
|
117
|
+
getPlanFilePath() {
|
|
118
|
+
return this.state?.planFilePath ?? null;
|
|
119
|
+
}
|
|
120
|
+
/**
|
|
121
|
+
* 获取任务描述
|
|
122
|
+
*/
|
|
123
|
+
getTaskDescription() {
|
|
124
|
+
return this.state?.taskDescription ?? null;
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
/**
|
|
128
|
+
* 全局实例
|
|
129
|
+
*/
|
|
130
|
+
let planModeManagerInstance = null;
|
|
131
|
+
export function getPlanModeManager(workdir) {
|
|
132
|
+
if (!planModeManagerInstance && workdir) {
|
|
133
|
+
planModeManagerInstance = new PlanModeManager(workdir);
|
|
134
|
+
}
|
|
135
|
+
if (!planModeManagerInstance) {
|
|
136
|
+
throw new Error('PlanModeManager 未初始化');
|
|
137
|
+
}
|
|
138
|
+
return planModeManagerInstance;
|
|
139
|
+
}
|
|
140
|
+
export function resetPlanModeManager() {
|
|
141
|
+
planModeManagerInstance = null;
|
|
142
|
+
}
|
|
143
|
+
//# sourceMappingURL=planMode.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"planMode.js","sourceRoot":"","sources":["../../src/core/planMode.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 项目上下文管理
|
|
3
|
+
* 提供项目级别的记忆系统,存储常用命令、代码风格偏好等
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* 项目上下文接口
|
|
7
|
+
*/
|
|
8
|
+
export interface ProjectContext {
|
|
9
|
+
/** 常用命令 */
|
|
10
|
+
commands?: {
|
|
11
|
+
build?: string;
|
|
12
|
+
test?: string;
|
|
13
|
+
lint?: string;
|
|
14
|
+
typecheck?: string;
|
|
15
|
+
dev?: string;
|
|
16
|
+
[key: string]: string | undefined;
|
|
17
|
+
};
|
|
18
|
+
/** 代码风格偏好 */
|
|
19
|
+
codeStyle?: {
|
|
20
|
+
naming?: string;
|
|
21
|
+
preferredLibraries?: string[];
|
|
22
|
+
conventions?: string[];
|
|
23
|
+
};
|
|
24
|
+
/** 代码库信息 */
|
|
25
|
+
codebaseInfo?: string;
|
|
26
|
+
/** 自定义内容 */
|
|
27
|
+
customContent?: string;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* 项目上下文管理器
|
|
31
|
+
*/
|
|
32
|
+
export declare class ProjectContextManager {
|
|
33
|
+
private workdir;
|
|
34
|
+
private projectFilePath;
|
|
35
|
+
private context;
|
|
36
|
+
constructor(workdir: string);
|
|
37
|
+
/**
|
|
38
|
+
* 加载项目上下文
|
|
39
|
+
*/
|
|
40
|
+
load(): ProjectContext | null;
|
|
41
|
+
/**
|
|
42
|
+
* 解析项目文件内容
|
|
43
|
+
*/
|
|
44
|
+
private parseProjectFile;
|
|
45
|
+
/**
|
|
46
|
+
* 生成项目上下文的提示词
|
|
47
|
+
*/
|
|
48
|
+
getContextPrompt(): string | null;
|
|
49
|
+
/**
|
|
50
|
+
* 检查项目文件是否存在
|
|
51
|
+
*/
|
|
52
|
+
exists(): boolean;
|
|
53
|
+
/**
|
|
54
|
+
* 创建初始项目文件
|
|
55
|
+
*/
|
|
56
|
+
createInitialFile(): void;
|
|
57
|
+
/**
|
|
58
|
+
* 添加命令到项目文件
|
|
59
|
+
*/
|
|
60
|
+
addCommand(name: string, command: string): void;
|
|
61
|
+
/**
|
|
62
|
+
* 获取特定命令
|
|
63
|
+
*/
|
|
64
|
+
getCommand(name: string): string | undefined;
|
|
65
|
+
}
|
|
66
|
+
export declare function getProjectContextManager(workdir?: string): ProjectContextManager;
|
|
67
|
+
export declare function resetProjectContextManager(): void;
|
|
68
|
+
//# sourceMappingURL=projectContext.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"projectContext.d.ts","sourceRoot":"","sources":["../../src/core/projectContext.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAMH;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,WAAW;IACX,QAAQ,CAAC,EAAE;QACT,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,GAAG,CAAC,EAAE,MAAM,CAAC;QACb,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC;KACnC,CAAC;IACF,aAAa;IACb,SAAS,CAAC,EAAE;QACV,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,kBAAkB,CAAC,EAAE,MAAM,EAAE,CAAC;QAC9B,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;KACxB,CAAC;IACF,YAAY;IACZ,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,YAAY;IACZ,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED;;GAEG;AACH,qBAAa,qBAAqB;IAChC,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,eAAe,CAAS;IAChC,OAAO,CAAC,OAAO,CAA+B;gBAElC,OAAO,EAAE,MAAM;IAK3B;;OAEG;IACH,IAAI,IAAI,cAAc,GAAG,IAAI;IAc7B;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAoCxB;;OAEG;IACH,gBAAgB,IAAI,MAAM,GAAG,IAAI;IAsCjC;;OAEG;IACH,MAAM,IAAI,OAAO;IAIjB;;OAEG;IACH,iBAAiB,IAAI,IAAI;IAyBzB;;OAEG;IACH,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI;IAwB/C;;OAEG;IACH,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;CAI7C;AAOD,wBAAgB,wBAAwB,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,qBAAqB,CAQhF;AAED,wBAAgB,0BAA0B,IAAI,IAAI,CAEjD"}
|
|
@@ -0,0 +1,183 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 项目上下文管理
|
|
3
|
+
* 提供项目级别的记忆系统,存储常用命令、代码风格偏好等
|
|
4
|
+
*/
|
|
5
|
+
import fs from 'fs-extra';
|
|
6
|
+
import path from 'node:path';
|
|
7
|
+
import { PROJECT_FILE } from './constants.js';
|
|
8
|
+
/**
|
|
9
|
+
* 项目上下文管理器
|
|
10
|
+
*/
|
|
11
|
+
export class ProjectContextManager {
|
|
12
|
+
workdir;
|
|
13
|
+
projectFilePath;
|
|
14
|
+
context = null;
|
|
15
|
+
constructor(workdir) {
|
|
16
|
+
this.workdir = workdir;
|
|
17
|
+
this.projectFilePath = path.join(workdir, PROJECT_FILE);
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* 加载项目上下文
|
|
21
|
+
*/
|
|
22
|
+
load() {
|
|
23
|
+
if (!fs.existsSync(this.projectFilePath)) {
|
|
24
|
+
return null;
|
|
25
|
+
}
|
|
26
|
+
try {
|
|
27
|
+
const content = fs.readFileSync(this.projectFilePath, 'utf-8');
|
|
28
|
+
this.context = this.parseProjectFile(content);
|
|
29
|
+
return this.context;
|
|
30
|
+
}
|
|
31
|
+
catch {
|
|
32
|
+
return null;
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* 解析项目文件内容
|
|
37
|
+
*/
|
|
38
|
+
parseProjectFile(content) {
|
|
39
|
+
const context = {};
|
|
40
|
+
// 解析命令部分
|
|
41
|
+
const commandsMatch = content.match(/## 常用命令\n([\s\S]*?)(?=\n## |$)/);
|
|
42
|
+
if (commandsMatch) {
|
|
43
|
+
context.commands = {};
|
|
44
|
+
const lines = commandsMatch[1].trim().split('\n');
|
|
45
|
+
for (const line of lines) {
|
|
46
|
+
const match = line.match(/^- \*\*(\w+)\*\*:\s*`(.+)`/);
|
|
47
|
+
if (match) {
|
|
48
|
+
context.commands[match[1].toLowerCase()] = match[2];
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
// 解析代码风格部分
|
|
53
|
+
const styleMatch = content.match(/## 代码风格\n([\s\S]*?)(?=\n## |$)/);
|
|
54
|
+
if (styleMatch) {
|
|
55
|
+
context.codeStyle = {
|
|
56
|
+
conventions: styleMatch[1].trim().split('\n').filter(l => l.startsWith('- ')).map(l => l.slice(2)),
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
// 解析代码库信息部分
|
|
60
|
+
const infoMatch = content.match(/## 代码库信息\n([\s\S]*?)(?=\n## |$)/);
|
|
61
|
+
if (infoMatch) {
|
|
62
|
+
context.codebaseInfo = infoMatch[1].trim();
|
|
63
|
+
}
|
|
64
|
+
// 保存原始内容
|
|
65
|
+
context.customContent = content;
|
|
66
|
+
return context;
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* 生成项目上下文的提示词
|
|
70
|
+
*/
|
|
71
|
+
getContextPrompt() {
|
|
72
|
+
const context = this.context || this.load();
|
|
73
|
+
if (!context) {
|
|
74
|
+
return null;
|
|
75
|
+
}
|
|
76
|
+
const sections = ['# 项目上下文\n'];
|
|
77
|
+
// 添加命令信息
|
|
78
|
+
if (context.commands && Object.keys(context.commands).length > 0) {
|
|
79
|
+
sections.push('## 常用命令\n');
|
|
80
|
+
for (const [name, cmd] of Object.entries(context.commands)) {
|
|
81
|
+
if (cmd) {
|
|
82
|
+
sections.push(`- **${name}**: \`${cmd}\``);
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
sections.push('');
|
|
86
|
+
}
|
|
87
|
+
// 添加代码风格信息
|
|
88
|
+
if (context.codeStyle?.conventions?.length) {
|
|
89
|
+
sections.push('## 代码风格\n');
|
|
90
|
+
for (const convention of context.codeStyle.conventions) {
|
|
91
|
+
sections.push(`- ${convention}`);
|
|
92
|
+
}
|
|
93
|
+
sections.push('');
|
|
94
|
+
}
|
|
95
|
+
// 添加代码库信息
|
|
96
|
+
if (context.codebaseInfo) {
|
|
97
|
+
sections.push('## 代码库信息\n');
|
|
98
|
+
sections.push(context.codebaseInfo);
|
|
99
|
+
sections.push('');
|
|
100
|
+
}
|
|
101
|
+
return sections.join('\n');
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* 检查项目文件是否存在
|
|
105
|
+
*/
|
|
106
|
+
exists() {
|
|
107
|
+
return fs.existsSync(this.projectFilePath);
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* 创建初始项目文件
|
|
111
|
+
*/
|
|
112
|
+
createInitialFile() {
|
|
113
|
+
const initialContent = `# ${path.basename(this.workdir)} 项目配置
|
|
114
|
+
|
|
115
|
+
## 常用命令
|
|
116
|
+
|
|
117
|
+
- **build**: \`npm run build\`
|
|
118
|
+
- **test**: \`npm test\`
|
|
119
|
+
- **lint**: \`npm run lint\`
|
|
120
|
+
- **dev**: \`npm run dev\`
|
|
121
|
+
|
|
122
|
+
## 代码风格
|
|
123
|
+
|
|
124
|
+
- 使用 TypeScript
|
|
125
|
+
- 使用 ESLint 进行代码检查
|
|
126
|
+
- 使用 Prettier 进行代码格式化
|
|
127
|
+
|
|
128
|
+
## 代码库信息
|
|
129
|
+
|
|
130
|
+
(在这里添加关于代码库结构和组织的有用信息)
|
|
131
|
+
`;
|
|
132
|
+
fs.ensureDirSync(path.dirname(this.projectFilePath));
|
|
133
|
+
fs.writeFileSync(this.projectFilePath, initialContent, 'utf-8');
|
|
134
|
+
}
|
|
135
|
+
/**
|
|
136
|
+
* 添加命令到项目文件
|
|
137
|
+
*/
|
|
138
|
+
addCommand(name, command) {
|
|
139
|
+
if (!this.exists()) {
|
|
140
|
+
this.createInitialFile();
|
|
141
|
+
}
|
|
142
|
+
let content = fs.readFileSync(this.projectFilePath, 'utf-8');
|
|
143
|
+
// 检查命令是否已存在
|
|
144
|
+
const commandRegex = new RegExp(`^- \\*\\*${name}\\*\\*:.*$`, 'm');
|
|
145
|
+
if (commandRegex.test(content)) {
|
|
146
|
+
// 更新现有命令
|
|
147
|
+
content = content.replace(commandRegex, `- **${name}**: \`${command}\``);
|
|
148
|
+
}
|
|
149
|
+
else {
|
|
150
|
+
// 添加新命令
|
|
151
|
+
const insertPoint = content.indexOf('## 代码风格');
|
|
152
|
+
if (insertPoint > 0) {
|
|
153
|
+
content = content.slice(0, insertPoint) + `- **${name}**: \`${command}\`\n\n` + content.slice(insertPoint);
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
fs.writeFileSync(this.projectFilePath, content, 'utf-8');
|
|
157
|
+
this.context = null; // 清除缓存
|
|
158
|
+
}
|
|
159
|
+
/**
|
|
160
|
+
* 获取特定命令
|
|
161
|
+
*/
|
|
162
|
+
getCommand(name) {
|
|
163
|
+
const context = this.context || this.load();
|
|
164
|
+
return context?.commands?.[name.toLowerCase()];
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
/**
|
|
168
|
+
* 全局实例
|
|
169
|
+
*/
|
|
170
|
+
let projectContextInstance = null;
|
|
171
|
+
export function getProjectContextManager(workdir) {
|
|
172
|
+
if (!projectContextInstance && workdir) {
|
|
173
|
+
projectContextInstance = new ProjectContextManager(workdir);
|
|
174
|
+
}
|
|
175
|
+
if (!projectContextInstance) {
|
|
176
|
+
throw new Error('ProjectContextManager 未初始化');
|
|
177
|
+
}
|
|
178
|
+
return projectContextInstance;
|
|
179
|
+
}
|
|
180
|
+
export function resetProjectContextManager() {
|
|
181
|
+
projectContextInstance = null;
|
|
182
|
+
}
|
|
183
|
+
//# sourceMappingURL=projectContext.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"projectContext.js","sourceRoot":"","sources":["../../src/core/projectContext.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 系统提示词生成 - 模块化设计
|
|
3
|
+
* 将提示词拆分为可组合的模块,支持动态组装
|
|
4
|
+
*/
|
|
5
|
+
import type { AgentType } from './types.js';
|
|
6
|
+
type OutputStyleName = 'default' | 'explanatory' | 'learning';
|
|
7
|
+
export declare function getCurrentOutputStyle(): OutputStyleName;
|
|
8
|
+
export declare function setOutputStyle(style: OutputStyleName): void;
|
|
9
|
+
/**
|
|
10
|
+
* 获取环境信息
|
|
11
|
+
*/
|
|
12
|
+
export declare function getEnvInfo(workdir: string): string;
|
|
13
|
+
/**
|
|
14
|
+
* 创建系统提示词(模块化组合)
|
|
15
|
+
*/
|
|
16
|
+
export declare function createSystemPrompt(workdir: string, skillDescriptions: string, agentDescriptions: string): string;
|
|
17
|
+
/**
|
|
18
|
+
* 创建子代理的系统提示词
|
|
19
|
+
*/
|
|
20
|
+
export declare function createSubagentSystemPrompt(workdir: string, agentType: AgentType, taskDescription: string): string;
|
|
21
|
+
/**
|
|
22
|
+
* 获取代理类型描述(用于系统提示词)
|
|
23
|
+
*/
|
|
24
|
+
export declare function getAgentDescriptions(): string;
|
|
25
|
+
export {};
|
|
26
|
+
//# sourceMappingURL=prompts.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prompts.d.ts","sourceRoot":"","sources":["../../src/core/prompts.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAI5C,KAAK,eAAe,GAAG,SAAS,GAAG,aAAa,GAAG,UAAU,CAAC;AAG9D,wBAAgB,qBAAqB,IAAI,eAAe,CAEvD;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE,eAAe,GAAG,IAAI,CAE3D;AA2CD;;GAEG;AACH,wBAAgB,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAOlD;AA+JD;;GAEG;AACH,wBAAgB,kBAAkB,CAChC,OAAO,EAAE,MAAM,EACf,iBAAiB,EAAE,MAAM,EACzB,iBAAiB,EAAE,MAAM,GACxB,MAAM,CAuCR;AAED;;GAEG;AACH,wBAAgB,0BAA0B,CACxC,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,SAAS,EACpB,eAAe,EAAE,MAAM,GACtB,MAAM,CAWR;AAED;;GAEG;AACH,wBAAgB,oBAAoB,IAAI,MAAM,CAE7C"}
|