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
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,37 @@ 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
+ "--agent-id",
85
+ default=None,
86
+ help=(
87
+ "指定要更新的已有 Agent ID;当前凭证有权限时会自动回填 "
88
+ ".agentengine.state 并走热更新(用于本地状态丢失后重新关联)"
89
+ ),
90
+ )
91
+ @click.option(
92
+ "--region",
93
+ "-r",
94
+ default="cn-beijing-6",
95
+ envvar="KSYUN_REGION",
96
+ help="区域 (default: cn-beijing-6)",
97
+ )
98
+ @click.option(
99
+ "--account-id", envvar="KSYUN_ACCOUNT_ID", help="金山云账号 ID(可选;未设置时从 AK/SK 反查)"
100
+ )
74
101
  @click.option(
75
102
  "--artifact-type",
76
- type=click.Choice(["Code", "Container"]),
77
- default="Code",
78
- help="Serverless 部署模式 (default: Code)",
103
+ type=click.Choice(["ManagedRuntime", "Code", "Container"]),
104
+ default=None,
105
+ help="Serverless 部署模式;默认从 agentengine.yaml 推断",
79
106
  )
80
107
  @click.option("--namespace", default="default", help="K8s 命名空间")
81
108
  @click.option("--port", "-p", default=8000, help="服务端口 (default: 8000)")
82
109
  @click.option("--registry", help="镜像仓库地址 (k8s/serverless Container 模式)")
83
110
  @click.option("--ks3-path", help="KS3 代码包路径 (Serverless Code 模式)")
84
- @click.option("--ks3-bucket", help="KS3 bucket 名称 (Serverless Code 模式, 默认: agentengine-{region})")
111
+ @click.option(
112
+ "--ks3-bucket", help="KS3 bucket 名称 (Serverless Code 模式, 默认: agentengine-{region})"
113
+ )
85
114
  @click.option("--image", help="Docker 镜像地址 (Container 模式)")
86
115
  @click.option("--ui-profile", type=click.Choice(SUPPORTED_UI_PROFILES), help="Dashboard UI 类型")
87
116
  @click.option("--ui-path", help="Dashboard UI 路径 (例如 /)")
@@ -90,7 +119,10 @@ console = get_console()
90
119
  @click.option(
91
120
  "--storage-mount-path",
92
121
  default=None,
93
- help="PVC 挂载目录(hermes/openclaw 默认按框架推导;adk/langgraph 等其他框架默认不挂盘,需显式指定)",
122
+ help=(
123
+ "PVC 挂载目录(hermes/openclaw 默认按框架推导;"
124
+ "adk/langgraph 等其他框架默认不挂盘,需显式指定)"
125
+ ),
94
126
  )
95
127
  @click.option("--no-storage", is_flag=True, help="禁用默认 PVC 挂载")
96
128
  @network_options
@@ -100,7 +132,9 @@ console = get_console()
100
132
  )
101
133
  @click.option("--push", is_flag=True, help="构建后推送镜像")
102
134
  @click.option("--no-cache", is_flag=True, help="强制重新构建,不使用缓存")
103
- @click.option("--repackage", is_flag=True, help="Code 模式复用依赖缓存,但强制重新打包当前代码/runtime")
135
+ @click.option(
136
+ "--repackage", is_flag=True, help="Code 模式复用依赖缓存,但强制重新打包当前代码/runtime"
137
+ )
104
138
  @click.option("--no-version", is_flag=True, help="部署成功后不自动创建版本快照")
105
139
  @click.option("--auto-rollback", is_flag=True, help="部署失败时自动回滚到上一版本")
106
140
  @click.option("--dry-run", is_flag=True, help="只生成配置,打印 curl 请求,不执行部署")
@@ -110,6 +144,7 @@ def deploy(
110
144
  agent_dir: str,
111
145
  target: str,
112
146
  name: str,
147
+ agent_id: str | None,
113
148
  region: str,
114
149
  account_id: str,
115
150
  artifact_type: str,
@@ -167,6 +202,15 @@ def deploy(
167
202
  # 执行部署
168
203
  _ = output_mode
169
204
  dry_run_context: dict[str, object] = {}
205
+
206
+ def render_deploy_dry_run(exc: DryRunExit) -> None:
207
+ plan_value = dry_run_context.get("plan")
208
+ render_workflow_dry_run(
209
+ action="deploy",
210
+ request=dict(exc.payload) if isinstance(exc.payload, dict) else {},
211
+ plan=dict(plan_value) if isinstance(plan_value, dict) else None,
212
+ )
213
+
170
214
  result = run_async_with_dry_run(
171
215
  _deploy_async(
172
216
  agent_dir,
@@ -205,24 +249,16 @@ def deploy(
205
249
  env_file=env_file,
206
250
  repackage=repackage,
207
251
  dry_run_context=dry_run_context,
252
+ agent_id=agent_id,
208
253
  ),
209
254
  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
- ),
255
+ on_dry_run=render_deploy_dry_run,
217
256
  )
218
257
  if result is not None and is_json_output():
219
258
  render_workflow_result(action="deploy", result=result)
220
259
 
221
260
 
222
-
223
-
224
261
  def _list_providers():
225
-
226
262
  """列出所有可用的部署 Provider"""
227
263
  from ksadk.deployment import DeploymentManager
228
264
 
@@ -289,10 +325,11 @@ async def _deploy_async(
289
325
  dry_run_context: dict[str, object] | None = None,
290
326
  *,
291
327
  repackage: bool = False,
328
+ agent_id: str | None = None,
292
329
  ):
293
330
  """异步部署流程"""
331
+ from ksadk.deployment import DeploymentManager, DeployTarget
294
332
  from ksadk.detection import FrameworkDetector
295
- from ksadk.deployment import DeploymentManager, DeployTarget, DeployStatus
296
333
 
297
334
  agent_path = Path(agent_dir).resolve()
298
335
  config = _load_config(agent_path)
@@ -337,7 +374,8 @@ async def _deploy_async(
337
374
  )
338
375
  if detection_result.type.value == "openclaw":
339
376
  raise usage_error(
340
- "OpenClaw 项目请使用 `agentengine openclaw deploy`,不要使用通用 `agentengine deploy`。",
377
+ "OpenClaw 项目请使用 `agentengine openclaw deploy`,"
378
+ "不要使用通用 `agentengine deploy`。",
341
379
  hints=[
342
380
  "OpenClaw 部署会走专用网关与容器配置流程。",
343
381
  "可先执行 `agentengine openclaw --help` 查看专用命令。",
@@ -345,6 +383,22 @@ async def _deploy_async(
345
383
  argv=["deploy"],
346
384
  )
347
385
 
386
+ resolved_runtime = None
387
+ if effective_artifact_type == "ManagedRuntime":
388
+ if detection_result.type.value != "codex":
389
+ raise validation_error("ManagedRuntime v1 目前仅支持 framework: codex")
390
+ if ks3_path:
391
+ raise validation_error(
392
+ "ManagedRuntime 是服务端内联 manifest,不能使用 --ks3-path;请移除该参数后重试。"
393
+ )
394
+ from ksadk.managed_runtime import resolve_managed_runtime
395
+
396
+ resolved_runtime = await resolve_managed_runtime(config, region=region)
397
+ print_kv(
398
+ "Runtime",
399
+ f"{resolved_runtime.name}@{resolved_runtime.version} ({resolved_runtime.source})",
400
+ )
401
+
348
402
  # 2. 确定部署名称
349
403
  deploy_name = name or config.get("name") or agent_path.name.replace("-", "_").replace(".", "_")
350
404
  print_kv("部署名称", deploy_name)
@@ -359,7 +413,9 @@ async def _deploy_async(
359
413
  try:
360
414
  provider = DeploymentManager.get_provider(target)
361
415
  except ValueError as e:
362
- raise usage_error(str(e), hints=["使用 `agentengine deploy --list-providers` 查看可用目标。"])
416
+ raise usage_error(
417
+ str(e), hints=["使用 `agentengine deploy --list-providers` 查看可用目标。"]
418
+ )
363
419
 
364
420
  # 5. 构建部署目标配置
365
421
  deploy_target = DeployTarget(
@@ -384,6 +440,9 @@ async def _deploy_async(
384
440
  "no_cache": no_cache,
385
441
  "repackage": repackage,
386
442
  "env_vars": explicit_env_vars,
443
+ "runtime_name": resolved_runtime.name if resolved_runtime else "",
444
+ "runtime_version": resolved_runtime.version if resolved_runtime else "",
445
+ "agent_id": agent_id,
387
446
  },
388
447
  )
389
448
 
@@ -439,8 +498,10 @@ async def _deploy_async(
439
498
  normalized_artifact_type = (effective_artifact_type or "Code").strip().lower()
440
499
  explicit_artifact_reference = ks3_path if normalized_artifact_type == "code" else image
441
500
  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)
501
+ if not artifact_plan.should_clear_metadata and normalized_artifact_type != "managedruntime":
502
+ cached_artifact_reference = load_cached_artifact_reference(
503
+ agent_path, effective_artifact_type
504
+ )
444
505
  resolved_artifact_plan = resolve_artifact_build_plan(
445
506
  plan=artifact_plan,
446
507
  target=target,
@@ -473,7 +534,7 @@ async def _deploy_async(
473
534
  if normalized_artifact_type == "container":
474
535
  package_info.image = resolved_artifact_plan.reference
475
536
  package_info.metadata["image"] = resolved_artifact_plan.reference
476
- else:
537
+ elif normalized_artifact_type == "code":
477
538
  package_info.metadata["ks3_path"] = resolved_artifact_plan.reference
478
539
 
479
540
  print_kv("构建目录", str(package_info.build_dir))
@@ -494,7 +555,12 @@ async def _deploy_async(
494
555
  print_info("Dry Run: 仅生成本地构建计划,不执行真实构建/上传")
495
556
 
496
557
  if resolved_artifact_plan.will_build:
497
- print_rule(f"Step 2/{total_steps} 构建与上传")
558
+ build_step = (
559
+ "构建运行时声明"
560
+ if effective_artifact_type == "ManagedRuntime"
561
+ else "构建与上传"
562
+ )
563
+ print_rule(f"Step 2/{total_steps} {build_step}")
498
564
  try:
499
565
  with capture_standard_output():
500
566
  package_info = await provider.build(package_info, deploy_target)
@@ -555,11 +621,12 @@ async def _deploy_async(
555
621
  print_warn("⚠️ API Key 仅在首次部署时明文显示,请妥善保存!")
556
622
  if result.message:
557
623
  print_kv("信息", result.message)
558
-
624
+
559
625
  # 9. 自动创建版本快照 (仅热更新时,首次部署平台自动创建 v1)
560
626
  is_update = result.message and "已更新" in result.message
561
627
  if result.agent_id and is_update and not no_version and not dry_run:
562
628
  from ksadk.cli.deploy_utils import auto_release_version
629
+
563
630
  with capture_standard_output():
564
631
  await auto_release_version(result.agent_id, region, deploy_name)
565
632
 
@@ -591,7 +658,11 @@ async def _deploy_async(
591
658
  else:
592
659
  # 可能是 DryRun 的 SKIPPED
593
660
  if result.status.name == "SKIPPED":
594
- dry_run_request = result.metadata.get("dry_run_request") if isinstance(result.metadata, dict) else None
661
+ dry_run_request = (
662
+ result.metadata.get("dry_run_request")
663
+ if isinstance(result.metadata, dict)
664
+ else None
665
+ )
595
666
  if dry_run and dry_run_request:
596
667
  raise DryRunExit(result.message or "Dry Run finished.", payload=dry_run_request)
597
668
  print_warn(f"部署状态: {result.status.value}")
@@ -629,13 +700,14 @@ async def _deploy_async(
629
700
  )
630
701
  if result.message:
631
702
  print_info(result.message)
632
-
703
+
633
704
  # 10. 部署失败时自动回滚 (如果启用了 --auto-rollback)
634
705
  if auto_rollback and result.agent_id and result.status.name not in ["SKIPPED"]:
635
706
  from ksadk.cli.deploy_utils import auto_rollback_to_previous
707
+
636
708
  with capture_standard_output():
637
709
  await auto_rollback_to_previous(result.agent_id, region)
638
-
710
+
639
711
  except DryRunExit:
640
712
  raise
641
713
  except Exception as e:
@@ -656,9 +728,6 @@ def _should_build_artifact(*, target: str, artifact_type: str, ks3_path: str, im
656
728
  )
657
729
 
658
730
 
659
-
660
-
661
-
662
731
  def _load_config(agent_path: Path) -> dict:
663
732
  """加载配置文件"""
664
733
  import yaml
@@ -670,7 +739,7 @@ def _load_config(agent_path: Path) -> dict:
670
739
 
671
740
  if config_path.exists():
672
741
  # 使用 utf-8-sig 自动处理 BOM,确保 Windows 兼容性
673
- with open(config_path, encoding='utf-8-sig') as f:
742
+ with open(config_path, encoding="utf-8-sig") as f:
674
743
  return yaml.safe_load(f) or {}
675
744
 
676
745
  return {}
@@ -683,7 +752,9 @@ def _resolve_ui_config_inputs(
683
752
  ui_path: str | None,
684
753
  ui_url: str | None,
685
754
  ) -> tuple[str | None, str | None, str | None]:
686
- config_profile, config_path, config_url = extract_ui_state(config if isinstance(config, dict) else None)
755
+ config_profile, config_path, config_url = extract_ui_state(
756
+ config if isinstance(config, dict) else None
757
+ )
687
758
  return (
688
759
  ui_profile if ui_profile is not None else config_profile,
689
760
  ui_path if ui_path is not None else config_path,
@@ -694,10 +765,15 @@ def _resolve_ui_config_inputs(
694
765
  def _resolve_artifact_type_input(config: dict, cli_artifact_type: str | None) -> str:
695
766
  raw = cli_artifact_type
696
767
  if raw is None and isinstance(config, dict):
697
- deploy_config = config.get("deploy") if isinstance(config.get("deploy"), dict) else {}
768
+ deploy_value = config.get("deploy")
769
+ deploy_config: dict = dict(deploy_value) if isinstance(deploy_value, dict) else {}
698
770
  raw = config.get("artifact_type") or deploy_config.get("artifact_type")
699
771
  normalized = str(raw or "Code").strip().lower()
700
- return "Container" if normalized == "container" else "Code"
772
+ if normalized == "container":
773
+ return "Container"
774
+ if normalized == "managedruntime":
775
+ return "ManagedRuntime"
776
+ return "Code"
701
777
 
702
778
 
703
779
  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":