---
name: work-journal
description: AI 工作秘书 — 语义识别工作记录/待办/日程，自动归档，汇总日报周报，每日主动推送
---

# AI 工作秘书

## 配置（安装时确认）

| 配置项 | 默认值 | 说明 |
|--------|--------|------|
| JOURNAL_DIR | `~/Documents/work-journal/journal/` | 工作日记存放目录 |
| 钉钉联动 | 关闭 | 需安装官方开源 dws CLI（DingTalk-Real-AI/dingtalk-workspace-cli；配套技能包随本包 `vendor/dws-skills.zip` 附带），配置后可开启日程/待办/聊天记录拉取 |
| 知识库联动 | 关闭 | 有个人知识库（wiki）时可开启 |

> 下文标注 **[钉钉可选]** / **[知识库可选]** 的段落，未开启对应联动时跳过，改为只写入 journal 文件。

## 触发条件

**语义触发（主要）**：用户发来一段描述工作、安排、待办的自然语言，无需任何前缀。系统通过语义分析自动分类处理。

**前缀触发（兜底）**：`记:` 明确标记为工作记录，`待办:` 明确标记为待办。

**回顾触发**：用户问"今天做了什么"、"这周完成了什么"、"我有什么待办"、"写周报"等。

**Cron 触发**：每日定时主动推送（见 README 的 cron 模板）。

## 核心：语义解析引擎

用户发来一段话时，按以下规则拆解：

### 第一步：拆句

将用户消息按语义拆成独立的命题。一段话可能包含多条不同类型的内容。

**示例**：
> 今天跟张工对齐了报表系统的验收标准，明天下午3点要开产品评审会，还要跟进服务器扩容的审批

拆解为：
1. 今天跟张工对齐了报表系统的验收标准
2. 明天下午3点要开产品评审会
3. 还要跟进服务器扩容的审批

### 第二步：分类

对每个命题判断类别：

| 类别 | 识别信号 | 处理方式 |
|------|---------|---------|
| **工作记录** | 已完成的事、已发生的沟通、已确认的结论 | 写入当日 `工作记录` |
| **待办** | "要跟进"、"待确认"、"需要做"、"别忘了"、"XX前完成"、将来时态 | 写入 `待办`，提取截止时间 |
| **日程** | 具体时间+事件（"明天下午3点开会"、"周五上午评审"） | 写入工作记录；**[钉钉可选]** 自动创建钉钉日程（带提醒） |
| **提醒** | "提醒我"、"到时候提醒"、"别忘了XX" | 创建 cron 定时提醒；**[钉钉可选]** 同时创建钉钉待办/日程 |

**分类优先级**（一条命题可能同时命中多个类别）：

提醒 > 日程 > 待办 > 工作记录

### 第三步：提取结构化字段

对每个命题提取：

| 字段 | 说明 | 示例 |
|------|------|------|
| 原文 | 用户原话 | "跟张工对齐了报表系统的验收标准" |
| 类别 | 工作记录/待办/日程/提醒 | 工作记录 |
| 时间 | 发生时间或截止时间 | 今天 |
| 人物 | 涉及的人员 | 张工 |
| 关联对象 | 涉及的流程/项目 | 报表系统 |
| 截止时间 | 待办的 deadline（如有） | 本周五 |
| 日程时间 | 日程的具体时间（如有） | 明天15:00 |

### 第四步：执行写入 + 联动

**工作记录** → 追加到当日 `工作记录` 区域

**待办** → 追加到当日 `待办` 区域

**日程** → 写入工作记录；**[钉钉可选]** 自动调用 dws 创建钉钉日程，不需要再问"要不要创建"

**提醒** → 创建一次性 cron（见下方"提醒规则"）；**[钉钉可选]** 同时创建钉钉待办或日程

**[知识库可选]** 命题涉及流程/制度/架构变更时 → 提示"要不要记录到知识库？"

### 回复格式

处理完后统一回复，让用户一眼看清：

> ✅ 已记录：
> - 跟张工对齐了报表系统验收标准
>
> 📌 待办：跟进服务器扩容审批
>
> 📅 日程：明天 15:00 产品评审会 — 已创建提醒

用户只需回复"好"/"创建"/"记录"即可，不需要重复说内容。

## 工作记录存储

- **位置**：`JOURNAL_DIR`（默认 `~/Documents/work-journal/journal/`）
- **每日一文件**：`YYYY-MM-DD.md`

### 每日文件模板

```markdown
---
date: YYYY-MM-DD
weekday: 周一/.../周日
created: YYYY-MM-DD
---

# YYYY-MM-DD 工作记录

## 日程
（自动拉取或手动记录）

## 工作记录
1. HH:MM 内容...
2. HH:MM 内容...

## 待办
- [ ] 待办事项1（截止：YYYY-MM-DD / 来源：第N条工作记录）
- [ ] 待办事项2

## 完成待办
- [x] 已完成的事项（完成于 YYYY-MM-DD）

## 备注
（其他零散信息）
```

## 提醒规则

当用户说"提醒我"、"到时候提醒"、"别忘了XX"等时：

1. **基础通道（必做）**：创建一次性 cron，到点通过消息渠道推送。cron 要求：
   - `deleteAfterRun: true`（一次性提醒）
   - `delivery.mode: announce` + 正确的 channel/to
   - `timeoutSeconds` 至少 120
2. **[钉钉可选] 主通道**：
   - 待办事项（需在指定时间前完成）→ `dws todo task create --title "提醒：XX" --executors <YOUR_DINGTALK_USERID> --due "..." `
   - 会议/固定时间事件 → `dws calendar event create --summary "提醒：XX" --start "..." --remind 15`
   - 语义模糊不确定是待办还是日程 → **先询问用户**
3. 只能确定大概时间（"节后提醒我"）→ 先和用户确认具体时间

回复格式：

```
✅ 已设好提醒：
⏰ 5月6日 09:00 通过微信提醒你「XX事项」
📌 钉钉待办已同步创建（到期推送）    ← 仅开启钉钉联动时
```

## 待办管理

### 添加
语义识别自动提取，或 `待办: XXX` 手动添加。

### 查看
用户说"我有什么待办"/"待办列表"时：
1. 扫描 `JOURNAL_DIR` 下所有文件的 `- [ ]` 项
2. 按截止时间排列，过期的标红
3. 回复汇总

### 完成
用户说"XX做完了"/"完成: XX"时：
1. 模糊匹配找到对应待办
2. 标记为 `- [x]`
3. 在当日 `完成待办` 区域记录

## 回顾与汇总

用户问"今天做了什么"/"这周完成了什么"时：

1. 读取对应日期范围的 journal 工作记录
2. **[钉钉可选]** 拉取钉钉数据补全（用 dws）：
   - 聊天记录：`dws chat message list-by-sender --sender-user-id "<YOUR_DINGTALK_USERID>" --start ... --end ... --limit 50 --yes --format json`（用 `list-by-sender`，不要用 `list-all`）
   - 日程：`dws calendar event list --start ... --end ... --format json`
   - 待办：`dws todo task list --format json`
3. 聚合：journal 记录 +（可选）聊天记录摘要 + 日程 + 待办完成情况
4. 按人名/项目分组输出，每个对象提取关键话题（1-2 句摘要，不逐条复述）

**周报**：用户说"写周报"/"这周总结"时，同样流程，日期范围扩展到整周，生成结构化周报，可选保存为 Word/PDF。

## 每日主动互动（Cron）

**早间（工作日 8:00）**：
1. 列出当天日程
2. 列出未完成待办（含过期标红）
3. 推送晨间简报

**晚间（工作日 20:00）**：
1. 汇总当天工作记录
2. 待办完成情况
3. 询问："今天还有什么要记录的吗？"

（cron 任务模板见 README）

## 文件操作权限

- **读取**：自由读取 `JOURNAL_DIR` 下所有文件
- **写入**：可直接写入 Markdown
- **不修改历史**：已写入的当日文件只追加，不回溯修改（完成待办除外）
