PicoBot/skills/lark-markdown/references/lark-markdown-diff.md
ooodc a7883dbed9 refactor(todo): 重构待办事项管理逻辑及更新状态规则
- 移除 TodoItem 中的 priority、created_at 和 updated_at 字段
- 强制每个任务都必须有唯一 id,且由用户负责生成
- 修改合并模式逻辑,merge=true 下保留未提及的旧任务
- 支持已完成和已取消任务重新激活(状态改回 pending 或 in_progress)
- 禁止 in_progress 状态退回到 pending,必须标记为 completed 或 cancelled
- 优化状态转换校验,允许特定状态间合法切换
- 简化任务变更消息,移除详细的新增/更新/移除统计
- 更新文档和示例,明确 id 必须由用户生成和使用
- 修复和补充测试,增强状态转换和合并模式验证
- 调整任务时间戳生成逻辑,统一使用当前时间及索引
- 该变更提供更合理的任务状态机械及管理模式,提升稳定性和易用性
2026-06-13 09:22:33 +08:00

157 lines
6.3 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# markdown +diff
> **前置条件:** 先阅读 [`../lark-shared/SKILL.md`](../../lark-shared/SKILL.md) 了解认证、全局参数和安全规则。
比较 Drive 中原生 Markdown 的两个历史版本,或比较远端 Markdown 与本地 `.md` 草稿。需要历史版本号时,先用 [`drive +version-history`](../../lark-drive/references/lark-drive-version-history.md) 获取 `version`,不要使用 `tag`
## 命令
```bash
# 比较两个远端版本
lark-cli markdown +diff \
--file-token boxcnxxxx \
--from-version 7633658129540910621 \
--to-version 7633658129540910628
# 比较历史版本与远端最新版本
lark-cli markdown +diff \
--file-token boxcnxxxx \
--from-version 7633658129540910621
# 比较远端最新版本与本地草稿
lark-cli markdown +diff \
--file-token boxcnxxxx \
--file ./draft.md \
--format pretty
# 比较指定远端版本与本地草稿
lark-cli markdown +diff \
--file-token boxcnxxxx \
--from-version 7633658129540910621 \
--file ./draft.md
# 预览底层请求
lark-cli markdown +diff \
--file-token boxcnxxxx \
--from-version 7633658129540910621 \
--to-version 7633658129540910628 \
--dry-run
```
## 参数
| 参数 | 必填 | 说明 |
|------|------|------|
| `--file-token` | 是 | 目标 Markdown 文件 token |
| `--from-version` | 否 | 基准远端版本;不传 `--file` 时必填,传 `--file` 时省略表示“远端最新 vs 本地文件” |
| `--to-version` | 否 | 目标远端版本;要求同时传 `--from-version`,且不能与 `--file` 一起使用。省略时表示远端最新版本 |
| `--file` | 否 | 本地 `.md` 文件路径;传入后进入“远端 vs 本地”比较模式 |
| `--context-lines` | 否 | unified diff 每个 hunk 前后保留的上下文行数,默认 `3` |
| `--format` | 否 | 仅支持 `json`(默认)和 `pretty` |
## 关键行为
- `--file` 存在时:
- 省略 `--from-version` = 比较“远端最新版本 vs 本地文件”
- 传入 `--from-version` = 比较“指定远端版本 vs 本地文件”
- `--to-version` 只能用于“远端版本 vs 远端版本”,不能与 `--file` 同时出现
- `--format pretty` 输出带颜色的 unified diff`--format json` 返回结构化摘要和完整 diff 文本
- 无差异时:
- `json` 输出里 `changed=false`
- `pretty` 输出固定为 `No differences.`
## 返回值
```json
{
"ok": true,
"identity": "user",
"data": {
"changed": true,
"mode": "remote_vs_remote",
"file_token": "boxcnxxxx",
"from_version": "7633658129540910621",
"to_version": "7633658129540910628",
"from_label": "a/boxcnxxxx@version:7633658129540910621",
"to_label": "b/boxcnxxxx@version:7633658129540910628",
"added_lines": 3,
"deleted_lines": 2,
"context_lines": 3,
"hunks": [
{
"header": "@@ -1,6 +1,7 @@",
"old_start": 1,
"old_lines": 6,
"new_start": 1,
"new_lines": 7
}
],
"diff": "--- a/boxcnxxxx@version:7633658129540910621\n+++ b/boxcnxxxx@version:7633658129540910628\n@@ -1,2 +1,2 @@\n..."
}
}
```
完整字段说明:
| 字段 | 层级 | 含义 |
|------|------|------|
| `ok` | 顶层 | CLI 通用成功标记;`true` 表示命令执行成功 |
| `identity` | 顶层 | 本次执行使用的身份,通常是 `user``bot` |
| `data` | 顶层 | 本次 diff 的业务结果对象 |
| `changed` | `data` | 是否存在差异;`true` 表示两侧内容不同,`false` 表示完全一致 |
| `mode` | `data` | 比较模式;`remote_vs_remote` = 远端对远端,`remote_vs_local` = 远端对本地 |
| `file_token` | `data` | 被比较的远端 Markdown 文件 token |
| `from_version` | `data` | 基准远端版本号;远端最新 vs 本地时可能为空字符串 |
| `to_version` | `data` | 目标远端版本号;当目标侧是远端最新版本或本地文件时通常为空字符串 |
| `from_label` | `data` | unified diff 基准侧标签名,会直接出现在 `diff` 文本的 `---` 头部 |
| `to_label` | `data` | unified diff 目标侧标签名,会直接出现在 `diff` 文本的 `+++` 头部 |
| `added_lines` | `data` | 新增行数统计 |
| `deleted_lines` | `data` | 删除行数统计 |
| `context_lines` | `data` | 每个 hunk 前后保留的上下文行数,对应传入的 `--context-lines` |
| `hunks` | `data` | 结构化的变更块摘要数组;每个元素对应 patch 里的一个 `@@ ... @@` 段 |
| `diff` | `data` | 完整 unified diff 文本;最适合直接阅读或保存 |
| `local_file` | `data` | 仅在 `remote_vs_local` 模式下出现;值就是传给 `--file` 的本地 Markdown 路径 |
标签字段补充:
- `from_label` / `to_label` 只用于标识 diff 两侧,不代表额外 API 字段
- `from_label` 表示基准侧,`to_label` 表示目标侧
- 远端版本通常形如 `a/<file_token>@version:<version>``b/<file_token>@version:<version>`
- 当目标侧是远端最新版本时,`to_label` 形如 `b/<file_token>@latest`
- 当目标侧是本地文件时,`to_label` 形如 `b/./draft.md`
`hunks` 子字段说明:
| 字段 | 含义 |
|------|------|
| `header` | 原始 hunk 头,例如 `@@ -3,1 +3,1 @@` |
| `old_start` | 旧内容从第几行开始 |
| `old_lines` | 旧内容这段覆盖多少行 |
| `new_start` | 新内容从第几行开始 |
| `new_lines` | 新内容这段覆盖多少行 |
补充说明:
- `hunks` 适合 agent 或脚本快速定位变更范围;完整逐行内容仍以 `diff` 字段为准
- `changed=false` 时,`hunks` 通常为空数组,`diff` 通常为空字符串;如果使用 `--format pretty`,终端输出会是 `No differences.`
远端 vs 本地时会额外返回:
```json
{
"local_file": "./draft.md"
}
```
- `local_file`
- 只有传了 `--file`、进入“远端 vs 本地”模式时才会返回
- 值就是本次命令实际比较的本地 Markdown 路径,也就是你传给 `--file` 的那个路径
- 它表示“目标侧本地文件”,不是临时下载文件,也不是远端文件名
- 如果没有这个字段,说明本次是“远端版本 vs 远端版本”
## 参考
- [lark-markdown](../SKILL.md) — Markdown 域总览
- [lark-drive-version-history](../../lark-drive/references/lark-drive-version-history.md) — 获取可用于 diff 的历史版本号
- [lark-shared](../../lark-shared/SKILL.md) — 认证和全局参数