@qingflow-tech/qingflow-cli 1.1.39 → 1.1.41

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 (32) hide show
  1. package/README.md +3 -3
  2. package/package.json +1 -1
  3. package/pyproject.toml +1 -1
  4. package/src/qingflow_mcp/builder_facade/service.py +8 -8
  5. package/src/qingflow_mcp/server_cloud.py +89 -3
  6. package/src/qingflow_mcp/session_store.py +7 -1
  7. package/src/qingflow_mcp/tools/ai_builder_tools.py +1 -59
  8. package/src/qingflow_mcp/tools/app_tools.py +15 -29
  9. package/src/qingflow_mcp/tools/approval_tools.py +16 -40
  10. package/src/qingflow_mcp/tools/auth_tools.py +18 -13
  11. package/src/qingflow_mcp/tools/base.py +114 -74
  12. package/src/qingflow_mcp/tools/code_block_tools.py +2 -5
  13. package/src/qingflow_mcp/tools/custom_button_tools.py +6 -11
  14. package/src/qingflow_mcp/tools/directory_tools.py +9 -16
  15. package/src/qingflow_mcp/tools/export_tools.py +5 -9
  16. package/src/qingflow_mcp/tools/feedback_tools.py +0 -2
  17. package/src/qingflow_mcp/tools/file_tools.py +3 -5
  18. package/src/qingflow_mcp/tools/import_tools.py +7 -13
  19. package/src/qingflow_mcp/tools/navigation_tools.py +12 -23
  20. package/src/qingflow_mcp/tools/package_tools.py +11 -21
  21. package/src/qingflow_mcp/tools/portal_tools.py +9 -17
  22. package/src/qingflow_mcp/tools/qingbi_report_tools.py +18 -23
  23. package/src/qingflow_mcp/tools/record_tools.py +97 -53
  24. package/src/qingflow_mcp/tools/repository_dev_tools.py +4 -7
  25. package/src/qingflow_mcp/tools/resource_read_tools.py +6 -9
  26. package/src/qingflow_mcp/tools/role_tools.py +5 -9
  27. package/src/qingflow_mcp/tools/solution_tools.py +4 -16
  28. package/src/qingflow_mcp/tools/task_context_tools.py +6 -12
  29. package/src/qingflow_mcp/tools/task_tools.py +12 -29
  30. package/src/qingflow_mcp/tools/view_tools.py +23 -32
  31. package/src/qingflow_mcp/tools/workflow_tools.py +30 -47
  32. package/src/qingflow_mcp/tools/workspace_tools.py +5 -9
@@ -64,7 +64,7 @@ from ..solution.compiler.icon_utils import (
64
64
  workspace_icon_config,
65
65
  )
66
66
  from .app_tools import AppTools
67
- from .base import ToolBase, tool_cn_name
67
+ from .base import ToolBase
68
68
  from .custom_button_tools import CustomButtonTools
69
69
  from .directory_tools import DirectoryTools
70
70
  from .package_tools import PackageTools
@@ -857,7 +857,6 @@ class AiBuilderTools(ToolBase):
857
857
  expected_package_id=expected_package_id,
858
858
  )
859
859
 
860
- @tool_cn_name("分组列表查询")
861
860
  def package_list(self, *, profile: str, trial_status: str = "all", query: str = "") -> JSONObject:
862
861
  """执行分组与包相关逻辑。"""
863
862
  normalized_args = {"trial_status": trial_status, "query": query}
@@ -868,7 +867,6 @@ class AiBuilderTools(ToolBase):
868
867
  suggested_next_call={"tool_name": "package_list", "arguments": {"profile": profile, "trial_status": trial_status, "query": query}},
869
868
  )
870
869
 
871
- @tool_cn_name("分组解析")
872
870
  def package_resolve(self, *, profile: str, package_name: str) -> JSONObject:
873
871
  """执行分组与包相关逻辑。"""
874
872
  normalized_args = {"package_name": package_name}
@@ -879,7 +877,6 @@ class AiBuilderTools(ToolBase):
879
877
  suggested_next_call={"tool_name": "package_resolve", "arguments": {"profile": profile, "package_name": package_name}},
880
878
  )
881
879
 
882
- @tool_cn_name("搭建工具契约查询")
883
880
  def builder_tool_contract(self, *, tool_name: str) -> JSONObject:
884
881
  """执行工具方法逻辑。"""
885
882
  requested = str(tool_name or "").strip()
@@ -935,7 +932,6 @@ class AiBuilderTools(ToolBase):
935
932
  "contract": contract,
936
933
  }
937
934
 
938
- @tool_cn_name("工作区图标目录")
939
935
  def workspace_icon_catalog_get(self, *, profile: str = DEFAULT_PROFILE) -> JSONObject:
940
936
  """读取应用、应用包、门户可用的工作区图标候选。"""
941
937
  catalog = workspace_icon_catalog_payload()
@@ -962,7 +958,6 @@ class AiBuilderTools(ToolBase):
962
958
  },
963
959
  }
964
960
 
965
- @tool_cn_name("分组创建")
966
961
  def package_create(
967
962
  self,
968
963
  *,
@@ -1007,7 +1002,6 @@ class AiBuilderTools(ToolBase):
1007
1002
  },
1008
1003
  )
1009
1004
 
1010
- @tool_cn_name("分组详情查询")
1011
1005
  def package_get(self, *, profile: str, package_id: int | None = None) -> JSONObject:
1012
1006
  """执行分组与包相关逻辑。"""
1013
1007
  normalized_args = {"package_id": package_id}
@@ -1018,7 +1012,6 @@ class AiBuilderTools(ToolBase):
1018
1012
  suggested_next_call={"tool_name": "package_get", "arguments": {"profile": profile, "package_id": package_id}},
1019
1013
  ))
1020
1014
 
1021
- @tool_cn_name("分组配置应用")
1022
1015
  def package_apply(
1023
1016
  self,
1024
1017
  *,
@@ -1085,7 +1078,6 @@ class AiBuilderTools(ToolBase):
1085
1078
  ))
1086
1079
  return _attach_builder_apply_envelope("package_apply", result)
1087
1080
 
1088
- @tool_cn_name("分组更新")
1089
1081
  def package_update(
1090
1082
  self,
1091
1083
  *,
@@ -1124,7 +1116,6 @@ class AiBuilderTools(ToolBase):
1124
1116
  suggested_next_call={"tool_name": "package_update", "arguments": {"profile": profile, **normalized_args}},
1125
1117
  )
1126
1118
 
1127
- @tool_cn_name("方案安装")
1128
1119
  def solution_install(
1129
1120
  self,
1130
1121
  *,
@@ -1151,7 +1142,6 @@ class AiBuilderTools(ToolBase):
1151
1142
  suggested_next_call={"tool_name": "solution_install", "arguments": {"profile": profile, **normalized_args}},
1152
1143
  )
1153
1144
 
1154
- @tool_cn_name("成员检索")
1155
1145
  def member_search(
1156
1146
  self,
1157
1147
  *,
@@ -1188,7 +1178,6 @@ class AiBuilderTools(ToolBase):
1188
1178
  suggested_next_call={"tool_name": "member_search", "arguments": {"profile": profile, **normalized_args}},
1189
1179
  )
1190
1180
 
1191
- @tool_cn_name("角色检索")
1192
1181
  def role_search(self, *, profile: str, keyword: str, page_num: int = 1, page_size: int = 20) -> JSONObject:
1193
1182
  """执行角色相关逻辑。"""
1194
1183
  normalized_keyword = str(keyword or "").strip()
@@ -1206,7 +1195,6 @@ class AiBuilderTools(ToolBase):
1206
1195
  suggested_next_call={"tool_name": "role_search", "arguments": {"profile": profile, **normalized_args}},
1207
1196
  )
1208
1197
 
1209
- @tool_cn_name("角色创建")
1210
1198
  def role_create(
1211
1199
  self,
1212
1200
  *,
@@ -1239,7 +1227,6 @@ class AiBuilderTools(ToolBase):
1239
1227
  suggested_next_call={"tool_name": "role_create", "arguments": {"profile": profile, **normalized_args}},
1240
1228
  )
1241
1229
 
1242
- @tool_cn_name("分组挂载应用")
1243
1230
  def package_attach_app(self, *, profile: str, tag_id: int, app_key: str, app_title: str = "") -> JSONObject:
1244
1231
  """执行分组与包相关逻辑。"""
1245
1232
  normalized_args = {"tag_id": tag_id, "app_key": app_key, "app_title": app_title}
@@ -1260,7 +1247,6 @@ class AiBuilderTools(ToolBase):
1260
1247
  ),
1261
1248
  )
1262
1249
 
1263
- @tool_cn_name("释放应用编辑锁")
1264
1250
  def app_release_edit_lock_if_mine(
1265
1251
  self,
1266
1252
  *,
@@ -1287,7 +1273,6 @@ class AiBuilderTools(ToolBase):
1287
1273
  suggested_next_call={"tool_name": "app_release_edit_lock_if_mine", "arguments": {"profile": profile, **normalized_args}},
1288
1274
  )
1289
1275
 
1290
- @tool_cn_name("应用解析")
1291
1276
  def app_resolve(
1292
1277
  self,
1293
1278
  *,
@@ -1305,7 +1290,6 @@ class AiBuilderTools(ToolBase):
1305
1290
  suggested_next_call={"tool_name": "app_resolve", "arguments": {"profile": profile, **normalized_args}},
1306
1291
  ))
1307
1292
 
1308
- @tool_cn_name("按钮样式目录")
1309
1293
  def button_style_catalog_get(self, *, profile: str) -> JSONObject:
1310
1294
  """执行按钮样式相关逻辑。"""
1311
1295
  normalized_args: dict[str, object] = {}
@@ -1316,7 +1300,6 @@ class AiBuilderTools(ToolBase):
1316
1300
  suggested_next_call={"tool_name": "button_style_catalog_get", "arguments": {"profile": profile}},
1317
1301
  )
1318
1302
 
1319
- @tool_cn_name("应用按钮声明式应用")
1320
1303
  def app_custom_buttons_apply(
1321
1304
  self,
1322
1305
  *,
@@ -1385,7 +1368,6 @@ class AiBuilderTools(ToolBase):
1385
1368
  suggested_next_call={"tool_name": "app_custom_buttons_apply", "arguments": {"profile": profile, **normalized_args}},
1386
1369
  ))
1387
1370
 
1388
- @tool_cn_name("应用关联资源声明式应用")
1389
1371
  def app_associated_resources_apply(
1390
1372
  self,
1391
1373
  *,
@@ -1472,7 +1454,6 @@ class AiBuilderTools(ToolBase):
1472
1454
  suggested_next_call={"tool_name": "app_associated_resources_apply", "arguments": {"profile": profile, **normalized_args}},
1473
1455
  ))
1474
1456
 
1475
- @tool_cn_name("应用按钮列表")
1476
1457
  def app_custom_button_list(self, *, profile: str, app_key: str) -> JSONObject:
1477
1458
  """执行应用相关逻辑。"""
1478
1459
  normalized_args = {"app_key": app_key}
@@ -1483,7 +1464,6 @@ class AiBuilderTools(ToolBase):
1483
1464
  suggested_next_call={"tool_name": "app_custom_button_list", "arguments": {"profile": profile, **normalized_args}},
1484
1465
  )
1485
1466
 
1486
- @tool_cn_name("应用按钮详情")
1487
1467
  def app_custom_button_get(self, *, profile: str, app_key: str, button_id: int) -> JSONObject:
1488
1468
  """执行应用相关逻辑。"""
1489
1469
  normalized_args = {"app_key": app_key, "button_id": button_id}
@@ -1494,7 +1474,6 @@ class AiBuilderTools(ToolBase):
1494
1474
  suggested_next_call={"tool_name": "app_custom_button_get", "arguments": {"profile": profile, **normalized_args}},
1495
1475
  )
1496
1476
 
1497
- @tool_cn_name("应用按钮创建")
1498
1477
  def app_custom_button_create(self, *, profile: str, app_key: str, payload: JSONObject) -> JSONObject:
1499
1478
  """执行应用相关逻辑。"""
1500
1479
  try:
@@ -1530,7 +1509,6 @@ class AiBuilderTools(ToolBase):
1530
1509
  suggested_next_call={"tool_name": "app_custom_button_create", "arguments": {"profile": profile, **normalized_args}},
1531
1510
  )
1532
1511
 
1533
- @tool_cn_name("应用按钮更新")
1534
1512
  def app_custom_button_update(self, *, profile: str, app_key: str, button_id: int, payload: JSONObject) -> JSONObject:
1535
1513
  """执行应用相关逻辑。"""
1536
1514
  try:
@@ -1564,7 +1542,6 @@ class AiBuilderTools(ToolBase):
1564
1542
  suggested_next_call={"tool_name": "app_custom_button_update", "arguments": {"profile": profile, **normalized_args}},
1565
1543
  )
1566
1544
 
1567
- @tool_cn_name("应用按钮删除")
1568
1545
  def app_custom_button_delete(self, *, profile: str, app_key: str, button_id: int) -> JSONObject:
1569
1546
  """执行应用相关逻辑。"""
1570
1547
  normalized_args = {"app_key": app_key, "button_id": button_id}
@@ -1575,7 +1552,6 @@ class AiBuilderTools(ToolBase):
1575
1552
  suggested_next_call={"tool_name": "app_custom_button_delete", "arguments": {"profile": profile, **normalized_args}},
1576
1553
  )
1577
1554
 
1578
- @tool_cn_name("应用摘要读取")
1579
1555
  def app_read_summary(self, *, profile: str, app_key: str) -> JSONObject:
1580
1556
  """执行应用相关逻辑。"""
1581
1557
  normalized_args = {"app_key": app_key}
@@ -1586,7 +1562,6 @@ class AiBuilderTools(ToolBase):
1586
1562
  suggested_next_call={"tool_name": "app_get", "arguments": {"profile": profile, "app_key": app_key}},
1587
1563
  ))
1588
1564
 
1589
- @tool_cn_name("应用详情查询")
1590
1565
  def app_get(self, *, profile: str, app_key: str, app_keys: list[str] | None = None) -> JSONObject:
1591
1566
  """执行应用相关逻辑。"""
1592
1567
  if app_keys is not None:
@@ -1604,7 +1579,6 @@ class AiBuilderTools(ToolBase):
1604
1579
  suggested_next_call={"tool_name": "app_get", "arguments": {"profile": profile, "app_key": app_key}},
1605
1580
  ))
1606
1581
 
1607
- @tool_cn_name("应用字段摘要读取")
1608
1582
  def app_read_fields(self, *, profile: str, app_key: str) -> JSONObject:
1609
1583
  """执行应用相关逻辑。"""
1610
1584
  normalized_args = {"app_key": app_key}
@@ -1615,7 +1589,6 @@ class AiBuilderTools(ToolBase):
1615
1589
  suggested_next_call={"tool_name": "app_get_fields", "arguments": {"profile": profile, "app_key": app_key}},
1616
1590
  )
1617
1591
 
1618
- @tool_cn_name("应用字段详情查询")
1619
1592
  def app_get_fields(self, *, profile: str, app_key: str, app_keys: list[str] | None = None) -> JSONObject:
1620
1593
  """执行应用相关逻辑。"""
1621
1594
  if app_keys is not None:
@@ -1633,7 +1606,6 @@ class AiBuilderTools(ToolBase):
1633
1606
  suggested_next_call={"tool_name": "app_get_fields", "arguments": {"profile": profile, "app_key": app_key}},
1634
1607
  )
1635
1608
 
1636
- @tool_cn_name("修复代码块字段")
1637
1609
  def app_repair_code_blocks(
1638
1610
  self,
1639
1611
  *,
@@ -1651,7 +1623,6 @@ class AiBuilderTools(ToolBase):
1651
1623
  suggested_next_call={"tool_name": "app_repair_code_blocks", "arguments": {"profile": profile, **normalized_args}},
1652
1624
  )
1653
1625
 
1654
- @tool_cn_name("应用布局摘要读取")
1655
1626
  def app_read_layout_summary(self, *, profile: str, app_key: str) -> JSONObject:
1656
1627
  """执行应用相关逻辑。"""
1657
1628
  normalized_args = {"app_key": app_key}
@@ -1662,7 +1633,6 @@ class AiBuilderTools(ToolBase):
1662
1633
  suggested_next_call={"tool_name": "app_get_layout", "arguments": {"profile": profile, "app_key": app_key}},
1663
1634
  )
1664
1635
 
1665
- @tool_cn_name("应用布局详情查询")
1666
1636
  def app_get_layout(self, *, profile: str, app_key: str, app_keys: list[str] | None = None) -> JSONObject:
1667
1637
  """执行应用相关逻辑。"""
1668
1638
  if app_keys is not None:
@@ -1680,7 +1650,6 @@ class AiBuilderTools(ToolBase):
1680
1650
  suggested_next_call={"tool_name": "app_get_layout", "arguments": {"profile": profile, "app_key": app_key}},
1681
1651
  )
1682
1652
 
1683
- @tool_cn_name("应用视图摘要读取")
1684
1653
  def app_read_views_summary(self, *, profile: str, app_key: str) -> JSONObject:
1685
1654
  """执行应用相关逻辑。"""
1686
1655
  normalized_args = {"app_key": app_key}
@@ -1691,7 +1660,6 @@ class AiBuilderTools(ToolBase):
1691
1660
  suggested_next_call={"tool_name": "app_get_views", "arguments": {"profile": profile, "app_key": app_key}},
1692
1661
  )
1693
1662
 
1694
- @tool_cn_name("应用视图详情查询")
1695
1663
  def app_get_views(self, *, profile: str, app_key: str, app_keys: list[str] | None = None) -> JSONObject:
1696
1664
  """执行应用相关逻辑。"""
1697
1665
  if app_keys is not None:
@@ -1709,7 +1677,6 @@ class AiBuilderTools(ToolBase):
1709
1677
  suggested_next_call={"tool_name": "app_get_views", "arguments": {"profile": profile, "app_key": app_key}},
1710
1678
  )
1711
1679
 
1712
- @tool_cn_name("应用流程摘要读取")
1713
1680
  def app_read_flow_summary(self, *, profile: str, app_key: str) -> JSONObject:
1714
1681
  """执行应用相关逻辑。"""
1715
1682
  normalized_args = {"app_key": app_key}
@@ -1720,7 +1687,6 @@ class AiBuilderTools(ToolBase):
1720
1687
  suggested_next_call={"tool_name": "app_get_flow", "arguments": {"profile": profile, "app_key": app_key}},
1721
1688
  )
1722
1689
 
1723
- @tool_cn_name("应用流程详情查询")
1724
1690
  def app_get_flow(self, *, profile: str, app_key: str, app_keys: list[str] | None = None) -> JSONObject:
1725
1691
  """执行应用相关逻辑。"""
1726
1692
  if app_keys is not None:
@@ -1738,7 +1704,6 @@ class AiBuilderTools(ToolBase):
1738
1704
  suggested_next_call={"tool_name": "app_get_flow", "arguments": {"profile": profile, "app_key": app_key}},
1739
1705
  )
1740
1706
 
1741
- @tool_cn_name("应用流程规格查询")
1742
1707
  def app_flow_get(self, *, profile: str, app_key: str, version_id: str | None = None) -> JSONObject:
1743
1708
  normalized_args = {"app_key": app_key, "version_id": version_id}
1744
1709
  return _safe_tool_call(
@@ -1748,7 +1713,6 @@ class AiBuilderTools(ToolBase):
1748
1713
  suggested_next_call={"tool_name": "app_flow_get", "arguments": {"profile": profile, **normalized_args}},
1749
1714
  )
1750
1715
 
1751
- @tool_cn_name("应用流程规格 Schema 查询")
1752
1716
  def app_flow_get_schema(self, *, profile: str, schema_version: str | None = None) -> JSONObject:
1753
1717
  normalized_args = {"schema_version": schema_version}
1754
1718
  return _safe_tool_call(
@@ -1758,7 +1722,6 @@ class AiBuilderTools(ToolBase):
1758
1722
  suggested_next_call={"tool_name": "app_flow_get_schema", "arguments": {"profile": profile, **normalized_args}},
1759
1723
  )
1760
1724
 
1761
- @tool_cn_name("应用图表摘要读取")
1762
1725
  def app_read_charts_summary(self, *, profile: str, app_key: str) -> JSONObject:
1763
1726
  """执行应用相关逻辑。"""
1764
1727
  normalized_args = {"app_key": app_key}
@@ -1769,7 +1732,6 @@ class AiBuilderTools(ToolBase):
1769
1732
  suggested_next_call={"tool_name": "app_get_charts", "arguments": {"profile": profile, "app_key": app_key}},
1770
1733
  )
1771
1734
 
1772
- @tool_cn_name("应用图表详情查询")
1773
1735
  def app_get_charts(self, *, profile: str, app_key: str, app_keys: list[str] | None = None) -> JSONObject:
1774
1736
  """执行应用相关逻辑。"""
1775
1737
  if app_keys is not None:
@@ -1787,7 +1749,6 @@ class AiBuilderTools(ToolBase):
1787
1749
  suggested_next_call={"tool_name": "app_get_charts", "arguments": {"profile": profile, "app_key": app_key}},
1788
1750
  )
1789
1751
 
1790
- @tool_cn_name("自定义按钮读取")
1791
1752
  def app_get_buttons(self, *, profile: str, app_key: str = "", app_keys: list[str] | None = None) -> JSONObject:
1792
1753
  if app_keys is not None:
1793
1754
  return self._read_app_batch(
@@ -1804,7 +1765,6 @@ class AiBuilderTools(ToolBase):
1804
1765
  suggested_next_call={"tool_name": "app_get_buttons", "arguments": {"profile": profile, "app_key": app_key}},
1805
1766
  )
1806
1767
 
1807
- @tool_cn_name("关联资源读取")
1808
1768
  def app_get_associated_resources(self, *, profile: str, app_key: str = "", app_keys: list[str] | None = None) -> JSONObject:
1809
1769
  if app_keys is not None:
1810
1770
  return self._read_app_batch(
@@ -1821,7 +1781,6 @@ class AiBuilderTools(ToolBase):
1821
1781
  suggested_next_call={"tool_name": "app_get_associated_resources", "arguments": {"profile": profile, "app_key": app_key}},
1822
1782
  )
1823
1783
 
1824
- @tool_cn_name("门户列表查询")
1825
1784
  def portal_list(self, *, profile: str) -> JSONObject:
1826
1785
  """执行门户相关逻辑。"""
1827
1786
  return _publicize_package_fields(_safe_tool_call(
@@ -1831,7 +1790,6 @@ class AiBuilderTools(ToolBase):
1831
1790
  suggested_next_call={"tool_name": "portal_list", "arguments": {"profile": profile}},
1832
1791
  ))
1833
1792
 
1834
- @tool_cn_name("门户详情查询")
1835
1793
  def portal_get(self, *, profile: str, dash_key: str, being_draft: bool = True) -> JSONObject:
1836
1794
  """执行门户相关逻辑。"""
1837
1795
  normalized_args = {"dash_key": dash_key, "being_draft": being_draft}
@@ -1842,7 +1800,6 @@ class AiBuilderTools(ToolBase):
1842
1800
  suggested_next_call={"tool_name": "portal_get", "arguments": {"profile": profile, **normalized_args}},
1843
1801
  ))
1844
1802
 
1845
- @tool_cn_name("门户摘要读取")
1846
1803
  def portal_read_summary(self, *, profile: str, dash_key: str, being_draft: bool = True) -> JSONObject:
1847
1804
  """执行门户相关逻辑。"""
1848
1805
  normalized_args = {"dash_key": dash_key, "being_draft": being_draft}
@@ -1853,7 +1810,6 @@ class AiBuilderTools(ToolBase):
1853
1810
  suggested_next_call={"tool_name": "portal_get", "arguments": {"profile": profile, **normalized_args}},
1854
1811
  ))
1855
1812
 
1856
- @tool_cn_name("视图详情查询")
1857
1813
  def view_get(self, *, profile: str, view_key: str = "", viewgraph_key: str = "") -> JSONObject:
1858
1814
  """执行视图相关逻辑。"""
1859
1815
  resolved_view_key = _normalize_builder_view_key(str(view_key or viewgraph_key or "").strip())
@@ -1865,7 +1821,6 @@ class AiBuilderTools(ToolBase):
1865
1821
  suggested_next_call={"tool_name": "view_get", "arguments": {"profile": profile, **normalized_args}},
1866
1822
  )
1867
1823
 
1868
- @tool_cn_name("图表详情查询")
1869
1824
  def chart_get(
1870
1825
  self,
1871
1826
  *,
@@ -1881,7 +1836,6 @@ class AiBuilderTools(ToolBase):
1881
1836
  suggested_next_call={"tool_name": "chart_get", "arguments": {"profile": profile, "chart_id": chart_id}},
1882
1837
  )
1883
1838
 
1884
- @tool_cn_name("应用结构规划")
1885
1839
  def app_schema_plan(
1886
1840
  self,
1887
1841
  *,
@@ -1955,7 +1909,6 @@ class AiBuilderTools(ToolBase):
1955
1909
  suggested_next_call={"tool_name": "app_schema_plan", "arguments": {"profile": profile, **normalized_args}},
1956
1910
  ))
1957
1911
 
1958
- @tool_cn_name("应用布局规划")
1959
1912
  def app_layout_plan(
1960
1913
  self,
1961
1914
  *,
@@ -2003,7 +1956,6 @@ class AiBuilderTools(ToolBase):
2003
1956
  suggested_next_call={"tool_name": "app_layout_plan", "arguments": {"profile": profile, **normalized_request}},
2004
1957
  )
2005
1958
 
2006
- @tool_cn_name("应用流程规划")
2007
1959
  def app_flow_plan(
2008
1960
  self,
2009
1961
  *,
@@ -2049,7 +2001,6 @@ class AiBuilderTools(ToolBase):
2049
2001
  suggested_next_call={"tool_name": "app_flow_plan", "arguments": {"profile": profile, **request.model_dump(mode="json")}},
2050
2002
  )
2051
2003
 
2052
- @tool_cn_name("应用视图规划")
2053
2004
  def app_views_plan(
2054
2005
  self,
2055
2006
  *,
@@ -2120,7 +2071,6 @@ class AiBuilderTools(ToolBase):
2120
2071
  },
2121
2072
  )
2122
2073
 
2123
- @tool_cn_name("应用结构应用")
2124
2074
  def app_schema_apply(
2125
2075
  self,
2126
2076
  *,
@@ -3475,7 +3425,6 @@ class AiBuilderTools(ToolBase):
3475
3425
  result["safe_to_retry"] = False
3476
3426
  return result
3477
3427
 
3478
- @tool_cn_name("应用布局应用")
3479
3428
  def app_layout_apply(
3480
3429
  self,
3481
3430
  *,
@@ -3561,7 +3510,6 @@ class AiBuilderTools(ToolBase):
3561
3510
  suggested_next_call={"tool_name": "app_layout_apply", "arguments": {"profile": profile, **normalized_args}},
3562
3511
  )
3563
3512
 
3564
- @tool_cn_name("应用流程应用")
3565
3513
  def app_flow_apply(
3566
3514
  self,
3567
3515
  *,
@@ -3725,7 +3673,6 @@ class AiBuilderTools(ToolBase):
3725
3673
  suggested_next_call={"tool_name": "app_flow_apply", "arguments": {"profile": profile, **normalized_args}},
3726
3674
  )
3727
3675
 
3728
- @tool_cn_name("应用视图应用")
3729
3676
  def app_views_apply(
3730
3677
  self,
3731
3678
  *,
@@ -4087,7 +4034,6 @@ class AiBuilderTools(ToolBase):
4087
4034
  suggested_next_call={"tool_name": "app_views_apply", "arguments": {"profile": profile, **normalized_args}},
4088
4035
  )
4089
4036
 
4090
- @tool_cn_name("图表配置应用")
4091
4037
  def chart_apply(
4092
4038
  self,
4093
4039
  *,
@@ -4108,7 +4054,6 @@ class AiBuilderTools(ToolBase):
4108
4054
  reorder_chart_ids=reorder_chart_ids,
4109
4055
  )
4110
4056
 
4111
- @tool_cn_name("应用图表应用")
4112
4057
  def app_charts_apply(
4113
4058
  self,
4114
4059
  *,
@@ -4170,7 +4115,6 @@ class AiBuilderTools(ToolBase):
4170
4115
  suggested_next_call={"tool_name": "app_charts_apply", "arguments": {"profile": profile, **normalized_args}},
4171
4116
  ))
4172
4117
 
4173
- @tool_cn_name("门户配置应用")
4174
4118
  def portal_apply(
4175
4119
  self,
4176
4120
  *,
@@ -4287,7 +4231,6 @@ class AiBuilderTools(ToolBase):
4287
4231
  ))
4288
4232
  return _attach_builder_apply_envelope("portal_apply", result)
4289
4233
 
4290
- @tool_cn_name("门户删除")
4291
4234
  def portal_delete(self, *, profile: str, dash_key: str) -> JSONObject:
4292
4235
  """执行门户删除逻辑。"""
4293
4236
  normalized_args = {"dash_key": dash_key}
@@ -4299,7 +4242,6 @@ class AiBuilderTools(ToolBase):
4299
4242
  ))
4300
4243
  return _attach_builder_apply_envelope("portal_delete", result)
4301
4244
 
4302
- @tool_cn_name("应用发布校验")
4303
4245
  def app_publish_verify(
4304
4246
  self,
4305
4247
  *,
@@ -11,7 +11,7 @@ from ..errors import QingflowApiError, backend_code_int, is_auth_like_error, rai
11
11
  from ..json_types import JSONObject
12
12
  from ..list_type_labels import SYSTEM_VIEW_DEFINITIONS, get_app_publish_status_label
13
13
  from ..solution.compiler.icon_utils import workspace_icon_config
14
- from .base import ToolBase, tool_cn_name
14
+ from .base import ToolBase
15
15
 
16
16
 
17
17
  class AppTools(ToolBase):
@@ -86,7 +86,6 @@ class AppTools(ToolBase):
86
86
  ) -> JSONObject:
87
87
  return self.app_publish(profile=profile, app_key=app_key, payload=payload or {})
88
88
 
89
- @tool_cn_name("应用列表")
90
89
  def app_list(self, *, profile: str, query: str = "", keyword: str = "", ship_auth: bool = False) -> JSONObject:
91
90
  """List current-user visible apps in the selected workspace."""
92
91
  def runner(session_profile, context):
@@ -113,7 +112,7 @@ class AppTools(ToolBase):
113
112
  response["raw"] = result
114
113
  return response
115
114
 
116
- return self._run(profile, runner)
115
+ return self._run(profile, runner, tool_name='应用列表')
117
116
 
118
117
  def _filter_visible_apps(self, items: list[JSONObject], query: str) -> list[JSONObject]:
119
118
  """Filter current-user visible apps locally without calling admin search APIs."""
@@ -146,7 +145,6 @@ class AppTools(ToolBase):
146
145
  return item
147
146
  return None
148
147
 
149
- @tool_cn_name("应用搜索")
150
148
  def app_search(self, *, profile: str, keyword: str = "", page_num: int = 1, page_size: int = 50) -> JSONObject:
151
149
  """Search apps by keyword in name/title using backend search API.
152
150
  Useful for finding BUG-related apps across all packages."""
@@ -226,9 +224,8 @@ class AppTools(ToolBase):
226
224
  "source": source,
227
225
  }
228
226
 
229
- return self._run(profile, runner)
227
+ return self._run(profile, runner, tool_name='应用搜索')
230
228
 
231
- @tool_cn_name("应用详情")
232
229
  def app_get(self, *, profile: str, app_key: str) -> JSONObject:
233
230
  """执行应用相关逻辑。"""
234
231
  self._require_app_key(app_key)
@@ -294,9 +291,8 @@ class AppTools(ToolBase):
294
291
  },
295
292
  }
296
293
 
297
- return self._run(profile, runner)
294
+ return self._run(profile, runner, tool_name='应用详情')
298
295
 
299
- @tool_cn_name("应用基础信息")
300
296
  def app_get_base(self, *, profile: str, app_key: str, include_raw: bool = False) -> JSONObject:
301
297
  """执行应用相关逻辑。"""
302
298
  self._require_app_key(app_key)
@@ -344,9 +340,8 @@ class AppTools(ToolBase):
344
340
  response["summary"] = compact
345
341
  return response
346
342
 
347
- return self._run(profile, runner)
343
+ return self._run(profile, runner, tool_name='应用基础信息')
348
344
 
349
- @tool_cn_name("更新应用基础信息")
350
345
  def app_update_base(self, *, profile: str, app_key: str, payload: JSONObject) -> JSONObject:
351
346
  """执行应用相关逻辑。"""
352
347
  self._require_app_key(app_key)
@@ -360,9 +355,8 @@ class AppTools(ToolBase):
360
355
  target="app base settings",
361
356
  )
362
357
 
363
- return self._run(profile, runner)
358
+ return self._run(profile, runner, tool_name='更新应用基础信息')
364
359
 
365
- @tool_cn_name("应用表单结构")
366
360
  def app_get_form_schema(
367
361
  self,
368
362
  *,
@@ -401,9 +395,8 @@ class AppTools(ToolBase):
401
395
  response["summary"] = compact
402
396
  return response
403
397
 
404
- return self._run(profile, runner)
398
+ return self._run(profile, runner, tool_name='应用表单结构')
405
399
 
406
- @tool_cn_name("应用编辑版本号")
407
400
  def app_get_edit_version_no(self, *, profile: str, app_key: str) -> JSONObject:
408
401
  """执行应用相关逻辑。"""
409
402
  self._require_app_key(app_key)
@@ -412,9 +405,8 @@ class AppTools(ToolBase):
412
405
  result = self.backend.request("GET", context, f"/app/{app_key}/editVersionNo")
413
406
  return {"profile": profile, "ws_id": session_profile.selected_ws_id, "app_key": app_key, "result": result}
414
407
 
415
- return self._run(profile, runner)
408
+ return self._run(profile, runner, tool_name='应用编辑版本号')
416
409
 
417
- @tool_cn_name("应用流程基础信息")
418
410
  def app_get_apply_base_info(self, *, profile: str, app_key: str, list_type: int) -> JSONObject:
419
411
  """执行应用相关逻辑。"""
420
412
  self._require_app_key(app_key)
@@ -431,9 +423,8 @@ class AppTools(ToolBase):
431
423
  "result": result,
432
424
  }
433
425
 
434
- return self._run(profile, runner)
426
+ return self._run(profile, runner, tool_name='应用流程基础信息')
435
427
 
436
- @tool_cn_name("更新应用流程配置")
437
428
  def app_update_apply_config(self, *, profile: str, app_key: str, payload: JSONObject) -> JSONObject:
438
429
  """执行应用相关逻辑。"""
439
430
  self._require_app_key(app_key)
@@ -452,9 +443,8 @@ class AppTools(ToolBase):
452
443
  target="app apply list configuration",
453
444
  )
454
445
 
455
- return self._run(profile, runner)
446
+ return self._run(profile, runner, tool_name='更新应用流程配置')
456
447
 
457
- @tool_cn_name("更新应用表单结构")
458
448
  def app_update_form_schema(self, *, profile: str, app_key: str, payload: JSONObject) -> JSONObject:
459
449
  """执行应用相关逻辑。"""
460
450
  self._require_app_key(app_key)
@@ -468,9 +458,8 @@ class AppTools(ToolBase):
468
458
  target="app form schema",
469
459
  )
470
460
 
471
- return self._run(profile, runner)
461
+ return self._run(profile, runner, tool_name='更新应用表单结构')
472
462
 
473
- @tool_cn_name("应用编辑完成")
474
463
  def app_edit_finished(self, *, profile: str, app_key: str, payload: JSONObject) -> JSONObject:
475
464
  """执行应用相关逻辑。"""
476
465
  self._require_app_key(app_key)
@@ -480,9 +469,8 @@ class AppTools(ToolBase):
480
469
  result = self.backend.request("POST", context, f"/app/{app_key}/editFinished", json_body=body)
481
470
  return {"profile": profile, "ws_id": session_profile.selected_ws_id, "app_key": app_key, "result": result}
482
471
 
483
- return self._run(profile, runner)
472
+ return self._run(profile, runner, tool_name='应用编辑完成')
484
473
 
485
- @tool_cn_name("创建应用")
486
474
  def app_create(self, *, profile: str, payload: JSONObject) -> JSONObject:
487
475
  """执行应用相关逻辑。"""
488
476
  body = self._require_dict(payload)
@@ -528,9 +516,8 @@ class AppTools(ToolBase):
528
516
  assert last_error is not None
529
517
  raise last_error
530
518
 
531
- return self._run(profile, runner)
519
+ return self._run(profile, runner, tool_name='创建应用')
532
520
 
533
- @tool_cn_name("删除应用")
534
521
  def app_delete(self, *, profile: str, app_key: str) -> JSONObject:
535
522
  """执行应用相关逻辑。"""
536
523
  self._require_app_key(app_key)
@@ -543,9 +530,8 @@ class AppTools(ToolBase):
543
530
  target="app configuration",
544
531
  )
545
532
 
546
- return self._run(profile, runner)
533
+ return self._run(profile, runner, tool_name='删除应用')
547
534
 
548
- @tool_cn_name("发布应用")
549
535
  def app_publish(self, *, profile: str, app_key: str, payload: JSONObject) -> JSONObject:
550
536
  """执行应用相关逻辑。"""
551
537
  self._require_app_key(app_key)
@@ -555,7 +541,7 @@ class AppTools(ToolBase):
555
541
  result = self.backend.request("POST", context, f"/app/{app_key}/publish", json_body=body)
556
542
  return {"profile": profile, "ws_id": session_profile.selected_ws_id, "app_key": app_key, "result": result}
557
543
 
558
- return self._run(profile, runner)
544
+ return self._run(profile, runner, tool_name='发布应用')
559
545
 
560
546
  def _require_app_key(self, app_key: str) -> None:
561
547
  """执行内部辅助逻辑。"""