@amaster.ai/pi-lark 0.1.2-beta.40 → 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 (122) hide show
  1. package/package.json +2 -2
  2. package/skills/lark-apps/SKILL.md +15 -3
  3. package/skills/lark-apps/references/lark-apps-automation.md +164 -0
  4. package/skills/lark-apps/references/lark-apps-db-execute.md +1 -1
  5. package/skills/lark-apps/references/lark-apps-db.md +2 -2
  6. package/skills/lark-apps/references/lark-apps-get.md +43 -0
  7. package/skills/lark-apps/references/lark-apps-html-publish.md +7 -2
  8. package/skills/lark-apps/references/lark-apps-init.md +1 -2
  9. package/skills/lark-apps/references/lark-apps-openapi-key.md +1 -1
  10. package/skills/lark-apps/references/lark-apps-release-create.md +3 -1
  11. package/skills/lark-base/SKILL.md +1 -1
  12. package/skills/lark-base/references/lark-base-dashboard-block-get-data.md +7 -7
  13. package/skills/lark-calendar/SKILL.md +89 -31
  14. package/skills/lark-calendar/references/lark-calendar-create.md +8 -39
  15. package/skills/lark-calendar/references/lark-calendar-room-find.md +5 -9
  16. package/skills/lark-calendar/references/lark-calendar-rsvp.md +1 -5
  17. package/skills/lark-calendar/references/lark-calendar-schedule-clear-time.md +59 -0
  18. package/skills/lark-calendar/references/lark-calendar-schedule-fuzzy-time.md +88 -0
  19. package/skills/lark-calendar/references/lark-calendar-schedule-meeting.md +67 -210
  20. package/skills/lark-calendar/references/lark-calendar-suggestion.md +1 -5
  21. package/skills/lark-calendar/references/lark-calendar-update.md +2 -7
  22. package/skills/lark-doc/SKILL.md +1 -1
  23. package/skills/lark-doc/references/lark-doc-fetch.md +4 -2
  24. package/skills/lark-doc/references/lark-doc-mindnote.md +17 -2
  25. package/skills/lark-doc/references/lark-doc-whiteboard.md +4 -0
  26. package/skills/lark-doc/references/lark-doc-xml-extended-blocks.md +35 -0
  27. package/skills/lark-doc/references/lark-doc-xml.md +3 -2
  28. package/skills/lark-drive/SKILL.md +17 -7
  29. package/skills/lark-drive/references/lark-drive-comment-location.md +16 -4
  30. package/skills/lark-drive/references/lark-drive-comments-guide.md +16 -8
  31. package/skills/lark-drive/references/lark-drive-delete.md +12 -0
  32. package/skills/lark-drive/references/lark-drive-export.md +39 -10
  33. package/skills/lark-drive/references/lark-drive-files-list.md +27 -2
  34. package/skills/lark-drive/references/lark-drive-inspect.md +2 -0
  35. package/skills/lark-drive/references/lark-drive-list-comments.md +125 -0
  36. package/skills/lark-drive/references/lark-drive-member-add.md +1 -1
  37. package/skills/lark-drive/references/lark-drive-permission-guide.md +12 -0
  38. package/skills/lark-drive/references/lark-drive-pull.md +3 -3
  39. package/skills/lark-drive/references/lark-drive-push.md +33 -6
  40. package/skills/lark-drive/references/lark-drive-status.md +12 -14
  41. package/skills/lark-drive/references/lark-drive-workflow-knowledge-organize.md +26 -20
  42. package/skills/lark-drive/references/lark-drive-workflow.md +2 -1
  43. package/skills/lark-im/SKILL.md +5 -4
  44. package/skills/lark-im/references/lark-im-messages-reply.md +1 -1
  45. package/skills/lark-im/references/lark-im-messages-send.md +1 -1
  46. package/skills/lark-mail/SKILL.md +12 -9
  47. package/skills/lark-mail/references/lark-mail-forward.md +1 -1
  48. package/skills/lark-mail/references/lark-mail-message-modify.md +48 -0
  49. package/skills/lark-mail/references/lark-mail-message-trash.md +41 -0
  50. package/skills/lark-mail/references/lark-mail-reply-all.md +1 -1
  51. package/skills/lark-mail/references/lark-mail-reply.md +1 -1
  52. package/skills/lark-mail/references/lark-mail-watch.md +1 -1
  53. package/skills/lark-markdown/SKILL.md +3 -2
  54. package/skills/lark-markdown/references/lark-markdown-create.md +22 -2
  55. package/skills/lark-minutes/SKILL.md +19 -4
  56. package/skills/lark-minutes/references/lark-minutes-download.md +0 -2
  57. package/skills/lark-minutes/references/lark-minutes-search.md +0 -2
  58. package/skills/lark-minutes/references/lark-minutes-speaker-replace.md +0 -2
  59. package/skills/lark-minutes/references/lark-minutes-summary.md +0 -2
  60. package/skills/lark-minutes/references/lark-minutes-todo.md +2 -4
  61. package/skills/lark-minutes/references/lark-minutes-update.md +0 -2
  62. package/skills/lark-minutes/references/lark-minutes-upload.md +10 -10
  63. package/skills/lark-shared/SKILL.md +26 -8
  64. package/skills/lark-sheets/SKILL.md +98 -29
  65. package/skills/lark-sheets/references/lark-sheets-batch-update.md +18 -9
  66. package/skills/lark-sheets/references/lark-sheets-changeset.md +105 -0
  67. package/skills/lark-sheets/references/lark-sheets-chart.md +4 -2
  68. package/skills/lark-sheets/references/lark-sheets-conditional-format.md +2 -0
  69. package/skills/lark-sheets/references/lark-sheets-filter-view.md +1 -1
  70. package/skills/lark-sheets/references/lark-sheets-float-image.md +6 -6
  71. package/skills/lark-sheets/references/lark-sheets-formula-translation.md +12 -3
  72. package/skills/lark-sheets/references/lark-sheets-formula-verify.md +77 -0
  73. package/skills/lark-sheets/references/lark-sheets-history.md +93 -0
  74. package/skills/lark-sheets/references/lark-sheets-pivot-table.md +7 -2
  75. package/skills/lark-sheets/references/lark-sheets-range-operations.md +44 -14
  76. package/skills/lark-sheets/references/lark-sheets-read-data.md +3 -3
  77. package/skills/lark-sheets/references/lark-sheets-sheet-structure.md +4 -4
  78. package/skills/lark-sheets/references/lark-sheets-visual-standards.md +4 -4
  79. package/skills/lark-sheets/references/lark-sheets-workbook.md +29 -4
  80. package/skills/lark-sheets/references/lark-sheets-write-cells.md +21 -11
  81. package/skills/lark-slides/SKILL.md +29 -18
  82. package/skills/lark-slides/references/asset-planning.md +16 -5
  83. package/skills/lark-slides/references/examples.md +57 -227
  84. package/skills/lark-slides/references/iconpark.md +2 -2
  85. package/skills/lark-slides/references/lark-slides-create.md +21 -2
  86. package/skills/lark-slides/references/lark-slides-media-upload.md +0 -1
  87. package/skills/lark-slides/references/lark-slides-pptx-template-workflows.md +89 -0
  88. package/skills/lark-slides/references/lark-slides-replace-pages.md +1 -1
  89. package/skills/lark-slides/references/lark-slides-replace-slide.md +1 -1
  90. package/skills/lark-slides/references/lark-slides-screenshot.md +11 -8
  91. package/skills/lark-slides/references/lark-slides-whiteboard.md +31 -30
  92. package/skills/lark-slides/references/lark-slides-xml-get.md +100 -0
  93. package/skills/lark-slides/references/lark-slides-xml-presentation-slide-delete.md +9 -7
  94. package/skills/lark-slides/references/lark-slides-xml-presentation-slide-get.md +4 -4
  95. package/skills/lark-slides/references/lark-slides-xml-presentation-slide-replace.md +12 -10
  96. package/skills/lark-slides/references/lark-slides-xml-presentations-get.md +14 -13
  97. package/skills/lark-slides/references/planning-layer.md +32 -2
  98. package/skills/lark-slides/references/slides_chart_demo.xml +1 -0
  99. package/skills/lark-slides/references/slides_xml_schema_definition.xml +1 -1
  100. package/skills/lark-slides/references/troubleshooting.md +7 -25
  101. package/skills/lark-slides/references/validation-checklist.md +18 -9
  102. package/skills/lark-slides/references/visual-planning.md +4 -3
  103. package/skills/lark-slides/references/xml-format-guide.md +50 -1
  104. package/skills/lark-slides/references/xml-schema-quick-ref.md +7 -3
  105. package/skills/lark-slides/scripts/xml_text_overlap_lint.py +647 -52
  106. package/skills/lark-slides/scripts/xml_text_overlap_lint_test.py +529 -0
  107. package/skills/lark-task/SKILL.md +1 -0
  108. package/skills/lark-task/references/lark-task-create.md +14 -1
  109. package/skills/lark-vc/references/lark-vc-recording.md +0 -2
  110. package/skills/lark-vc-agent/SKILL.md +24 -14
  111. package/skills/lark-vc-agent/references/lark-vc-agent-meeting-events.md +65 -37
  112. package/skills/lark-vc-agent/references/lark-vc-agent-meeting-leave.md +1 -1
  113. package/skills/lark-vc-agent/references/lark-vc-agent-meeting-list-active.md +8 -8
  114. package/skills/lark-whiteboard/references/lark-whiteboard-workflow.md +5 -2
  115. package/skills/lark-wiki/SKILL.md +4 -2
  116. package/skills/lark-wiki/references/lark-wiki-node-get.md +1 -1
  117. package/skills/lark-wiki/references/lark-wiki-node-list.md +9 -2
  118. package/skills/lark-calendar/references/lark-calendar-agenda.md +0 -78
  119. package/skills/lark-calendar/references/lark-calendar-freebusy.md +0 -124
  120. package/skills/lark-calendar/references/lark-calendar-search-event.md +0 -29
  121. package/skills/lark-sheets/references/lark-sheets-core-operations.md +0 -103
  122. 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.40",
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.40"
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"]
@@ -12,6 +12,16 @@ metadata:
12
12
 
13
13
  妙搭应用属于用户资产。默认用 `--as user`;认证、scope、exit-10、高风险确认、`_notice` 等通用处理只读 [`../lark-shared/SKILL.md`](../lark-shared/SKILL.md),不要在本 skill 里复制。妙搭应用有三条开发路径:**本地全栈**(拉源码本地写)/ **HTML 托管**(发布静态产物)/ **云端会话**(妙搭 AI 生成)。
14
14
 
15
+ ## 身份与一次性授权
16
+
17
+ 妙搭应用是用户的个人资产,统一 `--as user`(见开头)。**首次操作前先一次性把本域 scope 全拿到**,避免每条命令首次跑都触发新一轮授权,或未授权直接打到 openapi 导致服务端报错:
18
+
19
+ ```bash
20
+ lark-cli auth login --domain apps
21
+ ```
22
+
23
+ 因缺权限失败(`error.subtype == "missing_scope"`)时的通用处理见 [`../lark-shared/SKILL.md`](../lark-shared/SKILL.md),同样按 `--domain apps` 授权。
24
+
15
25
  ## 意图路由
16
26
 
17
27
  按具体操作查命令(开发路径先用下方「选择开发路径」判定表定好再进来取命令):
@@ -20,6 +30,7 @@ metadata:
20
30
  |---|---|---|
21
31
  | 创建**新**应用资产、拿 app_id | `+create` | [`lark-apps-create.md`](references/lark-apps-create.md) |
22
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) |
23
34
  | 改应用名或描述 | `+update` | [`lark-apps-update.md`](references/lark-apps-update.md) |
24
35
  | 发布本地 `index.html` 或静态目录为可访问 URL | `+html-publish` | [`lark-apps-html-publish.md`](references/lark-apps-html-publish.md) |
25
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) |
@@ -33,6 +44,7 @@ metadata:
33
44
  | 设置或查看运行时可见范围 | `+access-scope-set`, `+access-scope-get` | 对应 access-scope reference |
34
45
  | 云端 Agent 生成/迭代应用(开发方式已定为云端后) | `+session-create` -> `+chat` -> `+session-get` | [`lark-apps-cloud-dev.md`](references/lark-apps-cloud-dev.md) |
35
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) |
36
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) |
37
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) |
38
50
 
@@ -68,8 +80,8 @@ metadata:
68
80
 
69
81
  ## 能力边界
70
82
 
71
- - lark-cli **不支持**配置应用的权限(应用内 RBAC、成员角色、协作者权限)/ 自动化。`+access-scope-*` 只管运行时可见范围(谁能打开应用),不是角色权限。
72
- - 用户要配置权限 / 自动化时,引导其使用开发态连接前往云端开发(妙搭 web)处理。
83
+ - lark-cli **不支持**配置应用的权限(应用内 RBAC、成员角色、协作者权限)。`+access-scope-*` 只管运行时可见范围(谁能打开应用),不是角色权限。
84
+ - 用户要配置权限时,引导其使用开发态链接前往云端开发(妙搭 web)处理。自动化触发器请用 `+automation-*`(见「意图路由」)。
73
85
 
74
86
  ## app_id 获取
75
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),不在此重复。
@@ -11,7 +11,7 @@
11
11
  - 必填:`--app-id`,以及 `--sql` / `--file` 二选一(互斥)。
12
12
  - `--sql`:内联 SQL 文本;传 `-` 时从 stdin 读。绝对路径文件经 stdin 传入:`--sql - < <absolute-path>`(shell 解析路径,CLI 仅接收内容)。
13
13
  - `--file`:`.sql` 文件路径,需为工作目录内的相对路径(如 `--file ./migration.sql`);绝对路径、或经 `..`/符号链接越出工作目录的路径会被拒绝。文件不在工作目录内时,改用 `--sql - < <文件路径>` 经 stdin 传入。
14
- - `--environment` 枚举:`dev` / `online`,**默认 `dev`**;操作线上库、或**未开启多环境的应用(其数据库在 `online`,没有 dev 分支)**时显式 `--environment online`。旧名 `--env` 已**移除**:传入会报 validation 错(提示改用 `--environment`),一律用 `--environment`。
14
+ - `--environment` 枚举:`dev` / `online`,**不传则由服务端按应用是否开启多环境自动选择(多环境→`dev`,未开启多环境→`online`)**;要固定环境就显式传 `--environment dev|online`。**未开启多环境的应用显式传 `--environment dev` 会报错(无 dev 分支)——这类应用不传 `--environment`(走 `online`)或显式 `--environment online`**。旧名 `--env` 已**移除**:传入会报 validation 错(提示改用 `--environment`),一律用 `--environment`。
15
15
  - risk 是 `high-risk-write`(SQL 可含 DML/DDL):任何执行都需 `--yes`,否则返回 `confirmation_required` / exit 10。`--dry-run` 预览不需要 `--yes`。
16
16
  - **不会自动为你包事务,事务边界需自己在 SQL 里控制**:多语句默认逐条独立提交,中间某条失败时前序语句已生效、不会回滚;若需要「要么全部成功、要么全部回滚」的原子性,请在 SQL 内显式写 `BEGIN … COMMIT`(详见下「Agent 规则」)。
17
17
 
@@ -28,7 +28,7 @@
28
28
 
29
29
  ## 约定(先读)
30
30
 
31
- - **环境 `--environment dev|online`(所有 db 命令统一默认 `dev`)**:看表、看结构、数据导入导出、变更追溯、审计、配额都按环境区分,写操作建议先在 `dev` 验。**注意:只有开启了多环境(`+db-env-create`)的应用才有 `dev` 分支;未开启多环境的应用其数据库在 `online`——对这类应用必须显式 `--environment online`,否则默认的 `dev` 分支不存在、会报错**。旧名 `--env` 已**移除**:传入会报 validation 错(提示改用 `--environment`),一律用 `--environment`。`+db-env-diff`/`+db-env-migrate` 是「dev→online 发布」语义、`+db-recovery-*` 作用于当前库,二者**没有** `--environment`。
31
+ - **环境 `--environment dev|online`(可省略)**:看表、看结构、数据导入导出、变更追溯、审计、配额都按环境区分。省略 `--environment` 时 CLI 不带该参数、由服务端按应用形态自动选分支——多环境应用走 `dev`、未开多环境的走 `online`;要固定环境就显式传。唯一会报错的组合:对未开多环境的应用显式传 `--environment dev`(无 `dev` 分支)。写操作建议先在 `dev` 验(仅多环境应用有 `dev`)。旧名 `--env` 已**移除**:传入会报 validation 错(提示改用 `--environment`),一律用 `--environment`。`+db-env-diff`/`+db-env-migrate` 是「dev→online 发布」语义,**没有** `--environment`。
32
32
  - **本地文件 / `--output` 用工作目录内相对路径**:导入 `--file ./orders.csv`、导出 `--output ./out.csv`;绝对路径、或经 `..`/符号链接越出工作目录的 `--output` 会被拒(validation / exit 2)。路径在别处先 `cd` 过去或改成相对路径。
33
33
  - **高危操作必须带 `--yes`**:`+db-env-create`、`+db-data-import`、`+db-env-migrate`、`+db-recovery-apply` 缺省会被确认关卡拦下;动手前先用对应的预览命令或 `--dry-run` 看清影响。
34
34
  - **时间参数按口语自然传**(`--since`/`--until`/`--target`),格式见末尾。
@@ -154,7 +154,7 @@ lark-cli apps +db-quota-get --app-id app_xxx --environment dev
154
154
 
155
155
  ## Agent 规则
156
156
 
157
- - 用户说「本地 / 开发库 / 调试库」优先 `--environment dev`,线上排查用 `--environment online`;数据面写操作(导入 / 审计开关)默认先在 `dev` 验再动 `online`。
157
+ - 用户说「本地 / 开发库 / 调试库」优先 `--environment dev`,线上排查用 `--environment online`;数据面写操作(导入 / 审计开关)建议先在 `dev` 验再动 `online`。**注意省略 `--environment` 时写操作会落到服务端选中的分支——单环境应用即 `online`(生产)**:不确定应用是否多环境时,写操作显式传 `--environment`;显式 `dev` 在单环境应用上会安全报错(无 dev 分支),正好当「是否多环境」的探针用。
158
158
  - 看表用 `+db-table-list`,看结构用 `+db-table-get`(要建表语句加 `--format pretty`);`+db-env-create` 仅用于存量单库拆多环境,新建的 full_stack 应用一般不需要。
159
159
  - 四个高危命令(`+db-env-create`、`+db-data-import`、`+db-env-migrate`、`+db-recovery-apply`)动手前先看清影响再带 `--yes`:发布 / 恢复先跑对应预览 `+db-env-diff` / `+db-recovery-diff`,导入无预览命令、可先 `--dry-run` 看请求或先在 `--environment dev` 验;不要静默追加 `--yes`,遇 confirmation_required(exit 10)按 lark-shared 协议向用户确认不可逆风险后再补 `--yes` 重试。
160
160
  - 导入 / 导出的本地路径用工作目录内相对路径;超大表导出会被行数 / 体积上限拒,改用 `+db-execute` 分批。
@@ -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
  |----------|--------|--------|
@@ -12,7 +12,7 @@ metadata:
12
12
 
13
13
  开始前先读 [`../lark-shared/SKILL.md`](../lark-shared/SKILL.md)(认证、权限处理)。
14
14
 
15
- **CRITICAL — 凡涉及预约日程/会议或查询/搜索会议室,第一步 MUST 读 [`references/lark-calendar-schedule-meeting.md`](references/lark-calendar-schedule-meeting.md)。禁止跳过此步直接调用 API 或 Shortcut!**
15
+ **CRITICAL — 凡涉及预约日程/会议室、调整时间或查询/搜索会议室,第一步 MUST 读 [`references/lark-calendar-schedule-meeting.md`](references/lark-calendar-schedule-meeting.md)。仅编辑字段(改标题/描述)或增删参会人(不涉及时间和会议室)时可跳过,直接读 [`references/lark-calendar-update.md`](references/lark-calendar-update.md)。**
16
16
 
17
17
  ## 身份
18
18
 
@@ -30,26 +30,80 @@ lark-cli calendar +agenda --as user
30
30
 
31
31
  | Shortcut | 说明 |
32
32
  |----------|------|
33
- | [`+agenda`](references/lark-calendar-agenda.md) | 查看日程安排(默认今天) |
34
- | [`+search-event`](references/lark-calendar-search-event.md) | 按关键词、时间范围和参会人搜索日程, 仅返回 日程ID/主题/时间等信息,详情需走 `events get` |
33
+ | `+agenda` | 查看日程安排(默认今天) |
35
34
  | [`+meeting`](references/lark-calendar-meeting.md) | 通过日程事件 ID 获取关联的视频会议信息(meeting_id、meeting_note),日程开过视频会议才会有meeting_id |
36
35
  | [`+create`](references/lark-calendar-create.md) | 创建日程并邀请参会人(ISO 8601 时间) |
37
36
  | [`+update`](references/lark-calendar-update.md) | 更新既有日程字段,或独立增量添加/移除参会人和会议室 |
38
- | [`+freebusy`](references/lark-calendar-freebusy.md) | 查询用户主日历的忙闲信息和 RSVP 状态 |
37
+ | `+freebusy` | 查询用户主日历的忙闲信息和 RSVP 状态(纯查询场景;预约场景走 `+suggestion`) |
39
38
  | [`+room-find`](references/lark-calendar-room-find.md) | 针对一个或多个**明确的**时间块查找可用会议室(无明确时间时禁止直接调用,需先走 +suggestion) |
40
39
  | [`+rsvp`](references/lark-calendar-rsvp.md) | 回复日程(接受/拒绝/待定) |
41
40
  | [`+suggestion`](references/lark-calendar-suggestion.md) | 根据非明确时间或一段时间范围,推荐多个可用时间块方案 |
42
41
 
42
+ ### `+get` — 单日程详情
43
+
44
+ 通过 `calendar_id` + `event_id` 获取**单个日程**详情。
45
+
46
+ ```bash
47
+ # calendar_id不传,默认primary
48
+ lark-cli calendar +get --calendar-id <calendar_id> --event-id <event_id>
49
+ ```
50
+
51
+ ### `+search-event` — 按关键词、时间范围和参会人搜索日程
52
+
53
+ 仅返回基础字段(`event_id`/`summary`/`start`/`end` 等),需要详情请走 `+get`。
54
+
55
+ ```bash
56
+ # query 按关键词 可选
57
+ # start/end 按时间范围(ISO 8601 或 YYYY-MM-DD)可选
58
+ # attendee-ids 按参会人(自动识别 ou_ 用户 / oc_ 群聊 / omm_ 会议室前缀)可选
59
+ # page-token 分页游标,用于继续翻页 可选
60
+ # page-size 每页数量,默认 30 可选
61
+ lark-cli calendar +search-event --query "周会" --start 2026-04-20 --end 2026-04-27 --attendee-ids "ou_user1,oc_chat1,omm_room1" --page-token <page_token> --page-size 30
62
+ ```
63
+
64
+ ### `+agenda` — 查看近期日程安排
65
+
66
+ 默认查询当天。结果应整理为按日期分组、按开始时间升序的易读时间线。
67
+
68
+ ```bash
69
+ # start/end 时间范围(ISO 8601 / YYYY-MM-DD / Unix 秒),均可选;默认当天
70
+ # calendar-id 日历 ID(默认primary)可选
71
+ lark-cli calendar +agenda --start 2026-03-10 --end 2026-03-17 --calendar-id <calendar_id>
72
+ ```
73
+
74
+ 注意:
75
+ - 已取消的日程自动过滤;无日程时直接告知"日程清空"。
76
+ - 时间范围超过 40 天会自动拆分查询并合并结果。
77
+
78
+ ### `+freebusy` — 查询主日历忙闲时段和 RSVP 状态
79
+
80
+ 仅返回忙碌时段起止时间,不含日程标题等隐私信息;其他订阅日历不在范围内。
81
+
82
+ ```bash
83
+ # start/end 时间范围(ISO 8601 / YYYY-MM-DD / Unix 秒),均可选;默认当天
84
+ # user-id 目标用户 open_id(ou_ 前缀)可选;默认当前登录用户,bot 身份必须显式指定
85
+ lark-cli calendar +freebusy --start 2026-03-11 --end 2026-03-12 --user-id ou_xxx
86
+ ```
87
+
88
+ 用法提示:
89
+ - **仅判断是否有空** → `+freebusy`;**需要日程详情** → `+agenda`。
90
+ - 检查多人可用性:分别调用并对比,找共同空闲。
91
+ - 预约/改约场景下,调用规则(参与人过多、含群组、来自 `+suggestion` 等)详见 [schedule-clear-time.md § 查询忙闲](references/lark-calendar-schedule-clear-time.md#2-查询忙闲)。
92
+
43
93
  ## 前置条件路由
44
94
 
45
95
  | 场景 | 前置要求 |
46
96
  |------|----------|
47
- | 预约日程/会议、查会议室 | 先读 [lark-calendar-schedule-meeting.md](references/lark-calendar-schedule-meeting.md) |
48
- | 编辑已有日程 | 先定位目标日程 `event_id` |
97
+ | 预约日程/会议、调整时间、查会议室 | 先读 [lark-calendar-schedule-meeting.md](references/lark-calendar-schedule-meeting.md) |
98
+ | 仅编辑字段(标题/描述)或增删参会人 | 先定位 `event_id`,再读 [lark-calendar-update.md](references/lark-calendar-update.md) |
99
+ | 编辑已有日程(涉及时间或会议室) | 先定位目标日程 `event_id`;若是重复性日程,必须定位到具体实例的 `event_id`(禁止使用原重复日程 ID) |
49
100
  | 编辑/删除重复性日程 | 先读 [重复性日程操作规范](references/lark-calendar-recurring.md),按操作范围(仅此次/全部/此次及后续)执行 |
50
- | 删除/修改后验证 | 等待 2 秒再查询(API 最终一致性),不要告知用户你等待了 |
51
101
  | 调用任何 Shortcut | 先读其对应 reference 文档 |
52
102
 
103
+ ## 写操作反馈
104
+
105
+ 创建、更新、删除、RSVP 等写操作完成后,直接基于命令返回结果反馈用户;不要为了“确认是否生效”主动发起二次查询。只有用户明确要求复查,或命令返回信息不足以回答用户问题时,才需要再查询。
106
+
53
107
  ## 核心概念
54
108
 
55
109
  - **日程实例(Instance)**:重复性日程展开后的具体时间实例。「仅此次」操作时使用具体实例的 `event_id`;「全部」或「此次及后续」操作时需对原重复性日程操作(使用原日程 `event_id`),并按需处理例外。
@@ -72,7 +126,8 @@ lark-cli calendar +agenda --as user
72
126
  | 按关键词搜索日程 | 本 skill(`+search-event`) |
73
127
  | 从日程获取关联的视频会议 ID 或用户绑定的会议纪要文档 | 本 skill(`+meeting`) |
74
128
  | 从日程进一步拿 AI 智能纪要 / 逐字稿 / 妙记产物 | 先 `+meeting` 取 `meeting_id`,再 [`vc +detail`](../lark-vc/references/lark-vc-detail.md) → [`note +detail`](../lark-note/references/lark-note-detail.md) / [`minutes +detail`](../lark-minutes/references/lark-minutes-detail.md) |
75
- | 预约/改约日程、添加/移除参会人、添加/更换会议室、调整时间 | 先判断新建 vs 编辑,再进入 [schedule-meeting 工作流](references/lark-calendar-schedule-meeting.md) |
129
+ | 预约/改约日程、调整时间、添加/更换会议室、查会议室 | 先判断新建 vs 编辑,再进入 [schedule-meeting 工作流](references/lark-calendar-schedule-meeting.md) |
130
+ | 仅编辑日程字段(标题/描述)或增删参会人(不涉及时间和会议室) | 先定位 `event_id`,再读 [+update](references/lark-calendar-update.md) 执行变更 |
76
131
  | 编辑/删除重复性日程(「改这个重复日程」「删掉后面的」「全部取消」等) | 先读 [重复性日程操作规范](references/lark-calendar-recurring.md),确认操作范围后执行 |
77
132
 
78
133
  ## 任务类型分流
@@ -90,7 +145,7 @@ lark-cli calendar +agenda --as user
90
145
 
91
146
  ## 会议室规则
92
147
 
93
- - 凡是"预定/查询/搜索可用会议室",都必须进入 [schedule-meeting 工作流](references/lark-calendar-schedule-meeting.md)。
148
+ - 凡是"预定/查询/搜索可用会议室",都必须进入 [schedule-meeting 工作流](references/lark-calendar-schedule-meeting.md),会议室参数规范详见 [+room-find](references/lark-calendar-room-find.md)。
94
149
  - `+room-find` 的时间输入必须是确定时间块,不能是时间区间搜索。
95
150
  - 用户仅要求"查会议室"但未提供明确时间时,必须先调用 `+suggestion` 获取可用时间块,再将时间块交给 `+room-find`。严禁猜测时间盲目调用。
96
151
  - 编辑已有日程时,"添加会议室"默认是增量语义,保留已有会议室;只有用户明确说"更换会议室""移除会议室"时才删除旧会议室。
@@ -98,42 +153,45 @@ lark-cli calendar +agenda --as user
98
153
  ## API Resources
99
154
 
100
155
  ```bash
156
+ # 通用调用格式
101
157
  lark-cli calendar <resource> <method> [flags]
102
- ```
103
158
 
104
- ### calendars
159
+ # 查询用户主日历
160
+ lark-cli calendar calendars primary
105
161
 
106
- - `create` — 创建共享日历
107
- - `delete` — 删除共享日历
108
- - `get` — 查询日历信息
109
- - `list` — 查询日历列表
110
- - `patch` — 更新日历信息
111
- - `primary` — 查询用户主日历
112
- - `search` — 搜索日历
162
+ # 获取日程分享链接
163
+ lark-cli calendar events share_info --calendar-id <calendar_id> --event-id <event_id>
164
+
165
+ # 删除日程
166
+ lark-cli calendar events delete --calendar-id <calendar_id> --event-id <event_id>
167
+ ```
113
168
 
114
- ### event.attendees
169
+ > `calendar_id` 可以直接传 `primary`,代表当前调用身份的主日历 ID。
115
170
 
116
- - `batch_delete` — 删除日程参与人
117
- - `create` — 添加日程参与人
118
- - `list` — 获取日程参与人列表
171
+ ### 查询资源的方法列表以及方法的使用方式
119
172
 
120
- ### events
173
+ - 列出某资源下的方法:`lark-cli calendar <resource> -h`
174
+ - 查看方法的cli flag:`lark-cli calendar <resource> <method> -h`
175
+ - 查看方法API参数:`lark-cli schema calendar.<resource>.<method>`
121
176
 
122
- - `create` — 创建日程
123
- - `delete` — 删除日程
124
- - `get` — 获取日程
125
- - `instance_view` — 查询日程视图
126
- - `patch` — 更新日程
127
- - `share_info` — 获取日程分享链接
177
+ `<resource>` 为 `calendars`(日历本身)/ `events`(日程)/ `event.attendees`(参与人)/ `freebusys`(忙闲)。例:`lark-cli schema calendar.events.delete`。
128
178
 
129
- ### freebusys
179
+ ## 常用其他域命令
130
180
 
131
- - `list` — 查询主日历日程忙闲信息
181
+ ```bash
182
+ # 搜索用户,更多参数详见 lark-contact
183
+ lark-cli contact +search-user --query <query> --as user
184
+
185
+ # 搜索群聊,更多参数详见 lark-im
186
+ lark-cli im +chat-search --query <query> --as user
187
+ ```
132
188
 
133
189
  ## 不在本 skill 范围
134
190
 
135
191
  - 查询过去的视频会议记录 → [lark-vc](../lark-vc/SKILL.md)
136
192
  - 待办任务管理 → [lark-task](../lark-task/SKILL.md)
193
+ - 通讯录 → [lark-contact](../lark-contact/SKILL.md)
194
+ - 即时通讯 → [lark-im](../lark-im/SKILL.md)
137
195
  - 会议室物理设施管理 → 管理员后台
138
196
 
139
197
  **注意(强制性):**