agentengine-sdk-python 0.8.3__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.3.dist-info → agentengine_sdk_python-0.8.4.dist-info}/METADATA +9 -8
- {agentengine_sdk_python-0.8.3.dist-info → agentengine_sdk_python-0.8.4.dist-info}/RECORD +482 -245
- ksadk/_build_provenance.json +1 -1
- ksadk/api/client.py +105 -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 +1 -0
- ksadk/cli/__init__.py +32 -3
- ksadk/cli/cmd_managed_runtime.py +13 -1
- ksadk/cli/cmd_plugin.py +6 -1
- 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 +56 -298
- ksadk/common/auth.py +16 -10
- ksadk/configs/env_registry.py +29 -1
- ksadk/conversations/message_projection.py +135 -14
- ksadk/conversations/projector.py +4 -6
- 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/adapters/_codex_validators.py +18 -7
- ksadk/events/adapters/langgraph.py +15 -1
- ksadk/events/canonical_store.py +3 -1
- ksadk/events/projections.py +1 -1
- ksadk/harness/config.py +2 -2
- ksadk/harness/runtime.py +27 -27
- 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/ingress.py +15 -2
- ksadk/kernel/sqlite_store.py +27 -0
- ksadk/kernel/store.py +3 -0
- ksadk/kernel/worker.py +65 -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/model_proxy/server.py +10 -5
- ksadk/plugins/__init__.py +4 -0
- ksadk/plugins/artifacts.py +275 -0
- ksadk/plugins/bridges/__init__.py +4 -2
- ksadk/plugins/bridges/codex.py +120 -13
- ksadk/plugins/bridges/dsh.py +340 -156
- ksadk/plugins/builtins.py +35 -36
- ksadk/plugins/bundle_security.py +28 -4
- ksadk/plugins/codex_manifest.py +983 -0
- ksadk/plugins/composition.py +8 -0
- ksadk/plugins/contracts.py +118 -0
- ksadk/plugins/delivery.py +153 -0
- ksadk/plugins/dsh_installation_digest.py +71 -0
- ksadk/plugins/dsh_toolchain.py +110 -21
- ksadk/plugins/ecosystem_probe.py +6 -6
- ksadk/plugins/host.py +102 -39
- ksadk/plugins/kernel_adapter.py +205 -0
- ksadk/plugins/providers/__init__.py +23 -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-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/codex.py +335 -69
- ksadk/plugins/providers/codex_native.py +368 -0
- ksadk/plugins/providers/codex_turn.py +301 -0
- ksadk/plugins/providers/dsh_capabilities.py +1389 -0
- ksadk/plugins/providers/dsh_mcp.py +467 -0
- ksadk/plugins/providers/harness.py +118 -113
- ksadk/plugins/providers/mcp_projection.py +150 -0
- ksadk/plugins/providers/platform_resources.py +657 -0
- ksadk/plugins/resolver.py +8 -1
- 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 +142 -18
- ksadk/runtime/adapter.py +2 -0
- ksadk/runtime/conversation_execution.py +92 -16
- ksadk/runtime/executor.py +78 -2
- ksadk/runtime/factory.py +29 -273
- ksadk/runtime/framework_adapters.py +23 -0
- ksadk/runtime/preprocessing.py +10 -2
- ksadk/runtime/runner_adapter.py +73 -14
- ksadk/runtime_context.py +40 -2
- 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/scheduler/sqlite_store.py +18 -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-10GPXIJ6.js → ArtifactsPanel-CGbWlMNh.js} +1 -1
- ksadk/server/static/assets/{CodeBlock-BXk1l-G1.js → CodeBlock-b4C7upmO.js} +3 -3
- ksadk/server/static/assets/{MathMessageMarkdown-D9uB55Oh.js → MathMessageMarkdown-DbdW5A4_.js} +4 -4
- ksadk/server/static/assets/{MermaidBlock--OEYoXIJ.js → MermaidBlock-BEBN4Ksz.js} +6 -6
- ksadk/server/static/assets/{NativeTerminalPanel-DrEe1syq.js → NativeTerminalPanel-zvL-WpAn.js} +1 -1
- ksadk/server/static/assets/{abnfDiagram-VCTEODGH-eeTFJLvo.js → abnfDiagram-VCTEODGH-BYafW7Za.js} +1 -1
- ksadk/server/static/assets/{arc-S3ZNbIAd.js → arc-bTohInsS.js} +1 -1
- ksadk/server/static/assets/architecture-7GRP2DOG-BW5UtSnx.js +1 -0
- ksadk/server/static/assets/{architectureDiagram-5GKGNRK7-CRjgEJDX.js → architectureDiagram-5GKGNRK7-Ch5Lbzsi.js} +1 -1
- ksadk/server/static/assets/{blockDiagram-NRAW4CY4-C7bsBoNH.js → blockDiagram-NRAW4CY4-kqF4MDOG.js} +1 -1
- ksadk/server/static/assets/{c4Diagram-UCG6FXSJ-BX3c33Ob.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-bZ7ws-8m.js → chunk-5VM5RSS4-DkhehZDr.js} +1 -1
- ksadk/server/static/assets/{chunk-F27PBJKO-D2r0pvhY.js → chunk-F27PBJKO-BdXhtPe9.js} +1 -1
- ksadk/server/static/assets/{chunk-G27WJ6UU-CZwF3oUP.js → chunk-G27WJ6UU-DPTpvpwi.js} +1 -1
- ksadk/server/static/assets/{chunk-JWPE2WC7-DigFYCML.js → chunk-JWPE2WC7-Pqoh38el.js} +1 -1
- ksadk/server/static/assets/{chunk-LCL6LL3I-CnorGV5q.js → chunk-LCL6LL3I-DeU00qC-.js} +1 -1
- ksadk/server/static/assets/{chunk-POPQ4Y6H-CexntQA-.js → chunk-POPQ4Y6H-CzxScFkr.js} +1 -1
- ksadk/server/static/assets/{chunk-RHFEMEQ7-CHTC7UxA.js → chunk-RHFEMEQ7-DpqMx-ux.js} +1 -1
- ksadk/server/static/assets/{chunk-SVP7TREG-BC1EWt_-.js → chunk-SVP7TREG-C6t0SypQ.js} +1 -1
- ksadk/server/static/assets/{chunk-XXDRQBXY-BTG24xN0.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-CkonRdAS.js → cose-bilkent-JH36ORCC-Bf9D3tzJ.js} +1 -1
- ksadk/server/static/assets/cynefin-OW5HDTMX-DVWs8a2t.js +1 -0
- ksadk/server/static/assets/{cynefinDiagram-5FMLGOSQ-DEOCBe15.js → cynefinDiagram-5FMLGOSQ-B9cY3iTz.js} +1 -1
- ksadk/server/static/assets/{dagre-3AP2YEHR-DBThPuLa.js → dagre-3AP2YEHR-CSwlx3CB.js} +1 -1
- ksadk/server/static/assets/{dagre-ClTPrTht.js → dagre-UBpgon5q.js} +1 -1
- ksadk/server/static/assets/{diagram-S7CK7UJ4-DsZHrnpJ.js → diagram-S7CK7UJ4-C9akhN9a.js} +1 -1
- ksadk/server/static/assets/{diagram-UQ7AKVKN-BJR4nhVr.js → diagram-UQ7AKVKN-CgedhTPI.js} +1 -1
- ksadk/server/static/assets/{diagram-VSXAHHWV-xzcERX0a.js → diagram-VSXAHHWV-Cjucz5BY.js} +1 -1
- ksadk/server/static/assets/{diagram-VX7I27RA-tn2xM1xu.js → diagram-VX7I27RA-Dd4Vleyn.js} +1 -1
- ksadk/server/static/assets/{diagram-Z3DM3KII-BZPGBkw5.js → diagram-Z3DM3KII-CZ2jGtYW.js} +1 -1
- ksadk/server/static/assets/{dist-DdRBIceA.js → dist-B2_CVgKv.js} +1 -1
- ksadk/server/static/assets/{dist-Cq4OL6nO.js → dist-B3FR1SKK.js} +1 -1
- ksadk/server/static/assets/{dist-M67Hwu0n.js → dist-BIr4DSRq.js} +1 -1
- ksadk/server/static/assets/{dist-B1oWRmrH.js → dist-BgV_owcB.js} +1 -1
- ksadk/server/static/assets/{dist-DyqV4fL4.js → dist-Bj730Ib4.js} +1 -1
- ksadk/server/static/assets/{dist-DfGFrb0v.js → dist-BnaTiyzN.js} +1 -1
- ksadk/server/static/assets/{dist-C71CsujO.js → dist-C1NMAY5a.js} +1 -1
- ksadk/server/static/assets/{dist-CXpH_Rdd.js → dist-C5_ZAZsG.js} +1 -1
- ksadk/server/static/assets/{dist-DJmCPRVB.js → dist-CB9iJrvg.js} +1 -1
- ksadk/server/static/assets/{dist-DjhwGUgZ.js → dist-CFzsn6BG.js} +1 -1
- ksadk/server/static/assets/{dist-BI1qQH4n.js → dist-Cf125P_m.js} +1 -1
- ksadk/server/static/assets/{dist-8VWI-2bZ.js → dist-ClYUxfeK.js} +1 -1
- ksadk/server/static/assets/{dist-DUwKa_l6.js → dist-DFD6Qa6T.js} +1 -1
- ksadk/server/static/assets/{dist-B-46q3Hk.js → dist-DVCOWtha.js} +1 -1
- ksadk/server/static/assets/{dist-BJLUwH6W.js → dist-D_ctSS2i.js} +1 -1
- ksadk/server/static/assets/{dist-4zN1_tq5.js → dist-DiixqL0J.js} +1 -1
- ksadk/server/static/assets/{dist-B0gdk4rl.js → dist-DoVSwoDb.js} +1 -1
- ksadk/server/static/assets/{dist-Bbwqa8TG.js → dist-DvFK7p5S.js} +1 -1
- ksadk/server/static/assets/{dist-D1V3f1B4.js → dist-QfkEHOlb.js} +1 -1
- ksadk/server/static/assets/{dist-Btyo4vX4.js → dist-btbmmX5O.js} +1 -1
- ksadk/server/static/assets/{dist-u8tVH5Ak.js → dist-fBO2v5Kt.js} +1 -1
- ksadk/server/static/assets/{dist-DQAB0qn_.js → dist-ufY3F5p6.js} +1 -1
- ksadk/server/static/assets/{ebnfDiagram-PWID7BFC-DVfMsLge.js → ebnfDiagram-PWID7BFC-Ci8NqqZu.js} +1 -1
- ksadk/server/static/assets/{erDiagram-SSCWMZ5O-CWEZSYaw.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-TWIxoyYL.js → ganttDiagram-EL5Y4UJY-Cp_r9Hb6.js} +1 -1
- ksadk/server/static/assets/gitGraph-4MIJSDKK-fgWEf7UD.js +1 -0
- ksadk/server/static/assets/{gitGraphDiagram-WWUBYQGX-DDh2hd2S.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-CgoyWiDR.js → infoDiagram-RXCK75RN-CO0rRTRA.js} +1 -1
- ksadk/server/static/assets/{ishikawaDiagram-5VMMS53U-CyRIu_om.js → ishikawaDiagram-5VMMS53U-CHiaedSS.js} +1 -1
- ksadk/server/static/assets/{journeyDiagram-EYS64GPL-DN5JXHzN.js → journeyDiagram-EYS64GPL-CHcCIB09.js} +1 -1
- ksadk/server/static/assets/{kanban-definition-3QL26DDD-CNP3ui66.js → kanban-definition-3QL26DDD-CJ_ebBZf.js} +1 -1
- ksadk/server/static/assets/{katex-DWEzQy1d.js → katex-B4weu383.js} +1 -1
- ksadk/server/static/assets/{linear-C-qHp7d2.js → linear-V-MgYHW1.js} +1 -1
- ksadk/server/static/assets/{mermaid-parser.core-Cl-K943T.js → mermaid-parser.core-CBijEX_c.js} +2 -2
- ksadk/server/static/assets/{mindmap-definition-FBJOCRG2-D5DB5mYm.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-BQVc9ia_.js → pegDiagram-XKGWAZYB-D7genGLl.js} +1 -1
- ksadk/server/static/assets/pie-WAS4IAKB-X0xh4SaT.js +1 -0
- ksadk/server/static/assets/{pieDiagram-E7YTZNPT-B6UCAvtY.js → pieDiagram-E7YTZNPT-Bxj32zwD.js} +1 -1
- ksadk/server/static/assets/{quadrantDiagram-AXDQQJYC-mIr2d3eb.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-Dt3FFDmK.js → railroadDiagram-O6MQD6OU-CCsh3avW.js} +1 -1
- ksadk/server/static/assets/{requirementDiagram-EFPCY7ZU-Cz_vQtgF.js → requirementDiagram-EFPCY7ZU-_FRRBKEd.js} +1 -1
- ksadk/server/static/assets/{sankeyDiagram-P5KCCOFB-wlO1TsH5.js → sankeyDiagram-P5KCCOFB-C-gr2o9M.js} +1 -1
- ksadk/server/static/assets/{sequenceDiagram-WJ2MYXX4-CHRbElYq.js → sequenceDiagram-WJ2MYXX4-D97NmfKg.js} +1 -1
- ksadk/server/static/assets/{sizeCapture-X5ZJPWSS-DXX54iyO.js → sizeCapture-X5ZJPWSS-DjrPC5FX.js} +1 -1
- ksadk/server/static/assets/{stateDiagram-HBIQ2CUA-Dp_lw9II.js → stateDiagram-HBIQ2CUA-DzMNg1hh.js} +1 -1
- ksadk/server/static/assets/stateDiagram-v2-4QOOHH4V-BIcjKFhF.js +1 -0
- ksadk/server/static/assets/{swimlanes-XN3QIQJK-D8O5UlLG.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-8mfKcxvG.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-EnNl0DE7.js → vennDiagram-4TSXK5OY-BSKgJsmR.js} +1 -1
- ksadk/server/static/assets/wardley-WFR3VGLG-CefhOliM.js +1 -0
- ksadk/server/static/assets/{wardleyDiagram-VM6X3IG4-DBu5fbYr.js → wardleyDiagram-VM6X3IG4-eflHNoaZ.js} +1 -1
- ksadk/server/static/assets/{xychartDiagram-S5SC5T6Z-BSVXs4IY.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 +167 -28
- ksadk/studio/api.py +224 -42
- ksadk/studio/api_catalog_routes.py +18 -0
- ksadk/studio/api_plugin_routes.py +526 -95
- ksadk/studio/api_resource_connections.py +183 -0
- ksadk/studio/authoring_coordinator.py +19 -14
- ksadk/studio/builder.py +76 -0
- ksadk/studio/cloud.py +342 -104
- ksadk/studio/cloud_shared_web.py +565 -0
- ksadk/studio/codex_agent_service.py +128 -26
- ksadk/studio/codex_builder.py +241 -2
- ksadk/studio/codex_credentials.py +90 -0
- ksadk/studio/codex_manifest.py +31 -4
- ksadk/studio/codex_plugin_store.py +746 -0
- ksadk/studio/codex_provider_build.py +231 -0
- ksadk/studio/codex_run.py +184 -25
- ksadk/studio/compatibility_report.py +12 -1
- ksadk/studio/compiler.py +78 -14
- ksadk/studio/contracts.py +132 -6
- 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 +320 -13
- ksadk/studio/hosted_kernel.py +88 -13
- ksadk/studio/mcp_runtime.py +11 -3
- ksadk/studio/model_client.py +2 -2
- ksadk/studio/plugin_composition.py +190 -23
- ksadk/studio/plugin_kernel_adapter.py +12 -112
- ksadk/studio/plugin_runtime.py +224 -45
- 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 +143 -2
- ksadk/studio/resource_connections.py +220 -0
- ksadk/studio/run_service.py +462 -52
- ksadk/studio/runtime_source.py +15 -7
- ksadk/studio/scheduler_assistant.py +317 -0
- ksadk/studio/scheduler_runtime.py +9 -0
- ksadk/studio/scheduler_service.py +3 -0
- ksadk/studio/service.py +490 -44
- ksadk/studio/shared_web.py +446 -62
- 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/version.py +1 -1
- ksadk/server/static/assets/architecture-7GRP2DOG-Dk9nRQ6-.js +0 -1
- ksadk/server/static/assets/channel-s354Yo6o.js +0 -1
- ksadk/server/static/assets/chunk-2Q5K7J3B-CDpPpKR5.js +0 -1
- ksadk/server/static/assets/classDiagram-DTDB5LWJ-Dd0nucl9.js +0 -1
- ksadk/server/static/assets/classDiagram-v2-JRS7N3AN-Dd0nucl9.js +0 -1
- ksadk/server/static/assets/cynefin-OW5HDTMX-BBlT4uMf.js +0 -1
- ksadk/server/static/assets/eventmodeling-NTZA5JFV-Dr5okd8V.js +0 -1
- ksadk/server/static/assets/flowDiagram-A5DVABFB-VEO-cVcO.js +0 -1
- ksadk/server/static/assets/gitGraph-4MIJSDKK-CKiKY9Cf.js +0 -1
- ksadk/server/static/assets/index-B2k_urY8.js +0 -241
- ksadk/server/static/assets/index-ILPt6IWF.css +0 -2
- ksadk/server/static/assets/info-A6RAGUB7-ubA4Nm_p.js +0 -1
- ksadk/server/static/assets/packet-AYTQ26CC-C7R3NUlK.js +0 -1
- ksadk/server/static/assets/pie-WAS4IAKB-BIT6qjr3.js +0 -1
- ksadk/server/static/assets/radar-RG4KPBEZ-l5noef9X.js +0 -1
- ksadk/server/static/assets/railroad-74A4TZTK-Baea6ZvM.js +0 -1
- ksadk/server/static/assets/railroad-abnf-HS5TGJTU-OKn8zZnU.js +0 -1
- ksadk/server/static/assets/railroad-ebnf-LZEXJU2U-DdKAKC4l.js +0 -1
- ksadk/server/static/assets/railroad-peg-WCYAUIDC-Bds8udlG.js +0 -1
- ksadk/server/static/assets/stateDiagram-v2-4QOOHH4V-5b-8o2iS.js +0 -1
- ksadk/server/static/assets/swimlanesDiagram-VK2B7HYN-uf6WPRA4.js +0 -8
- ksadk/server/static/assets/treeView-Q6P3EWNA-CK5CSrSO.js +0 -1
- ksadk/server/static/assets/treemap-WGGIJYW6-Ch2BKgAM.js +0 -1
- ksadk/server/static/assets/wardley-WFR3VGLG-YW3Q0ml_.js +0 -1
- ksadk/studio/static/assets/PrismRenderer-IYN-ffww.js +0 -3
- ksadk/studio/static/assets/index-DXs1Eq4M.css +0 -1
- ksadk/studio/static/assets/index-DeDqwTsD.js +0 -283
- {agentengine_sdk_python-0.8.3.dist-info → agentengine_sdk_python-0.8.4.dist-info}/WHEEL +0 -0
- {agentengine_sdk_python-0.8.3.dist-info → agentengine_sdk_python-0.8.4.dist-info}/entry_points.txt +0 -0
- {agentengine_sdk_python-0.8.3.dist-info → agentengine_sdk_python-0.8.4.dist-info}/licenses/LICENSE +0 -0
- {agentengine_sdk_python-0.8.3.dist-info → agentengine_sdk_python-0.8.4.dist-info}/top_level.txt +0 -0
ksadk/studio/plugin_runtime.py
CHANGED
|
@@ -17,10 +17,17 @@ from ksadk.harness.reasoner import (
|
|
|
17
17
|
from ksadk.plugins.builtins import (
|
|
18
18
|
builtin_capability_factories,
|
|
19
19
|
builtin_capability_manifests,
|
|
20
|
+
builtin_capability_permissions,
|
|
20
21
|
)
|
|
21
22
|
from ksadk.plugins.bundle import PluginBundleError, PluginBundleResolver, ResolvedPluginBundle
|
|
22
23
|
from ksadk.plugins.contracts import CompositionProfile, PluginManifest
|
|
23
24
|
from ksadk.plugins.host import PluginHost, PluginHostError
|
|
25
|
+
from ksadk.plugins.providers.codex import CodexTurnResult
|
|
26
|
+
from ksadk.plugins.providers.dsh_mcp import (
|
|
27
|
+
DSH_PROFILE_MCP_PLUGIN_ID,
|
|
28
|
+
DshProfileMCPFactory,
|
|
29
|
+
dsh_profile_mcp_manifest,
|
|
30
|
+
)
|
|
24
31
|
from ksadk.plugins.providers.harness import (
|
|
25
32
|
HarnessTurnResult,
|
|
26
33
|
KsADKHarnessProviderFactory,
|
|
@@ -31,12 +38,20 @@ from ksadk.plugins.providers.legacy import (
|
|
|
31
38
|
LegacyHarnessSource,
|
|
32
39
|
)
|
|
33
40
|
from ksadk.plugins.providers.legacy_catalog import (
|
|
41
|
+
CODEX_AGENT_PROVIDER_PLUGIN_ID,
|
|
34
42
|
KSADK_HARNESS_AGENT_PROVIDER_PLUGIN_ID,
|
|
35
43
|
builtin_agent_provider_manifests,
|
|
36
44
|
legacy_harness_agent_provider_manifest,
|
|
37
45
|
)
|
|
46
|
+
from ksadk.plugins.providers.platform_resources import (
|
|
47
|
+
PLATFORM_RESOURCE_MCP_PLUGIN_ID,
|
|
48
|
+
PLATFORM_RESOURCE_MCP_REF,
|
|
49
|
+
PlatformResourceMCPFactory,
|
|
50
|
+
platform_resource_mcp_manifest,
|
|
51
|
+
)
|
|
38
52
|
from ksadk.plugins.resolver import PluginRegistry
|
|
39
|
-
from ksadk.
|
|
53
|
+
from ksadk.resource_runtime.policy_authorization import FullAccessResourceWriteAuthorizer
|
|
54
|
+
from ksadk.runtime import RuntimeExecutor, RuntimeLaunchContext
|
|
40
55
|
from ksadk.sessions.base import BaseSessionService
|
|
41
56
|
from ksadk.studio.contracts import (
|
|
42
57
|
BuildRecord,
|
|
@@ -49,6 +64,7 @@ from ksadk.studio.plugin_kernel_adapter import StudioPluginKernelAdapter
|
|
|
49
64
|
from ksadk.studio.repository import BuildRepository
|
|
50
65
|
from ksadk.studio.run_service import StudioRunSpec
|
|
51
66
|
from ksadk.studio.workspace import Workspace
|
|
67
|
+
from ksadk.tools.gateway import normalize_tool_approval_mode
|
|
52
68
|
|
|
53
69
|
_COMPOSED_RUNTIME_TYPES = frozenset({"harness", "plugin"})
|
|
54
70
|
|
|
@@ -157,6 +173,13 @@ class StudioPluginRuntime:
|
|
|
157
173
|
provider_manifests: Mapping[str, PluginManifest] | None = None,
|
|
158
174
|
provider_factories: Mapping[str, Any] | None = None,
|
|
159
175
|
legacy_harness_sources: Sequence[LegacyHarnessSource] = (),
|
|
176
|
+
dsh_capability_service: Any | None = None,
|
|
177
|
+
resource_dsh_capability_service: Any | None = None,
|
|
178
|
+
resource_authority: Any | None = None,
|
|
179
|
+
resource_connections: Any | None = None,
|
|
180
|
+
resource_actor_ref: str = "local-user",
|
|
181
|
+
codex_local_launch_resolver: Any = None,
|
|
182
|
+
runtime_executor: RuntimeExecutor | None = None,
|
|
160
183
|
) -> None:
|
|
161
184
|
self.workspace = workspace
|
|
162
185
|
self.builds = build_repository
|
|
@@ -166,9 +189,21 @@ class StudioPluginRuntime:
|
|
|
166
189
|
self._harness_reasoner = harness_reasoner
|
|
167
190
|
self._provider_manifests = dict(provider_manifests or {})
|
|
168
191
|
self._provider_factories = dict(provider_factories or {})
|
|
192
|
+
self._dsh_capability_service = dsh_capability_service
|
|
193
|
+
self._resource_dsh_capability_service = (
|
|
194
|
+
resource_dsh_capability_service or dsh_capability_service
|
|
195
|
+
)
|
|
196
|
+
self._resource_authority = resource_authority
|
|
197
|
+
self._resource_connections = resource_connections
|
|
198
|
+
self._resource_actor_ref = resource_actor_ref
|
|
199
|
+
self._codex_local_launch_resolver = codex_local_launch_resolver
|
|
200
|
+
self._runtime_executor = runtime_executor
|
|
169
201
|
self._legacy_bundles = LegacyBundleAdapter(legacy_harness_sources)
|
|
170
202
|
self._lock = asyncio.Lock()
|
|
171
203
|
self._hosts: dict[str, _HostEntry] = {}
|
|
204
|
+
self._resource_write_modes: dict[str, str] = {}
|
|
205
|
+
self._admission_open = True
|
|
206
|
+
self._closed = False
|
|
172
207
|
|
|
173
208
|
def replace_provider_registrations(
|
|
174
209
|
self,
|
|
@@ -183,6 +218,8 @@ class StudioPluginRuntime:
|
|
|
183
218
|
raise ValueError(
|
|
184
219
|
"plugin provider manifests and factories must use the same exact references"
|
|
185
220
|
)
|
|
221
|
+
if self._closed:
|
|
222
|
+
raise RuntimeError("cannot replace provider registrations after runtime close")
|
|
186
223
|
if self._hosts:
|
|
187
224
|
raise RuntimeError("cannot replace provider registrations after activation")
|
|
188
225
|
self._provider_manifests = manifests
|
|
@@ -192,7 +229,13 @@ class StudioPluginRuntime:
|
|
|
192
229
|
def active_activation_count(self) -> int:
|
|
193
230
|
return sum(entry.host.activation_count for entry in self._hosts.values())
|
|
194
231
|
|
|
195
|
-
def resolve(
|
|
232
|
+
def resolve(
|
|
233
|
+
self,
|
|
234
|
+
build_id: str,
|
|
235
|
+
*,
|
|
236
|
+
model: str | None = None,
|
|
237
|
+
approval_mode: str | None = None,
|
|
238
|
+
) -> StudioRunSpec:
|
|
196
239
|
build = self.builds.get(build_id)
|
|
197
240
|
runtime_type = build.runtime_type.strip().lower()
|
|
198
241
|
if runtime_type not in _COMPOSED_RUNTIME_TYPES:
|
|
@@ -205,10 +248,18 @@ class StudioPluginRuntime:
|
|
|
205
248
|
bundle_root = self._bundle_root(build)
|
|
206
249
|
bundle = self._resolve_bundle(bundle_root)
|
|
207
250
|
self._preflight_bundle(bundle)
|
|
251
|
+
dynamic_dsh_mcp = self._bundle_uses_dynamic_dsh(bundle)
|
|
208
252
|
selected_model = self._select_model(build, model)
|
|
209
253
|
resolved = bundle.resolved_agent_spec
|
|
210
254
|
instructions = resolved.get("instructions")
|
|
211
255
|
instructions = instructions if isinstance(instructions, Mapping) else {}
|
|
256
|
+
provider_id, _provider_version = _parse_plugin_ref(
|
|
257
|
+
bundle.composition.profile.agent_provider.ref
|
|
258
|
+
)
|
|
259
|
+
provider_runtime_type = {
|
|
260
|
+
CODEX_AGENT_PROVIDER_PLUGIN_ID: "codex",
|
|
261
|
+
KSADK_HARNESS_AGENT_PROVIDER_PLUGIN_ID: "harness",
|
|
262
|
+
}.get(provider_id)
|
|
212
263
|
return StudioRunSpec(
|
|
213
264
|
launch_context=RuntimeLaunchContext(
|
|
214
265
|
runtime_type=runtime_type,
|
|
@@ -222,6 +273,15 @@ class StudioPluginRuntime:
|
|
|
222
273
|
"agent_system": str(instructions.get("system") or ""),
|
|
223
274
|
"agent_task": str(instructions.get("task") or ""),
|
|
224
275
|
"plugin_bundle_digest": bundle.bundle_digest,
|
|
276
|
+
"dynamic_dsh_mcp": dynamic_dsh_mcp,
|
|
277
|
+
"provider_runtime_adapter": provider_runtime_type is not None,
|
|
278
|
+
"provider_runtime_type": provider_runtime_type or "",
|
|
279
|
+
"provider_ref": bundle.composition.profile.agent_provider.ref,
|
|
280
|
+
**(
|
|
281
|
+
{"tool_approval_mode": normalize_tool_approval_mode(approval_mode)}
|
|
282
|
+
if approval_mode
|
|
283
|
+
else {}
|
|
284
|
+
),
|
|
225
285
|
},
|
|
226
286
|
manifest_sha256=build.resolved_digest,
|
|
227
287
|
plugin_bundle_root=bundle_root,
|
|
@@ -244,12 +304,29 @@ class StudioPluginRuntime:
|
|
|
244
304
|
"plugin_bundle_agent_mismatch",
|
|
245
305
|
"Studio run Agent does not match its immutable PluginHost Bundle",
|
|
246
306
|
)
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
activation_key=session_id,
|
|
307
|
+
self._resource_write_modes[session_id] = str(
|
|
308
|
+
spec.request_config.get("tool_approval_mode") or ""
|
|
250
309
|
)
|
|
251
|
-
|
|
252
|
-
|
|
310
|
+
try:
|
|
311
|
+
activation = await entry.host.open_activation(
|
|
312
|
+
entry.bundle,
|
|
313
|
+
activation_key=session_id,
|
|
314
|
+
)
|
|
315
|
+
except BaseException:
|
|
316
|
+
self._resource_write_modes.pop(session_id, None)
|
|
317
|
+
raise
|
|
318
|
+
try:
|
|
319
|
+
raw = await activation.execute(dict(request))
|
|
320
|
+
return _normalize_result(raw, session_id=session_id)
|
|
321
|
+
finally:
|
|
322
|
+
# Dynamic DSH leases are generation-bound. Rebuilding the
|
|
323
|
+
# activation per turn guarantees a restarted sidecar never leaves
|
|
324
|
+
# a session pinned to an expired port or scoped token.
|
|
325
|
+
if self._bundle_uses_dynamic_dsh(entry.bundle):
|
|
326
|
+
try:
|
|
327
|
+
await activation.close()
|
|
328
|
+
finally:
|
|
329
|
+
self._resource_write_modes.pop(session_id, None)
|
|
253
330
|
|
|
254
331
|
def kernel_adapter_provider(self, spec: StudioRunSpec): # type: ignore[no-untyped-def]
|
|
255
332
|
"""Return a lazy, Build-pinned adapter factory for Scheduler Kernel."""
|
|
@@ -282,24 +359,95 @@ class StudioPluginRuntime:
|
|
|
282
359
|
"plugin_bundle_agent_mismatch",
|
|
283
360
|
"Studio run Agent does not match its immutable PluginHost Bundle",
|
|
284
361
|
)
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
activation_key=session_id,
|
|
362
|
+
self._resource_write_modes[session_id] = str(
|
|
363
|
+
spec.request_config.get("tool_approval_mode") or ""
|
|
288
364
|
)
|
|
289
|
-
|
|
365
|
+
try:
|
|
366
|
+
activation = await entry.host.open_activation(
|
|
367
|
+
entry.bundle,
|
|
368
|
+
activation_key=session_id,
|
|
369
|
+
)
|
|
370
|
+
except BaseException:
|
|
371
|
+
self._resource_write_modes.pop(session_id, None)
|
|
372
|
+
raise
|
|
373
|
+
try:
|
|
374
|
+
return await activation.runtime_adapter()
|
|
375
|
+
except BaseException:
|
|
376
|
+
try:
|
|
377
|
+
await activation.close()
|
|
378
|
+
finally:
|
|
379
|
+
self._resource_write_modes.pop(session_id, None)
|
|
380
|
+
raise
|
|
290
381
|
|
|
291
382
|
async def close_session(self, session_id: str) -> None:
|
|
292
383
|
async with self._lock:
|
|
293
384
|
entries = tuple(self._hosts.values())
|
|
294
|
-
|
|
295
|
-
|
|
385
|
+
try:
|
|
386
|
+
for entry in entries:
|
|
387
|
+
await entry.host.close_activation(session_id)
|
|
388
|
+
finally:
|
|
389
|
+
self._resource_write_modes.pop(session_id, None)
|
|
390
|
+
|
|
391
|
+
async def close_session_if_dynamic(self, spec: StudioRunSpec, session_id: str) -> None:
|
|
392
|
+
if bool(spec.request_config.get("dynamic_dsh_mcp")):
|
|
393
|
+
await self.close_session(session_id)
|
|
394
|
+
|
|
395
|
+
async def suspend_admission(self) -> None:
|
|
396
|
+
"""Stop new activations and drain every currently owned host."""
|
|
397
|
+
|
|
398
|
+
async with self._lock:
|
|
399
|
+
self._admission_open = False
|
|
400
|
+
entries = tuple(self._hosts.values())
|
|
401
|
+
self._hosts.clear()
|
|
402
|
+
cleanup = asyncio.create_task(self._dispose_entries(entries))
|
|
403
|
+
interrupted = False
|
|
404
|
+
while not cleanup.done():
|
|
405
|
+
try:
|
|
406
|
+
await asyncio.shield(cleanup)
|
|
407
|
+
except asyncio.CancelledError:
|
|
408
|
+
interrupted = True
|
|
409
|
+
cleanup.result()
|
|
410
|
+
if interrupted:
|
|
411
|
+
raise asyncio.CancelledError
|
|
412
|
+
|
|
413
|
+
async def resume_admission(self) -> None:
|
|
414
|
+
async with self._lock:
|
|
415
|
+
if self._closed:
|
|
416
|
+
raise PluginHostError(
|
|
417
|
+
"plugin_runtime_closed",
|
|
418
|
+
"Studio plugin runtime is closed",
|
|
419
|
+
)
|
|
420
|
+
self._admission_open = True
|
|
421
|
+
|
|
422
|
+
@staticmethod
|
|
423
|
+
async def _dispose_entries(entries: Sequence[_HostEntry]) -> None:
|
|
424
|
+
if entries:
|
|
425
|
+
results = await asyncio.gather(
|
|
426
|
+
*(entry.host.dispose() for entry in entries),
|
|
427
|
+
return_exceptions=True,
|
|
428
|
+
)
|
|
429
|
+
for result in results:
|
|
430
|
+
if isinstance(result, BaseException):
|
|
431
|
+
raise result
|
|
296
432
|
|
|
297
433
|
async def aclose(self) -> None:
|
|
298
434
|
async with self._lock:
|
|
435
|
+
if self._closed:
|
|
436
|
+
return
|
|
437
|
+
self._closed = True
|
|
438
|
+
self._admission_open = False
|
|
299
439
|
entries = tuple(self._hosts.values())
|
|
300
440
|
self._hosts.clear()
|
|
301
|
-
|
|
302
|
-
|
|
441
|
+
cleanup = asyncio.create_task(self._dispose_entries(entries))
|
|
442
|
+
interrupted = False
|
|
443
|
+
while not cleanup.done():
|
|
444
|
+
try:
|
|
445
|
+
await asyncio.shield(cleanup)
|
|
446
|
+
except asyncio.CancelledError:
|
|
447
|
+
interrupted = True
|
|
448
|
+
cleanup.result()
|
|
449
|
+
if interrupted:
|
|
450
|
+
raise asyncio.CancelledError
|
|
303
451
|
|
|
304
452
|
async def _host_for(self, bundle_root: Path) -> _HostEntry:
|
|
305
453
|
# Re-resolve every turn. This deliberately rechecks enabled receipts and
|
|
@@ -307,6 +455,16 @@ class StudioPluginRuntime:
|
|
|
307
455
|
bundle = self._resolve_bundle(bundle_root)
|
|
308
456
|
key = bundle.bundle_digest
|
|
309
457
|
async with self._lock:
|
|
458
|
+
if self._closed:
|
|
459
|
+
raise PluginHostError(
|
|
460
|
+
"plugin_runtime_closed",
|
|
461
|
+
"Studio plugin runtime is closed",
|
|
462
|
+
)
|
|
463
|
+
if not self._admission_open:
|
|
464
|
+
raise PluginHostError(
|
|
465
|
+
"plugin_runtime_reconfiguring",
|
|
466
|
+
"Studio plugin runtime is reconfiguring",
|
|
467
|
+
)
|
|
310
468
|
existing = self._hosts.get(key)
|
|
311
469
|
if existing is not None:
|
|
312
470
|
return existing
|
|
@@ -319,9 +477,17 @@ class StudioPluginRuntime:
|
|
|
319
477
|
)
|
|
320
478
|
services: dict[str, Any] = {
|
|
321
479
|
"session_service": self._session_service,
|
|
480
|
+
"runtime_state_root": self.workspace.resolve(".agentkit/plugin-runtime/state"),
|
|
322
481
|
# Providers resolve credential *references* at activation time.
|
|
323
482
|
# The DSH discovery host never receives this service.
|
|
324
483
|
"credential_resolver": self._secret_resolver,
|
|
484
|
+
"codex_local_launch_resolver": self._codex_local_launch_resolver,
|
|
485
|
+
"runtime_executor": self._runtime_executor,
|
|
486
|
+
"dsh_capability_service": self._resource_dsh_capability_service,
|
|
487
|
+
"resource_authority": self._resource_authority,
|
|
488
|
+
"resource_connections": self._resource_connections,
|
|
489
|
+
"resource_actor_ref": self._resource_actor_ref,
|
|
490
|
+
"resource_write_authorizer_factory": self._resource_write_authorizer,
|
|
325
491
|
}
|
|
326
492
|
provider_id, _provider_version = _parse_plugin_ref(
|
|
327
493
|
verified.composition.profile.agent_provider.ref
|
|
@@ -357,10 +523,28 @@ class StudioPluginRuntime:
|
|
|
357
523
|
await entry.host.dispose()
|
|
358
524
|
return candidate
|
|
359
525
|
|
|
526
|
+
def _resource_write_authorizer(
|
|
527
|
+
self,
|
|
528
|
+
activation_key: str,
|
|
529
|
+
_bundle: ResolvedPluginBundle,
|
|
530
|
+
) -> FullAccessResourceWriteAuthorizer | None:
|
|
531
|
+
if self._resource_write_modes.get(activation_key) != "full":
|
|
532
|
+
return None
|
|
533
|
+
return FullAccessResourceWriteAuthorizer(activation_key=activation_key)
|
|
534
|
+
|
|
535
|
+
@staticmethod
|
|
536
|
+
def _bundle_uses_dynamic_dsh(bundle: ResolvedPluginBundle) -> bool:
|
|
537
|
+
reference = (
|
|
538
|
+
f"plugin://{DSH_PROFILE_MCP_PLUGIN_ID}@{dsh_profile_mcp_manifest().metadata.version}"
|
|
539
|
+
)
|
|
540
|
+
dynamic_refs = {reference, PLATFORM_RESOURCE_MCP_REF}
|
|
541
|
+
return any(
|
|
542
|
+
capability.ref in dynamic_refs
|
|
543
|
+
for capability in bundle.composition.profile.capabilities
|
|
544
|
+
)
|
|
545
|
+
|
|
360
546
|
def _resolve_bundle(self, bundle_root: Path) -> ResolvedPluginBundle:
|
|
361
|
-
registered_ids = {
|
|
362
|
-
manifest.metadata.id for manifest in self._provider_manifests.values()
|
|
363
|
-
}
|
|
547
|
+
registered_ids = {manifest.metadata.id for manifest in self._provider_manifests.values()}
|
|
364
548
|
try:
|
|
365
549
|
manifest, selection = self._legacy_bundles.select_from_bundle(
|
|
366
550
|
bundle_root,
|
|
@@ -390,9 +574,7 @@ class StudioPluginRuntime:
|
|
|
390
574
|
}
|
|
391
575
|
}
|
|
392
576
|
)
|
|
393
|
-
registry = PluginRegistry(
|
|
394
|
-
[selection.manifest, *builtin_capability_manifests()]
|
|
395
|
-
)
|
|
577
|
+
registry = PluginRegistry([selection.manifest, *builtin_capability_manifests()])
|
|
396
578
|
try:
|
|
397
579
|
resolved = json.loads(
|
|
398
580
|
(bundle_root / "resolved-agent-spec.json").read_text(encoding="utf-8")
|
|
@@ -421,6 +603,8 @@ class StudioPluginRuntime:
|
|
|
421
603
|
manifests = [
|
|
422
604
|
*builtin_agent_provider_manifests(),
|
|
423
605
|
*builtin_capability_manifests(),
|
|
606
|
+
dsh_profile_mcp_manifest(),
|
|
607
|
+
platform_resource_mcp_manifest(),
|
|
424
608
|
]
|
|
425
609
|
external = self._external_manifest(profile)
|
|
426
610
|
if external is not None:
|
|
@@ -442,11 +626,15 @@ class StudioPluginRuntime:
|
|
|
442
626
|
manifests: list[PluginManifest] = [
|
|
443
627
|
*builtin_agent_provider_manifests(),
|
|
444
628
|
*builtin_capability_manifests(),
|
|
629
|
+
dsh_profile_mcp_manifest(),
|
|
630
|
+
platform_resource_mcp_manifest(),
|
|
445
631
|
]
|
|
446
632
|
factories = builtin_capability_factories(
|
|
447
633
|
state_root=self.workspace.resolve(".agentkit/plugin-runtime/state"),
|
|
448
634
|
secret_resolver=self._secret_resolver.resolve,
|
|
449
635
|
)
|
|
636
|
+
factories[DSH_PROFILE_MCP_PLUGIN_ID] = DshProfileMCPFactory(self._dsh_capability_service)
|
|
637
|
+
factories[PLATFORM_RESOURCE_MCP_PLUGIN_ID] = PlatformResourceMCPFactory()
|
|
450
638
|
provider_id, provider_version = _parse_plugin_ref(
|
|
451
639
|
bundle.composition.profile.agent_provider.ref
|
|
452
640
|
)
|
|
@@ -467,19 +655,23 @@ class StudioPluginRuntime:
|
|
|
467
655
|
manifests.append(manifest)
|
|
468
656
|
factories[provider_id] = factory
|
|
469
657
|
|
|
658
|
+
allowed = set(builtin_capability_permissions(bundle.composition.profile))
|
|
470
659
|
builtin_ids = {
|
|
471
660
|
manifest.metadata.id
|
|
472
661
|
for manifest in (
|
|
473
662
|
*builtin_agent_provider_manifests(),
|
|
474
663
|
*builtin_capability_manifests(),
|
|
664
|
+
dsh_profile_mcp_manifest(),
|
|
665
|
+
platform_resource_mcp_manifest(),
|
|
475
666
|
)
|
|
476
667
|
}
|
|
477
|
-
|
|
668
|
+
builtin_ids.discard(DSH_PROFILE_MCP_PLUGIN_ID)
|
|
669
|
+
allowed.update(
|
|
478
670
|
permission
|
|
479
671
|
for manifest in manifests
|
|
480
672
|
if manifest.metadata.id in builtin_ids
|
|
481
673
|
for permission in manifest.spec.permissions
|
|
482
|
-
|
|
674
|
+
)
|
|
483
675
|
security = bundle.resolved_agent_spec.get("security")
|
|
484
676
|
if isinstance(security, Mapping):
|
|
485
677
|
raw = security.get("allowedPermissions") or security.get("allowed_permissions") or []
|
|
@@ -534,19 +726,13 @@ class StudioPluginRuntime:
|
|
|
534
726
|
timeout_seconds=int(
|
|
535
727
|
execution.get("timeoutSeconds") or execution.get("timeout_seconds") or 120
|
|
536
728
|
),
|
|
537
|
-
max_attempts=int(
|
|
538
|
-
|
|
539
|
-
),
|
|
540
|
-
backoff_seconds=float(
|
|
541
|
-
retry.get("backoffSeconds") or retry.get("backoff_seconds") or 1
|
|
542
|
-
),
|
|
729
|
+
max_attempts=int(retry.get("maxAttempts") or retry.get("max_attempts") or 2),
|
|
730
|
+
backoff_seconds=float(retry.get("backoffSeconds") or retry.get("backoff_seconds") or 1),
|
|
543
731
|
)
|
|
544
732
|
|
|
545
733
|
def _external_manifest(self, profile: CompositionProfile) -> PluginManifest | None:
|
|
546
734
|
plugin_id, version = _parse_plugin_ref(profile.agent_provider.ref)
|
|
547
|
-
builtin_ids = {
|
|
548
|
-
manifest.metadata.id for manifest in builtin_agent_provider_manifests()
|
|
549
|
-
}
|
|
735
|
+
builtin_ids = {manifest.metadata.id for manifest in builtin_agent_provider_manifests()}
|
|
550
736
|
if plugin_id in builtin_ids:
|
|
551
737
|
return None
|
|
552
738
|
provider_ref = f"plugin://{plugin_id}@{version}"
|
|
@@ -565,9 +751,7 @@ class StudioPluginRuntime:
|
|
|
565
751
|
return cast(
|
|
566
752
|
CompositionProfile,
|
|
567
753
|
CompositionProfile.model_validate_json(
|
|
568
|
-
(bundle_root / "composition-profile.json").read_text(
|
|
569
|
-
encoding="utf-8"
|
|
570
|
-
)
|
|
754
|
+
(bundle_root / "composition-profile.json").read_text(encoding="utf-8")
|
|
571
755
|
),
|
|
572
756
|
)
|
|
573
757
|
except (OSError, UnicodeError, ValueError) as error:
|
|
@@ -595,17 +779,13 @@ class StudioPluginRuntime:
|
|
|
595
779
|
|
|
596
780
|
@staticmethod
|
|
597
781
|
def _select_model(build: BuildRecord, requested: str | None) -> str:
|
|
598
|
-
allowed = [
|
|
599
|
-
str(item) for item in build.runtime_lock.get("models") or [] if str(item)
|
|
600
|
-
]
|
|
782
|
+
allowed = [str(item) for item in build.runtime_lock.get("models") or [] if str(item)]
|
|
601
783
|
default = str(build.runtime_lock.get("model") or "").strip()
|
|
602
784
|
if default and default not in allowed:
|
|
603
785
|
allowed.insert(0, default)
|
|
604
786
|
selected = str(requested or default).strip()
|
|
605
787
|
if not selected:
|
|
606
|
-
raise StudioError(
|
|
607
|
-
"AGENT_MODEL_REQUIRED", "Build 没有绑定可运行模型", status_code=422
|
|
608
|
-
)
|
|
788
|
+
raise StudioError("AGENT_MODEL_REQUIRED", "Build 没有绑定可运行模型", status_code=422)
|
|
609
789
|
if allowed and selected not in allowed:
|
|
610
790
|
raise StudioError(
|
|
611
791
|
"MODEL_NOT_BOUND",
|
|
@@ -615,13 +795,14 @@ class StudioPluginRuntime:
|
|
|
615
795
|
)
|
|
616
796
|
return selected
|
|
617
797
|
|
|
798
|
+
|
|
618
799
|
def _parse_plugin_ref(value: str) -> tuple[str, str]:
|
|
619
800
|
plugin_id, version = value.removeprefix("plugin://").rsplit("@", 1)
|
|
620
801
|
return plugin_id, version
|
|
621
802
|
|
|
622
803
|
|
|
623
804
|
def _normalize_result(raw: Any, *, session_id: str) -> StudioPluginTurnResult:
|
|
624
|
-
if isinstance(raw, HarnessTurnResult):
|
|
805
|
+
if isinstance(raw, (CodexTurnResult, HarnessTurnResult)):
|
|
625
806
|
return StudioPluginTurnResult(
|
|
626
807
|
output_text=raw.output_text,
|
|
627
808
|
session_id=raw.session_id,
|
|
@@ -630,9 +811,7 @@ def _normalize_result(raw: Any, *, session_id: str) -> StudioPluginTurnResult:
|
|
|
630
811
|
raw=raw,
|
|
631
812
|
)
|
|
632
813
|
if not isinstance(raw, Mapping):
|
|
633
|
-
raise PluginHostError(
|
|
634
|
-
"provider_result_invalid", "AgentProvider result must be an object"
|
|
635
|
-
)
|
|
814
|
+
raise PluginHostError("provider_result_invalid", "AgentProvider result must be an object")
|
|
636
815
|
output_text = str(raw.get("outputText") or raw.get("output_text") or raw.get("output") or "")
|
|
637
816
|
if not output_text:
|
|
638
817
|
raise PluginHostError(
|