import { FILE_EDIT_TOOL_NAME } from '../FileEditTool/constants.js'

export const PROMPT = `使用此工具为您当前的编码会话创建和管理结构化任务列表。这有助于您跟踪进度、组织复杂任务，并向用户展示您的严谨性。
它还可以帮助用户了解任务进度和整体请求进度。

## 何时使用此工具
请主动在以下场景中使用此工具：

1. 复杂的多步骤任务 - 当任务需要 3 个或更多不同的步骤或操作时
2. 非平凡且复杂的任务 - 需要仔细规划或多次操作的任务
3. 用户明确要求使用待办事项列表 - 当用户直接要求您使用待办事项列表时
4. 用户提供多个任务 - 当用户提供要做的事情列表时（用数字或逗号分隔）
5. 收到新指令后 - 立即将用户需求记录为待办事项
6. 开始处理任务时 - 在开始工作之前将其标记为 in_progress。理想情况下，您应该同时只有一个待办事项处于 in_progress 状态
7. 完成任务后 - 将其标记为 completed，并在实施过程中发现任何新的后续任务

## 何时不使用此工具

在以下情况下跳过使用此工具：
1. 只有一个简单直接的任务
2. 任务很小，跟踪它没有组织收益
3. 任务可以在少于 3 个简单步骤内完成
4. 任务纯粹是对话性或信息性的

请注意，如果只有一个简单任务要完成，您不应该使用此工具。在这种情况下，您最好直接完成任务。

## 何时使用待办事项列表的示例

<example>
用户："我想在应用程序设置中添加深色模式切换。确保在完成后运行测试和构建！"
助手：*创建包含以下项目的待办事项列表：*
1. 在设置页面创建深色模式切换组件
2. 添加深色模式状态管理（context/store）
3. 为深色主题实施 CSS-in-JS 样式
4. 更新现有组件以支持主题切换
5. 运行测试和构建流程，解决出现的任何故障或错误
*开始处理第一个任务*

<reasoning>
助手使用待办事项列表的原因：
1. 添加深色模式是一个多步骤功能，需要 UI、状态管理和样式更改
2. 用户明确要求之后运行测试和构建
3. 助手通过添加"确保测试和构建成功"作为最后一项任务来推断需要通过测试和构建
</reasoning>
</example>

<example>
用户："帮我将项目中的 getCwd 函数重命名为 getCurrentWorkingDirectory"
助手：*使用 grep 或搜索工具在代码库中查找 getCwd 的所有实例*
我找到了 8 个不同文件中的 15 个 'getCwd' 实例。
*为需要更新的每个文件创建具体的待办事项*

<reasoning>
助手使用待办事项列表的原因：
1. 首先，助手搜索以了解任务的范围
2. 在发现不同文件中的多个实例后，它确定这是一个具有多个步骤的复杂任务
3. 待办事项列表有助于确保每个实例都被跟踪和系统地更新
4. 这种方法可以防止遗漏任何实例并保持代码一致性
</reasoning>
</example>


<example>
用户："我需要为我的电子商务网站实施这些功能：用户注册、产品目录、购物车和结账流程。"
助手：*根据项目架构将每个功能分解为具体任务，创建待办事项列表*
让我们从用户注册开始。这将涉及创建数据库模型、API 端点和与您现有身份验证系统集成的前端表单。

<reasoning>
助手使用待办事项列表的原因：
1. 用户提供了用逗号分隔的要实施的多个复杂功能
2. 待办事项列表有助于将这些大型功能组织成可管理的任务
3. 这种方法允许在整个实施过程中跟踪进度
</reasoning>
</example>

<example>
用户："您能帮我优化我的 React 应用程序吗？它的渲染速度很慢，存在性能问题。"
助手：*审查组件结构、渲染模式、状态管理和数据获取*
分析您的代码库后，我发现了几个性能问题。
*创建包含以下项目的待办事项列表：1) 在 ProductList 中为昂贵计算实施记忆化，2) 在 Dashboard 中为长列表添加虚拟化，3) 优化 Gallery 组件中的图像加载，4) 修复 ShoppingCart 中的状态更新循环，5) 审查包大小并实施代码分割*
让我们从在 ProductList 组件中为昂贵计算实施记忆化开始。

<reasoning>
助手使用待办事项列表的原因：
1. 首先，助手检查代码库以识别特定的性能问题
2. 基于此分析，它确定了多个优化机会
3. 性能优化是一个需要多个步骤的非平凡任务
4. 待办事项列表有助于系统地跟踪不同组件的改进
5. 这种系统的方法确保解决所有性能瓶颈
</reasoning>
</example>

## 何时不使用待办事项列表的示例

<example>
用户："如何在 Python 中打印 'Hello World'？"
助手：在 Python 中，您可以使用以下简单代码打印 "Hello World"：

python
print("Hello World")

执行时，这会将文本 "Hello World" 输出到控制台。

<reasoning>
助手没有使用待办事项列表，因为这是一个可以在一个步骤内完成的简单任务。对于如此简单的请求，不需要跟踪多个任务或步骤。
</reasoning>
</example>

<example>
用户："git status 命令是做什么的？"
助手：git status 命令显示您的工作目录和暂存区的当前状态。它显示哪些更改已暂存、哪些未暂存，以及哪些文件未被 Git 跟踪。这是理解仓库当前状态的基本命令，然后再进行提交。

<reasoning>
助手没有使用待办事项列表，因为这是一个信息请求，没有实际要完成的编码任务。用户只是在询问解释，而不是让助手执行多个步骤或任务。
</reasoning>
</example>

<example>
用户："您能帮我给 calculateTotal 函数添加一个注释来解释它的作用吗？"
助手：当然，让我给 calculateTotal 函数添加一个注释来解释它的作用。
*使用 ${FILE_EDIT_TOOL_NAME} 工具为 calculateTotal 函数添加注释*

<reasoning>
助手没有使用待办事项列表，因为这是一个简单的任务，局限于代码中的一个位置。添加注释不需要跟踪多个步骤或系统组织。
</example>

<example>
用户："帮我运行 npm install 并告诉我发生了什么。"
助手：让我为您运行 npm install 命令。

*执行：npm install*

命令成功完成。这是输出：
[npm install 命令的输出]

根据您的 package.json 文件，所有依赖项都已安装。

<reasoning>
助手没有使用待办事项列表，因为这是一个立即产生结果的单命令执行。没有多个步骤需要跟踪或组织，使得待办事项列表对于这个简单的任务是不必要的。
</reasoning>
</example>

## 任务状态和管理

1. **任务状态**：使用这些状态来跟踪进度：
   - pending：任务尚未开始
   - in_progress：当前正在处理（同时限制为一个任务）
   - completed：任务已成功完成

   **重要**：任务描述必须有两种形式：
   - content：描述需要做什么的祈使形式（例如，"运行测试"、"构建项目"）
   - activeForm：执行期间显示的现在进行时形式（例如，"正在运行测试"、"正在构建项目"）

2. **任务管理**：
   - 在工作时实时更新任务状态
   - 完成后立即将任务标记为 completed（不要批量完成）
   - 任何时候必须恰好有一个任务处于 in_progress 状态（不多不少）
   - 在开始新任务之前先完成当前任务
   - 从列表中完全删除不再相关的任务

3. **任务完成要求**：
   - 只有在完全完成任务后才能将其标记为 completed
   - 如果遇到错误、阻塞或无法完成，请保持任务为 in_progress 状态
   - 创建新任务描述需要解决的内容
   - 以下情况永远不要将任务标记为 completed：
     - 测试失败
     - 实施不完整
     - 遇到未解决的错误
     - 找不到必要的文件或依赖项

4. **任务分解**：
   - 创建具体、可操作的项目
   - 将复杂任务分解为更小、可管理的步骤
   - 使用清晰、描述性的任务名称
   - 始终提供两种形式：
     - content："修复身份验证 bug"
     - activeForm："正在修复身份验证 bug"

如有疑问，请使用此工具。主动进行任务管理表明您的专注，并确保您成功完成所有要求。
`

export const DESCRIPTION =
  '更新当前会话的待办事项列表。需要主动且经常使用来跟踪进度和待处理任务。确保始终至少有一个任务处于 in_progress 状态。每个任务必须同时提供 content（祈使形式）和 activeForm（现在进行时）两种形式。'
