chore: sync before memory update
This commit is contained in:
@@ -0,0 +1,99 @@
|
||||
---
|
||||
name: huanxi-leader
|
||||
description: "寰汐负责人日报工作流:查看下属汇报情况(+check)、AI 生成并保存草稿(+draft)、提交负责人日报(+submit)、撤回(+withdraw)。当用户说"查看下属汇报"、"写负责人日报"、"汇总下属情况"、"负责人日报"时触发。"
|
||||
---
|
||||
|
||||
# 寰汐负责人日报
|
||||
|
||||
**前置条件:先 Read `../huanxi-shared/SKILL.md`(缓存规则 + TTL 策略)**
|
||||
|
||||
---
|
||||
|
||||
## 标准工作流(完整流程)
|
||||
|
||||
```
|
||||
Step 0: 确认身份和负责的模块
|
||||
→ Read ~/.claude/huanxi-cache/me.json(永久缓存)
|
||||
→ Read ~/.claude/huanxi-cache/modules.json(24h 缓存)
|
||||
→ 筛选 my_role == 'leader' 的模块
|
||||
→ 若有多个 leader 模块,询问用户选择哪个(或所有)
|
||||
|
||||
Step 1: 获取并展示下属汇报汇总
|
||||
→ 单模块:mcp__huanxi__leader_report_get_subordinates(date=今日, module_id)
|
||||
→ 多模块:mcp__huanxi__leader_report_get_batch(date=今日, module_ids=[...])
|
||||
再按模块逐一展示
|
||||
→ 展示结构化汇总:
|
||||
✅ 已提交(N人):[姓名] + 汇报内容摘要
|
||||
⏳ 未提交(M人):[姓名]
|
||||
→ 若有未提交成员:告知用户(供参考,不强制等待)
|
||||
|
||||
Step 2: 询问是否 AI 汇总
|
||||
→ 展示已提交成员的汇报内容后,询问:
|
||||
"是否需要 AI 根据以上下属汇报自动生成今日负责人日报?"
|
||||
→ 用户同意 → mcp__huanxi__llm_generate_leader_summary(module_id, date=今日)
|
||||
→ 展示 AI 生成的汇总报告,供用户审阅和修改
|
||||
→ 用户拒绝 → 引导用户手动填写报告内容
|
||||
|
||||
Step 3: 保存草稿
|
||||
→ 详见 references/leader-summary.md
|
||||
→ mcp__huanxi__leader_report_save(report_date, content=<确认后内容>, module_id)
|
||||
|
||||
Step 4: 确认并提交
|
||||
→ 展示最终内容,等待用户明确确认("确认"/"提交"/"好的"等)
|
||||
→ ⚠️ 未收到确认前,禁止调用 leader_report_submit
|
||||
→ mcp__huanxi__leader_report_submit(report_date, module_id)
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Shortcuts
|
||||
|
||||
| 指令 | 说明 |
|
||||
|------|------|
|
||||
| `+check` | 查看指定日期下属提交情况 |
|
||||
| [`+draft`](references/leader-summary.md) | AI 生成草稿并保存(需用户确认内容) |
|
||||
| `+submit` | 提交负责人日报(必须先确认) |
|
||||
| `+withdraw` | 撤回已提交负责人日报 |
|
||||
|
||||
---
|
||||
|
||||
## +check:查看下属汇报
|
||||
|
||||
```
|
||||
1. 确定模块(从 modules.json 缓存中取 leader 身份的模块)
|
||||
2. mcp__huanxi__leader_report_get_subordinates(date, module_id)
|
||||
3. 展示:
|
||||
✅ 已提交(N人):张三、李四、...
|
||||
⏳ 未提交(M人):王五、...
|
||||
(非工作日时:提示"今日非工作日,成员无需强制提交")
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## +withdraw:撤回负责人日报
|
||||
|
||||
```
|
||||
1. 确认当前已提交状态
|
||||
2. 告知撤回影响,等待用户确认
|
||||
3. mcp__huanxi__leader_report_withdraw(report_date, module_id)
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 多模块处理
|
||||
|
||||
若用户有多个 leader 模块:
|
||||
|
||||
```
|
||||
- 默认展示全部模块的下属情况(+check)
|
||||
- 提交时需逐模块操作:每个模块单独调用 leader_report_save + submit
|
||||
- 可用 leader_report_get_batch(date, module_ids) 批量拉取数据
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 关键约束
|
||||
|
||||
- **禁止自动提交**:`leader_report_submit(report_date, module_id)` 前必须展示内容并等待用户确认
|
||||
- **成员未提交不阻塞**:负责人日报不依赖所有成员提交,可随时填写
|
||||
- 若当前用户不是任何模块的 leader,告知用户并建议使用 `/huanxi-report` 填写员工日报
|
||||
@@ -0,0 +1,74 @@
|
||||
# 负责人日报草稿(+draft)
|
||||
|
||||
## 两种草稿模式
|
||||
|
||||
### 模式 A:AI 自动生成
|
||||
|
||||
```
|
||||
1. mcp__huanxi__llm_generate_leader_summary(module_id=<模块ID>, date=<日期>)
|
||||
2. 展示 AI 生成的草稿内容给用户审阅
|
||||
3. 询问用户:"是否采用此草稿?或需要修改?"
|
||||
4. 用户确认/修改完成后 → 执行保存步骤
|
||||
```
|
||||
|
||||
### 模式 B:用户手动撰写
|
||||
|
||||
```
|
||||
1. 展示下属汇报摘要(来自 leader_report_get_subordinates 结果)
|
||||
2. 基于摘要,引导用户填写:
|
||||
- 本模块今日整体进展
|
||||
- 遇到的问题与风险
|
||||
- 明日计划
|
||||
3. 拼合用户输入内容 → 执行保存步骤
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 保存草稿
|
||||
|
||||
```
|
||||
mcp__huanxi__leader_report_save(
|
||||
report_date = "YYYY-MM-DD", ← 日期格式
|
||||
module_id = "<模块ID>", ← 从 modules.json 缓存取
|
||||
content = "<正文内容>" ← 支持 Markdown
|
||||
)
|
||||
```
|
||||
|
||||
**返回值**:保存成功后返回草稿 ID,告知用户已保存,询问是否立即提交。
|
||||
|
||||
---
|
||||
|
||||
## 多模块批量操作
|
||||
|
||||
若用户负责多个模块:
|
||||
|
||||
```
|
||||
1. mcp__huanxi__leader_report_get_batch(date, module_ids=[...])
|
||||
→ 一次获取所有模块的下属汇报情况
|
||||
|
||||
2. 逐模块调用 llm_generate_leader_summary 生成草稿
|
||||
|
||||
3. 逐模块调用 leader_report_save 保存
|
||||
|
||||
4. 统一确认后逐模块提交
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 内容格式建议(供 AI 生成参考)
|
||||
|
||||
```markdown
|
||||
## 今日进展
|
||||
|
||||
- [任务A] 完成 XX 功能开发,进度 80%
|
||||
- [任务B] 完成接口联调,已提测
|
||||
|
||||
## 问题与风险
|
||||
|
||||
- 暂无阻塞性问题
|
||||
|
||||
## 明日计划
|
||||
|
||||
- 继续推进 [任务C]
|
||||
- 协助 [成员] 解决 XX 问题
|
||||
```
|
||||
@@ -0,0 +1,133 @@
|
||||
---
|
||||
name: huanxi-org
|
||||
description: "寰汐组织/模块/人员查询。当用户说"我有哪些模块"、"查一下某人账号/ID"、"刷新一下缓存"、"看组织架构"、"谁在哪个模块"、"帮我找一下XXX的用户ID"时触发。提供名字→ID 解析(+resolve)、缓存刷新(+sync)、当前用户(+me)、模块列表(+modules)、组织树(+tree)。"
|
||||
---
|
||||
|
||||
# 寰汐组织与人员查询
|
||||
|
||||
**前置条件:先 Read `../huanxi-shared/SKILL.md`(缓存规则 + TTL 策略)**
|
||||
|
||||
---
|
||||
|
||||
## 核心能力
|
||||
|
||||
本技能提供「名字 → ID」解析能力,是所有其他 huanxi-* 技能的依赖。所有操作**缓存优先**。
|
||||
|
||||
---
|
||||
|
||||
## Shortcuts
|
||||
|
||||
| 指令 | 说明 |
|
||||
|------|------|
|
||||
| [`+me`](references/resolve-ids.md#me) | 查看当前用户身份(读 me.json,缓存永久) |
|
||||
| [`+modules`](references/resolve-ids.md#modules) | 列出我参与的所有模块(24h 缓存) |
|
||||
| [`+resolve`](references/resolve-ids.md) | 把模块名/人员名解析为 ID |
|
||||
| [`+tree`](#org-tree) | 展示完整组织架构树(实时查询,不缓存) |
|
||||
| [`+sync`](#sync) | 强制刷新 modules.json + users.json 缓存 |
|
||||
|
||||
---
|
||||
|
||||
## +me:查看当前用户身份 {#me}
|
||||
|
||||
```
|
||||
Step 1: Read ~/.claude/huanxi-cache/me.json
|
||||
→ 若存在且有 data 字段:直接展示(永久缓存,无需检查 TTL)
|
||||
→ 若不存在:执行 Step 2
|
||||
|
||||
Step 2: mcp__huanxi__user_get_me()
|
||||
Step 3: Write ~/.claude/huanxi-cache/me.json:
|
||||
{ "cached_at": "<ISO8601>", "data": <返回值> }
|
||||
Step 4: 展示用户信息(name, feishu_user_id, 角色等)
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## +modules:列出参与模块 {#modules}
|
||||
|
||||
```
|
||||
Step 1: Read ~/.claude/huanxi-cache/modules.json → 检查 TTL(24h)
|
||||
→ 未过期:直接展示
|
||||
→ 过期或不存在:执行 Step 2
|
||||
|
||||
Step 2: mcp__huanxi__module_list()
|
||||
Step 3: Write ~/.claude/huanxi-cache/modules.json:
|
||||
{ "cached_at": "<ISO8601>", "data": <返回值> }
|
||||
Step 4: 展示模块列表(id, name, my_role)
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## +resolve:名字 → ID 解析
|
||||
|
||||
详细流程见 [references/resolve-ids.md](references/resolve-ids.md)。
|
||||
|
||||
**快速规则:**
|
||||
- 模块名 → 先查 `modules.json`,未命中则拉 `module_list()`
|
||||
- 人员名 → 先查 `users.json`,未命中则调 `user_list(name=xxx)`,结果追加写入缓存
|
||||
- 模糊匹配时若有多个结果,列出候选项让用户选择
|
||||
|
||||
---
|
||||
|
||||
## +tree:组织架构树 {#org-tree}
|
||||
|
||||
```
|
||||
Step 1: mcp__huanxi__org_get_tree()(不缓存,实时查询)
|
||||
Step 2: 以树形结构展示组织架构
|
||||
```
|
||||
|
||||
> 组织架构变动相对频繁(人员入离职),不缓存,每次实时查询。
|
||||
|
||||
---
|
||||
|
||||
## +sync:强制刷新缓存 {#sync}
|
||||
|
||||
```
|
||||
Step 1: mcp__huanxi__module_list()
|
||||
→ Write ~/.claude/huanxi-cache/modules.json(强制覆盖)
|
||||
|
||||
Step 2: mcp__huanxi__user_list()(拉全量用户)
|
||||
→ Write ~/.claude/huanxi-cache/users.json(强制覆盖)
|
||||
|
||||
Step 3: 告知用户:缓存已刷新(模块 N 个,用户 M 人)
|
||||
```
|
||||
|
||||
> **何时需要 +sync**:添加新模块成员后、有新员工入职后、模块结构调整后。
|
||||
>
|
||||
> ⚠️ **Token 变更时**:若切换了寰汐账号(修改了 MCP Bearer Token),`me.json` 是永久缓存,+sync 不会更新它。需手动删除 `~/.claude/huanxi-cache/me.json`,再执行 `/huanxi-org +me` 重新获取新身份。
|
||||
|
||||
---
|
||||
|
||||
## 缓存文件结构参考
|
||||
|
||||
**me.json:**
|
||||
```json
|
||||
{
|
||||
"cached_at": "2026-04-13T09:00:00+08:00",
|
||||
"data": {
|
||||
"user_id": "123",
|
||||
"name": "张三",
|
||||
"feishu_user_id": "ou_xxx"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
**modules.json:**
|
||||
```json
|
||||
{
|
||||
"cached_at": "2026-04-13T09:00:00+08:00",
|
||||
"data": [
|
||||
{ "id": "mod_001", "name": "前端开发", "my_role": "member" },
|
||||
{ "id": "mod_002", "name": "后端API", "my_role": "leader" }
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
**users.json:**
|
||||
```json
|
||||
{
|
||||
"cached_at": "2026-04-13T09:00:00+08:00",
|
||||
"data": [
|
||||
{ "user_id": "456", "name": "李四", "feishu_user_id": "ou_yyy" }
|
||||
]
|
||||
}
|
||||
```
|
||||
@@ -0,0 +1,76 @@
|
||||
# 名字 → ID 解析
|
||||
|
||||
本文件详细说明如何将模块名、人员名解析为系统 ID,所有步骤均**缓存优先**。
|
||||
|
||||
---
|
||||
|
||||
## 模块名 → 模块 ID {#modules}
|
||||
|
||||
```
|
||||
1. Read ~/.claude/huanxi-cache/modules.json
|
||||
→ 检查 cached_at,若 age < 24h → 进入匹配逻辑
|
||||
→ 过期或不存在 → 调用 mcp__huanxi__module_list() 并写入缓存
|
||||
|
||||
2. 匹配逻辑:
|
||||
a. 精确匹配 name == 输入 → 返回 id
|
||||
b. 精确匹配失败 → 模糊匹配(name.includes(输入) 或 输入.includes(name))
|
||||
c. 模糊匹配唯一命中 → 确认并返回 id
|
||||
d. 多个候选 → 列出候选项,让用户选择
|
||||
e. 零命中 → 告知用户,建议运行 +sync 刷新缓存
|
||||
```
|
||||
|
||||
**示例:**
|
||||
- 用户说"前端模块" → 从缓存匹配到 `{ id: "mod_001", name: "前端开发" }` → 返回 `mod_001`
|
||||
- 用户说"API" → 匹配到 `后端API` → 返回 `mod_002`
|
||||
- 匹配到多个 → 展示候选列表
|
||||
|
||||
---
|
||||
|
||||
## 人员名 → 用户 ID {#users}
|
||||
|
||||
```
|
||||
1. Read ~/.claude/huanxi-cache/users.json
|
||||
→ 检查 cached_at,若 age < 24h → 在 data 数组中查找
|
||||
|
||||
2. 查找逻辑:
|
||||
a. name 精确匹配 → 返回 user_id
|
||||
b. name 包含输入 → 列出候选
|
||||
c. 未找到 → 执行 Step 3
|
||||
|
||||
3. 缓存未命中时:
|
||||
a. 调用 mcp__huanxi__user_list(name=<输入>)
|
||||
b. 将结果追加(合并去重)写入 users.json(不覆盖已有缓存)
|
||||
c. 重新执行 Step 2 匹配逻辑
|
||||
|
||||
4. 仍未找到 → 告知用户姓名不存在,建议确认拼写或运行 +sync
|
||||
```
|
||||
|
||||
**特别注意:**
|
||||
- `user_id`(系统内部 ID)≠ `feishu_user_id`(飞书 open_id)
|
||||
- 设置任务执行人用 `user_id`
|
||||
- 飞书消息通知用 `feishu_user_id`(MCP 内部会自动处理,无需手动区分)
|
||||
|
||||
---
|
||||
|
||||
## 自动 ID 解析流程(综合示例)
|
||||
|
||||
当用户说"创建任务,负责人是李四,模块是前端开发"时:
|
||||
|
||||
```
|
||||
1. 解析模块 → read modules.json → 匹配"前端开发" → mod_001
|
||||
2. 解析人员 → read users.json → 匹配"李四" → user_id: 456
|
||||
3. 若任一缓存未命中:先拉 MCP,写缓存,再继续
|
||||
4. 两个 ID 都拿到后 → 调用 task_create(module_id="mod_001", ...)
|
||||
5. 创建完成后 → task_set_assignees(task_id, ["456"])
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 常见错误处理
|
||||
|
||||
| 情况 | 处理 |
|
||||
|------|------|
|
||||
| 多个同名用户 | 展示完整名单(含部门/角色),让用户指定 |
|
||||
| 模块名拼写不完整 | 模糊匹配,确认后继续 |
|
||||
| 缓存文件损坏(JSON 解析失败)| 忽略缓存,直接调 MCP,重建文件 |
|
||||
| MCP 返回空列表 | 告知用户,建议检查 Token 权限或联系管理员 |
|
||||
@@ -0,0 +1,102 @@
|
||||
---
|
||||
name: huanxi-report
|
||||
description: "寰汐员工日报工作流:查看今日日报状态(+check)、保存草稿(+draft)、提交日报(+submit)、撤回日报(+withdraw)。当用户说"帮我写日报"、"填日报"、"提交日报"、"查看今日汇报情况"时触发。"
|
||||
---
|
||||
|
||||
# 寰汐员工日报
|
||||
|
||||
**前置条件:先 Read `../huanxi-shared/SKILL.md`(缓存规则 + TTL 策略)**
|
||||
|
||||
---
|
||||
|
||||
## 标准工作流(完整流程)
|
||||
|
||||
```
|
||||
Step 0: 确认身份
|
||||
→ Read ~/.claude/huanxi-cache/me.json(永久缓存)
|
||||
→ 若 me.json 为空:mcp__huanxi__user_get_me() → 写入缓存
|
||||
|
||||
Step 1: 检查是否工作日
|
||||
→ 查 workdays.json["今日日期"]
|
||||
→ 未缓存:mcp__huanxi__system_get_workday() → 追加写入 workdays.json
|
||||
→ 非工作日:告知用户,询问"是否仍要填写?"(不强制中断)
|
||||
|
||||
Step 2: 查看今日日报状态
|
||||
→ mcp__huanxi__report_get_today()
|
||||
→ submitted → 告知"今日已提交",询问是否撤回
|
||||
→ draft/empty → 继续 Step 3
|
||||
|
||||
Step 3: 获取待汇报任务并收集内容
|
||||
→ mcp__huanxi__report_get_tasks_to_report()
|
||||
→ 展示待汇报任务列表(task_id, name, 模块, 当前进度)
|
||||
→ 引导用户逐一填写今日进展和完成百分比
|
||||
→ 详见 references/report-draft.md
|
||||
|
||||
Step 4: 保存草稿并展示初稿
|
||||
→ mcp__huanxi__report_save_draft(items=[...])
|
||||
→ 展示完整初稿内容供用户预览
|
||||
|
||||
Step 5: 询问是否 AI 润色
|
||||
→ 询问用户:"是否需要 AI 润色优化表达?"
|
||||
→ 用户同意 → mcp__huanxi__llm_polish_report(content=<初稿内容>)
|
||||
→ 展示润色后版本,与初稿对比
|
||||
→ 用户选择采用润色版或保留原版
|
||||
→ 若采用润色版:mcp__huanxi__report_save_draft(items=[...]) 更新草稿
|
||||
→ 用户拒绝 → 直接进入 Step 6
|
||||
|
||||
Step 6: 确认并提交
|
||||
→ 展示最终内容,等待用户明确确认("确认"/"提交"/"好的"等)
|
||||
→ ⚠️ 未收到确认前,禁止调用 report_submit_item
|
||||
→ 用户确认后:
|
||||
a. mcp__huanxi__report_get_today() → 获取各条目的 item_id
|
||||
b. 对每个需提交的草稿条目 → mcp__huanxi__report_submit_item(item_id)
|
||||
c. 逐条提交,不影响其他条目
|
||||
→ 详见 references/report-submit.md
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Shortcuts
|
||||
|
||||
| 指令 | 说明 |
|
||||
|------|------|
|
||||
| [`+check`](#check) | 查看今日日报状态(已提交/草稿/空) |
|
||||
| [`+draft`](references/report-draft.md) | 读取待报任务并保存草稿 |
|
||||
| [`+submit`](references/report-submit.md) | 提交当天日报(必须先确认) |
|
||||
| `+withdraw` | 撤回已提交日报(询问确认) |
|
||||
|
||||
---
|
||||
|
||||
## +check:查看今日状态 {#check}
|
||||
|
||||
```
|
||||
1. mcp__huanxi__report_get_today()
|
||||
2. 展示:
|
||||
- 提交状态(submitted / draft / 未填)
|
||||
- 已填任务列表及内容摘要
|
||||
- 未填/dismissed 任务
|
||||
3. 若已提交:询问"是否需要撤回修改?"
|
||||
4. 若草稿:询问"是否继续编辑并提交?"
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## +withdraw:撤回日报
|
||||
|
||||
```
|
||||
1. mcp__huanxi__report_get_today() → 获取各条目状态和 item_id
|
||||
2. 展示已提交的条目列表,询问用户要撤回哪条(可多选)
|
||||
3. 等待用户确认(撤回后该条目变为草稿,其他已提交条目不受影响)
|
||||
4. 对用户选择的每条 → mcp__huanxi__report_withdraw_item(item_id)
|
||||
5. 告知撤回成功,可重新编辑后用 report_submit_item 重新提交
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 关键约束
|
||||
|
||||
- **禁止自动提交**:Step 6 必须展示内容并等待用户明确确认("确认"/"提交"/"好的"等),不得自动调用 `report_submit_item`
|
||||
- **逐条操作,不做全量**:提交/撤回必须使用 `report_submit_item` / `report_withdraw_item`(需传 item_id),禁止批量操作所有条目,除非用户明确要求"全部提交/撤回"
|
||||
- **dismissed 状态**:用户主动标记"今天不汇报该任务",dismiss 的条目不计入汇报,不要提示用户补填
|
||||
- **非工作日**:检测到非工作日时,明确告知但不中断,询问用户意愿
|
||||
- **已提交则不重复操作**:Step 2 发现已提交时,不继续 Step 3-6,改为询问是否撤回
|
||||
@@ -0,0 +1,56 @@
|
||||
# 保存日报草稿(+draft)
|
||||
|
||||
## 前置
|
||||
|
||||
已通过 `report_get_tasks_to_report()` 获取待汇报任务列表。
|
||||
|
||||
---
|
||||
|
||||
## 草稿数据结构
|
||||
|
||||
每个 `item` 包含:
|
||||
|
||||
| 字段 | 类型 | 说明 |
|
||||
|------|------|------|
|
||||
| `task_id` | string | 任务 ID(从待报任务中取) |
|
||||
| `content` | string | 汇报内容(今日进展) |
|
||||
| `progress` | int | 任务进度(0-100,整数) |
|
||||
| `status` | string | 可选,不改变则不传 |
|
||||
|
||||
---
|
||||
|
||||
## 执行步骤
|
||||
|
||||
```
|
||||
Step 1: 展示待汇报任务列表,引导用户逐一填写内容
|
||||
|
||||
格式示例:
|
||||
┌─────────────────────────────────────────
|
||||
│ 任务: [前端开发] 完成登录页面 UI 优化
|
||||
│ 当前进度: 60%
|
||||
│ 今日进展(请输入): ___
|
||||
│ 完成百分比(0-100): ___
|
||||
└─────────────────────────────────────────
|
||||
|
||||
Step 2: 收集所有填写内容,构建 items 数组
|
||||
|
||||
Step 3: [可选] 若用户请求 AI 辅助 → mcp__huanxi__llm_polish_report(content)
|
||||
将润色建议展示给用户,由用户确认采用哪个版本
|
||||
|
||||
Step 4: mcp__huanxi__report_save_draft(items=[
|
||||
{ task_id: "xxx", content: "...", progress: 80 },
|
||||
...
|
||||
])
|
||||
|
||||
Step 5: 告知保存结果:
|
||||
"已保存草稿,共 N 个任务条目。是否现在提交?"
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 注意事项
|
||||
|
||||
- `progress` 是 **整数百分比**(0-100),不是小数
|
||||
- 用户未填写 `content` 的任务:询问是否 dismiss(今天不汇报)还是暂时跳过
|
||||
- `report_save_draft` 是 upsert 操作,多次调用不会重复创建
|
||||
- 草稿保存成功后,下次调用 `report_get_today()` 可看到 draft 状态
|
||||
@@ -0,0 +1,54 @@
|
||||
# 提交日报(+submit)
|
||||
|
||||
## 前置条件
|
||||
|
||||
- 草稿已通过 `report_save_draft()` 保存
|
||||
- 用户已查看并确认内容
|
||||
|
||||
---
|
||||
|
||||
## 执行步骤
|
||||
|
||||
```
|
||||
Step 1: mcp__huanxi__report_get_today() → 获取最新草稿内容
|
||||
|
||||
Step 2: 展示完整草稿给用户审阅:
|
||||
┌─────────────────────────────────────────
|
||||
│ 📋 今日日报预览(2026-04-13)
|
||||
│
|
||||
│ ✅ 完成登录页面 UI 优化(进度 80%)
|
||||
│ 今日进展:完成了头部导航栏的响应式改造...
|
||||
│
|
||||
│ 🔄 接口联调(进度 50%)
|
||||
│ 今日进展:与后端对接了 3 个接口...
|
||||
└─────────────────────────────────────────
|
||||
|
||||
Step 3: 等待用户明确确认("确认"/"提交"/"好的"/"ok"等)
|
||||
⚠️ 未收到确认前,禁止调用 report_submit
|
||||
|
||||
Step 4: 对每个需提交的草稿条目(item.status == "draft"):
|
||||
mcp__huanxi__report_submit_item(item_id=<item.id>)
|
||||
逐条提交,不影响其他条目状态
|
||||
|
||||
Step 5: 告知提交结果:
|
||||
"✅ 日报已提交!共 N 个任务条目。"
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 提交失败处理
|
||||
|
||||
| 错误 | 处理方式 |
|
||||
|------|---------|
|
||||
| 草稿为空 | 提示用户先填写内容(+draft) |
|
||||
| 已提交 | 告知已提交,询问是否撤回 |
|
||||
| 网络错误 | 告知用户,建议稍后重试 |
|
||||
|
||||
---
|
||||
|
||||
## 重要约束
|
||||
|
||||
**禁止自动提交**:无论何种情况,`report_submit_item()` 调用前必须经过用户明确确认。
|
||||
这是强制规则,不得因为"用户已经填好了"或"工作流要求"而跳过确认步骤。
|
||||
|
||||
**逐条提交,不做全量**:需先从 `report_get_today()` 获取各条目的 `item_id`,再逐条调用 `report_submit_item(item_id)`,不得批量提交所有条目(除非用户明确要求"全部提交")。
|
||||
@@ -0,0 +1,141 @@
|
||||
---
|
||||
name: huanxi-shared
|
||||
description: "寰汐 MCP 共享基础:本地缓存策略(me/modules/users/workdays)、TTL 规则、缓存读写伪代码、MCP 工具索引。所有 huanxi-* 技能必须先 Read 本文件,再执行各自工作流。"
|
||||
---
|
||||
|
||||
# 寰汐 MCP 共享规则
|
||||
|
||||
本技能是所有 `huanxi-*` 技能的**必读前置**,定义缓存策略、工具索引和全局约定。
|
||||
|
||||
---
|
||||
|
||||
## 必读声明
|
||||
|
||||
**所有 huanxi-* 技能开头都必须先 `Read` 本文件(`../huanxi-shared/SKILL.md`),再执行各自工作流。**
|
||||
|
||||
---
|
||||
|
||||
## 本地缓存机制
|
||||
|
||||
缓存文件统一存放在 `~/.claude/huanxi-cache/`。
|
||||
|
||||
### 缓存文件清单
|
||||
|
||||
| 文件 | 内容 | TTL | 刷新方式 |
|
||||
|------|------|-----|---------|
|
||||
| `me.json` | 当前用户身份(user_id, name, feishu_user_id) | 永久 | 手动删除文件 |
|
||||
| `modules.json` | 我参与的模块列表(id, name, my_role) | 24h | 过期自动重拉 或 `/huanxi-org +sync` |
|
||||
| `users.json` | 组织用户搜索结果(name/feishu_user_id 索引) | 24h | 过期自动重拉 或 `/huanxi-org +sync` |
|
||||
| `workdays.json` | 工作日查询结果(date → bool 的 KV 字典) | 永久(按日期 key) | 已有日期不重新查 |
|
||||
|
||||
### 缓存读写伪代码
|
||||
|
||||
**读缓存(每次使用 MCP 数据前执行此逻辑):**
|
||||
|
||||
```
|
||||
function read_cache(file, ttl_hours):
|
||||
1. Read ~/.claude/huanxi-cache/{file}.json
|
||||
2. 若文件不存在 → cache_miss
|
||||
3. 读取 cached_at 字段,计算 age = now - cached_at(小时)
|
||||
4. 若 ttl_hours = Infinity 或 age < ttl_hours → 返回 data 字段(cache_hit)
|
||||
5. 否则 → cache_miss
|
||||
|
||||
function cache_miss_handler(tool_name, params):
|
||||
1. 调用 MCP 工具:mcp__huanxi__{tool_name}(params)
|
||||
2. Write ~/.claude/huanxi-cache/{file}.json:
|
||||
{ "cached_at": "<当前 ISO8601 时间>", "data": <MCP 返回值> }
|
||||
3. 返回 data
|
||||
```
|
||||
|
||||
**workdays.json 特殊逻辑(按 key 缓存):**
|
||||
|
||||
```
|
||||
function get_workday(date):
|
||||
1. Read workdays.json → 得到 { "2026-04-14": true, ... }
|
||||
2. 若 date 已在 dict 中 → 直接返回
|
||||
3. 否则 → 调用 mcp__huanxi__system_get_workday(date)
|
||||
4. 将 {date: result} 追加写入 workdays.json
|
||||
```
|
||||
|
||||
### TTL 快速参考
|
||||
|
||||
```
|
||||
me.json → Infinity(永久,身份不变)
|
||||
modules.json → 24h
|
||||
users.json → 24h
|
||||
workdays.json → Infinity(按 date key,已查过的不再查)
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## MCP 工具索引
|
||||
|
||||
寰汐 MCP 工具前缀:`mcp__huanxi__`
|
||||
|
||||
### 用户与认证
|
||||
| 工具 | 用途 | 缓存 |
|
||||
|------|------|------|
|
||||
| `user_get_me()` | 获取当前 Token 代表的用户 | → `me.json`(永久)|
|
||||
|
||||
### 模块与组织
|
||||
| 工具 | 用途 | 缓存 |
|
||||
|------|------|------|
|
||||
| `module_list(my_role?)` | 列出我参与的模块 | → `modules.json`(24h)|
|
||||
| `module_get(module_id)` | 获取模块详情(含成员) | 不缓存 |
|
||||
| `user_list(name?)` | 搜索组织用户 | → `users.json`(24h)|
|
||||
| `org_get_tree()` | 获取组织架构树 | 不缓存 |
|
||||
| `people_get_board()` | 人员任务看板 | 不缓存 |
|
||||
|
||||
### 任务管理
|
||||
| 工具 | 用途 | 缓存 |
|
||||
|------|------|------|
|
||||
| `task_list_mine()` | 我认领的任务 | 不缓存 |
|
||||
| `task_list_by_module(module_id)` | 模块下所有任务 | 不缓存 |
|
||||
| `task_get(task_id)` | 任务详情 | 不缓存 |
|
||||
| `task_create(...)` | 创建任务 | — |
|
||||
| `task_update(task_id, ...)` | 更新任务 | — |
|
||||
| `task_set_assignees(task_id, assignee_ids)` | 设置执行人(幂等) | — |
|
||||
|
||||
### 员工日报
|
||||
| 工具 | 用途 |
|
||||
|------|------|
|
||||
| `report_get_today(date?)` | 获取指定日期日报 |
|
||||
| `report_get_tasks_to_report()` | 获取今日待汇报任务 |
|
||||
| `report_save_draft(items=[...])` | 批量保存草稿(upsert)|
|
||||
| `report_submit_item(item_id, date?)` | 提交单条日报条目 |
|
||||
| `report_withdraw_item(item_id, date?)` | 撤回单条已提交日报条目 |
|
||||
|
||||
### 负责人日报
|
||||
| 工具 | 用途 |
|
||||
|------|------|
|
||||
| `leader_report_get_subordinates(date, module_id)` | 查看下属汇报情况 |
|
||||
| `leader_report_save(report_date, content, module_id?)` | 保存负责人日报草稿 |
|
||||
| `leader_report_submit(report_date, module_id)` | 提交负责人日报 |
|
||||
| `leader_report_withdraw(report_date, module_id)` | 撤回负责人日报 |
|
||||
| `leader_report_get_batch(date, module_ids)` | 批量获取多模块日报 |
|
||||
|
||||
### 周报
|
||||
| 工具 | 用途 |
|
||||
|------|------|
|
||||
| `weekly_report_get(year, week)` | 获取指定 ISO 周的周报 |
|
||||
| `weekly_report_get_batch(year, week, module_ids)` | 批量获取多模块周报 |
|
||||
| `weekly_report_save(module_id, year, week_number, content?, next_week_plan?)` | 保存周报草稿 |
|
||||
| `weekly_report_submit(module_id)` | 提交周报 |
|
||||
| `weekly_report_withdraw(module_id, year?, week_number?)` | 撤回周报 |
|
||||
|
||||
### 系统与 LLM
|
||||
| 工具 | 用途 | 缓存 |
|
||||
|------|------|------|
|
||||
| `system_get_workday(date?)` | 查询是否工作日 | → `workdays.json`(永久)|
|
||||
| `llm_polish_report(content)` | AI 润色日报内容 | — |
|
||||
| `llm_generate_leader_summary(module_id, date)` | AI 生成负责人日报草稿 | — |
|
||||
|
||||
---
|
||||
|
||||
## 全局约定
|
||||
|
||||
1. **提交前必须确认**:`report_submit`、`leader_report_submit`、`weekly_report_submit` 执行前必须向用户展示内容并等待明确确认,禁止自动提交。
|
||||
2. **非工作日不强制**:检测到非工作日时,告知用户并询问是否仍要填写,不得直接中断流程。
|
||||
3. **缓存优先**:执行任何需要 module_id / user_id 的操作前,先读缓存;缓存未命中或过期才调 MCP。
|
||||
4. **ISO 周数**:周报的 `year` 字段存 ISO year(`date.isocalendar()[0]`),不是日历年。12 月底 / 1 月初注意跨年。
|
||||
5. **task_set_assignees 幂等**:设置执行人使用此工具(幂等),不要用 task_update 的 assignee 字段追加。
|
||||
@@ -0,0 +1,91 @@
|
||||
---
|
||||
name: huanxi-task
|
||||
description: "寰汐任务管理:创建任务(+create)、更新任务状态/进度(+update)、查看任务看板(+board)、设置执行人(+assign)。当用户说"创建任务"、"新建任务"、"更新任务"、"看任务板"、"任务分配"时触发。"
|
||||
---
|
||||
|
||||
# 寰汐任务管理
|
||||
|
||||
**前置条件:先 Read `../huanxi-shared/SKILL.md`(缓存规则 + TTL 策略)**
|
||||
|
||||
---
|
||||
|
||||
## Shortcuts
|
||||
|
||||
| 指令 | 说明 |
|
||||
|------|------|
|
||||
| [`+create`](references/task-create.md) | 创建新任务(引导式填写) |
|
||||
| `+update` | 更新任务状态/进度/截止日 |
|
||||
| [`+board`](references/task-kanban.md) | 查看我的任务看板 |
|
||||
| `+assign` | 设置/变更任务执行人 |
|
||||
| `+get` | 查看单个任务详情 |
|
||||
|
||||
---
|
||||
|
||||
## +create:创建任务
|
||||
|
||||
详见 [references/task-create.md](references/task-create.md)
|
||||
|
||||
**快速概览:**
|
||||
```
|
||||
1. 确定所属模块(从 modules.json 缓存解析名字 → ID)
|
||||
2. 收集任务信息(标题、描述、截止日、优先级)
|
||||
3. mcp__huanxi__task_create(module_id, title, ...)
|
||||
4. [可选] 设置执行人 → mcp__huanxi__task_set_assignees(task_id, [user_id])
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## +update:更新任务
|
||||
|
||||
```
|
||||
Step 1: 确认任务 ID
|
||||
→ 若用户已提供 task_id:直接使用
|
||||
→ 若用户描述了任务名称:
|
||||
a. mcp__huanxi__task_list_mine() 获取我的任务列表
|
||||
b. 按标题关键词模糊匹配,列出候选任务供用户选择
|
||||
c. 仍未找到(可能属于他人或已归档)→ 告知用户提供精确 task_id
|
||||
|
||||
Step 2: 展示当前任务状态,引导用户填写要修改的字段
|
||||
|
||||
Step 3: mcp__huanxi__task_update(task_id, {
|
||||
title? : "新标题",
|
||||
description? : "新描述",
|
||||
progress? : 80, ← 0-100 整数
|
||||
status? : "in_progress" | "done" | "todo",
|
||||
due_date? : "YYYY-MM-DD",
|
||||
priority? : "low" | "medium" | "high"
|
||||
})
|
||||
|
||||
Step 4: 告知更新结果
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## +assign:设置执行人
|
||||
|
||||
```
|
||||
Step 1: 确认任务 ID
|
||||
Step 2: 解析执行人名字 → user_id(查 users.json 缓存)
|
||||
→ 详见 huanxi-org references/resolve-ids.md
|
||||
Step 3: mcp__huanxi__task_set_assignees(task_id, assignee_ids=[user_id, ...])
|
||||
(此操作幂等:传完整列表,不是追加)
|
||||
Step 4: 告知设置结果
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## +get:查看任务详情
|
||||
|
||||
```
|
||||
Step 1: mcp__huanxi__task_get(task_id)
|
||||
Step 2: 展示完整任务信息(标题/描述/状态/进度/执行人/截止日/评论数)
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 关键约束
|
||||
|
||||
- **任务创建后不自动认领**:`task_create` 不会自动设置执行人,需要单独调用 `task_set_assignees`
|
||||
- **执行人是完整列表**:`task_set_assignees` 传入的是完整执行人 ID 列表(幂等替换),不是追加
|
||||
- **progress 是整数**:0-100 的整数,不是小数或百分比字符串
|
||||
- **模块创建权限**:用户必须是模块成员(任意角色)才能在该模块创建任务,否则返回 403
|
||||
@@ -0,0 +1,69 @@
|
||||
# 创建任务(+create)
|
||||
|
||||
## 必填信息收集
|
||||
|
||||
在调用 `task_create` 前,引导用户提供:
|
||||
|
||||
| 字段 | 必填 | 说明 |
|
||||
|------|------|------|
|
||||
| `module_id` | ✅ | 所属模块(从缓存解析名字 → ID) |
|
||||
| `title` | ✅ | 任务标题(简洁明了)|
|
||||
| `description` | 可选 | 任务详情、背景、验收标准 |
|
||||
| `due_date` | 可选 | 截止日期(YYYY-MM-DD 格式)|
|
||||
| `priority` | 可选 | `low` / `medium` / `high` / `urgent`,默认 medium |
|
||||
| `assignee_ids` | 可选 | 执行人(从缓存解析人名 → user_id)|
|
||||
|
||||
---
|
||||
|
||||
## 执行步骤
|
||||
|
||||
```
|
||||
Step 1: 解析模块名 → module_id
|
||||
→ Read ~/.claude/huanxi-cache/modules.json
|
||||
→ 模糊匹配模块名(详见 huanxi-org resolve-ids.md)
|
||||
|
||||
Step 2: [若用户提到执行人] 解析人名 → user_id
|
||||
→ Read ~/.claude/huanxi-cache/users.json
|
||||
→ 未命中 → mcp__huanxi__user_list(name=<人名>) → 追加写缓存
|
||||
|
||||
Step 3: 创建任务
|
||||
→ mcp__huanxi__task_create(
|
||||
module_id = "<模块ID>",
|
||||
title = "任务标题",
|
||||
description = "...", ← 可选
|
||||
due_date = "YYYY-MM-DD", ← 可选
|
||||
priority = "medium" ← 可选
|
||||
)
|
||||
→ 返回:task_id
|
||||
|
||||
Step 4: 设置执行人(若 Step 2 有解析到)
|
||||
→ mcp__huanxi__task_set_assignees(
|
||||
task_id = "<刚创建的 task_id>",
|
||||
assignee_ids = ["<user_id>"]
|
||||
)
|
||||
|
||||
Step 5: 告知创建结果
|
||||
→ 展示:任务标题、所属模块、执行人、截止日、task_id
|
||||
→ 询问:"是否需要进一步调整?"
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 权限说明
|
||||
|
||||
用户必须是所属模块的成员(任意角色)才能创建任务。若返回 403:
|
||||
- 可能未加入该模块
|
||||
- 建议联系模块负责人添加成员,或请管理员使用 Admin MCP 操作
|
||||
|
||||
---
|
||||
|
||||
## 子任务支持
|
||||
|
||||
若需创建子任务:
|
||||
```
|
||||
mcp__huanxi__task_create(
|
||||
module_id = "<模块ID>",
|
||||
title = "子任务标题",
|
||||
parent_task_id = "<父任务ID>" ← 传此字段即为子任务
|
||||
)
|
||||
```
|
||||
@@ -0,0 +1,51 @@
|
||||
# 任务看板(+board)
|
||||
|
||||
## 查看我的任务
|
||||
|
||||
```
|
||||
Step 1: mcp__huanxi__task_list_mine()
|
||||
→ 返回我认领的所有任务(跨模块)
|
||||
|
||||
Step 2: 按状态分组展示:
|
||||
────────────────────────────────────
|
||||
📋 待处理(todo)
|
||||
· [前端开发] 完成登录页面 UI 优化 ← 截止: 04-15
|
||||
· [后端API] 接口文档更新 ← 无截止日
|
||||
|
||||
🔄 进行中(in_progress)
|
||||
· [前端开发] 接口联调 60% ← 截止: 04-20
|
||||
|
||||
✅ 已完成(done)
|
||||
· [前端开发] 初始化项目结构 100%
|
||||
────────────────────────────────────
|
||||
```
|
||||
|
||||
## 查看模块看板
|
||||
|
||||
```
|
||||
Step 1: 确认模块(从 modules.json 缓存解析)
|
||||
Step 2: mcp__huanxi__task_list_by_module(module_id)
|
||||
→ 返回该模块所有任务(含其他成员的任务)
|
||||
Step 3: 按状态分组展示,标注每个任务的执行人
|
||||
```
|
||||
|
||||
## 人员任务看板(管理视角)
|
||||
|
||||
```
|
||||
Step 1: mcp__huanxi__people_get_board()
|
||||
→ 返回团队所有成员的任务分布(数量统计)
|
||||
Step 2: 展示每人的任务负载情况(适合分配任务前参考)
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 快速过滤
|
||||
|
||||
用户常见需求:
|
||||
|
||||
| 场景 | 做法 |
|
||||
|------|------|
|
||||
| "我今天要做什么" | task_list_mine() → 过滤 status=in_progress + 截止日临近 |
|
||||
| "某个模块的任务" | task_list_by_module(module_id) |
|
||||
| "即将到期的任务" | task_list_mine() → 筛选 due_date ≤ 今日+3天 |
|
||||
| "团队任务分布" | people_get_board() |
|
||||
@@ -0,0 +1,131 @@
|
||||
---
|
||||
name: huanxi-weekly
|
||||
description: "寰汐周报工作流(仅限模块负责人):查看本周周报状态(+check)、基于本周负责人日报 AI 汇总草稿(+draft)、提交周报(+submit)、撤回(+withdraw)。当用户说"写周报"、"提交周报"、"本周总结"、"周报进度"时触发。"
|
||||
---
|
||||
|
||||
# 寰汐周报(仅限模块负责人)
|
||||
|
||||
**前置条件:先 Read `../huanxi-shared/SKILL.md`(缓存规则 + TTL 策略)**
|
||||
|
||||
---
|
||||
|
||||
## 权限说明
|
||||
|
||||
**周报只有模块负责人(`my_role == 'leader'`)才需要提交。**
|
||||
|
||||
若用户不是任何模块的负责人:
|
||||
- 告知:"您目前不是任何模块的负责人,无需提交周报。"
|
||||
- 建议:若有疑问,可联系管理员确认模块角色。
|
||||
|
||||
---
|
||||
|
||||
## ISO 周数规范(重要)
|
||||
|
||||
寰汐周报使用 **ISO 8601 标准**:
|
||||
- `year` 字段存 **ISO year**(不是日历年)
|
||||
- 12月底/1月初可能跨年:如 2025-12-29 的 ISO year = 2026(第1周)
|
||||
- Python 获取:`date.isocalendar()` → `(iso_year, week, weekday)`
|
||||
|
||||
**当前日期 → ISO 周号计算示例:**
|
||||
- 2026-04-13(周一)→ year=2026, week=16
|
||||
|
||||
---
|
||||
|
||||
## 标准工作流
|
||||
|
||||
```
|
||||
Step 0: 确认负责人身份和模块
|
||||
→ Read ~/.claude/huanxi-cache/modules.json(24h 缓存)
|
||||
→ 若过期:mcp__huanxi__module_list() → 更新缓存
|
||||
→ 筛选 my_role == 'leader' 的模块列表
|
||||
→ 若列表为空:告知用户无需提交周报,流程终止
|
||||
→ 若有多个 leader 模块:询问"要提交哪些模块的周报?"
|
||||
|
||||
Step 1: 确定当前 ISO 周号
|
||||
→ 根据今日日期计算 (iso_year, iso_week)
|
||||
→ 告知:第 iso_week 周(周一 ~ 周日 日期范围)
|
||||
|
||||
Step 2: 批量拉取周报草稿
|
||||
→ mcp__huanxi__weekly_report_get_batch(
|
||||
year=iso_year,
|
||||
week=iso_week,
|
||||
module_ids=[<leader 模块的 ID 列表>]
|
||||
)
|
||||
→ 返回:各模块的现有草稿状态
|
||||
|
||||
Step 3: 逐日拉取本周负责人日报
|
||||
→ 计算本周日期范围(周一到今日,YYYY-MM-DD 格式列表)
|
||||
→ 对每个日期逐一调用:
|
||||
mcp__huanxi__leader_report_get_batch(
|
||||
date=<单个日期>,
|
||||
module_ids=[<leader 模块的 ID 列表>]
|
||||
)
|
||||
→ 汇总所有日期的返回数据
|
||||
→ 展示:本周每日负责人日报记录(含各日进展摘要 + 下属提交情况)
|
||||
|
||||
Step 4: 询问是否 AI 汇总
|
||||
→ 展示本周负责人日报数据后,询问:
|
||||
"是否需要 AI 根据本周负责人日报自动生成周报草稿?"
|
||||
→ 用户同意 → AI 基于 leader_report_batch 起草:
|
||||
· content:本周模块整体进展总结
|
||||
· next_week_plan:下周模块工作计划
|
||||
→ 展示草稿,供用户审阅和修改
|
||||
→ 用户拒绝 → 引导用户手动填写本周总结和下周计划
|
||||
|
||||
Step 5: 逐模块保存草稿
|
||||
→ 详见 references/weekly-draft.md
|
||||
→ mcp__huanxi__weekly_report_save(module_id, year, week_number, content, next_week_plan)
|
||||
|
||||
Step 6: 确认并提交
|
||||
→ 展示所有模块最终内容,等待用户明确确认("确认"/"提交"/"好的"等)
|
||||
→ ⚠️ 未收到确认前,禁止调用 weekly_report_submit
|
||||
→ mcp__huanxi__weekly_report_submit(module_id)
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Shortcuts
|
||||
|
||||
| 指令 | 说明 |
|
||||
|------|------|
|
||||
| `+check` | 查看本周周报状态(草稿/已提交) |
|
||||
| [`+draft`](references/weekly-draft.md) | 基于本周负责人日报 AI 生成草稿 |
|
||||
| `+submit` | 提交周报(必须先确认) |
|
||||
| `+withdraw` | 撤回已提交周报 |
|
||||
|
||||
---
|
||||
|
||||
## +check:查看本周状态
|
||||
|
||||
```
|
||||
1. 确认 leader 模块列表(同 Step 0)
|
||||
2. 若无 leader 模块:告知无需提交周报
|
||||
3. mcp__huanxi__weekly_report_get_batch(year, week, module_ids)
|
||||
4. 展示各模块周报状态:
|
||||
- submitted:已提交,展示摘要
|
||||
- draft:草稿中,展示已填内容
|
||||
- empty:未填,建议运行 +draft
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## +withdraw:撤回周报
|
||||
|
||||
```
|
||||
1. 确认 leader 模块(从 modules.json 缓存中取)
|
||||
2. 若有多个 leader 模块,询问要撤回哪个模块的周报
|
||||
3. 告知撤回影响(状态变为草稿,可重新编辑),等待用户确认
|
||||
4. mcp__huanxi__weekly_report_withdraw(module_id)
|
||||
(默认撤回当周;如需撤回历史周:传 year + week_number)
|
||||
5. 告知成功,可重新编辑后再次提交
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 关键约束
|
||||
|
||||
- **仅负责人可提交**:首先检查 `my_role == 'leader'`,非负责人直接告知无需操作
|
||||
- **禁止自动提交**:`weekly_report_submit(module_id)` 前必须展示全部内容并等待用户确认
|
||||
- **year 存 ISO year**:高频出错点,必须使用 `isocalendar()[0]`,不要用 `date.year`
|
||||
- 每个模块独立提交,有多个模块时逐一处理
|
||||
- 撤回后可重新编辑,不影响当前状态
|
||||
@@ -0,0 +1,97 @@
|
||||
# 周报草稿(+draft,仅限模块负责人)
|
||||
|
||||
## 数据来源
|
||||
|
||||
周报草稿基于**本周负责人日报汇总**(`leader_report_get_batch` 返回值),而非员工个人日报。
|
||||
|
||||
| 数据 | 来源 | 说明 |
|
||||
|------|------|------|
|
||||
| 本周每日负责人日报 | `leader_report_get_batch(date列表, module_ids)` | 含各日的模块进展 + 下属提交情况摘要 |
|
||||
| 现有周报草稿 | `weekly_report_get_batch(year, week, module_ids)` | 已填写的草稿(若有) |
|
||||
|
||||
---
|
||||
|
||||
## 草稿生成步骤
|
||||
|
||||
```
|
||||
Step 1: 解析本周负责人日报数据
|
||||
→ 按日期排列,提取每日:
|
||||
· 模块整体进展
|
||||
· 团队成员提交情况
|
||||
· 遇到的问题与风险
|
||||
|
||||
Step 2: AI 基于负责人日报起草 content(本周总结):
|
||||
- 提炼本周模块核心进展(任务推进 + 里程碑)
|
||||
- 汇总团队整体情况
|
||||
- 列出本周识别的问题与应对
|
||||
|
||||
Step 3: AI 起草 next_week_plan(下周计划):
|
||||
- 基于本周未完成项和下周目标
|
||||
- 结合用户补充的计划
|
||||
|
||||
Step 4: 展示草稿给用户审阅修改
|
||||
|
||||
Step 5: 用户确认后逐模块保存:
|
||||
mcp__huanxi__weekly_report_save(
|
||||
module_id = "<模块ID>",
|
||||
year = <ISO year>, ← 注意:ISO year,不是日历年
|
||||
week = <ISO week>,
|
||||
content = "<本周总结>",
|
||||
next_week_plan = "<下周计划>"
|
||||
)
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 内容格式建议(负责人视角)
|
||||
|
||||
**content(本周总结):**
|
||||
```markdown
|
||||
## 本周模块进展
|
||||
|
||||
- **[任务A]** 完成 XX 功能开发,进度推进至 80%(负责人:张三)
|
||||
- **[任务B]** 完成接口联调,已提测(负责人:李四)
|
||||
|
||||
## 团队提交情况
|
||||
|
||||
本周全员提交日报,无缺报。
|
||||
|
||||
## 问题与风险
|
||||
|
||||
- [周三] 第三方接口超时问题,已升级厂商处理,预计周一恢复
|
||||
|
||||
## 本周总体评估
|
||||
|
||||
整体按计划推进,无阻塞性风险。
|
||||
```
|
||||
|
||||
**next_week_plan(下周计划):**
|
||||
```markdown
|
||||
- [任务A] 目标完成剩余 20% 并提测
|
||||
- [任务B] 协助测试团队完成验收
|
||||
- 启动 [新需求] 的技术调研
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 已有草稿处理
|
||||
|
||||
若 `weekly_report_get_batch()` 中该模块已有草稿(非 empty):
|
||||
- 展示现有草稿内容
|
||||
- 询问:"是在此基础上修改,还是基于本周负责人日报重新生成?"
|
||||
- 基于用户选择执行对应操作
|
||||
|
||||
---
|
||||
|
||||
## 多模块处理
|
||||
|
||||
```
|
||||
for module in leader_modules:
|
||||
1. 提取该模块的 leader_report_batch(本周各日记录)
|
||||
2. AI 生成草稿(content + next_week_plan)
|
||||
3. 展示给用户确认/修改
|
||||
4. weekly_report_save(module_id=module.id, year, week, ...)
|
||||
5. 告知:模块 "{module.name}" 草稿已保存 ✅
|
||||
|
||||
所有模块草稿完成后:统一展示,询问是否提交
|
||||
```
|
||||
Reference in New Issue
Block a user