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/runners/base_runner.py
CHANGED
|
@@ -18,7 +18,8 @@ class BaseRunner(ABC):
|
|
|
18
18
|
def __init__(self, detection_result: Any, project_dir: str):
|
|
19
19
|
self.detection_result = detection_result
|
|
20
20
|
self.project_dir = project_dir
|
|
21
|
-
|
|
21
|
+
# Framework runners populate this with SDK-specific agent/graph objects.
|
|
22
|
+
self._agent: Any = None
|
|
22
23
|
|
|
23
24
|
@abstractmethod
|
|
24
25
|
def load_agent(self) -> None:
|
|
@@ -38,7 +39,7 @@ class BaseRunner(ABC):
|
|
|
38
39
|
pass
|
|
39
40
|
|
|
40
41
|
@abstractmethod
|
|
41
|
-
|
|
42
|
+
def stream(self, input_data: Dict[str, Any]) -> AsyncIterator[Dict[str, Any]]:
|
|
42
43
|
"""流式调用 Agent
|
|
43
44
|
|
|
44
45
|
Args:
|
|
@@ -47,7 +48,7 @@ class BaseRunner(ABC):
|
|
|
47
48
|
Yields:
|
|
48
49
|
流式输出的数据块
|
|
49
50
|
"""
|
|
50
|
-
|
|
51
|
+
raise NotImplementedError
|
|
51
52
|
|
|
52
53
|
@staticmethod
|
|
53
54
|
def normalize_requested_model(model: Optional[str]) -> Optional[str]:
|
|
@@ -108,23 +109,28 @@ class BaseRunner(ABC):
|
|
|
108
109
|
if cancel_supported
|
|
109
110
|
else ["unsupported"]
|
|
110
111
|
),
|
|
111
|
-
"Reason":
|
|
112
|
-
|
|
113
|
-
|
|
112
|
+
"Reason": (
|
|
113
|
+
"" if cancel_supported else "runner does not implement cooperative cancellation"
|
|
114
|
+
),
|
|
114
115
|
},
|
|
115
116
|
"Checkpoint": checkpoint,
|
|
116
117
|
"ResumeRun": {
|
|
117
118
|
"Supported": checkpoint_supported,
|
|
118
119
|
"ResumeMode": str(checkpoint.get("ResumeMode") or "none"),
|
|
119
|
-
"Reason":
|
|
120
|
-
|
|
121
|
-
|
|
120
|
+
"Reason": (
|
|
121
|
+
checkpoint_reason
|
|
122
|
+
if not checkpoint_supported
|
|
123
|
+
else str(checkpoint.get("ResumeReason") or "")
|
|
124
|
+
),
|
|
122
125
|
},
|
|
123
126
|
"SessionContinuity": {
|
|
124
127
|
"Supported": True,
|
|
125
128
|
"Type": "semantic_replay",
|
|
126
129
|
"Level": "semantic",
|
|
127
|
-
"Reason":
|
|
130
|
+
"Reason": (
|
|
131
|
+
"conversation transcript can be replayed, but exact runtime checkpoint "
|
|
132
|
+
"resume is not available"
|
|
133
|
+
),
|
|
128
134
|
},
|
|
129
135
|
}
|
|
130
136
|
|
|
@@ -193,15 +199,15 @@ class BaseRunner(ABC):
|
|
|
193
199
|
if isinstance(usage_metadata, Mapping):
|
|
194
200
|
input_tokens = cls._int_usage_value(usage_metadata.get("input_tokens"))
|
|
195
201
|
output_tokens = cls._int_usage_value(usage_metadata.get("output_tokens"))
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
if
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
isinstance(
|
|
202
|
+
usage_input_details = usage_metadata.get("input_token_details")
|
|
203
|
+
usage_output_details = usage_metadata.get("output_token_details")
|
|
204
|
+
if (
|
|
205
|
+
not any(
|
|
206
|
+
key in usage_metadata
|
|
207
|
+
for key in ("input_tokens", "output_tokens", "total_tokens")
|
|
208
|
+
)
|
|
209
|
+
and not (isinstance(usage_input_details, Mapping) and usage_input_details)
|
|
210
|
+
and not (isinstance(usage_output_details, Mapping) and usage_output_details)
|
|
205
211
|
):
|
|
206
212
|
return {}
|
|
207
213
|
return {
|
|
@@ -211,10 +217,10 @@ class BaseRunner(ABC):
|
|
|
211
217
|
usage_metadata.get("total_tokens") or (input_tokens + output_tokens)
|
|
212
218
|
),
|
|
213
219
|
"input_token_details": (
|
|
214
|
-
dict(
|
|
220
|
+
dict(usage_input_details) if isinstance(usage_input_details, Mapping) else {}
|
|
215
221
|
),
|
|
216
222
|
"output_token_details": (
|
|
217
|
-
dict(
|
|
223
|
+
dict(usage_output_details) if isinstance(usage_output_details, Mapping) else {}
|
|
218
224
|
),
|
|
219
225
|
}
|
|
220
226
|
|
|
@@ -237,10 +243,14 @@ class BaseRunner(ABC):
|
|
|
237
243
|
reasoning_tokens = completion_details.get("reasoning_tokens")
|
|
238
244
|
if reasoning_tokens is not None:
|
|
239
245
|
output_token_details["reasoning"] = cls._int_usage_value(reasoning_tokens)
|
|
240
|
-
if
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
246
|
+
if (
|
|
247
|
+
not any(
|
|
248
|
+
key in token_usage
|
|
249
|
+
for key in ("prompt_tokens", "completion_tokens", "total_tokens")
|
|
250
|
+
)
|
|
251
|
+
and not input_token_details
|
|
252
|
+
and not output_token_details
|
|
253
|
+
):
|
|
244
254
|
return {}
|
|
245
255
|
return {
|
|
246
256
|
"input_tokens": input_tokens,
|
|
@@ -295,11 +305,18 @@ class BaseRunner(ABC):
|
|
|
295
305
|
usage = cls._message_usage(result)
|
|
296
306
|
return usage if usage else {}
|
|
297
307
|
|
|
298
|
-
|
|
299
308
|
def run_server(self, port: int = 8000) -> None:
|
|
300
|
-
"""启动 HTTP Server"""
|
|
301
|
-
from ksadk.server import app, set_runner
|
|
309
|
+
"""启动 HTTP Server(per-app factory,不再依赖 set_runner 全局态)。"""
|
|
302
310
|
import uvicorn
|
|
303
311
|
|
|
304
|
-
|
|
312
|
+
from ksadk.agui.config import default_agui_config
|
|
313
|
+
from ksadk.server.composition import configure_runtime_app
|
|
314
|
+
from ksadk.server.factory import RuntimeAppConfig, create_runtime_app
|
|
315
|
+
|
|
316
|
+
# goal-01/16:经 create_runtime_app 注入 runner(per-app state),替代全局 ``app`` +
|
|
317
|
+
# ``set_runner`` 全局态。普通 runtime app 装配全部 route group。
|
|
318
|
+
app = create_runtime_app(
|
|
319
|
+
RuntimeAppConfig(runner=self, agui=default_agui_config(self)),
|
|
320
|
+
configure_runtime_app,
|
|
321
|
+
)
|
|
305
322
|
uvicorn.run(app, host="0.0.0.0", port=port)
|
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
"""CodexRunner — 把 codex runtime(CodexRuntime,RuntimeAdapter)适配成 BaseRunner。
|
|
2
|
+
|
|
3
|
+
让 codex 项目能像 ADK/LangGraph 一样经 `ksadk web` 起 hosted UI:``create_runner``
|
|
4
|
+
返回本 runner → ``run_server`` 走 ``create_runtime_app`` → /run_sse 与 AGUI 都走它。
|
|
5
|
+
|
|
6
|
+
适配方向:``CodexRuntime.stream`` 产出 ``RuntimeEvent``(TEXT_DELTA/RUN_COMPLETED/…),
|
|
7
|
+
本 runner 反向投射成 ADK-style 扁平 dict(``/run_sse`` 期望的 type 词表
|
|
8
|
+
text/thinking/interrupt/final),与 ``ADKRunner.stream`` 产出形状一致。AGUI 路径经
|
|
9
|
+
``RunnerRuntimeAdapter`` 把本 runner 包回 ``RuntimeAdapter``(``_chunk_to_event`` 已覆盖
|
|
10
|
+
全部 type),无需新代码。
|
|
11
|
+
|
|
12
|
+
codex thread 是 ephemeral(``ksadk/codex/client.py`` ``ephemeral=True``),不支持 resume。
|
|
13
|
+
"""
|
|
14
|
+
|
|
15
|
+
from __future__ import annotations
|
|
16
|
+
|
|
17
|
+
import asyncio
|
|
18
|
+
import uuid
|
|
19
|
+
from typing import Any, AsyncIterator, Dict
|
|
20
|
+
|
|
21
|
+
from ksadk.codex.client import AsyncCodexClient
|
|
22
|
+
from ksadk.codex.runtime import CodexRuntime
|
|
23
|
+
from ksadk.events.runtime_event import EventType
|
|
24
|
+
from ksadk.runners.base_runner import BaseRunner
|
|
25
|
+
from ksadk.runtime.adapter import RunHandle, StartRequest
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
class CodexRunner(BaseRunner):
|
|
29
|
+
"""codex 的 BaseRunner 适配。"""
|
|
30
|
+
|
|
31
|
+
def __init__(self, detection_result: Any, project_dir: str) -> None:
|
|
32
|
+
super().__init__(detection_result, project_dir)
|
|
33
|
+
# opt-in 代理(env KSADK_CODEX_USE_PROXY=1)在 client 构造时自动注入 provider
|
|
34
|
+
self._client = AsyncCodexClient()
|
|
35
|
+
self._runtime = CodexRuntime(self._client, sandbox_read_only=True)
|
|
36
|
+
# invocation_id -> RunHandle(stream 期间持有,cancel 用)
|
|
37
|
+
self._handles: dict[str, RunHandle] = {}
|
|
38
|
+
|
|
39
|
+
def load_agent(self) -> None:
|
|
40
|
+
# codex 无 root_agent 变量;agent 逻辑由 prompt 承载,无需加载
|
|
41
|
+
self._agent = True
|
|
42
|
+
|
|
43
|
+
async def invoke(self, input_data: Dict[str, Any]) -> Dict[str, Any]:
|
|
44
|
+
output = ""
|
|
45
|
+
usage: dict[str, Any] = {}
|
|
46
|
+
async for chunk in self.stream(input_data):
|
|
47
|
+
if chunk.get("type") == "final":
|
|
48
|
+
output = chunk.get("output", "") or output
|
|
49
|
+
if chunk.get("usage"):
|
|
50
|
+
usage = chunk["usage"]
|
|
51
|
+
return {"output": output, "usage": usage}
|
|
52
|
+
|
|
53
|
+
def stream(self, input_data: Dict[str, Any]) -> AsyncIterator[Dict[str, Any]]:
|
|
54
|
+
return self._stream(input_data)
|
|
55
|
+
|
|
56
|
+
async def _stream(self, input_data: Dict[str, Any]) -> AsyncIterator[Dict[str, Any]]:
|
|
57
|
+
prompt = str(input_data.get("input") or "")
|
|
58
|
+
session_id = str(input_data.get("session_id") or uuid.uuid4().hex)
|
|
59
|
+
# model:本轮请求优先,fallback 到 yaml(raw_config);prompt:codex 的 base_instructions
|
|
60
|
+
raw = getattr(self.detection_result, "raw_config", None) or {}
|
|
61
|
+
model = input_data.get("model") or raw.get("model")
|
|
62
|
+
base_instructions = raw.get("prompt")
|
|
63
|
+
if model:
|
|
64
|
+
self.sync_process_model_env(str(model))
|
|
65
|
+
config: Dict[str, Any] = {"sandbox_read_only": True}
|
|
66
|
+
if base_instructions:
|
|
67
|
+
config["base_instructions"] = str(base_instructions)
|
|
68
|
+
request = StartRequest(
|
|
69
|
+
input=prompt,
|
|
70
|
+
user_id="local",
|
|
71
|
+
session_id=session_id,
|
|
72
|
+
model=str(model) if model else None,
|
|
73
|
+
config=config,
|
|
74
|
+
)
|
|
75
|
+
handle = await self._runtime.start(request)
|
|
76
|
+
self._handles[handle.run_id] = handle
|
|
77
|
+
try:
|
|
78
|
+
accumulated = "" # TEXT_DELTA 累积(流式增量,前端打字机用)
|
|
79
|
+
completed_text = "" # 最后一次 TEXT_COMPLETED 的全文(权威,防 delta 丢包)
|
|
80
|
+
final_sent = False
|
|
81
|
+
async for event in self._runtime.stream(handle):
|
|
82
|
+
et = event.event_type
|
|
83
|
+
payload = event.payload or {}
|
|
84
|
+
if et == EventType.TEXT_DELTA:
|
|
85
|
+
phase = event.phase or "commentary"
|
|
86
|
+
delta = payload.get("text", "")
|
|
87
|
+
# final_answer 的 delta 当 text 流(前端打字机);commentary 当 thinking
|
|
88
|
+
if phase == "final_answer":
|
|
89
|
+
accumulated += delta
|
|
90
|
+
yield {"type": "text", "delta": delta}
|
|
91
|
+
else:
|
|
92
|
+
yield {"type": "thinking", "delta": delta}
|
|
93
|
+
elif et == EventType.TEXT_COMPLETED:
|
|
94
|
+
# 收尾全文:权威,记下来给 final 用;不当 delta 发(前端已通过 delta 收到)。
|
|
95
|
+
# 只收 final_answer(真正的回复);commentary completed 是思考收尾,忽略。
|
|
96
|
+
phase = event.phase or "final_answer"
|
|
97
|
+
if phase == "final_answer":
|
|
98
|
+
completed_text = payload.get("text", "")
|
|
99
|
+
elif et == EventType.RUN_COMPLETED:
|
|
100
|
+
final_sent = True
|
|
101
|
+
# final.output 优先用 completed 全文,fallback accumulated(delta 流)
|
|
102
|
+
yield {"type": "final", "output": completed_text or accumulated}
|
|
103
|
+
elif et == EventType.RUN_FAILED:
|
|
104
|
+
final_sent = True
|
|
105
|
+
yield {"type": "final", "output": completed_text or accumulated,
|
|
106
|
+
"error": payload.get("error", "codex run failed")}
|
|
107
|
+
elif et == EventType.RUN_INTERRUPTED:
|
|
108
|
+
yield {"type": "interrupt", "reason": "interrupted"}
|
|
109
|
+
elif et == EventType.RUN_CANCELED:
|
|
110
|
+
yield {"type": "interrupt", "reason": "canceled"}
|
|
111
|
+
if not final_sent:
|
|
112
|
+
yield {"type": "final", "output": completed_text or accumulated}
|
|
113
|
+
finally:
|
|
114
|
+
self._handles.pop(handle.run_id, None)
|
|
115
|
+
|
|
116
|
+
def request_cancel(self, invocation_id: str) -> str:
|
|
117
|
+
handle = self._handles.get(invocation_id)
|
|
118
|
+
if handle is None:
|
|
119
|
+
return "not_running"
|
|
120
|
+
result: Any
|
|
121
|
+
try:
|
|
122
|
+
result = asyncio.run(self._runtime.cancel(handle))
|
|
123
|
+
except RuntimeError:
|
|
124
|
+
# 已有事件循环(异步上下文):用独立线程跑 cancel,避免嵌套 asyncio.run
|
|
125
|
+
result = asyncio.run(asyncio.to_thread(self._runtime.cancel, handle))
|
|
126
|
+
return str(getattr(result, "value", result))
|
|
127
|
+
|
|
128
|
+
async def close(self) -> None:
|
|
129
|
+
try:
|
|
130
|
+
await self._client.close()
|
|
131
|
+
except Exception: # noqa: BLE001
|
|
132
|
+
pass
|
ksadk/runners/factory.py
CHANGED
|
@@ -6,6 +6,7 @@ import importlib
|
|
|
6
6
|
import sys
|
|
7
7
|
from pathlib import Path
|
|
8
8
|
from typing import TYPE_CHECKING
|
|
9
|
+
|
|
9
10
|
from ksadk.detection import DetectionResult, FrameworkType
|
|
10
11
|
from ksadk.runners.base_runner import BaseRunner
|
|
11
12
|
|
|
@@ -15,11 +16,11 @@ if TYPE_CHECKING:
|
|
|
15
16
|
|
|
16
17
|
def create_runner(detection_result: DetectionResult, project_dir: str) -> BaseRunner:
|
|
17
18
|
"""根据检测结果创建对应的 Runner
|
|
18
|
-
|
|
19
|
+
|
|
19
20
|
Args:
|
|
20
21
|
detection_result: 框架检测结果
|
|
21
22
|
project_dir: 项目目录
|
|
22
|
-
|
|
23
|
+
|
|
23
24
|
Returns:
|
|
24
25
|
对应框架的 Runner 实例
|
|
25
26
|
"""
|
|
@@ -55,19 +56,30 @@ def create_runner(detection_result: DetectionResult, project_dir: str) -> BaseRu
|
|
|
55
56
|
|
|
56
57
|
if detection_result.type == FrameworkType.ADK:
|
|
57
58
|
from ksadk.runners.adk_runner import ADKRunner
|
|
59
|
+
|
|
58
60
|
return ADKRunner(detection_result, project_dir)
|
|
59
|
-
|
|
61
|
+
|
|
60
62
|
elif detection_result.type == FrameworkType.LANGGRAPH:
|
|
61
63
|
from ksadk.runners.langgraph_runner import LangGraphRunner
|
|
64
|
+
|
|
62
65
|
return LangGraphRunner(detection_result, project_dir)
|
|
63
|
-
|
|
66
|
+
|
|
64
67
|
elif detection_result.type == FrameworkType.LANGCHAIN:
|
|
68
|
+
# 新 LangChain(create_agent)= LangGraph 图,经 LangChainRunner 薄壳复用
|
|
69
|
+
# LangGraphRunner(deepagents 同款);legacy 链在 load_agent 时被薄壳拒绝并给迁移指引。
|
|
65
70
|
from ksadk.runners.langchain_runner import LangChainRunner
|
|
71
|
+
|
|
66
72
|
return LangChainRunner(detection_result, project_dir)
|
|
67
73
|
|
|
68
74
|
elif detection_result.type == FrameworkType.DEEPAGENTS:
|
|
69
75
|
from ksadk.runners.deepagents_runner import DeepAgentsRunner
|
|
76
|
+
|
|
70
77
|
return DeepAgentsRunner(detection_result, project_dir)
|
|
71
|
-
|
|
78
|
+
|
|
79
|
+
elif detection_result.type == FrameworkType.CODEX:
|
|
80
|
+
from ksadk.runners.codex_runner import CodexRunner
|
|
81
|
+
|
|
82
|
+
return CodexRunner(detection_result, project_dir)
|
|
83
|
+
|
|
72
84
|
else:
|
|
73
85
|
raise ValueError(f"不支持的框架类型: {detection_result.type}")
|