@qingflow-tech/qingflow-cli 1.1.43 → 1.1.44

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 (77) hide show
  1. package/README.md +13 -6
  2. package/entry_point.py +1 -1
  3. package/npm/bin/qingflow.mjs +1 -2
  4. package/npm/lib/runtime.mjs +3 -7
  5. package/package.json +2 -2
  6. package/pyproject.toml +3 -4
  7. package/skills/qingflow-app-form/SKILL.md +66 -0
  8. package/skills/qingflow-app-form/agents/openai.yaml +4 -0
  9. package/skills/qingflow-cli/SKILL.md +8 -6
  10. package/skills/qingflow-cli/manifest.yaml +1 -1
  11. package/skills/qingflow-cli/reference/QINGFLOW_CLI_BUILDER_APP_DELIVERY_WORKFLOW.md +4 -4
  12. package/skills/qingflow-cli/reference/QINGFLOW_CLI_EXPLORATION_REPORT.md +1 -1
  13. package/skills/qingflow-cli/reference/QINGFLOW_CLI_FIELD_DATA_TYPES.md +1 -1
  14. package/skills/qingflow-cli/reference/QINGFLOW_CLI_SCHEMA_APPLY_FIELD_TYPES_AND_SCENARIOS.md +4 -4
  15. package/skills/qingflow-cli/reference/builder/10-build-single-app.md +5 -5
  16. package/skills/qingflow-cli/reference/builder/20-build-complete-system.md +14 -14
  17. package/skills/qingflow-cli/reference/builder/30-schema-fields.md +102 -103
  18. package/skills/qingflow-cli/reference/builder/40-layout.md +39 -31
  19. package/skills/qingflow-cli/reference/builder/README.md +9 -9
  20. package/skills/qingflow-cli/reference/builder/code-integrations/README.md +4 -2
  21. package/skills/qingflow-cli/reference/builder/code-integrations/code-block.md +2 -0
  22. package/skills/qingflow-cli/reference/builder/code-integrations/q-linker.md +2 -0
  23. package/skills/qingflow-cli/reference/builder/reference/app-delivery-sop.md +45 -38
  24. package/skills/qingflow-cli/reference/core/QINGFLOW_CLI_EXPLORATION_REPORT.md +1 -1
  25. package/skills/qingflow-cli/reference/core/QINGFLOW_CLI_FIELD_DATA_TYPES.md +1 -1
  26. package/skills/qingflow-cli/reference/examples/README.md +3 -3
  27. package/skills/qingflow-common/SKILL.md +47 -0
  28. package/skills/qingflow-common/agents/openai.yaml +4 -0
  29. package/src/qingflow_mcp/__main__.py +2 -3
  30. package/src/qingflow_mcp/app_form_compat.py +104 -0
  31. package/src/qingflow_mcp/app_form_validator.py +462 -0
  32. package/src/qingflow_mcp/builder_facade/app_form.py +3992 -0
  33. package/src/qingflow_mcp/builder_facade/app_form_schema.py +425 -0
  34. package/src/qingflow_mcp/builder_facade/schemas/app_form/manifest.json +42 -0
  35. package/src/qingflow_mcp/builder_facade/schemas/app_form/v1alpha1/complete.json +2969 -0
  36. package/src/qingflow_mcp/builder_facade/schemas/app_form/v1alpha1/fields/address.json +392 -0
  37. package/src/qingflow_mcp/builder_facade/schemas/app_form/v1alpha1/fields/amount.json +236 -0
  38. package/src/qingflow_mcp/builder_facade/schemas/app_form/v1alpha1/fields/attachment.json +425 -0
  39. package/src/qingflow_mcp/builder_facade/schemas/app_form/v1alpha1/fields/code_block.json +318 -0
  40. package/src/qingflow_mcp/builder_facade/schemas/app_form/v1alpha1/fields/data_relation.json +580 -0
  41. package/src/qingflow_mcp/builder_facade/schemas/app_form/v1alpha1/fields/date.json +150 -0
  42. package/src/qingflow_mcp/builder_facade/schemas/app_form/v1alpha1/fields/datetime.json +150 -0
  43. package/src/qingflow_mcp/builder_facade/schemas/app_form/v1alpha1/fields/department.json +345 -0
  44. package/src/qingflow_mcp/builder_facade/schemas/app_form/v1alpha1/fields/email.json +190 -0
  45. package/src/qingflow_mcp/builder_facade/schemas/app_form/v1alpha1/fields/link.json +190 -0
  46. package/src/qingflow_mcp/builder_facade/schemas/app_form/v1alpha1/fields/long_text.json +190 -0
  47. package/src/qingflow_mcp/builder_facade/schemas/app_form/v1alpha1/fields/member.json +484 -0
  48. package/src/qingflow_mcp/builder_facade/schemas/app_form/v1alpha1/fields/multi_select.json +214 -0
  49. package/src/qingflow_mcp/builder_facade/schemas/app_form/v1alpha1/fields/number.json +236 -0
  50. package/src/qingflow_mcp/builder_facade/schemas/app_form/v1alpha1/fields/phone.json +199 -0
  51. package/src/qingflow_mcp/builder_facade/schemas/app_form/v1alpha1/fields/q_linker.json +412 -0
  52. package/src/qingflow_mcp/builder_facade/schemas/app_form/v1alpha1/fields/relation.json +454 -0
  53. package/src/qingflow_mcp/builder_facade/schemas/app_form/v1alpha1/fields/single_choice.json +214 -0
  54. package/src/qingflow_mcp/builder_facade/schemas/app_form/v1alpha1/fields/single_select.json +214 -0
  55. package/src/qingflow_mcp/builder_facade/schemas/app_form/v1alpha1/fields/subtable.json +1921 -0
  56. package/src/qingflow_mcp/builder_facade/schemas/app_form/v1alpha1/fields/text.json +190 -0
  57. package/src/qingflow_mcp/builder_facade/schemas/app_form/v1alpha1/formula.json +1594 -0
  58. package/src/qingflow_mcp/builder_facade/schemas/app_form/v1alpha1/summary.json +718 -0
  59. package/src/qingflow_mcp/builder_facade/service.py +8 -4
  60. package/src/qingflow_mcp/cli/commands/builder.py +93 -28
  61. package/src/qingflow_mcp/cli/json_io.py +21 -2
  62. package/src/qingflow_mcp/cli/main.py +3 -39
  63. package/src/qingflow_mcp/public_surface.py +5 -2
  64. package/src/qingflow_mcp/response_trim.py +50 -0
  65. package/src/qingflow_mcp/server.py +24 -3
  66. package/src/qingflow_mcp/server_app_builder.py +44 -87
  67. package/src/qingflow_mcp/tools/ai_builder_tools.py +103 -100
  68. package/src/qingflow_mcp/tools/app_tools.py +46 -65
  69. package/src/qingflow_mcp/tools/record_tools.py +3 -3
  70. package/src/qingflow_mcp/version.py +2 -4
  71. package/docs/local-agent-install.md +0 -370
  72. package/skills/qingflow-mcp-setup/SKILL.md +0 -115
  73. package/skills/qingflow-mcp-setup/agents/openai.yaml +0 -4
  74. package/skills/qingflow-mcp-setup/references/claude-desktop.md +0 -34
  75. package/skills/qingflow-mcp-setup/references/environments.md +0 -62
  76. package/skills/qingflow-mcp-setup/references/generic-stdio.md +0 -32
  77. package/skills/qingflow-mcp-setup/scripts/check_local_server.sh +0 -38
@@ -0,0 +1,580 @@
1
+ {
2
+ "$defs": {
3
+ "AliasSelector": {
4
+ "additionalProperties": false,
5
+ "description": "Q-Linker 或代码块输出别名;已有输出优先携带 aliasId。",
6
+ "properties": {
7
+ "aliasId": {
8
+ "description": "后端生成的别名 ID;新增输出时可省略。",
9
+ "minimum": 1,
10
+ "type": "integer"
11
+ },
12
+ "name": {
13
+ "description": "输出别名名称。",
14
+ "minLength": 1,
15
+ "type": "string"
16
+ }
17
+ },
18
+ "type": "object"
19
+ },
20
+ "DataRelationCondition": {
21
+ "additionalProperties": false,
22
+ "description": "一条数据关联过滤条件;sourceField 必须属于数据来源,operator 必须适用于该字段类型。固定值请使用 literal operand,不要直接声明后端 matchRules。",
23
+ "properties": {
24
+ "operand": {
25
+ "$ref": "#/$defs/DataRelationOperand",
26
+ "description": "比较值来源;可为字面量、当前表单字段或输出别名。"
27
+ },
28
+ "operator": {
29
+ "description": "比较运算符;Reconciler 会结合字段类型校验可用性。",
30
+ "enum": [
31
+ "equal",
32
+ "not_equal",
33
+ "contains",
34
+ "not_contains",
35
+ "greater_than",
36
+ "greater_or_equal",
37
+ "less_than",
38
+ "less_or_equal",
39
+ "dynamic_range",
40
+ "equal_any",
41
+ "not_equal_any",
42
+ "is_empty",
43
+ "is_not_empty",
44
+ "belongs_to",
45
+ "not_belongs_to",
46
+ "subordinate_to",
47
+ "not_subordinate_to",
48
+ "subordinate_included",
49
+ "subordinate_not_included",
50
+ "fuzzy_match",
51
+ "contains_any",
52
+ "contains_all",
53
+ "decimal_range"
54
+ ]
55
+ },
56
+ "sourceField": {
57
+ "$ref": "#/$defs/FieldSelector",
58
+ "description": "被过滤的数据源字段。"
59
+ }
60
+ },
61
+ "required": [
62
+ "sourceField",
63
+ "operator",
64
+ "operand"
65
+ ],
66
+ "type": "object"
67
+ },
68
+ "DataRelationConfig": {
69
+ "additionalProperties": false,
70
+ "description": "数据关联字段配置;从应用、Q-Linker 或代码块输出中读取数据。",
71
+ "properties": {
72
+ "aggregation": {
73
+ "description": "可选聚合方式;null 表示不聚合。",
74
+ "enum": [
75
+ "sum",
76
+ "average",
77
+ "max",
78
+ "min",
79
+ "first",
80
+ "last",
81
+ "filled_count",
82
+ "empty_count",
83
+ "count",
84
+ null
85
+ ],
86
+ "type": [
87
+ "string",
88
+ "null"
89
+ ]
90
+ },
91
+ "customButton": {
92
+ "$ref": "#/$defs/DataRelationCustomButton",
93
+ "description": "可选自定义按钮配置。"
94
+ },
95
+ "filters": {
96
+ "$ref": "#/$defs/DataRelationFilters",
97
+ "description": "可选过滤条件;支持简单条件组或高级公式。"
98
+ },
99
+ "sort": {
100
+ "$ref": "#/$defs/DataRelationSort",
101
+ "description": "可选排序配置。"
102
+ },
103
+ "source": {
104
+ "$ref": "#/$defs/DataRelationSource",
105
+ "description": "数据来源;按 kind 选择一种来源结构。"
106
+ }
107
+ },
108
+ "required": [
109
+ "source"
110
+ ],
111
+ "type": "object"
112
+ },
113
+ "DataRelationCustomButton": {
114
+ "description": "数据关联自定义按钮;启用时必须引用已有 buttonId。",
115
+ "oneOf": [
116
+ {
117
+ "additionalProperties": false,
118
+ "properties": {
119
+ "enabled": {
120
+ "const": false
121
+ }
122
+ },
123
+ "required": [
124
+ "enabled"
125
+ ],
126
+ "type": "object"
127
+ },
128
+ {
129
+ "additionalProperties": false,
130
+ "properties": {
131
+ "buttonId": {
132
+ "minimum": 1,
133
+ "type": "integer"
134
+ },
135
+ "enabled": {
136
+ "const": true
137
+ }
138
+ },
139
+ "required": [
140
+ "enabled",
141
+ "buttonId"
142
+ ],
143
+ "type": "object"
144
+ }
145
+ ]
146
+ },
147
+ "DataRelationFilters": {
148
+ "description": "simple 模式的外层组为 OR、组内条件为 AND;advanced 模式使用完整公式。simple 条件只声明业务值,builder 会生成后端保存所需的 judgeValues 和 judgeValueDetails,不要在声明中直接填写这两个后端属性。",
149
+ "oneOf": [
150
+ {
151
+ "additionalProperties": false,
152
+ "properties": {
153
+ "groups": {
154
+ "description": "OR 条件组数组;每个内层数组是一组 AND 条件。",
155
+ "items": {
156
+ "items": {
157
+ "$ref": "#/$defs/DataRelationCondition"
158
+ },
159
+ "minItems": 1,
160
+ "type": "array"
161
+ },
162
+ "type": "array"
163
+ },
164
+ "mode": {
165
+ "const": "simple"
166
+ }
167
+ },
168
+ "required": [
169
+ "mode",
170
+ "groups"
171
+ ],
172
+ "type": "object"
173
+ },
174
+ {
175
+ "additionalProperties": false,
176
+ "properties": {
177
+ "formula": {
178
+ "description": "解码后的高级筛选公式。",
179
+ "minLength": 1,
180
+ "type": "string"
181
+ },
182
+ "mode": {
183
+ "const": "advanced"
184
+ }
185
+ },
186
+ "required": [
187
+ "mode",
188
+ "formula"
189
+ ],
190
+ "type": "object"
191
+ }
192
+ ]
193
+ },
194
+ "DataRelationOperand": {
195
+ "description": "数据关联条件右值的判别联合。",
196
+ "oneOf": [
197
+ {
198
+ "additionalProperties": false,
199
+ "properties": {
200
+ "kind": {
201
+ "const": "literal"
202
+ },
203
+ "values": {
204
+ "description": "固定比较值列表;值必须使用字符串。选择类来源字段填写已有选项的展示文本,builder 会在 apply 时解析为后端 optId;解析不到会在写入前报错。is_empty/is_not_empty 必须传空数组,其他运算符至少传一项。",
205
+ "items": {
206
+ "type": "string"
207
+ },
208
+ "type": "array"
209
+ }
210
+ },
211
+ "required": [
212
+ "kind",
213
+ "values"
214
+ ],
215
+ "type": "object"
216
+ },
217
+ {
218
+ "additionalProperties": false,
219
+ "properties": {
220
+ "field": {
221
+ "$ref": "#/$defs/FieldSelector"
222
+ },
223
+ "kind": {
224
+ "const": "current_field"
225
+ }
226
+ },
227
+ "required": [
228
+ "kind",
229
+ "field"
230
+ ],
231
+ "type": "object"
232
+ },
233
+ {
234
+ "additionalProperties": false,
235
+ "properties": {
236
+ "alias": {
237
+ "$ref": "#/$defs/AliasSelector"
238
+ },
239
+ "kind": {
240
+ "const": "alias"
241
+ },
242
+ "producer": {
243
+ "$ref": "#/$defs/FieldSelector"
244
+ }
245
+ },
246
+ "required": [
247
+ "kind",
248
+ "producer",
249
+ "alias"
250
+ ],
251
+ "type": "object"
252
+ }
253
+ ]
254
+ },
255
+ "DataRelationSort": {
256
+ "description": "数据关联排序开关;启用时必须指定排序来源和方向。",
257
+ "oneOf": [
258
+ {
259
+ "additionalProperties": false,
260
+ "properties": {
261
+ "enabled": {
262
+ "const": false
263
+ }
264
+ },
265
+ "required": [
266
+ "enabled"
267
+ ],
268
+ "type": "object"
269
+ },
270
+ {
271
+ "additionalProperties": false,
272
+ "properties": {
273
+ "by": {
274
+ "$ref": "#/$defs/DataRelationSortBy"
275
+ },
276
+ "direction": {
277
+ "enum": [
278
+ "asc",
279
+ "desc"
280
+ ]
281
+ },
282
+ "enabled": {
283
+ "const": true
284
+ }
285
+ },
286
+ "required": [
287
+ "enabled",
288
+ "by",
289
+ "direction"
290
+ ],
291
+ "type": "object"
292
+ }
293
+ ]
294
+ },
295
+ "DataRelationSortBy": {
296
+ "description": "排序值来源;可为来源字段或输出别名。",
297
+ "oneOf": [
298
+ {
299
+ "additionalProperties": false,
300
+ "properties": {
301
+ "field": {
302
+ "$ref": "#/$defs/FieldSelector"
303
+ },
304
+ "kind": {
305
+ "const": "field"
306
+ }
307
+ },
308
+ "required": [
309
+ "kind",
310
+ "field"
311
+ ],
312
+ "type": "object"
313
+ },
314
+ {
315
+ "additionalProperties": false,
316
+ "properties": {
317
+ "alias": {
318
+ "$ref": "#/$defs/AliasSelector"
319
+ },
320
+ "kind": {
321
+ "const": "alias"
322
+ },
323
+ "producer": {
324
+ "$ref": "#/$defs/FieldSelector"
325
+ }
326
+ },
327
+ "required": [
328
+ "kind",
329
+ "producer",
330
+ "alias"
331
+ ],
332
+ "type": "object"
333
+ }
334
+ ]
335
+ },
336
+ "DataRelationSource": {
337
+ "description": "数据关联来源判别联合;kind 决定其余必填字段。",
338
+ "oneOf": [
339
+ {
340
+ "additionalProperties": false,
341
+ "properties": {
342
+ "appKey": {
343
+ "description": "来源应用的 appKey。",
344
+ "minLength": 1,
345
+ "type": "string"
346
+ },
347
+ "field": {
348
+ "$ref": "#/$defs/FieldSelector",
349
+ "description": "来源应用中的结果字段。"
350
+ },
351
+ "kind": {
352
+ "const": "app"
353
+ }
354
+ },
355
+ "required": [
356
+ "kind",
357
+ "appKey",
358
+ "field"
359
+ ],
360
+ "type": "object"
361
+ },
362
+ {
363
+ "additionalProperties": false,
364
+ "properties": {
365
+ "alias": {
366
+ "$ref": "#/$defs/AliasSelector",
367
+ "description": "Q-Linker 输出别名。"
368
+ },
369
+ "kind": {
370
+ "const": "q_linker"
371
+ },
372
+ "producer": {
373
+ "$ref": "#/$defs/FieldSelector",
374
+ "description": "当前应用中的 Q-Linker 字段。"
375
+ }
376
+ },
377
+ "required": [
378
+ "kind",
379
+ "producer",
380
+ "alias"
381
+ ],
382
+ "type": "object"
383
+ },
384
+ {
385
+ "additionalProperties": false,
386
+ "properties": {
387
+ "alias": {
388
+ "$ref": "#/$defs/AliasSelector",
389
+ "description": "代码块输出别名。"
390
+ },
391
+ "kind": {
392
+ "const": "code_block"
393
+ },
394
+ "producer": {
395
+ "$ref": "#/$defs/FieldSelector",
396
+ "description": "当前应用中的代码块字段。"
397
+ }
398
+ },
399
+ "required": [
400
+ "kind",
401
+ "producer",
402
+ "alias"
403
+ ],
404
+ "type": "object"
405
+ }
406
+ ]
407
+ },
408
+ "FieldCommon": {
409
+ "allOf": [
410
+ {
411
+ "if": {
412
+ "properties": {
413
+ "defaultType": {
414
+ "const": 2
415
+ }
416
+ },
417
+ "required": [
418
+ "defaultType"
419
+ ]
420
+ },
421
+ "then": {
422
+ "properties": {
423
+ "defaultValue": {
424
+ "type": "null"
425
+ }
426
+ }
427
+ }
428
+ },
429
+ {
430
+ "if": {
431
+ "properties": {
432
+ "defaultType": {
433
+ "const": 3
434
+ }
435
+ },
436
+ "required": [
437
+ "defaultType"
438
+ ]
439
+ },
440
+ "then": {
441
+ "properties": {
442
+ "defaultValue": {
443
+ "minLength": 1,
444
+ "type": [
445
+ "string",
446
+ "null"
447
+ ]
448
+ }
449
+ }
450
+ }
451
+ }
452
+ ],
453
+ "anyOf": [
454
+ {
455
+ "required": [
456
+ "queId"
457
+ ]
458
+ },
459
+ {
460
+ "required": [
461
+ "name"
462
+ ]
463
+ }
464
+ ],
465
+ "description": "顶层业务字段的公共属性;字段类型由 TopField 的判别分支定义。",
466
+ "properties": {
467
+ "beingRequired": {
468
+ "description": "该字段是否必填;缺失时保留已有字段当前值。",
469
+ "type": "boolean"
470
+ },
471
+ "defaultType": {
472
+ "default": 1,
473
+ "description": "默认值类型,与 defaultValue 联动;1 表示静态值,2 表示关联/绑定值且 defaultValue 只能省略或为 null,3 表示公式值且提供 defaultValue 时必须为非空公式文本。省略 defaultType 但提供 defaultValue 时按 1 处理。",
474
+ "enum": [
475
+ 1,
476
+ 2,
477
+ 3
478
+ ],
479
+ "type": "integer"
480
+ },
481
+ "defaultValue": {
482
+ "$ref": "#/$defs/ScalarDefaultValue",
483
+ "description": "普通字段的默认值;后端 queDefaultValue 为字符串,因此数字等字面量也必须以字符串传入。defaultType 为 1 时表示静态文本,为 3 时表示公式文本,为 2 时不携带字面量默认值。表格、地址、附件、引用等结构化默认值必须放在具体字段 config.defaultValues。显式 null 表示清除默认值。"
484
+ },
485
+ "name": {
486
+ "description": "字段展示名称;新增字段必填,已有字段可在携带 queId 时省略;同一父级内唯一。",
487
+ "minLength": 1,
488
+ "type": "string"
489
+ },
490
+ "queId": {
491
+ "description": "已有字段的后端 ID;更新时用于精确定位并复用,新增字段通常省略。",
492
+ "minimum": 1,
493
+ "type": "integer"
494
+ },
495
+ "questionDescription": {
496
+ "description": "字段说明;null 或空字符串表示清空。",
497
+ "type": [
498
+ "string",
499
+ "null"
500
+ ]
501
+ },
502
+ "questionType": {
503
+ "description": "字段类型;具体可用值由当前字段详情 Schema 的判别分支约束。",
504
+ "type": "string"
505
+ },
506
+ "width": {
507
+ "description": "字段在所在行的宽度百分比;只能选择 25、50、75 或 100。",
508
+ "enum": [
509
+ 25,
510
+ 50,
511
+ 75,
512
+ 100
513
+ ],
514
+ "type": "integer"
515
+ }
516
+ },
517
+ "type": "object"
518
+ },
519
+ "FieldSelector": {
520
+ "additionalProperties": false,
521
+ "anyOf": [
522
+ {
523
+ "required": [
524
+ "queId"
525
+ ]
526
+ },
527
+ {
528
+ "required": [
529
+ "name"
530
+ ]
531
+ }
532
+ ],
533
+ "description": "字段选择器;用于定位应用的数据标题、数据封面、自定义编号取值来源或其他配置引用的字段。至少提供 queId 或 name,两者同时提供时必须指向同一字段。",
534
+ "properties": {
535
+ "name": {
536
+ "description": "字段名称;仅在当前作用域内唯一时可用于解析。",
537
+ "minLength": 1,
538
+ "type": "string"
539
+ },
540
+ "queId": {
541
+ "description": "已有字段的后端 ID;优先用于精确解析。",
542
+ "minimum": 1,
543
+ "type": "integer"
544
+ }
545
+ },
546
+ "type": "object"
547
+ },
548
+ "ScalarDefaultValue": {
549
+ "description": "后端 queDefaultValue 支持的普通字段默认值;非空值必须是字符串,显式 null 表示清除默认值。数字和布尔值应先转换为字符串,对象和数组必须使用字段专用默认值配置。defaultType 为 3 时,通过 AppForm Schema 查询能力传入当前 schema_version 并设置 schema_kind=formula 获取公式语法、字段引用、运算符和全部函数说明;CLI 使用 builder app-form schema --schema-kind formula。需要配置结构化默认值时,传入当前 schema_version,并将字段的 questionType 作为 field_type 获取字段详细 Schema。",
550
+ "type": [
551
+ "null",
552
+ "string"
553
+ ]
554
+ }
555
+ },
556
+ "$id": "https://builder.qingflow.com/schemas/app-form-apply/v1alpha1/fields/data_relation.json",
557
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
558
+ "allOf": [
559
+ {
560
+ "$ref": "#/$defs/FieldCommon"
561
+ },
562
+ {
563
+ "properties": {
564
+ "config": {
565
+ "$ref": "#/$defs/DataRelationConfig"
566
+ },
567
+ "questionType": {
568
+ "const": "data_relation"
569
+ }
570
+ },
571
+ "required": [
572
+ "questionType",
573
+ "config"
574
+ ]
575
+ }
576
+ ],
577
+ "title": "Qingflow AppForm v1alpha1 data_relation field",
578
+ "type": "object",
579
+ "unevaluatedProperties": false
580
+ }