agentengine-sdk-python 0.8.2__py3-none-any.whl → 0.8.4__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.8.2.dist-info → agentengine_sdk_python-0.8.4.dist-info}/METADATA +22 -28
- agentengine_sdk_python-0.8.4.dist-info/RECORD +1070 -0
- ksadk/_build_provenance.json +1 -0
- ksadk/agui/_agent_helpers.py +4 -0
- ksadk/api/client.py +108 -91
- ksadk/builders/code_builder.py +36 -9
- ksadk/builders/framework_requirements.py +2 -1
- ksadk/builders/ks3_uploader.py +36 -7
- ksadk/builders/managed_runtime_builder.py +4 -0
- ksadk/cli/__init__.py +38 -3
- ksadk/cli/cmd_managed_runtime.py +13 -1
- ksadk/cli/cmd_plugin.py +662 -0
- ksadk/cli/cmd_web.py +2 -5
- ksadk/cli/runtime_bootstrap.py +23 -1
- ksadk/codex/client.py +424 -96
- ksadk/codex/projection.py +24 -0
- ksadk/codex/runtime.py +83 -283
- ksadk/common/auth.py +16 -10
- ksadk/configs/env_registry.py +59 -3
- ksadk/configs/settings.py +9 -0
- ksadk/context_engine/contributors.py +73 -8
- ksadk/conversations/__init__.py +19 -0
- ksadk/conversations/context.py +104 -24
- ksadk/conversations/contracts.py +266 -0
- ksadk/conversations/message_projection.py +154 -15
- ksadk/conversations/projector.py +614 -0
- ksadk/conversations/reducer.py +98 -0
- ksadk/conversations/runtime_invocation.py +5 -0
- ksadk/conversations/runtime_payloads.py +1 -0
- ksadk/conversations/runtime_preparation.py +30 -27
- ksadk/conversations/runtime_resume.py +50 -2
- ksadk/conversations/runtime_stream_events.py +5 -0
- ksadk/conversations/runtime_streaming.py +25 -7
- ksadk/deployment/env_forward.py +2 -2
- ksadk/deployment/providers/serverless.py +1 -1
- ksadk/events/_v1_compat/projection.py +2 -0
- ksadk/events/adapters/_codex_validators.py +18 -7
- ksadk/events/adapters/codex.py +190 -0
- ksadk/events/adapters/langgraph.py +15 -1
- ksadk/events/canonical_store.py +3 -1
- ksadk/events/projections.py +1 -1
- ksadk/harness/__init__.py +45 -35
- ksadk/harness/config.py +2 -2
- ksadk/harness/runtime.py +75 -16
- ksadk/harness/tools.py +38 -13
- ksadk/interaction/provider.py +1 -0
- ksadk/interaction/providers/langgraph.py +1 -0
- ksadk/kernel/bootstrap.py +28 -4
- ksadk/kernel/contract_fingerprints.py +5 -4
- ksadk/kernel/contracts.py +8 -0
- ksadk/kernel/control.py +1 -0
- ksadk/kernel/ingress.py +36 -2
- ksadk/kernel/memory_store.py +1 -0
- ksadk/kernel/postgres_store.py +1 -0
- ksadk/kernel/sqlite_store.py +28 -0
- ksadk/kernel/store.py +3 -0
- ksadk/kernel/worker.py +76 -10
- ksadk/knowledge_base/client.py +57 -27
- ksadk/mcp_runtime/__init__.py +12 -4
- ksadk/memory/adk/backends/sdk_ltm_backend.py +161 -41
- ksadk/memory/adk/resilient_session_service.py +25 -17
- ksadk/memory/adk/short_term_memory.py +26 -9
- ksadk/memory/models.py +7 -4
- ksadk/memory/provider_resolver.py +3 -0
- ksadk/memory/providers/local_sqlite.py +7 -0
- ksadk/model_proxy/server.py +10 -5
- ksadk/plugins/__init__.py +171 -0
- ksadk/plugins/artifacts.py +275 -0
- ksadk/plugins/bridges/__init__.py +47 -0
- ksadk/plugins/bridges/codex.py +659 -0
- ksadk/plugins/bridges/dsh.py +1300 -0
- ksadk/plugins/builtins.py +746 -0
- ksadk/plugins/bundle.py +246 -0
- ksadk/plugins/bundle_security.py +191 -0
- ksadk/plugins/codex_manifest.py +983 -0
- ksadk/plugins/composition.py +537 -0
- ksadk/plugins/context_contributor.py +437 -0
- ksadk/plugins/contracts.py +569 -0
- ksadk/plugins/delivery.py +153 -0
- ksadk/plugins/dsh_installation_digest.py +71 -0
- ksadk/plugins/dsh_toolchain.py +1024 -0
- ksadk/plugins/ecosystem_bridge.py +1105 -0
- ksadk/plugins/ecosystem_probe.py +191 -0
- ksadk/plugins/host.py +787 -0
- ksadk/plugins/kernel_adapter.py +205 -0
- ksadk/plugins/providers/__init__.py +108 -0
- ksadk/plugins/providers/bundles/dsh-knowledge/cordis.patch.yml +3 -0
- ksadk/plugins/providers/bundles/dsh-knowledge/index.mjs +53 -0
- ksadk/plugins/providers/bundles/dsh-knowledge/package.json +16 -0
- ksadk/plugins/providers/bundles/dsh-memory/cordis.patch.yml +3 -0
- ksadk/plugins/providers/bundles/dsh-memory/index.mjs +175 -0
- ksadk/plugins/providers/bundles/dsh-memory/package.json +16 -0
- ksadk/plugins/providers/bundles/dsh-platform-resources/client.mjs +166 -0
- ksadk/plugins/providers/bundles/dsh-platform-resources/cordis.patch.yml +3 -0
- ksadk/plugins/providers/bundles/dsh-platform-resources/index.mjs +9 -0
- ksadk/plugins/providers/bundles/dsh-platform-resources/package.json +12 -0
- ksadk/plugins/providers/bundles/dsh-skill-center/cordis.patch.yml +3 -0
- ksadk/plugins/providers/bundles/dsh-skill-center/index.mjs +125 -0
- ksadk/plugins/providers/bundles/dsh-skill-center/package.json +16 -0
- ksadk/plugins/providers/bundles/ksadk-codex/cordis.patch.yml +3 -0
- ksadk/plugins/providers/bundles/ksadk-codex/index.mjs +18 -0
- ksadk/plugins/providers/bundles/ksadk-codex/package.json +19 -0
- ksadk/plugins/providers/bundles/ksadk-dsh-capability-host/cordis.patch.yml +3 -0
- ksadk/plugins/providers/bundles/ksadk-dsh-capability-host/index.mjs +870 -0
- ksadk/plugins/providers/bundles/ksadk-dsh-capability-host/package.json +27 -0
- ksadk/plugins/providers/bundles/ksadk-dsh-studio/client.js +92 -0
- ksadk/plugins/providers/bundles/ksadk-dsh-studio/index.mjs +15 -0
- ksadk/plugins/providers/bundles/ksadk-dsh-studio/package.json +7 -0
- ksadk/plugins/providers/bundles/ksadk-harness/cordis.patch.yml +3 -0
- ksadk/plugins/providers/bundles/ksadk-harness/index.mjs +19 -0
- ksadk/plugins/providers/bundles/ksadk-harness/package.json +19 -0
- ksadk/plugins/providers/codex.py +988 -0
- ksadk/plugins/providers/codex_dsh.py +83 -0
- ksadk/plugins/providers/codex_native.py +368 -0
- ksadk/plugins/providers/codex_turn.py +301 -0
- ksadk/plugins/providers/dsh.py +951 -0
- ksadk/plugins/providers/dsh_capabilities.py +1389 -0
- ksadk/plugins/providers/dsh_descriptor_host.py +226 -0
- ksadk/plugins/providers/dsh_mcp.py +467 -0
- ksadk/plugins/providers/harness.py +632 -0
- ksadk/plugins/providers/harness_dsh.py +91 -0
- ksadk/plugins/providers/legacy.py +215 -0
- ksadk/plugins/providers/legacy_catalog.py +100 -0
- ksadk/plugins/providers/mcp_projection.py +150 -0
- ksadk/plugins/providers/platform_resources.py +657 -0
- ksadk/plugins/providers/shipped_dsh.py +370 -0
- ksadk/plugins/resolver.py +338 -0
- ksadk/plugins/subagent_providers/__init__.py +12 -0
- ksadk/plugins/subagent_providers/codex.py +443 -0
- ksadk/plugins/subagents.py +333 -0
- ksadk/resource_runtime/__init__.py +4 -0
- ksadk/resource_runtime/broker.py +616 -0
- ksadk/resource_runtime/build_artifacts.py +165 -0
- ksadk/resource_runtime/contracts.py +138 -0
- ksadk/resource_runtime/discovery_receipts.py +100 -0
- ksadk/resource_runtime/discovery_skills.py +172 -0
- ksadk/resource_runtime/errors.py +6 -0
- ksadk/resource_runtime/ipc.py +142 -0
- ksadk/resource_runtime/kernel_approval.py +165 -0
- ksadk/resource_runtime/knowledge.py +114 -0
- ksadk/resource_runtime/langgraph.py +94 -0
- ksadk/resource_runtime/leases.py +191 -0
- ksadk/resource_runtime/managed_projection.py +186 -0
- ksadk/resource_runtime/mcp_server.py +138 -0
- ksadk/resource_runtime/memory_provider.py +318 -0
- ksadk/resource_runtime/memory_receipts.py +34 -0
- ksadk/resource_runtime/operation_ledger.py +211 -0
- ksadk/resource_runtime/plugin_config.py +48 -0
- ksadk/resource_runtime/policy_authorization.py +54 -0
- ksadk/resource_runtime/process.py +110 -0
- ksadk/resource_runtime/skill_artifacts.py +153 -0
- ksadk/resource_runtime/skill_runtime.py +42 -0
- ksadk/resource_runtime/skill_workspace.py +118 -0
- ksadk/resource_runtime/skills.py +215 -0
- ksadk/resource_runtime/snapshots.py +180 -0
- ksadk/resource_runtime/socket_server.py +103 -0
- ksadk/resource_runtime/supervisor.py +380 -0
- ksadk/resource_runtime/worker.py +504 -0
- ksadk/runners/_langgraph_runner_streams.py +74 -6
- ksadk/runners/adk_runner.py +149 -11
- ksadk/runners/base_runner.py +29 -1
- ksadk/runners/langgraph_runner.py +475 -145
- ksadk/runtime/_runner_adapter/stream_mapping.py +193 -60
- ksadk/runtime/adapter.py +3 -0
- ksadk/runtime/conversation_execution.py +92 -16
- ksadk/runtime/executor.py +78 -2
- ksadk/runtime/factory.py +30 -200
- ksadk/runtime/framework_adapters.py +41 -0
- ksadk/runtime/preprocessing.py +10 -2
- ksadk/runtime/runner_adapter.py +78 -14
- ksadk/runtime_context.py +40 -2
- ksadk/sandbox/__init__.py +2 -1
- ksadk/sandbox/backends/e2b.py +52 -11
- ksadk/sandbox/backends/local_process.py +9 -0
- ksadk/sandbox/base.py +2 -0
- ksadk/sandbox/e2b_connection.py +66 -0
- ksadk/sandbox/factory.py +72 -0
- ksadk/scheduler/__init__.py +18 -0
- ksadk/scheduler/calendar.py +102 -0
- ksadk/scheduler/contracts.py +254 -0
- ksadk/scheduler/dispatcher.py +129 -0
- ksadk/scheduler/engine.py +416 -0
- ksadk/scheduler/sqlite_store.py +581 -0
- ksadk/server/composition.py +2 -0
- ksadk/server/factory.py +5 -0
- ksadk/server/persistence_capability.py +516 -0
- ksadk/server/routes/control.py +210 -46
- ksadk/server/routes/dependencies.py +15 -0
- ksadk/server/routes/models.py +47 -4
- ksadk/server/routes/projection.py +252 -12
- ksadk/server/routes/sessions.py +284 -107
- ksadk/server/routes/streaming.py +43 -9
- ksadk/server/static/assets/{ArtifactsPanel-DSU1sWD_.js → ArtifactsPanel-CGbWlMNh.js} +1 -1
- ksadk/server/static/assets/{CodeBlock-DOH6MVcn.js → CodeBlock-b4C7upmO.js} +3 -3
- ksadk/server/static/assets/{MathMessageMarkdown-BL8my1R2.js → MathMessageMarkdown-DbdW5A4_.js} +4 -4
- ksadk/server/static/assets/{MermaidBlock-Dz4IP-Tx.js → MermaidBlock-BEBN4Ksz.js} +6 -6
- ksadk/server/static/assets/{NativeTerminalPanel-DUrK0JpZ.js → NativeTerminalPanel-zvL-WpAn.js} +1 -1
- ksadk/server/static/assets/{abnfDiagram-VCTEODGH-g20pFzNV.js → abnfDiagram-VCTEODGH-BYafW7Za.js} +1 -1
- ksadk/server/static/assets/{arc-C4FzinUA.js → arc-bTohInsS.js} +1 -1
- ksadk/server/static/assets/architecture-7GRP2DOG-BW5UtSnx.js +1 -0
- ksadk/server/static/assets/{architectureDiagram-5GKGNRK7-DpIqL5h4.js → architectureDiagram-5GKGNRK7-Ch5Lbzsi.js} +1 -1
- ksadk/server/static/assets/{blockDiagram-NRAW4CY4-BjkljTNz.js → blockDiagram-NRAW4CY4-kqF4MDOG.js} +1 -1
- ksadk/server/static/assets/{c4Diagram-UCG6FXSJ-Dk_ieq2X.js → c4Diagram-UCG6FXSJ-8uSRIODv.js} +1 -1
- ksadk/server/static/assets/channel-CF5Up3hQ.js +1 -0
- ksadk/server/static/assets/chunk-2Q5K7J3B-KkXX47WI.js +1 -0
- ksadk/server/static/assets/{chunk-5VM5RSS4-BVHAchFb.js → chunk-5VM5RSS4-DkhehZDr.js} +1 -1
- ksadk/server/static/assets/{chunk-F27PBJKO-C-ipQzuS.js → chunk-F27PBJKO-BdXhtPe9.js} +1 -1
- ksadk/server/static/assets/{chunk-G27WJ6UU-C2EyJbIK.js → chunk-G27WJ6UU-DPTpvpwi.js} +1 -1
- ksadk/server/static/assets/{chunk-JWPE2WC7-vYvVJb_M.js → chunk-JWPE2WC7-Pqoh38el.js} +1 -1
- ksadk/server/static/assets/{chunk-LCL6LL3I-BcI6ysPT.js → chunk-LCL6LL3I-DeU00qC-.js} +1 -1
- ksadk/server/static/assets/{chunk-POPQ4Y6H-C030x_Z1.js → chunk-POPQ4Y6H-CzxScFkr.js} +1 -1
- ksadk/server/static/assets/{chunk-RHFEMEQ7-yyGpsz4n.js → chunk-RHFEMEQ7-DpqMx-ux.js} +1 -1
- ksadk/server/static/assets/{chunk-SVP7TREG-BLTlmMU7.js → chunk-SVP7TREG-C6t0SypQ.js} +1 -1
- ksadk/server/static/assets/{chunk-XXDRQBXY-C_32ArgP.js → chunk-XXDRQBXY-DVaeafZk.js} +1 -1
- ksadk/server/static/assets/classDiagram-DTDB5LWJ-Cz81acRQ.js +1 -0
- ksadk/server/static/assets/classDiagram-v2-JRS7N3AN-Cz81acRQ.js +1 -0
- ksadk/server/static/assets/{cose-bilkent-JH36ORCC-9YQYwdl0.js → cose-bilkent-JH36ORCC-Bf9D3tzJ.js} +1 -1
- ksadk/server/static/assets/cynefin-OW5HDTMX-DVWs8a2t.js +1 -0
- ksadk/server/static/assets/{cynefinDiagram-5FMLGOSQ-ErLF5N13.js → cynefinDiagram-5FMLGOSQ-B9cY3iTz.js} +1 -1
- ksadk/server/static/assets/{dagre-3AP2YEHR-DFiQF-6f.js → dagre-3AP2YEHR-CSwlx3CB.js} +1 -1
- ksadk/server/static/assets/{dagre-BuhGnRI1.js → dagre-UBpgon5q.js} +1 -1
- ksadk/server/static/assets/{diagram-S7CK7UJ4-Bt1v8-GC.js → diagram-S7CK7UJ4-C9akhN9a.js} +1 -1
- ksadk/server/static/assets/{diagram-UQ7AKVKN-DSCxJdBK.js → diagram-UQ7AKVKN-CgedhTPI.js} +1 -1
- ksadk/server/static/assets/{diagram-VSXAHHWV-DHfYwp_9.js → diagram-VSXAHHWV-Cjucz5BY.js} +1 -1
- ksadk/server/static/assets/{diagram-VX7I27RA-DdzD-4Le.js → diagram-VX7I27RA-Dd4Vleyn.js} +1 -1
- ksadk/server/static/assets/{diagram-Z3DM3KII-Du-nAJ9F.js → diagram-Z3DM3KII-CZ2jGtYW.js} +1 -1
- ksadk/server/static/assets/{dist-B7seoj3d.js → dist-B2_CVgKv.js} +1 -1
- ksadk/server/static/assets/{dist-CSh_DE14.js → dist-B3FR1SKK.js} +1 -1
- ksadk/server/static/assets/{dist-DUX-id_F.js → dist-BIr4DSRq.js} +1 -1
- ksadk/server/static/assets/{dist-C_wsv-Qd.js → dist-BgV_owcB.js} +1 -1
- ksadk/server/static/assets/{dist-W-TIVntx.js → dist-Bj730Ib4.js} +1 -1
- ksadk/server/static/assets/{dist-BytlxIDT.js → dist-BnaTiyzN.js} +1 -1
- ksadk/server/static/assets/{dist-CXYYBw3_.js → dist-C1NMAY5a.js} +1 -1
- ksadk/server/static/assets/{dist-dDdADKFA.js → dist-C5_ZAZsG.js} +1 -1
- ksadk/server/static/assets/{dist-BVDffZ0U.js → dist-CB9iJrvg.js} +1 -1
- ksadk/server/static/assets/{dist-Bf2M8m3N.js → dist-CFzsn6BG.js} +1 -1
- ksadk/server/static/assets/{dist-ngtN0DJB.js → dist-Cf125P_m.js} +1 -1
- ksadk/server/static/assets/{dist-BE7bu-DL.js → dist-ClYUxfeK.js} +1 -1
- ksadk/server/static/assets/{dist-DNp6rLRA.js → dist-DFD6Qa6T.js} +1 -1
- ksadk/server/static/assets/{dist-BX8z72IC.js → dist-DVCOWtha.js} +1 -1
- ksadk/server/static/assets/{dist-dydu68Fl.js → dist-D_ctSS2i.js} +1 -1
- ksadk/server/static/assets/{dist-ClxGviKw.js → dist-DiixqL0J.js} +1 -1
- ksadk/server/static/assets/{dist-BjU6y-A2.js → dist-DoVSwoDb.js} +1 -1
- ksadk/server/static/assets/{dist-Dq9gLD7L.js → dist-DvFK7p5S.js} +1 -1
- ksadk/server/static/assets/{dist-8hqcx0sU.js → dist-QfkEHOlb.js} +1 -1
- ksadk/server/static/assets/{dist-CttYUqzS.js → dist-btbmmX5O.js} +1 -1
- ksadk/server/static/assets/{dist-DmldrHd_.js → dist-fBO2v5Kt.js} +1 -1
- ksadk/server/static/assets/{dist-DnfXs8Vn.js → dist-ufY3F5p6.js} +1 -1
- ksadk/server/static/assets/{ebnfDiagram-PWID7BFC-Da9C9NO1.js → ebnfDiagram-PWID7BFC-Ci8NqqZu.js} +1 -1
- ksadk/server/static/assets/{erDiagram-SSCWMZ5O-EAGqqR79.js → erDiagram-SSCWMZ5O-CCIOhLZG.js} +1 -1
- ksadk/server/static/assets/eventmodeling-NTZA5JFV-CQqR2hg3.js +1 -0
- ksadk/server/static/assets/flowDiagram-A5DVABFB-DDRRbGPm.js +1 -0
- ksadk/server/static/assets/{ganttDiagram-EL5Y4UJY-DqJsKb59.js → ganttDiagram-EL5Y4UJY-Cp_r9Hb6.js} +1 -1
- ksadk/server/static/assets/gitGraph-4MIJSDKK-fgWEf7UD.js +1 -0
- ksadk/server/static/assets/{gitGraphDiagram-WWUBYQGX-B6g4dtDi.js → gitGraphDiagram-WWUBYQGX-Dlhc8Wr8.js} +1 -1
- ksadk/server/static/assets/index-DcTML1Up.css +2 -0
- ksadk/server/static/assets/index-Dh2XHqPK.js +244 -0
- ksadk/server/static/assets/info-A6RAGUB7-BUecLTdt.js +1 -0
- ksadk/server/static/assets/{infoDiagram-RXCK75RN-Djm_nbd5.js → infoDiagram-RXCK75RN-CO0rRTRA.js} +1 -1
- ksadk/server/static/assets/{ishikawaDiagram-5VMMS53U-DWya9SG2.js → ishikawaDiagram-5VMMS53U-CHiaedSS.js} +1 -1
- ksadk/server/static/assets/{journeyDiagram-EYS64GPL-DutxhSNI.js → journeyDiagram-EYS64GPL-CHcCIB09.js} +1 -1
- ksadk/server/static/assets/{kanban-definition-3QL26DDD-DJdOF8Fm.js → kanban-definition-3QL26DDD-CJ_ebBZf.js} +1 -1
- ksadk/server/static/assets/{katex-vFWytM5c.js → katex-B4weu383.js} +1 -1
- ksadk/server/static/assets/{linear-BHjG8b-J.js → linear-V-MgYHW1.js} +1 -1
- ksadk/server/static/assets/{mermaid-parser.core-KGSy4jWT.js → mermaid-parser.core-CBijEX_c.js} +2 -2
- ksadk/server/static/assets/{mindmap-definition-FBJOCRG2-9-HC88D4.js → mindmap-definition-FBJOCRG2-Bc-pQvpp.js} +1 -1
- ksadk/server/static/assets/packet-AYTQ26CC-BeW-btFv.js +1 -0
- ksadk/server/static/assets/{pegDiagram-XKGWAZYB-DrEZd4fD.js → pegDiagram-XKGWAZYB-D7genGLl.js} +1 -1
- ksadk/server/static/assets/pie-WAS4IAKB-X0xh4SaT.js +1 -0
- ksadk/server/static/assets/{pieDiagram-E7YTZNPT-DpjqOFFp.js → pieDiagram-E7YTZNPT-Bxj32zwD.js} +1 -1
- ksadk/server/static/assets/{quadrantDiagram-AXDQQJYC-BiNhgOXX.js → quadrantDiagram-AXDQQJYC-BURv2mGh.js} +1 -1
- ksadk/server/static/assets/radar-RG4KPBEZ-DzRMSqjd.js +1 -0
- ksadk/server/static/assets/railroad-74A4TZTK-Cc44icX-.js +1 -0
- ksadk/server/static/assets/railroad-abnf-HS5TGJTU-D6S4BdV-.js +1 -0
- ksadk/server/static/assets/railroad-ebnf-LZEXJU2U-vD3aVE2o.js +1 -0
- ksadk/server/static/assets/railroad-peg-WCYAUIDC-CYbW_b4T.js +1 -0
- ksadk/server/static/assets/{railroadDiagram-O6MQD6OU-_Y3Ojg6G.js → railroadDiagram-O6MQD6OU-CCsh3avW.js} +1 -1
- ksadk/server/static/assets/{requirementDiagram-EFPCY7ZU-DeCFdg9K.js → requirementDiagram-EFPCY7ZU-_FRRBKEd.js} +1 -1
- ksadk/server/static/assets/{sankeyDiagram-P5KCCOFB-CPH75rhw.js → sankeyDiagram-P5KCCOFB-C-gr2o9M.js} +1 -1
- ksadk/server/static/assets/{sequenceDiagram-WJ2MYXX4-OEpQQdr4.js → sequenceDiagram-WJ2MYXX4-D97NmfKg.js} +1 -1
- ksadk/server/static/assets/{sizeCapture-X5ZJPWSS-heUErzhI.js → sizeCapture-X5ZJPWSS-DjrPC5FX.js} +1 -1
- ksadk/server/static/assets/{stateDiagram-HBIQ2CUA-DvA3jSMB.js → stateDiagram-HBIQ2CUA-DzMNg1hh.js} +1 -1
- ksadk/server/static/assets/stateDiagram-v2-4QOOHH4V-BIcjKFhF.js +1 -0
- ksadk/server/static/assets/{swimlanes-XN3QIQJK-CR-dfN_t.js → swimlanes-XN3QIQJK-Cssf_CsU.js} +1 -1
- ksadk/server/static/assets/swimlanesDiagram-VK2B7HYN-tq3K3Ybl.js +8 -0
- ksadk/server/static/assets/{timeline-definition-24CTP7MA-DAVJf1TX.js → timeline-definition-24CTP7MA-BWTHzyS1.js} +1 -1
- ksadk/server/static/assets/treeView-Q6P3EWNA-DBXt3GdU.js +1 -0
- ksadk/server/static/assets/treemap-WGGIJYW6-DrCy4E_l.js +1 -0
- ksadk/server/static/assets/{vennDiagram-4TSXK5OY-DwM8eDkh.js → vennDiagram-4TSXK5OY-BSKgJsmR.js} +1 -1
- ksadk/server/static/assets/wardley-WFR3VGLG-CefhOliM.js +1 -0
- ksadk/server/static/assets/{wardleyDiagram-VM6X3IG4-DZL-Zz2t.js → wardleyDiagram-VM6X3IG4-eflHNoaZ.js} +1 -1
- ksadk/server/static/assets/{xychartDiagram-S5SC5T6Z-Dy6Yh_hu.js → xychartDiagram-S5SC5T6Z-eYqrQ-v4.js} +1 -1
- ksadk/server/static/index.html +2 -2
- ksadk/session_context.py +66 -0
- ksadk/sessions/__init__.py +11 -21
- ksadk/sessions/_local_service_sync.py +263 -1
- ksadk/sessions/base.py +176 -0
- ksadk/sessions/errors.py +4 -0
- ksadk/sessions/in_memory.py +309 -19
- ksadk/sessions/local_service.py +83 -1
- ksadk/sessions/persistence.py +275 -0
- ksadk/sessions/postgres_service.py +358 -0
- ksadk/sessions/resilience.py +8 -0
- ksadk/sessions/resilient.py +362 -4
- ksadk/sessions/topology.py +135 -0
- ksadk/skills/models.py +26 -4
- ksadk/skills/package_store.py +186 -38
- ksadk/skills/runtime/agent.py +31 -6
- ksadk/skills/runtime/artifact_delivery.py +139 -0
- ksadk/skills/runtime/backends/e2b.py +98 -6
- ksadk/skills/runtime/backends/local.py +73 -8
- ksadk/skills/runtime/base.py +3 -0
- ksadk/skills/runtime/executor.py +2 -0
- ksadk/skills/runtime/loader.py +10 -2
- ksadk/skills/runtime/pinned.py +114 -0
- ksadk/skills/runtime/request.py +31 -0
- ksadk/skills/service_client.py +211 -24
- ksadk/studio/agent_lifecycle.py +26 -20
- ksadk/studio/api.py +714 -90
- ksadk/studio/api_catalog_routes.py +23 -0
- ksadk/studio/api_contracts.py +34 -1
- ksadk/studio/api_plugin_routes.py +911 -0
- ksadk/studio/api_resource_connections.py +183 -0
- ksadk/studio/attachment_store.py +187 -0
- ksadk/studio/authoring.py +10 -4
- ksadk/studio/authoring_coordinator.py +31 -16
- ksadk/studio/builder.py +199 -43
- ksadk/studio/cloud.py +346 -104
- ksadk/studio/cloud_shared_web.py +565 -0
- ksadk/studio/codex_agent_service.py +140 -27
- ksadk/studio/codex_builder.py +294 -16
- ksadk/studio/codex_credentials.py +90 -0
- ksadk/studio/codex_manifest.py +51 -4
- ksadk/studio/codex_plugin_store.py +746 -0
- ksadk/studio/codex_provider_build.py +231 -0
- ksadk/studio/codex_run.py +200 -29
- ksadk/studio/compatibility_report.py +456 -0
- ksadk/studio/compiler.py +84 -15
- ksadk/studio/contracts.py +249 -4
- ksadk/studio/dsh_application.py +137 -0
- ksadk/studio/dsh_capability_service.py +1107 -0
- ksadk/studio/dsh_models.py +59 -0
- ksadk/studio/dsh_provider_registration.py +1075 -0
- ksadk/studio/event_store.py +54 -6
- ksadk/studio/framework_run.py +37 -4
- ksadk/studio/hosted_kernel.py +89 -14
- ksadk/studio/mcp_runtime.py +11 -3
- ksadk/studio/model_client.py +2 -2
- ksadk/studio/operations.py +12 -2
- ksadk/studio/plugin_composition.py +468 -0
- ksadk/studio/plugin_kernel_adapter.py +28 -0
- ksadk/studio/plugin_runtime.py +831 -0
- ksadk/studio/resource_authority.py +637 -0
- ksadk/studio/resource_binding_validation.py +77 -0
- ksadk/studio/resource_build_admission.py +196 -0
- ksadk/studio/resource_build_materializer.py +149 -0
- ksadk/studio/resource_catalog.py +149 -3
- ksadk/studio/resource_connections.py +220 -0
- ksadk/studio/run_service.py +1144 -96
- ksadk/studio/runtime_source.py +24 -8
- ksadk/studio/scheduler_assistant.py +317 -0
- ksadk/studio/scheduler_runtime.py +383 -0
- ksadk/studio/scheduler_service.py +214 -0
- ksadk/studio/service.py +1131 -95
- ksadk/studio/shared_web.py +610 -87
- ksadk/studio/soul.py +52 -0
- ksadk/studio/static/assets/CodeBlock-DCUUY0PL-BLjA7kbS.js +41 -0
- ksadk/studio/static/assets/KaTeX_AMS-Regular-BQhdFMY1.woff2 +0 -0
- ksadk/studio/static/assets/KaTeX_AMS-Regular-DMm9YOAa.woff +0 -0
- ksadk/studio/static/assets/KaTeX_AMS-Regular-DRggAlZN.ttf +0 -0
- ksadk/studio/static/assets/KaTeX_Caligraphic-Bold-ATXxdsX0.ttf +0 -0
- ksadk/studio/static/assets/KaTeX_Caligraphic-Bold-BEiXGLvX.woff +0 -0
- ksadk/studio/static/assets/KaTeX_Caligraphic-Bold-Dq_IR9rO.woff2 +0 -0
- ksadk/studio/static/assets/KaTeX_Caligraphic-Regular-CTRA-rTL.woff +0 -0
- ksadk/studio/static/assets/KaTeX_Caligraphic-Regular-Di6jR-x-.woff2 +0 -0
- ksadk/studio/static/assets/KaTeX_Caligraphic-Regular-wX97UBjC.ttf +0 -0
- ksadk/studio/static/assets/KaTeX_Fraktur-Bold-BdnERNNW.ttf +0 -0
- ksadk/studio/static/assets/KaTeX_Fraktur-Bold-BsDP51OF.woff +0 -0
- ksadk/studio/static/assets/KaTeX_Fraktur-Bold-CL6g_b3V.woff2 +0 -0
- ksadk/studio/static/assets/KaTeX_Fraktur-Regular-CB_wures.ttf +0 -0
- ksadk/studio/static/assets/KaTeX_Fraktur-Regular-CTYiF6lA.woff2 +0 -0
- ksadk/studio/static/assets/KaTeX_Fraktur-Regular-Dxdc4cR9.woff +0 -0
- ksadk/studio/static/assets/KaTeX_Main-Bold-Cx986IdX.woff2 +0 -0
- ksadk/studio/static/assets/KaTeX_Main-Bold-Jm3AIy58.woff +0 -0
- ksadk/studio/static/assets/KaTeX_Main-Bold-waoOVXN0.ttf +0 -0
- ksadk/studio/static/assets/KaTeX_Main-BoldItalic-DxDJ3AOS.woff2 +0 -0
- ksadk/studio/static/assets/KaTeX_Main-BoldItalic-DzxPMmG6.ttf +0 -0
- ksadk/studio/static/assets/KaTeX_Main-BoldItalic-SpSLRI95.woff +0 -0
- ksadk/studio/static/assets/KaTeX_Main-Italic-3WenGoN9.ttf +0 -0
- ksadk/studio/static/assets/KaTeX_Main-Italic-BMLOBm91.woff +0 -0
- ksadk/studio/static/assets/KaTeX_Main-Italic-NWA7e6Wa.woff2 +0 -0
- ksadk/studio/static/assets/KaTeX_Main-Regular-B22Nviop.woff2 +0 -0
- ksadk/studio/static/assets/KaTeX_Main-Regular-Dr94JaBh.woff +0 -0
- ksadk/studio/static/assets/KaTeX_Main-Regular-ypZvNtVU.ttf +0 -0
- ksadk/studio/static/assets/KaTeX_Math-BoldItalic-B3XSjfu4.ttf +0 -0
- ksadk/studio/static/assets/KaTeX_Math-BoldItalic-CZnvNsCZ.woff2 +0 -0
- ksadk/studio/static/assets/KaTeX_Math-BoldItalic-iY-2wyZ7.woff +0 -0
- ksadk/studio/static/assets/KaTeX_Math-Italic-DA0__PXp.woff +0 -0
- ksadk/studio/static/assets/KaTeX_Math-Italic-flOr_0UB.ttf +0 -0
- ksadk/studio/static/assets/KaTeX_Math-Italic-t53AETM-.woff2 +0 -0
- ksadk/studio/static/assets/KaTeX_SansSerif-Bold-CFMepnvq.ttf +0 -0
- ksadk/studio/static/assets/KaTeX_SansSerif-Bold-D1sUS0GD.woff2 +0 -0
- ksadk/studio/static/assets/KaTeX_SansSerif-Bold-DbIhKOiC.woff +0 -0
- ksadk/studio/static/assets/KaTeX_SansSerif-Italic-C3H0VqGB.woff2 +0 -0
- ksadk/studio/static/assets/KaTeX_SansSerif-Italic-DN2j7dab.woff +0 -0
- ksadk/studio/static/assets/KaTeX_SansSerif-Italic-YYjJ1zSn.ttf +0 -0
- ksadk/studio/static/assets/KaTeX_SansSerif-Regular-BNo7hRIc.ttf +0 -0
- ksadk/studio/static/assets/KaTeX_SansSerif-Regular-CS6fqUqJ.woff +0 -0
- ksadk/studio/static/assets/KaTeX_SansSerif-Regular-DDBCnlJ7.woff2 +0 -0
- ksadk/studio/static/assets/KaTeX_Script-Regular-C5JkGWo-.ttf +0 -0
- ksadk/studio/static/assets/KaTeX_Script-Regular-D3wIWfF6.woff2 +0 -0
- ksadk/studio/static/assets/KaTeX_Script-Regular-D5yQViql.woff +0 -0
- ksadk/studio/static/assets/KaTeX_Size1-Regular-C195tn64.woff +0 -0
- ksadk/studio/static/assets/KaTeX_Size1-Regular-Dbsnue_I.ttf +0 -0
- ksadk/studio/static/assets/KaTeX_Size1-Regular-mCD8mA8B.woff2 +0 -0
- ksadk/studio/static/assets/KaTeX_Size2-Regular-B7gKUWhC.ttf +0 -0
- ksadk/studio/static/assets/KaTeX_Size2-Regular-Dy4dx90m.woff2 +0 -0
- ksadk/studio/static/assets/KaTeX_Size2-Regular-oD1tc_U0.woff +0 -0
- ksadk/studio/static/assets/KaTeX_Size3-Regular-CTq5MqoE.woff +0 -0
- ksadk/studio/static/assets/KaTeX_Size3-Regular-DgpXs0kz.ttf +0 -0
- ksadk/studio/static/assets/KaTeX_Size4-Regular-BF-4gkZK.woff +0 -0
- ksadk/studio/static/assets/KaTeX_Size4-Regular-DWFBv043.ttf +0 -0
- ksadk/studio/static/assets/KaTeX_Size4-Regular-Dl5lxZxV.woff2 +0 -0
- ksadk/studio/static/assets/KaTeX_Typewriter-Regular-C0xS9mPB.woff +0 -0
- ksadk/studio/static/assets/KaTeX_Typewriter-Regular-CO6r4hn1.woff2 +0 -0
- ksadk/studio/static/assets/KaTeX_Typewriter-Regular-D3Ib7_Hf.ttf +0 -0
- ksadk/studio/static/assets/MathMessageMarkdown-CBcDrAw--BEOyPC3w.css +1 -0
- ksadk/studio/static/assets/MathMessageMarkdown-CBcDrAw--CUYIXwgI.js +8 -0
- ksadk/studio/static/assets/MermaidBlock-DBFTztfQ-BTYKWEbD.js +44 -0
- ksadk/studio/static/assets/PrismRenderer-wiXRHURw.js +3 -0
- ksadk/studio/static/assets/abnfDiagram-VCTEODGH-CLETGjKq.js +1 -0
- ksadk/studio/static/assets/arc-Pry-7G1_.js +1 -0
- ksadk/studio/static/assets/architecture-7GRP2DOG-hXMiO_AU.js +1 -0
- ksadk/studio/static/assets/architectureDiagram-5GKGNRK7-B5EQysk6.js +36 -0
- ksadk/studio/static/assets/array-BifhSqXX.js +1 -0
- ksadk/studio/static/assets/blockDiagram-I7D4REHJ-CFmPl1de.js +129 -0
- ksadk/studio/static/assets/c4Diagram-7LVT6UL2-BRrGu8qt.js +38 -0
- ksadk/studio/static/assets/channel-BqO-gtEw.js +1 -0
- ksadk/studio/static/assets/chunk-2Q5K7J3B-C1jixKkw.js +1 -0
- ksadk/studio/static/assets/chunk-4HAMMTFA-D220vUtq.js +62 -0
- ksadk/studio/static/assets/chunk-5VM5RSS4-ZNzvKenW.js +15 -0
- ksadk/studio/static/assets/chunk-75Z2AOVW-C8lLv_qc.js +2 -0
- ksadk/studio/static/assets/chunk-DU6HZSFF-C4DtVpCu.js +128 -0
- ksadk/studio/static/assets/chunk-F27PBJKO-Cpw14SNG.js +1 -0
- ksadk/studio/static/assets/chunk-FOHPRMQF-DHwB1DNv.js +161 -0
- ksadk/studio/static/assets/chunk-GMAD6QVW-DiQA-u2N.js +72 -0
- ksadk/studio/static/assets/chunk-GVQU2GXP-DUdNBUCi.js +1 -0
- ksadk/studio/static/assets/chunk-IMKFNOWR-BSlbjT_b.js +231 -0
- ksadk/studio/static/assets/chunk-JWPE2WC7-DVXcaiue.js +1 -0
- ksadk/studio/static/assets/chunk-L3NEJ4N5-Db8Ab22W.js +1 -0
- ksadk/studio/static/assets/chunk-OSK3NFVY-M2m6G3j4.js +10 -0
- ksadk/studio/static/assets/chunk-P2QGCYS3-DezaQxiK.js +1 -0
- ksadk/studio/static/assets/chunk-POPQ4Y6H-DOpufJ3t.js +1 -0
- ksadk/studio/static/assets/chunk-PWAF6VOD-CfLb1gSc.js +1 -0
- ksadk/studio/static/assets/chunk-SHT3W25Y-DAyIVp5H.js +168 -0
- ksadk/studio/static/assets/chunk-SVP7TREG-DulomOrS.js +88 -0
- ksadk/studio/static/assets/chunk-TICWLB2K-bHJYoflj.js +206 -0
- ksadk/studio/static/assets/chunk-XXDRQBXY-7PcdR2B1.js +1 -0
- ksadk/studio/static/assets/chunk-Y2CYZVJY-DsF7k-Jl.js +1 -0
- ksadk/studio/static/assets/classDiagram-ZZMXUADV-D_bW8JjA.js +1 -0
- ksadk/studio/static/assets/classDiagram-v2-VYDZK3BY-D_bW8JjA.js +1 -0
- ksadk/studio/static/assets/cose-bilkent-JH36ORCC-snL88wkX.js +1 -0
- ksadk/studio/static/assets/cynefin-OW5HDTMX-Bd1YhRo1.js +1 -0
- ksadk/studio/static/assets/cynefinDiagram-5FMLGOSQ-BBrIG_mI.js +62 -0
- ksadk/studio/static/assets/cytoscape.esm-CGd-uY3x.js +321 -0
- ksadk/studio/static/assets/dagre-GXQ25YYZ-DtF1nGdY.js +4 -0
- ksadk/studio/static/assets/dagre-PrKaheQc.js +1 -0
- ksadk/studio/static/assets/defaultLocale-BFoDCU3G.js +1 -0
- ksadk/studio/static/assets/diagram-S7CK7UJ4-0BZ98mya.js +30 -0
- ksadk/studio/static/assets/diagram-UQ7AKVKN-6mLKEo6L.js +41 -0
- ksadk/studio/static/assets/diagram-VSXAHHWV-CJBIaiZ2.js +3 -0
- ksadk/studio/static/assets/diagram-VX7I27RA-BohLEE1C.js +24 -0
- ksadk/studio/static/assets/diagram-Z3DM3KII-D8KIGonG.js +24 -0
- ksadk/studio/static/assets/dist-v5Q1xZ2K.js +1 -0
- ksadk/studio/static/assets/ebnfDiagram-PWID7BFC-C99HU61t.js +1 -0
- ksadk/studio/static/assets/erDiagram-RLTQ6QDP-DLGry2Ap.js +99 -0
- ksadk/studio/static/assets/eventmodeling-NTZA5JFV-B1_5Ac8j.js +1 -0
- ksadk/studio/static/assets/flowDiagram-HODETNUW-DD5hmicn.js +1 -0
- ksadk/studio/static/assets/ganttDiagram-EL5Y4UJY-BPJrVLSG.js +292 -0
- ksadk/studio/static/assets/gitGraph-4MIJSDKK-Cy_ZQBGi.js +1 -0
- ksadk/studio/static/assets/gitGraphDiagram-WWUBYQGX-CZCUz4MT.js +106 -0
- ksadk/studio/static/assets/graphlib-DS17s2tU.js +1 -0
- ksadk/studio/static/assets/index-CeHL9ARV.css +2 -0
- ksadk/studio/static/assets/index-D9QEcVpL.js +320 -0
- ksadk/studio/static/assets/info-A6RAGUB7-DBzDQB_I.js +1 -0
- ksadk/studio/static/assets/infoDiagram-27XIBGKW-B-sq07Hi.js +2 -0
- ksadk/studio/static/assets/init-C-OQMol4.js +1 -0
- ksadk/studio/static/assets/ishikawaDiagram-5VMMS53U-CljI2wyf.js +70 -0
- ksadk/studio/static/assets/journeyDiagram-3NMN7TZE-D50Fo2sL.js +139 -0
- ksadk/studio/static/assets/kanban-definition-UXKFOSKX-DimfOTam.js +89 -0
- ksadk/studio/static/assets/katex-DhON-x74.js +257 -0
- ksadk/studio/static/assets/line-CX5BOOUP.js +1 -0
- ksadk/studio/static/assets/linear-BCxN9JLv.js +1 -0
- ksadk/studio/static/assets/mermaid-parser.core-BdCz8fkS.js +7 -0
- ksadk/studio/static/assets/mindmap-definition-YA3MSWOX-Bizzqy5R.js +96 -0
- ksadk/studio/static/assets/ordinal-BDEzSJ7C.js +1 -0
- ksadk/studio/static/assets/packet-AYTQ26CC-gPln-_kG.js +1 -0
- ksadk/studio/static/assets/path-fybaL0A-.js +1 -0
- ksadk/studio/static/assets/pegDiagram-XKGWAZYB-Dy3fB-gW.js +1 -0
- ksadk/studio/static/assets/pie-WAS4IAKB-qZdHMr7B.js +1 -0
- ksadk/studio/static/assets/pieDiagram-E7YTZNPT-B9mrFSDF.js +39 -0
- ksadk/studio/static/assets/quadrantDiagram-AXDQQJYC-NzUfCbMR.js +7 -0
- ksadk/studio/static/assets/radar-RG4KPBEZ-BZlnaea9.js +1 -0
- ksadk/studio/static/assets/railroad-74A4TZTK-Ce3__H9c.js +1 -0
- ksadk/studio/static/assets/railroad-abnf-HS5TGJTU-DqQn7EzD.js +1 -0
- ksadk/studio/static/assets/railroad-ebnf-LZEXJU2U-B55kCA8F.js +1 -0
- ksadk/studio/static/assets/railroad-peg-WCYAUIDC-DfQnvkHd.js +1 -0
- ksadk/studio/static/assets/railroadDiagram-O6MQD6OU-DnhMjZCk.js +1 -0
- ksadk/studio/static/assets/requirementDiagram-BXWQKSXE-BF3d103U.js +84 -0
- ksadk/studio/static/assets/rolldown-runtime-Dy4uBu1J-DK3Fl9T5.js +1 -0
- ksadk/studio/static/assets/rough.esm-Dy-Kn_BL.js +1 -0
- ksadk/studio/static/assets/sankeyDiagram-P5KCCOFB-Bo-JTwt0.js +40 -0
- ksadk/studio/static/assets/sequenceDiagram-WJ2MYXX4-Dh4wZtUm.js +162 -0
- ksadk/studio/static/assets/sizeCapture-INFHLROL-B0uUizjq.js +1 -0
- ksadk/studio/static/assets/src-SFn9St9H.js +1 -0
- ksadk/studio/static/assets/stateDiagram-D77RDMKH-DH774G6d.js +1 -0
- ksadk/studio/static/assets/stateDiagram-v2-MP3YSRHH-DZvVWPBo.js +1 -0
- ksadk/studio/static/assets/swimlanes-42K2YHIH-Bl13OvTX.js +1 -0
- ksadk/studio/static/assets/swimlanesDiagram-VR7AAH4N-BnFOTALJ.js +8 -0
- ksadk/studio/static/assets/timeline-definition-24CTP7MA-DxmSSjRB.js +120 -0
- ksadk/studio/static/assets/treeView-Q6P3EWNA-D5Nn9Swz.js +1 -0
- ksadk/studio/static/assets/treemap-WGGIJYW6-CgHgnQhE.js +1 -0
- ksadk/studio/static/assets/vennDiagram-4TSXK5OY-B9QEXcJq.js +34 -0
- ksadk/studio/static/assets/wardley-WFR3VGLG-DXrK2RRY.js +1 -0
- ksadk/studio/static/assets/wardleyDiagram-VM6X3IG4-Ba1AOWoe.js +78 -0
- ksadk/studio/static/assets/xychartDiagram-S5SC5T6Z-Cr5pt5Y-.js +7 -0
- ksadk/studio/static/index.html +2 -2
- ksadk/studio/validator.py +1 -1
- ksadk/studio/workspace.py +1 -0
- ksadk/version.py +1 -1
- ksadk_runtime_common/workspace_files/path_utils.py +41 -0
- agentengine_sdk_python-0.8.2.dist-info/RECORD +0 -778
- ksadk/server/static/assets/architecture-7GRP2DOG-DjKratdf.js +0 -1
- ksadk/server/static/assets/channel-4cQHKtx1.js +0 -1
- ksadk/server/static/assets/chunk-2Q5K7J3B-DmgWkESh.js +0 -1
- ksadk/server/static/assets/classDiagram-DTDB5LWJ-DLFd9Xi0.js +0 -1
- ksadk/server/static/assets/classDiagram-v2-JRS7N3AN-DLFd9Xi0.js +0 -1
- ksadk/server/static/assets/cynefin-OW5HDTMX-DjEM48Qp.js +0 -1
- ksadk/server/static/assets/eventmodeling-NTZA5JFV-CMgMaJrC.js +0 -1
- ksadk/server/static/assets/flowDiagram-A5DVABFB-BBKL0x3P.js +0 -1
- ksadk/server/static/assets/gitGraph-4MIJSDKK-Dw63mrhw.js +0 -1
- ksadk/server/static/assets/index-8ipRcQ-M.js +0 -240
- ksadk/server/static/assets/index-ByFCqjlh.css +0 -2
- ksadk/server/static/assets/info-A6RAGUB7-B6iAblII.js +0 -1
- ksadk/server/static/assets/packet-AYTQ26CC-BOYAipuq.js +0 -1
- ksadk/server/static/assets/pie-WAS4IAKB-Ctq0Kbku.js +0 -1
- ksadk/server/static/assets/radar-RG4KPBEZ-DN0-ul_0.js +0 -1
- ksadk/server/static/assets/railroad-74A4TZTK-C6cC_to0.js +0 -1
- ksadk/server/static/assets/railroad-abnf-HS5TGJTU-BimjIuRc.js +0 -1
- ksadk/server/static/assets/railroad-ebnf-LZEXJU2U-CvY65ABq.js +0 -1
- ksadk/server/static/assets/railroad-peg-WCYAUIDC-D72Iq_Tv.js +0 -1
- ksadk/server/static/assets/stateDiagram-v2-4QOOHH4V-BgQY03nz.js +0 -1
- ksadk/server/static/assets/swimlanesDiagram-VK2B7HYN-DLVw3q5Q.js +0 -8
- ksadk/server/static/assets/treeView-Q6P3EWNA-BMpO0wsB.js +0 -1
- ksadk/server/static/assets/treemap-WGGIJYW6-Et0aqzU3.js +0 -1
- ksadk/server/static/assets/wardley-WFR3VGLG-CbY0mhpl.js +0 -1
- ksadk/studio/static/assets/PrismRenderer-IYN-ffww.js +0 -3
- ksadk/studio/static/assets/index-BLpcdrgW.css +0 -1
- ksadk/studio/static/assets/index-CYekR2Xv.js +0 -260
- {agentengine_sdk_python-0.8.2.dist-info → agentengine_sdk_python-0.8.4.dist-info}/WHEEL +0 -0
- {agentengine_sdk_python-0.8.2.dist-info → agentengine_sdk_python-0.8.4.dist-info}/entry_points.txt +0 -0
- {agentengine_sdk_python-0.8.2.dist-info → agentengine_sdk_python-0.8.4.dist-info}/licenses/LICENSE +0 -0
- {agentengine_sdk_python-0.8.2.dist-info → agentengine_sdk_python-0.8.4.dist-info}/top_level.txt +0 -0
ksadk/runtime/executor.py
CHANGED
|
@@ -8,6 +8,7 @@
|
|
|
8
8
|
from __future__ import annotations
|
|
9
9
|
|
|
10
10
|
import hashlib
|
|
11
|
+
import inspect
|
|
11
12
|
import json
|
|
12
13
|
from contextlib import suppress
|
|
13
14
|
from dataclasses import dataclass
|
|
@@ -75,6 +76,7 @@ class RuntimeExecutor:
|
|
|
75
76
|
self._registry = registry
|
|
76
77
|
self._kernel_store = kernel_store
|
|
77
78
|
self._runs: dict[_HandleKey, _OwnedRun] = {}
|
|
79
|
+
self._capability_adapters: dict[int, tuple[RuntimeLaunchContext, RuntimeAdapter]] = {}
|
|
78
80
|
|
|
79
81
|
def create_adapter(self, context: RuntimeLaunchContext) -> RuntimeAdapter:
|
|
80
82
|
"""从本 executor 的 registry 创建一个 adapter。
|
|
@@ -225,6 +227,18 @@ class RuntimeExecutor:
|
|
|
225
227
|
first_error = exc
|
|
226
228
|
finally:
|
|
227
229
|
self._runs.pop(key, None)
|
|
230
|
+
for key, (_context, adapter) in list(self._capability_adapters.items()):
|
|
231
|
+
runner = getattr(adapter, "_runner", None)
|
|
232
|
+
close_runner = getattr(runner, "close", None)
|
|
233
|
+
if callable(close_runner):
|
|
234
|
+
try:
|
|
235
|
+
result = close_runner()
|
|
236
|
+
if inspect.isawaitable(result):
|
|
237
|
+
await result
|
|
238
|
+
except BaseException as exc:
|
|
239
|
+
if first_error is None:
|
|
240
|
+
first_error = exc
|
|
241
|
+
self._capability_adapters.pop(key, None)
|
|
228
242
|
if first_error is not None:
|
|
229
243
|
raise first_error
|
|
230
244
|
|
|
@@ -295,7 +309,7 @@ class RuntimeExecutor:
|
|
|
295
309
|
def native_capabilities(self, context: RuntimeLaunchContext) -> dict[str, object]:
|
|
296
310
|
"""Read the capability declaration from the registered Runtime implementation."""
|
|
297
311
|
|
|
298
|
-
adapter = self.
|
|
312
|
+
adapter = self.capability_adapter(context)
|
|
299
313
|
return dict(adapter.runtime.native_capabilities())
|
|
300
314
|
|
|
301
315
|
def capability_matrix(self, context: RuntimeLaunchContext) -> dict[str, object]:
|
|
@@ -306,9 +320,25 @@ class RuntimeExecutor:
|
|
|
306
320
|
modes can be exposed only when the selected runtime declares support.
|
|
307
321
|
"""
|
|
308
322
|
|
|
309
|
-
adapter = self.
|
|
323
|
+
adapter = self.capability_adapter(context)
|
|
310
324
|
return adapter.capabilities().model_dump(mode="json")
|
|
311
325
|
|
|
326
|
+
def capability_adapter(self, context: RuntimeLaunchContext) -> RuntimeAdapter:
|
|
327
|
+
"""Return one stable, non-executing adapter for capability discovery."""
|
|
328
|
+
|
|
329
|
+
key = id(context)
|
|
330
|
+
cached = self._capability_adapters.get(key)
|
|
331
|
+
if cached is None or cached[0] is not context:
|
|
332
|
+
adapter = self._registry.create(context)
|
|
333
|
+
self._capability_adapters[key] = (context, adapter)
|
|
334
|
+
return adapter
|
|
335
|
+
return cached[1]
|
|
336
|
+
|
|
337
|
+
def capability_subject(self, context: RuntimeLaunchContext) -> object | None:
|
|
338
|
+
"""Expose the runner whose async capability hooks feed persistence gating."""
|
|
339
|
+
|
|
340
|
+
return getattr(self.capability_adapter(context), "_runner", None)
|
|
341
|
+
|
|
312
342
|
def registered_runtime_types(self) -> list[str]:
|
|
313
343
|
"""Expose Registry membership without leaking or duplicating the Registry."""
|
|
314
344
|
|
|
@@ -375,6 +405,51 @@ def _normalize_runtime_type(runtime_type: str) -> str:
|
|
|
375
405
|
return runtime_type.strip().lower()
|
|
376
406
|
|
|
377
407
|
|
|
408
|
+
def project_legacy_runtime_capabilities(
|
|
409
|
+
native: dict[str, object],
|
|
410
|
+
matrix: dict[str, object],
|
|
411
|
+
) -> dict[str, object]:
|
|
412
|
+
"""Fill the legacy PascalCase UI contract from the typed v1 matrix."""
|
|
413
|
+
|
|
414
|
+
projected = dict(native)
|
|
415
|
+
|
|
416
|
+
def capability(name: str) -> dict[str, object]:
|
|
417
|
+
value = matrix.get(name)
|
|
418
|
+
return dict(value) if isinstance(value, dict) else {}
|
|
419
|
+
|
|
420
|
+
cancel = capability("cancel")
|
|
421
|
+
checkpoint = capability("checkpoint")
|
|
422
|
+
resume = capability("resume")
|
|
423
|
+
projected.setdefault(
|
|
424
|
+
"CancelRun",
|
|
425
|
+
{
|
|
426
|
+
"Supported": cancel.get("supported") is True,
|
|
427
|
+
"Reason": str(cancel.get("reason") or ""),
|
|
428
|
+
},
|
|
429
|
+
)
|
|
430
|
+
projected.setdefault(
|
|
431
|
+
"Checkpoint",
|
|
432
|
+
{
|
|
433
|
+
"Supported": checkpoint.get("supported") is True,
|
|
434
|
+
"Backend": "native" if checkpoint.get("supported") is True else "none",
|
|
435
|
+
"Scope": "runtime",
|
|
436
|
+
"Durable": capability("durable_restore").get("supported") is True,
|
|
437
|
+
"SharedAcrossPods": False,
|
|
438
|
+
"ResumeMode": str(resume.get("mode") or "none"),
|
|
439
|
+
"Reason": str(checkpoint.get("reason") or ""),
|
|
440
|
+
},
|
|
441
|
+
)
|
|
442
|
+
projected.setdefault(
|
|
443
|
+
"ResumeRun",
|
|
444
|
+
{
|
|
445
|
+
"Supported": resume.get("supported") is True,
|
|
446
|
+
"ResumeMode": str(resume.get("mode") or "none"),
|
|
447
|
+
"Reason": str(resume.get("reason") or ""),
|
|
448
|
+
},
|
|
449
|
+
)
|
|
450
|
+
return projected
|
|
451
|
+
|
|
452
|
+
|
|
378
453
|
def _handle_key(handle: RunHandle) -> _HandleKey:
|
|
379
454
|
return (
|
|
380
455
|
_normalize_runtime_type(handle.runtime_type),
|
|
@@ -389,4 +464,5 @@ __all__ = [
|
|
|
389
464
|
"DurableRun",
|
|
390
465
|
"RunNotFoundError",
|
|
391
466
|
"handle_digest",
|
|
467
|
+
"project_legacy_runtime_capabilities",
|
|
392
468
|
]
|
ksadk/runtime/factory.py
CHANGED
|
@@ -2,17 +2,37 @@
|
|
|
2
2
|
|
|
3
3
|
from __future__ import annotations
|
|
4
4
|
|
|
5
|
-
import dataclasses
|
|
6
|
-
import os
|
|
7
|
-
import tempfile
|
|
8
|
-
from pathlib import Path
|
|
9
5
|
from typing import Any
|
|
10
6
|
|
|
11
|
-
from ksadk.
|
|
12
|
-
|
|
7
|
+
from ksadk.plugins.providers.codex_native import (
|
|
8
|
+
_apply_codex_overrides as _apply_codex_overrides,
|
|
9
|
+
)
|
|
10
|
+
from ksadk.plugins.providers.codex_native import (
|
|
11
|
+
_codex_home_key as _codex_home_key,
|
|
12
|
+
)
|
|
13
|
+
from ksadk.plugins.providers.codex_native import (
|
|
14
|
+
_codex_plugin_bootstrap as _codex_plugin_bootstrap,
|
|
15
|
+
)
|
|
16
|
+
from ksadk.plugins.providers.codex_native import (
|
|
17
|
+
_isolated_codex_home as _isolated_codex_home,
|
|
18
|
+
)
|
|
19
|
+
from ksadk.plugins.providers.codex_native import (
|
|
20
|
+
_manifest_has_network_mcp as _manifest_has_network_mcp,
|
|
21
|
+
)
|
|
22
|
+
from ksadk.plugins.providers.codex_native import (
|
|
23
|
+
_manifest_mcp_overrides as _manifest_mcp_overrides,
|
|
24
|
+
)
|
|
25
|
+
from ksadk.plugins.providers.codex_native import (
|
|
26
|
+
_materialize_bound_codex_skills as _materialize_bound_codex_skills,
|
|
27
|
+
)
|
|
28
|
+
from ksadk.plugins.providers.codex_native import (
|
|
29
|
+
codex_request_config,
|
|
30
|
+
)
|
|
31
|
+
from ksadk.plugins.providers.codex_native import (
|
|
32
|
+
create_codex_adapter as _create_codex,
|
|
33
|
+
)
|
|
13
34
|
from ksadk.runners.base_runner import BaseRunner
|
|
14
|
-
from ksadk.runtime.adapter import StartRequest
|
|
15
|
-
from ksadk.runtime.adapter import RuntimeAdapter, RuntimeRegistry
|
|
35
|
+
from ksadk.runtime.adapter import RuntimeAdapter, RuntimeRegistry, StartRequest
|
|
16
36
|
from ksadk.runtime.framework_adapters import ADKRuntimeAdapter, LangGraphRuntimeAdapter
|
|
17
37
|
from ksadk.runtime.launch import RuntimeLaunchContext
|
|
18
38
|
|
|
@@ -49,46 +69,7 @@ def kernel_start_request_defaults(context: RuntimeLaunchContext) -> dict[str, An
|
|
|
49
69
|
if context.runtime_type != "codex":
|
|
50
70
|
return defaults
|
|
51
71
|
|
|
52
|
-
|
|
53
|
-
task_prompt = str(config.get("task_prompt") or "").strip()
|
|
54
|
-
base_instructions = prompt
|
|
55
|
-
if task_prompt:
|
|
56
|
-
base_instructions = f"{prompt}\n\n{task_prompt}" if prompt else task_prompt
|
|
57
|
-
|
|
58
|
-
raw_sandbox = str(config.get("sandbox") or "read_only").strip().lower()
|
|
59
|
-
raw_approval = str(config.get("approval_mode") or "").strip().lower()
|
|
60
|
-
approval_profiles = {
|
|
61
|
-
"ask": ("workspace-write", "manual"),
|
|
62
|
-
"risk": ("workspace-write", "auto_review"),
|
|
63
|
-
"full": ("full-access", "deny_all"),
|
|
64
|
-
}
|
|
65
|
-
sandbox_profiles = {
|
|
66
|
-
"read_only": ("read-only", "deny_all"),
|
|
67
|
-
"read-only": ("read-only", "deny_all"),
|
|
68
|
-
"workspace_write": ("workspace-write", "deny_all"),
|
|
69
|
-
"workspace-write": ("workspace-write", "deny_all"),
|
|
70
|
-
"workspace_write_auto": ("workspace-write", "auto_review"),
|
|
71
|
-
"workspace-write-auto": ("workspace-write", "auto_review"),
|
|
72
|
-
"full_access": ("full-access", "deny_all"),
|
|
73
|
-
"full-access": ("full-access", "deny_all"),
|
|
74
|
-
}
|
|
75
|
-
if raw_approval in approval_profiles:
|
|
76
|
-
sandbox, approval = approval_profiles[raw_approval]
|
|
77
|
-
else:
|
|
78
|
-
sandbox, default_approval = sandbox_profiles.get(raw_sandbox, ("read-only", "deny_all"))
|
|
79
|
-
approval = raw_approval or default_approval
|
|
80
|
-
|
|
81
|
-
request_config: dict[str, Any] = {
|
|
82
|
-
"sandbox_read_only": sandbox == "read-only",
|
|
83
|
-
"sandbox": sandbox,
|
|
84
|
-
"approval_mode": approval,
|
|
85
|
-
"cwd": str(context.project_dir),
|
|
86
|
-
"summary": "auto",
|
|
87
|
-
"ephemeral": False,
|
|
88
|
-
}
|
|
89
|
-
if base_instructions:
|
|
90
|
-
request_config["base_instructions"] = base_instructions
|
|
91
|
-
defaults["config"] = request_config
|
|
72
|
+
defaults["config"] = codex_request_config(context)
|
|
92
73
|
return defaults
|
|
93
74
|
|
|
94
75
|
|
|
@@ -112,9 +93,7 @@ def apply_runtime_start_request_defaults(
|
|
|
112
93
|
default_model = str(defaults.get("model") or "").strip() or None
|
|
113
94
|
requested_model = str(request.model or "").strip()
|
|
114
95
|
allowed_models = {
|
|
115
|
-
str(item).strip()
|
|
116
|
-
for item in (defaults.get("allowed_models") or [])
|
|
117
|
-
if str(item).strip()
|
|
96
|
+
str(item).strip() for item in (defaults.get("allowed_models") or []) if str(item).strip()
|
|
118
97
|
}
|
|
119
98
|
selected_model = (
|
|
120
99
|
requested_model
|
|
@@ -134,155 +113,6 @@ def apply_runtime_start_request_defaults(
|
|
|
134
113
|
)
|
|
135
114
|
|
|
136
115
|
|
|
137
|
-
def _manifest_mcp_overrides(config: dict[str, Any]) -> list[str]:
|
|
138
|
-
"""Translate declarative MCP bindings into native Codex config keys."""
|
|
139
|
-
|
|
140
|
-
overrides: list[str] = []
|
|
141
|
-
servers = config.get("mcp_servers") or []
|
|
142
|
-
if not isinstance(servers, (list, tuple)):
|
|
143
|
-
return overrides
|
|
144
|
-
for server in servers:
|
|
145
|
-
if not isinstance(server, dict):
|
|
146
|
-
continue
|
|
147
|
-
name = str(server.get("name") or "").strip()
|
|
148
|
-
url = str(server.get("url") or "").strip()
|
|
149
|
-
if not name or not url:
|
|
150
|
-
continue
|
|
151
|
-
overrides.append(f"mcp_servers.{name}.url={url}")
|
|
152
|
-
env_key = str(server.get("env_key") or "").strip()
|
|
153
|
-
if env_key:
|
|
154
|
-
overrides.append(f"mcp_servers.{name}.bearer_token_env_var={env_key}")
|
|
155
|
-
return overrides
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
def _create_codex(context: RuntimeLaunchContext) -> RuntimeAdapter:
|
|
159
|
-
client_factory = context.services.codex_client_factory or AsyncCodexClient
|
|
160
|
-
config = dict(context.config)
|
|
161
|
-
overrides = list(config.get("codex_overrides") or [])
|
|
162
|
-
manifest_mcp_overrides = _manifest_mcp_overrides(config)
|
|
163
|
-
overrides.extend(item for item in manifest_mcp_overrides if item not in overrides)
|
|
164
|
-
projected_config = kernel_start_request_defaults(context).get("config") or {}
|
|
165
|
-
if manifest_mcp_overrides and projected_config.get("sandbox") == "workspace-write":
|
|
166
|
-
network_override = "sandbox_workspace_write.network_access=true"
|
|
167
|
-
if network_override not in overrides:
|
|
168
|
-
overrides.append(network_override)
|
|
169
|
-
# Studio's default collaboration mode must expose Codex's structured
|
|
170
|
-
# request_user_input tool; the upstream feature is intentionally off by
|
|
171
|
-
# default outside Plan mode. This stays process-local to the isolated
|
|
172
|
-
# runtime and does not mutate the user's global Codex configuration.
|
|
173
|
-
interaction_override = "features.default_mode_request_user_input=true"
|
|
174
|
-
if interaction_override not in overrides:
|
|
175
|
-
overrides.append(interaction_override)
|
|
176
|
-
try:
|
|
177
|
-
from openai_codex import CodexConfig
|
|
178
|
-
|
|
179
|
-
base_cfg = CodexConfig()
|
|
180
|
-
if overrides:
|
|
181
|
-
base_cfg = dataclasses.replace(
|
|
182
|
-
base_cfg,
|
|
183
|
-
config_overrides=tuple(getattr(base_cfg, "config_overrides", ()) or ())
|
|
184
|
-
+ tuple(str(o) for o in overrides),
|
|
185
|
-
)
|
|
186
|
-
env = dict(getattr(base_cfg, "env", None) or {})
|
|
187
|
-
isolated_home = _isolated_codex_home(context.project_dir)
|
|
188
|
-
env.setdefault("CODEX_HOME", str(isolated_home))
|
|
189
|
-
# HOME 级隔离:codex app-server 还会按约定扫 ~/.agents/skills、
|
|
190
|
-
# ~/.claude/skills 等宿主目录,仅设 CODEX_HOME 挡不住。隔离 HOME 后这些
|
|
191
|
-
# 路径全部落在工作区内,宿主 skills/MCP/凭证不再进入 Agent 上下文。
|
|
192
|
-
# 设 KSADK_CODEX_ISOLATE_HOME=0 可关闭(调试用)。
|
|
193
|
-
if os.environ.get("KSADK_CODEX_ISOLATE_HOME", "1") != "0":
|
|
194
|
-
env.setdefault("HOME", str(isolated_home))
|
|
195
|
-
# 运行期解析出的凭证值(如 MCP bearer_token_env_var 所需)注入子进程环境
|
|
196
|
-
env.update({str(k): str(v) for k, v in (context.config.get("env") or {}).items()})
|
|
197
|
-
base_cfg = dataclasses.replace(base_cfg, env=env)
|
|
198
|
-
try:
|
|
199
|
-
client: Any = client_factory(config=base_cfg)
|
|
200
|
-
except TypeError:
|
|
201
|
-
# 自定义/测试工厂可能不接受 config 参数:退化为无参构造,
|
|
202
|
-
# config_overrides 事后注入(自定义工厂自行承担 env 隔离)。
|
|
203
|
-
client = client_factory()
|
|
204
|
-
if overrides:
|
|
205
|
-
_apply_codex_overrides(client, overrides)
|
|
206
|
-
except ImportError:
|
|
207
|
-
client: Any = client_factory()
|
|
208
|
-
if overrides:
|
|
209
|
-
_apply_codex_overrides(client, overrides)
|
|
210
|
-
timeout = context.config.get("turn_timeout_seconds")
|
|
211
|
-
request_defaults = kernel_start_request_defaults(context)
|
|
212
|
-
request_config = request_defaults.get("config") or {}
|
|
213
|
-
sandbox_read_only = (
|
|
214
|
-
bool(context.config["sandbox_read_only"])
|
|
215
|
-
if "sandbox_read_only" in context.config
|
|
216
|
-
else bool(request_config.get("sandbox_read_only", True))
|
|
217
|
-
)
|
|
218
|
-
return CodexRuntimeAdapter(
|
|
219
|
-
client,
|
|
220
|
-
sandbox_read_only=sandbox_read_only,
|
|
221
|
-
turn_timeout_seconds=float(timeout) if timeout is not None else None,
|
|
222
|
-
)
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
def _isolated_codex_home(project_dir: Any) -> Path:
|
|
226
|
-
"""Studio 运行 Agent 使用工作区级隔离 CODEX_HOME。
|
|
227
|
-
|
|
228
|
-
避免 codex app-server 继承宿主环境(~/.codex / ~/.wework/codex)里的
|
|
229
|
-
skills、MCP 配置、插件与凭证,污染 Agent 上下文甚至泄漏宿主能力。
|
|
230
|
-
可用 KSADK_CODEX_HOME 显式覆盖。
|
|
231
|
-
"""
|
|
232
|
-
override = os.environ.get("KSADK_CODEX_HOME")
|
|
233
|
-
if override:
|
|
234
|
-
home = Path(override).expanduser()
|
|
235
|
-
home.mkdir(parents=True, exist_ok=True)
|
|
236
|
-
return home
|
|
237
|
-
|
|
238
|
-
# Source bundles are deliberately mounted read-only in managed runtimes.
|
|
239
|
-
# Keep the preferred workspace-local isolation for local development, but
|
|
240
|
-
# never make a Codex turn depend on being able to mutate that bundle.
|
|
241
|
-
workspace_home = Path(str(project_dir)) / ".agentkit" / "codex-home"
|
|
242
|
-
try:
|
|
243
|
-
workspace_home.mkdir(parents=True, exist_ok=True)
|
|
244
|
-
return workspace_home
|
|
245
|
-
except OSError:
|
|
246
|
-
pass
|
|
247
|
-
|
|
248
|
-
# The managed runtime already provides a per-workload writable state
|
|
249
|
-
# volume. Derive from its explicit directory first, then from the
|
|
250
|
-
# session-store path for backward-compatible images. /tmp is a final
|
|
251
|
-
# process-local fallback for custom read-only launchers.
|
|
252
|
-
state_dir = os.environ.get("KSADK_RUNTIME_STATE_DIR")
|
|
253
|
-
session_path = os.environ.get("KSADK_SESSION_PATH")
|
|
254
|
-
fallback_root = (
|
|
255
|
-
Path(state_dir)
|
|
256
|
-
if state_dir
|
|
257
|
-
else Path(session_path).expanduser().parent
|
|
258
|
-
if session_path
|
|
259
|
-
else Path(tempfile.gettempdir()) / "ksadk-runtime-state"
|
|
260
|
-
)
|
|
261
|
-
fallback_home = fallback_root / "codex-home"
|
|
262
|
-
fallback_home.mkdir(parents=True, exist_ok=True)
|
|
263
|
-
return fallback_home
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
def _apply_codex_overrides(client: Any, overrides: Any) -> None:
|
|
267
|
-
"""Append MCP server --config overrides to the client's CodexConfig."""
|
|
268
|
-
try:
|
|
269
|
-
from openai_codex import CodexConfig
|
|
270
|
-
except ImportError:
|
|
271
|
-
return
|
|
272
|
-
# ksadk AsyncCodexClient -> AsyncCodex -> inner AsyncCodexClient.config
|
|
273
|
-
inner_codex = getattr(client, "_codex", None)
|
|
274
|
-
inner_client = getattr(inner_codex, "_client", None) or inner_codex
|
|
275
|
-
cfg = getattr(inner_client, "config", None)
|
|
276
|
-
if cfg is None or not isinstance(cfg, CodexConfig):
|
|
277
|
-
return
|
|
278
|
-
base_overrides = tuple(getattr(cfg, "config_overrides", ()) or ())
|
|
279
|
-
new_overrides = tuple(str(o) for o in overrides if o not in base_overrides)
|
|
280
|
-
if not new_overrides:
|
|
281
|
-
return
|
|
282
|
-
new_cfg = dataclasses.replace(cfg, config_overrides=base_overrides + new_overrides)
|
|
283
|
-
setattr(inner_client, "config", new_cfg)
|
|
284
|
-
|
|
285
|
-
|
|
286
116
|
def _create_framework_runner(context: RuntimeLaunchContext, runtime_type: str) -> BaseRunner:
|
|
287
117
|
try:
|
|
288
118
|
from ksadk.runners.patch_langchain import apply_patch
|
|
@@ -63,6 +63,24 @@ class LangGraphRuntimeAdapter(RunnerRuntimeAdapter):
|
|
|
63
63
|
def __init__(self, runner: BaseRunner) -> None:
|
|
64
64
|
super().__init__(runner, runtime_type="langgraph")
|
|
65
65
|
|
|
66
|
+
def capabilities(self): # noqa: ANN201
|
|
67
|
+
"""Advertise checkpoint interaction only when LangGraph can resume it.
|
|
68
|
+
|
|
69
|
+
``RunnerRuntimeAdapter`` is intentionally conservative because a
|
|
70
|
+
generic checkpoint is not proof of original-interrupt delivery. The
|
|
71
|
+
LangGraph adapter owns that mapping, so it is the only runner-family
|
|
72
|
+
adapter that may publish ``durable_resume``.
|
|
73
|
+
"""
|
|
74
|
+
|
|
75
|
+
matrix = super().capabilities()
|
|
76
|
+
return matrix.model_copy(
|
|
77
|
+
update={
|
|
78
|
+
"interaction_mode": (
|
|
79
|
+
"durable_resume" if matrix.resume.supported else "unavailable"
|
|
80
|
+
)
|
|
81
|
+
}
|
|
82
|
+
)
|
|
83
|
+
|
|
66
84
|
async def _resume_native(
|
|
67
85
|
self,
|
|
68
86
|
handle: RunHandle,
|
|
@@ -101,6 +119,29 @@ class LangGraphRuntimeAdapter(RunnerRuntimeAdapter):
|
|
|
101
119
|
|
|
102
120
|
def _checkpoint_capability(self) -> CheckpointCapability:
|
|
103
121
|
capability = super()._checkpoint_capability()
|
|
122
|
+
if not capability.supported:
|
|
123
|
+
describe = getattr(self._runner, "describe_checkpoint_capability", None)
|
|
124
|
+
try:
|
|
125
|
+
raw = dict(describe()) if callable(describe) else {}
|
|
126
|
+
except Exception: # noqa: BLE001
|
|
127
|
+
raw = {}
|
|
128
|
+
if (
|
|
129
|
+
str(raw.get("Scope") or "").strip().lower() == "process_local"
|
|
130
|
+
and str(raw.get("Backend") or "").strip().lower() in {"memory", "sqlite"}
|
|
131
|
+
):
|
|
132
|
+
# The runner correctly refuses to advertise this checkpoint to
|
|
133
|
+
# hosted callers because it is not durable across a process
|
|
134
|
+
# restart. This adapter only resumes an attached in-process
|
|
135
|
+
# handle, for which LangGraph's memory saver is sufficient.
|
|
136
|
+
capability = capability.model_copy(
|
|
137
|
+
update={
|
|
138
|
+
"supported": True,
|
|
139
|
+
"reason": (
|
|
140
|
+
"Checkpoint resume is limited to the current process; "
|
|
141
|
+
"it is not durable across restarts or pods"
|
|
142
|
+
),
|
|
143
|
+
}
|
|
144
|
+
)
|
|
104
145
|
if not capability.supported:
|
|
105
146
|
return capability
|
|
106
147
|
return capability.model_copy(
|
ksadk/runtime/preprocessing.py
CHANGED
|
@@ -19,6 +19,7 @@ from ksadk.runtime.adapter import (
|
|
|
19
19
|
StartRequest,
|
|
20
20
|
)
|
|
21
21
|
from ksadk.runtime_context import PlatformInvocationContext
|
|
22
|
+
from ksadk.session_context import split_session_context
|
|
22
23
|
|
|
23
24
|
|
|
24
25
|
@dataclass
|
|
@@ -58,17 +59,21 @@ async def prepare_runtime_start(request: StartRequest, runner: Any) -> PreparedR
|
|
|
58
59
|
outer_metadata = {
|
|
59
60
|
key: value
|
|
60
61
|
for key, value in request.metadata.items()
|
|
61
|
-
if key
|
|
62
|
+
if key not in {CONVERSATION_PREPROCESSING_METADATA_KEY, "session_context"}
|
|
62
63
|
}
|
|
63
64
|
request_metadata = {**outer_metadata, **conversation.request_metadata}
|
|
64
65
|
messages = conversation.messages or _fallback_messages(request.input)
|
|
65
66
|
raw_prepared = (conversation.model_extra or {}).get("prepared_turn")
|
|
66
67
|
if isinstance(raw_prepared, Mapping):
|
|
67
68
|
prepared = PreparedConversationTurn(**dict(raw_prepared))
|
|
68
|
-
|
|
69
|
+
merged_metadata = {
|
|
69
70
|
**prepared.request_metadata,
|
|
70
71
|
**request_metadata,
|
|
71
72
|
}
|
|
73
|
+
snapshot, prepared.request_metadata = split_session_context(merged_metadata)
|
|
74
|
+
controls = merged_metadata.get("agentengine")
|
|
75
|
+
if isinstance(controls, Mapping) and "session_context" in controls:
|
|
76
|
+
prepared.session_context = snapshot.to_payload()
|
|
72
77
|
else:
|
|
73
78
|
prepared = await build_run_input(
|
|
74
79
|
agent_id=str(request.agent_id or "agent"),
|
|
@@ -114,7 +119,10 @@ async def prepare_runtime_start(request: StartRequest, runner: Any) -> PreparedR
|
|
|
114
119
|
ambient_contexts["memory_recall_events"] = list(prepared.memory_recall_events)
|
|
115
120
|
else:
|
|
116
121
|
prepared.memory_recall_events = ambient_contexts.get("memory_recall_events", [])
|
|
122
|
+
from ksadk.session_context import SessionContext
|
|
123
|
+
|
|
117
124
|
runtime_context = PlatformInvocationContext(
|
|
125
|
+
session=SessionContext.from_payload(prepared.session_context),
|
|
118
126
|
agent_id=str(request.agent_id or "agent"),
|
|
119
127
|
user_id=request.user_id,
|
|
120
128
|
account_id=str(conversation.account_id or ""),
|