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.
- {agentengine_sdk_python-0.7.0.dist-info → agentengine_sdk_python-0.8.0.dist-info}/METADATA +36 -20
- agentengine_sdk_python-0.8.0.dist-info/RECORD +578 -0
- ksadk/a2a/__init__.py +178 -11
- ksadk/a2a/bootstrap.py +334 -0
- ksadk/a2a/card.py +120 -0
- ksadk/a2a/context_store.py +203 -0
- ksadk/a2a/control_plane.py +818 -0
- ksadk/a2a/credential.py +99 -0
- ksadk/a2a/event_adapter.py +149 -0
- ksadk/a2a/executor.py +406 -89
- 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 +105 -0
- ksadk/a2a/server.py +107 -60
- ksadk/a2a/space_client.py +1101 -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/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 +857 -0
- ksadk/agui/config.py +86 -0
- ksadk/agui/routes.py +55 -0
- ksadk/api/client.py +233 -191
- ksadk/builders/__init__.py +2 -0
- ksadk/builders/base.py +16 -14
- ksadk/builders/code_builder.py +318 -236
- ksadk/builders/container_builder.py +187 -167
- ksadk/builders/framework_requirements.py +29 -11
- ksadk/builders/ks3_uploader.py +58 -27
- ksadk/builders/managed_runtime_builder.py +145 -0
- ksadk/builders/mcp_builder.py +91 -92
- ksadk/builders/requirements_utils.py +1 -5
- ksadk/cli/__init__.py +89 -171
- ksadk/cli/cmd_a2a.py +254 -70
- 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 +500 -720
- ksadk/cli/cmd_dashboard.py +120 -45
- ksadk/cli/cmd_deploy.py +117 -58
- ksadk/cli/cmd_destroy.py +44 -14
- ksadk/cli/cmd_files.py +63 -24
- ksadk/cli/cmd_hermes.py +168 -89
- ksadk/cli/cmd_invoke.py +184 -122
- ksadk/cli/cmd_launch.py +64 -28
- ksadk/cli/cmd_mcp.py +98 -64
- ksadk/cli/cmd_model.py +14 -5
- ksadk/cli/cmd_openclaw.py +483 -227
- ksadk/cli/cmd_replay.py +71 -0
- ksadk/cli/cmd_run.py +33 -10
- ksadk/cli/cmd_status.py +80 -31
- ksadk/cli/cmd_version.py +20 -13
- ksadk/cli/cmd_web.py +89 -13
- ksadk/cli/deploy_utils.py +20 -20
- ksadk/cli/dry_run.py +5 -3
- ksadk/cli/error_utils.py +37 -12
- ksadk/cli/global_options.py +1 -2
- ksadk/cli/local_runtime.py +1 -2
- ksadk/cli/model_catalog.py +6 -2
- ksadk/cli/network_options.py +34 -14
- ksadk/cli/resource_common.py +6 -2
- ksadk/cli/storage.py +0 -1
- ksadk/cli/ui.py +5 -3
- ksadk/cli/workflow_common.py +51 -17
- ksadk/codex/__init__.py +12 -0
- ksadk/codex/client.py +408 -0
- ksadk/codex/phase.py +143 -0
- ksadk/codex/runtime.py +449 -0
- ksadk/common/aicp_env.py +0 -1
- ksadk/common/auth.py +2 -2
- ksadk/common/constants.py +1 -3
- 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 -12
- ksadk/configs/env_registry.py +500 -100
- ksadk/configs/global_config.py +2 -1
- ksadk/configs/settings.py +151 -124
- ksadk/conversations/__init__.py +7 -5
- 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 +652 -0
- ksadk/conversations/runtime_invocation.py +395 -0
- ksadk/conversations/runtime_metadata.py +475 -0
- ksadk/conversations/runtime_observability.py +355 -0
- ksadk/conversations/runtime_payloads.py +272 -0
- ksadk/conversations/runtime_persistence.py +440 -0
- ksadk/conversations/runtime_preparation.py +418 -0
- ksadk/conversations/runtime_resume.py +816 -0
- ksadk/conversations/runtime_stream_events.py +902 -0
- ksadk/conversations/runtime_streaming.py +547 -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/manager.py +63 -65
- ksadk/deployment/providers/serverless.py +309 -202
- 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/events/__init__.py +25 -0
- ksadk/events/parser.py +191 -0
- ksadk/events/replay.py +37 -0
- ksadk/events/runtime_event.py +264 -0
- ksadk/events/store.py +317 -0
- ksadk/harness/__init__.py +34 -0
- ksadk/harness/app.py +278 -0
- ksadk/harness/config.py +181 -0
- ksadk/harness/reasoner.py +105 -0
- ksadk/harness/runner.py +211 -0
- ksadk/harness/sandbox.py +141 -0
- ksadk/harness/tools.py +222 -0
- ksadk/hermes_terminal.py +23 -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 +23 -29
- ksadk/managed_runtime.py +188 -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 +26 -33
- ksadk/memory/adk/long_term_memory.py +31 -35
- 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 +10 -8
- 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 +45 -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 +173 -0
- ksadk/model_proxy/protocol_proxy.py +22 -0
- ksadk/model_proxy/server.py +300 -0
- ksadk/model_proxy/transform.py +691 -0
- ksadk/openclaw_gateway.py +29 -14
- ksadk/runners/adk_runner.py +345 -120
- ksadk/runners/base_runner.py +46 -29
- ksadk/runners/codex_runner.py +132 -0
- ksadk/runners/deepagents_runner.py +0 -1
- ksadk/runners/factory.py +17 -5
- ksadk/runners/langchain_runner.py +29 -742
- ksadk/runners/langgraph_runner.py +352 -90
- ksadk/runners/patch_langchain.py +16 -16
- ksadk/runners/remote_runner.py +134 -33
- ksadk/runners/usage_accumulator.py +1 -0
- ksadk/runners/utils/langfuse.py +3 -3
- ksadk/runners/utils/loader.py +7 -7
- ksadk/runtime/__init__.py +41 -0
- ksadk/runtime/adapter.py +345 -0
- ksadk/runtime/framework_adapters.py +124 -0
- ksadk/runtime/preprocessing.py +118 -0
- ksadk/runtime/runner_adapter.py +873 -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/api_models.py +15 -5
- ksadk/server/app.py +455 -3885
- ksadk/server/composition.py +21 -0
- ksadk/server/factory.py +624 -0
- ksadk/server/routes/__init__.py +1 -0
- ksadk/server/routes/checkpoint_resolution.py +116 -0
- ksadk/server/routes/common.py +713 -0
- ksadk/server/routes/control.py +327 -0
- ksadk/server/routes/dependencies.py +98 -0
- ksadk/server/routes/misc.py +448 -0
- ksadk/server/routes/models.py +443 -0
- ksadk/server/routes/openai_compat.py +207 -0
- ksadk/server/routes/projection.py +795 -0
- ksadk/server/routes/routers.py +52 -0
- ksadk/server/routes/run.py +726 -0
- ksadk/server/routes/sessions.py +649 -0
- ksadk/server/routes/streaming.py +223 -0
- ksadk/server/routes/workspace.py +381 -0
- ksadk/server/static/assets/{ArtifactsPanel-D-SSn2ee.js → ArtifactsPanel-Cjnqt-8W.js} +1 -1
- ksadk/server/static/assets/CodeBlock-BqyqZfuB.js +9 -0
- ksadk/server/static/assets/MathMessageMarkdown-BpH7jiFM.js +8 -0
- ksadk/server/static/assets/MermaidBlock-DWuxETaJ.js +303 -0
- ksadk/server/static/assets/NativeTerminalPanel-MDTopWMO.js +1 -0
- ksadk/server/static/assets/{arc-BA13sHc9.js → arc-CFKwSk_B.js} +1 -1
- ksadk/server/static/assets/architecture-7EHR7CIX-CynqOWjZ.js +1 -0
- ksadk/server/static/assets/{architectureDiagram-3BPJPVTR-DzJzgVoL.js → architectureDiagram-3BPJPVTR-Dej8jX8c.js} +1 -1
- ksadk/server/static/assets/{blockDiagram-GPEHLZMM-UTdVcZhn.js → blockDiagram-GPEHLZMM-1F64jqvy.js} +1 -1
- ksadk/server/static/assets/{c4Diagram-AAUBKEIU-Dix0GD4m.js → c4Diagram-AAUBKEIU-9q7AUAKb.js} +1 -1
- ksadk/server/static/assets/channel-iUGv2N24.js +1 -0
- ksadk/server/static/assets/{chunk-2J33WTMH-C2JxuZ42.js → chunk-2J33WTMH-6qgwJm7Q.js} +1 -1
- ksadk/server/static/assets/{chunk-4BX2VUAB-Be57QPgD.js → chunk-4BX2VUAB-CsWIQRhc.js} +1 -1
- ksadk/server/static/assets/{chunk-55IACEB6-WjSuy4nv.js → chunk-55IACEB6-BK8paA20.js} +1 -1
- ksadk/server/static/assets/{chunk-727SXJPM-BOovP-b5.js → chunk-727SXJPM-B-JEhy7h.js} +1 -1
- ksadk/server/static/assets/{chunk-AQP2D5EJ-DOmZNmWj.js → chunk-AQP2D5EJ-DYBvMHAa.js} +1 -1
- ksadk/server/static/assets/{chunk-FMBD7UC4-DzwlodkU.js → chunk-FMBD7UC4-BGhvzDYt.js} +1 -1
- ksadk/server/static/assets/{chunk-ND2GUHAM-DMqAikEU.js → chunk-ND2GUHAM-D98vPd-E.js} +1 -1
- ksadk/server/static/assets/chunk-QZHKN3VN-YQIEXeF6.js +1 -0
- ksadk/server/static/assets/classDiagram-4FO5ZUOK-CDAUuoXK.js +1 -0
- ksadk/server/static/assets/classDiagram-v2-Q7XG4LA2-CDAUuoXK.js +1 -0
- ksadk/server/static/assets/{cose-bilkent-S5V4N54A-Zhy2GBnP.js → cose-bilkent-S5V4N54A-CX3yotHq.js} +1 -1
- ksadk/server/static/assets/{dagre-BM42HDAG-CbKrtIUz.js → dagre-BM42HDAG-C7TguAWo.js} +1 -1
- ksadk/server/static/assets/{diagram-2AECGRRQ-BRApgQRK.js → diagram-2AECGRRQ-Dd17_kws.js} +1 -1
- ksadk/server/static/assets/{diagram-5GNKFQAL-D0xbnDiK.js → diagram-5GNKFQAL-DVIClIil.js} +1 -1
- ksadk/server/static/assets/{diagram-KO2AKTUF-CVugVI9L.js → diagram-KO2AKTUF-Df_3gYQa.js} +1 -1
- ksadk/server/static/assets/{diagram-LMA3HP47-DozUGgee.js → diagram-LMA3HP47-BhLk6ZtA.js} +1 -1
- ksadk/server/static/assets/{diagram-OG6HWLK6-ZOYsKlru.js → diagram-OG6HWLK6-D4GNGvuu.js} +1 -1
- ksadk/server/static/assets/{dist-DmFaq_Iy.js → dist-6CVKuTAe.js} +1 -1
- ksadk/server/static/assets/{dist-8EEyGgDx.js → dist-BUHRxvDG.js} +1 -1
- ksadk/server/static/assets/{dist-B0NP_Z0z.js → dist-BZ9n9AjO.js} +1 -1
- ksadk/server/static/assets/{dist-DMezvBGJ.js → dist-BibcG1V9.js} +1 -1
- ksadk/server/static/assets/{dist-C3HIIaN5.js → dist-Bs-jQcRX.js} +1 -1
- ksadk/server/static/assets/{dist-BrCcQ47T.js → dist-C2xjE7cO.js} +1 -1
- ksadk/server/static/assets/{dist-Dp0k7bWI.js → dist-C7-3jInC.js} +1 -1
- ksadk/server/static/assets/{dist-D-xOD048.js → dist-C99THtIA.js} +1 -1
- ksadk/server/static/assets/{dist-CkEKJFtk.js → dist-CGcp2ex8.js} +1 -1
- ksadk/server/static/assets/{dist-DyOkZmze.js → dist-CVQRZjPu.js} +1 -1
- ksadk/server/static/assets/{dist-BssVmjIo.js → dist-Cf23NY4L.js} +1 -1
- ksadk/server/static/assets/{dist-BIJVDMuB.js → dist-CgF3fj15.js} +1 -1
- ksadk/server/static/assets/{dist-2hInLS_J.js → dist-Cwt7koer.js} +1 -1
- ksadk/server/static/assets/{dist-DyWsb78Q.js → dist-D82mtD2s.js} +1 -1
- ksadk/server/static/assets/{dist-D-JMdWPQ.js → dist-DF06ORQo.js} +1 -1
- ksadk/server/static/assets/{dist-BmlMPsCc.js → dist-DHn6nBzr.js} +1 -1
- ksadk/server/static/assets/{dist-gX6GOLKq.js → dist-Djgl2wVZ.js} +1 -1
- ksadk/server/static/assets/{dist-DpKtt4Bo.js → dist-DlzCRy0S.js} +1 -1
- ksadk/server/static/assets/{dist-8_SfK1IP.js → dist-DqNnNFrw.js} +1 -1
- ksadk/server/static/assets/{dist-D57wnGWd.js → dist-DyvYLMW9.js} +1 -1
- ksadk/server/static/assets/{dist-CPBtqRTW.js → dist-eoW6tZXA.js} +1 -1
- ksadk/server/static/assets/{dist-DL_NKc_z.js → dist-ivOya1LD.js} +1 -1
- ksadk/server/static/assets/{erDiagram-TEJ5UH35-Bk-9bgE5.js → erDiagram-TEJ5UH35-CnfRcY2M.js} +1 -1
- ksadk/server/static/assets/eventmodeling-FCH6USID-ChYO-ijM.js +1 -0
- ksadk/server/static/assets/{flowDiagram-I6XJVG4X-Dn9kZVuZ.js → flowDiagram-I6XJVG4X-DGaJjGNJ.js} +1 -1
- ksadk/server/static/assets/{ganttDiagram-6RSMTGT7-BGxXlJqm.js → ganttDiagram-6RSMTGT7-DpCoB2g9.js} +1 -1
- ksadk/server/static/assets/gitGraph-WXDBUCRP-BN_0Fk-j.js +1 -0
- ksadk/server/static/assets/{gitGraphDiagram-PVQCEYII-C7Q0X-wi.js → gitGraphDiagram-PVQCEYII-9IKVFBVT.js} +1 -1
- ksadk/server/static/assets/index-QSwCHuB8.js +177 -0
- ksadk/server/static/assets/index-jOPmTOZH.css +2 -0
- ksadk/server/static/assets/info-J43DQDTF-Cp6o3vId.js +1 -0
- ksadk/server/static/assets/{infoDiagram-5YYISTIA-BO_CSqq5.js → infoDiagram-5YYISTIA-CYIIsb8y.js} +1 -1
- ksadk/server/static/assets/{ishikawaDiagram-YF4QCWOH-eYLPLd46.js → ishikawaDiagram-YF4QCWOH-DLOHGvWw.js} +1 -1
- ksadk/server/static/assets/{journeyDiagram-JHISSGLW-De9geSb0.js → journeyDiagram-JHISSGLW-BIzKeejT.js} +1 -1
- ksadk/server/static/assets/{kanban-definition-UN3LZRKU-Cs80kQto.js → kanban-definition-UN3LZRKU-BWHoFSw2.js} +1 -1
- ksadk/server/static/assets/{katex-DSrCFD8n.js → katex-DATssjp1.js} +1 -1
- ksadk/server/static/assets/{linear-CN9sbKTF.js → linear-CvMBw9cA.js} +1 -1
- ksadk/server/static/assets/{mermaid-parser.core-DlgSBU8l.js → mermaid-parser.core-mGAcEwcq.js} +2 -2
- ksadk/server/static/assets/{mindmap-definition-RKZ34NQL-9afz7Oug.js → mindmap-definition-RKZ34NQL-CSAQxEAe.js} +1 -1
- ksadk/server/static/assets/packet-YPE3B663-wQzct3cT.js +1 -0
- ksadk/server/static/assets/pie-LRSECV5Y-BgTQiv-9.js +1 -0
- ksadk/server/static/assets/{pieDiagram-4H26LBE5-DPv_VstN.js → pieDiagram-4H26LBE5-By-ra07M.js} +1 -1
- ksadk/server/static/assets/{quadrantDiagram-W4KKPZXB-o77wZ1XK.js → quadrantDiagram-W4KKPZXB-CxIR4JXI.js} +1 -1
- ksadk/server/static/assets/radar-GUYGQ44K-BIq5fXsn.js +1 -0
- ksadk/server/static/assets/{requirementDiagram-4Y6WPE33-BYVw81VC.js → requirementDiagram-4Y6WPE33-DpW90iu3.js} +1 -1
- ksadk/server/static/assets/{sankeyDiagram-5OEKKPKP-B7nZFMKT.js → sankeyDiagram-5OEKKPKP-DpGa6EAV.js} +1 -1
- ksadk/server/static/assets/{sequenceDiagram-3UESZ5HK-BGRRrFw5.js → sequenceDiagram-3UESZ5HK-NTKNGGe5.js} +1 -1
- ksadk/server/static/assets/{stateDiagram-AJRCARHV-BUfHCoPs.js → stateDiagram-AJRCARHV-DGpd9yFG.js} +1 -1
- ksadk/server/static/assets/stateDiagram-v2-BHNVJYJU-B3o579IQ.js +1 -0
- ksadk/server/static/assets/{timeline-definition-PNZ67QCA-FbCTGrf9.js → timeline-definition-PNZ67QCA-jqoYs3jQ.js} +1 -1
- ksadk/server/static/assets/treeView-BLDUP644-Dqi-E0EM.js +1 -0
- ksadk/server/static/assets/treemap-LRROVOQU-ClQP9CJ9.js +1 -0
- ksadk/server/static/assets/{vennDiagram-CIIHVFJN-DWgwtPsJ.js → vennDiagram-CIIHVFJN-l3Z7-wbP.js} +1 -1
- ksadk/server/static/assets/wardley-L42UT6IY-8XLvnNIs.js +1 -0
- ksadk/server/static/assets/{wardleyDiagram-YWT4CUSO-2x8G-tTM.js → wardleyDiagram-YWT4CUSO-BR54GPmr.js} +1 -1
- ksadk/server/static/assets/{xychartDiagram-2RQKCTM6-Drma3AYl.js → xychartDiagram-2RQKCTM6-SkiH8GsK.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 +38 -17
- ksadk/skills/tool_defs.py +15 -10
- ksadk/terminal_exec_policy.py +3 -4
- ksadk/tools/gateway.py +92 -15
- ksadk/tools/result_budget.py +12 -4
- ksadk/toolsets/__init__.py +134 -36
- 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/exporters/inmemory_exporter.py +62 -51
- ksadk/tracing/exporters/langfuse_exporter.py +91 -76
- ksadk/tracing/setup.py +69 -53
- ksadk/tracing/span_utils.py +5 -2
- 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/schemas/runtime_event_v1.json +95 -0
- agentengine_sdk_python-0.7.0.dist-info/RECORD +0 -482
- 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
- {agentengine_sdk_python-0.7.0.dist-info → agentengine_sdk_python-0.8.0.dist-info}/WHEEL +0 -0
- {agentengine_sdk_python-0.7.0.dist-info → agentengine_sdk_python-0.8.0.dist-info}/entry_points.txt +0 -0
- {agentengine_sdk_python-0.7.0.dist-info → agentengine_sdk_python-0.8.0.dist-info}/licenses/LICENSE +0 -0
- {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.
|
|
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,29 @@ 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
|
+
"--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=
|
|
78
|
-
help="Serverless
|
|
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(
|
|
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=
|
|
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(
|
|
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
|
|
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(
|
|
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(
|
|
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
|
-
|
|
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 =
|
|
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=
|
|
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(
|
|
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
|
-
|
|
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
|
-
|
|
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,
|
|
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":
|