@amaster.ai/pi-lark 0.1.7 → 0.1.8
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.
- package/package.json +2 -2
- package/skills/lark-apps/SKILL.md +39 -6
- package/skills/lark-apps/references/lark-apps-cloud-dev.md +5 -4
- package/skills/lark-apps/references/lark-apps-create.md +6 -3
- package/skills/lark-apps/references/lark-apps-get.md +1 -1
- package/skills/lark-apps/references/lark-apps-list.md +1 -1
- package/skills/lark-apps/references/lark-apps-local-dev.md +27 -1
- package/skills/lark-apps/references/lark-apps-release-create.md +1 -1
- package/skills/lark-base/SKILL.md +14 -6
- package/skills/lark-base/references/lark-base-dashboard-block-get-data.md +17 -1
- package/skills/lark-base/references/lark-base-dashboard.md +17 -4
- package/skills/lark-base/references/lark-base-data-query-guide.md +8 -0
- package/skills/lark-base/references/lark-base-field-create.md +19 -8
- package/skills/lark-base/references/lark-base-field-json.md +5 -2
- package/skills/lark-calendar/SKILL.md +1 -1
- package/skills/lark-doc/SKILL.md +26 -61
- package/skills/lark-doc/references/genres/business-analysis.md +30 -0
- package/skills/lark-doc/references/genres/data-report.md +32 -0
- package/skills/lark-doc/references/genres/email.md +38 -0
- package/skills/lark-doc/references/genres/execution-plan.md +27 -0
- package/skills/lark-doc/references/genres/formal-doc.md +37 -0
- package/skills/lark-doc/references/genres/meeting-minutes.md +24 -0
- package/skills/lark-doc/references/genres/memo-brief.md +25 -0
- package/skills/lark-doc/references/genres/official-redhead.md +73 -0
- package/skills/lark-doc/references/genres/prd.md +26 -0
- package/skills/lark-doc/references/genres/proposal.md +24 -0
- package/skills/lark-doc/references/genres/research-report.md +32 -0
- package/skills/lark-doc/references/genres/retrospective.md +25 -0
- package/skills/lark-doc/references/genres/route-consumer.md +37 -0
- package/skills/lark-doc/references/genres/route-creative.md +36 -0
- package/skills/lark-doc/references/genres/route-knowledge.md +39 -0
- package/skills/lark-doc/references/genres/route-marketing.md +40 -0
- package/skills/lark-doc/references/genres/route-media.md +36 -0
- package/skills/lark-doc/references/genres/route-opinion.md +38 -0
- package/skills/lark-doc/references/genres/route-personal-brand.md +36 -0
- package/skills/lark-doc/references/genres/route-platform.md +9 -0
- package/skills/lark-doc/references/genres/route-report.md +10 -0
- package/skills/lark-doc/references/genres/route-workplace.md +17 -0
- package/skills/lark-doc/references/genres/sop-tutorial.md +41 -0
- package/skills/lark-doc/references/genres/technical-doc.md +39 -0
- package/skills/lark-doc/references/genres/wechat.md +39 -0
- package/skills/lark-doc/references/genres/weekly-report.md +24 -0
- package/skills/lark-doc/references/genres/white-paper.md +32 -0
- package/skills/lark-doc/references/genres/xiaohongshu.md +38 -0
- package/skills/lark-doc/references/lark-doc-create-workflow.md +121 -0
- package/skills/lark-doc/references/lark-doc-create.md +22 -48
- package/skills/lark-doc/references/lark-doc-fetch.md +75 -92
- package/skills/lark-doc/references/lark-doc-history.md +16 -15
- package/skills/lark-doc/references/lark-doc-md.md +5 -1
- package/skills/lark-doc/references/lark-doc-media-download.md +2 -1
- package/skills/lark-doc/references/lark-doc-script.md +76 -0
- package/skills/lark-doc/references/lark-doc-update.md +70 -222
- package/skills/lark-doc/references/lark-doc-whiteboard.md +5 -9
- package/skills/lark-doc/references/lark-doc-xml-extended-blocks.md +17 -12
- package/skills/lark-doc/references/lark-doc-xml.md +38 -167
- package/skills/lark-drive/SKILL.md +7 -5
- package/skills/lark-drive/references/lark-drive-apply-permission.md +1 -1
- package/skills/lark-drive/references/lark-drive-copy.md +87 -0
- package/skills/lark-drive/references/lark-drive-download.md +2 -1
- package/skills/lark-drive/references/lark-drive-export.md +3 -0
- package/skills/lark-drive/references/lark-drive-task-result.md +3 -0
- package/skills/lark-drive/references/lark-drive-update-title.md +78 -0
- package/skills/lark-event/SKILL.md +7 -4
- package/skills/lark-event/references/lark-event-vc.md +8 -2
- package/skills/lark-im/SKILL.md +8 -8
- package/skills/lark-im/references/lark-im-chat-list.md +9 -2
- package/skills/lark-im/references/lark-im-chat-members-list.md +7 -4
- package/skills/lark-im/references/lark-im-chat-messages-list.md +10 -3
- package/skills/lark-im/references/lark-im-chat-search.md +9 -2
- package/skills/lark-im/references/lark-im-feed-group-list-item.md +2 -2
- package/skills/lark-im/references/lark-im-feed-group-list.md +2 -2
- package/skills/lark-im/references/lark-im-feed-shortcut-list.md +1 -1
- package/skills/lark-im/references/lark-im-flag-list.md +2 -2
- package/skills/lark-im/references/lark-im-message-enrichment.md +1 -1
- package/skills/lark-im/references/lark-im-messages-resources-download.md +19 -25
- package/skills/lark-im/references/lark-im-messages-search.md +4 -5
- package/skills/lark-im/references/lark-im-threads-messages-list.md +8 -4
- package/skills/lark-mail/references/lark-mail-triage.md +19 -4
- package/skills/lark-minutes/SKILL.md +1 -1
- package/skills/lark-minutes/references/lark-minutes-search.md +6 -7
- package/skills/lark-shared/SKILL.md +3 -3
- package/skills/lark-sheets/SKILL.md +83 -82
- package/skills/lark-sheets/references/lark-sheets-batch-update.md +13 -58
- package/skills/lark-sheets/references/lark-sheets-chart.md +2 -1
- package/skills/lark-sheets/references/lark-sheets-conditional-format.md +1 -1
- package/skills/lark-sheets/references/lark-sheets-range-operations.md +5 -5
- package/skills/lark-sheets/references/lark-sheets-read-data.md +80 -6
- package/skills/lark-sheets/references/lark-sheets-sheet-structure.md +21 -10
- package/skills/lark-sheets/references/lark-sheets-styles-put.md +93 -0
- package/skills/lark-sheets/references/lark-sheets-visual-standards.md +2 -2
- package/skills/lark-sheets/references/lark-sheets-workbook.md +4 -3
- package/skills/lark-sheets/references/lark-sheets-write-cells.md +40 -12
- package/skills/lark-sheets/scripts/lark_detect_subtables.py +593 -0
- package/skills/lark-sheets/scripts/lark_inspect_workbook.py +188 -0
- package/skills/lark-sheets/scripts/lark_profile_table.py +614 -0
- package/skills/lark-sheets/scripts/lark_sheet_range.py +176 -0
- package/skills/lark-sheets/scripts/lark_sheet_read_cli.py +184 -0
- package/skills/lark-sheets/scripts/sheets_df.py +21 -3
- package/skills/lark-slides/SKILL.md +27 -44
- package/skills/lark-slides/references/lark-slides-add-slide.md +92 -0
- package/skills/lark-slides/references/lark-slides-create.md +77 -65
- package/skills/lark-slides/references/lark-slides-delete-slide.md +65 -0
- package/skills/lark-slides/references/lark-slides-edit-workflows.md +6 -7
- package/skills/lark-slides/references/lark-slides-media-upload.md +3 -25
- package/skills/lark-slides/references/lark-slides-replace-slide.md +22 -1
- package/skills/lark-slides/references/lark-slides-screenshot.md +31 -13
- package/skills/lark-slides/references/lark-slides-update-slide.md +146 -0
- package/skills/lark-slides/references/lark-slides-xml-presentations-get.md +31 -8
- package/skills/lark-slides/references/slides_chart_demo.xml +1 -2
- package/skills/lark-slides/references/slides_xml_schema_definition.xml +48 -4
- package/skills/lark-slides/references/troubleshooting.md +7 -8
- package/skills/lark-slides/references/validation-checklist.md +4 -4
- package/skills/lark-slides/references/xml-schema-quick-ref.md +23 -11
- package/skills/lark-slides/scripts/sxsd_validator.py +154 -10
- package/skills/lark-slides/scripts/xml_text_overlap_lint.py +360 -76
- package/skills/lark-slides/scripts/xml_text_overlap_lint_test.py +1138 -214
- package/skills/lark-whiteboard/SKILL.md +15 -8
- package/skills/lark-whiteboard/references/lark-whiteboard-export.md +4 -3
- package/skills/lark-whiteboard/references/lark-whiteboard-update.md +4 -4
- package/skills/lark-whiteboard/references/lark-whiteboard-workflow.md +19 -17
- package/skills/lark-whiteboard/routes/dsl.md +8 -2
- package/skills/lark-whiteboard/routes/mermaid.md +1 -1
- package/skills/lark-whiteboard/routes/svg-edit.md +5 -2
- package/skills/lark-whiteboard/routes/svg.md +3 -1
- package/skills/lark-whiteboard/scenes/mention.md +71 -0
- package/skills/lark-wiki/SKILL.md +5 -3
- package/skills/lark-wiki/references/lark-wiki-delete-space.md +6 -3
- package/skills/lark-doc/references/lark-doc-word-stat.md +0 -93
- package/skills/lark-doc/references/style/lark-doc-create-workflow.md +0 -47
- package/skills/lark-doc/references/style/lark-doc-style.md +0 -68
- package/skills/lark-doc/references/style/lark-doc-update-workflow.md +0 -48
- package/skills/lark-doc/scripts/doc_word_stat.py +0 -1243
- package/skills/lark-slides/references/lark-slides-replace-pages.md +0 -95
- package/skills/lark-slides/references/lark-slides-xml-presentation-slide-create.md +0 -219
- package/skills/lark-slides/references/lark-slides-xml-presentation-slide-delete.md +0 -126
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@amaster.ai/pi-lark",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.8",
|
|
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.
|
|
64
|
+
"@amaster.ai/pi-shared": "0.1.8"
|
|
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)应用开发与托管:应用创建、本地全栈开发、云端生成迭代、创意设计(UI mockup / 可交互原型 / 线框图 / 落地页 / 仪表盘 / 幻灯片 deck / 视觉探索)、AI相关能力和飞书平台能力或者其他外部能力集成、日志/Trace/监控指标/PV/UV
|
|
4
|
+
description: "妙搭(Spark/Miaoda)应用开发与托管:应用创建、本地全栈开发、云端生成迭代、创意设计(UI mockup / 可交互原型 / 线框图 / 落地页 / 仪表盘 / 幻灯片 deck / 视觉探索)、AI相关能力和飞书平台能力或者其他外部能力集成、日志/Trace/监控指标/PV/UV 查询、环境变量管理、应用协作者与协作权限设置、应用角色与成员管理、自动化触发器(定时/记录变更/Webhook/飞书审批)。当用户要开发/新建一个系统·工具·平台·应用,或要本地开发 / 云端开发 / 修改 / 部署 / 发布 / 上线 / 拿可分享链接,或用 HTML 做页面·网站·部署到妙搭,或要设计 / design / mockup / prototype / wireframe / 做 PPT / deck / 视觉探索,或提到妙搭/Spark/Miaoda(应用运行时域名形如 *.aiforce.cloud)、应用数据库、应用文件存储、开放 API Key、可见范围、应用协作者/开发权限、应用角色/角色成员、线上日志、接口请求量、错误量、延迟、访问量、环境变量、给妙搭应用配自动化任务/定时触发/审批通过后自动触发时使用。不负责普通云盘文件上传(lark-drive)、飞书文档编辑(lark-doc)、原生幻灯片创建(lark-slides)。"
|
|
5
5
|
metadata:
|
|
6
6
|
requires:
|
|
7
7
|
bins: ["lark-cli"]
|
|
@@ -44,6 +44,7 @@ lark-cli auth login --domain apps
|
|
|
44
44
|
| 调试应用运行时缓存:查看/删除单个业务 key、清空指定环境缓存 | `+cache-get`/`+cache-delete`/`+cache-clear` | [`lark-apps-cache.md`](references/lark-apps-cache.md) |
|
|
45
45
|
| **部署/上线应用**("部署""上线""推上去并部署""发布到云端");查发布状态/历史 | 本地开发链路先按 [`lark-apps-local-dev.md`](references/lark-apps-local-dev.md) 确认本次改动已 git commit + git push,再用 `+release-create` / `+release-get`;查历史用 `+release-list` | [`lark-apps-local-dev.md`](references/lark-apps-local-dev.md), [`lark-apps-release-create.md`](references/lark-apps-release-create.md), [`lark-apps-release-get.md`](references/lark-apps-release-get.md), [`lark-apps-release-list.md`](references/lark-apps-release-list.md) |
|
|
46
46
|
| 设置或查看运行时可见范围 | `+access-scope-set`, `+access-scope-get` | 对应 access-scope reference |
|
|
47
|
+
| 管理应用协作者(列出/添加/改权限/移除)或协作权限设置 | `+member-list`, `+member-add`, `+member-update`, `+member-remove`, `+member-settings-get`, `+member-settings-set` | 本文「应用协作者与协作权限设置」 |
|
|
47
48
|
| 创意模式(html)应用的评论相关操作 | 创意模式应用评论走 lark-drive 文档评论体系,读取 [`../lark-drive/SKILL.md`](../lark-drive/SKILL.md) 了解评论能力 | [`../lark-drive/SKILL.md`](../lark-drive/SKILL.md) |
|
|
48
49
|
| 管理 `app_...` 应用内角色、角色成员,或查询用户匹配角色 | `+role-list/get/create/update/delete`, `+role-member-list/add/remove`, `+role-match-list` | [`lark-apps-role.md`](references/lark-apps-role.md) |
|
|
49
50
|
| 云端 Agent 生成/迭代应用(开发方式已定为云端后) | `+session-create` -> `+chat` -> `+session-get` | [`lark-apps-cloud-dev.md`](references/lark-apps-cloud-dev.md) |
|
|
@@ -60,26 +61,58 @@ lark-cli auth login --domain apps
|
|
|
60
61
|
- **设置环境变量**:如果用户只给应用名,仍先 `+list --keyword` 解析 app_id;设置 online 环境且用户已经明确说“确认/直接执行”时,调用 `+env-set --environment online ... --yes`,不要再次要求确认。回复和日志摘要里只提 key / env / app,不回显真实 value;需要传复杂值时优先用 `@file` 或 stdin。
|
|
61
62
|
- **删除环境变量**:`+env-delete` 是破坏性操作。除非用户在同一轮已经明确确认删除这个 app/env/key,否则先向用户确认应用、环境、key 和删除后果;确认后再加 `--yes`。不要因为认证失败/重登完成就自动继续删除,必须保留确认门槛。
|
|
62
63
|
|
|
64
|
+
## 应用协作者与协作权限设置
|
|
65
|
+
|
|
66
|
+
这组命令管理妙搭应用的开发协作者和协作策略,不等同于 `+access-scope-*` 的运行时访问范围,也不等同于 `+role-*` 的应用内业务角色。所有命令使用 `app_...` 应用 ID 和 `--as user`。不要读取或判断 `app_type` 来预判支持范围,直接调用对应的协作者命令。
|
|
67
|
+
|
|
68
|
+
- `+member-list`、`+member-settings-get` 是只读命令,需要 `spark:app:read`。
|
|
69
|
+
- `+member-add`、`+member-update`、`+member-remove`、`+member-settings-set` 是高风险写命令,需要 `spark:app:write`。先用 `--dry-run` 核对目标、URL 和请求体;dry-run 不需要 `--yes`。用户已确认具体应用、成员/设置及影响,或已按下方「高影响动作:确认与预授权」对整条流程明确预授权时,真实执行加 `--yes`;否则在 dry-run 后停下请求确认。批量移除成员仍执行「禁止预授权判定底线」,不能从泛化的“直接做”推导出 `--yes`。
|
|
70
|
+
- 添加、更新、移除成员时必须显式提供匹配的外部 ID 类型,禁止传内部数字 ID、猜测类型或做隐式转换:用户 `--member-type openid --member-id ou_...`;群组 `--member-type openchat --member-id oc_...`;部门 `--member-type opendepartmentid --member-id od-...`。
|
|
71
|
+
- `+member-list --member-type` 的筛选枚举是响应对象类型 `user` / `department` / `chat`,与写命令的 ID 类型枚举不同。可再用 `--role view|edit|full_access` 筛选。
|
|
72
|
+
- `+member-list` 一次返回应用的全部直接协作者,不提供分页参数;可用 `--member-type` 和 `--role` 缩小结果范围。
|
|
73
|
+
- 成员响应不包含应用详情。需要名称、类型或发布状态时单独调用 `+get --app-id <app_id>`,不要期待成员分页重复返回 `app`。
|
|
74
|
+
- 收到 subtype `feature_not_available`(OpenAPI code `3340005`;直连服务可能为 `40005`)时,立即停止 CLI 自动化,不切换 `app_type`,也不尝试用 access scope、应用角色或其它成员命令绕过。向用户说明该应用暂不支持通过 lark-cli 设置协作者,并引导其在妙搭后台的权限设置中操作。
|
|
75
|
+
- `external_invite` 只在 `+member-settings-get` 的响应中读取,不能独立设置;它会跟随 `external_access`。CLI 不注册 `--external-invite`,需要改变外部协作能力时只设置 `--external-access`。
|
|
76
|
+
- `copy_download_by` 也只在 `+member-settings-get` 的响应中读取。CCM 当前明确不支持为妙搭对象写入复制、打印和下载权限,因此 CLI 不注册 `--copy-download-by`。保留读取结果,不要尝试写入,也不要改用其它权限字段模拟。
|
|
77
|
+
|
|
78
|
+
```bash
|
|
79
|
+
# 读取协作者和当前协作策略
|
|
80
|
+
lark-cli apps +member-list --app-id <app_id> --as user
|
|
81
|
+
lark-cli apps +member-settings-get --app-id <app_id> --as user
|
|
82
|
+
|
|
83
|
+
# 写操作先预览精确的 typed-ID 字段;确认后把 --dry-run 换成 --yes
|
|
84
|
+
lark-cli apps +member-add --app-id <app_id> --member-type openid --member-id ou_xxx --perm view --dry-run --as user
|
|
85
|
+
lark-cli apps +member-update --app-id <app_id> --member-type openchat --member-id oc_xxx --perm edit --dry-run --as user
|
|
86
|
+
lark-cli apps +member-remove --app-id <app_id> --member-type opendepartmentid --member-id od-xxx --dry-run --as user
|
|
87
|
+
lark-cli apps +member-settings-set --app-id <app_id> --external-access disabled --comment-by viewer --dry-run --as user
|
|
88
|
+
```
|
|
89
|
+
|
|
63
90
|
## 选择开发路径(进意图路由前先判这步)
|
|
64
91
|
|
|
65
92
|
新建必先定 **app_type** 和**开发方式**两件正交的事;修改已有先按「app_id 获取」指认到 app,指认不到就问用户,不擅自 `+create`。开发方式(本地 vs 云端)只看用户对"谁来写代码"的偏好,与应用复杂度、要不要数据库无关。
|
|
66
93
|
|
|
94
|
+
**app_type 三类边界**(先判"要不要把数据存到服务端",再判"纯展示还是有交互"):
|
|
95
|
+
|
|
67
96
|
| 信号 | 判定 |
|
|
68
97
|
|---|---|
|
|
69
|
-
|
|
|
70
|
-
|
|
|
98
|
+
| 含数据库 / 后端持久化:登录 / 增删改查 / 报名·投票·站会存记录 / 多人协作 / 泛称"系统·工具"且明确要存数据 | `app_type=full_stack` |
|
|
99
|
+
| 纯静态展示(给人"看"的物料,无 JS 交互):PPT/deck / demo / 落地页 / 海报 / UI mockup / 线框图 / 静态仪表盘 / 视觉探索 | `app_type=html`,加载 [`creative-design/creative-design.md`](creative-design/creative-design.md)(含完整开发与发布流程) |
|
|
100
|
+
| 有 JS 交互但无数据库(给人"用"的前端应用):可交互原型 / SPA / 表单校验 / 动态计算 / 调用外部 API / 泛称"工具·系统"但未明确要存数据 | `app_type=frontend`(**默认倾向**:用户未明确提出数据库需求时默认引导 frontend,不默认 full_stack) |
|
|
101
|
+
| 类型模糊(尤其"要不要存数据"不清) | **追问**,话术偏向 frontend,例:"看起来是个前端应用,需要保存数据吗?";确认要存数据再转 full_stack,确认纯展示再转 html |
|
|
71
102
|
| 用户要自己写 / 本地 IDE·code agent / 拉源码到本地 / 交研发 | 本地开发,读 [`lark-apps-local-dev.md`](references/lark-apps-local-dev.md) |
|
|
72
103
|
| 让妙搭 AI 云端生成 / 对话式 / 自己不碰代码 | 云端会话,读 [`lark-apps-cloud-dev.md`](references/lark-apps-cloud-dev.md) |
|
|
73
104
|
| 未表达"谁来写"偏好 | **必须先问**(本地代码开发 vs 云端 AI 生成);选定前不擅自选边、不暗示默认,不得以"需求不模糊"为由跳过提问直接 `+init` / `git clone` / `+session-create` / 首轮 `+chat` |
|
|
74
105
|
| 修改已有 + 当前目录是 `.spark/meta.json` 项目 | 直接继续本地按意图路由,不必问也不必判云端 |
|
|
75
106
|
| 修改已有 + 有云端偏好 | 云端会话;未表达偏好且非本地项目 → 默认本地;判不准先问 |
|
|
76
107
|
|
|
108
|
+
**类型升级**:`frontend` 应用后续需要数据库/后端能力时,本地 CLI 不提供类型升级;引导用户到云端会话(打开 `https://miaoda.feishu.cn/app/{app_id}`),用自然语言描述后端需求(如"给这个应用加登录和数据存储")即可触发升级,无需特殊指令。
|
|
109
|
+
|
|
77
110
|
## 发布态护栏
|
|
78
111
|
|
|
79
112
|
- **发布意图判定**:用户要"可访问 / 线上 / 分享 / 新链接 / 上线" = 发布意图,先走发布链路、确认完成再给链接。
|
|
80
113
|
- 完成 ≠ 发布:云端会话完成 / `+list is_published=true` 都不代表最新内容已部署。
|
|
81
|
-
- 开发态链接 `https://miaoda.feishu.cn/app/{app_id}
|
|
82
|
-
- 发布态链接来源:`+release-get` 轮询 `finished` 给 `online_url` / `failed` 给 `error_logs`(html
|
|
114
|
+
- 开发态链接 `https://miaoda.feishu.cn/app/{app_id}`(full_stack / frontend 应用):进应用编辑/开发态、管理与继续开发应用的入口,也是 frontend 升级为 full_stack 的入口(云端会话)。创意模式(html)应用开发态和发布态是同一个链接,无需额外提供开发态链接。
|
|
115
|
+
- 发布态链接来源:`+release-get` 轮询 `finished` 给 `online_url` / `failed` 给 `error_logs`(html / frontend / full_stack 统一走 `+release-get`)。
|
|
83
116
|
- html 应用的主链路是创意模式开发方式:按 [`lark-apps-local-dev.md`](references/lark-apps-local-dev.md) 初始化仓库、在仓库内产出 HTML 及关联文件,并通过 git commit / git push / `+release-create` / `+release-get` 发布部署。任何 git 操作(clone / pull / push)报错时,先执行 `lark-cli apps +git-credential-init --app-id <app_id> --as user` 刷新本地 Git 凭证,再重试原 git 命令。如果刷新凭证也失败,**停止并向用户报告**:原始 git 错误、凭证刷新失败原因,以及是否可能是当前环境(操作系统、沙箱)限制导致(如 macOS Keychain 在沙箱中不可用、Linux 加密文件目录不可写等)。不要改走 `+html-publish`,也不要把 `+html-publish` 当作本地开发链路的 fallback。
|
|
84
117
|
- 创意模式(html)应用的链接格式为 `https://{租户域名}/page/{meta_token}`,**开发态和发布态是同一个链接**(区别于 full_stack 应用两者分开)。此链接形似飞书文档链接。`+get --app-id <meta_token>` 可获取应用信息(含 `app_id`),`+get --app-id <app_id>` 可获取 `meta_token`。看到 `/page/xxx` 链接时,它是妙搭创意模式应用,不要当成飞书文档跳过。
|
|
85
118
|
|
|
@@ -93,7 +126,7 @@ lark-cli auth login --domain apps
|
|
|
93
126
|
- 实现领域 SDK 时,以实际包导出的类型和应用内领域 reference 记录的入参、响应路径为准;禁止修改 ambient `.d.ts`、补造宽松类型或强制断言,让猜测的 SDK 结构仅在本地"编译通过"。
|
|
94
127
|
- typecheck/build 成功不等于合同正确。交付前逐项核对每个 SDK 调用的入参、响应取值路径和策略分支;涉及更新、删除等不同动作时,分别验证各自动作所需的完整状态,不能复用更弱的前置判断。
|
|
95
128
|
- 源码任务交付前确认新增页面、Controller、Module 已接入真实 router/bootstrap,并运行项目现有 typecheck/build;只创建未接线文件不算完成。
|
|
96
|
-
- `+access-scope-*`
|
|
129
|
+
- `+access-scope-*` 只管运行时可见范围(谁能打开应用),不是角色权限;应用协作者/开发权限使用 `+member-*` 和 `+member-settings-*`,应用内业务角色使用 `+role-*`。自动化触发器请用 `+automation-*`(见「意图路由」)。
|
|
97
130
|
|
|
98
131
|
## app_id 获取
|
|
99
132
|
|
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
|
|
11
11
|
三层父子关系,下层都挂在上层之下:
|
|
12
12
|
|
|
13
|
-
- **app(应用资产)**:一个妙搭应用,由 `+create` 创建并拿到 `app_id
|
|
13
|
+
- **app(应用资产)**:一个妙搭应用,由 `+create` 创建并拿到 `app_id`。`--app-type` 沿用 SKILL.md「选择开发路径」判定的类型(有数据库需求→`full_stack`;纯前端交互、未提数据库→默认 `frontend`),云端生成不写死 `full_stack`。
|
|
14
14
|
- **session(会话)**:一个 app 下的一段独立对话上下文,由 `+session-create` 创建并拿到 `session_id`。一个 app 可有多个 session;`is_active` 表示该 session 当前是否可写(可发起对话)。
|
|
15
15
|
- **turn(轮)**:一个 session 里的一轮交互 = 一条用户消息 + 妙搭 Agent 针对它的生成/迭代。`+chat` 发一条消息就发起一轮;轮的句柄是 `turn_id`,状态看 `latest_turn.status`。
|
|
16
16
|
|
|
@@ -41,7 +41,8 @@
|
|
|
41
41
|
### 典型链路
|
|
42
42
|
|
|
43
43
|
```bash
|
|
44
|
-
# 1) 建 app,拿 app_id
|
|
44
|
+
# 1) 建 app,拿 app_id(--app-type 用主路由判定的类型;此例"待办应用"要存待办→full_stack,
|
|
45
|
+
# 若是纯前端交互工具且未提数据库则用 frontend)
|
|
45
46
|
lark-cli apps +create --name "待办应用" --app-type full_stack \
|
|
46
47
|
--description "支持新增、完成、筛选待办"
|
|
47
48
|
|
|
@@ -68,14 +69,14 @@ lark-cli apps +session-list --app-id app_xxx
|
|
|
68
69
|
## 需求发送
|
|
69
70
|
|
|
70
71
|
- 只有用户明确选择云端路径,或明确说“让妙搭 Agent / 云端 AI 生成/迭代”时,才进入本 reference;不要因为用户只说“做个 X”或“给我链接”就默认云端。
|
|
71
|
-
-
|
|
72
|
+
- 进入云端路径后,极简需求也可直接发起生成,例如“做个投票工具”“做个站会小应用”。先按主路由判定的 `--app-type` 建 app(有数据库需求→`full_stack`,纯前端交互未提数据库→默认 `frontend`),再用 `+chat --message "<用户原话>"` 透传需求,不编造实体、字段或业务细节。
|
|
72
73
|
- 如果需求过泛,可在 `+chat --message` 中保留原话,并只补一句“请先生成通用版本,后续可继续迭代”,不要用多轮追问阻塞生成。
|
|
73
74
|
|
|
74
75
|
## 会话落点
|
|
75
76
|
|
|
76
77
|
| 情形 | 动作 |
|
|
77
78
|
|---|---|
|
|
78
|
-
| 全新应用 + 云端生成 |
|
|
79
|
+
| 全新应用 + 云端生成 | 先按主路由判定的类型 `+create --app-type <frontend\|full_stack>`(未提数据库默认 frontend)拿 `app_id`,再 `+session-create` -> `+chat` |
|
|
79
80
|
| 已知 app_id,用户没指定会话 | 先 `+session-list`;有活跃会话时问用户继续现有还是新开 |
|
|
80
81
|
| 用户说“新开一段/换个话题” | `+session-create` 后再 `+chat` |
|
|
81
82
|
| 用户说“接着刚才” | 复用上下文 session_id;拿不到就 `+session-list` 让用户选 |
|
|
@@ -4,12 +4,12 @@
|
|
|
4
4
|
|
|
5
5
|
## 何时用
|
|
6
6
|
|
|
7
|
-
用来创建应用资产并拿到 `app_id`。它不负责把自然语言需求交给云端 Agent
|
|
7
|
+
用来创建应用资产并拿到 `app_id`。它不负责把自然语言需求交给云端 Agent:用户要“帮我生成/迭代应用”时,先按 SKILL.md「选择开发路径」判定的 `--app-type`(有数据库需求→`full_stack`,纯前端交互未提数据库→默认 `frontend`)创建 app,再进入 [`lark-apps-cloud-dev.md`](lark-apps-cloud-dev.md) 用 `+session-create` / `+chat` 提交需求。
|
|
8
8
|
|
|
9
9
|
## 命令骨架
|
|
10
10
|
|
|
11
11
|
- 必填:`--name`、`--app-type`。
|
|
12
|
-
- app type
|
|
12
|
+
- app type 取值为小写 `html` / `frontend` / `full_stack`;框架按枚举精确校验(不做大小写归一),非法值直接报错。
|
|
13
13
|
- 可选:`--description`、`--icon-url`。
|
|
14
14
|
|
|
15
15
|
## 示例
|
|
@@ -17,6 +17,9 @@
|
|
|
17
17
|
```bash
|
|
18
18
|
lark-cli apps +create --name "客户调研问卷" --app-type html
|
|
19
19
|
|
|
20
|
+
lark-cli apps +create --name "JSON 格式化工具" --app-type frontend \
|
|
21
|
+
--description "纯前端交互工具,无需数据库"
|
|
22
|
+
|
|
20
23
|
lark-cli apps +create --name "审批系统" --app-type full_stack \
|
|
21
24
|
--description "部门审批系统,支持登录、提交申请、多级审批"
|
|
22
25
|
|
|
@@ -35,5 +38,5 @@ lark-cli apps +create --name "Demo" --app-type html --dry-run
|
|
|
35
38
|
|
|
36
39
|
创建后按用户路径继续:
|
|
37
40
|
|
|
38
|
-
- 本地应用开发(含 html
|
|
41
|
+
- 本地应用开发(含 html / frontend / full_stack):读 [`lark-apps-local-dev.md`](lark-apps-local-dev.md)。
|
|
39
42
|
- 云端 Agent 生成/迭代:读 [`lark-apps-cloud-dev.md`](lark-apps-cloud-dev.md)。
|
|
@@ -26,7 +26,7 @@ lark-cli apps +get --app-id app_xxx -q '.data.app.app_type'
|
|
|
26
26
|
| 字段 | 类型 | 说明 |
|
|
27
27
|
|------|------|------|
|
|
28
28
|
| `app_id` | string | 应用唯一标识 |
|
|
29
|
-
| `app_type` | string | 应用类型(如 HTML、FULL_STACK、MODERN_HTML) |
|
|
29
|
+
| `app_type` | string | 应用类型(如 HTML、FRONTEND、FULL_STACK、MODERN_HTML) |
|
|
30
30
|
| `name` | string | 应用显示名称 |
|
|
31
31
|
| `description` | string | 应用功能说明 |
|
|
32
32
|
| `icon_url` | string | 应用图标 URL |
|
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
|
|
11
11
|
- 支持 `--keyword` 按应用名模糊搜索。
|
|
12
12
|
- `--ownership` 枚举:`all` / `mine` / `shared`(默认 `all` = 我创建的 + 共享给我的;`mine` = 仅我创建;`shared` = 仅共享给我)。
|
|
13
|
-
- `--app-type` 枚举:`html` / `full_stack`。
|
|
13
|
+
- `--app-type` 枚举:`html` / `frontend` / `full_stack`。
|
|
14
14
|
- 分页:`--page-size` 默认 20,`--page-token` 传上一页 cursor。
|
|
15
15
|
|
|
16
16
|
## 示例
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# lark-apps 本地开发
|
|
2
2
|
|
|
3
|
-
适用:用户要把妙搭应用(full_stack 或 html)源码拉到本地,用本地 code agent/IDE
|
|
3
|
+
适用:用户要把妙搭应用(full_stack、frontend 或 html)源码拉到本地,用本地 code agent/IDE 开发、再发布。其中调试数据库仅 full_stack 适用(frontend / html 无数据库)。
|
|
4
4
|
|
|
5
5
|
## 新建 vs 已有应用
|
|
6
6
|
|
|
@@ -36,6 +36,32 @@ git push origin sprint/default
|
|
|
36
36
|
lark-cli apps +release-create --as user --app-id app_xxx --branch sprint/default
|
|
37
37
|
```
|
|
38
38
|
|
|
39
|
+
### frontend
|
|
40
|
+
|
|
41
|
+
纯前端应用(vite-react,无数据库)。流程与 full_stack 基本一致——`+init` 装依赖、`npm run dev`、commit/push/release——差别是无 `+db-*` 调库步骤。后续需要数据库/后端能力时不在本地升级,按 SKILL.md「类型升级」引导到云端会话。
|
|
42
|
+
|
|
43
|
+
```bash
|
|
44
|
+
# 新建 frontend 应用
|
|
45
|
+
lark-cli apps +create --as user --name "JSON 格式化工具" --app-type frontend \
|
|
46
|
+
--description "纯前端交互工具,无需数据库"
|
|
47
|
+
|
|
48
|
+
# 初始化本地仓库(--dir 取值见下方「领域规则」,勿照抄此处示例值)
|
|
49
|
+
lark-cli apps +init --as user --app-id app_xxx --dir ./json-tool
|
|
50
|
+
|
|
51
|
+
# 进入仓库后按项目脚手架启动(vite-react)
|
|
52
|
+
cd ./json-tool
|
|
53
|
+
npm install
|
|
54
|
+
npm run dev
|
|
55
|
+
|
|
56
|
+
# 开发完成后:提交本次改动 -> git push origin sprint/default -> +release-create
|
|
57
|
+
git add <本次开发的文件>
|
|
58
|
+
git commit -m "feat: ..."
|
|
59
|
+
git push origin sprint/default
|
|
60
|
+
lark-cli apps +release-create --as user --app-id app_xxx --branch sprint/default
|
|
61
|
+
# 发布是异步的:用 +release-get 轮询到 status=finished 才算部署完成、拿到 online_url
|
|
62
|
+
lark-cli apps +release-get --as user --app-id app_xxx --release-id <上一步返回的 release_id>
|
|
63
|
+
```
|
|
64
|
+
|
|
39
65
|
### html
|
|
40
66
|
|
|
41
67
|
#### 首次开发(无 app,无代码)
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: lark-base
|
|
3
|
-
version: 1.2.
|
|
3
|
+
version: 1.2.4
|
|
4
4
|
description: "飞书多维表格(Base)操作:建表、字段、记录、视图、统计、公式/lookup、表单、仪表盘、workflow、角色权限;遇到 Base/多维表格/bitable 或 /base/ 链接时使用。文件导入/导出转 lark-drive,认证/授权转 lark-shared。"
|
|
5
5
|
metadata:
|
|
6
6
|
requires:
|
|
@@ -30,6 +30,7 @@ metadata:
|
|
|
30
30
|
|
|
31
31
|
- Base 业务操作只使用 `lark-cli base +...` shortcut,不使用旧聚合式 `+table / +field / +record / +view / +history / +workspace`。
|
|
32
32
|
- 执行 update 前必须先查当前 shortcut 的 `--help` 或对应 reference。若命令要求完整配置,首次请求必须基于可信的当前配置执行 read-modify-write:只修改用户明确指定的内容,保留其他仍适用的可写配置,并按命令要求的结构提交。若命令支持局部/delta update,按其契约提交最小合法 payload;不得以不完整请求试错补参。
|
|
33
|
+
- Base CLI/OpenAPI 当前不支持视图行高、冻结列、列宽等 UI-only 外观设置。遇到这类需求,说明能力边界并停止,不要猜测未文档化参数或改走 raw API。
|
|
33
34
|
- 本地文件与 Base 之间的导入/导出转 `lark-drive`,具体格式、参数、路径限制和仅结构导出规则由 `lark-drive` 负责;导入完成后再回到 Base 命令。
|
|
34
35
|
- 在线复制 Base 使用 `+base-copy`,不要绕行导出/导入。
|
|
35
36
|
- 认证、初始化、scope、身份切换、权限不足恢复属于 `lark-shared`;Base 文档只保留会影响 Base 路径选择的权限规则。
|
|
@@ -54,8 +55,9 @@ metadata:
|
|
|
54
55
|
| 查看 Base 内资源目录 | `+base-block-list` | 想先了解一个 Base 里有哪些 table/docx/dashboard/workflow/folder 时优先用它;返回 ID 关系和 fewshot 看 `--help` |
|
|
55
56
|
| 管理 Base 内资源目录 | `+base-block-create/move/rename/delete` | 创建或整理 Base 直接管理的 folder/table/docx/dashboard/workflow;资源内容继续用对应命令 |
|
|
56
57
|
| 管理数据表 | `+table-list/get/create/update/delete` | 处理 table 的列出、详情、创建、重命名和删除 |
|
|
58
|
+
| 复制 Base 内单张数据表 | `+table-copy` / `+table-copy-status` | 默认只复制结构;只有用户明确要求复制全表、数据、行或记录时才传 `--range all`;异步任务按返回的 `task_id` 查询或续等 |
|
|
57
59
|
| 列/查/删字段 | `+field-list/get/delete/search-options` | 写入前用 list/get 确认字段类型、选项、ID;删除前确认目标字段 |
|
|
58
|
-
| 创建/更新字段 | `+field-create` / `+field-update` |
|
|
60
|
+
| 创建/更新字段 | `+field-create` / `+field-update` | 同一表创建多个字段时,默认一次向 `+field-create --json` 传字段对象数组;预计串行运行时间超过 caller/tool timeout 时按时间预算拆分,不按固定条数切块;仅创建一个或多个只含 `name` + `type:text` 的简单字段时按 `+field-create --help` 即可,其他类型或属性必读 [lark-base-field-json.md](references/lark-base-field-json.md);公式读 [formula-field-guide.md](references/formula-field-guide.md),lookup 读 [lookup-field-guide.md](references/lookup-field-guide.md);仍需逐项恢复或命令细节时读 [lark-base-field-create.md](references/lark-base-field-create.md),更新细节读 [lark-base-field-update.md](references/lark-base-field-update.md) |
|
|
59
61
|
| 读记录明细 | `+record-get` / `+record-list` / `+record-search` | 涉及筛选、排序、Top/Bottom N、聚合、多表关联、全局结论时读 [lark-base-data-analysis-sop.md](references/lark-base-data-analysis-sop.md) |
|
|
60
62
|
| 写记录 | `+record-upsert` / `+record-batch-create` / `+record-batch-update` | 必读 [lark-base-record-upsert.md](references/lark-base-record-upsert.md) / [lark-base-record-batch-create.md](references/lark-base-record-batch-create.md) / [lark-base-record-batch-update.md](references/lark-base-record-batch-update.md) 和 [lark-base-cell-value.md](references/lark-base-cell-value.md) |
|
|
61
63
|
| 附件字段 | `+record-upload-attachment` / `+record-download-attachment` / `+record-remove-attachment` | 附件不要伪造成普通 CellValue;上传走本地文件,下载/删除按 file token 或字段定位 |
|
|
@@ -68,7 +70,7 @@ metadata:
|
|
|
68
70
|
| 表单题目创建/更新 | `+form-questions-create` / `+form-questions-update` | Base 内表单按 table 管理;先确定并复用真实 `table_id`。读 [lark-base-form-questions-create.md](references/lark-base-form-questions-create.md) / [lark-base-form-questions-update.md](references/lark-base-form-questions-update.md);题目显隐条件 `visible_rule` 结构见公共协议 [lark-base-filter-condition.md](references/lark-base-filter-condition.md) |
|
|
69
71
|
| Base 内表单管理 | `+form-list/get/create/update/delete` / `+form-questions-list/delete` | 缺少或不确定归属时,先用 `+table-list` 或 `+base-block-list` 取得真实 `table_id`;这些命令使用 `--base-token + --table-id` 并在整个工作流中复用同一 `table_id`,删除前确认目标表单 |
|
|
70
72
|
| 分享表单详情 | `+form-detail --share-token <share_token>` | 只接受表单分享链接里的 `share_token`,不要传 `--base-token` / `--form-id`;提交前读 [lark-base-form-detail.md](references/lark-base-form-detail.md) |
|
|
71
|
-
| 仪表盘与组件 | `+dashboard-*` / `+dashboard-block-*` | 提到图表/看板/block 时先读 [lark-base-dashboard.md](references/lark-base-dashboard.md);组件 `data_config` 读 [dashboard-block-data-config.md](references/dashboard-block-data-config.md)
|
|
73
|
+
| 仪表盘与组件 | `+dashboard-*` / `+dashboard-block-*` | 提到图表/看板/block 时先读 [lark-base-dashboard.md](references/lark-base-dashboard.md);组件 `data_config` 读 [dashboard-block-data-config.md](references/dashboard-block-data-config.md);读取一个或多个图表计算结果用 `+dashboard-block-get-data`;读取完整仪表盘时按 block 类型分流,文本和不支持直接取数的图表按 reference 恢复 |
|
|
72
74
|
| Workflow | `+workflow-*` | 创建/更新或理解 steps 时读入口 [lark-base-workflow-guide.md](references/lark-base-workflow-guide.md) 和 steps JSON SSOT [lark-base-workflow-schema.md](references/lark-base-workflow-schema.md);list/get/enable/disable 只处理 workflow ID 与启停状态 |
|
|
73
75
|
| 高级权限与角色 | `+advperm-*` / `+role-*` | 角色操作先读入口 [lark-base-role-guide.md](references/lark-base-role-guide.md);角色 create/update 或解读完整配置再读权限 JSON SSOT [role-config.md](references/role-config.md);系统角色不可删除;关闭高级权限会影响自定义角色 |
|
|
74
76
|
|
|
@@ -79,6 +81,7 @@ metadata:
|
|
|
79
81
|
- `base-block` 只负责资源目录管理,包括创建资源、移动到 folder、重命名和删除;具体资源内容仍走 table/dashboard/workflow 命令。
|
|
80
82
|
- 新建 Base 时,强烈推荐一次性执行 `lark-cli base +base-create --name "<base>" --table-name "<table>" --fields '<field-json-array>'`,同时配置新 Base 里唯一一个初始数据表的 name 和 schema;使用 `--fields` 前先读 [lark-base-field-json.md](references/lark-base-field-json.md) 或复用 `+field-create` 的字段 JSON 形状,不要猜字段属性。
|
|
81
83
|
- `+base-create` 不传 `--table-name` 和 `--fields` 时,会创建一个默认 schema 的初始数据表。
|
|
84
|
+
- `+table-copy` 的安全默认值是只复制表结构;用户没有明确要求记录时省略 `--range`,明确要求包含记录时才传 `--range all`。`--table-id` 可直接使用当前 Base 中的表 ID 或表名。
|
|
82
85
|
- 表、字段、视图、workflow、dashboard block 的名称和 ID 必须来自真实返回,不要凭用户口述猜。
|
|
83
86
|
- 存储字段可写;系统字段、`formula`、`lookup` 只读;附件字段走专用 attachment 命令。
|
|
84
87
|
- 一次性原始记录查询优先用 `+record-list` / `+record-search` 的 filter/sort;聚合分析优先用 `+data-query`;需要长期显示在表中时,才新增 `formula` / `lookup` 字段。
|
|
@@ -89,6 +92,7 @@ metadata:
|
|
|
89
92
|
## 身份与权限降级
|
|
90
93
|
|
|
91
94
|
- 默认显式使用 `--as user` 操作用户资源;只有用户明确要求应用身份时,才直接用 `--as bot`。
|
|
95
|
+
- `+table-copy --wait` 提交成功后会在 stderr 打印完整 `task_id`;若进程被 Ctrl-C 终止,可用该 ID 和原身份执行 `+table-copy-status` 续查,不要重新提交复制。
|
|
92
96
|
- user 身份报 scope/授权不足,或错误中包含 `missing_scopes` / `hint`,先转 `lark-shared` 做用户授权恢复,不要直接降级 bot。
|
|
93
97
|
- user 身份报资源级无访问且无授权恢复提示时,才可用 `--as bot` 重试一次;bot 仍失败就停止重试并按权限错误处理。
|
|
94
98
|
- `91403` 或明确不可访问错误不要循环换身份重试。
|
|
@@ -109,12 +113,13 @@ metadata:
|
|
|
109
113
|
## 写入前置规则
|
|
110
114
|
|
|
111
115
|
- 优先用写入返回确认结果;返回信息不足或任务明确要求核验时,再读回。
|
|
116
|
+
- 严格区分动作语义:用户要求“新增/创建”时,必须用本轮 create 返回的对象、ID 或数量确认完成,不能把已有资源算作本轮新增;目标已存在时按具体命令或 guide 的同名契约处理,不得自行改写用户语义。复合创建任务对每类资源只做一次必要盘点;只有命令明确返回逐项结果时才优先使用批量创建,并继续配置本轮返回的 ID。
|
|
112
117
|
- 写记录前先读字段结构;只写存储字段。系统字段、附件字段、`formula`、`lookup` 不作为普通记录写入目标。
|
|
113
118
|
- 附件上传、下载、删除走专用 `+record-*-attachment` 命令。
|
|
114
|
-
-
|
|
119
|
+
- 除上述简单 text fast path 外,写字段前先读 [lark-base-field-json.md](references/lark-base-field-json.md);请求字段类型不在 reference 已支持类型目录中时,说明当前 CLI 不支持并停止,不要猜测未注册的字段 JSON、service 或 schema,也不要用其他字段类型冒充;涉及 `formula` / `lookup` 时必须读 [formula-field-guide.md](references/formula-field-guide.md) / [lookup-field-guide.md](references/lookup-field-guide.md)。
|
|
115
120
|
- 表名、字段名、视图名、workflow 配置中的名称必须来自真实返回;跨表场景还要读取目标表结构。
|
|
116
121
|
- 删除、角色更新、字段更新、表单提交(`+form-submit`)等高风险操作遵循 CLI 的 confirmation gate,必须带 `--yes`;目标不明确时先用 get/list 消歧。
|
|
117
|
-
-
|
|
122
|
+
- 真正的 batch 写命令遵守各自文档的单批上限;`+field-create` 数组是顺序单项请求,按 caller timeout 而非固定条数拆分;连续写同一表时串行执行,遇到 `1254291` 按短暂等待后重试处理。
|
|
118
123
|
- `select` 字段只支持写入字段中已有的选项;构造 CellValue 前先用 `+field-list` 或 `+field-search-options` 确认目标选项存在。
|
|
119
124
|
|
|
120
125
|
## 表单与视图细节
|
|
@@ -130,7 +135,10 @@ metadata:
|
|
|
130
135
|
|
|
131
136
|
## Dashboard / Workflow / Role
|
|
132
137
|
|
|
133
|
-
- Dashboard 的复杂点是 block 的 `data_config`,不是 list/get/create/delete 命令参数。创建或更新 block 前先读 [dashboard-block-data-config.md](references/dashboard-block-data-config.md),组件必须串行创建;`+dashboard-arrange` 是服务端智能布局,仅在用户明确要求重排/美化、或对本次会话从零新建的仪表盘做收尾整理时执行。`+dashboard-block-get-data` 读取图表最终计算结果,不返回 block 名称、类型、布局或 `data_config`;需要元数据先用 `+dashboard-block-get
|
|
138
|
+
- Dashboard 的复杂点是 block 的 `data_config`,不是 list/get/create/delete 命令参数。创建或更新 block 前先读 [dashboard-block-data-config.md](references/dashboard-block-data-config.md),组件必须串行创建;`+dashboard-arrange` 是服务端智能布局,仅在用户明确要求重排/美化、或对本次会话从零新建的仪表盘做收尾整理时执行。`+dashboard-block-get-data` 读取图表最终计算结果,不返回 block 名称、类型、布局或 `data_config`;需要元数据先用 `+dashboard-block-get`。用户要求“全部/完整”仪表盘内容时不得跳过 text 或不支持直接取数的 block,按 [lark-base-dashboard.md](references/lark-base-dashboard.md) 的完整读取分支恢复。
|
|
139
|
+
- Dashboard shortcut 不支持指定组件的 `x/y/w/h`、精确位置或尺寸,不能把 `+dashboard-arrange` 静默当作等价实现。用户只要求一般性重排/美化时可执行一次智能重排;用户要求精确结果时先说明限制并询问是否接受自适应布局,接受后才执行。不要探测 raw `lark-cli api`、源码或未公开布局参数。
|
|
140
|
+
- 创建接口成功返回即表示写入成功;只有结果不确定时才额外执行一次 `+dashboard-get` 或 `+dashboard-block-list`。不要仅为确认创建而逐组件调用 `+dashboard-block-get-data`。
|
|
141
|
+
- 用户要读取多个组件的计算结果时,先完整列出组件(`+dashboard-block-list --page-size 100`;若 `has_more=true`,继续把返回的 `page_token` 传给 `--page-token`,直到 `has_more=false`),再按 [lark-base-dashboard-block-get-data.md](references/lark-base-dashboard-block-get-data.md) 在一个 shell 工具调用内串行读取;不要把每个 block 拆成独立模型轮次。
|
|
134
142
|
- Workflow 的复杂点是 `steps` 结构。创建、更新或解释完整 workflow 时读入口 [lark-base-workflow-guide.md](references/lark-base-workflow-guide.md) 和 steps JSON SSOT [lark-base-workflow-schema.md](references/lark-base-workflow-schema.md);enable/disable/list 只需确认 workflow ID、当前启停状态和用户意图。
|
|
135
143
|
- Role 的复杂点是权限 JSON。角色操作先读入口 [lark-base-role-guide.md](references/lark-base-role-guide.md);`+role-create` 只支持自定义角色;`+role-update` 是 delta merge;角色 create/update 或解读完整配置时读权限 JSON SSOT [role-config.md](references/role-config.md)。`+role-delete` 只适用于自定义角色,系统角色不可删除;删除角色和关闭高级权限前必须确认目标和影响。
|
|
136
144
|
|
|
@@ -63,7 +63,8 @@ lark-cli base +dashboard-block-get-data \
|
|
|
63
63
|
# 先看仪表盘里有哪些组件
|
|
64
64
|
lark-cli base +dashboard-block-list \
|
|
65
65
|
--base-token bascn***************CtadY \
|
|
66
|
-
--dashboard-id blkxxxxxxxx
|
|
66
|
+
--dashboard-id blkxxxxxxxx \
|
|
67
|
+
--page-size 100
|
|
67
68
|
|
|
68
69
|
# 再读取某个组件的最终计算结果
|
|
69
70
|
lark-cli base +dashboard-block-get-data \
|
|
@@ -71,6 +72,21 @@ lark-cli base +dashboard-block-get-data \
|
|
|
71
72
|
--block-id chtxxxxxxxx
|
|
72
73
|
```
|
|
73
74
|
|
|
75
|
+
如果用户要读取多个组件,先通过 `+dashboard-block-list --page-size 100` 取得真实 ID;若返回 `has_more=true`,继续把本页返回的 `page_token` 传给 `--page-token`,直到 `has_more=false`。收齐目标组件并跳过没有计算结果的文本组件后,再在**一个 shell 工具调用**内串行执行。每条命令会依次输出一个完整 JSON envelope;不要把每个 block 拆成独立模型轮次。
|
|
76
|
+
|
|
77
|
+
```bash
|
|
78
|
+
set -euo pipefail
|
|
79
|
+
|
|
80
|
+
block_ids=(cht_block_1 cht_block_2)
|
|
81
|
+
for block_id in "${block_ids[@]}"; do
|
|
82
|
+
lark-cli base +dashboard-block-get-data \
|
|
83
|
+
--base-token bascn***************CtadY \
|
|
84
|
+
--block-id "$block_id"
|
|
85
|
+
done
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
数组中的 ID 必须逐字来自 `+dashboard-block-list` 返回,不要把名称或未经验证的用户文本作为 shell 代码执行。循环仍然是串行 API 调用,只减少模型往返,不裁剪任何组件结果。
|
|
89
|
+
|
|
74
90
|
如果你需要先确认组件类型、名称或 `data_config`,请先执行:
|
|
75
91
|
|
|
76
92
|
```bash
|
|
@@ -19,7 +19,7 @@ Dashboard 是 Base 中的数据可视化看板,可以把表格数据变成**
|
|
|
19
19
|
| 修改组件 | `+dashboard-block-update` | 先读 block 现状,再读 [dashboard-block-data-config.md](dashboard-block-data-config.md) 决定替换哪些顶层 key |
|
|
20
20
|
| 查看仪表盘有哪些组件 | `+dashboard-get` 或 `+dashboard-block-list` | 本页下方「查看仪表盘」 |
|
|
21
21
|
| 读取图表计算结果 | `+dashboard-block-get-data` | 返回图表最终数据协议;需要 block 元数据先用 `+dashboard-block-get` |
|
|
22
|
-
| 智能重排组件布局 | `+dashboard-arrange` |
|
|
22
|
+
| 智能重排组件布局 | `+dashboard-arrange` | 用户明确要求重排,或本次会话新建仪表盘的收尾整理;无法指定 `x/y/w/h`、精确位置或尺寸 |
|
|
23
23
|
|
|
24
24
|
## 典型场景工作流
|
|
25
25
|
|
|
@@ -29,7 +29,7 @@ Dashboard 是 Base 中的数据可视化看板,可以把表格数据变成**
|
|
|
29
29
|
|
|
30
30
|
- 聚合方式:创建指标卡或分布图时优先把聚合写进 `data_config`,只有 Top N、字段取值探索、复杂筛选校验或 helper 汇总表场景才先用 `+data-query`。
|
|
31
31
|
- Dry-run 边界:已按模板构造的简单指标卡、分布图、趋势图不需要逐个 `--dry-run` 后再真实创建;只有在调试 JSON、检查请求体、复杂自造 `data_config` 或处理 API validation 错误时才 dry-run。
|
|
32
|
-
-
|
|
32
|
+
- 验证方式:创建接口成功返回即表示写入成功。只有结果不确定时才用一次 `+dashboard-get` 或 `+dashboard-block-list` 确认仪表盘和组件存在;不要仅为确认创建而逐组件调用 `+dashboard-block-get-data`。
|
|
33
33
|
- 布局方式:`+dashboard-arrange` 仅两种情况使用:① 用户明确要求美化/重排;② 本次会话中从零新建的仪表盘,建完组件后做一次性布局整理。不是创建成功的必要步骤。
|
|
34
34
|
|
|
35
35
|
示例:搭建一个销售数据分析仪表盘
|
|
@@ -142,8 +142,10 @@ lark-cli base +dashboard-block-update \
|
|
|
142
142
|
|
|
143
143
|
> [!CAUTION]
|
|
144
144
|
> - 排列结果是**服务端智能推荐**,不一定完全符合用户预期
|
|
145
|
-
> -
|
|
145
|
+
> - Dashboard shortcut 无法指定 `x/y/w/h`、精确位置或尺寸(如"第一排放 A""图表撑满整行"),排列逻辑是**自适应**的
|
|
146
146
|
> - **不建议**在已有仪表盘上自动调用,除非用户明确要求
|
|
147
|
+
> - 用户只要求一般性重排/美化时,可执行一次 `+dashboard-arrange`;用户要求精确结果时,先说明限制并询问是否接受自适应布局,接受后才执行,不能静默替代或声称精确满足
|
|
148
|
+
> - 执行一次 `+dashboard-arrange` 后即停止;不要继续探测 raw `lark-cli api`、源码或未公开布局参数
|
|
147
149
|
|
|
148
150
|
```bash
|
|
149
151
|
# 第 1 步:列出仪表盘,定位到目标仪表盘
|
|
@@ -163,6 +165,12 @@ lark-cli base +dashboard-arrange \
|
|
|
163
165
|
- 想看某个组件的详细 data_config 配置 → 用 **方式 C**
|
|
164
166
|
- 想看某个图表/指标卡实际算出来的数据 → 用 **方式 D**
|
|
165
167
|
|
|
168
|
+
用户要求读取“全部图表”或“完整仪表盘”时,先用方式 B 分页枚举所有 block:使用 `--page-size 100`;若返回 `has_more=true`,继续把本页返回的 `page_token` 传给 `--page-token`,直到 `has_more=false`。收齐后再对每个 block 收口,不能只返回 get-data 成功的子集:
|
|
169
|
+
|
|
170
|
+
1. 图表或指标卡:使用方式 D 读取计算结果。
|
|
171
|
+
2. `text`:使用方式 C,正文位于 `data_config.text`;text 没有计算结果,但属于完整仪表盘内容。
|
|
172
|
+
3. get-data 返回不支持的图表类型:先用方式 C 读取真实 `data_config`,确认 `table_name`、维度、指标、聚合与筛选,再按 [数据分析 SOP](lark-base-data-analysis-sop.md) 使用 `+data-query` 重建同口径结果。字段必须来自真实配置和表结构,不得猜测;无法等价重建时明确报告限制,不能静默省略该 block。
|
|
173
|
+
|
|
166
174
|
```bash
|
|
167
175
|
# 第 1 步:列出仪表盘,定位到当前仪表盘
|
|
168
176
|
lark-cli base +dashboard-list --base-token xxx
|
|
@@ -173,7 +181,10 @@ lark-cli base +dashboard-list --base-token xxx
|
|
|
173
181
|
lark-cli base +dashboard-get --base-token xxx --dashboard-id blk_xxx
|
|
174
182
|
|
|
175
183
|
# 方式 B:列出所有组件
|
|
176
|
-
lark-cli base +dashboard-block-list
|
|
184
|
+
lark-cli base +dashboard-block-list \
|
|
185
|
+
--base-token xxx \
|
|
186
|
+
--dashboard-id blk_xxx \
|
|
187
|
+
--page-size 100
|
|
177
188
|
|
|
178
189
|
# 方式 C:查看某个组件的详细配置
|
|
179
190
|
lark-cli base +dashboard-block-get --base-token xxx --dashboard-id blk_xxx --block-id chtxxxxxxxx
|
|
@@ -184,6 +195,8 @@ lark-cli base +dashboard-block-get-data --base-token xxx --block-id chtxxxxxxxx
|
|
|
184
195
|
# 最后:把获取到的现状信息整理好告诉用户
|
|
185
196
|
```
|
|
186
197
|
|
|
198
|
+
需要读取多个组件的计算结果时,先用方式 B 获取真实 `block_id`(使用 `--page-size 100`;若 `has_more=true`,继续把返回的 `page_token` 传给 `--page-token`,直到 `has_more=false`),再按 [lark-base-dashboard-block-get-data.md](lark-base-dashboard-block-get-data.md) 的多组件范式,在一个 shell 工具调用内串行读取;不要把每个 block 拆成独立模型轮次。文本组件没有计算结果,应跳过。
|
|
199
|
+
|
|
187
200
|
## 组件类型选择
|
|
188
201
|
|
|
189
202
|
组件 `type` 决定展示形式:
|
|
@@ -42,6 +42,14 @@ lark-cli base +data-query \
|
|
|
42
42
|
--dsl '{"datasource":{"type":"table","table":{"tableId":"<table_id>"}},"dimensions":[{"field_name":"Owner","alias":"owner"}],"measures":[{"field_name":"Amount","aggregation":"sum","alias":"total_amount"}],"filters":{"type":1,"conjunction":"and","conditions":[{"field_name":"Status","operator":"is","value":["Done"]}]},"shaper":{"format":"flat"}}'
|
|
43
43
|
```
|
|
44
44
|
|
|
45
|
+
## Common filter values
|
|
46
|
+
|
|
47
|
+
Common `Condition.value` shapes: select `is` / `isNot` uses exactly one option
|
|
48
|
+
name; datetime `is` / `isGreater` / `isLess` uses `["Today"]` or
|
|
49
|
+
`["ExactDate","<epoch_ms>"]`; `isEmpty` / `isNotEmpty` uses `[]`.
|
|
50
|
+
Use relative date keywords only for relative requests; see
|
|
51
|
+
[lark-base-data-query.md](lark-base-data-query.md) for other field types and operators.
|
|
52
|
+
|
|
45
53
|
Use `tableName` when the table ID is unavailable but the table name is known:
|
|
46
54
|
|
|
47
55
|
```bash
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
> **前置条件:** 先阅读 [`../lark-shared/SKILL.md`](../../lark-shared/SKILL.md) 了解认证、全局参数和安全规则。
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
创建一个或多个字段;同一表的多个字段默认使用一次 JSON 数组输入。预计串行运行时间超过 caller/tool timeout 时按时间预算拆分,不按固定条数切块。
|
|
6
6
|
|
|
7
7
|
## Agent 最小工作流
|
|
8
8
|
|
|
@@ -29,6 +29,12 @@ lark-cli base +field-create \
|
|
|
29
29
|
--base-token <base_token> \
|
|
30
30
|
--table-id <table_id> \
|
|
31
31
|
--json '{"name":"负责人","type":"user","multiple":false,"default_value":[{"$slot":"current_user"}],"description":"用于标记记录的直接负责人;协作约定可参考[团队字段约定](https://example.com/field-spec)"}'
|
|
32
|
+
|
|
33
|
+
# 多个字段复用相同字段 JSON 形状,一次传非空数组
|
|
34
|
+
lark-cli base +field-create \
|
|
35
|
+
--base-token <base_token> \
|
|
36
|
+
--table-id <table_id> \
|
|
37
|
+
--json '[{"name":"备注","type":"text"},{"name":"优先级","type":"select","multiple":false,"options":[{"name":"高"},{"name":"低"}]}]'
|
|
32
38
|
```
|
|
33
39
|
|
|
34
40
|
## 参数
|
|
@@ -37,7 +43,8 @@ lark-cli base +field-create \
|
|
|
37
43
|
|------|------|------|
|
|
38
44
|
| `--base-token <token>` | 是 | Base Token |
|
|
39
45
|
| `--table-id <id_or_name>` | 是 | 表 ID 或表名 |
|
|
40
|
-
| `--json <body>` | 是 |
|
|
46
|
+
| `--json <body>` | 是 | 单个字段 JSON 对象,或多个字段对象组成的非空数组 |
|
|
47
|
+
|
|
41
48
|
## API 入参详情
|
|
42
49
|
|
|
43
50
|
**HTTP 方法和路径:**
|
|
@@ -48,8 +55,9 @@ POST /open-apis/base/v3/bases/:base_token/tables/:table_id/fields
|
|
|
48
55
|
|
|
49
56
|
## JSON 值规范
|
|
50
57
|
|
|
51
|
-
- `--json`
|
|
52
|
-
-
|
|
58
|
+
- `--json` 接受单个字段 **JSON 对象**,也接受多个字段对象组成的非空数组;不要再套 `fields` 等外层对象。
|
|
59
|
+
- 数组按顺序创建字段,遇到首个失败即停止且不自动回滚已创建字段;需要原子写入时不要假设数组具备事务语义。
|
|
60
|
+
- 每个字段对象最少包含:`name`、`type`。
|
|
53
61
|
- 所有字段类型都支持可选 `description`;支持纯文本,也支持 Markdown 链接,如 `协作约定可参考[团队字段约定](https://example.com/field-spec)`。
|
|
54
62
|
- 需要字段默认值时传 `default_value`,直接使用字段对应 CellValue;`datetime` / `user` 的动态填充用 `$slot`。完整规则见 [lark-base-field-json.md](lark-base-field-json.md)。
|
|
55
63
|
- `type` 不同,必填子字段不同:
|
|
@@ -86,13 +94,16 @@ POST /open-apis/base/v3/bases/:base_token/tables/:table_id/fields
|
|
|
86
94
|
|
|
87
95
|
## 返回重点
|
|
88
96
|
|
|
89
|
-
-
|
|
90
|
-
-
|
|
91
|
-
-
|
|
97
|
+
- 单字段返回 `field` 和 `created: true`;多字段完整返回服务端 `fields`、`total` 和 `created: true`。
|
|
98
|
+
- 大数组成功时若不需要逐字段 ID,可追加 `--jq 'if .ok then (.data | {created,total,field_get_recommended,next_step,verification_hint}) else . end'` 控制 stdout 大小;失败分支仍保留完整部分失败明细。需要逐字段 ID 时不要使用该投影。
|
|
99
|
+
- 数组部分失败返回 `ok:false`、`summary` 和有序 `items`,保留已创建字段及 ID、失败项和未执行项。`failed` 项保留 `type`、`subtype`、`code`、`hint`、`retryable`、`log_id`、`troubleshooter`,以及原 typed error 已有的扩展字段,例如权限错误的 `missing_scopes`、`identity`、`console_url` 或安全策略错误的 `challenge_url`;扩展键与部分失败账本的 `index`、`status`、`field`、`error` 冲突时,以带 `error_` 前缀的无冲突别名输出(例如 `field` → `error_field`)。
|
|
100
|
+
- 部分失败统一返回 `next_step:"inspect_items"`;`field_get_recommended` 仅表示已创建字段是否建议读回。`retryable:true` 只表示该 `failed` 项可原样自动重试;否则先按该项 `hint` 完成授权或修正输入,再重新提交该项。`not_attempted` 项应单独继续。
|
|
101
|
+
- 调用方超时且未收到命令终态输出时,不要重投整个数组;先按本次提交的字段名定向读回,再只提交缺失项。没有写前快照时,读回命中的同名项只能标记为 `ambiguous`,不得计作本轮 `created`。
|
|
102
|
+
- 完整成功且返回 `field_get_recommended:false`、`next_step:"done"` 时直接结束;除非用户明确要求读回或额外属性,否则不要再执行 `+field-list/get`。确需核验时用 `--jq` 过滤 `+field-list`,不要把全部字段打印进上下文。
|
|
103
|
+
- `field_get_recommended:true` 表示完成当前 `next_step` 后按 `verification_hint` 读回;完整成功时 `next_step:"field_get"` 表示可直接读回。`formula`、`lookup`、`link`、`auto_number` 等字段更适合读回确认服务端最终结构。
|
|
92
104
|
|
|
93
105
|
## 工作流
|
|
94
106
|
|
|
95
|
-
|
|
96
107
|
1. formula / lookup 字段必须先阅读对应指南;没读之前不要直接创建。
|
|
97
108
|
2. 创建简单字段时,优先相信命令返回;只有用户要求精确核对额外属性,或返回建议读回时,才继续执行 `+field-get`。
|
|
98
109
|
|
|
@@ -6,8 +6,9 @@
|
|
|
6
6
|
|
|
7
7
|
## 1. 顶层规则(必须遵守)
|
|
8
8
|
|
|
9
|
-
-
|
|
10
|
-
-
|
|
9
|
+
- 单个字段定义始终是 JSON 对象,每个字段对象统一使用:`type` + `name` + 类型特有字段。
|
|
10
|
+
- `+field-create --json` 接受一个字段对象或非空字段对象数组。
|
|
11
|
+
- `+field-update --json` 只接受一个字段对象。
|
|
11
12
|
- 所有字段类型都支持可选 `description`;支持纯文本,也支持 Markdown 链接。
|
|
12
13
|
- 字段默认值使用 `default_value`,直接传对应 CellValue;支持范围只有 `text`、`number`、静态 `select`、`datetime`、`user`。清空默认值传 `null`;省略表示创建时不设置、更新时不修改。
|
|
13
14
|
- 不要使用旧结构:`field_name`、`property`、`ui_type`、数字枚举 `type`。
|
|
@@ -518,6 +519,8 @@
|
|
|
518
519
|
|
|
519
520
|
Object(对象字段)、Button(按钮字段)、Stage(流程字段)暂时都没有被 CLI 支持。这些字段会展示为 `not_support` 字段并被保护:不允许修改,不允许读取内容。
|
|
520
521
|
|
|
522
|
+
遇到暂不支持的字段类型时,直接说明 Base CLI 当前不支持并停止;不要猜测未注册的字段 JSON、service 或 schema,也不要用其他字段类型冒充目标能力。
|
|
523
|
+
|
|
521
524
|
## 6. 易错点
|
|
522
525
|
|
|
523
526
|
- `select` 只有一个类型;不要写 `single_select` / `multi_select`,用 `multiple` 控制是否多选。
|
|
@@ -190,7 +190,7 @@ lark-cli contact +search-user --query <query> --as user
|
|
|
190
190
|
lark-cli im +chat-search --query <query> --as user
|
|
191
191
|
```
|
|
192
192
|
|
|
193
|
-
>
|
|
193
|
+
> 搜索用户/群不支持 bot 身份,必须用 `--as user`。**解析不到或类型不明确时,向用户澄清该参会人类型,不要靠名字形态硬猜类型。**
|
|
194
194
|
|
|
195
195
|
## 不在本 skill 范围
|
|
196
196
|
|