From 04df6a1f071cc3ea33e161648f92ed33aa23f50e Mon Sep 17 00:00:00 2001 From: kongenpei Date: Sun, 29 Mar 2026 21:29:12 +0800 Subject: [PATCH 1/8] feat: add base view visible fields shortcuts and docs --- shortcuts/base/base_dryrun_ops_test.go | 1 + shortcuts/base/base_execute_test.go | 55 ++++++++++++++ shortcuts/base/base_shortcuts_test.go | 35 ++++++++- shortcuts/base/shortcuts.go | 2 + shortcuts/base/view_get_visible_fields.go | 24 ++++++ shortcuts/base/view_ops.go | 28 +++++++ shortcuts/base/view_set_visible_fields.go | 32 ++++++++ .../references/lark-base-view-create.md | 1 + .../lark-base-view-get-visible-fields.md | 38 ++++++++++ .../lark-base-view-set-visible-fields.md | 74 +++++++++++++++++++ skills/lark-base/references/lark-base-view.md | 2 + 11 files changed, 291 insertions(+), 1 deletion(-) create mode 100644 shortcuts/base/view_get_visible_fields.go create mode 100644 shortcuts/base/view_set_visible_fields.go create mode 100644 skills/lark-base/references/lark-base-view-get-visible-fields.md create mode 100644 skills/lark-base/references/lark-base-view-set-visible-fields.md diff --git a/shortcuts/base/base_dryrun_ops_test.go b/shortcuts/base/base_dryrun_ops_test.go index 3898826b..8e50b6fc 100644 --- a/shortcuts/base/base_dryrun_ops_test.go +++ b/shortcuts/base/base_dryrun_ops_test.go @@ -211,6 +211,7 @@ func TestDryRunViewOps(t *testing.T) { assertDryRunContains(t, dryRunViewSetWrapped(setWrappedInvalidRT, "group", "group_config"), "PUT /open-apis/base/v3/bases/app_x/tables/tbl_1/views/viw_1/group") assertDryRunContains(t, dryRunViewGetFilter(ctx, listRT), "GET /open-apis/base/v3/bases/app_x/tables/tbl_1/views/viw_1/filter") + assertDryRunContains(t, dryRunViewGetVisibleFields(ctx, listRT), "GET /open-apis/base/v3/bases/app_x/tables/tbl_1/views/viw_1/visible_fields") assertDryRunContains(t, dryRunViewGetGroup(ctx, listRT), "GET /open-apis/base/v3/bases/app_x/tables/tbl_1/views/viw_1/group") assertDryRunContains(t, dryRunViewGetSort(ctx, listRT), "GET /open-apis/base/v3/bases/app_x/tables/tbl_1/views/viw_1/sort") assertDryRunContains(t, dryRunViewGetTimebar(ctx, listRT), "GET /open-apis/base/v3/bases/app_x/tables/tbl_1/views/viw_1/timebar") diff --git a/shortcuts/base/base_execute_test.go b/shortcuts/base/base_execute_test.go index 46ec996d..4a28b96d 100644 --- a/shortcuts/base/base_execute_test.go +++ b/shortcuts/base/base_execute_test.go @@ -812,6 +812,61 @@ func TestBaseViewExecuteReadCreateDeleteAndFilter(t *testing.T) { t.Fatalf("stdout=%s", got) } }) + + t.Run("get-visible-fields", func(t *testing.T) { + factory, stdout, reg := newExecuteFactory(t) + reg.Register(&httpmock.Stub{ + Method: "GET", + URL: "/open-apis/base/v3/bases/app_x/tables/tbl_x/views/vew_1/visible_fields", + Body: map[string]interface{}{ + "code": 0, + "data": []interface{}{"fld_primary", "fld_status"}, + }, + }) + if err := runShortcut(t, BaseViewGetVisibleFields, []string{"+view-get-visible-fields", "--base-token", "app_x", "--table-id", "tbl_x", "--view-id", "vew_1"}, factory, stdout); err != nil { + t.Fatalf("err=%v", err) + } + if got := stdout.String(); !strings.Contains(got, `"visible_fields"`) || !strings.Contains(got, `"fld_primary"`) { + t.Fatalf("stdout=%s", got) + } + }) + + t.Run("set-visible-fields-array-invalid", func(t *testing.T) { + factory, stdout, _ := newExecuteFactory(t) + err := runShortcut( + t, + BaseViewSetVisibleFields, + []string{"+view-set-visible-fields", "--base-token", "app_x", "--table-id", "tbl_x", "--view-id", "vew_1", "--json", `["fld_status"]`}, + factory, + stdout, + ) + if err == nil || !strings.Contains(err.Error(), "invalid JSON object") { + t.Fatalf("err=%v", err) + } + }) + + t.Run("set-visible-fields-object", func(t *testing.T) { + factory, stdout, reg := newExecuteFactory(t) + updateStub := &httpmock.Stub{ + Method: "PUT", + URL: "/open-apis/base/v3/bases/app_x/tables/tbl_x/views/vew_1/visible_fields", + Body: map[string]interface{}{ + "code": 0, + "data": []interface{}{"fld_primary", "fld_status"}, + }, + } + reg.Register(updateStub) + if err := runShortcut(t, BaseViewSetVisibleFields, []string{"+view-set-visible-fields", "--base-token", "app_x", "--table-id", "tbl_x", "--view-id", "vew_1", "--json", `{"visible_fields":["fld_status"]}`}, factory, stdout); err != nil { + t.Fatalf("err=%v", err) + } + body := string(updateStub.CapturedBody) + if !strings.Contains(body, `"visible_fields":["fld_status"]`) { + t.Fatalf("request body=%s", body) + } + if strings.Contains(body, `{"visible_fields":{"visible_fields":`) { + t.Fatalf("request body double wrapped: %s", body) + } + }) } func TestBaseTableExecuteListFallbackShapes(t *testing.T) { diff --git a/shortcuts/base/base_shortcuts_test.go b/shortcuts/base/base_shortcuts_test.go index a6f1c61d..304277fc 100644 --- a/shortcuts/base/base_shortcuts_test.go +++ b/shortcuts/base/base_shortcuts_test.go @@ -108,12 +108,45 @@ func TestWrapViewPropertyBody(t *testing.T) { } } +func TestValidateViewVisibleFields(t *testing.T) { + ctx := context.Background() + validRT := newBaseTestRuntime(map[string]string{ + "base-token": "app_x", + "table-id": "tbl_x", + "view-id": "vew_x", + "json": `{"visible_fields":["fld_status"]}`, + }, nil, nil) + if err := BaseViewSetVisibleFields.Validate(ctx, validRT); err != nil { + t.Fatalf("valid json err=%v", err) + } + + missingKeyRT := newBaseTestRuntime(map[string]string{ + "base-token": "app_x", + "table-id": "tbl_x", + "view-id": "vew_x", + "json": `{"fields":["fld_status"]}`, + }, nil, nil) + if err := BaseViewSetVisibleFields.Validate(ctx, missingKeyRT); err != nil { + t.Fatalf("err=%v", err) + } + + arrayRT := newBaseTestRuntime(map[string]string{ + "base-token": "app_x", + "table-id": "tbl_x", + "view-id": "vew_x", + "json": `["fld_status"]`, + }, nil, nil) + if err := BaseViewSetVisibleFields.Validate(ctx, arrayRT); err != nil { + t.Fatalf("err=%v", err) + } +} + func TestShortcutsCatalog(t *testing.T) { shortcuts := Shortcuts() want := []string{ "+table-list", "+table-get", "+table-create", "+table-update", "+table-delete", "+field-list", "+field-get", "+field-create", "+field-update", "+field-delete", "+field-search-options", - "+view-list", "+view-get", "+view-create", "+view-delete", "+view-get-filter", "+view-set-filter", "+view-get-group", "+view-set-group", "+view-get-sort", "+view-set-sort", "+view-get-timebar", "+view-set-timebar", "+view-get-card", "+view-set-card", "+view-rename", + "+view-list", "+view-get", "+view-create", "+view-delete", "+view-get-filter", "+view-set-filter", "+view-get-visible-fields", "+view-set-visible-fields", "+view-get-group", "+view-set-group", "+view-get-sort", "+view-set-sort", "+view-get-timebar", "+view-set-timebar", "+view-get-card", "+view-set-card", "+view-rename", "+record-list", "+record-get", "+record-upsert", "+record-upload-attachment", "+record-delete", "+record-history-list", "+base-get", "+base-copy", "+base-create", diff --git a/shortcuts/base/shortcuts.go b/shortcuts/base/shortcuts.go index fea4ebd7..86d01de3 100644 --- a/shortcuts/base/shortcuts.go +++ b/shortcuts/base/shortcuts.go @@ -25,6 +25,8 @@ func Shortcuts() []common.Shortcut { BaseViewDelete, BaseViewGetFilter, BaseViewSetFilter, + BaseViewGetVisibleFields, + BaseViewSetVisibleFields, BaseViewGetGroup, BaseViewSetGroup, BaseViewGetSort, diff --git a/shortcuts/base/view_get_visible_fields.go b/shortcuts/base/view_get_visible_fields.go new file mode 100644 index 00000000..3e97c633 --- /dev/null +++ b/shortcuts/base/view_get_visible_fields.go @@ -0,0 +1,24 @@ +// Copyright (c) 2026 Lark Technologies Pte. Ltd. +// SPDX-License-Identifier: MIT + +package base + +import ( + "context" + + "github.com/larksuite/cli/shortcuts/common" +) + +var BaseViewGetVisibleFields = common.Shortcut{ + Service: "base", + Command: "+view-get-visible-fields", + Description: "Get view visible fields configuration", + Risk: "read", + Scopes: []string{"base:view:read"}, + AuthTypes: authTypes(), + Flags: []common.Flag{baseTokenFlag(true), tableRefFlag(true), viewRefFlag(true)}, + DryRun: dryRunViewGetVisibleFields, + Execute: func(ctx context.Context, runtime *common.RuntimeContext) error { + return executeViewGetProperty(runtime, "visible_fields", "visible_fields") + }, +} diff --git a/shortcuts/base/view_ops.go b/shortcuts/base/view_ops.go index 53211cf1..6cd52fb6 100644 --- a/shortcuts/base/view_ops.go +++ b/shortcuts/base/view_ops.go @@ -77,10 +77,18 @@ func dryRunViewGetFilter(_ context.Context, runtime *common.RuntimeContext) *com return dryRunViewGetProperty(runtime, "filter") } +func dryRunViewGetVisibleFields(_ context.Context, runtime *common.RuntimeContext) *common.DryRunAPI { + return dryRunViewGetProperty(runtime, "visible_fields") +} + func dryRunViewSetFilter(_ context.Context, runtime *common.RuntimeContext) *common.DryRunAPI { return dryRunViewSetJSONObject(runtime, "filter") } +func dryRunViewSetVisibleFields(_ context.Context, runtime *common.RuntimeContext) *common.DryRunAPI { + return dryRunViewSetJSONObject(runtime, "visible_fields") +} + func dryRunViewGetGroup(_ context.Context, runtime *common.RuntimeContext) *common.DryRunAPI { return dryRunViewGetProperty(runtime, "group") } @@ -138,6 +146,10 @@ func validateViewJSONValue(runtime *common.RuntimeContext) error { return nil } +func validateViewVisibleFields(_ *common.RuntimeContext) error { + return nil +} + func executeViewList(runtime *common.RuntimeContext) error { offset := runtime.Int("offset") if offset < 0 { @@ -243,6 +255,22 @@ func executeViewSetWrapped(runtime *common.RuntimeContext, segment string, wrapp return nil } +func executeViewSetVisibleFields(runtime *common.RuntimeContext) error { + baseToken := runtime.Str("base-token") + tableIDValue := baseTableID(runtime) + viewRef := runtime.Str("view-id") + body, err := parseJSONObject(runtime.Str("json"), "json") + if err != nil { + return err + } + data, err := baseV3CallAny(runtime, "PUT", baseV3Path("bases", baseToken, "tables", tableIDValue, "views", viewRef, "visible_fields"), nil, body) + if err != nil { + return err + } + runtime.Out(map[string]interface{}{"visible_fields": data}, nil) + return nil +} + func executeViewRename(runtime *common.RuntimeContext) error { baseToken := runtime.Str("base-token") tableIDValue := baseTableID(runtime) diff --git a/shortcuts/base/view_set_visible_fields.go b/shortcuts/base/view_set_visible_fields.go new file mode 100644 index 00000000..9f6827f3 --- /dev/null +++ b/shortcuts/base/view_set_visible_fields.go @@ -0,0 +1,32 @@ +// Copyright (c) 2026 Lark Technologies Pte. Ltd. +// SPDX-License-Identifier: MIT + +package base + +import ( + "context" + + "github.com/larksuite/cli/shortcuts/common" +) + +var BaseViewSetVisibleFields = common.Shortcut{ + Service: "base", + Command: "+view-set-visible-fields", + Description: "Set view visible fields", + Risk: "write", + Scopes: []string{"base:view:write_only"}, + AuthTypes: authTypes(), + Flags: []common.Flag{ + baseTokenFlag(true), + tableRefFlag(true), + viewRefFlag(true), + {Name: "json", Desc: "visible fields JSON object with visible_fields", Required: true}, + }, + Validate: func(ctx context.Context, runtime *common.RuntimeContext) error { + return validateViewVisibleFields(runtime) + }, + DryRun: dryRunViewSetVisibleFields, + Execute: func(ctx context.Context, runtime *common.RuntimeContext) error { + return executeViewSetVisibleFields(runtime) + }, +} diff --git a/skills/lark-base/references/lark-base-view-create.md b/skills/lark-base/references/lark-base-view-create.md index ab34ba7f..a06ecd03 100644 --- a/skills/lark-base/references/lark-base-view-create.md +++ b/skills/lark-base/references/lark-base-view-create.md @@ -71,6 +71,7 @@ POST /open-apis/base/v3/bases/:base_token/tables/:table_id/views 1. 多视图批量创建时,优先用数组一次提交,减少重复调用。 +2. 如果用户同时要求“视图字段顺序”或“可见字段”,创建完成后必须继续调用 `+view-set-visible-fields` 设置 `visible_fields`;`+view-create` 本身不负责字段顺序/可见性配置。 ## 坑点 diff --git a/skills/lark-base/references/lark-base-view-get-visible-fields.md b/skills/lark-base/references/lark-base-view-get-visible-fields.md new file mode 100644 index 00000000..6d838a3f --- /dev/null +++ b/skills/lark-base/references/lark-base-view-get-visible-fields.md @@ -0,0 +1,38 @@ +# base +view-get-visible-fields + +> **前置条件:** 先阅读 [`../lark-shared/SKILL.md`](../../lark-shared/SKILL.md) 了解认证、全局参数和安全规则。 + +获取可见字段配置。 + +## 推荐命令 + +```bash +lark-cli base +view-get-visible-fields \ + --base-token app_xxx \ + --table-id tbl_xxx \ + --view-id viw_xxx +``` + +## 参数 + +| 参数 | 必填 | 说明 | +|------|------|------| +| `--base-token ` | 是 | Base Token | +| `--table-id ` | 是 | 表 ID 或表名 | +| `--view-id ` | 是 | 视图 ID 或视图名 | + +## API 入参详情 + +**HTTP 方法和路径:** + +``` +GET /open-apis/base/v3/bases/:base_token/tables/:table_id/views/:view_id/visible_fields +``` + +## 返回重点 + +- 返回当前视图可见字段列表。 + +## 参考 + +- [lark-base-view.md](lark-base-view.md) — view 索引页 diff --git a/skills/lark-base/references/lark-base-view-set-visible-fields.md b/skills/lark-base/references/lark-base-view-set-visible-fields.md new file mode 100644 index 00000000..bdd6d5e3 --- /dev/null +++ b/skills/lark-base/references/lark-base-view-set-visible-fields.md @@ -0,0 +1,74 @@ +# base +view-set-visible-fields + +> **前置条件:** 先阅读 [`../lark-shared/SKILL.md`](../../lark-shared/SKILL.md) 了解认证、全局参数和安全规则。 + +更新视图可见字段列表(同时控制视图中的字段顺序)。 + +## 推荐命令 + +```bash +lark-cli base +view-set-visible-fields \ + --base-token app_xxx \ + --table-id tbl_xxx \ + --view-id viw_xxx \ + --json '{"visible_fields":["标题","fld_status"]}' +``` + +## JSON 结构 + +```json +{ + "visible_fields": ["标题", "fld_status"] +} +``` + +## 参数 + +| 参数 | 必填 | 说明 | +|------|------|------| +| `--base-token ` | 是 | Base Token | +| `--table-id ` | 是 | 表 ID 或表名 | +| `--view-id ` | 是 | 视图 ID 或视图名 | +| `--json ` | 是 | JSON 对象,且必须包含 `visible_fields` | + +## API 入参详情 + +**HTTP 方法和路径:** + +``` +PUT /open-apis/base/v3/bases/:base_token/tables/:table_id/views/:view_id/visible_fields +``` + +**接口 body 线形态:** + +```json +{ + "visible_fields": ["标题", "fld_status"] +} +``` + +## 返回重点 + +- 返回更新后的可见字段列表;返回顺序即视图字段展示顺序(受主字段强制置顶规则影响)。 + +## 结构规则 + +- `visible_fields`:字符串数组,每项可传字段 id 或字段名 +- 数组顺序用于控制视图字段顺序(除主字段 `primaryField` 外) +- `--json` 必须传对象:`{ "visible_fields": [...] }` +- 后端会强制显示 `primaryField`,并且会把 `primaryField` 放在第一位;CLI 不会在本地补齐或重排 + +## 工作流 + +1. 用户要求“改字段顺序”或“设置可见字段”时,直接使用本命令。 +2. 建议优先使用字段 id,避免字段重名或后续改名带来的歧义。 + +## 坑点 + +- ⚠️ 这是写入操作,执行前必须确认。 +- ⚠️ 接口最终结果会受后端 `primaryField` 强制显示规则影响,返回顺序可能与传入数组不同。 +- ⚠️ 如果传字段名,必须与当前表真实字段名精确匹配。 + +## 参考 + +- [lark-base-view.md](lark-base-view.md) — view 索引页 diff --git a/skills/lark-base/references/lark-base-view.md b/skills/lark-base/references/lark-base-view.md index 10914bb5..c7d86b81 100644 --- a/skills/lark-base/references/lark-base-view.md +++ b/skills/lark-base/references/lark-base-view.md @@ -15,6 +15,8 @@ view 相关命令索引。 | [lark-base-view-rename.md](lark-base-view-rename.md) | `+view-rename` | 重命名视图 | | [lark-base-view-get-filter.md](lark-base-view-get-filter.md) | `+view-get-filter` | 读取筛选配置 | | [lark-base-view-set-filter.md](lark-base-view-set-filter.md) | `+view-set-filter` | 更新筛选配置 | +| [lark-base-view-get-visible-fields.md](lark-base-view-get-visible-fields.md) | `+view-get-visible-fields` | 读取可见字段列表 | +| [lark-base-view-set-visible-fields.md](lark-base-view-set-visible-fields.md) | `+view-set-visible-fields` | 更新可见字段列表 | | [lark-base-view-get-group.md](lark-base-view-get-group.md) | `+view-get-group` | 读取分组配置 | | [lark-base-view-set-group.md](lark-base-view-set-group.md) | `+view-set-group` | 更新分组配置 | | [lark-base-view-get-sort.md](lark-base-view-get-sort.md) | `+view-get-sort` | 读取排序配置 | From b239fb9de760c2e665e15c9c285312a136dc478d Mon Sep 17 00:00:00 2001 From: kongenpei Date: Wed, 8 Apr 2026 15:47:55 +0800 Subject: [PATCH 2/8] docs: add view-create guidance for visible fields read --- skills/lark-base/references/lark-base-view-create.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/skills/lark-base/references/lark-base-view-create.md b/skills/lark-base/references/lark-base-view-create.md index a06ecd03..32933709 100644 --- a/skills/lark-base/references/lark-base-view-create.md +++ b/skills/lark-base/references/lark-base-view-create.md @@ -71,7 +71,8 @@ POST /open-apis/base/v3/bases/:base_token/tables/:table_id/views 1. 多视图批量创建时,优先用数组一次提交,减少重复调用。 -2. 如果用户同时要求“视图字段顺序”或“可见字段”,创建完成后必须继续调用 `+view-set-visible-fields` 设置 `visible_fields`;`+view-create` 本身不负责字段顺序/可见性配置。 +2. 如果用户要“查看视图字段顺序”或“查看可见字段”,使用 `+view-get-visible-fields` 读取当前 `visible_fields`。 +3. 如果用户同时要求“视图字段顺序”或“可见字段”,创建完成后必须继续调用 `+view-set-visible-fields` 设置 `visible_fields`;`+view-create` 本身不负责字段顺序/可见性配置。 ## 坑点 From f98611c08ce1d798c66195760c722dbc381a110a Mon Sep 17 00:00:00 2001 From: kongenpei Date: Wed, 8 Apr 2026 20:33:58 +0800 Subject: [PATCH 3/8] docs(base): refine visible fields reference wording --- .../references/lark-base-view-get-visible-fields.md | 6 +++--- .../references/lark-base-view-set-visible-fields.md | 7 +++---- 2 files changed, 6 insertions(+), 7 deletions(-) diff --git a/skills/lark-base/references/lark-base-view-get-visible-fields.md b/skills/lark-base/references/lark-base-view-get-visible-fields.md index 6d838a3f..3b217894 100644 --- a/skills/lark-base/references/lark-base-view-get-visible-fields.md +++ b/skills/lark-base/references/lark-base-view-get-visible-fields.md @@ -8,9 +8,9 @@ ```bash lark-cli base +view-get-visible-fields \ - --base-token app_xxx \ - --table-id tbl_xxx \ - --view-id viw_xxx + --base-token XXXXXX \ + --table-id tblXXX \ + --view-id vewXXX ``` ## 参数 diff --git a/skills/lark-base/references/lark-base-view-set-visible-fields.md b/skills/lark-base/references/lark-base-view-set-visible-fields.md index bdd6d5e3..816eb106 100644 --- a/skills/lark-base/references/lark-base-view-set-visible-fields.md +++ b/skills/lark-base/references/lark-base-view-set-visible-fields.md @@ -39,7 +39,7 @@ lark-cli base +view-set-visible-fields \ PUT /open-apis/base/v3/bases/:base_token/tables/:table_id/views/:view_id/visible_fields ``` -**接口 body 线形态:** +**接口 body 格式:** ```json { @@ -49,14 +49,13 @@ PUT /open-apis/base/v3/bases/:base_token/tables/:table_id/views/:view_id/visible ## 返回重点 -- 返回更新后的可见字段列表;返回顺序即视图字段展示顺序(受主字段强制置顶规则影响)。 +- 返回可见字段列表与顺序(`primaryField` 会被强制置顶)。 ## 结构规则 - `visible_fields`:字符串数组,每项可传字段 id 或字段名 -- 数组顺序用于控制视图字段顺序(除主字段 `primaryField` 外) +- 数组顺序用于控制视图字段顺序;主字段 `primaryField` 必须存在且位于第一位,否则 API 会强制将其提升到第一位 - `--json` 必须传对象:`{ "visible_fields": [...] }` -- 后端会强制显示 `primaryField`,并且会把 `primaryField` 放在第一位;CLI 不会在本地补齐或重排 ## 工作流 From 81b852733a7d7f1e0d1cf25f019dd68c8460f503 Mon Sep 17 00:00:00 2001 From: kongenpei Date: Thu, 9 Apr 2026 00:05:30 +0800 Subject: [PATCH 4/8] refactor(base): remove noop validate hook from view-set-visible-fields --- shortcuts/base/base_shortcuts_test.go | 33 +++-------------------- shortcuts/base/view_ops.go | 4 --- shortcuts/base/view_set_visible_fields.go | 3 --- 3 files changed, 3 insertions(+), 37 deletions(-) diff --git a/shortcuts/base/base_shortcuts_test.go b/shortcuts/base/base_shortcuts_test.go index 304277fc..376fb43e 100644 --- a/shortcuts/base/base_shortcuts_test.go +++ b/shortcuts/base/base_shortcuts_test.go @@ -108,36 +108,9 @@ func TestWrapViewPropertyBody(t *testing.T) { } } -func TestValidateViewVisibleFields(t *testing.T) { - ctx := context.Background() - validRT := newBaseTestRuntime(map[string]string{ - "base-token": "app_x", - "table-id": "tbl_x", - "view-id": "vew_x", - "json": `{"visible_fields":["fld_status"]}`, - }, nil, nil) - if err := BaseViewSetVisibleFields.Validate(ctx, validRT); err != nil { - t.Fatalf("valid json err=%v", err) - } - - missingKeyRT := newBaseTestRuntime(map[string]string{ - "base-token": "app_x", - "table-id": "tbl_x", - "view-id": "vew_x", - "json": `{"fields":["fld_status"]}`, - }, nil, nil) - if err := BaseViewSetVisibleFields.Validate(ctx, missingKeyRT); err != nil { - t.Fatalf("err=%v", err) - } - - arrayRT := newBaseTestRuntime(map[string]string{ - "base-token": "app_x", - "table-id": "tbl_x", - "view-id": "vew_x", - "json": `["fld_status"]`, - }, nil, nil) - if err := BaseViewSetVisibleFields.Validate(ctx, arrayRT); err != nil { - t.Fatalf("err=%v", err) +func TestViewSetVisibleFieldsNoValidateHook(t *testing.T) { + if BaseViewSetVisibleFields.Validate != nil { + t.Fatalf("expected no validate hook, got non-nil") } } diff --git a/shortcuts/base/view_ops.go b/shortcuts/base/view_ops.go index 6cd52fb6..d61e7f61 100644 --- a/shortcuts/base/view_ops.go +++ b/shortcuts/base/view_ops.go @@ -146,10 +146,6 @@ func validateViewJSONValue(runtime *common.RuntimeContext) error { return nil } -func validateViewVisibleFields(_ *common.RuntimeContext) error { - return nil -} - func executeViewList(runtime *common.RuntimeContext) error { offset := runtime.Int("offset") if offset < 0 { diff --git a/shortcuts/base/view_set_visible_fields.go b/shortcuts/base/view_set_visible_fields.go index 9f6827f3..3c2fc443 100644 --- a/shortcuts/base/view_set_visible_fields.go +++ b/shortcuts/base/view_set_visible_fields.go @@ -22,9 +22,6 @@ var BaseViewSetVisibleFields = common.Shortcut{ viewRefFlag(true), {Name: "json", Desc: "visible fields JSON object with visible_fields", Required: true}, }, - Validate: func(ctx context.Context, runtime *common.RuntimeContext) error { - return validateViewVisibleFields(runtime) - }, DryRun: dryRunViewSetVisibleFields, Execute: func(ctx context.Context, runtime *common.RuntimeContext) error { return executeViewSetVisibleFields(runtime) From f83c4e8f00702b4d704cfcb427ed6d8343ce9d4d Mon Sep 17 00:00:00 2001 From: kongenpei Date: Thu, 9 Apr 2026 17:30:36 +0800 Subject: [PATCH 5/8] docs: unify view-set-visible-fields example placeholders --- .../references/lark-base-view-set-visible-fields.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/skills/lark-base/references/lark-base-view-set-visible-fields.md b/skills/lark-base/references/lark-base-view-set-visible-fields.md index 816eb106..877fe83f 100644 --- a/skills/lark-base/references/lark-base-view-set-visible-fields.md +++ b/skills/lark-base/references/lark-base-view-set-visible-fields.md @@ -8,9 +8,9 @@ ```bash lark-cli base +view-set-visible-fields \ - --base-token app_xxx \ - --table-id tbl_xxx \ - --view-id viw_xxx \ + --base-token XXXXXX \ + --table-id tblXXX \ + --view-id vewXXX \ --json '{"visible_fields":["标题","fld_status"]}' ``` From 5b15992d2de4e8bb7e1b1e931ba6444327777c11 Mon Sep 17 00:00:00 2001 From: kongenpei Date: Thu, 9 Apr 2026 17:32:01 +0800 Subject: [PATCH 6/8] docs: update visible fields example field placeholder --- .../references/lark-base-view-set-visible-fields.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/skills/lark-base/references/lark-base-view-set-visible-fields.md b/skills/lark-base/references/lark-base-view-set-visible-fields.md index 877fe83f..98446a47 100644 --- a/skills/lark-base/references/lark-base-view-set-visible-fields.md +++ b/skills/lark-base/references/lark-base-view-set-visible-fields.md @@ -11,14 +11,14 @@ lark-cli base +view-set-visible-fields \ --base-token XXXXXX \ --table-id tblXXX \ --view-id vewXXX \ - --json '{"visible_fields":["标题","fld_status"]}' + --json '{"visible_fields":["标题","fldXXX"]}' ``` ## JSON 结构 ```json { - "visible_fields": ["标题", "fld_status"] + "visible_fields": ["标题", "fldXXX"] } ``` @@ -43,7 +43,7 @@ PUT /open-apis/base/v3/bases/:base_token/tables/:table_id/views/:view_id/visible ```json { - "visible_fields": ["标题", "fld_status"] + "visible_fields": ["标题", "fldXXX"] } ``` From 37c3923c405574b6b2266466ed7846c7228195ef Mon Sep 17 00:00:00 2001 From: kongenpei Date: Thu, 9 Apr 2026 17:55:01 +0800 Subject: [PATCH 7/8] fix(base): pass parse context in view-set-visible-fields --- shortcuts/base/view_ops.go | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/shortcuts/base/view_ops.go b/shortcuts/base/view_ops.go index e9e83c16..31df70e1 100644 --- a/shortcuts/base/view_ops.go +++ b/shortcuts/base/view_ops.go @@ -258,10 +258,11 @@ func executeViewSetWrapped(runtime *common.RuntimeContext, segment string, wrapp } func executeViewSetVisibleFields(runtime *common.RuntimeContext) error { + pc := newParseCtx(runtime) baseToken := runtime.Str("base-token") tableIDValue := baseTableID(runtime) viewRef := runtime.Str("view-id") - body, err := parseJSONObject(runtime.Str("json"), "json") + body, err := parseJSONObject(pc, runtime.Str("json"), "json") if err != nil { return err } From b9fb714771d54561de7ded5d7dae63788e04ca38 Mon Sep 17 00:00:00 2001 From: kongenpei Date: Thu, 9 Apr 2026 20:56:22 +0800 Subject: [PATCH 8/8] feat: add tips for view-set-visible-fields json usage --- shortcuts/base/view_set_visible_fields.go | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/shortcuts/base/view_set_visible_fields.go b/shortcuts/base/view_set_visible_fields.go index 3c2fc443..3f0ba09f 100644 --- a/shortcuts/base/view_set_visible_fields.go +++ b/shortcuts/base/view_set_visible_fields.go @@ -20,7 +20,11 @@ var BaseViewSetVisibleFields = common.Shortcut{ baseTokenFlag(true), tableRefFlag(true), viewRefFlag(true), - {Name: "json", Desc: "visible fields JSON object with visible_fields", Required: true}, + {Name: "json", Desc: `visible fields JSON object with "visible_fields"`, Required: true}, + }, + Tips: []string{ + `Example: --json '{"visible_fields":["fldXXX"]}'`, + "Agent hint: use the lark-base skill's view-set-visible-fields guide for usage and limits.", }, DryRun: dryRunViewSetVisibleFields, Execute: func(ctx context.Context, runtime *common.RuntimeContext) error {