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_build.py
CHANGED
|
@@ -1,23 +1,29 @@
|
|
|
1
1
|
"""
|
|
2
2
|
agentengine build - 构建 Agent 应用
|
|
3
3
|
|
|
4
|
-
|
|
4
|
+
支持三种模式:
|
|
5
|
+
- managed: 仅打包系统无关 runtime manifest
|
|
5
6
|
- code: 打包 zip + 依赖 → 上传 KS3 (默认)
|
|
6
7
|
- container: 构建 Docker 镜像
|
|
7
8
|
"""
|
|
8
9
|
|
|
9
10
|
import asyncio
|
|
10
|
-
import click
|
|
11
11
|
import time
|
|
12
12
|
from datetime import datetime
|
|
13
13
|
from pathlib import Path
|
|
14
|
-
|
|
15
|
-
|
|
14
|
+
|
|
15
|
+
import click
|
|
16
|
+
import yaml
|
|
17
|
+
|
|
18
|
+
from ksadk.cli.error_utils import (
|
|
19
|
+
abort_with_cli_error,
|
|
20
|
+
is_debug_mode_enabled,
|
|
21
|
+
remote_error,
|
|
22
|
+
validation_error,
|
|
23
|
+
)
|
|
16
24
|
from ksadk.cli.ui import (
|
|
17
25
|
capture_standard_output,
|
|
18
26
|
is_json_output,
|
|
19
|
-
output_option as cli_output_option,
|
|
20
|
-
print_error,
|
|
21
27
|
print_info,
|
|
22
28
|
print_kv,
|
|
23
29
|
print_next_steps,
|
|
@@ -25,6 +31,10 @@ from ksadk.cli.ui import (
|
|
|
25
31
|
print_success,
|
|
26
32
|
print_warn,
|
|
27
33
|
)
|
|
34
|
+
from ksadk.cli.ui import (
|
|
35
|
+
output_option as cli_output_option,
|
|
36
|
+
)
|
|
37
|
+
from ksadk.cli.workflow_common import print_workflow_header, render_workflow_result
|
|
28
38
|
|
|
29
39
|
|
|
30
40
|
@click.command(context_settings=dict(help_option_names=["-h", "--help"]))
|
|
@@ -32,16 +42,32 @@ from ksadk.cli.ui import (
|
|
|
32
42
|
@click.option(
|
|
33
43
|
"--mode",
|
|
34
44
|
"-m",
|
|
35
|
-
type=click.Choice(["container", "code"]),
|
|
36
|
-
default="
|
|
37
|
-
help="构建模式:
|
|
45
|
+
type=click.Choice(["auto", "managed", "container", "code"]),
|
|
46
|
+
default="auto",
|
|
47
|
+
help="构建模式: auto (按配置推断)、managed、code 或 container",
|
|
38
48
|
)
|
|
39
49
|
@click.option("--tag", "-t", help="镜像标签 (container 模式)")
|
|
40
50
|
@click.option("--registry", help="镜像仓库地址 (container 模式)")
|
|
41
|
-
@click.option(
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
51
|
+
@click.option(
|
|
52
|
+
"--push",
|
|
53
|
+
is_flag=True,
|
|
54
|
+
help="构建后推送(仅 Container 镜像或 Code zip;ManagedRuntime 不支持)",
|
|
55
|
+
)
|
|
56
|
+
@click.option(
|
|
57
|
+
"--no-cache",
|
|
58
|
+
is_flag=True,
|
|
59
|
+
help="强制重新构建,不使用缓存 (code: 忽略已有 zip;container: docker --no-cache)",
|
|
60
|
+
)
|
|
61
|
+
@click.option(
|
|
62
|
+
"--repackage", is_flag=True, help="Code 模式复用依赖缓存,但强制重新打包当前代码/runtime"
|
|
63
|
+
)
|
|
64
|
+
@click.option(
|
|
65
|
+
"--region",
|
|
66
|
+
"-r",
|
|
67
|
+
default="cn-beijing-6",
|
|
68
|
+
envvar="KSYUN_REGION",
|
|
69
|
+
help="Code 的 KS3 区域,或 ManagedRuntime catalog 查询区域",
|
|
70
|
+
)
|
|
45
71
|
@click.option("--ks3-bucket", help="KS3 bucket 名称 (code 模式, 默认: agentengine-{region})")
|
|
46
72
|
@cli_output_option()
|
|
47
73
|
def build(
|
|
@@ -63,7 +89,9 @@ def build(
|
|
|
63
89
|
|
|
64
90
|
\b
|
|
65
91
|
模式:
|
|
66
|
-
|
|
92
|
+
auto: 按 artifact_type 推断 (默认)
|
|
93
|
+
managed: 只打包 ManagedRuntime manifest
|
|
94
|
+
code: 打包 zip + 依赖,上传 KS3
|
|
67
95
|
container: 构建 Docker 镜像
|
|
68
96
|
|
|
69
97
|
\b
|
|
@@ -77,22 +105,29 @@ def build(
|
|
|
77
105
|
"""
|
|
78
106
|
_ = output_mode
|
|
79
107
|
agent_path = Path(agent_dir).resolve()
|
|
108
|
+
effective_mode = _resolve_build_mode(agent_path, mode)
|
|
80
109
|
try:
|
|
81
110
|
with capture_standard_output():
|
|
82
111
|
print_workflow_header(
|
|
83
112
|
title="Agent 构建",
|
|
84
|
-
subtitle=f"mode: {
|
|
113
|
+
subtitle=f"mode: {effective_mode}",
|
|
85
114
|
project_dir=agent_path,
|
|
86
115
|
target="build",
|
|
87
|
-
region=region if
|
|
116
|
+
region=region if effective_mode in {"code", "managed"} else None,
|
|
88
117
|
mode_label="构建模式",
|
|
89
|
-
mode_value=
|
|
118
|
+
mode_value=effective_mode,
|
|
90
119
|
)
|
|
91
120
|
|
|
92
|
-
if
|
|
121
|
+
if effective_mode == "container":
|
|
93
122
|
result = _build_container(agent_path, tag, registry, push, no_cache)
|
|
123
|
+
elif effective_mode == "managed":
|
|
124
|
+
result = asyncio.run(
|
|
125
|
+
_build_managed_runtime(agent_path, push, region, ks3_bucket)
|
|
126
|
+
)
|
|
94
127
|
else:
|
|
95
|
-
result = asyncio.run(
|
|
128
|
+
result = asyncio.run(
|
|
129
|
+
_build_code(agent_path, push, region, ks3_bucket, no_cache, repackage)
|
|
130
|
+
)
|
|
96
131
|
except Exception as e:
|
|
97
132
|
if is_debug_mode_enabled():
|
|
98
133
|
raise
|
|
@@ -103,6 +138,91 @@ def build(
|
|
|
103
138
|
render_workflow_result(action="build", result=result)
|
|
104
139
|
|
|
105
140
|
|
|
141
|
+
def _load_build_config(agent_path: Path) -> dict:
|
|
142
|
+
config_path = agent_path / "agentengine.yaml"
|
|
143
|
+
if not config_path.exists():
|
|
144
|
+
config_path = agent_path / "ksadk.yaml"
|
|
145
|
+
if not config_path.exists():
|
|
146
|
+
return {}
|
|
147
|
+
with config_path.open(encoding="utf-8-sig") as stream:
|
|
148
|
+
loaded = yaml.safe_load(stream)
|
|
149
|
+
return loaded if isinstance(loaded, dict) else {}
|
|
150
|
+
|
|
151
|
+
|
|
152
|
+
def _resolve_build_mode(agent_path: Path, requested_mode: str) -> str:
|
|
153
|
+
normalized = str(requested_mode or "auto").strip().lower()
|
|
154
|
+
if normalized != "auto":
|
|
155
|
+
return normalized
|
|
156
|
+
config = _load_build_config(agent_path)
|
|
157
|
+
artifact_type = str(config.get("artifact_type") or "").strip().lower()
|
|
158
|
+
return "managed" if artifact_type == "managedruntime" else "code"
|
|
159
|
+
|
|
160
|
+
|
|
161
|
+
async def _build_managed_runtime(
|
|
162
|
+
agent_path: Path,
|
|
163
|
+
push: bool,
|
|
164
|
+
region: str,
|
|
165
|
+
ks3_bucket: str | None = None,
|
|
166
|
+
):
|
|
167
|
+
"""Build a local, system-independent runtime manifest for review/audit.
|
|
168
|
+
|
|
169
|
+
ManagedRuntime deployment is an inline server contract. Its optional local
|
|
170
|
+
zip is deliberately never published to KS3; the server receives the
|
|
171
|
+
normalized manifest and resolves the managed image itself.
|
|
172
|
+
"""
|
|
173
|
+
import json
|
|
174
|
+
from dataclasses import asdict
|
|
175
|
+
|
|
176
|
+
from ksadk.builders import ManagedRuntimeBuilder
|
|
177
|
+
from ksadk.managed_runtime import resolve_managed_runtime
|
|
178
|
+
|
|
179
|
+
if push or ks3_bucket:
|
|
180
|
+
raise validation_error(
|
|
181
|
+
"ManagedRuntime 不使用 KS3;请移除 --push 和 --ks3-bucket。"
|
|
182
|
+
"构建出的本地 zip 仅用于审计,直接执行 `ksadk deploy .` 即可部署。"
|
|
183
|
+
)
|
|
184
|
+
|
|
185
|
+
config = _load_build_config(agent_path)
|
|
186
|
+
resolved = await resolve_managed_runtime(config, region=region)
|
|
187
|
+
builder = ManagedRuntimeBuilder(agent_path, runtime_version=resolved.version)
|
|
188
|
+
result = builder.build()
|
|
189
|
+
if not result.success or result.artifact_path is None:
|
|
190
|
+
raise validation_error(result.error_message or "ManagedRuntime manifest 构建失败")
|
|
191
|
+
|
|
192
|
+
metadata_file = agent_path / ".agentengine" / "build-metadata.json"
|
|
193
|
+
metadata_file.parent.mkdir(parents=True, exist_ok=True)
|
|
194
|
+
data = asdict(result)
|
|
195
|
+
metadata_file.write_text(
|
|
196
|
+
json.dumps(
|
|
197
|
+
data,
|
|
198
|
+
ensure_ascii=False,
|
|
199
|
+
indent=2,
|
|
200
|
+
default=lambda value: str(value) if isinstance(value, Path) else value,
|
|
201
|
+
),
|
|
202
|
+
encoding="utf-8",
|
|
203
|
+
)
|
|
204
|
+
|
|
205
|
+
_print_summary("ManagedRuntime", result, show_next_step=True)
|
|
206
|
+
return {
|
|
207
|
+
"framework": str(result.metadata.get("framework") or "codex"),
|
|
208
|
+
"artifact_type": "managedruntime",
|
|
209
|
+
"artifact_source": "built",
|
|
210
|
+
"artifact_reused": False,
|
|
211
|
+
"artifact_built": True,
|
|
212
|
+
"artifact_reference": str(result.artifact_path),
|
|
213
|
+
"artifact_path": str(result.artifact_path),
|
|
214
|
+
"artifact_size_mb": float(result.artifact_size_mb),
|
|
215
|
+
"ks3_path": "",
|
|
216
|
+
"ks3_public_url": "",
|
|
217
|
+
"ks3_internal_url": "",
|
|
218
|
+
"runtime_name": resolved.name,
|
|
219
|
+
"runtime_version": resolved.version,
|
|
220
|
+
"runtime_version_source": resolved.source,
|
|
221
|
+
"manifest_sha256": str(result.metadata.get("manifest_sha256") or ""),
|
|
222
|
+
"push": False,
|
|
223
|
+
}
|
|
224
|
+
|
|
225
|
+
|
|
106
226
|
def _build_container(agent_path: Path, tag: str, registry: str, push: bool, no_cache: bool):
|
|
107
227
|
"""Container 模式构建"""
|
|
108
228
|
from ksadk.builders import ContainerBuilder
|
|
@@ -126,7 +246,10 @@ def _build_container(agent_path: Path, tag: str, registry: str, push: bool, no_c
|
|
|
126
246
|
)
|
|
127
247
|
|
|
128
248
|
print_next_steps(
|
|
129
|
-
[
|
|
249
|
+
[
|
|
250
|
+
"agentengine deploy --target serverless "
|
|
251
|
+
f"--image {result.metadata['image']} --artifact-type Container"
|
|
252
|
+
]
|
|
130
253
|
)
|
|
131
254
|
|
|
132
255
|
# 摘要
|
|
@@ -147,14 +270,16 @@ async def _build_code(
|
|
|
147
270
|
agent_path: Path,
|
|
148
271
|
push: bool,
|
|
149
272
|
region: str,
|
|
150
|
-
ks3_bucket: str = None,
|
|
273
|
+
ks3_bucket: str | None = None,
|
|
151
274
|
no_cache: bool = False,
|
|
152
275
|
repackage: bool = False,
|
|
153
276
|
):
|
|
154
277
|
"""Code 模式构建"""
|
|
155
278
|
from ksadk.builders import CodeBuilder, KS3Uploader
|
|
156
279
|
|
|
157
|
-
builder = CodeBuilder(
|
|
280
|
+
builder = CodeBuilder(
|
|
281
|
+
project_dir=agent_path, config={"no_cache": no_cache, "repackage": repackage}
|
|
282
|
+
)
|
|
158
283
|
result = builder.build()
|
|
159
284
|
|
|
160
285
|
if not result.success:
|
|
@@ -167,17 +292,19 @@ async def _build_code(
|
|
|
167
292
|
ks3_internal_url = None
|
|
168
293
|
|
|
169
294
|
if push:
|
|
295
|
+
if result.artifact_path is None:
|
|
296
|
+
raise validation_error("构建成功但未生成代码包路径")
|
|
170
297
|
print_rule("上传到 KS3")
|
|
171
298
|
upload_started_at = time.monotonic()
|
|
172
|
-
|
|
299
|
+
|
|
173
300
|
# 预发特殊逻辑: region 为 pre-online 时,资源上传到 cn-beijing-6
|
|
174
301
|
upload_region = "cn-beijing-6" if region == "pre-online" else region
|
|
175
|
-
|
|
302
|
+
|
|
176
303
|
if region == "pre-online":
|
|
177
304
|
print_warn("预发环境: 资源将上传到 cn-beijing-6 region")
|
|
178
|
-
|
|
305
|
+
|
|
179
306
|
uploader = KS3Uploader(region=upload_region, bucket=ks3_bucket)
|
|
180
|
-
|
|
307
|
+
|
|
181
308
|
# 使用时间戳确保每次上传的代码包路径唯一,支持真正的版本回滚
|
|
182
309
|
timestamp = datetime.now().strftime("%Y%m%d%H%M%S")
|
|
183
310
|
object_key = f"agents/{agent_name}/code_{timestamp}.zip"
|
|
@@ -189,7 +316,7 @@ async def _build_code(
|
|
|
189
316
|
# 更新 metadata 以便持久化
|
|
190
317
|
result.metadata["ks3_path"] = ks3_path
|
|
191
318
|
result.metadata["pushed"] = True
|
|
192
|
-
|
|
319
|
+
|
|
193
320
|
ks3_public_url = uploader.get_public_url_by_key(object_key)
|
|
194
321
|
ks3_internal_url = uploader.get_internal_url_by_key(object_key)
|
|
195
322
|
print_kv("公网地址", ks3_public_url or "-")
|
|
@@ -206,7 +333,7 @@ async def _build_code(
|
|
|
206
333
|
try:
|
|
207
334
|
import json
|
|
208
335
|
from dataclasses import asdict
|
|
209
|
-
|
|
336
|
+
|
|
210
337
|
# 自定义序列化: 处理 Path 对象
|
|
211
338
|
def default_serializer(obj):
|
|
212
339
|
if isinstance(obj, Path):
|
|
@@ -228,7 +355,9 @@ async def _build_code(
|
|
|
228
355
|
return {
|
|
229
356
|
"framework": result.metadata.get("framework", "unknown"),
|
|
230
357
|
"artifact_type": "code",
|
|
231
|
-
"artifact_source":
|
|
358
|
+
"artifact_source": (
|
|
359
|
+
"built_and_uploaded" if push and result.metadata.get("ks3_path") else "built"
|
|
360
|
+
),
|
|
232
361
|
"artifact_reused": bool(result.metadata.get("reused", False)),
|
|
233
362
|
"artifact_built": True,
|
|
234
363
|
"artifact_reference": str(result.metadata.get("ks3_path") or result.artifact_path or ""),
|
ksadk/cli/cmd_completion.py
CHANGED
|
@@ -7,8 +7,10 @@ agentengine completion - Shell 自动补全安装
|
|
|
7
7
|
import os
|
|
8
8
|
import re
|
|
9
9
|
import sys
|
|
10
|
-
import click
|
|
11
10
|
from pathlib import Path
|
|
11
|
+
|
|
12
|
+
import click
|
|
13
|
+
|
|
12
14
|
from ksadk.cli.error_utils import ensure_json_output_supported, print_exception
|
|
13
15
|
from ksadk.cli.resource_common import CONTEXT_SETTINGS
|
|
14
16
|
from ksadk.cli.ui import (
|
|
@@ -63,7 +65,12 @@ def _resolve_bash_rc_file(home: Path) -> Path:
|
|
|
63
65
|
|
|
64
66
|
|
|
65
67
|
def _has_zsh_compinit(rc_content: str) -> bool:
|
|
66
|
-
return
|
|
68
|
+
return (
|
|
69
|
+
re.search(
|
|
70
|
+
r"(?m)^\s*(?:autoload\s+-Uz\s+compinit(?:\s*&&\s*compinit)?|compinit)\s*$", rc_content
|
|
71
|
+
)
|
|
72
|
+
is not None
|
|
73
|
+
)
|
|
67
74
|
|
|
68
75
|
|
|
69
76
|
def _rewrite_zsh_rc(rc_content: str, completion_file: Path, init_line: str) -> tuple[str, bool]:
|
|
@@ -72,7 +79,9 @@ def _rewrite_zsh_rc(rc_content: str, completion_file: Path, init_line: str) -> t
|
|
|
72
79
|
|
|
73
80
|
# 清理旧的 AgentEngine 自动补全配置,避免重复 source / eval。
|
|
74
81
|
updated = re.sub(
|
|
75
|
-
r
|
|
82
|
+
r"(?ms)^\s*if command -v agentengine >/dev/null 2>&1; then\s*\n"
|
|
83
|
+
r'\s*eval "\$\(_AGENTENGINE_COMPLETE=zsh_source agentengine\)"\s*\n'
|
|
84
|
+
r"\s*fi\s*\n?",
|
|
76
85
|
"",
|
|
77
86
|
rc_content,
|
|
78
87
|
)
|
|
@@ -87,7 +96,7 @@ def _rewrite_zsh_rc(rc_content: str, completion_file: Path, init_line: str) -> t
|
|
|
87
96
|
updated,
|
|
88
97
|
)
|
|
89
98
|
updated = re.sub(
|
|
90
|
-
r
|
|
99
|
+
r"(?m)^\s*# AgentEngine CLI 自动补全\s*$\n?",
|
|
91
100
|
"",
|
|
92
101
|
updated,
|
|
93
102
|
)
|
|
@@ -116,9 +125,9 @@ def _rewrite_bash_rc(rc_content: str, completion_file: Path) -> str:
|
|
|
116
125
|
rc_content,
|
|
117
126
|
)
|
|
118
127
|
updated = re.sub(
|
|
119
|
-
r
|
|
128
|
+
r"(?m)^\s*if command -v agentengine >/dev/null 2>&1; then\s*$\n?"
|
|
120
129
|
r'^\s*eval "\$\(_AGENTENGINE_COMPLETE=bash_source agentengine\)"\s*$\n?'
|
|
121
|
-
r
|
|
130
|
+
r"^\s*fi\s*$\n?",
|
|
122
131
|
"",
|
|
123
132
|
updated,
|
|
124
133
|
)
|
|
@@ -128,7 +137,7 @@ def _rewrite_bash_rc(rc_content: str, completion_file: Path) -> str:
|
|
|
128
137
|
updated,
|
|
129
138
|
)
|
|
130
139
|
updated = re.sub(
|
|
131
|
-
r
|
|
140
|
+
r"(?m)^\s*# AgentEngine CLI 自动补全\s*$\n?",
|
|
132
141
|
"",
|
|
133
142
|
updated,
|
|
134
143
|
)
|
|
@@ -140,7 +149,7 @@ def _rewrite_bash_rc(rc_content: str, completion_file: Path) -> str:
|
|
|
140
149
|
@completion.command("bash", context_settings=CONTEXT_SETTINGS)
|
|
141
150
|
def completion_bash():
|
|
142
151
|
"""输出 Bash 补全脚本"""
|
|
143
|
-
script =
|
|
152
|
+
script = """
|
|
144
153
|
_agentengine_completion() {
|
|
145
154
|
local IFS=$'\\n'
|
|
146
155
|
local line
|
|
@@ -165,14 +174,14 @@ _agentengine_completion() {
|
|
|
165
174
|
}
|
|
166
175
|
|
|
167
176
|
complete -o default -F _agentengine_completion agentengine
|
|
168
|
-
|
|
177
|
+
"""
|
|
169
178
|
click.echo(script.strip())
|
|
170
179
|
|
|
171
180
|
|
|
172
181
|
@completion.command("zsh", context_settings=CONTEXT_SETTINGS)
|
|
173
182
|
def completion_zsh():
|
|
174
183
|
"""输出 Zsh 补全脚本"""
|
|
175
|
-
script =
|
|
184
|
+
script = """
|
|
176
185
|
#compdef agentengine
|
|
177
186
|
|
|
178
187
|
_agentengine() {
|
|
@@ -201,18 +210,22 @@ _agentengine() {
|
|
|
201
210
|
}
|
|
202
211
|
|
|
203
212
|
compdef _agentengine agentengine
|
|
204
|
-
|
|
213
|
+
"""
|
|
205
214
|
click.echo(script.strip())
|
|
206
215
|
|
|
207
216
|
|
|
208
217
|
@completion.command("install", context_settings=CONTEXT_SETTINGS)
|
|
209
|
-
@click.option(
|
|
210
|
-
|
|
218
|
+
@click.option(
|
|
219
|
+
"--shell", type=click.Choice(["bash", "zsh", "auto"]), default="auto", help="指定 Shell 类型"
|
|
220
|
+
)
|
|
211
221
|
def completion_install(shell: str):
|
|
212
222
|
"""自动安装补全脚本到 Shell 配置文件"""
|
|
213
223
|
ensure_json_output_supported(
|
|
214
224
|
"agentengine completion install",
|
|
215
|
-
suggestion=
|
|
225
|
+
suggestion=(
|
|
226
|
+
"请直接使用 `agentengine completion bash` 或 `agentengine completion zsh` "
|
|
227
|
+
"获取脚本内容。"
|
|
228
|
+
),
|
|
216
229
|
)
|
|
217
230
|
print_title("安装自动补全")
|
|
218
231
|
|
|
@@ -224,59 +237,57 @@ def completion_install(shell: str):
|
|
|
224
237
|
print_info("请使用 --shell=bash 或 --shell=zsh 指定")
|
|
225
238
|
return
|
|
226
239
|
shell = resolved_shell
|
|
227
|
-
|
|
240
|
+
|
|
228
241
|
home = Path.home()
|
|
229
|
-
|
|
242
|
+
|
|
230
243
|
if shell == "zsh":
|
|
231
244
|
rc_file = home / ".zshrc"
|
|
232
245
|
completion_file = home / ".agentengine-complete.zsh"
|
|
233
|
-
completion_cmd =
|
|
246
|
+
completion_cmd = "_AGENTENGINE_COMPLETE=zsh_source agentengine"
|
|
234
247
|
init_line = "autoload -Uz compinit && compinit"
|
|
235
248
|
else: # bash
|
|
236
249
|
rc_file = _resolve_bash_rc_file(home)
|
|
237
250
|
completion_file = home / ".agentengine-complete.bash"
|
|
238
|
-
completion_cmd =
|
|
251
|
+
completion_cmd = "_AGENTENGINE_COMPLETE=bash_source agentengine"
|
|
239
252
|
init_line = None
|
|
240
|
-
|
|
253
|
+
|
|
241
254
|
print_kv("目标 Shell", shell, value_style="#58a6ff")
|
|
242
|
-
print_kv("配置文件", rc_file, value_style="#58a6ff")
|
|
255
|
+
print_kv("配置文件", str(rc_file), value_style="#58a6ff")
|
|
243
256
|
print_info("正在安装补全脚本...")
|
|
244
|
-
|
|
257
|
+
|
|
245
258
|
# 生成补全脚本
|
|
246
259
|
try:
|
|
247
260
|
import subprocess
|
|
261
|
+
|
|
248
262
|
env = os.environ.copy()
|
|
249
263
|
env["_AGENTENGINE_COMPLETE"] = f"{shell}_source"
|
|
250
|
-
|
|
264
|
+
|
|
251
265
|
result = subprocess.run(
|
|
252
|
-
[sys.executable, "-m", "ksadk.cli"],
|
|
253
|
-
env=env,
|
|
254
|
-
capture_output=True,
|
|
255
|
-
text=True
|
|
266
|
+
[sys.executable, "-m", "ksadk.cli"], env=env, capture_output=True, text=True
|
|
256
267
|
)
|
|
257
|
-
|
|
268
|
+
|
|
258
269
|
completion_script = result.stdout
|
|
259
|
-
|
|
270
|
+
|
|
260
271
|
if not completion_script.strip():
|
|
261
272
|
print_error("生成补全脚本失败")
|
|
262
273
|
print_info("请尝试手动安装:")
|
|
263
274
|
print_info(f"{completion_cmd} > {completion_file}")
|
|
264
|
-
print_info(f
|
|
275
|
+
print_info(f"echo 'source \"{completion_file}\"' >> {rc_file}")
|
|
265
276
|
return
|
|
266
|
-
|
|
277
|
+
|
|
267
278
|
# 写入补全脚本文件
|
|
268
279
|
with open(completion_file, "w") as f:
|
|
269
280
|
f.write(completion_script)
|
|
270
|
-
|
|
281
|
+
|
|
271
282
|
print_success(f"补全脚本已保存到: {completion_file}")
|
|
272
|
-
|
|
283
|
+
|
|
273
284
|
except Exception as e:
|
|
274
285
|
print_exception("生成补全脚本失败", e)
|
|
275
286
|
print_info("请尝试手动安装:")
|
|
276
287
|
print_info(f"{completion_cmd} > {completion_file}")
|
|
277
|
-
print_info(f
|
|
288
|
+
print_info(f"echo 'source \"{completion_file}\"' >> {rc_file}")
|
|
278
289
|
return
|
|
279
|
-
|
|
290
|
+
|
|
280
291
|
# 检查并更新 rc 文件
|
|
281
292
|
rc_content = ""
|
|
282
293
|
if rc_file.exists():
|
|
@@ -284,6 +295,7 @@ def completion_install(shell: str):
|
|
|
284
295
|
rc_content = f.read()
|
|
285
296
|
|
|
286
297
|
if shell == "zsh":
|
|
298
|
+
assert init_line is not None
|
|
287
299
|
updated_rc, added_compinit = _rewrite_zsh_rc(rc_content, completion_file, init_line)
|
|
288
300
|
if added_compinit:
|
|
289
301
|
print_success("已添加 compinit 初始化")
|
|
@@ -297,7 +309,7 @@ def completion_install(shell: str):
|
|
|
297
309
|
f.write(updated_rc)
|
|
298
310
|
else:
|
|
299
311
|
print_info("补全配置已存在,跳过")
|
|
300
|
-
|
|
312
|
+
|
|
301
313
|
print_success("安装完成")
|
|
302
314
|
print_info("请运行以下命令使其生效:")
|
|
303
315
|
print_kv("命令", f"source {rc_file}", value_style="#58a6ff")
|