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,191 @@
|
|
|
1
|
+
"""Ephemeral broker handles minted only by the trusted runtime host.
|
|
2
|
+
|
|
3
|
+
This is not an upstream authorization database. The host must first verify
|
|
4
|
+
admission, connection identity and Build permissions. Restart loses all handles.
|
|
5
|
+
"""
|
|
6
|
+
|
|
7
|
+
from __future__ import annotations
|
|
8
|
+
|
|
9
|
+
import secrets
|
|
10
|
+
import threading
|
|
11
|
+
import time
|
|
12
|
+
from collections.abc import Callable
|
|
13
|
+
from dataclasses import dataclass, field
|
|
14
|
+
|
|
15
|
+
from pydantic import model_validator
|
|
16
|
+
|
|
17
|
+
from ksadk.plugins.contracts import PluginContractModel
|
|
18
|
+
from ksadk.resource_runtime.contracts import Digest, Identifier, InvocationIdentity
|
|
19
|
+
from ksadk.resource_runtime.ipc import ResourceOperation
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
class ResourceScope(PluginContractModel):
|
|
23
|
+
profile_digest: Digest
|
|
24
|
+
generation_id: Identifier
|
|
25
|
+
activation_id: Identifier
|
|
26
|
+
build_digest: Digest
|
|
27
|
+
binding_snapshot_digest: Digest
|
|
28
|
+
identity: InvocationIdentity
|
|
29
|
+
binding_id: Identifier
|
|
30
|
+
allowed_operations: tuple[ResourceOperation, ...]
|
|
31
|
+
|
|
32
|
+
@model_validator(mode="after")
|
|
33
|
+
def unique_operations(self) -> ResourceScope:
|
|
34
|
+
if not self.allowed_operations or len(self.allowed_operations) != len(
|
|
35
|
+
set(self.allowed_operations)
|
|
36
|
+
):
|
|
37
|
+
raise ValueError("Scope requires unique explicit operations")
|
|
38
|
+
return self
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
@dataclass(frozen=True)
|
|
42
|
+
class ResourceLease:
|
|
43
|
+
handle: str = field(repr=False)
|
|
44
|
+
scope: ResourceScope
|
|
45
|
+
expires_at: float
|
|
46
|
+
|
|
47
|
+
|
|
48
|
+
class LeaseRejected(PermissionError):
|
|
49
|
+
def __init__(self):
|
|
50
|
+
super().__init__("RESOURCE_SCOPE_INVALID")
|
|
51
|
+
|
|
52
|
+
|
|
53
|
+
class ResourceLeaseRegistry:
|
|
54
|
+
def __init__(self, *, clock: Callable[[], float] = time.monotonic, capacity: int = 4096):
|
|
55
|
+
if capacity < 1:
|
|
56
|
+
raise ValueError("Lease capacity must be positive")
|
|
57
|
+
self._clock = clock
|
|
58
|
+
self._capacity = capacity
|
|
59
|
+
self._leases: dict[str, ResourceLease] = {}
|
|
60
|
+
self._lock = threading.RLock()
|
|
61
|
+
|
|
62
|
+
def issue(self, scope: ResourceScope, *, lifetime: int = 600) -> ResourceLease:
|
|
63
|
+
"""Host-only entry point; never expose scope issuance as an IPC operation."""
|
|
64
|
+
if type(lifetime) is not int or not 1 <= lifetime <= 600:
|
|
65
|
+
raise ValueError("Resource lease lifetime must be 1..600 seconds")
|
|
66
|
+
with self._lock:
|
|
67
|
+
now = self._clock()
|
|
68
|
+
self._leases = {
|
|
69
|
+
key: lease for key, lease in self._leases.items() if lease.expires_at > now
|
|
70
|
+
}
|
|
71
|
+
if len(self._leases) >= self._capacity:
|
|
72
|
+
raise RuntimeError("RESOURCE_LEASE_CAPACITY")
|
|
73
|
+
# Round-trip validates even models constructed with unchecked model_copy.
|
|
74
|
+
validated = ResourceScope.model_validate(scope.model_dump())
|
|
75
|
+
for existing in self._leases.values():
|
|
76
|
+
other = existing.scope
|
|
77
|
+
if other.activation_id == validated.activation_id and (
|
|
78
|
+
other.identity != validated.identity
|
|
79
|
+
or other.generation_id != validated.generation_id
|
|
80
|
+
or other.build_digest != validated.build_digest
|
|
81
|
+
or other.profile_digest != validated.profile_digest
|
|
82
|
+
or other.binding_snapshot_digest != validated.binding_snapshot_digest
|
|
83
|
+
):
|
|
84
|
+
raise ValueError("An activation cannot change identity or frozen Build")
|
|
85
|
+
lease = ResourceLease(secrets.token_urlsafe(32), validated, now + lifetime)
|
|
86
|
+
self._leases[lease.handle] = lease
|
|
87
|
+
return lease
|
|
88
|
+
|
|
89
|
+
def authorize(
|
|
90
|
+
self, handle: str, *, operation: ResourceOperation, generation_id: str, activation_id: str
|
|
91
|
+
) -> ResourceScope:
|
|
92
|
+
with self._lock:
|
|
93
|
+
lease = self._current(handle)
|
|
94
|
+
if (
|
|
95
|
+
lease.scope.generation_id != generation_id
|
|
96
|
+
or lease.scope.activation_id != activation_id
|
|
97
|
+
or operation not in lease.scope.allowed_operations
|
|
98
|
+
):
|
|
99
|
+
raise LeaseRejected()
|
|
100
|
+
return lease.scope
|
|
101
|
+
|
|
102
|
+
def renew(self, handle: str, *, lifetime: int = 600) -> ResourceLease:
|
|
103
|
+
"""Host revalidates upstream authorization first; renewal cannot widen scope.
|
|
104
|
+
|
|
105
|
+
Renewal rotates the opaque handle and invalidates the previous handle.
|
|
106
|
+
Both actions are atomic relative to dispatch authorization and revocation.
|
|
107
|
+
"""
|
|
108
|
+
return self.renew_many((handle,), lifetime=lifetime)[0]
|
|
109
|
+
|
|
110
|
+
def renew_many(
|
|
111
|
+
self, handles: tuple[str, ...], *, lifetime: int = 600
|
|
112
|
+
) -> tuple[ResourceLease, ...]:
|
|
113
|
+
"""Rotate one activation's handles atomically, after host revalidation."""
|
|
114
|
+
with self._lock:
|
|
115
|
+
if not handles or len(handles) != len(set(handles)):
|
|
116
|
+
raise ValueError("Renewal requires unique existing handles")
|
|
117
|
+
if type(lifetime) is not int or not 1 <= lifetime <= 600:
|
|
118
|
+
raise ValueError("Resource lease lifetime must be 1..600 seconds")
|
|
119
|
+
leases = tuple(self._current(handle) for handle in handles)
|
|
120
|
+
if len({lease.scope.activation_id for lease in leases}) != 1:
|
|
121
|
+
raise ValueError("Renewal cannot mix activations")
|
|
122
|
+
now = self._clock()
|
|
123
|
+
if any(lease.expires_at <= now for lease in leases):
|
|
124
|
+
raise LeaseRejected()
|
|
125
|
+
renewed = tuple(
|
|
126
|
+
ResourceLease(secrets.token_urlsafe(32), lease.scope, now + lifetime)
|
|
127
|
+
for lease in leases
|
|
128
|
+
)
|
|
129
|
+
for handle in handles:
|
|
130
|
+
del self._leases[handle]
|
|
131
|
+
self._leases.update({lease.handle: lease for lease in renewed})
|
|
132
|
+
return renewed
|
|
133
|
+
|
|
134
|
+
def resolve(
|
|
135
|
+
self, handle: str, *, operation: ResourceOperation, generation_id: str
|
|
136
|
+
) -> ResourceScope:
|
|
137
|
+
"""Resolve caller identity from the opaque handle, not request arguments."""
|
|
138
|
+
with self._lock:
|
|
139
|
+
scope = self._current(handle).scope
|
|
140
|
+
if scope.generation_id != generation_id or operation not in scope.allowed_operations:
|
|
141
|
+
raise LeaseRejected()
|
|
142
|
+
return scope
|
|
143
|
+
|
|
144
|
+
def revoke_activation(self, activation_id: str) -> None:
|
|
145
|
+
with self._lock:
|
|
146
|
+
self._leases = {
|
|
147
|
+
key: lease
|
|
148
|
+
for key, lease in self._leases.items()
|
|
149
|
+
if lease.scope.activation_id != activation_id
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
def remaining_lifetime(self, handles: tuple[str, ...]) -> float:
|
|
153
|
+
"""Observe the longest current lease for lifecycle cleanup, without renewal.
|
|
154
|
+
|
|
155
|
+
Missing/revoked/expired handles contribute zero. Uses the issuance clock
|
|
156
|
+
so a supervisor does not compare monotonic deadlines with wall time.
|
|
157
|
+
This is not an authorization check for an operation.
|
|
158
|
+
"""
|
|
159
|
+
with self._lock:
|
|
160
|
+
now = self._clock()
|
|
161
|
+
return max(0.0, max((
|
|
162
|
+
self._leases[handle].expires_at - now
|
|
163
|
+
for handle in handles if handle in self._leases
|
|
164
|
+
), default=0.0))
|
|
165
|
+
|
|
166
|
+
def revoke_binding(self, activation_id: str, binding_id: str) -> None:
|
|
167
|
+
"""Revoke one upstream resource without disabling unrelated bindings."""
|
|
168
|
+
with self._lock:
|
|
169
|
+
self._leases = {
|
|
170
|
+
key: lease
|
|
171
|
+
for key, lease in self._leases.items()
|
|
172
|
+
if (lease.scope.activation_id, lease.scope.binding_id)
|
|
173
|
+
!= (activation_id, binding_id)
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
def revoke_generation(self, generation_id: str) -> None:
|
|
177
|
+
with self._lock:
|
|
178
|
+
self._leases = {
|
|
179
|
+
key: lease
|
|
180
|
+
for key, lease in self._leases.items()
|
|
181
|
+
if lease.scope.generation_id != generation_id
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
def _current(self, handle: str) -> ResourceLease:
|
|
185
|
+
lease = self._leases.get(handle)
|
|
186
|
+
if lease is None:
|
|
187
|
+
raise LeaseRejected()
|
|
188
|
+
if lease.expires_at <= self._clock():
|
|
189
|
+
del self._leases[handle]
|
|
190
|
+
raise LeaseRejected()
|
|
191
|
+
return lease
|
|
@@ -0,0 +1,186 @@
|
|
|
1
|
+
"""Project frozen platform-resource bindings into a managed-runtime MCP server.
|
|
2
|
+
|
|
3
|
+
The projection is provider-neutral: a managed Agent keeps the resource declarations
|
|
4
|
+
in its immutable manifest and receives one local MCP connector. Credentials remain
|
|
5
|
+
workload environment variables and never enter the manifest or artifact.
|
|
6
|
+
"""
|
|
7
|
+
|
|
8
|
+
from __future__ import annotations
|
|
9
|
+
|
|
10
|
+
import os
|
|
11
|
+
import sys
|
|
12
|
+
from collections.abc import Mapping
|
|
13
|
+
from typing import Any
|
|
14
|
+
|
|
15
|
+
from ksadk.resource_runtime.contracts import ResourceConfig, validate_resource_bindings
|
|
16
|
+
from ksadk.resource_runtime.plugin_config import resource_plugin_config
|
|
17
|
+
|
|
18
|
+
_SERVER_NAME = "platform-resources"
|
|
19
|
+
_CREDENTIAL_ENV_NAMES = (
|
|
20
|
+
"KSYUN_ACCESS_KEY",
|
|
21
|
+
"KSYUN_SECRET_KEY",
|
|
22
|
+
"KSYUN_SESSION_TOKEN",
|
|
23
|
+
"KSYUN_ACCESS_KEY_ID",
|
|
24
|
+
"KSYUN_SECRET_ACCESS_KEY",
|
|
25
|
+
)
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
def native_codex_plugin_bindings(manifest: Mapping[str, Any]) -> list[dict[str, Any]]:
|
|
29
|
+
"""Return enabled native Codex bindings, excluding DSH resource declarations."""
|
|
30
|
+
|
|
31
|
+
bindings: list[dict[str, Any]] = []
|
|
32
|
+
raw = manifest.get("plugins") or []
|
|
33
|
+
if not isinstance(raw, (list, tuple)):
|
|
34
|
+
return bindings
|
|
35
|
+
for item in raw:
|
|
36
|
+
if not isinstance(item, Mapping) or not item.get("enabled", True):
|
|
37
|
+
continue
|
|
38
|
+
if str(item.get("ecosystem") or "").strip().lower() == "codex":
|
|
39
|
+
bindings.append(dict(item))
|
|
40
|
+
return bindings
|
|
41
|
+
|
|
42
|
+
|
|
43
|
+
def _resource_configs(manifest: Mapping[str, Any]) -> tuple[ResourceConfig, ...]:
|
|
44
|
+
resources: list[ResourceConfig] = []
|
|
45
|
+
raw = manifest.get("plugins") or []
|
|
46
|
+
if not isinstance(raw, (list, tuple)):
|
|
47
|
+
return ()
|
|
48
|
+
for item in raw:
|
|
49
|
+
if not isinstance(item, Mapping) or not item.get("enabled", True):
|
|
50
|
+
continue
|
|
51
|
+
parsed = resource_plugin_config(
|
|
52
|
+
str(item.get("plugin_ref") or item.get("pluginRef") or ""),
|
|
53
|
+
str(item.get("ecosystem") or ""),
|
|
54
|
+
item.get("config") if isinstance(item.get("config"), Mapping) else {},
|
|
55
|
+
enabled=True,
|
|
56
|
+
)
|
|
57
|
+
if parsed is not None:
|
|
58
|
+
resources.append(parsed)
|
|
59
|
+
validate_resource_bindings(tuple(resources))
|
|
60
|
+
return tuple(resources)
|
|
61
|
+
|
|
62
|
+
|
|
63
|
+
def _memory_write_enabled(
|
|
64
|
+
manifest: Mapping[str, Any], resources: tuple[ResourceConfig, ...]
|
|
65
|
+
) -> bool:
|
|
66
|
+
memory_configs = [item for item in resources if item.binding.resource.kind == "memory-instance"]
|
|
67
|
+
if not memory_configs:
|
|
68
|
+
return False
|
|
69
|
+
memory = manifest.get("memory")
|
|
70
|
+
context = manifest.get("context")
|
|
71
|
+
if not isinstance(memory, Mapping) or not bool(memory.get("enabled")):
|
|
72
|
+
return False
|
|
73
|
+
if str(memory.get("providerRef") or memory.get("provider_ref") or "") != (
|
|
74
|
+
"binding://" + memory_configs[0].binding.id
|
|
75
|
+
):
|
|
76
|
+
return False
|
|
77
|
+
write = memory.get("write")
|
|
78
|
+
rollout = context.get("rollout") if isinstance(context, Mapping) else None
|
|
79
|
+
mode = str(write.get("mode") or "off") if isinstance(write, Mapping) else "off"
|
|
80
|
+
rollout_mode = (
|
|
81
|
+
str(rollout.get("memoryWrite") or rollout.get("memory_write") or "off")
|
|
82
|
+
if isinstance(rollout, Mapping)
|
|
83
|
+
else "off"
|
|
84
|
+
)
|
|
85
|
+
return mode in {"explicit_only", "candidate"} and rollout_mode == "enabled"
|
|
86
|
+
|
|
87
|
+
|
|
88
|
+
def project_managed_platform_resources(
|
|
89
|
+
manifest: Mapping[str, Any],
|
|
90
|
+
*,
|
|
91
|
+
process_env: Mapping[str, str] | None = None,
|
|
92
|
+
) -> dict[str, Any]:
|
|
93
|
+
"""Return runtime config additions for official platform resources."""
|
|
94
|
+
|
|
95
|
+
resources = _resource_configs(manifest)
|
|
96
|
+
if not resources:
|
|
97
|
+
return {}
|
|
98
|
+
source_env = process_env if process_env is not None else os.environ
|
|
99
|
+
projected_env: dict[str, str] = {
|
|
100
|
+
"KSADK_AICP_ENDPOINT_MODE": "inner",
|
|
101
|
+
"KSADK_PLATFORM_RESOURCE_KINDS": ",".join(
|
|
102
|
+
sorted(item.binding.resource.kind for item in resources)
|
|
103
|
+
),
|
|
104
|
+
"KSADK_PLATFORM_RESOURCE_AGENT_ID": str(
|
|
105
|
+
source_env.get("AGENTENGINE_PLUGIN_AGENT_ID")
|
|
106
|
+
or source_env.get("AGENTENGINE_RESOURCE_AGENT_ID")
|
|
107
|
+
or manifest.get("name")
|
|
108
|
+
or "managed-agent"
|
|
109
|
+
),
|
|
110
|
+
"KSADK_PLATFORM_RESOURCE_SUBJECT": str(
|
|
111
|
+
source_env.get("AGENTENGINE_RESOURCE_ACTOR_REF")
|
|
112
|
+
or source_env.get("AGENTENGINE_PLUGIN_AGENT_ID")
|
|
113
|
+
or manifest.get("name")
|
|
114
|
+
or "managed-agent"
|
|
115
|
+
),
|
|
116
|
+
"KSADK_PLATFORM_RESOURCE_MEMORY_WRITE": (
|
|
117
|
+
"true" if _memory_write_enabled(manifest, resources) else "false"
|
|
118
|
+
),
|
|
119
|
+
}
|
|
120
|
+
for item in resources:
|
|
121
|
+
resource = item.binding.resource
|
|
122
|
+
if resource.kind == "memory-instance":
|
|
123
|
+
projected_env.update(
|
|
124
|
+
{
|
|
125
|
+
"KSADK_LTM_BACKEND": "sdk",
|
|
126
|
+
"KSADK_LTM_NAMESPACE": resource.id,
|
|
127
|
+
"KSADK_LTM_REGION": resource.region,
|
|
128
|
+
"KSADK_LTM_AGENT_ID": projected_env["KSADK_PLATFORM_RESOURCE_AGENT_ID"],
|
|
129
|
+
}
|
|
130
|
+
)
|
|
131
|
+
elif resource.kind == "knowledge-base":
|
|
132
|
+
policy = item.retrieval
|
|
133
|
+
projected_env.update(
|
|
134
|
+
{
|
|
135
|
+
"KSADK_KB_DATASET_ID": resource.id,
|
|
136
|
+
"KSADK_KB_REGION": resource.region,
|
|
137
|
+
"KSADK_KB_TOP_K": str(policy.top_k if policy is not None else 5),
|
|
138
|
+
}
|
|
139
|
+
)
|
|
140
|
+
elif resource.kind == "skill-space":
|
|
141
|
+
projected_env.update(
|
|
142
|
+
{
|
|
143
|
+
"KSADK_SKILL_SPACE_IDS": resource.id,
|
|
144
|
+
"KSADK_SKILL_SERVICE_REGION": resource.region,
|
|
145
|
+
}
|
|
146
|
+
)
|
|
147
|
+
if item.include_public:
|
|
148
|
+
projected_env["KSADK_PUBLIC_SKILL_SPACE_IDS"] = "public"
|
|
149
|
+
|
|
150
|
+
env_refs = {name: name for name in (*projected_env, *_CREDENTIAL_ENV_NAMES)}
|
|
151
|
+
return {
|
|
152
|
+
"env": projected_env,
|
|
153
|
+
"mcp_server": {
|
|
154
|
+
"name": _SERVER_NAME,
|
|
155
|
+
"transport": "stdio",
|
|
156
|
+
"command": sys.executable,
|
|
157
|
+
"args": ["-m", "ksadk.resource_runtime.mcp_server"],
|
|
158
|
+
"env_refs": env_refs,
|
|
159
|
+
},
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
|
|
163
|
+
def apply_managed_platform_resources(config: dict[str, Any]) -> dict[str, Any]:
|
|
164
|
+
"""Apply projection without overwriting user MCP or environment values."""
|
|
165
|
+
|
|
166
|
+
projected = project_managed_platform_resources(config)
|
|
167
|
+
if not projected:
|
|
168
|
+
return config
|
|
169
|
+
servers = list(config.get("mcp_servers") or [])
|
|
170
|
+
if any(isinstance(item, Mapping) and item.get("name") == _SERVER_NAME for item in servers):
|
|
171
|
+
raise ValueError("mcp server name 'platform-resources' is reserved")
|
|
172
|
+
servers.append(projected["mcp_server"])
|
|
173
|
+
env = dict(config.get("env") or {})
|
|
174
|
+
if set(env).intersection(projected["env"]):
|
|
175
|
+
raise ValueError("managed platform-resource environment is reserved")
|
|
176
|
+
env.update(projected["env"])
|
|
177
|
+
config["mcp_servers"] = servers
|
|
178
|
+
config["env"] = env
|
|
179
|
+
return config
|
|
180
|
+
|
|
181
|
+
|
|
182
|
+
__all__ = [
|
|
183
|
+
"apply_managed_platform_resources",
|
|
184
|
+
"native_codex_plugin_bindings",
|
|
185
|
+
"project_managed_platform_resources",
|
|
186
|
+
]
|
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
"""Private stdio MCP adapter for frozen managed-runtime platform resources."""
|
|
2
|
+
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
import os
|
|
6
|
+
import time
|
|
7
|
+
from dataclasses import asdict
|
|
8
|
+
from uuid import uuid4
|
|
9
|
+
|
|
10
|
+
from mcp.server.fastmcp import FastMCP
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
def _enabled(kind: str) -> bool:
|
|
14
|
+
return kind in {
|
|
15
|
+
item.strip()
|
|
16
|
+
for item in os.environ.get("KSADK_PLATFORM_RESOURCE_KINDS", "").split(",")
|
|
17
|
+
if item.strip()
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
def _subject() -> str:
|
|
22
|
+
value = os.environ.get("KSADK_PLATFORM_RESOURCE_SUBJECT", "").strip()
|
|
23
|
+
if not value or any(character.isspace() for character in value):
|
|
24
|
+
raise ValueError("trusted platform-resource subject is unavailable")
|
|
25
|
+
return value
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
def create_server() -> FastMCP:
|
|
29
|
+
server = FastMCP("KsADK Platform Resources")
|
|
30
|
+
|
|
31
|
+
if _enabled("memory-instance"):
|
|
32
|
+
from ksadk.memory.service import LongTermMemoryService, format_memory_entries
|
|
33
|
+
|
|
34
|
+
@server.tool()
|
|
35
|
+
def load_memory(query: str, top_k: int = 5) -> dict:
|
|
36
|
+
"""Search the Agent's bound long-term memory for relevant user facts."""
|
|
37
|
+
|
|
38
|
+
service = LongTermMemoryService.from_env()
|
|
39
|
+
entries = service.search_entries(user_id=_subject(), query=query, top_k=top_k)
|
|
40
|
+
if service.last_error:
|
|
41
|
+
return {"ok": False, "error": service.last_error, "items": []}
|
|
42
|
+
return {
|
|
43
|
+
"ok": True,
|
|
44
|
+
"items": entries,
|
|
45
|
+
"formatted_text": format_memory_entries(entries),
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
if os.environ.get("KSADK_PLATFORM_RESOURCE_MEMORY_WRITE", "").lower() == "true":
|
|
49
|
+
|
|
50
|
+
@server.tool()
|
|
51
|
+
def save_memory(content: str) -> dict:
|
|
52
|
+
"""Persist one explicit, self-contained user fact in bound long-term memory."""
|
|
53
|
+
|
|
54
|
+
service = LongTermMemoryService.from_env()
|
|
55
|
+
session_id = "mcp-" + uuid4().hex
|
|
56
|
+
ok = service.save_text(
|
|
57
|
+
user_id=_subject(),
|
|
58
|
+
content=content,
|
|
59
|
+
metadata={
|
|
60
|
+
"agent_id": os.environ.get("KSADK_PLATFORM_RESOURCE_AGENT_ID", ""),
|
|
61
|
+
"session_id": session_id,
|
|
62
|
+
"runner_type": "managed-runtime-mcp",
|
|
63
|
+
"flush": True,
|
|
64
|
+
},
|
|
65
|
+
session_id=session_id,
|
|
66
|
+
flush=True,
|
|
67
|
+
)
|
|
68
|
+
if not ok:
|
|
69
|
+
return {
|
|
70
|
+
"ok": False,
|
|
71
|
+
"status": "failed",
|
|
72
|
+
"error": service.last_error or "memory write was not acknowledged",
|
|
73
|
+
}
|
|
74
|
+
status = None
|
|
75
|
+
for attempt in range(6):
|
|
76
|
+
status = service.get_extraction_status(
|
|
77
|
+
user_id=_subject(),
|
|
78
|
+
session_id=session_id,
|
|
79
|
+
confirm_searchable=True,
|
|
80
|
+
expected_content=content,
|
|
81
|
+
)
|
|
82
|
+
if status.status in {"extracted", "duplicate_skipped", "failed"}:
|
|
83
|
+
break
|
|
84
|
+
if attempt < 5:
|
|
85
|
+
time.sleep(1)
|
|
86
|
+
return {
|
|
87
|
+
"ok": status is not None and status.status != "failed",
|
|
88
|
+
"status": status.status if status is not None else "accepted_not_extracted",
|
|
89
|
+
"searchable": bool(status and status.searchable),
|
|
90
|
+
"session_id": session_id,
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
@server.tool()
|
|
94
|
+
def memory_status(session_id: str, expected_content: str = "") -> dict:
|
|
95
|
+
"""Check extraction and search visibility for a prior explicit memory write."""
|
|
96
|
+
|
|
97
|
+
service = LongTermMemoryService.from_env()
|
|
98
|
+
status = service.get_extraction_status(
|
|
99
|
+
user_id=_subject(),
|
|
100
|
+
session_id=session_id,
|
|
101
|
+
confirm_searchable=bool(expected_content.strip()),
|
|
102
|
+
expected_content=expected_content,
|
|
103
|
+
)
|
|
104
|
+
return {"ok": not status.error_code, **asdict(status)}
|
|
105
|
+
|
|
106
|
+
if _enabled("knowledge-base"):
|
|
107
|
+
from ksadk.knowledge_base.service import KnowledgeBaseService
|
|
108
|
+
|
|
109
|
+
@server.tool()
|
|
110
|
+
def search_knowledge_base(query: str, top_k: int = 5) -> dict:
|
|
111
|
+
"""Search the Agent's bound knowledge base."""
|
|
112
|
+
|
|
113
|
+
service = KnowledgeBaseService.from_env()
|
|
114
|
+
results = service.search(query, top_k)
|
|
115
|
+
if service.last_error:
|
|
116
|
+
return {"ok": False, "error": service.last_error, "items": []}
|
|
117
|
+
return {"ok": True, "items": [item.model_dump() for item in results]}
|
|
118
|
+
|
|
119
|
+
if _enabled("skill-space"):
|
|
120
|
+
from ksadk.toolsets.skills import list_skill_spaces, list_skills, load_skill, search_skills
|
|
121
|
+
|
|
122
|
+
server.tool()(list_skill_spaces)
|
|
123
|
+
server.tool()(list_skills)
|
|
124
|
+
server.tool()(search_skills)
|
|
125
|
+
server.tool()(load_skill)
|
|
126
|
+
|
|
127
|
+
return server
|
|
128
|
+
|
|
129
|
+
|
|
130
|
+
def main() -> None:
|
|
131
|
+
create_server().run(transport="stdio")
|
|
132
|
+
|
|
133
|
+
|
|
134
|
+
if __name__ == "__main__":
|
|
135
|
+
main()
|
|
136
|
+
|
|
137
|
+
|
|
138
|
+
__all__ = ["create_server", "main"]
|