@qingflow-tech/qingflow-cli 1.1.56 → 1.1.57
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 +3 -3
- package/package.json +1 -1
- package/pyproject.toml +1 -1
- package/skills/qingflow-cli/reference/builder/50-views.md +2 -1
- package/src/qingflow_mcp/builder_facade/schemas/views/v1alpha1/complete.json +33 -3
- package/src/qingflow_mcp/builder_facade/schemas/views/v1alpha1/details/data-permission.json +2 -2
- package/src/qingflow_mcp/builder_facade/schemas/views/v1alpha1/summary.json +4 -3
package/README.md
CHANGED
|
@@ -7,7 +7,7 @@ Qingflow CLI 是轻流面向开发者和 AI Agent 的命令行工具。它把轻
|
|
|
7
7
|
## 安装
|
|
8
8
|
|
|
9
9
|
```bash
|
|
10
|
-
npm install @qingflow-tech/qingflow-cli@1.1.
|
|
10
|
+
npm install @qingflow-tech/qingflow-cli@1.1.57
|
|
11
11
|
```
|
|
12
12
|
|
|
13
13
|
推荐从官网复制这一条一键安装 Qingflow CLI:
|
|
@@ -21,7 +21,7 @@ npx qingflow-cli@latest install
|
|
|
21
21
|
## 运行
|
|
22
22
|
|
|
23
23
|
```bash
|
|
24
|
-
npx -y -p @qingflow-tech/qingflow-cli@1.1.
|
|
24
|
+
npx -y -p @qingflow-tech/qingflow-cli@1.1.57 qingflow
|
|
25
25
|
```
|
|
26
26
|
|
|
27
27
|
全局安装后可以直接运行:
|
|
@@ -62,7 +62,7 @@ qingflow-skills install --agent codex --scope user
|
|
|
62
62
|
如果你通过一次性 `npx -p` 执行 skills 安装,建议加 `--copy`,避免 symlink 指向 npm 临时执行缓存:
|
|
63
63
|
|
|
64
64
|
```bash
|
|
65
|
-
npx -y -p @qingflow-tech/qingflow-cli@1.1.
|
|
65
|
+
npx -y -p @qingflow-tech/qingflow-cli@1.1.57 qingflow-skills install --agent codex --scope user --copy
|
|
66
66
|
```
|
|
67
67
|
|
|
68
68
|
`qingflow-skills install` 默认使用 symlink,且遇到同名 skill 不会覆盖;只有显式传入 `--force` 才会替换。
|
package/package.json
CHANGED
package/pyproject.toml
CHANGED
|
@@ -31,7 +31,8 @@ qingflow builder views apply --app-key APP_KEY --schema-version v1alpha1 --view-
|
|
|
31
31
|
- 当前记录带到另一个应用用 `action: "add_data"`(`target_app_key` + `field_mappings`,通常 `source_field: "数据ID"`)。只打开页面用 `action: "link"` 加 `url`。审批、状态流转、关闭任务走流程,不要用普通按钮假装。
|
|
32
32
|
- `default_values` 的 key 和 `field_mappings[].target_field` 是目标应用字段。选项必须是目标字段的原文或 option id。不确定就不要编造;`CUSTOM_BUTTON_DEFAULT_VALUE_UNSUPPORTED` 时用 patch 改默认值,不要重建视图。
|
|
33
33
|
- `action_buttons_mode` 默认 `merge`。`replace` 加空数组只清绑定,不删按钮本体。已有按钮先 `builder button get --button-text`,唯一命中后用 `buttons[]` 的 `button_id` 绑定。
|
|
34
|
-
-
|
|
34
|
+
- 写出 `data_permission` 时 `type` 和 `scope` 都必填,优先 `{"type":"custom","scope":"all"}`。整段省略时创建路径才用这个默认。`filters` 只在 `type=custom` 且 `scope=custom` 时是数据范围。不要把 `filters` 叠在 `config` 或预设范围上,也不要把它当查询栏。
|
|
35
|
+
- 写出 `visibility` 时 `mode` 必填。`mode=specific` 必须带 `selectors`(各列表不单独必填,空对象表示尚未配置成员)。`mode=everyone` 时 `external_mode` 必须是 `workspace`。`external_mode=specific` 必须带 `external_selectors`。整段省略时创建路径按工作区可见。
|
|
35
36
|
- 查询栏不要放 relation、attachment、subtable、address、Q-Linker、code-block。
|
|
36
37
|
- 不要新建名为 `全部数据`、`我的数据`、`我发起的`、`待办`、`已办`、`抄送` 的视图。要改它们,先读 raw `view_key` 再 patch。`view_key` 不要加 `custom:` 前缀。
|
|
37
38
|
- 未带 `view_key` 时,唯一同名视图会被更新,重名返回 `AMBIGUOUS_VIEW`。局部修改用 patch,不要用只含少数字段的完整对象去覆盖。
|
|
@@ -311,7 +311,8 @@
|
|
|
311
311
|
"DataPermission": {
|
|
312
312
|
"type": "object",
|
|
313
313
|
"additionalProperties": false,
|
|
314
|
-
"
|
|
314
|
+
"required": ["type", "scope"],
|
|
315
|
+
"dataPermissionDescription": "写出本对象时 type 与 scope 都必填。优先写 custom + all。整段 data_permission 省略时,创建路径才按 custom + all。filters 只在 type=custom 且 scope=custom 时作为数据范围,不会叠在 config 或预设范围上。",
|
|
315
316
|
"properties": {
|
|
316
317
|
"type": {
|
|
317
318
|
"type": "string",
|
|
@@ -320,7 +321,7 @@
|
|
|
320
321
|
"custom"
|
|
321
322
|
],
|
|
322
323
|
"default": "custom",
|
|
323
|
-
"dataPermissionDescription": "
|
|
324
|
+
"dataPermissionDescription": "数据权限来源。写出 data_permission 时必填。config=跟随应用成员授权的数据权限,本视图的 scope 与 filters 不参与查询。custom=使用本视图自己的数据范围(scope)。别名 dataPermissionType(CONFIG/CUSTOM)。",
|
|
324
325
|
"x-backend": "dataPermissionType(CONFIG|CUSTOM)"
|
|
325
326
|
},
|
|
326
327
|
"scope": {
|
|
@@ -333,7 +334,7 @@
|
|
|
333
334
|
"custom"
|
|
334
335
|
],
|
|
335
336
|
"default": "all",
|
|
336
|
-
"dataScopeDescription": "
|
|
337
|
+
"dataScopeDescription": "写出 data_permission 时必填,且只在 type=custom 时生效。all=不追加数据范围;oneself=仅自己发起;dept=所在部门发起;subordinate=下属发起;custom=用 filters 作为数据范围。type=config 时不要用 scope 选择应用权限,应用授权组的范围写在成员授权上。",
|
|
337
338
|
"x-backend": "dataScope(ALL|ONESELF|DEPT|SUBORDINATE|CUSTOM)"
|
|
338
339
|
}
|
|
339
340
|
}
|
|
@@ -341,6 +342,34 @@
|
|
|
341
342
|
"Visibility": {
|
|
342
343
|
"type": "object",
|
|
343
344
|
"additionalProperties": false,
|
|
345
|
+
"required": ["mode"],
|
|
346
|
+
"visibilityDescription": "写出 visibility 时 mode 必填。mode=specific 时必须带 selectors;selectors 各列表都不是单独必填,空对象表示指定范围但尚未配置成员。mode=everyone 时 external_mode 必须为 workspace。external_mode=specific 时必须带 external_selectors。整段省略时创建路径按 workspace + external_mode=not。",
|
|
347
|
+
"allOf": [
|
|
348
|
+
{
|
|
349
|
+
"if": {
|
|
350
|
+
"properties": { "mode": { "const": "specific" } },
|
|
351
|
+
"required": ["mode"]
|
|
352
|
+
},
|
|
353
|
+
"then": { "required": ["selectors"] }
|
|
354
|
+
},
|
|
355
|
+
{
|
|
356
|
+
"if": {
|
|
357
|
+
"properties": { "mode": { "const": "everyone" } },
|
|
358
|
+
"required": ["mode"]
|
|
359
|
+
},
|
|
360
|
+
"then": {
|
|
361
|
+
"required": ["external_mode"],
|
|
362
|
+
"properties": { "external_mode": { "const": "workspace" } }
|
|
363
|
+
}
|
|
364
|
+
},
|
|
365
|
+
{
|
|
366
|
+
"if": {
|
|
367
|
+
"properties": { "external_mode": { "const": "specific" } },
|
|
368
|
+
"required": ["external_mode"]
|
|
369
|
+
},
|
|
370
|
+
"then": { "required": ["external_selectors"] }
|
|
371
|
+
}
|
|
372
|
+
],
|
|
344
373
|
"properties": {
|
|
345
374
|
"mode": {
|
|
346
375
|
"type": "string",
|
|
@@ -373,6 +402,7 @@
|
|
|
373
402
|
"VisibilitySelectors": {
|
|
374
403
|
"type": "object",
|
|
375
404
|
"additionalProperties": false,
|
|
405
|
+
"visibilitySelectorsDescription": "成员、部门、角色用不同列表表达,没有任何一个列表单独必填。mode=specific 时本对象本身必填;空对象是合法回读,表示指定范围但尚未配置成员。要真正授权时,至少填一个非空列表。",
|
|
376
406
|
"properties": {
|
|
377
407
|
"member_uids": {
|
|
378
408
|
"type": "array",
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
3
|
"$id": "https://qingflow.com/schemas/builder/views/v1alpha1/details/data-permission.json",
|
|
4
4
|
"title": "Qingflow Views data permission configuration",
|
|
5
|
-
"dataPermissionDescription": "视图数据权限片段(schema_kind=data-permission)
|
|
5
|
+
"dataPermissionDescription": "视图数据权限片段(schema_kind=data-permission)。写出 data_permission 时 type 与 scope 都必填,优先 {type: custom, scope: all}。整段省略时创建路径才按 custom + all。type 选来源,scope 只在 type=custom 时生效;filters 只在 type=custom 且 scope=custom 时作为数据范围。字段直接并入完整视图声明。",
|
|
6
6
|
"type": "object",
|
|
7
7
|
"additionalProperties": false,
|
|
8
8
|
"properties": {
|
|
@@ -36,7 +36,7 @@
|
|
|
36
36
|
"fieldSchema": "字段类型、默认值等表单侧细节用 app_form_schema 传 schema_kind=field 和 field_type 获取(CLI: builder app-form schema --schema-kind field --field-type TYPE)。"
|
|
37
37
|
}
|
|
38
38
|
},
|
|
39
|
-
"x-qingflow-apply-semantics": "
|
|
39
|
+
"x-qingflow-apply-semantics": "写出 data_permission 时 type 与 scope 都必填,优先 type=custom、scope=all。整段省略时创建路径才按 custom + all。只有要跟随应用成员授权时才用 type=config,此时不要用 scope 表达范围。filters 仅在 type=custom 且 scope=custom 时作为数据范围;省略 filters 表示保留现有规则,空数组表示清空。",
|
|
40
40
|
"x-qingflow-mode-requirements": {
|
|
41
41
|
"default": "未声明 data_permission 时按 custom + all 创建。需要限制行时再改 scope,不要默认改成 config。",
|
|
42
42
|
"config": "跟随应用成员授权的数据权限。视图上的 scope、filters 不参与查询。应用授权组自己可以是全部、自己、部门、下属或自定义公式,那些规则写在成员授权上,不写在视图声明里。",
|
|
@@ -199,7 +199,8 @@
|
|
|
199
199
|
"DataPermission": {
|
|
200
200
|
"type": "object",
|
|
201
201
|
"additionalProperties": false,
|
|
202
|
-
"
|
|
202
|
+
"required": ["type", "scope"],
|
|
203
|
+
"dataPermissionDescription": "写出本对象时 type 与 scope 都必填。优先写 custom + all。整段 data_permission 省略时,创建路径才按 custom + all。filters 只在 type=custom 且 scope=custom 时作为数据范围,不会叠在 config 或预设范围上。",
|
|
203
204
|
"properties": {
|
|
204
205
|
"type": {
|
|
205
206
|
"type": "string",
|
|
@@ -208,7 +209,7 @@
|
|
|
208
209
|
"custom"
|
|
209
210
|
],
|
|
210
211
|
"default": "custom",
|
|
211
|
-
"dataPermissionDescription": "
|
|
212
|
+
"dataPermissionDescription": "数据权限来源。写出 data_permission 时必填。config=跟随应用成员授权的数据权限,本视图的 scope 与 filters 不参与查询。custom=使用本视图自己的数据范围(scope)。别名 dataPermissionType(CONFIG/CUSTOM)。",
|
|
212
213
|
"x-backend": "viewgraph.dataPermissionType(CONFIG|CUSTOM)"
|
|
213
214
|
},
|
|
214
215
|
"scope": {
|
|
@@ -221,7 +222,7 @@
|
|
|
221
222
|
"custom"
|
|
222
223
|
],
|
|
223
224
|
"default": "all",
|
|
224
|
-
"dataScopeDescription": "
|
|
225
|
+
"dataScopeDescription": "写出 data_permission 时必填,且只在 type=custom 时生效。all=不追加数据范围;oneself=仅自己发起;dept=所在部门发起;subordinate=下属发起;custom=用 filters 作为数据范围(规则在 complete 或 schema_kind=data-permission)。type=config 时不要用 scope 选择应用权限,应用授权组的范围写在成员授权上。dataset-v0 实测分布:all×560 / custom×74 / oneself×71。",
|
|
225
226
|
"x-backend": "viewgraph.dataScope(ALL|ONESELF|DEPT|SUBORDINATE|CUSTOM)"
|
|
226
227
|
}
|
|
227
228
|
}
|