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/api.py
CHANGED
|
@@ -8,7 +8,6 @@ import hmac
|
|
|
8
8
|
import json
|
|
9
9
|
import os
|
|
10
10
|
import secrets
|
|
11
|
-
import time
|
|
12
11
|
from collections.abc import AsyncIterator
|
|
13
12
|
from contextlib import asynccontextmanager
|
|
14
13
|
from pathlib import Path
|
|
@@ -79,6 +78,8 @@ from ksadk.studio.api_helpers import (
|
|
|
79
78
|
)
|
|
80
79
|
from ksadk.studio.api_memory_routes import register_memory_routes
|
|
81
80
|
from ksadk.studio.api_plugin_routes import register_plugin_routes
|
|
81
|
+
from ksadk.studio.api_resource_connections import register_resource_connection_routes
|
|
82
|
+
from ksadk.studio.cloud_shared_web import CloudSharedWebBridge, cloud_chat_target, is_cloud_agent_id
|
|
82
83
|
from ksadk.studio.codex_manifest import CodexAgentManifest
|
|
83
84
|
from ksadk.studio.contracts import (
|
|
84
85
|
AgentAppearance,
|
|
@@ -144,9 +145,7 @@ _CONTENT_WIRE_ALIASES = {
|
|
|
144
145
|
def _normalize_cloud_runtime_event_wire(value: dict[str, Any]) -> dict[str, Any]:
|
|
145
146
|
"""Normalize only historic REST casing at the RuntimeEvent boundary."""
|
|
146
147
|
|
|
147
|
-
normalized = {
|
|
148
|
-
_RUNTIME_EVENT_WIRE_ALIASES.get(key, key): item for key, item in value.items()
|
|
149
|
-
}
|
|
148
|
+
normalized = {_RUNTIME_EVENT_WIRE_ALIASES.get(key, key): item for key, item in value.items()}
|
|
150
149
|
source = normalized.get("source")
|
|
151
150
|
if isinstance(source, dict):
|
|
152
151
|
normalized["source"] = {
|
|
@@ -198,9 +197,7 @@ def _cloud_event_conversation_item(
|
|
|
198
197
|
if raw_event is None:
|
|
199
198
|
return None
|
|
200
199
|
try:
|
|
201
|
-
runtime_event = parse_runtime_event_lenient(
|
|
202
|
-
_normalize_cloud_runtime_event_wire(raw_event)
|
|
203
|
-
)
|
|
200
|
+
runtime_event = parse_runtime_event_lenient(_normalize_cloud_runtime_event_wire(raw_event))
|
|
204
201
|
item = project_conversation_item(
|
|
205
202
|
runtime_event, # type: ignore[arg-type]
|
|
206
203
|
session_id=session_id,
|
|
@@ -246,6 +243,11 @@ def create_studio_app(
|
|
|
246
243
|
app.state.studio_service = studio
|
|
247
244
|
app.state.session_token = session_secret
|
|
248
245
|
app.state.csrf_token = csrf_secret
|
|
246
|
+
from ksadk.studio.dsh_models import studio_model_projection
|
|
247
|
+
|
|
248
|
+
studio.dsh_capabilities.model_projection = lambda: studio_model_projection(
|
|
249
|
+
studio.catalog, studio.credentials
|
|
250
|
+
)
|
|
249
251
|
|
|
250
252
|
def _stream_studio_run(
|
|
251
253
|
build_id: str,
|
|
@@ -321,8 +323,8 @@ def create_studio_app(
|
|
|
321
323
|
)
|
|
322
324
|
|
|
323
325
|
static_root = Path(__file__).with_name("static")
|
|
324
|
-
_studio_startup_epoch = str(int(time.time()))
|
|
325
326
|
shared_web = StudioSharedWebBridge(studio)
|
|
327
|
+
cloud_web = CloudSharedWebBridge(studio.cloud)
|
|
326
328
|
app.state.shared_web_bridge = shared_web
|
|
327
329
|
app.mount("/static", StaticFiles(directory=static_root), name="studio-static")
|
|
328
330
|
|
|
@@ -467,21 +469,10 @@ def create_studio_app(
|
|
|
467
469
|
async def index():
|
|
468
470
|
path = static_root / "index.html"
|
|
469
471
|
html = path.read_text(encoding="utf-8")
|
|
470
|
-
#
|
|
471
|
-
#
|
|
472
|
-
#
|
|
473
|
-
|
|
474
|
-
import re
|
|
475
|
-
|
|
476
|
-
def _add_version(match: "re.Match[str]") -> str:
|
|
477
|
-
attr, path_part = match.group(1), match.group(2)
|
|
478
|
-
return f'{attr}="/static/assets/{path_part}?v={_studio_startup_epoch}"'
|
|
479
|
-
|
|
480
|
-
html = re.sub(
|
|
481
|
-
r'(src|href)="/static/assets/([^"]+)"',
|
|
482
|
-
_add_version,
|
|
483
|
-
html,
|
|
484
|
-
)
|
|
472
|
+
# Vite filenames are content hashed and index.html is no-store. Keep
|
|
473
|
+
# entry module URLs byte-for-byte identical to their internal imports:
|
|
474
|
+
# adding a query only to the HTML entry makes browsers evaluate that
|
|
475
|
+
# module again when a lazy chunk imports the unversioned URL.
|
|
485
476
|
response = Response(content=html, media_type="text/html")
|
|
486
477
|
response.headers["Cache-Control"] = "no-store"
|
|
487
478
|
if security_enabled:
|
|
@@ -526,9 +517,31 @@ def create_studio_app(
|
|
|
526
517
|
async def openai_responses(payload: dict[str, Any]):
|
|
527
518
|
metadata = payload.get("metadata")
|
|
528
519
|
metadata = metadata if isinstance(metadata, dict) else {}
|
|
529
|
-
|
|
520
|
+
agentengine_metadata = metadata.get("agentengine")
|
|
521
|
+
agentengine_metadata = (
|
|
522
|
+
agentengine_metadata if isinstance(agentengine_metadata, dict) else {}
|
|
523
|
+
)
|
|
524
|
+
agent_id = (
|
|
525
|
+
str(
|
|
526
|
+
metadata.get("agent_id")
|
|
527
|
+
or metadata.get("agentId")
|
|
528
|
+
or agentengine_metadata.get("agent_id")
|
|
529
|
+
or agentengine_metadata.get("agentId")
|
|
530
|
+
or ""
|
|
531
|
+
)
|
|
532
|
+
or None
|
|
533
|
+
)
|
|
530
534
|
requested_approval_mode = (
|
|
531
|
-
str(
|
|
535
|
+
str(
|
|
536
|
+
metadata.get("approval_mode")
|
|
537
|
+
or metadata.get("approvalMode")
|
|
538
|
+
or agentengine_metadata.get("tool_approval_mode")
|
|
539
|
+
or agentengine_metadata.get("approval_mode")
|
|
540
|
+
or agentengine_metadata.get("approvalMode")
|
|
541
|
+
or ""
|
|
542
|
+
)
|
|
543
|
+
.strip()
|
|
544
|
+
.lower()
|
|
532
545
|
)
|
|
533
546
|
if requested_approval_mode and requested_approval_mode not in {"ask", "risk", "full"}:
|
|
534
547
|
raise StudioError(
|
|
@@ -538,7 +551,13 @@ def create_studio_app(
|
|
|
538
551
|
field="metadata.approval_mode",
|
|
539
552
|
)
|
|
540
553
|
collaboration_mode = (
|
|
541
|
-
str(
|
|
554
|
+
str(
|
|
555
|
+
metadata.get("collaboration_mode")
|
|
556
|
+
or metadata.get("collaborationMode")
|
|
557
|
+
or agentengine_metadata.get("collaboration_mode")
|
|
558
|
+
or agentengine_metadata.get("collaborationMode")
|
|
559
|
+
or ""
|
|
560
|
+
)
|
|
542
561
|
.strip()
|
|
543
562
|
.lower()
|
|
544
563
|
)
|
|
@@ -550,7 +569,11 @@ def create_studio_app(
|
|
|
550
569
|
field="metadata.collaboration_mode",
|
|
551
570
|
)
|
|
552
571
|
goal_objective = str(
|
|
553
|
-
metadata.get("goal_objective")
|
|
572
|
+
metadata.get("goal_objective")
|
|
573
|
+
or metadata.get("goalObjective")
|
|
574
|
+
or agentengine_metadata.get("goal_objective")
|
|
575
|
+
or agentengine_metadata.get("goalObjective")
|
|
576
|
+
or ""
|
|
554
577
|
).strip()
|
|
555
578
|
reasoning = payload.get("reasoning")
|
|
556
579
|
reasoning = reasoning if isinstance(reasoning, dict) else {}
|
|
@@ -618,26 +641,113 @@ def create_studio_app(
|
|
|
618
641
|
try:
|
|
619
642
|
cookie_agent_id = request.cookies.get("agentkit_studio_chat_agent")
|
|
620
643
|
requested_agent_id = str(payload.get("AgentId") or cookie_agent_id or "")
|
|
644
|
+
cloud_mode = is_cloud_agent_id(requested_agent_id)
|
|
645
|
+
if cloud_mode:
|
|
646
|
+
# Cloud agents project onto the same shared-web action
|
|
647
|
+
# contract through the cloud-chat proxy, so the ksadk-web
|
|
648
|
+
# headless data layer drives them like hosted-ui does.
|
|
649
|
+
cloud_target = cloud_chat_target(requested_agent_id)
|
|
650
|
+
data = None
|
|
651
|
+
if action == "GetAgentUiBootstrap":
|
|
652
|
+
data = await cloud_web.bootstrap(cloud_target)
|
|
653
|
+
elif action == "ListAgentModels":
|
|
654
|
+
data = await cloud_web.list_models(cloud_target)
|
|
655
|
+
elif action == "ListSessions":
|
|
656
|
+
data = await cloud_web.list_sessions(
|
|
657
|
+
cloud_target,
|
|
658
|
+
page=int(payload.get("Page") or 1),
|
|
659
|
+
page_size=int(payload.get("PageSize") or 30),
|
|
660
|
+
)
|
|
661
|
+
elif action == "CreateSession":
|
|
662
|
+
data = await cloud_web.create_session(cloud_target)
|
|
663
|
+
elif action == "GetSession":
|
|
664
|
+
data = await cloud_web.get_session(
|
|
665
|
+
cloud_target, str(payload.get("SessionId") or "")
|
|
666
|
+
)
|
|
667
|
+
elif action == "DeleteSession":
|
|
668
|
+
data = await cloud_web.delete_session(
|
|
669
|
+
cloud_target, str(payload.get("SessionId") or "")
|
|
670
|
+
)
|
|
671
|
+
elif action == "ListSessionMessages":
|
|
672
|
+
data = await cloud_web.list_messages(
|
|
673
|
+
cloud_target,
|
|
674
|
+
str(payload.get("SessionId") or ""),
|
|
675
|
+
after_seq_id=_optional_int(payload.get("AfterSeqId")),
|
|
676
|
+
before_seq_id=_optional_int(payload.get("BeforeSeqId")),
|
|
677
|
+
limit=int(payload.get("Limit") or 50),
|
|
678
|
+
)
|
|
679
|
+
elif action == "ListSessionEvents":
|
|
680
|
+
data = await cloud_web.list_session_events(
|
|
681
|
+
cloud_target,
|
|
682
|
+
str(payload.get("SessionId") or ""),
|
|
683
|
+
after_seq_id=_optional_int(payload.get("AfterSeqId")),
|
|
684
|
+
offset=_optional_int(payload.get("Offset")),
|
|
685
|
+
limit=int(payload.get("Limit") or 200),
|
|
686
|
+
)
|
|
687
|
+
elif action == "SubmitInteraction":
|
|
688
|
+
data = await cloud_web.submit_interaction(
|
|
689
|
+
cloud_target, str(payload.get("SessionId") or ""), payload
|
|
690
|
+
)
|
|
691
|
+
elif action == "RunAgent":
|
|
692
|
+
# Open the upstream connection before StreamingResponse
|
|
693
|
+
# commits status 200, so admission failures remain a
|
|
694
|
+
# structured HTTP error instead of an empty SSE body.
|
|
695
|
+
upstream_stream = await cloud_web.open_run_stream(cloud_target, payload)
|
|
696
|
+
return StreamingResponse(
|
|
697
|
+
cloud_web.stream_run(
|
|
698
|
+
cloud_target,
|
|
699
|
+
payload,
|
|
700
|
+
upstream_stream=upstream_stream,
|
|
701
|
+
),
|
|
702
|
+
media_type="text/event-stream",
|
|
703
|
+
headers={"Cache-Control": "no-store", "X-Accel-Buffering": "no"},
|
|
704
|
+
)
|
|
705
|
+
elif action in {
|
|
706
|
+
"GetResponseFeedback",
|
|
707
|
+
"UpsertResponseFeedback",
|
|
708
|
+
"DeleteResponseFeedback",
|
|
709
|
+
"ListSessionCheckpoints",
|
|
710
|
+
"ListToolReceipts",
|
|
711
|
+
}:
|
|
712
|
+
data = {"Feedback": None} if action == "GetResponseFeedback" else {}
|
|
713
|
+
else:
|
|
714
|
+
return JSONResponse(
|
|
715
|
+
status_code=404,
|
|
716
|
+
content={
|
|
717
|
+
"Code": 404,
|
|
718
|
+
"Message": f"Studio 尚未实现云端共享 Web 动作:{action}",
|
|
719
|
+
"Data": {},
|
|
720
|
+
},
|
|
721
|
+
)
|
|
722
|
+
return {"Code": 0, "Message": "OK", "Data": data}
|
|
621
723
|
if action == "GetAgentUiBootstrap":
|
|
622
724
|
data = shared_web.bootstrap(shared_web.resolve_agent_id(requested_agent_id or None))
|
|
623
725
|
elif action == "ListAgentModels":
|
|
624
|
-
|
|
625
|
-
|
|
626
|
-
|
|
726
|
+
model_agent_id = shared_web.resolve_agent_id(requested_agent_id or None)
|
|
727
|
+
# A cold Studio process has no discovered provider descriptors.
|
|
728
|
+
# Resolve the same cached catalog as Resources before projecting
|
|
729
|
+
# model windows; visiting Resources must not be a prerequisite.
|
|
730
|
+
await runtime_model_catalog()
|
|
731
|
+
data = shared_web.list_models(model_agent_id)
|
|
627
732
|
elif action == "ListSessions":
|
|
628
|
-
data = shared_web.list_sessions(
|
|
733
|
+
data = await shared_web.list_sessions(
|
|
629
734
|
shared_web.resolve_agent_id(requested_agent_id or None),
|
|
630
735
|
page=int(payload.get("Page") or 1),
|
|
631
736
|
page_size=int(payload.get("PageSize") or 30),
|
|
632
737
|
)
|
|
633
738
|
elif action == "CreateSession":
|
|
634
|
-
data = shared_web.create_session(
|
|
739
|
+
data = await shared_web.create_session(
|
|
635
740
|
shared_web.resolve_agent_id(requested_agent_id or None)
|
|
636
741
|
)
|
|
637
742
|
elif action == "GetSession":
|
|
638
|
-
data = shared_web.get_session(str(payload.get("SessionId") or ""))
|
|
743
|
+
data = await shared_web.get_session(str(payload.get("SessionId") or ""))
|
|
744
|
+
elif action == "CompactSession":
|
|
745
|
+
data = await shared_web.compact_session(
|
|
746
|
+
shared_web.resolve_agent_id(requested_agent_id or None),
|
|
747
|
+
str(payload.get("SessionId") or ""),
|
|
748
|
+
)
|
|
639
749
|
elif action == "DeleteSession":
|
|
640
|
-
data = shared_web.delete_session(str(payload.get("SessionId") or ""))
|
|
750
|
+
data = await shared_web.delete_session(str(payload.get("SessionId") or ""))
|
|
641
751
|
elif action == "ListSessionMessages":
|
|
642
752
|
data = await shared_web.list_messages(
|
|
643
753
|
str(payload.get("SessionId") or ""),
|
|
@@ -648,8 +758,12 @@ def create_studio_app(
|
|
|
648
758
|
elif action == "ListSessionEvents":
|
|
649
759
|
data = await shared_web.list_session_events(str(payload.get("SessionId") or ""))
|
|
650
760
|
elif action == "RunAgent":
|
|
761
|
+
# A cold process has not discovered provider model descriptors
|
|
762
|
+
# yet. Run admission may need to materialize a current Build,
|
|
763
|
+
# so chat must not depend on visiting the Models page first.
|
|
764
|
+
await runtime_model_catalog()
|
|
651
765
|
return StreamingResponse(
|
|
652
|
-
shared_web.stream_run(payload),
|
|
766
|
+
shared_web.stream_run(payload, shared_ui=True),
|
|
653
767
|
media_type="text/event-stream",
|
|
654
768
|
headers={
|
|
655
769
|
"Cache-Control": "no-store",
|
|
@@ -658,6 +772,33 @@ def create_studio_app(
|
|
|
658
772
|
)
|
|
659
773
|
elif action == "CancelRun":
|
|
660
774
|
data = shared_web.cancel_run(str(payload.get("InvocationId") or ""))
|
|
775
|
+
elif action == "SubmitInteraction":
|
|
776
|
+
run_id = str(payload.get("RunId") or "")
|
|
777
|
+
interaction_id = str(payload.get("InteractionId") or "")
|
|
778
|
+
resolved = await studio.run_service.submit_interaction(
|
|
779
|
+
run_id,
|
|
780
|
+
interaction_id,
|
|
781
|
+
name=str(payload.get("Action") or "submit"),
|
|
782
|
+
data=(
|
|
783
|
+
dict(payload.get("Response"))
|
|
784
|
+
if isinstance(payload.get("Response"), dict)
|
|
785
|
+
else {}
|
|
786
|
+
),
|
|
787
|
+
expected_revision=int(payload.get("ExpectedRevision") or 0),
|
|
788
|
+
idempotency_key=str(payload.get("IdempotencyKey") or ""),
|
|
789
|
+
)
|
|
790
|
+
data = {
|
|
791
|
+
"schema_version": 1,
|
|
792
|
+
"command_id": str(
|
|
793
|
+
resolved.get("eventId")
|
|
794
|
+
or resolved.get("resolutionEventId")
|
|
795
|
+
or f"interaction:{interaction_id}"
|
|
796
|
+
),
|
|
797
|
+
"status": "accepted",
|
|
798
|
+
"message_id": None,
|
|
799
|
+
"run_id": run_id,
|
|
800
|
+
"accepted_seq": int(resolved.get("eventId") or 0),
|
|
801
|
+
}
|
|
661
802
|
elif action in {
|
|
662
803
|
"GetResponseFeedback",
|
|
663
804
|
"UpsertResponseFeedback",
|
|
@@ -689,12 +830,37 @@ def create_studio_app(
|
|
|
689
830
|
)
|
|
690
831
|
|
|
691
832
|
@app.get("/agentengine/api/v1/SubscribeRunEvents")
|
|
692
|
-
async def shared_chat_subscribe_run_events(
|
|
693
|
-
|
|
694
|
-
|
|
695
|
-
|
|
833
|
+
async def shared_chat_subscribe_run_events(
|
|
834
|
+
request: Request,
|
|
835
|
+
session_id: str = Query(alias="SessionId"),
|
|
836
|
+
invocation_id: str = Query(alias="InvocationId"),
|
|
837
|
+
after_seq_id: int = Query(default=0, alias="AfterSeqId", ge=0),
|
|
838
|
+
agent_id: str | None = Query(default=None, alias="AgentId"),
|
|
839
|
+
):
|
|
840
|
+
requested_agent_id = str(
|
|
841
|
+
agent_id or request.cookies.get("agentkit_studio_chat_agent") or ""
|
|
842
|
+
)
|
|
843
|
+
if is_cloud_agent_id(requested_agent_id):
|
|
844
|
+
cloud_target = cloud_chat_target(requested_agent_id)
|
|
845
|
+
return StreamingResponse(
|
|
846
|
+
cloud_web.subscribe_run_events(
|
|
847
|
+
cloud_target,
|
|
848
|
+
session_id,
|
|
849
|
+
invocation_id,
|
|
850
|
+
after_seq_id=after_seq_id,
|
|
851
|
+
),
|
|
852
|
+
media_type="text/event-stream",
|
|
853
|
+
headers={"Cache-Control": "no-store", "X-Accel-Buffering": "no"},
|
|
854
|
+
)
|
|
855
|
+
# Validate before StreamingResponse sends headers; invalid identities
|
|
856
|
+
# remain ordinary actionable HTTP errors.
|
|
857
|
+
await shared_web.subscription_run_id(session_id, invocation_id)
|
|
696
858
|
return StreamingResponse(
|
|
697
|
-
|
|
859
|
+
shared_web.subscribe_run_events(
|
|
860
|
+
session_id,
|
|
861
|
+
invocation_id,
|
|
862
|
+
after_seq_id=after_seq_id,
|
|
863
|
+
),
|
|
698
864
|
media_type="text/event-stream",
|
|
699
865
|
headers={"Cache-Control": "no-store", "X-Accel-Buffering": "no"},
|
|
700
866
|
)
|
|
@@ -764,6 +930,7 @@ def create_studio_app(
|
|
|
764
930
|
async def list_schedules():
|
|
765
931
|
return {
|
|
766
932
|
"items": studio.scheduler.list_tasks(),
|
|
933
|
+
"taskOccurrences": studio.scheduler.task_occurrence_summaries(),
|
|
767
934
|
"availability": studio.scheduler.availability(),
|
|
768
935
|
}
|
|
769
936
|
|
|
@@ -835,6 +1002,10 @@ def create_studio_app(
|
|
|
835
1002
|
task_id: str,
|
|
836
1003
|
payload: AgentScheduleRequest,
|
|
837
1004
|
):
|
|
1005
|
+
existing = studio.get_agent_schedule(agent_id, task_id)
|
|
1006
|
+
await studio.validate_schedule_session(
|
|
1007
|
+
agent_id, payload.continuity, payload.session_id, existing.target.agent_version_ref
|
|
1008
|
+
)
|
|
838
1009
|
return studio.update_agent_schedule(
|
|
839
1010
|
agent_id,
|
|
840
1011
|
task_id,
|
|
@@ -970,6 +1141,7 @@ def create_studio_app(
|
|
|
970
1141
|
unrelated Build.
|
|
971
1142
|
"""
|
|
972
1143
|
|
|
1144
|
+
await runtime_model_catalog()
|
|
973
1145
|
build = await studio.ensure_current_build(agent_id)
|
|
974
1146
|
return {
|
|
975
1147
|
"buildId": build.id,
|
|
@@ -1207,7 +1379,9 @@ def create_studio_app(
|
|
|
1207
1379
|
|
|
1208
1380
|
@app.get("/api/v1/agents/{agent_id}/models")
|
|
1209
1381
|
async def get_agent_models(agent_id: str):
|
|
1210
|
-
|
|
1382
|
+
model_agent_id = shared_web.resolve_agent_id(agent_id)
|
|
1383
|
+
await runtime_model_catalog()
|
|
1384
|
+
return shared_web.list_models(model_agent_id)
|
|
1211
1385
|
|
|
1212
1386
|
@app.put("/api/v1/agents/{agent_id}")
|
|
1213
1387
|
async def update_agent(
|
|
@@ -1308,6 +1482,7 @@ def create_studio_app(
|
|
|
1308
1482
|
payload: BuildRequest,
|
|
1309
1483
|
idempotency_key: str | None = Header(default=None, alias="Idempotency-Key"),
|
|
1310
1484
|
):
|
|
1485
|
+
await runtime_model_catalog()
|
|
1311
1486
|
return studio.submit_studio_build(
|
|
1312
1487
|
agent_id,
|
|
1313
1488
|
revision=payload.revision,
|
|
@@ -1668,7 +1843,7 @@ def create_studio_app(
|
|
|
1668
1843
|
async def list_deployments():
|
|
1669
1844
|
"""Read local deployment receipts without implicit cloud refreshes."""
|
|
1670
1845
|
|
|
1671
|
-
return {"items": studio.cloud.list()}
|
|
1846
|
+
return {"items": studio.cloud.list(), "currentIdentity": studio.cloud.cached_identity()}
|
|
1672
1847
|
|
|
1673
1848
|
@app.get("/api/v1/cloud-agents")
|
|
1674
1849
|
async def list_account_cloud_agents(
|
|
@@ -2035,6 +2210,13 @@ def create_studio_app(
|
|
|
2035
2210
|
runtime_model_catalog=runtime_model_catalog,
|
|
2036
2211
|
)
|
|
2037
2212
|
register_memory_routes(app, studio)
|
|
2213
|
+
register_resource_connection_routes(app, studio)
|
|
2038
2214
|
register_plugin_routes(app, studio)
|
|
2039
2215
|
|
|
2216
|
+
from ksadk.studio.dsh_application import register_dsh_application
|
|
2217
|
+
|
|
2218
|
+
register_dsh_application(
|
|
2219
|
+
app, studio, session_secret=session_secret, security_enabled=security_enabled
|
|
2220
|
+
)
|
|
2221
|
+
|
|
2040
2222
|
return app
|
|
@@ -54,6 +54,8 @@ def register_catalog_routes(
|
|
|
54
54
|
):
|
|
55
55
|
if kind == "model":
|
|
56
56
|
await runtime_model_catalog()
|
|
57
|
+
if kind in {None, "mcp"} and source in {None, "provider"}:
|
|
58
|
+
await studio.ensure_dsh_catalog_available()
|
|
57
59
|
|
|
58
60
|
def effective_status(resource) -> str:
|
|
59
61
|
if resource.kind != "model":
|
|
@@ -129,6 +131,16 @@ def register_catalog_routes(
|
|
|
129
131
|
status_code=422,
|
|
130
132
|
details={"resourceId": resource_id},
|
|
131
133
|
)
|
|
134
|
+
if (
|
|
135
|
+
descriptor.source != "local"
|
|
136
|
+
or descriptor.contract.get("materialization") == "dsh-profile"
|
|
137
|
+
):
|
|
138
|
+
raise StudioError(
|
|
139
|
+
"DSH_MCP_MANAGED_RESOURCE_REQUIRED",
|
|
140
|
+
"受管理的 DSH Profile MCP 由 Studio 生命周期服务探测,不能直接探测",
|
|
141
|
+
status_code=422,
|
|
142
|
+
details={"resourceId": resource_id},
|
|
143
|
+
)
|
|
132
144
|
server_payload = {
|
|
133
145
|
key: value for key, value in descriptor.contract.items() if key != "discoveredTools"
|
|
134
146
|
}
|
|
@@ -278,6 +290,12 @@ def register_catalog_routes(
|
|
|
278
290
|
payload: MCPServerRef,
|
|
279
291
|
timeout_seconds: int = Query(default=10, alias="timeoutSeconds", ge=1, le=60),
|
|
280
292
|
):
|
|
293
|
+
if payload.materialization == "dsh-profile":
|
|
294
|
+
raise StudioError(
|
|
295
|
+
"DSH_MCP_MANAGED_RESOURCE_REQUIRED",
|
|
296
|
+
"受管理的 DSH Profile MCP 不能通过原始连接参数探测",
|
|
297
|
+
status_code=422,
|
|
298
|
+
)
|
|
281
299
|
return await studio.mcp_runtime.probe(payload, timeout_seconds=timeout_seconds)
|
|
282
300
|
|
|
283
301
|
@app.post("/api/v1/secret-references:check")
|