@qingflow-tech/qingflow-cli 1.1.38 → 1.1.40
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 +7 -3
- package/package.json +1 -1
- package/pyproject.toml +1 -1
- package/src/qingflow_mcp/builder_facade/service.py +8 -8
- package/src/qingflow_mcp/server_cloud.py +89 -3
- package/src/qingflow_mcp/tools/ai_builder_tools.py +1 -59
- package/src/qingflow_mcp/tools/app_tools.py +15 -29
- package/src/qingflow_mcp/tools/approval_tools.py +16 -40
- package/src/qingflow_mcp/tools/auth_tools.py +1 -4
- package/src/qingflow_mcp/tools/base.py +16 -34
- package/src/qingflow_mcp/tools/code_block_tools.py +2 -5
- package/src/qingflow_mcp/tools/custom_button_tools.py +6 -11
- package/src/qingflow_mcp/tools/directory_tools.py +9 -16
- package/src/qingflow_mcp/tools/export_tools.py +5 -9
- package/src/qingflow_mcp/tools/feedback_tools.py +0 -2
- package/src/qingflow_mcp/tools/file_tools.py +3 -5
- package/src/qingflow_mcp/tools/import_tools.py +7 -13
- package/src/qingflow_mcp/tools/navigation_tools.py +12 -23
- package/src/qingflow_mcp/tools/package_tools.py +11 -21
- package/src/qingflow_mcp/tools/portal_tools.py +9 -17
- package/src/qingflow_mcp/tools/qingbi_report_tools.py +18 -23
- package/src/qingflow_mcp/tools/record_tools.py +97 -53
- package/src/qingflow_mcp/tools/repository_dev_tools.py +4 -7
- package/src/qingflow_mcp/tools/resource_read_tools.py +6 -9
- package/src/qingflow_mcp/tools/role_tools.py +5 -9
- package/src/qingflow_mcp/tools/solution_tools.py +4 -16
- package/src/qingflow_mcp/tools/task_context_tools.py +6 -12
- package/src/qingflow_mcp/tools/task_tools.py +12 -29
- package/src/qingflow_mcp/tools/view_tools.py +23 -32
- package/src/qingflow_mcp/tools/workflow_tools.py +30 -47
- package/src/qingflow_mcp/tools/workspace_tools.py +5 -9
|
@@ -6,7 +6,7 @@ from ..config import DEFAULT_PROFILE
|
|
|
6
6
|
from ..errors import QingflowApiError, backend_code_int, is_auth_like_error, raise_tool_error
|
|
7
7
|
from ..json_types import JSONObject, JSONValue
|
|
8
8
|
from ..list_type_labels import SYSTEM_VIEW_DEFINITIONS
|
|
9
|
-
from .base import ToolBase
|
|
9
|
+
from .base import ToolBase
|
|
10
10
|
|
|
11
11
|
|
|
12
12
|
class ViewTools(ToolBase):
|
|
@@ -57,7 +57,6 @@ class ViewTools(ToolBase):
|
|
|
57
57
|
def view_get_workflow_status(profile: str = DEFAULT_PROFILE, viewgraph_key: str = "", row_record_id: int = 0) -> JSONObject:
|
|
58
58
|
return self.view_get_workflow_status(profile=profile, viewgraph_key=viewgraph_key, row_record_id=row_record_id)
|
|
59
59
|
|
|
60
|
-
@tool_cn_name("视图列表")
|
|
61
60
|
def view_list(self, *, profile: str, app_key: str) -> JSONObject:
|
|
62
61
|
"""执行视图相关逻辑。"""
|
|
63
62
|
self._require_app_key(app_key)
|
|
@@ -85,15 +84,13 @@ class ViewTools(ToolBase):
|
|
|
85
84
|
"verification": verification,
|
|
86
85
|
}
|
|
87
86
|
|
|
88
|
-
return self._run(profile, runner)
|
|
87
|
+
return self._run(profile, runner, tool_name="视图列表")
|
|
89
88
|
|
|
90
|
-
@tool_cn_name("视图列表(扁平)")
|
|
91
89
|
def view_list_flat(self, *, profile: str, app_key: str) -> JSONObject:
|
|
92
90
|
"""执行视图相关逻辑。"""
|
|
93
91
|
self._require_app_key(app_key)
|
|
94
|
-
return self._request(profile, "GET", f"/app/{app_key}/view/views", app_key=app_key)
|
|
92
|
+
return self._request(profile, "GET", f"/app/{app_key}/view/views", app_key=app_key, tool_name="视图列表(扁平)")
|
|
95
93
|
|
|
96
|
-
@tool_cn_name("视图排序")
|
|
97
94
|
def view_reorder(self, *, profile: str, app_key: str, payload: list[JSONObject]) -> JSONObject:
|
|
98
95
|
"""执行视图相关逻辑。"""
|
|
99
96
|
self._require_app_key(app_key)
|
|
@@ -104,30 +101,27 @@ class ViewTools(ToolBase):
|
|
|
104
101
|
"POST",
|
|
105
102
|
f"/app/{app_key}/view/ordinal",
|
|
106
103
|
app_key=app_key,
|
|
104
|
+
tool_name="视图排序",
|
|
107
105
|
json_body=self._normalize_reorder_payload(payload),
|
|
108
106
|
)
|
|
109
107
|
|
|
110
|
-
@tool_cn_name("设置视图列宽")
|
|
111
108
|
def view_set_column_width(self, *, profile: str, app_key: str, payload: JSONObject) -> JSONObject:
|
|
112
109
|
"""执行视图相关逻辑。"""
|
|
113
110
|
self._require_app_key(app_key)
|
|
114
111
|
body = self._require_dict(payload)
|
|
115
|
-
return self._request(profile, "POST", f"/app/{app_key}/view/que/width", app_key=app_key, json_body=body)
|
|
112
|
+
return self._request(profile, "POST", f"/app/{app_key}/view/que/width", app_key=app_key, tool_name="设置视图列宽", json_body=body)
|
|
116
113
|
|
|
117
|
-
@tool_cn_name("创建视图")
|
|
118
114
|
def view_create(self, *, profile: str, payload: JSONObject) -> JSONObject:
|
|
119
115
|
"""执行视图相关逻辑。"""
|
|
120
116
|
body = self._require_dict(payload)
|
|
121
117
|
app_key = str(body.get("appKey") or "")
|
|
122
|
-
return self._request(profile, "POST", "/view/viewConfig", app_key=app_key, json_body=body)
|
|
118
|
+
return self._request(profile, "POST", "/view/viewConfig", app_key=app_key, tool_name="创建视图", json_body=body)
|
|
123
119
|
|
|
124
|
-
@tool_cn_name("视图配置")
|
|
125
120
|
def view_get_config(self, *, profile: str, viewgraph_key: str) -> JSONObject:
|
|
126
121
|
"""执行视图相关逻辑。"""
|
|
127
122
|
self._require_viewgraph_key(viewgraph_key)
|
|
128
|
-
return self._request(profile, "GET", f"/view/{viewgraph_key}/viewConfig", viewgraph_key=viewgraph_key)
|
|
123
|
+
return self._request(profile, "GET", f"/view/{viewgraph_key}/viewConfig", viewgraph_key=viewgraph_key, tool_name="视图配置")
|
|
129
124
|
|
|
130
|
-
@tool_cn_name("视图基础信息")
|
|
131
125
|
def view_get_base_info(self, *, profile: str, viewgraph_key: str, passcode: str | None) -> JSONObject:
|
|
132
126
|
"""执行视图相关逻辑。"""
|
|
133
127
|
self._require_viewgraph_key(viewgraph_key)
|
|
@@ -165,9 +159,8 @@ class ViewTools(ToolBase):
|
|
|
165
159
|
"verification": verification,
|
|
166
160
|
}
|
|
167
161
|
|
|
168
|
-
return self._run(profile, runner)
|
|
162
|
+
return self._run(profile, runner, tool_name="视图基础信息")
|
|
169
163
|
|
|
170
|
-
@tool_cn_name("更新视图配置")
|
|
171
164
|
def view_update(self, *, profile: str, viewgraph_key: str, payload: JSONObject) -> JSONObject:
|
|
172
165
|
"""执行视图相关逻辑。"""
|
|
173
166
|
self._require_viewgraph_key(viewgraph_key)
|
|
@@ -177,12 +170,12 @@ class ViewTools(ToolBase):
|
|
|
177
170
|
"POST",
|
|
178
171
|
f"/view/{viewgraph_key}/viewConfig",
|
|
179
172
|
viewgraph_key=viewgraph_key,
|
|
173
|
+
tool_name="更新视图配置",
|
|
180
174
|
json_body=body,
|
|
181
175
|
risk_operation="update",
|
|
182
176
|
risk_target="view configuration",
|
|
183
177
|
)
|
|
184
178
|
|
|
185
|
-
@tool_cn_name("删除视图")
|
|
186
179
|
def view_delete(self, *, profile: str, viewgraph_key: str) -> JSONObject:
|
|
187
180
|
"""执行视图相关逻辑。"""
|
|
188
181
|
self._require_viewgraph_key(viewgraph_key)
|
|
@@ -191,29 +184,26 @@ class ViewTools(ToolBase):
|
|
|
191
184
|
"DELETE",
|
|
192
185
|
f"/view/{viewgraph_key}",
|
|
193
186
|
viewgraph_key=viewgraph_key,
|
|
187
|
+
tool_name="删除视图",
|
|
194
188
|
risk_operation="delete",
|
|
195
189
|
risk_target="view configuration",
|
|
196
190
|
)
|
|
197
191
|
|
|
198
|
-
@tool_cn_name("复制视图")
|
|
199
192
|
def view_copy(self, *, profile: str, viewgraph_key: str) -> JSONObject:
|
|
200
193
|
"""执行视图相关逻辑。"""
|
|
201
194
|
self._require_viewgraph_key(viewgraph_key)
|
|
202
|
-
return self._request(profile, "POST", f"/view/{viewgraph_key}/copy", viewgraph_key=viewgraph_key)
|
|
195
|
+
return self._request(profile, "POST", f"/view/{viewgraph_key}/copy", viewgraph_key=viewgraph_key, tool_name="复制视图")
|
|
203
196
|
|
|
204
|
-
@tool_cn_name("视图字段列表")
|
|
205
197
|
def view_list_questions(self, *, profile: str, viewgraph_key: str) -> JSONObject:
|
|
206
198
|
"""执行视图相关逻辑。"""
|
|
207
199
|
self._require_viewgraph_key(viewgraph_key)
|
|
208
|
-
return self._request(profile, "GET", f"/view/{viewgraph_key}/question", viewgraph_key=viewgraph_key)
|
|
200
|
+
return self._request(profile, "GET", f"/view/{viewgraph_key}/question", viewgraph_key=viewgraph_key, tool_name="视图字段列表")
|
|
209
201
|
|
|
210
|
-
@tool_cn_name("视图关联列表")
|
|
211
202
|
def view_list_associations(self, *, profile: str, viewgraph_key: str) -> JSONObject:
|
|
212
203
|
"""执行视图相关逻辑。"""
|
|
213
204
|
self._require_viewgraph_key(viewgraph_key)
|
|
214
|
-
return self._request(profile, "GET", f"/view/{viewgraph_key}/association", viewgraph_key=viewgraph_key)
|
|
205
|
+
return self._request(profile, "GET", f"/view/{viewgraph_key}/association", viewgraph_key=viewgraph_key, tool_name="视图关联列表")
|
|
215
206
|
|
|
216
|
-
@tool_cn_name("更新视图成员配置")
|
|
217
207
|
def view_update_member_config(self, *, profile: str, viewgraph_key: str, payload: JSONObject) -> JSONObject:
|
|
218
208
|
"""执行视图相关逻辑。"""
|
|
219
209
|
self._require_viewgraph_key(viewgraph_key)
|
|
@@ -223,12 +213,12 @@ class ViewTools(ToolBase):
|
|
|
223
213
|
"POST",
|
|
224
214
|
f"/view/{viewgraph_key}/member/config",
|
|
225
215
|
viewgraph_key=viewgraph_key,
|
|
216
|
+
tool_name="更新视图成员配置",
|
|
226
217
|
json_body=body,
|
|
227
218
|
risk_operation="update",
|
|
228
219
|
risk_target="view member visibility",
|
|
229
220
|
)
|
|
230
221
|
|
|
231
|
-
@tool_cn_name("更新视图数据配置")
|
|
232
222
|
def view_update_apply_config(self, *, profile: str, viewgraph_key: str, payload: JSONObject) -> JSONObject:
|
|
233
223
|
"""执行视图相关逻辑。"""
|
|
234
224
|
self._require_viewgraph_key(viewgraph_key)
|
|
@@ -238,12 +228,12 @@ class ViewTools(ToolBase):
|
|
|
238
228
|
"POST",
|
|
239
229
|
f"/view/{viewgraph_key}/apply/config",
|
|
240
230
|
viewgraph_key=viewgraph_key,
|
|
231
|
+
tool_name="更新视图数据配置",
|
|
241
232
|
json_body=body,
|
|
242
233
|
risk_operation="update",
|
|
243
234
|
risk_target="view apply visibility",
|
|
244
235
|
)
|
|
245
236
|
|
|
246
|
-
@tool_cn_name("看板泳道配置")
|
|
247
237
|
def view_board_set_lane_config(self, *, profile: str, viewgraph_key: str, payload: JSONObject) -> JSONObject:
|
|
248
238
|
"""执行视图相关逻辑。"""
|
|
249
239
|
self._require_viewgraph_key(viewgraph_key)
|
|
@@ -253,12 +243,12 @@ class ViewTools(ToolBase):
|
|
|
253
243
|
"POST",
|
|
254
244
|
f"/view/{viewgraph_key}/lane/config",
|
|
255
245
|
viewgraph_key=viewgraph_key,
|
|
246
|
+
tool_name="看板泳道配置",
|
|
256
247
|
json_body=body,
|
|
257
248
|
risk_operation="update",
|
|
258
249
|
risk_target="board lane configuration",
|
|
259
250
|
)
|
|
260
251
|
|
|
261
|
-
@tool_cn_name("看板泳道基础信息")
|
|
262
252
|
def view_board_get_lane_base_info(self, *, profile: str, viewgraph_key: str, page_num: int, page_size: int) -> JSONObject:
|
|
263
253
|
"""执行视图相关逻辑。"""
|
|
264
254
|
self._require_viewgraph_key(viewgraph_key)
|
|
@@ -267,10 +257,10 @@ class ViewTools(ToolBase):
|
|
|
267
257
|
"GET",
|
|
268
258
|
f"/view/{viewgraph_key}/lane/baseInfo",
|
|
269
259
|
viewgraph_key=viewgraph_key,
|
|
260
|
+
tool_name="看板泳道基础信息",
|
|
270
261
|
params={"pageNum": page_num, "pageSize": page_size},
|
|
271
262
|
)
|
|
272
263
|
|
|
273
|
-
@tool_cn_name("甘特图自动校准")
|
|
274
264
|
def view_gantt_switch_auto_calibration(self, *, profile: str, viewgraph_key: str, payload: JSONObject) -> JSONObject:
|
|
275
265
|
"""执行视图相关逻辑。"""
|
|
276
266
|
self._require_viewgraph_key(viewgraph_key)
|
|
@@ -280,12 +270,12 @@ class ViewTools(ToolBase):
|
|
|
280
270
|
"PUT",
|
|
281
271
|
f"/view/gantt/{viewgraph_key}/auto/calibration",
|
|
282
272
|
viewgraph_key=viewgraph_key,
|
|
273
|
+
tool_name="甘特图自动校准",
|
|
283
274
|
json_body=body,
|
|
284
275
|
risk_operation="update",
|
|
285
276
|
risk_target="gantt auto calibration settings",
|
|
286
277
|
)
|
|
287
278
|
|
|
288
|
-
@tool_cn_name("甘特图批量更新时间")
|
|
289
279
|
def view_gantt_batch_update_time(self, *, profile: str, viewgraph_key: str, payload: JSONObject) -> JSONObject:
|
|
290
280
|
"""执行视图相关逻辑。"""
|
|
291
281
|
self._require_viewgraph_key(viewgraph_key)
|
|
@@ -295,12 +285,12 @@ class ViewTools(ToolBase):
|
|
|
295
285
|
"PUT",
|
|
296
286
|
f"/view/gantt/{viewgraph_key}/batch/update",
|
|
297
287
|
viewgraph_key=viewgraph_key,
|
|
288
|
+
tool_name="甘特图批量更新时间",
|
|
298
289
|
json_body=body,
|
|
299
290
|
risk_operation="update",
|
|
300
291
|
risk_target="gantt task timing",
|
|
301
292
|
)
|
|
302
293
|
|
|
303
|
-
@tool_cn_name("视图后续节点")
|
|
304
294
|
def view_get_future_nodes(self, *, profile: str, viewgraph_key: str, apply_id: int, app_key: str) -> JSONObject:
|
|
305
295
|
"""执行视图相关逻辑。"""
|
|
306
296
|
self._require_viewgraph_key(viewgraph_key)
|
|
@@ -313,15 +303,15 @@ class ViewTools(ToolBase):
|
|
|
313
303
|
viewgraph_key=viewgraph_key,
|
|
314
304
|
app_key=app_key,
|
|
315
305
|
apply_id=apply_id,
|
|
306
|
+
tool_name="视图后续节点",
|
|
316
307
|
params={"appKey": app_key},
|
|
317
308
|
)
|
|
318
309
|
|
|
319
|
-
@tool_cn_name("视图流程状态")
|
|
320
310
|
def view_get_workflow_status(self, *, profile: str, viewgraph_key: str, row_record_id: int) -> JSONObject:
|
|
321
311
|
"""执行视图相关逻辑。"""
|
|
322
312
|
self._require_viewgraph_key(viewgraph_key)
|
|
323
313
|
self._require_positive("row_record_id", row_record_id)
|
|
324
|
-
return self._request(profile, "GET", f"/view/{viewgraph_key}/workflow/status/{row_record_id}", viewgraph_key=viewgraph_key, row_record_id=row_record_id)
|
|
314
|
+
return self._request(profile, "GET", f"/view/{viewgraph_key}/workflow/status/{row_record_id}", viewgraph_key=viewgraph_key, row_record_id=row_record_id, tool_name="视图流程状态")
|
|
325
315
|
|
|
326
316
|
def _request(
|
|
327
317
|
self,
|
|
@@ -333,6 +323,7 @@ class ViewTools(ToolBase):
|
|
|
333
323
|
params: JSONObject | None = None,
|
|
334
324
|
risk_operation: str | None = None,
|
|
335
325
|
risk_target: str | None = None,
|
|
326
|
+
tool_name: str,
|
|
336
327
|
**extra: JSONValue,
|
|
337
328
|
) -> JSONObject:
|
|
338
329
|
"""执行内部辅助逻辑。"""
|
|
@@ -344,7 +335,7 @@ class ViewTools(ToolBase):
|
|
|
344
335
|
return self._attach_human_review_notice(response, operation=risk_operation, target=risk_target)
|
|
345
336
|
return response
|
|
346
337
|
|
|
347
|
-
return self._run(profile, runner)
|
|
338
|
+
return self._run(profile, runner, tool_name=tool_name)
|
|
348
339
|
|
|
349
340
|
def _require_app_key(self, app_key: str) -> None:
|
|
350
341
|
"""执行内部辅助逻辑。"""
|
|
@@ -6,7 +6,7 @@ from ..backend_client import BackendRequestContext
|
|
|
6
6
|
from ..config import DEFAULT_PROFILE
|
|
7
7
|
from ..errors import QingflowApiError, raise_tool_error
|
|
8
8
|
from ..json_types import JSONObject, JSONValue
|
|
9
|
-
from .base import ToolBase
|
|
9
|
+
from .base import ToolBase
|
|
10
10
|
|
|
11
11
|
|
|
12
12
|
class WorkflowTools(ToolBase):
|
|
@@ -41,20 +41,17 @@ class WorkflowTools(ToolBase):
|
|
|
41
41
|
audit_node_id=audit_node_id,
|
|
42
42
|
)
|
|
43
43
|
|
|
44
|
-
@tool_cn_name("流程节点列表")
|
|
45
44
|
def workflow_list_nodes(self, *, profile: str, app_key: str) -> JSONObject:
|
|
46
45
|
"""执行流程相关逻辑。"""
|
|
47
46
|
self._require_app_key(app_key)
|
|
48
|
-
return self._request(profile, "GET", f"/app/{app_key}/auditNodes", app_key=app_key)
|
|
47
|
+
return self._request(profile, "GET", f"/app/{app_key}/auditNodes", app_key=app_key, tool_name="流程节点列表")
|
|
49
48
|
|
|
50
|
-
@tool_cn_name("流程节点详情")
|
|
51
49
|
def workflow_get_node_detail(self, *, profile: str, app_key: str, audit_node_id: int) -> JSONObject:
|
|
52
50
|
"""执行流程相关逻辑。"""
|
|
53
51
|
self._require_app_key(app_key)
|
|
54
52
|
self._require_positive("audit_node_id", audit_node_id)
|
|
55
|
-
return self._request(profile, "GET", f"/app/{app_key}/auditNodes/{audit_node_id}", app_key=app_key, audit_node_id=audit_node_id)
|
|
53
|
+
return self._request(profile, "GET", f"/app/{app_key}/auditNodes/{audit_node_id}", app_key=app_key, audit_node_id=audit_node_id, tool_name="流程节点详情")
|
|
56
54
|
|
|
57
|
-
@tool_cn_name("新增流程节点")
|
|
58
55
|
def workflow_add_node(self, *, profile: str, app_key: str, payload: JSONObject) -> JSONObject:
|
|
59
56
|
"""执行流程相关逻辑。"""
|
|
60
57
|
self._require_app_key(app_key)
|
|
@@ -65,9 +62,9 @@ class WorkflowTools(ToolBase):
|
|
|
65
62
|
path=f"/app/{app_key}/auditNodes",
|
|
66
63
|
json_body=body,
|
|
67
64
|
alternate_paths=[f"/app/{app_key}/auditNode"],
|
|
65
|
+
tool_name="新增流程节点",
|
|
68
66
|
)
|
|
69
67
|
|
|
70
|
-
@tool_cn_name("更新流程节点")
|
|
71
68
|
def workflow_update_node(self, *, profile: str, app_key: str, audit_node_id: int, payload: JSONObject) -> JSONObject:
|
|
72
69
|
"""执行流程相关逻辑。"""
|
|
73
70
|
self._require_app_key(app_key)
|
|
@@ -82,50 +79,44 @@ class WorkflowTools(ToolBase):
|
|
|
82
79
|
risk_operation="update",
|
|
83
80
|
risk_target="workflow node configuration",
|
|
84
81
|
audit_node_id=audit_node_id,
|
|
82
|
+
tool_name="更新流程节点",
|
|
85
83
|
)
|
|
86
84
|
|
|
87
|
-
@tool_cn_name("删除流程节点")
|
|
88
85
|
def workflow_delete_node(self, *, profile: str, app_key: str, payload: JSONObject) -> JSONObject:
|
|
89
86
|
"""执行流程相关逻辑。"""
|
|
90
87
|
self._require_app_key(app_key)
|
|
91
88
|
body = self._require_dict(payload)
|
|
92
|
-
return self._request(profile, "DELETE", f"/app/{app_key}/auditNode", app_key=app_key, json_body=body, risk_operation="delete", risk_target="workflow node configuration")
|
|
89
|
+
return self._request(profile, "DELETE", f"/app/{app_key}/auditNode", app_key=app_key, json_body=body, risk_operation="delete", risk_target="workflow node configuration", tool_name="删除流程节点")
|
|
93
90
|
|
|
94
|
-
@tool_cn_name("复制粘贴流程节点")
|
|
95
91
|
def workflow_copy_paste_node(self, *, profile: str, app_key: str, payload: JSONObject) -> JSONObject:
|
|
96
92
|
"""执行流程相关逻辑。"""
|
|
97
93
|
self._require_app_key(app_key)
|
|
98
94
|
body = self._require_dict(payload)
|
|
99
|
-
return self._request(profile, "POST", f"/app/{app_key}/auditNode/copyAndPaste", app_key=app_key, json_body=body)
|
|
95
|
+
return self._request(profile, "POST", f"/app/{app_key}/auditNode/copyAndPaste", app_key=app_key, json_body=body, tool_name="复制粘贴流程节点")
|
|
100
96
|
|
|
101
|
-
@tool_cn_name("剪切粘贴流程节点")
|
|
102
97
|
def workflow_cut_paste_node(self, *, profile: str, app_key: str, payload: JSONObject) -> JSONObject:
|
|
103
98
|
"""执行流程相关逻辑。"""
|
|
104
99
|
self._require_app_key(app_key)
|
|
105
100
|
body = self._require_dict(payload)
|
|
106
|
-
return self._request(profile, "POST", f"/app/{app_key}/auditNode/cutAndPaste", app_key=app_key, json_body=body)
|
|
101
|
+
return self._request(profile, "POST", f"/app/{app_key}/auditNode/cutAndPaste", app_key=app_key, json_body=body, tool_name="剪切粘贴流程节点")
|
|
107
102
|
|
|
108
|
-
@tool_cn_name("创建流程分支")
|
|
109
103
|
def workflow_create_sub_branch(self, *, profile: str, app_key: str, payload: JSONObject) -> JSONObject:
|
|
110
104
|
"""执行流程相关逻辑。"""
|
|
111
105
|
self._require_app_key(app_key)
|
|
112
106
|
body = self._require_dict(payload)
|
|
113
|
-
return self._request(profile, "POST", f"/app/{app_key}/auditNode/subBranch", app_key=app_key, json_body=body)
|
|
107
|
+
return self._request(profile, "POST", f"/app/{app_key}/auditNode/subBranch", app_key=app_key, json_body=body, tool_name="创建流程分支")
|
|
114
108
|
|
|
115
|
-
@tool_cn_name("删除流程分支")
|
|
116
109
|
def workflow_delete_sub_branch(self, *, profile: str, app_key: str, payload: JSONObject) -> JSONObject:
|
|
117
110
|
"""执行流程相关逻辑。"""
|
|
118
111
|
self._require_app_key(app_key)
|
|
119
112
|
body = self._require_dict(payload)
|
|
120
|
-
return self._request(profile, "DELETE", f"/app/{app_key}/auditNode/subBranch", app_key=app_key, json_body=body, risk_operation="delete", risk_target="workflow branch configuration")
|
|
113
|
+
return self._request(profile, "DELETE", f"/app/{app_key}/auditNode/subBranch", app_key=app_key, json_body=body, risk_operation="delete", risk_target="workflow branch configuration", tool_name="删除流程分支")
|
|
121
114
|
|
|
122
|
-
@tool_cn_name("流程全局设置")
|
|
123
115
|
def workflow_get_global_settings(self, *, profile: str, app_key: str) -> JSONObject:
|
|
124
116
|
"""执行流程相关逻辑。"""
|
|
125
117
|
self._require_app_key(app_key)
|
|
126
|
-
return self._request(profile, "GET", f"/app/{app_key}/workflow/global/setting", app_key=app_key)
|
|
118
|
+
return self._request(profile, "GET", f"/app/{app_key}/workflow/global/setting", app_key=app_key, tool_name="流程全局设置")
|
|
127
119
|
|
|
128
|
-
@tool_cn_name("更新流程全局设置")
|
|
129
120
|
def workflow_update_global_settings(self, *, profile: str, app_key: str, payload: JSONObject) -> JSONObject:
|
|
130
121
|
"""执行流程相关逻辑。"""
|
|
131
122
|
self._require_app_key(app_key)
|
|
@@ -138,9 +129,9 @@ class WorkflowTools(ToolBase):
|
|
|
138
129
|
alternate_paths=[],
|
|
139
130
|
risk_operation="update",
|
|
140
131
|
risk_target="workflow global settings",
|
|
132
|
+
tool_name="更新流程全局设置",
|
|
141
133
|
)
|
|
142
134
|
|
|
143
|
-
@tool_cn_name("发布流程")
|
|
144
135
|
def workflow_publish(self, *, profile: str, app_key: str, payload: JSONObject) -> JSONObject:
|
|
145
136
|
"""执行流程相关逻辑。"""
|
|
146
137
|
self._require_app_key(app_key)
|
|
@@ -151,16 +142,15 @@ class WorkflowTools(ToolBase):
|
|
|
151
142
|
path=f"/app/{app_key}/publish",
|
|
152
143
|
json_body=body,
|
|
153
144
|
alternate_paths=[],
|
|
145
|
+
tool_name="发布流程",
|
|
154
146
|
)
|
|
155
147
|
|
|
156
|
-
@tool_cn_name("流程后续节点")
|
|
157
148
|
def workflow_get_future_nodes(self, *, profile: str, app_key: str, apply_id: int) -> JSONObject:
|
|
158
149
|
"""执行流程相关逻辑。"""
|
|
159
150
|
self._require_app_key(app_key)
|
|
160
151
|
self._require_positive("apply_id", apply_id)
|
|
161
|
-
return self._request(profile, "GET", f"/app/{app_key}/auditNode/futureList/{apply_id}", app_key=app_key, apply_id=apply_id)
|
|
152
|
+
return self._request(profile, "GET", f"/app/{app_key}/auditNode/futureList/{apply_id}", app_key=app_key, apply_id=apply_id, tool_name="流程后续节点")
|
|
162
153
|
|
|
163
|
-
@tool_cn_name("流程后续节点(应用)")
|
|
164
154
|
def workflow_get_future_nodes_app(
|
|
165
155
|
self,
|
|
166
156
|
*,
|
|
@@ -184,72 +174,63 @@ class WorkflowTools(ToolBase):
|
|
|
184
174
|
app_key=app_key,
|
|
185
175
|
apply_id=apply_id,
|
|
186
176
|
params=params,
|
|
177
|
+
tool_name="流程后续节点(应用)",
|
|
187
178
|
)
|
|
188
179
|
|
|
189
|
-
@tool_cn_name("流程 Webhook 测试")
|
|
190
180
|
def workflow_webhook_test(self, *, profile: str, app_key: str, payload: JSONObject) -> JSONObject:
|
|
191
181
|
"""执行流程相关逻辑。"""
|
|
192
182
|
self._require_app_key(app_key)
|
|
193
183
|
body = self._require_dict(payload)
|
|
194
|
-
return self._request(profile, "POST", f"/app/{app_key}/auditNode/webhookTest", app_key=app_key, json_body=body)
|
|
184
|
+
return self._request(profile, "POST", f"/app/{app_key}/auditNode/webhookTest", app_key=app_key, json_body=body, tool_name="流程 Webhook 测试")
|
|
195
185
|
|
|
196
|
-
@tool_cn_name("流程 QSource 查询")
|
|
197
186
|
def workflow_qsource_query(self, *, profile: str, app_key: str, payload: JSONObject) -> JSONObject:
|
|
198
187
|
"""执行流程相关逻辑。"""
|
|
199
188
|
self._require_app_key(app_key)
|
|
200
189
|
body = self._require_dict(payload)
|
|
201
|
-
return self._request(profile, "POST", f"/app/{app_key}/auditNode/qSourceQuery", app_key=app_key, json_body=body)
|
|
190
|
+
return self._request(profile, "POST", f"/app/{app_key}/auditNode/qSourceQuery", app_key=app_key, json_body=body, tool_name="流程 QSource 查询")
|
|
202
191
|
|
|
203
|
-
@tool_cn_name("流程 QSource 测试")
|
|
204
192
|
def workflow_qsource_test(self, *, profile: str, app_key: str, payload: JSONObject) -> JSONObject:
|
|
205
193
|
"""执行流程相关逻辑。"""
|
|
206
194
|
self._require_app_key(app_key)
|
|
207
195
|
body = self._require_dict(payload)
|
|
208
|
-
return self._request(profile, "POST", f"/app/{app_key}/auditNode/qSourceQueryTest", app_key=app_key, json_body=body)
|
|
196
|
+
return self._request(profile, "POST", f"/app/{app_key}/auditNode/qSourceQueryTest", app_key=app_key, json_body=body, tool_name="流程 QSource 测试")
|
|
209
197
|
|
|
210
|
-
@tool_cn_name("流程主动 QSource 配置")
|
|
211
198
|
def workflow_get_qsource_active(self, *, profile: str, app_key: str, qsource_id: int) -> JSONObject:
|
|
212
199
|
"""执行流程相关逻辑。"""
|
|
213
200
|
self._require_app_key(app_key)
|
|
214
201
|
self._require_positive("qsource_id", qsource_id)
|
|
215
|
-
return self._request(profile, "GET", f"/app/{app_key}/auditNode/active/qsource", app_key=app_key, params={"qSourceId": qsource_id})
|
|
202
|
+
return self._request(profile, "GET", f"/app/{app_key}/auditNode/active/qsource", app_key=app_key, params={"qSourceId": qsource_id}, tool_name="流程主动 QSource 配置")
|
|
216
203
|
|
|
217
|
-
@tool_cn_name("更新主动 QSource 配置")
|
|
218
204
|
def workflow_upsert_qsource_active(self, *, profile: str, app_key: str, payload: JSONObject) -> JSONObject:
|
|
219
205
|
"""执行流程相关逻辑。"""
|
|
220
206
|
self._require_app_key(app_key)
|
|
221
207
|
body = self._require_dict(payload)
|
|
222
|
-
return self._request(profile, "POST", f"/app/{app_key}/auditNode/active/qsource", app_key=app_key, json_body=body)
|
|
208
|
+
return self._request(profile, "POST", f"/app/{app_key}/auditNode/active/qsource", app_key=app_key, json_body=body, tool_name="更新主动 QSource 配置")
|
|
223
209
|
|
|
224
|
-
@tool_cn_name("流程被动 QSource 配置")
|
|
225
210
|
def workflow_get_qsource_passive(self, *, profile: str, app_key: str, qsource_id: int) -> JSONObject:
|
|
226
211
|
"""执行流程相关逻辑。"""
|
|
227
212
|
self._require_app_key(app_key)
|
|
228
213
|
self._require_positive("qsource_id", qsource_id)
|
|
229
|
-
return self._request(profile, "GET", f"/app/{app_key}/auditNode/passive/qsource", app_key=app_key, params={"qSourceId": qsource_id})
|
|
214
|
+
return self._request(profile, "GET", f"/app/{app_key}/auditNode/passive/qsource", app_key=app_key, params={"qSourceId": qsource_id}, tool_name="流程被动 QSource 配置")
|
|
230
215
|
|
|
231
|
-
@tool_cn_name("更新被动 QSource 配置")
|
|
232
216
|
def workflow_upsert_qsource_passive(self, *, profile: str, app_key: str, payload: JSONObject) -> JSONObject:
|
|
233
217
|
"""执行流程相关逻辑。"""
|
|
234
218
|
self._require_app_key(app_key)
|
|
235
219
|
body = self._require_dict(payload)
|
|
236
|
-
return self._request(profile, "POST", f"/app/{app_key}/auditNode/passive/qsource", app_key=app_key, json_body=body)
|
|
220
|
+
return self._request(profile, "POST", f"/app/{app_key}/auditNode/passive/qsource", app_key=app_key, json_body=body, tool_name="更新被动 QSource 配置")
|
|
237
221
|
|
|
238
|
-
@tool_cn_name("切换 QSource 状态")
|
|
239
222
|
def workflow_switch_qsource_status(self, *, profile: str, app_key: str, payload: JSONObject) -> JSONObject:
|
|
240
223
|
"""执行流程相关逻辑。"""
|
|
241
224
|
self._require_app_key(app_key)
|
|
242
225
|
body = self._require_dict(payload)
|
|
243
|
-
return self._request(profile, "POST", f"/app/{app_key}/auditNode/source/status", app_key=app_key, json_body=body)
|
|
226
|
+
return self._request(profile, "POST", f"/app/{app_key}/auditNode/source/status", app_key=app_key, json_body=body, tool_name="切换 QSource 状态")
|
|
244
227
|
|
|
245
|
-
@tool_cn_name("删除 QSource 配置")
|
|
246
228
|
def workflow_delete_qsource(self, *, profile: str, app_key: str, payload: JSONObject) -> JSONObject:
|
|
247
229
|
"""执行流程相关逻辑。"""
|
|
248
230
|
self._require_app_key(app_key)
|
|
249
231
|
body = self._require_dict(payload)
|
|
250
|
-
return self._request(profile, "DELETE", f"/app/{app_key}/auditNode/qsource", app_key=app_key, json_body=body, risk_operation="delete", risk_target="workflow qsource configuration")
|
|
232
|
+
return self._request(profile, "DELETE", f"/app/{app_key}/auditNode/qsource", app_key=app_key, json_body=body, risk_operation="delete", risk_target="workflow qsource configuration", tool_name="删除 QSource 配置")
|
|
251
233
|
|
|
252
|
-
@tool_cn_name("节点可编辑字段")
|
|
253
234
|
def workflow_get_editable_question_ids(self, *, profile: str, app_key: str, audit_node_id: int) -> JSONObject:
|
|
254
235
|
"""执行流程相关逻辑。"""
|
|
255
236
|
self._require_app_key(app_key)
|
|
@@ -260,13 +241,13 @@ class WorkflowTools(ToolBase):
|
|
|
260
241
|
f"/app/{app_key}/auditNode/{audit_node_id}/editableQueIds",
|
|
261
242
|
app_key=app_key,
|
|
262
243
|
audit_node_id=audit_node_id,
|
|
244
|
+
tool_name="节点可编辑字段",
|
|
263
245
|
)
|
|
264
246
|
|
|
265
|
-
@tool_cn_name("流程打印节点")
|
|
266
247
|
def workflow_get_print_nodes(self, *, profile: str, app_key: str) -> JSONObject:
|
|
267
248
|
"""执行流程相关逻辑。"""
|
|
268
249
|
self._require_app_key(app_key)
|
|
269
|
-
return self._request(profile, "GET", f"/app/{app_key}/auditNode/printNodes", app_key=app_key)
|
|
250
|
+
return self._request(profile, "GET", f"/app/{app_key}/auditNode/printNodes", app_key=app_key, tool_name="流程打印节点")
|
|
270
251
|
|
|
271
252
|
def _request(
|
|
272
253
|
self,
|
|
@@ -279,6 +260,7 @@ class WorkflowTools(ToolBase):
|
|
|
279
260
|
params: JSONObject | None = None,
|
|
280
261
|
risk_operation: str | None = None,
|
|
281
262
|
risk_target: str | None = None,
|
|
263
|
+
tool_name: str,
|
|
282
264
|
**extra: JSONValue,
|
|
283
265
|
) -> JSONObject:
|
|
284
266
|
"""执行内部辅助逻辑。"""
|
|
@@ -290,7 +272,7 @@ class WorkflowTools(ToolBase):
|
|
|
290
272
|
return self._attach_human_review_notice(response, operation=risk_operation, target=risk_target)
|
|
291
273
|
return response
|
|
292
274
|
|
|
293
|
-
return self._run(profile, runner)
|
|
275
|
+
return self._run(profile, runner, tool_name=tool_name)
|
|
294
276
|
|
|
295
277
|
def _request_with_post_fallbacks(
|
|
296
278
|
self,
|
|
@@ -302,6 +284,7 @@ class WorkflowTools(ToolBase):
|
|
|
302
284
|
alternate_paths: list[str],
|
|
303
285
|
risk_operation: str | None = None,
|
|
304
286
|
risk_target: str | None = None,
|
|
287
|
+
tool_name: str,
|
|
305
288
|
**extra: JSONValue,
|
|
306
289
|
) -> JSONObject:
|
|
307
290
|
"""执行内部辅助逻辑。"""
|
|
@@ -351,7 +334,7 @@ class WorkflowTools(ToolBase):
|
|
|
351
334
|
assert last_error is not None
|
|
352
335
|
raise last_error
|
|
353
336
|
|
|
354
|
-
return self._run(profile, runner)
|
|
337
|
+
return self._run(profile, runner, tool_name=tool_name)
|
|
355
338
|
|
|
356
339
|
def _require_app_key(self, app_key: str) -> None:
|
|
357
340
|
"""执行内部辅助逻辑。"""
|
|
@@ -8,7 +8,7 @@ from ..backend_client import BackendRequestContext
|
|
|
8
8
|
from ..cloud_context import current_cloud_context
|
|
9
9
|
from ..config import DEFAULT_PROFILE
|
|
10
10
|
from ..errors import QingflowApiError, backend_code_int, is_auth_like_error, raise_tool_error
|
|
11
|
-
from .base import ToolBase
|
|
11
|
+
from .base import ToolBase
|
|
12
12
|
|
|
13
13
|
|
|
14
14
|
_WORKSPACE_DETAIL_WARNING_KEY = "_qingflow_workspace_detail_warning"
|
|
@@ -71,7 +71,6 @@ class WorkspaceTools(ToolBase):
|
|
|
71
71
|
being_installed=being_installed,
|
|
72
72
|
)
|
|
73
73
|
|
|
74
|
-
@tool_cn_name("工作区列表")
|
|
75
74
|
def workspace_list(
|
|
76
75
|
self,
|
|
77
76
|
*,
|
|
@@ -127,9 +126,8 @@ class WorkspaceTools(ToolBase):
|
|
|
127
126
|
},
|
|
128
127
|
}
|
|
129
128
|
|
|
130
|
-
return self._run(profile, runner, require_workspace=False)
|
|
129
|
+
return self._run(profile, runner, require_workspace=False, tool_name='工作区列表')
|
|
131
130
|
|
|
132
|
-
@tool_cn_name("工作区详情")
|
|
133
131
|
def workspace_get(
|
|
134
132
|
self,
|
|
135
133
|
*,
|
|
@@ -158,9 +156,8 @@ class WorkspaceTools(ToolBase):
|
|
|
158
156
|
},
|
|
159
157
|
}
|
|
160
158
|
|
|
161
|
-
return self._run(profile, runner, require_workspace=False)
|
|
159
|
+
return self._run(profile, runner, require_workspace=False, tool_name='工作区详情')
|
|
162
160
|
|
|
163
|
-
@tool_cn_name("切换工作区")
|
|
164
161
|
def workspace_select(
|
|
165
162
|
self,
|
|
166
163
|
*,
|
|
@@ -227,9 +224,8 @@ class WorkspaceTools(ToolBase):
|
|
|
227
224
|
},
|
|
228
225
|
}
|
|
229
226
|
|
|
230
|
-
return self._run(profile, runner, require_workspace=False)
|
|
227
|
+
return self._run(profile, runner, require_workspace=False, tool_name='切换工作区')
|
|
231
228
|
|
|
232
|
-
@tool_cn_name("设置工作区插件状态")
|
|
233
229
|
def workspace_set_plugin_status(
|
|
234
230
|
self,
|
|
235
231
|
*,
|
|
@@ -258,7 +254,7 @@ class WorkspaceTools(ToolBase):
|
|
|
258
254
|
"result": result,
|
|
259
255
|
}
|
|
260
256
|
|
|
261
|
-
return self._run(profile, runner)
|
|
257
|
+
return self._run(profile, runner, tool_name='设置工作区插件状态')
|
|
262
258
|
|
|
263
259
|
def _fetch_workspace_with_fallback(
|
|
264
260
|
self,
|