@qingflow-tech/qingflow-cli 1.1.42 → 1.1.43-beta.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (63) hide show
  1. package/README.md +5 -4
  2. package/package.json +2 -1
  3. package/pyproject.toml +3 -2
  4. package/skills/qingflow-app-form/SKILL.md +53 -0
  5. package/skills/qingflow-app-form/agents/openai.yaml +4 -0
  6. package/skills/qingflow-cli/SKILL.md +6 -6
  7. package/skills/qingflow-cli/manifest.yaml +1 -1
  8. package/skills/qingflow-cli/reference/QINGFLOW_CLI_BUILDER_APP_DELIVERY_WORKFLOW.md +4 -4
  9. package/skills/qingflow-cli/reference/QINGFLOW_CLI_EXPLORATION_REPORT.md +1 -1
  10. package/skills/qingflow-cli/reference/QINGFLOW_CLI_FIELD_DATA_TYPES.md +1 -1
  11. package/skills/qingflow-cli/reference/QINGFLOW_CLI_SCHEMA_APPLY_FIELD_TYPES_AND_SCENARIOS.md +4 -4
  12. package/skills/qingflow-cli/reference/builder/10-build-single-app.md +5 -5
  13. package/skills/qingflow-cli/reference/builder/20-build-complete-system.md +14 -14
  14. package/skills/qingflow-cli/reference/builder/30-schema-fields.md +98 -101
  15. package/skills/qingflow-cli/reference/builder/40-layout.md +39 -31
  16. package/skills/qingflow-cli/reference/builder/README.md +9 -9
  17. package/skills/qingflow-cli/reference/builder/code-integrations/README.md +4 -2
  18. package/skills/qingflow-cli/reference/builder/code-integrations/code-block.md +2 -0
  19. package/skills/qingflow-cli/reference/builder/code-integrations/q-linker.md +2 -0
  20. package/skills/qingflow-cli/reference/builder/reference/app-delivery-sop.md +45 -38
  21. package/skills/qingflow-cli/reference/core/QINGFLOW_CLI_EXPLORATION_REPORT.md +1 -1
  22. package/skills/qingflow-cli/reference/core/QINGFLOW_CLI_FIELD_DATA_TYPES.md +1 -1
  23. package/skills/qingflow-cli/reference/examples/README.md +3 -3
  24. package/skills/qingflow-mcp-setup/SKILL.md +1 -1
  25. package/src/qingflow_mcp/app_form_compat.py +120 -0
  26. package/src/qingflow_mcp/app_form_validator.py +199 -0
  27. package/src/qingflow_mcp/builder_facade/app_form.py +3365 -0
  28. package/src/qingflow_mcp/builder_facade/app_form_schema.py +269 -0
  29. package/src/qingflow_mcp/builder_facade/schemas/app_form/manifest.json +37 -0
  30. package/src/qingflow_mcp/builder_facade/schemas/app_form/v1alpha1/complete.json +2909 -0
  31. package/src/qingflow_mcp/builder_facade/schemas/app_form/v1alpha1/fields/address.json +337 -0
  32. package/src/qingflow_mcp/builder_facade/schemas/app_form/v1alpha1/fields/amount.json +181 -0
  33. package/src/qingflow_mcp/builder_facade/schemas/app_form/v1alpha1/fields/attachment.json +373 -0
  34. package/src/qingflow_mcp/builder_facade/schemas/app_form/v1alpha1/fields/code_block.json +242 -0
  35. package/src/qingflow_mcp/builder_facade/schemas/app_form/v1alpha1/fields/data_relation.json +557 -0
  36. package/src/qingflow_mcp/builder_facade/schemas/app_form/v1alpha1/fields/date.json +95 -0
  37. package/src/qingflow_mcp/builder_facade/schemas/app_form/v1alpha1/fields/datetime.json +95 -0
  38. package/src/qingflow_mcp/builder_facade/schemas/app_form/v1alpha1/fields/department.json +290 -0
  39. package/src/qingflow_mcp/builder_facade/schemas/app_form/v1alpha1/fields/email.json +135 -0
  40. package/src/qingflow_mcp/builder_facade/schemas/app_form/v1alpha1/fields/link.json +135 -0
  41. package/src/qingflow_mcp/builder_facade/schemas/app_form/v1alpha1/fields/long_text.json +135 -0
  42. package/src/qingflow_mcp/builder_facade/schemas/app_form/v1alpha1/fields/member.json +429 -0
  43. package/src/qingflow_mcp/builder_facade/schemas/app_form/v1alpha1/fields/multi_select.json +159 -0
  44. package/src/qingflow_mcp/builder_facade/schemas/app_form/v1alpha1/fields/number.json +181 -0
  45. package/src/qingflow_mcp/builder_facade/schemas/app_form/v1alpha1/fields/phone.json +144 -0
  46. package/src/qingflow_mcp/builder_facade/schemas/app_form/v1alpha1/fields/q_linker.json +357 -0
  47. package/src/qingflow_mcp/builder_facade/schemas/app_form/v1alpha1/fields/relation.json +382 -0
  48. package/src/qingflow_mcp/builder_facade/schemas/app_form/v1alpha1/fields/single_choice.json +159 -0
  49. package/src/qingflow_mcp/builder_facade/schemas/app_form/v1alpha1/fields/single_select.json +159 -0
  50. package/src/qingflow_mcp/builder_facade/schemas/app_form/v1alpha1/fields/subtable.json +1831 -0
  51. package/src/qingflow_mcp/builder_facade/schemas/app_form/v1alpha1/fields/text.json +135 -0
  52. package/src/qingflow_mcp/builder_facade/schemas/app_form/v1alpha1/summary.json +736 -0
  53. package/src/qingflow_mcp/builder_facade/service.py +5 -2
  54. package/src/qingflow_mcp/cli/commands/builder.py +91 -28
  55. package/src/qingflow_mcp/cli/json_io.py +21 -2
  56. package/src/qingflow_mcp/cli/main.py +3 -39
  57. package/src/qingflow_mcp/cloud_oauth_proxy.py +96 -3
  58. package/src/qingflow_mcp/public_surface.py +5 -2
  59. package/src/qingflow_mcp/response_trim.py +48 -0
  60. package/src/qingflow_mcp/server_app_builder.py +38 -86
  61. package/src/qingflow_mcp/server_cloud.py +66 -1
  62. package/src/qingflow_mcp/tools/ai_builder_tools.py +93 -100
  63. package/src/qingflow_mcp/tools/app_tools.py +46 -65
@@ -0,0 +1,135 @@
1
+ {
2
+ "$defs": {
3
+ "FieldCommon": {
4
+ "description": "顶层业务字段的公共属性;字段类型由 TopField 的判别分支定义。",
5
+ "properties": {
6
+ "dataTitle": {
7
+ "description": "是否作为数据标题;整个 body 最多且必须按规则存在一个。",
8
+ "type": "boolean"
9
+ },
10
+ "defaultType": {
11
+ "default": 1,
12
+ "description": "默认值类型;1 表示静态值,2 表示关联/绑定值,3 表示公式值。",
13
+ "enum": [
14
+ 1,
15
+ 2,
16
+ 3
17
+ ],
18
+ "type": "integer"
19
+ },
20
+ "defaultValue": {
21
+ "$ref": "#/$defs/ScalarDefaultValue",
22
+ "description": "普通字段的标量默认值;表格、地址、附件、引用等结构化默认值必须放在具体字段 config.defaultValues。显式 null 表示清除默认值。"
23
+ },
24
+ "description": {
25
+ "description": "字段说明;null 或空字符串表示清空。",
26
+ "type": [
27
+ "string",
28
+ "null"
29
+ ]
30
+ },
31
+ "name": {
32
+ "description": "字段展示名称;同一父级内唯一,不单独作为字段身份。",
33
+ "minLength": 1,
34
+ "type": "string"
35
+ },
36
+ "queId": {
37
+ "description": "已有字段的后端 ID;get 返回,新增字段省略。",
38
+ "minimum": 1,
39
+ "type": "integer"
40
+ },
41
+ "required": {
42
+ "description": "是否必填;缺失时保留已有字段当前值。",
43
+ "type": "boolean"
44
+ },
45
+ "width": {
46
+ "description": "字段在所在行的宽度百分比;同一行要么全部提供且合计 100,要么全部省略。",
47
+ "maximum": 100,
48
+ "minimum": 1,
49
+ "type": "integer"
50
+ }
51
+ },
52
+ "required": [
53
+ "name"
54
+ ],
55
+ "type": "object"
56
+ },
57
+ "ScalarDefaultValue": {
58
+ "description": "不包含对象或数组的普通字段默认值。",
59
+ "type": [
60
+ "null",
61
+ "boolean",
62
+ "number",
63
+ "string"
64
+ ]
65
+ },
66
+ "TextConfig": {
67
+ "additionalProperties": false,
68
+ "description": "文字类字段的长度限制;省略表示保留当前值。",
69
+ "properties": {
70
+ "canScan": {
71
+ "description": "是否允许扫码输入。",
72
+ "type": [
73
+ "boolean",
74
+ "null"
75
+ ]
76
+ },
77
+ "maxWordCount": {
78
+ "description": "最多字数;null 表示清除限制。",
79
+ "minimum": 0,
80
+ "type": [
81
+ "integer",
82
+ "null"
83
+ ]
84
+ },
85
+ "minWordCount": {
86
+ "description": "最少字数;null 表示清除限制。",
87
+ "minimum": 0,
88
+ "type": [
89
+ "integer",
90
+ "null"
91
+ ]
92
+ },
93
+ "noRepeat": {
94
+ "description": "是否禁止重复值。",
95
+ "type": [
96
+ "boolean",
97
+ "null"
98
+ ]
99
+ },
100
+ "scanType": {
101
+ "description": "扫码类型 ID。",
102
+ "minimum": 0,
103
+ "type": [
104
+ "integer",
105
+ "null"
106
+ ]
107
+ }
108
+ },
109
+ "type": "object"
110
+ }
111
+ },
112
+ "$id": "https://builder.qingflow.com/schemas/app-form-apply/v1alpha1/fields/long_text.json",
113
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
114
+ "allOf": [
115
+ {
116
+ "$ref": "#/$defs/FieldCommon"
117
+ },
118
+ {
119
+ "properties": {
120
+ "config": {
121
+ "$ref": "#/$defs/TextConfig"
122
+ },
123
+ "type": {
124
+ "const": "long_text"
125
+ }
126
+ },
127
+ "required": [
128
+ "type"
129
+ ]
130
+ }
131
+ ],
132
+ "title": "Qingflow AppForm v1alpha1 long_text field",
133
+ "type": "object",
134
+ "unevaluatedProperties": false
135
+ }
@@ -0,0 +1,429 @@
1
+ {
2
+ "$defs": {
3
+ "DepartmentSelector": {
4
+ "additionalProperties": false,
5
+ "description": "部门身份;deptId 必填,deptName 仅用于展示。",
6
+ "properties": {
7
+ "deptId": {
8
+ "minimum": 1,
9
+ "type": "integer"
10
+ },
11
+ "deptName": {
12
+ "minLength": 1,
13
+ "type": "string"
14
+ }
15
+ },
16
+ "required": [
17
+ "deptId"
18
+ ],
19
+ "type": "object"
20
+ },
21
+ "DynamicMemberSelector": {
22
+ "additionalProperties": false,
23
+ "properties": {
24
+ "queId": {
25
+ "type": "integer"
26
+ },
27
+ "queTitle": {
28
+ "type": "string"
29
+ },
30
+ "type": {
31
+ "minimum": 1,
32
+ "type": "integer"
33
+ }
34
+ },
35
+ "required": [
36
+ "type"
37
+ ],
38
+ "type": "object"
39
+ },
40
+ "ExternalDepartmentSelector": {
41
+ "additionalProperties": false,
42
+ "properties": {
43
+ "deptId": {
44
+ "minimum": 1,
45
+ "type": "integer"
46
+ },
47
+ "deptName": {
48
+ "type": "string"
49
+ }
50
+ },
51
+ "required": [
52
+ "deptId"
53
+ ],
54
+ "type": "object"
55
+ },
56
+ "ExternalMemberSelector": {
57
+ "additionalProperties": false,
58
+ "properties": {
59
+ "email": {
60
+ "type": "string"
61
+ },
62
+ "nickName": {
63
+ "type": "string"
64
+ },
65
+ "uid": {
66
+ "minimum": 1,
67
+ "type": "integer"
68
+ }
69
+ },
70
+ "required": [
71
+ "uid"
72
+ ],
73
+ "type": "object"
74
+ },
75
+ "FieldCommon": {
76
+ "description": "顶层业务字段的公共属性;字段类型由 TopField 的判别分支定义。",
77
+ "properties": {
78
+ "dataTitle": {
79
+ "description": "是否作为数据标题;整个 body 最多且必须按规则存在一个。",
80
+ "type": "boolean"
81
+ },
82
+ "defaultType": {
83
+ "default": 1,
84
+ "description": "默认值类型;1 表示静态值,2 表示关联/绑定值,3 表示公式值。",
85
+ "enum": [
86
+ 1,
87
+ 2,
88
+ 3
89
+ ],
90
+ "type": "integer"
91
+ },
92
+ "defaultValue": {
93
+ "$ref": "#/$defs/ScalarDefaultValue",
94
+ "description": "普通字段的标量默认值;表格、地址、附件、引用等结构化默认值必须放在具体字段 config.defaultValues。显式 null 表示清除默认值。"
95
+ },
96
+ "description": {
97
+ "description": "字段说明;null 或空字符串表示清空。",
98
+ "type": [
99
+ "string",
100
+ "null"
101
+ ]
102
+ },
103
+ "name": {
104
+ "description": "字段展示名称;同一父级内唯一,不单独作为字段身份。",
105
+ "minLength": 1,
106
+ "type": "string"
107
+ },
108
+ "queId": {
109
+ "description": "已有字段的后端 ID;get 返回,新增字段省略。",
110
+ "minimum": 1,
111
+ "type": "integer"
112
+ },
113
+ "required": {
114
+ "description": "是否必填;缺失时保留已有字段当前值。",
115
+ "type": "boolean"
116
+ },
117
+ "width": {
118
+ "description": "字段在所在行的宽度百分比;同一行要么全部提供且合计 100,要么全部省略。",
119
+ "maximum": 100,
120
+ "minimum": 1,
121
+ "type": "integer"
122
+ }
123
+ },
124
+ "required": [
125
+ "name"
126
+ ],
127
+ "type": "object"
128
+ },
129
+ "FieldSelector": {
130
+ "additionalProperties": false,
131
+ "anyOf": [
132
+ {
133
+ "required": [
134
+ "queId"
135
+ ]
136
+ },
137
+ {
138
+ "required": [
139
+ "name"
140
+ ]
141
+ }
142
+ ],
143
+ "description": "跨字段引用选择器;至少提供 queId 或 name,两者同时提供时必须指向同一字段。",
144
+ "properties": {
145
+ "name": {
146
+ "description": "字段名称;仅在当前作用域内唯一时可用于解析。",
147
+ "minLength": 1,
148
+ "type": "string"
149
+ },
150
+ "queId": {
151
+ "description": "已有字段的后端 ID;优先用于精确解析。",
152
+ "minimum": 1,
153
+ "type": "integer"
154
+ }
155
+ },
156
+ "type": "object"
157
+ },
158
+ "MemberConfig": {
159
+ "additionalProperties": false,
160
+ "description": "成员字段的选择范围和默认成员。",
161
+ "properties": {
162
+ "canScan": {
163
+ "type": [
164
+ "boolean",
165
+ "null"
166
+ ]
167
+ },
168
+ "defaultMembers": {
169
+ "$ref": "#/$defs/MemberScope"
170
+ },
171
+ "memberScope": {
172
+ "$ref": "#/$defs/MemberScope"
173
+ },
174
+ "memberScopeRelation": {
175
+ "$ref": "#/$defs/SelectScopeRelation"
176
+ },
177
+ "noRepeat": {
178
+ "type": [
179
+ "boolean",
180
+ "null"
181
+ ]
182
+ },
183
+ "scanType": {
184
+ "minimum": 0,
185
+ "type": [
186
+ "integer",
187
+ "null"
188
+ ]
189
+ }
190
+ },
191
+ "type": "object"
192
+ },
193
+ "MemberScope": {
194
+ "description": "成员字段可选范围;all 为工作区全部成员,custom 为显式成员/部门/角色或动态成员,relation 为按字段关联。",
195
+ "oneOf": [
196
+ {
197
+ "additionalProperties": false,
198
+ "properties": {
199
+ "includeSubDeparts": {
200
+ "type": "boolean"
201
+ },
202
+ "mode": {
203
+ "const": "all"
204
+ }
205
+ },
206
+ "required": [
207
+ "mode"
208
+ ],
209
+ "type": "object"
210
+ },
211
+ {
212
+ "additionalProperties": false,
213
+ "properties": {
214
+ "departments": {
215
+ "items": {
216
+ "$ref": "#/$defs/DepartmentSelector"
217
+ },
218
+ "type": "array"
219
+ },
220
+ "dynamic": {
221
+ "items": {
222
+ "$ref": "#/$defs/DynamicMemberSelector"
223
+ },
224
+ "type": "array"
225
+ },
226
+ "externalDepartments": {
227
+ "items": {
228
+ "$ref": "#/$defs/ExternalDepartmentSelector"
229
+ },
230
+ "type": "array"
231
+ },
232
+ "externalMembers": {
233
+ "items": {
234
+ "$ref": "#/$defs/ExternalMemberSelector"
235
+ },
236
+ "type": "array"
237
+ },
238
+ "includeSubDeparts": {
239
+ "type": "boolean"
240
+ },
241
+ "members": {
242
+ "items": {
243
+ "$ref": "#/$defs/MemberSelector"
244
+ },
245
+ "type": "array"
246
+ },
247
+ "mode": {
248
+ "const": "custom"
249
+ },
250
+ "roles": {
251
+ "items": {
252
+ "$ref": "#/$defs/RoleSelector"
253
+ },
254
+ "type": "array"
255
+ }
256
+ },
257
+ "required": [
258
+ "mode"
259
+ ],
260
+ "type": "object"
261
+ },
262
+ {
263
+ "additionalProperties": false,
264
+ "properties": {
265
+ "departments": {
266
+ "items": {
267
+ "$ref": "#/$defs/DepartmentSelector"
268
+ },
269
+ "type": "array"
270
+ },
271
+ "dynamic": {
272
+ "items": {
273
+ "$ref": "#/$defs/DynamicMemberSelector"
274
+ },
275
+ "type": "array"
276
+ },
277
+ "externalDepartments": {
278
+ "items": {
279
+ "$ref": "#/$defs/ExternalDepartmentSelector"
280
+ },
281
+ "type": "array"
282
+ },
283
+ "externalMembers": {
284
+ "items": {
285
+ "$ref": "#/$defs/ExternalMemberSelector"
286
+ },
287
+ "type": "array"
288
+ },
289
+ "includeSubDeparts": {
290
+ "type": "boolean"
291
+ },
292
+ "members": {
293
+ "items": {
294
+ "$ref": "#/$defs/MemberSelector"
295
+ },
296
+ "type": "array"
297
+ },
298
+ "mode": {
299
+ "const": "relation"
300
+ },
301
+ "roles": {
302
+ "items": {
303
+ "$ref": "#/$defs/RoleSelector"
304
+ },
305
+ "type": "array"
306
+ }
307
+ },
308
+ "required": [
309
+ "mode"
310
+ ],
311
+ "type": "object"
312
+ }
313
+ ]
314
+ },
315
+ "MemberSelector": {
316
+ "additionalProperties": false,
317
+ "properties": {
318
+ "nickName": {
319
+ "minLength": 1,
320
+ "type": "string"
321
+ },
322
+ "uid": {
323
+ "minimum": 1,
324
+ "type": "integer"
325
+ }
326
+ },
327
+ "required": [
328
+ "uid"
329
+ ],
330
+ "type": "object"
331
+ },
332
+ "RoleSelector": {
333
+ "additionalProperties": false,
334
+ "properties": {
335
+ "roleId": {
336
+ "minimum": 1,
337
+ "type": "integer"
338
+ },
339
+ "roleName": {
340
+ "minLength": 1,
341
+ "type": "string"
342
+ }
343
+ },
344
+ "required": [
345
+ "roleId"
346
+ ],
347
+ "type": "object"
348
+ },
349
+ "ScalarDefaultValue": {
350
+ "description": "不包含对象或数组的普通字段默认值。",
351
+ "type": [
352
+ "null",
353
+ "boolean",
354
+ "number",
355
+ "string"
356
+ ]
357
+ },
358
+ "SelectScopeRelation": {
359
+ "additionalProperties": false,
360
+ "properties": {
361
+ "displayedField": {
362
+ "$ref": "#/$defs/FieldSelector"
363
+ },
364
+ "displayedFieldType": {
365
+ "type": [
366
+ "integer",
367
+ "null"
368
+ ]
369
+ },
370
+ "matchRuleFormula": {
371
+ "type": [
372
+ "string",
373
+ "null"
374
+ ]
375
+ },
376
+ "matchRuleType": {
377
+ "type": [
378
+ "integer",
379
+ "null"
380
+ ]
381
+ },
382
+ "matchRules": {
383
+ "type": [
384
+ "array",
385
+ "null"
386
+ ]
387
+ },
388
+ "targetAppKey": {
389
+ "minLength": 1,
390
+ "type": "string"
391
+ },
392
+ "targetAppTitle": {
393
+ "type": [
394
+ "string",
395
+ "null"
396
+ ]
397
+ }
398
+ },
399
+ "required": [
400
+ "displayedField",
401
+ "targetAppKey"
402
+ ],
403
+ "type": "object"
404
+ }
405
+ },
406
+ "$id": "https://builder.qingflow.com/schemas/app-form-apply/v1alpha1/fields/member.json",
407
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
408
+ "allOf": [
409
+ {
410
+ "$ref": "#/$defs/FieldCommon"
411
+ },
412
+ {
413
+ "properties": {
414
+ "config": {
415
+ "$ref": "#/$defs/MemberConfig"
416
+ },
417
+ "type": {
418
+ "const": "member"
419
+ }
420
+ },
421
+ "required": [
422
+ "type"
423
+ ]
424
+ }
425
+ ],
426
+ "title": "Qingflow AppForm v1alpha1 member field",
427
+ "type": "object",
428
+ "unevaluatedProperties": false
429
+ }