新增環境變數配置範本,提供用戶自定義任務提示詞的能力,並更新相關文檔以說明如何透過環境變數調整AI助手的行為。

This commit is contained in:
siage 2025-04-15 19:02:28 +08:00
parent 5bd4be7489
commit 5578e111b0
33 changed files with 2951 additions and 696 deletions

56
.env.example Normal file
View File

@ -0,0 +1,56 @@
# MCP Shrimp Task Manager Environment Variables Configuration Example
# Copy this file to .env and customize as needed
# ============================
# Basic Configuration
# ============================
# Task data storage directory (absolute path)
DATA_DIR=
# ============================
# Prompt Customization
# ============================
# Task Planning (planTask) - Complete Override
# MCP_PROMPT_PLAN_TASK=
# Task Planning (planTask) - Append Content
# MCP_PROMPT_PLAN_TASK_APPEND=
# Task Analysis (analyzeTask) - Complete Override
# MCP_PROMPT_ANALYZE_TASK=
# Task Analysis (analyzeTask) - Append Content
# MCP_PROMPT_ANALYZE_TASK_APPEND=
# Solution Evaluation (reflectTask) - Complete Override or Append
# MCP_PROMPT_REFLECT_TASK=
# MCP_PROMPT_REFLECT_TASK_APPEND=
# Task Breakdown (splitTasks) - Complete Override or Append
# MCP_PROMPT_SPLIT_TASKS=
# MCP_PROMPT_SPLIT_TASKS_APPEND=
# Task Execution (executeTask) - Complete Override or Append
# MCP_PROMPT_EXECUTE_TASK=
# MCP_PROMPT_EXECUTE_TASK_APPEND=
# Task Verification (verifyTask) - Complete Override or Append
# MCP_PROMPT_VERIFY_TASK=
# MCP_PROMPT_VERIFY_TASK_APPEND=
# Task Completion (completeTask) - Complete Override or Append
# MCP_PROMPT_COMPLETE_TASK=
# MCP_PROMPT_COMPLETE_TASK_APPEND=
# List Tasks (listTasks) - Complete Override
# MCP_PROMPT_LIST_TASKS=
# Query Task (queryTask) - Complete Override or Append
# MCP_PROMPT_QUERY_TASK=
# MCP_PROMPT_QUERY_TASK_APPEND=
# Get Task Details (getTaskDetail) - Complete Override or Append
# MCP_PROMPT_GET_TASK_DETAIL=
# MCP_PROMPT_GET_TASK_DETAIL_APPEND=

View File

@ -57,6 +57,7 @@ Through effective use of the task memory function, the system can continuously a
## 📚 Documentation Resources
- [System Architecture](docs/en/architecture.md): Detailed system design and data flow explanation
- [Prompt Customization Guide](docs/en/prompt-customization.md): Instructions for customizing tool prompts via environment variables
## 🔧 Installation and Usage
@ -139,6 +140,33 @@ The **DATA_DIR parameter** is the directory where Shrimp Task Manager stores tas
> - Inconsistent application behavior across different environments
> - System crashes or failure to start
### 🔧 Environment Variable Configuration
Shrimp Task Manager supports customizing prompt behavior through environment variables, allowing you to fine-tune AI assistant responses without modifying code. You can set these variables in the configuration or through an `.env` file:
```json
{
"mcpServers": {
"shrimp-task-manager": {
"command": "node",
"args": ["/path/to/mcp-shrimp-task-manager/dist/index.js"],
"env": {
"DATA_DIR": "/path/to/project/data",
"MCP_PROMPT_PLAN_TASK": "Custom planning guidance...",
"MCP_PROMPT_EXECUTE_TASK_APPEND": "Additional execution instructions..."
}
}
}
}
```
There are two customization methods:
- **Override Mode** (`MCP_PROMPT_[FUNCTION_NAME]`): Completely replace the default prompt
- **Append Mode** (`MCP_PROMPT_[FUNCTION_NAME]_APPEND`): Add content to the existing prompt
For detailed instructions on customizing prompts, including supported parameters and examples, see the [Prompt Customization Guide](docs/en/prompt-customization.md).
## 💡 System Prompt Guidance
### Cursor IDE Configuration

View File

@ -0,0 +1,256 @@
[English](../en/prompt-customization.md) | [中文](../zh/prompt-customization.md)
# Prompt Customization Guide
## Overview
This system allows users to customize the prompt content for each tool function through environment variables. This provides high flexibility, enabling you to adjust the AI assistant's behavior according to specific needs without modifying the code. There are two customization methods:
1. **Override Mode**: Completely replace the original prompt
2. **Append Mode**: Add new content based on the existing prompt
## Environment Variable Naming Rules
- Override Mode: `MCP_PROMPT_[FUNCTION_NAME]`
- Append Mode: `MCP_PROMPT_[FUNCTION_NAME]_APPEND`
Where `[FUNCTION_NAME]` is the name of the tool function in uppercase. For example, for the task planning function `planTask`, the corresponding environment variable name is `MCP_PROMPT_PLAN_TASK`.
## Supported Tool Functions
All major functions in the system support prompt customization through environment variables:
| Function Name | Environment Variable Prefix | Description |
| --------------- | ---------------------------- | ------------------- |
| `planTask` | `MCP_PROMPT_PLAN_TASK` | Task planning |
| `analyzeTask` | `MCP_PROMPT_ANALYZE_TASK` | Task analysis |
| `reflectTask` | `MCP_PROMPT_REFLECT_TASK` | Solution evaluation |
| `splitTasks` | `MCP_PROMPT_SPLIT_TASKS` | Task splitting |
| `executeTask` | `MCP_PROMPT_EXECUTE_TASK` | Task execution |
| `verifyTask` | `MCP_PROMPT_VERIFY_TASK` | Task verification |
| `completeTask` | `MCP_PROMPT_COMPLETE_TASK` | Task completion |
| `listTasks` | `MCP_PROMPT_LIST_TASKS` | List tasks |
| `queryTask` | `MCP_PROMPT_QUERY_TASK` | Query tasks |
| `getTaskDetail` | `MCP_PROMPT_GET_TASK_DETAIL` | Get task details |
## Environment Variable Configuration Methods
There are two main configuration methods:
### 1. Using `.env` File
Use the `.env` file to set environment variables at the project level:
1. Copy `.env.example` to `.env` in the project root directory
2. Add the required environment variable configurations
3. The application will automatically load these environment variables when starting
```
# .env file example
MCP_PROMPT_PLAN_TASK=Custom prompt content
MCP_PROMPT_ANALYZE_TASK=Custom analysis prompt content
```
> Note: Ensure the `.env` file is ignored in version control (add to `.gitignore`), especially when it contains sensitive information.
### 2. Direct Configuration in mcp.json
You can also set environment variables directly in the Cursor IDE's `mcp.json` configuration file, eliminating the need for a separate `.env` file:
```json
{
"mcpServers": {
"shrimp-task-manager": {
"command": "node",
"args": ["/path/to/mcp-shrimp-task-manager/dist/index.js"],
"env": {
"DATA_DIR": "/path/to/project/data",
"MCP_PROMPT_PLAN_TASK": "Custom task planning prompt",
"MCP_PROMPT_EXECUTE_TASK_APPEND": "Additional execution guidance"
}
}
}
}
```
This method has the advantage of keeping prompt configurations together with other MCP configurations, which is particularly useful when different projects require different prompts.
## Usage Examples
### Override Mode Example
```
# In .env file - completely replace the PLAN_TASK prompt
MCP_PROMPT_PLAN_TASK=## Custom Task Planning\n\nPlease plan the task based on the following information:\n\n{description}\n\nRequirements: {requirements}\n
```
Or configure in mcp.json:
```json
"env": {
"MCP_PROMPT_PLAN_TASK": "## Custom Task Planning\n\nPlease plan the task based on the following information:\n\n{description}\n\nRequirements: {requirements}\n"
}
```
### Append Mode Example
```
# In .env file - append content after the original PLAN_TASK prompt
MCP_PROMPT_PLAN_TASK_APPEND=\n\n## Additional Guidance\n\nPlease pay special attention to the following:\n1. Prioritize task dependencies\n2. Minimize task coupling
```
Or configure in mcp.json:
```json
"env": {
"MCP_PROMPT_PLAN_TASK_APPEND": "\n\n## Additional Guidance\n\nPlease pay special attention to the following:\n1. Prioritize task dependencies\n2. Minimize task coupling"
}
```
## Dynamic Parameter Support
Custom prompts can also use defined dynamic parameters by using the `{paramName}` syntax. The system will replace these placeholders with actual parameter values during processing.
The parameters supported by each function are as follows:
### planTask Supported Parameters
- `{description}` - Task description
- `{requirements}` - Task requirements
- `{existingTasksReference}` - Whether to reference existing tasks
- `{completedTasks}` - List of completed tasks
- `{pendingTasks}` - List of pending tasks
- `{memoryDir}` - Task memory storage directory
### analyzeTask Supported Parameters
- `{summary}` - Task summary
- `{initialConcept}` - Initial concept
- `{previousAnalysis}` - Previous analysis results
### reflectTask Supported Parameters
- `{summary}` - Task summary
- `{analysis}` - Analysis results
### splitTasks Supported Parameters
- `{updateMode}` - Update mode
- `{createdTasks}` - Created tasks
- `{allTasks}` - All tasks
### executeTask Supported Parameters
- `{task}` - Task details
- `{complexityAssessment}` - Complexity assessment results
- `{relatedFilesSummary}` - Related files summary
- `{dependencyTasks}` - Dependency tasks
- `{potentialFiles}` - Potentially related files
### verifyTask Supported Parameters
- `{task}` - Task details
### completeTask Supported Parameters
- `{task}` - Task details
- `{completionTime}` - Completion time
### listTasks Supported Parameters
- `{status}` - Task status
- `{tasks}` - Tasks grouped by status
- `{allTasks}` - All tasks
### queryTask Supported Parameters
- `{query}` - Query content
- `{isId}` - Whether it's an ID query
- `{tasks}` - Query results
- `{totalTasks}` - Total number of results
- `{page}` - Current page number
- `{pageSize}` - Page size
- `{totalPages}` - Total number of pages
### getTaskDetail Supported Parameters
- `{taskId}` - Task ID
- `{task}` - Task details
- `{error}` - Error message (if any)
## Advanced Customization Cases
### Example 1: Add Brand Customization Prompts
Suppose you want to add company-specific brand information and guidelines to all task execution guides:
```
# In .env file
MCP_PROMPT_EXECUTE_TASK_APPEND=\n\n## Company-Specific Guidelines\n\nWhen executing tasks, please follow these principles:\n1. Keep code consistent with company style guide\n2. All new features must have corresponding unit tests\n3. Documentation must use company standard templates\n4. Ensure all user interface elements comply with brand design specifications
```
Or configure in mcp.json:
```json
"env": {
"MCP_PROMPT_EXECUTE_TASK_APPEND": "\n\n## Company-Specific Guidelines\n\nWhen executing tasks, please follow these principles:\n1. Keep code consistent with company style guide\n2. All new features must have corresponding unit tests\n3. Documentation must use company standard templates\n4. Ensure all user interface elements comply with brand design specifications"
}
```
### Example 2: Adjust Task Analysis Style
Suppose you want to make task analysis more security-oriented:
```
# In .env file
MCP_PROMPT_ANALYZE_TASK=## Security-Oriented Task Analysis\n\nPlease conduct a comprehensive security analysis for the following task:\n\n**Task Summary:**\n{summary}\n\n**Initial Concept:**\n{initialConcept}\n\nDuring the analysis, please pay special attention to:\n1. Code injection risks\n2. Permission management issues\n3. Data validation and sanitization\n4. Security risks of third-party dependencies\n5. Potential configuration errors\n\nFor each potential issue, please provide:\n- Issue description\n- Impact level (Low/Medium/High)\n- Recommended solution\n\n{previousAnalysis}
```
Or configure in mcp.json:
```json
"env": {
"MCP_PROMPT_ANALYZE_TASK": "## Security-Oriented Task Analysis\n\nPlease conduct a comprehensive security analysis for the following task:\n\n**Task Summary:**\n{summary}\n\n**Initial Concept:**\n{initialConcept}\n\nDuring the analysis, please pay special attention to:\n1. Code injection risks\n2. Permission management issues\n3. Data validation and sanitization\n4. Security risks of third-party dependencies\n5. Potential configuration errors\n\nFor each potential issue, please provide:\n- Issue description\n- Impact level (Low/Medium/High)\n- Recommended solution\n\n{previousAnalysis}"
}
```
### Example 3: Simplify Task List Display
If you find the default task list too detailed, you can simplify the display:
```
# In .env file
MCP_PROMPT_LIST_TASKS=# Task Overview\n\n## Pending Tasks\n{tasks.pending}\n\n## In-Progress Tasks\n{tasks.in_progress}\n\n## Completed Tasks\n{tasks.completed}
```
Or configure in mcp.json:
```json
"env": {
"MCP_PROMPT_LIST_TASKS": "# Task Overview\n\n## Pending Tasks\n{tasks.pending}\n\n## In-Progress Tasks\n{tasks.in_progress}\n\n## Completed Tasks\n{tasks.completed}"
}
```
## Best Practices
1. **Incremental Adjustments**: Start with small changes and ensure the system still works properly after each modification.
2. **Save Configurations**: Save effective environment variable configurations to the project's `.env.example` file for team members to reference.
3. **Mind the Format**: Ensure proper line breaks and formatting in prompts, especially for environment variables enclosed in quotes.
4. **Test and Validate**: Test custom prompts in different scenarios to ensure they work properly in various situations.
5. **Consider Task Flow**: When modifying prompts, consider the entire task flow to ensure consistency between different stages.
## Troubleshooting
- **Environment Variables Not Taking Effect**: Ensure you have correctly set the environment variables and restarted the application after setting.
- **Format Issues**: Check if line breaks and special characters in environment variables are properly escaped.
- **Parameter Replacement Failure**: Ensure the parameter names you use match those supported by the system, including case sensitivity.
- **Restore Default Settings**: If custom prompts cause issues, you can delete the corresponding environment variables to restore default settings.
## Appendix: Default Prompt Reference

View File

@ -53,8 +53,8 @@
>Shrimp Task Manager</span
>
</div>
<div class="hidden md:flex items-center">
<div class="flex space-x-6">
<div class="hidden xl:flex items-center">
<div class="flex space-x-5">
<a
href="#pain-points"
class="hover:text-blue-600 transition"
@ -73,6 +73,12 @@
data-i18n="nav.workflow"
>工作流程</a
>
<a
href="#prompt-customization"
class="hover:text-blue-600 transition"
data-i18n="nav.prompt-custom"
>提示詞配置</a
>
<a
href="#installation"
class="hover:text-blue-600 transition"
@ -113,7 +119,7 @@
</button>
</div>
</div>
<button class="md:hidden" id="menu-toggle">
<button class="xl:hidden" id="menu-toggle">
<svg
xmlns="http://www.w3.org/2000/svg"
class="h-6 w-6"
@ -154,6 +160,12 @@
data-i18n="nav.workflow"
>工作流程</a
>
<a
href="#prompt-customization"
class="hover:text-blue-600 transition py-1"
data-i18n="nav.prompt-custom"
>提示詞配置</a
>
<a
href="#installation"
class="hover:text-blue-600 transition py-1"
@ -1448,6 +1460,131 @@
</div>
</section>
<!-- Prompt 自定義功能區塊 -->
<section
id="prompt-customization"
class="py-16 bg-gray-50 section-padding"
>
<div class="container mx-auto px-4">
<div class="text-center mb-12" data-aos="fade-up">
<h2
class="text-3xl md:text-4xl font-bold mb-4"
data-i18n="prompt-custom.title"
>
Prompt 自定義功能
</h2>
<p
class="text-lg text-gray-600 max-w-3xl mx-auto"
data-i18n="prompt-custom.subtitle"
>
透過環境變數自定義系統提示詞,無需修改代碼即可定制 AI 助手行為
</p>
</div>
<!-- 內容區塊 - 將在後續任務中填充 -->
<div class="grid grid-cols-1 md:grid-cols-2 gap-8">
<!-- 左側:功能概述與好處 -->
<div data-aos="fade-right" data-aos-delay="100">
<div class="bg-white rounded-lg shadow-md p-6 h-full">
<h3
class="text-xl font-bold text-purple-600 mb-4"
data-i18n="prompt-custom.overview.title"
>
功能概述
</h3>
<p
class="text-gray-700 mb-6"
data-i18n="prompt-custom.overview.description"
>
Prompt 自定義允許用戶透過環境變數調整 AI
助手的行為表現,提供兩種自定義方式:完全覆蓋原始提示詞或在原有基礎上追加內容。
</p>
<h4
class="text-lg font-semibold text-gray-800 mb-3"
data-i18n="prompt-custom.benefits.title"
>
主要好處
</h4>
<ul class="list-disc ml-5 mb-4 space-y-2 text-gray-700">
<li data-i18n="prompt-custom.benefits.item1">
個性化定制:根據特定項目或領域需求調整系統行為
</li>
<li data-i18n="prompt-custom.benefits.item2">
效率提升:針對重複任務類型進行優化,減少冗余說明
</li>
<li data-i18n="prompt-custom.benefits.item3">
品牌一致性:確保輸出內容符合組織的風格指南和標準
</li>
<li data-i18n="prompt-custom.benefits.item4">
專業適應性:為特定技術領域或行業調整專業術語和標準
</li>
<li data-i18n="prompt-custom.benefits.item5">
團隊協作:統一團隊成員使用的提示詞,保證一致的工作方式
</li>
</ul>
</div>
</div>
<!-- 右側:使用方法與示例 -->
<div data-aos="fade-left" data-aos-delay="200">
<div class="bg-white rounded-lg shadow-md p-6 h-full">
<h3
class="text-xl font-bold text-purple-600 mb-4"
data-i18n="prompt-custom.usage.title"
>
使用方法
</h3>
<h4
class="text-lg font-semibold text-gray-800 mb-3"
data-i18n="prompt-custom.usage.env.title"
>
環境變數配置
</h4>
<p
class="text-gray-700 mb-4"
data-i18n="prompt-custom.usage.env.description"
>
設置環境變數來自定義各功能的提示詞,使用特定命名規則:
</p>
<div
class="mockup-code bg-gray-900 text-gray-100 p-4 rounded-lg mb-6 text-sm"
>
<pre class="whitespace-pre-wrap">
# 覆蓋模式: MCP_PROMPT_[FUNCTION_NAME]
# 追加模式: MCP_PROMPT_[FUNCTION_NAME]_APPEND
# 示例:
MCP_PROMPT_PLAN_TASK="自定義的任務規劃提示詞"
MCP_PROMPT_EXECUTE_TASK_APPEND="額外的任務執行指導"
</pre
>
</div>
<p
class="text-gray-700 mb-4"
data-i18n="prompt-custom.usage.more"
>
查看詳細文檔了解更多配置方式和參數使用說明。
</p>
<a
href="https://github.com/cjo4m06/mcp-shrimp-task-manager/tree/main/docs/en/prompt-customization.md"
class="btn btn-primary lang-specific"
data-lang-zh-tw="https://github.com/cjo4m06/mcp-shrimp-task-manager/tree/main/docs/zh/prompt-customization.md"
data-lang-en="https://github.com/cjo4m06/mcp-shrimp-task-manager/tree/main/docs/en/prompt-customization.md"
data-i18n="prompt-custom.view-docs"
>
查看完整文檔
</a>
</div>
</div>
</div>
</div>
</section>
<!-- 安裝與配置區 - 將由後續任務完成 -->
<section id="installation" class="py-16 bg-white">
<div class="container mx-auto px-4">

View File

@ -10,6 +10,7 @@ const i18n = {
"nav.github": "GitHub",
"nav.menu-button": "菜單",
"nav.logo.alt": "蝦米任務管理器標誌",
"nav.prompt-custom": "提示詞配置",
// 英雄區
"hero.title": "Shrimp Task Manager",
"hero.subtitle": "為AI編程助手提供結構化任務管理的智能系統",
@ -262,6 +263,33 @@ const i18n = {
當執行完成後必須總結摘要告知用戶結論
你一次只能執行一個任務當任務完成時除非用戶明確告知否則禁止進行下一則任務
用戶如果要求連續模式則按照順序連續執行所有任務`,
// Prompt 自定義功能區塊
"prompt-custom.title": "Prompt 自定義功能",
"prompt-custom.subtitle":
"透過環境變數自定義系統提示詞,無需修改代碼即可定制 AI 助手行為",
"prompt-custom.overview.title": "功能概述",
"prompt-custom.overview.description":
"Prompt 自定義允許用戶透過環境變數調整 AI 助手的行為表現,提供兩種自定義方式:完全覆蓋原始提示詞或在原有基礎上追加內容。",
"prompt-custom.benefits.title": "主要好處",
"prompt-custom.benefits.item1":
"個性化定制:根據特定項目或領域需求調整系統行為",
"prompt-custom.benefits.item2":
"效率提升:針對重複任務類型進行優化,減少冗余說明",
"prompt-custom.benefits.item3":
"品牌一致性:確保輸出內容符合組織的風格指南和標準",
"prompt-custom.benefits.item4":
"專業適應性:為特定技術領域或行業調整專業術語和標準",
"prompt-custom.benefits.item5":
"團隊協作:統一團隊成員使用的提示詞,保證一致的工作方式",
"prompt-custom.usage.title": "使用方法",
"prompt-custom.usage.env.title": "環境變數配置",
"prompt-custom.usage.env.description":
"設置環境變數來自定義各功能的提示詞,使用特定命名規則:",
"prompt-custom.usage.more": "查看詳細文檔了解更多配置方式和參數使用說明。",
"prompt-custom.view-docs": "查看完整文檔",
},
en: {
// 導航欄
@ -272,6 +300,7 @@ const i18n = {
"nav.github": "GitHub",
"nav.menu-button": "Menu",
"nav.logo.alt": "Shrimp Task Manager Logo",
"nav.prompt-custom": "Prompt Config",
// 英雄區
"hero.title": "Shrimp Task Manager",
"hero.subtitle":
@ -557,6 +586,34 @@ If no task is specified, use "list_tasks" to find unexecuted tasks and execute t
When the execution is completed, a summary must be given to inform the user of the conclusion.
You can only perform one task at a time, and when a task is completed, you are prohibited from performing the next task unless the user explicitly tells you to.
If the user requests "continuous mode", all tasks will be executed in sequence.`,
// Prompt 自定義功能區塊
"prompt-custom.title": "Prompt Customization",
"prompt-custom.subtitle":
"Customize AI assistant behavior through environment variables, without modifying code",
"prompt-custom.overview.title": "Feature Overview",
"prompt-custom.overview.description":
"Prompt customization allows users to adjust AI assistant behavior through environment variables, providing two customization methods: completely override original prompts or append content to existing ones.",
"prompt-custom.benefits.title": "Key Benefits",
"prompt-custom.benefits.item1":
"Personalized customization: Adjust system behavior for specific projects or domains",
"prompt-custom.benefits.item2":
"Efficiency improvement: Optimize for repetitive task types, reducing redundant instructions",
"prompt-custom.benefits.item3":
"Brand consistency: Ensure output content adheres to organization style guides and standards",
"prompt-custom.benefits.item4":
"Professional adaptability: Adjust terminology and standards for specific technical fields or industries",
"prompt-custom.benefits.item5":
"Team collaboration: Unify prompts used by team members, ensuring consistent workflow",
"prompt-custom.usage.title": "Usage Guide",
"prompt-custom.usage.env.title": "Environment Variables Configuration",
"prompt-custom.usage.env.description":
"Set environment variables to customize prompts for each function, using specific naming conventions:",
"prompt-custom.usage.more":
"View detailed documentation for more configuration methods and parameter usage.",
"prompt-custom.view-docs": "View Complete Documentation",
},
};
@ -577,6 +634,16 @@ function applyTranslations(lang) {
console.warn(`未找到翻譯鍵: ${key}`);
}
});
// 處理語言特定的連結
document.querySelectorAll(".lang-specific").forEach((element) => {
if (element.hasAttribute(`data-lang-${lang}`)) {
const langSpecificHref = element.getAttribute(`data-lang-${lang}`);
if (langSpecificHref) {
element.setAttribute("href", langSpecificHref);
}
}
});
}
// 設置語言並儲存用戶偏好

View File

@ -57,6 +57,7 @@
## 📚 文件資源
- [系統架構](architecture.md):詳細的系統設計與數據流說明
- [提示詞自定義指南](prompt-customization.md):透過環境變數自定義工具提示詞的說明
## 🔧 安裝與使用
@ -139,6 +140,33 @@ npm run build
> - 應用程式在不同環境下行為不一致
> - 系統崩潰或無法啟動
### 🔧 環境變數配置
蝦米任務管理器支援透過環境變數自定義提示詞行為,讓您無需修改程式碼即可微調 AI 助手的回應。您可以在配置中或透過 `.env` 文件設置這些變數:
```json
{
"mcpServers": {
"shrimp-task-manager": {
"command": "node",
"args": ["/path/to/mcp-shrimp-task-manager/dist/index.js"],
"env": {
"DATA_DIR": "/path/to/project/data",
"MCP_PROMPT_PLAN_TASK": "自定義規劃指導...",
"MCP_PROMPT_EXECUTE_TASK_APPEND": "附加執行說明..."
}
}
}
}
```
提供兩種自定義方式:
- **覆蓋模式**`MCP_PROMPT_[FUNCTION_NAME]`):完全替換預設提示詞
- **追加模式**`MCP_PROMPT_[FUNCTION_NAME]_APPEND`):在現有提示詞基礎上增加內容
有關自定義提示詞的詳細說明,包括支援的參數和範例,請參閱[提示詞自定義指南](prompt-customization.md)。
## 💡 系統提示詞指導
### Cursor IDE 配置

View File

@ -0,0 +1,266 @@
[English](../en/prompt-customization.md) | [中文](../zh/prompt-customization.md)
# Prompt 自定義指南
## 概述
本系統允許用戶透過環境變數自定義各個工具函式的指導內容prompt。這提供了高度的彈性使您能夠根據特定需求調整 AI 助手的行為表現,而不需要修改程式碼。有兩種自定義方式:
1. **覆蓋模式**:完全取代原本的 prompt
2. **追加模式**:在原有 prompt 的基礎上增加新內容
## 環境變數命名規則
- 覆蓋模式:`MCP_PROMPT_[FUNCTION_NAME]`
- 追加模式:`MCP_PROMPT_[FUNCTION_NAME]_APPEND`
其中 `[FUNCTION_NAME]` 是工具函式的名稱,大寫形式。例如,對於任務規劃功能 `planTask`,相應的環境變數名稱為 `MCP_PROMPT_PLAN_TASK`
## 支援的工具函式
系統中的所有主要功能都支援透過環境變數自定義 prompt
| 功能名稱 | 環境變數前綴 | 說明 |
| --------------- | ---------------------------- | ------------ |
| `planTask` | `MCP_PROMPT_PLAN_TASK` | 任務規劃 |
| `analyzeTask` | `MCP_PROMPT_ANALYZE_TASK` | 任務分析 |
| `reflectTask` | `MCP_PROMPT_REFLECT_TASK` | 方案評估 |
| `splitTasks` | `MCP_PROMPT_SPLIT_TASKS` | 任務拆分 |
| `executeTask` | `MCP_PROMPT_EXECUTE_TASK` | 任務執行 |
| `verifyTask` | `MCP_PROMPT_VERIFY_TASK` | 任務驗證 |
| `completeTask` | `MCP_PROMPT_COMPLETE_TASK` | 任務完成 |
| `listTasks` | `MCP_PROMPT_LIST_TASKS` | 列出任務 |
| `queryTask` | `MCP_PROMPT_QUERY_TASK` | 查詢任務 |
| `getTaskDetail` | `MCP_PROMPT_GET_TASK_DETAIL` | 獲取任務詳情 |
## 環境變數配置方法
有兩種主要的配置方式:
### 1. 透過 `.env` 文件設置環境變數
1. 在專案根目錄複製 `.env.example` 改名為 `.env` 文件
2. 添加所需的環境變數配置
3. 應用程式啟動時會自動載入這些環境變數
```
# .env 文件範例
MCP_PROMPT_PLAN_TASK=自定義的 prompt 內容
MCP_PROMPT_ANALYZE_TASK=自定義的分析 prompt 內容
```
> 注意:確保 `.env` 文件在版本控制中被忽略(添加到 `.gitignore`),特別是當它包含敏感信息時。
### 2. 直接在 mcp.json 配置文件中設置
您也可以直接在 Cursor IDE 的 `mcp.json` 配置文件中設置環境變數,這樣無需另外創建 `.env` 文件:
```json
{
"mcpServers": {
"shrimp-task-manager": {
"command": "node",
"args": ["/path/to/mcp-shrimp-task-manager/dist/index.js"],
"env": {
"DATA_DIR": "/path/to/project/data",
"MCP_PROMPT_PLAN_TASK": "自定義的任務規劃提示詞",
"MCP_PROMPT_EXECUTE_TASK_APPEND": "額外的任務執行指導"
}
}
}
}
```
這種方式的優點是可以將提示詞配置與其他 MCP 配置放在一起管理,特別適合需要針對不同專案使用不同提示詞的情況。
## 使用範例
### 覆蓋模式範例
```
# .env 文件中完全替換 PLAN_TASK 的 prompt
MCP_PROMPT_PLAN_TASK=## 自定義任務規劃\n\n請根據以下資訊規劃任務\n\n{description}\n\n要求{requirements}\n
```
或在 mcp.json 中配置:
```json
"env": {
"MCP_PROMPT_PLAN_TASK": "## 自定義任務規劃\n\n請根據以下資訊規劃任務\n\n{description}\n\n要求{requirements}\n"
}
```
### 追加模式範例
```
# .env 文件中在 PLAN_TASK 原有 prompt 後追加內容
MCP_PROMPT_PLAN_TASK_APPEND=\n\n## 額外指導\n\n請特別注意以下事項\n1. 優先考慮任務間的依賴關係\n2. 盡量減少任務耦合度
```
或在 mcp.json 中配置:
```json
"env": {
"MCP_PROMPT_PLAN_TASK_APPEND": "\n\n## 額外指導\n\n請特別注意以下事項\n1. 優先考慮任務間的依賴關係\n2. 盡量減少任務耦合度"
}
```
## 動態參數支援
自定義 prompt 也可以使用定義的動態參數,方式是使用 `{paramName}` 語法。系統會在處理時將這些佔位符替換為實際的參數值。
各個函式支援的參數如下:
### planTask 支援的參數
- `{description}` - 任務描述
- `{requirements}` - 任務要求
- `{existingTasksReference}` - 是否參考現有任務
- `{completedTasks}` - 已完成任務列表
- `{pendingTasks}` - 待處理任務列表
- `{memoryDir}` - 任務記憶儲存目錄
### analyzeTask 支援的參數
- `{summary}` - 任務摘要
- `{initialConcept}` - 初始概念
- `{previousAnalysis}` - 先前分析結果
### reflectTask 支援的參數
- `{summary}` - 任務摘要
- `{analysis}` - 分析結果
### splitTasks 支援的參數
- `{updateMode}` - 更新模式
- `{createdTasks}` - 創建的任務
- `{allTasks}` - 所有任務
### executeTask 支援的參數
- `{task}` - 任務詳情
- `{complexityAssessment}` - 複雜度評估結果
- `{relatedFilesSummary}` - 相關文件摘要
- `{dependencyTasks}` - 依賴任務
- `{potentialFiles}` - 可能相關的文件
### verifyTask 支援的參數
- `{task}` - 任務詳情
### completeTask 支援的參數
- `{task}` - 任務詳情
- `{completionTime}` - 完成時間
### listTasks 支援的參數
- `{status}` - 任務狀態
- `{tasks}` - 按狀態分組的任務
- `{allTasks}` - 所有任務
### queryTask 支援的參數
- `{query}` - 查詢內容
- `{isId}` - 是否為 ID 查詢
- `{tasks}` - 查詢結果
- `{totalTasks}` - 總結果數
- `{page}` - 當前頁碼
- `{pageSize}` - 每頁大小
- `{totalPages}` - 總頁數
### getTaskDetail 支援的參數
- `{taskId}` - 任務 ID
- `{task}` - 任務詳情
- `{error}` - 錯誤信息(如有)
## 進階自定義案例
### 示例 1添加品牌客製化提示
假設您想要在所有任務執行指南中添加公司特定的品牌資訊和指導原則:
```
# 在 .env 文件中配置
MCP_PROMPT_EXECUTE_TASK_APPEND=\n\n## 公司特定指南\n\n在執行任務時請遵循以下原則\n1. 保持代碼與公司風格指南一致\n2. 所有新功能必須有對應的單元測試\n3. 文檔必須使用公司標準模板\n4. 確保所有用戶界面元素符合品牌設計規範
```
### 示例 2調整任務分析風格
假設您想要讓任務分析更加偏向安全性考量:
```
# 在 .env 文件中配置
MCP_PROMPT_ANALYZE_TASK=## 安全導向任務分析\n\n請針對以下任務進行全面的安全分析\n\n**任務摘要:**\n{summary}\n\n**初步概念:**\n{initialConcept}\n\n在分析過程中請特別關注\n1. 代碼注入風險\n2. 權限管理問題\n3. 資料驗證和清理\n4. 第三方依賴的安全風險\n5. 配置錯誤的可能性\n\n每個潛在問題請提供\n- 問題描述\n- 影響程度(低/中/高)\n- 建議的解決方案\n\n{previousAnalysis}
```
或在 mcp.json 中配置:
```json
"env": {
"MCP_PROMPT_ANALYZE_TASK": "## 安全導向任務分析\n\n請針對以下任務進行全面的安全分析\n\n**任務摘要:**\n{summary}\n\n**初步概念:**\n{initialConcept}\n\n在分析過程中請特別關注\n1. 代碼注入風險\n2. 權限管理問題\n3. 資料驗證和清理\n4. 第三方依賴的安全風險\n5. 配置錯誤的可能性\n\n每個潛在問題請提供\n- 問題描述\n- 影響程度(低/中/高)\n- 建議的解決方案\n\n{previousAnalysis}"
}
```
### 示例 3簡化任務列表顯示
如果您覺得默認任務列表過於詳細,可以簡化顯示:
```
# 在 .env 文件中配置
MCP_PROMPT_LIST_TASKS=# 任務概覽\n\n## 待處理任務\n{tasks.pending}\n\n## 進行中任務\n{tasks.in_progress}\n\n## 已完成任務\n{tasks.completed}
```
或在 mcp.json 中配置:
```json
"env": {
"MCP_PROMPT_LIST_TASKS": "# 任務概覽\n\n## 待處理任務\n{tasks.pending}\n\n## 進行中任務\n{tasks.in_progress}\n\n## 已完成任務\n{tasks.completed}"
}
```
## 最佳實踐
1. **逐步調整**:從小的變更開始,確保每次修改後系統仍能正常工作。
2. **保存配置**:將有效的環境變數配置保存到專案的 `.env.example` 文件中,方便團隊成員參考。
3. **注意格式**:確保 prompt 中的換行和格式正確,特別是使用引號包裹的環境變數。
4. **測試驗證**:在不同的場景下測試自定義的 prompt確保它們在各種情況下都能正常工作。
5. **考慮任務流**:修改 prompt 時考慮整個任務流程,確保不同階段的 prompt 保持一致性。
## 故障排除
- **環境變數未生效**:確保您已經正確設置環境變數,並在設置後重新啟動應用程式。
- **格式問題**:檢查環境變數中的換行符號和特殊字符是否正確轉義。
- **參數替換失敗**:確保您使用的參數名稱與系統支援的一致,包括大小寫。
- **還原默認設置**:如果自定義的 prompt 導致問題,可以刪除相應的環境變數恢復默認設置。
## 附錄:默認 Prompt 參考
為幫助您更好地自定義 prompt這裡提供了部分系統默認 prompt 的參考。您可以在這些基礎上進行修改或擴展:
### planTask 默認 prompt 示例
```
## 任務規劃指南
基於以下描述和要求,請制定一個詳細的任務計劃:
描述:
{description}
要求:
{requirements}
...
```
> 注意:完整的默認 prompt 內容可在專案的 `src/prompts/templates` 目錄下查看相應的模板文件。

25
package-lock.json generated
View File

@ -1,22 +1,23 @@
{
"name": "mcp-shrimp-task-manager",
"version": "1.0.0",
"version": "1.0.3",
"lockfileVersion": 2,
"requires": true,
"packages": {
"": {
"name": "mcp-shrimp-task-manager",
"version": "1.0.0",
"version": "1.0.3",
"license": "MIT",
"dependencies": {
"@modelcontextprotocol/sdk": "^1.0.0",
"dotenv": "^16.5.0",
"uuid": "^9.0.1",
"zod": "^3.22.4"
},
"devDependencies": {
"@types/node": "^20.8.2",
"@types/uuid": "^9.0.6",
"ts-node": "^10.9.1",
"ts-node": "^10.9.2",
"typescript": "^5.2.2"
}
},
@ -312,6 +313,18 @@
"node": ">=0.3.1"
}
},
"node_modules/dotenv": {
"version": "16.5.0",
"resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.5.0.tgz",
"integrity": "sha512-m/C+AwOAr9/W1UOIZUo232ejMNnJAJtYQjUbHoNTBNTJSvqzzDh7vnrei3o3r3m9blf6ZoDkvcw0VmozNRFJxg==",
"license": "BSD-2-Clause",
"engines": {
"node": ">=12"
},
"funding": {
"url": "https://dotenvx.com"
}
},
"node_modules/dunder-proto": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz",
@ -979,6 +992,7 @@
"resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.2.tgz",
"integrity": "sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==",
"dev": true,
"license": "MIT",
"dependencies": {
"@cspotcode/source-map-support": "^0.8.0",
"@tsconfig/node10": "^1.0.7",
@ -1353,6 +1367,11 @@
"integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==",
"dev": true
},
"dotenv": {
"version": "16.5.0",
"resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.5.0.tgz",
"integrity": "sha512-m/C+AwOAr9/W1UOIZUo232ejMNnJAJtYQjUbHoNTBNTJSvqzzDh7vnrei3o3r3m9blf6ZoDkvcw0VmozNRFJxg=="
},
"dunder-proto": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz",

View File

@ -6,7 +6,7 @@
"type": "module",
"scripts": {
"build": "tsc",
"dev": "ts-node --esm src/index.ts",
"dev": "ts-node src/index.ts",
"start": "node dist/index.js",
"test": "echo \"Error: no test specified\" && exit 1"
},
@ -20,13 +20,14 @@
"license": "MIT",
"dependencies": {
"@modelcontextprotocol/sdk": "^1.0.0",
"dotenv": "^16.5.0",
"uuid": "^9.0.1",
"zod": "^3.22.4"
},
"devDependencies": {
"@types/node": "^20.8.2",
"@types/uuid": "^9.0.6",
"ts-node": "^10.9.1",
"ts-node": "^10.9.2",
"typescript": "^5.2.2"
}
}

View File

@ -1,8 +1,11 @@
import "dotenv/config";
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
import { z } from "zod";
import { RelatedFileType } from "./types/index.js";
console.log(process.env.DATA_DIR || "沒設定");
// 導入工具函數
import {
planTask,

View File

@ -0,0 +1,45 @@
/**
* analyzeTask prompt
* prompt
*/
import { loadPrompt, generatePrompt } from "../loader.js";
import * as templates from "../templates/analyzeTask.js";
/**
* analyzeTask prompt
*/
export interface AnalyzeTaskPromptParams {
summary: string;
initialConcept: string;
previousAnalysis?: string;
}
/**
* analyzeTask prompt
* @param params prompt
* @returns prompt
*/
export function getAnalyzeTaskPrompt(params: AnalyzeTaskPromptParams): string {
// 開始構建基本 prompt
let basePrompt = generatePrompt(templates.analyzeTaskTemplate, {
summary: params.summary,
initialConcept: params.initialConcept,
});
// 添加技術審核要點
basePrompt += templates.technicalReviewTemplate;
// 如果有前次分析結果,添加相關模板
if (params.previousAnalysis) {
basePrompt += generatePrompt(templates.iterationAnalysisTemplate, {
previousAnalysis: params.previousAnalysis,
});
}
// 添加下一步行動指導
basePrompt += templates.nextActionTemplate;
// 載入可能的自定義 prompt
return loadPrompt(basePrompt, "ANALYZE_TASK");
}

View File

@ -0,0 +1,46 @@
/**
* completeTask prompt
* prompt
*/
import { loadPrompt, generatePrompt } from "../loader.js";
import * as templates from "../templates/completeTask.js";
import { Task } from "../../types/index.js";
/**
* completeTask prompt
*/
export interface CompleteTaskPromptParams {
task: Task;
completionTime: string;
}
/**
* completeTask prompt
* @param params prompt
* @returns prompt
*/
export function getCompleteTaskPrompt(
params: CompleteTaskPromptParams
): string {
const { task, completionTime } = params;
// 開始構建基本 prompt
let basePrompt = generatePrompt(templates.completeTaskConfirmationTemplate, {
name: task.name,
id: task.id,
completionTime: completionTime,
});
// 添加任務摘要要求
basePrompt += templates.taskSummaryRequirementsTemplate;
// 添加重要提示
basePrompt += templates.importantReminderTemplate;
// 添加連續執行模式提示
basePrompt += templates.continuousModeReminderTemplate;
// 載入可能的自定義 prompt
return loadPrompt(basePrompt, "COMPLETE_TASK");
}

View File

@ -0,0 +1,207 @@
/**
* executeTask prompt
* prompt
*/
import { loadPrompt, generatePrompt } from "../loader.js";
import * as templates from "../templates/executeTask.js";
import { Task, TaskStatus } from "../../types/index.js";
/**
*
*/
interface TaskComplexityLevel {
VERY_HIGH: string;
HIGH: string;
MEDIUM: string;
LOW: string;
VERY_LOW: string;
}
/**
*
*/
interface ComplexityAssessment {
level: string;
metrics: {
descriptionLength: number;
dependenciesCount: number;
};
recommendations?: string[];
}
/**
* executeTask prompt
*/
export interface ExecuteTaskPromptParams {
task: Task;
complexityAssessment?: ComplexityAssessment;
relatedFilesSummary?: string;
dependencyTasks?: Task[];
potentialFiles?: string[];
}
/**
*
* @param level
* @returns
*/
function getComplexityStyle(level: string): string {
switch (level) {
case "VERY_HIGH":
return "⚠️ **警告:此任務複雜度極高** ⚠️";
case "HIGH":
return "⚠️ **注意:此任務複雜度較高**";
case "MEDIUM":
return "**提示:此任務具有一定複雜性**";
default:
return "";
}
}
/**
* executeTask prompt
* @param params prompt
* @returns prompt
*/
export function getExecuteTaskPrompt(params: ExecuteTaskPromptParams): string {
const {
task,
complexityAssessment,
relatedFilesSummary,
dependencyTasks,
potentialFiles,
} = params;
// 處理注意事項
const notes = task.notes ? `**注意事項:** ${task.notes}\n` : "";
// 開始構建基本 prompt
let basePrompt = generatePrompt(templates.executeTaskTemplate, {
name: task.name,
id: task.id,
description: task.description,
notes: notes,
});
// 添加實現指南(如果有)
if (task.implementationGuide) {
basePrompt += generatePrompt(templates.implementationGuideTemplate, {
implementationGuide: task.implementationGuide,
});
}
// 添加驗證標準(如果有)
if (task.verificationCriteria) {
basePrompt += generatePrompt(templates.verificationCriteriaTemplate, {
verificationCriteria: task.verificationCriteria,
});
}
// 添加分析結果(如果有)
if (task.analysisResult) {
basePrompt += generatePrompt(templates.analysisResultTemplate, {
analysisResult: task.analysisResult,
});
}
// 添加依賴任務完成摘要(如果有)
if (dependencyTasks && dependencyTasks.length > 0) {
const completedDependencyTasks = dependencyTasks.filter(
(t) => t.status === TaskStatus.COMPLETED && t.summary
);
if (completedDependencyTasks.length > 0) {
basePrompt += templates.dependencyTaskSummaryTemplate;
for (const depTask of completedDependencyTasks) {
basePrompt += generatePrompt(templates.dependencyTaskItemTemplate, {
name: depTask.name,
summary: depTask.summary || "*無完成摘要*",
});
}
}
}
// 添加相關文件(如果有)
if (relatedFilesSummary) {
basePrompt += generatePrompt(templates.relatedFilesSummaryTemplate, {
relatedFilesSummary: relatedFilesSummary,
});
} else {
// 無相關文件
basePrompt += templates.noRelatedFilesTemplate;
// 添加潛在相關文件建議(如果有)
if (potentialFiles && potentialFiles.length > 0) {
const potentialFilesStr = potentialFiles
.map((file) => `- 含有 "${file}" 的文件\n`)
.join("");
basePrompt += generatePrompt(templates.recommendedFilesTemplate, {
potentialFiles: potentialFilesStr,
});
}
}
// 添加複雜度評估(如果有)
if (complexityAssessment) {
basePrompt += generatePrompt(templates.complexityAssessmentTemplate, {
level: complexityAssessment.level,
});
// 添加複雜度警告樣式(如果需要)
const complexityStyle = getComplexityStyle(complexityAssessment.level);
if (complexityStyle) {
basePrompt += generatePrompt(templates.complexityWarningTemplate, {
complexityStyle: complexityStyle,
});
}
// 添加評估指標
basePrompt += templates.assessmentMetricsTemplate;
basePrompt += generatePrompt(templates.descriptionLengthMetric, {
descriptionLength: complexityAssessment.metrics.descriptionLength,
});
basePrompt += generatePrompt(templates.dependenciesCountMetric, {
dependenciesCount: complexityAssessment.metrics.dependenciesCount,
});
// 添加處理建議(如果有)
if (
complexityAssessment.recommendations &&
complexityAssessment.recommendations.length > 0
) {
basePrompt += templates.handlingRecommendationsTemplate;
if (complexityAssessment.recommendations[0]) {
basePrompt += generatePrompt(templates.handlingRecommendation1, {
recommendation1: complexityAssessment.recommendations[0],
});
}
if (complexityAssessment.recommendations[1]) {
basePrompt += generatePrompt(templates.handlingRecommendation2, {
recommendation2: complexityAssessment.recommendations[1],
});
}
}
}
// 添加執行步驟
basePrompt += templates.executionStepsTemplate;
basePrompt += templates.executionStep1;
basePrompt += templates.executionStep2;
basePrompt += templates.executionStep3;
basePrompt += templates.executionStep4;
// 添加質量要求
basePrompt += templates.qualityRequirementsTemplate;
basePrompt += templates.qualityRequirement1;
basePrompt += templates.qualityRequirement2;
basePrompt += templates.qualityRequirement3;
// 添加完成提示
basePrompt += templates.completionReminderTemplate;
// 載入可能的自定義 prompt
return loadPrompt(basePrompt, "EXECUTE_TASK");
}

View File

@ -0,0 +1,123 @@
/**
* getTaskDetail prompt
* prompt
*/
import { loadPrompt, generatePrompt } from "../loader.js";
import * as templates from "../templates/getTaskDetail.js";
import { Task, RelatedFile } from "../../types/index.js";
/**
* getTaskDetail prompt
*/
export interface GetTaskDetailPromptParams {
taskId: string;
task?: Task | null;
error?: string;
}
/**
* getTaskDetail prompt
* @param params prompt
* @returns prompt
*/
export function getGetTaskDetailPrompt(
params: GetTaskDetailPromptParams
): string {
const { taskId, task, error } = params;
// 如果有錯誤,顯示錯誤訊息
if (error) {
return generatePrompt(templates.errorTemplate, {
errorMessage: error,
});
}
// 如果找不到任務,顯示找不到任務的訊息
if (!task) {
return generatePrompt(templates.taskNotFoundTemplate, {
taskId,
});
}
// 開始構建基本 prompt
let basePrompt = templates.taskDetailTitleTemplate;
// 添加任務基本信息
basePrompt += generatePrompt(templates.taskBasicInfoTemplate, {
name: task.name,
id: task.id,
status: task.status,
description: task.description,
});
// 添加注記(如果有)
if (task.notes) {
basePrompt += generatePrompt(templates.taskNotesTemplate, {
notes: task.notes,
});
}
// 添加依賴任務(如果有)
if (task.dependencies && task.dependencies.length > 0) {
basePrompt += generatePrompt(templates.taskDependenciesTemplate, {
dependencies: task.dependencies
.map((dep) => `\`${dep.taskId}\``)
.join(", "),
});
}
// 添加實現指南(如果有)
if (task.implementationGuide) {
basePrompt += generatePrompt(templates.taskImplementationGuideTemplate, {
implementationGuide: task.implementationGuide,
});
}
// 添加驗證標準(如果有)
if (task.verificationCriteria) {
basePrompt += generatePrompt(templates.taskVerificationCriteriaTemplate, {
verificationCriteria: task.verificationCriteria,
});
}
// 添加相關文件(如果有)
if (task.relatedFiles && task.relatedFiles.length > 0) {
const fileItems = task.relatedFiles
.map((file) =>
generatePrompt(templates.taskRelatedFileItemTemplate, {
path: file.path,
type: file.type,
description: file.description ? `: ${file.description}` : "",
})
)
.join("\n");
basePrompt += generatePrompt(templates.taskRelatedFilesTemplate, {
files: fileItems,
});
}
// 添加時間信息
basePrompt += generatePrompt(templates.taskTimeInfoTemplate, {
createdTime: new Date(task.createdAt).toLocaleString("zh-TW"),
updatedTime: new Date(task.updatedAt).toLocaleString("zh-TW"),
});
// 添加完成時間(如果有)
if (task.completedAt) {
basePrompt += generatePrompt(templates.taskCompletedTimeTemplate, {
completedTime: new Date(task.completedAt).toLocaleString("zh-TW"),
});
}
// 添加完成摘要(如果有)
if (task.summary) {
basePrompt += generatePrompt(templates.taskSummaryTemplate, {
summary: task.summary,
});
}
// 載入可能的自定義 prompt
return loadPrompt(basePrompt, "GET_TASK_DETAIL");
}

View File

@ -0,0 +1,121 @@
/**
* listTasks prompt
* prompt
*/
import { loadPrompt, generatePrompt } from "../loader.js";
import * as templates from "../templates/listTasks.js";
import { Task, TaskStatus } from "../../types/index.js";
/**
* listTasks prompt
*/
export interface ListTasksPromptParams {
status: string;
tasks: Record<string, Task[]>;
allTasks: Task[];
}
/**
* listTasks prompt
* @param params prompt
* @returns prompt
*/
export function getListTasksPrompt(params: ListTasksPromptParams): string {
const { status, tasks, allTasks } = params;
// 如果沒有任務,顯示通知
if (allTasks.length === 0) {
const statusText = status === "all" ? "任何" : `任何 ${status}`;
return generatePrompt(templates.noTasksNoticeTemplate, {
statusText: statusText,
});
}
// 開始構建基本 prompt
let basePrompt = templates.dashboardTitleTemplate;
// 添加狀態概覽
basePrompt += templates.statusOverviewTitleTemplate;
// 獲取所有狀態的計數
const statusCounts = Object.values(TaskStatus)
.map((statusType) => {
const count = tasks[statusType]?.length || 0;
return generatePrompt(templates.statusCountTemplate, {
status: statusType,
count: count,
});
})
.join("\n");
basePrompt += `${statusCounts}\n\n`;
let filterStatus = "all";
switch (status) {
case "pending":
filterStatus = TaskStatus.PENDING;
break;
case "in_progress":
filterStatus = TaskStatus.IN_PROGRESS;
break;
case "completed":
filterStatus = TaskStatus.COMPLETED;
break;
}
// 添加每個狀態下的詳細任務
for (const statusType of Object.values(TaskStatus)) {
const tasksWithStatus = tasks[statusType] || [];
if (
tasksWithStatus.length > 0 &&
(filterStatus === "all" || filterStatus === statusType)
) {
basePrompt += generatePrompt(templates.statusSectionTitleTemplate, {
status: statusType,
count: tasksWithStatus.length,
});
for (const task of tasksWithStatus) {
basePrompt += formatTaskDetails(task);
}
}
}
// 載入可能的自定義 prompt
return loadPrompt(basePrompt, "LIST_TASKS");
}
/**
*
* @param task
* @returns
*/
function formatTaskDetails(task: Task): string {
// 此函數內容應來自原始的 formatTaskDetails 函數
// 根據實際需求實現詳細的任務格式化邏輯
let result = `### ${task.name}\n**ID:** \`${task.id}\`\n**描述:** ${task.description}\n`;
if (task.status === TaskStatus.COMPLETED && task.summary) {
result += `**完成摘要:** ${task.summary.substring(0, 100)}${
task.summary.length > 100 ? "..." : ""
}\n`;
}
if (task.dependencies && task.dependencies.length > 0) {
result += `**依賴:** ${task.dependencies
.map((d) => `\`${d.taskId}\``)
.join(", ")}\n`;
}
result += `**創建時間:** ${new Date(task.createdAt).toLocaleString()}\n`;
if (task.status === TaskStatus.COMPLETED && task.completedAt) {
result += `**完成時間:** ${new Date(task.completedAt).toLocaleString()}\n`;
}
result += "\n";
return result;
}

View File

@ -0,0 +1,191 @@
/**
* planTask prompt
* prompt
*/
import { loadPrompt, generatePrompt } from "../loader.js";
import * as templates from "../templates/planTask.js";
import { TaskStatus, Task, TaskDependency } from "../../types/index.js";
/**
* planTask prompt
*/
export interface PlanTaskPromptParams {
description: string;
requirements?: string;
existingTasksReference?: boolean;
completedTasks?: Task[];
pendingTasks?: Task[];
memoryDir: string;
}
/**
* planTask prompt
* @param params prompt
* @returns prompt
*/
export function getPlanTaskPrompt(params: PlanTaskPromptParams): string {
// 開始構建基本 prompt
let basePrompt = generatePrompt(templates.planTaskTemplate, {
description: params.description,
});
// 如果有 requirements添加到 prompt 中
if (params.requirements) {
basePrompt += generatePrompt(templates.requirementsTemplate, {
requirements: params.requirements,
});
}
// 如果需要參考現有任務
if (
params.existingTasksReference &&
params.completedTasks &&
params.pendingTasks
) {
const allTasks = [...params.completedTasks, ...params.pendingTasks];
// 如果存在任務,則添加相關資訊
if (allTasks.length > 0) {
basePrompt += templates.existingTasksReferenceTemplate;
// 處理已完成任務
if (params.completedTasks.length > 0) {
basePrompt += templates.completedTasksTitleTemplate;
// 最多顯示10個已完成任務避免提示詞過長
const tasksToShow =
params.completedTasks.length > 10
? params.completedTasks.slice(0, 10)
: params.completedTasks;
tasksToShow.forEach((task, index) => {
// 產生完成時間資訊 (如果有)
const completedTimeText = task.completedAt
? ` - 完成時間:${task.completedAt.toLocaleString()}\n`
: "";
// 使用模板生成任務顯示項目
basePrompt += generatePrompt(templates.completedTaskItemTemplate, {
index: index + 1,
taskName: task.name,
taskId: task.id,
taskDescription:
task.description.length > 100
? task.description.substring(0, 100) + "..."
: task.description,
completedTime: completedTimeText,
});
// 如果不是最後一個任務,添加換行
if (index < tasksToShow.length - 1) {
basePrompt += "\n\n";
}
});
// 如果有更多任務,顯示提示
if (params.completedTasks.length > 10) {
basePrompt += `\n\n*僅顯示前10個${params.completedTasks.length} 個)*\n`;
}
}
// 處理未完成任務
if (params.pendingTasks && params.pendingTasks.length > 0) {
basePrompt += templates.pendingTasksTitleTemplate;
params.pendingTasks.forEach((task, index) => {
// 處理依賴關係 (如果有)
const dependenciesText =
task.dependencies && task.dependencies.length > 0
? ` - 依賴:${task.dependencies
.map((dep: TaskDependency) => `\`${dep.taskId}\``)
.join(", ")}\n`
: "";
// 使用模板生成未完成任務顯示項目
basePrompt += generatePrompt(templates.pendingTaskItemTemplate, {
index: index + 1,
taskName: task.name,
taskId: task.id,
taskDescription:
task.description.length > 150
? task.description.substring(0, 150) + "..."
: task.description,
taskStatus: task.status,
dependencies: dependenciesText,
});
// 如果不是最後一個任務,添加換行
if (index < (params.pendingTasks?.length ?? 0) - 1) {
basePrompt += "\n\n";
}
});
}
// 添加任務調整原則
basePrompt += templates.taskAdjustmentPrinciplesTemplate;
basePrompt += templates.taskAdjustmentPrinciplesContent;
basePrompt += templates.taskAdjustmentPrinciplesContent2;
basePrompt += templates.taskAdjustmentPrinciplesContent3;
basePrompt += templates.taskAdjustmentPrinciplesContent4;
basePrompt += templates.taskAdjustmentPrinciplesContent5;
// 添加任務更新模式指導
basePrompt += templates.taskUpdateModesTemplate;
basePrompt += templates.taskUpdateModesContent1;
basePrompt += templates.taskUpdateModesContent1Detail;
basePrompt += templates.taskUpdateModesContent1Usage;
basePrompt += templates.taskUpdateModesContent2;
basePrompt += templates.taskUpdateModesContent2Detail;
basePrompt += templates.taskUpdateModesContent2Usage;
basePrompt += templates.taskUpdateModesContent3;
basePrompt += templates.taskUpdateModesContent3Detail;
basePrompt += templates.taskUpdateModesContent3Usage;
basePrompt += templates.taskUpdateModesContent3Mechanism;
}
}
// 添加分析指引
basePrompt += templates.analysisGuideTemplate;
// 添加任務記憶檢索相關模板
basePrompt += templates.memoryDirTemplate;
basePrompt += generatePrompt(templates.memoryDirContent, {
memoryDir: params.memoryDir,
});
basePrompt += templates.memoryDirUsageGuide;
// 添加查詢建議
basePrompt += templates.queryRecommendationsTemplate;
basePrompt += templates.queryHighPriority;
basePrompt += templates.queryHighPriorityItems;
basePrompt += templates.queryHighPriorityItems2;
basePrompt += templates.queryHighPriorityItems3;
basePrompt += templates.queryHighPriorityItems4;
basePrompt += templates.queryMediumPriority;
basePrompt += templates.queryMediumPriorityItems;
basePrompt += templates.queryMediumPriorityItems2;
basePrompt += templates.queryMediumPriorityItems3;
basePrompt += templates.queryLowPriority;
basePrompt += templates.queryLowPriorityItems;
basePrompt += templates.queryLowPriorityItems2;
basePrompt += templates.queryLowPriorityItems3;
basePrompt += templates.queryReminder;
// 添加資訊收集指南
basePrompt += templates.infoCollectionGuideTemplate;
basePrompt += templates.infoCollectionGuideItems;
basePrompt += templates.infoCollectionGuideItems2;
basePrompt += templates.infoCollectionGuideItems3;
// 添加下一步指導
basePrompt += templates.nextStepsTemplate;
basePrompt += templates.nextStepsContent1;
basePrompt += templates.nextStepsContent1Detail;
basePrompt += templates.nextStepsContent2;
basePrompt += templates.nextStepsContent2Detail1;
basePrompt += templates.nextStepsContent2Detail2;
// 載入可能的自定義 prompt
return loadPrompt(basePrompt, "PLAN_TASK");
}

View File

@ -0,0 +1,94 @@
/**
* queryTask prompt
* prompt
*/
import { loadPrompt, generatePrompt } from "../loader.js";
import * as templates from "../templates/queryTask.js";
import { Task } from "../../types/index.js";
/**
* queryTask prompt
*/
export interface QueryTaskPromptParams {
query: string;
isId: boolean;
tasks: Task[];
totalTasks: number;
page: number;
pageSize: number;
totalPages: number;
}
/**
* queryTask prompt
* @param params prompt
* @returns prompt
*/
export function getQueryTaskPrompt(params: QueryTaskPromptParams): string {
const { query, isId, tasks, totalTasks, page, pageSize, totalPages } = params;
// 初始化基本 prompt
let basePrompt = generatePrompt(templates.searchHeaderTemplate, {
query,
isId,
totalTasks,
});
// 如果沒有找到任務
if (tasks.length === 0) {
basePrompt += generatePrompt(templates.noResultsTemplate, {
query,
isId,
});
return loadPrompt(basePrompt, "QUERY_TASK");
}
// 添加任務列表
basePrompt += templates.resultListHeaderTemplate;
// 格式化找到的任務
for (const task of tasks) {
basePrompt += formatTaskSummary(task);
}
// 添加分頁信息
if (totalPages > 1) {
basePrompt += generatePrompt(templates.paginationInfoTemplate, {
page,
totalPages,
pageSize,
totalTasks,
});
}
// 添加使用提示
basePrompt += templates.usageHintTemplate;
// 載入可能的自定義 prompt
return loadPrompt(basePrompt, "QUERY_TASK");
}
/**
*
* @param task
* @returns
*/
function formatTaskSummary(task: Task): string {
// 簡化版的任務摘要,比完整格式更精簡
let result = generatePrompt(templates.taskSummaryTemplate, {
taskId: task.id,
taskName: task.name,
taskStatus: task.status,
taskDescription:
task.description.length > 100
? `${task.description.substring(0, 100)}...`
: task.description,
createdAt: new Date(task.createdAt).toLocaleString(),
completedAt: task.completedAt
? new Date(task.completedAt).toLocaleString()
: "尚未完成",
});
return result;
}

View File

@ -0,0 +1,49 @@
/**
* reflectTask prompt
* prompt
*/
import { loadPrompt, generatePrompt } from "../loader.js";
import * as templates from "../templates/reflectTask.js";
/**
* reflectTask prompt
*/
export interface ReflectTaskPromptParams {
summary: string;
analysis: string;
}
/**
* reflectTask prompt
* @param params prompt
* @returns prompt
*/
export function getReflectTaskPrompt(params: ReflectTaskPromptParams): string {
// 開始構建基本 prompt
let basePrompt = generatePrompt(templates.reflectTaskTemplate, {
summary: params.summary,
analysis: params.analysis,
});
// 添加評估要點
basePrompt += templates.evaluationPointsTemplate;
// 添加決策點指導
basePrompt += templates.decisionPointsTemplate;
// 添加更新模式選擇指導
basePrompt += templates.updateModesTemplate;
// 添加知識傳遞機制指導
basePrompt += templates.knowledgeTransferTemplate;
// 添加任務過多處理指導
basePrompt += templates.taskOverflowTemplate;
// 添加結尾提醒
basePrompt += templates.conclusionTemplate;
// 載入可能的自定義 prompt
return loadPrompt(basePrompt, "REFLECT_TASK");
}

View File

@ -0,0 +1,141 @@
/**
* splitTasks prompt
* prompt
*/
import { loadPrompt, generatePrompt } from "../loader.js";
import * as templates from "../templates/splitTasks.js";
import { Task } from "../../types/index.js";
/**
* splitTasks prompt
*/
export interface SplitTasksPromptParams {
updateMode: string;
createdTasks: Task[];
allTasks: Task[];
}
/**
*
* @param updateMode
* @returns
*/
function getUpdateModeDescription(updateMode: string): string {
switch (updateMode) {
case "overwrite":
return "覆蓋未完成任務(已完成任務已保留)";
case "selective":
return "選擇性更新";
case "append":
default:
return "新增至現有任務清單";
}
}
/**
*
* @param task
* @param index
* @param allTasks
* @returns
*/
function formatTaskItem(task: Task, index: number, allTasks: Task[]): string {
// 處理注意事項
const notes = task.notes ? `**注意事項:** ${task.notes}\n` : "";
// 處理實現指南
const implementationGuide = task.implementationGuide
? `**實現指南:** ${
task.implementationGuide.length > 100
? task.implementationGuide.substring(0, 100) +
"... (執行時可查看完整內容)"
: task.implementationGuide
}\n`
: "";
// 處理驗證標準
const verificationCriteria = task.verificationCriteria
? `**驗證標準:** ${
task.verificationCriteria.length > 100
? task.verificationCriteria.substring(0, 100) +
"... (驗證時可查看完整內容)"
: task.verificationCriteria
}\n`
: "";
// 處理依賴任務
const dependencies =
task.dependencies && task.dependencies.length > 0
? `**依賴任務:** ${task.dependencies
.map((d: any) => {
// 查找依賴任務的名稱,提供更友好的顯示
const depTask = allTasks.find((t) => t.id === d.taskId);
return depTask
? `"${depTask.name}" (\`${d.taskId}\`)`
: `\`${d.taskId}\``;
})
.join(", ")}\n`
: "**依賴任務:** 無\n";
// 使用模板生成任務項目
return generatePrompt(templates.taskItemTemplate, {
index: index + 1,
name: task.name,
id: task.id,
description: task.description,
notes,
implementationGuide,
verificationCriteria,
dependencies,
});
}
/**
* splitTasks prompt
* @param params prompt
* @returns prompt
*/
export function getSplitTasksPrompt(params: SplitTasksPromptParams): string {
// 開始構建基本 prompt
let basePrompt = generatePrompt(templates.splitTasksTitleTemplate, {
updateMode: params.updateMode,
});
// 添加更新模式描述
basePrompt += generatePrompt(templates.updateModeDescriptionTemplate, {
updateDescription: getUpdateModeDescription(params.updateMode),
});
// 添加拆分策略
basePrompt += templates.splitStrategyTemplate;
// 添加任務質量審核
basePrompt += templates.qualityReviewTemplate;
// 添加任務清單標題
basePrompt += templates.taskListTitleTemplate;
// 添加所有建立的任務
basePrompt += params.createdTasks
.map((task, index) => formatTaskItem(task, index, params.allTasks))
.join("\n");
// 添加空行
basePrompt += "\n\n";
// 添加依賴關係管理
basePrompt += templates.dependencyManagementTemplate;
basePrompt += templates.dependencyManagementContent1;
basePrompt += templates.dependencyManagementContent2;
basePrompt += templates.dependencyManagementContent3;
basePrompt += templates.dependencyManagementContent4;
// 添加決策點
basePrompt += templates.decisionPointsTemplate;
basePrompt += templates.decisionPointContent1;
basePrompt += templates.decisionPointContent2;
// 載入可能的自定義 prompt
return loadPrompt(basePrompt, "SPLIT_TASKS");
}

View File

@ -0,0 +1,93 @@
/**
* verifyTask prompt
* prompt
*/
import { loadPrompt, generatePrompt } from "../loader.js";
import * as templates from "../templates/verifyTask.js";
import { Task } from "../../types/index.js";
/**
* verifyTask prompt
*/
export interface VerifyTaskPromptParams {
task: Task;
}
/**
*
* @param content
* @param maxLength
* @returns
*/
function extractSummary(content: string, maxLength: number): string {
if (!content) return "";
if (content.length <= maxLength) {
return content;
}
// 簡單的摘要提取:截取前 maxLength 個字符並添加省略號
return content.substring(0, maxLength) + "...";
}
/**
* verifyTask prompt
* @param params prompt
* @returns prompt
*/
export function getVerifyTaskPrompt(params: VerifyTaskPromptParams): string {
const { task } = params;
// 處理注意事項
const notes = task.notes ? `**注意事項:** ${task.notes}\n` : "";
// 開始構建基本 prompt
let basePrompt = generatePrompt(templates.verifyTaskTemplate, {
name: task.name,
id: task.id,
description: task.description,
notes: notes,
});
// 添加任務特定的驗證標準(如果有)
if (task.verificationCriteria) {
basePrompt += generatePrompt(templates.verificationCriteriaTemplate, {
verificationCriteria: task.verificationCriteria,
});
}
// 添加實現指南摘要(如果有)
if (task.implementationGuide) {
const implementationGuideSummary =
task.implementationGuide.length > 200
? task.implementationGuide.substring(0, 200) + "... (參見完整實現指南)"
: task.implementationGuide;
basePrompt += generatePrompt(templates.implementationGuideSummaryTemplate, {
implementationGuideSummary: implementationGuideSummary,
});
}
// 添加分析結果摘要(如果有)
if (task.analysisResult) {
basePrompt += generatePrompt(templates.analysisSummaryTemplate, {
analysisSummary: extractSummary(task.analysisResult, 300),
});
}
// 添加標準驗證標準
basePrompt += templates.standardVerificationCriteriaTemplate;
// 添加報告要求
basePrompt += templates.reportRequirementsTemplate;
// 添加決策點
basePrompt += templates.decisionPointsTemplate;
basePrompt += templates.decisionPoint1;
basePrompt += templates.decisionPoint2;
basePrompt += templates.decisionPoint3;
// 載入可能的自定義 prompt
return loadPrompt(basePrompt, "VERIFY_TASK");
}

21
src/prompts/index.ts Normal file
View File

@ -0,0 +1,21 @@
/**
* Prompt
* prompt
*/
// 匯出核心工具
export { loadPrompt, generatePrompt } from "./loader.js";
// 當完成各個模塊時,將在下方匯出各個 prompt 生成器
// 例如:
export { getPlanTaskPrompt } from "./generators/planTask.js";
export { getAnalyzeTaskPrompt } from "./generators/analyzeTask.js";
export { getReflectTaskPrompt } from "./generators/reflectTask.js";
export { getSplitTasksPrompt } from "./generators/splitTasks.js";
export { getExecuteTaskPrompt } from "./generators/executeTask.js";
export { getVerifyTaskPrompt } from "./generators/verifyTask.js";
export { getCompleteTaskPrompt } from "./generators/completeTask.js";
export { getListTasksPrompt } from "./generators/listTasks.js";
export { getQueryTaskPrompt } from "./generators/queryTask.js";
export { getGetTaskDetailPrompt } from "./generators/getTaskDetail.js";
// 等等

67
src/prompts/loader.ts Normal file
View File

@ -0,0 +1,67 @@
/**
* prompt
* prompt
*/
function processEnvString(input: string | undefined): string {
if (!input) return "";
return input
.replace(/\\n/g, "\n")
.replace(/\\t/g, "\t")
.replace(/\\r/g, "\r");
}
/**
* prompt
* @param basePrompt prompt
* @param promptKey prompt
* @returns prompt
*/
export function loadPrompt(basePrompt: string, promptKey: string): string {
// 轉換為大寫,作為環境變數的一部分
const envKey = promptKey.toUpperCase();
// 檢查是否有替換模式的環境變數
const overrideEnvVar = `MCP_PROMPT_${envKey}`;
if (process.env[overrideEnvVar]) {
// 使用環境變數完全替換原始 prompt
return processEnvString(process.env[overrideEnvVar]);
}
// 檢查是否有追加模式的環境變數
const appendEnvVar = `MCP_PROMPT_${envKey}_APPEND`;
if (process.env[appendEnvVar]) {
// 將環境變數內容追加到原始 prompt 後
return `${basePrompt}\n\n${processEnvString(process.env[appendEnvVar])}`;
}
// 如果沒有自定義,則使用原始 prompt
return basePrompt;
}
/**
* prompt
* @param promptTemplate prompt
* @param params
* @returns prompt
*/
export function generatePrompt(
promptTemplate: string,
params: Record<string, any> = {}
): string {
// 使用簡單的模板替換方法,將 {paramName} 替換為對應的參數值
let result = promptTemplate;
Object.entries(params).forEach(([key, value]) => {
// 如果值為 undefined 或 null使用空字串替換
const replacementValue =
value !== undefined && value !== null ? String(value) : "";
// 使用正則表達式替換所有匹配的佔位符
const placeholder = new RegExp(`\\{${key}\\}`, "g");
result = result.replace(placeholder, replacementValue);
});
return result;
}

View File

@ -0,0 +1,43 @@
/**
* prompt
* analyzeTask prompt
*/
// 基本任務分析模板
export const analyzeTaskTemplate = `## 代碼庫分析\n\n### 任務摘要\n\`\`\`\n{summary}\n\`\`\`\n\n已收到初步解答構想\n\n\`\`\`\n{initialConcept}\n\`\`\`\n\n`;
// 技術審核要點模板
export const technicalReviewTemplate = `## 技術審核要點\n\n### 1. 代碼庫分析
-
-
-
### 2.
-
-
-
### 3.
-
-
-
### 4.
-
-
-
`;
// 迭代分析模板(用於分析已有的前次分析結果)
export const iterationAnalysisTemplate = `\n\n## 迭代分析\n\n請對照先前分析結果\n\n\`\`\`\n{previousAnalysis}\n\`\`\`\n\n請識別
1.
2.
3.
4. `;
// 下一步行動模板
export const nextActionTemplate = `\n\n## 下一步行動\n\n完成分析後使用「reflect_task」工具提交最終分析包含\n\n1. **原始任務摘要** - 保持與第一階段一致
2. **** -
`;

View File

@ -0,0 +1,16 @@
/**
* prompt
* completeTask prompt
*/
// 基本任務完成確認模板
export const completeTaskConfirmationTemplate = `## 任務完成確認\n\n任務 "{name}" (ID: \`{id}\`) 已於 {completionTime} 成功標記為完成。\n\n`;
// 任務摘要要求模板
export const taskSummaryRequirementsTemplate = `## 任務摘要要求\n\n請提供此次完成任務的摘要總結包含以下關鍵要點\n\n1. 任務目標與主要成果\n2. 實施的解決方案要點\n3. 遇到的主要挑戰及解決方法\n\n`;
// 重要提示模板
export const importantReminderTemplate = `**重要提示:** 請在當前回應中提供任務摘要總結。完成本次任務摘要後,請等待用戶明確指示後再繼續執行其他任務。請勿自動開始執行下一個任務。\n\n`;
// 連續執行模式提示模板
export const continuousModeReminderTemplate = `如果用戶要求連續執行任務請使用「execute_task」工具開始執行下一個任務。`;

View File

@ -0,0 +1,63 @@
/**
* prompt
* executeTask prompt
*/
// 基本任務執行模板
export const executeTaskTemplate = `## 任務執行\n\n**名稱:** {name}\n**ID:** \`{id}\`\n**描述:** {description}\n{notes}\n`;
// 實現指南模板
export const implementationGuideTemplate = `\n## 實現指南\n\n{implementationGuide}\n\n`;
// 驗證標準模板
export const verificationCriteriaTemplate = `\n## 驗證標準\n\n{verificationCriteria}\n\n`;
// 分析背景模板
export const analysisResultTemplate = `\n## 分析背景\n\n{analysisResult}\n\n`;
// 相關文件模板
export const relatedFilesSummaryTemplate = `## 相關文件\n\n{relatedFilesSummary}\n\n`;
// 相關文件未指定模板
export const noRelatedFilesTemplate = `## 相關文件\n\n當前任務沒有關聯的文件。可以使用 \`update_task_files\` 工具添加相關文件,以便在執行任務時提供上下文。`;
// 推薦相關文件模板
export const recommendedFilesTemplate = `\n\n### 推薦操作\n基於任務描述您可能需要查看以下相關文件\n{potentialFiles}\n使用 update_task_files 工具關聯相關文件,以獲得更好的上下文記憶支持。`;
// 依賴任務完成摘要模板
export const dependencyTaskSummaryTemplate = `\n## 依賴任務完成摘要\n\n`;
// 單個依賴任務摘要模板
export const dependencyTaskItemTemplate = `### {name}\n{summary}\n\n`;
// 任務複雜度評估模板
export const complexityAssessmentTemplate = `\n## 任務複雜度評估\n\n- **複雜度級別:** {level}`;
// 複雜度警告模板
export const complexityWarningTemplate = `\n\n{complexityStyle}\n`;
// 評估指標模板
export const assessmentMetricsTemplate = `\n### 評估指標\n`;
export const descriptionLengthMetric = `- 描述長度: {descriptionLength} 字符\n`;
export const dependenciesCountMetric = `- 依賴任務數: {dependenciesCount} 個\n`;
// 處理建議模板
export const handlingRecommendationsTemplate = `\n### 處理建議\n`;
export const handlingRecommendation1 = `1. {recommendation1}\n`;
export const handlingRecommendation2 = `2. {recommendation2}\n`;
// 執行步驟模板
export const executionStepsTemplate = `\n## 執行步驟\n\n`;
export const executionStep1 = `1. **分析需求** - 理解任務需求和約束條件\n`;
export const executionStep2 = `2. **設計方案** - 制定實施計劃和測試策略\n`;
export const executionStep3 = `3. **實施方案** - 按計劃執行,處理邊緣情況\n`;
export const executionStep4 = `4. **測試驗證** - 確保功能正確性和穩健性\n`;
// 質量要求模板
export const qualityRequirementsTemplate = `\n## 質量要求\n\n`;
export const qualityRequirement1 = `- **範圍管理** - 僅修改相關代碼,避免功能蔓延\n`;
export const qualityRequirement2 = `- **代碼質量** - 符合編碼標準,處理異常情況\n`;
export const qualityRequirement3 = `- **效能考量** - 注意算法效率和資源使用\n\n`;
// 完成提示模板
export const completionReminderTemplate = `完成後使用「verify_task」工具進行驗證。`;

View File

@ -0,0 +1,43 @@
/**
* prompt
* getTaskDetail prompt
*/
// 任務詳情標題模板
export const taskDetailTitleTemplate = `## 任務完整詳情\n\n`;
// 任務基本信息模板
export const taskBasicInfoTemplate = `### {name}\n\n**ID:** \`{id}\`\n\n**狀態:** {status}\n\n**描述:**\n{description}\n\n`;
// 任務注記模板
export const taskNotesTemplate = `**注記:**\n{notes}\n\n`;
// 任務依賴模板
export const taskDependenciesTemplate = `**依賴任務:** {dependencies}\n\n`;
// 任務實現指南模板
export const taskImplementationGuideTemplate = `**實現指南:**\n\`\`\`\n{implementationGuide}\n\`\`\`\n\n`;
// 任務驗證標準模板
export const taskVerificationCriteriaTemplate = `**驗證標準:**\n\`\`\`\n{verificationCriteria}\n\`\`\`\n\n`;
// 任務相關文件標題模板
export const taskRelatedFilesTemplate = `**相關文件:**\n{files}\n`;
// 單個相關文件模板
export const taskRelatedFileItemTemplate = `- \`{path}\` ({type}){description}`;
// 任務時間信息模板
export const taskTimeInfoTemplate = `**創建時間:** {createdTime}\n**更新時間:** {updatedTime}\n`;
// 任務完成時間模板
export const taskCompletedTimeTemplate = `**完成時間:** {completedTime}\n\n`;
// 任務完成摘要模板
export const taskSummaryTemplate = `**完成摘要:**\n{summary}\n\n`;
// 錯誤模板 - 找不到任務
export const taskNotFoundTemplate = `## 錯誤\n\n找不到ID為 \`{taskId}\` 的任務。請確認任務ID是否正確。`;
// 系統錯誤模板
export const errorTemplate = `## 系統錯誤\n\n取得任務詳情時發生錯誤: {errorMessage}`;

View File

@ -0,0 +1,19 @@
/**
* prompt
* listTasks prompt
*/
// 任務管理儀表板標題模板
export const dashboardTitleTemplate = `# 任務管理儀表板\n\n`;
// 任務狀態概覽標題模板
export const statusOverviewTitleTemplate = `## 任務狀態概覽\n\n`;
// 單個任務狀態計數模板
export const statusCountTemplate = `- **{status}**: {count} 個任務`;
// 任務狀態分類標題模板
export const statusSectionTitleTemplate = `## {status} ({count})\n\n`;
// 系統通知模板 - 無任務
export const noTasksNoticeTemplate = `## 系統通知\n\n目前系統中沒有{statusText}任務。請查詢其他狀態任務或先使用「split_tasks」工具創建任務結構再進行後續操作。`;

View File

@ -0,0 +1,95 @@
/**
* prompt
* planTask prompt
*/
// 基本任務分析模板
export const planTaskTemplate = `## 任務分析\n\n{description}\n\n`;
// 要求與限制模板
export const requirementsTemplate = `## 要求與限制\n\n{requirements}\n\n`;
// 現有任務參考引導
export const existingTasksReferenceTemplate = `## 現有任務參考\n\n`;
// 已完成任務標題
export const completedTasksTitleTemplate = `### 已完成任務\n\n`;
// 已完成任務項目模板
export const completedTaskItemTemplate = `{index}. **{taskName}** (ID: \`{taskId}\`)\n - 描述:{taskDescription}\n{completedTime}`;
// 未完成任務標題
export const pendingTasksTitleTemplate = `\n### 未完成任務\n\n`;
// 未完成任務項目模板
export const pendingTaskItemTemplate = `{index}. **{taskName}** (ID: \`{taskId}\`)\n - 描述:{taskDescription}\n - 狀態:{taskStatus}\n{dependencies}`;
// 任務調整原則
export const taskAdjustmentPrinciplesTemplate = `\n## 任務調整原則\n\n`;
export const taskAdjustmentPrinciplesContent = `1. **已完成任務保護** - 已完成任務不可修改或刪除\n`;
export const taskAdjustmentPrinciplesContent2 = `2. **未完成任務可調整** - 可根據新需求修改未完成任務\n`;
export const taskAdjustmentPrinciplesContent3 = `3. **任務ID一致性** - 引用現有任務必須使用原始ID\n`;
export const taskAdjustmentPrinciplesContent4 = `4. **依賴關係完整性** - 避免循環依賴,不依賴已標記移除的任務\n`;
export const taskAdjustmentPrinciplesContent5 = `5. **任務延續性** - 新任務應與現有任務構成連貫整體\n\n`;
// 任務更新模式指導
export const taskUpdateModesTemplate = `## 任務更新模式\n\n`;
export const taskUpdateModesContent1 = `### 1. **追加模式(append)**\n`;
export const taskUpdateModesContent1Detail = `- 保留所有現有任務,僅添加新任務\n`;
export const taskUpdateModesContent1Usage = `- 適用:逐步擴展功能,現有計劃仍有效\n\n`;
export const taskUpdateModesContent2 = `### 2. **覆蓋模式(overwrite)**\n`;
export const taskUpdateModesContent2Detail = `- 清除所有現有未完成任務,完全使用新任務列表\n`;
export const taskUpdateModesContent2Usage = `- 適用:徹底變更方向,現有未完成任務已不相關\n\n`;
export const taskUpdateModesContent3 = `### 3. **選擇性更新模式(selective)**\n`;
export const taskUpdateModesContent3Detail = `- 根據任務名稱匹配選擇性更新任務,保留其他現有任務\n`;
export const taskUpdateModesContent3Usage = `- 適用:部分調整任務計劃,保留部分未完成任務\n`;
export const taskUpdateModesContent3Mechanism = `- 工作原理:更新同名任務,創建新任務,保留其他任務\n\n`;
// 分析指引模板
export const analysisGuideTemplate = `## 分析指引\n\n1. 確定任務的目標和預期成果
2.
3.
4.
5.
6. \n\n`;
// 任務記憶檢索模板
export const memoryDirTemplate = `## 任務記憶檢索\n\n`;
export const memoryDirContent = `過去任務記錄儲存在 **{memoryDir}**。\n`;
export const memoryDirUsageGuide = `使用查詢工具時,請根據以下情境判斷:\n\n`;
// 查詢建議模板
export const queryRecommendationsTemplate = `### 查詢建議\n\n`;
export const queryHighPriority = `- **必查(高優先級)**:\n`;
export const queryHighPriorityItems = ` - 涉及修改或擴展現有功能,需了解原有實現\n`;
export const queryHighPriorityItems2 = ` - 任務描述提到需參考以往工作或已有實現經驗\n`;
export const queryHighPriorityItems3 = ` - 涉及系統內部技術實現或關鍵組件\n`;
export const queryHighPriorityItems4 = ` - 用戶要求必須查詢記憶\n\n`;
export const queryMediumPriority = `- **可查(中優先級)**:\n`;
export const queryMediumPriorityItems = ` - 新功能與現有系統有整合需求,實現部分獨立\n`;
export const queryMediumPriorityItems2 = ` - 功能標準化且需符合系統慣例\n`;
export const queryMediumPriorityItems3 = ` - 不確定是否已有類似實現\n\n`;
export const queryLowPriority = `- **可跳過(低優先級)**:\n`;
export const queryLowPriorityItems = ` - 完全全新、獨立的功能\n`;
export const queryLowPriorityItems2 = ` - 基本設置或簡單標準任務\n`;
export const queryLowPriorityItems3 = ` - 用戶明確指示不需參考過去記錄\n\n`;
export const queryReminder = `> ※ 查詢記憶可幫助了解過往方案,借鑒成功經驗並避免重複錯誤。\n\n`;
// 資訊收集指南模板
export const infoCollectionGuideTemplate = `## 資訊收集指南\n\n`;
export const infoCollectionGuideItems = `1. **詢問用戶** - 當你對任務要求有疑問時,直接詢問用戶\n`;
export const infoCollectionGuideItems2 = `2. **查詢記憶** - 使用「query_task」工具查詢以往記憶是否有相關任務\n`;
export const infoCollectionGuideItems3 = `3. **網路搜索** - 當出現你不理解的名詞或概念時,使用網路搜尋工具找尋答案\n\n`;
// 下一步模板
export const nextStepsTemplate = `## 下一步\n\n`;
export const nextStepsContent1 = `**第一步:根據任務描述決定是否查詢記憶**\n`;
export const nextStepsContent1Detail = `- 判斷任務是否屬於必查情境若是請先使用「query_task」查詢過往記錄否則可直接進行分析。\n\n`;
export const nextStepsContent2 = `**第二步:使用 analyze_task 提交分析結果**\n`;
export const nextStepsContent2Detail1 = `1. **任務摘要** - 目標、範圍、挑戰和限制條件\n`;
export const nextStepsContent2Detail2 = `2. **初步解答構想** - 可行的技術方案和實施計劃\n`;

View File

@ -0,0 +1,105 @@
/**
* prompt
* queryTask prompt
*/
/**
* queryTask
*/
/**
*
*/
export const searchHeaderTemplate = `
#
##
- : {{query}}
- : {{isId ? "任務ID查詢" : "關鍵字查詢"}}
- : {{totalTasks}}
`;
/**
*
*/
export const noResultsTemplate = `
##
"{{query}}"
### :
{{#if isId}}
- ID不存在或格式不正確
-
{{else}}
-
- 使
-
{{/if}}
使 \`list_tasks\` 命令查看所有現有任務。
`;
/**
*
*/
export const resultListHeaderTemplate = `
##
:
`;
/**
*
*/
export const paginationInfoTemplate = `
##
- : {{page}} / {{totalPages}}
- : {{pageSize}}
- : {{totalTasks}}
page
`;
/**
*
*/
export const taskSummaryTemplate = `
### {{taskName}} (ID: {{taskId}})
- : {{taskStatus}}
- : {{taskDescription}}
- : {{createdAt}}
- : {{completedAt}}
`;
/**
* 使
*/
export const usageHintTemplate = `
##
- 使 \`get_task_detail {任務ID}\` 查看任務完整詳情
- 使 \`execute_task {任務ID}\` 執行特定任務
- 使 \`list_tasks\` 查看所有任務
`;
// 查詢結果標題模板
export const queryResultTitleTemplate = `## 查詢結果 ({totalResults})\n\n`;
// 單個任務顯示模板
export const taskDisplayTemplate = `### {name}
**ID:** \`{id}\`
**:** {status}
**:** {description}
{notes}
{implementationGuide}
{verificationCriteria}
{summary}
**:** {createdTime}
**:** {updatedTime}
{completedTime}
**:** 使get_task_detail {id} `;
// 下一頁指示模板
export const nextPageGuideTemplate = `\n\n要查看下一頁結果請使用相同的查詢參數但將頁碼設為 {nextPage}。`;
// 系統錯誤模板
export const errorTemplate = `## 系統錯誤\n\n查詢任務時發生錯誤: {errorMessage}`;

View File

@ -0,0 +1,52 @@
/**
* prompt
* reflectTask prompt
*/
// 基本方案評估模板
export const reflectTaskTemplate = `## 方案評估\n\n### 任務摘要\n\`\`\`\n{summary}\n\`\`\`\n\n### 分析結果\n\`\`\`\n{analysis}\n\`\`\`\n\n`;
// 評估要點模板
export const evaluationPointsTemplate = `## 評估要點\n\n### 1. 技術完整性
-
-
-
-
### 2.
- 使
-
-
-
### 3.
-
-
-
- `;
// 決策點模板
export const decisionPointsTemplate = `## 決策點\n\n根據評估結果選擇後續行動\n\n- **發現關鍵問題**使用「analyze_task」重新提交改進方案
- **調**
- ****使split_tasks使使split_tasks`;
// 更新模式選擇模板
export const updateModesTemplate = `## split_tasks 更新模式選擇
- **append** -
- **overwrite** -
- **selective** -
- **clearAllTasks** - `;
// 知識傳遞機制模板
export const knowledgeTransferTemplate = `## 知識傳遞機制
1. **** -
2. **** -
3. **** - `;
// 任務過多處理模板
export const taskOverflowTemplate = `## split_tasks 任務太多或內容過長導致「split_tasks」工具無法正常運作時
- 使使split_tasks
- `;
// 結尾提醒模板
export const conclusionTemplate = `請嚴格審查方案,確保解決方案質量。`;

View File

@ -0,0 +1,46 @@
/**
* prompt
* splitTasks prompt
*/
// 任務拆分標題模板
export const splitTasksTitleTemplate = `## 任務拆分 - {updateMode} 模式\n\n`;
// 任務更新模式描述模板
export const updateModeDescriptionTemplate = `任務已{updateDescription}。\n\n`;
// 任務拆分策略模板
export const splitStrategyTemplate = `## 拆分策略\n\n1. **按功能分解** - 獨立可測試的子功能,明確輸入輸出
2. **** - 沿
3. **** -
4. **** - \n\n`;
// 任務質量審核模板
export const qualityReviewTemplate = `## 任務質量審核\n\n1. **任務原子性** - 每個任務足夠小且具體,可獨立完成
2. **** -
3. **** - \n\n`;
// 任務清單標題模板
export const taskListTitleTemplate = `## 任務清單\n\n`;
// 單個任務顯示模板
export const taskItemTemplate = `### 任務 {index}{name}
**ID:** \`{id}\`
**:** {description}
{notes}
{implementationGuide}
{verificationCriteria}
{dependencies}
`;
// 依賴關係管理模板
export const dependencyManagementTemplate = `## 依賴關係管理\n\n`;
export const dependencyManagementContent1 = `- 設置依賴可使用任務名稱或任務ID\n`;
export const dependencyManagementContent2 = `- 最小化依賴數量,只設置直接前置任務\n`;
export const dependencyManagementContent3 = `- 避免循環依賴,確保任務圖有向無環\n`;
export const dependencyManagementContent4 = `- 平衡關鍵路徑,優化並行執行可能性\n\n`;
// 決策點模板
export const decisionPointsTemplate = `## 決策點\n\n`;
export const decisionPointContent1 = `- 發現任務拆分不合理重新呼叫「split_tasks」調整\n`;
export const decisionPointContent2 = `- 確認任務拆分完善:生成執行計劃,確定優先順序\n`;

View File

@ -0,0 +1,28 @@
/**
* prompt
* verifyTask prompt
*/
// 基本任務驗證模板
export const verifyTaskTemplate = `## 任務驗證\n\n**名稱:** {name}\n**ID:** \`{id}\`\n**描述:** {description}\n{notes}\n`;
// 驗證標準模板
export const verificationCriteriaTemplate = `\n## 驗證標準\n\n{verificationCriteria}\n\n`;
// 實現指南摘要模板
export const implementationGuideSummaryTemplate = `\n## 實現指南摘要\n\n{implementationGuideSummary}\n\n`;
// 分析要點模板
export const analysisSummaryTemplate = `\n## 分析要點\n\n{analysisSummary}\n\n`;
// 標準驗證標準模板
export const standardVerificationCriteriaTemplate = `## 驗證標準\n\n1. **需求符合性(30%)** - 功能完整性、約束條件遵循、邊緣情況處理\n2. **技術質量(30%)** - 架構一致性、程式健壯性、實現優雅性\n3. **集成兼容性(20%)** - 系統整合、互操作性、兼容性維護\n4. **性能可擴展性(20%)** - 效能優化、負載適應性、資源管理\n\n`;
// 報告要求模板
export const reportRequirementsTemplate = `## 報告要求\n\n提供整體評分和評級各項標準評估問題與建議及最終結論。\n\n`;
// 決策點模板
export const decisionPointsTemplate = `## 決策點\n\n根據驗證結果選擇\n`;
export const decisionPoint1 = `- **嚴重錯誤**使用「plan_task」工具重新規劃任務\n`;
export const decisionPoint2 = `- **輕微錯誤**:直接修復問題\n`;
export const decisionPoint3 = `- **無錯誤**使用「complete_task」工具標記完成\n`;

File diff suppressed because it is too large Load Diff