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.
- {agentengine_sdk_python-0.7.0.dist-info → agentengine_sdk_python-0.8.1.dist-info}/METADATA +52 -20
- agentengine_sdk_python-0.8.1.dist-info/RECORD +644 -0
- {agentengine_sdk_python-0.7.0.dist-info → agentengine_sdk_python-0.8.1.dist-info}/WHEEL +1 -1
- ksadk/a2a/__init__.py +180 -11
- ksadk/a2a/bootstrap.py +332 -0
- ksadk/a2a/card.py +15 -0
- ksadk/a2a/context_store.py +203 -0
- ksadk/a2a/control_plane.py +1056 -0
- ksadk/a2a/credential.py +99 -0
- ksadk/a2a/event_adapter.py +149 -0
- ksadk/a2a/executor.py +361 -137
- ksadk/a2a/external_transport.py +516 -0
- ksadk/a2a/identity.py +304 -0
- ksadk/a2a/ids.py +22 -0
- ksadk/a2a/langgraph.py +285 -0
- ksadk/a2a/resume_store.py +201 -0
- ksadk/a2a/routes.py +112 -0
- ksadk/a2a/server.py +102 -62
- ksadk/a2a/service_env.py +33 -0
- ksadk/a2a/space_client.py +1122 -0
- ksadk/a2a/task_adapter.py +423 -0
- ksadk/a2a/task_event_dispatcher.py +167 -0
- ksadk/a2a/task_event_outbox.py +326 -0
- ksadk/a2a/task_store.py +206 -0
- ksadk/a2a_card.py +101 -0
- ksadk/a2ui/__init__.py +27 -0
- ksadk/a2ui/core.py +186 -0
- ksadk/a2ui/models.py +166 -0
- ksadk/a2ui/renderer.py +198 -0
- ksadk/agui/__init__.py +9 -0
- ksadk/agui/a2ui_projection.py +92 -0
- ksadk/agui/agent.py +872 -0
- ksadk/agui/config.py +92 -0
- ksadk/agui/routes.py +47 -0
- ksadk/api/client.py +238 -204
- ksadk/api/environment.py +27 -0
- ksadk/builders/__init__.py +2 -0
- ksadk/builders/base.py +16 -14
- ksadk/builders/code_builder.py +375 -270
- ksadk/builders/container_builder.py +240 -200
- ksadk/builders/framework_requirements.py +31 -12
- ksadk/builders/ks3_uploader.py +60 -29
- ksadk/builders/managed_runtime_builder.py +173 -0
- ksadk/builders/mcp_builder.py +91 -92
- ksadk/builders/requirements_utils.py +1 -5
- ksadk/cli/__init__.py +97 -171
- ksadk/cli/cmd_a2a.py +255 -84
- ksadk/cli/cmd_agent.py +19 -5
- ksadk/cli/cmd_build.py +158 -29
- ksadk/cli/cmd_completion.py +47 -35
- ksadk/cli/cmd_config.py +267 -198
- ksadk/cli/cmd_create.py +507 -740
- ksadk/cli/cmd_dashboard.py +120 -45
- ksadk/cli/cmd_deploy.py +135 -59
- ksadk/cli/cmd_destroy.py +44 -14
- ksadk/cli/cmd_eval.py +386 -0
- ksadk/cli/cmd_files.py +63 -24
- ksadk/cli/cmd_hermes.py +313 -135
- ksadk/cli/cmd_invoke.py +184 -122
- ksadk/cli/cmd_launch.py +76 -28
- ksadk/cli/cmd_mcp.py +98 -64
- ksadk/cli/cmd_model.py +14 -5
- ksadk/cli/cmd_openclaw.py +564 -268
- ksadk/cli/cmd_replay.py +71 -0
- ksadk/cli/cmd_run.py +58 -73
- ksadk/cli/cmd_status.py +80 -31
- ksadk/cli/cmd_studio.py +110 -0
- ksadk/cli/cmd_version.py +20 -13
- ksadk/cli/cmd_web.py +95 -18
- ksadk/cli/deploy_utils.py +20 -20
- ksadk/cli/dry_run.py +7 -4
- ksadk/cli/env_options.py +83 -0
- ksadk/cli/error_utils.py +37 -12
- ksadk/cli/global_options.py +4 -3
- ksadk/cli/local_runtime.py +1 -2
- ksadk/cli/model_catalog.py +6 -2
- ksadk/cli/network_options.py +41 -19
- ksadk/cli/resource_common.py +6 -2
- ksadk/cli/runtime_bootstrap.py +51 -0
- ksadk/cli/storage.py +0 -1
- ksadk/cli/ui.py +11 -3
- ksadk/cli/workflow_common.py +52 -18
- ksadk/codex/__init__.py +12 -0
- ksadk/codex/client.py +1042 -0
- ksadk/codex/phase.py +143 -0
- ksadk/codex/runtime.py +940 -0
- ksadk/common/aicp_env.py +0 -1
- ksadk/common/auth.py +2 -2
- ksadk/common/constants.py +1 -3
- ksadk/common/kop_client.py +232 -0
- ksadk/common/llm_utils.py +17 -13
- ksadk/compat/__init__.py +5 -0
- ksadk/compat/adk_compat.py +200 -0
- ksadk/compat/copilotkit_a2ui.py +330 -0
- ksadk/configs/__init__.py +12 -14
- ksadk/configs/env_registry.py +661 -116
- ksadk/configs/global_config.py +3 -2
- ksadk/configs/settings.py +133 -209
- ksadk/conversations/__init__.py +85 -92
- ksadk/conversations/attachment_storage.py +16 -11
- ksadk/conversations/attachments.py +44 -36
- ksadk/conversations/compaction_pipeline.py +12 -12
- ksadk/conversations/compaction_prompt.py +9 -5
- ksadk/conversations/context.py +221 -6
- ksadk/conversations/message_projection.py +438 -51
- ksadk/conversations/model_context.py +12 -6
- ksadk/conversations/model_options.py +0 -1
- ksadk/conversations/normalize.py +20 -16
- ksadk/conversations/reasoning_markup.py +1 -1
- ksadk/conversations/runtime.py +339 -5255
- ksadk/conversations/runtime_compaction.py +333 -0
- ksadk/conversations/runtime_constants.py +27 -0
- ksadk/conversations/runtime_governance.py +185 -0
- ksadk/conversations/runtime_input.py +660 -0
- ksadk/conversations/runtime_invocation.py +395 -0
- ksadk/conversations/runtime_metadata.py +475 -0
- ksadk/conversations/runtime_observability.py +367 -0
- ksadk/conversations/runtime_payloads.py +272 -0
- ksadk/conversations/runtime_persistence.py +440 -0
- ksadk/conversations/runtime_preparation.py +426 -0
- ksadk/conversations/runtime_resume.py +836 -0
- ksadk/conversations/runtime_stream_events.py +902 -0
- ksadk/conversations/runtime_streaming.py +700 -0
- ksadk/conversations/semantic_summary.py +17 -5
- ksadk/conversations/session_title.py +6 -3
- ksadk/deployment/__init__.py +15 -16
- ksadk/deployment/agent_access.py +12 -23
- ksadk/deployment/base.py +51 -38
- ksadk/deployment/managed_runtime.py +33 -0
- ksadk/deployment/manager.py +85 -71
- ksadk/deployment/providers/serverless.py +379 -210
- ksadk/deployment/registry.py +38 -32
- ksadk/deployment/state.py +11 -11
- ksadk/deployment/ui_config.py +1 -1
- ksadk/detection/__init__.py +1 -1
- ksadk/detection/detector.py +146 -83
- ksadk/detection/mcp_detector.py +9 -6
- ksadk/evaluation/__init__.py +84 -0
- ksadk/evaluation/a2a_adapter.py +444 -0
- ksadk/evaluation/adapters.py +54 -0
- ksadk/evaluation/contracts.py +409 -0
- ksadk/evaluation/evalset.py +351 -0
- ksadk/evaluation/evaluators.py +461 -0
- ksadk/evaluation/executor.py +118 -0
- ksadk/evaluation/storage.py +68 -0
- ksadk/evaluation/target.py +73 -0
- ksadk/events/__init__.py +25 -0
- ksadk/events/parser.py +191 -0
- ksadk/events/replay.py +37 -0
- ksadk/events/runtime_event.py +273 -0
- ksadk/events/store.py +317 -0
- ksadk/harness/__init__.py +35 -0
- ksadk/harness/app.py +269 -0
- ksadk/harness/config.py +181 -0
- ksadk/harness/reasoner.py +105 -0
- ksadk/harness/runtime.py +364 -0
- ksadk/harness/sandbox.py +141 -0
- ksadk/harness/tools.py +222 -0
- ksadk/hermes_terminal.py +28 -12
- ksadk/identity/resolver.py +15 -9
- ksadk/ids.py +32 -0
- ksadk/knowledge_base/adk_tool.py +1 -1
- ksadk/knowledge_base/client.py +38 -33
- ksadk/managed_a2a_card.py +160 -0
- ksadk/managed_runtime.py +195 -0
- ksadk/markdown.py +5 -2
- ksadk/mcp_runtime/__init__.py +9 -6
- ksadk/memory/__init__.py +1 -1
- ksadk/memory/adk/__init__.py +2 -0
- ksadk/memory/adk/backends/base_ltm_backend.py +2 -6
- ksadk/memory/adk/backends/http_ltm_backend.py +13 -21
- ksadk/memory/adk/backends/inmemory_ltm_backend.py +7 -13
- ksadk/memory/adk/backends/sdk_ltm_backend.py +36 -36
- ksadk/memory/adk/long_term_memory.py +34 -37
- ksadk/memory/adk/resilient_session_service.py +4 -5
- ksadk/memory/adk/short_term_memory.py +12 -21
- ksadk/memory/adk_tool.py +3 -2
- ksadk/memory/backends/base.py +19 -19
- ksadk/memory/backends/memory.py +24 -25
- ksadk/memory/backends/redis.py +31 -30
- ksadk/memory/langchain_tool.py +2 -1
- ksadk/memory/manager.py +52 -47
- ksadk/memory/service.py +16 -6
- ksadk/memory/tool.py +4 -0
- ksadk/model_policy.py +15 -7
- ksadk/model_proxy/__init__.py +51 -0
- ksadk/model_proxy/bootstrap.py +80 -0
- ksadk/model_proxy/cache.py +165 -0
- ksadk/model_proxy/config.py +66 -0
- ksadk/model_proxy/demo_webui.py +115 -0
- ksadk/model_proxy/detect.py +145 -0
- ksadk/model_proxy/gate.py +68 -0
- ksadk/model_proxy/namespace.py +201 -0
- ksadk/model_proxy/protocol_proxy.py +22 -0
- ksadk/model_proxy/server.py +443 -0
- ksadk/model_proxy/transform.py +735 -0
- ksadk/openclaw_gateway.py +29 -14
- ksadk/runners/adk_runner.py +354 -146
- ksadk/runners/base_runner.py +71 -29
- ksadk/runners/deepagents_runner.py +0 -1
- ksadk/runners/factory.py +18 -5
- ksadk/runners/langchain_runner.py +29 -742
- ksadk/runners/langgraph_runner.py +417 -97
- ksadk/runners/patch_langchain.py +16 -16
- ksadk/runners/remote_runner.py +134 -33
- ksadk/runners/usage_accumulator.py +1 -0
- ksadk/runners/utils/__init__.py +0 -10
- ksadk/runners/utils/loader.py +23 -7
- ksadk/runtime/__init__.py +67 -0
- ksadk/runtime/adapter.py +412 -0
- ksadk/runtime/conversation_execution.py +553 -0
- ksadk/runtime/executor.py +251 -0
- ksadk/runtime/factory.py +156 -0
- ksadk/runtime/framework_adapters.py +118 -0
- ksadk/runtime/launch.py +48 -0
- ksadk/runtime/preprocessing.py +131 -0
- ksadk/runtime/runner_adapter.py +1032 -0
- ksadk/runtime/runner_loading.py +36 -0
- ksadk/runtime_context.py +18 -3
- ksadk/runtime_state.py +0 -1
- ksadk/sandbox/__init__.py +4 -1
- ksadk/sandbox/backends/__init__.py +4 -1
- ksadk/sandbox/backends/e2b.py +13 -5
- ksadk/sandbox/backends/local_process.py +11 -3
- ksadk/sandbox/base.py +10 -15
- ksadk/sandbox/factory.py +14 -4
- ksadk/sandbox/registry.py +57 -6
- ksadk/server/__init__.py +39 -4
- ksadk/server/api_models.py +15 -5
- ksadk/server/app.py +24 -3928
- ksadk/server/composition.py +47 -0
- ksadk/server/factory.py +622 -0
- ksadk/server/routes/__init__.py +1 -0
- ksadk/server/routes/checkpoint_resolution.py +116 -0
- ksadk/server/routes/common.py +682 -0
- ksadk/server/routes/control.py +331 -0
- ksadk/server/routes/dependencies.py +98 -0
- ksadk/server/routes/misc.py +425 -0
- ksadk/server/routes/models.py +451 -0
- ksadk/server/routes/openai_compat.py +229 -0
- ksadk/server/routes/projection.py +848 -0
- ksadk/server/routes/routers.py +52 -0
- ksadk/server/routes/run.py +519 -0
- ksadk/server/routes/sessions.py +644 -0
- ksadk/server/routes/streaming.py +265 -0
- ksadk/server/routes/workspace.py +414 -0
- ksadk/server/static/assets/{ArtifactsPanel-D-SSn2ee.js → ArtifactsPanel-CakCqxEN.js} +1 -1
- ksadk/server/static/assets/CodeBlock-CynLknyO.js +9 -0
- ksadk/server/static/assets/MathMessageMarkdown-3sQdOysS.js +8 -0
- ksadk/server/static/assets/MermaidBlock-NERD_ef7.js +303 -0
- ksadk/server/static/assets/NativeTerminalPanel-CiHWf82q.js +1 -0
- ksadk/server/static/assets/{arc-BA13sHc9.js → arc-DrgjcKhl.js} +1 -1
- ksadk/server/static/assets/architecture-7EHR7CIX-CpZLRCcY.js +1 -0
- ksadk/server/static/assets/{architectureDiagram-3BPJPVTR-DzJzgVoL.js → architectureDiagram-3BPJPVTR-BXoVRbQ6.js} +1 -1
- ksadk/server/static/assets/{blockDiagram-GPEHLZMM-UTdVcZhn.js → blockDiagram-GPEHLZMM-BnaB3Ywv.js} +1 -1
- ksadk/server/static/assets/{c4Diagram-AAUBKEIU-Dix0GD4m.js → c4Diagram-AAUBKEIU-Dw4weZcp.js} +1 -1
- ksadk/server/static/assets/channel-Dt3rQTFI.js +1 -0
- ksadk/server/static/assets/{chunk-2J33WTMH-C2JxuZ42.js → chunk-2J33WTMH-ChjpLK7j.js} +1 -1
- ksadk/server/static/assets/{chunk-4BX2VUAB-Be57QPgD.js → chunk-4BX2VUAB-B9drTgOW.js} +1 -1
- ksadk/server/static/assets/{chunk-55IACEB6-WjSuy4nv.js → chunk-55IACEB6-CK4ROATy.js} +1 -1
- ksadk/server/static/assets/{chunk-727SXJPM-BOovP-b5.js → chunk-727SXJPM-B9KtTTgw.js} +1 -1
- ksadk/server/static/assets/{chunk-AQP2D5EJ-DOmZNmWj.js → chunk-AQP2D5EJ-1O1mki3m.js} +1 -1
- ksadk/server/static/assets/{chunk-FMBD7UC4-DzwlodkU.js → chunk-FMBD7UC4-B_fH2YuH.js} +1 -1
- ksadk/server/static/assets/{chunk-ND2GUHAM-DMqAikEU.js → chunk-ND2GUHAM-D6rFLaVV.js} +1 -1
- ksadk/server/static/assets/chunk-QZHKN3VN-iXEZtKQc.js +1 -0
- ksadk/server/static/assets/classDiagram-4FO5ZUOK-DIveV17Q.js +1 -0
- ksadk/server/static/assets/classDiagram-v2-Q7XG4LA2-DIveV17Q.js +1 -0
- ksadk/server/static/assets/{cose-bilkent-S5V4N54A-Zhy2GBnP.js → cose-bilkent-S5V4N54A-ChNs_Mdk.js} +1 -1
- ksadk/server/static/assets/{dagre-BM42HDAG-CbKrtIUz.js → dagre-BM42HDAG-D0QXg_MQ.js} +1 -1
- ksadk/server/static/assets/{diagram-2AECGRRQ-BRApgQRK.js → diagram-2AECGRRQ-DBDDKwBQ.js} +1 -1
- ksadk/server/static/assets/{diagram-5GNKFQAL-D0xbnDiK.js → diagram-5GNKFQAL-BkwDOxmO.js} +1 -1
- ksadk/server/static/assets/{diagram-KO2AKTUF-CVugVI9L.js → diagram-KO2AKTUF-Bv8waYvY.js} +1 -1
- ksadk/server/static/assets/{diagram-LMA3HP47-DozUGgee.js → diagram-LMA3HP47-e1VECDdu.js} +1 -1
- ksadk/server/static/assets/{diagram-OG6HWLK6-ZOYsKlru.js → diagram-OG6HWLK6-Ds9adfRl.js} +1 -1
- ksadk/server/static/assets/{dist-DpKtt4Bo.js → dist-4N2NMVYg.js} +1 -1
- ksadk/server/static/assets/{dist-CkEKJFtk.js → dist-B-jNR6Vn.js} +1 -1
- ksadk/server/static/assets/{dist-D57wnGWd.js → dist-B5J2uhNk.js} +1 -1
- ksadk/server/static/assets/{dist-8_SfK1IP.js → dist-B5oS1zcj.js} +1 -1
- ksadk/server/static/assets/{dist-DMezvBGJ.js → dist-BB3-OwTQ.js} +1 -1
- ksadk/server/static/assets/{dist-2hInLS_J.js → dist-BIlKoW0k.js} +1 -1
- ksadk/server/static/assets/{dist-BrCcQ47T.js → dist-BjOdlDjj.js} +1 -1
- ksadk/server/static/assets/{dist-BmlMPsCc.js → dist-C1sz5Eo3.js} +1 -1
- ksadk/server/static/assets/{dist-B0NP_Z0z.js → dist-CWV4lDr1.js} +1 -1
- ksadk/server/static/assets/{dist-D-xOD048.js → dist-CmZHzlwZ.js} +1 -1
- ksadk/server/static/assets/{dist-DL_NKc_z.js → dist-D6MpCZtz.js} +1 -1
- ksadk/server/static/assets/{dist-DyOkZmze.js → dist-DJN_6Y39.js} +1 -1
- ksadk/server/static/assets/{dist-DmFaq_Iy.js → dist-DQU9EWw-.js} +1 -1
- ksadk/server/static/assets/{dist-gX6GOLKq.js → dist-DWKByxWV.js} +1 -1
- ksadk/server/static/assets/{dist-DyWsb78Q.js → dist-Dli7qW-B.js} +1 -1
- ksadk/server/static/assets/{dist-BIJVDMuB.js → dist-DsHPdk3W.js} +1 -1
- ksadk/server/static/assets/{dist-Dp0k7bWI.js → dist-X4TnqwOK.js} +1 -1
- ksadk/server/static/assets/{dist-8EEyGgDx.js → dist-_pHPTyZ-.js} +1 -1
- ksadk/server/static/assets/{dist-CPBtqRTW.js → dist-fhOuWds5.js} +1 -1
- ksadk/server/static/assets/{dist-D-JMdWPQ.js → dist-gLnrGsoU.js} +1 -1
- ksadk/server/static/assets/{dist-BssVmjIo.js → dist-j6Dxmf_j.js} +1 -1
- ksadk/server/static/assets/{dist-C3HIIaN5.js → dist-o2OVmKvt.js} +1 -1
- ksadk/server/static/assets/{erDiagram-TEJ5UH35-Bk-9bgE5.js → erDiagram-TEJ5UH35-BPItFKH6.js} +1 -1
- ksadk/server/static/assets/eventmodeling-FCH6USID-DYFSxbqr.js +1 -0
- ksadk/server/static/assets/{flowDiagram-I6XJVG4X-Dn9kZVuZ.js → flowDiagram-I6XJVG4X-BbYB9w5Y.js} +1 -1
- ksadk/server/static/assets/{ganttDiagram-6RSMTGT7-BGxXlJqm.js → ganttDiagram-6RSMTGT7-TQXa0KXv.js} +1 -1
- ksadk/server/static/assets/gitGraph-WXDBUCRP-DyNYp6BN.js +1 -0
- ksadk/server/static/assets/{gitGraphDiagram-PVQCEYII-C7Q0X-wi.js → gitGraphDiagram-PVQCEYII-bKblCnpa.js} +1 -1
- ksadk/server/static/assets/index-R52pJJvg.js +177 -0
- ksadk/server/static/assets/index-jJr3_955.css +2 -0
- ksadk/server/static/assets/info-J43DQDTF-WUx7qTde.js +1 -0
- ksadk/server/static/assets/{infoDiagram-5YYISTIA-BO_CSqq5.js → infoDiagram-5YYISTIA-BGVT7J_i.js} +1 -1
- ksadk/server/static/assets/{ishikawaDiagram-YF4QCWOH-eYLPLd46.js → ishikawaDiagram-YF4QCWOH-K0OOfVna.js} +1 -1
- ksadk/server/static/assets/{journeyDiagram-JHISSGLW-De9geSb0.js → journeyDiagram-JHISSGLW-8LeOJaZp.js} +1 -1
- ksadk/server/static/assets/{kanban-definition-UN3LZRKU-Cs80kQto.js → kanban-definition-UN3LZRKU-C6uCgZrW.js} +1 -1
- ksadk/server/static/assets/{katex-DSrCFD8n.js → katex-CYWseY5E.js} +1 -1
- ksadk/server/static/assets/{linear-CN9sbKTF.js → linear-hdBcYzM8.js} +1 -1
- ksadk/server/static/assets/{mermaid-parser.core-DlgSBU8l.js → mermaid-parser.core-BWrDjSZM.js} +2 -2
- ksadk/server/static/assets/{mindmap-definition-RKZ34NQL-9afz7Oug.js → mindmap-definition-RKZ34NQL-Bjy_2v4_.js} +1 -1
- ksadk/server/static/assets/packet-YPE3B663-BN13y_xl.js +1 -0
- ksadk/server/static/assets/pie-LRSECV5Y-ftSLXhhc.js +1 -0
- ksadk/server/static/assets/{pieDiagram-4H26LBE5-DPv_VstN.js → pieDiagram-4H26LBE5-GmmqNiVH.js} +1 -1
- ksadk/server/static/assets/{quadrantDiagram-W4KKPZXB-o77wZ1XK.js → quadrantDiagram-W4KKPZXB-BmkRbwCg.js} +1 -1
- ksadk/server/static/assets/radar-GUYGQ44K-jaICkIeO.js +1 -0
- ksadk/server/static/assets/{requirementDiagram-4Y6WPE33-BYVw81VC.js → requirementDiagram-4Y6WPE33-DSWFqL7c.js} +1 -1
- ksadk/server/static/assets/{sankeyDiagram-5OEKKPKP-B7nZFMKT.js → sankeyDiagram-5OEKKPKP-l6iXmU65.js} +1 -1
- ksadk/server/static/assets/{sequenceDiagram-3UESZ5HK-BGRRrFw5.js → sequenceDiagram-3UESZ5HK-Cq6UBeQB.js} +1 -1
- ksadk/server/static/assets/{stateDiagram-AJRCARHV-BUfHCoPs.js → stateDiagram-AJRCARHV-qzTQpg3Y.js} +1 -1
- ksadk/server/static/assets/stateDiagram-v2-BHNVJYJU-BYCoYGAN.js +1 -0
- ksadk/server/static/assets/{timeline-definition-PNZ67QCA-FbCTGrf9.js → timeline-definition-PNZ67QCA-DEz24vV0.js} +1 -1
- ksadk/server/static/assets/treeView-BLDUP644-Cpib_vlz.js +1 -0
- ksadk/server/static/assets/treemap-LRROVOQU-DQxfmVHK.js +1 -0
- ksadk/server/static/assets/{vennDiagram-CIIHVFJN-DWgwtPsJ.js → vennDiagram-CIIHVFJN-CMCixki2.js} +1 -1
- ksadk/server/static/assets/wardley-L42UT6IY-BQYHnnkU.js +1 -0
- ksadk/server/static/assets/{wardleyDiagram-YWT4CUSO-2x8G-tTM.js → wardleyDiagram-YWT4CUSO-CVzB8F9K.js} +1 -1
- ksadk/server/static/assets/{xychartDiagram-2RQKCTM6-Drma3AYl.js → xychartDiagram-2RQKCTM6-BFBqBLc1.js} +1 -1
- ksadk/server/static/index.html +2 -2
- ksadk/server/terminal_sessions.py +111 -58
- ksadk/sessions/__init__.py +69 -19
- ksadk/sessions/base.py +31 -11
- ksadk/sessions/continuity.py +2 -3
- ksadk/sessions/in_memory.py +46 -2
- ksadk/sessions/local_service.py +148 -17
- ksadk/sessions/postgres_service.py +143 -25
- ksadk/sessions/resilient.py +36 -8
- ksadk/skills/models.py +17 -5
- ksadk/skills/package_store.py +5 -2
- ksadk/skills/runtime/agent.py +20 -5
- ksadk/skills/runtime/artifacts.py +1 -5
- ksadk/skills/runtime/backends/e2b.py +10 -4
- ksadk/skills/runtime/backends/local.py +15 -3
- ksadk/skills/runtime/base.py +1 -2
- ksadk/skills/runtime/executor.py +10 -3
- ksadk/skills/runtime/factory.py +4 -2
- ksadk/skills/runtime/loader.py +1 -2
- ksadk/skills/runtime/registry.py +15 -10
- ksadk/skills/runtime/request.py +3 -1
- ksadk/skills/service_client.py +47 -16
- ksadk/skills/tool_defs.py +15 -10
- ksadk/studio/__init__.py +5 -0
- ksadk/studio/agent_avatar_assets.py +120 -0
- ksadk/studio/agent_lifecycle.py +51 -0
- ksadk/studio/api.py +1046 -0
- ksadk/studio/api_catalog_routes.py +324 -0
- ksadk/studio/api_contracts.py +177 -0
- ksadk/studio/api_helpers.py +132 -0
- ksadk/studio/authoring.py +524 -0
- ksadk/studio/authoring_coordinator.py +285 -0
- ksadk/studio/builder.py +320 -0
- ksadk/studio/capabilities.py +351 -0
- ksadk/studio/cloud.py +278 -0
- ksadk/studio/codex_agent_service.py +583 -0
- ksadk/studio/codex_builder.py +324 -0
- ksadk/studio/codex_manifest.py +278 -0
- ksadk/studio/codex_run.py +352 -0
- ksadk/studio/compiler.py +189 -0
- ksadk/studio/contracts.py +644 -0
- ksadk/studio/errors.py +47 -0
- ksadk/studio/evaluation.py +192 -0
- ksadk/studio/event_store.py +284 -0
- ksadk/studio/framework_run.py +114 -0
- ksadk/studio/identifiers.py +33 -0
- ksadk/studio/mcp_runtime.py +229 -0
- ksadk/studio/model_client.py +543 -0
- ksadk/studio/model_profile_service.py +214 -0
- ksadk/studio/operations.py +243 -0
- ksadk/studio/otel_trace.py +754 -0
- ksadk/studio/pagination.py +182 -0
- ksadk/studio/python_tool_inspection.py +183 -0
- ksadk/studio/repository.py +306 -0
- ksadk/studio/resource_catalog.py +1217 -0
- ksadk/studio/run_service.py +707 -0
- ksadk/studio/runtime_catalog.py +74 -0
- ksadk/studio/runtime_source.py +339 -0
- ksadk/studio/service.py +1141 -0
- ksadk/studio/shared_web.py +994 -0
- ksadk/studio/skill_discovery.py +628 -0
- ksadk/studio/static/assets/PrismRenderer-IYN-ffww.js +3 -0
- ksadk/studio/static/assets/index-CaEN0eTR.css +1 -0
- ksadk/studio/static/assets/index-DI2eY_NH.js +252 -0
- ksadk/studio/static/assets/react-vendor-BNmTiJ-I.js +9 -0
- ksadk/studio/static/assets/rolldown-runtime-hePW80VL.js +1 -0
- ksadk/studio/static/index.html +15 -0
- ksadk/studio/templates.py +630 -0
- ksadk/studio/validator.py +246 -0
- ksadk/studio/workspace.py +137 -0
- ksadk/terminal_exec_policy.py +3 -4
- ksadk/tools/gateway.py +101 -15
- ksadk/tools/result_budget.py +12 -4
- ksadk/toolsets/__init__.py +161 -37
- ksadk/toolsets/a2a.py +426 -0
- ksadk/toolsets/platform.py +21 -5
- ksadk/toolsets/sandbox.py +82 -16
- ksadk/toolsets/skills.py +200 -39
- ksadk/toolsets/web.py +123 -26
- ksadk/toolsets/workspace.py +212 -101
- ksadk/tracing/__init__.py +19 -21
- ksadk/tracing/exporters/inmemory_exporter.py +62 -51
- ksadk/tracing/setup.py +135 -506
- ksadk/tracing/span_utils.py +0 -41
- ksadk/tui/loop.py +78 -30
- ksadk/tui/stream_render.py +1 -0
- ksadk/ui_config.py +5 -3
- ksadk/version.py +1 -1
- ksadk_runtime_common/memory_backend/registry.py +56 -56
- ksadk_runtime_common/schemas/runtime_event_v1.json +95 -0
- ksadk_runtime_common/workspace_files/router.py +8 -2
- agentengine_sdk_python-0.7.0.dist-info/RECORD +0 -482
- ksadk/a2a/card_builder.py +0 -64
- ksadk/a2a/client.py +0 -309
- ksadk/runners/utils/langfuse.py +0 -230
- ksadk/server/static/assets/CodeBlock-P16VOLYi.js +0 -9
- ksadk/server/static/assets/MathMessageMarkdown-CdGiQWHR.js +0 -8
- ksadk/server/static/assets/MermaidBlock-IOcal8cm.js +0 -303
- ksadk/server/static/assets/NativeTerminalPanel-DGSDWsei.js +0 -1
- ksadk/server/static/assets/architecture-7EHR7CIX-BvUlsA6l.js +0 -1
- ksadk/server/static/assets/channel-CTuydARX.js +0 -1
- ksadk/server/static/assets/chunk-QZHKN3VN-BnCydivS.js +0 -1
- ksadk/server/static/assets/classDiagram-4FO5ZUOK-BNHg45Be.js +0 -1
- ksadk/server/static/assets/classDiagram-v2-Q7XG4LA2-BNHg45Be.js +0 -1
- ksadk/server/static/assets/eventmodeling-FCH6USID-DsAgWnlf.js +0 -1
- ksadk/server/static/assets/gitGraph-WXDBUCRP-BIao9Yjg.js +0 -1
- ksadk/server/static/assets/index-C00Lwg3L.js +0 -165
- ksadk/server/static/assets/index-DAURbCsP.css +0 -1
- ksadk/server/static/assets/info-J43DQDTF-CyipqGxU.js +0 -1
- ksadk/server/static/assets/packet-YPE3B663-CGkyRxlg.js +0 -1
- ksadk/server/static/assets/pie-LRSECV5Y-M0uWAf4n.js +0 -1
- ksadk/server/static/assets/radar-GUYGQ44K-Bdbm24-x.js +0 -1
- ksadk/server/static/assets/stateDiagram-v2-BHNVJYJU-8xBN_gLM.js +0 -1
- ksadk/server/static/assets/treeView-BLDUP644-npMo0ak1.js +0 -1
- ksadk/server/static/assets/treemap-LRROVOQU-CHdzrrdo.js +0 -1
- ksadk/server/static/assets/wardley-L42UT6IY-BEQz7wyy.js +0 -1
- ksadk/tracing/exporters/langfuse_exporter.py +0 -445
- {agentengine_sdk_python-0.7.0.dist-info → agentengine_sdk_python-0.8.1.dist-info}/entry_points.txt +0 -0
- {agentengine_sdk_python-0.7.0.dist-info → agentengine_sdk_python-0.8.1.dist-info}/licenses/LICENSE +0 -0
- {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.
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
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
|
-
|
|
46
|
-
|
|
47
|
-
|
|
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(
|
|
73
|
-
|
|
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=
|
|
78
|
-
help="Serverless
|
|
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(
|
|
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=
|
|
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(
|
|
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
|
|
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(
|
|
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(
|
|
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
|
-
|
|
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
|
-
|
|
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 =
|
|
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=
|
|
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(
|
|
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
|
-
|
|
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
|
-
|
|
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,
|
|
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
|
|
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=
|
|
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(
|
|
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(
|
|
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(
|
|
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(
|
|
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(
|
|
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=[
|
|
322
|
+
hints=[
|
|
323
|
+
"自动解析顺序: .agentengine.state -> agentengine.yaml/ksadk.yaml",
|
|
324
|
+
"请先执行 `agentengine agent list`。",
|
|
325
|
+
],
|
|
296
326
|
)
|
|
297
327
|
|
|
298
328
|
if resolved.source != "cli":
|