agentengine-sdk-python 0.7.0__py3-none-any.whl → 0.8.1__py3-none-any.whl

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 (450) hide show
  1. {agentengine_sdk_python-0.7.0.dist-info → agentengine_sdk_python-0.8.1.dist-info}/METADATA +52 -20
  2. agentengine_sdk_python-0.8.1.dist-info/RECORD +644 -0
  3. {agentengine_sdk_python-0.7.0.dist-info → agentengine_sdk_python-0.8.1.dist-info}/WHEEL +1 -1
  4. ksadk/a2a/__init__.py +180 -11
  5. ksadk/a2a/bootstrap.py +332 -0
  6. ksadk/a2a/card.py +15 -0
  7. ksadk/a2a/context_store.py +203 -0
  8. ksadk/a2a/control_plane.py +1056 -0
  9. ksadk/a2a/credential.py +99 -0
  10. ksadk/a2a/event_adapter.py +149 -0
  11. ksadk/a2a/executor.py +361 -137
  12. ksadk/a2a/external_transport.py +516 -0
  13. ksadk/a2a/identity.py +304 -0
  14. ksadk/a2a/ids.py +22 -0
  15. ksadk/a2a/langgraph.py +285 -0
  16. ksadk/a2a/resume_store.py +201 -0
  17. ksadk/a2a/routes.py +112 -0
  18. ksadk/a2a/server.py +102 -62
  19. ksadk/a2a/service_env.py +33 -0
  20. ksadk/a2a/space_client.py +1122 -0
  21. ksadk/a2a/task_adapter.py +423 -0
  22. ksadk/a2a/task_event_dispatcher.py +167 -0
  23. ksadk/a2a/task_event_outbox.py +326 -0
  24. ksadk/a2a/task_store.py +206 -0
  25. ksadk/a2a_card.py +101 -0
  26. ksadk/a2ui/__init__.py +27 -0
  27. ksadk/a2ui/core.py +186 -0
  28. ksadk/a2ui/models.py +166 -0
  29. ksadk/a2ui/renderer.py +198 -0
  30. ksadk/agui/__init__.py +9 -0
  31. ksadk/agui/a2ui_projection.py +92 -0
  32. ksadk/agui/agent.py +872 -0
  33. ksadk/agui/config.py +92 -0
  34. ksadk/agui/routes.py +47 -0
  35. ksadk/api/client.py +238 -204
  36. ksadk/api/environment.py +27 -0
  37. ksadk/builders/__init__.py +2 -0
  38. ksadk/builders/base.py +16 -14
  39. ksadk/builders/code_builder.py +375 -270
  40. ksadk/builders/container_builder.py +240 -200
  41. ksadk/builders/framework_requirements.py +31 -12
  42. ksadk/builders/ks3_uploader.py +60 -29
  43. ksadk/builders/managed_runtime_builder.py +173 -0
  44. ksadk/builders/mcp_builder.py +91 -92
  45. ksadk/builders/requirements_utils.py +1 -5
  46. ksadk/cli/__init__.py +97 -171
  47. ksadk/cli/cmd_a2a.py +255 -84
  48. ksadk/cli/cmd_agent.py +19 -5
  49. ksadk/cli/cmd_build.py +158 -29
  50. ksadk/cli/cmd_completion.py +47 -35
  51. ksadk/cli/cmd_config.py +267 -198
  52. ksadk/cli/cmd_create.py +507 -740
  53. ksadk/cli/cmd_dashboard.py +120 -45
  54. ksadk/cli/cmd_deploy.py +135 -59
  55. ksadk/cli/cmd_destroy.py +44 -14
  56. ksadk/cli/cmd_eval.py +386 -0
  57. ksadk/cli/cmd_files.py +63 -24
  58. ksadk/cli/cmd_hermes.py +313 -135
  59. ksadk/cli/cmd_invoke.py +184 -122
  60. ksadk/cli/cmd_launch.py +76 -28
  61. ksadk/cli/cmd_mcp.py +98 -64
  62. ksadk/cli/cmd_model.py +14 -5
  63. ksadk/cli/cmd_openclaw.py +564 -268
  64. ksadk/cli/cmd_replay.py +71 -0
  65. ksadk/cli/cmd_run.py +58 -73
  66. ksadk/cli/cmd_status.py +80 -31
  67. ksadk/cli/cmd_studio.py +110 -0
  68. ksadk/cli/cmd_version.py +20 -13
  69. ksadk/cli/cmd_web.py +95 -18
  70. ksadk/cli/deploy_utils.py +20 -20
  71. ksadk/cli/dry_run.py +7 -4
  72. ksadk/cli/env_options.py +83 -0
  73. ksadk/cli/error_utils.py +37 -12
  74. ksadk/cli/global_options.py +4 -3
  75. ksadk/cli/local_runtime.py +1 -2
  76. ksadk/cli/model_catalog.py +6 -2
  77. ksadk/cli/network_options.py +41 -19
  78. ksadk/cli/resource_common.py +6 -2
  79. ksadk/cli/runtime_bootstrap.py +51 -0
  80. ksadk/cli/storage.py +0 -1
  81. ksadk/cli/ui.py +11 -3
  82. ksadk/cli/workflow_common.py +52 -18
  83. ksadk/codex/__init__.py +12 -0
  84. ksadk/codex/client.py +1042 -0
  85. ksadk/codex/phase.py +143 -0
  86. ksadk/codex/runtime.py +940 -0
  87. ksadk/common/aicp_env.py +0 -1
  88. ksadk/common/auth.py +2 -2
  89. ksadk/common/constants.py +1 -3
  90. ksadk/common/kop_client.py +232 -0
  91. ksadk/common/llm_utils.py +17 -13
  92. ksadk/compat/__init__.py +5 -0
  93. ksadk/compat/adk_compat.py +200 -0
  94. ksadk/compat/copilotkit_a2ui.py +330 -0
  95. ksadk/configs/__init__.py +12 -14
  96. ksadk/configs/env_registry.py +661 -116
  97. ksadk/configs/global_config.py +3 -2
  98. ksadk/configs/settings.py +133 -209
  99. ksadk/conversations/__init__.py +85 -92
  100. ksadk/conversations/attachment_storage.py +16 -11
  101. ksadk/conversations/attachments.py +44 -36
  102. ksadk/conversations/compaction_pipeline.py +12 -12
  103. ksadk/conversations/compaction_prompt.py +9 -5
  104. ksadk/conversations/context.py +221 -6
  105. ksadk/conversations/message_projection.py +438 -51
  106. ksadk/conversations/model_context.py +12 -6
  107. ksadk/conversations/model_options.py +0 -1
  108. ksadk/conversations/normalize.py +20 -16
  109. ksadk/conversations/reasoning_markup.py +1 -1
  110. ksadk/conversations/runtime.py +339 -5255
  111. ksadk/conversations/runtime_compaction.py +333 -0
  112. ksadk/conversations/runtime_constants.py +27 -0
  113. ksadk/conversations/runtime_governance.py +185 -0
  114. ksadk/conversations/runtime_input.py +660 -0
  115. ksadk/conversations/runtime_invocation.py +395 -0
  116. ksadk/conversations/runtime_metadata.py +475 -0
  117. ksadk/conversations/runtime_observability.py +367 -0
  118. ksadk/conversations/runtime_payloads.py +272 -0
  119. ksadk/conversations/runtime_persistence.py +440 -0
  120. ksadk/conversations/runtime_preparation.py +426 -0
  121. ksadk/conversations/runtime_resume.py +836 -0
  122. ksadk/conversations/runtime_stream_events.py +902 -0
  123. ksadk/conversations/runtime_streaming.py +700 -0
  124. ksadk/conversations/semantic_summary.py +17 -5
  125. ksadk/conversations/session_title.py +6 -3
  126. ksadk/deployment/__init__.py +15 -16
  127. ksadk/deployment/agent_access.py +12 -23
  128. ksadk/deployment/base.py +51 -38
  129. ksadk/deployment/managed_runtime.py +33 -0
  130. ksadk/deployment/manager.py +85 -71
  131. ksadk/deployment/providers/serverless.py +379 -210
  132. ksadk/deployment/registry.py +38 -32
  133. ksadk/deployment/state.py +11 -11
  134. ksadk/deployment/ui_config.py +1 -1
  135. ksadk/detection/__init__.py +1 -1
  136. ksadk/detection/detector.py +146 -83
  137. ksadk/detection/mcp_detector.py +9 -6
  138. ksadk/evaluation/__init__.py +84 -0
  139. ksadk/evaluation/a2a_adapter.py +444 -0
  140. ksadk/evaluation/adapters.py +54 -0
  141. ksadk/evaluation/contracts.py +409 -0
  142. ksadk/evaluation/evalset.py +351 -0
  143. ksadk/evaluation/evaluators.py +461 -0
  144. ksadk/evaluation/executor.py +118 -0
  145. ksadk/evaluation/storage.py +68 -0
  146. ksadk/evaluation/target.py +73 -0
  147. ksadk/events/__init__.py +25 -0
  148. ksadk/events/parser.py +191 -0
  149. ksadk/events/replay.py +37 -0
  150. ksadk/events/runtime_event.py +273 -0
  151. ksadk/events/store.py +317 -0
  152. ksadk/harness/__init__.py +35 -0
  153. ksadk/harness/app.py +269 -0
  154. ksadk/harness/config.py +181 -0
  155. ksadk/harness/reasoner.py +105 -0
  156. ksadk/harness/runtime.py +364 -0
  157. ksadk/harness/sandbox.py +141 -0
  158. ksadk/harness/tools.py +222 -0
  159. ksadk/hermes_terminal.py +28 -12
  160. ksadk/identity/resolver.py +15 -9
  161. ksadk/ids.py +32 -0
  162. ksadk/knowledge_base/adk_tool.py +1 -1
  163. ksadk/knowledge_base/client.py +38 -33
  164. ksadk/managed_a2a_card.py +160 -0
  165. ksadk/managed_runtime.py +195 -0
  166. ksadk/markdown.py +5 -2
  167. ksadk/mcp_runtime/__init__.py +9 -6
  168. ksadk/memory/__init__.py +1 -1
  169. ksadk/memory/adk/__init__.py +2 -0
  170. ksadk/memory/adk/backends/base_ltm_backend.py +2 -6
  171. ksadk/memory/adk/backends/http_ltm_backend.py +13 -21
  172. ksadk/memory/adk/backends/inmemory_ltm_backend.py +7 -13
  173. ksadk/memory/adk/backends/sdk_ltm_backend.py +36 -36
  174. ksadk/memory/adk/long_term_memory.py +34 -37
  175. ksadk/memory/adk/resilient_session_service.py +4 -5
  176. ksadk/memory/adk/short_term_memory.py +12 -21
  177. ksadk/memory/adk_tool.py +3 -2
  178. ksadk/memory/backends/base.py +19 -19
  179. ksadk/memory/backends/memory.py +24 -25
  180. ksadk/memory/backends/redis.py +31 -30
  181. ksadk/memory/langchain_tool.py +2 -1
  182. ksadk/memory/manager.py +52 -47
  183. ksadk/memory/service.py +16 -6
  184. ksadk/memory/tool.py +4 -0
  185. ksadk/model_policy.py +15 -7
  186. ksadk/model_proxy/__init__.py +51 -0
  187. ksadk/model_proxy/bootstrap.py +80 -0
  188. ksadk/model_proxy/cache.py +165 -0
  189. ksadk/model_proxy/config.py +66 -0
  190. ksadk/model_proxy/demo_webui.py +115 -0
  191. ksadk/model_proxy/detect.py +145 -0
  192. ksadk/model_proxy/gate.py +68 -0
  193. ksadk/model_proxy/namespace.py +201 -0
  194. ksadk/model_proxy/protocol_proxy.py +22 -0
  195. ksadk/model_proxy/server.py +443 -0
  196. ksadk/model_proxy/transform.py +735 -0
  197. ksadk/openclaw_gateway.py +29 -14
  198. ksadk/runners/adk_runner.py +354 -146
  199. ksadk/runners/base_runner.py +71 -29
  200. ksadk/runners/deepagents_runner.py +0 -1
  201. ksadk/runners/factory.py +18 -5
  202. ksadk/runners/langchain_runner.py +29 -742
  203. ksadk/runners/langgraph_runner.py +417 -97
  204. ksadk/runners/patch_langchain.py +16 -16
  205. ksadk/runners/remote_runner.py +134 -33
  206. ksadk/runners/usage_accumulator.py +1 -0
  207. ksadk/runners/utils/__init__.py +0 -10
  208. ksadk/runners/utils/loader.py +23 -7
  209. ksadk/runtime/__init__.py +67 -0
  210. ksadk/runtime/adapter.py +412 -0
  211. ksadk/runtime/conversation_execution.py +553 -0
  212. ksadk/runtime/executor.py +251 -0
  213. ksadk/runtime/factory.py +156 -0
  214. ksadk/runtime/framework_adapters.py +118 -0
  215. ksadk/runtime/launch.py +48 -0
  216. ksadk/runtime/preprocessing.py +131 -0
  217. ksadk/runtime/runner_adapter.py +1032 -0
  218. ksadk/runtime/runner_loading.py +36 -0
  219. ksadk/runtime_context.py +18 -3
  220. ksadk/runtime_state.py +0 -1
  221. ksadk/sandbox/__init__.py +4 -1
  222. ksadk/sandbox/backends/__init__.py +4 -1
  223. ksadk/sandbox/backends/e2b.py +13 -5
  224. ksadk/sandbox/backends/local_process.py +11 -3
  225. ksadk/sandbox/base.py +10 -15
  226. ksadk/sandbox/factory.py +14 -4
  227. ksadk/sandbox/registry.py +57 -6
  228. ksadk/server/__init__.py +39 -4
  229. ksadk/server/api_models.py +15 -5
  230. ksadk/server/app.py +24 -3928
  231. ksadk/server/composition.py +47 -0
  232. ksadk/server/factory.py +622 -0
  233. ksadk/server/routes/__init__.py +1 -0
  234. ksadk/server/routes/checkpoint_resolution.py +116 -0
  235. ksadk/server/routes/common.py +682 -0
  236. ksadk/server/routes/control.py +331 -0
  237. ksadk/server/routes/dependencies.py +98 -0
  238. ksadk/server/routes/misc.py +425 -0
  239. ksadk/server/routes/models.py +451 -0
  240. ksadk/server/routes/openai_compat.py +229 -0
  241. ksadk/server/routes/projection.py +848 -0
  242. ksadk/server/routes/routers.py +52 -0
  243. ksadk/server/routes/run.py +519 -0
  244. ksadk/server/routes/sessions.py +644 -0
  245. ksadk/server/routes/streaming.py +265 -0
  246. ksadk/server/routes/workspace.py +414 -0
  247. ksadk/server/static/assets/{ArtifactsPanel-D-SSn2ee.js → ArtifactsPanel-CakCqxEN.js} +1 -1
  248. ksadk/server/static/assets/CodeBlock-CynLknyO.js +9 -0
  249. ksadk/server/static/assets/MathMessageMarkdown-3sQdOysS.js +8 -0
  250. ksadk/server/static/assets/MermaidBlock-NERD_ef7.js +303 -0
  251. ksadk/server/static/assets/NativeTerminalPanel-CiHWf82q.js +1 -0
  252. ksadk/server/static/assets/{arc-BA13sHc9.js → arc-DrgjcKhl.js} +1 -1
  253. ksadk/server/static/assets/architecture-7EHR7CIX-CpZLRCcY.js +1 -0
  254. ksadk/server/static/assets/{architectureDiagram-3BPJPVTR-DzJzgVoL.js → architectureDiagram-3BPJPVTR-BXoVRbQ6.js} +1 -1
  255. ksadk/server/static/assets/{blockDiagram-GPEHLZMM-UTdVcZhn.js → blockDiagram-GPEHLZMM-BnaB3Ywv.js} +1 -1
  256. ksadk/server/static/assets/{c4Diagram-AAUBKEIU-Dix0GD4m.js → c4Diagram-AAUBKEIU-Dw4weZcp.js} +1 -1
  257. ksadk/server/static/assets/channel-Dt3rQTFI.js +1 -0
  258. ksadk/server/static/assets/{chunk-2J33WTMH-C2JxuZ42.js → chunk-2J33WTMH-ChjpLK7j.js} +1 -1
  259. ksadk/server/static/assets/{chunk-4BX2VUAB-Be57QPgD.js → chunk-4BX2VUAB-B9drTgOW.js} +1 -1
  260. ksadk/server/static/assets/{chunk-55IACEB6-WjSuy4nv.js → chunk-55IACEB6-CK4ROATy.js} +1 -1
  261. ksadk/server/static/assets/{chunk-727SXJPM-BOovP-b5.js → chunk-727SXJPM-B9KtTTgw.js} +1 -1
  262. ksadk/server/static/assets/{chunk-AQP2D5EJ-DOmZNmWj.js → chunk-AQP2D5EJ-1O1mki3m.js} +1 -1
  263. ksadk/server/static/assets/{chunk-FMBD7UC4-DzwlodkU.js → chunk-FMBD7UC4-B_fH2YuH.js} +1 -1
  264. ksadk/server/static/assets/{chunk-ND2GUHAM-DMqAikEU.js → chunk-ND2GUHAM-D6rFLaVV.js} +1 -1
  265. ksadk/server/static/assets/chunk-QZHKN3VN-iXEZtKQc.js +1 -0
  266. ksadk/server/static/assets/classDiagram-4FO5ZUOK-DIveV17Q.js +1 -0
  267. ksadk/server/static/assets/classDiagram-v2-Q7XG4LA2-DIveV17Q.js +1 -0
  268. ksadk/server/static/assets/{cose-bilkent-S5V4N54A-Zhy2GBnP.js → cose-bilkent-S5V4N54A-ChNs_Mdk.js} +1 -1
  269. ksadk/server/static/assets/{dagre-BM42HDAG-CbKrtIUz.js → dagre-BM42HDAG-D0QXg_MQ.js} +1 -1
  270. ksadk/server/static/assets/{diagram-2AECGRRQ-BRApgQRK.js → diagram-2AECGRRQ-DBDDKwBQ.js} +1 -1
  271. ksadk/server/static/assets/{diagram-5GNKFQAL-D0xbnDiK.js → diagram-5GNKFQAL-BkwDOxmO.js} +1 -1
  272. ksadk/server/static/assets/{diagram-KO2AKTUF-CVugVI9L.js → diagram-KO2AKTUF-Bv8waYvY.js} +1 -1
  273. ksadk/server/static/assets/{diagram-LMA3HP47-DozUGgee.js → diagram-LMA3HP47-e1VECDdu.js} +1 -1
  274. ksadk/server/static/assets/{diagram-OG6HWLK6-ZOYsKlru.js → diagram-OG6HWLK6-Ds9adfRl.js} +1 -1
  275. ksadk/server/static/assets/{dist-DpKtt4Bo.js → dist-4N2NMVYg.js} +1 -1
  276. ksadk/server/static/assets/{dist-CkEKJFtk.js → dist-B-jNR6Vn.js} +1 -1
  277. ksadk/server/static/assets/{dist-D57wnGWd.js → dist-B5J2uhNk.js} +1 -1
  278. ksadk/server/static/assets/{dist-8_SfK1IP.js → dist-B5oS1zcj.js} +1 -1
  279. ksadk/server/static/assets/{dist-DMezvBGJ.js → dist-BB3-OwTQ.js} +1 -1
  280. ksadk/server/static/assets/{dist-2hInLS_J.js → dist-BIlKoW0k.js} +1 -1
  281. ksadk/server/static/assets/{dist-BrCcQ47T.js → dist-BjOdlDjj.js} +1 -1
  282. ksadk/server/static/assets/{dist-BmlMPsCc.js → dist-C1sz5Eo3.js} +1 -1
  283. ksadk/server/static/assets/{dist-B0NP_Z0z.js → dist-CWV4lDr1.js} +1 -1
  284. ksadk/server/static/assets/{dist-D-xOD048.js → dist-CmZHzlwZ.js} +1 -1
  285. ksadk/server/static/assets/{dist-DL_NKc_z.js → dist-D6MpCZtz.js} +1 -1
  286. ksadk/server/static/assets/{dist-DyOkZmze.js → dist-DJN_6Y39.js} +1 -1
  287. ksadk/server/static/assets/{dist-DmFaq_Iy.js → dist-DQU9EWw-.js} +1 -1
  288. ksadk/server/static/assets/{dist-gX6GOLKq.js → dist-DWKByxWV.js} +1 -1
  289. ksadk/server/static/assets/{dist-DyWsb78Q.js → dist-Dli7qW-B.js} +1 -1
  290. ksadk/server/static/assets/{dist-BIJVDMuB.js → dist-DsHPdk3W.js} +1 -1
  291. ksadk/server/static/assets/{dist-Dp0k7bWI.js → dist-X4TnqwOK.js} +1 -1
  292. ksadk/server/static/assets/{dist-8EEyGgDx.js → dist-_pHPTyZ-.js} +1 -1
  293. ksadk/server/static/assets/{dist-CPBtqRTW.js → dist-fhOuWds5.js} +1 -1
  294. ksadk/server/static/assets/{dist-D-JMdWPQ.js → dist-gLnrGsoU.js} +1 -1
  295. ksadk/server/static/assets/{dist-BssVmjIo.js → dist-j6Dxmf_j.js} +1 -1
  296. ksadk/server/static/assets/{dist-C3HIIaN5.js → dist-o2OVmKvt.js} +1 -1
  297. ksadk/server/static/assets/{erDiagram-TEJ5UH35-Bk-9bgE5.js → erDiagram-TEJ5UH35-BPItFKH6.js} +1 -1
  298. ksadk/server/static/assets/eventmodeling-FCH6USID-DYFSxbqr.js +1 -0
  299. ksadk/server/static/assets/{flowDiagram-I6XJVG4X-Dn9kZVuZ.js → flowDiagram-I6XJVG4X-BbYB9w5Y.js} +1 -1
  300. ksadk/server/static/assets/{ganttDiagram-6RSMTGT7-BGxXlJqm.js → ganttDiagram-6RSMTGT7-TQXa0KXv.js} +1 -1
  301. ksadk/server/static/assets/gitGraph-WXDBUCRP-DyNYp6BN.js +1 -0
  302. ksadk/server/static/assets/{gitGraphDiagram-PVQCEYII-C7Q0X-wi.js → gitGraphDiagram-PVQCEYII-bKblCnpa.js} +1 -1
  303. ksadk/server/static/assets/index-R52pJJvg.js +177 -0
  304. ksadk/server/static/assets/index-jJr3_955.css +2 -0
  305. ksadk/server/static/assets/info-J43DQDTF-WUx7qTde.js +1 -0
  306. ksadk/server/static/assets/{infoDiagram-5YYISTIA-BO_CSqq5.js → infoDiagram-5YYISTIA-BGVT7J_i.js} +1 -1
  307. ksadk/server/static/assets/{ishikawaDiagram-YF4QCWOH-eYLPLd46.js → ishikawaDiagram-YF4QCWOH-K0OOfVna.js} +1 -1
  308. ksadk/server/static/assets/{journeyDiagram-JHISSGLW-De9geSb0.js → journeyDiagram-JHISSGLW-8LeOJaZp.js} +1 -1
  309. ksadk/server/static/assets/{kanban-definition-UN3LZRKU-Cs80kQto.js → kanban-definition-UN3LZRKU-C6uCgZrW.js} +1 -1
  310. ksadk/server/static/assets/{katex-DSrCFD8n.js → katex-CYWseY5E.js} +1 -1
  311. ksadk/server/static/assets/{linear-CN9sbKTF.js → linear-hdBcYzM8.js} +1 -1
  312. ksadk/server/static/assets/{mermaid-parser.core-DlgSBU8l.js → mermaid-parser.core-BWrDjSZM.js} +2 -2
  313. ksadk/server/static/assets/{mindmap-definition-RKZ34NQL-9afz7Oug.js → mindmap-definition-RKZ34NQL-Bjy_2v4_.js} +1 -1
  314. ksadk/server/static/assets/packet-YPE3B663-BN13y_xl.js +1 -0
  315. ksadk/server/static/assets/pie-LRSECV5Y-ftSLXhhc.js +1 -0
  316. ksadk/server/static/assets/{pieDiagram-4H26LBE5-DPv_VstN.js → pieDiagram-4H26LBE5-GmmqNiVH.js} +1 -1
  317. ksadk/server/static/assets/{quadrantDiagram-W4KKPZXB-o77wZ1XK.js → quadrantDiagram-W4KKPZXB-BmkRbwCg.js} +1 -1
  318. ksadk/server/static/assets/radar-GUYGQ44K-jaICkIeO.js +1 -0
  319. ksadk/server/static/assets/{requirementDiagram-4Y6WPE33-BYVw81VC.js → requirementDiagram-4Y6WPE33-DSWFqL7c.js} +1 -1
  320. ksadk/server/static/assets/{sankeyDiagram-5OEKKPKP-B7nZFMKT.js → sankeyDiagram-5OEKKPKP-l6iXmU65.js} +1 -1
  321. ksadk/server/static/assets/{sequenceDiagram-3UESZ5HK-BGRRrFw5.js → sequenceDiagram-3UESZ5HK-Cq6UBeQB.js} +1 -1
  322. ksadk/server/static/assets/{stateDiagram-AJRCARHV-BUfHCoPs.js → stateDiagram-AJRCARHV-qzTQpg3Y.js} +1 -1
  323. ksadk/server/static/assets/stateDiagram-v2-BHNVJYJU-BYCoYGAN.js +1 -0
  324. ksadk/server/static/assets/{timeline-definition-PNZ67QCA-FbCTGrf9.js → timeline-definition-PNZ67QCA-DEz24vV0.js} +1 -1
  325. ksadk/server/static/assets/treeView-BLDUP644-Cpib_vlz.js +1 -0
  326. ksadk/server/static/assets/treemap-LRROVOQU-DQxfmVHK.js +1 -0
  327. ksadk/server/static/assets/{vennDiagram-CIIHVFJN-DWgwtPsJ.js → vennDiagram-CIIHVFJN-CMCixki2.js} +1 -1
  328. ksadk/server/static/assets/wardley-L42UT6IY-BQYHnnkU.js +1 -0
  329. ksadk/server/static/assets/{wardleyDiagram-YWT4CUSO-2x8G-tTM.js → wardleyDiagram-YWT4CUSO-CVzB8F9K.js} +1 -1
  330. ksadk/server/static/assets/{xychartDiagram-2RQKCTM6-Drma3AYl.js → xychartDiagram-2RQKCTM6-BFBqBLc1.js} +1 -1
  331. ksadk/server/static/index.html +2 -2
  332. ksadk/server/terminal_sessions.py +111 -58
  333. ksadk/sessions/__init__.py +69 -19
  334. ksadk/sessions/base.py +31 -11
  335. ksadk/sessions/continuity.py +2 -3
  336. ksadk/sessions/in_memory.py +46 -2
  337. ksadk/sessions/local_service.py +148 -17
  338. ksadk/sessions/postgres_service.py +143 -25
  339. ksadk/sessions/resilient.py +36 -8
  340. ksadk/skills/models.py +17 -5
  341. ksadk/skills/package_store.py +5 -2
  342. ksadk/skills/runtime/agent.py +20 -5
  343. ksadk/skills/runtime/artifacts.py +1 -5
  344. ksadk/skills/runtime/backends/e2b.py +10 -4
  345. ksadk/skills/runtime/backends/local.py +15 -3
  346. ksadk/skills/runtime/base.py +1 -2
  347. ksadk/skills/runtime/executor.py +10 -3
  348. ksadk/skills/runtime/factory.py +4 -2
  349. ksadk/skills/runtime/loader.py +1 -2
  350. ksadk/skills/runtime/registry.py +15 -10
  351. ksadk/skills/runtime/request.py +3 -1
  352. ksadk/skills/service_client.py +47 -16
  353. ksadk/skills/tool_defs.py +15 -10
  354. ksadk/studio/__init__.py +5 -0
  355. ksadk/studio/agent_avatar_assets.py +120 -0
  356. ksadk/studio/agent_lifecycle.py +51 -0
  357. ksadk/studio/api.py +1046 -0
  358. ksadk/studio/api_catalog_routes.py +324 -0
  359. ksadk/studio/api_contracts.py +177 -0
  360. ksadk/studio/api_helpers.py +132 -0
  361. ksadk/studio/authoring.py +524 -0
  362. ksadk/studio/authoring_coordinator.py +285 -0
  363. ksadk/studio/builder.py +320 -0
  364. ksadk/studio/capabilities.py +351 -0
  365. ksadk/studio/cloud.py +278 -0
  366. ksadk/studio/codex_agent_service.py +583 -0
  367. ksadk/studio/codex_builder.py +324 -0
  368. ksadk/studio/codex_manifest.py +278 -0
  369. ksadk/studio/codex_run.py +352 -0
  370. ksadk/studio/compiler.py +189 -0
  371. ksadk/studio/contracts.py +644 -0
  372. ksadk/studio/errors.py +47 -0
  373. ksadk/studio/evaluation.py +192 -0
  374. ksadk/studio/event_store.py +284 -0
  375. ksadk/studio/framework_run.py +114 -0
  376. ksadk/studio/identifiers.py +33 -0
  377. ksadk/studio/mcp_runtime.py +229 -0
  378. ksadk/studio/model_client.py +543 -0
  379. ksadk/studio/model_profile_service.py +214 -0
  380. ksadk/studio/operations.py +243 -0
  381. ksadk/studio/otel_trace.py +754 -0
  382. ksadk/studio/pagination.py +182 -0
  383. ksadk/studio/python_tool_inspection.py +183 -0
  384. ksadk/studio/repository.py +306 -0
  385. ksadk/studio/resource_catalog.py +1217 -0
  386. ksadk/studio/run_service.py +707 -0
  387. ksadk/studio/runtime_catalog.py +74 -0
  388. ksadk/studio/runtime_source.py +339 -0
  389. ksadk/studio/service.py +1141 -0
  390. ksadk/studio/shared_web.py +994 -0
  391. ksadk/studio/skill_discovery.py +628 -0
  392. ksadk/studio/static/assets/PrismRenderer-IYN-ffww.js +3 -0
  393. ksadk/studio/static/assets/index-CaEN0eTR.css +1 -0
  394. ksadk/studio/static/assets/index-DI2eY_NH.js +252 -0
  395. ksadk/studio/static/assets/react-vendor-BNmTiJ-I.js +9 -0
  396. ksadk/studio/static/assets/rolldown-runtime-hePW80VL.js +1 -0
  397. ksadk/studio/static/index.html +15 -0
  398. ksadk/studio/templates.py +630 -0
  399. ksadk/studio/validator.py +246 -0
  400. ksadk/studio/workspace.py +137 -0
  401. ksadk/terminal_exec_policy.py +3 -4
  402. ksadk/tools/gateway.py +101 -15
  403. ksadk/tools/result_budget.py +12 -4
  404. ksadk/toolsets/__init__.py +161 -37
  405. ksadk/toolsets/a2a.py +426 -0
  406. ksadk/toolsets/platform.py +21 -5
  407. ksadk/toolsets/sandbox.py +82 -16
  408. ksadk/toolsets/skills.py +200 -39
  409. ksadk/toolsets/web.py +123 -26
  410. ksadk/toolsets/workspace.py +212 -101
  411. ksadk/tracing/__init__.py +19 -21
  412. ksadk/tracing/exporters/inmemory_exporter.py +62 -51
  413. ksadk/tracing/setup.py +135 -506
  414. ksadk/tracing/span_utils.py +0 -41
  415. ksadk/tui/loop.py +78 -30
  416. ksadk/tui/stream_render.py +1 -0
  417. ksadk/ui_config.py +5 -3
  418. ksadk/version.py +1 -1
  419. ksadk_runtime_common/memory_backend/registry.py +56 -56
  420. ksadk_runtime_common/schemas/runtime_event_v1.json +95 -0
  421. ksadk_runtime_common/workspace_files/router.py +8 -2
  422. agentengine_sdk_python-0.7.0.dist-info/RECORD +0 -482
  423. ksadk/a2a/card_builder.py +0 -64
  424. ksadk/a2a/client.py +0 -309
  425. ksadk/runners/utils/langfuse.py +0 -230
  426. ksadk/server/static/assets/CodeBlock-P16VOLYi.js +0 -9
  427. ksadk/server/static/assets/MathMessageMarkdown-CdGiQWHR.js +0 -8
  428. ksadk/server/static/assets/MermaidBlock-IOcal8cm.js +0 -303
  429. ksadk/server/static/assets/NativeTerminalPanel-DGSDWsei.js +0 -1
  430. ksadk/server/static/assets/architecture-7EHR7CIX-BvUlsA6l.js +0 -1
  431. ksadk/server/static/assets/channel-CTuydARX.js +0 -1
  432. ksadk/server/static/assets/chunk-QZHKN3VN-BnCydivS.js +0 -1
  433. ksadk/server/static/assets/classDiagram-4FO5ZUOK-BNHg45Be.js +0 -1
  434. ksadk/server/static/assets/classDiagram-v2-Q7XG4LA2-BNHg45Be.js +0 -1
  435. ksadk/server/static/assets/eventmodeling-FCH6USID-DsAgWnlf.js +0 -1
  436. ksadk/server/static/assets/gitGraph-WXDBUCRP-BIao9Yjg.js +0 -1
  437. ksadk/server/static/assets/index-C00Lwg3L.js +0 -165
  438. ksadk/server/static/assets/index-DAURbCsP.css +0 -1
  439. ksadk/server/static/assets/info-J43DQDTF-CyipqGxU.js +0 -1
  440. ksadk/server/static/assets/packet-YPE3B663-CGkyRxlg.js +0 -1
  441. ksadk/server/static/assets/pie-LRSECV5Y-M0uWAf4n.js +0 -1
  442. ksadk/server/static/assets/radar-GUYGQ44K-Bdbm24-x.js +0 -1
  443. ksadk/server/static/assets/stateDiagram-v2-BHNVJYJU-8xBN_gLM.js +0 -1
  444. ksadk/server/static/assets/treeView-BLDUP644-npMo0ak1.js +0 -1
  445. ksadk/server/static/assets/treemap-LRROVOQU-CHdzrrdo.js +0 -1
  446. ksadk/server/static/assets/wardley-L42UT6IY-BEQz7wyy.js +0 -1
  447. ksadk/tracing/exporters/langfuse_exporter.py +0 -445
  448. {agentengine_sdk_python-0.7.0.dist-info → agentengine_sdk_python-0.8.1.dist-info}/entry_points.txt +0 -0
  449. {agentengine_sdk_python-0.7.0.dist-info → agentengine_sdk_python-0.8.1.dist-info}/licenses/LICENSE +0 -0
  450. {agentengine_sdk_python-0.7.0.dist-info → agentengine_sdk_python-0.8.1.dist-info}/top_level.txt +0 -0
@@ -7,7 +7,7 @@ import os
7
7
  import webbrowser
8
8
  from datetime import datetime, timedelta, timezone
9
9
  from pathlib import Path
10
- from typing import Optional, Tuple
10
+ from typing import Any, Optional, Tuple, cast
11
11
 
12
12
  import click
13
13
 
@@ -34,8 +34,17 @@ from ksadk.cli.resource_common import (
34
34
  render_descriptor_list,
35
35
  render_descriptor_status,
36
36
  )
37
- from ksadk.cli.ui import print_info, print_kv, print_success, print_warn
38
- from ksadk.cli.ui import is_json_output, is_stdout_tty, output_option as cli_output_option
37
+ from ksadk.cli.ui import (
38
+ is_json_output,
39
+ is_stdout_tty,
40
+ print_info,
41
+ print_kv,
42
+ print_success,
43
+ print_warn,
44
+ )
45
+ from ksadk.cli.ui import (
46
+ output_option as cli_output_option,
47
+ )
39
48
  from ksadk.deployment.state import load_state
40
49
  from ksadk.deployment.ui_config import resolve_ui_config
41
50
  from ksadk.openclaw_gateway import OpenClawGatewayClient
@@ -75,9 +84,7 @@ DASHBOARD_RESOURCE = ResourceDescriptor(
75
84
  "agentengine dashboard open --agent <AgentName|AgentId>",
76
85
  ),
77
86
  open_action_help="打开 Agent Dashboard",
78
- extra_action_help=(
79
- ("share", "管理 Dashboard 分享链接"),
80
- ),
87
+ extra_action_help=(("share", "管理 Dashboard 分享链接"),),
81
88
  )
82
89
 
83
90
  DASHBOARD_SHARE_RESOURCE = ResourceDescriptor(
@@ -115,6 +122,7 @@ DASHBOARD_SHARE_RESOURCE = ResourceDescriptor(
115
122
  delete_action_help="撤销 Dashboard 分享链接",
116
123
  )
117
124
 
125
+
118
126
  class DashboardGroup(click.Group):
119
127
  """支持 `dashboard open` canonical + `dashboard [agent_ref]` 兼容路径。"""
120
128
 
@@ -169,8 +177,12 @@ def _abort_dashboard_error(
169
177
  context_settings=CONTEXT_SETTINGS,
170
178
  help=build_resource_group_help(DASHBOARD_RESOURCE),
171
179
  )
172
- @click.option("--agent", "--agent-id", "agent_option", "-a", hidden=True, help="(兼容) Agent 名称或 ID")
173
- @click.option("--region", "-r", default=None, envvar="KSYUN_REGION", hidden=True, help="(兼容) 区域")
180
+ @click.option(
181
+ "--agent", "--agent-id", "agent_option", "-a", hidden=True, help="(兼容) Agent 名称或 ID"
182
+ )
183
+ @click.option(
184
+ "--region", "-r", default=None, envvar="KSYUN_REGION", hidden=True, help="(兼容) 区域"
185
+ )
174
186
  @click.option("--path", "ui_path", default=None, hidden=True, help="(兼容) 目标 UI 路径")
175
187
  @click.option("--share", is_flag=True, hidden=True, help="(兼容) 创建可分享链接")
176
188
  @click.option(
@@ -272,7 +284,11 @@ def dashboard_open(
272
284
  )
273
285
 
274
286
 
275
- @dashboard.group("share", context_settings=CONTEXT_SETTINGS, help=build_resource_group_help(DASHBOARD_SHARE_RESOURCE))
287
+ @dashboard.group(
288
+ "share",
289
+ context_settings=CONTEXT_SETTINGS,
290
+ help=build_resource_group_help(DASHBOARD_SHARE_RESOURCE),
291
+ )
276
292
  def dashboard_share():
277
293
  pass
278
294
 
@@ -281,7 +297,13 @@ def dashboard_share():
281
297
  @click.argument("agent_ref", required=False)
282
298
  @click.option("--agent", "--agent-id", "agent_option", "-a", help="Agent 名称或 ID")
283
299
  @click.option("--region", "-r", default=None, envvar="KSYUN_REGION", help="区域")
284
- @click.option("--type", "link_type", type=click.Choice(["private", "share"]), default=None, help="链接类型过滤")
300
+ @click.option(
301
+ "--type",
302
+ "link_type",
303
+ type=click.Choice(["private", "share"]),
304
+ default=None,
305
+ help="链接类型过滤",
306
+ )
285
307
  @click.option("--status", type=click.Choice(["active", "revoked"]), default=None, help="状态过滤")
286
308
  @pagination_options(default_page=1, default_size=20)
287
309
  @cli_output_option()
@@ -309,7 +331,9 @@ def dashboard_share_list(
309
331
 
310
332
  cwd = Path(".").resolve()
311
333
  state = load_state(cwd)
312
- effective_region = _resolve_effective_region(region, state, region_source=_region_parameter_source(ctx, "region"))
334
+ effective_region = _resolve_effective_region(
335
+ region, state, region_source=_region_parameter_source(ctx, "region")
336
+ )
313
337
  primary_ref, fallback_ref = _resolve_references(explicit_ref, cwd)
314
338
  if not primary_ref:
315
339
  _abort_dashboard_error(
@@ -319,16 +343,23 @@ def dashboard_share_list(
319
343
  ),
320
344
  argv=["dashboard", "share", "list"],
321
345
  )
346
+ return
322
347
 
323
348
  try:
324
- detail, _, _ = asyncio.run(_resolve_agent_detail(effective_region, primary_ref, fallback_ref))
349
+ detail, _, _ = asyncio.run(
350
+ _resolve_agent_detail(effective_region, primary_ref, fallback_ref)
351
+ )
325
352
  except Exception as e:
326
- _abort_dashboard_error(e, context="获取 Agent 信息失败", argv=["dashboard", "share", "list"])
353
+ _abort_dashboard_error(
354
+ e, context="获取 Agent 信息失败", argv=["dashboard", "share", "list"]
355
+ )
327
356
  agent_id = (detail.get("agent_id") or "").strip()
328
357
  agent_name = (detail.get("name") or "").strip()
329
358
  if not agent_id and not agent_name:
330
359
  _abort_dashboard_error(
331
- resolution_error("无法解析 Agent 标识", hints=list(DASHBOARD_SHARE_RESOURCE.resolution_commands)),
360
+ resolution_error(
361
+ "无法解析 Agent 标识", hints=list(DASHBOARD_SHARE_RESOURCE.resolution_commands)
362
+ ),
332
363
  argv=["dashboard", "share", "list"],
333
364
  )
334
365
 
@@ -345,7 +376,9 @@ def dashboard_share_list(
345
376
  )
346
377
  )
347
378
  except Exception as e:
348
- _abort_dashboard_error(e, context="查询 Dashboard 链接失败", argv=["dashboard", "share", "list"])
379
+ _abort_dashboard_error(
380
+ e, context="查询 Dashboard 链接失败", argv=["dashboard", "share", "list"]
381
+ )
349
382
  links = result.get("links") or []
350
383
  total = int(result.get("total") or len(links))
351
384
  render_descriptor_list(
@@ -444,7 +477,9 @@ def _open_dashboard(
444
477
  return
445
478
 
446
479
  try:
447
- explicit_ref = merge_agent_inputs(agent_option=agent_option, positional_agent=positional_agent)
480
+ explicit_ref = merge_agent_inputs(
481
+ agent_option=agent_option, positional_agent=positional_agent
482
+ )
448
483
  except ValueError as e:
449
484
  _abort_dashboard_error(usage_error(str(e)), argv=["dashboard", "open"])
450
485
 
@@ -460,12 +495,15 @@ def _open_dashboard(
460
495
  ),
461
496
  argv=["dashboard", "open"],
462
497
  )
498
+ return
463
499
 
464
500
  if primary_ref.source != "cli":
465
501
  print_info(f"未显式指定 Agent,使用 {primary_ref.source_text}: {primary_ref.value}")
466
502
 
467
503
  try:
468
- detail, used_ref, state_stale = asyncio.run(_resolve_agent_detail(effective_region, primary_ref, fallback_ref))
504
+ detail, used_ref, state_stale = asyncio.run(
505
+ _resolve_agent_detail(effective_region, primary_ref, fallback_ref)
506
+ )
469
507
  except Exception as e:
470
508
  _abort_dashboard_error(e, context="获取 Agent 信息失败", argv=["dashboard", "open"])
471
509
  return
@@ -518,25 +556,29 @@ def _open_dashboard(
518
556
  )
519
557
  )
520
558
  except Exception as e:
521
- _abort_dashboard_error(e, context="创建 OpenClaw gateway 链接失败", argv=["dashboard", "open"])
559
+ _abort_dashboard_error(
560
+ e, context="创建 OpenClaw gateway 链接失败", argv=["dashboard", "open"]
561
+ )
522
562
  return
523
563
  _render_dashboard_open_result(detail=detail, link_data=link_data, no_open=no_open)
524
564
  return
525
565
 
526
566
  link_type = "share" if share else "private"
527
- validated_expires = _normalize_expires_seconds(link_type=link_type, expires_seconds=expires_seconds)
567
+ validated_expires = _normalize_expires_seconds(
568
+ link_type=link_type, expires_seconds=expires_seconds
569
+ )
528
570
  try:
529
571
  link_data = asyncio.run(
530
- _create_dashboard_access_link(
531
- region=effective_region,
532
- agent_id=(detail.get("agent_id") or "").strip() or None,
533
- agent_name=(detail.get("name") or "").strip() or None,
534
- link_type=link_type,
535
- path=link_path,
536
- expires_seconds=validated_expires,
537
- force_new=force_new,
538
- )
572
+ _create_dashboard_access_link(
573
+ region=effective_region,
574
+ agent_id=(detail.get("agent_id") or "").strip() or None,
575
+ agent_name=(detail.get("name") or "").strip() or None,
576
+ link_type=link_type,
577
+ path=link_path,
578
+ expires_seconds=validated_expires,
579
+ force_new=force_new,
539
580
  )
581
+ )
540
582
  except Exception as e:
541
583
  _abort_dashboard_error(e, context="创建 Dashboard 链接失败", argv=["dashboard", "open"])
542
584
  return
@@ -546,7 +588,9 @@ def _open_dashboard(
546
588
  remote_error("CreateDashboardAccessLink 返回为空"),
547
589
  argv=["dashboard", "open"],
548
590
  )
549
- _render_dashboard_open_result(detail=detail, link_data=link_data, no_open=no_open, default_link_type=link_type)
591
+ _render_dashboard_open_result(
592
+ detail=detail, link_data=link_data, no_open=no_open, default_link_type=link_type
593
+ )
550
594
 
551
595
 
552
596
  def _render_dashboard_open_result(
@@ -557,7 +601,9 @@ def _render_dashboard_open_result(
557
601
  default_link_type: str = "private",
558
602
  ):
559
603
  open_url = (link_data.get("access_url") or "").strip()
560
- actual_link_type = str(link_data.get("link_type") or default_link_type or "").strip() or default_link_type
604
+ actual_link_type = (
605
+ str(link_data.get("link_type") or default_link_type or "").strip() or default_link_type
606
+ )
561
607
 
562
608
  render_descriptor_status(
563
609
  DASHBOARD_SHARE_RESOURCE,
@@ -566,13 +612,19 @@ def _render_dashboard_open_result(
566
612
  fields=[
567
613
  ("ID", str(link_data.get("link_id") or "-"), "#58a6ff"),
568
614
  ("类型", actual_link_type, None),
569
- ("过期时间", _format_dashboard_time(link_data.get("expires_at"), never_text="server-default"), None),
615
+ (
616
+ "过期时间",
617
+ _format_dashboard_time(link_data.get("expires_at"), never_text="server-default"),
618
+ None,
619
+ ),
570
620
  ],
571
621
  action="open",
572
622
  item={
573
623
  "link_id": str(link_data.get("link_id") or "-"),
574
624
  "type": actual_link_type,
575
- "expires_at": _format_dashboard_time(link_data.get("expires_at"), never_text="server-default"),
625
+ "expires_at": _format_dashboard_time(
626
+ link_data.get("expires_at"), never_text="server-default"
627
+ ),
576
628
  "url": open_url,
577
629
  "agent_id": str(detail.get("agent_id") or ""),
578
630
  "agent_name": str(detail.get("name") or ""),
@@ -596,11 +648,17 @@ def _validate_ui_path_option(ui_path: Optional[str]) -> None:
596
648
  )
597
649
 
598
650
 
599
- def _resolve_effective_region(region: Optional[str], state: Optional[dict], *, region_source: str) -> str:
651
+ def _resolve_effective_region(
652
+ region: Optional[str], state: Optional[dict], *, region_source: str
653
+ ) -> str:
600
654
  explicit_region = str(region or "").strip()
601
655
  if explicit_region and region_source == "commandline":
602
656
  return explicit_region
603
- if explicit_region and region_source == "environment" and not _is_global_config_injected_region():
657
+ if (
658
+ explicit_region
659
+ and region_source == "environment"
660
+ and not _is_global_config_injected_region()
661
+ ):
604
662
  return explicit_region
605
663
  state_region = str((state or {}).get("region") or "").strip()
606
664
  return state_region or explicit_region or DEFAULT_REGION
@@ -643,7 +701,8 @@ def _resolve_openclaw_link_path(
643
701
  return normalized_path
644
702
 
645
703
  state_data = state if isinstance(state, dict) else {}
646
- nested = state_data.get("ui") if isinstance(state_data.get("ui"), dict) else {}
704
+ nested_value = state_data.get("ui")
705
+ nested = nested_value if isinstance(nested_value, dict) else {}
647
706
  state_path = state_data.get("ui_path") or nested.get("path")
648
707
  if state_path is None:
649
708
  return None
@@ -687,7 +746,9 @@ def _resolve_references(
687
746
  if explicit_ref:
688
747
  return ResolvedAgentRef(value=explicit_ref, source="cli"), None
689
748
 
690
- hermes_state_ref = resolve_agent_ref(None, cwd=cwd, include_state=True, include_project_config=False)
749
+ hermes_state_ref = resolve_agent_ref(
750
+ None, cwd=cwd, include_state=True, include_project_config=False
751
+ )
691
752
  openclaw_state_ref = resolve_openclaw_ref(
692
753
  None,
693
754
  cwd=cwd,
@@ -735,6 +796,7 @@ async def _resolve_agent_detail(
735
796
  and _is_not_found_error(err)
736
797
  )
737
798
  if can_fallback:
799
+ assert fallback_ref is not None
738
800
  fallback_detail, fallback_err = await _try_get_agent_detail(client, fallback_ref.value)
739
801
  if fallback_detail:
740
802
  return fallback_detail, fallback_ref, True
@@ -746,11 +808,16 @@ async def _resolve_agent_detail(
746
808
  raise Exception("Agent not found")
747
809
 
748
810
 
749
- async def _try_get_agent_detail(client: AgentEngineClient, agent_ref: str) -> Tuple[Optional[dict], Optional[Exception]]:
811
+ async def _try_get_agent_detail(
812
+ client: AgentEngineClient, agent_ref: str
813
+ ) -> Tuple[Optional[dict], Optional[Exception]]:
750
814
  err: Optional[Exception] = None
751
- for kwargs in ({"agent_id": agent_ref}, {"name": agent_ref}):
815
+ for lookup_by_id in (True, False):
752
816
  try:
753
- agent = await client.get_agent(**kwargs)
817
+ if lookup_by_id:
818
+ agent = await client.get_agent(agent_id=agent_ref)
819
+ else:
820
+ agent = await client.get_agent(name=agent_ref)
754
821
  if agent:
755
822
  return _flatten_agent_detail(agent), None
756
823
  except Exception as e:
@@ -783,7 +850,7 @@ async def _create_dashboard_access_link(
783
850
  kwargs["name"] = agent_name
784
851
  else:
785
852
  raise Exception("missing agent reference")
786
- return await client.create_dashboard_access_link(**kwargs)
853
+ return cast(dict[str, Any], await client.create_dashboard_access_link(**kwargs))
787
854
 
788
855
 
789
856
  def _build_openclaw_gateway_client(region: str, detail: dict) -> OpenClawGatewayClient:
@@ -844,12 +911,14 @@ async def _list_dashboard_access_links(
844
911
  kwargs["name"] = agent_name
845
912
  else:
846
913
  raise Exception("missing agent reference")
847
- return await client.list_dashboard_access_links(**kwargs)
914
+ return cast(dict[str, Any], await client.list_dashboard_access_links(**kwargs))
848
915
 
849
916
 
850
- async def _delete_dashboard_access_link(*, region: str, link_id: str, dry_run: bool = False) -> dict:
917
+ async def _delete_dashboard_access_link(
918
+ *, region: str, link_id: str, dry_run: bool = False
919
+ ) -> dict:
851
920
  async with AgentEngineClient(region=region, dry_run=dry_run) as client:
852
- return await client.delete_dashboard_access_link(link_id=link_id)
921
+ return cast(dict[str, Any], await client.delete_dashboard_access_link(link_id=link_id))
853
922
 
854
923
 
855
924
  def _flatten_agent_detail(agent: dict) -> dict:
@@ -860,8 +929,14 @@ def _flatten_agent_detail(agent: dict) -> dict:
860
929
  return {
861
930
  "agent_id": basic.get("agent_id") or agent.get("agent_id") or "",
862
931
  "name": basic.get("name") or agent.get("name") or "",
863
- "framework": deploy.get("framework") or basic.get("framework") or agent.get("framework") or "",
864
- "endpoint": quick.get("public_endpoint") or quick.get("private_endpoint") or agent.get("endpoint") or "",
932
+ "framework": deploy.get("framework")
933
+ or basic.get("framework")
934
+ or agent.get("framework")
935
+ or "",
936
+ "endpoint": quick.get("public_endpoint")
937
+ or quick.get("private_endpoint")
938
+ or agent.get("endpoint")
939
+ or "",
865
940
  "langfuse_url": adv.get("observability_url") or agent.get("langfuse_trace_url") or "",
866
941
  }
867
942