| name | progress-reporter |
| description | 读取 code-tape 项目 progress.md,结合项目时间规划、技术模块拆解和工作流程,将 GitHub ID 映射为同学姓名,生成带上下文的进展报告并发送到飞书群聊。 |
Progress Reporter
将 docs/progress.md 中的团队进展数据转换为带项目上下文的中文报告,发送到飞书群聊。
触发词
"发送进展"、"进度报告"、"群发进度"、"send progress"、"发到群聊"、"汇报进展"
工作流程
1. 读取进展数据
读取以下文件(均相对于项目根目录 Desktop/code-tape):
docs/progress.md — 积分与任务数据(自动生成)
docs/项目时间规划.md — 阶段划分与里程碑
docs/技术模块拆解.md — 技术模块与优先级
references/name-mapping.md — GitHub ID 映射表
使用 gh issue list 获取全部 Issue(含状态、认领人、label),用于生成完整任务列表:
gh issue list --limit 50 --state all --json number,title,state,assignees,labels
2. 映射 GitHub ID → 姓名
使用 references/name-mapping.md 中的映射表,将 GitHub 用户名替换为中文姓名。未在映射表中的 GitHub ID 保持原样。
3. 判断当前阶段
根据 docs/项目时间规划.md 的时间规划和当前日期,判断团队处于哪个阶段:
| 阶段 | 时间 | 关键词 |
|---|
| 阶段一:技术方案与高风险 PoC | 5/24 前 | 技术方案、事件模型、录制包格式、关键 PoC |
| 阶段二:P0 录制链路 | 5/28 前 | 编辑器、操作录制、音视频录制、录制总控 |
| 阶段三:P0 回放链路 | 6/1 前 | 回放调度、倍速、seek、同步展示 |
| 阶段四:加分项最小展示 | 6/2 前 | 多语言、AI 字幕、WebRTC |
| 阶段五:联调冻结与 Demo | 6/3 | 验收、演示、兜底 |
同时识别最近的里程碑检查点:
- 5/24:技术方案冻结
- 5/28:录制链路打通
- 6/1:回放链路打通
- 6/2:加分项最小展示
- 6/3:Demo 交付(DDL)
4. 检查进度是否落后
根据当前日期和里程碑时间节点,判断进度是否落后:
| 里程碑 | 截止日期 | 检查方式 |
|---|
| 技术方案冻结 | 5/24 | 阶段一调研 Issue 是否全部关闭 |
| 录制链路打通 | 5/28 | P0 录制相关 Issue 是否全部关闭 |
| 回放链路打通 | 6/1 | P0 回放相关 Issue 是否全部关闭 |
| 加分项最小展示 | 6/2 | 加分项 Issue 是否有可展示结果 |
| Demo 交付 | 6/3 | 全部 P0 是否完成 |
判断规则:
- 当前日期已超过某里程碑日期,且对应任务未全部完成 → 输出警告:
⚠ 落后:{里程碑名称}({截止日期})未达成,{未完成任务列表}
- 当前日期距里程碑不足 1 天,且对应任务完成度低于 50% → 输出提醒:
⏳ 临近:{里程碑名称}({截止日期})即将到来,当前完成度不足
- 进度正常 → 不显示任何警告
警告插入位置:在"近期里程碑"行之后,单独一行显示。
5. 识别当前任务对应的技术模块
根据 Issue 标题中的关键词,匹配 docs/技术模块拆解.md 中的模块:
- 含"编辑器"/"Monaco"/"CodeMirror"/"语法" → 代码编辑器模块(P0)
- 含"录制"/"事件"/"操作"/"鼠标"/"快捷键"/"光标"/"选区" → 操作录制模块(P0)
- 含"音频"/"麦克风"/"摄像头"/"Media" → 音视频录制模块(P0)
- 含"总控"/"状态机"/"录制包" → 录制总控模块(P0)
- 含"回放"/"播放"/"seek"/"倍速" → 回放模块(P0)
- 含"UI"/"主题"/"布局" → UI 与交互模块(P1)
- 含"云端"/"上传"/"列表" → 云端回放中心(P1)
- 含"WebRTC"/"实时"/"面试" → WebRTC 实时面试模块(P1+)
- 含"字幕"/"AI"/"Whisper" → AI 字幕模块(P1+)
- 含"调研"/"方案"/"PoC"/"选型" → 阶段一调研类任务
- 含"沙箱"/"执行"/"运行" → 代码执行/展示沙箱(P0/P1)
未匹配的 Issue 不标注模块。
6. 生成格式化报告
报告模板
<at user_id="all">所有人</at>
# code-tape 进展
更新时间:{北京时间}
当前阶段:{阶段名称}(不显示日期,除非落后)
近期里程碑:{最近检查点}(不显示日期,除非落后)
{进度落后时在里程碑行后插入警告行,警告中需包含截止日期}
## 每人当前任务
- {姓名}:[#N](链接) {标题}({模块名称})
- {姓名}:暂无任务
待认领:{未认领的任务列表,格式为 #N 标题,逗号分隔}
## 最近动态
- {时间} — {描述}({涉及人员及分数变化})
格式要求:
- 不使用 emoji 图标
- 各段落之间空一行分隔
- 消息开头用
<at user_id="all">所有人</at> 全员提醒(飞书 text 消息的 @mention 格式),与正文之间空一行
- 时间转换为北京时间(+8),格式
MM-DD HH:mm
- 分数只在非零时显示,总分为 0 时可省略该行或只显示姓名
- 没有当前任务时显示"暂无"
- 没有流水时显示"暂无"
- 未映射的 GitHub ID 原样保留
- Issue/PR 编号使用 Markdown 超链接,格式为
[#N](https://github.com/ceilf6/code-tape/issues/N) 或 [#N](https://github.com/ceilf6/code-tape/pull/N)
- 排除总控 Issue:没有
score:* label 的 Issue(如 #2 PRD 拆解总控、#3 竞品调研总控)属于元任务/跟踪 Issue,不出现在任务列表中
- 当前任务:按人分组,每人一行,有任务显示任务链接,无任务显示“暂无任务”
- 未认领的可认领任务单独列出,标题为“待认领”
- 模块名称用括号标注在标题后
- 积分总览部分默认省略,如用户需要再单独展示
7. 发送到飞书群聊
由于 session visibility 限制,从私聊 session 无法直接 sessions_send 到群聊 session。需要通过 sessions_spawn 派出子任务发送:
- 使用
sessions_spawn 创建子任务,task 中包含目标 session key 和完整报告内容
- 子任务内部用
sessions_send 发送到群聊 session
- 使用
sessions_yield 等待子任务完成
目标群聊 session key:feishu:group:oc_029e808c7d757020aace7c0f4d46fad6
如果用户未指定目标群聊,询问用户提供群聊的 chat_id(格式 oc_xxx)。
发送时直接使用报告文本作为 message 内容,无需额外包装。
注意事项
progress.md 由 GitHub Actions 自动生成,格式固定,无需容错处理
- 报告语言为中文
- 分数为 0 的字段在报告中省略,保持简洁
- 更新时间使用 progress.md 中的原始 UTC 时间转换
- 阶段判断和模块匹配基于关键词,若有歧义可人工确认