@qingflow-tech/qingflow-cli 1.1.41 → 1.1.43-beta.1

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 (51) hide show
  1. package/README.md +4 -4
  2. package/package.json +2 -1
  3. package/pyproject.toml +3 -2
  4. package/skills/qingflow-cli/reference/QINGFLOW_CLI_TASK_CONTEXT_WORKFLOW.md +1 -1
  5. package/skills/qingflow-cli/reference/task/QINGFLOW_CLI_TASK_CONTEXT_WORKFLOW.md +1 -1
  6. package/src/qingflow_mcp/app_form_compat.py +115 -0
  7. package/src/qingflow_mcp/app_form_validator.py +199 -0
  8. package/src/qingflow_mcp/builder_facade/app_form.py +2836 -0
  9. package/src/qingflow_mcp/builder_facade/app_form_schema.py +269 -0
  10. package/src/qingflow_mcp/builder_facade/schemas/app_form/manifest.json +37 -0
  11. package/src/qingflow_mcp/builder_facade/schemas/app_form/v1alpha1/complete.json +1766 -0
  12. package/src/qingflow_mcp/builder_facade/schemas/app_form/v1alpha1/fields/address.json +76 -0
  13. package/src/qingflow_mcp/builder_facade/schemas/app_form/v1alpha1/fields/amount.json +76 -0
  14. package/src/qingflow_mcp/builder_facade/schemas/app_form/v1alpha1/fields/attachment.json +76 -0
  15. package/src/qingflow_mcp/builder_facade/schemas/app_form/v1alpha1/fields/code_block.json +223 -0
  16. package/src/qingflow_mcp/builder_facade/schemas/app_form/v1alpha1/fields/data_relation.json +538 -0
  17. package/src/qingflow_mcp/builder_facade/schemas/app_form/v1alpha1/fields/date.json +76 -0
  18. package/src/qingflow_mcp/builder_facade/schemas/app_form/v1alpha1/fields/datetime.json +76 -0
  19. package/src/qingflow_mcp/builder_facade/schemas/app_form/v1alpha1/fields/department.json +149 -0
  20. package/src/qingflow_mcp/builder_facade/schemas/app_form/v1alpha1/fields/email.json +76 -0
  21. package/src/qingflow_mcp/builder_facade/schemas/app_form/v1alpha1/fields/link.json +76 -0
  22. package/src/qingflow_mcp/builder_facade/schemas/app_form/v1alpha1/fields/long_text.json +76 -0
  23. package/src/qingflow_mcp/builder_facade/schemas/app_form/v1alpha1/fields/member.json +76 -0
  24. package/src/qingflow_mcp/builder_facade/schemas/app_form/v1alpha1/fields/multi_select.json +92 -0
  25. package/src/qingflow_mcp/builder_facade/schemas/app_form/v1alpha1/fields/number.json +76 -0
  26. package/src/qingflow_mcp/builder_facade/schemas/app_form/v1alpha1/fields/phone.json +76 -0
  27. package/src/qingflow_mcp/builder_facade/schemas/app_form/v1alpha1/fields/q_linker.json +338 -0
  28. package/src/qingflow_mcp/builder_facade/schemas/app_form/v1alpha1/fields/relation.json +137 -0
  29. package/src/qingflow_mcp/builder_facade/schemas/app_form/v1alpha1/fields/single_choice.json +92 -0
  30. package/src/qingflow_mcp/builder_facade/schemas/app_form/v1alpha1/fields/single_select.json +92 -0
  31. package/src/qingflow_mcp/builder_facade/schemas/app_form/v1alpha1/fields/subtable.json +810 -0
  32. package/src/qingflow_mcp/builder_facade/schemas/app_form/v1alpha1/fields/text.json +76 -0
  33. package/src/qingflow_mcp/builder_facade/schemas/app_form/v1alpha1/summary.json +713 -0
  34. package/src/qingflow_mcp/builder_facade/service.py +5 -2
  35. package/src/qingflow_mcp/cli/commands/builder.py +91 -28
  36. package/src/qingflow_mcp/cli/json_io.py +21 -2
  37. package/src/qingflow_mcp/cli/main.py +3 -39
  38. package/src/qingflow_mcp/cloud_auth.py +11 -0
  39. package/src/qingflow_mcp/cloud_context.py +5 -0
  40. package/src/qingflow_mcp/cloud_oauth_proxy.py +453 -0
  41. package/src/qingflow_mcp/cloud_redis.py +25 -0
  42. package/src/qingflow_mcp/config.py +44 -0
  43. package/src/qingflow_mcp/public_surface.py +5 -2
  44. package/src/qingflow_mcp/response_trim.py +8 -0
  45. package/src/qingflow_mcp/server_app_builder.py +38 -86
  46. package/src/qingflow_mcp/server_app_user.py +2 -1
  47. package/src/qingflow_mcp/server_cloud.py +245 -22
  48. package/src/qingflow_mcp/tools/ai_builder_tools.py +93 -100
  49. package/src/qingflow_mcp/tools/app_tools.py +46 -65
  50. package/src/qingflow_mcp/tools/base.py +2 -1
  51. package/src/qingflow_mcp/tools/task_context_tools.py +6 -0
@@ -0,0 +1,713 @@
1
+ {
2
+ "$defs": {
3
+ "AppFormSpec": {
4
+ "additionalProperties": false,
5
+ "description": "表单基础配置与字段布局目标态;除 body 外,缺失属性表示保留当前值。",
6
+ "properties": {
7
+ "appName": {
8
+ "description": "应用名称;缺失时保留当前名称。",
9
+ "minLength": 1,
10
+ "type": "string"
11
+ },
12
+ "attachments": {
13
+ "description": "应用附件完整目标态;空数组表示删除全部应用附件。",
14
+ "items": {
15
+ "$ref": "#/$defs/Attachment"
16
+ },
17
+ "type": "array"
18
+ },
19
+ "body": {
20
+ "$ref": "#/$defs/Body",
21
+ "description": "业务字段与布局的完整目标态;缺失字段或段落表示删除。"
22
+ },
23
+ "color": {
24
+ "description": "新应用图标颜色;仅创建分支允许,必须来自 workspace icon color catalog。",
25
+ "minLength": 1,
26
+ "type": "string"
27
+ },
28
+ "description": {
29
+ "description": "应用描述;null 或空字符串表示清空。",
30
+ "type": [
31
+ "string",
32
+ "null"
33
+ ]
34
+ },
35
+ "icon": {
36
+ "description": "新应用图标;仅创建分支允许,必须来自 workspace icon catalog 且不得为 template。",
37
+ "minLength": 1,
38
+ "type": "string"
39
+ },
40
+ "serialNumber": {
41
+ "$ref": "#/$defs/SerialNumber",
42
+ "description": "应用编号规则;支持默认编号或自定义组件编号。"
43
+ },
44
+ "style": {
45
+ "description": "应用样式;对象内缺失属性保留当前值,null 表示清除全部自定义样式。",
46
+ "oneOf": [
47
+ {
48
+ "$ref": "#/$defs/Style"
49
+ },
50
+ {
51
+ "type": "null"
52
+ }
53
+ ]
54
+ },
55
+ "theme": {
56
+ "description": "应用主题 ID;null 表示清除自定义主题。",
57
+ "type": [
58
+ "integer",
59
+ "null"
60
+ ]
61
+ }
62
+ },
63
+ "required": [
64
+ "body"
65
+ ],
66
+ "type": "object"
67
+ },
68
+ "Attachment": {
69
+ "additionalProperties": false,
70
+ "description": "应用级附件;已有附件由 attachId 复用,新增附件省略 attachId。",
71
+ "properties": {
72
+ "attachId": {
73
+ "description": "后端生成的附件 ID;get 返回,新增时省略。",
74
+ "minimum": 1,
75
+ "type": "integer"
76
+ },
77
+ "fileName": {
78
+ "description": "附件展示名称。",
79
+ "minLength": 1,
80
+ "type": "string"
81
+ },
82
+ "fileUrl": {
83
+ "description": "已上传文件的可访问 URL。",
84
+ "minLength": 1,
85
+ "type": "string"
86
+ }
87
+ },
88
+ "required": [
89
+ "fileName",
90
+ "fileUrl"
91
+ ],
92
+ "type": "object"
93
+ },
94
+ "Body": {
95
+ "description": "有序表单内容块;空数组表示删除全部业务字段和段落。",
96
+ "items": {
97
+ "$ref": "#/$defs/BodyBlock"
98
+ },
99
+ "type": "array"
100
+ },
101
+ "BodyBlock": {
102
+ "description": "根级普通行或独占外层位置的段落。",
103
+ "oneOf": [
104
+ {
105
+ "$ref": "#/$defs/RowBlock"
106
+ },
107
+ {
108
+ "$ref": "#/$defs/SectionBlock"
109
+ }
110
+ ]
111
+ },
112
+ "FieldRow": {
113
+ "additionalProperties": false,
114
+ "description": "段落内部字段行。",
115
+ "properties": {
116
+ "fields": {
117
+ "description": "本行的 1 到 4 个顶层字段。",
118
+ "items": {
119
+ "$ref": "#/$defs/TopField"
120
+ },
121
+ "maxItems": 4,
122
+ "minItems": 1,
123
+ "type": "array"
124
+ }
125
+ },
126
+ "required": [
127
+ "fields"
128
+ ],
129
+ "type": "object"
130
+ },
131
+ "FieldSelector": {
132
+ "additionalProperties": false,
133
+ "anyOf": [
134
+ {
135
+ "required": [
136
+ "queId"
137
+ ]
138
+ },
139
+ {
140
+ "required": [
141
+ "name"
142
+ ]
143
+ }
144
+ ],
145
+ "description": "跨字段引用选择器;至少提供 queId 或 name,两者同时提供时必须指向同一字段。",
146
+ "properties": {
147
+ "name": {
148
+ "description": "字段名称;仅在当前作用域内唯一时可用于解析。",
149
+ "minLength": 1,
150
+ "type": "string"
151
+ },
152
+ "queId": {
153
+ "description": "已有字段的后端 ID;优先用于精确解析。",
154
+ "minimum": 1,
155
+ "type": "integer"
156
+ }
157
+ },
158
+ "type": "object"
159
+ },
160
+ "FieldSummary": {
161
+ "additionalProperties": false,
162
+ "properties": {
163
+ "config": {
164
+ "description": "调用对应 field_type 的详细 Schema 后生成。",
165
+ "type": "object"
166
+ },
167
+ "dataCover": {
168
+ "type": "boolean"
169
+ },
170
+ "dataTitle": {
171
+ "type": "boolean"
172
+ },
173
+ "description": {
174
+ "type": [
175
+ "string",
176
+ "null"
177
+ ]
178
+ },
179
+ "name": {
180
+ "minLength": 1,
181
+ "type": "string"
182
+ },
183
+ "queId": {
184
+ "minimum": 1,
185
+ "type": "integer"
186
+ },
187
+ "required": {
188
+ "type": "boolean"
189
+ },
190
+ "subfields": {
191
+ "description": "仅 subtable 使用;详情见 subtable Schema。",
192
+ "type": "array"
193
+ },
194
+ "type": {
195
+ "description": "必须来自 x-qingflow-supported-field-types。",
196
+ "type": "string"
197
+ },
198
+ "width": {
199
+ "maximum": 100,
200
+ "minimum": 1,
201
+ "type": "integer"
202
+ }
203
+ },
204
+ "required": [
205
+ "name",
206
+ "type"
207
+ ],
208
+ "type": "object"
209
+ },
210
+ "RowBlock": {
211
+ "additionalProperties": false,
212
+ "description": "根级普通字段行;字段顺序即展示顺序。",
213
+ "properties": {
214
+ "fields": {
215
+ "description": "本行的 1 到 4 个顶层字段。",
216
+ "items": {
217
+ "$ref": "#/$defs/TopField"
218
+ },
219
+ "maxItems": 4,
220
+ "minItems": 1,
221
+ "type": "array"
222
+ },
223
+ "kind": {
224
+ "const": "row",
225
+ "description": "普通行判别值。"
226
+ }
227
+ },
228
+ "required": [
229
+ "kind",
230
+ "fields"
231
+ ],
232
+ "type": "object"
233
+ },
234
+ "RowSummary": {
235
+ "additionalProperties": false,
236
+ "properties": {
237
+ "fields": {
238
+ "items": {
239
+ "$ref": "#/$defs/FieldSummary"
240
+ },
241
+ "maxItems": 4,
242
+ "minItems": 1,
243
+ "type": "array"
244
+ },
245
+ "kind": {
246
+ "const": "row"
247
+ }
248
+ },
249
+ "required": [
250
+ "kind",
251
+ "fields"
252
+ ],
253
+ "type": "object"
254
+ },
255
+ "SectionBlock": {
256
+ "additionalProperties": false,
257
+ "description": "段落布局容器;不是业务字段,必须独占一个根级块。",
258
+ "properties": {
259
+ "kind": {
260
+ "const": "section",
261
+ "description": "段落判别值。"
262
+ },
263
+ "rows": {
264
+ "description": "段落内的非空有序字段行。",
265
+ "items": {
266
+ "$ref": "#/$defs/FieldRow"
267
+ },
268
+ "minItems": 1,
269
+ "type": "array"
270
+ },
271
+ "sectionId": {
272
+ "description": "已有段落的真实身份;get 把后端数值 queId 输出为无前导零的正十进制字符串,apply 仅在构造后端 payload 时转回数值 queId,新增段落省略。",
273
+ "pattern": "^[1-9][0-9]*$",
274
+ "type": "string"
275
+ },
276
+ "title": {
277
+ "description": "段落标题。",
278
+ "minLength": 1,
279
+ "type": "string"
280
+ }
281
+ },
282
+ "required": [
283
+ "kind",
284
+ "title",
285
+ "rows"
286
+ ],
287
+ "type": "object"
288
+ },
289
+ "SectionSummary": {
290
+ "additionalProperties": false,
291
+ "properties": {
292
+ "kind": {
293
+ "const": "section"
294
+ },
295
+ "rows": {
296
+ "items": {
297
+ "additionalProperties": false,
298
+ "properties": {
299
+ "fields": {
300
+ "items": {
301
+ "$ref": "#/$defs/FieldSummary"
302
+ },
303
+ "maxItems": 4,
304
+ "minItems": 1,
305
+ "type": "array"
306
+ }
307
+ },
308
+ "required": [
309
+ "fields"
310
+ ],
311
+ "type": "object"
312
+ },
313
+ "minItems": 1,
314
+ "type": "array"
315
+ },
316
+ "sectionId": {
317
+ "pattern": "^[1-9][0-9]*$",
318
+ "type": "string"
319
+ },
320
+ "title": {
321
+ "minLength": 1,
322
+ "type": "string"
323
+ }
324
+ },
325
+ "required": [
326
+ "kind",
327
+ "title",
328
+ "rows"
329
+ ],
330
+ "type": "object"
331
+ },
332
+ "SerialComponent": {
333
+ "description": "自定义编号的组成部分;id 仅用于复用已有组件。",
334
+ "oneOf": [
335
+ {
336
+ "additionalProperties": false,
337
+ "properties": {
338
+ "id": {
339
+ "description": "后端生成的组件 ID;get 返回,新增时省略。",
340
+ "minimum": 1,
341
+ "type": "integer"
342
+ },
343
+ "length": {
344
+ "description": "自动计数部分的位数。",
345
+ "maximum": 9,
346
+ "minimum": 3,
347
+ "type": "integer"
348
+ },
349
+ "repeatPeriod": {
350
+ "description": "自动计数器的重置周期。",
351
+ "enum": [
352
+ "none",
353
+ "day",
354
+ "week",
355
+ "month",
356
+ "year"
357
+ ]
358
+ },
359
+ "type": {
360
+ "const": "auto_count"
361
+ }
362
+ },
363
+ "required": [
364
+ "type",
365
+ "length",
366
+ "repeatPeriod"
367
+ ],
368
+ "type": "object"
369
+ },
370
+ {
371
+ "additionalProperties": false,
372
+ "properties": {
373
+ "dateFormat": {
374
+ "description": "提交时间在编号中的格式。",
375
+ "enum": [
376
+ "year",
377
+ "year_month",
378
+ "year_month_day"
379
+ ]
380
+ },
381
+ "id": {
382
+ "minimum": 1,
383
+ "type": "integer"
384
+ },
385
+ "type": {
386
+ "const": "submit_datetime"
387
+ }
388
+ },
389
+ "required": [
390
+ "type",
391
+ "dateFormat"
392
+ ],
393
+ "type": "object"
394
+ },
395
+ {
396
+ "additionalProperties": false,
397
+ "properties": {
398
+ "id": {
399
+ "minimum": 1,
400
+ "type": "integer"
401
+ },
402
+ "type": {
403
+ "const": "fixed_text"
404
+ },
405
+ "value": {
406
+ "description": "固定拼接文本。",
407
+ "minLength": 1,
408
+ "type": "string"
409
+ }
410
+ },
411
+ "required": [
412
+ "type",
413
+ "value"
414
+ ],
415
+ "type": "object"
416
+ },
417
+ {
418
+ "additionalProperties": false,
419
+ "properties": {
420
+ "dateFormat": {
421
+ "description": "来源为日期字段时的格式。",
422
+ "enum": [
423
+ "year",
424
+ "year_month",
425
+ "year_month_day"
426
+ ]
427
+ },
428
+ "field": {
429
+ "$ref": "#/$defs/FieldSelector",
430
+ "description": "取值来源字段。"
431
+ },
432
+ "id": {
433
+ "minimum": 1,
434
+ "type": "integer"
435
+ },
436
+ "type": {
437
+ "const": "field"
438
+ }
439
+ },
440
+ "required": [
441
+ "type",
442
+ "field"
443
+ ],
444
+ "type": "object"
445
+ }
446
+ ]
447
+ },
448
+ "SerialNumber": {
449
+ "description": "应用数据编号配置;自定义模式必须且只能包含一个自动计数组件。",
450
+ "oneOf": [
451
+ {
452
+ "additionalProperties": false,
453
+ "properties": {
454
+ "mode": {
455
+ "const": "default",
456
+ "description": "使用系统默认编号规则。"
457
+ }
458
+ },
459
+ "required": [
460
+ "mode"
461
+ ],
462
+ "type": "object"
463
+ },
464
+ {
465
+ "additionalProperties": false,
466
+ "properties": {
467
+ "components": {
468
+ "contains": {
469
+ "properties": {
470
+ "type": {
471
+ "const": "auto_count"
472
+ }
473
+ },
474
+ "required": [
475
+ "type"
476
+ ],
477
+ "type": "object"
478
+ },
479
+ "description": "自定义编号组件的完整有序目标态。",
480
+ "items": {
481
+ "$ref": "#/$defs/SerialComponent"
482
+ },
483
+ "maxContains": 1,
484
+ "minContains": 1,
485
+ "minItems": 1,
486
+ "type": "array"
487
+ },
488
+ "mode": {
489
+ "const": "custom",
490
+ "description": "使用按数组顺序拼接的自定义编号组件。"
491
+ }
492
+ },
493
+ "required": [
494
+ "mode",
495
+ "components"
496
+ ],
497
+ "type": "object"
498
+ }
499
+ ]
500
+ },
501
+ "Style": {
502
+ "additionalProperties": false,
503
+ "description": "表单背景和头部视觉样式;颜色使用 CSS 颜色字符串。",
504
+ "properties": {
505
+ "bgColor": {
506
+ "description": "表单背景色;null 表示清除。",
507
+ "type": [
508
+ "string",
509
+ "null"
510
+ ]
511
+ },
512
+ "bgImage": {
513
+ "description": "表单背景图片 URL;null 表示清除。",
514
+ "type": [
515
+ "string",
516
+ "null"
517
+ ]
518
+ },
519
+ "fontColor": {
520
+ "description": "表单头部字体颜色;null 表示清除。",
521
+ "type": [
522
+ "string",
523
+ "null"
524
+ ]
525
+ },
526
+ "headerColor": {
527
+ "description": "表单头部背景色;null 表示清除。",
528
+ "type": [
529
+ "string",
530
+ "null"
531
+ ]
532
+ },
533
+ "headerImage": {
534
+ "description": "表单头图 URL;null 表示清除。",
535
+ "type": [
536
+ "string",
537
+ "null"
538
+ ]
539
+ },
540
+ "opacity": {
541
+ "description": "背景透明度,取值 0 到 1;null 表示清除。",
542
+ "maximum": 1,
543
+ "minimum": 0,
544
+ "type": [
545
+ "number",
546
+ "null"
547
+ ]
548
+ }
549
+ },
550
+ "type": "object"
551
+ },
552
+ "TopField": {}
553
+ },
554
+ "$id": "https://builder.qingflow.com/schemas/app-form-apply/v1alpha1/summary.json",
555
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
556
+ "additionalProperties": false,
557
+ "oneOf": [
558
+ {
559
+ "properties": {
560
+ "spec": {
561
+ "not": {
562
+ "anyOf": [
563
+ {
564
+ "required": [
565
+ "icon"
566
+ ]
567
+ },
568
+ {
569
+ "required": [
570
+ "color"
571
+ ]
572
+ }
573
+ ]
574
+ }
575
+ }
576
+ },
577
+ "required": [
578
+ "appKey"
579
+ ]
580
+ },
581
+ {
582
+ "not": {
583
+ "required": [
584
+ "appKey"
585
+ ]
586
+ },
587
+ "properties": {
588
+ "spec": {
589
+ "required": [
590
+ "appName",
591
+ "icon",
592
+ "color"
593
+ ]
594
+ }
595
+ },
596
+ "required": [
597
+ "packageId"
598
+ ]
599
+ }
600
+ ],
601
+ "properties": {
602
+ "apiVersion": {
603
+ "const": "builder.qingflow.com/v1alpha1"
604
+ },
605
+ "appKey": {
606
+ "description": "更新已有应用时使用;存在非空值即进入更新模式。",
607
+ "minLength": 1,
608
+ "type": "string"
609
+ },
610
+ "packageId": {
611
+ "description": "创建时必填;更新时可选,提供后确保该包引用应用且不移除其他包引用。",
612
+ "minimum": 1,
613
+ "type": "integer"
614
+ },
615
+ "spec": {
616
+ "additionalProperties": false,
617
+ "properties": {
618
+ "appName": {
619
+ "minLength": 1,
620
+ "type": "string"
621
+ },
622
+ "attachments": {
623
+ "description": "应用附件完整目标态。",
624
+ "items": {
625
+ "type": "object"
626
+ },
627
+ "type": "array"
628
+ },
629
+ "body": {
630
+ "description": "业务字段与布局完整目标态;缺失业务字段表示删除。",
631
+ "items": {
632
+ "oneOf": [
633
+ {
634
+ "$ref": "#/$defs/RowSummary"
635
+ },
636
+ {
637
+ "$ref": "#/$defs/SectionSummary"
638
+ }
639
+ ]
640
+ },
641
+ "type": "array"
642
+ },
643
+ "color": {
644
+ "description": "仅创建时使用;必须来自 workspace icon color catalog。",
645
+ "minLength": 1,
646
+ "type": "string"
647
+ },
648
+ "description": {
649
+ "type": [
650
+ "string",
651
+ "null"
652
+ ]
653
+ },
654
+ "icon": {
655
+ "description": "仅创建时使用;必须来自 workspace icon catalog 且不得为 template。",
656
+ "minLength": 1,
657
+ "type": "string"
658
+ },
659
+ "serialNumber": {
660
+ "description": "default 或 custom 编号配置。",
661
+ "type": "object"
662
+ },
663
+ "style": {
664
+ "description": "应用样式;详细属性为 bgImage/bgColor/opacity/headerImage/headerColor/fontColor。",
665
+ "type": [
666
+ "object",
667
+ "null"
668
+ ]
669
+ },
670
+ "theme": {
671
+ "type": [
672
+ "integer",
673
+ "null"
674
+ ]
675
+ }
676
+ },
677
+ "required": [
678
+ "body"
679
+ ],
680
+ "type": "object"
681
+ }
682
+ },
683
+ "required": [
684
+ "apiVersion",
685
+ "spec"
686
+ ],
687
+ "title": "Qingflow AppFormApply v1alpha1 Summary",
688
+ "type": "object",
689
+ "x-qingflow-field-detail-query": "app_form_schema(schema_version, field_type)",
690
+ "x-qingflow-supported-field-types": [
691
+ "text",
692
+ "long_text",
693
+ "number",
694
+ "amount",
695
+ "link",
696
+ "date",
697
+ "datetime",
698
+ "member",
699
+ "department",
700
+ "single_choice",
701
+ "single_select",
702
+ "multi_select",
703
+ "phone",
704
+ "email",
705
+ "address",
706
+ "attachment",
707
+ "q_linker",
708
+ "code_block",
709
+ "data_relation",
710
+ "relation",
711
+ "subtable"
712
+ ]
713
+ }