agentengine-sdk-python 0.8.2__py3-none-any.whl → 0.8.4__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {agentengine_sdk_python-0.8.2.dist-info → agentengine_sdk_python-0.8.4.dist-info}/METADATA +22 -28
- agentengine_sdk_python-0.8.4.dist-info/RECORD +1070 -0
- ksadk/_build_provenance.json +1 -0
- ksadk/agui/_agent_helpers.py +4 -0
- ksadk/api/client.py +108 -91
- ksadk/builders/code_builder.py +36 -9
- ksadk/builders/framework_requirements.py +2 -1
- ksadk/builders/ks3_uploader.py +36 -7
- ksadk/builders/managed_runtime_builder.py +4 -0
- ksadk/cli/__init__.py +38 -3
- ksadk/cli/cmd_managed_runtime.py +13 -1
- ksadk/cli/cmd_plugin.py +662 -0
- ksadk/cli/cmd_web.py +2 -5
- ksadk/cli/runtime_bootstrap.py +23 -1
- ksadk/codex/client.py +424 -96
- ksadk/codex/projection.py +24 -0
- ksadk/codex/runtime.py +83 -283
- ksadk/common/auth.py +16 -10
- ksadk/configs/env_registry.py +59 -3
- ksadk/configs/settings.py +9 -0
- ksadk/context_engine/contributors.py +73 -8
- ksadk/conversations/__init__.py +19 -0
- ksadk/conversations/context.py +104 -24
- ksadk/conversations/contracts.py +266 -0
- ksadk/conversations/message_projection.py +154 -15
- ksadk/conversations/projector.py +614 -0
- ksadk/conversations/reducer.py +98 -0
- ksadk/conversations/runtime_invocation.py +5 -0
- ksadk/conversations/runtime_payloads.py +1 -0
- ksadk/conversations/runtime_preparation.py +30 -27
- ksadk/conversations/runtime_resume.py +50 -2
- ksadk/conversations/runtime_stream_events.py +5 -0
- ksadk/conversations/runtime_streaming.py +25 -7
- ksadk/deployment/env_forward.py +2 -2
- ksadk/deployment/providers/serverless.py +1 -1
- ksadk/events/_v1_compat/projection.py +2 -0
- ksadk/events/adapters/_codex_validators.py +18 -7
- ksadk/events/adapters/codex.py +190 -0
- ksadk/events/adapters/langgraph.py +15 -1
- ksadk/events/canonical_store.py +3 -1
- ksadk/events/projections.py +1 -1
- ksadk/harness/__init__.py +45 -35
- ksadk/harness/config.py +2 -2
- ksadk/harness/runtime.py +75 -16
- ksadk/harness/tools.py +38 -13
- ksadk/interaction/provider.py +1 -0
- ksadk/interaction/providers/langgraph.py +1 -0
- ksadk/kernel/bootstrap.py +28 -4
- ksadk/kernel/contract_fingerprints.py +5 -4
- ksadk/kernel/contracts.py +8 -0
- ksadk/kernel/control.py +1 -0
- ksadk/kernel/ingress.py +36 -2
- ksadk/kernel/memory_store.py +1 -0
- ksadk/kernel/postgres_store.py +1 -0
- ksadk/kernel/sqlite_store.py +28 -0
- ksadk/kernel/store.py +3 -0
- ksadk/kernel/worker.py +76 -10
- ksadk/knowledge_base/client.py +57 -27
- ksadk/mcp_runtime/__init__.py +12 -4
- ksadk/memory/adk/backends/sdk_ltm_backend.py +161 -41
- ksadk/memory/adk/resilient_session_service.py +25 -17
- ksadk/memory/adk/short_term_memory.py +26 -9
- ksadk/memory/models.py +7 -4
- ksadk/memory/provider_resolver.py +3 -0
- ksadk/memory/providers/local_sqlite.py +7 -0
- ksadk/model_proxy/server.py +10 -5
- ksadk/plugins/__init__.py +171 -0
- ksadk/plugins/artifacts.py +275 -0
- ksadk/plugins/bridges/__init__.py +47 -0
- ksadk/plugins/bridges/codex.py +659 -0
- ksadk/plugins/bridges/dsh.py +1300 -0
- ksadk/plugins/builtins.py +746 -0
- ksadk/plugins/bundle.py +246 -0
- ksadk/plugins/bundle_security.py +191 -0
- ksadk/plugins/codex_manifest.py +983 -0
- ksadk/plugins/composition.py +537 -0
- ksadk/plugins/context_contributor.py +437 -0
- ksadk/plugins/contracts.py +569 -0
- ksadk/plugins/delivery.py +153 -0
- ksadk/plugins/dsh_installation_digest.py +71 -0
- ksadk/plugins/dsh_toolchain.py +1024 -0
- ksadk/plugins/ecosystem_bridge.py +1105 -0
- ksadk/plugins/ecosystem_probe.py +191 -0
- ksadk/plugins/host.py +787 -0
- ksadk/plugins/kernel_adapter.py +205 -0
- ksadk/plugins/providers/__init__.py +108 -0
- ksadk/plugins/providers/bundles/dsh-knowledge/cordis.patch.yml +3 -0
- ksadk/plugins/providers/bundles/dsh-knowledge/index.mjs +53 -0
- ksadk/plugins/providers/bundles/dsh-knowledge/package.json +16 -0
- ksadk/plugins/providers/bundles/dsh-memory/cordis.patch.yml +3 -0
- ksadk/plugins/providers/bundles/dsh-memory/index.mjs +175 -0
- ksadk/plugins/providers/bundles/dsh-memory/package.json +16 -0
- ksadk/plugins/providers/bundles/dsh-platform-resources/client.mjs +166 -0
- ksadk/plugins/providers/bundles/dsh-platform-resources/cordis.patch.yml +3 -0
- ksadk/plugins/providers/bundles/dsh-platform-resources/index.mjs +9 -0
- ksadk/plugins/providers/bundles/dsh-platform-resources/package.json +12 -0
- ksadk/plugins/providers/bundles/dsh-skill-center/cordis.patch.yml +3 -0
- ksadk/plugins/providers/bundles/dsh-skill-center/index.mjs +125 -0
- ksadk/plugins/providers/bundles/dsh-skill-center/package.json +16 -0
- ksadk/plugins/providers/bundles/ksadk-codex/cordis.patch.yml +3 -0
- ksadk/plugins/providers/bundles/ksadk-codex/index.mjs +18 -0
- ksadk/plugins/providers/bundles/ksadk-codex/package.json +19 -0
- ksadk/plugins/providers/bundles/ksadk-dsh-capability-host/cordis.patch.yml +3 -0
- ksadk/plugins/providers/bundles/ksadk-dsh-capability-host/index.mjs +870 -0
- ksadk/plugins/providers/bundles/ksadk-dsh-capability-host/package.json +27 -0
- ksadk/plugins/providers/bundles/ksadk-dsh-studio/client.js +92 -0
- ksadk/plugins/providers/bundles/ksadk-dsh-studio/index.mjs +15 -0
- ksadk/plugins/providers/bundles/ksadk-dsh-studio/package.json +7 -0
- ksadk/plugins/providers/bundles/ksadk-harness/cordis.patch.yml +3 -0
- ksadk/plugins/providers/bundles/ksadk-harness/index.mjs +19 -0
- ksadk/plugins/providers/bundles/ksadk-harness/package.json +19 -0
- ksadk/plugins/providers/codex.py +988 -0
- ksadk/plugins/providers/codex_dsh.py +83 -0
- ksadk/plugins/providers/codex_native.py +368 -0
- ksadk/plugins/providers/codex_turn.py +301 -0
- ksadk/plugins/providers/dsh.py +951 -0
- ksadk/plugins/providers/dsh_capabilities.py +1389 -0
- ksadk/plugins/providers/dsh_descriptor_host.py +226 -0
- ksadk/plugins/providers/dsh_mcp.py +467 -0
- ksadk/plugins/providers/harness.py +632 -0
- ksadk/plugins/providers/harness_dsh.py +91 -0
- ksadk/plugins/providers/legacy.py +215 -0
- ksadk/plugins/providers/legacy_catalog.py +100 -0
- ksadk/plugins/providers/mcp_projection.py +150 -0
- ksadk/plugins/providers/platform_resources.py +657 -0
- ksadk/plugins/providers/shipped_dsh.py +370 -0
- ksadk/plugins/resolver.py +338 -0
- ksadk/plugins/subagent_providers/__init__.py +12 -0
- ksadk/plugins/subagent_providers/codex.py +443 -0
- ksadk/plugins/subagents.py +333 -0
- ksadk/resource_runtime/__init__.py +4 -0
- ksadk/resource_runtime/broker.py +616 -0
- ksadk/resource_runtime/build_artifacts.py +165 -0
- ksadk/resource_runtime/contracts.py +138 -0
- ksadk/resource_runtime/discovery_receipts.py +100 -0
- ksadk/resource_runtime/discovery_skills.py +172 -0
- ksadk/resource_runtime/errors.py +6 -0
- ksadk/resource_runtime/ipc.py +142 -0
- ksadk/resource_runtime/kernel_approval.py +165 -0
- ksadk/resource_runtime/knowledge.py +114 -0
- ksadk/resource_runtime/langgraph.py +94 -0
- ksadk/resource_runtime/leases.py +191 -0
- ksadk/resource_runtime/managed_projection.py +186 -0
- ksadk/resource_runtime/mcp_server.py +138 -0
- ksadk/resource_runtime/memory_provider.py +318 -0
- ksadk/resource_runtime/memory_receipts.py +34 -0
- ksadk/resource_runtime/operation_ledger.py +211 -0
- ksadk/resource_runtime/plugin_config.py +48 -0
- ksadk/resource_runtime/policy_authorization.py +54 -0
- ksadk/resource_runtime/process.py +110 -0
- ksadk/resource_runtime/skill_artifacts.py +153 -0
- ksadk/resource_runtime/skill_runtime.py +42 -0
- ksadk/resource_runtime/skill_workspace.py +118 -0
- ksadk/resource_runtime/skills.py +215 -0
- ksadk/resource_runtime/snapshots.py +180 -0
- ksadk/resource_runtime/socket_server.py +103 -0
- ksadk/resource_runtime/supervisor.py +380 -0
- ksadk/resource_runtime/worker.py +504 -0
- ksadk/runners/_langgraph_runner_streams.py +74 -6
- ksadk/runners/adk_runner.py +149 -11
- ksadk/runners/base_runner.py +29 -1
- ksadk/runners/langgraph_runner.py +475 -145
- ksadk/runtime/_runner_adapter/stream_mapping.py +193 -60
- ksadk/runtime/adapter.py +3 -0
- ksadk/runtime/conversation_execution.py +92 -16
- ksadk/runtime/executor.py +78 -2
- ksadk/runtime/factory.py +30 -200
- ksadk/runtime/framework_adapters.py +41 -0
- ksadk/runtime/preprocessing.py +10 -2
- ksadk/runtime/runner_adapter.py +78 -14
- ksadk/runtime_context.py +40 -2
- ksadk/sandbox/__init__.py +2 -1
- ksadk/sandbox/backends/e2b.py +52 -11
- ksadk/sandbox/backends/local_process.py +9 -0
- ksadk/sandbox/base.py +2 -0
- ksadk/sandbox/e2b_connection.py +66 -0
- ksadk/sandbox/factory.py +72 -0
- ksadk/scheduler/__init__.py +18 -0
- ksadk/scheduler/calendar.py +102 -0
- ksadk/scheduler/contracts.py +254 -0
- ksadk/scheduler/dispatcher.py +129 -0
- ksadk/scheduler/engine.py +416 -0
- ksadk/scheduler/sqlite_store.py +581 -0
- ksadk/server/composition.py +2 -0
- ksadk/server/factory.py +5 -0
- ksadk/server/persistence_capability.py +516 -0
- ksadk/server/routes/control.py +210 -46
- ksadk/server/routes/dependencies.py +15 -0
- ksadk/server/routes/models.py +47 -4
- ksadk/server/routes/projection.py +252 -12
- ksadk/server/routes/sessions.py +284 -107
- ksadk/server/routes/streaming.py +43 -9
- ksadk/server/static/assets/{ArtifactsPanel-DSU1sWD_.js → ArtifactsPanel-CGbWlMNh.js} +1 -1
- ksadk/server/static/assets/{CodeBlock-DOH6MVcn.js → CodeBlock-b4C7upmO.js} +3 -3
- ksadk/server/static/assets/{MathMessageMarkdown-BL8my1R2.js → MathMessageMarkdown-DbdW5A4_.js} +4 -4
- ksadk/server/static/assets/{MermaidBlock-Dz4IP-Tx.js → MermaidBlock-BEBN4Ksz.js} +6 -6
- ksadk/server/static/assets/{NativeTerminalPanel-DUrK0JpZ.js → NativeTerminalPanel-zvL-WpAn.js} +1 -1
- ksadk/server/static/assets/{abnfDiagram-VCTEODGH-g20pFzNV.js → abnfDiagram-VCTEODGH-BYafW7Za.js} +1 -1
- ksadk/server/static/assets/{arc-C4FzinUA.js → arc-bTohInsS.js} +1 -1
- ksadk/server/static/assets/architecture-7GRP2DOG-BW5UtSnx.js +1 -0
- ksadk/server/static/assets/{architectureDiagram-5GKGNRK7-DpIqL5h4.js → architectureDiagram-5GKGNRK7-Ch5Lbzsi.js} +1 -1
- ksadk/server/static/assets/{blockDiagram-NRAW4CY4-BjkljTNz.js → blockDiagram-NRAW4CY4-kqF4MDOG.js} +1 -1
- ksadk/server/static/assets/{c4Diagram-UCG6FXSJ-Dk_ieq2X.js → c4Diagram-UCG6FXSJ-8uSRIODv.js} +1 -1
- ksadk/server/static/assets/channel-CF5Up3hQ.js +1 -0
- ksadk/server/static/assets/chunk-2Q5K7J3B-KkXX47WI.js +1 -0
- ksadk/server/static/assets/{chunk-5VM5RSS4-BVHAchFb.js → chunk-5VM5RSS4-DkhehZDr.js} +1 -1
- ksadk/server/static/assets/{chunk-F27PBJKO-C-ipQzuS.js → chunk-F27PBJKO-BdXhtPe9.js} +1 -1
- ksadk/server/static/assets/{chunk-G27WJ6UU-C2EyJbIK.js → chunk-G27WJ6UU-DPTpvpwi.js} +1 -1
- ksadk/server/static/assets/{chunk-JWPE2WC7-vYvVJb_M.js → chunk-JWPE2WC7-Pqoh38el.js} +1 -1
- ksadk/server/static/assets/{chunk-LCL6LL3I-BcI6ysPT.js → chunk-LCL6LL3I-DeU00qC-.js} +1 -1
- ksadk/server/static/assets/{chunk-POPQ4Y6H-C030x_Z1.js → chunk-POPQ4Y6H-CzxScFkr.js} +1 -1
- ksadk/server/static/assets/{chunk-RHFEMEQ7-yyGpsz4n.js → chunk-RHFEMEQ7-DpqMx-ux.js} +1 -1
- ksadk/server/static/assets/{chunk-SVP7TREG-BLTlmMU7.js → chunk-SVP7TREG-C6t0SypQ.js} +1 -1
- ksadk/server/static/assets/{chunk-XXDRQBXY-C_32ArgP.js → chunk-XXDRQBXY-DVaeafZk.js} +1 -1
- ksadk/server/static/assets/classDiagram-DTDB5LWJ-Cz81acRQ.js +1 -0
- ksadk/server/static/assets/classDiagram-v2-JRS7N3AN-Cz81acRQ.js +1 -0
- ksadk/server/static/assets/{cose-bilkent-JH36ORCC-9YQYwdl0.js → cose-bilkent-JH36ORCC-Bf9D3tzJ.js} +1 -1
- ksadk/server/static/assets/cynefin-OW5HDTMX-DVWs8a2t.js +1 -0
- ksadk/server/static/assets/{cynefinDiagram-5FMLGOSQ-ErLF5N13.js → cynefinDiagram-5FMLGOSQ-B9cY3iTz.js} +1 -1
- ksadk/server/static/assets/{dagre-3AP2YEHR-DFiQF-6f.js → dagre-3AP2YEHR-CSwlx3CB.js} +1 -1
- ksadk/server/static/assets/{dagre-BuhGnRI1.js → dagre-UBpgon5q.js} +1 -1
- ksadk/server/static/assets/{diagram-S7CK7UJ4-Bt1v8-GC.js → diagram-S7CK7UJ4-C9akhN9a.js} +1 -1
- ksadk/server/static/assets/{diagram-UQ7AKVKN-DSCxJdBK.js → diagram-UQ7AKVKN-CgedhTPI.js} +1 -1
- ksadk/server/static/assets/{diagram-VSXAHHWV-DHfYwp_9.js → diagram-VSXAHHWV-Cjucz5BY.js} +1 -1
- ksadk/server/static/assets/{diagram-VX7I27RA-DdzD-4Le.js → diagram-VX7I27RA-Dd4Vleyn.js} +1 -1
- ksadk/server/static/assets/{diagram-Z3DM3KII-Du-nAJ9F.js → diagram-Z3DM3KII-CZ2jGtYW.js} +1 -1
- ksadk/server/static/assets/{dist-B7seoj3d.js → dist-B2_CVgKv.js} +1 -1
- ksadk/server/static/assets/{dist-CSh_DE14.js → dist-B3FR1SKK.js} +1 -1
- ksadk/server/static/assets/{dist-DUX-id_F.js → dist-BIr4DSRq.js} +1 -1
- ksadk/server/static/assets/{dist-C_wsv-Qd.js → dist-BgV_owcB.js} +1 -1
- ksadk/server/static/assets/{dist-W-TIVntx.js → dist-Bj730Ib4.js} +1 -1
- ksadk/server/static/assets/{dist-BytlxIDT.js → dist-BnaTiyzN.js} +1 -1
- ksadk/server/static/assets/{dist-CXYYBw3_.js → dist-C1NMAY5a.js} +1 -1
- ksadk/server/static/assets/{dist-dDdADKFA.js → dist-C5_ZAZsG.js} +1 -1
- ksadk/server/static/assets/{dist-BVDffZ0U.js → dist-CB9iJrvg.js} +1 -1
- ksadk/server/static/assets/{dist-Bf2M8m3N.js → dist-CFzsn6BG.js} +1 -1
- ksadk/server/static/assets/{dist-ngtN0DJB.js → dist-Cf125P_m.js} +1 -1
- ksadk/server/static/assets/{dist-BE7bu-DL.js → dist-ClYUxfeK.js} +1 -1
- ksadk/server/static/assets/{dist-DNp6rLRA.js → dist-DFD6Qa6T.js} +1 -1
- ksadk/server/static/assets/{dist-BX8z72IC.js → dist-DVCOWtha.js} +1 -1
- ksadk/server/static/assets/{dist-dydu68Fl.js → dist-D_ctSS2i.js} +1 -1
- ksadk/server/static/assets/{dist-ClxGviKw.js → dist-DiixqL0J.js} +1 -1
- ksadk/server/static/assets/{dist-BjU6y-A2.js → dist-DoVSwoDb.js} +1 -1
- ksadk/server/static/assets/{dist-Dq9gLD7L.js → dist-DvFK7p5S.js} +1 -1
- ksadk/server/static/assets/{dist-8hqcx0sU.js → dist-QfkEHOlb.js} +1 -1
- ksadk/server/static/assets/{dist-CttYUqzS.js → dist-btbmmX5O.js} +1 -1
- ksadk/server/static/assets/{dist-DmldrHd_.js → dist-fBO2v5Kt.js} +1 -1
- ksadk/server/static/assets/{dist-DnfXs8Vn.js → dist-ufY3F5p6.js} +1 -1
- ksadk/server/static/assets/{ebnfDiagram-PWID7BFC-Da9C9NO1.js → ebnfDiagram-PWID7BFC-Ci8NqqZu.js} +1 -1
- ksadk/server/static/assets/{erDiagram-SSCWMZ5O-EAGqqR79.js → erDiagram-SSCWMZ5O-CCIOhLZG.js} +1 -1
- ksadk/server/static/assets/eventmodeling-NTZA5JFV-CQqR2hg3.js +1 -0
- ksadk/server/static/assets/flowDiagram-A5DVABFB-DDRRbGPm.js +1 -0
- ksadk/server/static/assets/{ganttDiagram-EL5Y4UJY-DqJsKb59.js → ganttDiagram-EL5Y4UJY-Cp_r9Hb6.js} +1 -1
- ksadk/server/static/assets/gitGraph-4MIJSDKK-fgWEf7UD.js +1 -0
- ksadk/server/static/assets/{gitGraphDiagram-WWUBYQGX-B6g4dtDi.js → gitGraphDiagram-WWUBYQGX-Dlhc8Wr8.js} +1 -1
- ksadk/server/static/assets/index-DcTML1Up.css +2 -0
- ksadk/server/static/assets/index-Dh2XHqPK.js +244 -0
- ksadk/server/static/assets/info-A6RAGUB7-BUecLTdt.js +1 -0
- ksadk/server/static/assets/{infoDiagram-RXCK75RN-Djm_nbd5.js → infoDiagram-RXCK75RN-CO0rRTRA.js} +1 -1
- ksadk/server/static/assets/{ishikawaDiagram-5VMMS53U-DWya9SG2.js → ishikawaDiagram-5VMMS53U-CHiaedSS.js} +1 -1
- ksadk/server/static/assets/{journeyDiagram-EYS64GPL-DutxhSNI.js → journeyDiagram-EYS64GPL-CHcCIB09.js} +1 -1
- ksadk/server/static/assets/{kanban-definition-3QL26DDD-DJdOF8Fm.js → kanban-definition-3QL26DDD-CJ_ebBZf.js} +1 -1
- ksadk/server/static/assets/{katex-vFWytM5c.js → katex-B4weu383.js} +1 -1
- ksadk/server/static/assets/{linear-BHjG8b-J.js → linear-V-MgYHW1.js} +1 -1
- ksadk/server/static/assets/{mermaid-parser.core-KGSy4jWT.js → mermaid-parser.core-CBijEX_c.js} +2 -2
- ksadk/server/static/assets/{mindmap-definition-FBJOCRG2-9-HC88D4.js → mindmap-definition-FBJOCRG2-Bc-pQvpp.js} +1 -1
- ksadk/server/static/assets/packet-AYTQ26CC-BeW-btFv.js +1 -0
- ksadk/server/static/assets/{pegDiagram-XKGWAZYB-DrEZd4fD.js → pegDiagram-XKGWAZYB-D7genGLl.js} +1 -1
- ksadk/server/static/assets/pie-WAS4IAKB-X0xh4SaT.js +1 -0
- ksadk/server/static/assets/{pieDiagram-E7YTZNPT-DpjqOFFp.js → pieDiagram-E7YTZNPT-Bxj32zwD.js} +1 -1
- ksadk/server/static/assets/{quadrantDiagram-AXDQQJYC-BiNhgOXX.js → quadrantDiagram-AXDQQJYC-BURv2mGh.js} +1 -1
- ksadk/server/static/assets/radar-RG4KPBEZ-DzRMSqjd.js +1 -0
- ksadk/server/static/assets/railroad-74A4TZTK-Cc44icX-.js +1 -0
- ksadk/server/static/assets/railroad-abnf-HS5TGJTU-D6S4BdV-.js +1 -0
- ksadk/server/static/assets/railroad-ebnf-LZEXJU2U-vD3aVE2o.js +1 -0
- ksadk/server/static/assets/railroad-peg-WCYAUIDC-CYbW_b4T.js +1 -0
- ksadk/server/static/assets/{railroadDiagram-O6MQD6OU-_Y3Ojg6G.js → railroadDiagram-O6MQD6OU-CCsh3avW.js} +1 -1
- ksadk/server/static/assets/{requirementDiagram-EFPCY7ZU-DeCFdg9K.js → requirementDiagram-EFPCY7ZU-_FRRBKEd.js} +1 -1
- ksadk/server/static/assets/{sankeyDiagram-P5KCCOFB-CPH75rhw.js → sankeyDiagram-P5KCCOFB-C-gr2o9M.js} +1 -1
- ksadk/server/static/assets/{sequenceDiagram-WJ2MYXX4-OEpQQdr4.js → sequenceDiagram-WJ2MYXX4-D97NmfKg.js} +1 -1
- ksadk/server/static/assets/{sizeCapture-X5ZJPWSS-heUErzhI.js → sizeCapture-X5ZJPWSS-DjrPC5FX.js} +1 -1
- ksadk/server/static/assets/{stateDiagram-HBIQ2CUA-DvA3jSMB.js → stateDiagram-HBIQ2CUA-DzMNg1hh.js} +1 -1
- ksadk/server/static/assets/stateDiagram-v2-4QOOHH4V-BIcjKFhF.js +1 -0
- ksadk/server/static/assets/{swimlanes-XN3QIQJK-CR-dfN_t.js → swimlanes-XN3QIQJK-Cssf_CsU.js} +1 -1
- ksadk/server/static/assets/swimlanesDiagram-VK2B7HYN-tq3K3Ybl.js +8 -0
- ksadk/server/static/assets/{timeline-definition-24CTP7MA-DAVJf1TX.js → timeline-definition-24CTP7MA-BWTHzyS1.js} +1 -1
- ksadk/server/static/assets/treeView-Q6P3EWNA-DBXt3GdU.js +1 -0
- ksadk/server/static/assets/treemap-WGGIJYW6-DrCy4E_l.js +1 -0
- ksadk/server/static/assets/{vennDiagram-4TSXK5OY-DwM8eDkh.js → vennDiagram-4TSXK5OY-BSKgJsmR.js} +1 -1
- ksadk/server/static/assets/wardley-WFR3VGLG-CefhOliM.js +1 -0
- ksadk/server/static/assets/{wardleyDiagram-VM6X3IG4-DZL-Zz2t.js → wardleyDiagram-VM6X3IG4-eflHNoaZ.js} +1 -1
- ksadk/server/static/assets/{xychartDiagram-S5SC5T6Z-Dy6Yh_hu.js → xychartDiagram-S5SC5T6Z-eYqrQ-v4.js} +1 -1
- ksadk/server/static/index.html +2 -2
- ksadk/session_context.py +66 -0
- ksadk/sessions/__init__.py +11 -21
- ksadk/sessions/_local_service_sync.py +263 -1
- ksadk/sessions/base.py +176 -0
- ksadk/sessions/errors.py +4 -0
- ksadk/sessions/in_memory.py +309 -19
- ksadk/sessions/local_service.py +83 -1
- ksadk/sessions/persistence.py +275 -0
- ksadk/sessions/postgres_service.py +358 -0
- ksadk/sessions/resilience.py +8 -0
- ksadk/sessions/resilient.py +362 -4
- ksadk/sessions/topology.py +135 -0
- ksadk/skills/models.py +26 -4
- ksadk/skills/package_store.py +186 -38
- ksadk/skills/runtime/agent.py +31 -6
- ksadk/skills/runtime/artifact_delivery.py +139 -0
- ksadk/skills/runtime/backends/e2b.py +98 -6
- ksadk/skills/runtime/backends/local.py +73 -8
- ksadk/skills/runtime/base.py +3 -0
- ksadk/skills/runtime/executor.py +2 -0
- ksadk/skills/runtime/loader.py +10 -2
- ksadk/skills/runtime/pinned.py +114 -0
- ksadk/skills/runtime/request.py +31 -0
- ksadk/skills/service_client.py +211 -24
- ksadk/studio/agent_lifecycle.py +26 -20
- ksadk/studio/api.py +714 -90
- ksadk/studio/api_catalog_routes.py +23 -0
- ksadk/studio/api_contracts.py +34 -1
- ksadk/studio/api_plugin_routes.py +911 -0
- ksadk/studio/api_resource_connections.py +183 -0
- ksadk/studio/attachment_store.py +187 -0
- ksadk/studio/authoring.py +10 -4
- ksadk/studio/authoring_coordinator.py +31 -16
- ksadk/studio/builder.py +199 -43
- ksadk/studio/cloud.py +346 -104
- ksadk/studio/cloud_shared_web.py +565 -0
- ksadk/studio/codex_agent_service.py +140 -27
- ksadk/studio/codex_builder.py +294 -16
- ksadk/studio/codex_credentials.py +90 -0
- ksadk/studio/codex_manifest.py +51 -4
- ksadk/studio/codex_plugin_store.py +746 -0
- ksadk/studio/codex_provider_build.py +231 -0
- ksadk/studio/codex_run.py +200 -29
- ksadk/studio/compatibility_report.py +456 -0
- ksadk/studio/compiler.py +84 -15
- ksadk/studio/contracts.py +249 -4
- ksadk/studio/dsh_application.py +137 -0
- ksadk/studio/dsh_capability_service.py +1107 -0
- ksadk/studio/dsh_models.py +59 -0
- ksadk/studio/dsh_provider_registration.py +1075 -0
- ksadk/studio/event_store.py +54 -6
- ksadk/studio/framework_run.py +37 -4
- ksadk/studio/hosted_kernel.py +89 -14
- ksadk/studio/mcp_runtime.py +11 -3
- ksadk/studio/model_client.py +2 -2
- ksadk/studio/operations.py +12 -2
- ksadk/studio/plugin_composition.py +468 -0
- ksadk/studio/plugin_kernel_adapter.py +28 -0
- ksadk/studio/plugin_runtime.py +831 -0
- ksadk/studio/resource_authority.py +637 -0
- ksadk/studio/resource_binding_validation.py +77 -0
- ksadk/studio/resource_build_admission.py +196 -0
- ksadk/studio/resource_build_materializer.py +149 -0
- ksadk/studio/resource_catalog.py +149 -3
- ksadk/studio/resource_connections.py +220 -0
- ksadk/studio/run_service.py +1144 -96
- ksadk/studio/runtime_source.py +24 -8
- ksadk/studio/scheduler_assistant.py +317 -0
- ksadk/studio/scheduler_runtime.py +383 -0
- ksadk/studio/scheduler_service.py +214 -0
- ksadk/studio/service.py +1131 -95
- ksadk/studio/shared_web.py +610 -87
- ksadk/studio/soul.py +52 -0
- ksadk/studio/static/assets/CodeBlock-DCUUY0PL-BLjA7kbS.js +41 -0
- ksadk/studio/static/assets/KaTeX_AMS-Regular-BQhdFMY1.woff2 +0 -0
- ksadk/studio/static/assets/KaTeX_AMS-Regular-DMm9YOAa.woff +0 -0
- ksadk/studio/static/assets/KaTeX_AMS-Regular-DRggAlZN.ttf +0 -0
- ksadk/studio/static/assets/KaTeX_Caligraphic-Bold-ATXxdsX0.ttf +0 -0
- ksadk/studio/static/assets/KaTeX_Caligraphic-Bold-BEiXGLvX.woff +0 -0
- ksadk/studio/static/assets/KaTeX_Caligraphic-Bold-Dq_IR9rO.woff2 +0 -0
- ksadk/studio/static/assets/KaTeX_Caligraphic-Regular-CTRA-rTL.woff +0 -0
- ksadk/studio/static/assets/KaTeX_Caligraphic-Regular-Di6jR-x-.woff2 +0 -0
- ksadk/studio/static/assets/KaTeX_Caligraphic-Regular-wX97UBjC.ttf +0 -0
- ksadk/studio/static/assets/KaTeX_Fraktur-Bold-BdnERNNW.ttf +0 -0
- ksadk/studio/static/assets/KaTeX_Fraktur-Bold-BsDP51OF.woff +0 -0
- ksadk/studio/static/assets/KaTeX_Fraktur-Bold-CL6g_b3V.woff2 +0 -0
- ksadk/studio/static/assets/KaTeX_Fraktur-Regular-CB_wures.ttf +0 -0
- ksadk/studio/static/assets/KaTeX_Fraktur-Regular-CTYiF6lA.woff2 +0 -0
- ksadk/studio/static/assets/KaTeX_Fraktur-Regular-Dxdc4cR9.woff +0 -0
- ksadk/studio/static/assets/KaTeX_Main-Bold-Cx986IdX.woff2 +0 -0
- ksadk/studio/static/assets/KaTeX_Main-Bold-Jm3AIy58.woff +0 -0
- ksadk/studio/static/assets/KaTeX_Main-Bold-waoOVXN0.ttf +0 -0
- ksadk/studio/static/assets/KaTeX_Main-BoldItalic-DxDJ3AOS.woff2 +0 -0
- ksadk/studio/static/assets/KaTeX_Main-BoldItalic-DzxPMmG6.ttf +0 -0
- ksadk/studio/static/assets/KaTeX_Main-BoldItalic-SpSLRI95.woff +0 -0
- ksadk/studio/static/assets/KaTeX_Main-Italic-3WenGoN9.ttf +0 -0
- ksadk/studio/static/assets/KaTeX_Main-Italic-BMLOBm91.woff +0 -0
- ksadk/studio/static/assets/KaTeX_Main-Italic-NWA7e6Wa.woff2 +0 -0
- ksadk/studio/static/assets/KaTeX_Main-Regular-B22Nviop.woff2 +0 -0
- ksadk/studio/static/assets/KaTeX_Main-Regular-Dr94JaBh.woff +0 -0
- ksadk/studio/static/assets/KaTeX_Main-Regular-ypZvNtVU.ttf +0 -0
- ksadk/studio/static/assets/KaTeX_Math-BoldItalic-B3XSjfu4.ttf +0 -0
- ksadk/studio/static/assets/KaTeX_Math-BoldItalic-CZnvNsCZ.woff2 +0 -0
- ksadk/studio/static/assets/KaTeX_Math-BoldItalic-iY-2wyZ7.woff +0 -0
- ksadk/studio/static/assets/KaTeX_Math-Italic-DA0__PXp.woff +0 -0
- ksadk/studio/static/assets/KaTeX_Math-Italic-flOr_0UB.ttf +0 -0
- ksadk/studio/static/assets/KaTeX_Math-Italic-t53AETM-.woff2 +0 -0
- ksadk/studio/static/assets/KaTeX_SansSerif-Bold-CFMepnvq.ttf +0 -0
- ksadk/studio/static/assets/KaTeX_SansSerif-Bold-D1sUS0GD.woff2 +0 -0
- ksadk/studio/static/assets/KaTeX_SansSerif-Bold-DbIhKOiC.woff +0 -0
- ksadk/studio/static/assets/KaTeX_SansSerif-Italic-C3H0VqGB.woff2 +0 -0
- ksadk/studio/static/assets/KaTeX_SansSerif-Italic-DN2j7dab.woff +0 -0
- ksadk/studio/static/assets/KaTeX_SansSerif-Italic-YYjJ1zSn.ttf +0 -0
- ksadk/studio/static/assets/KaTeX_SansSerif-Regular-BNo7hRIc.ttf +0 -0
- ksadk/studio/static/assets/KaTeX_SansSerif-Regular-CS6fqUqJ.woff +0 -0
- ksadk/studio/static/assets/KaTeX_SansSerif-Regular-DDBCnlJ7.woff2 +0 -0
- ksadk/studio/static/assets/KaTeX_Script-Regular-C5JkGWo-.ttf +0 -0
- ksadk/studio/static/assets/KaTeX_Script-Regular-D3wIWfF6.woff2 +0 -0
- ksadk/studio/static/assets/KaTeX_Script-Regular-D5yQViql.woff +0 -0
- ksadk/studio/static/assets/KaTeX_Size1-Regular-C195tn64.woff +0 -0
- ksadk/studio/static/assets/KaTeX_Size1-Regular-Dbsnue_I.ttf +0 -0
- ksadk/studio/static/assets/KaTeX_Size1-Regular-mCD8mA8B.woff2 +0 -0
- ksadk/studio/static/assets/KaTeX_Size2-Regular-B7gKUWhC.ttf +0 -0
- ksadk/studio/static/assets/KaTeX_Size2-Regular-Dy4dx90m.woff2 +0 -0
- ksadk/studio/static/assets/KaTeX_Size2-Regular-oD1tc_U0.woff +0 -0
- ksadk/studio/static/assets/KaTeX_Size3-Regular-CTq5MqoE.woff +0 -0
- ksadk/studio/static/assets/KaTeX_Size3-Regular-DgpXs0kz.ttf +0 -0
- ksadk/studio/static/assets/KaTeX_Size4-Regular-BF-4gkZK.woff +0 -0
- ksadk/studio/static/assets/KaTeX_Size4-Regular-DWFBv043.ttf +0 -0
- ksadk/studio/static/assets/KaTeX_Size4-Regular-Dl5lxZxV.woff2 +0 -0
- ksadk/studio/static/assets/KaTeX_Typewriter-Regular-C0xS9mPB.woff +0 -0
- ksadk/studio/static/assets/KaTeX_Typewriter-Regular-CO6r4hn1.woff2 +0 -0
- ksadk/studio/static/assets/KaTeX_Typewriter-Regular-D3Ib7_Hf.ttf +0 -0
- ksadk/studio/static/assets/MathMessageMarkdown-CBcDrAw--BEOyPC3w.css +1 -0
- ksadk/studio/static/assets/MathMessageMarkdown-CBcDrAw--CUYIXwgI.js +8 -0
- ksadk/studio/static/assets/MermaidBlock-DBFTztfQ-BTYKWEbD.js +44 -0
- ksadk/studio/static/assets/PrismRenderer-wiXRHURw.js +3 -0
- ksadk/studio/static/assets/abnfDiagram-VCTEODGH-CLETGjKq.js +1 -0
- ksadk/studio/static/assets/arc-Pry-7G1_.js +1 -0
- ksadk/studio/static/assets/architecture-7GRP2DOG-hXMiO_AU.js +1 -0
- ksadk/studio/static/assets/architectureDiagram-5GKGNRK7-B5EQysk6.js +36 -0
- ksadk/studio/static/assets/array-BifhSqXX.js +1 -0
- ksadk/studio/static/assets/blockDiagram-I7D4REHJ-CFmPl1de.js +129 -0
- ksadk/studio/static/assets/c4Diagram-7LVT6UL2-BRrGu8qt.js +38 -0
- ksadk/studio/static/assets/channel-BqO-gtEw.js +1 -0
- ksadk/studio/static/assets/chunk-2Q5K7J3B-C1jixKkw.js +1 -0
- ksadk/studio/static/assets/chunk-4HAMMTFA-D220vUtq.js +62 -0
- ksadk/studio/static/assets/chunk-5VM5RSS4-ZNzvKenW.js +15 -0
- ksadk/studio/static/assets/chunk-75Z2AOVW-C8lLv_qc.js +2 -0
- ksadk/studio/static/assets/chunk-DU6HZSFF-C4DtVpCu.js +128 -0
- ksadk/studio/static/assets/chunk-F27PBJKO-Cpw14SNG.js +1 -0
- ksadk/studio/static/assets/chunk-FOHPRMQF-DHwB1DNv.js +161 -0
- ksadk/studio/static/assets/chunk-GMAD6QVW-DiQA-u2N.js +72 -0
- ksadk/studio/static/assets/chunk-GVQU2GXP-DUdNBUCi.js +1 -0
- ksadk/studio/static/assets/chunk-IMKFNOWR-BSlbjT_b.js +231 -0
- ksadk/studio/static/assets/chunk-JWPE2WC7-DVXcaiue.js +1 -0
- ksadk/studio/static/assets/chunk-L3NEJ4N5-Db8Ab22W.js +1 -0
- ksadk/studio/static/assets/chunk-OSK3NFVY-M2m6G3j4.js +10 -0
- ksadk/studio/static/assets/chunk-P2QGCYS3-DezaQxiK.js +1 -0
- ksadk/studio/static/assets/chunk-POPQ4Y6H-DOpufJ3t.js +1 -0
- ksadk/studio/static/assets/chunk-PWAF6VOD-CfLb1gSc.js +1 -0
- ksadk/studio/static/assets/chunk-SHT3W25Y-DAyIVp5H.js +168 -0
- ksadk/studio/static/assets/chunk-SVP7TREG-DulomOrS.js +88 -0
- ksadk/studio/static/assets/chunk-TICWLB2K-bHJYoflj.js +206 -0
- ksadk/studio/static/assets/chunk-XXDRQBXY-7PcdR2B1.js +1 -0
- ksadk/studio/static/assets/chunk-Y2CYZVJY-DsF7k-Jl.js +1 -0
- ksadk/studio/static/assets/classDiagram-ZZMXUADV-D_bW8JjA.js +1 -0
- ksadk/studio/static/assets/classDiagram-v2-VYDZK3BY-D_bW8JjA.js +1 -0
- ksadk/studio/static/assets/cose-bilkent-JH36ORCC-snL88wkX.js +1 -0
- ksadk/studio/static/assets/cynefin-OW5HDTMX-Bd1YhRo1.js +1 -0
- ksadk/studio/static/assets/cynefinDiagram-5FMLGOSQ-BBrIG_mI.js +62 -0
- ksadk/studio/static/assets/cytoscape.esm-CGd-uY3x.js +321 -0
- ksadk/studio/static/assets/dagre-GXQ25YYZ-DtF1nGdY.js +4 -0
- ksadk/studio/static/assets/dagre-PrKaheQc.js +1 -0
- ksadk/studio/static/assets/defaultLocale-BFoDCU3G.js +1 -0
- ksadk/studio/static/assets/diagram-S7CK7UJ4-0BZ98mya.js +30 -0
- ksadk/studio/static/assets/diagram-UQ7AKVKN-6mLKEo6L.js +41 -0
- ksadk/studio/static/assets/diagram-VSXAHHWV-CJBIaiZ2.js +3 -0
- ksadk/studio/static/assets/diagram-VX7I27RA-BohLEE1C.js +24 -0
- ksadk/studio/static/assets/diagram-Z3DM3KII-D8KIGonG.js +24 -0
- ksadk/studio/static/assets/dist-v5Q1xZ2K.js +1 -0
- ksadk/studio/static/assets/ebnfDiagram-PWID7BFC-C99HU61t.js +1 -0
- ksadk/studio/static/assets/erDiagram-RLTQ6QDP-DLGry2Ap.js +99 -0
- ksadk/studio/static/assets/eventmodeling-NTZA5JFV-B1_5Ac8j.js +1 -0
- ksadk/studio/static/assets/flowDiagram-HODETNUW-DD5hmicn.js +1 -0
- ksadk/studio/static/assets/ganttDiagram-EL5Y4UJY-BPJrVLSG.js +292 -0
- ksadk/studio/static/assets/gitGraph-4MIJSDKK-Cy_ZQBGi.js +1 -0
- ksadk/studio/static/assets/gitGraphDiagram-WWUBYQGX-CZCUz4MT.js +106 -0
- ksadk/studio/static/assets/graphlib-DS17s2tU.js +1 -0
- ksadk/studio/static/assets/index-CeHL9ARV.css +2 -0
- ksadk/studio/static/assets/index-D9QEcVpL.js +320 -0
- ksadk/studio/static/assets/info-A6RAGUB7-DBzDQB_I.js +1 -0
- ksadk/studio/static/assets/infoDiagram-27XIBGKW-B-sq07Hi.js +2 -0
- ksadk/studio/static/assets/init-C-OQMol4.js +1 -0
- ksadk/studio/static/assets/ishikawaDiagram-5VMMS53U-CljI2wyf.js +70 -0
- ksadk/studio/static/assets/journeyDiagram-3NMN7TZE-D50Fo2sL.js +139 -0
- ksadk/studio/static/assets/kanban-definition-UXKFOSKX-DimfOTam.js +89 -0
- ksadk/studio/static/assets/katex-DhON-x74.js +257 -0
- ksadk/studio/static/assets/line-CX5BOOUP.js +1 -0
- ksadk/studio/static/assets/linear-BCxN9JLv.js +1 -0
- ksadk/studio/static/assets/mermaid-parser.core-BdCz8fkS.js +7 -0
- ksadk/studio/static/assets/mindmap-definition-YA3MSWOX-Bizzqy5R.js +96 -0
- ksadk/studio/static/assets/ordinal-BDEzSJ7C.js +1 -0
- ksadk/studio/static/assets/packet-AYTQ26CC-gPln-_kG.js +1 -0
- ksadk/studio/static/assets/path-fybaL0A-.js +1 -0
- ksadk/studio/static/assets/pegDiagram-XKGWAZYB-Dy3fB-gW.js +1 -0
- ksadk/studio/static/assets/pie-WAS4IAKB-qZdHMr7B.js +1 -0
- ksadk/studio/static/assets/pieDiagram-E7YTZNPT-B9mrFSDF.js +39 -0
- ksadk/studio/static/assets/quadrantDiagram-AXDQQJYC-NzUfCbMR.js +7 -0
- ksadk/studio/static/assets/radar-RG4KPBEZ-BZlnaea9.js +1 -0
- ksadk/studio/static/assets/railroad-74A4TZTK-Ce3__H9c.js +1 -0
- ksadk/studio/static/assets/railroad-abnf-HS5TGJTU-DqQn7EzD.js +1 -0
- ksadk/studio/static/assets/railroad-ebnf-LZEXJU2U-B55kCA8F.js +1 -0
- ksadk/studio/static/assets/railroad-peg-WCYAUIDC-DfQnvkHd.js +1 -0
- ksadk/studio/static/assets/railroadDiagram-O6MQD6OU-DnhMjZCk.js +1 -0
- ksadk/studio/static/assets/requirementDiagram-BXWQKSXE-BF3d103U.js +84 -0
- ksadk/studio/static/assets/rolldown-runtime-Dy4uBu1J-DK3Fl9T5.js +1 -0
- ksadk/studio/static/assets/rough.esm-Dy-Kn_BL.js +1 -0
- ksadk/studio/static/assets/sankeyDiagram-P5KCCOFB-Bo-JTwt0.js +40 -0
- ksadk/studio/static/assets/sequenceDiagram-WJ2MYXX4-Dh4wZtUm.js +162 -0
- ksadk/studio/static/assets/sizeCapture-INFHLROL-B0uUizjq.js +1 -0
- ksadk/studio/static/assets/src-SFn9St9H.js +1 -0
- ksadk/studio/static/assets/stateDiagram-D77RDMKH-DH774G6d.js +1 -0
- ksadk/studio/static/assets/stateDiagram-v2-MP3YSRHH-DZvVWPBo.js +1 -0
- ksadk/studio/static/assets/swimlanes-42K2YHIH-Bl13OvTX.js +1 -0
- ksadk/studio/static/assets/swimlanesDiagram-VR7AAH4N-BnFOTALJ.js +8 -0
- ksadk/studio/static/assets/timeline-definition-24CTP7MA-DxmSSjRB.js +120 -0
- ksadk/studio/static/assets/treeView-Q6P3EWNA-D5Nn9Swz.js +1 -0
- ksadk/studio/static/assets/treemap-WGGIJYW6-CgHgnQhE.js +1 -0
- ksadk/studio/static/assets/vennDiagram-4TSXK5OY-B9QEXcJq.js +34 -0
- ksadk/studio/static/assets/wardley-WFR3VGLG-DXrK2RRY.js +1 -0
- ksadk/studio/static/assets/wardleyDiagram-VM6X3IG4-Ba1AOWoe.js +78 -0
- ksadk/studio/static/assets/xychartDiagram-S5SC5T6Z-Cr5pt5Y-.js +7 -0
- ksadk/studio/static/index.html +2 -2
- ksadk/studio/validator.py +1 -1
- ksadk/studio/workspace.py +1 -0
- ksadk/version.py +1 -1
- ksadk_runtime_common/workspace_files/path_utils.py +41 -0
- agentengine_sdk_python-0.8.2.dist-info/RECORD +0 -778
- ksadk/server/static/assets/architecture-7GRP2DOG-DjKratdf.js +0 -1
- ksadk/server/static/assets/channel-4cQHKtx1.js +0 -1
- ksadk/server/static/assets/chunk-2Q5K7J3B-DmgWkESh.js +0 -1
- ksadk/server/static/assets/classDiagram-DTDB5LWJ-DLFd9Xi0.js +0 -1
- ksadk/server/static/assets/classDiagram-v2-JRS7N3AN-DLFd9Xi0.js +0 -1
- ksadk/server/static/assets/cynefin-OW5HDTMX-DjEM48Qp.js +0 -1
- ksadk/server/static/assets/eventmodeling-NTZA5JFV-CMgMaJrC.js +0 -1
- ksadk/server/static/assets/flowDiagram-A5DVABFB-BBKL0x3P.js +0 -1
- ksadk/server/static/assets/gitGraph-4MIJSDKK-Dw63mrhw.js +0 -1
- ksadk/server/static/assets/index-8ipRcQ-M.js +0 -240
- ksadk/server/static/assets/index-ByFCqjlh.css +0 -2
- ksadk/server/static/assets/info-A6RAGUB7-B6iAblII.js +0 -1
- ksadk/server/static/assets/packet-AYTQ26CC-BOYAipuq.js +0 -1
- ksadk/server/static/assets/pie-WAS4IAKB-Ctq0Kbku.js +0 -1
- ksadk/server/static/assets/radar-RG4KPBEZ-DN0-ul_0.js +0 -1
- ksadk/server/static/assets/railroad-74A4TZTK-C6cC_to0.js +0 -1
- ksadk/server/static/assets/railroad-abnf-HS5TGJTU-BimjIuRc.js +0 -1
- ksadk/server/static/assets/railroad-ebnf-LZEXJU2U-CvY65ABq.js +0 -1
- ksadk/server/static/assets/railroad-peg-WCYAUIDC-D72Iq_Tv.js +0 -1
- ksadk/server/static/assets/stateDiagram-v2-4QOOHH4V-BgQY03nz.js +0 -1
- ksadk/server/static/assets/swimlanesDiagram-VK2B7HYN-DLVw3q5Q.js +0 -8
- ksadk/server/static/assets/treeView-Q6P3EWNA-BMpO0wsB.js +0 -1
- ksadk/server/static/assets/treemap-WGGIJYW6-Et0aqzU3.js +0 -1
- ksadk/server/static/assets/wardley-WFR3VGLG-CbY0mhpl.js +0 -1
- ksadk/studio/static/assets/PrismRenderer-IYN-ffww.js +0 -3
- ksadk/studio/static/assets/index-BLpcdrgW.css +0 -1
- ksadk/studio/static/assets/index-CYekR2Xv.js +0 -260
- {agentengine_sdk_python-0.8.2.dist-info → agentengine_sdk_python-0.8.4.dist-info}/WHEEL +0 -0
- {agentengine_sdk_python-0.8.2.dist-info → agentengine_sdk_python-0.8.4.dist-info}/entry_points.txt +0 -0
- {agentengine_sdk_python-0.8.2.dist-info → agentengine_sdk_python-0.8.4.dist-info}/licenses/LICENSE +0 -0
- {agentengine_sdk_python-0.8.2.dist-info → agentengine_sdk_python-0.8.4.dist-info}/top_level.txt +0 -0
ksadk/kernel/bootstrap.py
CHANGED
|
@@ -39,7 +39,7 @@ from ksadk.kernel.contract_fingerprints import (
|
|
|
39
39
|
)
|
|
40
40
|
from ksadk.kernel.contracts import RuntimeCapabilityMatrix
|
|
41
41
|
from ksadk.kernel.control import AgentKernel, default_capability_matrix
|
|
42
|
-
from ksadk.kernel.errors import InvalidCommandError
|
|
42
|
+
from ksadk.kernel.errors import InvalidCommandError, StaleFenceError
|
|
43
43
|
from ksadk.kernel.recovery import RecoveryCoordinator
|
|
44
44
|
from ksadk.kernel.runtime_identity import runtime_identity
|
|
45
45
|
from ksadk.kernel.store import AgentKernelStore, now_utc
|
|
@@ -465,8 +465,25 @@ class AgentKernelRuntime:
|
|
|
465
465
|
lease,
|
|
466
466
|
session_id=session_id,
|
|
467
467
|
)
|
|
468
|
-
if result.outcome
|
|
468
|
+
if result.outcome in {"claimed", "completed"}:
|
|
469
469
|
progressed = True
|
|
470
|
+
elif result.outcome == "terminal_failure":
|
|
471
|
+
if isinstance(result.error, StaleFenceError):
|
|
472
|
+
# 当前 activation 已失去 fence,不能继续触碰该
|
|
473
|
+
# session,也不应把正常 takeover 误判为坏数据。
|
|
474
|
+
self._heartbeat_sessions.discard(session_id)
|
|
475
|
+
self._last_renewed.pop(session_id, None)
|
|
476
|
+
self.lease_heartbeat.forget(session_id)
|
|
477
|
+
continue
|
|
478
|
+
failure = result.error or RuntimeError(
|
|
479
|
+
"agent kernel command failed without an error detail"
|
|
480
|
+
)
|
|
481
|
+
if not await self._quarantine_session(
|
|
482
|
+
session_id,
|
|
483
|
+
failure,
|
|
484
|
+
context="command execution",
|
|
485
|
+
):
|
|
486
|
+
return
|
|
470
487
|
self._store_failures = 0
|
|
471
488
|
except asyncio.CancelledError:
|
|
472
489
|
raise
|
|
@@ -609,7 +626,13 @@ class AgentKernelRuntime:
|
|
|
609
626
|
return False
|
|
610
627
|
return True
|
|
611
628
|
|
|
612
|
-
async def _quarantine_session(
|
|
629
|
+
async def _quarantine_session(
|
|
630
|
+
self,
|
|
631
|
+
session_id: str,
|
|
632
|
+
exc: Exception,
|
|
633
|
+
*,
|
|
634
|
+
context: str = "takeover recovery",
|
|
635
|
+
) -> bool:
|
|
613
636
|
"""隔离一个恢复失败的 session;返回 False 表示已触发进程级降级。
|
|
614
637
|
|
|
615
638
|
被隔离的 session 不再被本 runtime claim / 恢复 / 续约,其 inbox
|
|
@@ -631,9 +654,10 @@ class AgentKernelRuntime:
|
|
|
631
654
|
self._last_renewed.pop(session_id, None)
|
|
632
655
|
self.lease_heartbeat.forget(session_id)
|
|
633
656
|
logger.warning(
|
|
634
|
-
"agent kernel session %s quarantined after
|
|
657
|
+
"agent kernel session %s quarantined after %s "
|
|
635
658
|
"failed: agent_instance_id=%s error=%s: %s",
|
|
636
659
|
session_id,
|
|
660
|
+
context,
|
|
637
661
|
self.config.agent_instance_id,
|
|
638
662
|
type(exc).__name__,
|
|
639
663
|
exc,
|
|
@@ -15,7 +15,7 @@ from typing import Any
|
|
|
15
15
|
|
|
16
16
|
AGENT_KERNEL_V1_CONTRACT_SET = "agent-kernel/v1"
|
|
17
17
|
AGENT_KERNEL_V1_AGGREGATE_DIGEST = (
|
|
18
|
-
"
|
|
18
|
+
"b610a25aae957306b9f84a2cc2c948b30d1ce6218585cfd2a91f96736b92d102"
|
|
19
19
|
)
|
|
20
20
|
|
|
21
21
|
|
|
@@ -23,12 +23,13 @@ def runtime_capability_matrix_wire_value(matrix: Any) -> dict[str, Any]:
|
|
|
23
23
|
"""Serialize the additive matrix without materializing absent v2 modes.
|
|
24
24
|
|
|
25
25
|
Pydantic includes optional ``None`` defaults in ``model_dump``. Omitting
|
|
26
|
-
those
|
|
27
|
-
capability digest for runtimes that do not publish
|
|
26
|
+
those additive top-level keys preserves the exact pre-extension wire value
|
|
27
|
+
and capability digest for runtimes that do not publish execution controls
|
|
28
|
+
or an interaction delivery mode.
|
|
28
29
|
"""
|
|
29
30
|
|
|
30
31
|
dump = matrix.model_dump(mode="json")
|
|
31
|
-
for key in ("goal", "loop", "plan"):
|
|
32
|
+
for key in ("interaction_mode", "goal", "loop", "plan"):
|
|
32
33
|
if dump.get(key) is None:
|
|
33
34
|
dump.pop(key, None)
|
|
34
35
|
return dump
|
ksadk/kernel/contracts.py
CHANGED
|
@@ -309,6 +309,14 @@ class RuntimeCapabilityMatrix(WireModel):
|
|
|
309
309
|
inject: RuntimeCapability
|
|
310
310
|
checkpoint: RuntimeCapability
|
|
311
311
|
durable_restore: RuntimeCapability
|
|
312
|
+
# Interaction delivery is deliberately separate from the verb matrix:
|
|
313
|
+
# ``submit_interaction`` alone does not tell a caller whether the reply
|
|
314
|
+
# reaches a live process, resumes a checkpoint, or has no native route.
|
|
315
|
+
# It remains optional so a v1 consumer can read records emitted before
|
|
316
|
+
# this additive declaration without inventing support.
|
|
317
|
+
interaction_mode: Literal[
|
|
318
|
+
"live_submit", "durable_resume", "unavailable"
|
|
319
|
+
] | None = None
|
|
312
320
|
# Runtime v2 execution controls are additive optional capabilities. Older
|
|
313
321
|
# runtimes omit them; a runtime must never infer support from UI presence.
|
|
314
322
|
# ``loop`` specifically means an externally bounded, eval-driven
|
ksadk/kernel/control.py
CHANGED
ksadk/kernel/ingress.py
CHANGED
|
@@ -94,9 +94,22 @@ def get_agent_kernel() -> Any | None:
|
|
|
94
94
|
|
|
95
95
|
|
|
96
96
|
def kernel_route_active() -> bool:
|
|
97
|
-
"""
|
|
97
|
+
"""Whether public compatibility routes may self-admit through the kernel.
|
|
98
|
+
|
|
99
|
+
A hosted Runtime accepts AgentControl commands only with a permit issued by
|
|
100
|
+
Server. The public ``/v1/responses`` / legacy ``RunAgent`` routes do not
|
|
101
|
+
carry that permit, so routing them through ``trusted_context`` would create
|
|
102
|
+
a process-local signature that the hosted verifier must reject. Keep those
|
|
103
|
+
authenticated compatibility routes on their established executor path;
|
|
104
|
+
Server continues to use the dedicated ``/agent-kernel/v1/*`` ingress, which
|
|
105
|
+
validates the Server-issued permit independently of this selector.
|
|
106
|
+
"""
|
|
98
107
|
|
|
99
|
-
return
|
|
108
|
+
return (
|
|
109
|
+
kernel_ingress_enabled()
|
|
110
|
+
and get_agent_kernel() is not None
|
|
111
|
+
and authority_mode() != _AUTHORITY_HOSTED
|
|
112
|
+
)
|
|
100
113
|
|
|
101
114
|
|
|
102
115
|
# ---------------------------------------------------------------------------
|
|
@@ -421,6 +434,26 @@ def map_studio_request(
|
|
|
421
434
|
)
|
|
422
435
|
|
|
423
436
|
|
|
437
|
+
def map_scheduler_request(
|
|
438
|
+
*,
|
|
439
|
+
session_id: str,
|
|
440
|
+
idempotency_key: str,
|
|
441
|
+
content: Any,
|
|
442
|
+
occurrence_id: str,
|
|
443
|
+
trusted: TrustedRuntimeContext,
|
|
444
|
+
) -> AgentControlCommand:
|
|
445
|
+
"""Scheduler occurrence -> enqueue with durable source and correlation IDs."""
|
|
446
|
+
|
|
447
|
+
return _command(
|
|
448
|
+
trusted=trusted,
|
|
449
|
+
command_type="enqueue",
|
|
450
|
+
session_id=session_id,
|
|
451
|
+
idempotency_key=idempotency_key,
|
|
452
|
+
payload={"content": content},
|
|
453
|
+
correlation_id=occurrence_id,
|
|
454
|
+
)
|
|
455
|
+
|
|
456
|
+
|
|
424
457
|
def map_control_request(
|
|
425
458
|
*,
|
|
426
459
|
command_type: str,
|
|
@@ -1091,6 +1124,7 @@ __all__ = [
|
|
|
1091
1124
|
"map_control_request",
|
|
1092
1125
|
"map_responses_request",
|
|
1093
1126
|
"map_run_request",
|
|
1127
|
+
"map_scheduler_request",
|
|
1094
1128
|
"map_studio_request",
|
|
1095
1129
|
"receipt_error_payload",
|
|
1096
1130
|
"receipt_http_status",
|
ksadk/kernel/memory_store.py
CHANGED
ksadk/kernel/postgres_store.py
CHANGED
ksadk/kernel/sqlite_store.py
CHANGED
|
@@ -1112,6 +1112,33 @@ class SQLiteAgentKernelStore:
|
|
|
1112
1112
|
)
|
|
1113
1113
|
return self._row_to_record(rows[0]) if rows else None
|
|
1114
1114
|
|
|
1115
|
+
async def get_terminal_receipt(
|
|
1116
|
+
self, interaction_id: str, *, tenant_id: str, agent_instance_id: str,
|
|
1117
|
+
session_id: str, run_id: str,
|
|
1118
|
+
) -> InteractionReceipt | None:
|
|
1119
|
+
"""Read the committed outcome inside a complete trusted scope.
|
|
1120
|
+
|
|
1121
|
+
Resolved alone does not mean approved. Pending/resolving records never
|
|
1122
|
+
yield an authorization receipt; callers must still match the request.
|
|
1123
|
+
"""
|
|
1124
|
+
if not all(isinstance(value, str) and value for value in (
|
|
1125
|
+
interaction_id, tenant_id, agent_instance_id, session_id, run_id
|
|
1126
|
+
)):
|
|
1127
|
+
raise InvalidCommandError("interaction receipt requires a complete trusted scope")
|
|
1128
|
+
row = await self._fetchone(
|
|
1129
|
+
await self._connect(),
|
|
1130
|
+
"SELECT * FROM kernel_interactions WHERE interaction_id=? AND tenant_id=?"
|
|
1131
|
+
" AND agent_instance_id=? AND session_id=? AND run_id=?",
|
|
1132
|
+
(interaction_id, tenant_id, agent_instance_id, session_id, run_id),
|
|
1133
|
+
)
|
|
1134
|
+
if row is None or not is_terminal(row["status"]):
|
|
1135
|
+
return None
|
|
1136
|
+
return InteractionReceipt(
|
|
1137
|
+
interaction_id=row["interaction_id"], revision=int(row["revision"]),
|
|
1138
|
+
status=row["status"], outcome=row["outcome"], event_id=row["event_id"],
|
|
1139
|
+
accepted_seq=row["accepted_seq"],
|
|
1140
|
+
)
|
|
1141
|
+
|
|
1115
1142
|
async def list_pending_interactions(
|
|
1116
1143
|
self, tenant_id: str, session_id: str
|
|
1117
1144
|
) -> list[InteractionRecord]:
|
|
@@ -1400,6 +1427,7 @@ class SQLiteAgentKernelStore:
|
|
|
1400
1427
|
"fencing_token": int(expected_fence),
|
|
1401
1428
|
},
|
|
1402
1429
|
run_id=run.run_id,
|
|
1430
|
+
causation_id=str(run.metadata.get("command_id") or "") or None,
|
|
1403
1431
|
),
|
|
1404
1432
|
activation,
|
|
1405
1433
|
expected_fence,
|
ksadk/kernel/store.py
CHANGED
|
@@ -54,6 +54,9 @@ def command_digest(command: AgentControlCommand) -> str:
|
|
|
54
54
|
canonical["source"] = source
|
|
55
55
|
|
|
56
56
|
payload = dict(canonical.get("payload") or {})
|
|
57
|
+
# Admission derives this immutable snapshot from the current session. A
|
|
58
|
+
# retry after a tag update must still resolve to the first accepted command.
|
|
59
|
+
payload.pop("session_context", None)
|
|
57
60
|
if command.command_type == "submit_interaction":
|
|
58
61
|
payload.pop("token_ref", None)
|
|
59
62
|
canonical["payload"] = payload
|
ksadk/kernel/worker.py
CHANGED
|
@@ -109,6 +109,7 @@ class WorkResult:
|
|
|
109
109
|
message_id: str | None = None
|
|
110
110
|
run_id: str | None = None
|
|
111
111
|
last_seq: int | None = None
|
|
112
|
+
error: Exception | None = None
|
|
112
113
|
|
|
113
114
|
|
|
114
115
|
class AgentKernelWorker:
|
|
@@ -294,8 +295,10 @@ class AgentKernelWorker:
|
|
|
294
295
|
)
|
|
295
296
|
await self._store.discard_claim(message_id, expected_fence=fence)
|
|
296
297
|
return WorkResult(outcome="completed", message_id=message_id)
|
|
297
|
-
except StaleFenceError:
|
|
298
|
-
return WorkResult(
|
|
298
|
+
except StaleFenceError as error:
|
|
299
|
+
return WorkResult(
|
|
300
|
+
outcome="terminal_failure", message_id=message_id, error=error
|
|
301
|
+
)
|
|
299
302
|
except AgentKernelError as error:
|
|
300
303
|
if error.code == RUNTIME_INTERACTION_UNAVAILABLE:
|
|
301
304
|
# typed rejection:provider 诚实声明无法原生送达回包,
|
|
@@ -316,16 +319,46 @@ class AgentKernelWorker:
|
|
|
316
319
|
await self._store.discard_claim(message_id, expected_fence=fence)
|
|
317
320
|
return WorkResult(outcome="completed", message_id=message_id)
|
|
318
321
|
if error.retryable:
|
|
319
|
-
return WorkResult(
|
|
320
|
-
|
|
321
|
-
|
|
322
|
+
return WorkResult(
|
|
323
|
+
outcome="retryable_failure", message_id=message_id, error=error
|
|
324
|
+
)
|
|
325
|
+
logger.error(
|
|
326
|
+
"agent kernel command failed permanently: "
|
|
327
|
+
"agent_instance_id=%s session_id=%s command_id=%s "
|
|
328
|
+
"command_type=%s error=%s: %s",
|
|
329
|
+
command.agent_instance_id,
|
|
330
|
+
command.session_id,
|
|
331
|
+
command.command_id,
|
|
332
|
+
command.command_type,
|
|
333
|
+
type(error).__name__,
|
|
334
|
+
error,
|
|
335
|
+
)
|
|
336
|
+
return WorkResult(
|
|
337
|
+
outcome="terminal_failure", message_id=message_id, error=error
|
|
338
|
+
)
|
|
339
|
+
except Exception as error:
|
|
322
340
|
# 未知异常绝不 ack 为成功:消息保持 claimed。
|
|
323
|
-
|
|
341
|
+
logger.exception(
|
|
342
|
+
"agent kernel command raised an unexpected exception: "
|
|
343
|
+
"agent_instance_id=%s session_id=%s command_id=%s "
|
|
344
|
+
"command_type=%s error=%s: %s",
|
|
345
|
+
command.agent_instance_id,
|
|
346
|
+
command.session_id,
|
|
347
|
+
command.command_id,
|
|
348
|
+
command.command_type,
|
|
349
|
+
type(error).__name__,
|
|
350
|
+
error,
|
|
351
|
+
)
|
|
352
|
+
return WorkResult(
|
|
353
|
+
outcome="terminal_failure", message_id=message_id, error=error
|
|
354
|
+
)
|
|
324
355
|
|
|
325
356
|
try:
|
|
326
357
|
await self._store.complete_claim(message_id, expected_fence=fence)
|
|
327
|
-
except StaleFenceError:
|
|
328
|
-
return WorkResult(
|
|
358
|
+
except StaleFenceError as error:
|
|
359
|
+
return WorkResult(
|
|
360
|
+
outcome="terminal_failure", message_id=message_id, error=error
|
|
361
|
+
)
|
|
329
362
|
return WorkResult(outcome="completed", message_id=message_id, run_id=run_id)
|
|
330
363
|
|
|
331
364
|
async def _message_id_for(self, command: AgentControlCommand) -> str:
|
|
@@ -356,6 +389,17 @@ class AgentKernelWorker:
|
|
|
356
389
|
agent_instance_id=command.agent_instance_id,
|
|
357
390
|
session_id=command.session_id,
|
|
358
391
|
state=RunState.PENDING,
|
|
392
|
+
# Keep the admitted control identity on the durable run. This is
|
|
393
|
+
# not user-supplied metadata: it is copied from the trusted
|
|
394
|
+
# command that the worker actually claimed. Consumers such as the
|
|
395
|
+
# local Scheduler can therefore reconcile a runtime terminal fact
|
|
396
|
+
# back to one occurrence without matching text or wall-clock time.
|
|
397
|
+
metadata={
|
|
398
|
+
"command_id": str(command.command_id),
|
|
399
|
+
"source_kind": command.source.kind,
|
|
400
|
+
"source_ref": command.source.ref,
|
|
401
|
+
"correlation_id": command.correlation_id,
|
|
402
|
+
},
|
|
359
403
|
)
|
|
360
404
|
created = await self._store.save_run_transition(pending, expected_fence=fence)
|
|
361
405
|
continuation_metadata = await self._session_continuation_metadata(command.session_id)
|
|
@@ -396,6 +440,11 @@ class AgentKernelWorker:
|
|
|
396
440
|
# durable run_id 优先传给 adapter;adapter 不认时以
|
|
397
441
|
# runtime_run_id 映射显式记录两个 ID 的对应关系。
|
|
398
442
|
metadata={
|
|
443
|
+
**(
|
|
444
|
+
{"session_context": command.payload["session_context"]}
|
|
445
|
+
if "session_context" in command.payload
|
|
446
|
+
else {}
|
|
447
|
+
),
|
|
399
448
|
"command_id": str(command.command_id),
|
|
400
449
|
"run_id": run_id,
|
|
401
450
|
**continuation_metadata,
|
|
@@ -735,7 +784,17 @@ class AgentKernelWorker:
|
|
|
735
784
|
)
|
|
736
785
|
else:
|
|
737
786
|
request_schema = dict(event.request.schema_)
|
|
738
|
-
|
|
787
|
+
# Codex maps the native JSON-RPC request id to a stable canonical
|
|
788
|
+
# interaction id for replay. The live client, however, indexes its
|
|
789
|
+
# pending callback by the original request id. Preserve that id as
|
|
790
|
+
# the provider target or SubmitInteraction can find the durable
|
|
791
|
+
# record but cannot wake the blocked Codex callback.
|
|
792
|
+
native_call_id = (
|
|
793
|
+
event.source.native_event_id
|
|
794
|
+
or event.source.native_item_id
|
|
795
|
+
or event.interaction_id
|
|
796
|
+
)
|
|
797
|
+
native_target = {"call_id": native_call_id}
|
|
739
798
|
for key in ("checkpoint_id", "thread_id"):
|
|
740
799
|
value = execution.handle.native_ref.get(key)
|
|
741
800
|
if value is not None:
|
|
@@ -801,7 +860,13 @@ class AgentKernelWorker:
|
|
|
801
860
|
kind=RESUME_TARGET_KINDS[target_dict["kind"]],
|
|
802
861
|
id=str(target_dict["id"]),
|
|
803
862
|
)
|
|
804
|
-
resumed = await adapter.resume(
|
|
863
|
+
resumed = await adapter.resume(
|
|
864
|
+
handle,
|
|
865
|
+
target,
|
|
866
|
+
AdapterResumePayload(
|
|
867
|
+
kind="free_text", session_context=command.payload.get("session_context")
|
|
868
|
+
),
|
|
869
|
+
)
|
|
805
870
|
execution = self._replace_handle(execution, resumed)
|
|
806
871
|
self._start_stream(
|
|
807
872
|
execution,
|
|
@@ -899,6 +964,7 @@ class AgentKernelWorker:
|
|
|
899
964
|
context = InteractionResolveContext(
|
|
900
965
|
adapter=execution.adapter,
|
|
901
966
|
handle=execution.handle,
|
|
967
|
+
session_context=command.payload.get("session_context"),
|
|
902
968
|
activation_id=activation.activation_id,
|
|
903
969
|
fencing_token=fence,
|
|
904
970
|
)
|
ksadk/knowledge_base/client.py
CHANGED
|
@@ -86,6 +86,8 @@ class KnowledgeBaseClient(BaseModel):
|
|
|
86
86
|
# KnowledgeBaseService.build_context 区分"后端吞错返空"与"真无结果",
|
|
87
87
|
# 避免错误伪装成"未找到"注入模型上下文。
|
|
88
88
|
last_error: str = ""
|
|
89
|
+
last_request_id: str = ""
|
|
90
|
+
last_http_status: int | None = None
|
|
89
91
|
|
|
90
92
|
_aicp_client: Any = None
|
|
91
93
|
|
|
@@ -140,9 +142,7 @@ class KnowledgeBaseClient(BaseModel):
|
|
|
140
142
|
"Ensure kingsoftcloud-sdk-python is installed and up to date."
|
|
141
143
|
)
|
|
142
144
|
|
|
143
|
-
cred = credential.Credential(
|
|
144
|
-
self.access_key, self.secret_key, self.session_token or None
|
|
145
|
-
)
|
|
145
|
+
cred = credential.Credential(self.access_key, self.secret_key, self.session_token or None)
|
|
146
146
|
|
|
147
147
|
http_profile = HttpProfile()
|
|
148
148
|
http_profile.endpoint = self.endpoint
|
|
@@ -153,17 +153,23 @@ class KnowledgeBaseClient(BaseModel):
|
|
|
153
153
|
client_profile = ClientProfile()
|
|
154
154
|
client_profile.httpProfile = http_profile
|
|
155
155
|
|
|
156
|
-
|
|
156
|
+
owner = self
|
|
157
|
+
|
|
158
|
+
class ObservedAicpClient(aicp_module.AicpClient):
|
|
159
|
+
def _check_status(self, response):
|
|
160
|
+
# The upstream SDK discards HTTP status when raising its generic
|
|
161
|
+
# ServerNetworkError. Capture only the status before delegation;
|
|
162
|
+
# never infer authorization from exception text/response content.
|
|
163
|
+
owner.last_http_status = response.status
|
|
164
|
+
return super()._check_status(response)
|
|
165
|
+
|
|
166
|
+
self._aicp_client = ObservedAicpClient(cred, self.region, profile=client_profile)
|
|
157
167
|
|
|
158
168
|
# 强制覆写 API 版本为 RetrieveKnowledge 所需的 2025-11-14
|
|
159
169
|
# SDK 的 _apiVersion 由导入的模块版本决定,可能不匹配
|
|
160
170
|
self._aicp_client._apiVersion = "2025-11-14"
|
|
161
171
|
|
|
162
|
-
logger.
|
|
163
|
-
f"KnowledgeBaseClient initialized: "
|
|
164
|
-
f"dataset_id={self.dataset_id}, region={self.region}, "
|
|
165
|
-
f"endpoint={self.endpoint}"
|
|
166
|
-
)
|
|
172
|
+
logger.debug("KnowledgeBaseClient initialized")
|
|
167
173
|
return self._aicp_client
|
|
168
174
|
|
|
169
175
|
def _build_params(self, query: str, top_k: Optional[int] = None) -> dict:
|
|
@@ -192,11 +198,41 @@ class KnowledgeBaseClient(BaseModel):
|
|
|
192
198
|
try:
|
|
193
199
|
data = json.loads(response) if isinstance(response, str) else response
|
|
194
200
|
except (json.JSONDecodeError, TypeError):
|
|
195
|
-
self.last_error =
|
|
196
|
-
logger.error(
|
|
201
|
+
self.last_error = "Invalid knowledge response JSON"
|
|
202
|
+
logger.error("Invalid knowledge response JSON")
|
|
203
|
+
return []
|
|
204
|
+
|
|
205
|
+
if not isinstance(data, dict):
|
|
206
|
+
self.last_error = "Knowledge response must be an object"
|
|
207
|
+
return []
|
|
208
|
+
metadata = data.get("ResponseMetadata") or {}
|
|
209
|
+
if not isinstance(metadata, dict):
|
|
210
|
+
self.last_error = "Invalid knowledge response metadata"
|
|
211
|
+
return []
|
|
212
|
+
request_id = data.get("RequestId") or metadata.get("RequestId")
|
|
213
|
+
self.last_request_id = (
|
|
214
|
+
request_id if isinstance(request_id, str) and len(request_id) <= 256 else ""
|
|
215
|
+
)
|
|
216
|
+
code = data.get("Code")
|
|
217
|
+
if "Code" in data:
|
|
218
|
+
valid_code = (
|
|
219
|
+
(type(code) is int and code in {0, 200})
|
|
220
|
+
or (type(code) is str and code in {"0", "200"})
|
|
221
|
+
)
|
|
222
|
+
if not valid_code:
|
|
223
|
+
self.last_error = "Knowledge service rejected the request"
|
|
224
|
+
return []
|
|
225
|
+
if data.get("Error") or metadata.get("Error"):
|
|
226
|
+
self.last_error = "Knowledge service rejected the request"
|
|
197
227
|
return []
|
|
198
228
|
|
|
199
|
-
|
|
229
|
+
if "Records" not in data:
|
|
230
|
+
self.last_error = "Knowledge response omitted records"
|
|
231
|
+
return []
|
|
232
|
+
records = data["Records"]
|
|
233
|
+
if not isinstance(records, list):
|
|
234
|
+
self.last_error = "Invalid knowledge records"
|
|
235
|
+
return []
|
|
200
236
|
results = []
|
|
201
237
|
|
|
202
238
|
for record in records:
|
|
@@ -228,24 +264,19 @@ class KnowledgeBaseClient(BaseModel):
|
|
|
228
264
|
Returns:
|
|
229
265
|
匹配的文档片段列表
|
|
230
266
|
"""
|
|
231
|
-
client = self._get_client()
|
|
232
|
-
params = self._build_params(query, top_k)
|
|
233
|
-
|
|
234
|
-
logger.info(
|
|
235
|
-
f"Searching knowledge base: dataset_id={self.dataset_id}, " f"query='{query[:50]}'"
|
|
236
|
-
)
|
|
237
|
-
|
|
238
267
|
self.last_error = ""
|
|
268
|
+
self.last_request_id = ""
|
|
269
|
+
self.last_http_status = None
|
|
239
270
|
try:
|
|
271
|
+
client = self._get_client()
|
|
272
|
+
params = self._build_params(query, top_k)
|
|
240
273
|
response = client.call("RetrieveKnowledge", params, options={"IsPostJson": True})
|
|
241
274
|
results = self._parse_response(response)
|
|
242
|
-
logger.
|
|
243
|
-
f"Knowledge base returned {len(results)} results " f"for query='{query[:50]}'"
|
|
244
|
-
)
|
|
275
|
+
logger.debug("Knowledge base returned %d results", len(results))
|
|
245
276
|
return results
|
|
246
277
|
except Exception as e:
|
|
247
278
|
self.last_error = str(e)
|
|
248
|
-
logger.error(
|
|
279
|
+
logger.error("Knowledge base search failed (%s)", type(e).__name__)
|
|
249
280
|
raise
|
|
250
281
|
|
|
251
282
|
@classmethod
|
|
@@ -261,7 +292,7 @@ class KnowledgeBaseClient(BaseModel):
|
|
|
261
292
|
dataset_id = os.environ.get("KSADK_KB_DATASET_ID", "")
|
|
262
293
|
if not dataset_id:
|
|
263
294
|
raise ValueError(
|
|
264
|
-
"KSADK_KB_DATASET_ID environment variable is required
|
|
295
|
+
"KSADK_KB_DATASET_ID environment variable is required to enable knowledge base."
|
|
265
296
|
)
|
|
266
297
|
|
|
267
298
|
access_key = (
|
|
@@ -275,9 +306,8 @@ class KnowledgeBaseClient(BaseModel):
|
|
|
275
306
|
or os.environ.get("KSYUN_SECRET_KEY")
|
|
276
307
|
or os.environ.get("KSYUN_SECRET_ACCESS_KEY", "")
|
|
277
308
|
)
|
|
278
|
-
session_token = (
|
|
279
|
-
|
|
280
|
-
or os.environ.get("KSYUN_SESSION_TOKEN", "")
|
|
309
|
+
session_token = os.environ.get("KSADK_KB_SESSION_TOKEN") or os.environ.get(
|
|
310
|
+
"KSYUN_SESSION_TOKEN", ""
|
|
281
311
|
)
|
|
282
312
|
|
|
283
313
|
score_threshold_str = os.environ.get("KSADK_KB_SCORE_THRESHOLD", "")
|
ksadk/mcp_runtime/__init__.py
CHANGED
|
@@ -3,11 +3,12 @@ from __future__ import annotations
|
|
|
3
3
|
import inspect
|
|
4
4
|
import json
|
|
5
5
|
import os
|
|
6
|
-
from dataclasses import dataclass
|
|
6
|
+
from dataclasses import dataclass, field
|
|
7
7
|
from typing import Any, Coroutine, Sequence, cast
|
|
8
8
|
from urllib.parse import urlparse
|
|
9
9
|
|
|
10
10
|
import httpx
|
|
11
|
+
from pydantic import Field
|
|
11
12
|
|
|
12
13
|
from ksadk.compat.adk_compat import (
|
|
13
14
|
CheckableMcpHttpClientFactory,
|
|
@@ -21,8 +22,8 @@ MCP_TOOLSET_KEY_ATTR = "_ksadk_mcp_toolset_key"
|
|
|
21
22
|
@dataclass(frozen=True)
|
|
22
23
|
class MCPServerConfig:
|
|
23
24
|
name: str
|
|
24
|
-
url: str
|
|
25
|
-
api_key: str | None = None
|
|
25
|
+
url: str = field(repr=False)
|
|
26
|
+
api_key: str | None = field(default=None, repr=False)
|
|
26
27
|
tool_filter: tuple[str, ...] = ()
|
|
27
28
|
tool_name_prefix: str | None = None
|
|
28
29
|
|
|
@@ -68,7 +69,14 @@ def build_connection_params(
|
|
|
68
69
|
kwargs["httpx_client_factory"] = httpx_client_factory or _default_httpx_client_factory(
|
|
69
70
|
config.url
|
|
70
71
|
)
|
|
71
|
-
return
|
|
72
|
+
return _RedactedStreamableHTTPConnectionParams(**kwargs)
|
|
73
|
+
|
|
74
|
+
|
|
75
|
+
class _RedactedStreamableHTTPConnectionParams(StreamableHTTPConnectionParams):
|
|
76
|
+
"""Keep process-scoped MCP connection material out of debug reprs."""
|
|
77
|
+
|
|
78
|
+
url: str = Field(repr=False)
|
|
79
|
+
headers: dict[str, Any] | None = Field(default=None, repr=False)
|
|
72
80
|
|
|
73
81
|
|
|
74
82
|
def build_mcp_toolset(
|