@lark-apaas/coding-miaoda-sandbox-skills 0.1.0-dev.28c4f05 → 0.1.0-dev.4e64c13

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 (140) hide show
  1. package/miaoda/animation-skill/SKILL.md +348 -0
  2. package/miaoda/authz-cli/SKILL.md +1 -0
  3. package/miaoda/charts-skill/SKILL.md +264 -0
  4. package/miaoda/creative-to-fullstack/SKILL.md +157 -0
  5. package/miaoda/creative-to-fullstack/references/artifact-signals.md +46 -0
  6. package/miaoda/creative-to-fullstack/references/ui-to-function.md +134 -0
  7. package/miaoda/data-analysis/SKILL.md +151 -0
  8. package/miaoda/data-analysis/references/json-output-specification.md +277 -0
  9. package/miaoda/data-analysis/references/post-analysis-guide.md +77 -0
  10. package/miaoda/data-analysis/references/python-analysis-reference.md +272 -0
  11. package/miaoda/data-analysis/references/tmp-file-management-guide.md +100 -0
  12. package/miaoda/debug-investigation/SKILL.md +21 -18
  13. package/miaoda/extract-json-schema/SKILL.md +147 -0
  14. package/miaoda/lark-apps/SKILL.md +37 -0
  15. package/miaoda/lark-apps/references/openapi-key.md +80 -0
  16. package/miaoda/lark-apps-authz/SKILL.md +292 -0
  17. package/miaoda/lark-apps-authz/references/permission-points.md +39 -0
  18. package/miaoda/lark-apps-authz/references/role.md +122 -0
  19. package/miaoda/lark-apps-db/SKILL.md +226 -0
  20. package/miaoda/lark-apps-db/references/full-reference.md +302 -0
  21. package/miaoda/lark-apps-file/SKILL.md +216 -0
  22. package/miaoda/lark-apps-ops/SKILL.md +62 -0
  23. package/miaoda/lark-apps-ops/references/lark-apps-access-scope-get.md +30 -0
  24. package/miaoda/lark-apps-ops/references/lark-apps-access-scope-set.md +40 -0
  25. package/miaoda/lark-apps-ops/references/lark-apps-cache.md +62 -0
  26. package/miaoda/lark-apps-ops/references/lark-apps-env.md +46 -0
  27. package/miaoda/lark-apps-ops/references/lark-apps-local-dev.md +25 -0
  28. package/miaoda/lark-apps-ops/references/lark-apps-member.md +93 -0
  29. package/miaoda/lark-apps-ops/references/lark-apps-observability.md +46 -0
  30. package/miaoda/lark-apps-ops/references/lark-apps-plugin-install.md +36 -0
  31. package/miaoda/lark-apps-ops/references/lark-apps-plugin-list.md +23 -0
  32. package/miaoda/lark-apps-ops/references/lark-apps-plugin-uninstall.md +25 -0
  33. package/miaoda/lark-apps-ops/references/lark-apps-release-create.md +30 -0
  34. package/miaoda/lark-apps-ops/references/lark-apps-release-get.md +28 -0
  35. package/miaoda/lark-apps-ops/references/lark-apps-release-list.md +31 -0
  36. package/miaoda/lark-apps-ops/references/lark-apps-update.md +30 -0
  37. package/miaoda/lark-apps-ops/references/openapi-key.md +80 -0
  38. package/miaoda/miaoda-file/SKILL.md +1 -0
  39. package/miaoda/miaoda-sql/SKILL.md +6 -2
  40. package/miaoda/performance-review/SKILL.md +144 -0
  41. package/miaoda/performance-review/references/business-analyzer.md +139 -0
  42. package/miaoda/performance-review/references/examples.md +107 -0
  43. package/miaoda/reviewer-usage/SKILL.md +111 -0
  44. package/miaoda/testing-guide/SKILL.md +218 -0
  45. package/miaoda-design/lark-apps-comment/SKILL.md +110 -0
  46. package/miaoda-design/lark-apps-ops/SKILL.md +45 -0
  47. package/miaoda-design/lark-apps-ops/references/lark-apps-release-create.md +51 -0
  48. package/miaoda-design/lark-apps-ops/references/lark-apps-release-get.md +28 -0
  49. package/miaoda-design/lark-apps-ops/references/lark-apps-release-list.md +31 -0
  50. package/miaoda-design/lark-apps-ops/references/lark-apps-update.md +33 -0
  51. package/{shared → miaoda-modern}/lark-apps/SKILL.md +5 -5
  52. package/miaoda-modern/lark-apps/references/openapi-key.md +80 -0
  53. package/miaoda-modern/lark-apps-ops/SKILL.md +62 -0
  54. package/miaoda-modern/lark-apps-ops/references/lark-apps-access-scope-get.md +30 -0
  55. package/miaoda-modern/lark-apps-ops/references/lark-apps-access-scope-set.md +40 -0
  56. package/miaoda-modern/lark-apps-ops/references/lark-apps-cache.md +62 -0
  57. package/miaoda-modern/lark-apps-ops/references/lark-apps-env.md +46 -0
  58. package/miaoda-modern/lark-apps-ops/references/lark-apps-local-dev.md +25 -0
  59. package/miaoda-modern/lark-apps-ops/references/lark-apps-member.md +93 -0
  60. package/miaoda-modern/lark-apps-ops/references/lark-apps-observability.md +46 -0
  61. package/miaoda-modern/lark-apps-ops/references/lark-apps-plugin-install.md +36 -0
  62. package/miaoda-modern/lark-apps-ops/references/lark-apps-plugin-list.md +23 -0
  63. package/miaoda-modern/lark-apps-ops/references/lark-apps-plugin-uninstall.md +25 -0
  64. package/miaoda-modern/lark-apps-ops/references/lark-apps-release-create.md +30 -0
  65. package/miaoda-modern/lark-apps-ops/references/lark-apps-release-get.md +28 -0
  66. package/miaoda-modern/lark-apps-ops/references/lark-apps-release-list.md +31 -0
  67. package/miaoda-modern/lark-apps-ops/references/lark-apps-update.md +30 -0
  68. package/{shared/lark-apps → miaoda-modern/lark-apps-ops}/references/openapi-key.md +3 -3
  69. package/miaoda-modern/memory/SKILL.md +86 -0
  70. package/package.json +1 -1
  71. package/shared/lark-cli/SKILL.md +221 -0
  72. package/shared/lark-cli/lark-base/README.md +56 -0
  73. package/shared/lark-cli/lark-base/references/lark-base-commands.md +108 -0
  74. package/shared/lark-cli/lark-calendar/README.md +158 -0
  75. package/shared/lark-cli/lark-calendar/references/lark-calendar-meeting.md +30 -0
  76. package/shared/lark-cli/lark-calendar/references/lark-calendar-room-find.md +108 -0
  77. package/shared/lark-cli/lark-calendar/references/lark-calendar-suggestion.md +120 -0
  78. package/shared/lark-cli/lark-contact/README.md +35 -0
  79. package/shared/lark-cli/lark-contact/references/lark-contact-get-user.md +13 -0
  80. package/shared/lark-cli/lark-contact/references/lark-contact-search-user.md +121 -0
  81. package/shared/lark-cli/lark-doc/README.md +67 -0
  82. package/shared/lark-cli/lark-doc/references/lark-doc-fetch.md +138 -0
  83. package/shared/lark-cli/lark-doc/references/lark-doc-history.md +61 -0
  84. package/shared/lark-cli/lark-drive/README.md +129 -0
  85. package/shared/lark-cli/lark-drive/references/lark-drive-files-list.md +183 -0
  86. package/shared/lark-cli/lark-im/README.md +84 -0
  87. package/shared/lark-cli/lark-im/references/lark-im-chat-list.md +140 -0
  88. package/shared/lark-cli/lark-im/references/lark-im-chat-members-list.md +84 -0
  89. package/shared/lark-cli/lark-im/references/lark-im-chat-search.md +135 -0
  90. package/shared/lark-cli/lark-im/references/lark-im-reactions.md +232 -0
  91. package/shared/lark-cli/lark-minutes/README.md +51 -0
  92. package/shared/lark-cli/lark-minutes/references/lark-minutes-download.md +130 -0
  93. package/shared/lark-cli/lark-sheets/README.md +173 -0
  94. package/shared/lark-cli/lark-sheets/references/lark-sheets-changeset.md +105 -0
  95. package/shared/lark-cli/lark-sheets/references/lark-sheets-chart.md +45 -0
  96. package/shared/lark-cli/lark-sheets/references/lark-sheets-conditional-format.md +42 -0
  97. package/shared/lark-cli/lark-sheets/references/lark-sheets-filter-view.md +49 -0
  98. package/shared/lark-cli/lark-sheets/references/lark-sheets-filter.md +42 -0
  99. package/shared/lark-cli/lark-sheets/references/lark-sheets-float-image.md +43 -0
  100. package/shared/lark-cli/lark-sheets/references/lark-sheets-formula-verify.md +64 -0
  101. package/shared/lark-cli/lark-sheets/references/lark-sheets-history.md +70 -0
  102. package/shared/lark-cli/lark-sheets/references/lark-sheets-pivot-table.md +44 -0
  103. package/shared/lark-cli/lark-sheets/references/lark-sheets-read-data.md +216 -0
  104. package/shared/lark-cli/lark-sheets/references/lark-sheets-search-replace.md +67 -0
  105. package/shared/lark-cli/lark-sheets/references/lark-sheets-sheet-structure.md +52 -0
  106. package/shared/lark-cli/lark-sheets/references/lark-sheets-sparkline.md +47 -0
  107. package/shared/lark-cli/lark-sheets/references/lark-sheets-workbook.md +69 -0
  108. package/shared/lark-cli/lark-sheets/scripts/sheets_df.py +32 -0
  109. package/shared/lark-cli/lark-slides/README.md +86 -0
  110. package/shared/lark-cli/lark-slides/references/lark-slides-history.md +105 -0
  111. package/shared/lark-cli/lark-slides/references/lark-slides-xml-presentation-slide-get.md +108 -0
  112. package/shared/lark-cli/lark-slides/references/lark-slides-xml-presentations-get.md +77 -0
  113. package/shared/lark-cli/lark-task/README.md +93 -0
  114. package/shared/lark-cli/lark-task/references/lark-task-get-my-tasks.md +57 -0
  115. package/shared/lark-cli/lark-task/references/lark-task-get-related-tasks.md +49 -0
  116. package/shared/lark-cli/lark-task/references/lark-task-search.md +36 -0
  117. package/shared/lark-cli/lark-task/references/lark-task-tasklist-search.md +35 -0
  118. package/shared/lark-cli/lark-vc/README.md +40 -0
  119. package/shared/lark-cli/lark-vc/references/lark-vc-recording.md +31 -0
  120. package/shared/lark-cli/lark-whiteboard/README.md +35 -0
  121. package/shared/lark-cli/lark-whiteboard/references/lark-whiteboard-export.md +59 -0
  122. package/shared/lark-cli/lark-wiki/README.md +50 -0
  123. package/shared/lark-cli/lark-wiki/references/lark-wiki-node-get.md +59 -0
  124. package/shared/lark-cli/lark-wiki/references/lark-wiki-node-list.md +95 -0
  125. package/shared/lark-cli/lark-wiki/references/lark-wiki-space-list.md +68 -0
  126. package/miaoda-design/attachment/SKILL.md +0 -58
  127. /package/{shared → miaoda}/memory/SKILL.md +0 -0
  128. /package/{shared → miaoda-modern}/animation-skill/SKILL.md +0 -0
  129. /package/{shared → miaoda-modern}/charts-skill/SKILL.md +0 -0
  130. /package/{shared → miaoda-modern}/data-analysis/SKILL.md +0 -0
  131. /package/{shared → miaoda-modern}/data-analysis/references/json-output-specification.md +0 -0
  132. /package/{shared → miaoda-modern}/data-analysis/references/post-analysis-guide.md +0 -0
  133. /package/{shared → miaoda-modern}/data-analysis/references/python-analysis-reference.md +0 -0
  134. /package/{shared → miaoda-modern}/data-analysis/references/tmp-file-management-guide.md +0 -0
  135. /package/{shared → miaoda-modern}/extract-json-schema/SKILL.md +0 -0
  136. /package/{shared → miaoda-modern}/performance-review/SKILL.md +0 -0
  137. /package/{shared → miaoda-modern}/performance-review/references/business-analyzer.md +0 -0
  138. /package/{shared → miaoda-modern}/performance-review/references/examples.md +0 -0
  139. /package/{shared → miaoda-modern}/reviewer-usage/SKILL.md +0 -0
  140. /package/{shared → miaoda-modern}/testing-guide/SKILL.md +0 -0
@@ -0,0 +1,121 @@
1
+ # +search-user
2
+
3
+ ## 适用范围
4
+
5
+ - ✅ 已知姓名 / 邮箱 / 「聊过的人」想找出 open_id
6
+ - ✅ 已知一组 open_id 想批量校验或回填字段(`--user-ids`,最多 100,支持 `me`)
7
+ - ✅ 按聊天关系 / 在职状态 / 租户边界 / 企业邮箱等维度筛选员工
8
+ - ❌ 已知 open_id 想发消息 → 直接走 `lark-im`,不经过本命令
9
+
10
+ ## 关键 flag
11
+
12
+ `--query` / `--queries` / `--user-ids` / bool filter 至少传一个。bool filter 显式传 `=false` 会报错——不传等于不过滤。
13
+
14
+ | Flag | 作用 |
15
+ |---|---|
16
+ | `--query <text>` | 关键词(姓名 / 邮箱 / 手机号),≤ 50 rune |
17
+ | `--queries <csv>` | 多个关键词并行搜,**最多 20 条**;与 `--query` / `--user-ids` 互斥;输出新 shape(见下) |
18
+ | `--user-ids <csv>` | open_id 列表,≤ 100;支持 `me` 表示自己;与 `--query` 同传时把搜索范围限定在该集合 |
19
+ | `--has-chatted` | 仅搜聊过天的 |
20
+ | `--has-enterprise-email` | 仅搜有企业邮箱的 |
21
+ | `--exclude-external-users` | 仅搜同租户(排除外部联系人) |
22
+ | `--left-organization` | 仅搜已离职的 |
23
+ | `--lang <locale>` | 覆盖 `localized_name` 的语种(如 `zh_cn` / `en_us` / `ja_jp`) |
24
+ | `--page-size <n>` | 单页大小 1-30,默认 20 |
25
+
26
+ ## 常用例子
27
+
28
+ ```bash
29
+ # 按姓名搜,看候选确认是哪个张三
30
+ lark-cli contact +search-user --query "张三" --has-chatted
31
+
32
+ # 按完整邮箱搜(命中通常唯一,适合作后续命令的输入)
33
+ lark-cli contact +search-user --query "alice@example.com"
34
+
35
+ # 查看自己
36
+ lark-cli contact +search-user --user-ids me
37
+
38
+ # 批量回填:已知一组 open_id,取姓名 / 邮箱 / 部门
39
+ lark-cli contact +search-user --user-ids "ou_a,ou_b,ou_c" --format json
40
+
41
+ # 多 filter 组合:同租户的、有企业邮箱的「王」姓员工
42
+ lark-cli contact +search-user --query "王" --exclude-external-users --has-enterprise-email
43
+
44
+ # filter-only 枚举:列出所有"聊过天的离职同事"(无关键词)
45
+ lark-cli contact +search-user --has-chatted --left-organization
46
+ ```
47
+
48
+ ## 批量并行查询 (fanout)
49
+
50
+ 一次查多个名字:
51
+
52
+ ```bash
53
+ lark-cli contact +search-user --queries "Alice,Bob,张三"
54
+ ```
55
+
56
+ - 每行 user 带 `matched_query`,标识来自哪个 query
57
+ - `queries[]` 每个输入一条 `{query, error?, has_more}`,失败的有 `error`
58
+ - 部分失败不影响其它 query;全部失败才 exit 非 0
59
+
60
+ ```bash
61
+ # bool filter 对每个 query 都生效
62
+ lark-cli contact +search-user --queries "Alice,Bob" --has-chatted
63
+
64
+ # 与 --query / --user-ids 互斥
65
+ lark-cli contact +search-user --queries "a" --query "b" # ❌ exit 2
66
+ ```
67
+
68
+ 约束:
69
+ - 最多 20 条; 每条 ≤ 50 字符
70
+ - 重复条目静默去重;全空 csv (`,,,`) 报错
71
+
72
+ ## 同名 disambiguation
73
+
74
+ 搜常见姓名常返回多条同名结果。后续操作若有副作用(发消息、邀请会议等),把候选列给用户挑;**不要擅自选**。
75
+
76
+ 筛选信号(可信度从高到低):`chat_recency_hint`(近期联系过) > `enterprise_email` 前缀 > `department` 关键词。`localized_name` 同名时无区分作用。
77
+
78
+ ```bash
79
+ # 用 jq 按部门精筛
80
+ lark-cli contact +search-user --query "张三" \
81
+ --jq '.data.users[] | select(.department | contains("<部门关键词>"))'
82
+ ```
83
+
84
+ ## 注意事项
85
+
86
+ - **不会自动翻页**。`has_more=true` 表示需要 refine query。
87
+ - **`--lang` 只影响输出展示名**,不影响匹配字段。
88
+ - **`--query` 与 `--user-ids` 同时设**:`--user-ids` 限定搜索范围,`--query` 在该集合内匹配。
89
+
90
+ ## 输出字段 contract
91
+
92
+ 跨租户用户(`is_cross_tenant=true`)的业务字段可能为空字符串,需做空值兜底。
93
+
94
+ | 字段 | 类型 | 说明 | 跨租户 |
95
+ |---|---|---|---|
96
+ | `open_id` | string | 稳定标识,后续命令的输入 | 始终非空 |
97
+ | `localized_name` | string | 按 `--lang` / brand 选出的展示名 | 始终非空(兜底为 open_id) |
98
+ | `email` | string | 个人邮箱 | 可能为空 |
99
+ | `enterprise_email` | string | 企业邮箱 | 可能为空 |
100
+ | `is_activated` | bool | 是否已激活飞书账号(未激活也可投递消息,但用户可能看不到) | 可能 false |
101
+ | `is_cross_tenant` | bool | 是否跨租户用户(同公司=false,外部联系人=true) | — |
102
+ | `p2p_chat_id` | string | 与当前用户的 P2P 会话 ID(`oc_...`);空表示从未私聊过。可作为接受 `--chat-id` 的 IM 命令的输入 | 可能为空 |
103
+ | `has_chatted` | bool | `p2p_chat_id != ""` 的派生字段 | — |
104
+ | `department` | string | 部门路径,服务端可能用 `-` 拼层级,层级数不固定。**按可子串匹配的字符串处理** | 可能为空 |
105
+ | `signature` | string (optional) | 用户个性签名;空时字段不出现 | 可能不出现 |
106
+ | `chat_recency_hint` | string | 最近联系的提示文案,仅供展示 | 可能为空 |
107
+ | `match_segments` | string[] | 关键词命中的字符串片段,用于高亮展示;无命中则为空数组 | — |
108
+
109
+ ### `--queries` 模式额外字段
110
+
111
+ `data.users[]` 每条多 `matched_query` (string),指明本行来自哪个 query。
112
+
113
+ `data.queries[]` 按输入顺序、dedup 后每个 query 一条:
114
+
115
+ | 字段 | 类型 | 说明 |
116
+ |---|---|---|
117
+ | `query` | string | 该输入 |
118
+ | `error` | string (optional) | 失败原因;成功时不出现 |
119
+ | `has_more` | bool | 该 query 还有更多结果 |
120
+
121
+ fanout 模式无顶层 `data.has_more`。
@@ -0,0 +1,67 @@
1
+ # docs
2
+
3
+ ## 能力范围(本沙箱仅开放以下只读命令)
4
+
5
+ 本沙箱环境下,docs 域仅提供三个只读的快捷命令,文档读取默认使用 `--as user`:
6
+
7
+ ```bash
8
+ # 读取文档内容(默认 XML,simple;若 URL 存在 #share-... 锚点,优先按锚点局部读取,不要全文拉取)
9
+ lark-cli docs +fetch --doc "文档URL或token"
10
+
11
+ # 列出文档历史版本
12
+ lark-cli docs +history-list --doc "文档URL或token" --page-size 20
13
+
14
+ # 按关键词搜云文档
15
+ lark-cli docs +search --query "<关键词>"
16
+ ```
17
+
18
+ 其余 docs 能力(创建 / 编辑 / 追加正文、图片与附件的插入·预览·下载、封面资源、思维笔记、
19
+ 画板更新、字数统计、历史回滚等写 / 管理操作)在本沙箱**不作为可用入口**,不要尝试拼这些命令。
20
+
21
+ ## 前置条件 — 执行操作前必读
22
+
23
+ **执行对应操作前,MUST 先用 Read 工具读取以下文件:**
24
+
25
+ 1. **读取文档(`docs +fetch`)** → 必读 [`lark-doc-fetch.md`](references/lark-doc-fetch.md)(`--scope` / `--detail` 选择、局部读取策略、`<fragment>` / `<excerpt>` 输出结构)
26
+ 2. **查看历史版本(`docs +history-list`)** → 必读 [`lark-doc-history.md`](references/lark-doc-history.md)(分页与返回字段)
27
+
28
+ **未读完对应文件就执行相应操作会导致参数选择错误。**
29
+
30
+ ## 快速决策
31
+
32
+ - 找文档 / 导入导出走 [`lark-drive`](../lark-drive/README.md);只读 / 摘要用 `docs +fetch` 默认 `simple`;只需要 block 直达链接或按范围精读时,用 `docs +fetch --detail with-ids` 局部读取
33
+ - block 直达链接格式:`文档基础 URL#block_id`;没有 block_id 时局部 fetch `with-ids`
34
+ - 用户想查看文档的历史版本列表(`revision_id` / `edit_time` / 版本名)→ 用 `docs +history-list`,先读 [`lark-doc-history.md`](references/lark-doc-history.md)
35
+ - 拿到 spreadsheet URL/token 后 → 切到 `lark-sheets` 做对象内部操作
36
+ - 文档内容中出现嵌入的 `<sheet>` / `<bitable>` / `<cite file-type="sheets|bitable">` 标签时 → **必须主动提取 token 并切到对应域下钻读取内部数据**,不能只呈现标签本身:`<sheet>` 走 `lark-sheets`,`<bitable>`(多维表格 / Base)走 `lark-base`
37
+
38
+ | 标签 / 属性 | 提取字段 | 切到技能 |
39
+ |-|-|-|
40
+ | `<sheet token="..." sheet-id="...">` | `token` -> spreadsheet_token, `sheet-id` | [`lark-sheets`](../lark-sheets/README.md) |
41
+ | `<bitable token="..." table-id="...">` | `token` -> base_token, `table-id` | [`lark-base`](../lark-base/README.md) |
42
+ | `<cite type="doc" file-type="sheets" token="..." sheet-id="...">` | 同 `<sheet>` | [`lark-sheets`](../lark-sheets/README.md) |
43
+ | `<cite type="doc" file-type="bitable" token="..." table-id="...">` | 同 `<bitable>` | [`lark-base`](../lark-base/README.md) |
44
+ | `<synced_reference src-token="..." src-block-id="...">` | `src-token` -> doc_token, `src-block-id` -> block_id | 用 `docs +fetch` 读取 src-token 文档,定位 block |
45
+
46
+ ## Shortcuts(推荐优先使用)
47
+
48
+ Shortcut 是对常用操作的高级封装(`lark-cli docs +<verb> [flags]`)。有 Shortcut 的操作优先使用。
49
+
50
+ | Shortcut | 说明 |
51
+ |----------|------|
52
+ | [`+fetch`](references/lark-doc-fetch.md) | Fetch Lark document content (XML / Markdown / im-markdown; `im-markdown` only after fetch for `lark-im`) |
53
+ | `+search` | 按关键词搜云文档(默认匹配标题与正文);见下方「`+search`」节 |
54
+ | [`+history-list`](references/lark-doc-history.md) | List document history versions (`revision_id` / `edit_time` / version name) |
55
+
56
+ ## `+search` —— 按关键词搜云文档
57
+
58
+ ```bash
59
+ lark-cli docs +search --query "<关键词>" --as user
60
+ lark-cli docs +search --query "<关键词>" --page-size 20 --as user
61
+ ```
62
+
63
+ - `--query` 是搜索关键词
64
+ - `--page-size` 默认 15、最大 20;配 `--page-token` 翻页
65
+ - `--filter` 接 JSON 对象做条件过滤
66
+ - 与 [lark-drive](../lark-drive/README.md) 的 `+search` 共用同一后端搜索接口;要按文件类型 /
67
+ 归属 / 时间窗过滤时用 drive 那个,它的过滤器更全
@@ -0,0 +1,138 @@
1
+
2
+ # docs +fetch(获取飞书云文档)
3
+
4
+ ## 命令
5
+
6
+ ```bash
7
+ # 获取文档(默认 XML,simple)
8
+ lark-cli docs +fetch --doc "https://xxx.feishu.cn/docx/Z1Fj...tnAc"
9
+
10
+ # Markdown 格式
11
+ lark-cli docs +fetch --doc Z1Fj...tnAc --doc-format markdown
12
+
13
+ # 带 block ID(用于后续 block 级更新)
14
+ lark-cli docs +fetch --doc Z1Fj...tnAc --detail with-ids
15
+
16
+ # 只拿目录
17
+ lark-cli docs +fetch --doc Z1Fj...tnAc --scope outline --max-depth 3
18
+
19
+ # 按 block id 区间精读
20
+ lark-cli docs +fetch --doc Z1Fj...tnAc --scope range --start-block-id blkA --end-block-id blkB --detail with-ids
21
+
22
+ # URL 带 #share 选区锚点时自动局部读取
23
+ lark-cli docs +fetch --doc 'docURL#share-anchor'
24
+
25
+ # 读整个章节(以标题 id 为锚点,自动展开到下一个同级/更高级标题前)
26
+ lark-cli docs +fetch --doc Z1Fj...tnAc \
27
+ --scope section --start-block-id <标题id> --detail with-ids
28
+
29
+ # 按关键词定位(多关键词用 | 分隔,任一命中即返回)
30
+ lark-cli docs +fetch --doc Z1Fj...tnAc \
31
+ --scope keyword --keyword "部署|发布|上线"
32
+ ```
33
+
34
+ ## 选 `--detail`(每块详细度)
35
+
36
+ | 意图 | `--detail` | 说明 |
37
+ |------|-----------|------|
38
+ | **只读**:浏览或总结文档内容 | `simple`(默认) | 简洁 XML/Markdown,不含 block ID、样式属性、引用元数据 |
39
+ | **定位**:需要 block ID 与其他业务交互 | `with-ids` | 包含 block ID(如 `<p id="blkcnXXXX">`),可用于拼接 `文档URL#block_id` 形式的直达链接,或与其他业务交互时定位 block |
40
+ | **完整结构**:需要样式属性 / 引用元数据 / 完整结构 | `full` | 包含 block ID + 样式属性 + 引用元数据,提供完整文档结构信息 |
41
+
42
+ ## 选 `--scope`(读取范围)
43
+
44
+ `--scope` 和 `--detail` 正交可组合。**省略 `--scope` 即读整篇;获取一小节时优先用局部读取。**
45
+
46
+ | 模式 | 何时用 | 关键参数 | 行为要点 |
47
+ |-|-|-|-|
48
+ | `outline` | 不知道结构,先看目录 | `--max-depth`(标题层级上限) | 扁平列出所有标题,**包括嵌在容器里的内嵌标题**(如 callout 里的 h3);这些 id 可直接作后续 `section` / `range` 端点 |
49
+ | `section` | 读某个标题对应的整节 | `--start-block-id`(必填) | 顶层标题 → 展开到下一同级/更高级标题前;容器内节点(含内嵌标题) → 按"最小包容单元"返回容器/表格切片,不做 heading 扩展;顶层非标题块 → 仅该块 |
50
+ | `range` | 已知精确起止 | `--start-block-id` / `--end-block-id` 至少一个;`-1` = 读到末尾 | 两端同顶层 → 顶层序列切片;两端同一容器 → 容器整体;两端同一表格 → 瘦身切片;**跨顶层 → 端点所在顶层块整块输出,不做瘦身** |
51
+ | `keyword` | 只有模糊关键词 | `--keyword`(**多级自动 fallback**:子串 → 归一化 → 分词形变 → RE2 正则;`\|` 分隔多分支 OR) | 每处命中按"最小包容单元"输出;**自动去重**(同容器多命中 → 单个容器,同表格多行命中 → 合并切片) |
52
+
53
+ > 💡 **多关键词用 `\|` 拼接(OR 语义,任一命中即返回)**:例 `"部署\|发布\|上线"`,三词任一命中都进结果,适合**同义词/别名/多业务术语**一次召回(如 `bug\|缺陷\|故障`)。
54
+
55
+ **设置 `--scope` 时共用** `--context-before` / `--context-after` / `--max-depth`。
56
+
57
+ - `--max-depth`:`outline` = 标题层级上限(3 = h1~h3);其它模式 = 被选块的子树遍历深度(`-1` 不限,`0` 仅块自身)。
58
+ - `--context-before/--context-after`:**只对整块顶层单元生效**;命中落在容器/表格内(返回容器或切片)时 before/after 被忽略,需要更大范围改用 `section` / `range` 显式指定。
59
+
60
+ **决策顺序**(核心原则:**局部获取优于全量获取**,根据需求形态选起点,必要时多步组合收敛范围):
61
+ 1. 需求**直接给出待查的具体术语/错误码/标识** → 直接走 `keyword` 粗匹配(多级 fallback 自动覆盖形变),需要更大上下文时用返回的 `top-block-id` 走 `section` / `range`
62
+ 2. 需求**指向某个章节/标题**("修改 XX 章"、"总结第 3 节"、"关于 xx 的内容")→ 先 `outline --max-depth 3` 拿目录 → `section --start-block-id <标题id>` 精读
63
+ 3. 已知**精确起止 / 跨节连续区间** → `range`
64
+ 4. **结构未知且无明确关键词/章节线索** → `outline` 探测,再回到 2/3
65
+ 5. **兜底**:仅在确需整篇时才省略 `--scope`;不要为省事直接读整篇
66
+
67
+ ## 局部读取的输出结构:`<fragment>` 与 `<excerpt>`
68
+
69
+ 设置 `--scope` 时返回的 `content` 被一个 `<fragment>` 节点包裹,属性包含 `mode` / `requested-start` / `requested-end` / `keyword`(按需)。子节点只有两种形态:
70
+
71
+ - **顶层块**:完整块直接作为 `<fragment>` 的子节点,无额外包裹。
72
+ - **`<excerpt top-block-id="..." parent-block-path="...">`**:非顶层节选(容器整体 / 表格瘦身切片)。
73
+ - `top-block-id`:所在顶层块 id,想看该块全貌时作 `section` / `range` 锚点再拉一次。
74
+ - `parent-block-path`:从顶层块到 excerpt 内容直接父节点的 id 路径,`/` 分隔(表格切片时即表格自身 id)。
75
+
76
+ **看到 `<excerpt>` 即意味着这是节选**,不能假设看到了该顶层块的全貌。
77
+
78
+ **表格默认瘦身**:即便 `<table>` 本身是顶层块也只返回 thead + 命中 tr。想拿整张表 → `range --start-block-id <table-id> --end-block-id <table-id>`;切片范围恰好覆盖全部 tr 时 SDK 自动升级为整块、不包 `<excerpt>`。
79
+
80
+ ## 返回值
81
+
82
+ ```json
83
+ {
84
+ "ok": true,
85
+ "identity": "user",
86
+ "data": {
87
+ "document": {
88
+ "document_id": "doxcnXXXX",
89
+ "revision_id": 12,
90
+ "content": "<title>标题</title><p>文档内容...</p>",
91
+ "reference_map": {
92
+ "<block_type>": {
93
+ "<ref>": {
94
+ "<real-attr-key>": "<real-attr-value>"
95
+ }
96
+ }
97
+ },
98
+ "tips": "<safe replay or degradation guidance>"
99
+ }
100
+ }
101
+ }
102
+ ```
103
+
104
+ `content` 的格式由 `--doc-format` 决定。`reference_map` 是正文引用数据的结构化 sidecar:一级键 `block_type` 表示引用所在的块类型,二级键 `ref` 对应正文中的临时引用;每个引用的值是由 `real-attr-key` 和 `real-attr-value` 组成的真实属性映射,具体属性由块类型决定。没有提取数据时,`reference_map` 可能为空。`content` 和 `reference_map` 属于同一份响应,保留或回放内容时应配套处理。`tips` 给出安全回放或降级提示。`im-markdown` 仅用于获取内容后在 `lark-im` 场景下使用。设置 `--scope` 时会被 `<fragment>` 包裹,详见上文"局部读取的输出结构"。
105
+
106
+ ## 参数
107
+
108
+ | 参数 | 必填 | 说明 |
109
+ |------|------|------|
110
+ | `--doc` | 是 | 文档 URL 或 token(支持 `/docx/` 和 `/wiki/`) |
111
+ | `--doc-format` | 否 | `xml`(默认)\| `markdown` \| `im-markdown`(仅用于获取内容后在 `lark-im` 场景下使用) |
112
+ | `--detail` | 否 | `simple`(默认)\| `with-ids` \| `full` |
113
+ | `--revision-id` | 否 | 文档版本号,`-1` = 最新(默认) |
114
+ | `--scope` | 否 | `outline` \| `range` \| `keyword` \| `section`(省略 = 读整篇) |
115
+ | `--start-block-id` | 否 | `range`/`section` 起始/锚点 id(`section` 必填) |
116
+ | `--end-block-id` | 否 | `range` 结束 id;`-1` 表示读到末尾 |
117
+ | `--keyword` | 否 | `keyword` 模式关键词,**4 层自动 fallback**(子串 → 归一化 → 分词形变 → RE2 正则);`\|` 分隔多分支 OR |
118
+ | `--context-before` | 否 | 命中前拉几个兄弟块(仅对顶层单元生效,默认 `0`) |
119
+ | `--context-after` | 否 | 命中后拉几个兄弟块(仅对顶层单元生效,默认 `0`) |
120
+ | `--max-depth` | 否 | `outline` = 标题层级上限;其它 = 子树深度(`-1` 不限,默认) |
121
+ | `--format` | 否 | `json`(默认)\| `pretty` |
122
+
123
+ ## 图片、文件、画板的处理
124
+
125
+ **文档中的素材以 XML 标签形式出现:**
126
+
127
+ ```xml
128
+ <img token="..." url="https://..." width="..." height="..."/>
129
+ <source token="..." url="https://..." name="skills.zip"/>
130
+ <whiteboard token="..."/>
131
+ ```
132
+
133
+ - `<img>` / `<source>` 带 `url` 时,直接用该 URL 下载即可(普通 HTTP GET),无需走 shortcut。
134
+ - 没有 `url`(或目标是 `<whiteboard>`)的素材,本沙箱不提供下载 / 预览类命令;只需把标签里的 `token` 等信息如实呈现给用户。
135
+
136
+ ## 嵌入电子表格 / 多维表格
137
+
138
+ 返回中可能含 `<sheet>`、`<bitable>`、`<cite file-type="sheets|bitable">`。内部数据无法通过 `docs +fetch` 获取,需提取 token 后切到对应域下钻:`<sheet>`(电子表格)切 [`lark-sheets`](../../lark-sheets/README.md);`<bitable>`(多维表格 / Base)把 `token` 当 `base_token` 切 [`lark-base`](../../lark-base/README.md)。详见 [README.md 快速决策](../README.md) 路由表。
@@ -0,0 +1,61 @@
1
+ # docs +history-list(历史版本列表)
2
+
3
+ 用于查看 Docx 的历史版本列表(分页),读取每个版本的 `revision_id`、`history_version_id`、
4
+ `edit_time`、版本名等信息。本沙箱只开放只读的 `+history-list`,不提供回滚(写操作)能力。
5
+
6
+ `entries[].edit_time` 是 RFC3339 时间字符串(例如 `2026-06-22T12:24:45Z`)。按时间匹配时先把它
7
+ 解析为时间值,再比较先后关系或时间差——**不要**把它当 Unix 秒数直接比大小。
8
+
9
+ ## 用法
10
+
11
+ `+history-list` 是分页接口:先拉第一页,只有 `has_more=true` 且还需要更多候选时才继续传
12
+ `--page-token` 翻页。
13
+
14
+ - 按 `revision_id` 定位版本:逐页筛选 `entries[].revision_id` 相同的记录。未命中时必须继续翻页
15
+ 至 `has_more=false`;命中位于页尾时,继续读取下一页以收集相邻的同 `revision_id` 候选。多条
16
+ 记录时结合 `edit_time` 选择;无法区分时请用户确认。
17
+ - 按时间点定位版本:用 `entries[].edit_time` 匹配,选择不晚于目标时间的最近一条;用户明确要求
18
+ 「最接近」时,选择时间差最小的一条。
19
+ - `history_version_id` 对应服务端 `minor_history.version`。
20
+
21
+ ## 命令
22
+
23
+ ```bash
24
+ # 列出历史版本
25
+ lark-cli docs +history-list --doc "<docx_url_or_token>" --page-size 20
26
+
27
+ # 翻页
28
+ lark-cli docs +history-list --doc "<docx_url_or_token>" --page-size 20 --page-token "<page_token>"
29
+ ```
30
+
31
+ ## 参数
32
+
33
+ | 命令 | 参数 | 必填 | 说明 |
34
+ |-|-|-|-|
35
+ | `+history-list` | `--doc` | 是 | Docx URL/token,或可解析为 Docx 的 wiki URL |
36
+ | `+history-list` | `--page-size` | 否 | 返回条数,范围 `1-20`,默认 `20` |
37
+ | `+history-list` | `--page-token` | 否 | 上一页返回的 `page_token` |
38
+
39
+ ## 返回值要点
40
+
41
+ `+history-list` 返回:
42
+
43
+ ```json
44
+ {
45
+ "entries": [
46
+ {
47
+ "revision_id": 42,
48
+ "history_version_id": "11",
49
+ "edit_time": "2026-06-22T12:24:45Z",
50
+ "type": 1,
51
+ "name": "版本名",
52
+ "description": "版本说明",
53
+ "editor_ids": ["ou_xxx"]
54
+ }
55
+ ],
56
+ "has_more": true,
57
+ "page_token": "page_token"
58
+ }
59
+ ```
60
+
61
+ 是否还有下一页以返回里的 `has_more` 为准;`page_token` 只作为 `has_more=true` 时续跑下一页的游标。
@@ -0,0 +1,129 @@
1
+ # drive (v1)
2
+
3
+ ## 能力范围(本沙箱仅开放 1 个快捷命令 + 3 个只读 API)
4
+
5
+ 快捷命令只有 `+search`(按关键词搜云空间,见下方专节);其余能力是下面三个只读的原生 API 调用:
6
+
7
+ | API 命令 | 用途 |
8
+ |----------|------|
9
+ | `drive files list` | 列出某个 Drive 文件夹或根目录的直接子项(可递归盘点目录树) |
10
+ | `drive file.comments list` | 分页获取某个文档的评论列表 |
11
+ | `drive file.view_records list` | 获取文档的访问者记录(view records) |
12
+
13
+ 其余 drive 能力(上传 / 下载 / 导入 / 导出 / 复制 / 移动 / 删除 / 新建文件夹、评论写入与回复、
14
+ 权限与协作者、密级标签、版本管理、封面、订阅等)在本沙箱**不作为可用入口**,不要尝试拼这些命令。
15
+
16
+ ### 文档类型与 Token(读取前提)
17
+
18
+ 不同类型的文档有不同的 URL 格式和 Token 处理方式。列取评论或访问记录前,必须先拿到正确的
19
+ `file_token` 与对应 `file_type`。
20
+
21
+ | URL 格式 | 示例 | Token 类型 | 处理方式 |
22
+ |----------|------|-----------|----------|
23
+ | `/docx/` | `https://example.larksuite.com/docx/doxcnxxxxxxxxx` | `file_token` | URL 路径中的 token 直接作为 `file_token` 使用(`file_type=docx`) |
24
+ | `/doc/` | `https://example.larksuite.com/doc/doccnxxxxxxxxx` | `file_token` | URL 路径中的 token 直接作为 `file_token` 使用(`file_type=doc`) |
25
+ | `/sheets/` | `https://example.larksuite.com/sheets/shtcnxxxxxxxxx` | `file_token` | URL 路径中的 token 直接作为 `file_token` 使用(`file_type=sheet`) |
26
+ | `/page/` | `https://example.feishu.cn/page/N1BWmMrqndT5ZcamAIBcnvDLnOf/` | apps token | 妙搭 apps 类型;列评论时作为 `file_token`,`file_type=apps` |
27
+ | `/drive/folder/` | `https://example.larksuite.com/drive/folder/fldcnxxxx` | `folder_token` | URL 路径中的 token 作为文件夹 token 使用 |
28
+
29
+ ## API Resources
30
+
31
+ ```bash
32
+ lark-cli schema drive.<resource>.<method> # 调用 API 前必须先查看参数结构
33
+ lark-cli drive <resource> <method> [flags] # 调用 API
34
+ ```
35
+
36
+ > **重要**:使用原生 API 时,必须先运行 `schema` 查看 `--data` / `--params` 参数结构,不要猜测字段格式。
37
+
38
+ ### files
39
+
40
+ - `list` — 获取文件夹下的清单;使用前阅读 [`references/lark-drive-files-list.md`](references/lark-drive-files-list.md),按模板通过 `--params` 传参并手动处理分页;不要把 `--page-all` 输出直接交给 JSON 解析脚本。
41
+
42
+ 标准模板(读取普通文件夹的直接子项):
43
+
44
+ ```bash
45
+ lark-cli drive files list \
46
+ --params '{"folder_token":"<folder_token>","page_size":200}' \
47
+ --format json
48
+ ```
49
+
50
+ 读取当前用户 Drive 根目录的直接子项(`folder_token` 传空字符串):
51
+
52
+ ```bash
53
+ lark-cli drive files list \
54
+ --params '{"folder_token":"","page_size":200}' \
55
+ --format json
56
+ ```
57
+
58
+ ### file.comments
59
+
60
+ - `list` — 分页获取某个文档的评论列表。
61
+
62
+ 说明(近原样承接上游事实,不要臆造 flag,需要参数结构先 `lark-cli schema drive.file.comments.list`):
63
+ - 返回的 `items` 是评论卡片列表,每个 `item` 对应用户界面中的一张评论卡片,不是平铺的互动消息列表。
64
+ - 真正承载正文的是 `item.reply_list.replies`,其中第一条 reply 在用户视角下就是这张卡片里的"评论本身"。
65
+ - 统计"评论数 / 评论卡片数":统计 `items` 长度;全量统计时对所有分页返回的 `items` 长度累加。
66
+ - 是否还有下一页以返回里的 `has_more` 为准;`page_token` 只作为 `has_more=true` 时续跑下一页的游标。
67
+ - 如果 `item.has_more=true`,说明该评论卡片下还有更多回复未包含在当前返回中。
68
+
69
+ ### file.view_records
70
+
71
+ - `list` — 获取文档的访问者记录。查看 docx 最近访问记录、返回 open_id、最多 N 条时,建议优先使用 typed flags:`lark-cli drive file.view_records list --file-token <docx_token> --file-type docx --page-size <N> --viewer-id-type open_id --format json`;`--params` JSON 也支持,适合批量拼装、分页续跑或 raw 参数场景。
72
+
73
+ ## 典型错误与解决方案
74
+
75
+ | 错误信息 | 原因 | 解决方案 |
76
+ |----------|------|----------|
77
+ | `not exist` | 使用了错误的 token | 检查 token 类型;wiki 链接背后是 docx/sheet/bitable 等不同对象,不能只按 `/wiki/<token>` 猜底层类型 |
78
+ | `permission denied` | 没有相关操作权限 | 当前身份对该文档/文件没有读取权限;把 `error.hint` 转述给用户,不要自行补登录或改身份 |
79
+ | `invalid file_type` | file_type 参数错误 | 根据实际 `obj_type` 传入正确的 file_type(docx/doc/sheet/slides/bitable/apps) |
80
+
81
+ ## `+search` —— 按关键词搜云空间
82
+
83
+ ```bash
84
+ lark-cli drive +search --query "<关键词>" --doc-types file --mine --as user
85
+ lark-cli drive +search --query "<关键词>" --only-title --as user
86
+ ```
87
+
88
+ 要点:
89
+
90
+ - **默认匹配标题与正文**;加 `--only-title` 才退化为仅标题匹配
91
+ - `--query` 最长 30 字符(按 Unicode 码点算,中文每字算 1 个);可以留空,配过滤器纯按条件浏览
92
+ - `--query` 支持服务端高级语法 `intitle:` / `""` / `OR` / `-`,**优先下推给服务端**,
93
+ 不要先模糊搜再在客户端二次过滤
94
+ - `--doc-types` 逗号分隔,取值 `doc,sheet,bitable,mindnote,file,wiki,docx,folder`
95
+ - `--mine` 是**服务端 owner 语义**,与 `--created-by-me`(原始创建者)不同,别混用
96
+ - 时间窗过滤按动作分:`--created-since/until`(文档创建)、`--edited-since/until`(我编辑过)、
97
+ `--opened-since/until`(我打开过)、`--commented-since/until`(我评论过);值支持 `7d` / `1m` /
98
+ `2026-04-01` / RFC3339
99
+ - `--page-size` 1-20 默认 15,配 `--page-token` 翻页
100
+ - `--folder-tokens` 与 `--space-ids` 互斥,分别限定云盘文件夹与 wiki 空间
101
+ - `--sort` 取值 `default|edit_time|edit_time_asc|open_time|create_time`
102
+
103
+ ### 标题词 + 正文词要同时满足时
104
+
105
+ 用户同时给标题关键词和正文关键词、且要求同一资源同时满足两项时,**发一条联合搜索**:
106
+
107
+ ```bash
108
+ lark-cli drive +search --query "标题词 正文词" --folder-tokens <FOLDER_TOKEN> --as user
109
+ ```
110
+
111
+ 把用户指定的 `--folder-tokens` / `--doc-types` 等过滤条件叠在同一条命令里。**不要**拆成
112
+ 「标题搜索 + 正文搜索」再自行拼交集,也**不要**把 `--only-title` 或 `intitle:` 当主候选路径——
113
+ 只有用户明确只查标题时才用它们。
114
+
115
+ ### 用户要 N 条结果时
116
+
117
+ **N 是输出上限,不等于 `--page-size N`。** 逐页按返回里的 `title` 与 `summary_highlighted`
118
+ 保留同时满足两项条件的候选;有效候选不足 N 且 `has_more=true` 时,保持同一 query 与过滤条件、
119
+ 用 `--page-token` 继续,**最多检查 3 页**。摘要不足以判断正文条件时,只对标题已匹配的候选
120
+ **串行**读正文,确认一个再处理下一个,找到 N 条即停——不要并发拉正文。检查 3 页仍不足就返回
121
+ 已确认结果,并建议用户调整标题词 / 正文词 / 搜索范围,不要无界扫描。
122
+
123
+ ### 分页与放宽范围
124
+
125
+ - 默认只返回第一页,并说明 `has_more` 与下一页命令。用户明确要「全部 / 全量 / 继续翻」才继续。
126
+ - 上面的标题词 + 正文词联合搜索最多检查 3 页;其他场景单轮翻页上限 5 页。
127
+ - 扩展 query 时优先保留用户已指定的空间、文件夹、群聊、人员、时间和类型等过滤条件;
128
+ 确需放宽检索范围时,先向用户说明原因并征得确认。
129
+ - 结果被截断时不要据此回答「一共有多少」,先翻页或收窄条件。