feat: 根目录文档、脚本、gitignore

This commit is contained in:
2026-10-08 16:15:33 +08:00
commit e98660ce4e
284 changed files with 26838 additions and 0 deletions
+141
View File
@@ -0,0 +1,141 @@
---
name: zentao-ai-channel
description: |
禅道 AI 通道接口技能(生产环境直连)。封装禅道 AI 通道的三个接口:
①评估结果提交(工作量指标/验收标准写入需求扩展信息);
②AI 批量创建任务(为需求批量建研发/测试任务,重名自动跳过);
③文件上传并绑定(PRD/代码审查报告/工作日志/测试文档/会议纪要等上传到需求或会议)。
三个接口可在需求生命周期中组合使用,也可独立调用任意一个。
触发关键词:提交评估结果到禅道、禅道批量建任务/拆任务、上传文档到禅道/绑定需求、
代码审查报告上传、验收标准提交、/zentao
---
# zentao-ai-channel
## 定位
禅道系统(ITSM)AI 对接通道的统一入口。所有调用通过客户端脚本完成:
```
python .agents/skills/zentao-ai-channel/zentao_client.py <子命令> [参数...]
```
子命令与接口一一对应,可独立使用:`submit`(接口一)、`batch-add-tasks`(接口二)、`upload`(接口三)。
## 接入信息(公共)
- **Base URL(生产)**:`https://itsm.sino-assist.com/zentao`(脚本默认值,可用环境变量 `ZENTAO_BASE_URL` 覆盖)
- **鉴权**:请求头 `Authorization: <token>`,**直接放 token 原文,不要加 "Bearer " 前缀**。令牌为 ai 账号永久令牌,已内置在脚本中,可用环境变量 `ZENTAO_AI_TOKEN` 覆盖
- **统一响应**:`{"code": 0, "message": "成功", "data": {...}}`;`code=0` 成功,`code=-1` 失败(message 为失败原因)
- 令牌问题排查:`请登录` = 未带或无效 token;`该接口仅AI框架通道可用` = 非 ai 账号令牌
---
## 接口一:评估结果提交(submit)
`POST /zt-story-expand/saveOrUpdate` — 需求评估完成后,将工作量评估指标与验收标准写入需求扩展信息。**同一需求重复提交 = 覆盖更新(幂等)**。
```bash
python .agents/skills/zentao-ai-channel/zentao_client.py submit \
--story-id <需求ID> \
--number-units <S> \
--b <单元业务复杂度B> \
--ft <技术复杂度系数F(T)> \
--ga <AI效率系数G(A)> \
--w <评估工时W,人日> \
--status <inProgress|finished> \
[--completion-degree <0~100>] \
[--acceptance-criteria <Markdown文本> | --acceptance-criteria-file <md文件路径>] \
[--product-person <中文名>] [--develop-person <中文名>] [--test-person <中文名>]
```
注意事项:
- `storyId` 为空时接口返回成功但不处理——务必确认已传
- **`--status finished` 会锁定记录**(后续提交被拒绝,提示"该需求已完成,不可再修改")并结算当月工作量;未确认完成前一律用 `inProgress`
- `finished` 时完成度由服务端自动置 100,无需传 `--completion-degree`
- 验收标准为可选;若 Spec 工作区存在 `02_acceptance` 产物,建议用 `--acceptance-criteria-file` 一并提交
## 接口二:AI 批量创建任务(batch-add-tasks)
`POST /zt-task/aiBatchAdd` — 为指定需求批量创建研发/测试任务。
```bash
python .agents/skills/zentao-ai-channel/zentao_client.py batch-add-tasks \
--story-id <需求ID> \
--tasks-json '[{"name":"后端接口开发","type":"devel","desc":"实现 xx 接口","assignedTo":"zhangsan","aiEvaluationTime":8,"planStartDate":"2026-08-10","deadline":"2026-08-11"},{"name":"接口测试","type":"test","aiEvaluationTime":4}]'
```
`tasks[]` 字段:
| 字段 | 必填 | 说明 |
|------|------|------|
| name | 是 | 任务名称 |
| type | 是 | `devel`=开发 / `test`=测试,其他值整批拒绝 |
| desc | 否 | 任务描述,写入任务描述 |
| assignedTo | 否 | 指派人**登录账号**(非中文名) |
| aiEvaluationTime | 否 | AI 评估工时(小时),写入任务预计工时 |
| planStartDate / deadline | 否 | 日期格式 `yyyy-MM-dd` |
注意事项:
- **整批拒绝**:任一任务不合法(类型错误/名称为空/日期格式错误),本批全部不创建
- **需求状态拦截**:需求为 已发布(含待验收/验收不通过,其 status 均为 `released`)/ 已完成(验收通过,`finished`)/ 已关闭(`closed`)时整批拒绝,报错"需求已发布/已完成/已关闭,不允许创建任务"(仅 AI 通道拦截,人工拆任务不受此限)
- **防重**:同需求下已存在同名同类型(未删除)任务 → 跳过并记入响应 `skipped`,不算失败;全部命中防重时返回 `code:0, created:0`
- 新任务初始状态"未开始",创建人显示为 ai;响应 `data.taskIds` 为新建任务 ID 列表
## 接口三:文件上传并绑定(upload)
`POST /common/uploadBind`(multipart/form-data)— 上传文件并一步绑定到需求/会议,页面即时可见,操作记录留痕。
```bash
python .agents/skills/zentao-ai-channel/zentao_client.py upload \
--file <文件路径> \
--object-type <见下表> \
--object-id <需求ID或会议ID> \
[--title <文件标题>] \
[--review-result <pass|reject>] # 仅 aiCodeReview 有效
```
`--object-type` 对照表:
| objectType | 含义 | 绑定后效果 |
|------------|------|-----------|
| story | 需求文档(PRD 等) | 需求文档链接更新 |
| aiCodeReview | 代码审查报告 | 审查报告链接更新;带 `--review-result` 时同步审查状态 |
| aiWorkLog | 工作日志 | 工作日志链接更新 |
| aiDocUpdate | AI 项目文档更新记录 | 更新记录链接更新 |
| testCase | 测试用例 | 测试用例链接更新 |
| testReport | 测试报告模版 | 报告模版链接更新 |
| testReportSubmit | 测试报告提交 | 报告提交链接更新(SOP 流程卡点依据) |
| testOther | 其他测试文档 | 其他文档链接更新 |
| meeting | 会议纪要 | 会议纪要链接更新(object-id 填会议 ID) |
注意事项:
- 同一对象同一类型可多次上传形成文件列表,业务对象链接字段始终指向**最新一份**
- objectType/objectId 错误、对象不存在均会拒绝且不落盘
- 响应 `data.url` 为相对路径,拼在系统域名后即可访问
---
## 组合使用(需求生命周期动线)
三个接口常在同一会话按序使用,但每步都可独立执行:
1. 需求评估完成 → `submit`(status=inProgress)→ 可用 `upload --object-type story` 上传 PRD
2. 进入开发 → `batch-add-tasks` 拆分研发/测试任务
3. 过程中 → `upload` 上传审查报告(aiCodeReview + review-result)、工作日志(aiWorkLog)、测试文档(testCase/testReportSubmit 等)
4. 需求完成 → `submit`(status=finished,**锁定,最后一步执行**)
## 常见错误速查
| code | message | 处理 |
|------|---------|------|
| -1 | 请登录 | 检查 Authorization 头 / token |
| -1 | 该接口仅AI框架通道可用(需ai账户token) | 换用 ai 账号令牌(脚本默认已内置) |
| -1 | 该需求已完成,不可再修改 | 需求已 finished 锁定(接口一) |
| -1 | 需求不存在:xxx / 会议不存在:xxx | 核对 storyId / objectId |
| -1 | uploadBind不支持的objectType:xxx | 对照接口三取值表 |
| -1 | 任务类型仅支持devel/test:xxx | 修正 tasks[].type(接口二) |
| -1 | 日期格式错误,应为yyyy-MM-dd:xxx | 修正日期格式(接口二) |