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_replay.py
ADDED
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
# -*- coding: utf-8 -*-
|
|
2
|
+
"""ksadk replay — 基于 RuntimeEvent store + session 级订阅的历史回放 (goal-16)。
|
|
3
|
+
|
|
4
|
+
CLI 是消费 RuntimeAdapter/RuntimeEvent 的薄壳(不含 runtime 逻辑):replay 复用 goal-10
|
|
5
|
+
``RuntimeEventStore`` 与 goal-12 共享 parser/replay,把某 session 的 RuntimeEvent 历史
|
|
6
|
+
回放为确定性 transcript(text/reasoning/tool/artifact/run + a2ui/a2a extras)。
|
|
7
|
+
|
|
8
|
+
注:回放的是经 RuntimeEvent 持久化的新事件模型(带 runtime marker);legacy SessionEvent
|
|
9
|
+
(旧 assistant_message 等)不在本模型内,不回放。
|
|
10
|
+
"""
|
|
11
|
+
|
|
12
|
+
from __future__ import annotations
|
|
13
|
+
|
|
14
|
+
import asyncio
|
|
15
|
+
import json
|
|
16
|
+
|
|
17
|
+
import click
|
|
18
|
+
|
|
19
|
+
from ksadk.cli.resource_common import CONTEXT_SETTINGS
|
|
20
|
+
from ksadk.events.replay import replay_transcript
|
|
21
|
+
from ksadk.events.store import RuntimeEventStore
|
|
22
|
+
|
|
23
|
+
_HELP = dict(help_option_names=["-h", "--help"])
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
@click.command(
|
|
27
|
+
"replay", context_settings=CONTEXT_SETTINGS, help="回放某 session 的 RuntimeEvent 历史"
|
|
28
|
+
)
|
|
29
|
+
@click.argument("session_id")
|
|
30
|
+
@click.option(
|
|
31
|
+
"--after-seq-id", default=0, show_default=True, type=int, help="从该 seq cursor 之后回放"
|
|
32
|
+
)
|
|
33
|
+
@click.option("--before-seq-id", default=None, type=int, help="回放上界(不含该 seq)")
|
|
34
|
+
@click.option(
|
|
35
|
+
"--format", "fmt", type=click.Choice(["json", "text"]), default="text", show_default=True
|
|
36
|
+
)
|
|
37
|
+
def replay(session_id: str, after_seq_id: int, before_seq_id: int | None, fmt: str):
|
|
38
|
+
"""回放 session 的 RuntimeEvent 历史(text/reasoning/tool/artifact/run)。"""
|
|
39
|
+
asyncio.run(_run(session_id, after_seq_id=after_seq_id, before_seq_id=before_seq_id, fmt=fmt))
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
async def _run(session_id: str, *, after_seq_id: int, before_seq_id: int | None, fmt: str) -> None:
|
|
43
|
+
from ksadk.sessions import resolve_session_service
|
|
44
|
+
|
|
45
|
+
store = RuntimeEventStore(resolve_session_service())
|
|
46
|
+
parser = await replay_transcript(
|
|
47
|
+
store, session_id, after_seq_id=after_seq_id, before_seq_id=before_seq_id
|
|
48
|
+
)
|
|
49
|
+
transcript = parser.transcript()
|
|
50
|
+
if fmt == "json":
|
|
51
|
+
click.echo(json.dumps(transcript, ensure_ascii=False, sort_keys=True))
|
|
52
|
+
return
|
|
53
|
+
|
|
54
|
+
items = transcript["items"]
|
|
55
|
+
if not items and not transcript["extras"]:
|
|
56
|
+
click.echo(f"session {session_id} 无 RuntimeEvent 历史(或该 session 未经新事件模型持久化)")
|
|
57
|
+
return
|
|
58
|
+
for item in items:
|
|
59
|
+
kind = item.get("kind")
|
|
60
|
+
if kind in ("text", "reasoning"):
|
|
61
|
+
marker = "▍final" if item.get("final") else "▍delta"
|
|
62
|
+
click.echo(f"[{kind}/{item.get('phase')}] {marker} {item.get('text')}")
|
|
63
|
+
elif kind == "tool_call":
|
|
64
|
+
done = "✓" if item.get("done") else "…"
|
|
65
|
+
click.echo(f"[tool] {done} {item.get('name')} ({item.get('call_id')})")
|
|
66
|
+
elif kind == "artifact":
|
|
67
|
+
click.echo(f"[artifact] {item.get('name')} v{item.get('version')}")
|
|
68
|
+
for inv, status in transcript["run_status"].items():
|
|
69
|
+
click.echo(f"[run] {inv}: {status}")
|
|
70
|
+
for extra in transcript["extras"]:
|
|
71
|
+
click.echo(f"[{extra['event_type']}] {json.dumps(extra['payload'], ensure_ascii=False)}")
|
ksadk/cli/cmd_run.py
CHANGED
|
@@ -5,12 +5,13 @@ ksadk run - 本地运行 Agent
|
|
|
5
5
|
对于 LangChain/LangGraph/DeepAgents 项目,使用自己的实现
|
|
6
6
|
"""
|
|
7
7
|
|
|
8
|
-
import
|
|
9
|
-
import asyncio
|
|
8
|
+
import os
|
|
10
9
|
import subprocess
|
|
11
10
|
import sys
|
|
12
|
-
import os
|
|
13
11
|
from pathlib import Path
|
|
12
|
+
|
|
13
|
+
import click
|
|
14
|
+
|
|
14
15
|
from ksadk.cli.error_utils import ensure_json_output_supported, print_exception
|
|
15
16
|
from ksadk.cli.local_runtime import reexec_with_project_venv_if_needed
|
|
16
17
|
from ksadk.cli.ui import (
|
|
@@ -38,16 +39,28 @@ from ksadk.cli.ui import (
|
|
|
38
39
|
is_flag=True,
|
|
39
40
|
help="兼容参数;TUI 已默认使用 inline viewport 并保留终端 scrollback",
|
|
40
41
|
)
|
|
41
|
-
def run(
|
|
42
|
+
def run(
|
|
43
|
+
agent_dir: str,
|
|
44
|
+
port: int,
|
|
45
|
+
interactive: bool,
|
|
46
|
+
no_trace: bool,
|
|
47
|
+
model: str,
|
|
48
|
+
show_thinking: bool,
|
|
49
|
+
no_stream: bool,
|
|
50
|
+
no_alt_screen: bool,
|
|
51
|
+
):
|
|
42
52
|
"""运行 Agent (支持 LangChain / LangGraph / DeepAgents / ADK)
|
|
43
53
|
|
|
44
54
|
AGENT_DIR: Agent 项目目录 (默认: 当前目录)
|
|
45
55
|
"""
|
|
46
56
|
ensure_json_output_supported(
|
|
47
57
|
"agentengine run",
|
|
48
|
-
suggestion=
|
|
58
|
+
suggestion=(
|
|
59
|
+
"请改用 `agentengine agent status --output json` 或 "
|
|
60
|
+
"`agentengine build --output json` 获取结构化信息。"
|
|
61
|
+
),
|
|
49
62
|
)
|
|
50
|
-
from ksadk.detection import FrameworkDetector
|
|
63
|
+
from ksadk.detection import FrameworkDetector
|
|
51
64
|
|
|
52
65
|
agent_path = Path(agent_dir).resolve()
|
|
53
66
|
command_args = ["run", str(agent_path), "--port", str(port)]
|
|
@@ -91,7 +104,7 @@ def run(agent_dir: str, port: int, interactive: bool, no_trace: bool, model: str
|
|
|
91
104
|
"langchain": "LangChain",
|
|
92
105
|
"langgraph": "LangGraph",
|
|
93
106
|
"deepagents": "DeepAgents",
|
|
94
|
-
"unknown": "Unknown"
|
|
107
|
+
"unknown": "Unknown",
|
|
95
108
|
}
|
|
96
109
|
framework_name = framework_map.get(result.type.value, result.type.value)
|
|
97
110
|
|
|
@@ -99,10 +112,16 @@ def run(agent_dir: str, port: int, interactive: bool, no_trace: bool, model: str
|
|
|
99
112
|
print_kv("Agent 名称", str(result.name))
|
|
100
113
|
print_kv("入口点", str(result.entry_point))
|
|
101
114
|
|
|
115
|
+
from ksadk.cli.cmd_web import configure_local_runtime_persistence
|
|
116
|
+
|
|
117
|
+
configure_local_runtime_persistence(agent_path, result.type.value)
|
|
118
|
+
|
|
102
119
|
# 2. 根据框架类型选择处理方式
|
|
103
120
|
# 所有框架统一使用 _run_custom() 以支持 Langfuse 自动插桩
|
|
104
121
|
# (Langfuse instrumentation 需要在同一进程内生效)
|
|
105
|
-
_run_custom(
|
|
122
|
+
_run_custom(
|
|
123
|
+
result, agent_path, port, interactive, no_trace, show_thinking, no_stream, no_alt_screen
|
|
124
|
+
)
|
|
106
125
|
|
|
107
126
|
|
|
108
127
|
def _run_adk_cli(agent_path: Path, port: int = 8080, command: str = "run"):
|
|
@@ -178,9 +197,10 @@ def _run_custom(
|
|
|
178
197
|
# 初始化 Tracing
|
|
179
198
|
if not no_trace:
|
|
180
199
|
try:
|
|
181
|
-
from ksadk.tracing import setup_tracing
|
|
182
200
|
import os
|
|
183
201
|
|
|
202
|
+
from ksadk.tracing import setup_tracing
|
|
203
|
+
|
|
184
204
|
has_langfuse = bool(os.getenv("LANGFUSE_PUBLIC_KEY"))
|
|
185
205
|
has_otlp = bool(
|
|
186
206
|
os.getenv("OTEL_EXPORTER_OTLP_ENDPOINT")
|
|
@@ -203,7 +223,9 @@ def _run_custom(
|
|
|
203
223
|
if has_otlp:
|
|
204
224
|
print_info("Tracing: Enabled (InMemory + OTLP HTTP)")
|
|
205
225
|
elif has_langfuse:
|
|
206
|
-
print_info(
|
|
226
|
+
print_info(
|
|
227
|
+
f"Tracing: Enabled (InMemory + Langfuse, CallbackOnly={use_callback_only})"
|
|
228
|
+
)
|
|
207
229
|
else:
|
|
208
230
|
print_info("Tracing: Enabled")
|
|
209
231
|
except Exception as e:
|
|
@@ -225,6 +247,7 @@ def _run_custom(
|
|
|
225
247
|
if interactive:
|
|
226
248
|
# TUI 交互模式
|
|
227
249
|
from ksadk.tui.loop import run_tui
|
|
250
|
+
|
|
228
251
|
run_tui(
|
|
229
252
|
runner,
|
|
230
253
|
show_thinking=show_thinking,
|
ksadk/cli/cmd_status.py
CHANGED
|
@@ -4,15 +4,17 @@ agentengine status - 查看 Agent 运行状态和 Endpoint
|
|
|
4
4
|
支持 watch 模式实时刷新
|
|
5
5
|
"""
|
|
6
6
|
|
|
7
|
-
import click
|
|
8
7
|
import asyncio
|
|
9
8
|
import time
|
|
10
|
-
from pathlib import Path
|
|
11
9
|
from datetime import datetime
|
|
10
|
+
from pathlib import Path
|
|
12
11
|
from typing import Sequence
|
|
12
|
+
|
|
13
|
+
import click
|
|
14
|
+
|
|
13
15
|
from ksadk.api.client import DryRunExit
|
|
14
16
|
from ksadk.cli.agent_ref import merge_agent_inputs, resolve_agent_ref
|
|
15
|
-
from ksadk.cli.dry_run import dry_run_option,
|
|
17
|
+
from ksadk.cli.dry_run import dry_run_option, effective_dry_run, run_async_with_dry_run
|
|
16
18
|
from ksadk.cli.error_utils import print_exception, resolution_error, usage_error
|
|
17
19
|
from ksadk.cli.resource_common import (
|
|
18
20
|
CONTEXT_SETTINGS,
|
|
@@ -24,14 +26,10 @@ from ksadk.cli.resource_common import (
|
|
|
24
26
|
from ksadk.cli.ui import (
|
|
25
27
|
get_console,
|
|
26
28
|
is_json_output,
|
|
27
|
-
print_error,
|
|
28
29
|
print_info,
|
|
29
|
-
|
|
30
|
-
print_title,
|
|
31
|
-
print_warn,
|
|
30
|
+
replica_rich_style,
|
|
32
31
|
status_click_color,
|
|
33
32
|
status_rich_style,
|
|
34
|
-
replica_rich_style,
|
|
35
33
|
summary_panel,
|
|
36
34
|
)
|
|
37
35
|
|
|
@@ -55,7 +53,9 @@ AGENT_LIST_HIDDEN_FRAMEWORK_LABELS = {
|
|
|
55
53
|
@click.option("--watch", "-w", is_flag=True, help="Watch 模式,持续刷新")
|
|
56
54
|
@click.option("--interval", "-i", default=2, help="Watch 刷新间隔 (秒)")
|
|
57
55
|
@click.option("--region", "-r", default="cn-beijing-6", envvar="KSYUN_REGION", help="区域")
|
|
58
|
-
@click.option(
|
|
56
|
+
@click.option(
|
|
57
|
+
"--account-id", envvar="KSYUN_ACCOUNT_ID", help="金山云账号 ID(可选;未设置时从 AK/SK 反查)"
|
|
58
|
+
)
|
|
59
59
|
@dry_run_option()
|
|
60
60
|
def status(
|
|
61
61
|
agent_ref: str,
|
|
@@ -125,9 +125,12 @@ def run_status_command(
|
|
|
125
125
|
if not resolved:
|
|
126
126
|
raise resolution_error(
|
|
127
127
|
"请指定 Agent(--agent 或位置参数),或在当前目录提供可解析的本地配置",
|
|
128
|
-
hints=[
|
|
128
|
+
hints=[
|
|
129
|
+
"自动解析顺序: .agentengine.state -> agentengine.yaml/ksadk.yaml",
|
|
130
|
+
"请先执行 `agentengine agent list`。",
|
|
131
|
+
],
|
|
129
132
|
)
|
|
130
|
-
agent = resolved.value
|
|
133
|
+
agent = str(resolved.value)
|
|
131
134
|
if resolved.source != "cli":
|
|
132
135
|
print_info(f"未显式指定 Agent,使用 {resolved.source_text}: {agent}")
|
|
133
136
|
|
|
@@ -136,23 +139,34 @@ def run_status_command(
|
|
|
136
139
|
if watch and dry_run:
|
|
137
140
|
raise usage_error("Watch 模式不支持 dry-run,请去掉 --watch 或取消 dry-run。")
|
|
138
141
|
if watch and is_json_output():
|
|
139
|
-
raise usage_error(
|
|
142
|
+
raise usage_error(
|
|
143
|
+
"Watch 模式不支持 `--output json`。",
|
|
144
|
+
hints=["请去掉 `--watch` 或改用 `agentengine agent status --output json`。"],
|
|
145
|
+
)
|
|
140
146
|
|
|
141
147
|
# Dry Run 模式由 AgentEngineClient 处理
|
|
142
148
|
# 只要传入 dry_run=True,底层 client 会抛出 DryRunExit 异常
|
|
143
149
|
|
|
150
|
+
resolved_account_id = account_id or ""
|
|
144
151
|
if show_all:
|
|
145
152
|
run_async_with_dry_run(
|
|
146
|
-
_list_all_agents(
|
|
153
|
+
_list_all_agents(
|
|
154
|
+
region,
|
|
155
|
+
resolved_account_id,
|
|
156
|
+
dry_run,
|
|
157
|
+
page=page,
|
|
158
|
+
size=size,
|
|
159
|
+
framework=framework,
|
|
160
|
+
),
|
|
147
161
|
dry_run=dry_run,
|
|
148
162
|
dry_run_resource="agent",
|
|
149
163
|
dry_run_action="list",
|
|
150
164
|
)
|
|
151
165
|
elif watch:
|
|
152
|
-
_watch_status(agent, region,
|
|
166
|
+
_watch_status(str(agent), region, resolved_account_id, interval)
|
|
153
167
|
else:
|
|
154
168
|
run_async_with_dry_run(
|
|
155
|
-
_show_agent_status(agent, region,
|
|
169
|
+
_show_agent_status(str(agent), region, resolved_account_id, dry_run),
|
|
156
170
|
dry_run=dry_run,
|
|
157
171
|
dry_run_resource="agent",
|
|
158
172
|
dry_run_action="status",
|
|
@@ -170,7 +184,7 @@ def _watch_status(agent: str, region: str, account_id: str, interval: int):
|
|
|
170
184
|
click.clear()
|
|
171
185
|
|
|
172
186
|
# 显示标题
|
|
173
|
-
click.secho(
|
|
187
|
+
click.secho("Agent Status Monitor", fg="blue", bold=True)
|
|
174
188
|
click.echo(f" Agent: {agent}")
|
|
175
189
|
click.echo(f" Region: {region}")
|
|
176
190
|
click.echo(f" 更新时间: {datetime.now().strftime('%H:%M:%S')}")
|
|
@@ -205,7 +219,9 @@ async def _show_agent_status(
|
|
|
205
219
|
# 先按 ID 查询,失败后再按名称查询,避免依赖字符串前缀判断。
|
|
206
220
|
result = await _get_agent_runtime(agent, region, account_id, dry_run, is_name=False)
|
|
207
221
|
if result.get("status") == "Error":
|
|
208
|
-
result_by_name = await _get_agent_runtime(
|
|
222
|
+
result_by_name = await _get_agent_runtime(
|
|
223
|
+
agent, region, account_id, dry_run, is_name=True
|
|
224
|
+
)
|
|
209
225
|
if result_by_name.get("status") != "Error":
|
|
210
226
|
result = result_by_name
|
|
211
227
|
|
|
@@ -219,14 +235,14 @@ async def _show_agent_status(
|
|
|
219
235
|
langfuse_url = result.get("langfuseTraceUrl")
|
|
220
236
|
from dateutil import parser
|
|
221
237
|
|
|
222
|
-
created_at = result.get(
|
|
238
|
+
created_at = result.get("createdAt")
|
|
223
239
|
if created_at:
|
|
224
240
|
dt = parser.parse(created_at)
|
|
225
241
|
created_at = dt.astimezone().isoformat()
|
|
226
242
|
else:
|
|
227
243
|
created_at = "-"
|
|
228
244
|
|
|
229
|
-
updated_at = result.get(
|
|
245
|
+
updated_at = result.get("updatedAt")
|
|
230
246
|
if updated_at:
|
|
231
247
|
dt = parser.parse(updated_at)
|
|
232
248
|
updated_at = dt.astimezone().isoformat()
|
|
@@ -378,8 +394,8 @@ async def _list_all_agents(
|
|
|
378
394
|
rows = []
|
|
379
395
|
items = []
|
|
380
396
|
for r in results:
|
|
381
|
-
agent_id =
|
|
382
|
-
name =
|
|
397
|
+
agent_id = r.get("agentRuntimeId") or "N/A"
|
|
398
|
+
name = r.get("agentRuntimeName") or "N/A"
|
|
383
399
|
status_val = r.get("status", "Unknown")
|
|
384
400
|
ready = int(r.get("readyReplicas", 0) or 0)
|
|
385
401
|
replicas = int(r.get("replicas", 0) or 0)
|
|
@@ -419,8 +435,20 @@ async def _list_all_agents(
|
|
|
419
435
|
columns=(
|
|
420
436
|
{"header": "ID", "key": "id", "style": "#58a6ff", "no_wrap": True, "min_width": 24},
|
|
421
437
|
{"header": "名称", "key": "name", "style": "#c9d1d9", "min_width": 20},
|
|
422
|
-
{
|
|
423
|
-
|
|
438
|
+
{
|
|
439
|
+
"header": "状态",
|
|
440
|
+
"key": "status",
|
|
441
|
+
"no_wrap": True,
|
|
442
|
+
"justify": "center",
|
|
443
|
+
"min_width": 10,
|
|
444
|
+
},
|
|
445
|
+
{
|
|
446
|
+
"header": "副本",
|
|
447
|
+
"key": "replicas_display",
|
|
448
|
+
"no_wrap": True,
|
|
449
|
+
"justify": "center",
|
|
450
|
+
"min_width": 8,
|
|
451
|
+
},
|
|
424
452
|
{"header": "Endpoint", "key": "endpoint", "style": "#8b949e", "overflow": "ellipsis"},
|
|
425
453
|
),
|
|
426
454
|
rows=rows,
|
|
@@ -446,7 +474,9 @@ async def _list_all_agents(
|
|
|
446
474
|
],
|
|
447
475
|
)
|
|
448
476
|
if not is_json_output():
|
|
449
|
-
console.print(
|
|
477
|
+
console.print(
|
|
478
|
+
summary_panel(total=len(results), healthy=running, attention=unhealthy, noun="Agent")
|
|
479
|
+
)
|
|
450
480
|
|
|
451
481
|
|
|
452
482
|
def _get_status_color(status: str) -> str:
|
|
@@ -454,19 +484,24 @@ def _get_status_color(status: str) -> str:
|
|
|
454
484
|
return status_click_color(status)
|
|
455
485
|
|
|
456
486
|
|
|
457
|
-
async def _get_agent_runtime(
|
|
487
|
+
async def _get_agent_runtime(
|
|
488
|
+
agent: str, region: str, account_id: str, dry_run: bool = False, is_name: bool = False
|
|
489
|
+
) -> dict:
|
|
458
490
|
"""获取 Agent 运行时状态
|
|
459
491
|
|
|
460
492
|
调用 AgentEngine Server API
|
|
461
493
|
"""
|
|
462
494
|
from ksadk.api import AgentEngineClient
|
|
495
|
+
|
|
463
496
|
try:
|
|
464
497
|
extra_headers = {}
|
|
465
498
|
# 传递 Account ID
|
|
466
499
|
if account_id:
|
|
467
500
|
extra_headers["X-Ksc-Account-Id"] = account_id
|
|
468
501
|
|
|
469
|
-
async with AgentEngineClient(
|
|
502
|
+
async with AgentEngineClient(
|
|
503
|
+
region=region, dry_run=dry_run, extra_headers=extra_headers
|
|
504
|
+
) as client:
|
|
470
505
|
if is_name:
|
|
471
506
|
response = await client.get_agent(name=agent)
|
|
472
507
|
else:
|
|
@@ -484,10 +519,21 @@ async def _get_agent_runtime(agent: str, region: str, account_id: str, dry_run:
|
|
|
484
519
|
"description": basic.get("description", "") or response.get("description", ""),
|
|
485
520
|
"status": basic.get("status", "") or response.get("status", "Unknown"),
|
|
486
521
|
"phase": basic.get("phase", "") or response.get("phase", ""),
|
|
487
|
-
"replicas":
|
|
488
|
-
|
|
489
|
-
|
|
490
|
-
|
|
522
|
+
"replicas": (
|
|
523
|
+
basic.get("replicas")
|
|
524
|
+
if basic.get("replicas") is not None
|
|
525
|
+
else response.get("replicas", deploy.get("scaling", {}).get("min_replicas", 1))
|
|
526
|
+
),
|
|
527
|
+
"readyReplicas": (
|
|
528
|
+
basic.get("ready_replicas")
|
|
529
|
+
if basic.get("ready_replicas") is not None
|
|
530
|
+
else response.get("ready_replicas", 0)
|
|
531
|
+
),
|
|
532
|
+
"endpoint": quick.get("public_endpoint")
|
|
533
|
+
or quick.get("private_endpoint")
|
|
534
|
+
or response.get("endpoint", ""),
|
|
535
|
+
"langfuseTraceUrl": adv.get("observability_url", "")
|
|
536
|
+
or response.get("langfuse_trace_url", ""),
|
|
491
537
|
"createdAt": basic.get("created_at", "") or response.get("created_at", ""),
|
|
492
538
|
"updatedAt": basic.get("updated_at", "") or response.get("updated_at", ""),
|
|
493
539
|
"message": basic.get("message", "") or response.get("message", ""),
|
|
@@ -517,13 +563,16 @@ async def _list_agent_runtimes(
|
|
|
517
563
|
调用 AgentEngine Server API
|
|
518
564
|
"""
|
|
519
565
|
from ksadk.api import AgentEngineClient
|
|
566
|
+
|
|
520
567
|
try:
|
|
521
568
|
extra_headers = {}
|
|
522
569
|
# 传递 Account ID
|
|
523
570
|
if account_id:
|
|
524
571
|
extra_headers["X-Ksc-Account-Id"] = account_id
|
|
525
572
|
|
|
526
|
-
async with AgentEngineClient(
|
|
573
|
+
async with AgentEngineClient(
|
|
574
|
+
region=region, dry_run=dry_run, extra_headers=extra_headers
|
|
575
|
+
) as client:
|
|
527
576
|
response = await client.list_agents(
|
|
528
577
|
region=region,
|
|
529
578
|
framework=framework,
|
ksadk/cli/cmd_version.py
CHANGED
|
@@ -1,14 +1,15 @@
|
|
|
1
1
|
"""agentengine version - Agent 版本资源管理。"""
|
|
2
2
|
|
|
3
3
|
import os
|
|
4
|
-
import
|
|
4
|
+
from datetime import datetime, timedelta, timezone
|
|
5
5
|
from pathlib import Path
|
|
6
6
|
from typing import Optional
|
|
7
|
-
|
|
7
|
+
|
|
8
|
+
import click
|
|
8
9
|
|
|
9
10
|
from ksadk.api.client import DryRunExit
|
|
10
11
|
from ksadk.cli.agent_ref import merge_agent_inputs, resolve_agent_ref
|
|
11
|
-
from ksadk.cli.dry_run import dry_run_option,
|
|
12
|
+
from ksadk.cli.dry_run import dry_run_option, effective_dry_run, run_async_with_dry_run
|
|
12
13
|
from ksadk.cli.error_utils import abort_with_cli_error, resolution_error
|
|
13
14
|
from ksadk.cli.resource_common import (
|
|
14
15
|
CONTEXT_SETTINGS,
|
|
@@ -23,7 +24,8 @@ from ksadk.cli.resource_common import (
|
|
|
23
24
|
render_descriptor_list,
|
|
24
25
|
render_descriptor_status,
|
|
25
26
|
)
|
|
26
|
-
from ksadk.cli.ui import get_console,
|
|
27
|
+
from ksadk.cli.ui import get_console, status_rich_style
|
|
28
|
+
from ksadk.cli.ui import output_option as cli_output_option
|
|
27
29
|
|
|
28
30
|
console = get_console()
|
|
29
31
|
|
|
@@ -94,8 +96,9 @@ def _extract_agent_id(agent: dict) -> Optional[str]:
|
|
|
94
96
|
if isinstance(basic, dict):
|
|
95
97
|
agent_id = basic.get("agent_id")
|
|
96
98
|
if agent_id:
|
|
97
|
-
return agent_id
|
|
98
|
-
|
|
99
|
+
return str(agent_id)
|
|
100
|
+
fallback = agent.get("agent_id") or agent.get("id")
|
|
101
|
+
return str(fallback) if fallback else None
|
|
99
102
|
|
|
100
103
|
|
|
101
104
|
async def _resolve_agent_id(agent_ref: str, client) -> Optional[str]:
|
|
@@ -147,9 +150,7 @@ async def _resolve_target_agent_id(
|
|
|
147
150
|
include_project_config=True,
|
|
148
151
|
)
|
|
149
152
|
if not resolved:
|
|
150
|
-
raise ValueError(
|
|
151
|
-
"请指定 Agent(--agent 或位置参数),或在当前目录提供可解析的本地配置"
|
|
152
|
-
)
|
|
153
|
+
raise ValueError("请指定 Agent(--agent 或位置参数),或在当前目录提供可解析的本地配置")
|
|
153
154
|
|
|
154
155
|
if resolved.source != "cli":
|
|
155
156
|
console.print(
|
|
@@ -162,7 +163,9 @@ async def _resolve_target_agent_id(
|
|
|
162
163
|
return agent_id
|
|
163
164
|
|
|
164
165
|
|
|
165
|
-
@click.group(
|
|
166
|
+
@click.group(
|
|
167
|
+
"version", context_settings=CONTEXT_SETTINGS, help=build_resource_group_help(VERSION_RESOURCE)
|
|
168
|
+
)
|
|
166
169
|
def version():
|
|
167
170
|
pass
|
|
168
171
|
|
|
@@ -345,7 +348,9 @@ def release_version(
|
|
|
345
348
|
dry_run = effective_dry_run(dry_run)
|
|
346
349
|
try:
|
|
347
350
|
run_async_with_dry_run(
|
|
348
|
-
_release_version_async(
|
|
351
|
+
_release_version_async(
|
|
352
|
+
agent_ref, agent_option, name, region, tag, description, dry_run
|
|
353
|
+
),
|
|
349
354
|
dry_run=dry_run,
|
|
350
355
|
dry_run_resource="version",
|
|
351
356
|
dry_run_action="release",
|
|
@@ -437,7 +442,9 @@ def rollback_version(
|
|
|
437
442
|
dry_run = effective_dry_run(dry_run)
|
|
438
443
|
try:
|
|
439
444
|
run_async_with_dry_run(
|
|
440
|
-
_rollback_version_async(
|
|
445
|
+
_rollback_version_async(
|
|
446
|
+
agent_ref, agent_option, name, region, target, assume_yes, dry_run
|
|
447
|
+
),
|
|
441
448
|
dry_run=dry_run,
|
|
442
449
|
dry_run_resource="version",
|
|
443
450
|
dry_run_action="rollback",
|
|
@@ -496,7 +503,7 @@ async def _rollback_version_async(
|
|
|
496
503
|
ks3_secret_key=secret_key,
|
|
497
504
|
)
|
|
498
505
|
|
|
499
|
-
fields = [
|
|
506
|
+
fields: list[tuple[str, str, str | None]] = [
|
|
500
507
|
("当前版本", str(result.get("current_tag") or "-"), "#58a6ff"),
|
|
501
508
|
]
|
|
502
509
|
if result.get("message"):
|