@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,159 @@
1
+ {
2
+ "$defs": {
3
+ "ChoiceConfig": {
4
+ "additionalProperties": false,
5
+ "description": "选择类字段配置。",
6
+ "properties": {
7
+ "beingShowColor": {
8
+ "description": "是否展示选项颜色。",
9
+ "type": [
10
+ "boolean",
11
+ "null"
12
+ ]
13
+ },
14
+ "defaultOptions": {
15
+ "description": "选项默认选中状态;值必须来自 options,省略表示保留现有状态。",
16
+ "items": {
17
+ "minLength": 1,
18
+ "type": "string"
19
+ },
20
+ "type": "array",
21
+ "uniqueItems": true
22
+ },
23
+ "maxOpts": {
24
+ "description": "最多选择项数;null 表示不限制。",
25
+ "minimum": 0,
26
+ "type": [
27
+ "integer",
28
+ "null"
29
+ ]
30
+ },
31
+ "minOpts": {
32
+ "description": "最少选择项数;null 表示不限制。",
33
+ "minimum": 0,
34
+ "type": [
35
+ "integer",
36
+ "null"
37
+ ]
38
+ },
39
+ "optDirection": {
40
+ "description": "选项排列方向 ID。",
41
+ "minimum": 0,
42
+ "type": [
43
+ "integer",
44
+ "null"
45
+ ]
46
+ },
47
+ "optSelectMode": {
48
+ "description": "多项选择模式 ID。",
49
+ "minimum": 0,
50
+ "type": [
51
+ "integer",
52
+ "null"
53
+ ]
54
+ },
55
+ "options": {
56
+ "description": "非空有序选项文案;缺失选项表示从该字段配置中删除。",
57
+ "items": {
58
+ "minLength": 1,
59
+ "type": "string"
60
+ },
61
+ "minItems": 1,
62
+ "type": "array",
63
+ "uniqueItems": true
64
+ }
65
+ },
66
+ "required": [
67
+ "options"
68
+ ],
69
+ "type": "object"
70
+ },
71
+ "FieldCommon": {
72
+ "description": "顶层业务字段的公共属性;字段类型由 TopField 的判别分支定义。",
73
+ "properties": {
74
+ "dataTitle": {
75
+ "description": "是否作为数据标题;整个 body 最多且必须按规则存在一个。",
76
+ "type": "boolean"
77
+ },
78
+ "defaultType": {
79
+ "default": 1,
80
+ "description": "默认值类型;1 表示静态值,2 表示关联/绑定值,3 表示公式值。",
81
+ "enum": [
82
+ 1,
83
+ 2,
84
+ 3
85
+ ],
86
+ "type": "integer"
87
+ },
88
+ "defaultValue": {
89
+ "$ref": "#/$defs/ScalarDefaultValue",
90
+ "description": "普通字段的标量默认值;表格、地址、附件、引用等结构化默认值必须放在具体字段 config.defaultValues。显式 null 表示清除默认值。"
91
+ },
92
+ "description": {
93
+ "description": "字段说明;null 或空字符串表示清空。",
94
+ "type": [
95
+ "string",
96
+ "null"
97
+ ]
98
+ },
99
+ "name": {
100
+ "description": "字段展示名称;同一父级内唯一,不单独作为字段身份。",
101
+ "minLength": 1,
102
+ "type": "string"
103
+ },
104
+ "queId": {
105
+ "description": "已有字段的后端 ID;get 返回,新增字段省略。",
106
+ "minimum": 1,
107
+ "type": "integer"
108
+ },
109
+ "required": {
110
+ "description": "是否必填;缺失时保留已有字段当前值。",
111
+ "type": "boolean"
112
+ },
113
+ "width": {
114
+ "description": "字段在所在行的宽度百分比;同一行要么全部提供且合计 100,要么全部省略。",
115
+ "maximum": 100,
116
+ "minimum": 1,
117
+ "type": "integer"
118
+ }
119
+ },
120
+ "required": [
121
+ "name"
122
+ ],
123
+ "type": "object"
124
+ },
125
+ "ScalarDefaultValue": {
126
+ "description": "不包含对象或数组的普通字段默认值。",
127
+ "type": [
128
+ "null",
129
+ "boolean",
130
+ "number",
131
+ "string"
132
+ ]
133
+ }
134
+ },
135
+ "$id": "https://builder.qingflow.com/schemas/app-form-apply/v1alpha1/fields/multi_select.json",
136
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
137
+ "allOf": [
138
+ {
139
+ "$ref": "#/$defs/FieldCommon"
140
+ },
141
+ {
142
+ "properties": {
143
+ "config": {
144
+ "$ref": "#/$defs/ChoiceConfig"
145
+ },
146
+ "type": {
147
+ "const": "multi_select"
148
+ }
149
+ },
150
+ "required": [
151
+ "type",
152
+ "config"
153
+ ]
154
+ }
155
+ ],
156
+ "title": "Qingflow AppForm v1alpha1 multi_select field",
157
+ "type": "object",
158
+ "unevaluatedProperties": false
159
+ }
@@ -0,0 +1,181 @@
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
+ "NumberConfig": {
58
+ "additionalProperties": false,
59
+ "description": "数字和金额字段的数值、精度及显示格式。",
60
+ "properties": {
61
+ "canDecimal": {
62
+ "description": "是否允许小数;普通数字字段可显式设置。",
63
+ "type": [
64
+ "boolean",
65
+ "null"
66
+ ]
67
+ },
68
+ "canScan": {
69
+ "description": "是否允许扫码输入。",
70
+ "type": [
71
+ "boolean",
72
+ "null"
73
+ ]
74
+ },
75
+ "currencyStatus": {
76
+ "description": "金额字段是否显示货币符号。",
77
+ "type": [
78
+ "boolean",
79
+ "null"
80
+ ]
81
+ },
82
+ "currencyType": {
83
+ "description": "货币类型 ID。",
84
+ "minimum": 1,
85
+ "type": [
86
+ "integer",
87
+ "null"
88
+ ]
89
+ },
90
+ "decimalDigit": {
91
+ "description": "小数位数。",
92
+ "maximum": 10,
93
+ "minimum": 0,
94
+ "type": [
95
+ "integer",
96
+ "null"
97
+ ]
98
+ },
99
+ "maxValue": {
100
+ "description": "允许的最大值;后端按字符串保存。",
101
+ "type": [
102
+ "string",
103
+ "number",
104
+ "null"
105
+ ]
106
+ },
107
+ "minValue": {
108
+ "description": "允许的最小值;后端按字符串保存。",
109
+ "type": [
110
+ "string",
111
+ "number",
112
+ "null"
113
+ ]
114
+ },
115
+ "noRepeat": {
116
+ "description": "是否禁止重复值。",
117
+ "type": [
118
+ "boolean",
119
+ "null"
120
+ ]
121
+ },
122
+ "numberFormat": {
123
+ "description": "数字展示格式 ID。",
124
+ "minimum": 1,
125
+ "type": [
126
+ "integer",
127
+ "null"
128
+ ]
129
+ },
130
+ "numberLimitStatus": {
131
+ "description": "是否启用最小值和最大值限制。",
132
+ "type": [
133
+ "boolean",
134
+ "null"
135
+ ]
136
+ },
137
+ "scanType": {
138
+ "description": "扫码类型 ID。",
139
+ "minimum": 0,
140
+ "type": [
141
+ "integer",
142
+ "null"
143
+ ]
144
+ }
145
+ },
146
+ "type": "object"
147
+ },
148
+ "ScalarDefaultValue": {
149
+ "description": "不包含对象或数组的普通字段默认值。",
150
+ "type": [
151
+ "null",
152
+ "boolean",
153
+ "number",
154
+ "string"
155
+ ]
156
+ }
157
+ },
158
+ "$id": "https://builder.qingflow.com/schemas/app-form-apply/v1alpha1/fields/number.json",
159
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
160
+ "allOf": [
161
+ {
162
+ "$ref": "#/$defs/FieldCommon"
163
+ },
164
+ {
165
+ "properties": {
166
+ "config": {
167
+ "$ref": "#/$defs/NumberConfig"
168
+ },
169
+ "type": {
170
+ "const": "number"
171
+ }
172
+ },
173
+ "required": [
174
+ "type"
175
+ ]
176
+ }
177
+ ],
178
+ "title": "Qingflow AppForm v1alpha1 number field",
179
+ "type": "object",
180
+ "unevaluatedProperties": false
181
+ }
@@ -0,0 +1,144 @@
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
+ "PhoneConfig": {
58
+ "additionalProperties": false,
59
+ "description": "电话字段的长度、重复和校验配置。",
60
+ "properties": {
61
+ "canScan": {
62
+ "type": [
63
+ "boolean",
64
+ "null"
65
+ ]
66
+ },
67
+ "fixedPhone": {
68
+ "description": "是否按固定电话格式校验。",
69
+ "type": [
70
+ "boolean",
71
+ "null"
72
+ ]
73
+ },
74
+ "maxWordCount": {
75
+ "minimum": 0,
76
+ "type": [
77
+ "integer",
78
+ "null"
79
+ ]
80
+ },
81
+ "minWordCount": {
82
+ "minimum": 0,
83
+ "type": [
84
+ "integer",
85
+ "null"
86
+ ]
87
+ },
88
+ "msgValidateStatus": {
89
+ "description": "是否启用短信校验。",
90
+ "type": [
91
+ "boolean",
92
+ "null"
93
+ ]
94
+ },
95
+ "noRepeat": {
96
+ "type": [
97
+ "boolean",
98
+ "null"
99
+ ]
100
+ },
101
+ "scanType": {
102
+ "minimum": 0,
103
+ "type": [
104
+ "integer",
105
+ "null"
106
+ ]
107
+ }
108
+ },
109
+ "type": "object"
110
+ },
111
+ "ScalarDefaultValue": {
112
+ "description": "不包含对象或数组的普通字段默认值。",
113
+ "type": [
114
+ "null",
115
+ "boolean",
116
+ "number",
117
+ "string"
118
+ ]
119
+ }
120
+ },
121
+ "$id": "https://builder.qingflow.com/schemas/app-form-apply/v1alpha1/fields/phone.json",
122
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
123
+ "allOf": [
124
+ {
125
+ "$ref": "#/$defs/FieldCommon"
126
+ },
127
+ {
128
+ "properties": {
129
+ "config": {
130
+ "$ref": "#/$defs/PhoneConfig"
131
+ },
132
+ "type": {
133
+ "const": "phone"
134
+ }
135
+ },
136
+ "required": [
137
+ "type"
138
+ ]
139
+ }
140
+ ],
141
+ "title": "Qingflow AppForm v1alpha1 phone field",
142
+ "type": "object",
143
+ "unevaluatedProperties": false
144
+ }