agentengine-sdk-python 0.6.2__py3-none-any.whl → 0.6.9__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.6.9.dist-info/METADATA +179 -0
- agentengine_sdk_python-0.6.9.dist-info/RECORD +487 -0
- {agentengine_sdk_python-0.6.2.dist-info → agentengine_sdk_python-0.6.9.dist-info}/WHEEL +1 -1
- agentengine_sdk_python-0.6.9.dist-info/entry_points.txt +3 -0
- agentengine_sdk_python-0.6.9.dist-info/licenses/LICENSE +175 -0
- agentengine_sdk_python-0.6.9.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 +2227 -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 +2277 -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 +1259 -0
- ksadk/cli/cmd_invoke.py +1336 -0
- ksadk/cli/cmd_launch.py +564 -0
- ksadk/cli/cmd_mcp.py +1174 -0
- ksadk/cli/cmd_model.py +302 -0
- ksadk/cli/cmd_openclaw.py +3918 -0
- ksadk/cli/cmd_run.py +232 -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 +410 -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 +342 -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/model_context.py +360 -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 +5208 -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 +1105 -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/short_term_memory.py +289 -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 +1135 -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 +539 -0
- ksadk/runners/langgraph_runner.py +852 -0
- ksadk/runners/patch_langchain.py +187 -0
- ksadk/runners/remote_runner.py +667 -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 +3789 -0
- ksadk/server/static/assets/ArtifactsPanel-C0meuOdi.js +1 -0
- ksadk/server/static/assets/CodeBlock-BbI4HPtJ.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-DMLQYoLp.js +8 -0
- ksadk/server/static/assets/MathMessageMarkdown-DeYh8QPr.css +1 -0
- ksadk/server/static/assets/MermaidBlock-DCR8WZ17.js +303 -0
- ksadk/server/static/assets/NativeTerminalPanel-CHOd7Rch.css +1 -0
- ksadk/server/static/assets/NativeTerminalPanel-CKUvWhUz.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-bj2rZnP5.js +1 -0
- ksadk/server/static/assets/architecture-7EHR7CIX-Cr6Xz1_c.js +1 -0
- ksadk/server/static/assets/architectureDiagram-3BPJPVTR-2u1ltDIj.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-D6fvdK20.js +132 -0
- ksadk/server/static/assets/brainfuck-D5EjA2JK.js +1 -0
- ksadk/server/static/assets/c4Diagram-AAUBKEIU-BK82L5n5.js +10 -0
- ksadk/server/static/assets/channel-BSSOwFIb.js +1 -0
- ksadk/server/static/assets/chunk-2J33WTMH-DLVdkeyQ.js +1 -0
- ksadk/server/static/assets/chunk-4BX2VUAB-BbwsYcbW.js +1 -0
- ksadk/server/static/assets/chunk-55IACEB6-DOairxzw.js +1 -0
- ksadk/server/static/assets/chunk-727SXJPM-hCO487gs.js +206 -0
- ksadk/server/static/assets/chunk-AQP2D5EJ-XU8vDOuG.js +231 -0
- ksadk/server/static/assets/chunk-FMBD7UC4-PrapyfMu.js +15 -0
- ksadk/server/static/assets/chunk-ND2GUHAM-CboKhTZ3.js +1 -0
- ksadk/server/static/assets/chunk-QZHKN3VN-XXpdiwUL.js +1 -0
- ksadk/server/static/assets/classDiagram-4FO5ZUOK-C5HvGiyK.js +1 -0
- ksadk/server/static/assets/classDiagram-v2-Q7XG4LA2-C5HvGiyK.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-_N8bJ-EU.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-FoDlo5J2.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-BBp6ebBw.js +43 -0
- ksadk/server/static/assets/diagram-5GNKFQAL-CqOvG1PR.js +10 -0
- ksadk/server/static/assets/diagram-KO2AKTUF-O9T3t6ba.js +3 -0
- ksadk/server/static/assets/diagram-LMA3HP47-CGG8ekBO.js +24 -0
- ksadk/server/static/assets/diagram-OG6HWLK6-4BmH1EEg.js +24 -0
- ksadk/server/static/assets/diff-ChtP43wD.js +1 -0
- ksadk/server/static/assets/dist-6kSZvCZh.js +1 -0
- ksadk/server/static/assets/dist-B67uF2uK.js +1 -0
- ksadk/server/static/assets/dist-BMKM66B4.js +1 -0
- ksadk/server/static/assets/dist-BVzcWa6D.js +1 -0
- ksadk/server/static/assets/dist-Bk1l05Ni.js +1 -0
- ksadk/server/static/assets/dist-BkJjNih3.js +1 -0
- ksadk/server/static/assets/dist-BmuTWcm7.js +9 -0
- ksadk/server/static/assets/dist-C2DKRFVK.js +1 -0
- ksadk/server/static/assets/dist-CWiTDN_V.js +6 -0
- ksadk/server/static/assets/dist-CZ6C3x8B.js +23 -0
- ksadk/server/static/assets/dist-CiZHB6ZW.js +1 -0
- ksadk/server/static/assets/dist-Cp1_jKwf.js +1 -0
- ksadk/server/static/assets/dist-Cwhk4lwI.js +2 -0
- ksadk/server/static/assets/dist-D5JGcxBx.js +11 -0
- ksadk/server/static/assets/dist-D99wf6_X.js +1 -0
- ksadk/server/static/assets/dist-DCpZrjaK.js +1 -0
- ksadk/server/static/assets/dist-DI-oVAXw.js +1 -0
- ksadk/server/static/assets/dist-DLMjL01k.js +1 -0
- ksadk/server/static/assets/dist-DLeM1OCK.js +1 -0
- ksadk/server/static/assets/dist-DM0rEQPk.js +1 -0
- ksadk/server/static/assets/dist-DbaH3p5h.js +1 -0
- ksadk/server/static/assets/dist-S4klkK5W.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-oJhaci7S.js +85 -0
- ksadk/server/static/assets/erlang-DaB2Rkuy.js +1 -0
- ksadk/server/static/assets/eventmodeling-FCH6USID-CIgwHJLL.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-DtTmUan-.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-BSsb_eij.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-BVAJ7uo0.js +1 -0
- ksadk/server/static/assets/gitGraphDiagram-PVQCEYII-BR5s6Pws.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-BH7-pC0B.js +165 -0
- ksadk/server/static/assets/index-DAURbCsP.css +1 -0
- ksadk/server/static/assets/info-J43DQDTF-MT80V4ge.js +1 -0
- ksadk/server/static/assets/infoDiagram-5YYISTIA-DYPc5cvh.js +2 -0
- ksadk/server/static/assets/init-D6jRqBbL.js +1 -0
- ksadk/server/static/assets/ishikawaDiagram-YF4QCWOH-MoBdALDg.js +70 -0
- ksadk/server/static/assets/javascript-9Tg8ixDm.js +1 -0
- ksadk/server/static/assets/journeyDiagram-JHISSGLW-DgLiQT8l.js +139 -0
- ksadk/server/static/assets/julia-CQfgDRfP.js +1 -0
- ksadk/server/static/assets/kanban-definition-UN3LZRKU-CsFx112F.js +89 -0
- ksadk/server/static/assets/katex-DRsiwpM2.js +265 -0
- ksadk/server/static/assets/linear-TNRQ5Orv.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-D2eMVOgo.js +161 -0
- ksadk/server/static/assets/mindmap-definition-RKZ34NQL-BtByYFhL.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-BLKhbXZB.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-DFOikjSY.js +1 -0
- ksadk/server/static/assets/pieDiagram-4H26LBE5-DPnuCB8c.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-miFpCPv4.js +7 -0
- ksadk/server/static/assets/r-DADKenSm.js +1 -0
- ksadk/server/static/assets/radar-GUYGQ44K-095b1Ikw.js +1 -0
- ksadk/server/static/assets/requirementDiagram-4Y6WPE33-mjB_yYkW.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-D7hSlZZZ.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-D9Cx6hC3.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-D_zrg47o.js +1 -0
- ksadk/server/static/assets/stateDiagram-v2-BHNVJYJU-J9kCb0nC.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-CwSec0Wa.js +120 -0
- ksadk/server/static/assets/toml-LvoKBwCs.js +1 -0
- ksadk/server/static/assets/treeView-BLDUP644-yinfJEY6.js +1 -0
- ksadk/server/static/assets/treemap-LRROVOQU-DosUqN1Q.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-agCVobiF.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-Bvp7-5uH.js +1 -0
- ksadk/server/static/assets/wardleyDiagram-YWT4CUSO-TmrlhWNt.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-DV71V-ah.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 +283 -0
- ksadk/sessions/base.py +354 -0
- ksadk/sessions/continuity.py +313 -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 +838 -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 +852 -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 +878 -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 +829 -0
- ksadk/tracing/span_utils.py +114 -0
- ksadk/tui/__init__.py +12 -0
- ksadk/tui/app.py +400 -0
- ksadk/tui/clipboard.py +100 -0
- ksadk/tui/widgets/__init__.py +22 -0
- ksadk/tui/widgets/assistant.py +89 -0
- ksadk/tui/widgets/base.py +54 -0
- ksadk/tui/widgets/chat_input.py +246 -0
- ksadk/tui/widgets/history.py +156 -0
- ksadk/tui/widgets/system.py +87 -0
- ksadk/tui/widgets/thinking.py +110 -0
- ksadk/tui/widgets/tool_call.py +161 -0
- ksadk/tui/widgets/user.py +37 -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-0.6.2.dist-info/METADATA +0 -46
- agentengine_sdk_python-0.6.2.dist-info/RECORD +0 -4
- agentengine_sdk_python-0.6.2.dist-info/top_level.txt +0 -1
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
"""Compatibility wrapper for the legacy sqlite-backed local session service path."""
|
|
2
|
+
|
|
3
|
+
from ksadk.sessions.local_service import (
|
|
4
|
+
LocalSessionService,
|
|
5
|
+
create_local_session_service,
|
|
6
|
+
resolve_local_session_dir,
|
|
7
|
+
)
|
|
8
|
+
|
|
9
|
+
__all__ = [
|
|
10
|
+
"LocalSessionService",
|
|
11
|
+
"create_local_session_service",
|
|
12
|
+
"resolve_local_session_dir",
|
|
13
|
+
]
|
ksadk/skills/__init__.py
ADDED
ksadk/skills/loader.py
ADDED
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
from dataclasses import dataclass
|
|
4
|
+
from pathlib import Path
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
@dataclass(frozen=True)
|
|
8
|
+
class LocalSkill:
|
|
9
|
+
name: str
|
|
10
|
+
description: str
|
|
11
|
+
root_dir: Path
|
|
12
|
+
skill_md: Path
|
|
13
|
+
body: str
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
def load_local_skill(root_dir: str | Path) -> LocalSkill:
|
|
17
|
+
root = Path(root_dir)
|
|
18
|
+
skill_md = root / "SKILL.md"
|
|
19
|
+
if not skill_md.exists():
|
|
20
|
+
raise FileNotFoundError(f"SKILL.md not found: {skill_md}")
|
|
21
|
+
content = skill_md.read_text(encoding="utf-8")
|
|
22
|
+
metadata, body = _parse_frontmatter(content)
|
|
23
|
+
return LocalSkill(
|
|
24
|
+
name=metadata.get("name") or root.name,
|
|
25
|
+
description=metadata.get("description") or "",
|
|
26
|
+
root_dir=root,
|
|
27
|
+
skill_md=skill_md,
|
|
28
|
+
body=body,
|
|
29
|
+
)
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
def _parse_frontmatter(content: str) -> tuple[dict[str, str], str]:
|
|
33
|
+
if not content.startswith("---\n"):
|
|
34
|
+
return {}, content
|
|
35
|
+
end = content.find("\n---\n", 4)
|
|
36
|
+
if end == -1:
|
|
37
|
+
return {}, content
|
|
38
|
+
raw_meta = content[4:end]
|
|
39
|
+
body = content[end + 5 :]
|
|
40
|
+
metadata: dict[str, str] = {}
|
|
41
|
+
for line in raw_meta.splitlines():
|
|
42
|
+
if ":" not in line:
|
|
43
|
+
continue
|
|
44
|
+
key, value = line.split(":", 1)
|
|
45
|
+
metadata[key.strip()] = value.strip().strip("\"'")
|
|
46
|
+
return metadata, body
|
ksadk/skills/models.py
ADDED
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
from dataclasses import dataclass
|
|
4
|
+
from typing import Any
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
@dataclass(frozen=True)
|
|
8
|
+
class ContentHash:
|
|
9
|
+
algorithm: str
|
|
10
|
+
value: str
|
|
11
|
+
|
|
12
|
+
@classmethod
|
|
13
|
+
def parse(cls, raw: str | None) -> "ContentHash | None":
|
|
14
|
+
normalized = str(raw or "").strip()
|
|
15
|
+
if not normalized:
|
|
16
|
+
return None
|
|
17
|
+
if ":" not in normalized:
|
|
18
|
+
return cls("sha256", normalized.lower())
|
|
19
|
+
algorithm, value = normalized.split(":", 1)
|
|
20
|
+
return cls(algorithm.strip().lower(), value.strip().lower())
|
|
21
|
+
|
|
22
|
+
def render(self) -> str:
|
|
23
|
+
return f"{self.algorithm}:{self.value}"
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
@dataclass(frozen=True)
|
|
27
|
+
class SkillRef:
|
|
28
|
+
skill_id: str
|
|
29
|
+
version_id: str
|
|
30
|
+
version: str
|
|
31
|
+
name: str
|
|
32
|
+
description: str = ""
|
|
33
|
+
status: str = ""
|
|
34
|
+
content_hash: ContentHash | None = None
|
|
35
|
+
archive_uri: str = ""
|
|
36
|
+
aliases: tuple[str, ...] = ()
|
|
37
|
+
tags: tuple[str, ...] = ()
|
|
38
|
+
examples: tuple[str, ...] = ()
|
|
39
|
+
input_schema: dict[str, Any] | None = None
|
|
40
|
+
runtime_requirements: dict[str, Any] | None = None
|
|
41
|
+
|
|
42
|
+
@classmethod
|
|
43
|
+
def from_payload(cls, payload: dict[str, Any]) -> "SkillRef":
|
|
44
|
+
return cls(
|
|
45
|
+
skill_id=str(payload.get("SkillId") or payload.get("skill_id") or ""),
|
|
46
|
+
version_id=str(payload.get("VersionId") or payload.get("version_id") or ""),
|
|
47
|
+
version=str(payload.get("Version") or payload.get("version") or ""),
|
|
48
|
+
name=str(payload.get("Name") or payload.get("name") or ""),
|
|
49
|
+
description=str(payload.get("Description") or payload.get("description") or ""),
|
|
50
|
+
status=str(payload.get("Status") or payload.get("status") or ""),
|
|
51
|
+
content_hash=ContentHash.parse(payload.get("ContentHash") or payload.get("content_hash")),
|
|
52
|
+
archive_uri=str(payload.get("ArchiveUri") or payload.get("archive_uri") or ""),
|
|
53
|
+
aliases=_string_tuple(payload.get("Aliases") or payload.get("aliases")),
|
|
54
|
+
tags=_string_tuple(payload.get("Tags") or payload.get("tags")),
|
|
55
|
+
examples=_string_tuple(payload.get("Examples") or payload.get("examples")),
|
|
56
|
+
input_schema=_dict_or_none(payload.get("InputSchema") or payload.get("input_schema")),
|
|
57
|
+
runtime_requirements=_dict_or_none(
|
|
58
|
+
payload.get("RuntimeRequirements") or payload.get("runtime_requirements")
|
|
59
|
+
),
|
|
60
|
+
)
|
|
61
|
+
|
|
62
|
+
@property
|
|
63
|
+
def cache_key(self) -> str:
|
|
64
|
+
identity = self.skill_id or self.name
|
|
65
|
+
version_key = self.version_id or self.version
|
|
66
|
+
if not version_key and self.content_hash:
|
|
67
|
+
version_key = self.content_hash.value
|
|
68
|
+
return "__".join(part.replace("/", "_").replace(":", "_") for part in (identity, version_key) if part)
|
|
69
|
+
|
|
70
|
+
@property
|
|
71
|
+
def is_active(self) -> bool:
|
|
72
|
+
return not self.status or self.status.lower() in {"active", "available", "enabled"}
|
|
73
|
+
|
|
74
|
+
|
|
75
|
+
@dataclass(frozen=True)
|
|
76
|
+
class SkillListResponse:
|
|
77
|
+
request_id: str
|
|
78
|
+
space_id: str
|
|
79
|
+
space_name: str
|
|
80
|
+
skills: list[SkillRef]
|
|
81
|
+
code: int = 0
|
|
82
|
+
message: str = ""
|
|
83
|
+
|
|
84
|
+
@classmethod
|
|
85
|
+
def from_payload(
|
|
86
|
+
cls,
|
|
87
|
+
payload: dict[str, Any],
|
|
88
|
+
*,
|
|
89
|
+
space_id: str = "",
|
|
90
|
+
space_name: str = "",
|
|
91
|
+
) -> "SkillListResponse":
|
|
92
|
+
data = payload.get("Data") or payload.get("data") or {}
|
|
93
|
+
skills_payload = data.get("Skills") or data.get("skills") or data.get("Items") or data.get("items") or []
|
|
94
|
+
return cls(
|
|
95
|
+
code=int(payload.get("Code") or payload.get("code") or 0),
|
|
96
|
+
message=str(payload.get("Message") or payload.get("message") or ""),
|
|
97
|
+
request_id=str(payload.get("RequestId") or payload.get("request_id") or ""),
|
|
98
|
+
space_id=str(data.get("SkillSpaceId") or data.get("skill_space_id") or space_id),
|
|
99
|
+
space_name=str(data.get("SkillSpaceName") or data.get("skill_space_name") or space_name),
|
|
100
|
+
skills=[SkillRef.from_payload(item) for item in skills_payload if isinstance(item, dict)],
|
|
101
|
+
)
|
|
102
|
+
|
|
103
|
+
def active_skills(self) -> list[SkillRef]:
|
|
104
|
+
return [skill for skill in self.skills if skill.is_active]
|
|
105
|
+
|
|
106
|
+
|
|
107
|
+
def _string_tuple(raw: Any) -> tuple[str, ...]:
|
|
108
|
+
if raw is None:
|
|
109
|
+
return ()
|
|
110
|
+
if isinstance(raw, str):
|
|
111
|
+
values = raw.split(",")
|
|
112
|
+
elif isinstance(raw, (list, tuple, set)):
|
|
113
|
+
values = raw
|
|
114
|
+
else:
|
|
115
|
+
return ()
|
|
116
|
+
return tuple(value for value in (str(item).strip() for item in values) if value)
|
|
117
|
+
|
|
118
|
+
|
|
119
|
+
def _dict_or_none(raw: Any) -> dict[str, Any] | None:
|
|
120
|
+
return dict(raw) if isinstance(raw, dict) else None
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
import hashlib
|
|
4
|
+
import shutil
|
|
5
|
+
import zipfile
|
|
6
|
+
from dataclasses import dataclass
|
|
7
|
+
from pathlib import Path
|
|
8
|
+
|
|
9
|
+
from ksadk.skills.models import SkillRef
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
class SkillPackageError(RuntimeError):
|
|
13
|
+
pass
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
@dataclass(frozen=True)
|
|
17
|
+
class SkillPackage:
|
|
18
|
+
ref: SkillRef
|
|
19
|
+
archive_path: Path
|
|
20
|
+
extract_dir: Path
|
|
21
|
+
root_dir: Path
|
|
22
|
+
cache_hit: bool = False
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
class PackageStore:
|
|
26
|
+
def __init__(self, cache_dir: str | Path):
|
|
27
|
+
self.cache_dir = Path(cache_dir)
|
|
28
|
+
self.cache_dir.mkdir(parents=True, exist_ok=True)
|
|
29
|
+
|
|
30
|
+
def store_archive(self, ref: SkillRef, content: bytes) -> SkillPackage:
|
|
31
|
+
self._verify_hash(ref, content)
|
|
32
|
+
skill_dir = self._skill_dir(ref)
|
|
33
|
+
archive_path = skill_dir / "archive.zip"
|
|
34
|
+
extract_dir = skill_dir / "extracted"
|
|
35
|
+
|
|
36
|
+
if archive_path.exists() and extract_dir.exists():
|
|
37
|
+
cached = self.get_cached(ref)
|
|
38
|
+
if cached is not None:
|
|
39
|
+
return cached
|
|
40
|
+
|
|
41
|
+
if skill_dir.exists():
|
|
42
|
+
shutil.rmtree(skill_dir)
|
|
43
|
+
skill_dir.mkdir(parents=True, exist_ok=True)
|
|
44
|
+
archive_path.write_bytes(content)
|
|
45
|
+
extract_dir.mkdir(parents=True, exist_ok=True)
|
|
46
|
+
self._safe_extract(archive_path, extract_dir)
|
|
47
|
+
|
|
48
|
+
return SkillPackage(
|
|
49
|
+
ref=ref,
|
|
50
|
+
archive_path=archive_path,
|
|
51
|
+
extract_dir=extract_dir,
|
|
52
|
+
root_dir=self._find_skill_root(extract_dir),
|
|
53
|
+
cache_hit=False,
|
|
54
|
+
)
|
|
55
|
+
|
|
56
|
+
def get_cached(self, ref: SkillRef) -> SkillPackage | None:
|
|
57
|
+
skill_dir = self._skill_dir(ref)
|
|
58
|
+
archive_path = skill_dir / "archive.zip"
|
|
59
|
+
extract_dir = skill_dir / "extracted"
|
|
60
|
+
if not archive_path.exists() or not extract_dir.exists():
|
|
61
|
+
return None
|
|
62
|
+
content = archive_path.read_bytes()
|
|
63
|
+
try:
|
|
64
|
+
self._verify_hash(ref, content)
|
|
65
|
+
except SkillPackageError:
|
|
66
|
+
return None
|
|
67
|
+
return SkillPackage(
|
|
68
|
+
ref=ref,
|
|
69
|
+
archive_path=archive_path,
|
|
70
|
+
extract_dir=extract_dir,
|
|
71
|
+
root_dir=self._find_skill_root(extract_dir),
|
|
72
|
+
cache_hit=True,
|
|
73
|
+
)
|
|
74
|
+
|
|
75
|
+
def _skill_dir(self, ref: SkillRef) -> Path:
|
|
76
|
+
return self.cache_dir / (ref.cache_key or ref.name or "skill")
|
|
77
|
+
|
|
78
|
+
def _verify_hash(self, ref: SkillRef, content: bytes) -> None:
|
|
79
|
+
if not ref.content_hash:
|
|
80
|
+
return
|
|
81
|
+
if ref.content_hash.algorithm != "sha256":
|
|
82
|
+
raise SkillPackageError(f"Unsupported ContentHash algorithm: {ref.content_hash.algorithm}")
|
|
83
|
+
actual = hashlib.sha256(content).hexdigest()
|
|
84
|
+
if actual.lower() != ref.content_hash.value.lower():
|
|
85
|
+
raise SkillPackageError(
|
|
86
|
+
f"ContentHash mismatch for {ref.name}: expected {ref.content_hash.render()}, got sha256:{actual}"
|
|
87
|
+
)
|
|
88
|
+
|
|
89
|
+
def _safe_extract(self, archive_path: Path, extract_dir: Path) -> None:
|
|
90
|
+
base = extract_dir.resolve()
|
|
91
|
+
with zipfile.ZipFile(archive_path) as archive:
|
|
92
|
+
for member in archive.infolist():
|
|
93
|
+
target = (extract_dir / member.filename).resolve()
|
|
94
|
+
if not str(target).startswith(str(base) + "/") and target != base:
|
|
95
|
+
raise SkillPackageError(f"unsafe zip member: {member.filename}")
|
|
96
|
+
archive.extractall(extract_dir)
|
|
97
|
+
|
|
98
|
+
def _find_skill_root(self, extract_dir: Path) -> Path:
|
|
99
|
+
if (extract_dir / "SKILL.md").exists():
|
|
100
|
+
return extract_dir
|
|
101
|
+
candidates = sorted(path.parent for path in extract_dir.rglob("SKILL.md"))
|
|
102
|
+
if not candidates:
|
|
103
|
+
raise SkillPackageError(f"SKILL.md not found under {extract_dir}")
|
|
104
|
+
return candidates[0]
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
from ksadk.skills.runtime.base import (
|
|
2
|
+
SandboxInputFile,
|
|
3
|
+
SkillRuntimeBackend,
|
|
4
|
+
SkillRuntimeError,
|
|
5
|
+
SkillRuntimeResult,
|
|
6
|
+
)
|
|
7
|
+
from ksadk.skills.runtime.factory import create_skill_runtime_backend
|
|
8
|
+
from ksadk.skills.runtime.request import SkillWorkflowRequest
|
|
9
|
+
|
|
10
|
+
__all__ = [
|
|
11
|
+
"SandboxInputFile",
|
|
12
|
+
"SkillRuntimeBackend",
|
|
13
|
+
"SkillRuntimeError",
|
|
14
|
+
"SkillRuntimeResult",
|
|
15
|
+
"SkillWorkflowRequest",
|
|
16
|
+
"create_skill_runtime_backend",
|
|
17
|
+
]
|
|
@@ -0,0 +1,183 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
import json
|
|
4
|
+
import os
|
|
5
|
+
import subprocess
|
|
6
|
+
import sys
|
|
7
|
+
from dataclasses import asdict
|
|
8
|
+
from pathlib import Path
|
|
9
|
+
|
|
10
|
+
import httpx
|
|
11
|
+
|
|
12
|
+
from ksadk.skills.loader import LocalSkill
|
|
13
|
+
from ksadk.skills.models import SkillRef
|
|
14
|
+
from ksadk.skills.package_store import PackageStore
|
|
15
|
+
from ksadk.skills.runtime.base import normalize_skill_names
|
|
16
|
+
from ksadk.skills.runtime.executor import (
|
|
17
|
+
WorkflowExecution,
|
|
18
|
+
execute_workflow,
|
|
19
|
+
_can_run_web_artifacts_builder as _executor_can_run_web_artifacts_builder,
|
|
20
|
+
_run_command as _executor_run_command,
|
|
21
|
+
_run_web_artifacts_builder as _executor_run_web_artifacts_builder,
|
|
22
|
+
_runtime_timeout as _executor_runtime_timeout,
|
|
23
|
+
_safe_project_name as _executor_safe_project_name,
|
|
24
|
+
_tail as _executor_tail,
|
|
25
|
+
)
|
|
26
|
+
from ksadk.skills.runtime.request import (
|
|
27
|
+
SkillWorkflowRequest,
|
|
28
|
+
SkillWorkflowRequestError,
|
|
29
|
+
parse_workflow_request,
|
|
30
|
+
)
|
|
31
|
+
from ksadk.skills.runtime import loader as runtime_loader
|
|
32
|
+
from ksadk.skills.runtime import registry as runtime_registry
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
def _skill_space_ids() -> list[str]:
|
|
36
|
+
return runtime_registry.skill_space_ids()
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
def _user_skill_space_ids() -> list[str]:
|
|
40
|
+
return runtime_registry.user_skill_space_ids()
|
|
41
|
+
|
|
42
|
+
|
|
43
|
+
def _public_skill_space_ids() -> list[str]:
|
|
44
|
+
return runtime_registry.public_skill_space_ids()
|
|
45
|
+
|
|
46
|
+
|
|
47
|
+
def _parse_space_ids(*raw_values: str) -> list[str]:
|
|
48
|
+
return runtime_registry.parse_space_ids(*raw_values)
|
|
49
|
+
|
|
50
|
+
|
|
51
|
+
_SKILL_LOAD_WARNINGS: list[str] = []
|
|
52
|
+
|
|
53
|
+
|
|
54
|
+
def _load_skills(
|
|
55
|
+
*,
|
|
56
|
+
prompt: str = "",
|
|
57
|
+
skill_names: list[str] | None = None,
|
|
58
|
+
service_transport: httpx.BaseTransport | None = None,
|
|
59
|
+
) -> list[LocalSkill]:
|
|
60
|
+
result = runtime_loader.load_skills(
|
|
61
|
+
prompt=prompt,
|
|
62
|
+
skill_names=skill_names,
|
|
63
|
+
service_transport=service_transport,
|
|
64
|
+
)
|
|
65
|
+
_SKILL_LOAD_WARNINGS.extend(result.warnings)
|
|
66
|
+
return result.skills
|
|
67
|
+
|
|
68
|
+
|
|
69
|
+
def _dedupe_skill_refs(skill_refs: list[SkillRef], *, seen_names: set[str]) -> list[SkillRef]:
|
|
70
|
+
return runtime_registry.dedupe_skill_refs(skill_refs, seen_names=seen_names)
|
|
71
|
+
|
|
72
|
+
|
|
73
|
+
def _select_public_skill_refs(skill_refs: list[SkillRef]) -> list[SkillRef]:
|
|
74
|
+
return runtime_registry.select_public_skill_refs(skill_refs)
|
|
75
|
+
|
|
76
|
+
|
|
77
|
+
def _allow_hash_mismatch() -> bool:
|
|
78
|
+
return runtime_loader._allow_hash_mismatch()
|
|
79
|
+
|
|
80
|
+
|
|
81
|
+
def _store_unverified_archive(store: PackageStore, skill: SkillRef, archive: bytes):
|
|
82
|
+
return runtime_loader._store_unverified_archive(store, skill, archive)
|
|
83
|
+
|
|
84
|
+
|
|
85
|
+
def _select_remote_skill_refs(
|
|
86
|
+
skill_refs: list[SkillRef],
|
|
87
|
+
prompt: str,
|
|
88
|
+
*,
|
|
89
|
+
skill_names: list[str] | None = None,
|
|
90
|
+
) -> list[SkillRef]:
|
|
91
|
+
return runtime_registry.select_remote_skill_refs(skill_refs, prompt, skill_names=skill_names)
|
|
92
|
+
|
|
93
|
+
|
|
94
|
+
def _load_local_skills() -> list[LocalSkill]:
|
|
95
|
+
return runtime_loader.load_local_skills()
|
|
96
|
+
|
|
97
|
+
|
|
98
|
+
def run_agent(
|
|
99
|
+
argv: list[str] | None = None,
|
|
100
|
+
*,
|
|
101
|
+
service_transport: httpx.BaseTransport | None = None,
|
|
102
|
+
) -> int:
|
|
103
|
+
_SKILL_LOAD_WARNINGS.clear()
|
|
104
|
+
args = list(argv if argv is not None else sys.argv[1:])
|
|
105
|
+
try:
|
|
106
|
+
request = _resolve_request(args)
|
|
107
|
+
except SkillWorkflowRequestError as exc:
|
|
108
|
+
execution = WorkflowExecution(status="failed", error=str(exc))
|
|
109
|
+
print("workflow=")
|
|
110
|
+
print(f"skill_spaces={','.join(_skill_space_ids())}")
|
|
111
|
+
print("loaded_skills=")
|
|
112
|
+
print(f"workflow_result={json.dumps(asdict(execution), ensure_ascii=False, sort_keys=True)}")
|
|
113
|
+
return 1
|
|
114
|
+
|
|
115
|
+
prompt = request.workflow_prompt
|
|
116
|
+
selected_skill_names = request.skill_names or _selected_skill_names()
|
|
117
|
+
loaded_skills = _load_skills(
|
|
118
|
+
prompt=prompt,
|
|
119
|
+
skill_names=selected_skill_names,
|
|
120
|
+
service_transport=service_transport,
|
|
121
|
+
)
|
|
122
|
+
execution = _execute_workflow(prompt, loaded_skills, selected_skill_names=selected_skill_names)
|
|
123
|
+
print(f"workflow={prompt}")
|
|
124
|
+
print(f"skill_spaces={','.join(_skill_space_ids())}")
|
|
125
|
+
print(f"loaded_skills={','.join(skill.name for skill in loaded_skills)}")
|
|
126
|
+
print(f"selected_skills={json.dumps(selected_skill_names, ensure_ascii=False, sort_keys=True)}")
|
|
127
|
+
if _SKILL_LOAD_WARNINGS:
|
|
128
|
+
print(f"skill_warnings={json.dumps(_SKILL_LOAD_WARNINGS, ensure_ascii=False, sort_keys=True)}")
|
|
129
|
+
print(f"workflow_result={json.dumps(asdict(execution), ensure_ascii=False, sort_keys=True)}")
|
|
130
|
+
return 0 if execution.status != "failed" else 1
|
|
131
|
+
|
|
132
|
+
|
|
133
|
+
def _resolve_request(args: list[str]) -> SkillWorkflowRequest:
|
|
134
|
+
return parse_workflow_request(args)
|
|
135
|
+
|
|
136
|
+
|
|
137
|
+
def _selected_skill_names() -> list[str]:
|
|
138
|
+
return normalize_skill_names(os.environ.get("KSADK_SELECTED_SKILL_NAMES", ""))
|
|
139
|
+
|
|
140
|
+
|
|
141
|
+
def _execute_workflow(
|
|
142
|
+
prompt: str,
|
|
143
|
+
skills: list[LocalSkill],
|
|
144
|
+
*,
|
|
145
|
+
selected_skill_names: list[str] | None = None,
|
|
146
|
+
) -> WorkflowExecution:
|
|
147
|
+
return execute_workflow(prompt, skills, selected_skill_names=selected_skill_names)
|
|
148
|
+
|
|
149
|
+
|
|
150
|
+
def _can_run_web_artifacts_builder(skill: LocalSkill, prompt: str) -> bool:
|
|
151
|
+
return _executor_can_run_web_artifacts_builder(skill, prompt)
|
|
152
|
+
|
|
153
|
+
|
|
154
|
+
def _run_web_artifacts_builder(skill: LocalSkill) -> WorkflowExecution:
|
|
155
|
+
return _executor_run_web_artifacts_builder(skill)
|
|
156
|
+
|
|
157
|
+
|
|
158
|
+
def _run_command(args: list[str], *, cwd: Path, timeout: int) -> dict[str, object]:
|
|
159
|
+
return _executor_run_command(args, cwd=cwd, timeout=timeout)
|
|
160
|
+
|
|
161
|
+
|
|
162
|
+
def _runtime_timeout() -> int:
|
|
163
|
+
return _executor_runtime_timeout()
|
|
164
|
+
|
|
165
|
+
|
|
166
|
+
def _safe_project_name(raw: str) -> str:
|
|
167
|
+
return _executor_safe_project_name(raw)
|
|
168
|
+
|
|
169
|
+
|
|
170
|
+
def _tail(value: str | bytes, limit: int = 4000) -> str:
|
|
171
|
+
return _executor_tail(value, limit=limit)
|
|
172
|
+
|
|
173
|
+
|
|
174
|
+
def _resolve_prompt(args: list[str]) -> str:
|
|
175
|
+
return _resolve_request(args).workflow_prompt
|
|
176
|
+
|
|
177
|
+
|
|
178
|
+
def main(argv: list[str] | None = None) -> int:
|
|
179
|
+
return run_agent(argv)
|
|
180
|
+
|
|
181
|
+
|
|
182
|
+
if __name__ == "__main__":
|
|
183
|
+
raise SystemExit(main())
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
from pathlib import Path
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
def parse_artifact_lines(stdout: str) -> list[str]:
|
|
7
|
+
artifacts: list[str] = []
|
|
8
|
+
seen: set[str] = set()
|
|
9
|
+
for line in stdout.splitlines():
|
|
10
|
+
if not line.startswith("artifact="):
|
|
11
|
+
continue
|
|
12
|
+
value = line.split("=", 1)[1].strip()
|
|
13
|
+
if not value or value in seen:
|
|
14
|
+
continue
|
|
15
|
+
seen.add(value)
|
|
16
|
+
artifacts.append(value)
|
|
17
|
+
return artifacts
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
def collect_output_dir_artifacts(output_dir: Path) -> list[str]:
|
|
21
|
+
if not output_dir.is_dir():
|
|
22
|
+
return []
|
|
23
|
+
return [
|
|
24
|
+
str(path)
|
|
25
|
+
for path in sorted(output_dir.rglob("*"))
|
|
26
|
+
if path.is_file()
|
|
27
|
+
]
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
def merge_artifacts(*groups: list[str]) -> list[str]:
|
|
31
|
+
merged: list[str] = []
|
|
32
|
+
seen: set[str] = set()
|
|
33
|
+
for group in groups:
|
|
34
|
+
for item in group:
|
|
35
|
+
if item in seen:
|
|
36
|
+
continue
|
|
37
|
+
seen.add(item)
|
|
38
|
+
merged.append(item)
|
|
39
|
+
return merged
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"""Skill Runtime backend implementations."""
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
from ksadk.skills.runtime.base import SkillRuntimeError, SkillRuntimeResult
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
class DisabledSkillRuntimeBackend:
|
|
7
|
+
def run_workflow(self, *args, **kwargs) -> SkillRuntimeResult:
|
|
8
|
+
raise SkillRuntimeError("Skill Runtime is disabled")
|