ep-cli

SKILL.md

EP-CLI: Overmind Project 任务管理工具

🎯 技能目标

提供一个智能交互式的命令行工具,用于高效管理 overmind-project 平台上的任务。

核心特性:

  • ✅ 智能默认值自动填充
  • ✅ 上下文记忆(只需配置一次)
  • ✅ 模块名称模糊匹配
  • ✅ 交互式引导创建任务

平台地址: https://overmind-project.netease.com

📋 触发条件

当用户提到以下关键词时触发:

  • "overmind"、"overmind-project"、"ep"
  • "创建任务"、"新建任务"
  • "任务管理"

🔐 认证配置

首次使用

首次使用时会交互式获取认证信息:

$ ep task create
请输入 pmot (JWT Token): eyJ0eXAiOiJKV1QiLCJhbGc...
请输入 pmou (用户名): zhulianxin
✅ 认证信息已保存到 ~/.ep-cli/user_context.json

获取认证信息

  1. 登录 https://overmind-project.netease.com
  2. F12 打开开发者工具 → Application → Cookies
  3. 复制 pmot (JWT Token) 和 pmou (用户名)

🔧 核心功能

1. 创建任务 (智能交互式)

极简创建

# 只提供任务名称,其他使用智能默认值
ep task create --name "修复登录bug"

# 或完全交互式
ep task create
任务名称: 修复登录bug

智能默认值

字段 默认值 说明
productId 144 数科(固定)
subProductId 240 EasyData(可配置)
moduleid 上次使用交互选择 支持模糊匹配
level 2 (P1) 可指定 1/2/3
responseemail 当前用户 自动从 pmou 生成
submitemail 当前用户 自动从 pmou 生成
parentid 0 固定
beginTime 当天 可指定时间戳

完整参数创建

ep task create \
  --name "用户登录功能开发" \
  --level 2 \
  --module "OpenClaw" \
  --estimate "16h" \
  --tags "前端,登录"

2. 模块管理

查看模块列表

# 查看所有模块
ep module list

# 查看指定子产品的模块
ep module list --sub-product-id 240

模块列表:

模块ID 模块名称 子产品
2199 OpenClaw龙虾 EasyData
2198 EasyCopilot EasyData
1583 商业化发版 EasyData
1450 OpenAPI EasyData
1128 PlayBook EasyData
1110 数据标准 EasyData
1006 控制台 EasyData
913 安全中心 EasyData
799 离线开发 EasyData
798 平台 EasyData
755 Sloth EasyData
740 流程协作与通知中心 EasyData
738 数据服务 EasyData
737 数据地图 EasyData
736 维度建模 EasyData
735 指标系统 EasyData
734 元数据中心 EasyData
733 数据传输 EasyData
731 数据治理360 EasyData
730 任务运维中心 EasyData
728 数据质量中心 EasyData
725 Azkaban EasyData
2180 智能数据助手 有数BI
2178 指标管理 有数BI
1435 NDH NDH
1992 Doris NDH
715 Spark NDH

模块智能匹配

支持模块名称关键字匹配:

# 自动匹配到 2199 (OpenClaw龙虾)
ep task create --name "测试" --module "OpenClaw"

# 自动匹配到 736 (维度建模)
ep task create --name "测试" --module "维度"

3. 配置管理

设置默认值

# 设置默认子产品
ep config set --sub-product-id 241

# 设置默认模块
ep config set --module-id 2199

配置保存在 ~/.ep-cli/user_context.json

4. 查询任务

# 列出任务(默认显示10个)
ep task list

# 指定子产品
ep task list --sub-product-id 240

# 按名称搜索
ep task list --name "ep-cli"

# 按负责人筛选(需要先搜索用户获取ID)
ep task list --response-uid 23627

# 按时间范围筛选
ep task list --begin-time-start "2026-03-01" --begin-time-end "2026-03-31"

# 分页查询
ep task list --limit 20 --offset 0

# 按状态筛选
ep task list --state "1,2,3"

# 组合筛选
ep task list --name "开发" --sub-product-id 240 --state "2" --limit 5

# 查看任务详情
ep task show 12345

5. 编辑任务

# 修改任务名称
ep task edit 12345 --name "新任务名称"

# 修改任务描述(支持富文本HTML)
ep task edit 12345 --desc "<div>任务详细描述</div>"

# 同时修改名称和描述
ep task edit 12345 --name "新名称" --desc "<div>新描述</div>" -y

接口说明:

  • 任务名称: POST /rest/task/update (form-data: id, name)
  • 任务描述: POST /rest/tcfr/update (JSON: issueId, customfieldId: 915, value)

6. 更新任务字段

# 更新实际工作量 (支持格式: 2d, 4h, 1.5)
ep task update 12345 --workload "2d"

# 更新积分值 (customfieldId=7184)
ep task update 12345 --points 1.5

# 更新积分获得时间 (格式: YYYY-MM-DD)
ep task update 12345 --custom-field 7185 --custom-value "2026-03-25"

# 更新积分类型
ep task update 12345 --custom-field 7186 --custom-value "53455,53458"

# 批量更新
ep task update 12345 --workload "2d" --points 1.5 -y

可更新字段:

字段 参数 字段ID 说明
实际工作量 --workload 7184 实际工时
积分值 --points 7184 积分数量
积分类型 --custom-field 7186 7186 积分类型
积分获得时间 --custom-field 7185 7185 时间戳
描述 --custom-field 915 915 富文本描述
自定义字段 --custom-field + --custom-value 任意 其他字段

7. 批量更新任务状态

# 单个任务更新状态
ep task batch-update-state --task-ids "12345" --state "2"

# 批量更新状态
ep task batch-update-state --task-ids "123,456,789" --state "2" -y

# 更新状态并设置开始时间
ep task batch-update-state --task-ids "12345" --state "2" --begin-time 1774440570983

状态说明:

状态值 状态名称
1 待处理
2 进行中
3 已完成/待验收
6 已取消

8. 用户搜索

# 搜索用户
ep user search "zhulianxin"

# 搜索邮箱
ep user search "zhulianxin@corp.netease.com"

# 分页搜索
ep user search "zhang" --limit 20

用途: 获取用户ID,用于任务列表的 --response-uid 筛选

🔄 典型工作流程

工作流 1: 首次使用

# 1. 创建任务(首次使用会提示输入认证信息)
$ ep task create
请输入 pmot (JWT Token): eyJ...
请输入 pmou (用户名): zhulianxin
✅ 认证信息已保存

任务名称: 修复登录bug
✓ 产品: 数科 (144)
✓ 子产品: EasyData (240)

可用模块列表:
  ...
请选择模块ID: 2199
✓ 模块: OpenClaw龙虾 (2199)
✓ 优先级: P1-高 (2)
✓ 开始时间: 今天

确认创建? (y/N): y
✅ 任务创建成功!
任务ID: 12345

工作流 2: 日常创建(使用记忆)

# 第二次创建,使用上次模块
$ ep task create --name "添加新功能"
✓ 任务名称: 添加新功能
✓ 产品: 数科 (144)
✓ 子产品: EasyData (240)
✓ 模块: OpenClaw龙虾 (2199) [上次使用]
✓ 优先级: P1-高 (2)

确认创建? (y/N): y
✅ 任务创建成功!

工作流 3: 切换到其他模块

# 使用模块名称模糊匹配
$ ep task create --name "BI报表开发" --module "指标"
✓ 匹配到模块: 2178 - 指标管理
✓ 任务名称: BI报表开发
...

# 或指定模块ID
$ ep task create --name "Spark优化" --module 715

📊 参数说明

优先级 (level)

优先级 说明
1 P0 紧急
2 P1 高(默认)
3 P2

子产品 (subProductId)

子产品
240 EasyData(默认)
241 有数BI
239 NDH

💬 使用示例

场景 1: 快速创建任务

用户: "帮我创建一个任务,修复登录bug"

AI:

$ ep task create --name "修复登录bug"
✓ 产品: 数科 (144)
✓ 子产品: EasyData (240)
✓ 模块: OpenClaw龙虾 (2199) [上次使用]
✓ 优先级: P1-高 (2)
✓ 开始时间: 今天 (2026-03-25)

确认创建? (y/N): y

✅ 任务创建成功!
任务ID: 12345
链接: https://overmind-project.netease.com/v2/manage/producttask/?productid=144

场景 2: 指定模块创建

用户: "在维度建模模块创建一个任务,做表结构设计"

AI:

$ ep task create --name "表结构设计" --module "维度"
✓ 匹配到模块: 736 - 维度建模
✓ 任务名称: 表结构设计
✓ 产品: 数科 (144)
✓ 子产品: EasyData (240)
✓ 优先级: P1-高 (2)

确认创建? (y/N): y

✅ 任务创建成功!
任务ID: 12346

场景 3: 查看模块列表

用户: "有哪些模块可以选?"

AI:

$ ep module list

可用模块列表:
============================================================

【EasyData】
  2199: OpenClaw龙虾 *
  2198: EasyCopilot
  1583: 商业化发版
  ...

【有数BI】
  2180: 智能数据助手
  2178: 指标管理

【NDH】
  1435: NDH
  1992: Doris
  715: Spark

============================================================
* 表示上次使用的模块

🛠️ 技术实现

API 端点

Base URL: https://overmind-project.netease.com

# 任务管理
POST   /ep/rest/issue/create              - 创建任务 (application/json;charset=UTF-8)
POST   /rest/task/product/listByPage      - 任务列表 (application/json;charset=UTF-8)
POST   /rest/task/update                  - 编辑任务名称 (application/x-www-form-urlencoded)
POST   /rest/task/updateActCost           - 更新实际工作量 (application/x-www-form-urlencoded)
POST   /rest/tcfr/update                  - 更新任务字段/描述 (application/json)
POST   /rest/task/batchUpdateState        - 批量更新任务状态 (application/json)

# 用户管理
GET    /rest/user/listByEntId             - 搜索用户

# 其他
GET    /ep/rest/issue/{id}                - 任务详情

请求格式说明:

  • 创建任务、任务列表使用 application/json;charset=UTF-8
  • 更新任务名称、实际工作量使用 application/x-www-form-urlencoded
  • 更新字段/描述使用 application/json

请求头

headers = {
    "Accept": "application/json",
    "Content-Type": "application/json",
    "pmot": "jwt-token",
    "pmou": "username",
}

创建任务请求体

{
  "name": "任务名称",
  "productId": 144,
  "issuetype": 3,
  "level": 2,
  "parentid": 0,
  "subProductId": 240,
  "moduleid": 2199,
  "tagnames": "",
  "attachments": [],
  "fixVersionIdList": [],
  "noticeEmailList": [],
  "estimate_cost": "",
  "responseemail": "user@corp.netease.com",
  "submitemail": "user@corp.netease.com",
  "beginTime": 1774440570983,
  "custom_field_values": [...]
}

📝 配置文件

配置文件位置: ~/.ep-cli/user_context.json

{
  "pmot": "your-jwt-token",
  "pmou": "your-username",
  "email": "your@corp.netease.com",
  "default_product_id": 144,
  "default_sub_product_id": 240,
  "last_module_id": 2199
}

⚠️ 注意事项

  1. 认证: pmot token 会过期,如遇到 401 错误请重新获取
  2. 模块: 首次使用需要选择模块,之后会自动记住
  3. 子产品: 默认 EasyData,可通过 ep config set 修改
  4. 任务类型: 当前仅支持创建 任务 类型 (issuetype=3)

🔍 故障排查

常见问题

Q: 提示认证失败? A: Token 已过期,删除 ~/.ep-cli/user_context.json 重新配置

Q: 如何切换子产品? A: 使用 ep config set --sub-product-id 241 或创建时指定 --sub-product-id

Q: 模块名称匹配失败? A: 使用 ep module list 查看完整列表,使用数字ID更精确

🐛 已知问题与修复

问题1: 实际工作量更新错误(已修复)

现象: 使用 --workload 更新实际工作量时,值被错误地更新到了积分字段。

原因: 代码中存在两个 task_update_workload 方法,后定义的错误方法(使用自定义字段 7184)覆盖了正确的方法(使用 actCost 字段)。

修复: 删除错误的 task_update_workload 方法,确保使用 /rest/task/updateActCost 接口。

问题2: 创建任务时缺少关键字段

现象: 批量创建任务时,开始时间默认为当天,与实际不符。

建议:

  • 批量创建任务时,应在创建时就指定 --begin-time 参数
  • 或者创建后使用 batch-update-state 逐个更新开始时间

时间戳转换:

# 3月23日 = 1742688000000
# 3月24日 = 1742774400000
# 3月25日 = 1742860800000
# 3月26日 = 1742947200000
# 3月29日 = 1743206400000

问题3: 任务状态需要单独更新

现象: 创建任务后状态默认为"待处理",需要额外更新为"已完成"。

建议: 创建任务后,使用 batch-update-state 更新状态:

# 单个任务更新状态和开始时间
ep task batch-update-state --task-ids "12345" --state 3 --begin-time 1742688000000

💡 最佳实践

批量创建任务的正确流程

# 1. 先创建所有任务(记录任务ID)
ep task create --name "任务1" --module 2199 --estimate "0.8d" -y
# 记录返回的任务ID: 281231

ep task create --name "任务2" --module 2199 --estimate "0.4d" -y
# 记录返回的任务ID: 281232

# 2. 更新实际工作量
ep task update 281231 --workload "0.8d" -y
ep task update 281232 --workload "0.4d" -y

# 3. 更新状态和开始时间(逐个更新以确保准确)
ep task batch-update-state --task-ids "281231" --state 3 --begin-time 1742688000000 -y
ep task batch-update-state --task-ids "281232" --state 3 --begin-time 1742688000000 -y

📚 更新日志

v1.0.1 (2026-03-30)

  • 修复 task_update_workload 方法重复定义问题
  • 实际工作量现在正确更新到 actCost 字段
  • 添加已知问题文档和最佳实践

v1.0.0 (2026-03-25)

  • 初始版本
  • 智能交互式任务创建
  • 上下文记忆功能
  • 模块名称模糊匹配
  • 支持 EasyData/有数BI/NDH 三大子产品
Installs
1
First Seen
Apr 3, 2026