@josephyan/qingflow-cli 0.2.0-beta.70 → 0.2.0-beta.72
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 +2 -2
- package/package.json +1 -1
- package/pyproject.toml +1 -1
- package/src/qingflow_mcp/backend_client.py +1 -0
- package/src/qingflow_mcp/builder_facade/models.py +16 -8
- package/src/qingflow_mcp/builder_facade/service.py +208 -111
- package/src/qingflow_mcp/cli/commands/__init__.py +4 -1
- package/src/qingflow_mcp/cli/commands/builder.py +24 -64
- package/src/qingflow_mcp/cli/commands/chart.py +18 -0
- package/src/qingflow_mcp/cli/commands/portal.py +25 -0
- package/src/qingflow_mcp/cli/commands/view.py +18 -0
- package/src/qingflow_mcp/cli/context.py +3 -0
- package/src/qingflow_mcp/response_trim.py +211 -178
- package/src/qingflow_mcp/server_app_builder.py +18 -42
- package/src/qingflow_mcp/server_app_user.py +21 -1
- package/src/qingflow_mcp/tools/ai_builder_tools.py +165 -124
- package/src/qingflow_mcp/tools/app_tools.py +0 -4
- package/src/qingflow_mcp/tools/qingbi_report_tools.py +58 -7
- package/src/qingflow_mcp/tools/resource_read_tools.py +399 -0
|
@@ -8,6 +8,8 @@ from typing import Any, Callable
|
|
|
8
8
|
|
|
9
9
|
JSONObject = dict[str, Any]
|
|
10
10
|
TransformFn = Callable[[JSONObject], None]
|
|
11
|
+
USER_DOMAIN = "user"
|
|
12
|
+
BUILDER_DOMAIN = "builder"
|
|
11
13
|
|
|
12
14
|
|
|
13
15
|
COMMON_SUCCESS_DROP_TOP = {
|
|
@@ -45,6 +47,10 @@ COMMON_ERROR_DROP_TOP = {
|
|
|
45
47
|
SUCCESS_POLICY_BY_TOOL: dict[str, TransformFn] = {}
|
|
46
48
|
|
|
47
49
|
|
|
50
|
+
def _tool_key(domain: str, tool_name: str) -> str:
|
|
51
|
+
return f"{domain}:{tool_name}"
|
|
52
|
+
|
|
53
|
+
|
|
48
54
|
def trim_public_response(tool_name: str | None, payload: dict[str, Any]) -> dict[str, Any]:
|
|
49
55
|
if not isinstance(payload, dict):
|
|
50
56
|
return payload
|
|
@@ -97,215 +103,234 @@ def resolve_cli_tool_name(args: Any) -> str | None:
|
|
|
97
103
|
command = getattr(args, "command", None)
|
|
98
104
|
if command == "auth":
|
|
99
105
|
return {
|
|
100
|
-
"login": "auth_login",
|
|
101
|
-
"use-token": "auth_use_token",
|
|
102
|
-
"whoami": "auth_whoami",
|
|
103
|
-
"logout": "auth_logout",
|
|
106
|
+
"login": _tool_key(USER_DOMAIN, "auth_login"),
|
|
107
|
+
"use-token": _tool_key(USER_DOMAIN, "auth_use_token"),
|
|
108
|
+
"whoami": _tool_key(USER_DOMAIN, "auth_whoami"),
|
|
109
|
+
"logout": _tool_key(USER_DOMAIN, "auth_logout"),
|
|
104
110
|
}.get(getattr(args, "auth_command", None))
|
|
105
111
|
if command == "workspace":
|
|
106
112
|
return {
|
|
107
|
-
"list": "workspace_list",
|
|
108
|
-
"select": "workspace_select",
|
|
113
|
+
"list": _tool_key(USER_DOMAIN, "workspace_list"),
|
|
114
|
+
"select": _tool_key(USER_DOMAIN, "workspace_select"),
|
|
109
115
|
}.get(getattr(args, "workspace_command", None))
|
|
110
116
|
if command == "app":
|
|
111
117
|
return {
|
|
112
|
-
"list": "app_list",
|
|
113
|
-
"search": "app_search",
|
|
114
|
-
"get": "app_get",
|
|
118
|
+
"list": _tool_key(USER_DOMAIN, "app_list"),
|
|
119
|
+
"search": _tool_key(USER_DOMAIN, "app_search"),
|
|
120
|
+
"get": _tool_key(USER_DOMAIN, "app_get"),
|
|
115
121
|
}.get(getattr(args, "app_command", None))
|
|
122
|
+
if command == "portal":
|
|
123
|
+
return {
|
|
124
|
+
"list": _tool_key(USER_DOMAIN, "portal_list"),
|
|
125
|
+
"get": _tool_key(USER_DOMAIN, "portal_get"),
|
|
126
|
+
}.get(getattr(args, "portal_command", None))
|
|
127
|
+
if command == "view":
|
|
128
|
+
return {
|
|
129
|
+
"get": _tool_key(USER_DOMAIN, "view_get"),
|
|
130
|
+
}.get(getattr(args, "view_command", None))
|
|
131
|
+
if command == "chart":
|
|
132
|
+
return {
|
|
133
|
+
"get": _tool_key(USER_DOMAIN, "chart_get"),
|
|
134
|
+
}.get(getattr(args, "chart_command", None))
|
|
116
135
|
if command == "record":
|
|
117
136
|
record_command = getattr(args, "record_command", None)
|
|
118
137
|
if record_command == "schema":
|
|
119
138
|
return {
|
|
120
|
-
"applicant": "record_schema_get",
|
|
121
|
-
"browse": "record_browse_schema_get",
|
|
122
|
-
"insert": "record_insert_schema_get",
|
|
123
|
-
"update": "record_update_schema_get",
|
|
124
|
-
"import": "record_import_schema_get",
|
|
125
|
-
"code-block": "record_code_block_schema_get",
|
|
139
|
+
"applicant": _tool_key(USER_DOMAIN, "record_schema_get"),
|
|
140
|
+
"browse": _tool_key(USER_DOMAIN, "record_browse_schema_get"),
|
|
141
|
+
"insert": _tool_key(USER_DOMAIN, "record_insert_schema_get"),
|
|
142
|
+
"update": _tool_key(USER_DOMAIN, "record_update_schema_get"),
|
|
143
|
+
"import": _tool_key(USER_DOMAIN, "record_import_schema_get"),
|
|
144
|
+
"code-block": _tool_key(USER_DOMAIN, "record_code_block_schema_get"),
|
|
126
145
|
}.get(getattr(args, "record_schema_command", None))
|
|
127
146
|
return {
|
|
128
|
-
"list": "record_list",
|
|
129
|
-
"get": "record_get",
|
|
130
|
-
"insert": "record_insert",
|
|
131
|
-
"update": "record_update",
|
|
132
|
-
"delete": "record_delete",
|
|
133
|
-
"analyze": "record_analyze",
|
|
134
|
-
"code-block-run": "record_code_block_run",
|
|
147
|
+
"list": _tool_key(USER_DOMAIN, "record_list"),
|
|
148
|
+
"get": _tool_key(USER_DOMAIN, "record_get"),
|
|
149
|
+
"insert": _tool_key(USER_DOMAIN, "record_insert"),
|
|
150
|
+
"update": _tool_key(USER_DOMAIN, "record_update"),
|
|
151
|
+
"delete": _tool_key(USER_DOMAIN, "record_delete"),
|
|
152
|
+
"analyze": _tool_key(USER_DOMAIN, "record_analyze"),
|
|
153
|
+
"code-block-run": _tool_key(USER_DOMAIN, "record_code_block_run"),
|
|
135
154
|
}.get(record_command)
|
|
136
155
|
if command == "import":
|
|
137
156
|
return {
|
|
138
|
-
"template": "record_import_template_get",
|
|
139
|
-
"verify": "record_import_verify",
|
|
140
|
-
"repair": "record_import_repair_local",
|
|
141
|
-
"start": "record_import_start",
|
|
142
|
-
"status": "record_import_status_get",
|
|
157
|
+
"template": _tool_key(USER_DOMAIN, "record_import_template_get"),
|
|
158
|
+
"verify": _tool_key(USER_DOMAIN, "record_import_verify"),
|
|
159
|
+
"repair": _tool_key(USER_DOMAIN, "record_import_repair_local"),
|
|
160
|
+
"start": _tool_key(USER_DOMAIN, "record_import_start"),
|
|
161
|
+
"status": _tool_key(USER_DOMAIN, "record_import_status_get"),
|
|
143
162
|
}.get(getattr(args, "import_command", None))
|
|
144
163
|
if command == "task":
|
|
145
164
|
return {
|
|
146
|
-
"list": "task_list",
|
|
147
|
-
"get": "task_get",
|
|
148
|
-
"action": "task_action_execute",
|
|
149
|
-
"log": "task_workflow_log_get",
|
|
165
|
+
"list": _tool_key(USER_DOMAIN, "task_list"),
|
|
166
|
+
"get": _tool_key(USER_DOMAIN, "task_get"),
|
|
167
|
+
"action": _tool_key(USER_DOMAIN, "task_action_execute"),
|
|
168
|
+
"log": _tool_key(USER_DOMAIN, "task_workflow_log_get"),
|
|
150
169
|
}.get(getattr(args, "task_command", None))
|
|
151
170
|
if command not in {"builder", "build"}:
|
|
152
171
|
return None
|
|
153
172
|
builder_command = getattr(args, "builder_command", None)
|
|
154
173
|
if builder_command == "contract":
|
|
155
|
-
return "builder_tool_contract"
|
|
174
|
+
return _tool_key(BUILDER_DOMAIN, "builder_tool_contract")
|
|
156
175
|
if builder_command == "member":
|
|
157
176
|
return {
|
|
158
|
-
"search": "member_search",
|
|
177
|
+
"search": _tool_key(BUILDER_DOMAIN, "member_search"),
|
|
159
178
|
}.get(getattr(args, "builder_member_command", None))
|
|
160
179
|
if builder_command == "role":
|
|
161
180
|
return {
|
|
162
|
-
"search": "role_search",
|
|
163
|
-
"create": "role_create",
|
|
181
|
+
"search": _tool_key(BUILDER_DOMAIN, "role_search"),
|
|
182
|
+
"create": _tool_key(BUILDER_DOMAIN, "role_create"),
|
|
164
183
|
}.get(getattr(args, "builder_role_command", None))
|
|
165
184
|
if builder_command == "package":
|
|
166
185
|
return {
|
|
167
|
-
"list": "package_list",
|
|
168
|
-
"resolve": "package_resolve",
|
|
169
|
-
"create": "package_create",
|
|
170
|
-
"attach-app": "package_attach_app",
|
|
186
|
+
"list": _tool_key(BUILDER_DOMAIN, "package_list"),
|
|
187
|
+
"resolve": _tool_key(BUILDER_DOMAIN, "package_resolve"),
|
|
188
|
+
"create": _tool_key(BUILDER_DOMAIN, "package_create"),
|
|
189
|
+
"attach-app": _tool_key(BUILDER_DOMAIN, "package_attach_app"),
|
|
171
190
|
}.get(getattr(args, "builder_package_command", None))
|
|
172
191
|
if builder_command == "app":
|
|
192
|
+
app_command = getattr(args, "builder_app_command", None)
|
|
193
|
+
if app_command == "get":
|
|
194
|
+
return {
|
|
195
|
+
"summary": _tool_key(BUILDER_DOMAIN, "app_get"),
|
|
196
|
+
"fields": _tool_key(BUILDER_DOMAIN, "app_get_fields"),
|
|
197
|
+
"layout": _tool_key(BUILDER_DOMAIN, "app_get_layout"),
|
|
198
|
+
"views": _tool_key(BUILDER_DOMAIN, "app_get_views"),
|
|
199
|
+
"flow": _tool_key(BUILDER_DOMAIN, "app_get_flow"),
|
|
200
|
+
"charts": _tool_key(BUILDER_DOMAIN, "app_get_charts"),
|
|
201
|
+
}.get(getattr(args, "builder_app_get_section", "summary"))
|
|
173
202
|
return {
|
|
174
|
-
"resolve": "app_resolve",
|
|
175
|
-
"release-edit-lock-if-mine": "app_release_edit_lock_if_mine",
|
|
176
|
-
|
|
177
|
-
"read-fields": "app_read_fields",
|
|
178
|
-
"read-layout": "app_read_layout_summary",
|
|
179
|
-
"read-views": "app_read_views_summary",
|
|
180
|
-
"read-flow": "app_read_flow_summary",
|
|
181
|
-
"read-charts": "app_read_charts_summary",
|
|
182
|
-
}.get(getattr(args, "builder_app_command", None))
|
|
203
|
+
"resolve": _tool_key(BUILDER_DOMAIN, "app_resolve"),
|
|
204
|
+
"release-edit-lock-if-mine": _tool_key(BUILDER_DOMAIN, "app_release_edit_lock_if_mine"),
|
|
205
|
+
}.get(app_command)
|
|
183
206
|
if builder_command == "button":
|
|
184
207
|
return {
|
|
185
|
-
"list": "app_custom_button_list",
|
|
186
|
-
"get": "app_custom_button_get",
|
|
187
|
-
"create": "app_custom_button_create",
|
|
188
|
-
"update": "app_custom_button_update",
|
|
189
|
-
"delete": "app_custom_button_delete",
|
|
208
|
+
"list": _tool_key(BUILDER_DOMAIN, "app_custom_button_list"),
|
|
209
|
+
"get": _tool_key(BUILDER_DOMAIN, "app_custom_button_get"),
|
|
210
|
+
"create": _tool_key(BUILDER_DOMAIN, "app_custom_button_create"),
|
|
211
|
+
"update": _tool_key(BUILDER_DOMAIN, "app_custom_button_update"),
|
|
212
|
+
"delete": _tool_key(BUILDER_DOMAIN, "app_custom_button_delete"),
|
|
190
213
|
}.get(getattr(args, "builder_button_command", None))
|
|
191
214
|
if builder_command == "portal":
|
|
192
215
|
return {
|
|
193
|
-
"list": "portal_list",
|
|
194
|
-
"get": "portal_get",
|
|
195
|
-
"
|
|
196
|
-
"apply": "portal_apply",
|
|
216
|
+
"list": _tool_key(BUILDER_DOMAIN, "portal_list"),
|
|
217
|
+
"get": _tool_key(BUILDER_DOMAIN, "portal_get"),
|
|
218
|
+
"apply": _tool_key(BUILDER_DOMAIN, "portal_apply"),
|
|
197
219
|
}.get(getattr(args, "builder_portal_command", None))
|
|
198
220
|
if builder_command == "view":
|
|
199
221
|
return {
|
|
200
|
-
"get": "view_get",
|
|
222
|
+
"get": _tool_key(BUILDER_DOMAIN, "view_get"),
|
|
201
223
|
}.get(getattr(args, "builder_view_command", None))
|
|
202
224
|
if builder_command == "chart":
|
|
203
225
|
return {
|
|
204
|
-
"get": "chart_get",
|
|
226
|
+
"get": _tool_key(BUILDER_DOMAIN, "chart_get"),
|
|
205
227
|
}.get(getattr(args, "builder_chart_command", None))
|
|
206
228
|
if builder_command == "schema":
|
|
207
|
-
return {"apply": "app_schema_apply"}.get(getattr(args, "builder_schema_command", None))
|
|
229
|
+
return {"apply": _tool_key(BUILDER_DOMAIN, "app_schema_apply")}.get(getattr(args, "builder_schema_command", None))
|
|
208
230
|
if builder_command == "layout":
|
|
209
|
-
return {"apply": "app_layout_apply"}.get(getattr(args, "builder_layout_command", None))
|
|
231
|
+
return {"apply": _tool_key(BUILDER_DOMAIN, "app_layout_apply")}.get(getattr(args, "builder_layout_command", None))
|
|
210
232
|
if builder_command == "views":
|
|
211
|
-
return {"apply": "app_views_apply"}.get(getattr(args, "builder_views_command", None))
|
|
233
|
+
return {"apply": _tool_key(BUILDER_DOMAIN, "app_views_apply")}.get(getattr(args, "builder_views_command", None))
|
|
212
234
|
if builder_command == "flow":
|
|
213
|
-
return {"apply": "app_flow_apply"}.get(getattr(args, "builder_flow_command", None))
|
|
235
|
+
return {"apply": _tool_key(BUILDER_DOMAIN, "app_flow_apply")}.get(getattr(args, "builder_flow_command", None))
|
|
214
236
|
if builder_command == "charts":
|
|
215
|
-
return {"apply": "app_charts_apply"}.get(getattr(args, "builder_charts_command", None))
|
|
237
|
+
return {"apply": _tool_key(BUILDER_DOMAIN, "app_charts_apply")}.get(getattr(args, "builder_charts_command", None))
|
|
216
238
|
if builder_command == "publish":
|
|
217
|
-
return {"verify": "app_publish_verify"}.get(getattr(args, "builder_publish_command", None))
|
|
239
|
+
return {"verify": _tool_key(BUILDER_DOMAIN, "app_publish_verify")}.get(getattr(args, "builder_publish_command", None))
|
|
218
240
|
return None
|
|
219
241
|
|
|
220
242
|
|
|
221
243
|
USER_SERVER_METHOD_MAP = {
|
|
222
|
-
"auth_login": "auth_login",
|
|
223
|
-
"auth_use_token": "auth_use_token",
|
|
224
|
-
"auth_whoami": "auth_whoami",
|
|
225
|
-
"auth_logout": "auth_logout",
|
|
226
|
-
"workspace_list": "workspace_list",
|
|
227
|
-
"workspace_select": "workspace_select",
|
|
228
|
-
"app_list": "app_list",
|
|
229
|
-
"app_search": "app_search",
|
|
230
|
-
"app_get": "app_get",
|
|
231
|
-
"
|
|
232
|
-
"
|
|
233
|
-
"
|
|
234
|
-
"
|
|
235
|
-
"
|
|
236
|
-
"
|
|
237
|
-
"
|
|
238
|
-
"
|
|
239
|
-
"
|
|
240
|
-
"
|
|
241
|
-
"
|
|
242
|
-
"
|
|
243
|
-
"
|
|
244
|
-
"
|
|
245
|
-
"
|
|
246
|
-
"
|
|
247
|
-
"
|
|
248
|
-
"
|
|
249
|
-
"
|
|
250
|
-
"
|
|
251
|
-
"
|
|
252
|
-
"
|
|
253
|
-
"
|
|
254
|
-
"
|
|
255
|
-
"
|
|
256
|
-
"
|
|
257
|
-
"
|
|
258
|
-
"
|
|
259
|
-
"
|
|
260
|
-
"
|
|
261
|
-
"
|
|
262
|
-
"
|
|
263
|
-
"
|
|
264
|
-
"
|
|
244
|
+
"auth_login": _tool_key(USER_DOMAIN, "auth_login"),
|
|
245
|
+
"auth_use_token": _tool_key(USER_DOMAIN, "auth_use_token"),
|
|
246
|
+
"auth_whoami": _tool_key(USER_DOMAIN, "auth_whoami"),
|
|
247
|
+
"auth_logout": _tool_key(USER_DOMAIN, "auth_logout"),
|
|
248
|
+
"workspace_list": _tool_key(USER_DOMAIN, "workspace_list"),
|
|
249
|
+
"workspace_select": _tool_key(USER_DOMAIN, "workspace_select"),
|
|
250
|
+
"app_list": _tool_key(USER_DOMAIN, "app_list"),
|
|
251
|
+
"app_search": _tool_key(USER_DOMAIN, "app_search"),
|
|
252
|
+
"app_get": _tool_key(USER_DOMAIN, "app_get"),
|
|
253
|
+
"portal_list": _tool_key(USER_DOMAIN, "portal_list"),
|
|
254
|
+
"portal_get": _tool_key(USER_DOMAIN, "portal_get"),
|
|
255
|
+
"view_get": _tool_key(USER_DOMAIN, "view_get"),
|
|
256
|
+
"chart_get": _tool_key(USER_DOMAIN, "chart_get"),
|
|
257
|
+
"file_get_upload_info": _tool_key(USER_DOMAIN, "file_get_upload_info"),
|
|
258
|
+
"file_upload_local": _tool_key(USER_DOMAIN, "file_upload_local"),
|
|
259
|
+
"feedback_submit": _tool_key(USER_DOMAIN, "feedback_submit"),
|
|
260
|
+
"record_import_schema_get": _tool_key(USER_DOMAIN, "record_import_schema_get"),
|
|
261
|
+
"record_import_template_get": _tool_key(USER_DOMAIN, "record_import_template_get"),
|
|
262
|
+
"record_import_verify": _tool_key(USER_DOMAIN, "record_import_verify"),
|
|
263
|
+
"record_import_repair_local": _tool_key(USER_DOMAIN, "record_import_repair_local"),
|
|
264
|
+
"record_import_start": _tool_key(USER_DOMAIN, "record_import_start"),
|
|
265
|
+
"record_import_status_get": _tool_key(USER_DOMAIN, "record_import_status_get"),
|
|
266
|
+
"record_insert_schema_get_public": _tool_key(USER_DOMAIN, "record_insert_schema_get"),
|
|
267
|
+
"record_member_candidates": _tool_key(USER_DOMAIN, "record_member_candidates"),
|
|
268
|
+
"record_department_candidates": _tool_key(USER_DOMAIN, "record_department_candidates"),
|
|
269
|
+
"record_analyze": _tool_key(USER_DOMAIN, "record_analyze"),
|
|
270
|
+
"record_list": _tool_key(USER_DOMAIN, "record_list"),
|
|
271
|
+
"record_get_public": _tool_key(USER_DOMAIN, "record_get"),
|
|
272
|
+
"record_browse_schema_get_public": _tool_key(USER_DOMAIN, "record_browse_schema_get"),
|
|
273
|
+
"record_update_schema_get_public": _tool_key(USER_DOMAIN, "record_update_schema_get"),
|
|
274
|
+
"record_insert_public": _tool_key(USER_DOMAIN, "record_insert"),
|
|
275
|
+
"record_update_public": _tool_key(USER_DOMAIN, "record_update"),
|
|
276
|
+
"record_delete_public": _tool_key(USER_DOMAIN, "record_delete"),
|
|
277
|
+
"record_code_block_schema_get_public": _tool_key(USER_DOMAIN, "record_code_block_schema_get"),
|
|
278
|
+
"record_code_block_run": _tool_key(USER_DOMAIN, "record_code_block_run"),
|
|
279
|
+
"task_list": _tool_key(USER_DOMAIN, "task_list"),
|
|
280
|
+
"task_get": _tool_key(USER_DOMAIN, "task_get"),
|
|
281
|
+
"task_action_execute": _tool_key(USER_DOMAIN, "task_action_execute"),
|
|
282
|
+
"task_associated_report_detail_get": _tool_key(USER_DOMAIN, "task_associated_report_detail_get"),
|
|
283
|
+
"task_workflow_log_get": _tool_key(USER_DOMAIN, "task_workflow_log_get"),
|
|
284
|
+
"directory_search": _tool_key(USER_DOMAIN, "directory_search"),
|
|
285
|
+
"directory_list_internal_users": _tool_key(USER_DOMAIN, "directory_list_internal_users"),
|
|
286
|
+
"directory_list_all_internal_users": _tool_key(USER_DOMAIN, "directory_list_all_internal_users"),
|
|
287
|
+
"directory_list_internal_departments": _tool_key(USER_DOMAIN, "directory_list_internal_departments"),
|
|
288
|
+
"directory_list_all_departments": _tool_key(USER_DOMAIN, "directory_list_all_departments"),
|
|
289
|
+
"directory_list_sub_departments": _tool_key(USER_DOMAIN, "directory_list_sub_departments"),
|
|
290
|
+
"directory_list_external_members": _tool_key(USER_DOMAIN, "directory_list_external_members"),
|
|
265
291
|
}
|
|
266
292
|
|
|
267
293
|
BUILDER_SERVER_METHOD_MAP = {
|
|
268
|
-
"auth_login": "auth_login",
|
|
269
|
-
"auth_use_token": "auth_use_token",
|
|
270
|
-
"auth_whoami": "auth_whoami",
|
|
271
|
-
"auth_logout": "auth_logout",
|
|
272
|
-
"workspace_list": "workspace_list",
|
|
273
|
-
"workspace_select": "workspace_select",
|
|
274
|
-
"file_upload_local": "file_upload_local",
|
|
275
|
-
"feedback_submit": "feedback_submit",
|
|
276
|
-
"package_list": "package_list",
|
|
277
|
-
"package_resolve": "package_resolve",
|
|
278
|
-
"builder_tool_contract": "builder_tool_contract",
|
|
279
|
-
"package_create": "package_create",
|
|
280
|
-
"member_search": "member_search",
|
|
281
|
-
"role_search": "role_search",
|
|
282
|
-
"role_create": "role_create",
|
|
283
|
-
"package_attach_app": "package_attach_app",
|
|
284
|
-
"app_release_edit_lock_if_mine": "app_release_edit_lock_if_mine",
|
|
285
|
-
"app_resolve": "app_resolve",
|
|
286
|
-
"app_custom_button_list": "app_custom_button_list",
|
|
287
|
-
"app_custom_button_get": "app_custom_button_get",
|
|
288
|
-
"app_custom_button_create": "app_custom_button_create",
|
|
289
|
-
"app_custom_button_update": "app_custom_button_update",
|
|
290
|
-
"app_custom_button_delete": "app_custom_button_delete",
|
|
291
|
-
"
|
|
292
|
-
"
|
|
293
|
-
"
|
|
294
|
-
"
|
|
295
|
-
"
|
|
296
|
-
"
|
|
297
|
-
"portal_list": "portal_list",
|
|
298
|
-
"portal_get": "portal_get",
|
|
299
|
-
"
|
|
300
|
-
"
|
|
301
|
-
"
|
|
302
|
-
"
|
|
303
|
-
"
|
|
304
|
-
"
|
|
305
|
-
"
|
|
306
|
-
"
|
|
307
|
-
"
|
|
308
|
-
"app_publish_verify": "app_publish_verify",
|
|
294
|
+
"auth_login": _tool_key(BUILDER_DOMAIN, "auth_login"),
|
|
295
|
+
"auth_use_token": _tool_key(BUILDER_DOMAIN, "auth_use_token"),
|
|
296
|
+
"auth_whoami": _tool_key(BUILDER_DOMAIN, "auth_whoami"),
|
|
297
|
+
"auth_logout": _tool_key(BUILDER_DOMAIN, "auth_logout"),
|
|
298
|
+
"workspace_list": _tool_key(BUILDER_DOMAIN, "workspace_list"),
|
|
299
|
+
"workspace_select": _tool_key(BUILDER_DOMAIN, "workspace_select"),
|
|
300
|
+
"file_upload_local": _tool_key(BUILDER_DOMAIN, "file_upload_local"),
|
|
301
|
+
"feedback_submit": _tool_key(BUILDER_DOMAIN, "feedback_submit"),
|
|
302
|
+
"package_list": _tool_key(BUILDER_DOMAIN, "package_list"),
|
|
303
|
+
"package_resolve": _tool_key(BUILDER_DOMAIN, "package_resolve"),
|
|
304
|
+
"builder_tool_contract": _tool_key(BUILDER_DOMAIN, "builder_tool_contract"),
|
|
305
|
+
"package_create": _tool_key(BUILDER_DOMAIN, "package_create"),
|
|
306
|
+
"member_search": _tool_key(BUILDER_DOMAIN, "member_search"),
|
|
307
|
+
"role_search": _tool_key(BUILDER_DOMAIN, "role_search"),
|
|
308
|
+
"role_create": _tool_key(BUILDER_DOMAIN, "role_create"),
|
|
309
|
+
"package_attach_app": _tool_key(BUILDER_DOMAIN, "package_attach_app"),
|
|
310
|
+
"app_release_edit_lock_if_mine": _tool_key(BUILDER_DOMAIN, "app_release_edit_lock_if_mine"),
|
|
311
|
+
"app_resolve": _tool_key(BUILDER_DOMAIN, "app_resolve"),
|
|
312
|
+
"app_custom_button_list": _tool_key(BUILDER_DOMAIN, "app_custom_button_list"),
|
|
313
|
+
"app_custom_button_get": _tool_key(BUILDER_DOMAIN, "app_custom_button_get"),
|
|
314
|
+
"app_custom_button_create": _tool_key(BUILDER_DOMAIN, "app_custom_button_create"),
|
|
315
|
+
"app_custom_button_update": _tool_key(BUILDER_DOMAIN, "app_custom_button_update"),
|
|
316
|
+
"app_custom_button_delete": _tool_key(BUILDER_DOMAIN, "app_custom_button_delete"),
|
|
317
|
+
"app_get": _tool_key(BUILDER_DOMAIN, "app_get"),
|
|
318
|
+
"app_get_fields": _tool_key(BUILDER_DOMAIN, "app_get_fields"),
|
|
319
|
+
"app_get_layout": _tool_key(BUILDER_DOMAIN, "app_get_layout"),
|
|
320
|
+
"app_get_views": _tool_key(BUILDER_DOMAIN, "app_get_views"),
|
|
321
|
+
"app_get_flow": _tool_key(BUILDER_DOMAIN, "app_get_flow"),
|
|
322
|
+
"app_get_charts": _tool_key(BUILDER_DOMAIN, "app_get_charts"),
|
|
323
|
+
"portal_list": _tool_key(BUILDER_DOMAIN, "portal_list"),
|
|
324
|
+
"portal_get": _tool_key(BUILDER_DOMAIN, "portal_get"),
|
|
325
|
+
"view_get": _tool_key(BUILDER_DOMAIN, "view_get"),
|
|
326
|
+
"chart_get": _tool_key(BUILDER_DOMAIN, "chart_get"),
|
|
327
|
+
"app_schema_apply": _tool_key(BUILDER_DOMAIN, "app_schema_apply"),
|
|
328
|
+
"app_layout_apply": _tool_key(BUILDER_DOMAIN, "app_layout_apply"),
|
|
329
|
+
"app_flow_apply": _tool_key(BUILDER_DOMAIN, "app_flow_apply"),
|
|
330
|
+
"app_views_apply": _tool_key(BUILDER_DOMAIN, "app_views_apply"),
|
|
331
|
+
"app_charts_apply": _tool_key(BUILDER_DOMAIN, "app_charts_apply"),
|
|
332
|
+
"portal_apply": _tool_key(BUILDER_DOMAIN, "portal_apply"),
|
|
333
|
+
"app_publish_verify": _tool_key(BUILDER_DOMAIN, "app_publish_verify"),
|
|
309
334
|
}
|
|
310
335
|
|
|
311
336
|
|
|
@@ -475,6 +500,7 @@ def _trim_app_search_like(payload: JSONObject) -> None:
|
|
|
475
500
|
|
|
476
501
|
|
|
477
502
|
def _trim_app_get(payload: JSONObject) -> None:
|
|
503
|
+
_trim_builder_envelope(payload)
|
|
478
504
|
_trim_nested_item_list(
|
|
479
505
|
payload,
|
|
480
506
|
("data", "accessible_views"),
|
|
@@ -563,20 +589,23 @@ def _trim_builder_list_like(payload: JSONObject) -> None:
|
|
|
563
589
|
_trim_builder_envelope(payload)
|
|
564
590
|
|
|
565
591
|
|
|
566
|
-
def _register_policy(names: tuple[str, ...], transform: TransformFn) -> None:
|
|
567
|
-
for
|
|
568
|
-
|
|
592
|
+
def _register_policy(domains: tuple[str, ...], names: tuple[str, ...], transform: TransformFn) -> None:
|
|
593
|
+
for domain in domains:
|
|
594
|
+
for name in names:
|
|
595
|
+
SUCCESS_POLICY_BY_TOOL[_tool_key(domain, name)] = transform
|
|
569
596
|
|
|
570
597
|
|
|
571
|
-
_register_policy(("auth_login", "auth_use_token", "auth_whoami"), _trim_auth_payload)
|
|
572
|
-
_register_policy(("auth_logout",), _trim_auth_logout)
|
|
573
|
-
_register_policy(("workspace_list",), _trim_workspace_list)
|
|
574
|
-
_register_policy(("workspace_select",), _trim_workspace_select)
|
|
575
|
-
_register_policy(("app_list", "app_search"), _trim_app_search_like)
|
|
576
|
-
_register_policy(("app_get",), _trim_app_get)
|
|
577
|
-
_register_policy(("
|
|
578
|
-
_register_policy(("
|
|
598
|
+
_register_policy((USER_DOMAIN, BUILDER_DOMAIN), ("auth_login", "auth_use_token", "auth_whoami"), _trim_auth_payload)
|
|
599
|
+
_register_policy((USER_DOMAIN, BUILDER_DOMAIN), ("auth_logout",), _trim_auth_logout)
|
|
600
|
+
_register_policy((USER_DOMAIN, BUILDER_DOMAIN), ("workspace_list",), _trim_workspace_list)
|
|
601
|
+
_register_policy((USER_DOMAIN, BUILDER_DOMAIN), ("workspace_select",), _trim_workspace_select)
|
|
602
|
+
_register_policy((USER_DOMAIN,), ("app_list", "app_search"), _trim_app_search_like)
|
|
603
|
+
_register_policy((USER_DOMAIN, BUILDER_DOMAIN), ("app_get",), _trim_app_get)
|
|
604
|
+
_register_policy((USER_DOMAIN, BUILDER_DOMAIN), ("portal_list", "portal_get", "view_get", "chart_get"), _trim_builder_list_like)
|
|
605
|
+
_register_policy((USER_DOMAIN,), ("file_get_upload_info",), _trim_file_upload_info)
|
|
606
|
+
_register_policy((USER_DOMAIN, BUILDER_DOMAIN), ("file_upload_local",), _trim_file_upload_local)
|
|
579
607
|
_register_policy(
|
|
608
|
+
(USER_DOMAIN,),
|
|
580
609
|
(
|
|
581
610
|
"record_import_schema_get",
|
|
582
611
|
"record_import_template_get",
|
|
@@ -588,6 +617,7 @@ _register_policy(
|
|
|
588
617
|
_trim_import_schema,
|
|
589
618
|
)
|
|
590
619
|
_register_policy(
|
|
620
|
+
(USER_DOMAIN,),
|
|
591
621
|
(
|
|
592
622
|
"record_schema_get",
|
|
593
623
|
"record_insert_schema_get",
|
|
@@ -597,13 +627,14 @@ _register_policy(
|
|
|
597
627
|
),
|
|
598
628
|
_trim_record_schema,
|
|
599
629
|
)
|
|
600
|
-
_register_policy(("record_insert", "record_update"), _trim_record_write)
|
|
601
|
-
_register_policy(("record_get",), _trim_record_get)
|
|
602
|
-
_register_policy(("record_list",), _trim_record_list)
|
|
603
|
-
_register_policy(("record_analyze",), _trim_record_analyze)
|
|
604
|
-
_register_policy(("record_code_block_run",), _trim_code_block_run)
|
|
605
|
-
_register_policy(("task_list",), _trim_task_list)
|
|
630
|
+
_register_policy((USER_DOMAIN,), ("record_insert", "record_update"), _trim_record_write)
|
|
631
|
+
_register_policy((USER_DOMAIN,), ("record_get",), _trim_record_get)
|
|
632
|
+
_register_policy((USER_DOMAIN,), ("record_list",), _trim_record_list)
|
|
633
|
+
_register_policy((USER_DOMAIN,), ("record_analyze",), _trim_record_analyze)
|
|
634
|
+
_register_policy((USER_DOMAIN,), ("record_code_block_run",), _trim_code_block_run)
|
|
635
|
+
_register_policy((USER_DOMAIN,), ("task_list",), _trim_task_list)
|
|
606
636
|
_register_policy(
|
|
637
|
+
(USER_DOMAIN,),
|
|
607
638
|
(
|
|
608
639
|
"task_get",
|
|
609
640
|
"task_action_execute",
|
|
@@ -613,6 +644,7 @@ _register_policy(
|
|
|
613
644
|
_trim_task_get,
|
|
614
645
|
)
|
|
615
646
|
_register_policy(
|
|
647
|
+
(USER_DOMAIN,),
|
|
616
648
|
(
|
|
617
649
|
"directory_search",
|
|
618
650
|
"directory_list_internal_users",
|
|
@@ -624,12 +656,19 @@ _register_policy(
|
|
|
624
656
|
),
|
|
625
657
|
_trim_directory,
|
|
626
658
|
)
|
|
627
|
-
_register_policy(("feedback_submit",), _trim_feedback)
|
|
659
|
+
_register_policy((USER_DOMAIN, BUILDER_DOMAIN), ("feedback_submit",), _trim_feedback)
|
|
628
660
|
_register_policy(
|
|
661
|
+
(USER_DOMAIN,),
|
|
629
662
|
(
|
|
630
663
|
"record_member_candidates",
|
|
631
664
|
"record_department_candidates",
|
|
632
665
|
"record_delete",
|
|
666
|
+
),
|
|
667
|
+
_trim_builder_list_like,
|
|
668
|
+
)
|
|
669
|
+
_register_policy(
|
|
670
|
+
(BUILDER_DOMAIN,),
|
|
671
|
+
(
|
|
633
672
|
"package_list",
|
|
634
673
|
"package_resolve",
|
|
635
674
|
"builder_tool_contract",
|
|
@@ -645,17 +684,11 @@ _register_policy(
|
|
|
645
684
|
"app_custom_button_create",
|
|
646
685
|
"app_custom_button_update",
|
|
647
686
|
"app_custom_button_delete",
|
|
648
|
-
"
|
|
649
|
-
"
|
|
650
|
-
"
|
|
651
|
-
"
|
|
652
|
-
"
|
|
653
|
-
"app_read_charts_summary",
|
|
654
|
-
"portal_list",
|
|
655
|
-
"portal_get",
|
|
656
|
-
"portal_read_summary",
|
|
657
|
-
"view_get",
|
|
658
|
-
"chart_get",
|
|
687
|
+
"app_get_fields",
|
|
688
|
+
"app_get_layout",
|
|
689
|
+
"app_get_views",
|
|
690
|
+
"app_get_flow",
|
|
691
|
+
"app_get_charts",
|
|
659
692
|
"app_schema_apply",
|
|
660
693
|
"app_layout_apply",
|
|
661
694
|
"app_flow_apply",
|
|
@@ -35,7 +35,7 @@ def build_builder_server() -> FastMCP:
|
|
|
35
35
|
"Follow the resource path resolve -> summary read -> apply -> attach -> publish_verify. "
|
|
36
36
|
"Use builder_tool_contract when you need a machine-readable contract, aliases, allowed enums, or a minimal valid example for a public builder tool. "
|
|
37
37
|
"If creating a new package may be appropriate, ask the user to confirm package creation before calling package_create; otherwise use package_resolve/package_list and app_resolve to locate resources, "
|
|
38
|
-
"
|
|
38
|
+
"app_get/app_get_fields/app_get_layout/app_get_views/app_get_flow/app_get_charts/portal_list/portal_get/view_get/chart_get for configuration reads, "
|
|
39
39
|
"member_search/role_search/role_create when workflow assignees must come from the directory or role catalog, preferring roles over explicit members unless the user explicitly names members, "
|
|
40
40
|
"then app_schema_apply/app_layout_apply/app_flow_apply/app_views_apply/app_charts_apply/portal_apply to execute normalized patches; these apply tools perform planning, normalization, and dependency checks internally where applicable. Schema/layout/views noop requests skip publish, charts are immediate-live without publish and resolve targets by chart_id first then exact unique chart name, portal updates are replace-only and publish=false only guarantees draft/base-info updates, and flow should use publish=false whenever you only want draft/precheck behavior. "
|
|
41
41
|
"Use package_attach_app to attach apps to packages, and app_publish_verify for explicit final publish verification. "
|
|
@@ -153,7 +153,7 @@ def build_builder_server() -> FastMCP:
|
|
|
153
153
|
) -> dict:
|
|
154
154
|
try:
|
|
155
155
|
return trim_public_response(
|
|
156
|
-
"feedback_submit",
|
|
156
|
+
"builder:feedback_submit",
|
|
157
157
|
feedback.feedback_submit(
|
|
158
158
|
category=category,
|
|
159
159
|
title=title,
|
|
@@ -311,28 +311,28 @@ def build_builder_server() -> FastMCP:
|
|
|
311
311
|
return ai_builder.app_custom_button_delete(profile=profile, app_key=app_key, button_id=button_id)
|
|
312
312
|
|
|
313
313
|
@server.tool()
|
|
314
|
-
def
|
|
315
|
-
return ai_builder.
|
|
314
|
+
def app_get(profile: str = DEFAULT_PROFILE, app_key: str = "") -> dict:
|
|
315
|
+
return ai_builder.app_get(profile=profile, app_key=app_key)
|
|
316
316
|
|
|
317
317
|
@server.tool()
|
|
318
|
-
def
|
|
319
|
-
return ai_builder.
|
|
318
|
+
def app_get_fields(profile: str = DEFAULT_PROFILE, app_key: str = "") -> dict:
|
|
319
|
+
return ai_builder.app_get_fields(profile=profile, app_key=app_key)
|
|
320
320
|
|
|
321
321
|
@server.tool()
|
|
322
|
-
def
|
|
323
|
-
return ai_builder.
|
|
322
|
+
def app_get_layout(profile: str = DEFAULT_PROFILE, app_key: str = "") -> dict:
|
|
323
|
+
return ai_builder.app_get_layout(profile=profile, app_key=app_key)
|
|
324
324
|
|
|
325
325
|
@server.tool()
|
|
326
|
-
def
|
|
327
|
-
return ai_builder.
|
|
326
|
+
def app_get_views(profile: str = DEFAULT_PROFILE, app_key: str = "") -> dict:
|
|
327
|
+
return ai_builder.app_get_views(profile=profile, app_key=app_key)
|
|
328
328
|
|
|
329
329
|
@server.tool()
|
|
330
|
-
def
|
|
331
|
-
return ai_builder.
|
|
330
|
+
def app_get_flow(profile: str = DEFAULT_PROFILE, app_key: str = "") -> dict:
|
|
331
|
+
return ai_builder.app_get_flow(profile=profile, app_key=app_key)
|
|
332
332
|
|
|
333
333
|
@server.tool()
|
|
334
|
-
def
|
|
335
|
-
return ai_builder.
|
|
334
|
+
def app_get_charts(profile: str = DEFAULT_PROFILE, app_key: str = "") -> dict:
|
|
335
|
+
return ai_builder.app_get_charts(profile=profile, app_key=app_key)
|
|
336
336
|
|
|
337
337
|
@server.tool()
|
|
338
338
|
def portal_list(profile: str = DEFAULT_PROFILE) -> dict:
|
|
@@ -347,36 +347,12 @@ def build_builder_server() -> FastMCP:
|
|
|
347
347
|
return ai_builder.portal_get(profile=profile, dash_key=dash_key, being_draft=being_draft)
|
|
348
348
|
|
|
349
349
|
@server.tool()
|
|
350
|
-
def
|
|
351
|
-
profile
|
|
352
|
-
dash_key: str = "",
|
|
353
|
-
being_draft: bool = True,
|
|
354
|
-
) -> dict:
|
|
355
|
-
return ai_builder.portal_read_summary(profile=profile, dash_key=dash_key, being_draft=being_draft)
|
|
356
|
-
|
|
357
|
-
@server.tool()
|
|
358
|
-
def view_get(profile: str = DEFAULT_PROFILE, viewgraph_key: str = "") -> dict:
|
|
359
|
-
return ai_builder.view_get(profile=profile, viewgraph_key=viewgraph_key)
|
|
350
|
+
def view_get(profile: str = DEFAULT_PROFILE, view_key: str = "") -> dict:
|
|
351
|
+
return ai_builder.view_get(profile=profile, view_key=view_key)
|
|
360
352
|
|
|
361
353
|
@server.tool()
|
|
362
|
-
def chart_get(
|
|
363
|
-
profile
|
|
364
|
-
chart_id: str = "",
|
|
365
|
-
data_payload: dict | None = None,
|
|
366
|
-
page_num: int | None = None,
|
|
367
|
-
page_size: int | None = None,
|
|
368
|
-
page_num_y: int | None = None,
|
|
369
|
-
page_size_y: int | None = None,
|
|
370
|
-
) -> dict:
|
|
371
|
-
return ai_builder.chart_get(
|
|
372
|
-
profile=profile,
|
|
373
|
-
chart_id=chart_id,
|
|
374
|
-
data_payload=data_payload or {},
|
|
375
|
-
page_num=page_num,
|
|
376
|
-
page_size=page_size,
|
|
377
|
-
page_num_y=page_num_y,
|
|
378
|
-
page_size_y=page_size_y,
|
|
379
|
-
)
|
|
354
|
+
def chart_get(profile: str = DEFAULT_PROFILE, chart_id: str = "") -> dict:
|
|
355
|
+
return ai_builder.chart_get(profile=profile, chart_id=chart_id)
|
|
380
356
|
|
|
381
357
|
@server.tool()
|
|
382
358
|
def app_schema_apply(
|