chore: sync before memory update

This commit is contained in:
SkyJourney
2026-05-01 12:04:12 +08:00
parent 1b3ae007ee
commit 0c46ed0306
22 changed files with 1850 additions and 20 deletions
@@ -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.json24h 缓存)
→ 筛选 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
## 两种草稿模式
### 模式 AAI 自动生成
```
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 问题
```
+133
View File
@@ -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 → 检查 TTL24h
→ 未过期:直接展示
→ 过期或不存在:执行 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.json24h 缓存)
→ 若过期: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}" 草稿已保存 ✅
所有模块草稿完成后:统一展示,询问是否提交
```