@amaster.ai/pi-lark 0.1.2-beta.39 → 0.1.2-beta.41

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (64) hide show
  1. package/package.json +2 -2
  2. package/skills/lark-apps/SKILL.md +10 -0
  3. package/skills/lark-apps/references/lark-apps-db-execute.md +1 -1
  4. package/skills/lark-apps/references/lark-apps-db.md +2 -2
  5. package/skills/lark-calendar/SKILL.md +89 -31
  6. package/skills/lark-calendar/references/lark-calendar-create.md +7 -39
  7. package/skills/lark-calendar/references/lark-calendar-room-find.md +5 -9
  8. package/skills/lark-calendar/references/lark-calendar-rsvp.md +1 -5
  9. package/skills/lark-calendar/references/lark-calendar-schedule-clear-time.md +59 -0
  10. package/skills/lark-calendar/references/lark-calendar-schedule-fuzzy-time.md +88 -0
  11. package/skills/lark-calendar/references/lark-calendar-schedule-meeting.md +67 -210
  12. package/skills/lark-calendar/references/lark-calendar-suggestion.md +1 -5
  13. package/skills/lark-calendar/references/lark-calendar-update.md +2 -7
  14. package/skills/lark-doc/SKILL.md +1 -1
  15. package/skills/lark-doc/references/lark-doc-fetch.md +4 -2
  16. package/skills/lark-doc/references/lark-doc-mindnote.md +17 -2
  17. package/skills/lark-doc/references/lark-doc-whiteboard.md +4 -0
  18. package/skills/lark-doc/references/lark-doc-xml-extended-blocks.md +34 -0
  19. package/skills/lark-doc/references/lark-doc-xml.md +3 -2
  20. package/skills/lark-doc/references/style/lark-doc-create-workflow.md +4 -3
  21. package/skills/lark-drive/SKILL.md +7 -3
  22. package/skills/lark-drive/references/lark-drive-delete.md +12 -0
  23. package/skills/lark-drive/references/lark-drive-files-list.md +27 -2
  24. package/skills/lark-drive/references/lark-drive-inspect.md +2 -0
  25. package/skills/lark-drive/references/lark-drive-permission-guide.md +12 -0
  26. package/skills/lark-drive/references/lark-drive-push.md +32 -5
  27. package/skills/lark-drive/references/lark-drive-workflow-knowledge-organize.md +26 -20
  28. package/skills/lark-drive/references/lark-drive-workflow.md +2 -1
  29. package/skills/lark-mail/SKILL.md +12 -9
  30. package/skills/lark-mail/references/lark-mail-forward.md +1 -1
  31. package/skills/lark-mail/references/lark-mail-message-modify.md +48 -0
  32. package/skills/lark-mail/references/lark-mail-message-trash.md +41 -0
  33. package/skills/lark-mail/references/lark-mail-reply-all.md +1 -1
  34. package/skills/lark-mail/references/lark-mail-reply.md +1 -1
  35. package/skills/lark-mail/references/lark-mail-watch.md +1 -1
  36. package/skills/lark-markdown/SKILL.md +3 -2
  37. package/skills/lark-markdown/references/lark-markdown-create.md +22 -2
  38. package/skills/lark-minutes/references/lark-minutes-download.md +0 -2
  39. package/skills/lark-minutes/references/lark-minutes-search.md +0 -2
  40. package/skills/lark-minutes/references/lark-minutes-speaker-replace.md +0 -2
  41. package/skills/lark-minutes/references/lark-minutes-summary.md +0 -2
  42. package/skills/lark-minutes/references/lark-minutes-todo.md +0 -2
  43. package/skills/lark-minutes/references/lark-minutes-update.md +0 -2
  44. package/skills/lark-minutes/references/lark-minutes-upload.md +10 -10
  45. package/skills/lark-shared/SKILL.md +18 -0
  46. package/skills/lark-slides/references/asset-planning.md +16 -4
  47. package/skills/lark-slides/references/lark-slides-whiteboard.md +31 -30
  48. package/skills/lark-slides/references/planning-layer.md +31 -1
  49. package/skills/lark-slides/references/slides_chart_demo.xml +1 -0
  50. package/skills/lark-slides/references/slides_xml_schema_definition.xml +1 -1
  51. package/skills/lark-slides/references/xml-format-guide.md +50 -1
  52. package/skills/lark-slides/references/xml-schema-quick-ref.md +1 -1
  53. package/skills/lark-task/references/lark-task-create.md +14 -1
  54. package/skills/lark-vc/references/lark-vc-recording.md +0 -2
  55. package/skills/lark-vc-agent/SKILL.md +13 -10
  56. package/skills/lark-vc-agent/references/lark-vc-agent-meeting-events.md +64 -36
  57. package/skills/lark-vc-agent/references/lark-vc-agent-meeting-list-active.md +7 -7
  58. package/skills/lark-whiteboard/references/lark-whiteboard-workflow.md +5 -2
  59. package/skills/lark-wiki/SKILL.md +4 -2
  60. package/skills/lark-wiki/references/lark-wiki-node-get.md +1 -1
  61. package/skills/lark-wiki/references/lark-wiki-node-list.md +9 -2
  62. package/skills/lark-calendar/references/lark-calendar-agenda.md +0 -78
  63. package/skills/lark-calendar/references/lark-calendar-freebusy.md +0 -124
  64. package/skills/lark-calendar/references/lark-calendar-search-event.md +0 -29
@@ -1,206 +1,95 @@
1
1
  # 预约/改约日程或会议、查询/搜索可用会议室的工作流
2
2
 
3
- ## CRITICAL 执行摘要(先按这个骨架执行,再看下方细则)
3
+ ## 执行摘要
4
4
 
5
- - **第一步永远是判断任务类型:新建日程,还是编辑已有日程。** 不要把“预约/查会议室”默认等同于“新建”。
6
- - **编辑已有日程时,必须先定位目标日程或实例的 `event_id`。** 用户一旦给出了既有日程锚点(标题、时间段、`这个日程`、`这场会`)并表达修改动作(加人、删人、改时间、换会议室等),默认走编辑流。
7
- - **默认做智能助理,不做表单填写机。** 能根据上下文补全的默认值就直接补全,避免把用户带入表单式问答。
8
- - **新建流先补默认值,编辑流先继承已定位日程信息。** 默认值包括标题、参会人、时长,以及在“完全无时间信息”时的默认时间范围;编辑流则优先复用已定位日程的标题、时间、已有参与人和会议室信息作为基线。
9
- - **只有三类场景才主动追问用户**:存在时间冲突、搜索结果无法唯一确定、时间语义本身有歧义。
10
- - **编辑流的时间基准必须明确。** 如果编辑时不改时间,则后续会议室搜索必须基于已定位日程的原始起止时间;如果既改时间又加会议室,必须先确定最终时间,再基于该时间搜索会议室。
11
- - **编辑流中“新增会议室”默认是增量语义。** 如果用户说的是“加会议室/再加一个会议室”,最终 `+update` 只做 `add`,默认保留已有会议室;只有在用户明确说“更换会议室/移除会议室”时,才执行旧会议室删除。
12
- - **明确时间**:若需要会议室,先 `+room-find`;再 `+freebusy` 判断参会人忙闲;有冲突时先说明冲突,再让用户决定继续当前时间还是改走 `+suggestion`。
13
- - **模糊时间或无时间信息**:先 `+suggestion` 产出候选时间块;若需要会议室,再把这些时间块批量交给 `+room-find`,将“候选时间 + 对应可用会议室”一次性展示给用户选择。
14
- - **BLOCKING REQUIREMENT: 只要面临时间方案(模糊时间/无时间)或会议室方案(需要会议室)的选择,必须先向用户展示选项并等待用户明确确认,绝对禁止在未获用户确认的情况下直接执行创建新日程或更新既有日程。**
15
- - **用户选中了 `+suggestion` 返回的候选时间块后,不要再次调用 `+freebusy`。** 用户确认后直接进入最终落地操作:创建新日程,或更新既有日程。
16
- - **当用户说“查会议室”“找会议室”“搜可用会议室”时,默认意图是查会议室可用性,不是检索会议室资源名录。**
17
- - **必须按顺序执行。** 不要跳过“任务类型判定”“目标日程定位(编辑流)”“补默认值/继承基线信息”“判断时间明确性”这些前置步骤。
18
-
19
- > **💡 核心原则:做智能助理,充分利用默认值规则(如默认标题、时长、参与人等)自动补全信息。极力避免像“表单填写机”一样频繁打断并反问用户,仅在必须决策的冲突或无法唯一确定的场景下才发起询问。**
5
+ - **第一步永远是判断任务类型:新建日程,还是编辑已有日程。**
6
+ - **编辑已有日程时,必须先定位目标日程或实例的 `event_id`。**
7
+ - **默认做智能助理,不做表单填写机。** 能根据上下文补全的默认值就直接补全,仅在必须决策的冲突或无法唯一确定的场景下才发起询问。
8
+ - **新建流先补默认值,编辑流先继承已定位日程信息。**
9
+ - **明确时间** → 进入 [明确时间分支](./lark-calendar-schedule-clear-time.md)
10
+ - **模糊时间或无时间信息** → 进入 [模糊时间分支](./lark-calendar-schedule-fuzzy-time.md)
11
+ - **BLOCKING REQUIREMENT**: 面临时间方案或会议室方案的选择时,必须先向用户展示选项并等待确认,禁止未经确认直接创建/更新日程。
12
+ - **必须按顺序执行。** 不要跳过"任务类型判定""目标日程定位(编辑流)""补默认值/继承基线信息""判断时间明确性"这些前置步骤。
20
13
 
21
14
  ## 严禁行为
22
15
 
23
- - **严禁在未读取对应子命令文档(如 `lark-calendar-room-find.md`、`lark-calendar-suggestion.md`)的情况下直接调用命令!** 必须先阅读文档掌握最新参数要求与规范。
24
- - **严禁在尚未判断“新建”还是“编辑”之前,就直接进入创建日程或查会议室动作。**
25
- - **严禁把“给明天上午的‘产品发布会’加人/加群/加会议室”这类带有既有日程锚点 + 修改动词的请求,当成新建日程。** 这类请求必须先定位目标日程。
26
- - **严禁在编辑已有日程时跳过目标定位步骤。** 未拿到唯一的 `event_id` 前,不得调用 `+update`、也不得基于猜测时间去查会议室。
27
- - **严禁在用户仅要求“查会议室”但未提供明确时间时,直接调用 `+room-find`!** 必须先默认一个合理时间范围,调用 `+suggestion` 拿到候选时间块,再将时间块传给 `+room-find`。
28
- - **不要在用户完全没给时间时,直接反问“你想约什么时候”。** 先补一个合理时间范围,再进入 `+suggestion`。
29
- - **不要在“需要会议室 + 时间模糊”的场景下,先让用户只选时间。** 应先批量查出每个候选时间对应的可用会议室,再让用户一次性完成选择。
30
- - **不要在用户已经选中 `+suggestion` 候选时间后,再重复调用 `+freebusy`。**
31
- - **不要在用户未明确说出城市时,仅凭园区/办公室名自动补城市。**
32
- - **严禁在面临时间方案或会议室方案的选择时(模糊时间、无时间或需要会议室),未经用户确认就擅自创建新日程或更新既有日程。**
16
+ - **严禁在未读取对应子命令文档前直接调用命令。**
17
+ - **严禁在尚未判断"新建"还是"编辑"之前,就直接进入创建日程或查会议室动作。**
18
+ - **严禁把带有既有日程锚点 + 修改动词的请求当成新建日程。**
19
+ - **严禁在编辑已有日程时跳过目标定位步骤。** 未拿到唯一 `event_id` 前,不得调用 `+update`。
20
+ - **严禁在面临时间/会议室方案选择时,未经用户确认就擅自创建/更新日程。**
33
21
 
34
22
  ## 适用场景
35
23
 
36
- - “帮我约个会”
37
- - “下周找时间和 XX 开会”
38
- - “帮我订个会议室”
39
- - “帮我找/搜索一个可用的会议室”
40
- - “帮我推荐一个我以前常用的会议室”
41
- - “查询明天下午可用的会议室”
42
- - “明天下午3点约个日程/日历”
43
- - “把明天上午的日程‘产品发布会’加上 小明
44
- - “给下周一的周会换个会议室”
45
- - “把这个日程改到明天下午,并加上学清 F201”
24
+ - "帮我约个会" / "下周找时间和 XX 开会"
25
+ - "帮我订/找/搜索一个可用会议室"
26
+ - "明天下午3点约个日程"
27
+ - "把明天上午的日程加上 小明"
28
+ - "给下周一的周会换个会议室"
29
+ - "把这个日程改到明天下午,并加上学清 F201"
46
30
 
47
31
  ## 核心概念
48
32
 
49
- - **会议室是日程的一种参与人(attendee / resource),不能脱离日程单独预定。**
50
- - **预定或查找会议室,均需先确定时间块。** 在推荐可用会议室后,应顺势引导用户完成最终的**日程落地**操作:创建新日程,或更新既有日程。
51
-
52
- ## CRITICAL 约束
53
-
54
- - **在调用任何具体的 CLI 子命令(如 `+room-find`、`+suggestion`、`+freebusy`、`+create`)前,必须先读取其对应的 Markdown 文档。** 禁止仅凭记忆组装命令参数,以确保符合各命令最新的业务约束和格式规范。
55
- - **当用户说“查会议室”“找会议室”“搜可用会议室”等,默认意图是查询会议室可用性,而不是检索会议室资源名录。**
56
- - **必须严格按照下方【工作流】的步骤顺序完成任务。特别是单独查会议室时,若无明确时间,强制先走“模糊时间/无时间信息”分支调用 `+suggestion`。**
33
+ - **会议室是日程的一种参与人(attendee / resource),不能脱离日程单独预定。**
34
+ - **预定或查找会议室,均需先确定时间块。**
35
+ - **当用户说"查会议室""找会议室",默认意图是查会议室可用性,不是检索会议室资源名录。**
57
36
 
58
37
  ## 任务类型判定
59
38
 
60
39
  | 类型 | 典型语言信号 | 第一动作 |
61
40
  |------|--------------|----------|
62
- | 新建日程 | “约个会”“安排一个会议”“新建日程”“帮我订个会议室开会” | 补默认值,再进入时间判断 |
63
- | 编辑已有日程 | “给某个日程加人/删人/加群/加会议室”“把某个日程改到…”“给这场会换个会议室” | 先定位目标日程 `event_id`,再进入后续流程 |
64
-
65
- 进一步规则:
41
+ | 新建日程 | "约个会""安排会议""新建日程""订个会议室开会" | 补默认值,再进入时间判断 |
42
+ | 编辑已有日程 | "给某日程加人/删人/加会议室""把某日程改到…""换会议室" | 先定位目标 `event_id` |
66
43
 
67
- - 只要同时出现**既有日程锚点**(标题、时间段、`这个日程`、`这场会`、某次实例)和**修改动词**(添加、移除、调整、改到、换、延后、提前),默认判定为**编辑已有日程**。
68
- - 对重复性日程的编辑,必须先定位到对应实例的 `event_id`,不能直接拿原重复日程的 `event_id` 做更新。
69
-
70
- ## 工作流
71
-
72
- ### 1. 编辑已有日程:先定位目标日程
44
+ 规则:
45
+ - 只要同时出现**既有日程锚点**(标题、时间段、`这个日程`、`这场会`)和**修改动词**(添加、移除、改到、换),默认判定为编辑。
46
+ - 对重复性日程的编辑,必须先定位到对应实例的 `event_id`。
73
47
 
74
- 一旦判定为编辑流,必须先定位目标日程;没有 `event_id` 就不能继续后续修改动作。
48
+ ## 编辑流:先定位目标日程
75
49
 
76
50
  定位规则:
51
+ - 优先利用用户给出的标题、日期、时间范围等锚点,通过 `+agenda`、`+search-event` 或实例视图缩小范围
52
+ - 命中多个候选日程时,必须向用户展示候选项并要求确认
53
+ - 重复性日程必须继续定位到该次实例的 `event_id`
77
54
 
78
- - 优先利用用户给出的标题、日期、时间范围、`这个日程/这场会` 等锚点,通过 `+agenda`、`+search-event` 或实例视图缩小范围。
79
- - 如果命中多个候选日程,必须向用户展示候选项并要求确认,禁止自行猜测。
80
- - 如果是重复性日程的某一次实例,必须继续定位到该次实例的 `event_id`。
55
+ 编辑流分支路由:
81
56
 
82
- 编辑流分支规则:
57
+ | 编辑子场景 | 下一步 |
58
+ |-----------|--------|
59
+ | 仅增删普通参会人/群组,不改时间,不涉及会议室 | 直接 `+update`(详见 [lark-calendar-update.md](./lark-calendar-update.md)) |
60
+ | 新增会议室,不改时间 | 基于已定位日程 start/end → [明确时间分支](./lark-calendar-schedule-clear-time.md) |
61
+ | 只改时间,不涉及会议室 | 判断时间明确性 → 对应分支 |
62
+ | 既改时间,又新增/更换会议室 | 先确定最终时间 → 再查会议室 → 落地 |
83
63
 
84
- - **仅增删普通参会人/群组,不改时间,也不涉及会议室**:定位完成后可直接进入最终 `+update`。
85
- - **新增会议室,但不改时间**:必须基于已定位日程的当前 `start/end` 作为时间块执行 `+room-find`,不能因为用户没重复说时间就退回“无时间信息”。
86
- - **既改时间,又新增会议室**:必须先处理时间,拿到最终候选时间块后,再基于该时间执行 `+room-find`;最终只增量添加新会议室,不自动删除已有会议室。
87
- - **既改时间,又更换会议室**:必须先处理时间,拿到最终候选时间块后,再基于该时间执行 `+room-find`;只有在用户明确表达“更换”时,最终才执行“移除旧会议室 + 添加新会议室”。
88
- - **只改时间,不涉及会议室**:沿用下方时间工作流,但最终落地必须是 `+update`,不是 `+create`。
64
+ ## 新建日程:智能推断默认值
89
65
 
90
- ### 2. 新建日程:智能推断默认值
91
- 以下信息智能推断,减少频繁询问用户:
66
+ - **标题**:根据上下文自动生成;如无法推断,默认"会议"
67
+ - **参会人**:如未指定,默认仅用户自己
68
+ - **时长**:基于上下文推断;默认 30 分钟
69
+ - **无时间信息**:默认推断合理区间(如"今天"或"近两天"),进入时间推荐流程,禁止询问用户
92
70
 
93
- - **标题**:根据上下文自动生成,例如“沟通对齐”“需求讨论”;如无法推断,默认为“会议”
94
- - **参会人**:如未明确指定其他人,默认参会人仅为**用户自己**
95
- - **时长**:基于会议类型和上下文动态推断;如无法推断,默认为 30 分钟
96
- - **无任何时间信息**:默认推断一个合理区间(如“今天”或“近两天”),并进入时间推荐流程,禁止询问用户
71
+ 搜索参与人出现多个结果无法唯一确定时,必须询问用户并记录长期记忆。
97
72
 
98
- 当搜索特定参与人(人、群)出现多个结果无法唯一确定时,必须询问用户进行选择确认,并将该偏好记录为长期记忆,以便后续自动识别。
99
-
100
- ### 3. 判断时间是否明确
101
-
102
- 这一步判断的是**最终要落地的目标时间**,不是只看用户原句里有没有重复说时间。
73
+ ## 判断时间是否明确
103
74
 
104
75
  时间基准规则:
76
+ - **新建流**:使用用户给出的时间,或默认补全出的时间范围
77
+ - **编辑流且不改时间**:已定位日程的当前 `start/end` 就是明确时间
78
+ - **编辑流且改时间**:用户想改到的新时间;若表达模糊,进入模糊时间分支
79
+ **注意**: 在执行修改日程/会议时间的任务时,必须先获取原日程的持续时长。如果用户只提供了新的开始时间,你必须根据原时长自动计算出新的结束时间,严格保持原时长不变,禁止擅自改变原日程的时长。
105
80
 
106
- - **新建流**:使用用户给出的时间,或默认补全出的时间范围作为时间基准。
107
- - **编辑流且不改时间**:已定位日程的当前 `start/end` 就是时间基准。后续如需查会议室,直接使用这个明确时间块。
108
- - **编辑流且改时间**:用户想改到的新时间才是时间基准;若表达模糊,则进入 `+suggestion`。
109
-
110
- 分两类处理:
111
-
112
- - **明确时间**:如“明天下午3点”
113
- - **模糊时间**:如“明天下午”“下周找个时间”
114
-
115
- ### 4. 明确时间
116
-
117
- 明确时间时,需先判断是否需要会议室,如果需要,提前查询会议室;然后判断是否有时间冲突。这里的“明确时间”既可以来自用户直接表达,也可以来自已定位日程的原始时间。
118
- 详见 [`+room-find`](./lark-calendar-room-find.md) 与 [`+freebusy`](./lark-calendar-freebusy.md)。
81
+ ## 分支路由
119
82
 
120
- ```bash
121
- # 1. 如果需要会议室,提前查询会议室
122
- lark-cli calendar +room-find \
123
- --slot "<start>~<end>" \
124
- --attendee-ids "<ids>" \
125
- --city "<city>" \
126
- --building "<building>" \
127
- --floor "<F2>" \
128
- --room-name "<room_name>"
129
-
130
- # 2. 查询当前用户及其他参会人忙闲
131
- # (如果有多名参会人,需分别调用查询:--user-id "<ou_xxx>")
132
- lark-cli calendar +freebusy --start "<start>" --end "<end>"
133
- ```
134
-
135
- 规则:
136
-
137
- - **参会人过多或包含群组时的处理**:
138
- - 如果参与人过多(例如超过 5 人),为避免高耗时,仅需查询**当前用户(自己)**及少数核心人员的忙闲状态即可。
139
- - 如果参与人中包含**群组**,无需展开群组成员查询其忙闲状态。
140
- - **编辑已有日程且不改时间,只新增会议室时**:这里的 `--slot` 必须来自已定位日程的当前 `start/end`。
141
- - **编辑已有日程且既改时间又加会议室时**:这里的 `--slot` 必须来自候选新时间,而不是旧时间;如果用户是“新增会议室”,后续落地只做添加,不删除旧会议室。
142
- - **如果没有冲突**:直接让用户选择会议室(如需),然后进入最终落地操作:创建新日程,或更新既有日程
143
- - **如果有冲突**:必须先说明冲突情况,询问用户继续选择这个时间还是换个时间
144
- - **如果说换个时间**:放弃当前时间,转入【模糊时间】流程,调用 `+suggestion` 推荐多个可用时间块
145
- - **如果继续选择这个时间**:直接让用户选择会议室(如需),然后进入最终落地操作:创建新日程,或更新既有日程
146
- - 位置信息要优先拆到结构化字段:用户明确说了城市才提取 `--city`;`--building` 不要再重复携带城市前缀。
147
- - 参数归类顺序应为:`city/building/floor` > `floor + room-name` 复合表达 > `room-name`。像 `2L`、`2F` 这类更像楼层或区域定位的短词,优先视为 `--floor`,不要默认当作 `--room-name`。像 `学清2层` 这种表达,通常拆为 `--building "学清"` 与 `--floor "F2"`。
148
- - 会议室名要做轻量归一化:`木星会议室` -> `--room-name "木星"`;`会议室 02` / `02会议室` -> `--room-name "02"`。
149
- - 对 `F3-05` / `F5-07` / `3楼-08` 这类复合表达,若能稳定识别楼层与会议室号,应优先提取为 `--floor + --room-name`,不要把整段直接退化成 `--room-name`。
150
-
151
- ### 5. 模糊时间或无时间信息
152
-
153
- 先调用:
154
- 详见 [`+suggestion`](./lark-calendar-suggestion.md);若需要会议室,再结合 [`+room-find`](./lark-calendar-room-find.md)。
155
-
156
- ```bash
157
- lark-cli calendar +suggestion \
158
- --start "<range_start>" \
159
- --end "<range_end>" \
160
- --attendee-ids "<ids>" \
161
- --duration-minutes <n> \
162
- --event-rrule "<rrule>"
163
- ```
164
-
165
- 规则:
83
+ | 判定结果 | 下一步读取 |
84
+ |----------|-----------|
85
+ | 明确时间 | [schedule-clear-time.md](./lark-calendar-schedule-clear-time.md) |
86
+ | 模糊时间 / 无时间信息 | [schedule-fuzzy-time.md](./lark-calendar-schedule-fuzzy-time.md) |
166
87
 
167
- - 若用户完全没有提供时间信息,应先默认一个合理区间后再调用 `+suggestion`
168
- - 编辑流中,若用户表达的是“改到明天下午”“下周找个时间再约”这类模糊新时间,则基于用户期望的新时间范围调用 `+suggestion`;不要继续沿用旧时间。
169
- - **不需要会议室**:获取多个推荐时间块后,直接向用户展示候选时间,用户确认后进入最终落地操作:创建新日程,或更新既有日程。
170
- - **需要会议室**:获取多个候选时间块后,**不要急于让用户选时间**。先将这些时间块一次性交给 `calendar +room-find` 批量查询可用会议室,然后将【候选时间】与【对应的可用会议室列表】结构化分行展示,让用户一次性完成选择。(**注意:即使用户最初只说“查会议室”,且未带时间,也必须强制走到这一步,先 suggestion 再 room-find**)。
171
- - 用户一旦选择了 `+suggestion` 返回的时间块,**无需再次调用 `+freebusy`**
172
-
173
- ### 6. 模糊语义消解与长期记忆构建
174
-
175
- 针对用户专属的时间表达习惯或存在歧义的时间场景,严禁主观臆断。典型例子包括:
176
-
177
- - “上班后”
178
- - “下班前”
179
- - 未明确上下午的 12 小时制时间表达
180
-
181
- 处理规则:
182
-
183
- - 应主动澄清真实意图,而不是自行猜测
184
- - 当用户给出澄清后,应将这类个性化定义沉淀为长期偏好,推动后续直接理解类似表达
185
-
186
- ### 7. 重复性日程
187
-
188
- 若当前会议为重复性日程,调用 `+room-find` 时需携带 `--event-rrule`。
189
-
190
- 必须检查返回中的:
191
-
192
- - `reserve_until_time`
193
-
194
- 若候选会议室的可预约上限早于重复规则覆盖范围,**不要直接按原规则落地日程**。应:
195
-
196
- - 向用户明确说明该会议室最长可约至何时。
197
- - 若用户确认继续选用该会议室,你必须**自动将日程的重复规则结束时间缩短**至该 `reserve_until_time`,以防止会议室预约失败。
198
-
199
- ### 8. 落地日程变更
88
+ ## 落地日程变更
200
89
 
201
90
  用户确认后调用:
202
- 如果是新建会议,详见 [`+create`](./lark-calendar-create.md)。
203
- 如果是更新既有日程,详见 [`+update`](./lark-calendar-update.md)。必须先定位目标 `event_id`,再按用户意图用 `+update` 独立执行字段更新、添加参会人/会议室、移除参会人/会议室,或组合这些动作。若用户意图是“新增会议室”,默认仅追加 `room_id`,不移除已有会议室。
91
+ - 新建 → [`+create`](./lark-calendar-create.md)
92
+ - 编辑 → [`+update`](./lark-calendar-update.md)
204
93
 
205
94
  ```bash
206
95
  lark-cli calendar +create \
@@ -214,52 +103,20 @@ lark-cli calendar +update \
214
103
  --start "<start>" \
215
104
  --end "<end>" \
216
105
  --add-attendee-ids "omm_new_room"
217
-
218
- # 仅当用户明确要求“更换会议室”时,才同时移除旧会议室并添加新会议室
219
- lark-cli calendar +update \
220
- --event-id "<event_id>" \
221
- --remove-attendee-ids "omm_old_room" \
222
- --add-attendee-ids "omm_new_room"
223
106
  ```
224
107
 
225
- 规则:
226
- - 新建日程时,可使用 `+create`
227
- - 更新既有日程时,优先使用 `+update`。改时间/标题/描述、添加参会人/会议室、移除参会人/会议室可以分别独立执行;
228
- - 编辑流必须始终沿用前面定位得到的目标 `event_id`;禁止在最后一步重新按标题猜测一次目标日程。
229
- - 编辑流中如果只是新增群组或普通参会人,不涉及时间和会议室,可直接 `+update --add-attendee-ids ...`。
230
- - 编辑流中如果是“新增会议室但不改时间”,必须先基于目标日程原始时间查到可用会议室,再 `+update --add-attendee-ids "<room_id>"`;默认保留已有会议室。
231
- - 编辑流中如果是“既改时间又新增会议室”,顺序必须是:先确定最终时间,再查会议室,最后一次性 `+update` 时间与新增会议室;默认保留已有会议室。
232
- - 编辑流中如果是“既改时间又更换会议室”,顺序必须是:先确定最终时间,再查会议室,最后一次性 `+update` 时间、移除旧会议室并添加新会议室。
233
- - 需要会议室时,将选中的 `room_id` 写入最终落地请求的参与人列表
234
- - 展示会议室候选时,必须保留 CLI/API 返回的完整 `room_name` 原值;允许附加“推断说明”,但禁止用摘要名、楼层及会议室号、容量/视频标签重组后的名称替换原值
235
-
236
- ## 用户展示建议
237
-
238
- 当向用户展示多个时间块及对应的多个会议室时,**必须使用结构化清晰的格式排版**。**严禁将时间与会议室名称放在同一行展示**,必须分行并使用编号列表呈现可用会议室,严禁将所有信息揉成一团纯文本堆叠。
239
-
240
- **推荐展示格式参考:**
241
-
242
- ```text
243
- ## 2026-03-27 周五
244
-
245
- [选项 1] 14:00 - 15:00(参会人均空闲)
246
- 可用会议室:
247
- 1. 学清嘉创大厦B座-F2-02🎦(7人)
248
- 2. 学清嘉创大厦B座-F2-05🎦(10人)
249
-
250
- [选项 2] 16:00 - 17:00(参会人均空闲)
251
- 可用会议室:
252
- 1. 学清嘉创大厦B座-F3-01🎦(6人)
253
- 2. 学清嘉创大厦B座-F3-06🎦(8人)
254
-
255
- 💡 请回复您倾向的选项编号以及对应的会议室序号,我来为您完成预定。
256
- ```
108
+ 落地规则:
109
+ - 编辑流必须始终沿用前面定位得到的目标 `event_id`;禁止在最后一步重新猜测目标日程
110
+ - 编辑流中"新增会议室"默认仅追加 `room_id`,不移除已有会议室
111
+ - 仅当用户明确说"更换会议室"时,才同时 `--remove-attendee-ids` 旧 + `--add-attendee-ids` 新
112
+ - 需要会议室时,将选中的 `room_id` 写入参与人列表
257
113
 
258
114
  ## 参考
259
115
 
116
+ - [lark-calendar-schedule-clear-time.md](./lark-calendar-schedule-clear-time.md)
117
+ - [lark-calendar-schedule-fuzzy-time.md](./lark-calendar-schedule-fuzzy-time.md)
260
118
  - [lark-calendar-room-find.md](./lark-calendar-room-find.md)
261
- - [lark-calendar-freebusy.md](./lark-calendar-freebusy.md)
262
119
  - [lark-calendar-suggestion.md](./lark-calendar-suggestion.md)
263
120
  - [lark-calendar-create.md](./lark-calendar-create.md)
264
- - [lark-shared](../../lark-shared/SKILL.md)
265
- - [lark-calendar](../SKILL.md)
121
+ - [lark-calendar-update.md](./lark-calendar-update.md)
122
+ - [SKILL.md](../SKILL.md)
@@ -1,6 +1,5 @@
1
1
  # calendar +suggestion
2
2
 
3
- > **前置条件:** 先阅读 [`../lark-shared/SKILL.md`](../../lark-shared/SKILL.md)。
4
3
 
5
4
  根据非明确时间或一段时间范围,推荐多个可用时间块方案。帮助用户解决协调时间的难题。
6
5
 
@@ -8,8 +7,6 @@
8
7
  - ✅ **当用户需求涉及寻找时间块,且时间未完全确定**(如`今天`、`近三天`、`本周`、`下午`, `无时间描述`)时,调用此工具来获取推荐时间块给用户选择(包括但不限于预约日程)。
9
8
  - ❌ **当用户已经明确了具体的时间点**(如`今天下午3点`),则**不需要**调用此工具
10
9
 
11
- 需要的scopes: ["calendar:calendar.free_busy:read"]
12
-
13
10
  ## 命令
14
11
 
15
12
  ```bash
@@ -121,5 +118,4 @@ lark-cli calendar +suggestion \
121
118
  ## 参考
122
119
 
123
120
  - [lark-calendar-create](lark-calendar-create.md) — 创建日程
124
- - [lark-calendar-freebusy](lark-calendar-freebusy.md) — 查询忙闲时段和rsvp状态
125
- - [lark-calendar](../SKILL.md) — 日历完整 API
121
+ - [lark-calendar](../SKILL.md) — skill 入口与路由
@@ -1,13 +1,10 @@
1
1
  # calendar +update
2
2
 
3
- > **前置条件:** 先阅读 [`../lark-shared/SKILL.md`](../../lark-shared/SKILL.md) 了解认证、全局参数和安全规则。
4
3
 
5
4
  更新既有日程字段,或独立增量添加/移除参会人和会议室。
6
5
 
7
6
  `+update` 支持三类互相独立的动作:更新日程字段、添加参会人/会议室、移除参会人/会议室。它们可以单独执行,也可以在同一次命令中组合执行。
8
7
 
9
- 需要的 scopes: ["calendar:calendar.event:update"]
10
-
11
8
  ## 推荐命令
12
9
 
13
10
  ```bash
@@ -66,8 +63,8 @@ lark-cli calendar +update \
66
63
  - 如需替换某个参与人、群组或会议室,使用 `--remove-attendee-ids <旧ID>` + `--add-attendee-ids <新ID>`。
67
64
  - 会议室是 resource attendee,必须使用 `omm_` ID 添加到参会人列表,不能脱离日程单独预定。
68
65
  - 更新重复性日程时,必须先确定操作范围(仅此次/全部/此次及后续),然后按 [重复性日程操作规范](lark-calendar-recurring.md) 执行。
69
- - 如果需要验证更新结果,等待至少 2 秒后再查询,避免同步延迟导致读到旧数据。
70
66
  - 当同一次命令组合多个动作时,执行顺序为“日程字段 -> 移除参会人 -> 添加参会人”。若中途失败,不会自动回滚已成功步骤;错误信息会说明已完成的步骤。
67
+ **⚠️ 高风险操作**: 修改时间时必须先读取原日程时长并计算新 end。如果 end 计算错误,会导致日程时长变化,用户会直接感知,禁止擅自改变原日程的时长。
71
68
 
72
69
  ## 高级用法(完整 API 命令)
73
70
 
@@ -98,8 +95,6 @@ lark-cli calendar +update \
98
95
 
99
96
  ## 参考
100
97
 
101
- - [lark-calendar](../SKILL.md) -- 日历全部命令
102
- - [lark-shared](../../lark-shared/SKILL.md) -- 认证和全局参数
98
+ - [lark-calendar](../SKILL.md) -- skill 入口与路由
103
99
  - [lark-calendar-schedule-meeting](lark-calendar-schedule-meeting.md) -- 预约/改约会议与会议室工作流
104
100
  - [lark-calendar-room-find](lark-calendar-room-find.md) -- 查找可用会议室
105
- - [lark-calendar-freebusy](lark-calendar-freebusy.md) -- 查询忙闲
@@ -14,7 +14,7 @@ metadata:
14
14
 
15
15
  ```bash
16
16
  # 常用示例
17
- lark-cli docs +fetch --doc "文档URL或token"
17
+ lark-cli docs +fetch --doc "文档URL或token;若 URL 存在 #share-... 锚点,优先使用锚点方式读取,不要全文拉取"
18
18
  lark-cli docs +create --content '<title>标题</title><p>内容</p>'
19
19
  lark-cli docs +update --doc "文档URL或token" --command append --content '<p>内容</p>'
20
20
  ```
@@ -17,8 +17,10 @@ lark-cli docs +fetch --doc Z1Fj...tnAc --detail with-ids
17
17
  lark-cli docs +fetch --doc Z1Fj...tnAc --scope outline --max-depth 3
18
18
 
19
19
  # 按 block id 区间精读
20
- lark-cli docs +fetch --doc Z1Fj...tnAc \
21
- --scope range --start-block-id blkA --end-block-id blkB --detail with-ids
20
+ lark-cli docs +fetch --doc Z1Fj...tnAc --scope range --start-block-id blkA --end-block-id blkB --detail with-ids
21
+
22
+ # URL 带 #share 选区锚点时自动局部读取
23
+ lark-cli docs +fetch --doc 'docURL#share-anchor'
22
24
 
23
25
  # 读整个章节(以标题 id 为锚点,自动展开到下一个同级/更高级标题前)
24
26
  lark-cli docs +fetch --doc Z1Fj...tnAc \
@@ -9,6 +9,20 @@
9
9
  > `mindnotes nodes create` 是新增/更新节点命令,**不是**新建一个新的思维笔记。
10
10
  > 如果用户要**新建思维笔记**,不要走本链路,改走 [lark-doc-whiteboard](lark-doc-whiteboard.md)。
11
11
 
12
+ ## 获取 `mindnote_id`
13
+
14
+ `--mindnote-id` 传 **Mindnote 文档 token**,不是节点 ID。`lark-cli mindnotes` 只负责读取和写入思维笔记内部节点。
15
+
16
+ ```bash
17
+ # 用户给了 Mindnote URL,或给了可能包着 Mindnote 的 Wiki URL
18
+ lark-cli drive +inspect --url "<mindnote_or_wiki_url>"
19
+ ```
20
+
21
+ 处理规则:
22
+
23
+ - 普通 Mindnote URL:`drive +inspect` 返回的 Mindnote token 可作为 `--mindnote-id`。
24
+ - Wiki URL:不要把 `/wiki/` 路径里的 wiki token 当作 `--mindnote-id`;必须先 `drive +inspect` 解包,确认底层类型是 `mindnote` 后再使用返回的真实 token。直接把 wiki token 传给 `mindnotes nodes list` 通常会返回 `3410003 resource not found`。
25
+
12
26
  ## 命令
13
27
 
14
28
  ```bash
@@ -96,8 +110,8 @@ lark-cli mindnotes nodes create \
96
110
 
97
111
  1. 先判断用户目标是不是“新建一个思维笔记”。
98
112
  2. 如果是新建思维笔记,切到 [lark-doc-whiteboard](lark-doc-whiteboard.md)。
99
- 3. 如果是操作已有思维笔记,先通过 token 类别判断。
100
- 4. 确认是 **Mindnote** 后再拿到 `mindnote_id`。
113
+ 3. 如果是操作已有思维笔记,先按上方「获取 `mindnote_id`」确认已拿到 Mindnote 文档 token。
114
+ 4. 确认目标类型是 **Mindnote** 后,把真实 Mindnote token 作为 `--mindnote-id`。
101
115
  5. 先执行 `mindnotes nodes list`,确认目标 `parent_id`。
102
116
  6. 新增子节点时,在 `nodes[]` 里传 `parent_id`;更新已有节点时,在 `nodes[]` 里传已有 `node_id`。
103
117
  7. 再执行 `mindnotes nodes create`。
@@ -110,4 +124,5 @@ lark-cli mindnotes nodes create \
110
124
 
111
125
  - [lark-doc-fetch](lark-doc-fetch.md) — 获取文档内容
112
126
  - [lark-doc-whiteboard](lark-doc-whiteboard.md) — 新建思维笔记走画板链路
127
+ - [lark-drive](../../lark-drive/SKILL.md) — 解析 Mindnote / Wiki 等云空间资源
113
128
  - [lark-shared](../../lark-shared/SKILL.md) — 认证和全局参数
@@ -44,6 +44,8 @@ SubAgent 插入 SVG。
44
44
  </whiteboard>
45
45
  ```
46
46
 
47
+ 如果 Mermaid 已在本地文件中,可写成 `<whiteboard type="mermaid" path="@diagram.mmd"></whiteboard>`;CLI 会在写入前读取文件并展开为内联内容。
48
+
47
49
  ### 步骤 2B: SubAgent 使用 SVG 插入图表
48
50
 
49
51
  主 Agent 启动 SubAgent,让它用 `docs +create` / `docs +update` 插入:
@@ -56,6 +58,8 @@ SubAgent 插入 SVG。
56
58
  </whiteboard>
57
59
  ```
58
60
 
61
+ 如果 SVG 已在本地文件中,可写成 `<whiteboard type="svg" path="@diagram.svg"></whiteboard>`;PlantUML 文件同理使用 `<whiteboard type="plantuml" path="@sequence.puml"></whiteboard>`。
62
+
59
63
  Sub Agent 需要携带以下的最小上下文,以及后续的 [SVG 设计 Workflow] 章节指南:
60
64
 
61
65
  - doc token、插入位置(标题 / block_id / command)
@@ -0,0 +1,34 @@
1
+ # XML 扩展块补充说明
2
+
3
+ 本文件用于补充说明 block XML 扩展能力。常用标签和通用规则见 [`lark-doc-xml.md`](lark-doc-xml.md);后续新增其他 block 说明时可继续追加到本文件。
4
+
5
+ ## OKR block
6
+
7
+ OKR block 可用 XML 格式完整表达。创建前先参考 [`lark-okr`](../../lark-okr/SKILL.md) 确认可用周期;创建时只写 root-only `<okr cycle-id="..."/>` 挂载已有 OKR,不构造 Objective/KR/Progress 子树。
8
+
9
+ 获取时,XML 结构示例如下:
10
+
11
+ ```xml
12
+ <okr cycle-id="" cycle-name="CYCLE_NAME" user-name="USER_NAME">
13
+ <okr-objective objective-id="OBJECTIVE_ID" status="normal" percent="80" score="75">
14
+ <p>O 描述</p>
15
+ <okr-progress>
16
+ <p>O 进展</p>
17
+ <checkbox done="true">事项</checkbox>
18
+ </okr-progress>
19
+ <okr-key-result key-result-id="KEY_RESULT_ID" status="risk" percent="60" score="80">
20
+ <p>KR 描述</p>
21
+ <okr-progress>
22
+ <p>KR 进展</p>
23
+ </okr-progress>
24
+ </okr-key-result>
25
+ </okr-objective>
26
+ </okr>
27
+ ```
28
+
29
+ - `cycle-id` 仅用于创建时挂载已有当前周期 OKR;`cycle-name`、`user-name` 只读。
30
+ - `objective-id`、`key-result-id` 为只读业务 ID,更新已有 OKR 时保持不变。
31
+ - `okr-objective` / `okr-key-result`
32
+ - 可更新 `status`、`percent`、`score`;`percent` / `score` 取值 0-100,`status` 取值 `unset`/`normal`/`risk`/`extended`。
33
+ - 不可更新 objective 和 key-result 内容描述。
34
+ - `okr-progress` 承载进展内容,支持更新。支持内嵌 `<p>`、`<checkbox>`、`<grid>`、`<img>`。
@@ -41,12 +41,13 @@ p, h1-h9, ul, ol, li, table, thead, tbody, tr, th, td, blockquote, pre, code, hr
41
41
  文档中可嵌入外部资源块(属于容器标签的特殊形式),需要额外语法创建:
42
42
 
43
43
  - `<img>` — `<img href="https://..."/>` 上传网络图片
44
- - `<whiteboard>` — 简单图由 SubAgent 直接插入 `<whiteboard type="svg">完整自包含 SVG</whiteboard>`;复杂图使用 `<whiteboard type="blank"></whiteboard>` 先创建空白画板,再按 [`lark-doc-whiteboard.md`](lark-doc-whiteboard.md) 启动 SubAgent 调用 `lark-whiteboard` 写入;
44
+ - `<whiteboard>` — 简单图由 SubAgent 直接插入 `<whiteboard type="svg">完整自包含 SVG</whiteboard>`;也可用本地文件简写 `<whiteboard type="svg" path="@diagram.svg"></whiteboard>`、`<whiteboard type="mermaid" path="@flow.mmd"></whiteboard>`、`<whiteboard type="plantuml" path="@sequence.puml"></whiteboard>`,CLI 会写入前展开为内联内容;复杂图使用 `<whiteboard type="blank"></whiteboard>` 先创建空白画板,再按 [`lark-doc-whiteboard.md`](lark-doc-whiteboard.md) 启动 SubAgent 调用 `lark-whiteboard` 写入;
45
45
  - `<sheet>` — `<sheet type="blank"></sheet>` 空白;`<sheet sheet-id="SID" token="TOKEN"></sheet>` 复制已有
46
46
  - `<task>` — `<task task-id="GUID"></task>`,必传 task-id(任务 guid)
47
47
  - `<chat_card>` — `<chat_card chat-id="CHAT_ID"></chat_card>`,必传 chat-id
48
48
  - `<sub-page-list>` — `<sub-page-list></sub-page-list>` 子页面列表块;仅 wiki 文档可插入
49
- - bitable、base_ref、synced_reference、synced_source、okr — 不可创建,仅支持移动
49
+ - bitable、base_ref、synced_reference、synced_source — 不可创建,仅支持移动
50
+ - `<okr>` — 创建时仅支持 root-only `<okr cycle-id="..."/>` 挂载已有 OKR;完整结构与字段规则见 [`lark-doc-xml-extended-blocks.md`](lark-doc-xml-extended-blocks.md#okr-block)
50
51
 
51
52
  # 四、块级复制与移动
52
53
 
@@ -23,7 +23,7 @@
23
23
  1. 分析用户需求:受众、目的、范围
24
24
  2. 设计大纲:根据任务自然选择结构。可以是短文、纪要、FAQ、方案、报告、清单或其他形式;不要默认套固定章节、固定开头或固定富 block 配比
25
25
  3. `docs +create` 创建并撰写:
26
- - **短文档**:一次写入完整内容
26
+ - **短文档**:一次写入完整内容。使用 Markdown 时,避免同时传入 `--title` 和同名 `# 标题`
27
27
  - **长文档**:先建骨架(标题 + 各级标题),再由主 Agent **顺序逐节**用 `block_insert_after --block-id <章节标题 block_id>` 补全正文;写完一节再写下一节,始终带着已写内容的上下文,保证衔接、不重复
28
28
  - ⚠️ 不要一次性把超长完整内容塞进 `--content`,容易触发字符/参数限制;长文按节分次写入
29
29
  - ⚠️ 同一节内多次插入时,要锚到**上一个新插入的 block**(按 [`lark-doc-update.md`](../lark-doc-update.md) 的「Block ID 生命周期」),否则反复锚同一个标题会让段落顺序颠倒
@@ -41,6 +41,7 @@
41
41
  7. **优先处理步骤二识别出的画板需求**:读取并按 [lark-doc-whiteboard.md](../lark-doc-whiteboard.md) 选型和插入;正文本身不交给 SubAgent
42
42
  8. 由**主 Agent 自行润色**(不另起内容子 Agent,正文始终一人维护):文字密集且不易读时,优先拆段、加小标题或调整顺序——叙述内容保持成段,**不要默认改成列表**,只有确属并列要点 / 步骤才用列表(见 `lark-doc-style.md`);只有确实存在行列数据时才用 `<table>`。其余富 block 的取舍一律遵循 `lark-doc-style.md` 的写作原则,不主动堆叠。需要明显分隔的主题可补充 `<hr/>`,不强制章节间都使用。本地图片使用 `docs +media-insert` 插入
43
43
 
44
- ### 步骤四:专项校验(按需执行)
44
+ ### 步骤四:专项校验
45
45
 
46
- 9. 仅当用户预期需要校验字数时,才读取并执行 [`lark-doc-word-stat.md`](../lark-doc-word-stat.md) 的「字数遵循校验」;否则跳过本项,不读取该 workflow。若执行了专项校验,向用户呈现结果
46
+ 9. **字数门禁**:如果用户给出任何明确字数要求(如“700-800 字”“1000 字左右”“不少于 500 字”“控制在 800 字以内”),本步骤必须执行,不属于按需项。读取并执行 [`lark-doc-word-stat.md`](../lark-doc-word-stat.md) 的「字数遵循校验」;未得到脚本统计结果前,不得向用户声明“符合字数要求”。若没有明确字数要求,则跳过本项,不读取该 workflow。若执行了专项校验,向用户呈现目标区间、`word_count` 和达标结论
47
+ 10. **重复标题检查**:文档生成后,检查文档标题和正文第一个标题块是否重复;若重复,删除或改写正文第一个标题块,避免读者看到同一标题连续出现
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  name: lark-drive
3
3
  version: 1.0.0
4
- description: "飞书云空间(云盘/云存储):管理 Drive 文件和文件夹,包含上传/下载、创建文件夹、复制/移动/删除、查看元数据、评论/权限/订阅、标题、版本和本地文件导入。用户需要整理云盘目录、处理云空间资源 URL/token,或导入 Word/Markdown/Excel/CSV/PPTX/.base 为 docx/sheet/bitable/slides 时使用;doubao.com 云空间 URL/token 也按资源路径和 token 路由,不回退 WebFetch。不负责:文档内容编辑(走 lark-doc)、表格/Base 表内数据操作(走 lark-sheets/lark-base)、知识空间节点/成员管理(走 lark-wiki)、原生 Markdown 文件读写/patch/diff(走 lark-markdown)。"
4
+ description: "飞书云空间(云盘/云存储):管理 Drive 文件和文件夹,包含上传/下载、创建文件夹、复制/移动/删除、查看元数据、评论/权限/订阅、标题、版本和本地文件导入。用户需要整理云盘目录、处理云空间资源 URL/token、判断链接类型/真实 token/标题,或导入 Word/Markdown/Excel/CSV/PPTX/.base 为 docx/sheet/bitable/slides 时使用;doubao.com 云空间 URL/token 也按资源路径和 token 路由,不回退 WebFetch。不负责:文档内容编辑(走 lark-doc)、表格/Base 表内数据操作(走 lark-sheets/lark-base)、知识空间节点/成员管理(走 lark-wiki)、原生 Markdown 文件读写/patch/diff(走 lark-markdown)。"
5
5
  metadata:
6
6
  requires:
7
7
  bins: ["lark-cli"]
@@ -21,8 +21,10 @@ metadata:
21
21
  ## 快速决策
22
22
 
23
23
  - 用户要**复制文档 / 创建副本 / 另存为副本**时,使用 `lark-cli drive files copy`。先用 `lark-cli schema drive.files.copy --format json` 确认参数;如果来源是 wiki URL/token,先用 `lark-cli drive +inspect` 获取底层 `token` 和 `type`,不要把 wiki token 直接当 `file_token`。`params.file_token` 传源文档 token,`data.folder_token` 传目标文件夹 token,`data.name` 传副本名称,`data.type` 传源文件类型(如 `docx` / `sheet` / `bitable` / `slides`)。示例:`lark-cli drive files copy --params '{"file_token":"<DOC_TOKEN>"}' --data '{"folder_token":"<FOLDER_TOKEN>","name":"<COPY_NAME>","type":"docx"}'`。如返回 `confirmation_required`,按 `lark-shared` 高风险审批协议向用户确认后,在原命令末尾追加 `--yes` 重试。
24
+ - 用户要**识别飞书 / doubao 云空间 URL 的类型和 token**时,可以先按 URL 路径形态做轻量判断;当路径已明确指向 docx / sheet / bitable / slides / file / folder 等资源时,可直接提取对应 token/type。传入 wiki URL、需要识别标题或 canonical URL、URL/token 有歧义,或后续操作依赖底层真实资源时,再使用 `lark-cli drive +inspect --url '<url>'` 进行识别;具体用法、失败处理和边界见 [`references/lark-drive-inspect.md`](references/lark-drive-inspect.md)。
25
+ - 高风险写操作(删除、公开权限修改、owner 转移、版本删除/回滚、批量移动/覆盖/同步)必须同时满足三个条件才执行:目标已解析为该操作可直接使用的执行对象,执行细节已明确到可直接调用命令(例如删除的 file-token/type、公开权限修改的共享范围、owner 转移的目标 owner、版本删除/回滚的 version id、移动/覆盖/同步的目标位置和冲突策略),且用户在本轮明确确认执行这些具体目标和执行细节。用户只说“删除没用的文件”“开放/共享给大家”“改成开放”“覆盖/移动这些”只表示目标状态;先只读发现并列出候选、权限档位或执行方案,停止等待用户确认。
24
26
  - 用户要**检查 / 治理文档权限、公开范围、链接分享、外部访问、复制下载权限、密级标签、owner 转移**,或要“权限风险报告、收紧权限、申请查看 / 编辑权限、转移 / 批量转移 owner”,必须先阅读 [`references/lark-drive-workflow.md`](references/lark-drive-workflow.md),再按其中 `Workflow Registry` 进入 [`permission_governance`](references/lark-drive-workflow-permission-governance.md) workflow。
25
- - 用户要**整理云盘 / 文件夹 / 文档库 / 知识库 / 个人文档库**,或要“盘点目录结构、找出未归档/临时/重复/空目录、生成整理方案”,必须先阅读 [`references/lark-drive-workflow-knowledge-organize.md`](references/lark-drive-workflow-knowledge-organize.md)。默认只生成方案;创建目录、移动资源、申请权限都必须单独确认。
27
+ - 用户要**整理云盘 / 文件夹 / 文档库 / 知识库 / 个人文档库**,或要“盘点目录结构、找出未归档/临时/重复/空目录、生成整理方案”,必须先阅读 [`references/lark-drive-workflow.md`](references/lark-drive-workflow.md),再按其中 `Workflow Registry` 进入 [`knowledge_organize`](references/lark-drive-workflow-knowledge-organize.md) workflow。默认只生成方案;创建目录、移动资源、申请权限都必须单独确认。
26
28
  - 用户要**搜文档 / Wiki / 电子表格 / 多维表格 / 云空间(云盘/云存储)对象**,优先使用 `lark-cli drive +search`。自然语言里"最近我编辑过的"、"我创建的"(→ `--created-by-me`,原始创建者语义)、"我负责/owner 的"(→ `--mine`,owner 语义)、"最近一周我打开过的 xxx"、"某人 owner 的 docx" 等直接映射到扁平 flag,避免手写嵌套 JSON。
27
29
  - 用户要**根据文档评论定位正文位置**,例如 根据评论 review 文档、根据评论内容回看文档、区分多处相同引用文本时,对于 docx 类型(`file_type=docx`)的文档支持通过 `need_relation=true` 返回评论位置,其他类型暂不支持,具体用法需要先阅读 [`references/lark-drive-comment-location.md`](references/lark-drive-comment-location.md) 了解。
28
30
  - 用户给出 doubao.com 的云空间资源 URL/token,或明确提到豆包里的 file/folder/docx/sheet/bitable/wiki 资源时,仍按资源类型、URL 路径和 token 路由到本 skill;不要因为域名不是飞书而回退到 WebFetch。
@@ -162,7 +164,7 @@ lark-cli drive <resource> <method> [flags] # 调用 API
162
164
 
163
165
  > **重要**:使用原生 API 时,必须先运行 `schema` 查看 `--data` / `--params` 参数结构,不要猜测字段格式。
164
166
  >
165
- > **高频原生命令:** 读取 Drive 文件夹清单时使用 `drive files list`,必须按 [`references/lark-drive-files-list.md`](references/lark-drive-files-list.md) 的模板通过 `--params` 传 `folder_token` / `page_token`,并手动处理分页;不要把 `--page-all` 输出直接交给 JSON 解析脚本。
167
+ > **高频原生命令:** 读取 Drive 文件夹清单时使用 `drive files list`,使用前先读 [`references/lark-drive-files-list.md`](references/lark-drive-files-list.md),按模板通过 `--params` 传参并手动处理分页;不要把 `--page-all` 输出直接交给 JSON 解析脚本。
166
168
 
167
169
  ### files
168
170
 
@@ -204,10 +206,12 @@ lark-cli drive <resource> <method> [flags] # 调用 API
204
206
  ### file.statistics
205
207
 
206
208
  - `get` — 获取文件统计信息
209
+ - 获取 docx / 文件统计信息时,建议优先使用 typed flags:`lark-cli drive file.statistics get --file-token <token> --file-type <type> --format json`;`--params` JSON 也支持,适合批量拼装或 raw 参数场景。
207
210
 
208
211
  ### file.view_records
209
212
 
210
213
  - `list` — 获取文档的访问者记录
214
+ - 查看 docx 最近访问记录、返回 open_id、最多 N 条时,建议优先使用 typed flags:`lark-cli drive file.view_records list --file-token <docx_token> --file-type docx --page-size <N> --viewer-id-type open_id --format json`;`--params` JSON 也支持,适合批量拼装、分页续跑或 raw 参数场景。
211
215
 
212
216
  ### file.comment.reply.reactions
213
217
 
@@ -7,6 +7,18 @@
7
7
 
8
8
  > [!CAUTION]
9
9
  > 这是**高风险写操作**。CLI 层要求显式传 `--yes`;如果用户已经明确要求删除且目标明确,直接执行并带上 `--yes`。
10
+ > “目标明确”表示用户给出了可解析为 `file-token` + `type` 的具体 URL/token,或对你刚列出的可解析资源列表逐项/整批确认删除。按“没用的”“临时的”“疑似重复的”“全部旧文件”等描述搜索出来的候选属于待确认目标;这类请求先列候选、说明筛选依据和影响范围,然后停止等待确认。
11
+
12
+ ## 删除前门槛
13
+
14
+ 执行 `drive +delete --yes` 前同时满足:
15
+
16
+ | 条件 | 可执行信号 |
17
+ |------|------------|
18
+ | 具体目标 | 单个可解析为 `file-token` + `type` 的 URL/token,或用户确认过且可解析的资源列表 |
19
+ | 执行确认 | 用户在本轮明确说确认删除这些具体目标 |
20
+
21
+ 若缺少任一条件,使用 `drive +search`、`drive +inspect` 或只读 API 收集候选并回复待确认清单;启发式规则(打开时间、标题模式、owner、文件类型等)只能作为候选筛选依据,不能升级为删除确认。执行 `drive +delete` 时必须使用解析后的 `--file-token` 和 `--type`。
10
22
 
11
23
  ## 命令
12
24