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
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
"""KsADK Harness AgentProvider packaged as a standard DSH Bundle.
|
|
2
|
+
|
|
3
|
+
DSH owns installation and discovery. The shared bridge validates the exact
|
|
4
|
+
registration, then delegates execution to the optional in-process KsADK
|
|
5
|
+
Harness implementation so credentials and runtime services stay in KsADK.
|
|
6
|
+
"""
|
|
7
|
+
|
|
8
|
+
from __future__ import annotations
|
|
9
|
+
|
|
10
|
+
from collections.abc import Mapping
|
|
11
|
+
from typing import TYPE_CHECKING, Any
|
|
12
|
+
|
|
13
|
+
from ksadk.plugins.contracts import CompositionProfile, PluginManifest
|
|
14
|
+
from ksadk.plugins.providers.dsh import DshAgentProviderHost, DshAgentProviderRegistration
|
|
15
|
+
from ksadk.plugins.providers.shipped_dsh import (
|
|
16
|
+
HARNESS_DSH_SPEC,
|
|
17
|
+
ShippedDshBridgeFactory,
|
|
18
|
+
ShippedDshBridgeRuntime,
|
|
19
|
+
ShippedDshBundle,
|
|
20
|
+
load_shipped_dsh_bundle,
|
|
21
|
+
shipped_dsh_host_command,
|
|
22
|
+
)
|
|
23
|
+
|
|
24
|
+
if TYPE_CHECKING:
|
|
25
|
+
from ksadk.plugins.providers.harness import KsADKHarnessProviderFactory
|
|
26
|
+
|
|
27
|
+
SHIPPED_HARNESS_DSH_PACKAGE = HARNESS_DSH_SPEC.package_name
|
|
28
|
+
SHIPPED_HARNESS_PROVIDER_ID = HARNESS_DSH_SPEC.provider_id
|
|
29
|
+
SHIPPED_HARNESS_PROVIDER_VERSION = HARNESS_DSH_SPEC.version
|
|
30
|
+
ShippedHarnessDshBundle = ShippedDshBundle
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
def shipped_harness_dsh_bundle() -> ShippedHarnessDshBundle:
|
|
34
|
+
return load_shipped_dsh_bundle(HARNESS_DSH_SPEC)
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
def shipped_harness_dsh_host_command(*, python_executable: str | None = None) -> tuple[str, ...]:
|
|
38
|
+
return shipped_dsh_host_command(HARNESS_DSH_SPEC, python_executable=python_executable)
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
class KsADKHarnessDshBridgeRuntime(ShippedDshBridgeRuntime):
|
|
42
|
+
"""Named Harness bridge type retained for inventory and public typing."""
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
class KsADKHarnessDshBridgeFactory(ShippedDshBridgeFactory):
|
|
46
|
+
runtime_class = KsADKHarnessDshBridgeRuntime
|
|
47
|
+
|
|
48
|
+
def __init__(
|
|
49
|
+
self,
|
|
50
|
+
host: DshAgentProviderHost,
|
|
51
|
+
registration: DshAgentProviderRegistration,
|
|
52
|
+
*,
|
|
53
|
+
execution_factory: KsADKHarnessProviderFactory | None = None,
|
|
54
|
+
owns_host: bool = True,
|
|
55
|
+
) -> None:
|
|
56
|
+
if execution_factory is None:
|
|
57
|
+
# Keep the Harness/ADK dependency optional until this provider is
|
|
58
|
+
# selected; listing Codex or DSH plugins must stay cheap.
|
|
59
|
+
from ksadk.plugins.providers.harness import KsADKHarnessProviderFactory
|
|
60
|
+
|
|
61
|
+
execution_factory = KsADKHarnessProviderFactory()
|
|
62
|
+
super().__init__(
|
|
63
|
+
spec=HARNESS_DSH_SPEC,
|
|
64
|
+
host=host,
|
|
65
|
+
registration=registration,
|
|
66
|
+
execution_factory=execution_factory,
|
|
67
|
+
owns_host=owns_host,
|
|
68
|
+
)
|
|
69
|
+
|
|
70
|
+
async def stage(
|
|
71
|
+
self,
|
|
72
|
+
manifest: PluginManifest,
|
|
73
|
+
*,
|
|
74
|
+
profile: CompositionProfile,
|
|
75
|
+
services: Mapping[str, Any],
|
|
76
|
+
) -> KsADKHarnessDshBridgeRuntime:
|
|
77
|
+
runtime = await super().stage(manifest, profile=profile, services=services)
|
|
78
|
+
assert isinstance(runtime, KsADKHarnessDshBridgeRuntime)
|
|
79
|
+
return runtime
|
|
80
|
+
|
|
81
|
+
|
|
82
|
+
__all__ = [
|
|
83
|
+
"KsADKHarnessDshBridgeFactory",
|
|
84
|
+
"KsADKHarnessDshBridgeRuntime",
|
|
85
|
+
"SHIPPED_HARNESS_DSH_PACKAGE",
|
|
86
|
+
"SHIPPED_HARNESS_PROVIDER_ID",
|
|
87
|
+
"SHIPPED_HARNESS_PROVIDER_VERSION",
|
|
88
|
+
"ShippedHarnessDshBundle",
|
|
89
|
+
"shipped_harness_dsh_bundle",
|
|
90
|
+
"shipped_harness_dsh_host_command",
|
|
91
|
+
]
|
|
@@ -0,0 +1,215 @@
|
|
|
1
|
+
"""Central compatibility boundary for pre-DSH Harness AgentBundles.
|
|
2
|
+
|
|
3
|
+
Reading an old Bundle and selecting the in-process Harness provider are two
|
|
4
|
+
different decisions. Existing ADK, LangGraph and Codex artifacts continue to
|
|
5
|
+
use their established adapters. The Harness compatibility adapter is only
|
|
6
|
+
available for an immutable Bundle v1 digest that a release/migration owner has
|
|
7
|
+
explicitly registered as a historical Harness artifact.
|
|
8
|
+
|
|
9
|
+
Bundle v2 is never eligible for this bridge. It must resolve the Harness
|
|
10
|
+
provider from the active DSH registration and its deterministic PluginLock.
|
|
11
|
+
"""
|
|
12
|
+
|
|
13
|
+
from __future__ import annotations
|
|
14
|
+
|
|
15
|
+
import hashlib
|
|
16
|
+
import json
|
|
17
|
+
from dataclasses import dataclass
|
|
18
|
+
from pathlib import Path, PurePosixPath
|
|
19
|
+
from typing import Iterable, Literal
|
|
20
|
+
|
|
21
|
+
from pydantic import ValidationError
|
|
22
|
+
|
|
23
|
+
from ksadk.plugins.contracts import PluginManifest
|
|
24
|
+
from ksadk.plugins.providers.legacy_catalog import (
|
|
25
|
+
KSADK_HARNESS_AGENT_PROVIDER_PLUGIN_ID,
|
|
26
|
+
legacy_harness_agent_provider_manifest,
|
|
27
|
+
)
|
|
28
|
+
from ksadk.studio.capabilities import compute_bundle_digest
|
|
29
|
+
from ksadk.studio.contracts import BundleManifest
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
class LegacyBundleCompatibilityError(ValueError):
|
|
33
|
+
"""Stable fail-closed result from the legacy Bundle normalizer."""
|
|
34
|
+
|
|
35
|
+
def __init__(self, code: str, message: str) -> None:
|
|
36
|
+
super().__init__(message)
|
|
37
|
+
self.code = code
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
@dataclass(frozen=True)
|
|
41
|
+
class LegacyHarnessSource:
|
|
42
|
+
"""Immutable identity approved by a release or migration process."""
|
|
43
|
+
|
|
44
|
+
bundle_digest: str
|
|
45
|
+
resolved_digest: str
|
|
46
|
+
source_revision: int
|
|
47
|
+
|
|
48
|
+
@classmethod
|
|
49
|
+
def from_verified_manifest(cls, manifest: BundleManifest) -> "LegacyHarnessSource":
|
|
50
|
+
"""Capture an already-verified historical Bundle v1 identity."""
|
|
51
|
+
|
|
52
|
+
if manifest.bundle_format != "agentkit.bundle/v1":
|
|
53
|
+
raise LegacyBundleCompatibilityError(
|
|
54
|
+
"legacy_harness_bundle_version_unsupported",
|
|
55
|
+
"Only an AgentBundle v1 can be registered as a legacy Harness source",
|
|
56
|
+
)
|
|
57
|
+
_require_self_consistent_digest(manifest)
|
|
58
|
+
return cls(
|
|
59
|
+
bundle_digest=manifest.bundle_digest,
|
|
60
|
+
resolved_digest=manifest.resolved_digest,
|
|
61
|
+
source_revision=manifest.source_revision,
|
|
62
|
+
)
|
|
63
|
+
|
|
64
|
+
|
|
65
|
+
@dataclass(frozen=True)
|
|
66
|
+
class HarnessProviderSelection:
|
|
67
|
+
"""Normalized provider choice; execution stays with the owning runtime."""
|
|
68
|
+
|
|
69
|
+
route: Literal["dsh", "legacy"]
|
|
70
|
+
manifest: PluginManifest | None = None
|
|
71
|
+
|
|
72
|
+
|
|
73
|
+
class LegacyBundleAdapter:
|
|
74
|
+
"""Select Harness compatibility without broad version-based fallback."""
|
|
75
|
+
|
|
76
|
+
def __init__(self, sources: Iterable[LegacyHarnessSource] = ()) -> None:
|
|
77
|
+
source_by_digest: dict[str, LegacyHarnessSource] = {}
|
|
78
|
+
for source in sources:
|
|
79
|
+
previous = source_by_digest.setdefault(source.bundle_digest, source)
|
|
80
|
+
if previous != source:
|
|
81
|
+
raise ValueError("conflicting legacy Harness identities use the same bundle digest")
|
|
82
|
+
self._sources = source_by_digest
|
|
83
|
+
|
|
84
|
+
def select_from_bundle(
|
|
85
|
+
self,
|
|
86
|
+
root: str | Path,
|
|
87
|
+
*,
|
|
88
|
+
registered_provider_ids: Iterable[str] = (),
|
|
89
|
+
) -> tuple[BundleManifest, HarnessProviderSelection | None]:
|
|
90
|
+
"""Verify one immutable Bundle before applying the compatibility rule."""
|
|
91
|
+
|
|
92
|
+
bundle_root = Path(root).resolve()
|
|
93
|
+
try:
|
|
94
|
+
payload = json.loads((bundle_root / "manifest.json").read_text(encoding="utf-8"))
|
|
95
|
+
manifest = BundleManifest.model_validate(payload)
|
|
96
|
+
except (OSError, UnicodeError, json.JSONDecodeError, ValidationError) as error:
|
|
97
|
+
raise LegacyBundleCompatibilityError(
|
|
98
|
+
"bundle_manifest_invalid", "AgentBundle manifest is invalid"
|
|
99
|
+
) from error
|
|
100
|
+
_require_self_consistent_digest(manifest)
|
|
101
|
+
declared: set[str] = set()
|
|
102
|
+
for entry in manifest.files:
|
|
103
|
+
relative = PurePosixPath(entry.path)
|
|
104
|
+
if relative.is_absolute() or ".." in relative.parts:
|
|
105
|
+
raise LegacyBundleCompatibilityError(
|
|
106
|
+
"bundle_path_invalid", "AgentBundle contains an unsafe file path"
|
|
107
|
+
)
|
|
108
|
+
path = (bundle_root / Path(*relative.parts)).resolve()
|
|
109
|
+
if not path.is_relative_to(bundle_root):
|
|
110
|
+
raise LegacyBundleCompatibilityError(
|
|
111
|
+
"bundle_path_invalid", "AgentBundle file path escapes its root"
|
|
112
|
+
)
|
|
113
|
+
try:
|
|
114
|
+
content = path.read_bytes()
|
|
115
|
+
except OSError as error:
|
|
116
|
+
raise LegacyBundleCompatibilityError(
|
|
117
|
+
"bundle_file_missing", f"AgentBundle file is missing: {entry.path}"
|
|
118
|
+
) from error
|
|
119
|
+
digest = f"sha256:{hashlib.sha256(content).hexdigest()}"
|
|
120
|
+
if len(content) != entry.size or digest != entry.sha256:
|
|
121
|
+
raise LegacyBundleCompatibilityError(
|
|
122
|
+
"bundle_file_digest_mismatch",
|
|
123
|
+
f"AgentBundle file failed integrity verification: {entry.path}",
|
|
124
|
+
)
|
|
125
|
+
declared.add(entry.path)
|
|
126
|
+
actual = {
|
|
127
|
+
path.relative_to(bundle_root).as_posix()
|
|
128
|
+
for path in bundle_root.rglob("*")
|
|
129
|
+
if path.is_file() and path.name != "manifest.json"
|
|
130
|
+
}
|
|
131
|
+
if actual != declared:
|
|
132
|
+
raise LegacyBundleCompatibilityError(
|
|
133
|
+
"bundle_membership_mismatch",
|
|
134
|
+
"AgentBundle contains missing or undeclared files",
|
|
135
|
+
)
|
|
136
|
+
return manifest, self.select_harness_provider(
|
|
137
|
+
manifest,
|
|
138
|
+
registered_provider_ids=registered_provider_ids,
|
|
139
|
+
)
|
|
140
|
+
|
|
141
|
+
def select_harness_provider(
|
|
142
|
+
self,
|
|
143
|
+
manifest: BundleManifest,
|
|
144
|
+
*,
|
|
145
|
+
registered_provider_ids: Iterable[str] = (),
|
|
146
|
+
) -> HarnessProviderSelection | None:
|
|
147
|
+
"""Return the exact Harness route, or ``None`` for non-Harness Bundles.
|
|
148
|
+
|
|
149
|
+
For Bundle v1, a matching approved digest is the Harness discriminator;
|
|
150
|
+
this also supports historical manifests that predate ``runtimeType``.
|
|
151
|
+
For Bundle v2, ``runtimeType=harness`` always requires a ready DSH
|
|
152
|
+
provider registration. No v1 allowlist entry can change that rule.
|
|
153
|
+
"""
|
|
154
|
+
|
|
155
|
+
runtime_type = manifest.runtime_type.strip().lower()
|
|
156
|
+
registered = frozenset(registered_provider_ids)
|
|
157
|
+
|
|
158
|
+
if manifest.bundle_format == "agentkit.bundle/v2":
|
|
159
|
+
if runtime_type != "harness":
|
|
160
|
+
return None
|
|
161
|
+
if KSADK_HARNESS_AGENT_PROVIDER_PLUGIN_ID not in registered:
|
|
162
|
+
raise LegacyBundleCompatibilityError(
|
|
163
|
+
"agent_provider_not_registered",
|
|
164
|
+
"Harness Bundle v2 requires a ready DSH provider registration",
|
|
165
|
+
)
|
|
166
|
+
return HarnessProviderSelection(route="dsh")
|
|
167
|
+
|
|
168
|
+
source = self._sources.get(manifest.bundle_digest)
|
|
169
|
+
if source is None:
|
|
170
|
+
if runtime_type == "harness":
|
|
171
|
+
raise LegacyBundleCompatibilityError(
|
|
172
|
+
"legacy_harness_source_unrecognized",
|
|
173
|
+
"Bundle v1 is not an explicitly registered historical Harness artifact",
|
|
174
|
+
)
|
|
175
|
+
return None
|
|
176
|
+
|
|
177
|
+
_require_self_consistent_digest(manifest)
|
|
178
|
+
if (
|
|
179
|
+
manifest.resolved_digest != source.resolved_digest
|
|
180
|
+
or manifest.source_revision != source.source_revision
|
|
181
|
+
):
|
|
182
|
+
raise LegacyBundleCompatibilityError(
|
|
183
|
+
"legacy_harness_source_mismatch",
|
|
184
|
+
"Bundle v1 metadata does not match its registered historical identity",
|
|
185
|
+
)
|
|
186
|
+
if runtime_type not in {"", "harness"}:
|
|
187
|
+
raise LegacyBundleCompatibilityError(
|
|
188
|
+
"legacy_harness_runtime_mismatch",
|
|
189
|
+
"Registered historical Harness Bundle declares another runtime type",
|
|
190
|
+
)
|
|
191
|
+
if manifest.plugin_lock_digest or manifest.composition_profile_digest:
|
|
192
|
+
raise LegacyBundleCompatibilityError(
|
|
193
|
+
"legacy_harness_composition_forbidden",
|
|
194
|
+
"A legacy Harness Bundle cannot carry partial Bundle v2 composition state",
|
|
195
|
+
)
|
|
196
|
+
return HarnessProviderSelection(
|
|
197
|
+
route="legacy",
|
|
198
|
+
manifest=legacy_harness_agent_provider_manifest(),
|
|
199
|
+
)
|
|
200
|
+
|
|
201
|
+
|
|
202
|
+
def _require_self_consistent_digest(manifest: BundleManifest) -> None:
|
|
203
|
+
if not manifest.bundle_digest or manifest.bundle_digest != compute_bundle_digest(manifest):
|
|
204
|
+
raise LegacyBundleCompatibilityError(
|
|
205
|
+
"legacy_harness_bundle_digest_mismatch",
|
|
206
|
+
"Historical Harness manifest does not match its declared bundle digest",
|
|
207
|
+
)
|
|
208
|
+
|
|
209
|
+
|
|
210
|
+
__all__ = [
|
|
211
|
+
"HarnessProviderSelection",
|
|
212
|
+
"LegacyBundleAdapter",
|
|
213
|
+
"LegacyBundleCompatibilityError",
|
|
214
|
+
"LegacyHarnessSource",
|
|
215
|
+
]
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
"""Explicit compatibility catalog for pre-DSH AgentProvider manifests.
|
|
2
|
+
|
|
3
|
+
All new AgentProviders, including the official Codex and KsADK Harness
|
|
4
|
+
Bundles, enter Bundle v2 composition only through a ready DSH registration.
|
|
5
|
+
The old in-process Harness manifest remains an explicit compatibility artifact
|
|
6
|
+
for already-built Agents; callers must never add it to new resolution silently.
|
|
7
|
+
"""
|
|
8
|
+
|
|
9
|
+
from __future__ import annotations
|
|
10
|
+
|
|
11
|
+
import hashlib
|
|
12
|
+
|
|
13
|
+
from ksadk.plugins.contracts import PluginManifest
|
|
14
|
+
|
|
15
|
+
BUILTIN_PROVIDER_VERSION = "1.0.0"
|
|
16
|
+
CODEX_AGENT_PROVIDER_PLUGIN_ID = "io.ksadk.codex-provider"
|
|
17
|
+
KSADK_HARNESS_AGENT_PROVIDER_PLUGIN_ID = "io.ksadk.harness-provider"
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
def _digest(plugin_id: str) -> str:
|
|
21
|
+
payload = f"{plugin_id}@{BUILTIN_PROVIDER_VERSION}:builtin-provider-v1".encode()
|
|
22
|
+
return f"sha256:{hashlib.sha256(payload).hexdigest()}"
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
def _provider_manifest(
|
|
26
|
+
plugin_id: str,
|
|
27
|
+
*,
|
|
28
|
+
domain: str,
|
|
29
|
+
runtime: str,
|
|
30
|
+
isolation: str,
|
|
31
|
+
source: str,
|
|
32
|
+
entrypoint: str | None = None,
|
|
33
|
+
) -> PluginManifest:
|
|
34
|
+
spec: dict[str, object] = {
|
|
35
|
+
"domain": domain,
|
|
36
|
+
"runtime": runtime,
|
|
37
|
+
"provides": [
|
|
38
|
+
{
|
|
39
|
+
"definition": "agent.provider/v1",
|
|
40
|
+
"slot": "agent.execution",
|
|
41
|
+
"mode": "unique",
|
|
42
|
+
}
|
|
43
|
+
],
|
|
44
|
+
"permissions": [],
|
|
45
|
+
"isolation": isolation,
|
|
46
|
+
"compatibility": {
|
|
47
|
+
"kernelApi": ">=1,<2",
|
|
48
|
+
"runtimeProtocols": ["agentkit.runtime/v1"],
|
|
49
|
+
"python": ">=3.10,<3.15" if runtime == "python" else None,
|
|
50
|
+
},
|
|
51
|
+
"healthContract": "plugin.health/v1",
|
|
52
|
+
"provenance": {
|
|
53
|
+
"source": source,
|
|
54
|
+
"digest": _digest(plugin_id),
|
|
55
|
+
"license": "Apache-2.0",
|
|
56
|
+
},
|
|
57
|
+
}
|
|
58
|
+
if entrypoint is not None:
|
|
59
|
+
spec["entrypoint"] = entrypoint
|
|
60
|
+
compatibility = spec["compatibility"]
|
|
61
|
+
assert isinstance(compatibility, dict)
|
|
62
|
+
if compatibility["python"] is None:
|
|
63
|
+
del compatibility["python"]
|
|
64
|
+
manifest = PluginManifest.model_validate(
|
|
65
|
+
{
|
|
66
|
+
"metadata": {"id": plugin_id, "version": BUILTIN_PROVIDER_VERSION},
|
|
67
|
+
"spec": spec,
|
|
68
|
+
}
|
|
69
|
+
)
|
|
70
|
+
if not isinstance(manifest, PluginManifest): # pragma: no cover - Pydantic invariant
|
|
71
|
+
raise TypeError("built-in provider manifest validation returned an invalid type")
|
|
72
|
+
return manifest
|
|
73
|
+
|
|
74
|
+
|
|
75
|
+
def builtin_agent_provider_manifests() -> tuple[PluginManifest, ...]:
|
|
76
|
+
"""Return no Bundle v2 providers; DSH registration is authoritative."""
|
|
77
|
+
|
|
78
|
+
return ()
|
|
79
|
+
|
|
80
|
+
|
|
81
|
+
def legacy_harness_agent_provider_manifest() -> PluginManifest:
|
|
82
|
+
"""Return the old manifest only for an explicitly detected legacy Agent."""
|
|
83
|
+
|
|
84
|
+
return _provider_manifest(
|
|
85
|
+
KSADK_HARNESS_AGENT_PROVIDER_PLUGIN_ID,
|
|
86
|
+
domain="ksadk-platform",
|
|
87
|
+
runtime="python",
|
|
88
|
+
isolation="in-process",
|
|
89
|
+
source="builtin",
|
|
90
|
+
entrypoint="ksadk.plugins.providers.harness:KsADKHarnessProviderFactory",
|
|
91
|
+
)
|
|
92
|
+
|
|
93
|
+
|
|
94
|
+
__all__ = [
|
|
95
|
+
"BUILTIN_PROVIDER_VERSION",
|
|
96
|
+
"CODEX_AGENT_PROVIDER_PLUGIN_ID",
|
|
97
|
+
"KSADK_HARNESS_AGENT_PROVIDER_PLUGIN_ID",
|
|
98
|
+
"builtin_agent_provider_manifests",
|
|
99
|
+
"legacy_harness_agent_provider_manifest",
|
|
100
|
+
]
|
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
"""Provider-neutral projection of PluginHost MCP connector capabilities."""
|
|
2
|
+
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
import asyncio
|
|
6
|
+
from collections.abc import Awaitable, Sequence
|
|
7
|
+
from contextlib import AsyncExitStack
|
|
8
|
+
from dataclasses import dataclass
|
|
9
|
+
from typing import Protocol, runtime_checkable
|
|
10
|
+
|
|
11
|
+
from ksadk.harness.config import McpToolSpec
|
|
12
|
+
from ksadk.plugins.bundle import ResolvedPluginBundle
|
|
13
|
+
from ksadk.plugins.host import PluginExecutionContext, PluginHostError
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
@runtime_checkable
|
|
17
|
+
class ActivationMCPSource(Protocol):
|
|
18
|
+
"""MCP source whose lease is bound to one PluginHost activation."""
|
|
19
|
+
|
|
20
|
+
def activation_mcp_specs(
|
|
21
|
+
self,
|
|
22
|
+
bundle: ResolvedPluginBundle,
|
|
23
|
+
*,
|
|
24
|
+
activation_key: str,
|
|
25
|
+
) -> Sequence[McpToolSpec] | Awaitable[Sequence[McpToolSpec]]: ...
|
|
26
|
+
|
|
27
|
+
async def release_activation_mcp_specs(
|
|
28
|
+
self,
|
|
29
|
+
activation_key: str,
|
|
30
|
+
specs: Sequence[McpToolSpec],
|
|
31
|
+
) -> None: ...
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
@runtime_checkable
|
|
35
|
+
class StaticMCPSource(Protocol):
|
|
36
|
+
"""Compatibility seam implemented by existing MCP capability plugins."""
|
|
37
|
+
|
|
38
|
+
def harness_mcp_specs(
|
|
39
|
+
self,
|
|
40
|
+
bundle: ResolvedPluginBundle,
|
|
41
|
+
) -> Sequence[McpToolSpec] | Awaitable[Sequence[McpToolSpec]]: ...
|
|
42
|
+
|
|
43
|
+
|
|
44
|
+
@runtime_checkable
|
|
45
|
+
class ReleasableStaticMCPSource(Protocol):
|
|
46
|
+
async def release_harness_mcp_specs(self, specs: Sequence[McpToolSpec]) -> None: ...
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
@dataclass
|
|
50
|
+
class MCPProjectionLease:
|
|
51
|
+
"""Projected connector specs and their activation-owned cleanup."""
|
|
52
|
+
|
|
53
|
+
specs: tuple[McpToolSpec, ...]
|
|
54
|
+
owners: tuple[str, ...]
|
|
55
|
+
_cleanup: AsyncExitStack
|
|
56
|
+
_close_task: asyncio.Task[None] | None = None
|
|
57
|
+
|
|
58
|
+
async def aclose(self) -> None:
|
|
59
|
+
if self._close_task is None:
|
|
60
|
+
self._close_task = asyncio.create_task(self._cleanup.aclose())
|
|
61
|
+
await _finish_owned_task(self._close_task)
|
|
62
|
+
|
|
63
|
+
|
|
64
|
+
async def _finish_owned_task(task: asyncio.Task[None]) -> None:
|
|
65
|
+
"""Finish a security cleanup before propagating caller cancellation."""
|
|
66
|
+
|
|
67
|
+
interrupted = False
|
|
68
|
+
while not task.done():
|
|
69
|
+
try:
|
|
70
|
+
await asyncio.shield(task)
|
|
71
|
+
except asyncio.CancelledError:
|
|
72
|
+
interrupted = True
|
|
73
|
+
task.result()
|
|
74
|
+
if interrupted:
|
|
75
|
+
raise asyncio.CancelledError
|
|
76
|
+
|
|
77
|
+
|
|
78
|
+
async def project_mcp_capabilities(
|
|
79
|
+
capabilities: PluginExecutionContext,
|
|
80
|
+
bundle: ResolvedPluginBundle,
|
|
81
|
+
*,
|
|
82
|
+
activation_only: bool = False,
|
|
83
|
+
) -> MCPProjectionLease:
|
|
84
|
+
"""Activate every MCP capability and retain cleanup for the provider."""
|
|
85
|
+
|
|
86
|
+
cleanup = AsyncExitStack()
|
|
87
|
+
specs: list[McpToolSpec] = []
|
|
88
|
+
owners: list[str] = []
|
|
89
|
+
names: set[str] = set()
|
|
90
|
+
try:
|
|
91
|
+
for binding in capabilities.all("mcp.connector/v1"):
|
|
92
|
+
runtime = binding.runtime
|
|
93
|
+
if isinstance(runtime, ActivationMCPSource):
|
|
94
|
+
projected = runtime.activation_mcp_specs(
|
|
95
|
+
bundle,
|
|
96
|
+
activation_key=capabilities.activation_key,
|
|
97
|
+
)
|
|
98
|
+
if isinstance(projected, Awaitable):
|
|
99
|
+
projected = await projected
|
|
100
|
+
projected_specs = tuple(projected)
|
|
101
|
+
cleanup.push_async_callback(
|
|
102
|
+
runtime.release_activation_mcp_specs,
|
|
103
|
+
capabilities.activation_key,
|
|
104
|
+
projected_specs,
|
|
105
|
+
)
|
|
106
|
+
elif isinstance(runtime, StaticMCPSource):
|
|
107
|
+
if activation_only:
|
|
108
|
+
continue
|
|
109
|
+
projected = runtime.harness_mcp_specs(bundle)
|
|
110
|
+
if isinstance(projected, Awaitable):
|
|
111
|
+
projected = await projected
|
|
112
|
+
projected_specs = tuple(projected)
|
|
113
|
+
if isinstance(runtime, ReleasableStaticMCPSource):
|
|
114
|
+
cleanup.push_async_callback(
|
|
115
|
+
runtime.release_harness_mcp_specs,
|
|
116
|
+
projected_specs,
|
|
117
|
+
)
|
|
118
|
+
else:
|
|
119
|
+
raise PluginHostError(
|
|
120
|
+
"mcp_capability_incompatible",
|
|
121
|
+
f"plugin {binding.plugin_id} cannot project MCP connector config",
|
|
122
|
+
)
|
|
123
|
+
for spec in projected_specs:
|
|
124
|
+
if not isinstance(spec, McpToolSpec) or not spec.name.strip():
|
|
125
|
+
raise PluginHostError(
|
|
126
|
+
"mcp_capability_invalid",
|
|
127
|
+
f"plugin {binding.plugin_id} returned an invalid MCP connector",
|
|
128
|
+
)
|
|
129
|
+
if spec.name in names:
|
|
130
|
+
raise PluginHostError(
|
|
131
|
+
"mcp_capability_ambiguous",
|
|
132
|
+
f"more than one MCP connector is named {spec.name!r}",
|
|
133
|
+
)
|
|
134
|
+
names.add(spec.name)
|
|
135
|
+
specs.append(spec)
|
|
136
|
+
owners.append(binding.plugin_id)
|
|
137
|
+
except BaseException:
|
|
138
|
+
close = asyncio.create_task(cleanup.aclose())
|
|
139
|
+
await _finish_owned_task(close)
|
|
140
|
+
raise
|
|
141
|
+
return MCPProjectionLease(tuple(specs), tuple(owners), cleanup)
|
|
142
|
+
|
|
143
|
+
|
|
144
|
+
__all__ = [
|
|
145
|
+
"ActivationMCPSource",
|
|
146
|
+
"MCPProjectionLease",
|
|
147
|
+
"ReleasableStaticMCPSource",
|
|
148
|
+
"StaticMCPSource",
|
|
149
|
+
"project_mcp_capabilities",
|
|
150
|
+
]
|