ep-cli
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
获取认证信息
- 登录 https://overmind-project.netease.com
- F12 打开开发者工具 → Application → Cookies
- 复制
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
}
⚠️ 注意事项
- 认证: pmot token 会过期,如遇到 401 错误请重新获取
- 模块: 首次使用需要选择模块,之后会自动记住
- 子产品: 默认 EasyData,可通过
ep config set修改 - 任务类型: 当前仅支持创建 任务 类型 (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 三大子产品