agentengine-sdk-python 0.8.2__py3-none-any.whl → 0.8.4__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {agentengine_sdk_python-0.8.2.dist-info → agentengine_sdk_python-0.8.4.dist-info}/METADATA +22 -28
- agentengine_sdk_python-0.8.4.dist-info/RECORD +1070 -0
- ksadk/_build_provenance.json +1 -0
- ksadk/agui/_agent_helpers.py +4 -0
- ksadk/api/client.py +108 -91
- ksadk/builders/code_builder.py +36 -9
- ksadk/builders/framework_requirements.py +2 -1
- ksadk/builders/ks3_uploader.py +36 -7
- ksadk/builders/managed_runtime_builder.py +4 -0
- ksadk/cli/__init__.py +38 -3
- ksadk/cli/cmd_managed_runtime.py +13 -1
- ksadk/cli/cmd_plugin.py +662 -0
- ksadk/cli/cmd_web.py +2 -5
- ksadk/cli/runtime_bootstrap.py +23 -1
- ksadk/codex/client.py +424 -96
- ksadk/codex/projection.py +24 -0
- ksadk/codex/runtime.py +83 -283
- ksadk/common/auth.py +16 -10
- ksadk/configs/env_registry.py +59 -3
- ksadk/configs/settings.py +9 -0
- ksadk/context_engine/contributors.py +73 -8
- ksadk/conversations/__init__.py +19 -0
- ksadk/conversations/context.py +104 -24
- ksadk/conversations/contracts.py +266 -0
- ksadk/conversations/message_projection.py +154 -15
- ksadk/conversations/projector.py +614 -0
- ksadk/conversations/reducer.py +98 -0
- ksadk/conversations/runtime_invocation.py +5 -0
- ksadk/conversations/runtime_payloads.py +1 -0
- ksadk/conversations/runtime_preparation.py +30 -27
- ksadk/conversations/runtime_resume.py +50 -2
- ksadk/conversations/runtime_stream_events.py +5 -0
- ksadk/conversations/runtime_streaming.py +25 -7
- ksadk/deployment/env_forward.py +2 -2
- ksadk/deployment/providers/serverless.py +1 -1
- ksadk/events/_v1_compat/projection.py +2 -0
- ksadk/events/adapters/_codex_validators.py +18 -7
- ksadk/events/adapters/codex.py +190 -0
- ksadk/events/adapters/langgraph.py +15 -1
- ksadk/events/canonical_store.py +3 -1
- ksadk/events/projections.py +1 -1
- ksadk/harness/__init__.py +45 -35
- ksadk/harness/config.py +2 -2
- ksadk/harness/runtime.py +75 -16
- ksadk/harness/tools.py +38 -13
- ksadk/interaction/provider.py +1 -0
- ksadk/interaction/providers/langgraph.py +1 -0
- ksadk/kernel/bootstrap.py +28 -4
- ksadk/kernel/contract_fingerprints.py +5 -4
- ksadk/kernel/contracts.py +8 -0
- ksadk/kernel/control.py +1 -0
- ksadk/kernel/ingress.py +36 -2
- ksadk/kernel/memory_store.py +1 -0
- ksadk/kernel/postgres_store.py +1 -0
- ksadk/kernel/sqlite_store.py +28 -0
- ksadk/kernel/store.py +3 -0
- ksadk/kernel/worker.py +76 -10
- ksadk/knowledge_base/client.py +57 -27
- ksadk/mcp_runtime/__init__.py +12 -4
- ksadk/memory/adk/backends/sdk_ltm_backend.py +161 -41
- ksadk/memory/adk/resilient_session_service.py +25 -17
- ksadk/memory/adk/short_term_memory.py +26 -9
- ksadk/memory/models.py +7 -4
- ksadk/memory/provider_resolver.py +3 -0
- ksadk/memory/providers/local_sqlite.py +7 -0
- ksadk/model_proxy/server.py +10 -5
- ksadk/plugins/__init__.py +171 -0
- ksadk/plugins/artifacts.py +275 -0
- ksadk/plugins/bridges/__init__.py +47 -0
- ksadk/plugins/bridges/codex.py +659 -0
- ksadk/plugins/bridges/dsh.py +1300 -0
- ksadk/plugins/builtins.py +746 -0
- ksadk/plugins/bundle.py +246 -0
- ksadk/plugins/bundle_security.py +191 -0
- ksadk/plugins/codex_manifest.py +983 -0
- ksadk/plugins/composition.py +537 -0
- ksadk/plugins/context_contributor.py +437 -0
- ksadk/plugins/contracts.py +569 -0
- ksadk/plugins/delivery.py +153 -0
- ksadk/plugins/dsh_installation_digest.py +71 -0
- ksadk/plugins/dsh_toolchain.py +1024 -0
- ksadk/plugins/ecosystem_bridge.py +1105 -0
- ksadk/plugins/ecosystem_probe.py +191 -0
- ksadk/plugins/host.py +787 -0
- ksadk/plugins/kernel_adapter.py +205 -0
- ksadk/plugins/providers/__init__.py +108 -0
- ksadk/plugins/providers/bundles/dsh-knowledge/cordis.patch.yml +3 -0
- ksadk/plugins/providers/bundles/dsh-knowledge/index.mjs +53 -0
- ksadk/plugins/providers/bundles/dsh-knowledge/package.json +16 -0
- ksadk/plugins/providers/bundles/dsh-memory/cordis.patch.yml +3 -0
- ksadk/plugins/providers/bundles/dsh-memory/index.mjs +175 -0
- ksadk/plugins/providers/bundles/dsh-memory/package.json +16 -0
- ksadk/plugins/providers/bundles/dsh-platform-resources/client.mjs +166 -0
- ksadk/plugins/providers/bundles/dsh-platform-resources/cordis.patch.yml +3 -0
- ksadk/plugins/providers/bundles/dsh-platform-resources/index.mjs +9 -0
- ksadk/plugins/providers/bundles/dsh-platform-resources/package.json +12 -0
- ksadk/plugins/providers/bundles/dsh-skill-center/cordis.patch.yml +3 -0
- ksadk/plugins/providers/bundles/dsh-skill-center/index.mjs +125 -0
- ksadk/plugins/providers/bundles/dsh-skill-center/package.json +16 -0
- ksadk/plugins/providers/bundles/ksadk-codex/cordis.patch.yml +3 -0
- ksadk/plugins/providers/bundles/ksadk-codex/index.mjs +18 -0
- ksadk/plugins/providers/bundles/ksadk-codex/package.json +19 -0
- ksadk/plugins/providers/bundles/ksadk-dsh-capability-host/cordis.patch.yml +3 -0
- ksadk/plugins/providers/bundles/ksadk-dsh-capability-host/index.mjs +870 -0
- ksadk/plugins/providers/bundles/ksadk-dsh-capability-host/package.json +27 -0
- ksadk/plugins/providers/bundles/ksadk-dsh-studio/client.js +92 -0
- ksadk/plugins/providers/bundles/ksadk-dsh-studio/index.mjs +15 -0
- ksadk/plugins/providers/bundles/ksadk-dsh-studio/package.json +7 -0
- ksadk/plugins/providers/bundles/ksadk-harness/cordis.patch.yml +3 -0
- ksadk/plugins/providers/bundles/ksadk-harness/index.mjs +19 -0
- ksadk/plugins/providers/bundles/ksadk-harness/package.json +19 -0
- ksadk/plugins/providers/codex.py +988 -0
- ksadk/plugins/providers/codex_dsh.py +83 -0
- ksadk/plugins/providers/codex_native.py +368 -0
- ksadk/plugins/providers/codex_turn.py +301 -0
- ksadk/plugins/providers/dsh.py +951 -0
- ksadk/plugins/providers/dsh_capabilities.py +1389 -0
- ksadk/plugins/providers/dsh_descriptor_host.py +226 -0
- ksadk/plugins/providers/dsh_mcp.py +467 -0
- ksadk/plugins/providers/harness.py +632 -0
- ksadk/plugins/providers/harness_dsh.py +91 -0
- ksadk/plugins/providers/legacy.py +215 -0
- ksadk/plugins/providers/legacy_catalog.py +100 -0
- ksadk/plugins/providers/mcp_projection.py +150 -0
- ksadk/plugins/providers/platform_resources.py +657 -0
- ksadk/plugins/providers/shipped_dsh.py +370 -0
- ksadk/plugins/resolver.py +338 -0
- ksadk/plugins/subagent_providers/__init__.py +12 -0
- ksadk/plugins/subagent_providers/codex.py +443 -0
- ksadk/plugins/subagents.py +333 -0
- ksadk/resource_runtime/__init__.py +4 -0
- ksadk/resource_runtime/broker.py +616 -0
- ksadk/resource_runtime/build_artifacts.py +165 -0
- ksadk/resource_runtime/contracts.py +138 -0
- ksadk/resource_runtime/discovery_receipts.py +100 -0
- ksadk/resource_runtime/discovery_skills.py +172 -0
- ksadk/resource_runtime/errors.py +6 -0
- ksadk/resource_runtime/ipc.py +142 -0
- ksadk/resource_runtime/kernel_approval.py +165 -0
- ksadk/resource_runtime/knowledge.py +114 -0
- ksadk/resource_runtime/langgraph.py +94 -0
- ksadk/resource_runtime/leases.py +191 -0
- ksadk/resource_runtime/managed_projection.py +186 -0
- ksadk/resource_runtime/mcp_server.py +138 -0
- ksadk/resource_runtime/memory_provider.py +318 -0
- ksadk/resource_runtime/memory_receipts.py +34 -0
- ksadk/resource_runtime/operation_ledger.py +211 -0
- ksadk/resource_runtime/plugin_config.py +48 -0
- ksadk/resource_runtime/policy_authorization.py +54 -0
- ksadk/resource_runtime/process.py +110 -0
- ksadk/resource_runtime/skill_artifacts.py +153 -0
- ksadk/resource_runtime/skill_runtime.py +42 -0
- ksadk/resource_runtime/skill_workspace.py +118 -0
- ksadk/resource_runtime/skills.py +215 -0
- ksadk/resource_runtime/snapshots.py +180 -0
- ksadk/resource_runtime/socket_server.py +103 -0
- ksadk/resource_runtime/supervisor.py +380 -0
- ksadk/resource_runtime/worker.py +504 -0
- ksadk/runners/_langgraph_runner_streams.py +74 -6
- ksadk/runners/adk_runner.py +149 -11
- ksadk/runners/base_runner.py +29 -1
- ksadk/runners/langgraph_runner.py +475 -145
- ksadk/runtime/_runner_adapter/stream_mapping.py +193 -60
- ksadk/runtime/adapter.py +3 -0
- ksadk/runtime/conversation_execution.py +92 -16
- ksadk/runtime/executor.py +78 -2
- ksadk/runtime/factory.py +30 -200
- ksadk/runtime/framework_adapters.py +41 -0
- ksadk/runtime/preprocessing.py +10 -2
- ksadk/runtime/runner_adapter.py +78 -14
- ksadk/runtime_context.py +40 -2
- ksadk/sandbox/__init__.py +2 -1
- ksadk/sandbox/backends/e2b.py +52 -11
- ksadk/sandbox/backends/local_process.py +9 -0
- ksadk/sandbox/base.py +2 -0
- ksadk/sandbox/e2b_connection.py +66 -0
- ksadk/sandbox/factory.py +72 -0
- ksadk/scheduler/__init__.py +18 -0
- ksadk/scheduler/calendar.py +102 -0
- ksadk/scheduler/contracts.py +254 -0
- ksadk/scheduler/dispatcher.py +129 -0
- ksadk/scheduler/engine.py +416 -0
- ksadk/scheduler/sqlite_store.py +581 -0
- ksadk/server/composition.py +2 -0
- ksadk/server/factory.py +5 -0
- ksadk/server/persistence_capability.py +516 -0
- ksadk/server/routes/control.py +210 -46
- ksadk/server/routes/dependencies.py +15 -0
- ksadk/server/routes/models.py +47 -4
- ksadk/server/routes/projection.py +252 -12
- ksadk/server/routes/sessions.py +284 -107
- ksadk/server/routes/streaming.py +43 -9
- ksadk/server/static/assets/{ArtifactsPanel-DSU1sWD_.js → ArtifactsPanel-CGbWlMNh.js} +1 -1
- ksadk/server/static/assets/{CodeBlock-DOH6MVcn.js → CodeBlock-b4C7upmO.js} +3 -3
- ksadk/server/static/assets/{MathMessageMarkdown-BL8my1R2.js → MathMessageMarkdown-DbdW5A4_.js} +4 -4
- ksadk/server/static/assets/{MermaidBlock-Dz4IP-Tx.js → MermaidBlock-BEBN4Ksz.js} +6 -6
- ksadk/server/static/assets/{NativeTerminalPanel-DUrK0JpZ.js → NativeTerminalPanel-zvL-WpAn.js} +1 -1
- ksadk/server/static/assets/{abnfDiagram-VCTEODGH-g20pFzNV.js → abnfDiagram-VCTEODGH-BYafW7Za.js} +1 -1
- ksadk/server/static/assets/{arc-C4FzinUA.js → arc-bTohInsS.js} +1 -1
- ksadk/server/static/assets/architecture-7GRP2DOG-BW5UtSnx.js +1 -0
- ksadk/server/static/assets/{architectureDiagram-5GKGNRK7-DpIqL5h4.js → architectureDiagram-5GKGNRK7-Ch5Lbzsi.js} +1 -1
- ksadk/server/static/assets/{blockDiagram-NRAW4CY4-BjkljTNz.js → blockDiagram-NRAW4CY4-kqF4MDOG.js} +1 -1
- ksadk/server/static/assets/{c4Diagram-UCG6FXSJ-Dk_ieq2X.js → c4Diagram-UCG6FXSJ-8uSRIODv.js} +1 -1
- ksadk/server/static/assets/channel-CF5Up3hQ.js +1 -0
- ksadk/server/static/assets/chunk-2Q5K7J3B-KkXX47WI.js +1 -0
- ksadk/server/static/assets/{chunk-5VM5RSS4-BVHAchFb.js → chunk-5VM5RSS4-DkhehZDr.js} +1 -1
- ksadk/server/static/assets/{chunk-F27PBJKO-C-ipQzuS.js → chunk-F27PBJKO-BdXhtPe9.js} +1 -1
- ksadk/server/static/assets/{chunk-G27WJ6UU-C2EyJbIK.js → chunk-G27WJ6UU-DPTpvpwi.js} +1 -1
- ksadk/server/static/assets/{chunk-JWPE2WC7-vYvVJb_M.js → chunk-JWPE2WC7-Pqoh38el.js} +1 -1
- ksadk/server/static/assets/{chunk-LCL6LL3I-BcI6ysPT.js → chunk-LCL6LL3I-DeU00qC-.js} +1 -1
- ksadk/server/static/assets/{chunk-POPQ4Y6H-C030x_Z1.js → chunk-POPQ4Y6H-CzxScFkr.js} +1 -1
- ksadk/server/static/assets/{chunk-RHFEMEQ7-yyGpsz4n.js → chunk-RHFEMEQ7-DpqMx-ux.js} +1 -1
- ksadk/server/static/assets/{chunk-SVP7TREG-BLTlmMU7.js → chunk-SVP7TREG-C6t0SypQ.js} +1 -1
- ksadk/server/static/assets/{chunk-XXDRQBXY-C_32ArgP.js → chunk-XXDRQBXY-DVaeafZk.js} +1 -1
- ksadk/server/static/assets/classDiagram-DTDB5LWJ-Cz81acRQ.js +1 -0
- ksadk/server/static/assets/classDiagram-v2-JRS7N3AN-Cz81acRQ.js +1 -0
- ksadk/server/static/assets/{cose-bilkent-JH36ORCC-9YQYwdl0.js → cose-bilkent-JH36ORCC-Bf9D3tzJ.js} +1 -1
- ksadk/server/static/assets/cynefin-OW5HDTMX-DVWs8a2t.js +1 -0
- ksadk/server/static/assets/{cynefinDiagram-5FMLGOSQ-ErLF5N13.js → cynefinDiagram-5FMLGOSQ-B9cY3iTz.js} +1 -1
- ksadk/server/static/assets/{dagre-3AP2YEHR-DFiQF-6f.js → dagre-3AP2YEHR-CSwlx3CB.js} +1 -1
- ksadk/server/static/assets/{dagre-BuhGnRI1.js → dagre-UBpgon5q.js} +1 -1
- ksadk/server/static/assets/{diagram-S7CK7UJ4-Bt1v8-GC.js → diagram-S7CK7UJ4-C9akhN9a.js} +1 -1
- ksadk/server/static/assets/{diagram-UQ7AKVKN-DSCxJdBK.js → diagram-UQ7AKVKN-CgedhTPI.js} +1 -1
- ksadk/server/static/assets/{diagram-VSXAHHWV-DHfYwp_9.js → diagram-VSXAHHWV-Cjucz5BY.js} +1 -1
- ksadk/server/static/assets/{diagram-VX7I27RA-DdzD-4Le.js → diagram-VX7I27RA-Dd4Vleyn.js} +1 -1
- ksadk/server/static/assets/{diagram-Z3DM3KII-Du-nAJ9F.js → diagram-Z3DM3KII-CZ2jGtYW.js} +1 -1
- ksadk/server/static/assets/{dist-B7seoj3d.js → dist-B2_CVgKv.js} +1 -1
- ksadk/server/static/assets/{dist-CSh_DE14.js → dist-B3FR1SKK.js} +1 -1
- ksadk/server/static/assets/{dist-DUX-id_F.js → dist-BIr4DSRq.js} +1 -1
- ksadk/server/static/assets/{dist-C_wsv-Qd.js → dist-BgV_owcB.js} +1 -1
- ksadk/server/static/assets/{dist-W-TIVntx.js → dist-Bj730Ib4.js} +1 -1
- ksadk/server/static/assets/{dist-BytlxIDT.js → dist-BnaTiyzN.js} +1 -1
- ksadk/server/static/assets/{dist-CXYYBw3_.js → dist-C1NMAY5a.js} +1 -1
- ksadk/server/static/assets/{dist-dDdADKFA.js → dist-C5_ZAZsG.js} +1 -1
- ksadk/server/static/assets/{dist-BVDffZ0U.js → dist-CB9iJrvg.js} +1 -1
- ksadk/server/static/assets/{dist-Bf2M8m3N.js → dist-CFzsn6BG.js} +1 -1
- ksadk/server/static/assets/{dist-ngtN0DJB.js → dist-Cf125P_m.js} +1 -1
- ksadk/server/static/assets/{dist-BE7bu-DL.js → dist-ClYUxfeK.js} +1 -1
- ksadk/server/static/assets/{dist-DNp6rLRA.js → dist-DFD6Qa6T.js} +1 -1
- ksadk/server/static/assets/{dist-BX8z72IC.js → dist-DVCOWtha.js} +1 -1
- ksadk/server/static/assets/{dist-dydu68Fl.js → dist-D_ctSS2i.js} +1 -1
- ksadk/server/static/assets/{dist-ClxGviKw.js → dist-DiixqL0J.js} +1 -1
- ksadk/server/static/assets/{dist-BjU6y-A2.js → dist-DoVSwoDb.js} +1 -1
- ksadk/server/static/assets/{dist-Dq9gLD7L.js → dist-DvFK7p5S.js} +1 -1
- ksadk/server/static/assets/{dist-8hqcx0sU.js → dist-QfkEHOlb.js} +1 -1
- ksadk/server/static/assets/{dist-CttYUqzS.js → dist-btbmmX5O.js} +1 -1
- ksadk/server/static/assets/{dist-DmldrHd_.js → dist-fBO2v5Kt.js} +1 -1
- ksadk/server/static/assets/{dist-DnfXs8Vn.js → dist-ufY3F5p6.js} +1 -1
- ksadk/server/static/assets/{ebnfDiagram-PWID7BFC-Da9C9NO1.js → ebnfDiagram-PWID7BFC-Ci8NqqZu.js} +1 -1
- ksadk/server/static/assets/{erDiagram-SSCWMZ5O-EAGqqR79.js → erDiagram-SSCWMZ5O-CCIOhLZG.js} +1 -1
- ksadk/server/static/assets/eventmodeling-NTZA5JFV-CQqR2hg3.js +1 -0
- ksadk/server/static/assets/flowDiagram-A5DVABFB-DDRRbGPm.js +1 -0
- ksadk/server/static/assets/{ganttDiagram-EL5Y4UJY-DqJsKb59.js → ganttDiagram-EL5Y4UJY-Cp_r9Hb6.js} +1 -1
- ksadk/server/static/assets/gitGraph-4MIJSDKK-fgWEf7UD.js +1 -0
- ksadk/server/static/assets/{gitGraphDiagram-WWUBYQGX-B6g4dtDi.js → gitGraphDiagram-WWUBYQGX-Dlhc8Wr8.js} +1 -1
- ksadk/server/static/assets/index-DcTML1Up.css +2 -0
- ksadk/server/static/assets/index-Dh2XHqPK.js +244 -0
- ksadk/server/static/assets/info-A6RAGUB7-BUecLTdt.js +1 -0
- ksadk/server/static/assets/{infoDiagram-RXCK75RN-Djm_nbd5.js → infoDiagram-RXCK75RN-CO0rRTRA.js} +1 -1
- ksadk/server/static/assets/{ishikawaDiagram-5VMMS53U-DWya9SG2.js → ishikawaDiagram-5VMMS53U-CHiaedSS.js} +1 -1
- ksadk/server/static/assets/{journeyDiagram-EYS64GPL-DutxhSNI.js → journeyDiagram-EYS64GPL-CHcCIB09.js} +1 -1
- ksadk/server/static/assets/{kanban-definition-3QL26DDD-DJdOF8Fm.js → kanban-definition-3QL26DDD-CJ_ebBZf.js} +1 -1
- ksadk/server/static/assets/{katex-vFWytM5c.js → katex-B4weu383.js} +1 -1
- ksadk/server/static/assets/{linear-BHjG8b-J.js → linear-V-MgYHW1.js} +1 -1
- ksadk/server/static/assets/{mermaid-parser.core-KGSy4jWT.js → mermaid-parser.core-CBijEX_c.js} +2 -2
- ksadk/server/static/assets/{mindmap-definition-FBJOCRG2-9-HC88D4.js → mindmap-definition-FBJOCRG2-Bc-pQvpp.js} +1 -1
- ksadk/server/static/assets/packet-AYTQ26CC-BeW-btFv.js +1 -0
- ksadk/server/static/assets/{pegDiagram-XKGWAZYB-DrEZd4fD.js → pegDiagram-XKGWAZYB-D7genGLl.js} +1 -1
- ksadk/server/static/assets/pie-WAS4IAKB-X0xh4SaT.js +1 -0
- ksadk/server/static/assets/{pieDiagram-E7YTZNPT-DpjqOFFp.js → pieDiagram-E7YTZNPT-Bxj32zwD.js} +1 -1
- ksadk/server/static/assets/{quadrantDiagram-AXDQQJYC-BiNhgOXX.js → quadrantDiagram-AXDQQJYC-BURv2mGh.js} +1 -1
- ksadk/server/static/assets/radar-RG4KPBEZ-DzRMSqjd.js +1 -0
- ksadk/server/static/assets/railroad-74A4TZTK-Cc44icX-.js +1 -0
- ksadk/server/static/assets/railroad-abnf-HS5TGJTU-D6S4BdV-.js +1 -0
- ksadk/server/static/assets/railroad-ebnf-LZEXJU2U-vD3aVE2o.js +1 -0
- ksadk/server/static/assets/railroad-peg-WCYAUIDC-CYbW_b4T.js +1 -0
- ksadk/server/static/assets/{railroadDiagram-O6MQD6OU-_Y3Ojg6G.js → railroadDiagram-O6MQD6OU-CCsh3avW.js} +1 -1
- ksadk/server/static/assets/{requirementDiagram-EFPCY7ZU-DeCFdg9K.js → requirementDiagram-EFPCY7ZU-_FRRBKEd.js} +1 -1
- ksadk/server/static/assets/{sankeyDiagram-P5KCCOFB-CPH75rhw.js → sankeyDiagram-P5KCCOFB-C-gr2o9M.js} +1 -1
- ksadk/server/static/assets/{sequenceDiagram-WJ2MYXX4-OEpQQdr4.js → sequenceDiagram-WJ2MYXX4-D97NmfKg.js} +1 -1
- ksadk/server/static/assets/{sizeCapture-X5ZJPWSS-heUErzhI.js → sizeCapture-X5ZJPWSS-DjrPC5FX.js} +1 -1
- ksadk/server/static/assets/{stateDiagram-HBIQ2CUA-DvA3jSMB.js → stateDiagram-HBIQ2CUA-DzMNg1hh.js} +1 -1
- ksadk/server/static/assets/stateDiagram-v2-4QOOHH4V-BIcjKFhF.js +1 -0
- ksadk/server/static/assets/{swimlanes-XN3QIQJK-CR-dfN_t.js → swimlanes-XN3QIQJK-Cssf_CsU.js} +1 -1
- ksadk/server/static/assets/swimlanesDiagram-VK2B7HYN-tq3K3Ybl.js +8 -0
- ksadk/server/static/assets/{timeline-definition-24CTP7MA-DAVJf1TX.js → timeline-definition-24CTP7MA-BWTHzyS1.js} +1 -1
- ksadk/server/static/assets/treeView-Q6P3EWNA-DBXt3GdU.js +1 -0
- ksadk/server/static/assets/treemap-WGGIJYW6-DrCy4E_l.js +1 -0
- ksadk/server/static/assets/{vennDiagram-4TSXK5OY-DwM8eDkh.js → vennDiagram-4TSXK5OY-BSKgJsmR.js} +1 -1
- ksadk/server/static/assets/wardley-WFR3VGLG-CefhOliM.js +1 -0
- ksadk/server/static/assets/{wardleyDiagram-VM6X3IG4-DZL-Zz2t.js → wardleyDiagram-VM6X3IG4-eflHNoaZ.js} +1 -1
- ksadk/server/static/assets/{xychartDiagram-S5SC5T6Z-Dy6Yh_hu.js → xychartDiagram-S5SC5T6Z-eYqrQ-v4.js} +1 -1
- ksadk/server/static/index.html +2 -2
- ksadk/session_context.py +66 -0
- ksadk/sessions/__init__.py +11 -21
- ksadk/sessions/_local_service_sync.py +263 -1
- ksadk/sessions/base.py +176 -0
- ksadk/sessions/errors.py +4 -0
- ksadk/sessions/in_memory.py +309 -19
- ksadk/sessions/local_service.py +83 -1
- ksadk/sessions/persistence.py +275 -0
- ksadk/sessions/postgres_service.py +358 -0
- ksadk/sessions/resilience.py +8 -0
- ksadk/sessions/resilient.py +362 -4
- ksadk/sessions/topology.py +135 -0
- ksadk/skills/models.py +26 -4
- ksadk/skills/package_store.py +186 -38
- ksadk/skills/runtime/agent.py +31 -6
- ksadk/skills/runtime/artifact_delivery.py +139 -0
- ksadk/skills/runtime/backends/e2b.py +98 -6
- ksadk/skills/runtime/backends/local.py +73 -8
- ksadk/skills/runtime/base.py +3 -0
- ksadk/skills/runtime/executor.py +2 -0
- ksadk/skills/runtime/loader.py +10 -2
- ksadk/skills/runtime/pinned.py +114 -0
- ksadk/skills/runtime/request.py +31 -0
- ksadk/skills/service_client.py +211 -24
- ksadk/studio/agent_lifecycle.py +26 -20
- ksadk/studio/api.py +714 -90
- ksadk/studio/api_catalog_routes.py +23 -0
- ksadk/studio/api_contracts.py +34 -1
- ksadk/studio/api_plugin_routes.py +911 -0
- ksadk/studio/api_resource_connections.py +183 -0
- ksadk/studio/attachment_store.py +187 -0
- ksadk/studio/authoring.py +10 -4
- ksadk/studio/authoring_coordinator.py +31 -16
- ksadk/studio/builder.py +199 -43
- ksadk/studio/cloud.py +346 -104
- ksadk/studio/cloud_shared_web.py +565 -0
- ksadk/studio/codex_agent_service.py +140 -27
- ksadk/studio/codex_builder.py +294 -16
- ksadk/studio/codex_credentials.py +90 -0
- ksadk/studio/codex_manifest.py +51 -4
- ksadk/studio/codex_plugin_store.py +746 -0
- ksadk/studio/codex_provider_build.py +231 -0
- ksadk/studio/codex_run.py +200 -29
- ksadk/studio/compatibility_report.py +456 -0
- ksadk/studio/compiler.py +84 -15
- ksadk/studio/contracts.py +249 -4
- ksadk/studio/dsh_application.py +137 -0
- ksadk/studio/dsh_capability_service.py +1107 -0
- ksadk/studio/dsh_models.py +59 -0
- ksadk/studio/dsh_provider_registration.py +1075 -0
- ksadk/studio/event_store.py +54 -6
- ksadk/studio/framework_run.py +37 -4
- ksadk/studio/hosted_kernel.py +89 -14
- ksadk/studio/mcp_runtime.py +11 -3
- ksadk/studio/model_client.py +2 -2
- ksadk/studio/operations.py +12 -2
- ksadk/studio/plugin_composition.py +468 -0
- ksadk/studio/plugin_kernel_adapter.py +28 -0
- ksadk/studio/plugin_runtime.py +831 -0
- ksadk/studio/resource_authority.py +637 -0
- ksadk/studio/resource_binding_validation.py +77 -0
- ksadk/studio/resource_build_admission.py +196 -0
- ksadk/studio/resource_build_materializer.py +149 -0
- ksadk/studio/resource_catalog.py +149 -3
- ksadk/studio/resource_connections.py +220 -0
- ksadk/studio/run_service.py +1144 -96
- ksadk/studio/runtime_source.py +24 -8
- ksadk/studio/scheduler_assistant.py +317 -0
- ksadk/studio/scheduler_runtime.py +383 -0
- ksadk/studio/scheduler_service.py +214 -0
- ksadk/studio/service.py +1131 -95
- ksadk/studio/shared_web.py +610 -87
- ksadk/studio/soul.py +52 -0
- ksadk/studio/static/assets/CodeBlock-DCUUY0PL-BLjA7kbS.js +41 -0
- ksadk/studio/static/assets/KaTeX_AMS-Regular-BQhdFMY1.woff2 +0 -0
- ksadk/studio/static/assets/KaTeX_AMS-Regular-DMm9YOAa.woff +0 -0
- ksadk/studio/static/assets/KaTeX_AMS-Regular-DRggAlZN.ttf +0 -0
- ksadk/studio/static/assets/KaTeX_Caligraphic-Bold-ATXxdsX0.ttf +0 -0
- ksadk/studio/static/assets/KaTeX_Caligraphic-Bold-BEiXGLvX.woff +0 -0
- ksadk/studio/static/assets/KaTeX_Caligraphic-Bold-Dq_IR9rO.woff2 +0 -0
- ksadk/studio/static/assets/KaTeX_Caligraphic-Regular-CTRA-rTL.woff +0 -0
- ksadk/studio/static/assets/KaTeX_Caligraphic-Regular-Di6jR-x-.woff2 +0 -0
- ksadk/studio/static/assets/KaTeX_Caligraphic-Regular-wX97UBjC.ttf +0 -0
- ksadk/studio/static/assets/KaTeX_Fraktur-Bold-BdnERNNW.ttf +0 -0
- ksadk/studio/static/assets/KaTeX_Fraktur-Bold-BsDP51OF.woff +0 -0
- ksadk/studio/static/assets/KaTeX_Fraktur-Bold-CL6g_b3V.woff2 +0 -0
- ksadk/studio/static/assets/KaTeX_Fraktur-Regular-CB_wures.ttf +0 -0
- ksadk/studio/static/assets/KaTeX_Fraktur-Regular-CTYiF6lA.woff2 +0 -0
- ksadk/studio/static/assets/KaTeX_Fraktur-Regular-Dxdc4cR9.woff +0 -0
- ksadk/studio/static/assets/KaTeX_Main-Bold-Cx986IdX.woff2 +0 -0
- ksadk/studio/static/assets/KaTeX_Main-Bold-Jm3AIy58.woff +0 -0
- ksadk/studio/static/assets/KaTeX_Main-Bold-waoOVXN0.ttf +0 -0
- ksadk/studio/static/assets/KaTeX_Main-BoldItalic-DxDJ3AOS.woff2 +0 -0
- ksadk/studio/static/assets/KaTeX_Main-BoldItalic-DzxPMmG6.ttf +0 -0
- ksadk/studio/static/assets/KaTeX_Main-BoldItalic-SpSLRI95.woff +0 -0
- ksadk/studio/static/assets/KaTeX_Main-Italic-3WenGoN9.ttf +0 -0
- ksadk/studio/static/assets/KaTeX_Main-Italic-BMLOBm91.woff +0 -0
- ksadk/studio/static/assets/KaTeX_Main-Italic-NWA7e6Wa.woff2 +0 -0
- ksadk/studio/static/assets/KaTeX_Main-Regular-B22Nviop.woff2 +0 -0
- ksadk/studio/static/assets/KaTeX_Main-Regular-Dr94JaBh.woff +0 -0
- ksadk/studio/static/assets/KaTeX_Main-Regular-ypZvNtVU.ttf +0 -0
- ksadk/studio/static/assets/KaTeX_Math-BoldItalic-B3XSjfu4.ttf +0 -0
- ksadk/studio/static/assets/KaTeX_Math-BoldItalic-CZnvNsCZ.woff2 +0 -0
- ksadk/studio/static/assets/KaTeX_Math-BoldItalic-iY-2wyZ7.woff +0 -0
- ksadk/studio/static/assets/KaTeX_Math-Italic-DA0__PXp.woff +0 -0
- ksadk/studio/static/assets/KaTeX_Math-Italic-flOr_0UB.ttf +0 -0
- ksadk/studio/static/assets/KaTeX_Math-Italic-t53AETM-.woff2 +0 -0
- ksadk/studio/static/assets/KaTeX_SansSerif-Bold-CFMepnvq.ttf +0 -0
- ksadk/studio/static/assets/KaTeX_SansSerif-Bold-D1sUS0GD.woff2 +0 -0
- ksadk/studio/static/assets/KaTeX_SansSerif-Bold-DbIhKOiC.woff +0 -0
- ksadk/studio/static/assets/KaTeX_SansSerif-Italic-C3H0VqGB.woff2 +0 -0
- ksadk/studio/static/assets/KaTeX_SansSerif-Italic-DN2j7dab.woff +0 -0
- ksadk/studio/static/assets/KaTeX_SansSerif-Italic-YYjJ1zSn.ttf +0 -0
- ksadk/studio/static/assets/KaTeX_SansSerif-Regular-BNo7hRIc.ttf +0 -0
- ksadk/studio/static/assets/KaTeX_SansSerif-Regular-CS6fqUqJ.woff +0 -0
- ksadk/studio/static/assets/KaTeX_SansSerif-Regular-DDBCnlJ7.woff2 +0 -0
- ksadk/studio/static/assets/KaTeX_Script-Regular-C5JkGWo-.ttf +0 -0
- ksadk/studio/static/assets/KaTeX_Script-Regular-D3wIWfF6.woff2 +0 -0
- ksadk/studio/static/assets/KaTeX_Script-Regular-D5yQViql.woff +0 -0
- ksadk/studio/static/assets/KaTeX_Size1-Regular-C195tn64.woff +0 -0
- ksadk/studio/static/assets/KaTeX_Size1-Regular-Dbsnue_I.ttf +0 -0
- ksadk/studio/static/assets/KaTeX_Size1-Regular-mCD8mA8B.woff2 +0 -0
- ksadk/studio/static/assets/KaTeX_Size2-Regular-B7gKUWhC.ttf +0 -0
- ksadk/studio/static/assets/KaTeX_Size2-Regular-Dy4dx90m.woff2 +0 -0
- ksadk/studio/static/assets/KaTeX_Size2-Regular-oD1tc_U0.woff +0 -0
- ksadk/studio/static/assets/KaTeX_Size3-Regular-CTq5MqoE.woff +0 -0
- ksadk/studio/static/assets/KaTeX_Size3-Regular-DgpXs0kz.ttf +0 -0
- ksadk/studio/static/assets/KaTeX_Size4-Regular-BF-4gkZK.woff +0 -0
- ksadk/studio/static/assets/KaTeX_Size4-Regular-DWFBv043.ttf +0 -0
- ksadk/studio/static/assets/KaTeX_Size4-Regular-Dl5lxZxV.woff2 +0 -0
- ksadk/studio/static/assets/KaTeX_Typewriter-Regular-C0xS9mPB.woff +0 -0
- ksadk/studio/static/assets/KaTeX_Typewriter-Regular-CO6r4hn1.woff2 +0 -0
- ksadk/studio/static/assets/KaTeX_Typewriter-Regular-D3Ib7_Hf.ttf +0 -0
- ksadk/studio/static/assets/MathMessageMarkdown-CBcDrAw--BEOyPC3w.css +1 -0
- ksadk/studio/static/assets/MathMessageMarkdown-CBcDrAw--CUYIXwgI.js +8 -0
- ksadk/studio/static/assets/MermaidBlock-DBFTztfQ-BTYKWEbD.js +44 -0
- ksadk/studio/static/assets/PrismRenderer-wiXRHURw.js +3 -0
- ksadk/studio/static/assets/abnfDiagram-VCTEODGH-CLETGjKq.js +1 -0
- ksadk/studio/static/assets/arc-Pry-7G1_.js +1 -0
- ksadk/studio/static/assets/architecture-7GRP2DOG-hXMiO_AU.js +1 -0
- ksadk/studio/static/assets/architectureDiagram-5GKGNRK7-B5EQysk6.js +36 -0
- ksadk/studio/static/assets/array-BifhSqXX.js +1 -0
- ksadk/studio/static/assets/blockDiagram-I7D4REHJ-CFmPl1de.js +129 -0
- ksadk/studio/static/assets/c4Diagram-7LVT6UL2-BRrGu8qt.js +38 -0
- ksadk/studio/static/assets/channel-BqO-gtEw.js +1 -0
- ksadk/studio/static/assets/chunk-2Q5K7J3B-C1jixKkw.js +1 -0
- ksadk/studio/static/assets/chunk-4HAMMTFA-D220vUtq.js +62 -0
- ksadk/studio/static/assets/chunk-5VM5RSS4-ZNzvKenW.js +15 -0
- ksadk/studio/static/assets/chunk-75Z2AOVW-C8lLv_qc.js +2 -0
- ksadk/studio/static/assets/chunk-DU6HZSFF-C4DtVpCu.js +128 -0
- ksadk/studio/static/assets/chunk-F27PBJKO-Cpw14SNG.js +1 -0
- ksadk/studio/static/assets/chunk-FOHPRMQF-DHwB1DNv.js +161 -0
- ksadk/studio/static/assets/chunk-GMAD6QVW-DiQA-u2N.js +72 -0
- ksadk/studio/static/assets/chunk-GVQU2GXP-DUdNBUCi.js +1 -0
- ksadk/studio/static/assets/chunk-IMKFNOWR-BSlbjT_b.js +231 -0
- ksadk/studio/static/assets/chunk-JWPE2WC7-DVXcaiue.js +1 -0
- ksadk/studio/static/assets/chunk-L3NEJ4N5-Db8Ab22W.js +1 -0
- ksadk/studio/static/assets/chunk-OSK3NFVY-M2m6G3j4.js +10 -0
- ksadk/studio/static/assets/chunk-P2QGCYS3-DezaQxiK.js +1 -0
- ksadk/studio/static/assets/chunk-POPQ4Y6H-DOpufJ3t.js +1 -0
- ksadk/studio/static/assets/chunk-PWAF6VOD-CfLb1gSc.js +1 -0
- ksadk/studio/static/assets/chunk-SHT3W25Y-DAyIVp5H.js +168 -0
- ksadk/studio/static/assets/chunk-SVP7TREG-DulomOrS.js +88 -0
- ksadk/studio/static/assets/chunk-TICWLB2K-bHJYoflj.js +206 -0
- ksadk/studio/static/assets/chunk-XXDRQBXY-7PcdR2B1.js +1 -0
- ksadk/studio/static/assets/chunk-Y2CYZVJY-DsF7k-Jl.js +1 -0
- ksadk/studio/static/assets/classDiagram-ZZMXUADV-D_bW8JjA.js +1 -0
- ksadk/studio/static/assets/classDiagram-v2-VYDZK3BY-D_bW8JjA.js +1 -0
- ksadk/studio/static/assets/cose-bilkent-JH36ORCC-snL88wkX.js +1 -0
- ksadk/studio/static/assets/cynefin-OW5HDTMX-Bd1YhRo1.js +1 -0
- ksadk/studio/static/assets/cynefinDiagram-5FMLGOSQ-BBrIG_mI.js +62 -0
- ksadk/studio/static/assets/cytoscape.esm-CGd-uY3x.js +321 -0
- ksadk/studio/static/assets/dagre-GXQ25YYZ-DtF1nGdY.js +4 -0
- ksadk/studio/static/assets/dagre-PrKaheQc.js +1 -0
- ksadk/studio/static/assets/defaultLocale-BFoDCU3G.js +1 -0
- ksadk/studio/static/assets/diagram-S7CK7UJ4-0BZ98mya.js +30 -0
- ksadk/studio/static/assets/diagram-UQ7AKVKN-6mLKEo6L.js +41 -0
- ksadk/studio/static/assets/diagram-VSXAHHWV-CJBIaiZ2.js +3 -0
- ksadk/studio/static/assets/diagram-VX7I27RA-BohLEE1C.js +24 -0
- ksadk/studio/static/assets/diagram-Z3DM3KII-D8KIGonG.js +24 -0
- ksadk/studio/static/assets/dist-v5Q1xZ2K.js +1 -0
- ksadk/studio/static/assets/ebnfDiagram-PWID7BFC-C99HU61t.js +1 -0
- ksadk/studio/static/assets/erDiagram-RLTQ6QDP-DLGry2Ap.js +99 -0
- ksadk/studio/static/assets/eventmodeling-NTZA5JFV-B1_5Ac8j.js +1 -0
- ksadk/studio/static/assets/flowDiagram-HODETNUW-DD5hmicn.js +1 -0
- ksadk/studio/static/assets/ganttDiagram-EL5Y4UJY-BPJrVLSG.js +292 -0
- ksadk/studio/static/assets/gitGraph-4MIJSDKK-Cy_ZQBGi.js +1 -0
- ksadk/studio/static/assets/gitGraphDiagram-WWUBYQGX-CZCUz4MT.js +106 -0
- ksadk/studio/static/assets/graphlib-DS17s2tU.js +1 -0
- ksadk/studio/static/assets/index-CeHL9ARV.css +2 -0
- ksadk/studio/static/assets/index-D9QEcVpL.js +320 -0
- ksadk/studio/static/assets/info-A6RAGUB7-DBzDQB_I.js +1 -0
- ksadk/studio/static/assets/infoDiagram-27XIBGKW-B-sq07Hi.js +2 -0
- ksadk/studio/static/assets/init-C-OQMol4.js +1 -0
- ksadk/studio/static/assets/ishikawaDiagram-5VMMS53U-CljI2wyf.js +70 -0
- ksadk/studio/static/assets/journeyDiagram-3NMN7TZE-D50Fo2sL.js +139 -0
- ksadk/studio/static/assets/kanban-definition-UXKFOSKX-DimfOTam.js +89 -0
- ksadk/studio/static/assets/katex-DhON-x74.js +257 -0
- ksadk/studio/static/assets/line-CX5BOOUP.js +1 -0
- ksadk/studio/static/assets/linear-BCxN9JLv.js +1 -0
- ksadk/studio/static/assets/mermaid-parser.core-BdCz8fkS.js +7 -0
- ksadk/studio/static/assets/mindmap-definition-YA3MSWOX-Bizzqy5R.js +96 -0
- ksadk/studio/static/assets/ordinal-BDEzSJ7C.js +1 -0
- ksadk/studio/static/assets/packet-AYTQ26CC-gPln-_kG.js +1 -0
- ksadk/studio/static/assets/path-fybaL0A-.js +1 -0
- ksadk/studio/static/assets/pegDiagram-XKGWAZYB-Dy3fB-gW.js +1 -0
- ksadk/studio/static/assets/pie-WAS4IAKB-qZdHMr7B.js +1 -0
- ksadk/studio/static/assets/pieDiagram-E7YTZNPT-B9mrFSDF.js +39 -0
- ksadk/studio/static/assets/quadrantDiagram-AXDQQJYC-NzUfCbMR.js +7 -0
- ksadk/studio/static/assets/radar-RG4KPBEZ-BZlnaea9.js +1 -0
- ksadk/studio/static/assets/railroad-74A4TZTK-Ce3__H9c.js +1 -0
- ksadk/studio/static/assets/railroad-abnf-HS5TGJTU-DqQn7EzD.js +1 -0
- ksadk/studio/static/assets/railroad-ebnf-LZEXJU2U-B55kCA8F.js +1 -0
- ksadk/studio/static/assets/railroad-peg-WCYAUIDC-DfQnvkHd.js +1 -0
- ksadk/studio/static/assets/railroadDiagram-O6MQD6OU-DnhMjZCk.js +1 -0
- ksadk/studio/static/assets/requirementDiagram-BXWQKSXE-BF3d103U.js +84 -0
- ksadk/studio/static/assets/rolldown-runtime-Dy4uBu1J-DK3Fl9T5.js +1 -0
- ksadk/studio/static/assets/rough.esm-Dy-Kn_BL.js +1 -0
- ksadk/studio/static/assets/sankeyDiagram-P5KCCOFB-Bo-JTwt0.js +40 -0
- ksadk/studio/static/assets/sequenceDiagram-WJ2MYXX4-Dh4wZtUm.js +162 -0
- ksadk/studio/static/assets/sizeCapture-INFHLROL-B0uUizjq.js +1 -0
- ksadk/studio/static/assets/src-SFn9St9H.js +1 -0
- ksadk/studio/static/assets/stateDiagram-D77RDMKH-DH774G6d.js +1 -0
- ksadk/studio/static/assets/stateDiagram-v2-MP3YSRHH-DZvVWPBo.js +1 -0
- ksadk/studio/static/assets/swimlanes-42K2YHIH-Bl13OvTX.js +1 -0
- ksadk/studio/static/assets/swimlanesDiagram-VR7AAH4N-BnFOTALJ.js +8 -0
- ksadk/studio/static/assets/timeline-definition-24CTP7MA-DxmSSjRB.js +120 -0
- ksadk/studio/static/assets/treeView-Q6P3EWNA-D5Nn9Swz.js +1 -0
- ksadk/studio/static/assets/treemap-WGGIJYW6-CgHgnQhE.js +1 -0
- ksadk/studio/static/assets/vennDiagram-4TSXK5OY-B9QEXcJq.js +34 -0
- ksadk/studio/static/assets/wardley-WFR3VGLG-DXrK2RRY.js +1 -0
- ksadk/studio/static/assets/wardleyDiagram-VM6X3IG4-Ba1AOWoe.js +78 -0
- ksadk/studio/static/assets/xychartDiagram-S5SC5T6Z-Cr5pt5Y-.js +7 -0
- ksadk/studio/static/index.html +2 -2
- ksadk/studio/validator.py +1 -1
- ksadk/studio/workspace.py +1 -0
- ksadk/version.py +1 -1
- ksadk_runtime_common/workspace_files/path_utils.py +41 -0
- agentengine_sdk_python-0.8.2.dist-info/RECORD +0 -778
- ksadk/server/static/assets/architecture-7GRP2DOG-DjKratdf.js +0 -1
- ksadk/server/static/assets/channel-4cQHKtx1.js +0 -1
- ksadk/server/static/assets/chunk-2Q5K7J3B-DmgWkESh.js +0 -1
- ksadk/server/static/assets/classDiagram-DTDB5LWJ-DLFd9Xi0.js +0 -1
- ksadk/server/static/assets/classDiagram-v2-JRS7N3AN-DLFd9Xi0.js +0 -1
- ksadk/server/static/assets/cynefin-OW5HDTMX-DjEM48Qp.js +0 -1
- ksadk/server/static/assets/eventmodeling-NTZA5JFV-CMgMaJrC.js +0 -1
- ksadk/server/static/assets/flowDiagram-A5DVABFB-BBKL0x3P.js +0 -1
- ksadk/server/static/assets/gitGraph-4MIJSDKK-Dw63mrhw.js +0 -1
- ksadk/server/static/assets/index-8ipRcQ-M.js +0 -240
- ksadk/server/static/assets/index-ByFCqjlh.css +0 -2
- ksadk/server/static/assets/info-A6RAGUB7-B6iAblII.js +0 -1
- ksadk/server/static/assets/packet-AYTQ26CC-BOYAipuq.js +0 -1
- ksadk/server/static/assets/pie-WAS4IAKB-Ctq0Kbku.js +0 -1
- ksadk/server/static/assets/radar-RG4KPBEZ-DN0-ul_0.js +0 -1
- ksadk/server/static/assets/railroad-74A4TZTK-C6cC_to0.js +0 -1
- ksadk/server/static/assets/railroad-abnf-HS5TGJTU-BimjIuRc.js +0 -1
- ksadk/server/static/assets/railroad-ebnf-LZEXJU2U-CvY65ABq.js +0 -1
- ksadk/server/static/assets/railroad-peg-WCYAUIDC-D72Iq_Tv.js +0 -1
- ksadk/server/static/assets/stateDiagram-v2-4QOOHH4V-BgQY03nz.js +0 -1
- ksadk/server/static/assets/swimlanesDiagram-VK2B7HYN-DLVw3q5Q.js +0 -8
- ksadk/server/static/assets/treeView-Q6P3EWNA-BMpO0wsB.js +0 -1
- ksadk/server/static/assets/treemap-WGGIJYW6-Et0aqzU3.js +0 -1
- ksadk/server/static/assets/wardley-WFR3VGLG-CbY0mhpl.js +0 -1
- ksadk/studio/static/assets/PrismRenderer-IYN-ffww.js +0 -3
- ksadk/studio/static/assets/index-BLpcdrgW.css +0 -1
- ksadk/studio/static/assets/index-CYekR2Xv.js +0 -260
- {agentengine_sdk_python-0.8.2.dist-info → agentengine_sdk_python-0.8.4.dist-info}/WHEEL +0 -0
- {agentengine_sdk_python-0.8.2.dist-info → agentengine_sdk_python-0.8.4.dist-info}/entry_points.txt +0 -0
- {agentengine_sdk_python-0.8.2.dist-info → agentengine_sdk_python-0.8.4.dist-info}/licenses/LICENSE +0 -0
- {agentengine_sdk_python-0.8.2.dist-info → agentengine_sdk_python-0.8.4.dist-info}/top_level.txt +0 -0
|
@@ -0,0 +1,231 @@
|
|
|
1
|
+
"""Local Codex Provider admission and Bundle references, separate from cloud YAML.
|
|
2
|
+
|
|
3
|
+
A local Provider Bundle binds the existing immutable Codex record; native
|
|
4
|
+
marketplace bytes remain governed by that record's original plugin lock.
|
|
5
|
+
"""
|
|
6
|
+
|
|
7
|
+
from __future__ import annotations
|
|
8
|
+
|
|
9
|
+
import hashlib
|
|
10
|
+
import json
|
|
11
|
+
from typing import Any
|
|
12
|
+
|
|
13
|
+
from pydantic import Field
|
|
14
|
+
|
|
15
|
+
from ksadk.plugins.providers.codex_dsh import (
|
|
16
|
+
SHIPPED_CODEX_PROVIDER_ID,
|
|
17
|
+
SHIPPED_CODEX_PROVIDER_VERSION,
|
|
18
|
+
)
|
|
19
|
+
from ksadk.studio.contracts import ContractModel, RuntimeRef
|
|
20
|
+
from ksadk.studio.errors import StudioError
|
|
21
|
+
from ksadk.studio.resource_build_admission import (
|
|
22
|
+
admit_resource_build,
|
|
23
|
+
resource_build_required,
|
|
24
|
+
)
|
|
25
|
+
|
|
26
|
+
CODEX_PROVIDER_REF = f"plugin://{SHIPPED_CODEX_PROVIDER_ID}@{SHIPPED_CODEX_PROVIDER_VERSION}"
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
def _digest(value: Any) -> str:
|
|
30
|
+
return (
|
|
31
|
+
"sha256:"
|
|
32
|
+
+ hashlib.sha256(
|
|
33
|
+
json.dumps(
|
|
34
|
+
value,
|
|
35
|
+
sort_keys=True,
|
|
36
|
+
separators=(",", ":"),
|
|
37
|
+
ensure_ascii=False,
|
|
38
|
+
).encode()
|
|
39
|
+
).hexdigest()
|
|
40
|
+
)
|
|
41
|
+
|
|
42
|
+
|
|
43
|
+
class CodexProviderBuildReference(ContractModel):
|
|
44
|
+
provider_ref: str = Field(pattern=r"^plugin://io\.ksadk\.codex-provider@[^/]+$")
|
|
45
|
+
registration_digest: str = Field(pattern=r"^sha256:[0-9a-f]{64}$")
|
|
46
|
+
bundle_build_id: str = Field(pattern=r"^build_[0-9a-f]+$")
|
|
47
|
+
bundle_digest: str = Field(pattern=r"^sha256:[0-9a-f]{64}$")
|
|
48
|
+
|
|
49
|
+
@property
|
|
50
|
+
def digest(self) -> str:
|
|
51
|
+
return _digest(self.model_dump(by_alias=True))
|
|
52
|
+
|
|
53
|
+
|
|
54
|
+
class CodexProviderBuildManager:
|
|
55
|
+
def __init__(self, studio: Any):
|
|
56
|
+
self.studio = studio
|
|
57
|
+
|
|
58
|
+
def _registration_digest(self) -> str:
|
|
59
|
+
manifest = self.studio._active_provider_manifests.get(CODEX_PROVIDER_REF)
|
|
60
|
+
if manifest is None:
|
|
61
|
+
raise StudioError(
|
|
62
|
+
"AGENT_PROVIDER_NOT_REGISTERED",
|
|
63
|
+
"Codex Provider 未注册;请在插件中心安装并启用官方 Codex Provider,"
|
|
64
|
+
"确认 DSH 工具链可用后重试",
|
|
65
|
+
status_code=409,
|
|
66
|
+
)
|
|
67
|
+
return _digest(manifest.model_dump(by_alias=True, mode="json", exclude_none=True))
|
|
68
|
+
|
|
69
|
+
def prepare(
|
|
70
|
+
self,
|
|
71
|
+
snapshot,
|
|
72
|
+
model_profiles: dict,
|
|
73
|
+
model_profile_ids: list[str],
|
|
74
|
+
native_plugin_lock_digest: str | None,
|
|
75
|
+
) -> CodexProviderBuildReference:
|
|
76
|
+
registration_digest = self._registration_digest()
|
|
77
|
+
# The current Provider owns one native client connection per activation.
|
|
78
|
+
# Model names may vary, but a different endpoint/credential needs a new
|
|
79
|
+
# activation contract; never silently send it to the default connection.
|
|
80
|
+
connections = {
|
|
81
|
+
(
|
|
82
|
+
p.get("provider", "openai-compatible"),
|
|
83
|
+
p.get("endpointUrl"),
|
|
84
|
+
p.get("baseUrl"),
|
|
85
|
+
p.get("credentialRef"),
|
|
86
|
+
p.get("wireApi"),
|
|
87
|
+
)
|
|
88
|
+
for p in model_profiles.values()
|
|
89
|
+
}
|
|
90
|
+
missing_profiles = set(snapshot.manifest.allowed_models) - set(model_profiles)
|
|
91
|
+
if len(connections) > 1 or (model_profiles and missing_profiles):
|
|
92
|
+
raise StudioError(
|
|
93
|
+
"CODEX_PROVIDER_MODEL_CONNECTION_UNSUPPORTED",
|
|
94
|
+
"当前 Codex Provider Build 的模型必须具有完整且相同的连接快照;"
|
|
95
|
+
"请补齐模型配置,或拆分不同连接的 Agent",
|
|
96
|
+
status_code=422,
|
|
97
|
+
)
|
|
98
|
+
draft = self.studio.codex_agents._project(snapshot).model_copy(deep=True)
|
|
99
|
+
draft.spec.runtime = RuntimeRef(
|
|
100
|
+
type="plugin",
|
|
101
|
+
provider_ref=CODEX_PROVIDER_REF,
|
|
102
|
+
version=snapshot.manifest.runtime.version,
|
|
103
|
+
provider_config={
|
|
104
|
+
"studioManifestDigest": "sha256:" + snapshot.manifest_sha256,
|
|
105
|
+
"studioBuildFingerprint": _digest(
|
|
106
|
+
{
|
|
107
|
+
"manifest": snapshot.manifest_sha256,
|
|
108
|
+
"profiles": model_profiles,
|
|
109
|
+
"resourceIds": sorted(model_profile_ids),
|
|
110
|
+
"pluginLockDigest": native_plugin_lock_digest,
|
|
111
|
+
}
|
|
112
|
+
),
|
|
113
|
+
},
|
|
114
|
+
)
|
|
115
|
+
# This Bundle describes the Python AgentProvider. Codex-native marketplace
|
|
116
|
+
# selections stay in the manifest lock, while official DSH platform
|
|
117
|
+
# resources remain in this projected Draft and pass the same trusted
|
|
118
|
+
# resource admission used by framework runtimes.
|
|
119
|
+
draft.spec.bindings.plugins = [
|
|
120
|
+
binding
|
|
121
|
+
for binding in draft.spec.bindings.plugins
|
|
122
|
+
if binding.ecosystem == "dsh"
|
|
123
|
+
]
|
|
124
|
+
manifest = self.studio._active_provider_manifests[CODEX_PROVIDER_REF]
|
|
125
|
+
missing_permissions = sorted(
|
|
126
|
+
set(manifest.spec.permissions) - set(draft.spec.security.allowed_permissions)
|
|
127
|
+
)
|
|
128
|
+
if missing_permissions:
|
|
129
|
+
raise StudioError(
|
|
130
|
+
"AGENT_PROVIDER_PERMISSION_DENIED",
|
|
131
|
+
"请打开 Agent 编辑页,在 Codex 本地执行权限中确认 Provider 请求的权限并保存;"
|
|
132
|
+
"安装插件时的同意不代替 Agent 授权",
|
|
133
|
+
status_code=422,
|
|
134
|
+
field="spec.security.allowedPermissions",
|
|
135
|
+
details={"missingPermissions": missing_permissions},
|
|
136
|
+
)
|
|
137
|
+
composition = self.studio.plugin_compositions.compile(draft)
|
|
138
|
+
resource_build = None
|
|
139
|
+
if resource_build_required(draft):
|
|
140
|
+
resource_build = admit_resource_build(
|
|
141
|
+
draft,
|
|
142
|
+
authority=self.studio.resource_authority,
|
|
143
|
+
connections=self.studio.resource_connections,
|
|
144
|
+
dsh_profile=(
|
|
145
|
+
self.studio.resource_dsh_capabilities.capture_resource_build_snapshot()
|
|
146
|
+
),
|
|
147
|
+
)
|
|
148
|
+
built = self.studio.builder.build(
|
|
149
|
+
draft,
|
|
150
|
+
composition=composition,
|
|
151
|
+
resource_build=resource_build,
|
|
152
|
+
)
|
|
153
|
+
# Refuse a registration change during staging, before saving success.
|
|
154
|
+
if self._registration_digest() != registration_digest:
|
|
155
|
+
raise StudioError(
|
|
156
|
+
"CODEX_PROVIDER_CHANGED", "Provider 构建期间发生变更", status_code=409
|
|
157
|
+
)
|
|
158
|
+
return CodexProviderBuildReference(
|
|
159
|
+
provider_ref=CODEX_PROVIDER_REF,
|
|
160
|
+
registration_digest=registration_digest,
|
|
161
|
+
bundle_build_id=built.id,
|
|
162
|
+
bundle_digest=built.bundle_digest,
|
|
163
|
+
)
|
|
164
|
+
|
|
165
|
+
def bundle_root(self, record):
|
|
166
|
+
reference = record.provider_bundle
|
|
167
|
+
if reference is None:
|
|
168
|
+
return None
|
|
169
|
+
if reference.provider_ref != CODEX_PROVIDER_REF or (
|
|
170
|
+
reference.registration_digest != self._registration_digest()
|
|
171
|
+
):
|
|
172
|
+
raise StudioError(
|
|
173
|
+
"CODEX_PROVIDER_CHANGED", "Provider 注册已变更,请重新构建", status_code=409
|
|
174
|
+
)
|
|
175
|
+
try:
|
|
176
|
+
built = self.studio.builds.get(reference.bundle_build_id)
|
|
177
|
+
except StudioError as error:
|
|
178
|
+
raise StudioError(
|
|
179
|
+
"CODEX_PROVIDER_BUNDLE_UNAVAILABLE", "Provider Bundle 记录不可用,请重新构建",
|
|
180
|
+
status_code=409,
|
|
181
|
+
) from error
|
|
182
|
+
if built.agent_id != record.agent_name or built.bundle_digest != reference.bundle_digest:
|
|
183
|
+
raise StudioError(
|
|
184
|
+
"CODEX_PROVIDER_BUILD_MISMATCH", "Provider Bundle 与 Build 不一致", status_code=409
|
|
185
|
+
)
|
|
186
|
+
root = self.studio.plugin_runs._bundle_root(built)
|
|
187
|
+
bundle = self.studio.plugin_runs._resolve_bundle(root)
|
|
188
|
+
if (
|
|
189
|
+
bundle.bundle_digest != reference.bundle_digest
|
|
190
|
+
or (bundle.composition.profile.agent_provider.ref != reference.provider_ref)
|
|
191
|
+
or bundle.composition.profile.agent_provider.config.get("studioManifestDigest")
|
|
192
|
+
!= ("sha256:" + record.manifest_sha256)
|
|
193
|
+
or bundle.composition.profile.agent_provider.config.get("studioBuildFingerprint")
|
|
194
|
+
!= _digest(
|
|
195
|
+
{
|
|
196
|
+
"manifest": record.manifest_sha256,
|
|
197
|
+
"profiles": record.model_profiles,
|
|
198
|
+
"resourceIds": sorted(record.model_profile_ids or []),
|
|
199
|
+
"pluginLockDigest": record.plugin_lock_digest,
|
|
200
|
+
}
|
|
201
|
+
)
|
|
202
|
+
):
|
|
203
|
+
raise StudioError(
|
|
204
|
+
"CODEX_PROVIDER_BUILD_MISMATCH", "Provider Bundle 引用校验失败", status_code=409
|
|
205
|
+
)
|
|
206
|
+
return root
|
|
207
|
+
|
|
208
|
+
def native_launch(self, bundle):
|
|
209
|
+
"""Trusted host callback; no model arguments or serialized secrets accepted."""
|
|
210
|
+
marker = bundle.composition.profile.agent_provider.config.get("studioManifestDigest")
|
|
211
|
+
if marker is None:
|
|
212
|
+
return None
|
|
213
|
+
registration_digest = self._registration_digest()
|
|
214
|
+
matches = [
|
|
215
|
+
record
|
|
216
|
+
for record in self.studio.codex_builds.list()
|
|
217
|
+
if record.provider_bundle is not None
|
|
218
|
+
and record.provider_bundle.bundle_digest == bundle.bundle_digest
|
|
219
|
+
and record.provider_bundle.registration_digest == registration_digest
|
|
220
|
+
]
|
|
221
|
+
if len(matches) != 1:
|
|
222
|
+
raise StudioError(
|
|
223
|
+
"CODEX_PROVIDER_BUILD_MISMATCH",
|
|
224
|
+
"Provider Bundle 缺少唯一 Codex Build",
|
|
225
|
+
status_code=409,
|
|
226
|
+
)
|
|
227
|
+
record = matches[0]
|
|
228
|
+
self.bundle_root(record)
|
|
229
|
+
# Retain native bootstrap, credentials, exact build HOME and workspace
|
|
230
|
+
# from the existing resolver. No cloud schema or second launch policy.
|
|
231
|
+
return self.studio.codex_runs.resolve(record.id).launch_context
|
ksadk/studio/codex_run.py
CHANGED
|
@@ -2,19 +2,25 @@
|
|
|
2
2
|
|
|
3
3
|
from __future__ import annotations
|
|
4
4
|
|
|
5
|
+
import json
|
|
5
6
|
import os
|
|
6
7
|
import zipfile
|
|
7
8
|
from typing import Any, cast
|
|
9
|
+
from urllib.parse import urlparse
|
|
8
10
|
|
|
9
11
|
import yaml # type: ignore[import-untyped]
|
|
10
12
|
|
|
11
13
|
from ksadk.configs import ModelConfig
|
|
14
|
+
from ksadk.plugins.contracts import plugin_lock_digest
|
|
12
15
|
from ksadk.runtime import RuntimeLaunchContext
|
|
13
16
|
from ksadk.studio.codex_builder import CodexBuildRepository
|
|
17
|
+
from ksadk.studio.codex_credentials import restore_mcp_oauth_credentials
|
|
14
18
|
from ksadk.studio.codex_manifest import CodexAgentManifest, CodexManifestRepository
|
|
15
|
-
from ksadk.studio.
|
|
19
|
+
from ksadk.studio.codex_plugin_store import CodexPluginSnapshotStore
|
|
20
|
+
from ksadk.studio.contracts import Instructions, ModelSpec
|
|
16
21
|
from ksadk.studio.errors import StudioError
|
|
17
22
|
from ksadk.studio.run_service import StudioRunSpec
|
|
23
|
+
from ksadk.studio.soul import compose_system_instruction
|
|
18
24
|
from ksadk.studio.workspace import Workspace
|
|
19
25
|
from ksadk.tools.gateway import normalize_tool_approval_mode
|
|
20
26
|
|
|
@@ -31,6 +37,8 @@ class CodexRunSpecResolver:
|
|
|
31
37
|
credential_resolver: Any = None,
|
|
32
38
|
resource_catalog: Any = None,
|
|
33
39
|
draft_repository: Any = None,
|
|
40
|
+
plugin_snapshot_store: CodexPluginSnapshotStore | None = None,
|
|
41
|
+
provider_bundle_resolver: Any = None,
|
|
34
42
|
) -> None:
|
|
35
43
|
self.workspace = workspace
|
|
36
44
|
self.builds = build_repository or CodexBuildRepository(workspace)
|
|
@@ -38,6 +46,8 @@ class CodexRunSpecResolver:
|
|
|
38
46
|
self.credentials = credential_resolver
|
|
39
47
|
self.catalog = resource_catalog
|
|
40
48
|
self.drafts = draft_repository
|
|
49
|
+
self.plugin_snapshots = plugin_snapshot_store or CodexPluginSnapshotStore(workspace)
|
|
50
|
+
self.provider_bundle_resolver = provider_bundle_resolver
|
|
41
51
|
|
|
42
52
|
def resolve(
|
|
43
53
|
self,
|
|
@@ -48,6 +58,16 @@ class CodexRunSpecResolver:
|
|
|
48
58
|
approval_mode: str | None = None,
|
|
49
59
|
) -> StudioRunSpec:
|
|
50
60
|
build = self.builds.get(build_id)
|
|
61
|
+
provider_root = None
|
|
62
|
+
if build.local_execution == "provider":
|
|
63
|
+
if self.provider_bundle_resolver is None:
|
|
64
|
+
raise StudioError("CODEX_PROVIDER_REQUIRED", "此 Build 必须通过 Provider 运行",
|
|
65
|
+
status_code=409)
|
|
66
|
+
provider_root = self.provider_bundle_resolver(build)
|
|
67
|
+
if provider_root is None:
|
|
68
|
+
raise StudioError(
|
|
69
|
+
"CODEX_PROVIDER_REQUIRED", "Provider Bundle 不可用", status_code=409,
|
|
70
|
+
)
|
|
51
71
|
current = self.manifests.load(build.agent_name)
|
|
52
72
|
if build.manifest_sha256 != current.manifest_sha256:
|
|
53
73
|
raise StudioError(
|
|
@@ -60,6 +80,13 @@ class CodexRunSpecResolver:
|
|
|
60
80
|
},
|
|
61
81
|
)
|
|
62
82
|
manifest = self._load_build_manifest(build.artifact_path)
|
|
83
|
+
restore_mcp_oauth_credentials(
|
|
84
|
+
self.workspace.root,
|
|
85
|
+
build,
|
|
86
|
+
self.builds.list(),
|
|
87
|
+
manifest.mcp_servers or [],
|
|
88
|
+
)
|
|
89
|
+
plugin_bootstrap = self._plugin_bootstrap(build, manifest)
|
|
63
90
|
selected_model = self._select_model(manifest, model)
|
|
64
91
|
project_dir = self.workspace.root.resolve()
|
|
65
92
|
skills = self._skill_inputs(manifest)
|
|
@@ -71,15 +98,20 @@ class CodexRunSpecResolver:
|
|
|
71
98
|
approval_mode=approval_profile or None,
|
|
72
99
|
)
|
|
73
100
|
if sandbox == "workspace-write":
|
|
74
|
-
# workspace-write
|
|
101
|
+
# workspace-write 默认断网;原生搜索和 MCP 都需要显式放行网络。
|
|
75
102
|
codex_overrides = [*codex_overrides, "sandbox_workspace_write.network_access=true"]
|
|
76
103
|
launch_config: dict[str, Any] = {
|
|
104
|
+
"model": selected_model,
|
|
105
|
+
"models": list(manifest.allowed_models),
|
|
77
106
|
"sandbox_read_only": sandbox == "read-only",
|
|
78
107
|
"sandbox": sandbox,
|
|
79
108
|
"approval_mode": approval,
|
|
109
|
+
"codex_home_key": build.id,
|
|
80
110
|
}
|
|
81
111
|
if codex_overrides:
|
|
82
112
|
launch_config["codex_overrides"] = codex_overrides
|
|
113
|
+
if plugin_bootstrap is not None:
|
|
114
|
+
launch_config["codex_plugin_bootstrap"] = plugin_bootstrap
|
|
83
115
|
runtime_env = {
|
|
84
116
|
**self._resolve_model_env(build, manifest, selected_model),
|
|
85
117
|
**self._resolve_mcp_env(manifest),
|
|
@@ -87,18 +119,22 @@ class CodexRunSpecResolver:
|
|
|
87
119
|
if runtime_env:
|
|
88
120
|
launch_config["env"] = runtime_env
|
|
89
121
|
agent_task = str(manifest.task_prompt or "").strip()
|
|
122
|
+
agent_system = compose_system_instruction(
|
|
123
|
+
Instructions(system=manifest.prompt),
|
|
124
|
+
manifest.soul,
|
|
125
|
+
).system
|
|
90
126
|
# PCM 策略从不可变 Manifest 读取(方案 §5.1:Build 锁定后 sidecar 修改不影响旧 Build)
|
|
91
127
|
# manifest.context/memory 由 _manifest() 从 AgentSpec 写入,随 Build 进入 Artifact
|
|
92
128
|
resolved_context = manifest.context
|
|
93
129
|
resolved_memory = manifest.memory
|
|
94
|
-
base_instructions =
|
|
130
|
+
base_instructions = agent_system
|
|
95
131
|
if agent_task:
|
|
96
|
-
base_instructions = f"{
|
|
132
|
+
base_instructions = f"{agent_system}\n\n{agent_task}"
|
|
97
133
|
request_config: dict[str, Any] = {
|
|
98
134
|
# Codex 原生只接收 base_instructions,因此运行前合并;PCM 证据仍使用下面
|
|
99
135
|
# 两个独立来源生成 agent_identity / agent_policy 的分段 hash。
|
|
100
136
|
"base_instructions": base_instructions,
|
|
101
|
-
"agent_system":
|
|
137
|
+
"agent_system": agent_system,
|
|
102
138
|
"agent_task": agent_task,
|
|
103
139
|
"cwd": str(project_dir),
|
|
104
140
|
"skills": skills,
|
|
@@ -136,6 +172,13 @@ class CodexRunSpecResolver:
|
|
|
136
172
|
}
|
|
137
173
|
if approval_profile:
|
|
138
174
|
request_config["tool_approval_mode"] = approval_profile
|
|
175
|
+
if manifest.soul is not None:
|
|
176
|
+
request_config.update(
|
|
177
|
+
{
|
|
178
|
+
"soul_source": manifest.soul_source,
|
|
179
|
+
"soul_digest": manifest.soul_digest,
|
|
180
|
+
}
|
|
181
|
+
)
|
|
139
182
|
return StudioRunSpec(
|
|
140
183
|
launch_context=RuntimeLaunchContext(
|
|
141
184
|
runtime_type="codex",
|
|
@@ -147,8 +190,85 @@ class CodexRunSpecResolver:
|
|
|
147
190
|
model=selected_model,
|
|
148
191
|
request_config=request_config,
|
|
149
192
|
manifest_sha256=build.manifest_sha256,
|
|
193
|
+
plugin_bundle_root=provider_root,
|
|
150
194
|
)
|
|
151
195
|
|
|
196
|
+
def _plugin_bootstrap(
|
|
197
|
+
self,
|
|
198
|
+
build: Any,
|
|
199
|
+
manifest: CodexAgentManifest,
|
|
200
|
+
) -> dict[str, Any] | None:
|
|
201
|
+
# Only Codex-native bindings belong to the App Server bootstrap. DSH
|
|
202
|
+
# bindings are materialized by the Provider Bundle and intentionally do
|
|
203
|
+
# not have entries in the Codex plugin snapshot store.
|
|
204
|
+
bindings = [
|
|
205
|
+
item
|
|
206
|
+
for item in (manifest.plugins or [])
|
|
207
|
+
if item.enabled and item.ecosystem == "codex"
|
|
208
|
+
]
|
|
209
|
+
lock = getattr(build, "plugin_lock", None)
|
|
210
|
+
lock_digest = getattr(build, "plugin_lock_digest", None)
|
|
211
|
+
marketplace = getattr(build, "plugin_marketplace", None)
|
|
212
|
+
statuses = getattr(build, "plugin_runtime_status", None) or {}
|
|
213
|
+
if not bindings:
|
|
214
|
+
if lock is not None or lock_digest is not None or marketplace is not None:
|
|
215
|
+
raise StudioError(
|
|
216
|
+
"CODEX_PLUGIN_BUILD_INVALID",
|
|
217
|
+
"Codex Build 含有未绑定的插件锁信息",
|
|
218
|
+
status_code=409,
|
|
219
|
+
details={"buildId": build.id},
|
|
220
|
+
)
|
|
221
|
+
return None
|
|
222
|
+
if lock is None or lock_digest is None or marketplace is None:
|
|
223
|
+
raise StudioError(
|
|
224
|
+
"CODEX_PLUGIN_REBUILD_REQUIRED",
|
|
225
|
+
"Codex Build 缺少原生插件不可变快照,请重新构建",
|
|
226
|
+
status_code=409,
|
|
227
|
+
details={"buildId": build.id},
|
|
228
|
+
)
|
|
229
|
+
actual_lock_digest = plugin_lock_digest(lock)
|
|
230
|
+
if actual_lock_digest != lock_digest or marketplace.plugin_lock_digest != lock_digest:
|
|
231
|
+
raise StudioError(
|
|
232
|
+
"CODEX_PLUGIN_LOCK_DIGEST_MISMATCH",
|
|
233
|
+
"Codex Build 的 PluginLock 摘要不一致",
|
|
234
|
+
status_code=409,
|
|
235
|
+
details={
|
|
236
|
+
"buildId": build.id,
|
|
237
|
+
"expected": lock_digest,
|
|
238
|
+
"actual": actual_lock_digest,
|
|
239
|
+
},
|
|
240
|
+
)
|
|
241
|
+
for binding in bindings:
|
|
242
|
+
stored = self.plugin_snapshots.load(binding.snapshot_digest)
|
|
243
|
+
if stored.plugin_ref != binding.plugin_ref:
|
|
244
|
+
raise StudioError(
|
|
245
|
+
"CODEX_PLUGIN_BINDING_MISMATCH",
|
|
246
|
+
"Codex 插件绑定与不可变快照身份不一致",
|
|
247
|
+
status_code=409,
|
|
248
|
+
details={"pluginRef": binding.plugin_ref},
|
|
249
|
+
)
|
|
250
|
+
stored.select_components(binding.components)
|
|
251
|
+
status = statuses.get(binding.plugin_ref) or {}
|
|
252
|
+
if status.get("runnable") is False or any(
|
|
253
|
+
selector.startswith("hook:") for selector in binding.components
|
|
254
|
+
):
|
|
255
|
+
raise StudioError(
|
|
256
|
+
"CODEX_PLUGIN_HOOK_TRUST_UNAVAILABLE",
|
|
257
|
+
"Codex App Server 尚无可验证的 hook trust API;该绑定已安全阻断",
|
|
258
|
+
status_code=409,
|
|
259
|
+
details={
|
|
260
|
+
"pluginRef": binding.plugin_ref,
|
|
261
|
+
"hookTrust": status.get("hookTrust", "unsupported"),
|
|
262
|
+
},
|
|
263
|
+
)
|
|
264
|
+
root = self.plugin_snapshots.verify_marketplace(marketplace)
|
|
265
|
+
return {
|
|
266
|
+
"marketplace_path": str(root),
|
|
267
|
+
"marketplace_name": marketplace.marketplace_name,
|
|
268
|
+
"plugin_names": list(marketplace.plugin_names),
|
|
269
|
+
"snapshot_digest": marketplace.marketplace_digest,
|
|
270
|
+
}
|
|
271
|
+
|
|
152
272
|
def _resolve_model_env(
|
|
153
273
|
self,
|
|
154
274
|
build: Any,
|
|
@@ -172,12 +292,23 @@ class CodexRunSpecResolver:
|
|
|
172
292
|
if profile is not None
|
|
173
293
|
else ModelConfig().api_base.rstrip("/")
|
|
174
294
|
)
|
|
175
|
-
|
|
295
|
+
env = {
|
|
176
296
|
"OPENAI_API_KEY": credential,
|
|
177
297
|
"OPENAI_BASE_URL": base_url,
|
|
178
298
|
"OPENAI_API_BASE": base_url,
|
|
179
299
|
"OPENAI_MODEL_NAME": selected_model,
|
|
180
300
|
}
|
|
301
|
+
# A chat-only profile necessarily needs the Responses-to-Chat bridge.
|
|
302
|
+
# KSPMAS build snapshots created before wireApi was persisted have the
|
|
303
|
+
# same requirement. Route those known profiles directly so every fresh
|
|
304
|
+
# Studio process does not spend several seconds probing /models and two
|
|
305
|
+
# /responses payload dialects before the user's first turn.
|
|
306
|
+
if "KSADK_CODEX_USE_PROXY" not in os.environ and (
|
|
307
|
+
(profile is not None and profile.wire_api == "chat")
|
|
308
|
+
or self._is_known_chat_model_gateway(base_url)
|
|
309
|
+
):
|
|
310
|
+
env["KSADK_CODEX_USE_PROXY"] = "1"
|
|
311
|
+
return env
|
|
181
312
|
|
|
182
313
|
def _resolve_model_profile(
|
|
183
314
|
self,
|
|
@@ -236,19 +367,41 @@ class CodexRunSpecResolver:
|
|
|
236
367
|
return raw[: -len(suffix)]
|
|
237
368
|
return raw
|
|
238
369
|
|
|
370
|
+
@staticmethod
|
|
371
|
+
def _is_known_chat_model_gateway(base_url: str) -> bool:
|
|
372
|
+
host = (urlparse(base_url).hostname or "").lower()
|
|
373
|
+
return host == "kspmas.ksyun.com" or host.startswith("kspmas-internal.")
|
|
374
|
+
|
|
239
375
|
@staticmethod
|
|
240
376
|
def _mcp_overrides(manifest: CodexAgentManifest) -> list[str]:
|
|
241
377
|
"""Translate bound MCP servers into codex --config overrides."""
|
|
242
378
|
overrides: list[str] = []
|
|
243
379
|
for server in manifest.mcp_servers or []:
|
|
244
380
|
name = str(server.get("name") or "").strip()
|
|
381
|
+
transport = str(
|
|
382
|
+
server.get("transport") or ("http" if server.get("url") else "")
|
|
383
|
+
).lower()
|
|
245
384
|
url = str(server.get("url") or "").strip()
|
|
246
|
-
if not name
|
|
385
|
+
if not name:
|
|
247
386
|
continue
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
387
|
+
if transport == "stdio":
|
|
388
|
+
command = str(server.get("command") or "").strip()
|
|
389
|
+
if not command:
|
|
390
|
+
continue
|
|
391
|
+
args = [str(argument) for argument in (server.get("args") or [])]
|
|
392
|
+
overrides.append(f"mcp_servers.{name}.command={json.dumps(command)}")
|
|
393
|
+
overrides.append(f"mcp_servers.{name}.args={json.dumps(args)}")
|
|
394
|
+
env_refs = server.get("env_refs") or {}
|
|
395
|
+
if isinstance(env_refs, dict) and env_refs:
|
|
396
|
+
overrides.append(
|
|
397
|
+
f"mcp_servers.{name}.env_vars="
|
|
398
|
+
f"{json.dumps(sorted(str(key) for key in env_refs))}"
|
|
399
|
+
)
|
|
400
|
+
elif transport in {"http", "sse"} and url:
|
|
401
|
+
overrides.append(f"mcp_servers.{name}.url={url}")
|
|
402
|
+
env_key = str(server.get("env_key") or "").strip()
|
|
403
|
+
if env_key:
|
|
404
|
+
overrides.append(f"mcp_servers.{name}.bearer_token_env_var={env_key}")
|
|
252
405
|
return overrides
|
|
253
406
|
|
|
254
407
|
def _resolve_mcp_env(self, manifest: CodexAgentManifest) -> dict[str, str]:
|
|
@@ -260,10 +413,20 @@ class CodexRunSpecResolver:
|
|
|
260
413
|
"""
|
|
261
414
|
env: dict[str, str] = {}
|
|
262
415
|
for server in manifest.mcp_servers or []:
|
|
416
|
+
references: dict[str, str] = {}
|
|
263
417
|
env_key = str(server.get("env_key") or "").strip()
|
|
264
|
-
if
|
|
265
|
-
|
|
266
|
-
|
|
418
|
+
if env_key:
|
|
419
|
+
references[env_key] = f"env://{env_key}"
|
|
420
|
+
raw_references = server.get("env_refs") or {}
|
|
421
|
+
if isinstance(raw_references, dict):
|
|
422
|
+
references.update(
|
|
423
|
+
{
|
|
424
|
+
str(name).strip(): str(reference).strip()
|
|
425
|
+
for name, reference in raw_references.items()
|
|
426
|
+
if str(name).strip() and str(reference).strip()
|
|
427
|
+
}
|
|
428
|
+
)
|
|
429
|
+
if not references:
|
|
267
430
|
continue
|
|
268
431
|
resolver = self.credentials
|
|
269
432
|
if resolver is None:
|
|
@@ -271,19 +434,22 @@ class CodexRunSpecResolver:
|
|
|
271
434
|
|
|
272
435
|
resolver = CredentialResolver(self.workspace)
|
|
273
436
|
self.credentials = resolver
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
"
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
437
|
+
for name, reference in references.items():
|
|
438
|
+
if name in env:
|
|
439
|
+
continue
|
|
440
|
+
try:
|
|
441
|
+
env[name] = resolver.resolve(reference)
|
|
442
|
+
except Exception as exc:
|
|
443
|
+
raise StudioError(
|
|
444
|
+
"MCP_CREDENTIAL_MISSING",
|
|
445
|
+
f"MCP Server「{server.get('name')}」需要凭证 {name},"
|
|
446
|
+
"请先保存对应 Secret 引用",
|
|
447
|
+
status_code=422,
|
|
448
|
+
details={
|
|
449
|
+
"server": str(server.get("name") or ""),
|
|
450
|
+
"reference": reference,
|
|
451
|
+
},
|
|
452
|
+
) from exc
|
|
287
453
|
return env
|
|
288
454
|
|
|
289
455
|
@staticmethod
|
|
@@ -314,11 +480,16 @@ class CodexRunSpecResolver:
|
|
|
314
480
|
if approval_mode:
|
|
315
481
|
return approval_presets[normalize_tool_approval_mode(approval_mode)]
|
|
316
482
|
raw = (
|
|
317
|
-
(
|
|
483
|
+
(
|
|
484
|
+
override
|
|
485
|
+
or os.environ.get("KSADK_CODEX_SANDBOX")
|
|
486
|
+
or manifest.sandbox
|
|
487
|
+
or "workspace_write_auto"
|
|
488
|
+
)
|
|
318
489
|
.strip()
|
|
319
490
|
.lower()
|
|
320
491
|
)
|
|
321
|
-
return presets.get(raw, ("
|
|
492
|
+
return presets.get(raw, ("workspace-write", "auto_review"))
|
|
322
493
|
|
|
323
494
|
def _skill_inputs(self, manifest: CodexAgentManifest) -> list[dict[str, str]]:
|
|
324
495
|
"""Resolve bound skill resource ids to codex SkillInput wire dicts."""
|