from judy_core.paths import JUDY_DIR, SPACE_DIR_PREFIX, SPACE_SHARED_DIR

AGENT_COMMON_INSTRUCTION = """\
# 全体要求（适用于所有人）

## 代码规范
除非任务明确要求，否则：
- 禁止使用废弃或者不再推荐使用的语法、api、sdk、代码范式。只要当前编译器/解释器支持，就应该使用最新、最推荐的、更容易理解、更安全的（不容易造成bug的）语法、api、sdk、代码范式。

"""

AGENT_FOLDER_INSTRUCTION = f"""\
# 目录和文件

## 目录介绍

### 任务目录
任务目录中包含任务所提供的文件。

### tool工作目录
tool的工作目录(cwd）默认情况下是任务目录。
如果tool支持，可以通过cwd参数来修改tool的工作目录。

### 交付目录
交付目录是用来保存任务要求交付的文件的目录。
一般情况下交付目录与任务目录相同，但如果任务中明确指定了交付文件的目录，则以任务说明为准。

### 团队空间（space）
团队空间的路径一般是`{JUDY_DIR}/{SPACE_DIR_PREFIX}`。
团队空间用来保存任务解决过程中所创建的文件。
每个团队成员都可以自由读写团队空间目录。

团队空间的目录结构
`{JUDY_DIR}/{SPACE_DIR_PREFIX}`
.
├── shared     团队共享目录
├── executor-0 团队成员executor-0的个人目录
├── executor-1 团队成员executor-1的个人目录
├── executor-xxx 团队成员executor-xxx的个人目录
└── verifier-0   团队成员verifier-0的个人目录


## 目录使用说明

### 交付目录必须保持整洁
只有任务明确要求交付/生成的文件，才能保存到交付目录。

**如果你不小心在交付目录创建了无关文件，在结束执行前必须转移到团队空间（推荐）或者删除。如果你没来得及清理就进入了汇报阶段，则必须在汇报中说明这个问题，以便其它人帮忙操作。**

任务解决过程中直接或者间接创建的的文件，如：
- 编写的用于debug、测试的代码、脚本
- 脚本/命令创建的文件
- 下载的文件
- 编译的产物(如：g++ -o)
- 备份文件
这些非交付文件禁止保存到交付目录，必须保存到团队空间或个人目录。

### 团队空间
如果文件需要被团队成员共享，则保存到团队空间的共享目录({SPACE_SHARED_DIR})。
否则应该保存到个人目录。

## 文件共享
文件共享对团队协作至关重要。 如：
- 保持汇报整洁、重点突出：将大块数据和代码拆分到文件中，报告中仅包含路径，避免污染报告内容。
- 后位(执行顺序靠后)的executor需要在前位的executor取得的进展（脚本、数据）的基础上继续工作。
- 后位的executor/verifier需要历史文件和数据，来复盘和定位问题根源。
- executor需要verifier的测试脚本来复现问题。
通过文件共享，能够实现信息共享和团队效率提升（避免重复编写代码/脚本）

## 用mv代替rm
- mv更安全，可以避免误删文件。
- 当任务进展不及预期时，执行过程中产生的历史文件（脚本、数据）是复盘的关键。
- 不论任务成功或者失败，历史文件对用户（任务下发者）都很有用。

因此**不要轻易删除历史文件，而是根据用途保存到合适的地方（团队空间、共享目录、个人目录）。**
"""
