- 移除 TodoItem 中的 priority、created_at 和 updated_at 字段 - 强制每个任务都必须有唯一 id,且由用户负责生成 - 修改合并模式逻辑,merge=true 下保留未提及的旧任务 - 支持已完成和已取消任务重新激活(状态改回 pending 或 in_progress) - 禁止 in_progress 状态退回到 pending,必须标记为 completed 或 cancelled - 优化状态转换校验,允许特定状态间合法切换 - 简化任务变更消息,移除详细的新增/更新/移除统计 - 更新文档和示例,明确 id 必须由用户生成和使用 - 修复和补充测试,增强状态转换和合并模式验证 - 调整任务时间戳生成逻辑,统一使用当前时间及索引 - 该变更提供更合理的任务状态机械及管理模式,提升稳定性和易用性
4.8 KiB
4.8 KiB
markdown +patch
前置条件: 先阅读
../lark-shared/SKILL.md了解认证、全局参数和安全规则。
对 Drive 中已有的原生 Markdown 文件做局部文本替换,并返回是否实际写入了新版本。
命令
# 字面量替换
lark-cli markdown +patch \
--file-token boxcnxxxx \
--pattern 'hello markdown' \
--content 'hello patched'
# 正则替换(RE2)
lark-cli markdown +patch \
--file-token boxcnxxxx \
--regex \
--pattern 'hello (.+)' \
--content 'hi $1'
# 正则 pattern 含特殊字符时要显式转义
lark-cli markdown +patch \
--file-token boxcnxxxx \
--regex \
--pattern 'version \\(1\\.0\\)' \
--content 'version (2.0)'
# 删除匹配内容
lark-cli markdown +patch \
--file-token boxcnxxxx \
--pattern ' debug' \
--content ''
# --pattern / --content 也支持 @file
lark-cli markdown +patch \
--file-token boxcnxxxx \
--pattern @./pattern.txt \
--content @./replacement.md
# 从 stdin 读取 replacement
printf 'hi patched\n' | \
lark-cli markdown +patch \
--file-token boxcnxxxx \
--pattern 'hello markdown' \
--content -
# 预览底层编排
lark-cli markdown +patch \
--file-token boxcnxxxx \
--pattern 'hello markdown' \
--content 'hello patched' \
--dry-run
参数
| 参数 | 必填 | 说明 |
|---|---|---|
--file-token |
是 | 目标 Markdown 文件 token |
--pattern |
是 | 要匹配的文本;默认按字面量处理;支持直接传字符串、@file、-(stdin) |
--content |
是 | 替换后的内容;支持直接传字符串、@file、-(stdin);允许空字符串 '',表示删除匹配内容 |
--regex |
否 | 将 --pattern 按 Go RE2 正则解释;--content 支持 $1 这类分组替换;如果需要字面 $,请写成 $$ |
关键约束
- 当前只支持单组
--pattern/--content --pattern必须显式传入且不能为空字符串--content必须显式传入,但允许为空字符串- 未加
--regex时,行为等价于对整份 Markdown 文本执行strings.ReplaceAll - 加了
--regex时,行为等价于对整份 Markdown 文本执行 RE2 全量替换;--content里的$1、${name}会按 Go regexp replacement template 解释,字面$请写成$$ - 替换后的最终 Markdown 不能为空;如果 patch 结果是空字符串,CLI 会直接报错,不会上传空文件,因为 Drive 不支持零字节 Markdown,且空文件通常是误操作
0命中时命令仍然成功返回,但不会上传新版本
Good / Bad
# BAD: pattern 含正则特殊字符但未转义,容易匹配错误位置
lark-cli markdown +patch \
--file-token boxcnxxxx \
--regex \
--pattern 'version (1.0)' \
--content 'version (2.0)'
# GOOD: 显式转义括号和点号
lark-cli markdown +patch \
--file-token boxcnxxxx \
--regex \
--pattern 'version \\(1\\.0\\)' \
--content 'version (2.0)'
实现边界
- 该命令的内部语义是:download -> local replace -> overwrite upload
- 它不是服务端原子 patch;如果有人在你下载后、上传前更新了同一文件,本次 patch 仍可能覆盖那次中间修改
- 它不会返回详细匹配位置,只返回命中数量
--dry-run会同时展示两种可能的上传路径:upload_all(小文件)和upload_prepare/upload_part/upload_finish(大文件分片上传)
返回值
命中并写入新版本:
{
"ok": true,
"identity": "user",
"data": {
"updated": true,
"mode": "literal",
"match_count": 1,
"version": "7639217385152646325",
"size_bytes_before": 39,
"size_bytes_after": 41
}
}
未命中:
{
"ok": true,
"identity": "user",
"data": {
"updated": false,
"mode": "literal",
"match_count": 0,
"version": "",
"size_bytes_before": 41,
"size_bytes_after": 41
}
}
其中:
updated表示本次是否真的上传了新版本mode为literal或regexmatch_count是匹配次数version只有在updated=true时才会有值size_bytes_before/size_bytes_after分别是替换前后的 Markdown 大小
适用场景
- 只需要替换一小段 Markdown 文本,而不想自己手动
fetch -> edit -> overwrite - 需要基于正则做简单批量替换
- 需要判断“这次是否真的改到了内容”
不适用场景
- 需要 rename / move / delete / permission / comment 管理:切到
lark-drive - 需要多组 patch 一次完成:当前不支持,改为多次调用
markdown +patch - 需要真正原子更新:当前能力不提供
参考
- lark-markdown — Markdown 域总览
- lark-shared — 认证和全局参数