agentengine-sdk-python 0.7.0__py3-none-any.whl → 0.8.0__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 (371) hide show
  1. {agentengine_sdk_python-0.7.0.dist-info → agentengine_sdk_python-0.8.0.dist-info}/METADATA +36 -20
  2. agentengine_sdk_python-0.8.0.dist-info/RECORD +578 -0
  3. ksadk/a2a/__init__.py +178 -11
  4. ksadk/a2a/bootstrap.py +334 -0
  5. ksadk/a2a/card.py +120 -0
  6. ksadk/a2a/context_store.py +203 -0
  7. ksadk/a2a/control_plane.py +818 -0
  8. ksadk/a2a/credential.py +99 -0
  9. ksadk/a2a/event_adapter.py +149 -0
  10. ksadk/a2a/executor.py +406 -89
  11. ksadk/a2a/external_transport.py +516 -0
  12. ksadk/a2a/identity.py +304 -0
  13. ksadk/a2a/ids.py +22 -0
  14. ksadk/a2a/langgraph.py +285 -0
  15. ksadk/a2a/resume_store.py +201 -0
  16. ksadk/a2a/routes.py +105 -0
  17. ksadk/a2a/server.py +107 -60
  18. ksadk/a2a/space_client.py +1101 -0
  19. ksadk/a2a/task_adapter.py +423 -0
  20. ksadk/a2a/task_event_dispatcher.py +167 -0
  21. ksadk/a2a/task_event_outbox.py +326 -0
  22. ksadk/a2a/task_store.py +206 -0
  23. ksadk/a2ui/__init__.py +27 -0
  24. ksadk/a2ui/core.py +186 -0
  25. ksadk/a2ui/models.py +166 -0
  26. ksadk/a2ui/renderer.py +198 -0
  27. ksadk/agui/__init__.py +9 -0
  28. ksadk/agui/a2ui_projection.py +92 -0
  29. ksadk/agui/agent.py +857 -0
  30. ksadk/agui/config.py +86 -0
  31. ksadk/agui/routes.py +55 -0
  32. ksadk/api/client.py +233 -191
  33. ksadk/builders/__init__.py +2 -0
  34. ksadk/builders/base.py +16 -14
  35. ksadk/builders/code_builder.py +318 -236
  36. ksadk/builders/container_builder.py +187 -167
  37. ksadk/builders/framework_requirements.py +29 -11
  38. ksadk/builders/ks3_uploader.py +58 -27
  39. ksadk/builders/managed_runtime_builder.py +145 -0
  40. ksadk/builders/mcp_builder.py +91 -92
  41. ksadk/builders/requirements_utils.py +1 -5
  42. ksadk/cli/__init__.py +89 -171
  43. ksadk/cli/cmd_a2a.py +254 -70
  44. ksadk/cli/cmd_agent.py +19 -5
  45. ksadk/cli/cmd_build.py +158 -29
  46. ksadk/cli/cmd_completion.py +47 -35
  47. ksadk/cli/cmd_config.py +267 -198
  48. ksadk/cli/cmd_create.py +500 -720
  49. ksadk/cli/cmd_dashboard.py +120 -45
  50. ksadk/cli/cmd_deploy.py +117 -58
  51. ksadk/cli/cmd_destroy.py +44 -14
  52. ksadk/cli/cmd_files.py +63 -24
  53. ksadk/cli/cmd_hermes.py +168 -89
  54. ksadk/cli/cmd_invoke.py +184 -122
  55. ksadk/cli/cmd_launch.py +64 -28
  56. ksadk/cli/cmd_mcp.py +98 -64
  57. ksadk/cli/cmd_model.py +14 -5
  58. ksadk/cli/cmd_openclaw.py +483 -227
  59. ksadk/cli/cmd_replay.py +71 -0
  60. ksadk/cli/cmd_run.py +33 -10
  61. ksadk/cli/cmd_status.py +80 -31
  62. ksadk/cli/cmd_version.py +20 -13
  63. ksadk/cli/cmd_web.py +89 -13
  64. ksadk/cli/deploy_utils.py +20 -20
  65. ksadk/cli/dry_run.py +5 -3
  66. ksadk/cli/error_utils.py +37 -12
  67. ksadk/cli/global_options.py +1 -2
  68. ksadk/cli/local_runtime.py +1 -2
  69. ksadk/cli/model_catalog.py +6 -2
  70. ksadk/cli/network_options.py +34 -14
  71. ksadk/cli/resource_common.py +6 -2
  72. ksadk/cli/storage.py +0 -1
  73. ksadk/cli/ui.py +5 -3
  74. ksadk/cli/workflow_common.py +51 -17
  75. ksadk/codex/__init__.py +12 -0
  76. ksadk/codex/client.py +408 -0
  77. ksadk/codex/phase.py +143 -0
  78. ksadk/codex/runtime.py +449 -0
  79. ksadk/common/aicp_env.py +0 -1
  80. ksadk/common/auth.py +2 -2
  81. ksadk/common/constants.py +1 -3
  82. ksadk/common/llm_utils.py +17 -13
  83. ksadk/compat/__init__.py +5 -0
  84. ksadk/compat/adk_compat.py +200 -0
  85. ksadk/compat/copilotkit_a2ui.py +330 -0
  86. ksadk/configs/__init__.py +12 -12
  87. ksadk/configs/env_registry.py +500 -100
  88. ksadk/configs/global_config.py +2 -1
  89. ksadk/configs/settings.py +151 -124
  90. ksadk/conversations/__init__.py +7 -5
  91. ksadk/conversations/attachment_storage.py +16 -11
  92. ksadk/conversations/attachments.py +44 -36
  93. ksadk/conversations/compaction_pipeline.py +12 -12
  94. ksadk/conversations/compaction_prompt.py +9 -5
  95. ksadk/conversations/context.py +221 -6
  96. ksadk/conversations/message_projection.py +438 -51
  97. ksadk/conversations/model_context.py +12 -6
  98. ksadk/conversations/model_options.py +0 -1
  99. ksadk/conversations/normalize.py +20 -16
  100. ksadk/conversations/reasoning_markup.py +1 -1
  101. ksadk/conversations/runtime.py +339 -5255
  102. ksadk/conversations/runtime_compaction.py +333 -0
  103. ksadk/conversations/runtime_constants.py +27 -0
  104. ksadk/conversations/runtime_governance.py +185 -0
  105. ksadk/conversations/runtime_input.py +652 -0
  106. ksadk/conversations/runtime_invocation.py +395 -0
  107. ksadk/conversations/runtime_metadata.py +475 -0
  108. ksadk/conversations/runtime_observability.py +355 -0
  109. ksadk/conversations/runtime_payloads.py +272 -0
  110. ksadk/conversations/runtime_persistence.py +440 -0
  111. ksadk/conversations/runtime_preparation.py +418 -0
  112. ksadk/conversations/runtime_resume.py +816 -0
  113. ksadk/conversations/runtime_stream_events.py +902 -0
  114. ksadk/conversations/runtime_streaming.py +547 -0
  115. ksadk/conversations/semantic_summary.py +17 -5
  116. ksadk/conversations/session_title.py +6 -3
  117. ksadk/deployment/__init__.py +15 -16
  118. ksadk/deployment/agent_access.py +12 -23
  119. ksadk/deployment/base.py +51 -38
  120. ksadk/deployment/manager.py +63 -65
  121. ksadk/deployment/providers/serverless.py +309 -202
  122. ksadk/deployment/registry.py +38 -32
  123. ksadk/deployment/state.py +11 -11
  124. ksadk/deployment/ui_config.py +1 -1
  125. ksadk/detection/__init__.py +1 -1
  126. ksadk/detection/detector.py +146 -83
  127. ksadk/detection/mcp_detector.py +9 -6
  128. ksadk/events/__init__.py +25 -0
  129. ksadk/events/parser.py +191 -0
  130. ksadk/events/replay.py +37 -0
  131. ksadk/events/runtime_event.py +264 -0
  132. ksadk/events/store.py +317 -0
  133. ksadk/harness/__init__.py +34 -0
  134. ksadk/harness/app.py +278 -0
  135. ksadk/harness/config.py +181 -0
  136. ksadk/harness/reasoner.py +105 -0
  137. ksadk/harness/runner.py +211 -0
  138. ksadk/harness/sandbox.py +141 -0
  139. ksadk/harness/tools.py +222 -0
  140. ksadk/hermes_terminal.py +23 -12
  141. ksadk/identity/resolver.py +15 -9
  142. ksadk/ids.py +32 -0
  143. ksadk/knowledge_base/adk_tool.py +1 -1
  144. ksadk/knowledge_base/client.py +23 -29
  145. ksadk/managed_runtime.py +188 -0
  146. ksadk/markdown.py +5 -2
  147. ksadk/mcp_runtime/__init__.py +9 -6
  148. ksadk/memory/__init__.py +1 -1
  149. ksadk/memory/adk/__init__.py +2 -0
  150. ksadk/memory/adk/backends/base_ltm_backend.py +2 -6
  151. ksadk/memory/adk/backends/http_ltm_backend.py +13 -21
  152. ksadk/memory/adk/backends/inmemory_ltm_backend.py +7 -13
  153. ksadk/memory/adk/backends/sdk_ltm_backend.py +26 -33
  154. ksadk/memory/adk/long_term_memory.py +31 -35
  155. ksadk/memory/adk/resilient_session_service.py +4 -5
  156. ksadk/memory/adk/short_term_memory.py +12 -21
  157. ksadk/memory/adk_tool.py +3 -2
  158. ksadk/memory/backends/base.py +19 -19
  159. ksadk/memory/backends/memory.py +24 -25
  160. ksadk/memory/backends/redis.py +31 -30
  161. ksadk/memory/langchain_tool.py +2 -1
  162. ksadk/memory/manager.py +52 -47
  163. ksadk/memory/service.py +10 -8
  164. ksadk/model_policy.py +15 -7
  165. ksadk/model_proxy/__init__.py +51 -0
  166. ksadk/model_proxy/bootstrap.py +80 -0
  167. ksadk/model_proxy/cache.py +165 -0
  168. ksadk/model_proxy/config.py +45 -0
  169. ksadk/model_proxy/demo_webui.py +115 -0
  170. ksadk/model_proxy/detect.py +145 -0
  171. ksadk/model_proxy/gate.py +68 -0
  172. ksadk/model_proxy/namespace.py +173 -0
  173. ksadk/model_proxy/protocol_proxy.py +22 -0
  174. ksadk/model_proxy/server.py +300 -0
  175. ksadk/model_proxy/transform.py +691 -0
  176. ksadk/openclaw_gateway.py +29 -14
  177. ksadk/runners/adk_runner.py +345 -120
  178. ksadk/runners/base_runner.py +46 -29
  179. ksadk/runners/codex_runner.py +132 -0
  180. ksadk/runners/deepagents_runner.py +0 -1
  181. ksadk/runners/factory.py +17 -5
  182. ksadk/runners/langchain_runner.py +29 -742
  183. ksadk/runners/langgraph_runner.py +352 -90
  184. ksadk/runners/patch_langchain.py +16 -16
  185. ksadk/runners/remote_runner.py +134 -33
  186. ksadk/runners/usage_accumulator.py +1 -0
  187. ksadk/runners/utils/langfuse.py +3 -3
  188. ksadk/runners/utils/loader.py +7 -7
  189. ksadk/runtime/__init__.py +41 -0
  190. ksadk/runtime/adapter.py +345 -0
  191. ksadk/runtime/framework_adapters.py +124 -0
  192. ksadk/runtime/preprocessing.py +118 -0
  193. ksadk/runtime/runner_adapter.py +873 -0
  194. ksadk/runtime_context.py +18 -3
  195. ksadk/runtime_state.py +0 -1
  196. ksadk/sandbox/__init__.py +4 -1
  197. ksadk/sandbox/backends/__init__.py +4 -1
  198. ksadk/sandbox/backends/e2b.py +13 -5
  199. ksadk/sandbox/backends/local_process.py +11 -3
  200. ksadk/sandbox/base.py +10 -15
  201. ksadk/sandbox/factory.py +14 -4
  202. ksadk/sandbox/registry.py +57 -6
  203. ksadk/server/api_models.py +15 -5
  204. ksadk/server/app.py +455 -3885
  205. ksadk/server/composition.py +21 -0
  206. ksadk/server/factory.py +624 -0
  207. ksadk/server/routes/__init__.py +1 -0
  208. ksadk/server/routes/checkpoint_resolution.py +116 -0
  209. ksadk/server/routes/common.py +713 -0
  210. ksadk/server/routes/control.py +327 -0
  211. ksadk/server/routes/dependencies.py +98 -0
  212. ksadk/server/routes/misc.py +448 -0
  213. ksadk/server/routes/models.py +443 -0
  214. ksadk/server/routes/openai_compat.py +207 -0
  215. ksadk/server/routes/projection.py +795 -0
  216. ksadk/server/routes/routers.py +52 -0
  217. ksadk/server/routes/run.py +726 -0
  218. ksadk/server/routes/sessions.py +649 -0
  219. ksadk/server/routes/streaming.py +223 -0
  220. ksadk/server/routes/workspace.py +381 -0
  221. ksadk/server/static/assets/{ArtifactsPanel-D-SSn2ee.js → ArtifactsPanel-Cjnqt-8W.js} +1 -1
  222. ksadk/server/static/assets/CodeBlock-BqyqZfuB.js +9 -0
  223. ksadk/server/static/assets/MathMessageMarkdown-BpH7jiFM.js +8 -0
  224. ksadk/server/static/assets/MermaidBlock-DWuxETaJ.js +303 -0
  225. ksadk/server/static/assets/NativeTerminalPanel-MDTopWMO.js +1 -0
  226. ksadk/server/static/assets/{arc-BA13sHc9.js → arc-CFKwSk_B.js} +1 -1
  227. ksadk/server/static/assets/architecture-7EHR7CIX-CynqOWjZ.js +1 -0
  228. ksadk/server/static/assets/{architectureDiagram-3BPJPVTR-DzJzgVoL.js → architectureDiagram-3BPJPVTR-Dej8jX8c.js} +1 -1
  229. ksadk/server/static/assets/{blockDiagram-GPEHLZMM-UTdVcZhn.js → blockDiagram-GPEHLZMM-1F64jqvy.js} +1 -1
  230. ksadk/server/static/assets/{c4Diagram-AAUBKEIU-Dix0GD4m.js → c4Diagram-AAUBKEIU-9q7AUAKb.js} +1 -1
  231. ksadk/server/static/assets/channel-iUGv2N24.js +1 -0
  232. ksadk/server/static/assets/{chunk-2J33WTMH-C2JxuZ42.js → chunk-2J33WTMH-6qgwJm7Q.js} +1 -1
  233. ksadk/server/static/assets/{chunk-4BX2VUAB-Be57QPgD.js → chunk-4BX2VUAB-CsWIQRhc.js} +1 -1
  234. ksadk/server/static/assets/{chunk-55IACEB6-WjSuy4nv.js → chunk-55IACEB6-BK8paA20.js} +1 -1
  235. ksadk/server/static/assets/{chunk-727SXJPM-BOovP-b5.js → chunk-727SXJPM-B-JEhy7h.js} +1 -1
  236. ksadk/server/static/assets/{chunk-AQP2D5EJ-DOmZNmWj.js → chunk-AQP2D5EJ-DYBvMHAa.js} +1 -1
  237. ksadk/server/static/assets/{chunk-FMBD7UC4-DzwlodkU.js → chunk-FMBD7UC4-BGhvzDYt.js} +1 -1
  238. ksadk/server/static/assets/{chunk-ND2GUHAM-DMqAikEU.js → chunk-ND2GUHAM-D98vPd-E.js} +1 -1
  239. ksadk/server/static/assets/chunk-QZHKN3VN-YQIEXeF6.js +1 -0
  240. ksadk/server/static/assets/classDiagram-4FO5ZUOK-CDAUuoXK.js +1 -0
  241. ksadk/server/static/assets/classDiagram-v2-Q7XG4LA2-CDAUuoXK.js +1 -0
  242. ksadk/server/static/assets/{cose-bilkent-S5V4N54A-Zhy2GBnP.js → cose-bilkent-S5V4N54A-CX3yotHq.js} +1 -1
  243. ksadk/server/static/assets/{dagre-BM42HDAG-CbKrtIUz.js → dagre-BM42HDAG-C7TguAWo.js} +1 -1
  244. ksadk/server/static/assets/{diagram-2AECGRRQ-BRApgQRK.js → diagram-2AECGRRQ-Dd17_kws.js} +1 -1
  245. ksadk/server/static/assets/{diagram-5GNKFQAL-D0xbnDiK.js → diagram-5GNKFQAL-DVIClIil.js} +1 -1
  246. ksadk/server/static/assets/{diagram-KO2AKTUF-CVugVI9L.js → diagram-KO2AKTUF-Df_3gYQa.js} +1 -1
  247. ksadk/server/static/assets/{diagram-LMA3HP47-DozUGgee.js → diagram-LMA3HP47-BhLk6ZtA.js} +1 -1
  248. ksadk/server/static/assets/{diagram-OG6HWLK6-ZOYsKlru.js → diagram-OG6HWLK6-D4GNGvuu.js} +1 -1
  249. ksadk/server/static/assets/{dist-DmFaq_Iy.js → dist-6CVKuTAe.js} +1 -1
  250. ksadk/server/static/assets/{dist-8EEyGgDx.js → dist-BUHRxvDG.js} +1 -1
  251. ksadk/server/static/assets/{dist-B0NP_Z0z.js → dist-BZ9n9AjO.js} +1 -1
  252. ksadk/server/static/assets/{dist-DMezvBGJ.js → dist-BibcG1V9.js} +1 -1
  253. ksadk/server/static/assets/{dist-C3HIIaN5.js → dist-Bs-jQcRX.js} +1 -1
  254. ksadk/server/static/assets/{dist-BrCcQ47T.js → dist-C2xjE7cO.js} +1 -1
  255. ksadk/server/static/assets/{dist-Dp0k7bWI.js → dist-C7-3jInC.js} +1 -1
  256. ksadk/server/static/assets/{dist-D-xOD048.js → dist-C99THtIA.js} +1 -1
  257. ksadk/server/static/assets/{dist-CkEKJFtk.js → dist-CGcp2ex8.js} +1 -1
  258. ksadk/server/static/assets/{dist-DyOkZmze.js → dist-CVQRZjPu.js} +1 -1
  259. ksadk/server/static/assets/{dist-BssVmjIo.js → dist-Cf23NY4L.js} +1 -1
  260. ksadk/server/static/assets/{dist-BIJVDMuB.js → dist-CgF3fj15.js} +1 -1
  261. ksadk/server/static/assets/{dist-2hInLS_J.js → dist-Cwt7koer.js} +1 -1
  262. ksadk/server/static/assets/{dist-DyWsb78Q.js → dist-D82mtD2s.js} +1 -1
  263. ksadk/server/static/assets/{dist-D-JMdWPQ.js → dist-DF06ORQo.js} +1 -1
  264. ksadk/server/static/assets/{dist-BmlMPsCc.js → dist-DHn6nBzr.js} +1 -1
  265. ksadk/server/static/assets/{dist-gX6GOLKq.js → dist-Djgl2wVZ.js} +1 -1
  266. ksadk/server/static/assets/{dist-DpKtt4Bo.js → dist-DlzCRy0S.js} +1 -1
  267. ksadk/server/static/assets/{dist-8_SfK1IP.js → dist-DqNnNFrw.js} +1 -1
  268. ksadk/server/static/assets/{dist-D57wnGWd.js → dist-DyvYLMW9.js} +1 -1
  269. ksadk/server/static/assets/{dist-CPBtqRTW.js → dist-eoW6tZXA.js} +1 -1
  270. ksadk/server/static/assets/{dist-DL_NKc_z.js → dist-ivOya1LD.js} +1 -1
  271. ksadk/server/static/assets/{erDiagram-TEJ5UH35-Bk-9bgE5.js → erDiagram-TEJ5UH35-CnfRcY2M.js} +1 -1
  272. ksadk/server/static/assets/eventmodeling-FCH6USID-ChYO-ijM.js +1 -0
  273. ksadk/server/static/assets/{flowDiagram-I6XJVG4X-Dn9kZVuZ.js → flowDiagram-I6XJVG4X-DGaJjGNJ.js} +1 -1
  274. ksadk/server/static/assets/{ganttDiagram-6RSMTGT7-BGxXlJqm.js → ganttDiagram-6RSMTGT7-DpCoB2g9.js} +1 -1
  275. ksadk/server/static/assets/gitGraph-WXDBUCRP-BN_0Fk-j.js +1 -0
  276. ksadk/server/static/assets/{gitGraphDiagram-PVQCEYII-C7Q0X-wi.js → gitGraphDiagram-PVQCEYII-9IKVFBVT.js} +1 -1
  277. ksadk/server/static/assets/index-QSwCHuB8.js +177 -0
  278. ksadk/server/static/assets/index-jOPmTOZH.css +2 -0
  279. ksadk/server/static/assets/info-J43DQDTF-Cp6o3vId.js +1 -0
  280. ksadk/server/static/assets/{infoDiagram-5YYISTIA-BO_CSqq5.js → infoDiagram-5YYISTIA-CYIIsb8y.js} +1 -1
  281. ksadk/server/static/assets/{ishikawaDiagram-YF4QCWOH-eYLPLd46.js → ishikawaDiagram-YF4QCWOH-DLOHGvWw.js} +1 -1
  282. ksadk/server/static/assets/{journeyDiagram-JHISSGLW-De9geSb0.js → journeyDiagram-JHISSGLW-BIzKeejT.js} +1 -1
  283. ksadk/server/static/assets/{kanban-definition-UN3LZRKU-Cs80kQto.js → kanban-definition-UN3LZRKU-BWHoFSw2.js} +1 -1
  284. ksadk/server/static/assets/{katex-DSrCFD8n.js → katex-DATssjp1.js} +1 -1
  285. ksadk/server/static/assets/{linear-CN9sbKTF.js → linear-CvMBw9cA.js} +1 -1
  286. ksadk/server/static/assets/{mermaid-parser.core-DlgSBU8l.js → mermaid-parser.core-mGAcEwcq.js} +2 -2
  287. ksadk/server/static/assets/{mindmap-definition-RKZ34NQL-9afz7Oug.js → mindmap-definition-RKZ34NQL-CSAQxEAe.js} +1 -1
  288. ksadk/server/static/assets/packet-YPE3B663-wQzct3cT.js +1 -0
  289. ksadk/server/static/assets/pie-LRSECV5Y-BgTQiv-9.js +1 -0
  290. ksadk/server/static/assets/{pieDiagram-4H26LBE5-DPv_VstN.js → pieDiagram-4H26LBE5-By-ra07M.js} +1 -1
  291. ksadk/server/static/assets/{quadrantDiagram-W4KKPZXB-o77wZ1XK.js → quadrantDiagram-W4KKPZXB-CxIR4JXI.js} +1 -1
  292. ksadk/server/static/assets/radar-GUYGQ44K-BIq5fXsn.js +1 -0
  293. ksadk/server/static/assets/{requirementDiagram-4Y6WPE33-BYVw81VC.js → requirementDiagram-4Y6WPE33-DpW90iu3.js} +1 -1
  294. ksadk/server/static/assets/{sankeyDiagram-5OEKKPKP-B7nZFMKT.js → sankeyDiagram-5OEKKPKP-DpGa6EAV.js} +1 -1
  295. ksadk/server/static/assets/{sequenceDiagram-3UESZ5HK-BGRRrFw5.js → sequenceDiagram-3UESZ5HK-NTKNGGe5.js} +1 -1
  296. ksadk/server/static/assets/{stateDiagram-AJRCARHV-BUfHCoPs.js → stateDiagram-AJRCARHV-DGpd9yFG.js} +1 -1
  297. ksadk/server/static/assets/stateDiagram-v2-BHNVJYJU-B3o579IQ.js +1 -0
  298. ksadk/server/static/assets/{timeline-definition-PNZ67QCA-FbCTGrf9.js → timeline-definition-PNZ67QCA-jqoYs3jQ.js} +1 -1
  299. ksadk/server/static/assets/treeView-BLDUP644-Dqi-E0EM.js +1 -0
  300. ksadk/server/static/assets/treemap-LRROVOQU-ClQP9CJ9.js +1 -0
  301. ksadk/server/static/assets/{vennDiagram-CIIHVFJN-DWgwtPsJ.js → vennDiagram-CIIHVFJN-l3Z7-wbP.js} +1 -1
  302. ksadk/server/static/assets/wardley-L42UT6IY-8XLvnNIs.js +1 -0
  303. ksadk/server/static/assets/{wardleyDiagram-YWT4CUSO-2x8G-tTM.js → wardleyDiagram-YWT4CUSO-BR54GPmr.js} +1 -1
  304. ksadk/server/static/assets/{xychartDiagram-2RQKCTM6-Drma3AYl.js → xychartDiagram-2RQKCTM6-SkiH8GsK.js} +1 -1
  305. ksadk/server/static/index.html +2 -2
  306. ksadk/server/terminal_sessions.py +111 -58
  307. ksadk/sessions/__init__.py +69 -19
  308. ksadk/sessions/base.py +31 -11
  309. ksadk/sessions/continuity.py +2 -3
  310. ksadk/sessions/in_memory.py +46 -2
  311. ksadk/sessions/local_service.py +148 -17
  312. ksadk/sessions/postgres_service.py +143 -25
  313. ksadk/sessions/resilient.py +36 -8
  314. ksadk/skills/models.py +17 -5
  315. ksadk/skills/package_store.py +5 -2
  316. ksadk/skills/runtime/agent.py +20 -5
  317. ksadk/skills/runtime/artifacts.py +1 -5
  318. ksadk/skills/runtime/backends/e2b.py +10 -4
  319. ksadk/skills/runtime/backends/local.py +15 -3
  320. ksadk/skills/runtime/base.py +1 -2
  321. ksadk/skills/runtime/executor.py +10 -3
  322. ksadk/skills/runtime/factory.py +4 -2
  323. ksadk/skills/runtime/loader.py +1 -2
  324. ksadk/skills/runtime/registry.py +15 -10
  325. ksadk/skills/runtime/request.py +3 -1
  326. ksadk/skills/service_client.py +38 -17
  327. ksadk/skills/tool_defs.py +15 -10
  328. ksadk/terminal_exec_policy.py +3 -4
  329. ksadk/tools/gateway.py +92 -15
  330. ksadk/tools/result_budget.py +12 -4
  331. ksadk/toolsets/__init__.py +134 -36
  332. ksadk/toolsets/platform.py +21 -5
  333. ksadk/toolsets/sandbox.py +82 -16
  334. ksadk/toolsets/skills.py +200 -39
  335. ksadk/toolsets/web.py +123 -26
  336. ksadk/toolsets/workspace.py +212 -101
  337. ksadk/tracing/exporters/inmemory_exporter.py +62 -51
  338. ksadk/tracing/exporters/langfuse_exporter.py +91 -76
  339. ksadk/tracing/setup.py +69 -53
  340. ksadk/tracing/span_utils.py +5 -2
  341. ksadk/tui/loop.py +78 -30
  342. ksadk/tui/stream_render.py +1 -0
  343. ksadk/ui_config.py +5 -3
  344. ksadk/version.py +1 -1
  345. ksadk_runtime_common/schemas/runtime_event_v1.json +95 -0
  346. agentengine_sdk_python-0.7.0.dist-info/RECORD +0 -482
  347. ksadk/server/static/assets/CodeBlock-P16VOLYi.js +0 -9
  348. ksadk/server/static/assets/MathMessageMarkdown-CdGiQWHR.js +0 -8
  349. ksadk/server/static/assets/MermaidBlock-IOcal8cm.js +0 -303
  350. ksadk/server/static/assets/NativeTerminalPanel-DGSDWsei.js +0 -1
  351. ksadk/server/static/assets/architecture-7EHR7CIX-BvUlsA6l.js +0 -1
  352. ksadk/server/static/assets/channel-CTuydARX.js +0 -1
  353. ksadk/server/static/assets/chunk-QZHKN3VN-BnCydivS.js +0 -1
  354. ksadk/server/static/assets/classDiagram-4FO5ZUOK-BNHg45Be.js +0 -1
  355. ksadk/server/static/assets/classDiagram-v2-Q7XG4LA2-BNHg45Be.js +0 -1
  356. ksadk/server/static/assets/eventmodeling-FCH6USID-DsAgWnlf.js +0 -1
  357. ksadk/server/static/assets/gitGraph-WXDBUCRP-BIao9Yjg.js +0 -1
  358. ksadk/server/static/assets/index-C00Lwg3L.js +0 -165
  359. ksadk/server/static/assets/index-DAURbCsP.css +0 -1
  360. ksadk/server/static/assets/info-J43DQDTF-CyipqGxU.js +0 -1
  361. ksadk/server/static/assets/packet-YPE3B663-CGkyRxlg.js +0 -1
  362. ksadk/server/static/assets/pie-LRSECV5Y-M0uWAf4n.js +0 -1
  363. ksadk/server/static/assets/radar-GUYGQ44K-Bdbm24-x.js +0 -1
  364. ksadk/server/static/assets/stateDiagram-v2-BHNVJYJU-8xBN_gLM.js +0 -1
  365. ksadk/server/static/assets/treeView-BLDUP644-npMo0ak1.js +0 -1
  366. ksadk/server/static/assets/treemap-LRROVOQU-CHdzrrdo.js +0 -1
  367. ksadk/server/static/assets/wardley-L42UT6IY-BEQz7wyy.js +0 -1
  368. {agentengine_sdk_python-0.7.0.dist-info → agentengine_sdk_python-0.8.0.dist-info}/WHEEL +0 -0
  369. {agentengine_sdk_python-0.7.0.dist-info → agentengine_sdk_python-0.8.0.dist-info}/entry_points.txt +0 -0
  370. {agentengine_sdk_python-0.7.0.dist-info → agentengine_sdk_python-0.8.0.dist-info}/licenses/LICENSE +0 -0
  371. {agentengine_sdk_python-0.7.0.dist-info → agentengine_sdk_python-0.8.0.dist-info}/top_level.txt +0 -0
ksadk/cli/cmd_deploy.py CHANGED
@@ -7,27 +7,46 @@ agentengine deploy - 部署 Agent 到云端
7
7
  - k8s: Kubernetes 集群
8
8
  """
9
9
 
10
- import os
11
- import click
12
- import asyncio
13
10
  from pathlib import Path
11
+ from typing import TYPE_CHECKING
12
+
13
+ import click
14
+
14
15
  from ksadk.api.client import DryRunExit
16
+ from ksadk.cli.dry_run import effective_dry_run, run_async_with_dry_run
15
17
  from ksadk.cli.env_options import env_options, resolve_explicit_env_vars
16
- from ksadk.cli.storage import build_storage_config
17
- from ksadk.common.constants import (
18
- get_ks3_endpoints,
19
- DEFAULT_SERVERLESS_ENDPOINT,
18
+ from ksadk.cli.error_utils import (
19
+ cli_error_from_exception,
20
+ is_debug_mode_enabled,
21
+ remote_error,
22
+ usage_error,
23
+ validation_error,
20
24
  )
21
- from ksadk.cli.dry_run import effective_dry_run, run_async_with_dry_run
22
- from ksadk.cli.error_utils import cli_error_from_exception, is_debug_mode_enabled, remote_error, usage_error, validation_error
23
25
  from ksadk.cli.network_options import (
24
26
  apply_network_cli_overrides,
25
- apply_network_config as _apply_network_config_shared,
26
27
  network_cli_kwargs,
27
28
  network_options,
28
29
  resolve_deploy_target_network,
29
30
  validate_deploy_target_network,
30
31
  )
32
+ from ksadk.cli.network_options import (
33
+ apply_network_config as _apply_network_config_shared,
34
+ )
35
+ from ksadk.cli.storage import build_storage_config
36
+ from ksadk.cli.ui import (
37
+ capture_standard_output,
38
+ get_console,
39
+ is_json_output,
40
+ new_table,
41
+ print_info,
42
+ print_kv,
43
+ print_rule,
44
+ print_success,
45
+ print_warn,
46
+ )
47
+ from ksadk.cli.ui import (
48
+ output_option as cli_output_option,
49
+ )
31
50
  from ksadk.cli.workflow_common import (
32
51
  build_workflow_local_plan,
33
52
  clear_build_metadata,
@@ -39,22 +58,14 @@ from ksadk.cli.workflow_common import (
39
58
  render_workflow_dry_run,
40
59
  render_workflow_result,
41
60
  resolve_artifact_build_plan,
61
+ )
62
+ from ksadk.cli.workflow_common import (
42
63
  should_build_artifact as _workflow_should_build_artifact,
43
64
  )
44
65
  from ksadk.deployment.ui_config import SUPPORTED_UI_PROFILES, extract_ui_state
45
- from ksadk.cli.ui import (
46
- capture_standard_output,
47
- get_console,
48
- is_json_output,
49
- new_table,
50
- output_option as cli_output_option,
51
- print_error,
52
- print_info,
53
- print_kv,
54
- print_rule,
55
- print_success,
56
- print_warn,
57
- )
66
+
67
+ if TYPE_CHECKING:
68
+ from ksadk.deployment import DeployTarget
58
69
 
59
70
  console = get_console()
60
71
 
@@ -69,19 +80,29 @@ console = get_console()
69
80
  help="部署目标 (default: serverless)",
70
81
  )
71
82
  @click.option("--name", "-n", help="部署名称")
72
- @click.option("--region", "-r", default="cn-beijing-6", envvar="KSYUN_REGION", help="区域 (default: cn-beijing-6)")
73
- @click.option("--account-id", envvar="KSYUN_ACCOUNT_ID", help="金山云账号 ID(可选;未设置时从 AK/SK 反查)")
83
+ @click.option(
84
+ "--region",
85
+ "-r",
86
+ default="cn-beijing-6",
87
+ envvar="KSYUN_REGION",
88
+ help="区域 (default: cn-beijing-6)",
89
+ )
90
+ @click.option(
91
+ "--account-id", envvar="KSYUN_ACCOUNT_ID", help="金山云账号 ID(可选;未设置时从 AK/SK 反查)"
92
+ )
74
93
  @click.option(
75
94
  "--artifact-type",
76
- type=click.Choice(["Code", "Container"]),
77
- default="Code",
78
- help="Serverless 部署模式 (default: Code)",
95
+ type=click.Choice(["ManagedRuntime", "Code", "Container"]),
96
+ default=None,
97
+ help="Serverless 部署模式;默认从 agentengine.yaml 推断",
79
98
  )
80
99
  @click.option("--namespace", default="default", help="K8s 命名空间")
81
100
  @click.option("--port", "-p", default=8000, help="服务端口 (default: 8000)")
82
101
  @click.option("--registry", help="镜像仓库地址 (k8s/serverless Container 模式)")
83
102
  @click.option("--ks3-path", help="KS3 代码包路径 (Serverless Code 模式)")
84
- @click.option("--ks3-bucket", help="KS3 bucket 名称 (Serverless Code 模式, 默认: agentengine-{region})")
103
+ @click.option(
104
+ "--ks3-bucket", help="KS3 bucket 名称 (Serverless Code 模式, 默认: agentengine-{region})"
105
+ )
85
106
  @click.option("--image", help="Docker 镜像地址 (Container 模式)")
86
107
  @click.option("--ui-profile", type=click.Choice(SUPPORTED_UI_PROFILES), help="Dashboard UI 类型")
87
108
  @click.option("--ui-path", help="Dashboard UI 路径 (例如 /)")
@@ -90,7 +111,10 @@ console = get_console()
90
111
  @click.option(
91
112
  "--storage-mount-path",
92
113
  default=None,
93
- help="PVC 挂载目录(hermes/openclaw 默认按框架推导;adk/langgraph 等其他框架默认不挂盘,需显式指定)",
114
+ help=(
115
+ "PVC 挂载目录(hermes/openclaw 默认按框架推导;"
116
+ "adk/langgraph 等其他框架默认不挂盘,需显式指定)"
117
+ ),
94
118
  )
95
119
  @click.option("--no-storage", is_flag=True, help="禁用默认 PVC 挂载")
96
120
  @network_options
@@ -100,7 +124,9 @@ console = get_console()
100
124
  )
101
125
  @click.option("--push", is_flag=True, help="构建后推送镜像")
102
126
  @click.option("--no-cache", is_flag=True, help="强制重新构建,不使用缓存")
103
- @click.option("--repackage", is_flag=True, help="Code 模式复用依赖缓存,但强制重新打包当前代码/runtime")
127
+ @click.option(
128
+ "--repackage", is_flag=True, help="Code 模式复用依赖缓存,但强制重新打包当前代码/runtime"
129
+ )
104
130
  @click.option("--no-version", is_flag=True, help="部署成功后不自动创建版本快照")
105
131
  @click.option("--auto-rollback", is_flag=True, help="部署失败时自动回滚到上一版本")
106
132
  @click.option("--dry-run", is_flag=True, help="只生成配置,打印 curl 请求,不执行部署")
@@ -167,6 +193,15 @@ def deploy(
167
193
  # 执行部署
168
194
  _ = output_mode
169
195
  dry_run_context: dict[str, object] = {}
196
+
197
+ def render_deploy_dry_run(exc: DryRunExit) -> None:
198
+ plan_value = dry_run_context.get("plan")
199
+ render_workflow_dry_run(
200
+ action="deploy",
201
+ request=dict(exc.payload) if isinstance(exc.payload, dict) else {},
202
+ plan=dict(plan_value) if isinstance(plan_value, dict) else None,
203
+ )
204
+
170
205
  result = run_async_with_dry_run(
171
206
  _deploy_async(
172
207
  agent_dir,
@@ -207,22 +242,13 @@ def deploy(
207
242
  dry_run_context=dry_run_context,
208
243
  ),
209
244
  dry_run=dry_run,
210
- on_dry_run=(
211
- lambda exc: render_workflow_dry_run(
212
- action="deploy",
213
- request=dict(exc.payload or {}),
214
- plan=dict(dry_run_context.get("plan") or {}) or None,
215
- )
216
- ),
245
+ on_dry_run=render_deploy_dry_run,
217
246
  )
218
247
  if result is not None and is_json_output():
219
248
  render_workflow_result(action="deploy", result=result)
220
249
 
221
250
 
222
-
223
-
224
251
  def _list_providers():
225
-
226
252
  """列出所有可用的部署 Provider"""
227
253
  from ksadk.deployment import DeploymentManager
228
254
 
@@ -291,8 +317,8 @@ async def _deploy_async(
291
317
  repackage: bool = False,
292
318
  ):
293
319
  """异步部署流程"""
320
+ from ksadk.deployment import DeploymentManager, DeployTarget
294
321
  from ksadk.detection import FrameworkDetector
295
- from ksadk.deployment import DeploymentManager, DeployTarget, DeployStatus
296
322
 
297
323
  agent_path = Path(agent_dir).resolve()
298
324
  config = _load_config(agent_path)
@@ -337,7 +363,8 @@ async def _deploy_async(
337
363
  )
338
364
  if detection_result.type.value == "openclaw":
339
365
  raise usage_error(
340
- "OpenClaw 项目请使用 `agentengine openclaw deploy`,不要使用通用 `agentengine deploy`。",
366
+ "OpenClaw 项目请使用 `agentengine openclaw deploy`,"
367
+ "不要使用通用 `agentengine deploy`。",
341
368
  hints=[
342
369
  "OpenClaw 部署会走专用网关与容器配置流程。",
343
370
  "可先执行 `agentengine openclaw --help` 查看专用命令。",
@@ -345,6 +372,22 @@ async def _deploy_async(
345
372
  argv=["deploy"],
346
373
  )
347
374
 
375
+ resolved_runtime = None
376
+ if effective_artifact_type == "ManagedRuntime":
377
+ if detection_result.type.value != "codex":
378
+ raise validation_error("ManagedRuntime v1 目前仅支持 framework: codex")
379
+ if ks3_path:
380
+ raise validation_error(
381
+ "ManagedRuntime 是服务端内联 manifest,不能使用 --ks3-path;请移除该参数后重试。"
382
+ )
383
+ from ksadk.managed_runtime import resolve_managed_runtime
384
+
385
+ resolved_runtime = await resolve_managed_runtime(config, region=region)
386
+ print_kv(
387
+ "Runtime",
388
+ f"{resolved_runtime.name}@{resolved_runtime.version} ({resolved_runtime.source})",
389
+ )
390
+
348
391
  # 2. 确定部署名称
349
392
  deploy_name = name or config.get("name") or agent_path.name.replace("-", "_").replace(".", "_")
350
393
  print_kv("部署名称", deploy_name)
@@ -359,7 +402,9 @@ async def _deploy_async(
359
402
  try:
360
403
  provider = DeploymentManager.get_provider(target)
361
404
  except ValueError as e:
362
- raise usage_error(str(e), hints=["使用 `agentengine deploy --list-providers` 查看可用目标。"])
405
+ raise usage_error(
406
+ str(e), hints=["使用 `agentengine deploy --list-providers` 查看可用目标。"]
407
+ )
363
408
 
364
409
  # 5. 构建部署目标配置
365
410
  deploy_target = DeployTarget(
@@ -384,6 +429,8 @@ async def _deploy_async(
384
429
  "no_cache": no_cache,
385
430
  "repackage": repackage,
386
431
  "env_vars": explicit_env_vars,
432
+ "runtime_name": resolved_runtime.name if resolved_runtime else "",
433
+ "runtime_version": resolved_runtime.version if resolved_runtime else "",
387
434
  },
388
435
  )
389
436
 
@@ -439,8 +486,10 @@ async def _deploy_async(
439
486
  normalized_artifact_type = (effective_artifact_type or "Code").strip().lower()
440
487
  explicit_artifact_reference = ks3_path if normalized_artifact_type == "code" else image
441
488
  cached_artifact_reference = None
442
- if not artifact_plan.should_clear_metadata:
443
- cached_artifact_reference = load_cached_artifact_reference(agent_path, effective_artifact_type)
489
+ if not artifact_plan.should_clear_metadata and normalized_artifact_type != "managedruntime":
490
+ cached_artifact_reference = load_cached_artifact_reference(
491
+ agent_path, effective_artifact_type
492
+ )
444
493
  resolved_artifact_plan = resolve_artifact_build_plan(
445
494
  plan=artifact_plan,
446
495
  target=target,
@@ -473,7 +522,7 @@ async def _deploy_async(
473
522
  if normalized_artifact_type == "container":
474
523
  package_info.image = resolved_artifact_plan.reference
475
524
  package_info.metadata["image"] = resolved_artifact_plan.reference
476
- else:
525
+ elif normalized_artifact_type == "code":
477
526
  package_info.metadata["ks3_path"] = resolved_artifact_plan.reference
478
527
 
479
528
  print_kv("构建目录", str(package_info.build_dir))
@@ -555,11 +604,12 @@ async def _deploy_async(
555
604
  print_warn("⚠️ API Key 仅在首次部署时明文显示,请妥善保存!")
556
605
  if result.message:
557
606
  print_kv("信息", result.message)
558
-
607
+
559
608
  # 9. 自动创建版本快照 (仅热更新时,首次部署平台自动创建 v1)
560
609
  is_update = result.message and "已更新" in result.message
561
610
  if result.agent_id and is_update and not no_version and not dry_run:
562
611
  from ksadk.cli.deploy_utils import auto_release_version
612
+
563
613
  with capture_standard_output():
564
614
  await auto_release_version(result.agent_id, region, deploy_name)
565
615
 
@@ -591,7 +641,11 @@ async def _deploy_async(
591
641
  else:
592
642
  # 可能是 DryRun 的 SKIPPED
593
643
  if result.status.name == "SKIPPED":
594
- dry_run_request = result.metadata.get("dry_run_request") if isinstance(result.metadata, dict) else None
644
+ dry_run_request = (
645
+ result.metadata.get("dry_run_request")
646
+ if isinstance(result.metadata, dict)
647
+ else None
648
+ )
595
649
  if dry_run and dry_run_request:
596
650
  raise DryRunExit(result.message or "Dry Run finished.", payload=dry_run_request)
597
651
  print_warn(f"部署状态: {result.status.value}")
@@ -629,13 +683,14 @@ async def _deploy_async(
629
683
  )
630
684
  if result.message:
631
685
  print_info(result.message)
632
-
686
+
633
687
  # 10. 部署失败时自动回滚 (如果启用了 --auto-rollback)
634
688
  if auto_rollback and result.agent_id and result.status.name not in ["SKIPPED"]:
635
689
  from ksadk.cli.deploy_utils import auto_rollback_to_previous
690
+
636
691
  with capture_standard_output():
637
692
  await auto_rollback_to_previous(result.agent_id, region)
638
-
693
+
639
694
  except DryRunExit:
640
695
  raise
641
696
  except Exception as e:
@@ -656,9 +711,6 @@ def _should_build_artifact(*, target: str, artifact_type: str, ks3_path: str, im
656
711
  )
657
712
 
658
713
 
659
-
660
-
661
-
662
714
  def _load_config(agent_path: Path) -> dict:
663
715
  """加载配置文件"""
664
716
  import yaml
@@ -670,7 +722,7 @@ def _load_config(agent_path: Path) -> dict:
670
722
 
671
723
  if config_path.exists():
672
724
  # 使用 utf-8-sig 自动处理 BOM,确保 Windows 兼容性
673
- with open(config_path, encoding='utf-8-sig') as f:
725
+ with open(config_path, encoding="utf-8-sig") as f:
674
726
  return yaml.safe_load(f) or {}
675
727
 
676
728
  return {}
@@ -683,7 +735,9 @@ def _resolve_ui_config_inputs(
683
735
  ui_path: str | None,
684
736
  ui_url: str | None,
685
737
  ) -> tuple[str | None, str | None, str | None]:
686
- config_profile, config_path, config_url = extract_ui_state(config if isinstance(config, dict) else None)
738
+ config_profile, config_path, config_url = extract_ui_state(
739
+ config if isinstance(config, dict) else None
740
+ )
687
741
  return (
688
742
  ui_profile if ui_profile is not None else config_profile,
689
743
  ui_path if ui_path is not None else config_path,
@@ -694,10 +748,15 @@ def _resolve_ui_config_inputs(
694
748
  def _resolve_artifact_type_input(config: dict, cli_artifact_type: str | None) -> str:
695
749
  raw = cli_artifact_type
696
750
  if raw is None and isinstance(config, dict):
697
- deploy_config = config.get("deploy") if isinstance(config.get("deploy"), dict) else {}
751
+ deploy_value = config.get("deploy")
752
+ deploy_config: dict = dict(deploy_value) if isinstance(deploy_value, dict) else {}
698
753
  raw = config.get("artifact_type") or deploy_config.get("artifact_type")
699
754
  normalized = str(raw or "Code").strip().lower()
700
- return "Container" if normalized == "container" else "Code"
755
+ if normalized == "container":
756
+ return "Container"
757
+ if normalized == "managedruntime":
758
+ return "ManagedRuntime"
759
+ return "Code"
701
760
 
702
761
 
703
762
  def _apply_network_config(config: dict, deploy_target: "DeployTarget") -> None:
ksadk/cli/cmd_destroy.py CHANGED
@@ -2,11 +2,13 @@
2
2
  agentengine delete - 删除 Agent 实例
3
3
  """
4
4
 
5
- import click
6
5
  import asyncio
7
6
  from pathlib import Path
7
+
8
+ import click
9
+
8
10
  from ksadk.cli.agent_ref import resolve_agent_ref
9
- from ksadk.cli.dry_run import dry_run_option, run_async_with_dry_run, effective_dry_run
11
+ from ksadk.cli.dry_run import dry_run_option, effective_dry_run, run_async_with_dry_run
10
12
  from ksadk.cli.error_utils import abort_with_cli_error, remote_error, resolution_error, usage_error
11
13
  from ksadk.cli.resource_common import (
12
14
  CONTEXT_SETTINGS,
@@ -15,7 +17,6 @@ from ksadk.cli.resource_common import (
15
17
  print_compatibility_hint,
16
18
  render_resource_status,
17
19
  )
18
- from ksadk.deployment import DeploymentManager, DeployTarget
19
20
  from ksadk.cli.ui import (
20
21
  is_json_output,
21
22
  print_error,
@@ -25,6 +26,7 @@ from ksadk.cli.ui import (
25
26
  print_title,
26
27
  print_warn,
27
28
  )
29
+ from ksadk.deployment import DeploymentManager, DeployTarget
28
30
 
29
31
 
30
32
  def _destroy_impl(
@@ -45,7 +47,8 @@ def _destroy_impl(
45
47
  # 2) 显式指定 agent
46
48
  agentengine delete --agent ar-xxxx --account-id X-Ksc-Account-Id --force
47
49
  # 3) 显式指定区域
48
- KSYUN_REGION=cn-beijing-6 agentengine delete --agent ar-xxxx --account-id X-Ksc-Account-Id --dry-run
50
+ KSYUN_REGION=cn-beijing-6 agentengine delete --agent ar-xxxx \
51
+ --account-id X-Ksc-Account-Id --dry-run
49
52
  # 4) 批量删除
50
53
  agentengine delete ar-xxxx ar-yyyy --account-id X-Ksc-Account-Id --yes
51
54
  """
@@ -83,7 +86,7 @@ def _destroy_impl(
83
86
 
84
87
  # 构造 Provider 和 Target
85
88
  provider_name = "serverless" # 目前默认 serverless
86
-
89
+
87
90
  try:
88
91
  provider = DeploymentManager.get_provider(provider_name)
89
92
  except ValueError as e:
@@ -96,7 +99,7 @@ def _destroy_impl(
96
99
  "account_id": account_id,
97
100
  "dry_run": dry_run,
98
101
  "project_dir": str(Path(".").resolve()),
99
- }
102
+ },
100
103
  )
101
104
 
102
105
  if not dry_run:
@@ -148,7 +151,11 @@ def _destroy_impl(
148
151
 
149
152
  render_resource_status(
150
153
  title="Agent 删除结果",
151
- subtitle="批量删除" if len(resolved_agent_ids) > 1 else (resolved_agent_ids[0] if resolved_agent_ids else "-"),
154
+ subtitle=(
155
+ "批量删除"
156
+ if len(resolved_agent_ids) > 1
157
+ else (resolved_agent_ids[0] if resolved_agent_ids else "-")
158
+ ),
152
159
  fields=[
153
160
  ("目标数量", str(len(resolved_agent_ids)), None),
154
161
  ("已删除", ", ".join(deleted_agents) or "-", None),
@@ -201,7 +208,7 @@ def run_delete_command(
201
208
  agent_options=agent_options,
202
209
  assume_yes=assume_yes,
203
210
  region=region,
204
- account_id=account_id,
211
+ account_id=account_id or "",
205
212
  dry_run=dry_run,
206
213
  )
207
214
 
@@ -214,11 +221,20 @@ def run_delete_command(
214
221
  canonical_command="agentengine agent delete",
215
222
  )
216
223
  @click.argument("agent_refs", nargs=-1)
217
- @click.option("--agent", "--agent-id", "agent_options", "-a", multiple=True, help="Agent 名称或 ID,可重复传入")
224
+ @click.option(
225
+ "--agent",
226
+ "--agent-id",
227
+ "agent_options",
228
+ "-a",
229
+ multiple=True,
230
+ help="Agent 名称或 ID,可重复传入",
231
+ )
218
232
  @click.option("--force", "-f", "assume_yes", is_flag=True, help="跳过确认")
219
233
  @click.option("--yes", "-y", "assume_yes", is_flag=True, help="跳过确认")
220
234
  @click.option("--region", "-r", default="cn-beijing-6", envvar="KSYUN_REGION", help="区域")
221
- @click.option("--account-id", envvar="KSYUN_ACCOUNT_ID", help="金山云账号 ID(可选;未设置时从 AK/SK 反查)")
235
+ @click.option(
236
+ "--account-id", envvar="KSYUN_ACCOUNT_ID", help="金山云账号 ID(可选;未设置时从 AK/SK 反查)"
237
+ )
222
238
  @dry_run_option()
223
239
  def destroy(
224
240
  agent_refs: tuple[str, ...],
@@ -247,11 +263,20 @@ def destroy(
247
263
  canonical_command="agentengine agent delete",
248
264
  )
249
265
  @click.argument("agent_refs", nargs=-1)
250
- @click.option("--agent", "--agent-id", "agent_options", "-a", multiple=True, help="Agent 名称或 ID,可重复传入")
266
+ @click.option(
267
+ "--agent",
268
+ "--agent-id",
269
+ "agent_options",
270
+ "-a",
271
+ multiple=True,
272
+ help="Agent 名称或 ID,可重复传入",
273
+ )
251
274
  @click.option("--yes", "-y", "assume_yes", is_flag=True, help="跳过确认")
252
275
  @click.option("--force", "-f", "assume_yes", is_flag=True, help="跳过确认")
253
276
  @click.option("--region", "-r", default="cn-beijing-6", envvar="KSYUN_REGION", help="区域")
254
- @click.option("--account-id", envvar="KSYUN_ACCOUNT_ID", help="金山云账号 ID(可选;未设置时从 AK/SK 反查)")
277
+ @click.option(
278
+ "--account-id", envvar="KSYUN_ACCOUNT_ID", help="金山云账号 ID(可选;未设置时从 AK/SK 反查)"
279
+ )
255
280
  @dry_run_option()
256
281
  def delete(
257
282
  agent_refs: tuple[str, ...],
@@ -273,7 +298,9 @@ def delete(
273
298
  )
274
299
 
275
300
 
276
- def _collect_agent_refs(*, agent_refs: tuple[str, ...], agent_options: tuple[str, ...]) -> list[str]:
301
+ def _collect_agent_refs(
302
+ *, agent_refs: tuple[str, ...], agent_options: tuple[str, ...]
303
+ ) -> list[str]:
277
304
  collected = []
278
305
  for value in [*agent_options, *agent_refs]:
279
306
  normalized = str(value).strip()
@@ -292,7 +319,10 @@ def _collect_agent_refs(*, agent_refs: tuple[str, ...], agent_options: tuple[str
292
319
  if not resolved:
293
320
  raise resolution_error(
294
321
  "请指定 Agent(--agent 或位置参数),或在当前目录提供可解析的本地配置",
295
- hints=["自动解析顺序: .agentengine.state -> agentengine.yaml/ksadk.yaml", "请先执行 `agentengine agent list`。"],
322
+ hints=[
323
+ "自动解析顺序: .agentengine.state -> agentengine.yaml/ksadk.yaml",
324
+ "请先执行 `agentengine agent list`。",
325
+ ],
296
326
  )
297
327
 
298
328
  if resolved.source != "cli":