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

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 (73) hide show
  1. package/package.json +2 -2
  2. package/skills/lark-apps/SKILL.md +5 -3
  3. package/skills/lark-apps/references/lark-apps-automation.md +164 -0
  4. package/skills/lark-apps/references/lark-apps-get.md +43 -0
  5. package/skills/lark-apps/references/lark-apps-html-publish.md +7 -2
  6. package/skills/lark-apps/references/lark-apps-init.md +1 -2
  7. package/skills/lark-apps/references/lark-apps-openapi-key.md +1 -1
  8. package/skills/lark-apps/references/lark-apps-release-create.md +3 -1
  9. package/skills/lark-base/SKILL.md +1 -1
  10. package/skills/lark-base/references/lark-base-dashboard-block-get-data.md +7 -7
  11. package/skills/lark-calendar/references/lark-calendar-create.md +1 -0
  12. package/skills/lark-doc/references/lark-doc-xml-extended-blocks.md +2 -1
  13. package/skills/lark-drive/SKILL.md +10 -4
  14. package/skills/lark-drive/references/lark-drive-comment-location.md +16 -4
  15. package/skills/lark-drive/references/lark-drive-comments-guide.md +16 -8
  16. package/skills/lark-drive/references/lark-drive-export.md +39 -10
  17. package/skills/lark-drive/references/lark-drive-list-comments.md +125 -0
  18. package/skills/lark-drive/references/lark-drive-member-add.md +1 -1
  19. package/skills/lark-drive/references/lark-drive-pull.md +3 -3
  20. package/skills/lark-drive/references/lark-drive-push.md +1 -1
  21. package/skills/lark-drive/references/lark-drive-status.md +12 -14
  22. package/skills/lark-im/SKILL.md +5 -4
  23. package/skills/lark-im/references/lark-im-messages-reply.md +1 -1
  24. package/skills/lark-im/references/lark-im-messages-send.md +1 -1
  25. package/skills/lark-minutes/SKILL.md +19 -4
  26. package/skills/lark-minutes/references/lark-minutes-todo.md +2 -2
  27. package/skills/lark-shared/SKILL.md +9 -9
  28. package/skills/lark-sheets/SKILL.md +98 -29
  29. package/skills/lark-sheets/references/lark-sheets-batch-update.md +18 -9
  30. package/skills/lark-sheets/references/lark-sheets-changeset.md +105 -0
  31. package/skills/lark-sheets/references/lark-sheets-chart.md +4 -2
  32. package/skills/lark-sheets/references/lark-sheets-conditional-format.md +2 -0
  33. package/skills/lark-sheets/references/lark-sheets-filter-view.md +1 -1
  34. package/skills/lark-sheets/references/lark-sheets-float-image.md +6 -6
  35. package/skills/lark-sheets/references/lark-sheets-formula-translation.md +12 -3
  36. package/skills/lark-sheets/references/lark-sheets-formula-verify.md +77 -0
  37. package/skills/lark-sheets/references/lark-sheets-history.md +93 -0
  38. package/skills/lark-sheets/references/lark-sheets-pivot-table.md +7 -2
  39. package/skills/lark-sheets/references/lark-sheets-range-operations.md +44 -14
  40. package/skills/lark-sheets/references/lark-sheets-read-data.md +3 -3
  41. package/skills/lark-sheets/references/lark-sheets-sheet-structure.md +4 -4
  42. package/skills/lark-sheets/references/lark-sheets-visual-standards.md +4 -4
  43. package/skills/lark-sheets/references/lark-sheets-workbook.md +29 -4
  44. package/skills/lark-sheets/references/lark-sheets-write-cells.md +21 -11
  45. package/skills/lark-slides/SKILL.md +29 -18
  46. package/skills/lark-slides/references/asset-planning.md +0 -1
  47. package/skills/lark-slides/references/examples.md +57 -227
  48. package/skills/lark-slides/references/iconpark.md +2 -2
  49. package/skills/lark-slides/references/lark-slides-create.md +21 -2
  50. package/skills/lark-slides/references/lark-slides-media-upload.md +0 -1
  51. package/skills/lark-slides/references/lark-slides-pptx-template-workflows.md +89 -0
  52. package/skills/lark-slides/references/lark-slides-replace-pages.md +1 -1
  53. package/skills/lark-slides/references/lark-slides-replace-slide.md +1 -1
  54. package/skills/lark-slides/references/lark-slides-screenshot.md +11 -8
  55. package/skills/lark-slides/references/lark-slides-xml-get.md +100 -0
  56. package/skills/lark-slides/references/lark-slides-xml-presentation-slide-delete.md +9 -7
  57. package/skills/lark-slides/references/lark-slides-xml-presentation-slide-get.md +4 -4
  58. package/skills/lark-slides/references/lark-slides-xml-presentation-slide-replace.md +12 -10
  59. package/skills/lark-slides/references/lark-slides-xml-presentations-get.md +14 -13
  60. package/skills/lark-slides/references/planning-layer.md +1 -1
  61. package/skills/lark-slides/references/troubleshooting.md +7 -25
  62. package/skills/lark-slides/references/validation-checklist.md +18 -9
  63. package/skills/lark-slides/references/visual-planning.md +4 -3
  64. package/skills/lark-slides/references/xml-schema-quick-ref.md +6 -2
  65. package/skills/lark-slides/scripts/xml_text_overlap_lint.py +647 -52
  66. package/skills/lark-slides/scripts/xml_text_overlap_lint_test.py +529 -0
  67. package/skills/lark-task/SKILL.md +1 -0
  68. package/skills/lark-vc-agent/SKILL.md +11 -4
  69. package/skills/lark-vc-agent/references/lark-vc-agent-meeting-events.md +1 -1
  70. package/skills/lark-vc-agent/references/lark-vc-agent-meeting-leave.md +1 -1
  71. package/skills/lark-vc-agent/references/lark-vc-agent-meeting-list-active.md +2 -2
  72. package/skills/lark-sheets/references/lark-sheets-core-operations.md +0 -103
  73. package/skills/lark-slides/references/lark-slides-xml-presentation-slide-create.md +0 -220
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@amaster.ai/pi-lark",
3
- "version": "0.1.2-beta.41",
3
+ "version": "0.1.2-beta.42",
4
4
  "description": "Pi extension for Lark/Feishu workspace — calendar, docs, drive, sheets, tasks, mail and more via lark-cli.",
5
5
  "keywords": [
6
6
  "pi-package",
@@ -61,7 +61,7 @@
61
61
  "vitest": "^4.0.0"
62
62
  },
63
63
  "dependencies": {
64
- "@amaster.ai/pi-shared": "0.1.2-beta.41"
64
+ "@amaster.ai/pi-shared": "0.1.2-beta.42"
65
65
  },
66
66
  "scripts": {
67
67
  "fetch-skills": "node scripts/fetch-skills.mjs",
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  name: lark-apps
3
3
  version: 1.0.0
4
- description: "妙搭(Spark/Miaoda)应用开发与托管:应用创建、HTML静态站点发布、本地全栈开发、云端生成迭代、AI相关能力和飞书平台能力或者其他外部能力集成、日志/Trace/监控指标/PV/UV 查询、环境变量管理。当用户要开发/新建一个系统·工具·平台·应用,或要本地开发 / 云端开发 / 修改 / 部署 / 发布 / 上线 / 拿可分享链接,或用 HTML 做页面·网站·部署到妙搭,或提到妙搭/Spark/Miaoda(应用运行时域名形如 *.aiforce.cloud)、应用数据库、应用文件存储、开放 API Key、可见范围、线上日志、接口请求量、错误量、延迟、访问量、环境变量时使用。不负责普通云盘文件上传(lark-drive)、飞书文档编辑(lark-doc)、原生幻灯片创建(lark-slides)。"
4
+ description: "妙搭(Spark/Miaoda)应用开发与托管:应用创建、HTML静态站点发布、本地全栈开发、云端生成迭代、AI相关能力和飞书平台能力或者其他外部能力集成、日志/Trace/监控指标/PV/UV 查询、环境变量管理、自动化触发器(定时/记录变更/Webhook/飞书审批)。当用户要开发/新建一个系统·工具·平台·应用,或要本地开发 / 云端开发 / 修改 / 部署 / 发布 / 上线 / 拿可分享链接,或用 HTML 做页面·网站·部署到妙搭,或提到妙搭/Spark/Miaoda(应用运行时域名形如 *.aiforce.cloud)、应用数据库、应用文件存储、开放 API Key、可见范围、线上日志、接口请求量、错误量、延迟、访问量、环境变量、给妙搭应用配自动化任务/定时触发/审批通过后自动触发时使用。不负责普通云盘文件上传(lark-drive)、飞书文档编辑(lark-doc)、原生幻灯片创建(lark-slides)。"
5
5
  metadata:
6
6
  requires:
7
7
  bins: ["lark-cli"]
@@ -30,6 +30,7 @@ lark-cli auth login --domain apps
30
30
  |---|---|---|
31
31
  | 创建**新**应用资产、拿 app_id | `+create` | [`lark-apps-create.md`](references/lark-apps-create.md) |
32
32
  | 找已有 app_id、按名字过滤应用 | `+list --keyword <name>` | [`lark-apps-list.md`](references/lark-apps-list.md) |
33
+ | 查单个应用详情(类型、名称、发布状态等) | `+get --app-id <app_id>` | [`lark-apps-get.md`](references/lark-apps-get.md) |
33
34
  | 改应用名或描述 | `+update` | [`lark-apps-update.md`](references/lark-apps-update.md) |
34
35
  | 发布本地 `index.html` 或静态目录为可访问 URL | `+html-publish` | [`lark-apps-html-publish.md`](references/lark-apps-html-publish.md) |
35
36
  | 开发已有应用 / 初始化本地仓库(开发方式已定为本地后;先解析 app_id,勿 `+create` 新建) | `+init`(或手动 `+git-credential-init` + 原生 git)。**执行前必读** [`lark-apps-local-dev.md`](references/lark-apps-local-dev.md),含端到端流程和领域规则 | [`lark-apps-init.md`](references/lark-apps-init.md), [`lark-apps-git-credential.md`](references/lark-apps-git-credential.md) |
@@ -43,6 +44,7 @@ lark-cli auth login --domain apps
43
44
  | 设置或查看运行时可见范围 | `+access-scope-set`, `+access-scope-get` | 对应 access-scope reference |
44
45
  | 云端 Agent 生成/迭代应用(开发方式已定为云端后) | `+session-create` -> `+chat` -> `+session-get` | [`lark-apps-cloud-dev.md`](references/lark-apps-cloud-dev.md) |
45
46
  | 管理妙搭应用开放 API Key(创建/查看/启停/重置/删除凭证;密钥仅 create/reset 一次性返回) | `+openapi-key-list/get/create/update/enable/disable/delete/reset` | [`lark-apps-openapi-key.md`](references/lark-apps-openapi-key.md) |
47
+ | 管理妙搭应用自动化触发器(定时/记录变更/Webhook/飞书审批四类触发器的查询/创建/更新/启停;Webhook URL·Token 一次性回显、不落盘) | `+automation-list/get/create/update/enable/disable` | [`lark-apps-automation.md`](references/lark-apps-automation.md) |
46
48
  | 查看某次会话某一轮(turn)的回复消息(含仍在生成中的本轮)/ 导出上一轮模型回复("这一轮回复了什么""上一轮的回复""导出某轮消息") | 先 `+session-get`(取 `latest_turn.turn_id`)-> `+session-messages-list --turn-id <id>`(仅 user 身份;分页用 `--page-token`) | [`lark-apps-session-messages-list.md`](references/lark-apps-session-messages-list.md) |
47
49
  | 外部能力(AI模型能力和飞书平台能力)集成/插件/Plugin/Capability | `+plugin-install`, `+plugin-list`, `+plugin-uninstall` | [`lark-apps-plugin-install.md`](references/lark-apps-plugin-install.md), [`lark-apps-plugin-uninstall.md`](references/lark-apps-plugin-uninstall.md), [`lark-apps-plugin-list.md`](references/lark-apps-plugin-list.md) |
48
50
 
@@ -78,8 +80,8 @@ lark-cli auth login --domain apps
78
80
 
79
81
  ## 能力边界
80
82
 
81
- - lark-cli **不支持**配置应用的权限(应用内 RBAC、成员角色、协作者权限)/ 自动化。`+access-scope-*` 只管运行时可见范围(谁能打开应用),不是角色权限。
82
- - 用户要配置权限 / 自动化时,引导其使用开发态连接前往云端开发(妙搭 web)处理。
83
+ - lark-cli **不支持**配置应用的权限(应用内 RBAC、成员角色、协作者权限)。`+access-scope-*` 只管运行时可见范围(谁能打开应用),不是角色权限。
84
+ - 用户要配置权限时,引导其使用开发态链接前往云端开发(妙搭 web)处理。自动化触发器请用 `+automation-*`(见「意图路由」)。
83
85
 
84
86
  ## app_id 获取
85
87
 
@@ -0,0 +1,164 @@
1
+ # apps automation 触发器命令族 SOP
2
+
3
+ 管理妙搭应用的自动化触发器(定时 / 记录变更 / Webhook / 飞书审批四类)。全部操作需 `--as user`(AuthType: user)。`--help` 是参数细节的完整来源;本文件只记录 Agent 不看就会做错的领域规则。
4
+
5
+ ## 何时用本 skill(路由锚点)
6
+
7
+ **当用户消息里出现「妙搭应用名 / app_id」+ 以下任一意图,路由本 skill,不要走 lark-event 或 lark-openapi-explorer:**
8
+
9
+ - 「(每天 / 定时 / 每 N 小时 / 每周 X)自动跑 / 自动触发 / 定时同步」→ `+automation-create --trigger-type cron`
10
+ - 「数据表 / 记录 / 表里 X 字段(新增 / 更新 / 删除 / 变化)时(触发 / 通知 / 处理)」→ `+automation-create --trigger-type record-change`
11
+ - 「(webhook / 外部回调 / 外部系统调用 / HTTP 触发)」→ `+automation-create --trigger-type webhook`
12
+ - 「(审批 / 报销 / 请假 / 出差)(通过 / 拒绝 / 提交 / 撤回)后自动 X」→ `+automation-create --trigger-type feishu-approval`
13
+ - 「这个应用配了哪些(自动化 / 触发器 / 定时任务)」→ `+automation-list`
14
+ - 「(暂停 / 停用 / 先别自动跑 / 关掉自动触发)某个(触发器 / 定时任务 / 自动化)」→ `+automation-disable`(不是 update 改条件、不是 delete——本 skill 不提供删除)
15
+ - 「换 / 重置 webhook 回调地址 / URL」→ `+automation-update --reset-url --app-env <preview|runtime>`
16
+ - 「换 / 重置 / 轮换 webhook token / bearer」→ `+automation-update --reset-token`
17
+
18
+ **边界(防误路由)**:`lark-event` 是**实时事件流消费**(agent 长连接订阅事件),不管妙搭应用触发器的**配置**;用户说「配 / 设置一个触发器」而不是「订阅事件流」时,本 skill 才是正确选择。「审批通过触发」在妙搭应用语境下属于本 skill 的 `feishu-approval` 类型,不是 lark-event。
19
+
20
+ ### 回应「怎么配」类问题的正确姿势
21
+
22
+ 用户问「怎么配 / 怎么设置一个 X 触发器」时,**先展示完整命令模板 + 你对核心参数的推断**(让用户能确认你理解对了),再追问缺失的必填项(`--name` 之类)或可选项。**不要跳过展示、直接连环追问**,那样用户没法确认你有没有理解意图。
23
+
24
+ 示范:用户说「报销审批一旦通过就自动触发处理,怎么配?」
25
+ - ✅ 正确:先写出「这是 feishu-approval 类型,命令模板:`apps +automation-create --app-id <id> --name <name> --trigger-type feishu-approval --event-type approval_instance --instance-status APPROVED [--approval-code <code>]`。需要你确认:(1) 触发器名 `<name>`;(2) 是否限定特定审批流程——限定就传 `--approval-code`(从飞书审批管理后台拿),不传则匹配所有审批定义」。
26
+ - ❌ 错误:直接问「叫什么名字?监听哪个审批?」——用户没法确认你有没有把「审批通过」映射到 `--event-type approval_instance --instance-status APPROVED`。
27
+
28
+ 同理,cron/record-change/webhook 三类的「怎么配」都遵循此模式:先给命令 + 参数推断,后追问缺项。
29
+
30
+ ## 命令路由
31
+
32
+ | 命令 | 用途 | Risk |
33
+ |---|---|---|
34
+ | `+automation-list` | 列出应用所有触发器(可按类型过滤、`--all` 聚合翻页) | read |
35
+ | `+automation-get` | 查看单个触发器完整配置(Webhook Bearer Token 恒脱敏) | read |
36
+ | `+automation-create` | 创建触发器,四类共用一条命令,按 `--trigger-type` 分派 | write |
37
+ | `+automation-update` | 改条件/描述,或经专用 flag 管理 Webhook URL·Token | high-risk-write |
38
+ | `+automation-enable` | 启用触发器(`status→enabled`,开始自动触发) | write |
39
+ | `+automation-disable` | 停用触发器(`status→disabled`,停止触发,不删除) | write |
40
+
41
+ 触发器以 **应用内唯一的 `--name`** 定位(不是 id)。所有单条命令都用 `--app-id` + `--name`;名字忘了先 `+automation-list` 查。
42
+
43
+ ## 四类触发器 payload
44
+
45
+ `--trigger-type` 用面向 Agent 的 kebab-case(`cron` / `record-change` / `webhook` / `feishu-approval`),CLI 内部转 snake_case 下推。类型专属 flag 只在对应类型生效。
46
+
47
+ ### cron(定时)
48
+
49
+ ```bash
50
+ +automation-create --app-id <id> --name daily --trigger-type cron \
51
+ --cron '0 9 * * *' [--timezone Asia/Shanghai]
52
+ ```
53
+
54
+ - `--cron` 是**五段式**(`minute hour day month weekday`),非六段。
55
+ - **最小间隔 30 分钟**:`--cron '* * * * *'`(每分钟)或 `*/n`(n<30)会被 CLI 本地拦截报错;后端也会二次校验。
56
+ - `--timezone` 缺省补 `Asia/Shanghai`(IANA 时区名)。
57
+
58
+ ### record-change(记录变更)
59
+
60
+ ```bash
61
+ +automation-create --app-id <id> --name onUpd --trigger-type record-change \
62
+ --table <table_name> --event UPDATE [--fields '["status"]']
63
+ ```
64
+
65
+ - `--event` 是**大写枚举**:`INSERT` / `UPDATE` / `UPSERT` / `DELETE`(CLI 会 uppercase,但请按枚举传)。
66
+ - `--table` 是应用数据库里的**表名**(对应 `+db-table-list` / `+db-table-get` 输出里 `.name` 字段的值),必填。妙搭应用的 dataloom 表以名称作为稳定标识符,没有独立的 `table_id`。
67
+ - `--fields` 是 JSON 字符串数组,仅对 `UPDATE`/`UPSERT` 有意义;`'["*"]'` 表示监听所有字段;不传表示不限定字段。
68
+
69
+ ### webhook(外部回调)
70
+
71
+ ```bash
72
+ +automation-create --app-id <id> --name hook --trigger-type webhook \
73
+ [--white-ip-list '["1.1.1.1","2.2.2.2"]']
74
+ ```
75
+
76
+ - 创建时可选 `--white-ip-list`(JSON 字符串数组)限制回调来源 IP。
77
+ - 回调 URL 分 **preview / runtime 两套**,创建时不回显;用 `+automation-get` 查当前配置,用 `+automation-update --reset-url --app-env <preview|runtime>` 轮换。
78
+ - Bearer Token 是回调鉴权凭证,见下方「凭证脱敏与一次性回显」。
79
+
80
+ ### feishu-approval(飞书审批)
81
+
82
+ ```bash
83
+ +automation-create --app-id <id> --name apv --trigger-type feishu-approval \
84
+ --event-type approval_instance --instance-status APPROVED [--approval-code <code>]
85
+ ```
86
+
87
+ - `--event-type` 必填,取 `approval_instance` 或 `approval_task`,决定状态用哪套 flag:
88
+ - `approval_instance` → `--instance-status`(可重复)
89
+ - `approval_task` → `--task-status`(可重复)
90
+ - **领域规则**:状态按 `event-type` 分桶校验,两桶枚举**不完全相同**(`PENDING`/`APPROVED`/`REJECTED`/`REVERTED`/`OVERTIME_CLOSE`/`OVERTIME_RECOVER` 两桶共享;`TRANSFERRED`/`ROLLBACK`/`DONE` 仅 task 有;`CANCELED`/`DELETED` 仅 instance 有);传错桶的状态会被 CLI 本地拦截,错误信息会打印该桶的合法值列表。具体枚举见命令 `--help`。
91
+
92
+ ## approval-code 获取路径
93
+
94
+ `--approval-code` **可选**。不传时匹配所有审批定义;要限定某个审批流程时,从**飞书审批管理后台**获取具体的 code 传给它。触发器 OpenAPI 不提供审批定义查询能力,具体 code 需去审批管理后台查。
95
+
96
+ ## 凭证脱敏与一次性回显(安全关键)
97
+
98
+ - `+automation-get` / `+automation-list`:**恒不返回明文 Bearer Token**——`trigger_condition.token_value` 被抹为 `null`。用户想知道「token 是什么」时,list/get 都查不到明文。
99
+ - `+automation-update --enable-token` / `--reset-token`:明文 Bearer Token **仅当次 stdout 回显一次**,同时 stderr 打印一次性告警:
100
+ ```text
101
+ warning: this bearer token is shown only once and is NOT stored by lark-cli — copy it now and store it in your own secret manager.
102
+ ```
103
+ - Webhook URL 同理:`--reset-url` 后新 URL 仅当次回显一次,旧 URL 立即失效。
104
+ - CLI 不落盘任何明文 token/URL(不写 cache / config / recent / debug log / 错误信息)。
105
+ - **Token 丢失只能 reset**:找不回,唯一恢复方式是 `+automation-update --reset-token`(旧 token 同时失效)。
106
+
107
+ ## 高危确认
108
+
109
+ `+automation-update` 整体是 `high-risk-write`,任何一次调用都需显式 `--yes`;缺少时框架会要求确认(退出码 10)。**不要自动补 `--yes`**——需用户明确确认后再加。以下 Webhook 动作 flag 尤其不可逆:
110
+
111
+ - `--reset-url`(旧回调 URL 立即失效,需配 `--app-env preview|runtime`)
112
+ - `--reset-token`(旧 token 立即失效)
113
+ - `--disable-token`(关闭 token 校验,**不可逆**)
114
+
115
+ 四个 Webhook 动作 flag(`--reset-url` / `--enable-token` / `--disable-token` / `--reset-token`)**每次只能传一个**。不确定影响时先跑 `--dry-run` 看将发出的请求(不含明文)。
116
+
117
+ ### 执行前必须完成的确认步骤(高危写强制协议)
118
+
119
+ **在带 `--yes` 执行任何高危写之前,Agent 必须先完成以下 3 件事**,缺一不可——即使用户口气很急、即使命令一眼就明:
120
+
121
+ 1. **确认目标唯一**:不允许"猜名字"或"批量试所有可能的名字"。若不确定 `--name`,先 `+automation-list --app-id <id>` 让用户在候选中点名;`--name` 不明的绝不执行写操作,更不要 for 循环批量试。
122
+ 2. **确认可选参数已定**:`--reset-url` 必须由用户明确指定 `--app-env preview` 还是 `runtime`;不要默认取 runtime 或 preview。同一触发器的 preview/runtime 是两条独立的 URL,误重置另一条不可回退。
123
+ 3. **告知不可逆后果并等确认**:把即将发生的 3 件事复述给用户——(a)旧 URL/Token 立即永久失效;(b)新 URL/Token 仅当次回显一次、CLI 不保存;(c)本次操作无法撤销——等用户回复"确认"再加 `--yes` 跑。
124
+
125
+ 只要有一项没做,就先跟用户对齐、不要执行。这些是 skill 层的护栏,不是 CLI 层的(CLI 只强制 `--yes`,不强制上面 3 件事)。
126
+
127
+ ## ⚠️ 安全告警:无鉴权公网回调组合态
128
+
129
+ `--disable-token`(关闭 Bearer Token 校验,不可逆)**叠加** `--white-ip-list '[]'`(清空 IP 白名单)会让 Webhook 触发器进入「**无鉴权公网回调**」组合态——**任何来源都能触发该 Webhook**,没有任何一道防线拦截。
130
+
131
+ - 两道防线:Token 校验(谁能调)+ IP 白名单(从哪能调)。**不要同时关闭这两道防线。**
132
+ - 若确需关闭 Token(例如对端无法带 Bearer 头),务必**保留 IP 白名单**收敛来源;反之若要放开 IP,务必**保留 Token 校验**。
133
+ - 用户同时要求「关 token 校验 + 清空 IP 白名单」时,Agent 的正确响应是**在识别到该请求的第一时间**(不要等命令跑失败才补警告)向用户输出以下 3 件事,再等确认——不要只描述"没有任何防线"就停下:
134
+ 1. 复述后果:这会形成无鉴权公网回调,任何来源都能触发。
135
+ 2. **主动给出替代方案**:明确建议"要么只关 Token 保留 IP 白名单,要么只放开 IP 保留 Token",让用户在保留一道防线的两条备选里选一条。
136
+ 3. 只有用户明确回复"我理解风险、就是要两道都关"时,才继续按高危写协议(见上节「执行前必须完成的确认步骤」)走。
137
+
138
+ ## 默认 disabled
139
+
140
+ `+automation-create` 创建后触发器**默认 disabled**,不会自动触发。需 `+automation-enable` 才开始按条件自动运行(且触发器执行的是**线上已发布**的应用代码——应用未发布时即便 enable 也不会有实际效果)。
141
+
142
+ **Agent 行为约束**:用户只说"创建/配一个触发器"时,**不要**主动在同一个 turn 里 `+automation-enable`。让用户自己在下一轮决定是否启用;主动启用会:
143
+ - 让 webhook 类型立即可被外部调用(原本用户可能只是想"备好 URL 稍后用")
144
+ - 让 cron 到点真实触发(原本用户可能想"先建好观察配置")
145
+ - 让 record-change 立即响应表变更
146
+
147
+ 创建成功后的推荐话术:`已创建 <name>,当前 disabled;需要真正开始自动运行时告诉我,我用 +automation-enable 启用它。` **不要**在创建成功后立即启用,即使 skill 里说"需 enable 才自动触发"——这条是给用户的说明,不是给 agent 的行动指令。
148
+
149
+ ## 常见错误与决策场景
150
+
151
+ | 现象 / 用户意图 | 正确处理 |
152
+ |---|---|
153
+ | 创建报名字冲突(`--name` 应用内唯一) | 换名或加后缀重试 |
154
+ | cron 报非法 / 间隔过小 | 检查是否五段式、分钟字段是否 `*` 或 `*/n`(n<30) |
155
+ | `--reset-url` 报缺 app-env | 补 `--app-env preview` 或 `--app-env runtime` |
156
+ | 想把 cron 触发器改成 webhook(跨类型改) | update 不支持换类型,本 skill 也不提供删除。旧触发器只能 `+automation-disable` 停用(保留在应用里),另建一个 webhook 触发器;若要真正清理旧触发器,请到妙搭 web 手动删除 |
157
+ | 触发器 enable 了但不触发 | 确认应用**已发布**;触发器跑的是线上已发布代码 |
158
+ | 「token 泄露了」 | 优先 `+automation-update --reset-token --yes` 轮换(旧 token 立即失效),而非直接 disable-token 关校验 |
159
+ | 「回调 URL 泄露了」 | `+automation-update --reset-url --app-env <env> --yes` 轮换 |
160
+
161
+ ## 不在本 skill 范围
162
+
163
+ - 审批定义查询、Webhook 消费端实现、实时触发日志 tail:本期不支持。
164
+ - 身份选择、权限不足处理、exit-10 审批、通用「禁输出密钥」红线、高风险操作通用框架:见 [`../lark-shared/SKILL.md`](../lark-shared/SKILL.md),不在此重复。
@@ -0,0 +1,43 @@
1
+ # apps +get
2
+
3
+ 按 app_id 查询单个应用详情。运行时命令事实以 `lark-cli apps +get --help` 为准。
4
+
5
+ ## 何时用
6
+
7
+ 需要查看一个应用的类型、名称、描述、发布状态等详情时使用。如果只是按应用名模糊搜索定位 app_id,用 `+list --keyword`。
8
+
9
+ ## 命令骨架
10
+
11
+ - 必填:`--app-id`。
12
+ - 返回应用的完整信息:`app_id`、`app_type`、`name`、`description`、`icon_url`、`created_at`、`updated_at`、`is_published`。
13
+
14
+ ## 示例
15
+
16
+ ```bash
17
+ lark-cli apps +get --app-id app_xxx
18
+ lark-cli apps +get --app-id app_xxx --dry-run
19
+ lark-cli apps +get --app-id app_xxx -q '.data.app.app_type'
20
+ ```
21
+
22
+ ## 输出契约
23
+
24
+ - 成功读取 `data.app` 对象,包含以下字段:
25
+
26
+ | 字段 | 类型 | 说明 |
27
+ |------|------|------|
28
+ | `app_id` | string | 应用唯一标识 |
29
+ | `app_type` | string | 应用类型(如 HTML、FULL_STACK、MODERN_HTML) |
30
+ | `name` | string | 应用显示名称 |
31
+ | `description` | string | 应用功能说明 |
32
+ | `icon_url` | string | 应用图标 URL |
33
+ | `created_at` | string | 创建时间(ISO 8601 UTC) |
34
+ | `updated_at` | string | 最后更新时间(ISO 8601 UTC) |
35
+ | `is_published` | boolean | 是否已发布 |
36
+
37
+ - pretty 输出展示核心字段:`app_id`、`app_type`、`name`、`is_published`、`updated_at`。
38
+ - `is_published=true` 只代表应用历史上有发布版本,不代表最新代码已部署。
39
+
40
+ ## Agent 规则
41
+
42
+ - 用户已有 `app_id` 想查看详情时用 `+get`;只有应用名时用 `+list --keyword`。
43
+ - 不要把 `cli_` 开头的飞书应用 ID 传给 `+get`,只接受 `app_` 开头的应用 ID。
@@ -23,8 +23,13 @@ lark-cli apps +html-publish --app-id app_xxx --path ./index.html --dry-run
23
23
 
24
24
  ## 输出契约
25
25
 
26
- - 成功默认 JSON envelope 只关心 `data.url`;这是本轮 HTML 发布后的发布态访问链接。
27
- - pretty 输出为 `url: <url>`,适合人看;自动化取字段用 JSON 或 `--jq '.data.url'`。
26
+ 根据应用类型,输出字段不同:
27
+
28
+ - **静态 HTML 应用**:`data.url` 是本轮发布后的访问链接,一步完成发布。
29
+ - **其他 HTML 应用**:`data.release_id` 是发布标识,命令内部已完成产物上传和发布创建。用 `+release-get --app-id <app_id> --release-id <release_id>` 轮询发布状态直到 `finished`。
30
+
31
+ 判断走哪条路径:有 `url` 字段说明已直接发布完成;有 `release_id` 字段说明需要用 `+release-get` 轮询。
32
+
28
33
  - 业务失败如构建失败、应用不存在通常带 `error.hint`;优先转述 hint。网络/服务端失败则建议稍后重试。
29
34
 
30
35
  ## 链接边界
@@ -10,7 +10,6 @@
10
10
 
11
11
  - 必填:`--app-id`。
12
12
  - 可选:`--dir`,clone 目标目录;省略时默认 `./<app-id>`。
13
- - 可选:`--template`,空仓库脚手架模板;省略时当前回退 `nestjs-react-fullstack`。
14
13
  - 固定 checkout 分支:`sprint/default`。
15
14
  - `+init` 会初始化 Git 凭证、clone 仓库、切到工作分支并生成/同步本地项目。
16
15
 
@@ -18,7 +17,7 @@
18
17
 
19
18
  ```bash
20
19
  lark-cli apps +init --app-id app_xxx --dir ./my-app
21
- lark-cli apps +init --app-id app_xxx --dir /absolute/path/my-app --template nestjs-react-fullstack
20
+ lark-cli apps +init --app-id app_xxx --dir /absolute/path/my-app
22
21
  lark-cli apps +init --app-id app_xxx --dir ./my-app --dry-run
23
22
  ```
24
23
 
@@ -76,4 +76,4 @@ CLI 提供三种互斥的 scope 表达方式:
76
76
  ## 不在本 skill 范围
77
77
 
78
78
  - OpenAPI spec 全量导出、实时日志 tail、Webhook 消费、多鉴权方式:本期不支持。
79
- - 身份选择、权限不足处理(`permission_violations`→`console_url`)、exit-10 审批、通用"禁输出密钥"红线、高风险操作通用框架:见 [`../lark-shared/SKILL.md`](../lark-shared/SKILL.md),不在此重复。
79
+ - 身份选择、权限不足处理(`missing_scopes`→`console_url`)、exit-10 审批、通用"禁输出密钥"红线、高风险操作通用框架:见 [`../lark-shared/SKILL.md`](../lark-shared/SKILL.md),不在此重复。
@@ -21,8 +21,10 @@ lark-cli apps +release-create --app-id app_xxx --branch sprint/default --dry-run
21
21
 
22
22
  ## 输出契约
23
23
 
24
- - 成功读取 `data.release_id` 和 `data.status`;`release_id` 是后续 `+release-get` 的入参。
24
+ - 成功读取 `data.release_id`、`data.status` 和 `data.sync`;`release_id` 是后续 `+release-get` 的入参。
25
+ - `sync=true` 表示同步部署(服务端等待部署完成后才返回),`sync=false` 或缺失表示异步部署。
25
26
  - `status=publishing` 表示发布仍在进行;继续用 `+release-get` 轮询,轮询间隔应该为 20s。应用发布平均耗时大约 2min,整体超时时间大约 5min。
27
+ - `status=finished` 表示部署已完成(同步部署时可能直接返回此状态)。
26
28
  - `+release-create` 返回 release 只代表发布已发起。只有 `+release-get` 对同一个 `release_id` 返回 `finished` 后,才能说本轮最新版本已部署。
27
29
 
28
30
  ## Agent 规则
@@ -85,7 +85,7 @@ metadata:
85
85
  ## 身份与权限降级
86
86
 
87
87
  - 默认显式使用 `--as user` 操作用户资源;只有用户明确要求应用身份时,才直接用 `--as bot`。
88
- - user 身份报 scope/授权不足,或错误中包含 `permission_violations` / `hint`,先转 `lark-shared` 做用户授权恢复,不要直接降级 bot。
88
+ - user 身份报 scope/授权不足,或错误中包含 `missing_scopes` / `hint`,先转 `lark-shared` 做用户授权恢复,不要直接降级 bot。
89
89
  - user 身份报资源级无访问且无授权恢复提示时,才可用 `--as bot` 重试一次;bot 仍失败就停止重试并按权限错误处理。
90
90
  - `91403` 或明确不可访问错误不要循环换身份重试。
91
91
  - `+base-create` / `+base-copy` 若用 bot 身份执行,关注返回中的 `permission_grant`,并把用户是否可打开新 Base 告知用户。
@@ -98,21 +98,21 @@ lark-cli base +dashboard-block-get \
98
98
 
99
99
  ## 返回结构总览
100
100
 
101
- 服务端响应外层仍然是标准 OpenAPI 包装:
101
+ CLI 成功输出使用标准 `{ok, identity, data}` 信封:
102
102
 
103
103
  ```json
104
104
  {
105
- "code": 0,
106
- "msg": "success",
105
+ "ok": true,
106
+ "identity": "user",
107
107
  "data": {
108
- "dimensions": [...],
109
- "measures": [...],
110
- "main_data": [...]
108
+ "dimensions": [],
109
+ "measures": [],
110
+ "main_data": []
111
111
  }
112
112
  }
113
113
  ```
114
114
 
115
- 其中 `data` 就是 CLI 图表协议本体。不同图表类型的 `data` 结构略有不同:
115
+ 其中 `identity` 是本次调用实际使用的身份,`data` 是 CLI 图表协议本体。不同图表类型的 `data` 结构略有不同:
116
116
 
117
117
  | 图表类型 | 一定有 | 可能有 |
118
118
  |----------|--------|--------|
@@ -63,6 +63,7 @@ lark-cli calendar event.attendees create \
63
63
  - 时间参数是 **Unix 秒字符串**(非 ISO 8601)。
64
64
  - 全天日程的开始日期和结束日期必须分别是日程开始的第一天和结束的最后一天;单日全天日程两者相同。
65
65
  - 手动拆成“创建日程 + 添加参会人”两步时,若第二步失败,建议删除刚创建的空日程,避免遗留无参会人的日程。
66
+ - 设置会议 owner:`+create` 不支持,需用完整 API 命令在 `vchat.meeting_settings.owner_id` 中设置,且必须同时设置 `vchat.vc_type` 为 `vc`(代表该日程为 VC 视频会议)。仅当以应用(bot)身份在应用日历上操作时生效;owner 必须为用户身份(`ou_` open_id),不能为非用户或外部租户用户。
66
67
 
67
68
  ## 参会人类型
68
69
 
@@ -15,6 +15,7 @@ OKR block 可用 XML 格式完整表达。创建前先参考 [`lark-okr`](../../
15
15
  <okr-progress>
16
16
  <p>O 进展</p>
17
17
  <checkbox done="true">事项</checkbox>
18
+ <ul><li>列表项内可包含 <a href="https://example.com">链接</a></li></ul>
18
19
  </okr-progress>
19
20
  <okr-key-result key-result-id="KEY_RESULT_ID" status="risk" percent="60" score="80">
20
21
  <p>KR 描述</p>
@@ -31,4 +32,4 @@ OKR block 可用 XML 格式完整表达。创建前先参考 [`lark-okr`](../../
31
32
  - `okr-objective` / `okr-key-result`
32
33
  - 可更新 `status`、`percent`、`score`;`percent` / `score` 取值 0-100,`status` 取值 `unset`/`normal`/`risk`/`extended`。
33
34
  - 不可更新 objective 和 key-result 内容描述。
34
- - `okr-progress` 承载进展内容,支持更新。支持内嵌 `<p>`、`<checkbox>`、`<grid>`、`<img>`。
35
+ - `okr-progress` 承载进展内容,支持更新。直接子节点支持 `<p>`、`<checkbox>`、`<grid>`、`<img>`、`<source>`、`<ol>`、`<ul>`、`<h1>` 到 `<h9>`。
@@ -26,7 +26,9 @@ metadata:
26
26
  - 用户要**检查 / 治理文档权限、公开范围、链接分享、外部访问、复制下载权限、密级标签、owner 转移**,或要“权限风险报告、收紧权限、申请查看 / 编辑权限、转移 / 批量转移 owner”,必须先阅读 [`references/lark-drive-workflow.md`](references/lark-drive-workflow.md),再按其中 `Workflow Registry` 进入 [`permission_governance`](references/lark-drive-workflow-permission-governance.md) workflow。
27
27
  - 用户要**整理云盘 / 文件夹 / 文档库 / 知识库 / 个人文档库**,或要“盘点目录结构、找出未归档/临时/重复/空目录、生成整理方案”,必须先阅读 [`references/lark-drive-workflow.md`](references/lark-drive-workflow.md),再按其中 `Workflow Registry` 进入 [`knowledge_organize`](references/lark-drive-workflow-knowledge-organize.md) workflow。默认只生成方案;创建目录、移动资源、申请权限都必须单独确认。
28
28
  - 用户要**搜文档 / Wiki / 电子表格 / 多维表格 / 云空间(云盘/云存储)对象**,优先使用 `lark-cli drive +search`。自然语言里"最近我编辑过的"、"我创建的"(→ `--created-by-me`,原始创建者语义)、"我负责/owner 的"(→ `--mine`,owner 语义)、"最近一周我打开过的 xxx"、"某人 owner 的 docx" 等直接映射到扁平 flag,避免手写嵌套 JSON。
29
- - 用户要**根据文档评论定位正文位置**,例如 根据评论 review 文档、根据评论内容回看文档、区分多处相同引用文本时,对于 docx 类型(`file_type=docx`)的文档支持通过 `need_relation=true` 返回评论位置,其他类型暂不支持,具体用法需要先阅读 [`references/lark-drive-comment-location.md`](references/lark-drive-comment-location.md) 了解。
29
+ - 用户要**获取文档评论列表**时,优先使用 `lark-cli drive +list-comments --url '<url>'`,不要优先手写 `drive file.comments list`;支持妙搭 apps 的 `/page/<token>` URL;具体使用方式先阅读 [`references/lark-drive-list-comments.md`](references/lark-drive-list-comments.md)。
30
+ - 妙搭 apps 评论场景:除新增全文/局部评论不支持外,评论列表、批量查询、解决/恢复、回复创建/读取/更新/删除、reaction 添加/删除等评论管理能力已支持;使用原生命令时文档类型传 `apps`(`file_type=apps`),裸 token 调 shortcut 时传 `--type apps`。
31
+ - 用户要**根据文档评论定位正文位置**,例如 根据评论 review 文档、根据评论内容回看文档、区分多处相同引用文本时,对于 docx 类型(`file_type=docx`)的文档支持通过 `drive +list-comments --need-relation` 返回评论位置,其他类型会静默忽略该参数;具体用法需要先阅读 [`references/lark-drive-comment-location.md`](references/lark-drive-comment-location.md) 了解。
30
32
  - 用户给出 doubao.com 的云空间资源 URL/token,或明确提到豆包里的 file/folder/docx/sheet/bitable/wiki 资源时,仍按资源类型、URL 路径和 token 路由到本 skill;不要因为域名不是飞书而回退到 WebFetch。
31
33
  - 用户要把本地 `.xlsx` / `.csv` / `.base` 导入成 Base / 多维表格 / bitable,第一步必须使用 `lark-cli drive +import --type bitable`。
32
34
  - 用户要把本地 `.md` / `.docx` / `.doc` / `.txt` / `.html` 导入成在线文档,使用 `lark-cli drive +import --type docx`。
@@ -39,6 +41,7 @@ metadata:
39
41
  - 用户要在云空间(云盘/云存储)里新建文件夹,优先使用 `lark-cli drive +create-folder`。
40
42
  - 用户要查看某个文件有哪些可下载预览格式,或想下载 PDF / HTML / 文本 / 图片等预览产物,使用 `lark-cli drive +preview`。
41
43
  - 用户要获取某个文件的封面图,优先使用 `lark-cli drive +cover`;先 `--list-only` 看规格,再选 `--spec` 下载。
44
+ - 用户要导出云文档时,优先使用 `lark-cli drive +export --url '<文档 URL>' --file-extension <格式>`;详细参数、Wiki token 和错误码处理见 [`references/lark-drive-export.md`](references/lark-drive-export.md)。
42
45
  - 用户要把本地文件上传到知识库 / 文档库里的某个 wiki 节点下时,仍然使用 `lark-cli drive +upload --wiki-token <wiki_token>`;不要误切到 `wiki` 域命令。
43
46
  - `lark-base` 只负责导入完成后的 Base 内部操作(表、字段、记录、视图),不要在“本地文件 -> Base”这一步提前切到 `lark-base`。
44
47
  - 用户给的是 wiki URL / token,且后续还没明确底层资源类型时,先用 `lark-cli drive +inspect` 解包;`+inspect` 失败后不要自动切到别的写接口继续尝试,先按错误提示处理权限、scope 或链接问题。
@@ -61,6 +64,7 @@ metadata:
61
64
  | `/doc/` | `https://example.larksuite.com/doc/doccnxxxxxxxxx` | `file_token` | URL 路径中的 token 直接作为 `file_token` 使用 |
62
65
  | `/wiki/` | `https://example.larksuite.com/wiki/wikcnxxxxxxxxx` | `wiki_token` | 不能直接当底层 `file_token`;优先用 `drive +inspect` 解包获取 `obj_token` |
63
66
  | `/sheets/` | `https://example.larksuite.com/sheets/shtcnxxxxxxxxx` | `file_token` | URL 路径中的 token 直接作为 `file_token` 使用 |
67
+ | `/page/` | `https://example.feishu.cn/page/N1BWmMrqndT5ZcamAIBcnvDLnOf/` | apps token | 妙搭 apps 类型;用于评论列表时直接作为 `file_token`,`file_type=apps` |
64
68
  | `/drive/folder/` | `https://example.larksuite.com/drive/folder/fldcnxxxx` | `folder_token` | URL 路径中的 token 作为文件夹 token 使用 |
65
69
 
66
70
  ### Wiki 链接特殊处理
@@ -80,13 +84,14 @@ lark-cli drive +inspect --url 'https://xxx.feishu.cn/wiki/wikcnXXX'
80
84
  | 添加全文评论 | `file_token` | 不传 `--block-id` 时,`drive +add-comment` 默认创建全文评论;支持 `docx`、旧版 `doc` URL、白名单扩展名的 Drive file,以及最终解析为 `doc`/`docx`/`file` 的 wiki URL |
81
85
  | 下载文件 | `file_token` | 从文件 URL 中直接提取 |
82
86
  | 上传文件 | `folder_token` / `wiki_node_token` | 目标位置的 token |
83
- | 列出文档评论 | `file_token` | 同添加评论 |
87
+ | 列出文档评论 | URL 或 `file_token` | 优先使用 `drive +list-comments --url '<url>'`;wiki URL/token 会自动解析到底层真实 token/type;妙搭 apps URL 使用 `/page/<token>` |
84
88
 
85
89
  ### 评论能力入口
86
90
 
87
91
  - 添加评论优先使用 [`+add-comment`](references/lark-drive-add-comment.md):review / 审阅 / 校对场景默认尽量创建局部评论,不要把多个可定位问题合并为一条全文评论。
92
+ - 获取评论列表优先使用 [`+list-comments`](references/lark-drive-list-comments.md):推荐传 `--url`,支持 wiki 自动解包;参数细节见 reference。
88
93
  - 评论查询、统计、排序、回复限制,先读 [`lark-drive-comments-guide.md`](references/lark-drive-comments-guide.md)。
89
- - 需要根据评论定位正文位置时,先确认目标是 `file_type=docx`,再读 [`lark-drive-comment-location.md`](references/lark-drive-comment-location.md);其他文档类型暂不支持返回定位字段。
94
+ - 需要根据评论定位正文位置时,先确认目标是 `file_type=docx`,再读 [`lark-drive-comment-location.md`](references/lark-drive-comment-location.md),并使用 `drive +list-comments --need-relation`;其他文档类型会静默忽略该参数。
90
95
  - reaction / 表情相关操作先读 [`lark-drive-reactions.md`](references/lark-drive-reactions.md);只有用户明确需要 reaction 信息时才带 `need_reaction=true`。
91
96
  - `drive +add-comment` 的 `--content` 需要传 `reply_elements` JSON 数组字符串,例如 `--content '[{"type":"text","text":"正文"}]'`。
92
97
  - `slides` 评论要求显式传 `--block-id <slide-block-type>!<xml-id>`;CLI 会将其拆分后写入 `anchor.block_id` 和 `anchor.slide_block_type`。其中 `<xml-id>` 是 PPT XML 协议中的元素 `id`;不支持 `--selection-with-ellipsis` 和 `--full-comment`。
@@ -104,7 +109,7 @@ lark-cli drive +inspect --url 'https://xxx.feishu.cn/wiki/wikcnXXX'
104
109
  |----------|------|----------|
105
110
  | `not exist` | 使用了错误的 token | 检查 token 类型,wiki 链接必须先查询获取 `obj_token` |
106
111
  | `permission denied` | 没有相关操作权限 | 引导用户检查当前身份对文档/文件是否有相应操作权限;如果需要,可以授予相应权限 |
107
- | `invalid file_type` | file_type 参数错误 | 根据 `obj_type` 传入正确的 file_type(docx/doc/sheet/slides/bitable) |
112
+ | `invalid file_type` | file_type 参数错误 | 根据 `obj_type` 传入正确的 file_type(docx/doc/sheet/slides/bitable/apps) |
108
113
  | `232140101` / `232140100` / `233523001`(常见于 `drive +import` 的 `job_error_msg`) | 同一位置下存在并发导入 / 创建操作 | 批量导入到同一文件夹、根目录或同一 `--target-token` 时改为串行执行;每个失败项每次重试前等待几秒,总共最多重试 3 次,仍失败就停止并报告冲突 |
109
114
 
110
115
  ### 权限能力入口
@@ -139,6 +144,7 @@ Shortcut 是对常用操作的高级封装(`lark-cli drive +<verb> [flags]`)
139
144
  | [`+push`](references/lark-drive-push.md) | 将本地目录推送到 Drive 文件夹,支持 skip / smart / overwrite 与确认后删除远端。 |
140
145
  | [`+create-shortcut`](references/lark-drive-create-shortcut.md) | 在另一个文件夹里创建现有 Drive 文件的快捷方式。 |
141
146
  | [`+add-comment`](references/lark-drive-add-comment.md) | 给 doc/docx/file/sheet/slides/base(bitable) 添加评论,也支持解析到这些类型的 wiki URL;评论统计、回复和 reaction 细则见 [`lark-drive-comments-guide.md`](references/lark-drive-comments-guide.md)。 |
147
+ | [`+list-comments`](references/lark-drive-list-comments.md) | 获取 doc/docx/sheet/file/slides/base(bitable)/apps 评论列表;优先传 URL,支持 wiki 自动解包和妙搭 `/page/<token>` URL。 |
142
148
  | [`+export`](references/lark-drive-export.md) | 将 doc/docx/sheet/bitable/slides 导出为本地文件。 |
143
149
  | [`+export-download`](references/lark-drive-export-download.md) | 根据导出产物的 file_token 下载文件。 |
144
150
  | [`+import`](references/lark-drive-import.md) | 将本地文件导入为飞书在线文档、表格、多维表格或幻灯片。 |
@@ -1,15 +1,27 @@
1
1
  # 文档评论定位字段
2
2
 
3
- 当用户需要根据评论定位文档正文位置、对文档做 review、区分多处相同引用文本,或把评论落点映射到 `docs +fetch --detail with-ids` 的内容时,docx 文档的评论查询必须带 `need_relation=true`。
3
+ 当用户需要根据评论定位文档正文位置、对文档做 review、区分多处相同引用文本,或把评论落点映射到 `docs +fetch --detail with-ids` 的内容时,优先使用 `drive +list-comments --need-relation` 查询 docx 评论位置。
4
4
 
5
5
  ## 适用范围
6
6
 
7
7
  - 当前只有 `file_type=docx` 支持通过 `need_relation=true` 查询评论的位置,并返回可用于定位正文 block 的 `relation`、`parent_type`、`parent_token` 等字段。
8
- - 其他文件类型暂不支持通过 `need_relation` 查询评论位置。遇到 sheet、bitable、slides、普通文件等类型的评论时,不要承诺可以用 `need_relation` 精确定位正文位置,应退回普通评论字段、对应资源能力下钻或人工确认。
8
+ - `drive +list-comments` 会在目标不是 docx 时静默忽略 `--need-relation`,避免把无效参数传给 OpenAPI。遇到 sheet、bitable、slides、普通文件等类型的评论时,不要承诺可以用 `need_relation` 精确定位正文位置,应退回普通评论字段、对应资源能力下钻或人工确认。
9
9
 
10
10
  ## 调用方式
11
11
 
12
- 分页列出评论时,把 `need_relation` 放在 query params:
12
+ 分页列出评论时,优先传 URL;Wiki URL / Wiki token 会自动解析到底层真实 token/type:
13
+
14
+ ```bash
15
+ lark-cli drive +list-comments --url '<docx_or_wiki_url>' --need-relation
16
+ ```
17
+
18
+ 如果只有 Wiki token,显式传 `--type wiki`:
19
+
20
+ ```bash
21
+ lark-cli drive +list-comments --token '<wiki_token>' --type wiki --need-relation
22
+ ```
23
+
24
+ 只有在需要未被 shortcut 暴露的底层参数时,才直接调用 raw OpenAPI。此时把 `need_relation` 放在 query params:
13
25
 
14
26
  ```bash
15
27
  lark-cli drive file.comments list \
@@ -126,7 +138,7 @@ lark-cli docs +fetch --doc '<doc_token_or_url>' --detail with-ids
126
138
  ## 定位流程
127
139
 
128
140
  1. 确认目标是 `file_type=docx`;只有 docx 文档支持通过 `need_relation` 查询评论位置。
129
- 2. 用 `drive file.comments list` 或 `drive file.comments batch_query` 获取评论,并带 `need_relation=true`。
141
+ 2. 用 `drive +list-comments --need-relation` 获取评论;已知评论 ID 且需要批量查询时,可用 `drive file.comments batch_query` 并带 `need_relation=true`。raw `drive file.comments list` 仅作为低层参数兜底。
130
142
  3. 用 `docs +fetch --detail with-ids` 获取文档内容。
131
143
  4. 对每条评论先看 `relation`:
132
144
  - 如果存在 `relation.relation`,解析这个 JSON 字符串。
@@ -1,6 +1,6 @@
1
1
  # Drive 评论查询、统计与回复指南
2
2
 
3
- > 前置条件:先阅读 [`../SKILL.md`](../SKILL.md) 的“评论能力入口”,添加评论参数细节见 [`lark-drive-add-comment.md`](lark-drive-add-comment.md),reaction 见 [`lark-drive-reactions.md`](lark-drive-reactions.md)。
3
+ > 前置条件:先阅读 [`../SKILL.md`](../SKILL.md) 的“评论能力入口”,添加评论参数细节见 [`lark-drive-add-comment.md`](lark-drive-add-comment.md),获取评论列表优先使用 [`lark-drive-list-comments.md`](lark-drive-list-comments.md),reaction 见 [`lark-drive-reactions.md`](lark-drive-reactions.md)。
4
4
 
5
5
  ## 评论模式
6
6
 
@@ -16,14 +16,21 @@
16
16
 
17
17
  ## 查询默认口径
18
18
 
19
- `drive file.comments list` 默认必须传 `is_solved:false`,即仅查询未解决评论。即使用户说“所有评论”“全部评论”“把评论都列出来”,只要没有明确提到要包含已解决评论,仍然按默认口径查询未解决评论。仅当用户明确要求包含已解决评论时,才可省略 `is_solved` 参数。
19
+ 优先使用 `drive +list-comments`,不要优先手写 `drive file.comments list`。shortcut 默认 `--solved-status false`,即仅查询未解决评论。即使用户说“所有评论”“全部评论”“把评论都列出来”,只要没有明确提到包含已解决评论,仍然按默认口径查询未解决评论;仅当用户明确要求包含已解决评论时,才传 `--solved-status all`。只查已解决评论时传 `--solved-status true`。
20
20
 
21
21
  ```bash
22
22
  # 默认查询:仅未解决评论
23
- lark-cli drive file.comments list --params '{"file_token":"xxx","file_type":"docx","is_solved":false}'
23
+ lark-cli drive +list-comments --url '<DOC_URL>'
24
+
25
+ # 全部评论:包含已解决和未解决
26
+ lark-cli drive +list-comments --url '<DOC_URL>' --solved-status all
27
+
28
+ # 已解决评论
29
+ lark-cli drive +list-comments --url '<DOC_URL>' --solved-status true
30
+
31
+ # 裸 wiki token
32
+ lark-cli drive +list-comments --token '<WIKI_TOKEN>' --type wiki
24
33
 
25
- # 包含已解决评论:仅当用户明确要求时使用
26
- lark-cli drive file.comments list --params '{"file_token":"xxx","file_type":"docx"}'
27
34
  ```
28
35
 
29
36
  ## 评论卡片与统计
@@ -53,12 +60,13 @@ lark-cli drive file.comments list --params '{"file_token":"xxx","file_type":"doc
53
60
  ## batch_query 与 list
54
61
 
55
62
  - `drive file.comments batch_query` 用于已知评论 ID 后的批量查询,需要传入具体评论 ID 列表。
56
- - `drive file.comments list` 用于分页获取评论列表,适合统计评论总数、遍历所有评论、获取最新或最后 N 条评论等场景。
63
+ - `drive +list-comments` 用于分页获取评论列表;如果要统计全量评论数、遍历包含已解决评论在内的所有评论、获取全量最新评论或最后 N 条评论,请先传 `--solved-status all` 并拉完所有分页。它会处理 URL、wiki token 和 token/type 匹配问题。
64
+ - `drive file.comments list` 是原生命令。需要 shortcut 未暴露的字段时才使用。
57
65
 
58
66
  ## 评论定位字段
59
67
 
60
- - 需要根据评论定位到文档正文位置时(例如根据评论 review 文档、区分多处相同引用文本、把评论落点映射到 `docs +fetch` 的 block),先确认目标是 `file_type=docx`,再阅读 [`lark-drive-comment-location.md`](lark-drive-comment-location.md)。
61
- - 其他文档类型暂不支持返回定位字段。
68
+ - 需要根据评论定位到文档正文位置时(例如根据评论 review 文档、区分多处相同引用文本、把评论落点映射到 `docs +fetch` 的 block),先确认目标是 `file_type=docx`,再阅读 [`lark-drive-comment-location.md`](lark-drive-comment-location.md),并使用 `drive +list-comments --need-relation`。
69
+ - `--need-relation` 仅 docx 生效;其他文档类型会静默忽略。
62
70
 
63
71
  ## 原生 API
64
72