🌐 Language routing / 语言路由 Detect the user's language from their latest message.
- If the user writes in English → read
SKILL_en.mdin this same skill directory and follow it as the authoritative instructions; respond in English; you do NOT need to read the rest of this Chinese document.- 若用户使用中文 → 继续使用本文件(
SKILL.md)作为权威指令,并用中文回复。 Always match the response language to the user's input language.
chatmosp-file-organizer
1. 核心职责
- 智能任务命名:按 MSR / RKMC / EKMC 不同格式生成任务名
- 标准目录创建:MSR、RKMC 和 EKMC 的标准目录结构
- 链式层级管理:MSR → RKMC、MSR → EKMC、EKMC → RKMC 三种路由
- 安全文件操作:路径遍历防护 + 白名单限制
2. 安全第一原则
- ✅ 路径遍历防护:自动清理
../、//、~等危险字符 - ✅ 白名单路径:所有操作限制在
mosp-for-chatMOSP/OUTPUT/ - ✅ TaskNameValidator:验证任务名合法性,支持新命名格式
- ✅ 权限检查:确保有适当读写权限
禁止模式:..、//、~、/root、/etc、*.exe、*.sh
允许字符:a-zA-Z0-9_-.Å
最大路径长度:512
3. 任务命名规则
3.1 MSR 任务
格式:{金属}_{气体分压}_{温度}K_{压强}Pa_R{尺寸}
示例:Pd_CO9_O18_473K_101325Pa_R50
| 字段 | 规则 | 默认值 |
|---|---|---|
| 金属 | Pd、Pt、Au 等元素符号 | 必填 |
| 气体分压 | 多气体用 _ 连接,分压跟在气体后(CO9 表示 CO 9%) |
必填 |
| 温度 | 数值 + K | 500 |
| 压强 | 数值 + Pa | 101325 |
| 尺寸 | R + 数值(Å) | 20 |
3.2 RKMC 任务
⚠️ 重要:RKMC 任务目录在父目录(MSR 或 EKMC)下创建子目录。
格式:RKMC_{步数}steps
示例:RKMC_5000000steps
温度/压强/气体等条件信息继承父目录,简洁不重复。仅当 RKMC 与父级条件不同时,追加参数标注:
RKMC_{T}K_{P}Pa_{pp}_{步数}steps。
3.3 EKMC 任务
⚠️ 重要:EKMC 任务目录在 MSR 目录下创建子目录。
格式(同条件):EKMC_{步数}steps
示例:EKMC_1000000steps
格式(异条件):EKMC_{T}K_{P}Pa_{pp}_{步数}steps
示例:EKMC_800K_1000Pa_CO100_2000000steps
温度/压强/气体等条件信息继承 MSR 父目录。仅当条件与 MSR 不同时才在子目录名中标注。
4. 目录结构
4.1 MSR 任务目录
mosp-for-chatMOSP/OUTPUT/{msr_task_name}/
├── faceinfo.txt # 晶面信息
├── ini.xyz # 真实团簇(RKMC/EKMC 输入)
├── {task_name}_cluster.xyz # 绘图用结构文件
├── rotation.gif # 旋转动画
├── structure.png # 结构图
├── input.json # MSR 参数文件
└── metadata.json # 任务元数据
4.2 RKMC 任务目录(MSR → RKMC 直连)
mosp-for-chatMOSP/OUTPUT/{msr_task_name}/
└── RKMC_{步数}steps/
├── input.json # RKMC 参数(独立)
├── ini.xyz # 从 MSR 复制
├── coverage.png # 覆盖度 vs 时间
├── coverage_steps.png # 覆盖度 vs 步数
├── tof.png # TOF vs 时间
├── tof_time.png # TOF vs 步数
├── INPUT/ # 引擎自动填充
└── OUTPUT/ # 引擎自动输出
├── rec_cov.data
├── rec_event.data
└── rec_site_spc.data
4.3 EKMC 任务目录(MSR → EKMC)
mosp-for-chatMOSP/OUTPUT/{msr_task_name}/
└── EKMC_{步数}steps/ ← EKMC 任务目录
├── input.json ← EKMC 参数(独立)
├── ini.xyz ← 从 MSR 复制
├── coverage.png
├── events.png
├── migration.png
├── structure_cov.png/.gif + structure_cov_legend.png
├── structure_cn.png/.gif + structure_cn_colorbar.png
├── structure_gcn.png/.gif + structure_gcn_colorbar.png
├── EKMC-INPUT/ ← 引擎工作目录
└── EKMC-OUTPUT/ ← 引擎原始输出
├── rec_cov.data
├── rec_event.data
├── final_stru.xyz ← 演化后结构(可供 RKMC)
└── migration_infos.data
4.4 EKMC → RKMC 链式目录(嵌套)
mosp-for-chatMOSP/OUTPUT/{msr_task_name}/
└── EKMC_{步数}steps/
├── ... (EKMC 文件,同上)
└── RKMC_{步数}steps/ ← RKMC 嵌套在 EKMC 下
├── input.json ← RKMC 参数(独立)
├── ini.xyz ← 从 EKMC-OUTPUT/final_stru.xyz 复制
├── coverage.png / coverage_steps.png
├── tof.png / tof_time.png
├── INPUT/
└── OUTPUT/
⚠️ 设计原则:RKMC 嵌套在 EKMC 下 = RKMC 使用 EKMC 的演化结构。平级 = 平行实验(不依赖)。
4.5 直接 slab RKMC/EKMC 任务目录
slab 任务不需要 MSR 父目录,也不需要手动准备 ini.xyz。full_kmc_standalone.py
会根据 JSON 中的 Structure.mode="slab" 和 Structure.slab.surface 从
full_kmc/xyzfile-for-mosp 生成 slab 输入。
mosp-for-chatMOSP/OUTPUT/{slab_task_name}/
├── input.json
├── RKMC-INPUT/ 或 EKMC-INPUT/
├── RKMC-OUTPUT/ 或 EKMC-OUTPUT/
├── RKMC-OUTPUT-physical/ 或 EKMC-OUTPUT-physical/
├── coverage.png / events.png / tof.png 等图像
├── run.log
└── run_status.json
推荐命名:
{metal}_{surface}_{gas}_{T}K_{P}Pa_slab_RKMC_{steps}steps
{metal}_{surface}_{gas}_{T}K_{P}Pa_slab_EKMC_{steps}steps
{metal}_{surface}_{gas}_{T}K_{P}Pa_slab_stepwise_EKMC
5. 路径逻辑(三种路由)
ROUTE 1: MSR → RKMC(反应活性)
OUTPUT/{msr}/RKMC_{steps}/
ini.xyz 来源:MSR 的 ini.xyz
ROUTE 2: MSR → EKMC(形貌演化)
OUTPUT/{msr}/EKMC_{steps}/
ini.xyz 来源:MSR 的 ini.xyz
ROUTE 3: MSR → EKMC → RKMC(演后反析)
OUTPUT/{msr}/EKMC_{steps}/RKMC_{steps}/
ini.xyz 来源:EKMC 的 EKMC-OUTPUT/final_stru.xyz
ROUTE 4: 直接 slab RKMC/EKMC
OUTPUT/{slab_task_name}/
ini.xyz 来源:full_kmc 根据 slab 模板自动生成
5.1 MSR 任务路径
- 位置:
mosp-for-chatMOSP/OUTPUT/{msr_task_name}/ - MSR 生成
ini.xyz和{task_name}_cluster.xyz - 不要为 MSR 准备
ini.xyz(MSR 自己生成)
5.2 条件继承规则
子目录(RKMC / EKMC)的命名遵循条件继承原则:
- 温度/压强/气体分压与父级相同时 → 简名(
RKMC_{steps}steps/EKMC_{steps}steps) - 条件不同时 → 在子目录名中标注差异参数
- 路径中缺少的上下文通过向上追溯父目录名获取
6. 可视化(引用 msr-generator)
MSR 结构图和旋转动画由 chatmosp-msr-generator 的 §5 步骤 3 负责生成。
详见 msr-generator §5。
7. 接口示例
创建 MSR 目录
输入:
{
"action": "create_msr_directory",
"parameters": {
"metal": "Pd",
"temperature": "473",
"gases": ["CO", "O2"],
"partial_pressures": {"CO": 9, "O2": 18},
"pressure": "101325",
"radius": "50"
}
}
输出:
{
"success": true,
"task_type": "MSR",
"task_name": "Pd_CO9_O18_473K_101325Pa_R50",
"directory_path": "mosp-for-chatMOSP/OUTPUT/Pd_CO9_O18_473K_101325Pa_R50",
"standard_files": [
"faceinfo.txt", "ini.xyz", "{task_name}_cluster.xyz",
"rotation.gif", "structure.png", "input.json", "metadata.json"
]
}
创建 RKMC 目录
输入:
{
"action": "create_rkmc_directory",
"parameters": {
"steps": "5000000",
"parent_task": "Pd_CO9_O18_473K_101325Pa_R50",
"parent_type": "MSR"
}
}
输出:
{
"success": true,
"task_type": "RKMC",
"task_name": "RKMC_5000000steps",
"directory_path": "mosp-for-chatMOSP/OUTPUT/Pd_CO9_O18_473K_101325Pa_R50/RKMC_5000000steps",
"required_files": ["input.json", "ini.xyz"],
"empty_directories": ["INPUT", "OUTPUT"],
"output_files": ["coverage.png", "coverage_steps.png", "tof.png", "tof_time.png"]
}
创建 EKMC 目录
输入:
{
"action": "create_ekmc_directory",
"parameters": {
"steps": "1000000",
"parent_task": "Pd_CO9_O18_473K_101325Pa_R50",
"temperature_override": null,
"pressure_override": null
}
}
temperature_override/pressure_override非空时子目录名追加条件标注。
输出:
{
"success": true,
"task_type": "EKMC",
"task_name": "EKMC_1000000steps",
"directory_path": "mosp-for-chatMOSP/OUTPUT/Pd_CO9_O18_473K_101325Pa_R50/EKMC_1000000steps",
"required_files": ["input.json", "ini.xyz"],
"empty_directories": ["EKMC-INPUT", "EKMC-OUTPUT"],
"output_files": ["coverage.png", "events.png", "migration.png", "structure_cov.png", "structure_cn.png", "structure_gcn.png"]
}
创建 EKMC → RKMC 链式目录
输入:
{
"action": "create_rkmc_directory",
"parameters": {
"steps": "2000000",
"parent_task": "Pd_CO9_O18_473K_101325Pa_R50/EKMC_1000000steps",
"parent_type": "EKMC"
}
}
输出:
{
"success": true,
"task_type": "RKMC",
"parent_type": "EKMC",
"task_name": "RKMC_2000000steps",
"directory_path": "mosp-for-chatMOSP/OUTPUT/Pd_CO9_O18_473K_101325Pa_R50/EKMC_1000000steps/RKMC_2000000steps",
"ini_source": "EKMC-OUTPUT/final_stru.xyz"
}
8. 路由总结
| 路由 | 目录路径 | ini.xyz 来源 |
|---|---|---|
| MSR → RKMC | {msr}/RKMC_{steps}/ |
MSR ini.xyz |
| MSR → EKMC | {msr}/EKMC_{steps}/ |
MSR ini.xyz |
| MSR → EKMC → RKMC | {msr}/EKMC_{steps}/RKMC_{steps}/ |
EKMC final_stru.xyz |
| 直接 slab RKMC/EKMC | {slab_task_name}/ |
full_kmc slab 模板自动生成 |
9. 错误处理
| 错误 | 处理 |
|---|---|
| 路径遍历攻击(../) | 拒绝操作,返回错误 |
| 任务名非法字符 | TaskNameValidator 拒绝 |
| 目录已存在 | 询问是否覆盖 |
| 权限不足 | 提示用户检查权限 |
| 路径超出白名单 | 拒绝操作 |
| 父目录不存在 | 提示先创建父任务目录 |
| 链式嵌套过深 | 限制最大嵌套 2 层(MSR → EKMC → RKMC) |
10. 跨技能衔接
- 专用 parameter-builder → 本技能:参数确认后调用创建目录
- 本技能 → msr-generator:MSR 目录创建后调用计算
- 本技能 → kmc-simulator:cluster RKMC 目录创建后调用模拟
- 本技能 → ekmc-simulator:仅 cluster EKMC 目录创建后调用模拟
- 本技能 → slab-kmc-simulator:普通 slab RKMC/EKMC 目录创建后调用
chatmosp-slab-kmc-simulator - 本技能 → stepwise-ekmc-simulator:slab 分步 EKMC 目录创建后调用
chatmosp-stepwise-ekmc-simulator - ekmc-simulator/slab-kmc-simulator → 本技能:EKMC 完成后如用户需要 RKMC,本技能在 EKMC 下创建嵌套 RKMC 子目录
11. 依赖
- 专用 parameter-builder — 获取任务参数
- chatmosp-input-coordinator — 获取任务类型和路由
- chatmosp-msr-generator — MSR 计算接收方
- chatmosp-kmc-simulator — RKMC 模拟接收方
- chatmosp-ekmc-simulator — cluster EKMC 模拟接收方
- chatmosp-slab-kmc-simulator — slab RKMC/EKMC 模拟接收方
- chatmosp-stepwise-ekmc-simulator — slab Stepwise EKMC 模拟接收方
12. 文件结构
chatmosp-file-organizer/
├── SKILL.md # 本文件(中文)
└── SKILL_en.md # 英文版
