@amaster.ai/pi-lark 0.1.2-beta.60 → 0.1.2-beta.62

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 (113) hide show
  1. package/README.md +1 -3
  2. package/package.json +2 -2
  3. package/skills/lark-approval/SKILL.md +2 -2
  4. package/skills/lark-approval/references/lark-approval-instances-initiated.md +5 -0
  5. package/skills/lark-approval/references/lark-approval-tasks-add-sign.md +68 -20
  6. package/skills/lark-approval/references/lark-approval-tasks-query.md +5 -0
  7. package/skills/lark-apps/SKILL.md +1 -1
  8. package/skills/lark-apps/references/lark-apps-cache.md +38 -5
  9. package/skills/lark-base/SKILL.md +131 -11
  10. package/skills/lark-base/references/lark-base-app.md +18 -0
  11. package/skills/lark-base/references/lark-base-dashboard-block-config.md +28 -1
  12. package/skills/lark-base/references/lark-base-dashboard.md +29 -11
  13. package/skills/lark-base/references/lark-base-data-query.md +2 -6
  14. package/skills/lark-base/references/lark-base-field-extension.md +170 -0
  15. package/skills/lark-base/references/lark-base-field-lookup.md +1 -1
  16. package/skills/lark-base/references/lark-base-field-schema.md +10 -1
  17. package/skills/lark-base/references/lark-base-filter-condition.md +32 -5
  18. package/skills/lark-base/references/lark-base-form-detail.md +1 -1
  19. package/skills/lark-base/references/lark-base-form-questions-create.md +36 -5
  20. package/skills/lark-base/references/lark-base-form-submit.md +2 -2
  21. package/skills/lark-base/references/lark-base-record-history-list.md +1 -1
  22. package/skills/lark-base/references/lark-base-record-query-and-analysis-sop.md +95 -205
  23. package/skills/lark-base/references/lark-base-template-center.md +199 -0
  24. package/skills/lark-calendar/SKILL.md +14 -5
  25. package/skills/lark-calendar/references/lark-calendar-join-event.md +43 -0
  26. package/skills/lark-calendar/references/lark-calendar-transfer.md +89 -0
  27. package/skills/lark-doc/references/lark-doc-fetch.md +1 -1
  28. package/skills/lark-drive/references/lark-drive-add-comment.md +2 -2
  29. package/skills/lark-drive/references/lark-drive-member-remove.md +2 -1
  30. package/skills/lark-im/SKILL.md +15 -3
  31. package/skills/lark-im/references/lark-im-message-read-status.md +96 -0
  32. package/skills/lark-mail/references/lark-mail-draft-create.md +12 -12
  33. package/skills/lark-mail/references/lark-mail-forward.md +17 -17
  34. package/skills/lark-mail/references/lark-mail-reply-all.md +8 -8
  35. package/skills/lark-mail/references/lark-mail-reply.md +6 -6
  36. package/skills/lark-mail/references/lark-mail-send.md +20 -20
  37. package/skills/lark-mail/references/lark-mail-template-create.md +7 -6
  38. package/skills/lark-mail/references/lark-mail-template-update.md +7 -6
  39. package/skills/lark-markdown/SKILL.md +1 -1
  40. package/skills/lark-meeting/SKILL.md +150 -0
  41. package/skills/{lark-minutes → lark-meeting}/references/lark-minutes-apply-permission.md +2 -5
  42. package/skills/lark-meeting/references/lark-minutes-detail.md +52 -0
  43. package/skills/{lark-minutes → lark-meeting}/references/lark-minutes-download.md +3 -5
  44. package/skills/{lark-minutes → lark-meeting}/references/lark-minutes-search.md +4 -34
  45. package/skills/{lark-minutes → lark-meeting}/references/lark-minutes-speaker-replace.md +3 -4
  46. package/skills/{lark-minutes → lark-meeting}/references/lark-minutes-summary.md +3 -5
  47. package/skills/{lark-minutes → lark-meeting}/references/lark-minutes-todo.md +44 -16
  48. package/skills/{lark-minutes → lark-meeting}/references/lark-minutes-update.md +2 -3
  49. package/skills/lark-meeting/references/lark-minutes-upload.md +71 -0
  50. package/skills/lark-meeting/references/lark-note-detail.md +15 -0
  51. package/skills/lark-meeting/references/lark-note-transcript.md +19 -0
  52. package/skills/lark-meeting/references/lark-vc-agent-meeting-end.md +26 -0
  53. package/skills/lark-meeting/references/lark-vc-agent-meeting-invite.md +32 -0
  54. package/skills/{lark-vc-agent → lark-meeting}/references/lark-vc-agent-meeting-join.md +11 -56
  55. package/skills/{lark-vc-agent → lark-meeting}/references/lark-vc-agent-meeting-leave.md +2 -41
  56. package/skills/lark-meeting/references/lark-vc-detail.md +31 -0
  57. package/skills/lark-meeting/references/lark-vc-meeting-countdown.md +103 -0
  58. package/skills/{lark-vc → lark-meeting}/references/lark-vc-meeting-events.md +9 -98
  59. package/skills/{lark-vc → lark-meeting}/references/lark-vc-meeting-list-active.md +4 -29
  60. package/skills/{lark-vc → lark-meeting}/references/lark-vc-meeting-message-send.md +3 -5
  61. package/skills/lark-meeting/references/lark-vc-meeting-screenshot.md +34 -0
  62. package/skills/{lark-vc → lark-meeting}/references/lark-vc-recording.md +3 -64
  63. package/skills/{lark-vc → lark-meeting}/references/lark-vc-search.md +9 -28
  64. package/skills/lark-meeting/scenes/create-and-edit-minutes.md +147 -0
  65. package/skills/lark-meeting/scenes/live-meeting-attend.md +164 -0
  66. package/skills/lark-meeting/scenes/live-meeting-interact.md +101 -0
  67. package/skills/lark-meeting/scenes/query-meeting-and-artifacts.md +90 -0
  68. package/skills/lark-meeting/scenes/query-minutes-and-artifacts.md +70 -0
  69. package/skills/lark-meeting/scenes/query-note-and-artifacts.md +127 -0
  70. package/skills/lark-minutes/SKILL.md +5 -203
  71. package/skills/lark-note/SKILL.md +5 -88
  72. package/skills/lark-sheets/SKILL.md +76 -60
  73. package/skills/lark-sheets/references/lark-sheets-batch-update.md +82 -13
  74. package/skills/lark-sheets/references/lark-sheets-chart.md +296 -159
  75. package/skills/lark-sheets/references/lark-sheets-conditional-format.md +5 -3
  76. package/skills/lark-sheets/references/lark-sheets-filter.md +1 -1
  77. package/skills/lark-sheets/references/lark-sheets-formula-translation.md +78 -65
  78. package/skills/lark-sheets/references/lark-sheets-formula-verify.md +21 -17
  79. package/skills/lark-sheets/references/lark-sheets-pivot-table.md +2 -1
  80. package/skills/lark-sheets/references/lark-sheets-range-operations.md +1 -1
  81. package/skills/lark-sheets/references/lark-sheets-read-data.md +7 -4
  82. package/skills/lark-sheets/references/lark-sheets-search-replace.md +4 -4
  83. package/skills/lark-sheets/references/lark-sheets-sheet-structure.md +2 -2
  84. package/skills/lark-sheets/references/lark-sheets-sparkline.md +1 -0
  85. package/skills/lark-sheets/references/lark-sheets-styles-put.md +3 -3
  86. package/skills/lark-sheets/references/lark-sheets-visual-standards.md +6 -4
  87. package/skills/lark-sheets/references/lark-sheets-workbook.md +3 -1
  88. package/skills/lark-sheets/references/lark-sheets-write-cells.md +49 -47
  89. package/skills/lark-sheets/scripts/lark_chart_layout_check.py +472 -0
  90. package/skills/lark-slides/SKILL.md +2 -0
  91. package/skills/lark-slides/references/cli/lark-slides-add-slide.md +6 -6
  92. package/skills/lark-slides/references/cli/lark-slides-delete-slide.md +3 -3
  93. package/skills/lark-slides/references/cli/lark-slides-replace-slide.md +11 -11
  94. package/skills/lark-slides/references/cli/lark-slides-xml-presentation-slide-get.md +1 -1
  95. package/skills/lark-slides/references/cli/lark-slides-xml-presentation-slide-replace.md +2 -2
  96. package/skills/lark-slides/references/workflow/slides-editing.md +11 -11
  97. package/skills/lark-slides/references/xml/slides_xml_schema_definition.xml +103 -14
  98. package/skills/lark-task/SKILL.md +1 -1
  99. package/skills/lark-vc/SKILL.md +5 -205
  100. package/skills/lark-vc-agent/SKILL.md +5 -206
  101. package/skills/lark-workflow-meeting-summary/SKILL.md +10 -14
  102. package/skills/lark-base/references/lark-base-cell-value.md +0 -165
  103. package/skills/lark-base/references/lark-base-data-analysis-pandas.md +0 -93
  104. package/skills/lark-base/references/lark-base-data-analysis-python-stdlib.md +0 -120
  105. package/skills/lark-base/references/lark-base-record-batch-create.md +0 -63
  106. package/skills/lark-base/references/lark-base-record-batch-update.md +0 -57
  107. package/skills/lark-base/references/lark-base-record-query-and-analysis-cloud-sop.md +0 -145
  108. package/skills/lark-minutes/references/lark-minutes-detail.md +0 -63
  109. package/skills/lark-minutes/references/lark-minutes-upload.md +0 -104
  110. package/skills/lark-note/references/lark-note-detail.md +0 -29
  111. package/skills/lark-note/references/lark-note-transcript.md +0 -25
  112. package/skills/lark-vc/references/lark-vc-detail.md +0 -49
  113. package/skills/lark-vc/references/vc-domain-boundaries.md +0 -203
@@ -1,213 +1,15 @@
1
1
  ---
2
2
  name: lark-minutes
3
3
  version: 1.0.0
4
- description: "飞书妙记:搜索妙记、查看妙记基础信息、下载/上传音视频、读取或编辑妙记的产物内容、改标题、替换说话人/关键词、申请妙记查看/编辑权限。当给出minute_token、本地音视频文件,要查/改/转妙记产物,或用户明确要主动申请妙记权限时使用;本地音视频转纪要/逐字稿优先走本 skill,不要用 ffmpeg/whisper 本地转写。不负责:获取会议关联妙记,或仅按自然语言标题定位纪要"
4
+ description: "仅当用户或上游配置显式指定 lark-minutes 时使用,相关请求统一交由 lark-meeting 技能处理。"
5
5
  metadata:
6
6
  requires:
7
7
  bins: ["lark-cli"]
8
- cliHelp: "lark-cli minutes --help"
8
+ skills: ["lark-meeting"]
9
9
  ---
10
10
 
11
- # minutes (v1)
11
+ # Compatibility entry
12
12
 
13
- **CRITICAL — 开始前 MUST 先用 Read 工具读取 [`../lark-shared/SKILL.md`](../lark-shared/SKILL.md),其中包含认证、权限处理**
13
+ 本技能只用于兼容旧名称,不直接处理业务。
14
14
 
15
- **CRITICAL — 开始前 MUST 先用 Read 工具读取 [`../lark-vc/references/vc-domain-boundaries.md`](../lark-vc/references/vc-domain-boundaries.md)**,不读将导致命令使用、会议产物决策、领域边界职责判断错误:
16
- > 1. 了解日历 & VC、会议产物 & 文档的关联关系和职责划分
17
- > 2. 了解会议产物(妙记和纪要)之间的关联关系,例如:**妙记和纪要产生条件相互独立**
18
- > 3. 了解不同会议产物的组成部分,以便根据需求决策使用哪种产物的数据
19
- > 4. 了解会议总结、分析和信息提取的标准流程
20
-
21
- ## 身份
22
-
23
- 身份是跨命令工作流的状态:一旦某个 `minute_token` / `note_id` 由某个身份取得,后续消费它的命令必须显式沿用相同 `--as`,不要依赖 profile 默认身份。完整规则见 [`../lark-shared/SKILL.md`](../lark-shared/SKILL.md) 的「身份延续」。
24
-
25
- 所有 minutes 命令默认使用 `--as user`。`+search`、`minutes get`、`+detail`、`+download` 和 `+apply-permission` 也支持 `--as bot`(bot 只能访问 / 操作 bot 有权限的妙记)。精确身份支持以 `<command> --help` 为准。
26
-
27
- ## Shortcuts
28
-
29
- | Shortcut | 说明 |
30
- |----------|------|
31
- | [`+search`](references/lark-minutes-search.md) | 按关键词、所有者、参与者、时间范围搜索妙记;支持 user/bot 身份 |
32
- | [`+detail`](references/lark-minutes-detail.md) | 查询妙记详情(标题和关联的纪要note_id),按需获取 AI 产物(总结、待办、章节、逐字稿、关键词) |
33
- | [`+download`](references/lark-minutes-download.md) | 下载妙记音视频媒体文件 |
34
- | [`+upload`](references/lark-minutes-upload.md) | 上传 file_token 生成妙记 |
35
- | [`+update`](references/lark-minutes-update.md) | 更新妙记标题 |
36
- | [`+apply-permission`](references/lark-minutes-apply-permission.md) | 申请妙记查看或编辑权限 |
37
- | [`+speaker-replace`](references/lark-minutes-speaker-replace.md) | 替换妙记逐字稿中的说话人(须先 `lark-cli api GET .../speakerlist` 取 `speaker_id`) |
38
- | `+word-replace` | 批量替换逐字稿关键词(详见 `lark-cli minutes +word-replace --help`) |
39
- | [`+summary`](references/lark-minutes-summary.md) | 替换妙记 AI 总结全文 |
40
- | [`+todo`](references/lark-minutes-todo.md) | 新建/更新/删除妙记 AI 待办(单条或 `--todos` 批量;不是 lark-task) |
41
-
42
- - 使用任何 Shortcut 前,必须先读其对应 reference 文档。
43
-
44
- ## 意图路由
45
-
46
- | 用户意图 | 命令 |
47
- |---------|------|
48
- | 我的妙记 / 搜索妙记 / 某段时间的妙记 | `+search` |
49
- | 妙记基础信息:标题 / 时长 / 封面 / 链接 | `minutes get` |
50
- | 下载妙记音视频文件、获取媒体下载链接 | `+download`(仅媒体;要妙记内容用 `+detail`) |
51
- | 妙记总结 / 章节 / 待办 / 关键词 / 逐字稿 | `+detail --minute-tokens <token>` + 显式产物 flag |
52
- | 基于妙记**提炼/总结/分析/回顾**会议 | `+detail --minute-tokens <token> --transcript`,再独立分析(**禁止照搬 AI 总结**) |
53
- | 拿这条妙记关联的纪要文档(`note_doc_token` / `verbatim_doc_token` / `shared_doc_tokens`) | `+detail` 取顶层 `note_id` → [`note +detail --note-id`](../lark-note/SKILL.md) |
54
- | 把本地音视频转纪要 / 逐字稿 / 文字稿 | `drive +upload` 取 `file_token` → `+upload` 生成 `minute_url` → `+detail` 拿产物 |
55
- | 在妙记里增加 / 更改 / 删除 AI 待办 | `+todo`(**禁止走 lark-task**) |
56
- | 替换妙记的AI 总结 | `+summary` |
57
- | 重命名妙记/改妙记标题 | `+update` |
58
- | 申请妙记权限(查看/编辑) | `+apply-permission --perm view\|edit` |
59
- | 替换说话人/把 A 的发言改成 B/重新归属发言人/把外部(非飞书)说话人改成飞书用户" | 先 `lark-cli api GET .../transcript/speakerlist` 取 `speaker_id`,再 [`minutes +speaker-replace`](references/lark-minutes-speaker-replace.md);`--from-speaker-id` 只传 id,不传展示名 |
60
- | 批量替换逐字稿关键词 | `+word-replace` |
61
- | 用户同时提到"会议/开会"和"妙记" | 先 [lark-vc](../lark-vc/SKILL.md)(`+search` → `+recording`)获取 `minute_token`,再本 skill |
62
-
63
- ## 核心概念
64
-
65
- - **妙记(Minutes)**:来源于飞书视频会议的录制产物或用户上传的音视频文件,通过 `minute_token` 标识。
66
- - **妙记 Token(minute_token)**:妙记的唯一标识符,可从妙记 URL 末尾提取(如 `https://*.feishu.cn/minutes/obcnxxx` 中的 `obcnxxx`)。如果 URL 中包含额外参数(如 `?xxx`),截取路径最后一段。
67
-
68
- ## 核心场景
69
-
70
- ### 1. 搜索妙记
71
-
72
- 1. 如果是会议的妙记,应优先通过 [lark-vc](../lark-vc/SKILL.md) 定位会议并获取 `minute_token`。
73
- 2. 会议场景的妙记路由,以及"参与的妙记"如何解释,统一以 [minutes +search](references/lark-minutes-search.md) 为准。
74
-
75
-
76
- ### 2. 查看妙记基础信息
77
-
78
- 1. 当用户只需要确认某条妙记的标题、封面、时长、所有者、URL 等基础信息时,使用 `minutes minutes get`。
79
- 2. 如果是会议 / 日程上下文中的妙记基础信息,先通过 VC/Calendar 链路拿到 `minute_token`,再调用 `minutes minutes get`。
80
- 3. 用户意图不明确时,默认先给基础元信息,帮助确认是否命中目标妙记。
81
-
82
- ### 3. 申请妙记权限
83
-
84
- 遇到妙记没有查看或编辑权限时,引导用户申请对应权限;只有用户明确要申请时,才调用 `minutes +apply-permission`。使用前必读 [`+apply-permission` reference](references/lark-minutes-apply-permission.md)(write 操作,含 user/bot 身份与权限语义)。
85
-
86
- 只有当用户明确要求"申请查看权限"、"申请编辑权限"、"帮我申请这条妙记权限"时,才调用:
87
-
88
- ```bash
89
- lark-cli minutes +apply-permission --minute-token <token> --perm view|edit --as user
90
- lark-cli minutes +apply-permission --minute-token <token> --perm view|edit --as bot
91
- ```
92
-
93
- 这是向妙记所有者发起权限申请,不代表立即获得权限。
94
-
95
- **安全约束**:
96
- - 遇到无权限错误时,不要自动调用 `+apply-permission`;先把无权限事实告知用户,只有用户明确要求申请权限时才发起申请。
97
- - **必须沿用触发无权限错误时的来源身份**:例如 `--as bot` 读取妙记时遇到无权限,申请也要用 `--as bot`,不要切到 user 身份申请。
98
- - **禁止**用切换身份的方式绕过资源权限(例如 bot 无权限时改用 user 身份重新读取)。
99
-
100
- ### 4. 上传音视频文件生成妙记(并可继续获取纪要 / 逐字稿)
101
-
102
- 1. 当用户说"把音视频文件转成纪要""把录音转成逐字稿/文字稿/撰写文字""把 mp4/mp3 转成总结/待办/章节"时,也先走这个入口。
103
- 2. **处理流程**:
104
- - **上传音视频获取 `file_token`**:使用 [`lark-cli drive +upload`](../lark-drive/references/lark-drive-upload.md) 上传本地文件到云空间(云盘/云存储)并获取 `file_token`。
105
- - **生成妙记**:获取到 `file_token` 后,调用 [`lark-cli minutes +upload`](references/lark-minutes-upload.md) 将文件转换为妙记并获取 `minute_url` 链接。
106
- - **继续获取纪要 / 逐字稿(按需)**:如果用户目标不是只要妙记链接,而是要纪要、逐字稿、总结、待办或章节,则从 `minute_url` 中提取 `minute_token`,再调用 [`lark-cli minutes +detail --minute-tokens`](references/lark-minutes-detail.md) 获取对应产物。
107
-
108
- > **注意**:必须先获取飞书云空间(云盘/云存储)的 `file_token` 才能进行转换。
109
- >
110
- > **不要误走本地转写工具**:当用户目标是把本地音视频文件转成纪要、逐字稿、文字稿、撰写文字时,不要改用 `ffmpeg`、`whisper` 或其他本地 ASR/转码命令;标准路径就是 `drive +upload -> minutes +upload -> minutes +detail --minute-tokens`。
111
-
112
- ### 5. 编辑妙记的 AI 待办与 AI 总结(写入)
113
-
114
- 当用户要在**某条妙记内**操作 AI 待办或 AI 总结时使用本节。**不是**飞书任务(Task)清单里的待办。
115
-
116
- **触发信号(任一命中即走本 skill,禁止走 lark-task)**:
117
-
118
- - "在(某条)妙记里新建 / 添加 / 修改 / 删除待办"
119
- - "把妙记 A 的待办改成已完成 / 未完成"
120
- - "妙记里的任务1 / 任务2"(上下文已明确是妙记)
121
- - 已给出 `minute_token` 或妙记 URL,且要改待办 / 总结
122
-
123
- **妙记 AI 待办 vs 飞书任务 Task**:
124
-
125
- | 用户意图 | 正确命令 | 错误命令 |
126
- |---------|---------|---------|
127
- | 妙记里加待办 | `minutes +todo --operation add` 或 `--todos '[...]'` | `task +create` / `task tasklists list` |
128
- | 妙记里改待办 | `minutes +todo --operation update --todo-id ...` | `task +update` |
129
- | 妙记里删待办 | `minutes +todo --operation delete --todo-id ...` | `task tasks delete` |
130
- | 我的任务清单 | — | 走 [lark-task](../lark-task/SKILL.md) |
131
-
132
- **新建多条待办**:优先用 `--todos` 一次提交;单条则用多次 `--operation add`:
133
-
134
- ```bash
135
- # 批量:任务1 已完成 + 任务2 未完成
136
- lark-cli minutes +todo --minute-token <token> --as user --todos '[
137
- {"operation":"add","content":"晚上好1","is_done":true},
138
- {"operation":"add","content":"晚上好2","is_done":false}
139
- ]'
140
- ```
141
-
142
- **更新 / 删除前**:先用 `minutes +detail --minute-tokens <token> --todo` 读取 `todos[].todo_id`(按 `content` 匹配目标条目;列表顺序不保证稳定,**不要**用"第 2 条"代替 `todo_id`)。
143
-
144
- **无编辑权限**:若 CLI 返回 `error.subtype=permission_denied`,表示对**这条妙记**没有编辑权,应请所有者授权;**不要**误走 `auth login --scope`。
145
-
146
- **逐字稿关键词替换无命中**:`minutes +word-replace` 时,若 CLI 返回 `error.subtype=not_found`,表示传入的 `source_word` 在该妙记逐字稿中**一个都没匹配到**,未做任何替换。这是**参数问题不是权限问题**:先用 `minutes +detail --minute-tokens <token> --transcript` 读取当前逐字稿,核对 `source_word` 的精确写法与大小写后重试。
147
-
148
- **替换 AI 总结全文**:见 [minutes +summary](references/lark-minutes-summary.md)。
149
-
150
- > 使用 `+todo` 前必须阅读 [references/lark-minutes-todo.md](references/lark-minutes-todo.md);使用 `+summary` 前必须阅读 [references/lark-minutes-summary.md](references/lark-minutes-summary.md)。
151
-
152
- ### 7. 替换妙记逐字稿说话人
153
-
154
- 当用户要把妙记里某说话人的发言改绑到另一位飞书用户时使用。
155
-
156
- **触发信号**:「替换说话人」「把 A 的发言改成 B」「说话人识别错了」「把外部说话人改成飞书用户」等。
157
-
158
- **Agent 必读流程**(详见 [minutes +speaker-replace](references/lark-minutes-speaker-replace.md)):
159
-
160
- 1. 确认 `minute_token`。
161
- 2. **先**用 `lark-cli api GET "/open-apis/minutes/v1/minutes/<token>/transcript/speakerlist"` 查说话人列表(内部 HTTP,无 shortcut、无公开 OpenAPI 文档页)。
162
- 3. 根据用户描述的原说话人展示名,在返回的 `data.speakers[]` 中匹配 `name` → 得到 `speaker_id`;同名多人时结合 `vc +notes` 逐字稿请用户确认,**不要擅自挑选**。
163
- 4. 新说话人姓名用 [lark-contact](../lark-contact/SKILL.md) 解析为 `ou_` open_id。
164
- 5. 调用 `minutes +speaker-replace`,**`--from-speaker-id` 只传步骤 3 的 `speaker_id`,禁止传展示名**。
165
-
166
- ## 行为规则
167
-
168
- ### 1. `+detail` 必须显式声明产物 flag
169
-
170
- 不传 `--summary` / `--todo` / `--chapter` / `--keyword` / `--transcript` 时只返回基础信息(含顶层 `note_id`),AI 产物字段一律不返回。即使产物为空也会返回空值字段,便于程序化处理。
171
-
172
- ```bash
173
- # 拿全产物
174
- lark-cli minutes +detail --minute-tokens <token> --summary --todo --chapter --keyword --transcript
175
- ```
176
-
177
- ### 2. "提炼 / 总结"必须基于 Transcript,不要照搬 AI 总结
178
-
179
- AI 总结是模型对会议的二次压缩,可能遗漏争论过程和隐含决策。用户要求"提炼"或"重新总结"时,期望基于原始发言独立分析,而非搬运 AI 产物。**优先 `--transcript`,再独立写结论**。
180
-
181
- ### 3. 从妙记反查纪要:不绕 lark-vc
182
-
183
- `minutes +detail` 顶层直接返回 `note_id`(仅在该妙记关联纪要时存在)。不需要绕回 [lark-vc](../lark-vc/SKILL.md),直接:
184
-
185
- ```bash
186
- # 1) 取 note_id(顶层 .minutes[0].note_id)
187
- lark-cli minutes +detail --minute-tokens <minute_token> --format json
188
- # 2) 用上一步拿到的 note_id 读纪要 token
189
- lark-cli note +detail --note-id <note_id> # 拿 note_doc_token / verbatim_doc_token / shared_doc_tokens
190
- ```
191
-
192
- 顶层无 `note_id` 字段即代表无关联纪要,到此为止——不要继续尝试用 `minute_token` 当 `note_id`。
193
-
194
-
195
- ## API Resources
196
-
197
- ```bash
198
- lark-cli minutes <resource> <method> [flags]
199
- ```
200
-
201
- ### minutes
202
-
203
- - `get` — 获取妙记信息
204
-
205
- > **权限错误**:如果返回 `[2091005] permission deny`,表示用户没有对应妙记文件的阅读权限,需提示用户联系妙记 owner 申请权限。
206
-
207
- ## 不在本 skill 范围
208
-
209
- - 搜索历史会议记录、查参会人快照 → [lark-vc](../lark-vc/SKILL.md)
210
- - 未来日程 / 日历查询 → [lark-calendar](../lark-calendar/SKILL.md)
211
- - 已知 `note_id` 直接读纪要详情 → [lark-note](../lark-note/SKILL.md)
212
- - 飞书任务清单(个人 Todo / 共享清单) → [lark-task](../lark-task/SKILL.md)
213
- - 只有自然语言纪要标题、没有 `minute_token` / 妙记 URL / 本地音视频时定位逐字稿 → 文档搜索([lark-drive](../lark-drive/SKILL.md) / [lark-doc](../lark-doc/SKILL.md))
15
+ **MUST 完整读取 [`../lark-meeting/SKILL.md`](../lark-meeting/SKILL.md),并按照其中的路由和行动指南执行。**
@@ -1,98 +1,15 @@
1
1
  ---
2
2
  name: lark-note
3
3
  version: 1.0.0
4
- description: "飞书会议纪要(Note)直查:已知 note_id 时查询纪要详情、展示类型、关联文档 token,并读取 unified 原始逐字记录。当用户已持有 note_id,或从文档显式 vc-node-id 获得 note_id 时使用。不负责会议/日程/妙记定位、文档标题搜索或 Docx 正文读取。"
4
+ description: "仅当用户或上游配置显式指定 lark-note 时使用,相关请求统一交由 lark-meeting 技能处理。"
5
5
  metadata:
6
6
  requires:
7
7
  bins: ["lark-cli"]
8
- cliHelp: "lark-cli note --help"
8
+ skills: ["lark-meeting"]
9
9
  ---
10
10
 
11
- # note (v1)
11
+ # Compatibility entry
12
12
 
13
- 身份:`+detail` 支持 `--as user` / `--as bot`;`+transcript` 仅支持 `--as user`。`note_id` 若由某个身份取得(例如 `vc +detail --as bot`),`+detail` 必须显式沿用同一个 `--as`——不要依赖 profile 默认身份。完整身份延续规则见 [`../lark-shared/SKILL.md`](../lark-shared/SKILL.md),使用前必读。
13
+ 本技能只用于兼容旧名称,不直接处理业务。
14
14
 
15
- `+detail` 返回的 `note_doc_token` / `verbatim_doc_token` / `shared_doc_tokens` 交给 [lark-doc](../lark-doc/SKILL.md) 读正文时,仍要显式带上同一个 `--as`。lark-doc 对普通文档推荐 `--as user`,**不覆盖这些纪要文档 token 的来源身份**。
16
-
17
- **CRITICAL — 开始前 MUST 先用 Read 工具读取 [`../lark-vc/references/vc-domain-boundaries.md`](../lark-vc/references/vc-domain-boundaries.md)**,不读将导致命令使用、会议产物决策、领域边界职责判断错误:
18
- > 1. 了解日历 & VC、会议产物 & 文档的关联关系和职责划分
19
- > 2. 了解会议产物(妙记和纪要)之间的关联关系,例如:**妙记和纪要产生条件相互独立**
20
- > 3. 了解不同会议产物的组成部分,以便根据需求决策使用哪种产物的数据
21
-
22
- Note 域只接受显式 `note_id`:用户直接提供,或 `docs +fetch` 返回的 `<vc-transcribe-tab vc-node-id="...">` 中的 `vc-node-id`。不要从 `doc_token`、标题、正文或 backlink 反推 `note_id`。
23
-
24
- ## 命令路由
25
-
26
- | 用户表达 / 上下文 | 路由 |
27
- |---------|------|
28
- | 已知 `note_id`,查纪要类型 / 文档 token | `note +detail --note-id NOTE_ID` |
29
- | `docs +fetch` 返回 `<vc-transcribe-tab vc-node-id="...">` | 取 `vc-node-id` 作为 `NOTE_ID`,先 `note +detail --note-id NOTE_ID` |
30
- | 只持有 `meeting_id` | 先 `vc +detail --meeting-ids <id>` 拿 `note_id`,再 `note +detail --note-id NOTE_ID` |
31
- | 只持有 `minute_token`(妙记 URL) | 先 `minutes +detail --minute-tokens <token>` 顶层取 `note_id`,再 `note +detail --note-id NOTE_ID`(不要把 `minute_token` 当 `note_id`) |
32
- | 只持有日程 `event_id` | 先 `calendar +meeting --event-ids <id>` 拿 `meeting_id`,再按上一行继续 |
33
- | 已知 `note_id`,读纪要正文 | `note +detail` → `docs +fetch --doc <note_doc_token>` |
34
- | 已知 `note_id`,查 unified 原始记录 / 逐字稿 | `note +transcript --note-id NOTE_ID` |
35
- | 只有自然语言纪要标题,用户要逐字稿 / 原始记录 / 谁说了什么 | 不进本 skill;先走文档搜索与 `docs +fetch`,拿到 `vc-node-id` 后再回来 |
36
-
37
- ## `note_display_type` 路由
38
-
39
- | `note +detail` 结果 | 用户要逐字稿 / 原始记录时 |
40
- |------|---------------|
41
- | `normal` + `verbatim_doc_token` 非空 | `docs +fetch --doc <verbatim_doc_token>`(沿用 `+detail` 用的身份) |
42
- | `unknown` + `verbatim_doc_token` 非空 | 先按独立文档处理;不要猜成 unified |
43
- | `unknown` + 无逐字稿 token | 停止重试并说明无法确定逐字稿入口 |
44
- | `unified` | `note +transcript --note-id <note_id>`(仅支持 `--as user`) |
45
-
46
- 判别键是 `note_display_type`,不是 `verbatim_doc_token` 是否为空:unified 纪要也可能返回非空 `verbatim_doc_token`。
47
-
48
- > **bot + unified 的边界**:`+transcript` 目前仅支持 `--as user`。如果 `+detail --as bot` 返回 `unified`,不要静默切到 `--as user` 继续——先停下来向用户说明"该纪要逐字稿只能以 user 身份读取",只有用户明确同意才切换身份重试。
49
-
50
- ## 关键字段
51
-
52
- - `note_id`:Note 域唯一入口。
53
- - `note_display_type`:`unknown` / `normal` / `unified`。
54
- - `note_doc_token`:纪要正文文档,正文读取交给 [lark-doc](../lark-doc/SKILL.md)。
55
- - `verbatim_doc_token`:普通纪要逐字稿文档;unified 逐字稿不按这个 token 路由。
56
-
57
- ## 不在本 Skill 范围
58
-
59
- - 通过 `meeting_id` 定位纪要(`note_id`)→ [lark-vc](../lark-vc/SKILL.md)(`vc +detail`)。
60
- - 通过 `minute_token` 定位纪要(`note_id`)→ [lark-minutes](../lark-minutes/SKILL.md)(`minutes +detail` 顶层返回 `note_id`)。
61
- - 通过日程 `event_id` 定位会议(`meeting_id`) / 用户绑定纪要(`meeting_note`) → [lark-calendar](../lark-calendar/SKILL.md)(`calendar +meeting`)。
62
- - 自然语言纪要标题搜索 → [lark-drive](../lark-drive/SKILL.md) / [lark-doc](../lark-doc/SKILL.md)。
63
- - Docx 正文读取 → [lark-doc](../lark-doc/SKILL.md)。
64
- - 妙记基础信息与媒体文件 → [lark-minutes](../lark-minutes/SKILL.md)。
65
-
66
- ## Shortcuts
67
-
68
- | Shortcut | 何时读 reference |
69
- |----------|------|
70
- | [`+detail`](references/lark-note-detail.md) | 需要解释输出字段或根据展示类型继续路由 |
71
- | [`+transcript`](references/lark-note-transcript.md) | 需要拉取 unified 原始记录或处理本地输出文件 |
72
-
73
- ## 核心概念
74
-
75
- - **会议纪要(Note)**:视频会议结束后生成的结构化文档,通过 `note_id` 标识。一个 Note 包含 AI 智能纪要文档、逐字稿文档和会中共享文档。
76
- - **note_id**:纪要的唯一标识符,可通过 `vc +detail --meeting-ids` 获取。
77
- - **AI 智能纪要(MainDoc)**:AI 生成的会议总结与待办,对应 `note_doc_token`。
78
- - **逐字稿(VerbatimDoc)**:会议的逐句发言记录,含说话人和时间戳,对应 `verbatim_doc_token`。
79
- - **共享文档(SharedDoc)**:会中投屏共享的文档,对应 `shared_doc_tokens`。
80
-
81
- ## 核心场景
82
-
83
- ### 1. 通过 note_id 获取纪要文档 Token
84
-
85
- 1. 当用户已有 `note_id`,需要获取对应的 `note_doc_token`、`verbatim_doc_token` 或 `shared_doc_tokens` 时,使用 `note +detail`。
86
- 2. `note_id` 通常来自 `vc +detail` 的返回结果。
87
- 3. 获取到文档 Token 后,可使用 `docs +fetch` 读取文档内容,或使用 `drive metas batch_query` 获取文档元信息。
88
-
89
- ```bash
90
- # 1. 从会议获取 note_id(这里以 bot 身份为例)
91
- lark-cli vc +detail --meeting-ids <meeting_id> --as bot
92
-
93
- # 2. 用 note_id 拿文档 Token;沿用第 1 步的身份,不要省略 --as
94
- lark-cli note +detail --note-id <note_id> --as bot
95
-
96
- # 3. 读取纪要文档内容;同样沿用第 1 步的身份
97
- lark-cli docs +fetch --doc <note_doc_token> --doc-format markdown --as bot
98
- ```
15
+ **MUST 完整读取 [`../lark-meeting/SKILL.md`](../lark-meeting/SKILL.md),并按照其中的路由和行动指南执行。**
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: lark-sheets
3
- version: 3.1.2
3
+ version: 3.1.6
4
4
  description: "飞书电子表格:创建和操作电子表格。支持创建表格、管理工作表与行列结构(增删/合并/调整尺寸/隐藏/冻结)、读写单元格(值/公式/样式/批注/单元格图片)、查找替换、多操作批量更新,以及图表、透视表、条件格式、筛选器、迷你图、浮动图片等对象的创建与维护。当用户需要创建电子表格、管理工作表、批量读写或编辑数据、统计汇总与可视化、表格美化、公式计算(含 Excel 公式迁移)、金融/财务建模(DCF、三张表、预算、Sensitivity 等)等任务时使用。若用户是想按名称或关键词搜索云空间(云盘/云存储)里的表格文件,请改用 lark-drive 的 drive +search 先定位资源。当用户给出 doubao.com 的 /sheets/ URL/token 时,也应直接使用本 skill,不要因为域名不是飞书而回退到 WebFetch;路由依据是 URL 路径模式和 token,而不是域名。"
5
5
  metadata:
6
6
  requires:
@@ -28,58 +28,82 @@ metadata:
28
28
 
29
29
  ## 飞书表格编辑准则(动手前必守,所有编辑类任务一律生效)
30
30
 
31
- 下列准则横切所有任务,**动手前先过一遍**——被索引直接路由进某个工具参考也一律生效;展开与边界见括注的 reference。
31
+ 下列准则横切所有飞书表格任务,**动手前先过一遍**——被索引直接路由进某个工具参考时也一律生效;展开与边界见括注的 reference。
32
32
 
33
- 1. **最小改动**:除任务要改的单元格 / 列外,原表其它单元格、行列结构、Sheet 名、合并区、格式 1:1 保持;中间结果放原数据右侧或新建空白 Sheet,**禁止删 / 改名 / 隐藏 / 移动已存在 Sheet**;改写类任务精确圈定行列,不该转的原值 1:1 保留。
34
- 2. **真实写回 + 回读校验**:交付必须是对在线表格的真实写入,写完用 `+csv-get` / `+cells-get` / `+<对象>-list` 回读确认实际生效——**写操作返回 `ok` 只代表请求被接受、不代表结果符合预期**;写公式后查错误码、筛选 / 排序后核对前几行、删除 / 清空后确认已空。禁止只在文本里声称"已完成"。
33
+ 1. **最小改动**:除任务要改的单元格 / 列外,原表其它单元格、行列结构、Sheet 名、合并区、格式 1:1 保持;中间结果放原数据右侧或新建空白 Sheet,**禁止删 / 改名 / 隐藏 / 移动已存在 Sheet**(用户明示要求的除外,确认影响后执行,见 `lark-sheets-workbook`);改写类任务精确圈定行列,不该转的原值 1:1 保留;**补齐类只写空单元格,已有值(哪怕看着可疑)一律不动**,最多在交付说明备注。原表数值列的显示格式(小数位 / 千分位 / 是否科学计数法)同属不可改动项;仅当原值已被压成科学计数法或丢小数位时补 `number_format` 恢复可读,底层值不动。**新增的计算列 / 汇总行(均值、占比、金额)必须显式设 `number_format`**——公式默认吐出的多位小数(`3.64507772`)会被判为格式不合格,按语义定位数(比率两位小数、占比百分比、金额千分位)并与原表同列风格对齐。
34
+ 2. **真实写回 + 回读校验**:交付必须是对在线表格的真实写入,写完用 `+csv-get` / `+cells-get` / `+<对象>-list` 回读确认生效(顺带确认无截断 / 溢出 / 科学计数法)——**返回 `ok` 只代表请求被接受,不代表结果符合预期**。回读值可能带「值(样式)」注记(如 `49.6(V-Align: bottom)`),据此回写前先剥离注记只留纯值;写公式后用 `+cells-get --include formula` 核对**真实落格**(仅看显示值不能证明联动);筛选 / 排序后核对前几行,删除后确认已空。不要只在文本里声称"已完成"。
35
35
  3. **读全再写**:批量填充 / 补齐 / 修正类任务先确认真实数据末行再写,只探前 N 行会漏写表尾(确定末行流程见 `lark-sheets-read-data`)。
36
- 4. **公式优先于硬编码**:能用公式表达的计算(总计 / 占比 / 提取 / 查找)一律写公式而非静态值——**凡可由表内其它单元格推导的派生值默认用公式,即使用户没说"联动"**;写公式前先读 `lark-sheets-formula-translation`,**公式落表后收尾必跑 `+formula-verify` 直到 `status='success'`**。
37
- 5. **续写 / 扩展继承样式**:续写、补齐、复制区块、新增行列时禁止只读值只写值,必须连带 `cell_styles` + `border_styles` + 合并 + 行高一起继承(清单见 `lark-sheets-write-cells`,四边框最易漏)。
38
- 6. **多步写入分流**:美化收尾(样式 / 合并 / 行高列宽 / 冻结的任意组合)→ 一次 `+styles-put` 声明式规格交付(见 `lark-sheets-styles-put`);**同一个写操作**打多个区域 → 用该命令自身的复数形态(`--ranges` / map 入参);只有**跨类型、有顺序依赖的操作链**(如插列 → 写表头 → 回填数据)才用 `+batch-update`(high-risk-write:按下方审批协议先获用户同意再带 `--yes`;fail-fast 不回滚,语义见 `lark-sheets-batch-update`)。
39
- 7. **分组汇总用透视表**:"按 X 统计 Y / 分组汇总 / 各类数量金额"用 `+pivot-{create|update|delete}`,禁止用 SUMIF / 本地脚本拼一张假透视表。
40
- 8. **拆成可验证 checklist**:落地前把指令拆成所有"独立可验证子要点",逐点 `assert` 全过才交付(多维排序每维一点、多目标每目标一点、范围类核起 / 末 / 边界);只做第一个要点属违规。
41
- 9. **全量处理前置断言条数**:翻译 / 打标 / 批量公式落地等逐条任务,先把预期条数硬编码再 `assert actual == expected`,禁止输出"已完成前 N 条,剩余继续"的半成品。
42
- 10. **缺失值不编造**:补齐 / 扩展 / 按原表格式续填时,查不到或无法确定的值一律留空 + 备注注明("暂未发布 / 未知 / 待核实"),禁止用推算值 / 估算值 / 凭空数据充数;原表若已示范缺失值写法(空值 + 备注),照抄该约定。宁可留空标注,不填不可靠的数。
36
+ 4. **公式优先于硬编码**:凡可由表内其它单元格推导的值(总计 / 占比 / 增长率 / 提取 / 查找)一律写公式,即使用户没说"联动 / 自动更新"——本地算好再静默写进单元格,交付的是改输入不重算的死表。提取类产出同行源列的连续原文片段(逐字保真、不跨列取材,一格含多个片段要全列出);语义判断类(无固定分隔符 / 模式可循)公式表达不了,逐行写静态值,别用固定偏移 / 通用正则硬套。输入列可能为空时公式先判空返回空(空格按 0 参与算术产出无错误码的错值,`IFERROR` 拦不住)。**写聚合公式(SUM / COUNTIF / AVERAGE 等)前先确认区间的起止两端**:起点跳过表头行、终点覆盖真实末行——漏掉末行或把表头算进计数是最常见的错值来源,且结果看着合理、不报错;写完抽查区间首尾两格确认落在数据内。写飞书公式前读 `lark-sheets-formula-translation`,落表后用 `+formula-verify` 诊断。试错 3 次仍失败可降级静态值,交付说明写明「静态值 + 失败原因 + 不随源数据更新」。
37
+ 5. **续写 / 扩展继承样式**:续写、补齐、复制区块、新增行列时禁止只读值只写值——原表的字体 / 字号 / 颜色、四边框、对齐、底色(含奇偶行交替)、行高列宽、合并都要一并延续到新区域,**判分与验收都按"新区域与相邻原始区域视觉一致"来看**。
38
+ - **新增行 / 列优先用 `+dim-insert --inherit-style before`(或 `after`)**,样式由原生继承,比"往空白区直接写值再补刷样式"可靠得多(后者最易整片丢失交替底色与边框)。它只选继承哪一侧,不是插入方向。**行高是例外,不随样式继承**:插行填长文本前读相邻行 `row_height`,补 `+rows-resize`(可与插入链合批)。
39
+ - 已经写进空白区、或要对齐非相邻区域时,先 `+cells-get --include style` 读原区样式,再随值一起写回(清单见 `lark-sheets-write-cells`,四边框最易漏)。
40
+ - 新增列后把原跨列合并的标题扩展到新末列;插入行复制邻近行的合并分段,按分组合并前逐组核对边界行号,错界会吞掉组名。
41
+ 6. **多步写入分流**:美化收尾(样式 / 合并 / 行高列宽 / 冻结的任意组合)→ 一次 `+styles-put` 声明式规格交付(见 `lark-sheets-styles-put`);**同一个写操作**打多个区域 → 用该命令自身的复数形态(`--ranges` / map 入参);只有**跨类型、有顺序依赖的操作链**(如插列 → 写表头 → 回填数据)才用 `+batch-update`(high-risk-write:按下方审批协议先获用户同意再带 `--yes`;失败处置语义见 `lark-sheets-batch-update`)。
42
+ 7. **分组汇总优先用透视表**:参考速查表「分组汇总 / 透视」行;SUMIF / 本地脚本拼假透视表可能丢失原生透视能力,作为风险记录。
43
+ 8. **回复里声称的每一项,产物里都要能指到位置**:交付说明 / 回复正文写了"已生成趋势分析报告""图中对比了两个资产""覆盖 11 种格式",就必须在产物中真实存在对应的 sheet / 图表对象 / 文字段落,并能说出它在哪张表第几行。**文字描述不能替代产物**——判分只认产物里能被读到的内容,回复里的描述一概不计分。交付前逐条对照自己写的每句"已完成 X",指不到位置的要么补做,要么把该句删掉改成"未完成 + 原因"。
43
44
 
44
- > 端到端工作流:了解结构(`scripts/lark_inspect_workbook.py` / `+workbook-info`)→ 读数据 → 理解语义 → 原生工具优先 → 写入 → 回读验证;实操展开见下方「执行要点」。
45
+ 9. **拆成可验证 checklist**:落地前把指令拆成"独立可验证子要点",优先逐点 `assert` 或抽样回读(多维排序每维一点、多目标每目标一点、范围类核起 / 末 / 边界;样式类子项也算——标色 / 标红可回读着色单元格数或规则数);验证中发现的已知问题(算错 / 取不到数的格)在交付说明逐个列出,避免只报成功示例。
46
+ 10. **全量处理前置断言条数**:翻译 / 打标 / 批量公式等逐条任务,建议先把预期条数写入脚本再 `assert actual == expected`;断言不过时优先补齐。机制上补不了时(预算将尽 / 能力缺失)先落地可打开的主体产物(数据与结构),未完成项在交付说明声明。
47
+ 11. **批量替换 / 标注 / 删除建议残留复查**:逐个旧值执行「搜索 → 替换 → 再搜索」循环,尽量让每个旧值剩余命中数归零(单次替换有数量上限,大表尾部常有残留);回读采样覆盖前部 / 中段 / 表尾,不只抽前几行。
48
+
49
+ 12. **新增内容要能被看懂**:新增列给可区分含义的表头(不与原列同名);题面 / 模板指定的 sheet 名 / 标题 / 备注 / 图例文案**逐字照搬**,不缩写、不润色、不省略修饰成分与双语形式;数值沿用原列显示格式(整数 / 千分位 / 百分比 / 日期);**日期列转换先扫全列锁定月 / 日位**(如 `9/3/24`:出现过 `>12` 的位置是日),逐格凭感觉解析必月日颠倒;图表必须含标题、坐标轴标签与图例;长文本列自动换行并给足列宽。**单位 / 口径 / 来源等元信息另置**(标题下副标题行,或并进字段名如 `营收(万元)`),**不得占用已有表头格或数据格**。
50
+ 13. **表外数据要交代依据**:填入表内 / 附件 / 用户输入都取不到的外部数据(标准值、行情、法规参数等)时,交付说明写清**取值依据、单位口径与不确定项**;来自常识推算就写明"推算、未经核验",**不得伪造来源出处**。
51
+ 14. **缺失值不编造**:源数据 / 附件内本应存在的**事实数据**查不到或无法确定时一律留空 + 备注(“暂未发布 / 未知 / 待核实”),不用推算值 / 估算值充数(表外参数按上条);原表已示范缺失值写法就照抄该约定。
52
+
53
+ > 实操展开(读取路径、原生工具优先级、脚本配合、易漏陷阱)见下方「执行要点」节。端到端工作流:了解结构(优先 `scripts/lark_inspect_workbook.py` / `+workbook-info`)→ 读数据 → 理解语义 → 原生工具优先 → 写入 → 回读验证。
45
54
 
46
55
  ## 场景 → 命令速查(拿不准命令名先查这里,别按直觉拼)
47
56
 
57
+ > **若本次读取被截断在本表中段**:下列能力**都原生存在**,
58
+ > 详细用法(flag、payload 形状、易错点)在本表后半部分与其后的「执行要点」「公共 flag」章节:
59
+ >
60
+ > `+styles-put` 美化收尾(样式 / 边框 / 合并 / 行高列宽 / **冻结** 一次交付)·
61
+ > `+chart-create` 原生图表 · `+pivot-create` 透视表 · `+filter-create` 筛选 ·
62
+ > `+cond-format-create` 条件格式 · `+range-sort` 排序 · `+dim-insert` 插入行列 ·
63
+ > `+cells-search` / `+cells-replace` 查找替换 · `+workbook-import` 本地文件转在线表
64
+ >
65
+ > 要用其中任一能力而对应行未读到时,**用文件读取工具的偏移参数(`offset` / 起始行)把后半段再读一次**,
66
+ > 取全对应行再动手。不要因为没读到展开就判定命令不存在,更不要改用本地脚本绕路——
67
+ > 本地生成的透视表 / 图表导入后会退化成死表、静态图。
68
+
48
69
  把高频意图映射到**真实存在**的 shortcut / flag(agent 常从 Excel / Google Sheets / OpenAPI 误迁移命令名)。**选定命令后先读「动手前读」列指向的 reference 再动手**——命令名对得上不代表用法对。
49
70
 
50
71
  | 你要做的事 | ✅ 正确写法 | 动手前读 | ❌ 不存在(会被 cobra 拒) |
51
72
  | --- | --- | --- | --- |
52
- | 读数据(纯值 / CSV) | `+csv-get`(`--range` 可省略 = 读整个子表,无需先探行列;限定范围才传) | `lark-sheets-read-data` | `+get-range`、`+range-get`、`+cells-read` |
53
- | 读值 + 公式 / 样式 / 批注 | `+cells-get --include value,formula,style,comment,data_validation` | `lark-sheets-read-data` | `+get-cell`、`+cell-get`、`--with-styles`、`--with-merges`、`--include-merged-cells` |
54
- | 写纯文本值(整块 CSV 平铺;列里没有需字面保真的编号 / 点分日期) | `+csv-put`(定位用 `--start-cell` 左上角锚点格,也接受 `--range` 别名) | `lark-sheets-write-cells` | 把含点分日期(`12.10`)/编号(`001`)的列裸灌 `+csv-put`——会被数值化(`12.10`→`12.1`、`001`→`1`),改用 `+table-put` 声明 `dtypes:object` |
55
- | 写带类型的数据到**已有**表(列里有数字 / 金额 / 百分比 / 日期等**量值**——不看当下要不要排序求和,量值一律走这里) | `+table-put --sheets '{"sheets":[{"name":…,"columns":[…],"dtypes":{…},"formats":{…},"data":[[…]]}]}'`(不存在的 sheet 名自动建子表;同时美化加 `--styles` 一步带样式,详见 write-cells) | `lark-sheets-write-cells` | 在本地把数字拼成 `"$1,234"` / `"30.5%"` 字符串再 `+csv-put`(落成文本、丢计算能力,见下方 ⚠️) |
73
+ | 读数据(纯值 / CSV) | `+csv-get`(`--range` 可省略 = 读整个子表,无需先探行列;限定范围才传) | `lark-sheets-read-data` | `+read-data`、`+get-range`、`+range-get`、`+cells-read` |
74
+ | 读值 + 公式 / 样式 / 批注 | `+cells-get --include value,formula,style,comment,data_validation` | `lark-sheets-read-data` | `+get-cell`、`+cell-get`、`--sheet`(定位只有 `--sheet-id` / `--sheet-name`)、`--value-only`、`--include-style`、`--value-render-option`、`--with-styles`、`--with-merges`、`--include-merged-cells` |
75
+ | 写纯文本值(整块 CSV 平铺;列里**没有**需字面保真的数值 / 日期标签 / 编号——点分日期 `12.10`、编号 `001` 会被 csv-put 数值化,不算纯文本) | `+csv-put`(定位用 `--start-cell`,单个左上角锚点格;也接受 `--range` 别名,区间自动取左上角) | `lark-sheets-write-cells` | 把含点分日期(`12.10`)/编号(`001`)的列裸灌 `+csv-put`——会被数值化(`12.10`→`12.1`、`001`→`1`,尾零/前导零丢失),改用 `+table-put` 声明 `dtypes:object` |
76
+ | 写带类型的数据到**已有**表(列里有数字 / 金额 / 百分比 / 日期 / 计数等**本质是量值**的数据——不看当下要不要排序 / 求和,量值一律走这里) | `+table-put --sheets` 完整 payload `{"sheets":[{...}]}`(列名走 `columns`、二维数据走 `data`、列 pandas dtype 走 `dtypes`、列展示格式走 `formats`;来源不限 DataFrame——Counter / dict / list 同理;要同时美化加 `--styles` 一步带样式(区域底色 / 边框 / 列宽 / 行高 / 合并),不必事后再刷;payload 里不存在的 sheet 名会自动建子表,详见 write-cells) | `lark-sheets-write-cells` | 在本地把数字拼成 `"$1,234"` / `"30.5%"` 字符串再 `+csv-put`(会落成文本、丢失计算能力;常见借口见下方 ⚠️) |
56
77
  | **新建**电子表格并写带类型的数据(类型保真需求同上,但目标表还不存在) | `+workbook-create --sheets`(协议与 `+table-put` 同构、一步建表 + typed 写入,无需先建空表再 `+table-put`;date / number 不丢;`--styles` 同样可在建表同一步带全套样式,详见 workbook) | `lark-sheets-workbook` | 用 `--values` 灌日期 / 数字(会落成文本、丢类型) |
57
- | 写公式 / 富写入(样式 · 批注 · 图片 · 富文本),或需精确矩形定位的值 | `+cells-set`(单区域 `--range`+`--cells`;**散布多处 / 跨表用 `--writes` 一次批量交付**,每项自带 sheet_name;公式落表后继续 `+formula-verify` 收尾) | `lark-sheets-write-cells` | — |
58
- | 插图:图片**绑定到某条记录**、随行走(凭证 / 证件照 / 商品图 / 头像 / 二维码 / 每行配图) | `+cells-set-image`(单格 `--range`,嵌入单元格内) | `lark-sheets-write-cells` | — |
59
- | 插图:**自由摆放、不绑数据**的装饰 / 标识(logo / 水印 / 封面大图 / banner) | `+float-image-create`(浮动图片,自由定位 + 尺寸 + 层级) | `lark-sheets-float-image` | — |
78
+ | 写公式 / 富写入(样式 · 批注 · 图片 · 富文本),或需精确矩形定位的值 | `+cells-set`(单区域 `--range`+`--cells`;**散布多处 / 跨表用 `--writes` 一次批量交付**,每项自带 sheet_name;批注 / 图片 / 富文本只能用它;公式落表后可用 `+formula-verify` 诊断) | `lark-sheets-write-cells` | — |
79
+ | 只改样式、值 / 公式不动 | `+cells-set-style`(单区域小改);多区域 / 整表美化收尾一次 `+styles-put` 交付(见 `lark-sheets-styles-put`) | `lark-sheets-write-cells` | `+cells-set --copy-to-range` 刷样式——它连**值**一起复制,会把整个区域的值覆盖成锚点格的值;拼 `+batch-update` 的 `--operations` 做美化 |
80
+ | **已有**表美化收尾(样式 / 边框 / 合并 / 行高列宽 / 冻结的任意组合,单表或多表) | `+styles-put --styles '{"styles":[{"name":…,"cell_styles":[…],"cell_merges":[…],"row_sizes":[…],"col_sizes":[…],"freeze":{…}}]}'`(一份规格一次交付,词汇同 `+table-put --styles`) | `lark-sheets-styles-put` | 拼 `+batch-update` 的 `--operations` 子操作数组做美化、逐区域多次 `+cells-set-style` |
81
+ | 画图表 / 可视化(柱 / 折线 / 饼 / 条 / 散点 / 组合…) | 普通单图用 `+chart-create-basic`,多图用扁平输入的 `+batch-chart-create`;已有图的数据源用 `+chart-data-update`、常用配置用 `+chart-config-update`;只有语义 shortcut 无法表达的单系列 / 单数据点 / 高级字段才用 `+chart-create` / `+chart-update`,并只提交必要的局部 properties。多图先断言目标数量,图片迁移成真图表后必须删除并复查原浮动图片 | `lark-sheets-chart` | matplotlib / 本地画图再贴图(原生图表可交互、随数据更新) |
82
+ | 分组汇总 / 透视 | `+pivot-create`(默认不传落点 flag → 自动新建子表,零覆盖) | `lark-sheets-pivot-table` | 用 SUMIF / 本地脚本拼一张假透视表 |
83
+ | 排序(按列升 / 降序) | `+range-sort`(原生整行原子移动,值 / 样式 / 空值随行走) | `lark-sheets-range-operations` | 本地排完再整块 `+cells-set` 回写——`cells-set` 写空值**不覆盖**目标格(保留原值),会残留旧值,且样式不随行移动 |
84
+ | 筛选 / 只看符合条件的行(仅行级不裁列;"只保留某几列 / 筛出来另存一张表"→ 不走这里,另建结果 sheet 物化行与列、原表原样保留) | `+filter-create` | `lark-sheets-filter` | pandas filter 后覆盖写回(会毁原数据;要保存多份筛选状态用 `+filter-view-create`) |
60
85
  | 查找 / 替换文本 | `+cells-search`(找,关键字用 `--find`)、`+cells-replace`(替换) | `lark-sheets-search-replace` | `+cells-find`、`+find`、`--query` |
86
+ | 条件格式 / 条件高亮 / 数据条 / 色阶 / 重复值标记 | `+cond-format-create` | `lark-sheets-conditional-format` | `+highlight`、`+conditional-format`、逐格 `+cells-set-style` 硬凑 |
61
87
  | 看子表结构(合并 / 行高列宽 / 冻结 / 隐藏) | `+sheet-info` | `lark-sheets-sheet-structure` | `+sheet-get`、`+structure-get`、`+sheet-structure-get` |
88
+ | 插图:图片**绑定到某条记录**、随行走(凭证 / 证件照 / 商品图 / 头像 / 二维码 / 每行配图) | `+cells-set-image`(单格 `--range`,嵌入单元格内) | `lark-sheets-write-cells` | — |
89
+ | 插图:**自由摆放、不绑数据**的装饰 / 标识(logo / 水印 / 封面大图 / banner) | `+float-image-create`(浮动图片,自由定位 + 尺寸 + 层级) | `lark-sheets-float-image` | — |
90
+ | 迷你图 / 单元格内趋势线 / 胜负图 | `+sparkline-create` 等 `+sparkline-*` | `lark-sheets-sparkline` | 文本字符(▁▂▃)拼接、matplotlib 贴图(不随数据更新) |
91
+ | 清除内容 / 格式 | `+cells-clear`(high-risk-write 需用户确认后带 `--yes`;范围维度用 `--scope`,取值 content / formats / all) | `lark-sheets-range-operations` | `--type` |
92
+ | 批量清除多区域 | `+cells-batch-clear`(high-risk-write 需用户确认后带 `--yes`;`--scope`) | `lark-sheets-batch-update` | `--target` |
93
+ | 调整列宽 / 行高 | `+cols-resize` / `+rows-resize`(行、列是两个独立命令;连同样式一起调时并入 `+styles-put` 的 `row_sizes` / `col_sizes`) | `lark-sheets-range-operations` | `--dimension`(无此 flag) |
62
94
  | 看工作簿 / 子表清单 | `+workbook-info` | `lark-sheets-workbook` | `+sheet-list`、`+workbook-get`、`+workbook-list` |
95
+ | 导入本地 xlsx/xls/csv 文件为飞书电子表格 | `+workbook-import --file ./x.xlsx`(本地表格文件 → 飞书电子表格的正解;仅要导成多维表格 bitable 时才用 `drive +import --type bitable`) | `lark-sheets-workbook` | `drive +import`(绕路且要多给 `--type`)、本地读出数据再 `+workbook-create` 重灌(多此一举);要给**已有工作簿**加子表别用它(只会新建独立表,走 `+sheet-copy` / `+sheet-create`) |
96
+ | 参考某个**已有在线表**、把多个本地文件 / 数据各作为一张子表**追加**进去(不另起独立表) | 先 `+workbook-info` 拿模板子表 `sheet_id` → `+sheet-copy` 逐张复制模板子表(公式 / 合并 / 分组底色 / 列宽 / 条件格式全继承)再用 `+cells-*` 只改数据;无模板可继承时 `+sheet-create` 建空子表 + `+table-put --sheets/--styles` 写入 | `lark-sheets-workbook` | 把文件 `+workbook-import` / `+workbook-create` 另起一张**独立新表**(目标是并入已有工作簿时就跑偏了;这两条只产新表、不接受已有表定位) |
63
97
  | 复核某次(AI)编辑改了什么 / 取两个版本间的变更 | `+changeset-get --start-revision <编辑前版本>`(省略 `--end-revision` 取到最新;版本差 ≤ 20) | `lark-sheets-changeset` | — |
64
98
  | 取当前文档 revision(版本号) | `+revision-get` | `lark-sheets-workbook` | — |
65
99
  | 导出 xlsx / 单表 csv | `+workbook-export` | `lark-sheets-workbook` | — |
66
- | 导入本地 xlsx/xls/csv 文件为飞书电子表格 | `+workbook-import --file ./x.xlsx`(仅要导成多维表格 bitable 时才用 `drive +import --type bitable`) | `lark-sheets-workbook` | `drive +import`(绕路)、本地读 .xlsx 再 `+workbook-create` 重灌(多此一举)、想并入**已有工作簿**却用它(import 只会另起新表,加子表走 `+sheet-copy` / `+sheet-create`) |
67
- | 参考某个**已有在线表**、把多份数据各作为一张子表**追加**进去 | 先 `+workbook-info` → `+sheet-copy` 复制模板子表(公式 / 合并 / 底色 / 列宽全继承)再 `+cells-*` 只改数据;无模板可继承时 `+sheet-create` + `+table-put --sheets/--styles` | `lark-sheets-workbook` | `+workbook-import` / `+workbook-create` 另起独立新表(这两条只产新表、不接受已有表定位) |
68
- | **已有**表美化收尾(样式 / 边框 / 合并 / 行高列宽 / 冻结的任意组合,单表或多表) | `+styles-put --styles '{"styles":[{"name":…,"cell_styles":[…],"cell_merges":[…],"row_sizes":[…],"col_sizes":[…],"freeze":{…}}]}'`(一份规格一次交付,词汇同 `+table-put --styles`) | `lark-sheets-styles-put` | 拼 `+batch-update` 的 `--operations` 子操作数组做美化、逐区域多次 `+cells-set-style` |
69
- | 清除内容 / 格式 | `+cells-clear`(high-risk-write 需用户确认后带 `--yes`;范围维度用 `--scope`,取值 content / formats / all) | `lark-sheets-range-operations` | `--type` |
70
- | 批量清除多区域 | `+cells-batch-clear`(high-risk-write 需用户确认后带 `--yes`;`--scope`) | `lark-sheets-batch-update` | `--target` |
71
- | 调整列宽 / 行高 | `+cols-resize` / `+rows-resize`(行、列是两个独立命令;连同样式一起调时并入 `+styles-put` 的 `row_sizes` / `col_sizes`) | `lark-sheets-range-operations` | `--dimension`(无此 flag) |
72
- | 分组汇总 / 透视 | `+pivot-create`(默认不传落点 flag → 自动新建子表,零覆盖) | `lark-sheets-pivot-table` | 用 SUMIF / 本地脚本拼一张假透视表 |
73
- | 画图表 / 可视化(柱 / 折线 / 饼 / 条 / 散点 / 组合…) | `+chart-create`(先 `+chart-create --print-example <column\|bar\|line\|pie\|combo…>` 本地拿最小可用 `--properties` 模板,改 refs / index 即可用) | `lark-sheets-chart` | matplotlib / 本地画图再贴图(原生图表可交互、随数据更新) |
74
- | 条件高亮 / 数据条 / 色阶 / 重复值标记 | `+cond-format-create` | `lark-sheets-conditional-format` | `+highlight`、`+conditional-format`、逐格 `+cells-set-style` 硬凑 |
75
- | 筛选 / 只看符合条件的行 | `+filter-create` | `lark-sheets-filter` | pandas filter 后覆盖写回(会毁原数据;要保存多份筛选状态用 `+filter-view-create`) |
76
100
 
77
- > ⚠️ **动手前的触发式必读(按动作判定,不看主场景)**:动作里**含样式 / 美化**(底色 / 边框 / 字号 / 对齐 / 数字格式 / 配色 / 列宽行高)→ 先读 `lark-sheets-visual-standards`;**要写飞书公式** → 先读 `lark-sheets-formula-translation`,写完跑 `+formula-verify` 收尾(见 `lark-sheets-formula-verify`)。主任务是建表 / 录入也一样适用。
78
- > ⚠️ **两种图片别选错**:图**绑定某条记录、随行走**(凭证 / 证件照 / 每行配图)→ `+cells-set-image`;自由摆放的装饰(logo / 水印 / 封面)→ `+float-image-create`。别因「浮动图更熟」默认选浮动图。
79
- > ⚠️ **纯文本还是数值语义(看数据本质,不看当下用途)**:金额 / 百分比 / 日期 / 计数等**量值**一律数值写入——常规二维表用 `+table-put`(`dtypes` + `formats`),宽表 / 合并表头版式用 `+cells-set` 传数字(百分比传小数 `0.4`)+ `number_format`。只有编号 / 身份证等**标识符**才 `+csv-put` 平铺。"只是展示不用算 / 样式以后再刷"不构成把量值写成字符串的理由——类型不能后补。判据见 `lark-sheets-write-cells`「数字还是文本」。
80
- > ⚠️ **要新建子表 / 整表美化 → 别「`+csv-put` 写值再事后刷样式」**:`+table-put` / `+workbook-create` 的 `--styles` 在写数据**同一步**带全套样式(底色 / 边框 / 列宽行高 / 合并 / 冻结),payload 里不存在的 sheet 名自动建子表,纯文本表同样适用;比事后多次刷样式少好几次调用。存量表事后美化则一次 `+styles-put` 交付(同一份 `--styles` 词汇)。
81
- > ⚠️ **定位 flag**:`+cells-get` / `+cells-set` / `+csv-get` 用 `--range`;`+csv-put` 用 `--start-cell`(也接受 `--range` 别名,区间取左上角)。
82
- > ⚠️ **读取附加信息**一律走 `+cells-get --include …`(无 `--with-styles` 这类 flag);**看合并单元格**用 `+sheet-info` 的 `merged_cells`。
101
+ > ⚠️ **动手前的触发式必读(按动作判定,不看主场景)**:本次操作只要**涉及样式 / 美化**(底色 / 边框 / 字号 / 对齐 / 数字格式 / 汇总行 / 配色 / 列宽行高),动手前先读 `lark-sheets-visual-standards`;只要**要写飞书公式**,动手前先读 `lark-sheets-formula-translation`(飞书函数与 Excel 有差异,凭直觉迁移易错),写完后可读 `lark-sheets-formula-verify` 并执行 `+formula-verify` 做一次诊断。哪怕主任务是"建表 / 展开数据 / 录入",只要动作里含美化或写公式就适用——别因"这不算专门的美化 / 公式任务"而跳过。
102
+ > ⚠️ **两种图片别选错**:图若**绑定某条记录、要随行排序 / 筛选 / 增删**(凭证 / 证件照 / 每行配图,话里带「对应 / 每行 / 这列」等绑定词)→ 单元格图片 `+cells-set-image`;只是自由摆放的装饰(logo / 水印 / 封面)→ 浮动图片 `+float-image-create`。别因「浮动图更好控制 / 更熟」默认选浮动图。
103
+ > ⚠️ **纯文本还是数值语义(看数据本质,不看当下用途)**:金额 / 百分比 / 比率 / 计数 / 日期等**本质是量值**的数据 → 一律数值写入,常规二维表用 `+table-put`(`dtypes` 声明类型 + `formats` 设展示格式),版式装不下(多级 / 合并表头的宽表 leaderboard 等)改用 `+cells-set` 传数字(百分比传小数 `0.4`)+ `number_format`,照样显示 `40%` 且数值无损。只有编号 / 身份证 / 单据号这类**本质是标识符**、要字面保真的才用 `+csv-put` 平铺。**几个常见借口都不成立**——"只是 leaderboard / 报表展示不用算""版式复杂""样式以后再刷、先铺文本"都不是把百分比写成 `"40%"` 字符串灌 `+csv-put` 的理由(展示不改变它是数值;类型不能后补,落成文本就回不来)。判据与操作展开见 `lark-sheets-write-cells`「数字还是文本」。
104
+ > ⚠️ **要新建子表 / 整表美化 → 别默认「`+csv-put` 写值再事后刷样式」**:`+table-put` / `+workbook-create` 的 `--styles` 能在写数据的**同一步**带全套样式(区域底色 / 边框 / 列宽 / 行高 / 合并),且 `+table-put` 的 payload 里若 sheet 名不在工作簿中会自动新建子表——**纯文本表要新建子表 + 美化时同样走这里**(`--styles` 与列是否 typed 无关),比「`+csv-put` 写值 + 多次 `+cells-batch-set-style` / `+*-resize` 刷样式」少好几次调用(冻结行列等 sheet 级属性仍需 `+dim-freeze` 单独一步)。存量表事后美化则一次 `+styles-put` 交付(同一份 `--styles` 词汇)。
105
+ > ⚠️ **定位 flag**:`+cells-get` / `+cells-set` / `+csv-get` 用 `--range`;`+csv-put` 规范用 `--start-cell`(单个左上角锚点格),也接受 `--range` 别名(区间自动取左上角),二者择一即可。**`--range` 只写 `A1:B2` 纯区间——不接受 OpenAPI 的 `sheetId!A1:B2` 前缀写法**,子表定位必须单独传 `--sheet-id` / `--sheet-name`(从 OpenAPI 迁移习惯最易踩)。
106
+ > ⚠️ **读取附加信息**一律走 `+cells-get --include …`,**没有** `--with-styles` 这类 flag;**看合并单元格**用 `+sheet-info` 的 `merged_cells`,不要在 `+cells-get` 里找 merge flag。
83
107
 
84
108
  💡 **高频写命令签名(照抄改参即可;各命令 `--help` 的 Tips 段有同款示例)**:
85
109
 
@@ -104,42 +128,30 @@ lark-cli sheets +sheet-copy --url <U> --sheet-name 源表名 --title 副本名
104
128
 
105
129
  | 用户需求 | 读取路径 |
106
130
  |---|---|
107
- | "完善 / 补齐 / 修正所有 XX"、分析 / 清洗 / 大数据 | 先 `scripts/lark_profile_table.py` 确认目标区域与字段画像,再原生优先(公式 / `+pivot` / `+filter`);表达不了再分批 `+csv-get` 导出 + 脚本处理 + 分批回写(默认覆盖所有对应数据行) |
131
+ | "完善 / 补齐 / 修正所有 XX"、分析 / 清洗 / 大数据 | 先 `scripts/lark_profile_table.py` 确认目标区域与字段画像,再原生优先(公式 / 透视表 / 筛选等原生对象,命令见速查表);表达不了再分批 `+csv-get` 导出 + 脚本处理 + 分批回写(默认覆盖所有对应数据行) |
108
132
  | "查一下 / 统计 / 汇总"等只读 | 小表 `+csv-get` 读到上下文;大表先 `+workbook-info` + 小窗口 `+csv-get` 定边界,再对未截断窗口跑 `scripts/lark_detect_subtables.py` / `scripts/lark_profile_table.py` |
109
133
  | 需要公式 / 样式 / 批注 | `+cells-get` |
110
134
  | 续写 / 扩展已有内容 | `+csv-get` 看结构 + `+cells-get` 读源区样式 + `+sheet-info --include row_heights,merges`(见准则 5) |
111
135
 
112
136
  > "补齐 / 填空"类只探前 10 行就写会漏写表尾——先按 `lark-sheets-read-data` 确认真实数据末行(准则 3)。
113
137
 
114
- ### 计算:原生工具优先,代码兜底(强化准则 7)
115
-
116
- | 用户需求 | 用原生 | 禁止的替代 |
117
- |---|---|---|
118
- | 按 X 统计 Y、分组汇总 | `+pivot-{create\|update\|delete}` | pandas groupby → 写值 |
119
- | 求和 / 计数 / 平均 / 占比 | 公式 | Python 算 → 写静态值 |
120
- | 图表 / 可视化 | `+chart-*` | matplotlib |
121
- | 条件高亮 / 色阶 | `+cond-format-*` | 逐格设样式 |
122
- | 筛选 | `+filter-*` | pandas filter → 覆盖写入 |
123
- | 文本提取 / 转换 / 查找 | 公式(REGEXEXTRACT / TEXT / VLOOKUP 等) | Python → 写静态值 |
124
-
125
- 只有多步清洗、统计建模、公式试错 3 次仍失败时才用代码。
126
-
127
138
  ### 用脚本配合 CLI 时
128
139
 
129
140
  - **只读 stdout**:CLI 数据走 stdout、诊断走 stderr;解析 JSON 别 `2>&1`(警告混入会解析失败),用管道或单独重定向 stdout。
130
141
  - **读表理解优先用 `scripts/lark_*.py`(若可用)**:`lark_inspect_workbook.py` / `lark_detect_subtables.py` / `lark_profile_table.py` 是只读脚本,用来把在线表格整理成结构摘要。**可选增强,不是必经步骤**——`scripts/` 只随仓库版 skill 分发,二进制内嵌版没有这些文件;本地不存在时直接用 CLI 等价路径(对照表见 `lark-sheets-read-data`:`+workbook-info` / `+sheet-info` / 小窗口 `+csv-get`)。它们不替代写入类 shortcut;确认目标区域后,写入仍按对应 reference 执行。
131
- - **喂 CLI 的 CSV / JSON 用 UTF-8 无 BOM**;临时文件放系统临时目录、勿落项目目录。
142
+ - **喂 CLI 的 CSV / JSON 用 UTF-8 无 BOM**;临时文件**不要落进用户项目目录**——宿主若声明过 workspace 落点纪律(如禁用 `/tmp`)就照它放,没有则用系统临时目录。
132
143
  - **命令失败先读 stderr 再调整**,别原样重发。
133
- - **回写纯单元格值**:剥离 `值(V-Align: bottom)` 这类"值(样式)"串与残留引号再写;排序优先 `+range-sort` 原生工具,别"读出本地排完再整列写回"。
144
+ - **回写纯单元格值**:值(样式)注记剥离规则见准则 2(SoT);补充:残留引号一并剥离;排序优先 `+range-sort` 原生工具,别"读出本地排完再整列写回"。
134
145
 
135
146
  ### 易漏陷阱
136
147
 
137
- - **`+dim-insert` 不继承行高**:只继承值 / 公式 / 边框;插行填长文本前读相邻行 `row_height`,用 `+batch-update` 合 `+rows-resize` 补齐。
138
- - **公式容错**:日期 / 查找 / 转换公式用 `IFERROR` 包裹;写完查首末各 5 行错误码,再跑 `+formula-verify` 到 `status='success'`;同一方案试错上限 3 次。
148
+ - **`+dim-insert` 不继承行高**:只继承值 / 公式 / 边框,新行回落默认高度截断长文本;插行填长文本前读相邻行 `row_height`,用 `+batch-update` 合 `+rows-resize` 补齐。
149
+ - **公式容错**:日期 / 查找 / 数值转换公式用 `IFERROR` 包裹;写完读结果列首末各 5 行查 `#VALUE!` / `#REF!` / `#DIV/0!`,必要时再跑 `+formula-verify` 定位问题;同一方案试错上限 3 次。
139
150
  - **循环引用**:聚合公式引用范围不能含目标 cell 自身或其传递依赖。
140
- - **隐藏行列**:`+csv-get` 默认含隐藏行列;`--skip-hidden=true` 只看可见,真实行号会跳空——禁止按返回数组下标推导行号,用 `annotated_csv` 的 `[row=N]` 或 `row_indices`。
141
- - **跨 sheet 对象**:图表 / 条件格式 / 透视表 / 浮动图片可能分布在多个子表,先 `+workbook-info` 掌握全局。
142
- - **NLP 任务分批**:语义理解 / 翻译 / 打标用 NLP 处理(代码只做分批 / 行号映射 / 写回);大数据量分批(约 30 行 / 批)即时写回,多批用 `+batch-update`。
151
+ - **隐藏行列**:`+csv-get` 默认含隐藏行列;设 `--skip-hidden=true` 只看可见,返回的真实行号可能跳空。禁止按返回数组下标推导行号,必须使用 `annotated_csv` 的 `[row=N]` 或 `row_indices`。
152
+ - **跨 sheet 对象**:图表 / 条件格式 / 透视表 / 浮动图片可能分布在多个子表,操作前先 `+workbook-info` 掌握全局。
153
+ - **断定"命令不支持某场景"前必须实调一次拿到真实报错**:不得仅凭 `--help` 输出或推测就降级绕路——工具描述与实现可能不一致,报错才是事实。
154
+ - **NLP 任务分批**:语义理解 / 翻译 / 改写 / 分类等用 NLP 处理(代码只做分批 / 行号映射 / 写回);数据量大必须分批(通常 30 行 / 批),每批处理完即时写回,单批生成通常 ≤ 300 行,多批用 `+batch-update`。
143
155
 
144
156
  ## References
145
157
 
@@ -150,18 +162,18 @@ reference 分两组:先读**通用方法与规范**(横切所有任务的样
150
162
  | Reference | 描述 |
151
163
  | --- | --- |
152
164
  | [飞书表格样式与配色规范](references/lark-sheets-visual-standards.md) | 飞书表格样式与配色规范:表头/数据区/汇总行的颜色、字号、对齐、边框、数字格式等取值标准,以及从零新建表格的版式美化、新增汇总行、追加行列继承原表风格、已有区域美化等典型场景的决策流程与样式要点。工具调用参数细节请参考对应的 lark-sheets-write-cells / lark-sheets-range-operations / lark-sheets-batch-update。条件格式(高亮、标红、数据条、色阶)请使用 lark-sheets-conditional-format。 |
153
- | [飞书表格公式生成规则](references/lark-sheets-formula-translation.md) | Excel 公式到飞书表格公式的迁移与生成规则。核心目标不是保留 Excel 原语法,而是按飞书表格可执行规则重写公式,并在结果上尽量对齐 Excel。当用户要求把 Excel 公式改写成飞书表格公式,或需要生成飞书公式(尤其涉及 ARRAYFORMULA、原生数组函数、INDEX/OFFSET、MAP/LAMBDA、日期差、多层范围结果与二次展开)时使用。本文只负责把公式写对,落表后的强制收尾请接 `lark-sheets-formula-verify`。 |
165
+ | [飞书表格公式生成规则](references/lark-sheets-formula-translation.md) | Excel 公式到飞书表格公式的迁移与生成规则。核心目标不是保留 Excel 原语法,而是按飞书表格可执行规则重写公式,并在结果上尽量对齐 Excel。当用户要求把 Excel 公式改写成飞书表格公式,或需要生成飞书公式(尤其涉及 ARRAYFORMULA、数组语义与逐行填充、原生数组函数、INDEX/OFFSET、MAP/LAMBDA、日期差、多层范围结果与二次展开)时使用。本文只负责把公式写对,落表后可接 `lark-sheets-formula-verify` 做诊断。 |
154
166
 
155
167
  ### 按对象的工具参考(含 shortcut)
156
168
 
157
169
  | Reference | 描述 |
158
170
  | --- | --- |
159
- | [Lark Sheet Formula Verify](references/lark-sheets-formula-verify.md) | 公式写入 / 批量填充 / `--copy-to-range` 扩展 / 导入含公式工作簿后的强制自检入口。对指定子表(或整本工作簿)扫描公式与单元格值,聚合所有 Excel 错误(#REF! / #DIV/0! / #VALUE! / #NAME? / #NULL! / #NUM! / #N/A),同时合并最近一次写入留下的编译失败(formula_errors),输出统一 JSON 让 AI 一次拿到完整健康度报告。只要任务涉及写公式,落表后就应调用 +formula-verify 收敛到 zero-error;`status='errors_found'` 或 `status='partial'` 时禁止把链路标为完成。 |
171
+ | [Lark Sheet Formula Verify](references/lark-sheets-formula-verify.md) | 公式写入 / 批量填充 / `--copy-to-range` 扩展 / 导入含公式工作簿后的诊断入口。对指定子表(或整本工作簿)扫描公式与单元格值,聚合所有 Excel 错误(#REF! / #DIV/0! / #VALUE! / #NAME? / #NULL! / #NUM! / #N/A),同时合并最近一次写入留下的编译失败(formula_errors),输出统一 JSON 让 AI 一次拿到完整健康度报告。任务涉及公式时可调用 +formula-verify 定位问题;`status='errors_found'` 或 `status='partial'` 时记录诊断结果并按任务风险决定是否修复。 |
160
172
  | [Lark Sheet Workbook](references/lark-sheets-workbook.md) | 管理飞书表格的工作簿结构(子表列表及元数据)。当用户提到"看看这个表格有什么"、"表格结构"、"有哪些 sheet"、"新建一个 sheet"、"删除这个工作表"、"重命名"、"复制一份"、"移动到前面"时使用。 |
161
173
  | [Lark Sheet Sheet Structure](references/lark-sheets-sheet-structure.md) | 管理飞书表格的子表结构与布局。适用场景:查看行高、列宽、隐藏行列、合并单元格等布局信息,以及"插入一行"、"删除这列"、"隐藏行"、"冻结表头"、行列分组(大纲折叠/展开)等操作。行列大纲仅在用户明确提到"行分组"、"列分组"、"大纲"、"outline"时才触发,"按XXX分组"等数据分组场景请使用 lark-sheets-pivot-table。如需在表尾追加数据,应先通过此 skill 插入行,再通过 lark-sheets-write-cells 写入。 |
162
174
  | [Lark Sheet Read Data](references/lark-sheets-read-data.md) | 读取飞书表格中的单元格数据。当用户需要"看看数据"、"分析数据"、"统计/汇总"时使用;也适用于需要查看公式、样式、批注等详细信息的场景。 |
163
175
  | [Lark Sheet Search & Replace](references/lark-sheets-search-replace.md) | 在飞书表格中搜索和替换文本,支持限定范围、大小写匹配、精确匹配、正则表达式。当用户需要"查找"、"搜索"、"定位"某个值,或"替换"、"批量修改文本"、"把 A 改成 B"时使用。不要用于理解表格结构(应读取数据)、不要用于数据分析(应读取数据后计算)、不要把用户操作动作中的关键词(如"汇总金额""统计数量")当作搜索词。 |
164
- | [Lark Sheet Write Cells](references/lark-sheets-write-cells.md) | 向飞书表格的指定区域批量写入值、公式、样式、批注或单元格图片。适用场景:填写数据、设置公式、修改格式、添加批注、嵌入单元格图片(如需操作浮动图片,请使用 lark-sheets-float-image);若只需把一块 CSV 批量铺到表格上(值或公式,不带样式/批注),直接使用 `+csv-put` 更短更快。追加数据需先通过 lark-sheets-sheet-structure 插入行列。只要这次写入真实落了公式,收尾默认继续执行 `lark-sheets-formula-verify`。 |
176
+ | [Lark Sheet Write Cells](references/lark-sheets-write-cells.md) | 向飞书表格的指定区域批量写入值、公式、样式、批注或单元格图片。适用场景:填写数据、设置公式、修改格式、添加批注、嵌入单元格图片(如需操作浮动图片,请使用 lark-sheets-float-image);若只需把一块 CSV 批量铺到表格上(值或公式,不带样式/批注),直接使用 `+csv-put` 更短更快。追加数据需先通过 lark-sheets-sheet-structure 插入行列。写入公式后可使用 `lark-sheets-formula-verify` 做诊断。 |
165
177
  | [Lark Sheet Range Operations](references/lark-sheets-range-operations.md) | 对飞书表格中指定区域执行结构性操作(不涉及写入单元格数据值)。适用场景:清除内容或格式("清空"、"删除内容"、"去掉格式")、合并/取消合并单元格、调整行高列宽("加宽列"、"自适应列宽")、移动/复制/填充/排序数据("移动数据"、"复制到"、"自动填充"、"按某列排序")。写入单元格数据请使用 lark-sheets-write-cells。 |
166
178
  | [Lark Sheet Styles Put](references/lark-sheets-styles-put.md) | 把一份声明式视觉规格(样式/边框/合并/行高列宽/冻结)一次性应用到已有飞书表格的多个子表,整份规格一次提交。当任务是对存量表做美化收尾、批量刷样式、统一版式时使用。样式取值标准见 lark-sheets-visual-standards;建新表带样式走 lark-sheets-workbook(+workbook-create --styles)、写数据同步带样式走 lark-sheets-write-cells(+table-put --styles),三者共用同一份 --styles 词汇。仅针对飞书表格。 |
167
179
  | [Lark Sheet Batch Update](references/lark-sheets-batch-update.md) | 将多个飞书表格写入操作合并为一次批量执行,按顺序依次完成。适合需要连续执行多个写入操作的场景(如先修改结构再写入数据)。 |
@@ -217,9 +229,13 @@ lark-cli sheets +csv-get --url "https://.../sheets/shtXXX" --sheet-name "<真实
217
229
 
218
230
  ## 复合 JSON / 大入参:优先 stdin
219
231
 
220
- 大 payload(`--operations` / `--cells` / `--sheets` / `--styles` / `--properties`…)、或含换行 / 引号 / `!` 等特殊字符时,优先 heredoc stdin(`-`)传入,避免命令行超长与 shell 转义问题:
232
+ flag 帮助里标注支持 **Stdin** 的入参,当 payload 较大、含换行 / 引号等特殊字符,或已经落在某个文件里时,优先用 stdin(`-`)传入,避免命令行超长与 shell 转义问题。
233
+
234
+ 推荐写法:payload 写到用户项目目录之外的临时文件(落点同上:宿主声明过禁用 `/tmp` 就放 workspace 内相对路径,否则系统临时目录),再用 stdin 喂进去:
221
235
 
222
236
  ```bash
237
+ # TMPFILE 指向 payload 文件(落点按上文纪律选:workspace 内相对路径,或系统临时目录)
238
+ lark-cli sheets +cells-set --url "..." --sheet-name "Sheet1" --range "A1:B2" --cells - < "$TMPFILE"
223
239
  lark-cli sheets +batch-update --url "..." --dry-run --operations - <<'JSON' # high-risk:先 --dry-run,用户同意后再追加 --yes 重发
224
240
  [{"shortcut":"+cells-set","input":{...}}]
225
241
  JSON