@amaster.ai/pi-lark 0.1.2-beta.47 → 0.1.2-beta.49
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/README.md +5 -1
- package/dist/config.d.ts +1 -1
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +2 -2
- package/dist/config.js.map +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -1
- package/dist/index.js.map +1 -1
- package/package.json +3 -3
- package/skills/lark-apps/SKILL.md +1 -0
- package/skills/lark-apps/references/lark-apps-cache.md +61 -0
- package/skills/lark-base/SKILL.md +16 -7
- package/skills/lark-base/references/lark-base-data-query.md +11 -4
- package/skills/lark-base/references/lark-base-filter-condition.md +179 -0
- package/skills/lark-base/references/lark-base-form-questions-create.md +40 -7
- package/skills/lark-base/references/lark-base-form-questions-update.md +73 -20
- package/skills/lark-base/references/lark-base-role-guide.md +11 -0
- package/skills/lark-base/references/lark-base-view-set-filter.md +11 -137
- package/skills/lark-base/references/role-config.md +31 -5
- package/skills/lark-calendar/SKILL.md +14 -8
- package/skills/lark-calendar/references/lark-calendar-create.md +6 -6
- package/skills/lark-calendar/references/lark-calendar-recurring.md +1 -0
- package/skills/lark-calendar/references/lark-calendar-room-find.md +2 -1
- package/skills/lark-calendar/references/lark-calendar-schedule-clear-time.md +1 -0
- package/skills/lark-calendar/references/lark-calendar-suggestion.md +1 -1
- package/skills/lark-calendar/references/lark-calendar-update.md +7 -4
- package/skills/lark-contact/SKILL.md +19 -3
- package/skills/lark-contact/references/lark-contact-search-bot.md +60 -0
- package/skills/lark-drive/SKILL.md +21 -44
- package/skills/lark-drive/references/lark-drive-add-comment.md +2 -4
- package/skills/lark-drive/references/lark-drive-add-reply.md +47 -0
- package/skills/lark-drive/references/lark-drive-apply-permission.md +2 -2
- package/skills/lark-drive/references/lark-drive-batch-query-comments.md +46 -0
- package/skills/lark-drive/references/lark-drive-comment-content.md +50 -0
- package/skills/lark-drive/references/lark-drive-comment-location.md +7 -13
- package/skills/lark-drive/references/lark-drive-delete-reply.md +48 -0
- package/skills/lark-drive/references/lark-drive-download.md +5 -1
- package/skills/lark-drive/references/lark-drive-list-comments.md +25 -68
- package/skills/lark-drive/references/lark-drive-list-replies.md +54 -0
- package/skills/lark-drive/references/lark-drive-member-add.md +2 -2
- package/skills/lark-drive/references/lark-drive-member-list.md +65 -0
- package/skills/lark-drive/references/lark-drive-permission-get-setting.md +48 -0
- package/skills/lark-drive/references/lark-drive-preview.md +11 -1
- package/skills/lark-drive/references/lark-drive-react-reply.md +51 -0
- package/skills/lark-drive/references/lark-drive-reactions.md +27 -25
- package/skills/lark-drive/references/lark-drive-resolve-comment.md +45 -0
- package/skills/lark-drive/references/lark-drive-restore-comment.md +46 -0
- package/skills/lark-drive/references/lark-drive-search.md +6 -1
- package/skills/lark-drive/references/lark-drive-secure-label.md +1 -1
- package/skills/lark-drive/references/lark-drive-update-reply.md +46 -0
- package/skills/lark-drive/references/lark-drive-workflow-permission-governance-commands.md +38 -8
- package/skills/lark-drive/references/lark-drive-workflow-permission-governance-outputs.md +10 -10
- package/skills/lark-drive/references/lark-drive-workflow-permission-governance.md +22 -20
- package/skills/lark-slides/SKILL.md +16 -26
- package/skills/lark-slides/references/lark-slides-create.md +14 -5
- package/skills/lark-slides/references/lark-slides-media-upload.md +1 -1
- package/skills/lark-slides/references/slides_xml_schema_definition.xml +491 -31
- package/skills/lark-slides/references/xml-schema-quick-ref.md +39 -0
- package/skills/lark-slides/scripts/sxsd_validator.py +908 -0
- package/skills/lark-slides/scripts/xml_text_overlap_lint.py +633 -124
- package/skills/lark-slides/scripts/xml_text_overlap_lint_test.py +2038 -219
- package/skills/lark-task/references/lark-task-create.md +9 -0
- package/skills/lark-drive/references/lark-drive-comments-guide.md +0 -80
package/README.md
CHANGED
|
@@ -12,7 +12,11 @@ Pi extension for [Lark/Feishu](https://www.feishu.cn/) workspace — calendar, d
|
|
|
12
12
|
|
|
13
13
|
## Configuration
|
|
14
14
|
|
|
15
|
-
Add to
|
|
15
|
+
Add to `~/.pi/agent/settings.json` or a trusted project's `.pi/settings.json`:
|
|
16
|
+
|
|
17
|
+
Project settings are loaded only after project trust is accepted. For
|
|
18
|
+
environment-backed credentials, use user or agent settings because project
|
|
19
|
+
settings do not expand `${ENV_VAR}`.
|
|
16
20
|
|
|
17
21
|
```json
|
|
18
22
|
{
|
package/dist/config.d.ts
CHANGED
|
@@ -3,5 +3,5 @@ export type LarkConfig = {
|
|
|
3
3
|
appSecret?: string;
|
|
4
4
|
domain?: 'feishu' | 'lark' | string;
|
|
5
5
|
};
|
|
6
|
-
export declare function loadLarkConfig(cwd: string): LarkConfig | undefined;
|
|
6
|
+
export declare function loadLarkConfig(cwd: string, projectTrusted?: boolean): LarkConfig | undefined;
|
|
7
7
|
//# sourceMappingURL=config.d.ts.map
|
package/dist/config.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,UAAU,GAAG;IACvB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,QAAQ,GAAG,MAAM,GAAG,MAAM,CAAC;CACrC,CAAC;AAIF,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,UAAU,GAAG,SAAS,
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,UAAU,GAAG;IACvB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,QAAQ,GAAG,MAAM,GAAG,MAAM,CAAC;CACrC,CAAC;AAIF,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE,cAAc,UAAQ,GAAG,UAAU,GAAG,SAAS,CAI1F"}
|
package/dist/config.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { loadPiSettings } from '@amaster.ai/pi-shared/settings';
|
|
2
2
|
const SETTINGS_KEY = 'pi-lark';
|
|
3
|
-
export function loadLarkConfig(cwd) {
|
|
4
|
-
const config = loadPiSettings(SETTINGS_KEY, { cwd });
|
|
3
|
+
export function loadLarkConfig(cwd, projectTrusted = false) {
|
|
4
|
+
const config = loadPiSettings(SETTINGS_KEY, { cwd, projectTrusted });
|
|
5
5
|
if (!config || (!config.appId && !config.appSecret))
|
|
6
6
|
return undefined;
|
|
7
7
|
return config;
|
package/dist/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAQhE,MAAM,YAAY,GAAG,SAAS,CAAC;AAE/B,MAAM,UAAU,cAAc,CAAC,GAAW;
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAQhE,MAAM,YAAY,GAAG,SAAS,CAAC;AAE/B,MAAM,UAAU,cAAc,CAAC,GAAW,EAAE,cAAc,GAAG,KAAK;IAChE,MAAM,MAAM,GAAG,cAAc,CAAa,YAAY,EAAE,EAAE,GAAG,EAAE,cAAc,EAAE,CAAC,CAAC;IACjF,IAAI,CAAC,MAAM,IAAI,CAAC,CAAC,MAAM,CAAC,KAAK,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC;QAAE,OAAO,SAAS,CAAC;IACtE,OAAO,MAAM,CAAC;AAChB,CAAC"}
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,YAAY,EAAoB,MAAM,iCAAiC,CAAC;AActF,MAAM,CAAC,OAAO,UAAU,eAAe,CAAC,EAAE,EAAE,YAAY,GAAG,IAAI,CAoC9D"}
|
package/dist/index.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { existsSync } from 'node:fs';
|
|
2
2
|
import { dirname, join } from 'node:path';
|
|
3
3
|
import { fileURLToPath } from 'node:url';
|
|
4
|
+
import { isProjectTrusted } from '@amaster.ai/pi-shared/settings';
|
|
4
5
|
import { ensureLarkCli, getLarkCliSkillsDir, initLarkCli } from './cli.js';
|
|
5
6
|
import { loadLarkConfig } from './config.js';
|
|
6
7
|
const __dirname = dirname(fileURLToPath(import.meta.url));
|
|
@@ -16,7 +17,7 @@ async function resolveSkillsDir() {
|
|
|
16
17
|
export default function piLarkExtension(pi) {
|
|
17
18
|
let skillsDir;
|
|
18
19
|
pi.on('session_start', async (_event, ctx) => {
|
|
19
|
-
const config = loadLarkConfig(ctx.cwd);
|
|
20
|
+
const config = loadLarkConfig(ctx.cwd, isProjectTrusted(ctx));
|
|
20
21
|
if (!config?.appId || !config?.appSecret)
|
|
21
22
|
return;
|
|
22
23
|
if (existsSync(BUNDLED_SKILLS_DIR)) {
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAC;AAElE,OAAO,EAAE,aAAa,EAAE,mBAAmB,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAC3E,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAE7C,MAAM,SAAS,GAAG,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAC1D,MAAM,kBAAkB,GAAG,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC;AAE3D,KAAK,UAAU,gBAAgB;IAC7B,MAAM,SAAS,GAAG,MAAM,mBAAmB,EAAE,CAAC;IAC9C,IAAI,SAAS;QAAE,OAAO,SAAS,CAAC;IAChC,IAAI,UAAU,CAAC,kBAAkB,CAAC;QAAE,OAAO,kBAAkB,CAAC;IAC9D,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,MAAM,CAAC,OAAO,UAAU,eAAe,CAAC,EAAgB;IACtD,IAAI,SAA6B,CAAC;IAElC,EAAE,CAAC,EAAE,CAAC,eAAe,EAAE,KAAK,EAAE,MAAe,EAAE,GAAqB,EAAE,EAAE;QACtE,MAAM,MAAM,GAAG,cAAc,CAAC,GAAG,CAAC,GAAG,EAAE,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC;QAC9D,IAAI,CAAC,MAAM,EAAE,KAAK,IAAI,CAAC,MAAM,EAAE,SAAS;YAAE,OAAO;QAEjD,IAAI,UAAU,CAAC,kBAAkB,CAAC,EAAE,CAAC;YACnC,SAAS,GAAG,kBAAkB,CAAC;QACjC,CAAC;QAED,IAAI,CAAC;YACH,MAAM,SAAS,GAAG,MAAM,aAAa,EAAE,CAAC;YACxC,IAAI,SAAS,EAAE,CAAC;gBACd,MAAM,WAAW,CAAC,MAAM,CAAC,CAAC;gBAC1B,SAAS,GAAG,MAAM,gBAAgB,EAAE,CAAC;gBACrC,GAAG,CAAC,EAAE,CAAC,SAAS,EAAE,CAAC,SAAS,EAAE,iBAAiB,CAAC,CAAC;YACnD,CAAC;QACH,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,GAAG,CAAC,EAAE,CAAC,MAAM,CACX,oBAAoB,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,EACtE,SAAS,CACV,CAAC;QACJ,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,EAAE,CAAC,oBAAoB,EAAE,GAAG,EAAE;QAC/B,IAAI,SAAS,EAAE,CAAC;YACd,OAAO,EAAE,UAAU,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC;QACrC,CAAC;QACD,OAAO,EAAE,CAAC;IACZ,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,EAAE,CAAC,kBAAkB,EAAE,KAAK,IAAI,EAAE;QACnC,SAAS,GAAG,SAAS,CAAC;IACxB,CAAC,CAAC,CAAC;AACL,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@amaster.ai/pi-lark",
|
|
3
|
-
"version": "0.1.2-beta.
|
|
3
|
+
"version": "0.1.2-beta.49",
|
|
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",
|
|
@@ -44,7 +44,7 @@
|
|
|
44
44
|
"directory": "packages/pi-lark"
|
|
45
45
|
},
|
|
46
46
|
"peerDependencies": {
|
|
47
|
-
"@earendil-works/pi-coding-agent": ">=0.
|
|
47
|
+
"@earendil-works/pi-coding-agent": ">=0.79.1",
|
|
48
48
|
"typebox": "*"
|
|
49
49
|
},
|
|
50
50
|
"peerDependenciesMeta": {
|
|
@@ -61,7 +61,7 @@
|
|
|
61
61
|
"vitest": "^4.0.0"
|
|
62
62
|
},
|
|
63
63
|
"dependencies": {
|
|
64
|
-
"@amaster.ai/pi-shared": "0.1.2-beta.
|
|
64
|
+
"@amaster.ai/pi-shared": "0.1.2-beta.49"
|
|
65
65
|
},
|
|
66
66
|
"scripts": {
|
|
67
67
|
"fetch-skills": "node scripts/fetch-skills.mjs",
|
|
@@ -41,6 +41,7 @@ lark-cli auth login --domain apps
|
|
|
41
41
|
| 看表 / 看结构 / 初始化多环境 / 导入导出数据 / 变更追溯 / 行级审计 / dev→online 发布 / 时间点恢复 / 查 DB 用量 | `+db-table-list`、`+db-table-get`、`+db-env-create`、`+db-data-export`/`+db-data-import`、`+db-changelog-list`、`+db-audit-status`/`+db-audit-enable`/`+db-audit-disable`/`+db-audit-list`、`+db-env-diff`/`+db-env-migrate`、`+db-recovery-diff`/`+db-recovery-apply`、`+db-quota-get` | [`lark-apps-db.md`](references/lark-apps-db.md) |
|
|
42
42
|
| 逐条执行 SQL(SELECT / DML / DDL);建表 / 改表 / 写 SQL 的平台规范 | `+db-execute` | [`lark-apps-db-execute.md`](references/lark-apps-db-execute.md)(含「平台 SQL 规范」:审计列 / RLS / `user_profile` / 禁用 SQL / PG 陷阱) |
|
|
43
43
|
| 管理应用文件存储:上传/下载本地文件、列出/查看/删除已存文件、生成临时分享链接、查存储用量 | `+file-upload`/`+file-download`/`+file-list`/`+file-get`/`+file-sign`/`+file-delete`/`+file-quota-get` | [`lark-apps-file.md`](references/lark-apps-file.md) |
|
|
44
|
+
| 调试应用运行时缓存:查看/删除单个业务 key、清空指定环境缓存 | `+cache-get`/`+cache-delete`/`+cache-clear` | [`lark-apps-cache.md`](references/lark-apps-cache.md) |
|
|
44
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) |
|
|
45
46
|
| 设置或查看运行时可见范围 | `+access-scope-set`, `+access-scope-get` | 对应 access-scope reference |
|
|
46
47
|
| 创意模式(html)应用的评论相关操作 | 创意模式应用评论走 lark-drive 文档评论体系,读取 [`../lark-drive/SKILL.md`](../lark-drive/SKILL.md) 了解评论能力 | [`../lark-drive/SKILL.md`](../lark-drive/SKILL.md) |
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
# apps cache 域命令(应用运行时缓存调试)
|
|
2
|
+
|
|
3
|
+
调试妙搭应用的运行时缓存:查看某个缓存 key 的内容、删除单个 key、清空某个环境的全部缓存。缓存是应用为了加速而临时存放的数据,删除或清空后,应用下次用到时会自动重新取最新数据。命令事实以 `lark-cli apps +<cmd> --help` 为准;认证、`--as user`、exit 码、`_notice` 等通用处理见 [`../../lark-shared/SKILL.md`](../../lark-shared/SKILL.md) 与本域 [`SKILL.md`](../SKILL.md)。
|
|
4
|
+
|
|
5
|
+
## 何时用
|
|
6
|
+
|
|
7
|
+
用户要排查「某个缓存 key 里存的是什么 / 有没有命中」、想删掉某个 key 让应用下次拿到最新数据、或想清空某个环境的缓存做快速恢复时。
|
|
8
|
+
|
|
9
|
+
## 命令一览
|
|
10
|
+
|
|
11
|
+
| 命令 | 做什么 | 关键参数 |
|
|
12
|
+
|---|---|---|
|
|
13
|
+
| `+cache-get` | 查一个缓存 key 的内容与信息 | `--key`、`--environment`、`--format` |
|
|
14
|
+
| `+cache-delete` | 删一个缓存 key(重复删不会报错;不需 `--yes`) | `--key`、`--environment` |
|
|
15
|
+
| `+cache-clear` | 清空指定环境下的全部缓存(**高危**) | `--environment`、`--yes` |
|
|
16
|
+
|
|
17
|
+
> 所有命令都需 `--app-id`。
|
|
18
|
+
|
|
19
|
+
## 约定(先读)
|
|
20
|
+
|
|
21
|
+
- **环境 `--environment dev|online`(可省略)**:缓存按运行环境隔离。不指定时按应用当前的环境配置自动选择——有多环境的应用默认落到开发环境 `dev`,没有多环境的就是线上 `online`;返回结果里的 `environment` 会告诉你这次实际操作的是哪个环境。想固定就显式传。
|
|
22
|
+
- **缓存 key 用 `--key` 传**:传业务里使用的那个 key;是否合法(非空、长度等)由服务端校验,不合法会返回错误。
|
|
23
|
+
- **风险分级**:`+cache-clear` 会清掉整个环境的缓存,是高危操作,不带 `--yes` 会被确认关卡拦下;`+cache-delete` 只删单个 key、影响小,不需 `--yes`。
|
|
24
|
+
- **`+cache-get` 的内容有两种展示**:`--format json`(默认)原样返回缓存内容,适合精确比对;`--format pretty` 会把内容格式化展开,更便于阅读。
|
|
25
|
+
|
|
26
|
+
## 各命令
|
|
27
|
+
|
|
28
|
+
### +cache-get
|
|
29
|
+
按 `--key` 查单个缓存。命中时返回:是否存在、剩余有效期(TTL)、内容及其大小;未命中(或已过期)时只返回 `exists=false`、不带内容。
|
|
30
|
+
|
|
31
|
+
> 每次查询都会连内容一起返回(没有「只看信息、不取内容」的模式),内容可能较大——只是想确认「在不在 / 还有多久过期」时,留意别占用太多上下文。
|
|
32
|
+
|
|
33
|
+
```bash
|
|
34
|
+
lark-cli apps +cache-get --app-id app_xxx --key spotbonus:2026:winners:list:v1
|
|
35
|
+
lark-cli apps +cache-get --app-id app_xxx --environment online --key <key> --format pretty
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
### +cache-delete
|
|
39
|
+
删一个缓存 key。**重复删、或删一个本就不存在的 key,都算成功**(返回删除数量 0)、不会报错;删中则返回删除数量 1。删掉后应用下次会自动重新取最新数据,影响小,故不需 `--yes`。
|
|
40
|
+
|
|
41
|
+
```bash
|
|
42
|
+
lark-cli apps +cache-delete --app-id app_xxx --environment dev --key <key>
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
### +cache-clear(高危)
|
|
46
|
+
清空当前应用在**指定环境**下的全部缓存,用于定位不到具体 key 时的快速恢复。影响面是整个环境,必须带 `--yes`;返回本次清除的 key 数量。动手前可先 `--dry-run` 预览将要执行的操作。
|
|
47
|
+
|
|
48
|
+
```bash
|
|
49
|
+
lark-cli apps +cache-clear --app-id app_xxx --environment dev --yes
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
## 错误与边界
|
|
53
|
+
|
|
54
|
+
- **key 不合法 / 缓存服务暂时不可用**:命令会返回带说明的错误,按 `error.hint` 转述给用户;「服务暂时不可用」这类可稍后重试。
|
|
55
|
+
|
|
56
|
+
## Agent 规则
|
|
57
|
+
|
|
58
|
+
- **写操作先定环境**:`+cache-clear` / `+cache-delete` 不指定 `--environment` 时会落到自动选中的环境——**没有多环境的应用会直接作用到线上 `online`(生产)**。不确定应用有没有多环境时,写操作显式传 `--environment`;纯查看(`+cache-get`)影响小,可以省略。
|
|
59
|
+
- **`+cache-clear` 会清掉整个环境的缓存**:执行前先跟用户确认环境无误、说明会清掉该环境全部缓存。已明确授权可直接带 `--yes`;遇到确认关卡(`confirmation_required`,exit 10)按 lark-shared 约定与用户确认后再补 `--yes` 重试,不要静默追加。
|
|
60
|
+
- **排查缓存内容优先用 `+cache-get`**:想看结构化、易读的内容用 `--format pretty`;想拿原始内容做精确比对用默认 JSON。
|
|
61
|
+
- **删 key 前先对齐 key**:用户只描述了业务含义、没给准确 key 时,先确认再删——删错影响也有限(应用会自动重建),但仍应避免误删。
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: lark-base
|
|
3
3
|
version: 1.2.3
|
|
4
|
-
description: "飞书多维表格(Base)操作:建表、字段、记录、视图、统计、公式/lookup、表单、仪表盘、workflow、角色权限;遇到 Base/多维表格/bitable 或 /base/
|
|
4
|
+
description: "飞书多维表格(Base)操作:建表、字段、记录、视图、统计、公式/lookup、表单、仪表盘、workflow、角色权限;遇到 Base/多维表格/bitable 或 /base/ 链接时使用。文件导入/导出转 lark-drive,认证/授权转 lark-shared。"
|
|
5
5
|
metadata:
|
|
6
6
|
requires:
|
|
7
7
|
bins: ["lark-cli"]
|
|
@@ -23,14 +23,15 @@ metadata:
|
|
|
23
23
|
不要使用本 skill:
|
|
24
24
|
|
|
25
25
|
- 只是认证、初始化配置、切换身份、处理 scope 或权限授权恢复,转 `lark-shared`。
|
|
26
|
-
-
|
|
26
|
+
- 把本地文件导入成 Base,或将 Base 导出为本地文件,转 `lark-drive`。
|
|
27
27
|
- 泛化数据分析、字段设计、公式讨论,但没有 Base/多维表格上下文。
|
|
28
28
|
|
|
29
29
|
## 使用边界
|
|
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
|
-
-
|
|
33
|
+
- 本地文件与 Base 之间的导入/导出转 `lark-drive`,具体格式、参数、路径限制和仅结构导出规则由 `lark-drive` 负责;导入完成后再回到 Base 命令。
|
|
34
|
+
- 在线复制 Base 使用 `+base-copy`,不要绕行导出/导入。
|
|
34
35
|
- 认证、初始化、scope、身份切换、权限不足恢复属于 `lark-shared`;Base 文档只保留会影响 Base 路径选择的权限规则。
|
|
35
36
|
|
|
36
37
|
## 先获取 Base Token 和所需 ID
|
|
@@ -38,6 +39,7 @@ metadata:
|
|
|
38
39
|
进入任何需要目标 Base 的 shortcut 前,必须先拿到可用的 `base_token`,以及当前任务需要的 `table_id` / `view_id` / `record_id` / `form_id` / `dashboard_id` / `workflow_id` 等真实 ID;不要把完整 URL、wiki token、workspace token 或孤立 raw token 直接当作 `--base-token`。
|
|
39
40
|
|
|
40
41
|
- 用户输入 URL 或分享链接:先运行 `lark-cli base +url-resolve --url "<url>" --as user`,用返回的 `base_token` 和相关 ID 继续后续命令。
|
|
42
|
+
- Base/Wiki URL 的 `table=` query 参数实际表示当前选中的顶层 block,可能是数据表、仪表盘或 workflow;不要按参数名自行当成 `table_id`。以 `+url-resolve` 返回的 `block_type` 以及 `table_id` / `dashboard_id` / `workflow_id` 为准;`selection_source=url_query` 只说明 URL 当前选中了该 block,不代表它覆盖用户明确点名的目标。若用户点名的 dashboard 与 `block_name` 不一致,先用 `+dashboard-list` 按名称匹配;若只返回中性 `block_id`,按 hint 用 `+base-block-list` 确认类型。
|
|
41
43
|
- 用户输入 Base 标题、关键词或不确定名称:先运行 `lark-cli base +title-resolve --title "<keyword>" --as user`;`--title` 传入标题中的短关键词,不超过 30 个字符;过长标题先取最有区分度的短关键词;多候选时先让用户消歧,不要猜。
|
|
42
44
|
- 文档嵌入 Base 标签:直接读取 `<bitable>` / `<base_refer>` 的 `token` 作为 `--base-token`,`table-id` 作为 `--table-id`,`view-id` 作为 `--view-id`;孤立 raw token 不走 `+url-resolve`。
|
|
43
45
|
- 仍无法定位且用户不是要新建 Base 时,先反问用户要操作哪一个 Base;用户要新建时才用 `+base-create`。
|
|
@@ -48,6 +50,7 @@ metadata:
|
|
|
48
50
|
|---|---|---|
|
|
49
51
|
| 查 Base 本体 | `+base-get` | 用返回确认 Base 名称、owner、权限和可继续操作的 token |
|
|
50
52
|
| 创建/复制 Base | `+base-create` / `+base-copy` | 新建时强烈推荐用 `--table-name` + `--fields` 同时配置新 Base 里唯一一个初始数据表的 name 和 schema;写入后报告新 Base 标识和 `permission_grant` |
|
|
53
|
+
| Base 文件导入/导出 | 转 `lark-drive` | 文件格式、参数、路径限制和仅结构导出规则由 `lark-drive` 负责;在线复制走 `+base-copy` |
|
|
51
54
|
| 查看 Base 内资源目录 | `+base-block-list` | 想先了解一个 Base 里有哪些 table/docx/dashboard/workflow/folder 时优先用它;返回 ID 关系和 fewshot 看 `--help` |
|
|
52
55
|
| 管理 Base 内资源目录 | `+base-block-create/move/rename/delete` | 创建或整理 Base 直接管理的 folder/table/docx/dashboard/workflow;资源内容继续用对应命令 |
|
|
53
56
|
| 管理数据表 | `+table-list/get/create/update/delete` | 处理 table 的列出、详情、创建、重命名和删除 |
|
|
@@ -57,13 +60,14 @@ metadata:
|
|
|
57
60
|
| 写记录 | `+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) |
|
|
58
61
|
| 附件字段 | `+record-upload-attachment` / `+record-download-attachment` / `+record-remove-attachment` | 附件不要伪造成普通 CellValue;上传走本地文件,下载/删除按 file token 或字段定位 |
|
|
59
62
|
| 删除记录 / 分享记录链接 / 历史 | `+record-delete` / `+record-share-link-create` / `+record-history-list` | 删除前确认 record;分享链接最多 100 条;历史读 [lark-base-record-history-list.md](references/lark-base-record-history-list.md),只查单条记录,不做整表审计 |
|
|
60
|
-
| 管理视图 | `+view-*` | `+view-set-filter` 读 [lark-base-view-set-filter.md](references/lark-base-view-set-filter.md)
|
|
63
|
+
| 管理视图 | `+view-*` | `+view-set-filter` 读 [lark-base-view-set-filter.md](references/lark-base-view-set-filter.md)(filter 条件结构见公共协议 [lark-base-filter-condition.md](references/lark-base-filter-condition.md));其余配置先 get 现状,再按返回结构更新 |
|
|
61
64
|
| 一次性聚合统计 | `+data-query` | 必读 [lark-base-data-analysis-sop.md](references/lark-base-data-analysis-sop.md) 和入口 [lark-base-data-query-guide.md](references/lark-base-data-query-guide.md);完整 DSL 再读 [lark-base-data-query.md](references/lark-base-data-query.md) |
|
|
62
65
|
| 公式字段 | `+field-create/update --json '{"type":"formula",...}'` | 必读 [formula-field-guide.md](references/formula-field-guide.md),读后再加隐藏确认 flag `--i-have-read-guide` |
|
|
63
66
|
| Lookup 字段 | `+field-create/update --json '{"type":"lookup",...}'` | 必读 [lookup-field-guide.md](references/lookup-field-guide.md),读后再加隐藏确认 flag `--i-have-read-guide` |
|
|
64
67
|
| 表单提交 | `+form-submit` | 先读 [lark-base-form-detail.md](references/lark-base-form-detail.md) 获取题目、filter 和附件所需 `base_token`;提交 JSON 读 [lark-base-form-submit.md](references/lark-base-form-submit.md) |
|
|
65
|
-
| 表单题目创建/更新 | `+form-questions-create` / `+form-questions-update` |
|
|
66
|
-
|
|
|
68
|
+
| 表单题目创建/更新 | `+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
|
+
| 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
|
+
| 分享表单详情 | `+form-detail --share-token <share_token>` | 只接受表单分享链接里的 `share_token`,不要传 `--base-token` / `--form-id`;提交前读 [lark-base-form-detail.md](references/lark-base-form-detail.md) |
|
|
67
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);读取图表计算结果用 `+dashboard-block-get-data` |
|
|
68
72
|
| 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 与启停状态 |
|
|
69
73
|
| 高级权限与角色 | `+advperm-*` / `+role-*` | 角色操作先读入口 [lark-base-role-guide.md](references/lark-base-role-guide.md);角色 create/update 或解读完整配置再读权限 JSON SSOT [role-config.md](references/role-config.md);系统角色不可删除;关闭高级权限会影响自定义角色 |
|
|
@@ -115,7 +119,11 @@ metadata:
|
|
|
115
119
|
|
|
116
120
|
## 表单与视图细节
|
|
117
121
|
|
|
122
|
+
- Base 内表单 list/get/create/update/delete 和题目管理都属于具体数据表:第一个管理命令前必须已有归属明确的真实 `table_id`;缺失或归属不明确时才用 `+table-list` 或 `+base-block-list` 定位,已有真实 ID 时直接复用。后续管理命令始终传同一 `base_token + table_id`。`+form-detail` 是分享表单入口,标识域不同,只使用 `share_token`。
|
|
123
|
+
- 表单问题由数据表字段承载,question `id` 就是 `field_id`。创建问题前先 `+form-questions-list`;除非用户明确要求同名的独立问题,否则标题已存在时优先用 `+form-questions-update` 修改必填状态、标题或描述,不要先创建同名问题再删除旧问题。
|
|
124
|
+
- `+form-questions-delete` 会删除承载问题的数据表字段。主字段问题不可删除;不要把主字段 ID 放入 `--question-ids`,需要修改时使用 `+form-questions-update`。
|
|
118
125
|
- `+form-submit` 是高风险写操作,必须带 `--yes` 确认;调用前必须先跑 `+form-detail`,读取 `questions[].type`、`required`、`filter` 和附件场景需要的 `base_token`;不要填写被 filter 隐藏的问题。
|
|
126
|
+
- `+form-questions-update` 是题目配置全量覆盖,不是 patch;未传字段会回落默认值,传空字符串 / `null` / 空数组会直接写入空或清空。更新前先 `+form-questions-list` 读取当前题目,把要保留的 `title` / `description` / `required` / `option_display_mode` / `visible_rule` 等字段带回请求。
|
|
119
127
|
- 表单附件不要写进 `fields`,放在 `--json.attachments`;提交附件时必须同时传表单所属 Base 的 `--base-token`。
|
|
120
128
|
- `+view-set-filter` 是唯一保留的 view reference;sort/group/card/timebar/visible-fields 这类配置先用对应 get 命令读现状,保留未修改字段,只替换用户要求变更的配置。
|
|
121
129
|
- 视图适合持久化、共享和 UI 复用;一次性筛选/排序可先用 `+record-list` / `+record-search` 的 filter/sort 验证结果,再按需要沉淀为持久视图。
|
|
@@ -146,13 +154,14 @@ metadata:
|
|
|
146
154
|
## 保留 Reference
|
|
147
155
|
|
|
148
156
|
- [lark-base-data-analysis-sop.md](references/lark-base-data-analysis-sop.md):查询/统计/全局结论的选路 SOP
|
|
149
|
-
- [lark-base-data-query-guide.md](references/lark-base-data-query-guide.md) / [lark-base-data-query.md](references/lark-base-data-query.md):聚合查询入口 fewshot 与 DSL SSOT
|
|
157
|
+
- [lark-base-data-query-guide.md](references/lark-base-data-query-guide.md) / [lark-base-data-query.md](references/lark-base-data-query.md):聚合查询入口 fewshot 与 DSL SSOT;`+data-query` 的 `filters` 结构是独立对象 DSL,不使用公共 tuple filter 协议
|
|
150
158
|
- [lark-base-cell-value.md](references/lark-base-cell-value.md):记录 CellValue 构造
|
|
151
159
|
- [lark-base-field-json.md](references/lark-base-field-json.md):字段 JSON 构造
|
|
152
160
|
- [formula-field-guide.md](references/formula-field-guide.md) / [lookup-field-guide.md](references/lookup-field-guide.md):公式与 lookup 字段
|
|
153
161
|
- [lark-base-field-create.md](references/lark-base-field-create.md) / [lark-base-field-update.md](references/lark-base-field-update.md):字段创建/更新命令级补充
|
|
154
162
|
- [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-record-history-list.md](references/lark-base-record-history-list.md):记录写入 JSON 与历史返回解释
|
|
155
163
|
- [lark-base-view-set-filter.md](references/lark-base-view-set-filter.md):视图筛选 JSON
|
|
164
|
+
- [lark-base-filter-condition.md](references/lark-base-filter-condition.md):视图 filter、记录 `--filter-json`、表单 `visible_rule` 的 tuple 条件结构公共协议 SSOT;不适用于 `+data-query`
|
|
156
165
|
- [lark-base-form-detail.md](references/lark-base-form-detail.md) / [lark-base-form-submit.md](references/lark-base-form-submit.md) / [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):表单详情、提交和复杂 JSON
|
|
157
166
|
- [lark-base-dashboard.md](references/lark-base-dashboard.md) / [dashboard-block-data-config.md](references/dashboard-block-data-config.md) / [lark-base-dashboard-block-get-data.md](references/lark-base-dashboard-block-get-data.md):仪表盘、组件配置与图表结果协议
|
|
158
167
|
- [lark-base-workflow-guide.md](references/lark-base-workflow-guide.md) / [lark-base-workflow-schema.md](references/lark-base-workflow-schema.md):workflow 入口与 steps JSON SSOT
|
|
@@ -79,16 +79,23 @@ lark-cli base +data-query \
|
|
|
79
79
|
| `--base-token <token>` | 是 | Base Token(base_token) |
|
|
80
80
|
| `--dsl <json>` | 是 | LiteQuery Protocol JSON DSL 查询语句 |
|
|
81
81
|
|
|
82
|
-
##
|
|
82
|
+
## 如何从链接中解析参数
|
|
83
83
|
|
|
84
84
|
用户通常会提供如下 URL:
|
|
85
85
|
|
|
86
|
+
```text
|
|
87
|
+
https://example.feishu.cn/base/<base_token>?table=<block_id>
|
|
86
88
|
```
|
|
87
|
-
|
|
89
|
+
|
|
90
|
+
不要直接把 URL 中的 `table=` 当成数据表 ID。它表示当前选中的 Base 顶层块,可能是数据表、仪表盘、工作流、文件夹或文档。先解析链接:
|
|
91
|
+
|
|
92
|
+
```bash
|
|
93
|
+
lark-cli base +url-resolve --url "<url>" --as user
|
|
88
94
|
```
|
|
89
95
|
|
|
90
|
-
- `--base-token
|
|
91
|
-
- DSL 中的 `tableId
|
|
96
|
+
- `--base-token`:使用返回的 `base_token`
|
|
97
|
+
- 仅当返回的 `block_type` 为 `table` 时,DSL 中的 `tableId` 才使用返回的 `table_id`
|
|
98
|
+
- 如果返回的是其他块类型,按 `hint.next_step` 继续处理;如果只返回中性的 `block_id`,先用 `+base-block-list` 确认块类型,再选择实际要查询的数据表
|
|
92
99
|
|
|
93
100
|
## API 入参详情
|
|
94
101
|
|
|
@@ -0,0 +1,179 @@
|
|
|
1
|
+
# Base Filter 条件结构(公共协议)
|
|
2
|
+
|
|
3
|
+
Filter 是一组「字段/操作符/值」条件的组合,用 `logic`(`and` / `or`)把多条 `conditions` 连接起来,用于描述「满足什么条件」。视图筛选 `filter`、记录读取/搜索的 `--filter-json`、表单题目显隐条件 `visible_rule` 复用同一套 tuple 结构,本文件是其公共协议(SSOT)。
|
|
4
|
+
|
|
5
|
+
## 0. 适用范围
|
|
6
|
+
|
|
7
|
+
本协议只适用于以下场景:
|
|
8
|
+
|
|
9
|
+
- `+view-set-filter` / `+view-get-filter` 的视图筛选配置。
|
|
10
|
+
- `+record-list --filter-json` / `+record-search --filter-json` 的结构化记录筛选。
|
|
11
|
+
- `+form-questions-create` / `+form-questions-update` 中的 `visible_rule` 显隐条件。
|
|
12
|
+
|
|
13
|
+
本协议**不适用于 `+data-query`**。`+data-query` 支持过滤,但使用的是 LiteQuery DSL 的 `filters` 对象结构:`{"type":1,"conjunction":"and","conditions":[{"field_name":"状态","operator":"is","value":["有效"]}]}`,不是这里的 tuple 条件 `["状态","==","有效"]`。构造 `+data-query --dsl` 时请阅读 [lark-base-data-query.md](lark-base-data-query.md) 的 FilterGroup / Condition 章节。
|
|
14
|
+
|
|
15
|
+
## 1. 顶层结构
|
|
16
|
+
|
|
17
|
+
- 必须是 JSON 对象。
|
|
18
|
+
- 顶层结构是 `{logic?, conditions?}`。
|
|
19
|
+
- `logic` 默认 `and`;推荐只用 canonical 值 `and` / `or`。
|
|
20
|
+
- `conditions` 默认空数组。
|
|
21
|
+
- 每条条件写成 tuple:`[field, operator, value?]`。
|
|
22
|
+
- `empty` / `non_empty` 可写成 2 项:`[field, "empty"]`、`[field, "non_empty"]`。
|
|
23
|
+
|
|
24
|
+
```json
|
|
25
|
+
{
|
|
26
|
+
"logic": "and",
|
|
27
|
+
"conditions": [
|
|
28
|
+
["状态", "intersects", ["Doing"]],
|
|
29
|
+
["负责人", "intersects", [{ "id": "ou_xxx" }]],
|
|
30
|
+
["截止时间", "empty"]
|
|
31
|
+
]
|
|
32
|
+
}
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
清空写法:
|
|
36
|
+
|
|
37
|
+
```json
|
|
38
|
+
{
|
|
39
|
+
"conditions": []
|
|
40
|
+
}
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
## 2. operator
|
|
44
|
+
|
|
45
|
+
可用 operator:
|
|
46
|
+
- `==`
|
|
47
|
+
- `!=`
|
|
48
|
+
- `>`
|
|
49
|
+
- `>=`
|
|
50
|
+
- `<`
|
|
51
|
+
- `<=`
|
|
52
|
+
- `intersects`
|
|
53
|
+
- `disjoint`
|
|
54
|
+
- `empty`
|
|
55
|
+
- `non_empty`
|
|
56
|
+
|
|
57
|
+
## 3. value 写法
|
|
58
|
+
|
|
59
|
+
value 类型取决于条件引用对象(字段 / 题目)的类型。
|
|
60
|
+
|
|
61
|
+
### `text`
|
|
62
|
+
|
|
63
|
+
用字符串:
|
|
64
|
+
|
|
65
|
+
```json
|
|
66
|
+
["标题", "intersects", "发布"]
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
### `location`
|
|
70
|
+
|
|
71
|
+
location 筛选只按 `full_address` 字符串匹配,不能直接按经纬度筛选;优先使用 `intersects` 做包含匹配,例如查深圳:
|
|
72
|
+
|
|
73
|
+
```json
|
|
74
|
+
["位置", "intersects", "深圳"]
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
不推荐写 `["位置", "==", "深圳"]` 这类精确匹配,除非确保筛选值与完整 `full_address` 完全一致。
|
|
78
|
+
|
|
79
|
+
### `number` / `auto_number`
|
|
80
|
+
|
|
81
|
+
用数字:
|
|
82
|
+
|
|
83
|
+
```json
|
|
84
|
+
["工时", ">=", 3.5]
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
### `select`
|
|
88
|
+
|
|
89
|
+
用选项名数组:
|
|
90
|
+
|
|
91
|
+
```json
|
|
92
|
+
["状态", "intersects", ["Doing", "Blocked"]]
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
### `user` / `created_by` / `updated_by`
|
|
96
|
+
|
|
97
|
+
用对象数组:
|
|
98
|
+
|
|
99
|
+
> **人员筛选:不要猜 ID。** 不知道 `open_id` 时,先用 `lark-contact` 查 id:`lark-cli contact +search-user --query "<姓名/邮箱/手机号>" --as user`。
|
|
100
|
+
|
|
101
|
+
```json
|
|
102
|
+
["负责人", "intersects", [{ "id": "ou_xxx" }]]
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
### `group_chat`
|
|
106
|
+
|
|
107
|
+
用对象数组:
|
|
108
|
+
|
|
109
|
+
> **群组筛选:不要猜 ID。** 不知道 `chat_id` 时,先用 `lark-im` 搜群:`lark-cli im +chat-search --query "<群名关键词>" --as user`;取结果里的 `oc_xxx`。
|
|
110
|
+
|
|
111
|
+
```json
|
|
112
|
+
["负责群", "intersects", [{ "id": "oc_xxx" }]]
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
### `link`
|
|
116
|
+
|
|
117
|
+
用记录 id 对象数组:
|
|
118
|
+
|
|
119
|
+
```json
|
|
120
|
+
["关联任务", "intersects", [{ "id": "rec_xxx" }]]
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
### `checkbox`
|
|
124
|
+
|
|
125
|
+
用布尔值:
|
|
126
|
+
|
|
127
|
+
```json
|
|
128
|
+
["完成", "==", true]
|
|
129
|
+
```
|
|
130
|
+
|
|
131
|
+
### `datetime` / `created_at` / `updated_at`
|
|
132
|
+
|
|
133
|
+
用相对时间关键字或 `ExactDate(...)`:
|
|
134
|
+
|
|
135
|
+
```json
|
|
136
|
+
["截止时间", "==", "ExactDate(2026-01-01)"]
|
|
137
|
+
```
|
|
138
|
+
|
|
139
|
+
```json
|
|
140
|
+
["截止时间", "==", "ExactDate(2026-01-01 11:30)"]
|
|
141
|
+
```
|
|
142
|
+
|
|
143
|
+
```json
|
|
144
|
+
["截止时间", "==", "Today"]
|
|
145
|
+
```
|
|
146
|
+
|
|
147
|
+
可用关键字:
|
|
148
|
+
- `Today`
|
|
149
|
+
- `Yesterday`
|
|
150
|
+
- `Tomorrow`
|
|
151
|
+
|
|
152
|
+
### `formula` / `lookup`
|
|
153
|
+
|
|
154
|
+
- 筛选值类型由字段计算结果类型动态决定。
|
|
155
|
+
- 拿不准时,先把 `value` 当作单个字符串填入做一次尝试。
|
|
156
|
+
- 如果报错,再按错误提示把 `value` 改成对应类型。
|
|
157
|
+
|
|
158
|
+
字符串示例:
|
|
159
|
+
|
|
160
|
+
```json
|
|
161
|
+
["风险说明", "intersects", "高风险"]
|
|
162
|
+
```
|
|
163
|
+
|
|
164
|
+
数字示例:
|
|
165
|
+
|
|
166
|
+
```json
|
|
167
|
+
["汇总分", ">=", 80]
|
|
168
|
+
```
|
|
169
|
+
|
|
170
|
+
## 4. 易错点
|
|
171
|
+
|
|
172
|
+
- 不要再写旧对象风格:`{"field_name":...,"operator":...}`。
|
|
173
|
+
- `user` / `group_chat` / `link` 不要写成单个标量。
|
|
174
|
+
- `empty` / `non_empty` 不要硬塞无意义的 value。
|
|
175
|
+
- 日期条件稳定写法用 `ExactDate(...)` 或 `Today` / `Yesterday` / `Tomorrow`。
|
|
176
|
+
- `formula` / `lookup` 的 value 形状不固定;拿不准时先读当前配置或字段定义,或根据错误提示修正类型。
|
|
177
|
+
|
|
178
|
+
## 5. 参考
|
|
179
|
+
- [lookup-field-guide.md](lookup-field-guide.md)
|
|
@@ -19,10 +19,7 @@ lark-cli base +form-questions-create \
|
|
|
19
19
|
--base-token <base_token> \
|
|
20
20
|
--table-id <table_id> \
|
|
21
21
|
--form-id <form_id> \
|
|
22
|
-
--questions '[
|
|
23
|
-
{"type":"text","title":"您的姓名是?","required":true},
|
|
24
|
-
{"type":"text","title":"您的联系方式是?","required":false}
|
|
25
|
-
]'
|
|
22
|
+
--questions '[{"type":"text","title":"您的姓名是?","required":true},{"type":"text","title":"您的联系方式是?","required":false}]'
|
|
26
23
|
|
|
27
24
|
# 添加单选题(带选项)
|
|
28
25
|
lark-cli base +form-questions-create \
|
|
@@ -50,6 +47,13 @@ lark-cli base +form-questions-create \
|
|
|
50
47
|
--table-id <table_id> \
|
|
51
48
|
--form-id <form_id> \
|
|
52
49
|
--questions '[{"type":"text","title":"反馈建议","description":"更多详情请查看[帮助文档](https://example.com/help)"}]'
|
|
50
|
+
|
|
51
|
+
# 添加带显隐条件(visible_rule)的问题:当「是否需要发票」选择「是」时才显示「发票抬头」
|
|
52
|
+
lark-cli base +form-questions-create \
|
|
53
|
+
--base-token <base_token> \
|
|
54
|
+
--table-id <table_id> \
|
|
55
|
+
--form-id <form_id> \
|
|
56
|
+
--questions '[{"type":"select","title":"是否需要发票","required":true,"options":[{"name":"是","hue":"Blue"},{"name":"否","hue":"Gray"}]},{"type":"text","title":"发票抬头","visible_rule":{"logic":"and","conditions":[["是否需要发票","==","是"]]}}]'
|
|
53
57
|
```
|
|
54
58
|
|
|
55
59
|
## 参数
|
|
@@ -78,6 +82,7 @@ lark-cli base +form-questions-create \
|
|
|
78
82
|
| `multiple` | 否 | 是否多选(`select`/`user` 类型有效,bool) |
|
|
79
83
|
| `options` | 否 | 选项列表(仅 `select` 有效):`[{"name":"选项1","hue":"Blue"}]`,hue 可选:`Red`/`Orange`/`Yellow`/`Green`/`Blue`/`Purple`/`Gray` |
|
|
80
84
|
| `style` | 否 | 字段样式配置(见下方说明) |
|
|
85
|
+
| `visible_rule` | 否 | 题目显隐条件(见下方「`visible_rule` 显隐条件」) |
|
|
81
86
|
|
|
82
87
|
### `style` 字段说明
|
|
83
88
|
|
|
@@ -88,6 +93,30 @@ lark-cli base +form-questions-create \
|
|
|
88
93
|
| `number`(评分) | `{"type":"rating","icon":"star","min":1,"max":5}` | icon 可选:`star`/`heart`/`thumbsup`/`fire`/`smile`/`lightning`/`flower`/`number` |
|
|
89
94
|
| `datetime` | `{"format":"yyyy/MM/dd"}` | format 可选:`yyyy/MM/dd`、`yyyy/MM/dd HH:mm`、`MM-dd`、`MM/dd/yyyy`、`dd/MM/yyyy` |
|
|
90
95
|
|
|
96
|
+
### `visible_rule` 显隐条件
|
|
97
|
+
|
|
98
|
+
> **仅当用户明确要求为题目设置显隐条件(显示/隐藏逻辑)时,才需要读下面的结构说明;否则忽略本节。**
|
|
99
|
+
|
|
100
|
+
`visible_rule` 控制题目在表单中的显示/隐藏:当条件满足时题目显示,不满足时隐藏;不传或 `conditions` 为空数组则题目始终显示。
|
|
101
|
+
|
|
102
|
+
- **结构与视图筛选 `filter` 完全一致**,即 `{logic?, conditions?}`,共用同一套公共协议。
|
|
103
|
+
- 与视图 `filter` 唯一的区别:`conditions` 中的 `field` 引用的是**同一表单内其他题目的题目名称或题目 ID**(推荐用题目 ID 以避免重名歧义),而不是数据表字段。
|
|
104
|
+
- **只能引用前序题目**:条件只能引用排在当前题目之前的题目——创建时按 `questions` 数组顺序判定(可引用同批次更靠前的新题目或表单中已有题目),不支持循环引用。
|
|
105
|
+
- 引用的题目必须真实存在,否则会报错。
|
|
106
|
+
- 列出题目(`+form-questions-list`)会在每个题目对象中**原样返回** `visible_rule`;未设置显隐条件的题目返回 `null` 或 `conditions` 为空数组。
|
|
107
|
+
|
|
108
|
+
```json
|
|
109
|
+
{
|
|
110
|
+
"logic": "and",
|
|
111
|
+
"conditions": [
|
|
112
|
+
["是否需要发票", "==", "是"],
|
|
113
|
+
["报销金额", ">=", 1000]
|
|
114
|
+
]
|
|
115
|
+
}
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
详细的 `visible_rule` 结构(顶层规则、operator 列表、各题目类型的 value 写法)请阅读 [lark-base-filter-condition.md](lark-base-filter-condition.md)。
|
|
119
|
+
|
|
91
120
|
## 输出格式
|
|
92
121
|
|
|
93
122
|
返回创建成功的问题列表:
|
|
@@ -108,11 +137,15 @@ lark-cli base +form-questions-create \
|
|
|
108
137
|
> [!CAUTION]
|
|
109
138
|
> 这是**写入操作** — 执行前必须向用户确认。
|
|
110
139
|
|
|
111
|
-
1.
|
|
112
|
-
2.
|
|
113
|
-
3.
|
|
140
|
+
1. 先确定表单所属的真实 `table_id`,并在整个表单管理工作流中复用它;仅在 ID 缺失或归属不明确时调用 `+table-list`。
|
|
141
|
+
2. 用 `+form-questions-list` 查看现有问题。问题 `id` 是承载该问题的 `field_id`,不是独立于数据表的临时 ID。
|
|
142
|
+
3. 除非用户明确要求同名的独立问题,否则目标标题已经存在时用 `+form-questions-update` 更新必填状态、标题或描述;不要创建同名问题后再删除旧问题。
|
|
143
|
+
4. 创建确实不存在的问题,或用户明确要求的同名独立问题,并报告新建的问题 ID。
|
|
144
|
+
|
|
145
|
+
`+form-questions-delete` 会删除承载问题的数据表字段,不能删除主字段问题。不要通过“新建重复问题再删除旧问题”来替换主字段。
|
|
114
146
|
|
|
115
147
|
## 参考
|
|
116
148
|
|
|
117
149
|
- [lark-base](../SKILL.md) — 多维表格全部命令
|
|
150
|
+
- [lark-base-filter-condition.md](lark-base-filter-condition.md) — `visible_rule` / `filter` 条件结构公共协议
|
|
118
151
|
- [lark-shared](../../lark-shared/SKILL.md) — 认证和全局参数
|