agentengine-sdk-python 0.6.4__py3-none-any.whl → 0.7.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/METADATA +181 -0
- agentengine_sdk_python-0.7.0.dist-info/RECORD +482 -0
- {agentengine_sdk_python-0.6.4.dist-info → agentengine_sdk_python-0.7.0.dist-info}/WHEEL +1 -1
- agentengine_sdk_python-0.7.0.dist-info/entry_points.txt +3 -0
- agentengine_sdk_python-0.7.0.dist-info/licenses/LICENSE +175 -0
- agentengine_sdk_python-0.7.0.dist-info/top_level.txt +2 -0
- ksadk/__init__.py +13 -0
- ksadk/__main__.py +4 -0
- ksadk/a2a/__init__.py +15 -0
- ksadk/a2a/card_builder.py +64 -0
- ksadk/a2a/client.py +309 -0
- ksadk/a2a/executor.py +201 -0
- ksadk/a2a/server.py +79 -0
- ksadk/agents/__init__.py +20 -0
- ksadk/agents/base.py +370 -0
- ksadk/agents/context.py +38 -0
- ksadk/agents/event.py +35 -0
- ksadk/agents/loop_agent.py +71 -0
- ksadk/agents/parallel_agent.py +109 -0
- ksadk/agents/runner_adapter.py +24 -0
- ksadk/agents/sequential_agent.py +34 -0
- ksadk/api/__init__.py +3 -0
- ksadk/api/client.py +2246 -0
- ksadk/builders/__init__.py +20 -0
- ksadk/builders/base.py +66 -0
- ksadk/builders/code_builder.py +1990 -0
- ksadk/builders/container_builder.py +786 -0
- ksadk/builders/framework_requirements.py +59 -0
- ksadk/builders/ks3_uploader.py +389 -0
- ksadk/builders/mcp_builder.py +476 -0
- ksadk/builders/requirements_utils.py +75 -0
- ksadk/cli/__init__.py +531 -0
- ksadk/cli/__main__.py +4 -0
- ksadk/cli/agent_ref.py +204 -0
- ksadk/cli/cmd_a2a.py +167 -0
- ksadk/cli/cmd_agent.py +201 -0
- ksadk/cli/cmd_build.py +270 -0
- ksadk/cli/cmd_completion.py +304 -0
- ksadk/cli/cmd_config.py +758 -0
- ksadk/cli/cmd_create.py +2304 -0
- ksadk/cli/cmd_dashboard.py +900 -0
- ksadk/cli/cmd_deploy.py +704 -0
- ksadk/cli/cmd_destroy.py +345 -0
- ksadk/cli/cmd_files.py +1227 -0
- ksadk/cli/cmd_hermes.py +1263 -0
- ksadk/cli/cmd_invoke.py +1503 -0
- ksadk/cli/cmd_launch.py +564 -0
- ksadk/cli/cmd_mcp.py +1179 -0
- ksadk/cli/cmd_model.py +302 -0
- ksadk/cli/cmd_openclaw.py +3922 -0
- ksadk/cli/cmd_run.py +239 -0
- ksadk/cli/cmd_status.py +588 -0
- ksadk/cli/cmd_version.py +522 -0
- ksadk/cli/cmd_web.py +288 -0
- ksadk/cli/deploy_utils.py +87 -0
- ksadk/cli/dry_run.py +214 -0
- ksadk/cli/env_options.py +82 -0
- ksadk/cli/error_utils.py +525 -0
- ksadk/cli/global_options.py +31 -0
- ksadk/cli/local_runtime.py +97 -0
- ksadk/cli/model_catalog.py +136 -0
- ksadk/cli/network_options.py +412 -0
- ksadk/cli/resource_common.py +621 -0
- ksadk/cli/storage.py +84 -0
- ksadk/cli/ui.py +431 -0
- ksadk/cli/workflow_common.py +552 -0
- ksadk/common/__init__.py +14 -0
- ksadk/common/aicp_env.py +128 -0
- ksadk/common/auth.py +190 -0
- ksadk/common/constants.py +84 -0
- ksadk/common/llm_utils.py +61 -0
- ksadk/configs/__init__.py +61 -0
- ksadk/configs/env_registry.py +343 -0
- ksadk/configs/global_config.py +200 -0
- ksadk/configs/settings.py +706 -0
- ksadk/conversations/__init__.py +95 -0
- ksadk/conversations/attachment_storage.py +379 -0
- ksadk/conversations/attachments.py +774 -0
- ksadk/conversations/compaction_pipeline.py +387 -0
- ksadk/conversations/compaction_prompt.py +128 -0
- ksadk/conversations/context.py +303 -0
- ksadk/conversations/message_projection.py +269 -0
- ksadk/conversations/model_context.py +370 -0
- ksadk/conversations/model_options.py +136 -0
- ksadk/conversations/normalize.py +446 -0
- ksadk/conversations/reasoning_markup.py +91 -0
- ksadk/conversations/run_kinds.py +61 -0
- ksadk/conversations/run_status.py +53 -0
- ksadk/conversations/runtime.py +5276 -0
- ksadk/conversations/semantic_summary.py +359 -0
- ksadk/conversations/session_title.py +254 -0
- ksadk/deployment/__init__.py +83 -0
- ksadk/deployment/agent_access.py +226 -0
- ksadk/deployment/base.py +229 -0
- ksadk/deployment/manager.py +332 -0
- ksadk/deployment/providers/__init__.py +10 -0
- ksadk/deployment/providers/serverless.py +1115 -0
- ksadk/deployment/registry.py +120 -0
- ksadk/deployment/state.py +78 -0
- ksadk/deployment/ui_config.py +21 -0
- ksadk/detection/__init__.py +7 -0
- ksadk/detection/detector.py +431 -0
- ksadk/detection/mcp_detector.py +250 -0
- ksadk/hermes_terminal.py +467 -0
- ksadk/identity/__init__.py +17 -0
- ksadk/identity/resolver.py +385 -0
- ksadk/knowledge_base/__init__.py +62 -0
- ksadk/knowledge_base/adk_tool.py +47 -0
- ksadk/knowledge_base/client.py +297 -0
- ksadk/knowledge_base/langchain_tool.py +55 -0
- ksadk/knowledge_base/service.py +66 -0
- ksadk/knowledge_base/tool.py +50 -0
- ksadk/markdown.py +169 -0
- ksadk/mcp_runtime/__init__.py +231 -0
- ksadk/memory/__init__.py +57 -0
- ksadk/memory/adk/__init__.py +51 -0
- ksadk/memory/adk/backends/__init__.py +5 -0
- ksadk/memory/adk/backends/base_ltm_backend.py +52 -0
- ksadk/memory/adk/backends/http_ltm_backend.py +183 -0
- ksadk/memory/adk/backends/inmemory_ltm_backend.py +96 -0
- ksadk/memory/adk/backends/sdk_ltm_backend.py +456 -0
- ksadk/memory/adk/long_term_memory.py +273 -0
- ksadk/memory/adk/resilient_session_service.py +268 -0
- ksadk/memory/adk/short_term_memory.py +304 -0
- ksadk/memory/adk_tool.py +31 -0
- ksadk/memory/backends/__init__.py +6 -0
- ksadk/memory/backends/base.py +103 -0
- ksadk/memory/backends/memory.py +112 -0
- ksadk/memory/backends/redis.py +146 -0
- ksadk/memory/langchain_tool.py +39 -0
- ksadk/memory/ltm_backend_factory.py +24 -0
- ksadk/memory/manager.py +215 -0
- ksadk/memory/service.py +172 -0
- ksadk/memory/tool.py +96 -0
- ksadk/model_policy.py +223 -0
- ksadk/openclaw_gateway.py +378 -0
- ksadk/runners/__init__.py +8 -0
- ksadk/runners/adk_runner.py +1994 -0
- ksadk/runners/base_runner.py +305 -0
- ksadk/runners/deepagents_runner.py +13 -0
- ksadk/runners/factory.py +73 -0
- ksadk/runners/langchain_runner.py +751 -0
- ksadk/runners/langgraph_runner.py +985 -0
- ksadk/runners/patch_langchain.py +187 -0
- ksadk/runners/remote_runner.py +792 -0
- ksadk/runners/usage_accumulator.py +38 -0
- ksadk/runners/utils/__init__.py +19 -0
- ksadk/runners/utils/langfuse.py +230 -0
- ksadk/runners/utils/loader.py +62 -0
- ksadk/runtime_context.py +166 -0
- ksadk/runtime_state.py +25 -0
- ksadk/sandbox/__init__.py +28 -0
- ksadk/sandbox/backends/__init__.py +9 -0
- ksadk/sandbox/backends/e2b.py +154 -0
- ksadk/sandbox/backends/local_process.py +131 -0
- ksadk/sandbox/base.py +101 -0
- ksadk/sandbox/factory.py +53 -0
- ksadk/sandbox/registry.py +187 -0
- ksadk/server/__init__.py +7 -0
- ksadk/server/api_models.py +73 -0
- ksadk/server/app.py +3931 -0
- ksadk/server/static/assets/ArtifactsPanel-D-SSn2ee.js +1 -0
- ksadk/server/static/assets/CodeBlock-P16VOLYi.js +9 -0
- ksadk/server/static/assets/KaTeX_AMS-Regular-BQhdFMY1.woff2 +0 -0
- ksadk/server/static/assets/KaTeX_AMS-Regular-DMm9YOAa.woff +0 -0
- ksadk/server/static/assets/KaTeX_AMS-Regular-DRggAlZN.ttf +0 -0
- ksadk/server/static/assets/KaTeX_Caligraphic-Bold-ATXxdsX0.ttf +0 -0
- ksadk/server/static/assets/KaTeX_Caligraphic-Bold-BEiXGLvX.woff +0 -0
- ksadk/server/static/assets/KaTeX_Caligraphic-Bold-Dq_IR9rO.woff2 +0 -0
- ksadk/server/static/assets/KaTeX_Caligraphic-Regular-CTRA-rTL.woff +0 -0
- ksadk/server/static/assets/KaTeX_Caligraphic-Regular-Di6jR-x-.woff2 +0 -0
- ksadk/server/static/assets/KaTeX_Caligraphic-Regular-wX97UBjC.ttf +0 -0
- ksadk/server/static/assets/KaTeX_Fraktur-Bold-BdnERNNW.ttf +0 -0
- ksadk/server/static/assets/KaTeX_Fraktur-Bold-BsDP51OF.woff +0 -0
- ksadk/server/static/assets/KaTeX_Fraktur-Bold-CL6g_b3V.woff2 +0 -0
- ksadk/server/static/assets/KaTeX_Fraktur-Regular-CB_wures.ttf +0 -0
- ksadk/server/static/assets/KaTeX_Fraktur-Regular-CTYiF6lA.woff2 +0 -0
- ksadk/server/static/assets/KaTeX_Fraktur-Regular-Dxdc4cR9.woff +0 -0
- ksadk/server/static/assets/KaTeX_Main-Bold-Cx986IdX.woff2 +0 -0
- ksadk/server/static/assets/KaTeX_Main-Bold-Jm3AIy58.woff +0 -0
- ksadk/server/static/assets/KaTeX_Main-Bold-waoOVXN0.ttf +0 -0
- ksadk/server/static/assets/KaTeX_Main-BoldItalic-DxDJ3AOS.woff2 +0 -0
- ksadk/server/static/assets/KaTeX_Main-BoldItalic-DzxPMmG6.ttf +0 -0
- ksadk/server/static/assets/KaTeX_Main-BoldItalic-SpSLRI95.woff +0 -0
- ksadk/server/static/assets/KaTeX_Main-Italic-3WenGoN9.ttf +0 -0
- ksadk/server/static/assets/KaTeX_Main-Italic-BMLOBm91.woff +0 -0
- ksadk/server/static/assets/KaTeX_Main-Italic-NWA7e6Wa.woff2 +0 -0
- ksadk/server/static/assets/KaTeX_Main-Regular-B22Nviop.woff2 +0 -0
- ksadk/server/static/assets/KaTeX_Main-Regular-Dr94JaBh.woff +0 -0
- ksadk/server/static/assets/KaTeX_Main-Regular-ypZvNtVU.ttf +0 -0
- ksadk/server/static/assets/KaTeX_Math-BoldItalic-B3XSjfu4.ttf +0 -0
- ksadk/server/static/assets/KaTeX_Math-BoldItalic-CZnvNsCZ.woff2 +0 -0
- ksadk/server/static/assets/KaTeX_Math-BoldItalic-iY-2wyZ7.woff +0 -0
- ksadk/server/static/assets/KaTeX_Math-Italic-DA0__PXp.woff +0 -0
- ksadk/server/static/assets/KaTeX_Math-Italic-flOr_0UB.ttf +0 -0
- ksadk/server/static/assets/KaTeX_Math-Italic-t53AETM-.woff2 +0 -0
- ksadk/server/static/assets/KaTeX_SansSerif-Bold-CFMepnvq.ttf +0 -0
- ksadk/server/static/assets/KaTeX_SansSerif-Bold-D1sUS0GD.woff2 +0 -0
- ksadk/server/static/assets/KaTeX_SansSerif-Bold-DbIhKOiC.woff +0 -0
- ksadk/server/static/assets/KaTeX_SansSerif-Italic-C3H0VqGB.woff2 +0 -0
- ksadk/server/static/assets/KaTeX_SansSerif-Italic-DN2j7dab.woff +0 -0
- ksadk/server/static/assets/KaTeX_SansSerif-Italic-YYjJ1zSn.ttf +0 -0
- ksadk/server/static/assets/KaTeX_SansSerif-Regular-BNo7hRIc.ttf +0 -0
- ksadk/server/static/assets/KaTeX_SansSerif-Regular-CS6fqUqJ.woff +0 -0
- ksadk/server/static/assets/KaTeX_SansSerif-Regular-DDBCnlJ7.woff2 +0 -0
- ksadk/server/static/assets/KaTeX_Script-Regular-C5JkGWo-.ttf +0 -0
- ksadk/server/static/assets/KaTeX_Script-Regular-D3wIWfF6.woff2 +0 -0
- ksadk/server/static/assets/KaTeX_Script-Regular-D5yQViql.woff +0 -0
- ksadk/server/static/assets/KaTeX_Size1-Regular-C195tn64.woff +0 -0
- ksadk/server/static/assets/KaTeX_Size1-Regular-Dbsnue_I.ttf +0 -0
- ksadk/server/static/assets/KaTeX_Size1-Regular-mCD8mA8B.woff2 +0 -0
- ksadk/server/static/assets/KaTeX_Size2-Regular-B7gKUWhC.ttf +0 -0
- ksadk/server/static/assets/KaTeX_Size2-Regular-Dy4dx90m.woff2 +0 -0
- ksadk/server/static/assets/KaTeX_Size2-Regular-oD1tc_U0.woff +0 -0
- ksadk/server/static/assets/KaTeX_Size3-Regular-CTq5MqoE.woff +0 -0
- ksadk/server/static/assets/KaTeX_Size3-Regular-DgpXs0kz.ttf +0 -0
- ksadk/server/static/assets/KaTeX_Size4-Regular-BF-4gkZK.woff +0 -0
- ksadk/server/static/assets/KaTeX_Size4-Regular-DWFBv043.ttf +0 -0
- ksadk/server/static/assets/KaTeX_Size4-Regular-Dl5lxZxV.woff2 +0 -0
- ksadk/server/static/assets/KaTeX_Typewriter-Regular-C0xS9mPB.woff +0 -0
- ksadk/server/static/assets/KaTeX_Typewriter-Regular-CO6r4hn1.woff2 +0 -0
- ksadk/server/static/assets/KaTeX_Typewriter-Regular-D3Ib7_Hf.ttf +0 -0
- ksadk/server/static/assets/MathMessageMarkdown-CdGiQWHR.js +8 -0
- ksadk/server/static/assets/MathMessageMarkdown-DeYh8QPr.css +1 -0
- ksadk/server/static/assets/MermaidBlock-IOcal8cm.js +303 -0
- ksadk/server/static/assets/NativeTerminalPanel-CHOd7Rch.css +1 -0
- ksadk/server/static/assets/NativeTerminalPanel-DGSDWsei.js +1 -0
- ksadk/server/static/assets/addon-fit-DthTIhi3.js +1 -0
- ksadk/server/static/assets/apl-CnwPGSsG.js +1 -0
- ksadk/server/static/assets/arc-BA13sHc9.js +1 -0
- ksadk/server/static/assets/architecture-7EHR7CIX-BvUlsA6l.js +1 -0
- ksadk/server/static/assets/architectureDiagram-3BPJPVTR-DzJzgVoL.js +36 -0
- ksadk/server/static/assets/asciiarmor-qTkVPQu6.js +1 -0
- ksadk/server/static/assets/asn1-Dr8qZg38.js +1 -0
- ksadk/server/static/assets/asterisk-Bja0s6e1.js +1 -0
- ksadk/server/static/assets/blockDiagram-GPEHLZMM-UTdVcZhn.js +132 -0
- ksadk/server/static/assets/brainfuck-D5EjA2JK.js +1 -0
- ksadk/server/static/assets/c4Diagram-AAUBKEIU-Dix0GD4m.js +10 -0
- ksadk/server/static/assets/channel-CTuydARX.js +1 -0
- ksadk/server/static/assets/chunk-2J33WTMH-C2JxuZ42.js +1 -0
- ksadk/server/static/assets/chunk-4BX2VUAB-Be57QPgD.js +1 -0
- ksadk/server/static/assets/chunk-55IACEB6-WjSuy4nv.js +1 -0
- ksadk/server/static/assets/chunk-727SXJPM-BOovP-b5.js +206 -0
- ksadk/server/static/assets/chunk-AQP2D5EJ-DOmZNmWj.js +231 -0
- ksadk/server/static/assets/chunk-FMBD7UC4-DzwlodkU.js +15 -0
- ksadk/server/static/assets/chunk-ND2GUHAM-DMqAikEU.js +1 -0
- ksadk/server/static/assets/chunk-QZHKN3VN-BnCydivS.js +1 -0
- ksadk/server/static/assets/classDiagram-4FO5ZUOK-BNHg45Be.js +1 -0
- ksadk/server/static/assets/classDiagram-v2-Q7XG4LA2-BNHg45Be.js +1 -0
- ksadk/server/static/assets/clike-DHH8Ad3s.js +1 -0
- ksadk/server/static/assets/clojure-BflJGmDX.js +1 -0
- ksadk/server/static/assets/cmake-CyVbuzPu.js +1 -0
- ksadk/server/static/assets/cobol-B_OZ4V-R.js +1 -0
- ksadk/server/static/assets/coffeescript-B2pKbFk8.js +1 -0
- ksadk/server/static/assets/commonlisp-CcllspGY.js +1 -0
- ksadk/server/static/assets/cose-bilkent-S5V4N54A-Zhy2GBnP.js +1 -0
- ksadk/server/static/assets/crystal-M5-qzICs.js +1 -0
- ksadk/server/static/assets/css-CYpP4FRV.js +1 -0
- ksadk/server/static/assets/cypher-p9eYesGn.js +1 -0
- ksadk/server/static/assets/cytoscape.esm-DelgaX4f.js +321 -0
- ksadk/server/static/assets/d-BhMjBjQP.js +1 -0
- ksadk/server/static/assets/dagre-BM42HDAG-CbKrtIUz.js +4 -0
- ksadk/server/static/assets/dagre-Bx709z4p.js +1 -0
- ksadk/server/static/assets/defaultLocale-C8Fc0cco.js +1 -0
- ksadk/server/static/assets/diagram-2AECGRRQ-BRApgQRK.js +43 -0
- ksadk/server/static/assets/diagram-5GNKFQAL-D0xbnDiK.js +10 -0
- ksadk/server/static/assets/diagram-KO2AKTUF-CVugVI9L.js +3 -0
- ksadk/server/static/assets/diagram-LMA3HP47-DozUGgee.js +24 -0
- ksadk/server/static/assets/diagram-OG6HWLK6-ZOYsKlru.js +24 -0
- ksadk/server/static/assets/diff-ChtP43wD.js +1 -0
- ksadk/server/static/assets/dist-2hInLS_J.js +9 -0
- ksadk/server/static/assets/dist-8EEyGgDx.js +1 -0
- ksadk/server/static/assets/dist-8_SfK1IP.js +1 -0
- ksadk/server/static/assets/dist-B0NP_Z0z.js +23 -0
- ksadk/server/static/assets/dist-BIJVDMuB.js +1 -0
- ksadk/server/static/assets/dist-BmlMPsCc.js +2 -0
- ksadk/server/static/assets/dist-BrCcQ47T.js +1 -0
- ksadk/server/static/assets/dist-BssVmjIo.js +6 -0
- ksadk/server/static/assets/dist-C3HIIaN5.js +1 -0
- ksadk/server/static/assets/dist-CPBtqRTW.js +1 -0
- ksadk/server/static/assets/dist-CkEKJFtk.js +1 -0
- ksadk/server/static/assets/dist-D-JMdWPQ.js +1 -0
- ksadk/server/static/assets/dist-D-xOD048.js +1 -0
- ksadk/server/static/assets/dist-D57wnGWd.js +1 -0
- ksadk/server/static/assets/dist-DL_NKc_z.js +1 -0
- ksadk/server/static/assets/dist-DMezvBGJ.js +1 -0
- ksadk/server/static/assets/dist-DmFaq_Iy.js +1 -0
- ksadk/server/static/assets/dist-Dp0k7bWI.js +1 -0
- ksadk/server/static/assets/dist-DpKtt4Bo.js +1 -0
- ksadk/server/static/assets/dist-DyOkZmze.js +11 -0
- ksadk/server/static/assets/dist-DyWsb78Q.js +1 -0
- ksadk/server/static/assets/dist-gX6GOLKq.js +1 -0
- ksadk/server/static/assets/dockerfile-BLkNEvjs.js +1 -0
- ksadk/server/static/assets/dtd-DTF72YNO.js +1 -0
- ksadk/server/static/assets/dylan-C6jEEEk-.js +1 -0
- ksadk/server/static/assets/ebnf-D4c0_ac3.js +1 -0
- ksadk/server/static/assets/ecl-BSZaIHnp.js +1 -0
- ksadk/server/static/assets/eiffel-BEjRio4Q.js +1 -0
- ksadk/server/static/assets/elm-Cshzl8qu.js +1 -0
- ksadk/server/static/assets/erDiagram-TEJ5UH35-Bk-9bgE5.js +85 -0
- ksadk/server/static/assets/erlang-DaB2Rkuy.js +1 -0
- ksadk/server/static/assets/eventmodeling-FCH6USID-DsAgWnlf.js +1 -0
- ksadk/server/static/assets/factor-D7LVTn2l.js +1 -0
- ksadk/server/static/assets/fcl-ClOhbFR7.js +1 -0
- ksadk/server/static/assets/flowDiagram-I6XJVG4X-Dn9kZVuZ.js +162 -0
- ksadk/server/static/assets/forth-Cezjo90N.js +1 -0
- ksadk/server/static/assets/fortran-Bt6PBEDR.js +1 -0
- ksadk/server/static/assets/ganttDiagram-6RSMTGT7-BGxXlJqm.js +292 -0
- ksadk/server/static/assets/gas-BHEdbvp9.js +1 -0
- ksadk/server/static/assets/gherkin-oBAE_ms0.js +1 -0
- ksadk/server/static/assets/gitGraph-WXDBUCRP-BIao9Yjg.js +1 -0
- ksadk/server/static/assets/gitGraphDiagram-PVQCEYII-C7Q0X-wi.js +106 -0
- ksadk/server/static/assets/graphlib-B8gBHxth.js +1 -0
- ksadk/server/static/assets/groovy-BC3IOsC8.js +1 -0
- ksadk/server/static/assets/haskell-BRsoo5mP.js +1 -0
- ksadk/server/static/assets/haxe-DIz0ZZqd.js +1 -0
- ksadk/server/static/assets/http-CLVgA2GD.js +1 -0
- ksadk/server/static/assets/idl-BUZw3wgd.js +1 -0
- ksadk/server/static/assets/index-C00Lwg3L.js +165 -0
- ksadk/server/static/assets/index-DAURbCsP.css +1 -0
- ksadk/server/static/assets/info-J43DQDTF-CyipqGxU.js +1 -0
- ksadk/server/static/assets/infoDiagram-5YYISTIA-BO_CSqq5.js +2 -0
- ksadk/server/static/assets/init-D6jRqBbL.js +1 -0
- ksadk/server/static/assets/ishikawaDiagram-YF4QCWOH-eYLPLd46.js +70 -0
- ksadk/server/static/assets/javascript-9Tg8ixDm.js +1 -0
- ksadk/server/static/assets/journeyDiagram-JHISSGLW-De9geSb0.js +139 -0
- ksadk/server/static/assets/julia-CQfgDRfP.js +1 -0
- ksadk/server/static/assets/kanban-definition-UN3LZRKU-Cs80kQto.js +89 -0
- ksadk/server/static/assets/katex-DSrCFD8n.js +265 -0
- ksadk/server/static/assets/linear-CN9sbKTF.js +1 -0
- ksadk/server/static/assets/livescript-BXxG0Yva.js +1 -0
- ksadk/server/static/assets/lua-CiA1ziua.js +1 -0
- ksadk/server/static/assets/mathematica-u8YMmbU0.js +1 -0
- ksadk/server/static/assets/mbox-BEMVcqjs.js +1 -0
- ksadk/server/static/assets/mermaid-parser.core-DlgSBU8l.js +161 -0
- ksadk/server/static/assets/mindmap-definition-RKZ34NQL-9afz7Oug.js +96 -0
- ksadk/server/static/assets/mirc-C9zpzAZU.js +1 -0
- ksadk/server/static/assets/mllike-B45xgp2S.js +1 -0
- ksadk/server/static/assets/modelica-CqHI_q-D.js +1 -0
- ksadk/server/static/assets/mscgen-qgSLujhx.js +1 -0
- ksadk/server/static/assets/mumps-CW_TBmxz.js +1 -0
- ksadk/server/static/assets/nginx-BMaDbqW3.js +1 -0
- ksadk/server/static/assets/nsis-AQ_alPln.js +1 -0
- ksadk/server/static/assets/ntriples-d28e9m0E.js +1 -0
- ksadk/server/static/assets/octave-D2Q8cUp1.js +1 -0
- ksadk/server/static/assets/ordinal-hYBb2elL.js +1 -0
- ksadk/server/static/assets/oz-BwTct_5T.js +1 -0
- ksadk/server/static/assets/packet-YPE3B663-CGkyRxlg.js +1 -0
- ksadk/server/static/assets/pascal-Dp_KdFgX.js +1 -0
- ksadk/server/static/assets/perl-CdEHsPfU.js +1 -0
- ksadk/server/static/assets/pie-LRSECV5Y-M0uWAf4n.js +1 -0
- ksadk/server/static/assets/pieDiagram-4H26LBE5-DPv_VstN.js +30 -0
- ksadk/server/static/assets/pig-AF4Hwhju.js +1 -0
- ksadk/server/static/assets/powershell-CzG71I4L.js +1 -0
- ksadk/server/static/assets/properties-C357ku5U.js +1 -0
- ksadk/server/static/assets/protobuf-D1ij_kNL.js +1 -0
- ksadk/server/static/assets/pug-Bugr-47h.js +1 -0
- ksadk/server/static/assets/puppet-B4hC2X4m.js +1 -0
- ksadk/server/static/assets/python-BqYw9LYJ.js +1 -0
- ksadk/server/static/assets/q-B9NhS7L_.js +1 -0
- ksadk/server/static/assets/quadrantDiagram-W4KKPZXB-o77wZ1XK.js +7 -0
- ksadk/server/static/assets/r-DADKenSm.js +1 -0
- ksadk/server/static/assets/radar-GUYGQ44K-Bdbm24-x.js +1 -0
- ksadk/server/static/assets/requirementDiagram-4Y6WPE33-BYVw81VC.js +84 -0
- ksadk/server/static/assets/rpm-gpDK5sbt.js +1 -0
- ksadk/server/static/assets/ruby-DsYpTuWg.js +1 -0
- ksadk/server/static/assets/sankeyDiagram-5OEKKPKP-B7nZFMKT.js +40 -0
- ksadk/server/static/assets/sas-C2OyD2Y6.js +1 -0
- ksadk/server/static/assets/scheme-CyDdOh7e.js +1 -0
- ksadk/server/static/assets/sequenceDiagram-3UESZ5HK-BGRRrFw5.js +162 -0
- ksadk/server/static/assets/shell-Du5Qg9im.js +1 -0
- ksadk/server/static/assets/sieve-BAxa3IjF.js +1 -0
- ksadk/server/static/assets/simple-mode-DRpGK0lJ.js +1 -0
- ksadk/server/static/assets/smalltalk-BLp5-jwC.js +1 -0
- ksadk/server/static/assets/solr-BBopId9w.js +1 -0
- ksadk/server/static/assets/sparql-Dz-mlCAC.js +1 -0
- ksadk/server/static/assets/spreadsheet-CTIncYxj.js +1 -0
- ksadk/server/static/assets/sql-DcCJ9jop.js +1 -0
- ksadk/server/static/assets/stateDiagram-AJRCARHV-BUfHCoPs.js +1 -0
- ksadk/server/static/assets/stateDiagram-v2-BHNVJYJU-8xBN_gLM.js +1 -0
- ksadk/server/static/assets/stex-sDrdk2BW.js +1 -0
- ksadk/server/static/assets/stylus-DLLZ8dgm.js +1 -0
- ksadk/server/static/assets/swift-DKB6_1j6.js +1 -0
- ksadk/server/static/assets/tcl-BGfruO1u.js +1 -0
- ksadk/server/static/assets/textile-DWBqthVk.js +1 -0
- ksadk/server/static/assets/tiddlywiki-VlUiK86J.js +1 -0
- ksadk/server/static/assets/tiki-CxVlf5KZ.js +1 -0
- ksadk/server/static/assets/timeline-definition-PNZ67QCA-FbCTGrf9.js +120 -0
- ksadk/server/static/assets/toml-LvoKBwCs.js +1 -0
- ksadk/server/static/assets/treeView-BLDUP644-npMo0ak1.js +1 -0
- ksadk/server/static/assets/treemap-LRROVOQU-CHdzrrdo.js +1 -0
- ksadk/server/static/assets/troff-C2dAgh7P.js +1 -0
- ksadk/server/static/assets/ttcn-BePYh-hG.js +1 -0
- ksadk/server/static/assets/ttcn-cfg-CY0aot7Q.js +1 -0
- ksadk/server/static/assets/turtle-BDLWE2cD.js +1 -0
- ksadk/server/static/assets/vb-BthdM_4N.js +1 -0
- ksadk/server/static/assets/vbscript-D9f6rSsU.js +1 -0
- ksadk/server/static/assets/velocity-CqftRsjg.js +1 -0
- ksadk/server/static/assets/vennDiagram-CIIHVFJN-DWgwtPsJ.js +34 -0
- ksadk/server/static/assets/verilog-D-x6ne0Z.js +1 -0
- ksadk/server/static/assets/vhdl-CMrOq2q1.js +1 -0
- ksadk/server/static/assets/wardley-L42UT6IY-BEQz7wyy.js +1 -0
- ksadk/server/static/assets/wardleyDiagram-YWT4CUSO-2x8G-tTM.js +78 -0
- ksadk/server/static/assets/webidl-D5jiJvOU.js +1 -0
- ksadk/server/static/assets/xquery-fj_R-kMw.js +1 -0
- ksadk/server/static/assets/xterm-DooSxjI5.js +36 -0
- ksadk/server/static/assets/xychartDiagram-2RQKCTM6-Drma3AYl.js +7 -0
- ksadk/server/static/assets/yacas-CXXgtw0p.js +1 -0
- ksadk/server/static/assets/z80-CL1naaMV.js +1 -0
- ksadk/server/static/favicon.svg +1 -0
- ksadk/server/static/icons.svg +24 -0
- ksadk/server/static/index.html +14 -0
- ksadk/server/terminal_sessions.py +551 -0
- ksadk/sessions/__init__.py +279 -0
- ksadk/sessions/base.py +354 -0
- ksadk/sessions/continuity.py +337 -0
- ksadk/sessions/errors.py +7 -0
- ksadk/sessions/in_memory.py +273 -0
- ksadk/sessions/local_service.py +949 -0
- ksadk/sessions/postgres_service.py +901 -0
- ksadk/sessions/resilience.py +52 -0
- ksadk/sessions/resilient.py +360 -0
- ksadk/sessions/sqlite_service.py +13 -0
- ksadk/skills/__init__.py +9 -0
- ksadk/skills/loader.py +46 -0
- ksadk/skills/models.py +120 -0
- ksadk/skills/package_store.py +104 -0
- ksadk/skills/runtime/__init__.py +17 -0
- ksadk/skills/runtime/agent.py +183 -0
- ksadk/skills/runtime/artifacts.py +39 -0
- ksadk/skills/runtime/backends/__init__.py +1 -0
- ksadk/skills/runtime/backends/disabled.py +8 -0
- ksadk/skills/runtime/backends/e2b.py +168 -0
- ksadk/skills/runtime/backends/local.py +95 -0
- ksadk/skills/runtime/base.py +103 -0
- ksadk/skills/runtime/executor.py +219 -0
- ksadk/skills/runtime/factory.py +37 -0
- ksadk/skills/runtime/loader.py +131 -0
- ksadk/skills/runtime/registry.py +150 -0
- ksadk/skills/runtime/request.py +67 -0
- ksadk/skills/service_client.py +239 -0
- ksadk/skills/service_env.py +58 -0
- ksadk/skills/tool_defs.py +221 -0
- ksadk/terminal_client.py +69 -0
- ksadk/terminal_exec_policy.py +229 -0
- ksadk/tools/__init__.py +17 -0
- ksadk/tools/gateway.py +230 -0
- ksadk/tools/result_budget.py +154 -0
- ksadk/toolsets/__init__.py +854 -0
- ksadk/toolsets/_langchain.py +11 -0
- ksadk/toolsets/platform.py +93 -0
- ksadk/toolsets/sandbox.py +310 -0
- ksadk/toolsets/skills.py +217 -0
- ksadk/toolsets/web.py +266 -0
- ksadk/toolsets/workspace.py +917 -0
- ksadk/toolsets/workspace_state.py +44 -0
- ksadk/tracing/__init__.py +37 -0
- ksadk/tracing/exporters/__init__.py +1 -0
- ksadk/tracing/exporters/inmemory_exporter.py +116 -0
- ksadk/tracing/exporters/langfuse_exporter.py +445 -0
- ksadk/tracing/setup.py +892 -0
- ksadk/tracing/span_utils.py +114 -0
- ksadk/tui/__init__.py +27 -0
- ksadk/tui/loop.py +1877 -0
- ksadk/tui/stream_render.py +68 -0
- ksadk/ui_config.py +168 -0
- ksadk/version.py +4 -0
- ksadk_runtime_common/__init__.py +20 -0
- ksadk_runtime_common/memory_backend/__init__.py +29 -0
- ksadk_runtime_common/memory_backend/manifest.py +79 -0
- ksadk_runtime_common/memory_backend/providers/__init__.py +6 -0
- ksadk_runtime_common/memory_backend/providers/lancedb.py +151 -0
- ksadk_runtime_common/memory_backend/providers/mem0.py +74 -0
- ksadk_runtime_common/memory_backend/registry.py +56 -0
- ksadk_runtime_common/memory_backend/render.py +71 -0
- ksadk_runtime_common/schemas/memory_backend_manifest.schema.json +148 -0
- ksadk_runtime_common/workspace_files/__init__.py +29 -0
- ksadk_runtime_common/workspace_files/bootstrap.py +56 -0
- ksadk_runtime_common/workspace_files/constants.py +9 -0
- ksadk_runtime_common/workspace_files/path_utils.py +71 -0
- ksadk_runtime_common/workspace_files/preview.py +96 -0
- ksadk_runtime_common/workspace_files/router.py +254 -0
- agentengine_sdk_python/__init__.py +0 -3
- agentengine_sdk_python-0.6.4.dist-info/METADATA +0 -48
- agentengine_sdk_python-0.6.4.dist-info/RECORD +0 -5
- agentengine_sdk_python-0.6.4.dist-info/top_level.txt +0 -1
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
"""usage 累加工具:逐字段求和(input/output/total + details 子键)。
|
|
2
|
+
|
|
3
|
+
用于 runner 本轮内多次 LLM 调用的 usage 累积。input_tokens 各 provider 均含 cache
|
|
4
|
+
(Gemini prompt_token_count 含 cached_content_token_count;OpenAI prompt_tokens 含
|
|
5
|
+
cached_tokens;Anthropic 经 langchain_anthropic 转换后 input_tokens 含 cache_read+
|
|
6
|
+
cache_creation),直接相加不重复;input_token_details 键名不统一(cached/cache_read/
|
|
7
|
+
cache_creation),逐键求和作诊断明细。
|
|
8
|
+
"""
|
|
9
|
+
from __future__ import annotations
|
|
10
|
+
|
|
11
|
+
from typing import Any
|
|
12
|
+
|
|
13
|
+
_MAIN_FIELDS = ("input_tokens", "output_tokens", "total_tokens")
|
|
14
|
+
_DETAIL_FIELDS = ("input_token_details", "output_token_details")
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
def accumulate_usage(acc: dict[str, Any], delta: dict[str, Any]) -> dict[str, Any]:
|
|
18
|
+
"""把 delta 累加进 acc,返回新 dict(不改 acc)。"""
|
|
19
|
+
if not delta:
|
|
20
|
+
return dict(acc)
|
|
21
|
+
result = dict(acc)
|
|
22
|
+
for key in _MAIN_FIELDS:
|
|
23
|
+
result[key] = int(result.get(key) or 0) + int(delta.get(key) or 0)
|
|
24
|
+
for detail_key in _DETAIL_FIELDS:
|
|
25
|
+
delta_details = delta.get(detail_key)
|
|
26
|
+
if not isinstance(delta_details, dict):
|
|
27
|
+
continue
|
|
28
|
+
merged = dict(result.get(detail_key) or {})
|
|
29
|
+
for k, v in delta_details.items():
|
|
30
|
+
if v is None:
|
|
31
|
+
continue
|
|
32
|
+
try:
|
|
33
|
+
merged[k] = int(merged.get(k) or 0) + int(v)
|
|
34
|
+
except (TypeError, ValueError):
|
|
35
|
+
continue
|
|
36
|
+
if merged:
|
|
37
|
+
result[detail_key] = merged
|
|
38
|
+
return result
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Runner 公共工具模块
|
|
3
|
+
"""
|
|
4
|
+
|
|
5
|
+
from ksadk.runners.utils.langfuse import (
|
|
6
|
+
get_langfuse_callback,
|
|
7
|
+
get_langfuse_callbacks,
|
|
8
|
+
get_langfuse_metadata,
|
|
9
|
+
prepare_trace_metadata,
|
|
10
|
+
)
|
|
11
|
+
from ksadk.runners.utils.loader import load_agent_module
|
|
12
|
+
|
|
13
|
+
__all__ = [
|
|
14
|
+
"get_langfuse_callback",
|
|
15
|
+
"get_langfuse_callbacks",
|
|
16
|
+
"get_langfuse_metadata",
|
|
17
|
+
"prepare_trace_metadata",
|
|
18
|
+
"load_agent_module",
|
|
19
|
+
]
|
|
@@ -0,0 +1,230 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Langfuse 集成工具
|
|
3
|
+
|
|
4
|
+
提供 LangChain/LangGraph Runner 共用的 Langfuse 集成功能
|
|
5
|
+
"""
|
|
6
|
+
|
|
7
|
+
import logging
|
|
8
|
+
import os
|
|
9
|
+
from typing import Any
|
|
10
|
+
|
|
11
|
+
logger = logging.getLogger(__name__)
|
|
12
|
+
|
|
13
|
+
# 全局缓存
|
|
14
|
+
_langfuse_callback = None
|
|
15
|
+
_cloud_monitor_langfuse_callback = None
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
def _env_flag_enabled(name: str) -> bool:
|
|
19
|
+
return os.getenv(name, "").strip().lower() in {"1", "true", "yes", "on"}
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
def _env_flag_disabled(name: str) -> bool:
|
|
23
|
+
return os.getenv(name, "").strip().lower() in {"0", "false", "no", "off", "disabled"}
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
def _first_env(*names: str) -> str:
|
|
27
|
+
for name in names:
|
|
28
|
+
value = os.getenv(name, "").strip()
|
|
29
|
+
if value:
|
|
30
|
+
return value
|
|
31
|
+
return ""
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
def _create_langfuse_callback(
|
|
35
|
+
*,
|
|
36
|
+
label: str,
|
|
37
|
+
public_key: str,
|
|
38
|
+
secret_key: str = "",
|
|
39
|
+
host: str = "",
|
|
40
|
+
) -> Any | None:
|
|
41
|
+
try:
|
|
42
|
+
from langfuse import Langfuse
|
|
43
|
+
from langfuse.langchain import CallbackHandler
|
|
44
|
+
from opentelemetry.sdk.resources import Resource
|
|
45
|
+
from opentelemetry.sdk.trace import TracerProvider
|
|
46
|
+
|
|
47
|
+
resource_attributes = {}
|
|
48
|
+
service_name = os.getenv("OTEL_SERVICE_NAME", "").strip()
|
|
49
|
+
if service_name:
|
|
50
|
+
resource_attributes["service.name"] = service_name
|
|
51
|
+
tracer_provider = TracerProvider(resource=Resource.create(resource_attributes))
|
|
52
|
+
Langfuse(
|
|
53
|
+
public_key=public_key,
|
|
54
|
+
secret_key=secret_key or None,
|
|
55
|
+
base_url=host or None,
|
|
56
|
+
tracer_provider=tracer_provider,
|
|
57
|
+
)
|
|
58
|
+
try:
|
|
59
|
+
handler = CallbackHandler(public_key=public_key)
|
|
60
|
+
except TypeError:
|
|
61
|
+
handler = CallbackHandler()
|
|
62
|
+
logger.info(
|
|
63
|
+
"%s Langfuse CallbackHandler initialized "
|
|
64
|
+
"(host: %s public_key_present=%s secret_key_present=%s isolated_provider=True)",
|
|
65
|
+
label,
|
|
66
|
+
host or "default",
|
|
67
|
+
bool(public_key),
|
|
68
|
+
bool(secret_key),
|
|
69
|
+
)
|
|
70
|
+
return handler
|
|
71
|
+
except ImportError as e:
|
|
72
|
+
logger.warning("Langfuse not installed for %s callback: %s", label, e)
|
|
73
|
+
return None
|
|
74
|
+
except Exception as e:
|
|
75
|
+
logger.error("Failed to create %s Langfuse CallbackHandler: %s", label, e)
|
|
76
|
+
return None
|
|
77
|
+
|
|
78
|
+
|
|
79
|
+
def get_langfuse_callback():
|
|
80
|
+
"""获取 Langfuse CallbackHandler
|
|
81
|
+
|
|
82
|
+
Returns:
|
|
83
|
+
CallbackHandler 实例,未配置时返回 None
|
|
84
|
+
"""
|
|
85
|
+
global _langfuse_callback
|
|
86
|
+
|
|
87
|
+
if not _env_flag_enabled("LANGFUSE_USE_CALLBACK"):
|
|
88
|
+
logger.debug("Langfuse CallbackHandler disabled; using OTLP direct exporter by default")
|
|
89
|
+
return None
|
|
90
|
+
|
|
91
|
+
if _langfuse_callback is not None:
|
|
92
|
+
return _langfuse_callback
|
|
93
|
+
|
|
94
|
+
# 检查是否配置了 Langfuse
|
|
95
|
+
public_key = os.getenv("LANGFUSE_PUBLIC_KEY", "").strip()
|
|
96
|
+
if not public_key:
|
|
97
|
+
return None
|
|
98
|
+
|
|
99
|
+
_langfuse_callback = _create_langfuse_callback(
|
|
100
|
+
label="Primary",
|
|
101
|
+
public_key=public_key,
|
|
102
|
+
secret_key=os.getenv("LANGFUSE_SECRET_KEY", "").strip(),
|
|
103
|
+
host=_first_env("LANGFUSE_HOST", "LANGFUSE_BASE_URL"),
|
|
104
|
+
)
|
|
105
|
+
return _langfuse_callback
|
|
106
|
+
|
|
107
|
+
|
|
108
|
+
def get_cloud_monitor_langfuse_callback():
|
|
109
|
+
"""获取云监控 Langfuse SDK CallbackHandler。"""
|
|
110
|
+
global _cloud_monitor_langfuse_callback
|
|
111
|
+
|
|
112
|
+
if not _env_flag_enabled("LANGFUSE_USE_CALLBACK"):
|
|
113
|
+
return None
|
|
114
|
+
if _env_flag_disabled("CLOUD_MONITOR_LANGFUSE_ENABLED"):
|
|
115
|
+
logger.info(
|
|
116
|
+
"CloudMonitor Langfuse CallbackHandler disabled by CLOUD_MONITOR_LANGFUSE_ENABLED"
|
|
117
|
+
)
|
|
118
|
+
return None
|
|
119
|
+
if _cloud_monitor_langfuse_callback is not None:
|
|
120
|
+
return _cloud_monitor_langfuse_callback
|
|
121
|
+
|
|
122
|
+
public_key = os.getenv("CLOUD_MONITOR_LANGFUSE_PUBLIC_KEY", "").strip()
|
|
123
|
+
secret_key = os.getenv("CLOUD_MONITOR_LANGFUSE_SECRET_KEY", "").strip()
|
|
124
|
+
host = _first_env("CLOUD_MONITOR_LANGFUSE_HOST", "CLOUD_MONITOR_OTLP_ENDPOINT")
|
|
125
|
+
if not public_key and not secret_key and not host:
|
|
126
|
+
return None
|
|
127
|
+
if not public_key or not secret_key or not host:
|
|
128
|
+
logger.warning(
|
|
129
|
+
"CloudMonitor Langfuse CallbackHandler skipped: public_key_present=%s "
|
|
130
|
+
"secret_key_present=%s host_present=%s",
|
|
131
|
+
bool(public_key),
|
|
132
|
+
bool(secret_key),
|
|
133
|
+
bool(host),
|
|
134
|
+
)
|
|
135
|
+
return None
|
|
136
|
+
|
|
137
|
+
_cloud_monitor_langfuse_callback = _create_langfuse_callback(
|
|
138
|
+
label="CloudMonitor",
|
|
139
|
+
public_key=public_key,
|
|
140
|
+
secret_key=secret_key,
|
|
141
|
+
host=host,
|
|
142
|
+
)
|
|
143
|
+
return _cloud_monitor_langfuse_callback
|
|
144
|
+
|
|
145
|
+
|
|
146
|
+
def get_langfuse_callbacks() -> list[Any]:
|
|
147
|
+
"""获取所有 Langfuse CallbackHandler,原平台和云监控各自独立。"""
|
|
148
|
+
callbacks = []
|
|
149
|
+
primary = get_langfuse_callback()
|
|
150
|
+
if primary:
|
|
151
|
+
callbacks.append(primary)
|
|
152
|
+
|
|
153
|
+
cloud_monitor = get_cloud_monitor_langfuse_callback()
|
|
154
|
+
if cloud_monitor:
|
|
155
|
+
callbacks.append(cloud_monitor)
|
|
156
|
+
|
|
157
|
+
return callbacks
|
|
158
|
+
|
|
159
|
+
|
|
160
|
+
def get_langfuse_metadata(session_id: str = None) -> dict:
|
|
161
|
+
"""获取 Langfuse 的 metadata 字典
|
|
162
|
+
|
|
163
|
+
通过 metadata 字段传递 trace 属性:
|
|
164
|
+
- langfuse_user_id
|
|
165
|
+
- langfuse_session_id
|
|
166
|
+
- langfuse_tags
|
|
167
|
+
|
|
168
|
+
Args:
|
|
169
|
+
session_id: 会话 ID (可选)
|
|
170
|
+
|
|
171
|
+
Returns:
|
|
172
|
+
包含 Langfuse 属性的 metadata 字典
|
|
173
|
+
"""
|
|
174
|
+
metadata = {}
|
|
175
|
+
|
|
176
|
+
if session_id:
|
|
177
|
+
metadata["langfuse_session_id"] = session_id
|
|
178
|
+
|
|
179
|
+
try:
|
|
180
|
+
from ksadk.configs import settings
|
|
181
|
+
|
|
182
|
+
agent_config = settings.agent
|
|
183
|
+
|
|
184
|
+
if agent_config.user_id:
|
|
185
|
+
metadata["langfuse_user_id"] = agent_config.user_id
|
|
186
|
+
|
|
187
|
+
if not session_id and agent_config.session_id:
|
|
188
|
+
metadata["langfuse_session_id"] = agent_config.session_id
|
|
189
|
+
|
|
190
|
+
tags = list(agent_config.tags or [])
|
|
191
|
+
if agent_config.environment and agent_config.environment not in tags:
|
|
192
|
+
tags.append(agent_config.environment)
|
|
193
|
+
if agent_config.agent_name and agent_config.agent_name not in tags:
|
|
194
|
+
tags.append(agent_config.agent_name)
|
|
195
|
+
if tags:
|
|
196
|
+
metadata["langfuse_tags"] = tags
|
|
197
|
+
|
|
198
|
+
except (ImportError, Exception):
|
|
199
|
+
pass
|
|
200
|
+
|
|
201
|
+
return metadata
|
|
202
|
+
|
|
203
|
+
|
|
204
|
+
def prepare_trace_metadata(session_id: str = None) -> tuple:
|
|
205
|
+
"""准备 Trace 元数据
|
|
206
|
+
|
|
207
|
+
Returns:
|
|
208
|
+
(user_id, tags, version, agent_name) 元组
|
|
209
|
+
"""
|
|
210
|
+
user_id = None
|
|
211
|
+
tags = []
|
|
212
|
+
version = None
|
|
213
|
+
agent_name = None
|
|
214
|
+
|
|
215
|
+
try:
|
|
216
|
+
from ksadk.configs import settings
|
|
217
|
+
|
|
218
|
+
agent_config = settings.agent
|
|
219
|
+
user_id = agent_config.user_id
|
|
220
|
+
tags = list(agent_config.tags or [])
|
|
221
|
+
version = agent_config.version
|
|
222
|
+
agent_name = agent_config.agent_name
|
|
223
|
+
|
|
224
|
+
if agent_config.environment and agent_config.environment not in tags:
|
|
225
|
+
tags.append(agent_config.environment)
|
|
226
|
+
|
|
227
|
+
except (ImportError, Exception):
|
|
228
|
+
pass
|
|
229
|
+
|
|
230
|
+
return user_id, tags, version, agent_name
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
"""
|
|
2
|
+
模块加载工具
|
|
3
|
+
|
|
4
|
+
提供通用的 Agent 模块加载逻辑
|
|
5
|
+
"""
|
|
6
|
+
|
|
7
|
+
import importlib
|
|
8
|
+
import sys
|
|
9
|
+
from pathlib import Path
|
|
10
|
+
from typing import Any
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
def load_agent_module(
|
|
14
|
+
project_dir: str,
|
|
15
|
+
entry_point: str,
|
|
16
|
+
agent_variable: str,
|
|
17
|
+
*,
|
|
18
|
+
force_reload: bool = False,
|
|
19
|
+
) -> Any:
|
|
20
|
+
"""加载 Agent 模块
|
|
21
|
+
|
|
22
|
+
Args:
|
|
23
|
+
project_dir: 项目目录
|
|
24
|
+
entry_point: 入口文件 (e.g., "agent.py")
|
|
25
|
+
agent_variable: Agent 变量名 (e.g., "root_agent", "graph")
|
|
26
|
+
|
|
27
|
+
Returns:
|
|
28
|
+
加载的 Agent 对象
|
|
29
|
+
|
|
30
|
+
Raises:
|
|
31
|
+
ImportError: 模块导入失败
|
|
32
|
+
AttributeError: 未找到 Agent 变量
|
|
33
|
+
"""
|
|
34
|
+
project_path = Path(project_dir).resolve()
|
|
35
|
+
|
|
36
|
+
# 添加项目目录到 Python 路径
|
|
37
|
+
if str(project_path) not in sys.path:
|
|
38
|
+
sys.path.insert(0, str(project_path))
|
|
39
|
+
src_path = project_path / "src"
|
|
40
|
+
if src_path.is_dir() and str(src_path) not in sys.path:
|
|
41
|
+
sys.path.insert(0, str(src_path))
|
|
42
|
+
|
|
43
|
+
# 确定模块名
|
|
44
|
+
if entry_point.endswith(".py"):
|
|
45
|
+
module_name = entry_point[:-3]
|
|
46
|
+
else:
|
|
47
|
+
module_name = entry_point
|
|
48
|
+
|
|
49
|
+
# 路径转换为模块路径
|
|
50
|
+
module_name = module_name.replace("/", ".").replace("\\", ".")
|
|
51
|
+
|
|
52
|
+
try:
|
|
53
|
+
if force_reload and module_name in sys.modules:
|
|
54
|
+
module = importlib.reload(sys.modules[module_name])
|
|
55
|
+
else:
|
|
56
|
+
module = importlib.import_module(module_name)
|
|
57
|
+
agent = getattr(module, agent_variable)
|
|
58
|
+
return agent, module
|
|
59
|
+
except ImportError as e:
|
|
60
|
+
raise ImportError(f"无法导入模块 {module_name}: {e}")
|
|
61
|
+
except AttributeError:
|
|
62
|
+
raise AttributeError(f"模块 {module_name} 中未找到 {agent_variable}")
|
ksadk/runtime_context.py
ADDED
|
@@ -0,0 +1,166 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
from contextlib import contextmanager
|
|
4
|
+
from contextvars import ContextVar, Token
|
|
5
|
+
from dataclasses import dataclass
|
|
6
|
+
from typing import Any, Iterator
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
@dataclass
|
|
10
|
+
class PlatformInvocationContext:
|
|
11
|
+
agent_id: str
|
|
12
|
+
user_id: str
|
|
13
|
+
session_id: str
|
|
14
|
+
history: list[dict[str, Any]]
|
|
15
|
+
input_content: list[dict[str, Any]]
|
|
16
|
+
input_messages: list[dict[str, Any]]
|
|
17
|
+
input_parts: list[dict[str, Any]]
|
|
18
|
+
attachments: list[dict[str, Any]]
|
|
19
|
+
attachment_results: list[dict[str, Any]]
|
|
20
|
+
current_attachments: list[dict[str, Any]]
|
|
21
|
+
current_attachment_results: list[dict[str, Any]]
|
|
22
|
+
has_current_files: bool
|
|
23
|
+
runner_type: str
|
|
24
|
+
account_id: str = ""
|
|
25
|
+
model: str | None = None
|
|
26
|
+
model_options: dict[str, Any] | None = None
|
|
27
|
+
kb_context: dict[str, Any] | None = None
|
|
28
|
+
memory_context: dict[str, Any] | None = None
|
|
29
|
+
|
|
30
|
+
def to_payload(self) -> dict[str, Any]:
|
|
31
|
+
return {
|
|
32
|
+
"agent_id": self.agent_id,
|
|
33
|
+
"user_id": self.user_id,
|
|
34
|
+
"account_id": self.account_id,
|
|
35
|
+
"session_id": self.session_id,
|
|
36
|
+
"history": list(self.history or []),
|
|
37
|
+
"input_content": list(self.input_content or []),
|
|
38
|
+
"input_messages": list(self.input_messages or []),
|
|
39
|
+
"input_parts": list(self.input_parts or []),
|
|
40
|
+
"attachments": list(self.attachments or []),
|
|
41
|
+
"attachment_results": list(self.attachment_results or []),
|
|
42
|
+
"current_attachments": list(self.current_attachments or []),
|
|
43
|
+
"current_attachment_results": list(self.current_attachment_results or []),
|
|
44
|
+
"has_current_files": self.has_current_files,
|
|
45
|
+
"runner_type": self.runner_type,
|
|
46
|
+
"model": self.model,
|
|
47
|
+
"model_options": dict(self.model_options or {}),
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
|
|
51
|
+
@dataclass
|
|
52
|
+
class ToolExecutionContext:
|
|
53
|
+
session_id: str = ""
|
|
54
|
+
run_id: str = ""
|
|
55
|
+
invocation_id: str = ""
|
|
56
|
+
|
|
57
|
+
|
|
58
|
+
_CURRENT_PLATFORM_INVOCATION_CONTEXT: ContextVar[PlatformInvocationContext | None] = ContextVar(
|
|
59
|
+
"ksadk_platform_invocation_context",
|
|
60
|
+
default=None,
|
|
61
|
+
)
|
|
62
|
+
|
|
63
|
+
_CURRENT_TOOL_EXECUTION_CONTEXT: ContextVar[ToolExecutionContext | None] = ContextVar(
|
|
64
|
+
"ksadk_tool_execution_context",
|
|
65
|
+
default=None,
|
|
66
|
+
)
|
|
67
|
+
|
|
68
|
+
|
|
69
|
+
def get_current_invocation_context() -> PlatformInvocationContext | None:
|
|
70
|
+
return _CURRENT_PLATFORM_INVOCATION_CONTEXT.get()
|
|
71
|
+
|
|
72
|
+
|
|
73
|
+
def get_current_invocation_context_or_default() -> PlatformInvocationContext:
|
|
74
|
+
context = get_current_invocation_context()
|
|
75
|
+
if context is not None:
|
|
76
|
+
return context
|
|
77
|
+
return PlatformInvocationContext(
|
|
78
|
+
agent_id="",
|
|
79
|
+
user_id="",
|
|
80
|
+
account_id="",
|
|
81
|
+
session_id="",
|
|
82
|
+
history=[],
|
|
83
|
+
input_content=[],
|
|
84
|
+
input_messages=[],
|
|
85
|
+
input_parts=[],
|
|
86
|
+
attachments=[],
|
|
87
|
+
attachment_results=[],
|
|
88
|
+
current_attachments=[],
|
|
89
|
+
current_attachment_results=[],
|
|
90
|
+
has_current_files=False,
|
|
91
|
+
runner_type="",
|
|
92
|
+
)
|
|
93
|
+
|
|
94
|
+
|
|
95
|
+
def get_current_tool_execution_context_or_default() -> ToolExecutionContext:
|
|
96
|
+
context = _CURRENT_TOOL_EXECUTION_CONTEXT.get()
|
|
97
|
+
if context is not None:
|
|
98
|
+
return context
|
|
99
|
+
return ToolExecutionContext()
|
|
100
|
+
|
|
101
|
+
|
|
102
|
+
def get_current_user_id(default: str = "") -> str:
|
|
103
|
+
context = get_current_invocation_context()
|
|
104
|
+
if context is None:
|
|
105
|
+
return default
|
|
106
|
+
return str(context.user_id or default)
|
|
107
|
+
|
|
108
|
+
|
|
109
|
+
def get_current_account_id(default: str = "") -> str:
|
|
110
|
+
context = get_current_invocation_context()
|
|
111
|
+
if context is None:
|
|
112
|
+
return default
|
|
113
|
+
return str(context.account_id or default)
|
|
114
|
+
|
|
115
|
+
|
|
116
|
+
def set_current_invocation_context(
|
|
117
|
+
context: PlatformInvocationContext | None,
|
|
118
|
+
) -> Token[PlatformInvocationContext | None]:
|
|
119
|
+
return _CURRENT_PLATFORM_INVOCATION_CONTEXT.set(context)
|
|
120
|
+
|
|
121
|
+
|
|
122
|
+
def reset_current_invocation_context(
|
|
123
|
+
token: Token[PlatformInvocationContext | None],
|
|
124
|
+
) -> None:
|
|
125
|
+
_CURRENT_PLATFORM_INVOCATION_CONTEXT.reset(token)
|
|
126
|
+
|
|
127
|
+
|
|
128
|
+
def set_current_tool_execution_context(
|
|
129
|
+
context: ToolExecutionContext | None,
|
|
130
|
+
) -> Token[ToolExecutionContext | None]:
|
|
131
|
+
return _CURRENT_TOOL_EXECUTION_CONTEXT.set(context)
|
|
132
|
+
|
|
133
|
+
|
|
134
|
+
def reset_current_tool_execution_context(
|
|
135
|
+
token: Token[ToolExecutionContext | None],
|
|
136
|
+
) -> None:
|
|
137
|
+
_CURRENT_TOOL_EXECUTION_CONTEXT.reset(token)
|
|
138
|
+
|
|
139
|
+
|
|
140
|
+
@contextmanager
|
|
141
|
+
def platform_invocation_scope(
|
|
142
|
+
context: PlatformInvocationContext | None,
|
|
143
|
+
) -> Iterator[PlatformInvocationContext | None]:
|
|
144
|
+
token = set_current_invocation_context(context)
|
|
145
|
+
try:
|
|
146
|
+
yield context
|
|
147
|
+
finally:
|
|
148
|
+
reset_current_invocation_context(token)
|
|
149
|
+
|
|
150
|
+
|
|
151
|
+
@contextmanager
|
|
152
|
+
def tool_execution_scope(
|
|
153
|
+
session_id: str,
|
|
154
|
+
run_id: str | None = None,
|
|
155
|
+
invocation_id: str | None = None,
|
|
156
|
+
) -> Iterator[ToolExecutionContext]:
|
|
157
|
+
context = ToolExecutionContext(
|
|
158
|
+
session_id=str(session_id or ""),
|
|
159
|
+
run_id=str(run_id or ""),
|
|
160
|
+
invocation_id=str(invocation_id or ""),
|
|
161
|
+
)
|
|
162
|
+
token = set_current_tool_execution_context(context)
|
|
163
|
+
try:
|
|
164
|
+
yield context
|
|
165
|
+
finally:
|
|
166
|
+
reset_current_tool_execution_context(token)
|
ksadk/runtime_state.py
ADDED
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
"""Runtime-safe helpers for reading local AgentEngine state."""
|
|
2
|
+
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
from pathlib import Path
|
|
6
|
+
from typing import Any
|
|
7
|
+
|
|
8
|
+
import yaml
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
STATE_FILE_NAME = ".agentengine.state"
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
def load_state(project_dir: Path) -> dict[str, Any]:
|
|
15
|
+
"""Load .agentengine.state without importing deployment-only modules."""
|
|
16
|
+
|
|
17
|
+
state_file = Path(project_dir) / STATE_FILE_NAME
|
|
18
|
+
if not state_file.exists():
|
|
19
|
+
return {}
|
|
20
|
+
|
|
21
|
+
try:
|
|
22
|
+
with state_file.open("r", encoding="utf-8") as handle:
|
|
23
|
+
return yaml.safe_load(handle) or {}
|
|
24
|
+
except Exception:
|
|
25
|
+
return {}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
from ksadk.sandbox.backends.e2b import E2BSandboxBackend, E2BSandboxSession
|
|
2
|
+
from ksadk.sandbox.backends.local_process import LocalProcessSandboxBackend, LocalProcessSandboxSession
|
|
3
|
+
from ksadk.sandbox.base import (
|
|
4
|
+
SandboxBackend,
|
|
5
|
+
SandboxCommandResult,
|
|
6
|
+
SandboxError,
|
|
7
|
+
SandboxInputFile,
|
|
8
|
+
SandboxSession,
|
|
9
|
+
SandboxSpec,
|
|
10
|
+
SandboxType,
|
|
11
|
+
)
|
|
12
|
+
from ksadk.sandbox.factory import create_sandbox_backend, sandbox_spec_from_env
|
|
13
|
+
|
|
14
|
+
__all__ = [
|
|
15
|
+
"E2BSandboxBackend",
|
|
16
|
+
"E2BSandboxSession",
|
|
17
|
+
"LocalProcessSandboxBackend",
|
|
18
|
+
"LocalProcessSandboxSession",
|
|
19
|
+
"SandboxBackend",
|
|
20
|
+
"SandboxCommandResult",
|
|
21
|
+
"SandboxError",
|
|
22
|
+
"SandboxInputFile",
|
|
23
|
+
"SandboxSession",
|
|
24
|
+
"SandboxSpec",
|
|
25
|
+
"SandboxType",
|
|
26
|
+
"create_sandbox_backend",
|
|
27
|
+
"sandbox_spec_from_env",
|
|
28
|
+
]
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
from ksadk.sandbox.backends.e2b import E2BSandboxBackend, E2BSandboxSession
|
|
2
|
+
from ksadk.sandbox.backends.local_process import LocalProcessSandboxBackend, LocalProcessSandboxSession
|
|
3
|
+
|
|
4
|
+
__all__ = [
|
|
5
|
+
"E2BSandboxBackend",
|
|
6
|
+
"E2BSandboxSession",
|
|
7
|
+
"LocalProcessSandboxBackend",
|
|
8
|
+
"LocalProcessSandboxSession",
|
|
9
|
+
]
|