@amaster.ai/pi-lark 0.1.7 → 0.1.9

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 (215) hide show
  1. package/package.json +2 -2
  2. package/skills/lark-apps/SKILL.md +41 -6
  3. package/skills/lark-apps/references/lark-apps-cloud-dev.md +5 -4
  4. package/skills/lark-apps/references/lark-apps-create.md +6 -3
  5. package/skills/lark-apps/references/lark-apps-db.md +130 -2
  6. package/skills/lark-apps/references/lark-apps-get.md +1 -1
  7. package/skills/lark-apps/references/lark-apps-list.md +1 -1
  8. package/skills/lark-apps/references/lark-apps-local-dev.md +27 -1
  9. package/skills/lark-apps/references/lark-apps-release-create.md +1 -1
  10. package/skills/lark-apps/references/lark-apps-user-id-convert.md +63 -0
  11. package/skills/lark-base/SKILL.md +155 -159
  12. package/skills/lark-base/references/{lark-base-role-guide.md → lark-base-advanced-permission-and-role.md} +5 -5
  13. package/skills/lark-base/references/lark-base-app-block-data-config.md +122 -0
  14. package/skills/lark-base/references/lark-base-app.md +225 -0
  15. package/skills/lark-base/references/lark-base-cell-value.md +26 -19
  16. package/skills/lark-base/references/{dashboard-block-data-config.md → lark-base-dashboard-block-config.md} +37 -5
  17. package/skills/lark-base/references/lark-base-dashboard-block-get-data.md +18 -2
  18. package/skills/lark-base/references/lark-base-dashboard.md +25 -12
  19. package/skills/lark-base/references/lark-base-data-analysis-pandas.md +93 -0
  20. package/skills/lark-base/references/lark-base-data-analysis-python-stdlib.md +120 -0
  21. package/skills/lark-base/references/lark-base-data-query.md +8 -11
  22. package/skills/lark-base/references/lark-base-field-create.md +13 -45
  23. package/skills/lark-base/references/{formula-field-guide.md → lark-base-field-formula.md} +1 -1
  24. package/skills/lark-base/references/{lookup-field-guide.md → lark-base-field-lookup.md} +1 -1
  25. package/skills/lark-base/references/{lark-base-field-json.md → lark-base-field-schema.md} +18 -100
  26. package/skills/lark-base/references/lark-base-field-update.md +13 -51
  27. package/skills/lark-base/references/lark-base-filter-condition.md +19 -31
  28. package/skills/lark-base/references/lark-base-record-batch-create.md +5 -1
  29. package/skills/lark-base/references/lark-base-record-batch-update.md +5 -2
  30. package/skills/lark-base/references/lark-base-record-query-and-analysis-cloud-sop.md +145 -0
  31. package/skills/lark-base/references/lark-base-record-query-and-analysis-sop.md +233 -0
  32. package/skills/lark-base/references/{role-config.md → lark-base-role-config.md} +2 -2
  33. package/skills/lark-base/references/lark-base-view-set-filter.md +1 -1
  34. package/skills/lark-base/references/lark-base-workflow-schema.md +2 -2
  35. package/skills/lark-base/references/{lark-base-workflow-guide.md → lark-base-workflow.md} +1 -1
  36. package/skills/lark-calendar/SKILL.md +3 -1
  37. package/skills/lark-calendar/references/lark-calendar-create.md +4 -3
  38. package/skills/lark-doc/SKILL.md +26 -61
  39. package/skills/lark-doc/references/genres/business-analysis.md +30 -0
  40. package/skills/lark-doc/references/genres/data-report.md +32 -0
  41. package/skills/lark-doc/references/genres/email.md +38 -0
  42. package/skills/lark-doc/references/genres/execution-plan.md +27 -0
  43. package/skills/lark-doc/references/genres/formal-doc.md +37 -0
  44. package/skills/lark-doc/references/genres/meeting-minutes.md +24 -0
  45. package/skills/lark-doc/references/genres/memo-brief.md +25 -0
  46. package/skills/lark-doc/references/genres/official-redhead.md +73 -0
  47. package/skills/lark-doc/references/genres/prd.md +26 -0
  48. package/skills/lark-doc/references/genres/proposal.md +24 -0
  49. package/skills/lark-doc/references/genres/research-report.md +32 -0
  50. package/skills/lark-doc/references/genres/retrospective.md +25 -0
  51. package/skills/lark-doc/references/genres/route-consumer.md +37 -0
  52. package/skills/lark-doc/references/genres/route-creative.md +36 -0
  53. package/skills/lark-doc/references/genres/route-knowledge.md +39 -0
  54. package/skills/lark-doc/references/genres/route-marketing.md +40 -0
  55. package/skills/lark-doc/references/genres/route-media.md +36 -0
  56. package/skills/lark-doc/references/genres/route-opinion.md +38 -0
  57. package/skills/lark-doc/references/genres/route-personal-brand.md +36 -0
  58. package/skills/lark-doc/references/genres/route-platform.md +9 -0
  59. package/skills/lark-doc/references/genres/route-report.md +10 -0
  60. package/skills/lark-doc/references/genres/route-workplace.md +17 -0
  61. package/skills/lark-doc/references/genres/sop-tutorial.md +41 -0
  62. package/skills/lark-doc/references/genres/technical-doc.md +39 -0
  63. package/skills/lark-doc/references/genres/wechat.md +39 -0
  64. package/skills/lark-doc/references/genres/weekly-report.md +24 -0
  65. package/skills/lark-doc/references/genres/white-paper.md +32 -0
  66. package/skills/lark-doc/references/genres/xiaohongshu.md +38 -0
  67. package/skills/lark-doc/references/lark-doc-create-workflow.md +121 -0
  68. package/skills/lark-doc/references/lark-doc-create.md +22 -48
  69. package/skills/lark-doc/references/lark-doc-fetch.md +80 -92
  70. package/skills/lark-doc/references/lark-doc-history.md +16 -15
  71. package/skills/lark-doc/references/lark-doc-md.md +5 -1
  72. package/skills/lark-doc/references/lark-doc-media-download.md +2 -1
  73. package/skills/lark-doc/references/lark-doc-script.md +76 -0
  74. package/skills/lark-doc/references/lark-doc-update.md +73 -221
  75. package/skills/lark-doc/references/lark-doc-whiteboard.md +5 -9
  76. package/skills/lark-doc/references/lark-doc-xml-extended-blocks.md +17 -12
  77. package/skills/lark-doc/references/lark-doc-xml.md +38 -167
  78. package/skills/lark-drive/SKILL.md +11 -7
  79. package/skills/lark-drive/references/lark-drive-apply-permission.md +1 -1
  80. package/skills/lark-drive/references/lark-drive-copy.md +87 -0
  81. package/skills/lark-drive/references/lark-drive-download.md +29 -2
  82. package/skills/lark-drive/references/lark-drive-export.md +4 -0
  83. package/skills/lark-drive/references/lark-drive-member-remove.md +59 -0
  84. package/skills/lark-drive/references/lark-drive-preview.md +21 -2
  85. package/skills/lark-drive/references/lark-drive-push.md +5 -1
  86. package/skills/lark-drive/references/lark-drive-search.md +2 -0
  87. package/skills/lark-drive/references/lark-drive-task-result.md +3 -0
  88. package/skills/lark-drive/references/lark-drive-update-title.md +78 -0
  89. package/skills/lark-event/SKILL.md +7 -4
  90. package/skills/lark-event/references/lark-event-vc.md +8 -2
  91. package/skills/lark-im/SKILL.md +14 -9
  92. package/skills/lark-im/references/lark-im-chat-list.md +9 -2
  93. package/skills/lark-im/references/lark-im-chat-members-list.md +7 -4
  94. package/skills/lark-im/references/lark-im-chat-messages-list.md +10 -3
  95. package/skills/lark-im/references/lark-im-chat-search.md +9 -2
  96. package/skills/lark-im/references/lark-im-feed-group-list-item.md +2 -2
  97. package/skills/lark-im/references/lark-im-feed-group-list.md +2 -2
  98. package/skills/lark-im/references/lark-im-feed-shortcut-list.md +1 -1
  99. package/skills/lark-im/references/lark-im-flag-list.md +2 -2
  100. package/skills/lark-im/references/lark-im-message-enrichment.md +1 -1
  101. package/skills/lark-im/references/lark-im-messages-resources-download.md +19 -25
  102. package/skills/lark-im/references/lark-im-messages-search.md +4 -5
  103. package/skills/lark-im/references/lark-im-threads-messages-list.md +8 -4
  104. package/skills/lark-mail/references/lark-mail-triage.md +19 -4
  105. package/skills/lark-minutes/SKILL.md +12 -6
  106. package/skills/lark-minutes/references/lark-minutes-apply-permission.md +95 -0
  107. package/skills/lark-minutes/references/lark-minutes-detail.md +7 -6
  108. package/skills/lark-minutes/references/lark-minutes-download.md +4 -2
  109. package/skills/lark-minutes/references/lark-minutes-search.md +6 -7
  110. package/skills/lark-note/SKILL.md +13 -9
  111. package/skills/lark-note/references/lark-note-detail.md +5 -2
  112. package/skills/lark-note/references/lark-note-transcript.md +2 -0
  113. package/skills/lark-shared/SKILL.md +39 -3
  114. package/skills/lark-sheets/SKILL.md +83 -82
  115. package/skills/lark-sheets/references/lark-sheets-batch-update.md +13 -58
  116. package/skills/lark-sheets/references/lark-sheets-chart.md +2 -1
  117. package/skills/lark-sheets/references/lark-sheets-conditional-format.md +1 -1
  118. package/skills/lark-sheets/references/lark-sheets-range-operations.md +5 -5
  119. package/skills/lark-sheets/references/lark-sheets-read-data.md +80 -6
  120. package/skills/lark-sheets/references/lark-sheets-sheet-structure.md +21 -10
  121. package/skills/lark-sheets/references/lark-sheets-styles-put.md +93 -0
  122. package/skills/lark-sheets/references/lark-sheets-visual-standards.md +2 -2
  123. package/skills/lark-sheets/references/lark-sheets-workbook.md +4 -3
  124. package/skills/lark-sheets/references/lark-sheets-write-cells.md +40 -12
  125. package/skills/lark-sheets/scripts/lark_detect_subtables.py +593 -0
  126. package/skills/lark-sheets/scripts/lark_inspect_workbook.py +188 -0
  127. package/skills/lark-sheets/scripts/lark_profile_table.py +614 -0
  128. package/skills/lark-sheets/scripts/lark_sheet_range.py +176 -0
  129. package/skills/lark-sheets/scripts/lark_sheet_read_cli.py +184 -0
  130. package/skills/lark-sheets/scripts/sheets_df.py +21 -3
  131. package/skills/lark-slides/SKILL.md +64 -81
  132. package/skills/lark-slides/references/cli/lark-slides-add-slide.md +92 -0
  133. package/skills/lark-slides/references/cli/lark-slides-create.md +176 -0
  134. package/skills/lark-slides/references/cli/lark-slides-delete-slide.md +65 -0
  135. package/skills/lark-slides/references/cli/lark-slides-history.md +132 -0
  136. package/skills/lark-slides/references/cli/lark-slides-media-upload.md +103 -0
  137. package/skills/lark-slides/references/cli/lark-slides-replace-slide.md +259 -0
  138. package/skills/lark-slides/references/cli/lark-slides-screenshot.md +115 -0
  139. package/skills/lark-slides/references/cli/lark-slides-update-slide.md +163 -0
  140. package/skills/lark-slides/references/cli/lark-slides-xml-presentation-slide-get.md +110 -0
  141. package/skills/lark-slides/references/cli/lark-slides-xml-presentation-slide-replace.md +188 -0
  142. package/skills/lark-slides/references/cli/lark-slides-xml-presentations-get.md +157 -0
  143. package/skills/lark-slides/references/iconpark-index.json +5 -41901
  144. package/skills/lark-slides/references/iconpark.md +3 -44
  145. package/skills/lark-slides/references/lark-slides-add-slide.md +5 -0
  146. package/skills/lark-slides/references/lark-slides-create.md +3 -162
  147. package/skills/lark-slides/references/lark-slides-delete-slide.md +5 -0
  148. package/skills/lark-slides/references/lark-slides-edit-workflows.md +3 -142
  149. package/skills/lark-slides/references/lark-slides-history.md +3 -130
  150. package/skills/lark-slides/references/lark-slides-media-upload.md +3 -124
  151. package/skills/lark-slides/references/lark-slides-pptx-template-workflows.md +3 -83
  152. package/skills/lark-slides/references/lark-slides-replace-slide.md +3 -235
  153. package/skills/lark-slides/references/lark-slides-screenshot.md +3 -95
  154. package/skills/lark-slides/references/lark-slides-xml-presentation-slide-get.md +3 -108
  155. package/skills/lark-slides/references/lark-slides-xml-presentation-slide-replace.md +3 -186
  156. package/skills/lark-slides/references/lark-slides-xml-presentations-get.md +3 -132
  157. package/skills/lark-slides/references/planning-layer.md +1 -1
  158. package/skills/lark-slides/references/slides_chart_demo.xml +5 -1416
  159. package/skills/lark-slides/references/slides_xml_schema_definition.xml +3 -3468
  160. package/skills/lark-slides/references/troubleshooting.md +3 -61
  161. package/skills/lark-slides/references/validation-checklist.md +3 -154
  162. package/skills/lark-slides/references/workflow/error-handling.md +62 -0
  163. package/skills/lark-slides/references/workflow/slides-editing.md +143 -0
  164. package/skills/lark-slides/references/workflow/template-editing.md +85 -0
  165. package/skills/lark-slides/references/workflow/validation-xml.md +156 -0
  166. package/skills/lark-slides/references/xml/iconpark-index.json +37458 -0
  167. package/skills/lark-slides/references/xml/iconpark.md +46 -0
  168. package/skills/lark-slides/references/xml/slides_chart_demo.xml +1415 -0
  169. package/skills/lark-slides/references/xml/slides_xml_schema_definition.xml +3514 -0
  170. package/skills/lark-slides/references/xml/xml-schema-quick-ref.md +497 -0
  171. package/skills/lark-slides/references/xml-schema-quick-ref.md +3 -483
  172. package/skills/lark-slides/scripts/iconpark_tool.py +1 -1
  173. package/skills/lark-slides/scripts/sxsd_validator.py +154 -10
  174. package/skills/lark-slides/scripts/xml_lint.py +2989 -0
  175. package/skills/lark-slides/scripts/xml_lint_test.py +4720 -0
  176. package/skills/lark-slides/scripts/xml_text_overlap_lint.py +3 -2691
  177. package/skills/lark-slides/scripts/xml_text_overlap_lint_test.py +5 -3788
  178. package/skills/lark-task/SKILL.md +12 -0
  179. package/skills/lark-task/references/lark-task-create.md +3 -1
  180. package/skills/lark-vc/SKILL.md +15 -5
  181. package/skills/lark-vc/references/lark-vc-detail.md +11 -6
  182. package/skills/{lark-vc-agent/references/lark-vc-agent-meeting-events.md → lark-vc/references/lark-vc-meeting-events.md} +121 -20
  183. package/skills/{lark-vc-agent/references/lark-vc-agent-meeting-list-active.md → lark-vc/references/lark-vc-meeting-list-active.md} +2 -2
  184. package/skills/{lark-vc-agent/references/lark-vc-agent-meeting-message-send.md → lark-vc/references/lark-vc-meeting-message-send.md} +3 -3
  185. package/skills/lark-vc/references/lark-vc-recording.md +8 -6
  186. package/skills/lark-vc/references/vc-domain-boundaries.md +8 -1
  187. package/skills/lark-vc-agent/SKILL.md +24 -9
  188. package/skills/lark-vc-agent/references/lark-vc-agent-meeting-join.md +2 -2
  189. package/skills/lark-vc-agent/references/lark-vc-agent-meeting-leave.md +2 -2
  190. package/skills/lark-whiteboard/SKILL.md +15 -8
  191. package/skills/lark-whiteboard/references/lark-whiteboard-export.md +4 -3
  192. package/skills/lark-whiteboard/references/lark-whiteboard-update.md +4 -4
  193. package/skills/lark-whiteboard/references/lark-whiteboard-workflow.md +19 -17
  194. package/skills/lark-whiteboard/routes/dsl.md +8 -2
  195. package/skills/lark-whiteboard/routes/mermaid.md +1 -1
  196. package/skills/lark-whiteboard/routes/svg-edit.md +5 -2
  197. package/skills/lark-whiteboard/routes/svg.md +3 -1
  198. package/skills/lark-whiteboard/scenes/mention.md +71 -0
  199. package/skills/lark-wiki/SKILL.md +8 -4
  200. package/skills/lark-wiki/references/lark-wiki-delete-space.md +6 -3
  201. package/skills/lark-wiki/references/lark-wiki-node-copy.md +5 -19
  202. package/skills/lark-wiki/references/lark-wiki-node-create.md +19 -2
  203. package/skills/lark-wiki/references/lark-wiki-node-get.md +15 -0
  204. package/skills/lark-wiki/references/lark-wiki-node-list.md +1 -1
  205. package/skills/lark-base/references/lark-base-data-analysis-sop.md +0 -210
  206. package/skills/lark-base/references/lark-base-data-query-guide.md +0 -61
  207. package/skills/lark-base/references/lark-base-record-upsert.md +0 -63
  208. package/skills/lark-doc/references/lark-doc-word-stat.md +0 -93
  209. package/skills/lark-doc/references/style/lark-doc-create-workflow.md +0 -47
  210. package/skills/lark-doc/references/style/lark-doc-style.md +0 -68
  211. package/skills/lark-doc/references/style/lark-doc-update-workflow.md +0 -48
  212. package/skills/lark-doc/scripts/doc_word_stat.py +0 -1243
  213. package/skills/lark-slides/references/lark-slides-replace-pages.md +0 -95
  214. package/skills/lark-slides/references/lark-slides-xml-presentation-slide-create.md +0 -219
  215. package/skills/lark-slides/references/lark-slides-xml-presentation-slide-delete.md +0 -126
@@ -6,8 +6,6 @@ Search Feishu messages across conversations. This shortcut automatically perform
6
6
 
7
7
  By default each result message also carries a `reactions` block (counts + details from `im.reactions.batch_query`) when the server has reactions for it, and `update_time` for messages that were actually edited. With `--page-all`, every page is enriched; pass `--no-reactions` to skip the extra round-trip. See [message enrichment](lark-im-message-enrichment.md) for the full contract.
8
8
 
9
- > **User identity only** (`--as user`). Bot identity is not supported.
10
-
11
9
  This skill maps to the shortcut: `lark-cli im +messages-search` (internally calls `POST /open-apis/im/v1/messages/search` + batched `GET /open-apis/im/v1/messages/mget`, then batch-fetches chat context).
12
10
 
13
11
  ## Commands
@@ -80,11 +78,11 @@ lark-cli im +messages-search --query "test" --dry-run
80
78
  | `--start <time>` | No | Start time with local timezone offset required (e.g. `2026-03-24T00:00:00+08:00`) |
81
79
  | `--end <time>` | No | End time with local timezone offset required (e.g. `2026-03-25T23:59:59+08:00`) |
82
80
  | `--page-size <n>` | No | Page size (default 20, range 1-50) |
83
- | `--page-token <token>` | No | Pagination token for the next page |
81
+ | `--page-token <token>` | No | Starting cursor, normally returned by a previous response |
84
82
  | `--page-all` | No | Automatically paginate through all result pages (up to 40 pages) |
85
83
  | `--page-limit <n>` | No | Max pages to fetch when auto-pagination is enabled (default 20, max 40). Setting it explicitly also enables auto-pagination |
86
84
  | `--format <fmt>` | No | Output format: `json` (default) / `pretty` / `table` / `ndjson` / `csv` |
87
- | `--as <identity>` | No | Identity type (defaults to and only supports `user`) |
85
+ | `--as <identity>` | No | Identity type: `user` or `bot` |
88
86
  | `--dry-run` | No | Print the request only, do not execute it |
89
87
 
90
88
  ## Core Constraints
@@ -135,6 +133,7 @@ Each message in JSON output contains:
135
133
  - Default behavior is still **single-page**.
136
134
  - `--page-token` is the manual continuation mechanism when you already have a token from a previous response.
137
135
  - `--page-all` enables auto-pagination and uses a default cap of **40 pages**.
136
+ - With both flags, auto-pagination starts at `--page-token` and continues from that cursor.
138
137
  - `--page-limit <n>` enables auto-pagination with an explicit cap. If you pass `--page-limit` without `--page-all`, auto-pagination is still enabled.
139
138
  - When auto-pagination stops because of the configured page cap, the response still includes the last `has_more` / `page_token` so you can continue manually.
140
139
 
@@ -162,7 +161,7 @@ Use `im +messages-resources-download` if you need to fetch the underlying image
162
161
 
163
162
  Use `--query` only for real message keywords. If the user asks for activity review such as "最近一周我和哪些 Bot 有过交互" or "整理我和某人的聊天记录", and the useful constraints are sender type, chat, person, or time range, keep `--query ""` and rely on those filters. Do not put generic instruction words such as "看看", "总结", "交互内容", or "聊天记录" into `--query`; those words often over-constrain message search and hide the relevant messages.
164
163
 
165
- This guidance applies only when using user identity. `im +messages-search` is user-only; if the user explicitly asks for application/bot identity, do not try `--as bot`. For bot identity with a named group and history/listing intent, resolve the group with `im +chat-search --as bot`, then list messages with `im +chat-messages-list --as bot --chat-id <chat_id>`.
164
+ This guidance applies to both user and bot identity. If the user explicitly asks for application/bot identity, run `im +messages-search --as bot`; for named-group history/listing intents where search is not needed, resolving the group with `im +chat-search --as bot` and listing messages with `im +chat-messages-list --as bot --chat-id <chat_id>` is still a good narrower path.
166
165
 
167
166
  ```bash
168
167
  # Review recent bot interactions without forcing a keyword
@@ -23,6 +23,9 @@ lark-cli im +threads-messages-list --thread omt_xxx --page-size 20
23
23
  # Pagination
24
24
  lark-cli im +threads-messages-list --thread omt_xxx --page-token <PAGE_TOKEN>
25
25
 
26
+ # Fetch multiple pages automatically, up to 10 pages by default
27
+ lark-cli im +threads-messages-list --thread omt_xxx --page-all
28
+
26
29
  # Output format options
27
30
  lark-cli im +threads-messages-list --thread omt_xxx --format pretty
28
31
  lark-cli im +threads-messages-list --thread omt_xxx --format table
@@ -43,8 +46,10 @@ lark-cli im +threads-messages-list --thread omt_xxx --dry-run
43
46
  | `--no-reactions` | No | Skip auto-fetching the `reactions` block |
44
47
  | `--download-resources` | No | Download message resources (image/file/audio/video/media + post-embedded, excluding stickers) into `./lark-im-resources/` and attach a `resources` block. Off by default |
45
48
  | `--order <order>` | No | Sort order: `asc` (default) / `desc` |
46
- | `--page-size <n>` | No | Number of items per page (default 50, range 1-500) |
47
- | `--page-token <token>` | No | Pagination token for the next page |
49
+ | `--page-size <n>` | No | Number of items per page (default 50, range 1-50) |
50
+ | `--page-token <token>` | No | Starting cursor, normally returned by a previous response |
51
+ | `--page-all` | No | Automatically fetch and merge subsequent pages; capped by `--page-limit` |
52
+ | `--page-limit <n>` | No | Maximum pages fetched by `--page-all` (default 10, range 1-1000) |
48
53
  | `--format <fmt>` | No | Output format: `json` (default) / `pretty` / `table` / `ndjson` / `csv` |
49
54
  | `--as <identity>` | No | Identity type: `user` (default) / `bot` |
50
55
  | `--dry-run` | No | Print the request only, do not execute it |
@@ -61,8 +66,7 @@ Thread messages do not support `start_time` / `end_time` filtering because of Fe
61
66
 
62
67
  ### 3. Pagination (`has_more` / `page_token`)
63
68
 
64
- - When the result includes `has_more=true`, use `page_token` to fetch the next page
65
- - If you need the complete thread, keep paginating; if you only need an overview, the first page is often enough
69
+ Default is one page. With `--page-all`, `--page-token` sets the starting cursor; if `meta.pagination.complete=false`, resume from `meta.pagination.next_token` or raise `--page-limit`.
66
70
 
67
71
  ### 4. Recommended expansion strategy
68
72
 
@@ -13,6 +13,8 @@ lark-cli mail +triage
13
13
 
14
14
  # 查看收件箱未读
15
15
  lark-cli mail +triage --filter '{"folder":"inbox","is_unread":true}'
16
+ lark-cli mail +triage --folder INBOX --is-unread
17
+ lark-cli mail +triage --filter is_unread
16
18
 
17
19
  # 全文搜索
18
20
  lark-cli mail +triage --query "合同审批"
@@ -25,6 +27,8 @@ lark-cli mail +triage --query "项目评审" --filter '{"time_range":{"start_tim
25
27
 
26
28
  # 指定文件夹
27
29
  lark-cli mail +triage --filter '{"folder":"sent"}'
30
+ lark-cli mail +triage --filter folder=sent
31
+ lark-cli mail +triage --folder sent
28
32
 
29
33
  # 系统标签(可通过 folder 或 label 传入,搜索时自动转为 folder)
30
34
  lark-cli mail +triage --filter '{"folder":"flagged"}'
@@ -47,17 +51,28 @@ lark-cli mail +triage --page-size 10
47
51
 
48
52
  | 参数 | 默认 | 说明 |
49
53
  |------|------|------|
50
- | `--filter <json>` | — | 筛选条件(见下方字段说明) |
54
+ | `--filter <filter>` | — | 筛选条件(见下方字段说明) |
55
+ | `--folder <name-or-id>` | — | 文件夹名称或系统文件夹 ID 筛选;等价于设置 `filter.folder` |
56
+ | `--folder-id <id>` | — | 明确的文件夹 ID 筛选;等价于设置 `filter.folder_id` |
57
+ | `--is-unread` | — | 只看未读;等价于设置 `filter.is_unread=true` |
51
58
  | `--query <text>` | — | 全文搜索关键词 |
52
59
  | `--format <mode>` | `table` | `table` / `json` / `data`(`json` 和 `data` 均输出含分页信息的对象) |
53
60
  | `--max <n>` | `20` | 最大返回条数(1-400),内部自动分页拉取 |
54
- | `--page-size <n>` | — | `--max` 的别名,两者含义相同;同时指定时 `--page-size` 优先 |
61
+ | `--page-size <n>` | — | `--max` 的别名;重复指定时后出现的值生效 |
55
62
  | `--page-token <token>` | — | 上一次响应返回的分页令牌,传入后从该位置继续拉取。令牌带 `search:` 或 `list:` 前缀,标识来源路径,不可混用 |
56
63
  | `--labels` | — | table 格式时额外显示 labels 列 |
57
64
  | `--mailbox <id>` | `me` | 邮箱地址 |
58
65
 
59
66
  ### `--filter` 支持的字段
60
67
 
68
+ `--filter` 有三种写法:
69
+
70
+ - JSON 对象:`--filter '{"folder":"INBOX","is_unread":true}'`,用于组合多个字段或传数组/对象字段
71
+ - 单个 `key=value`:`--filter folder=INBOX`、`--filter is_unread=true`
72
+ - 裸未读快捷写法:`--filter is_unread`
73
+
74
+ 多个筛选条件请使用 JSON 对象,`folder=INBOX,is_unread=true` 这种逗号拼接的 key=value 不支持。
75
+
61
76
  | 字段 | 类型 | 说明 |
62
77
  |------|------|------|
63
78
  | `folder` | string | 文件夹名称筛选。系统文件夹固定值:`inbox`/`sent`/`draft`/`trash`/`spam`/`archive`/`priority`/`flagged`/`other`/`scheduled`,也支持自定义文件夹名称。子文件夹需用 `parent_name/child_name` 格式,可通过 folder list 接口查看 |
@@ -73,7 +88,7 @@ lark-cli mail +triage --page-size 10
73
88
 
74
89
  > **系统标签说明**:`IMPORTANT`/`FLAGGED`/`OTHER` 可通过 `folder` 或 `label` 传入(也支持中文别名 `重要邮件`/`已加旗标`/`其他邮件`、搜索名 `priority`/`flagged`/`other`)。搜索时自动转为 folder 字段,列表时自动转为 label_id。label list 接口不返回这三个系统标签。
75
90
  >
76
- > **⚠️ 注意**:查询未读请用 `"is_unread":true`。
91
+ > **⚠️ 注意**:查询未读可用 `--is-unread`、`--filter is_unread`、`--filter is_unread=true` 或 JSON 写法 `"is_unread":true`。
77
92
  可运行 `mail +triage --print-filter-schema` 查看完整字段说明。
78
93
 
79
94
  ## 输出
@@ -108,7 +123,7 @@ lark-cli mail +triage --page-size 10
108
123
 
109
124
  ### `table` 格式
110
125
 
111
- `page_token` 信息输出在 stderr,自动携带 `--query`/`--filter`/`--mailbox` 参数方便续页:
126
+ `page_token` 信息输出在 stderr,自动携带 `--query`/`--filter`/`--folder`/`--folder-id`/`--is-unread`/`--mailbox` 参数方便续页:
112
127
  ```text
113
128
  15 message(s)
114
129
  next page: mail +triage --query '合同审批' --page-token 'search:abc123...'
@@ -20,18 +20,20 @@ metadata:
20
20
 
21
21
  ## 身份
22
22
 
23
- 所有 minutes 命令默认使用 `--as user`。
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` 为准。
24
26
 
25
27
  ## Shortcuts
26
28
 
27
29
  | Shortcut | 说明 |
28
30
  |----------|------|
29
- | [`+search`](references/lark-minutes-search.md) | 按关键词、所有者、参与者、时间范围搜索妙记 |
31
+ | [`+search`](references/lark-minutes-search.md) | 按关键词、所有者、参与者、时间范围搜索妙记;支持 user/bot 身份 |
30
32
  | [`+detail`](references/lark-minutes-detail.md) | 查询妙记详情(标题和关联的纪要note_id),按需获取 AI 产物(总结、待办、章节、逐字稿、关键词) |
31
33
  | [`+download`](references/lark-minutes-download.md) | 下载妙记音视频媒体文件 |
32
34
  | [`+upload`](references/lark-minutes-upload.md) | 上传 file_token 生成妙记 |
33
35
  | [`+update`](references/lark-minutes-update.md) | 更新妙记标题 |
34
- | `+apply-permission` | 申请妙记查看或编辑权限 |
36
+ | [`+apply-permission`](references/lark-minutes-apply-permission.md) | 申请妙记查看或编辑权限 |
35
37
  | [`+speaker-replace`](references/lark-minutes-speaker-replace.md) | 替换妙记逐字稿中的说话人(须先 `lark-cli api GET .../speakerlist` 取 `speaker_id`) |
36
38
  | `+word-replace` | 批量替换逐字稿关键词(详见 `lark-cli minutes +word-replace --help`) |
37
39
  | [`+summary`](references/lark-minutes-summary.md) | 替换妙记 AI 总结全文 |
@@ -79,17 +81,21 @@ metadata:
79
81
 
80
82
  ### 3. 申请妙记权限
81
83
 
82
- 遇到妙记没有查看或编辑权限时,引导用户申请对应权限;只有用户明确要申请时,才调用 `minutes +apply-permission`。
84
+ 遇到妙记没有查看或编辑权限时,引导用户申请对应权限;只有用户明确要申请时,才调用 `minutes +apply-permission`。使用前必读 [`+apply-permission` reference](references/lark-minutes-apply-permission.md)(write 操作,含 user/bot 身份与权限语义)。
83
85
 
84
86
  只有当用户明确要求"申请查看权限"、"申请编辑权限"、"帮我申请这条妙记权限"时,才调用:
85
87
 
86
88
  ```bash
87
- lark-cli minutes +apply-permission --minute-token <token> --perm view|edit
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
88
91
  ```
89
92
 
90
93
  这是向妙记所有者发起权限申请,不代表立即获得权限。
91
94
 
92
- **安全约束**:遇到无权限错误时,不要自动调用 `+apply-permission`;先把无权限事实告知用户,只有用户明确要求申请权限时才发起申请。
95
+ **安全约束**:
96
+ - 遇到无权限错误时,不要自动调用 `+apply-permission`;先把无权限事实告知用户,只有用户明确要求申请权限时才发起申请。
97
+ - **必须沿用触发无权限错误时的来源身份**:例如 `--as bot` 读取妙记时遇到无权限,申请也要用 `--as bot`,不要切到 user 身份申请。
98
+ - **禁止**用切换身份的方式绕过资源权限(例如 bot 无权限时改用 user 身份重新读取)。
93
99
 
94
100
  ### 4. 上传音视频文件生成妙记(并可继续获取纪要 / 逐字稿)
95
101
 
@@ -0,0 +1,95 @@
1
+ # minutes +apply-permission
2
+
3
+ 向妙记所有者发起查看或编辑权限申请。**写操作**,只在用户明确要求申请权限时才调用;调用后不代表立即获得权限,只是提交了一条申请。
4
+
5
+ 本 skill 对应 shortcut:`lark-cli minutes +apply-permission`(调用 `POST /open-apis/minutes/v1/minutes/{minute_token}/permissions/apply`)。支持 `--as user` / `--as bot`。
6
+
7
+ ## 命令
8
+
9
+ ```bash
10
+ # 以 user 身份申请查看权限
11
+ lark-cli minutes +apply-permission --minute-token obcnxxxxxxxxxxxxxxxxxxxx --perm view --as user
12
+
13
+ # 以 bot 身份申请编辑权限
14
+ lark-cli minutes +apply-permission --minute-token obcnxxxxxxxxxxxxxxxxxxxx --perm edit --as bot
15
+
16
+ # 预览 API 调用
17
+ lark-cli minutes +apply-permission --minute-token obcnxxxxxxxxxxxxxxxxxxxx --perm view --dry-run
18
+ ```
19
+
20
+ ## 参数
21
+
22
+ | 参数 | 必填 | 说明 |
23
+ |------|------|------|
24
+ | `--minute-token <token>` | 是 | 妙记 Token |
25
+ | `--perm <view\|edit>` | 是 | 申请的权限:`view`(查看)或 `edit`(编辑) |
26
+ | `--dry-run` | 否 | 预览 API 调用,不执行 |
27
+
28
+ ## user / bot 身份与权限语义
29
+
30
+ - **user**:以当前登录用户身份向妙记所有者申请。所有者在飞书客户端收到申请通知,同意后该用户获得对应权限。
31
+ - **bot**:以应用身份向妙记所有者申请,代表"这个应用"而不是某个用户。同意后应用(bot)获得对应权限,不会让触发申请的用户本人获得权限。
32
+ - 两种身份的申请互不代表:user 身份申请通过后 bot 仍然无权限,反之亦然。
33
+
34
+ ## 核心约束
35
+
36
+ ### 1. 必须继承触发无权限错误的来源身份
37
+
38
+ `+apply-permission` 不是通用的"求权限"按钮:它申请的是**当前 `--as` 对应身份**的权限。如果是 `--as bot` 读取妙记时遇到无权限,就要用 `--as bot` 申请;如果是 `--as user` 遇到无权限,就用 `--as user` 申请。不要在申请时切换成另一个身份——那申请的是另一个主体的权限,解决不了原来那次调用的问题。
39
+
40
+ ### 2. missing scope 与资源 ACL 是两类不同问题
41
+
42
+ - **missing scope**(当前身份完全没有 `minutes:permission:apply` / `minutes:minutes.basic:read` 等 scope):这不是"没有这条妙记的权限",`+apply-permission` 解决不了。`--as user` 用 `auth login --scope` 补权限;`--as bot` 去开发者后台开通,**禁止**对 bot 执行 `auth login`。完整规则见 [lark-shared](../../lark-shared/SKILL.md)。
43
+ - **资源 ACL**(scope 都有,但对**这一条具体妙记**没有查看/编辑权限):这才是 `+apply-permission` 要解决的场景。
44
+
45
+ 先看错误的 `error.subtype` 是 `missing_scope` 还是资源级别的权限拒绝,再决定要不要调用本命令。
46
+
47
+ ### 3. 只有用户明确要求才发起申请
48
+
49
+ 遇到无权限错误时,先把"当前身份对这条妙记没有权限"的事实告知用户;只有用户明确说"帮我申请查看/编辑权限"时才调用本命令。不要在检测到无权限后自动发起申请。
50
+
51
+ ### 4. 禁止通过切换身份绕过资源权限
52
+
53
+ 如果 `--as bot` 对某条妙记没有权限,不要改用 `--as user` 重新读取来"绕过"这个限制(除非用户明确同意切换身份继续任务)。申请权限和切换身份是两件不同的事:前者是解决 bot 自身权限不足,后者是换一个完全不同的主体去访问资源。
54
+
55
+ ## 所需权限
56
+
57
+ | 身份 | 所需权限 |
58
+ |------|---------|
59
+ | user / bot | `minutes:permission:apply` |
60
+
61
+ ## 输出结果
62
+
63
+ ```json
64
+ {
65
+ "minute_token": "obcnxxxxxxxxxxxxxxxxxxxx",
66
+ "perm": "view"
67
+ }
68
+ ```
69
+
70
+ | 字段 | 说明 |
71
+ |------|------|
72
+ | `minute_token` | 妙记 Token |
73
+ | `perm` | 申请的权限(`view` / `edit`) |
74
+
75
+ ## 如何获取 minute_token
76
+
77
+ | 来源 | 获取方式 |
78
+ |------|---------|
79
+ | 妙记 URL | 从 URL 末尾提取,如 `https://sample.feishu.cn/minutes/obcnxxxxxxxxxxxxxxxxxxxx` |
80
+ | 妙记搜索 | `lark-cli minutes +search --query "关键词"` |
81
+ | 会议产物查询 | `lark-cli vc +recording --meeting-ids <id>`,拿到 `minute_token`(沿用同一 `--as`) |
82
+
83
+ ## 常见错误与排查
84
+
85
+ | 错误现象 | 根本原因 | 解决方案 |
86
+ |---------|---------|---------|
87
+ | `--perm` 不是 `view`/`edit` | 参数值不合法 | 只能传 `view` 或 `edit` |
88
+ | `missing required scope(s)` | 当前身份缺少 `minutes:permission:apply` | 见上方「missing scope 与资源 ACL」 |
89
+ | 申请后仍无权限 | 所有者尚未同意 | 这是异步申请,需等待所有者处理;不代表命令执行失败 |
90
+
91
+ ## 参考
92
+
93
+ - [lark-minutes](../SKILL.md) — 妙记全部命令
94
+ - [minutes +detail](lark-minutes-detail.md) — 妙记内容与产物查询
95
+ - [lark-shared](../../lark-shared/SKILL.md) — 身份延续与权限恢复规则
@@ -1,7 +1,7 @@
1
1
 
2
2
  # minutes +detail
3
3
 
4
- 通过 `minute_token` 查询妙记详情,按需获取 AI 产物(总结/待办/章节/逐字稿/关键词)。只读。
4
+ 通过 `minute_token` 查询妙记详情,按需获取 AI 产物(总结/待办/章节/逐字稿/关键词)。只读,支持 `--as user` / `--as bot`。
5
5
 
6
6
  > `--summary` / `--todo` / `--chapter` / `--keyword` / `--transcript` 至少一个;不传任何产物 flag 时只返回基础信息(如 `title`),AI 产物字段都不会出现。一次性获取所有产物:`--summary --todo --chapter --keyword --transcript`。
7
7
 
@@ -46,17 +46,18 @@ lark-cli minutes +detail --minute-tokens obcxxx --transcript --overwrite --outpu
46
46
 
47
47
  ## 典型链路:从 minute_token 拿纪要文档 token
48
48
 
49
- 只持有 `minute_token`(如妙记 URL 入口),又想拿 AI 智能纪要 / 逐字稿文档时:
49
+ 只持有 `minute_token`(如妙记 URL 入口),又想拿 AI 智能纪要 / 逐字稿文档时;每一步都要沿用同一个 `--as`(完整规则见 [lark-shared](../../lark-shared/SKILL.md) 的「身份延续」):
50
50
 
51
51
  ```bash
52
52
  # 1. 取妙记关联的 note_id,没有关联会议纪要则为空
53
- lark-cli minutes +detail --minute-tokens <minute_token>
53
+ lark-cli minutes +detail --minute-tokens obcnxxxxxxxxxxxxxxxxxxxx --as bot
54
54
 
55
55
  # 2. 用 note_id 拿 note_doc_token / verbatim_doc_token / shared_doc_tokens
56
- lark-cli note +detail --note-id <note_id>
56
+ # 沿用第 1 步的身份,不要省略 --as
57
+ lark-cli note +detail --note-id <note_id> --as bot
57
58
 
58
- # 3. 读纪要 / 逐字稿正文
59
- lark-cli docs +fetch --api-version v2 --doc <note_doc_token> --doc-format markdown
59
+ # 3. 读纪要 / 逐字稿正文(同样沿用第 1 步的身份)
60
+ lark-cli docs +fetch --api-version v2 --doc <note_doc_token> --doc-format markdown --as bot
60
61
  ```
61
62
 
62
63
  > `minute_token` 不要直接传给 `note +detail`:必须先用本命令拿到 `note_id` 再调用 `note +detail`。
@@ -2,10 +2,12 @@
2
2
  # minutes +download
3
3
 
4
4
 
5
- 下载妙记的音视频媒体文件到本地,或获取有效期 1 天的下载链接。只读操作。
5
+ 下载妙记的音视频媒体文件到本地,或获取有效期 1 天的下载链接。只读操作,支持 `--as user` / `--as bot`。
6
6
 
7
7
  本 skill 对应 shortcut:`lark-cli minutes +download`。
8
8
 
9
+ `minute_token` 是在某个身份下解析出来的(如 `vc +recording --as bot`):调用本命令时必须显式沿用同一个 `--as`,不要省略让身份被默认值悄悄换掉(完整规则见 [lark-shared](../../lark-shared/SKILL.md) 的「身份延续」)。
10
+
9
11
  ## 命令
10
12
 
11
13
  ```bash
@@ -119,7 +121,7 @@ API 限流 5 次/秒,批量下载时需注意控制频率。
119
121
  | 妙记尚未准备好 | 2091003 | 转写未完成 | 等待转写完成后重试 |
120
122
  | 资源已删除 | 2091004 | 妙记已被删除 | 确认妙记文件仍然存在 |
121
123
  | 权限不足 | 2091005 | 无阅读权限 | 检查是否有该妙记的访问权限 |
122
- | `missing required scope(s)` | — | 应用缺少权限 | 运行 `auth login --scope "minutes:minutes.media:export"` |
124
+ | `missing required scope(s)` | — | 当前身份缺少 scope | `--as user`:运行 `auth login --scope "minutes:minutes.media:export"`;`--as bot`:使用错误中的 `console_url` 去开发者后台开通,**禁止**对 bot 执行 `auth login`(见 [lark-shared](../../lark-shared/SKILL.md) 的权限恢复表) |
123
125
 
124
126
  ## 提示
125
127
 
@@ -1,7 +1,7 @@
1
1
  # minutes +search
2
2
 
3
3
 
4
- 搜索妙记列表,支持关键词、所有者、参与者以及时间范围等多条件过滤。所有者与参与者都支持传入多个 open\_id,也支持传入 `me` 表示当前用户。只读操作,不修改任何妙记数据。
4
+ 搜索妙记列表,支持关键词、所有者、参与者以及时间范围等多条件过滤。支持 user 身份和 bot / 应用身份;所有者与参与者都支持传入多个 open\_id,user 身份下也支持传入 `me` 表示当前用户。只读操作,不修改任何妙记数据。
5
5
 
6
6
  本 skill 对应 shortcut:`lark-cli minutes +search`(调用 `POST /open-apis/minutes/v1/minutes/search`)。
7
7
 
@@ -81,14 +81,14 @@ lark-cli minutes +search --query "预算复盘" --format json
81
81
 
82
82
  所有参数均可选,但必须至少提供一个过滤条件:`--query`、`--owner-ids`、`--participant-ids`、`--start` 或 `--end`。
83
83
 
84
- ### 2. 仅支持 user 身份
84
+ ### 2. 支持 user 和 bot 身份
85
85
 
86
- 该接口仅支持 `user` 身份,使用前需完成 `lark-cli auth login` 并具备 `minutes:minutes.search:read` 权限。
86
+ 该接口支持 `--as user` 和 `--as bot`。user 身份需要完成 `lark-cli auth login` 并具备 `minutes:minutes.search:read` 权限;bot 身份使用应用的 tenant access token,需要确认当前应用已开通 `minutes:minutes.search:read` scope,且运行环境能获取有效的 TAT。
87
87
 
88
88
  ### 3. `me` 表示当前用户
89
89
 
90
- 在 `--owner-ids` 和 `--participant-ids` 中可使用 `me`,表示当前登录用户。该值会在本地解析为当前用户的 `open_id`,无需手动先查询自己的用户 ID。
91
- 若当前环境尚未完成用户登录,或 CLI 无法解析出当前用户的 `open_id`,则应先执行 `lark-cli auth login`,再重新执行搜索。
90
+ 在 `--owner-ids` 和 `--participant-ids` 中可使用 `me`,表示当前登录用户。该值会在本地解析为当前用户的 `open_id`,无需手动先查询自己的用户 ID。`me` 只适合 user 身份;bot 身份没有“当前用户”,请直接传 `ou_` open_id。
91
+ 若当前环境尚未完成用户登录,或 CLI 无法解析出当前用户的 `open_id`,则应先执行 `lark-cli auth login`,再重新执行搜索。该恢复方式只适用于 user 身份和 `me` 解析;bot 身份应检查 tenant access token 与应用 scope,不应通过 `auth login` 修复。
92
92
 
93
93
  ### 4. 自然语言中的“参与的妙记”默认按并集理解
94
94
 
@@ -182,7 +182,7 @@ lark-cli minutes +detail --minute-tokens <minute_token> --summary
182
182
  | 时间参数校验失败 | `--start` 或 `--end` 格式不合法 | 改用 ISO 8601 或 `YYYY-MM-DD` |
183
183
  | `owner-ids` 校验失败 | 传入的不是 open\_id,且也不是 `me`;或传了 `me` 但当前用户 open\_id 不可解析 | 改为 `ou_` 开头的用户 ID,或先完成 `auth login` 后再传 `me` |
184
184
  | `participant-ids` 校验失败 | 传入的不是 open\_id,且也不是 `me`;或传了 `me` 但当前用户 open\_id 不可解析 | 改为 `ou_` 开头的用户 ID,或先完成 `auth login` 后再传 `me` |
185
- | 权限不足 | 未授权 `minutes:minutes.search:read` | 使用 `auth login` 完成授权 |
185
+ | 权限不足 | 未授权 `minutes:minutes.search:read` | user 身份使用 `auth login` 完成用户授权;bot 身份检查 tenant access token 和应用 scope |
186
186
 
187
187
  ## 提示
188
188
 
@@ -199,4 +199,3 @@ lark-cli minutes +detail --minute-tokens <minute_token> --summary
199
199
  - [lark-minutes](../SKILL.md) -- 妙记相关命令
200
200
  - [lark-minutes-detail](lark-minutes-detail.md) -- 基于 `minute_token` 获取逐字稿、总结、待办、章节等产物
201
201
  - [lark-vc](../../lark-vc/SKILL.md) -- 视频会议全部命令
202
-
@@ -10,7 +10,9 @@ metadata:
10
10
 
11
11
  # note (v1)
12
12
 
13
- 身份:仅使用 `--as user`。使用前阅读 [`../lark-shared/SKILL.md`](../lark-shared/SKILL.md)。
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),使用前必读。
14
+
15
+ `+detail` 返回的 `note_doc_token` / `verbatim_doc_token` / `shared_doc_tokens` 交给 [lark-doc](../lark-doc/SKILL.md) 读正文时,仍要显式带上同一个 `--as`。lark-doc 对普通文档推荐 `--as user`,**不覆盖这些纪要文档 token 的来源身份**。
14
16
 
15
17
  **CRITICAL — 开始前 MUST 先用 Read 工具读取 [`../lark-vc/references/vc-domain-boundaries.md`](../lark-vc/references/vc-domain-boundaries.md)**,不读将导致命令使用、会议产物决策、领域边界职责判断错误:
16
18
  > 1. 了解日历 & VC、会议产物 & 文档的关联关系和职责划分
@@ -36,13 +38,15 @@ Note 域只接受显式 `note_id`:用户直接提供,或 `docs +fetch` 返
36
38
 
37
39
  | `note +detail` 结果 | 用户要逐字稿 / 原始记录时 |
38
40
  |------|---------------|
39
- | `normal` + `verbatim_doc_token` 非空 | `docs +fetch --doc <verbatim_doc_token>` |
41
+ | `normal` + `verbatim_doc_token` 非空 | `docs +fetch --doc <verbatim_doc_token>`(沿用 `+detail` 用的身份) |
40
42
  | `unknown` + `verbatim_doc_token` 非空 | 先按独立文档处理;不要猜成 unified |
41
43
  | `unknown` + 无逐字稿 token | 停止重试并说明无法确定逐字稿入口 |
42
- | `unified` | `note +transcript --note-id <note_id>` |
44
+ | `unified` | `note +transcript --note-id <note_id>`(仅支持 `--as user`) |
43
45
 
44
46
  判别键是 `note_display_type`,不是 `verbatim_doc_token` 是否为空:unified 纪要也可能返回非空 `verbatim_doc_token`。
45
47
 
48
+ > **bot + unified 的边界**:`+transcript` 目前仅支持 `--as user`。如果 `+detail --as bot` 返回 `unified`,不要静默切到 `--as user` 继续——先停下来向用户说明"该纪要逐字稿只能以 user 身份读取",只有用户明确同意才切换身份重试。
49
+
46
50
  ## 关键字段
47
51
 
48
52
  - `note_id`:Note 域唯一入口。
@@ -83,12 +87,12 @@ Note 域只接受显式 `note_id`:用户直接提供,或 `docs +fetch` 返
83
87
  3. 获取到文档 Token 后,可使用 `docs +fetch` 读取文档内容,或使用 `drive metas batch_query` 获取文档元信息。
84
88
 
85
89
  ```bash
86
- # 1. 从会议获取 note_id
87
- lark-cli vc +detail --meeting-ids <meeting_id>
90
+ # 1. 从会议获取 note_id(这里以 bot 身份为例)
91
+ lark-cli vc +detail --meeting-ids <meeting_id> --as bot
88
92
 
89
- # 2. 用 note_id 拿文档 Token
90
- lark-cli note +detail --note-id <note_id>
93
+ # 2. 用 note_id 拿文档 Token;沿用第 1 步的身份,不要省略 --as
94
+ lark-cli note +detail --note-id <note_id> --as bot
91
95
 
92
- # 3. 读取纪要文档内容
93
- lark-cli docs +fetch --doc <note_doc_token> --doc-format markdown
96
+ # 3. 读取纪要文档内容;同样沿用第 1 步的身份
97
+ lark-cli docs +fetch --doc <note_doc_token> --doc-format markdown --as bot
94
98
  ```
@@ -1,11 +1,12 @@
1
1
  # note +detail
2
2
 
3
- 通过 `note_id` 查询会议纪要详情,获取下挂文档 Token(AI 智能纪要、逐字稿、会中共享文档)。只读,仅支持 `--as user`。
3
+ 通过 `note_id` 查询会议纪要详情,获取下挂文档 Token(AI 智能纪要、逐字稿、会中共享文档)。只读,支持 `--as user` / `--as bot`。bot 身份下能否读到数据取决于应用对纪要主文档是否有 view 权限。
4
4
 
5
5
  ## 命令
6
6
 
7
7
  ```bash
8
8
  lark-cli note +detail --note-id <note_id>
9
+ lark-cli note +detail --note-id <note_id> --as bot
9
10
  ```
10
11
 
11
12
  ## `note_id` 来源
@@ -21,6 +22,8 @@ lark-cli note +detail --note-id <note_id>
21
22
  | `note_doc_token` | 读纪要正文 / 总结 / 待办 / 章节:`docs +fetch --doc <note_doc_token>` |
22
23
  | `note_display_type=normal` + `verbatim_doc_token` | 读逐字稿:`docs +fetch --doc <verbatim_doc_token>` |
23
24
  | `note_display_type=unknown` + `verbatim_doc_token` | 先按普通独立逐字稿文档读取;不要猜成 unified |
24
- | `note_display_type=unified` | 读逐字稿 / 原始记录:转 [`note +transcript`](lark-note-transcript.md) |
25
+ | `note_display_type=unified` | 读逐字稿 / 原始记录:转 [`note +transcript`](lark-note-transcript.md)(仅支持 `--as user`) |
25
26
 
26
27
  判别键是 `note_display_type`。即使 unified 纪要返回了非空 `verbatim_doc_token`,逐字稿仍按 unified 路由。
28
+
29
+ > **bot + unified 的边界**:如果本命令用 `--as bot` 拿到 `note_display_type=unified`,`note +transcript` 只支持 `--as user`,不能直接沿用 bot 身份。停下来向用户说明这个边界,只有用户明确同意才切到 `--as user` 继续,不要静默切换身份。
@@ -2,6 +2,8 @@
2
2
 
3
3
  只在 `note +detail` 已确认 `note_display_type=unified` 时使用。普通纪要逐字稿是独立 Docx 文档,应回到 [lark-doc](../../lark-doc/SKILL.md) 读取 `verbatim_doc_token`。
4
4
 
5
+ 只支持 `--as user`,不支持 `--as bot`。如果 `note +detail --as bot` 返回 `unified`,不要在这里静默省略 `--as` 或改用 user 身份继续——先停下来向用户说明"该纪要逐字稿只能以 user 身份读取",只有用户明确同意才切换身份重试。
6
+
5
7
  ```bash
6
8
  lark-cli note +transcript --note-id NOTE_ID
7
9
  ```
@@ -64,6 +64,32 @@ LARKSUITE_CLI_NO_UPDATE_NOTIFIER=1 LARKSUITE_CLI_NO_SKILLS_NOTIFIER=1 lark-cli a
64
64
  - **User 权限**:后台开通 scope + 用户通过 `auth login` 授权,两层都要满足
65
65
 
66
66
 
67
+ ### 身份延续(跨命令工作流)
68
+
69
+ 身份是**整个工作流的状态**,不是单条命令的局部参数。CLI 不会在进程之间继承"上一步用的身份"——省略 `--as` 不代表"保持当前身份",而是把身份选择交回下面这条优先级链:
70
+
71
+ ```text
72
+ 显式 --as > profile default-as > credential auto-detect
73
+ ```
74
+
75
+ 因此,只要用户显式选择了身份,或某个 ID / Token 是通过某个身份取得的(例如 `vc +detail --as bot` 返回的 `note_id`),**后续每一条消费该 ID/Token 的命令都必须显式带上相同的 `--as`**,跨 skill 传递也不例外:
76
+
77
+ - 禁止依赖 profile 默认身份让后续命令"自动"沿用同一身份。
78
+ - 禁止仅仅因为遇到权限错误就切换身份去绕过它——先如实报告,只有用户明确同意才切换。
79
+ - 下游命令根本不支持来源身份时(如 `--as bot` 拿到的 `note_id` 指向 `note_display_type=unified`,而 `note +transcript` 仅支持 `--as user`),停止并向用户说明这个边界,不要静默省略 `--as` 把身份交给默认值。
80
+ - 命令支持的精确身份以 `<command> --help` / `schema` 为准;各 skill 的身份小节只标注会影响路由决策的例外,不重复维护完整矩阵。
81
+
82
+ ```bash
83
+ # GOOD — note_id 来自 bot 链路,下一步显式沿用 bot
84
+ lark-cli vc +detail --meeting-ids <meeting_id> --as bot
85
+ lark-cli note +detail --note-id <note_id> --as bot
86
+ lark-cli docs +fetch --doc <note_doc_token> --as bot
87
+
88
+ # BAD — 省略 --as,身份可能被 profile 默认值悄悄换成 user
89
+ lark-cli vc +detail --meeting-ids <meeting_id> --as bot
90
+ lark-cli note +detail --note-id <note_id>
91
+ ```
92
+
67
93
  ### 权限不足处理
68
94
 
69
95
  遇到权限相关错误时,**根据当前身份类型采取不同解决方案**。
@@ -73,6 +99,16 @@ LARKSUITE_CLI_NO_UPDATE_NOTIFIER=1 LARKSUITE_CLI_NO_SKILLS_NOTIFIER=1 lark-cli a
73
99
  - `console_url`:飞书开发者后台的权限配置链接
74
100
  - `hint`:建议的修复命令
75
101
 
102
+ **missing_scope 与资源 ACL(无权访问某具体资源)是两类不同问题**,恢复方式也不同:
103
+
104
+ | 失败类型 | user | bot |
105
+ |---------|---------|---------|
106
+ | missing scope(应用/用户完全没有这个权限) | `auth login --scope ...` | 使用错误中的 `console_url` 去开发者后台开通,**禁止** `auth login` |
107
+ | 资源 ACL(有 scope,但对这一条具体资源没有访问权限) | 请求资源所有者给当前用户授权 | 请求资源所有者给当前应用/bot 授权 |
108
+ | 资源在当前身份下不可见 | 保持当前身份,如实报告不可见,不要切换身份重试 | 保持当前身份,如实报告不可见,不要切换身份重试 |
109
+
110
+ 任何权限恢复完成后,都必须用**触发错误时的原身份**重试,不要在恢复过程中换成另一个身份。
111
+
76
112
  #### Bot 身份(`--as bot`)
77
113
 
78
114
  将错误中的 `console_url` 原样提供给用户,引导去后台开通 scope。**禁止**对 bot 执行 `auth login`。
@@ -80,8 +116,8 @@ LARKSUITE_CLI_NO_UPDATE_NOTIFIER=1 LARKSUITE_CLI_NO_SKILLS_NOTIFIER=1 lark-cli a
80
116
  #### User 身份(`--as user`)
81
117
 
82
118
  ```bash
83
- lark-cli auth login --domain <domain> # 按业务域授权
84
- lark-cli auth login --scope "<missing_scope>" # 按具体 scope 授权(推荐,符合最小权限原则)
119
+ lark-cli auth login --domain <domain> --no-wait --json # 按业务域发起授权
120
+ lark-cli auth login --scope "<missing_scope>" --no-wait --json # 按具体 scope 发起授权(推荐,符合最小权限原则)
85
121
  ```
86
122
 
87
123
  **规则**:auth login 必须指定范围(`--domain` 或 `--scope`)。多次 login 的 scope 会累积(增量授权)。
@@ -124,7 +160,7 @@ lark-cli auth login --device-code <device_code>
124
160
 
125
161
  - **你必须亲自执行 `--device-code` 命令**,不要指示用户自行执行
126
162
  - **不要在同一轮中展示 URL 后立刻执行 `--device-code`**,这会导致用户看不到 URL
127
- - **禁止缓存 `verification_url` 或 `device_code`**:每次需要授权时,必须重新执行 `lark-cli auth login --no-wait --json` 生成新的链接。不要将授权链接和 device code 存入上下文供后续复用
163
+ - **禁止缓存 `verification_url` 或 `device_code`**:每次需要重新发起授权时,必须沿用所需的 `--scope`、`--domain` 或 `--recommend` 选择以及任何 `--exclude` 值,并附加 `--no-wait --json` 生成新的链接。不要复用已过期的授权链接或 device code
128
164
 
129
165
  ## 更新检查
130
166