agentengine-sdk-python 0.8.3__py3-none-any.whl → 0.8.5__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {agentengine_sdk_python-0.8.3.dist-info → agentengine_sdk_python-0.8.5.dist-info}/METADATA +13 -9
- agentengine_sdk_python-0.8.5.dist-info/RECORD +1296 -0
- ksadk/_build_provenance.json +1 -1
- ksadk/_process.py +83 -0
- ksadk/_str_enum.py +17 -0
- ksadk/a2ui/core.py +3 -3
- ksadk/api/client.py +111 -91
- ksadk/builders/code_builder.py +74 -21
- ksadk/builders/framework_requirements.py +22 -3
- ksadk/builders/ks3_uploader.py +36 -7
- ksadk/builders/managed_runtime_builder.py +1 -0
- ksadk/cli/__init__.py +68 -3
- ksadk/cli/cmd_config.py +4 -4
- ksadk/cli/cmd_create.py +12 -12
- ksadk/cli/cmd_hermes.py +24 -2
- ksadk/cli/cmd_invoke.py +28 -5
- ksadk/cli/cmd_managed_runtime.py +13 -1
- ksadk/cli/cmd_openclaw.py +26 -1
- ksadk/cli/cmd_plugin.py +76 -13
- ksadk/cli/cmd_studio.py +64 -16
- ksadk/cli/cmd_web.py +2 -5
- ksadk/cli/openclaw_env.py +1 -1
- ksadk/cli/resource_common.py +26 -0
- ksadk/cli/runtime_bootstrap.py +23 -1
- ksadk/codex/client.py +425 -96
- ksadk/codex/projection.py +24 -0
- ksadk/codex/runtime.py +56 -298
- ksadk/common/auth.py +16 -10
- ksadk/configs/__init__.py +1 -1
- ksadk/configs/env_registry.py +153 -31
- ksadk/configs/env_registry_studio.py +86 -0
- ksadk/configs/global_config.py +1 -1
- ksadk/configs/settings.py +3 -3
- ksadk/connector/__init__.py +17 -0
- ksadk/connector/channel.py +477 -0
- ksadk/context_engine/capabilities.py +52 -4
- ksadk/conversations/attachment_storage.py +10 -3
- ksadk/conversations/attachments.py +16 -5
- ksadk/conversations/message_projection.py +133 -21
- ksadk/conversations/normalize.py +28 -10
- ksadk/conversations/projector.py +4 -6
- ksadk/conversations/runtime_baseline.py +37 -0
- ksadk/conversations/runtime_invocation.py +22 -4
- ksadk/conversations/runtime_observability.py +39 -10
- ksadk/conversations/runtime_payloads.py +9 -0
- ksadk/conversations/runtime_persistence.py +105 -9
- ksadk/conversations/runtime_preparation.py +42 -33
- ksadk/conversations/runtime_resume.py +50 -2
- ksadk/conversations/runtime_stream_events.py +34 -35
- ksadk/conversations/runtime_streaming.py +33 -7
- ksadk/deployment/env_forward.py +2 -2
- ksadk/deployment/providers/serverless.py +1 -1
- ksadk/events/adapters/_codex_items.py +16 -8
- ksadk/events/adapters/_codex_validators.py +18 -7
- ksadk/events/adapters/_langgraph_support.py +34 -0
- ksadk/events/adapters/langgraph.py +15 -1
- ksadk/events/canonical_store.py +3 -1
- ksadk/events/projections.py +1 -1
- ksadk/events/session_event.py +2 -2
- ksadk/harness/__init__.py +14 -0
- ksadk/harness/app.py +11 -0
- ksadk/harness/artifact_store.py +213 -0
- ksadk/harness/capabilities.py +115 -0
- ksadk/harness/capability_runtime.py +237 -0
- ksadk/harness/closure_contract.py +92 -0
- ksadk/harness/compaction_record.py +122 -0
- ksadk/harness/compiler.py +284 -0
- ksadk/harness/config.py +2 -2
- ksadk/harness/conformance/__init__.py +33 -0
- ksadk/harness/conformance/contract.py +506 -0
- ksadk/harness/conformance/fixtures.py +102 -0
- ksadk/harness/context_engine.py +403 -0
- ksadk/harness/context_maintenance.py +259 -0
- ksadk/harness/context_manifest.py +188 -0
- ksadk/harness/context_tuning.py +168 -0
- ksadk/harness/draft_runtime.py +322 -0
- ksadk/harness/engine/__init__.py +40 -0
- ksadk/harness/engine/base.py +122 -0
- ksadk/harness/engine/budgets.py +108 -0
- ksadk/harness/engine/capability_declarations.py +59 -0
- ksadk/harness/engine/completion_guard.py +42 -0
- ksadk/harness/engine/context_pipeline.py +579 -0
- ksadk/harness/engine/graph_builder.py +859 -0
- ksadk/harness/engine/langgraph.py +931 -0
- ksadk/harness/engine/mcp_disclosure.py +750 -0
- ksadk/harness/engine/policy_runtime.py +70 -0
- ksadk/harness/engine/postgres_checkpointer.py +63 -0
- ksadk/harness/engine/run_control_bridge.py +80 -0
- ksadk/harness/engine/run_types.py +88 -0
- ksadk/harness/engine/skill_disclosure.py +189 -0
- ksadk/harness/engine/spans.py +41 -0
- ksadk/harness/engine/subagents.py +343 -0
- ksadk/harness/engine/thread_ids.py +112 -0
- ksadk/harness/engine/tool_dispatch.py +144 -0
- ksadk/harness/event_tree.py +212 -0
- ksadk/harness/events.py +461 -0
- ksadk/harness/execution_policy.py +94 -0
- ksadk/harness/insights.py +210 -0
- ksadk/harness/lifecycle.py +578 -0
- ksadk/harness/lifecycle_conformance.py +233 -0
- ksadk/harness/lifecycle_local_plane.py +104 -0
- ksadk/harness/loop/__init__.py +44 -0
- ksadk/harness/loop/reason.py +454 -0
- ksadk/harness/loop/tools.py +762 -0
- ksadk/harness/managed_runtime.py +884 -0
- ksadk/harness/mcp_matrix.py +474 -0
- ksadk/harness/mcp_runtime.py +471 -0
- ksadk/harness/memory_consolidation.py +157 -0
- ksadk/harness/memory_loop.py +156 -0
- ksadk/harness/memory_runtime.py +541 -0
- ksadk/harness/metrics.py +90 -0
- ksadk/harness/model_capability.py +253 -0
- ksadk/harness/model_provider.py +220 -0
- ksadk/harness/observability/__init__.py +29 -0
- ksadk/harness/observability/inspection.py +528 -0
- ksadk/harness/observability/metrics.py +167 -0
- ksadk/harness/observability/otel_exporter.py +218 -0
- ksadk/harness/prompt_cache.py +70 -0
- ksadk/harness/public_activity.py +154 -0
- ksadk/harness/readiness.py +249 -0
- ksadk/harness/reasoner.py +466 -13
- ksadk/harness/release_readiness.py +140 -0
- ksadk/harness/resource_ref.py +69 -0
- ksadk/harness/run_control.py +668 -0
- ksadk/harness/runtime.py +171 -136
- ksadk/harness/runtime_capabilities.py +158 -0
- ksadk/harness/runtime_server.py +514 -0
- ksadk/harness/sandbox_adapters.py +739 -0
- ksadk/harness/sandbox_backend.py +530 -0
- ksadk/harness/sandbox_conformance.py +288 -0
- ksadk/harness/sandbox_lease.py +77 -0
- ksadk/harness/sandbox_lease_conformance.py +259 -0
- ksadk/harness/sandbox_matrix.py +170 -0
- ksadk/harness/sandbox_reconciliation.py +140 -0
- ksadk/harness/sandbox_recovery.py +586 -0
- ksadk/harness/sandbox_recovery_conformance.py +246 -0
- ksadk/harness/session_store.py +243 -0
- ksadk/harness/skill_composition.py +212 -0
- ksadk/harness/skill_feedback.py +123 -0
- ksadk/harness/skill_matrix.py +233 -0
- ksadk/harness/skill_runtime.py +259 -0
- ksadk/harness/spec.py +332 -0
- ksadk/harness/state.py +153 -0
- ksadk/harness/strategies.py +149 -0
- ksadk/harness/subagent.py +253 -0
- ksadk/harness/tool_policy.py +131 -0
- ksadk/harness/tool_receipts.py +96 -0
- ksadk/harness/tool_reliability.py +81 -0
- ksadk/harness/tools.py +38 -13
- ksadk/harness/user_errors.py +69 -0
- ksadk/harness/working_context.py +81 -0
- ksadk/harness/working_context_patch.py +99 -0
- ksadk/identity/resolver.py +18 -0
- ksadk/interaction/__init__.py +1 -1
- ksadk/interaction/ledger.py +1 -1
- ksadk/interaction/provider.py +2 -1
- ksadk/interaction/providers/__init__.py +3 -1
- ksadk/interaction/providers/adk.py +1 -1
- ksadk/interaction/providers/codex.py +1 -1
- ksadk/interaction/providers/harness.py +50 -0
- ksadk/interaction/providers/langgraph.py +2 -1
- ksadk/kernel/__init__.py +10 -0
- ksadk/kernel/approval_presentation.py +91 -0
- ksadk/kernel/authorization.py +1 -1
- ksadk/kernel/bootstrap.py +114 -106
- ksadk/kernel/contract_fingerprints.py +1 -1
- ksadk/kernel/contracts.py +5 -0
- ksadk/kernel/control.py +32 -1
- ksadk/kernel/execution_grants.py +221 -0
- ksadk/kernel/execution_grants_memory.py +133 -0
- ksadk/kernel/execution_grants_postgres.py +217 -0
- ksadk/kernel/execution_grants_sqlite.py +209 -0
- ksadk/kernel/ingress.py +42 -29
- ksadk/kernel/mapping.py +1 -1
- ksadk/kernel/memory_store.py +24 -11
- ksadk/kernel/postgres_store.py +63 -33
- ksadk/kernel/recovery.py +78 -14
- ksadk/kernel/sql/001_agent_kernel.sql +23 -0
- ksadk/kernel/sqlite_store.py +331 -25
- ksadk/kernel/state.py +2 -3
- ksadk/kernel/store.py +72 -2
- ksadk/kernel/worker.py +144 -51
- ksadk/kernel/worker_history.py +72 -0
- ksadk/kernel/worker_identity.py +47 -0
- 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/coordinator.py +22 -6
- ksadk/memory/extraction.py +40 -1
- ksadk/memory/models.py +84 -5
- ksadk/memory/provider_resolver.py +8 -0
- ksadk/memory/providers/local_postgres.py +200 -0
- ksadk/memory/providers/local_sqlite.py +42 -3
- ksadk/memory/retrieval.py +189 -0
- ksadk/memory/store_adapter.py +150 -0
- ksadk/model_policy.py +2 -2
- ksadk/model_proxy/detect.py +254 -0
- ksadk/model_proxy/server.py +14 -7
- ksadk/model_proxy/transform.py +40 -2
- ksadk/plugins/__init__.py +5 -1
- ksadk/plugins/artifacts.py +275 -0
- ksadk/plugins/bridges/__init__.py +4 -2
- ksadk/plugins/bridges/codex.py +120 -13
- ksadk/plugins/bridges/dsh.py +351 -156
- ksadk/plugins/builtins.py +72 -35
- ksadk/plugins/bundle_security.py +28 -4
- ksadk/plugins/codex_manifest.py +983 -0
- ksadk/plugins/companion_artifacts.py +83 -0
- ksadk/plugins/companions.py +368 -0
- ksadk/plugins/composition.py +8 -0
- ksadk/plugins/contracts.py +119 -1
- ksadk/plugins/delivery.py +153 -0
- ksadk/plugins/dsh_channels.py +156 -0
- ksadk/plugins/dsh_home.py +140 -0
- ksadk/plugins/dsh_installation_digest.py +71 -0
- ksadk/plugins/dsh_teams.py +105 -0
- ksadk/plugins/dsh_toolchain.py +203 -32
- ksadk/plugins/ecosystem_probe.py +6 -6
- ksadk/plugins/execution_host.py +99 -0
- ksadk/plugins/host.py +102 -39
- ksadk/plugins/kernel_adapter.py +205 -0
- ksadk/plugins/providers/__init__.py +23 -0
- ksadk/plugins/providers/bundles/dsh-channels-client/client.js +19 -0
- ksadk/plugins/providers/bundles/dsh-channels-client/cordis.patch.yml +3 -0
- ksadk/plugins/providers/bundles/dsh-channels-client/index.mjs +7 -0
- ksadk/plugins/providers/bundles/dsh-channels-client/package.json +12 -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/dsh-teams-client/client.js +29 -0
- ksadk/plugins/providers/bundles/dsh-teams-client/cordis.patch.yml +3 -0
- ksadk/plugins/providers/bundles/dsh-teams-client/index.mjs +11 -0
- ksadk/plugins/providers/bundles/dsh-teams-client/package.json +35 -0
- ksadk/plugins/providers/bundles/dsh-teams-leader-policy/cordis.patch.yml +3 -0
- ksadk/plugins/providers/bundles/dsh-teams-leader-policy/index.mjs +13 -0
- ksadk/plugins/providers/bundles/dsh-teams-leader-policy/package.json +27 -0
- ksadk/plugins/providers/bundles/dsh-teams-profile/cordis.patch.yml +3 -0
- ksadk/plugins/providers/bundles/dsh-teams-profile/index.mjs +12 -0
- ksadk/plugins/providers/bundles/dsh-teams-profile/package.json +26 -0
- ksadk/plugins/providers/bundles/dsh-teams-router/cordis.patch.yml +3 -0
- ksadk/plugins/providers/bundles/dsh-teams-router/index.mjs +16 -0
- ksadk/plugins/providers/bundles/dsh-teams-router/package.json +27 -0
- ksadk/plugins/providers/bundles/dsh-teams-tasks/cordis.patch.yml +3 -0
- ksadk/plugins/providers/bundles/dsh-teams-tasks/index.mjs +16 -0
- ksadk/plugins/providers/bundles/dsh-teams-tasks/package.json +27 -0
- ksadk/plugins/providers/bundles/dsh-teams-tools/cordis.patch.yml +3 -0
- ksadk/plugins/providers/bundles/dsh-teams-tools/index.mjs +25 -0
- ksadk/plugins/providers/bundles/dsh-teams-tools/package.json +29 -0
- ksadk/plugins/providers/bundles/dsh-teams-tools/tools.json +235 -0
- ksadk/plugins/providers/bundles/ksadk-codex/index.mjs +1 -1
- ksadk/plugins/providers/bundles/ksadk-dsh-capability-host/cordis.patch.yml +3 -0
- ksadk/plugins/providers/bundles/ksadk-dsh-capability-host/index.mjs +920 -0
- ksadk/plugins/providers/bundles/ksadk-dsh-capability-host/package.json +27 -0
- ksadk/plugins/providers/bundles/ksadk-dsh-companion-host/client.mjs +133 -0
- ksadk/plugins/providers/bundles/ksadk-dsh-companion-host/index.mjs +14 -0
- ksadk/plugins/providers/bundles/ksadk-dsh-studio/client.js +115 -0
- ksadk/plugins/providers/bundles/ksadk-dsh-studio/index.mjs +19 -0
- ksadk/plugins/providers/bundles/ksadk-dsh-studio/package.json +7 -0
- ksadk/plugins/providers/bundles/ksadk-harness/index.mjs +1 -1
- ksadk/plugins/providers/codex.py +344 -70
- ksadk/plugins/providers/codex_native.py +368 -0
- ksadk/plugins/providers/codex_turn.py +301 -0
- ksadk/plugins/providers/dsh_capabilities.py +1450 -0
- ksadk/plugins/providers/dsh_mcp.py +467 -0
- ksadk/plugins/providers/harness.py +294 -141
- ksadk/plugins/providers/harness_delegation.py +593 -0
- ksadk/plugins/providers/harness_managed.py +456 -0
- ksadk/plugins/providers/harness_tools.py +326 -0
- ksadk/plugins/providers/mcp_projection.py +150 -0
- ksadk/plugins/providers/platform_resources.py +657 -0
- ksadk/plugins/providers/shipped_dsh.py +4 -1
- ksadk/plugins/resolver.py +8 -1
- ksadk/plugins/subagent_providers/codex.py +28 -6
- ksadk/plugins/teams/__init__.py +5 -0
- ksadk/plugins/teams/api.py +405 -0
- ksadk/plugins/teams/application.py +680 -0
- ksadk/plugins/teams/artifacts.py +60 -0
- ksadk/plugins/teams/context.py +96 -0
- ksadk/plugins/teams/contracts.py +136 -0
- ksadk/plugins/teams/domain.py +1427 -0
- ksadk/plugins/teams/domain_values.py +24 -0
- ksadk/plugins/teams/errors.py +13 -0
- ksadk/plugins/teams/migration.py +311 -0
- ksadk/plugins/teams/migration_cli.py +322 -0
- ksadk/plugins/teams/postgres_store.py +138 -0
- ksadk/plugins/teams/runtime.py +777 -0
- ksadk/plugins/teams/source_projection.py +84 -0
- ksadk/plugins/teams/store.py +311 -0
- ksadk/plugins/teams/task_decisions.py +423 -0
- ksadk/plugins/teams/transport.py +91 -0
- ksadk/plugins/teams/workspaces.py +255 -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 +182 -38
- ksadk/runners/_langgraph_state_reader.py +106 -0
- ksadk/runners/_session_identity.py +285 -0
- ksadk/runners/adk_runner.py +166 -63
- ksadk/runners/base_runner.py +29 -1
- ksadk/runners/langgraph_runner.py +542 -195
- ksadk/runners/patch_langchain.py +47 -0
- ksadk/runners/usage_accumulator.py +11 -3
- ksadk/runtime/_runner_adapter/stream_mapping.py +194 -20
- ksadk/runtime/adapter.py +2 -0
- ksadk/runtime/conversation_execution.py +117 -17
- ksadk/runtime/executor.py +87 -3
- ksadk/runtime/factory.py +65 -274
- ksadk/runtime/framework_adapters.py +23 -0
- ksadk/runtime/preprocessing.py +21 -5
- ksadk/runtime/runner_adapter.py +106 -18
- ksadk/runtime/skill_eval_result.py +36 -0
- ksadk/runtime/timing.py +46 -0
- ksadk/runtime/usage.py +49 -18
- ksadk/runtime_context.py +142 -2
- ksadk/sandbox/backends/e2b.py +288 -25
- ksadk/sandbox/backends/local_process.py +72 -39
- ksadk/sandbox/base.py +64 -1
- ksadk/sandbox/diagnostics.py +82 -0
- ksadk/sandbox/e2b_connection.py +66 -0
- ksadk/sandbox/local_controls.py +746 -0
- ksadk/sandbox/local_launcher.py +90 -0
- ksadk/scheduler/dispatcher.py +1 -1
- ksadk/scheduler/sqlite_store.py +18 -0
- ksadk/server/composition.py +2 -0
- ksadk/server/factory.py +5 -0
- ksadk/server/invocation_identity.py +118 -0
- ksadk/server/persistence_capability.py +516 -0
- ksadk/server/routes/common.py +32 -3
- ksadk/server/routes/control.py +271 -52
- ksadk/server/routes/dependencies.py +16 -0
- ksadk/server/routes/kernel_ingress.py +9 -1
- ksadk/server/routes/misc.py +233 -25
- ksadk/server/routes/models.py +47 -4
- ksadk/server/routes/openai_compat.py +76 -13
- ksadk/server/routes/projection.py +252 -12
- ksadk/server/routes/run.py +106 -35
- ksadk/server/routes/sessions.py +491 -138
- ksadk/server/routes/streaming.py +43 -9
- ksadk/server/routes/workspace.py +130 -21
- ksadk/server/static/assets/{ArtifactsPanel-10GPXIJ6.js → ArtifactsPanel-C1YoaKhx.js} +1 -1
- ksadk/server/static/assets/{CodeBlock-BXk1l-G1.js → CodeBlock-DHuAWfr5.js} +10 -7
- ksadk/server/static/assets/MathMessageMarkdown-cvdrBwYr.js +8 -0
- ksadk/server/static/assets/{MermaidBlock--OEYoXIJ.js → MermaidBlock-DeBkbJvI.js} +9 -9
- ksadk/server/static/assets/{NativeTerminalPanel-DrEe1syq.js → NativeTerminalPanel-oJj44_sV.js} +1 -1
- ksadk/server/static/assets/{abnfDiagram-VCTEODGH-eeTFJLvo.js → abnfDiagram-VCTEODGH-Dhfv25o2.js} +1 -1
- ksadk/server/static/assets/{arc-S3ZNbIAd.js → arc-C35w-pn1.js} +1 -1
- ksadk/server/static/assets/architecture-7GRP2DOG-BCsa26zi.js +1 -0
- ksadk/server/static/assets/{architectureDiagram-5GKGNRK7-CRjgEJDX.js → architectureDiagram-5GKGNRK7-FoMY_u6D.js} +1 -1
- ksadk/server/static/assets/{blockDiagram-NRAW4CY4-C7bsBoNH.js → blockDiagram-NRAW4CY4-zD4Rt7oE.js} +1 -1
- ksadk/server/static/assets/{c4Diagram-UCG6FXSJ-BX3c33Ob.js → c4Diagram-UCG6FXSJ-BCtGGkhN.js} +1 -1
- ksadk/server/static/assets/channel-_KDifNys.js +1 -0
- ksadk/server/static/assets/chunk-2Q5K7J3B-HdVkJ9F0.js +1 -0
- ksadk/server/static/assets/{chunk-5VM5RSS4-bZ7ws-8m.js → chunk-5VM5RSS4-C2Ms13_k.js} +1 -1
- ksadk/server/static/assets/{chunk-F27PBJKO-D2r0pvhY.js → chunk-F27PBJKO-BoTj-qgx.js} +1 -1
- ksadk/server/static/assets/{chunk-G27WJ6UU-CZwF3oUP.js → chunk-G27WJ6UU-DOMyyjHH.js} +1 -1
- ksadk/server/static/assets/{chunk-JWPE2WC7-DigFYCML.js → chunk-JWPE2WC7-DbJJqDli.js} +1 -1
- ksadk/server/static/assets/{chunk-LCL6LL3I-CnorGV5q.js → chunk-LCL6LL3I-CLuRCt_W.js} +1 -1
- ksadk/server/static/assets/{chunk-POPQ4Y6H-CexntQA-.js → chunk-POPQ4Y6H-D0Dz847e.js} +1 -1
- ksadk/server/static/assets/{chunk-RHFEMEQ7-CHTC7UxA.js → chunk-RHFEMEQ7-BWSRzEcd.js} +1 -1
- ksadk/server/static/assets/{chunk-SVP7TREG-BC1EWt_-.js → chunk-SVP7TREG-CPoHqkCY.js} +1 -1
- ksadk/server/static/assets/{chunk-XXDRQBXY-BTG24xN0.js → chunk-XXDRQBXY-Bx1jS-X-.js} +1 -1
- ksadk/server/static/assets/classDiagram-DTDB5LWJ-BVCW3ZqZ.js +1 -0
- ksadk/server/static/assets/classDiagram-v2-JRS7N3AN-BVCW3ZqZ.js +1 -0
- ksadk/server/static/assets/{cose-bilkent-JH36ORCC-CkonRdAS.js → cose-bilkent-JH36ORCC-LzyWm4m0.js} +1 -1
- ksadk/server/static/assets/cynefin-OW5HDTMX-CNXjFctL.js +1 -0
- ksadk/server/static/assets/{cynefinDiagram-5FMLGOSQ-DEOCBe15.js → cynefinDiagram-5FMLGOSQ-BlW_bHED.js} +1 -1
- ksadk/server/static/assets/{dagre-3AP2YEHR-DBThPuLa.js → dagre-3AP2YEHR-Bu_S86_i.js} +1 -1
- ksadk/server/static/assets/{dagre-ClTPrTht.js → dagre-B7nCawed.js} +1 -1
- ksadk/server/static/assets/{diagram-S7CK7UJ4-DsZHrnpJ.js → diagram-S7CK7UJ4-W_Zow2Km.js} +1 -1
- ksadk/server/static/assets/{diagram-UQ7AKVKN-BJR4nhVr.js → diagram-UQ7AKVKN-CLIKAHON.js} +1 -1
- ksadk/server/static/assets/{diagram-VSXAHHWV-xzcERX0a.js → diagram-VSXAHHWV-Dv6_QAlN.js} +1 -1
- ksadk/server/static/assets/{diagram-VX7I27RA-tn2xM1xu.js → diagram-VX7I27RA-BWAWRDtZ.js} +1 -1
- ksadk/server/static/assets/{diagram-Z3DM3KII-BZPGBkw5.js → diagram-Z3DM3KII-XA_rWMss.js} +1 -1
- ksadk/server/static/assets/dist-0X_j2Rcc.js +1 -0
- ksadk/server/static/assets/{dist-4zN1_tq5.js → dist-1nXCdsej.js} +1 -1
- ksadk/server/static/assets/{dist-M67Hwu0n.js → dist-2vL2sAdF.js} +1 -1
- ksadk/server/static/assets/{dist-BJLUwH6W.js → dist-B3bA05-e.js} +1 -1
- ksadk/server/static/assets/{dist-8VWI-2bZ.js → dist-BLpRy_Yx.js} +1 -1
- ksadk/server/static/assets/{dist-D1V3f1B4.js → dist-BO_UwatH.js} +1 -1
- ksadk/server/static/assets/{dist-Cq4OL6nO.js → dist-BdNFAney.js} +1 -1
- ksadk/server/static/assets/{dist-DfGFrb0v.js → dist-C0J5_3qM.js} +1 -1
- ksadk/server/static/assets/{dist-DyqV4fL4.js → dist-CGt_UGeO.js} +1 -1
- ksadk/server/static/assets/{dist-DjhwGUgZ.js → dist-CIRMvUM4.js} +1 -1
- ksadk/server/static/assets/{dist-B1oWRmrH.js → dist-CIpWk_5f.js} +1 -1
- ksadk/server/static/assets/{dist-CXpH_Rdd.js → dist-CPyieXEf.js} +1 -1
- ksadk/server/static/assets/{dist-Btyo4vX4.js → dist-D-92S-Fd.js} +1 -1
- ksadk/server/static/assets/{dist-u8tVH5Ak.js → dist-DNKuMzWc.js} +1 -1
- ksadk/server/static/assets/{dist-DQAB0qn_.js → dist-DWfdmz9s.js} +2 -2
- ksadk/server/static/assets/{dist-B-46q3Hk.js → dist-DppE_r-D.js} +1 -1
- ksadk/server/static/assets/{dist-C71CsujO.js → dist-DyG6Ya-z.js} +1 -1
- ksadk/server/static/assets/{dist-DJmCPRVB.js → dist-M-SrdhhZ.js} +1 -1
- ksadk/server/static/assets/{dist-Bbwqa8TG.js → dist-mqD5TZup.js} +1 -1
- ksadk/server/static/assets/{dist-BI1qQH4n.js → dist-n3n6t_FO.js} +1 -1
- ksadk/server/static/assets/{dist-DUwKa_l6.js → dist-qe8xjesy.js} +1 -1
- ksadk/server/static/assets/{dist-B0gdk4rl.js → dist-t6MzE0jU.js} +1 -1
- ksadk/server/static/assets/{ebnfDiagram-PWID7BFC-DVfMsLge.js → ebnfDiagram-PWID7BFC-BfCzF1Xi.js} +1 -1
- ksadk/server/static/assets/{erDiagram-SSCWMZ5O-CWEZSYaw.js → erDiagram-SSCWMZ5O-Dpz9_0zn.js} +1 -1
- ksadk/server/static/assets/eventmodeling-NTZA5JFV-B5-8RH9c.js +1 -0
- ksadk/server/static/assets/flowDiagram-A5DVABFB-BppFxEKw.js +1 -0
- ksadk/server/static/assets/{ganttDiagram-EL5Y4UJY-TWIxoyYL.js → ganttDiagram-EL5Y4UJY-DDaG1f4_.js} +1 -1
- ksadk/server/static/assets/gitGraph-4MIJSDKK-B-AhYj4C.js +1 -0
- ksadk/server/static/assets/{gitGraphDiagram-WWUBYQGX-DDh2hd2S.js → gitGraphDiagram-WWUBYQGX-DcxzRwYC.js} +1 -1
- ksadk/server/static/assets/index-BMd2mucF.css +2 -0
- ksadk/server/static/assets/index-D5qyyhTH.js +244 -0
- ksadk/server/static/assets/info-A6RAGUB7-0uiKrC35.js +1 -0
- ksadk/server/static/assets/{infoDiagram-RXCK75RN-CgoyWiDR.js → infoDiagram-RXCK75RN-CYMdn6lQ.js} +1 -1
- ksadk/server/static/assets/{ishikawaDiagram-5VMMS53U-CyRIu_om.js → ishikawaDiagram-5VMMS53U-CLHFAD6c.js} +1 -1
- ksadk/server/static/assets/{journeyDiagram-EYS64GPL-DN5JXHzN.js → journeyDiagram-EYS64GPL-BHSKQGAl.js} +1 -1
- ksadk/server/static/assets/{kanban-definition-3QL26DDD-CNP3ui66.js → kanban-definition-3QL26DDD-D5W3tjTT.js} +1 -1
- ksadk/server/static/assets/{katex-DWEzQy1d.js → katex-mtjOi4KM.js} +1 -1
- ksadk/server/static/assets/{linear-C-qHp7d2.js → linear-BETqsxE_.js} +1 -1
- ksadk/server/static/assets/{mermaid-parser.core-Cl-K943T.js → mermaid-parser.core-DPWrvs90.js} +2 -2
- ksadk/server/static/assets/{mindmap-definition-FBJOCRG2-D5DB5mYm.js → mindmap-definition-FBJOCRG2-CJG2mfBP.js} +1 -1
- ksadk/server/static/assets/packet-AYTQ26CC-BVTmZ_cw.js +1 -0
- ksadk/server/static/assets/{pegDiagram-XKGWAZYB-BQVc9ia_.js → pegDiagram-XKGWAZYB-GjAPNaqn.js} +1 -1
- ksadk/server/static/assets/pie-WAS4IAKB-DyfxBU7V.js +1 -0
- ksadk/server/static/assets/{pieDiagram-E7YTZNPT-B6UCAvtY.js → pieDiagram-E7YTZNPT-ToIewrqr.js} +1 -1
- ksadk/server/static/assets/{quadrantDiagram-AXDQQJYC-mIr2d3eb.js → quadrantDiagram-AXDQQJYC-4d78KiEY.js} +1 -1
- ksadk/server/static/assets/radar-RG4KPBEZ-FFontjL2.js +1 -0
- ksadk/server/static/assets/railroad-74A4TZTK-D0Uidzen.js +1 -0
- ksadk/server/static/assets/railroad-abnf-HS5TGJTU-BOo_9T2h.js +1 -0
- ksadk/server/static/assets/railroad-ebnf-LZEXJU2U-D6-BjW7Z.js +1 -0
- ksadk/server/static/assets/railroad-peg-WCYAUIDC-CXx__yMm.js +1 -0
- ksadk/server/static/assets/{railroadDiagram-O6MQD6OU-Dt3FFDmK.js → railroadDiagram-O6MQD6OU-DKzx4xfv.js} +1 -1
- ksadk/server/static/assets/{requirementDiagram-EFPCY7ZU-Cz_vQtgF.js → requirementDiagram-EFPCY7ZU-CJYljxQS.js} +1 -1
- ksadk/server/static/assets/{sankeyDiagram-P5KCCOFB-wlO1TsH5.js → sankeyDiagram-P5KCCOFB-DLU2fV1w.js} +1 -1
- ksadk/server/static/assets/{sequenceDiagram-WJ2MYXX4-CHRbElYq.js → sequenceDiagram-WJ2MYXX4-CVqysrA9.js} +1 -1
- ksadk/server/static/assets/{sizeCapture-X5ZJPWSS-DXX54iyO.js → sizeCapture-X5ZJPWSS-BUxfmTHc.js} +1 -1
- ksadk/server/static/assets/{stateDiagram-HBIQ2CUA-Dp_lw9II.js → stateDiagram-HBIQ2CUA-CNFgYI9E.js} +1 -1
- ksadk/server/static/assets/stateDiagram-v2-4QOOHH4V-BXAFScz8.js +1 -0
- ksadk/server/static/assets/{swimlanes-XN3QIQJK-D8O5UlLG.js → swimlanes-XN3QIQJK-B6qCMe8N.js} +1 -1
- ksadk/server/static/assets/swimlanesDiagram-VK2B7HYN-uIQ2lJKH.js +8 -0
- ksadk/server/static/assets/{timeline-definition-24CTP7MA-8mfKcxvG.js → timeline-definition-24CTP7MA-CMD3x_U_.js} +1 -1
- ksadk/server/static/assets/treeView-Q6P3EWNA-CK5GgucZ.js +1 -0
- ksadk/server/static/assets/treemap-WGGIJYW6-Bq1u1SpG.js +1 -0
- ksadk/server/static/assets/{vennDiagram-4TSXK5OY-EnNl0DE7.js → vennDiagram-4TSXK5OY-BqtUqvXM.js} +1 -1
- ksadk/server/static/assets/wardley-WFR3VGLG-QAt06uEz.js +1 -0
- ksadk/server/static/assets/{wardleyDiagram-VM6X3IG4-DBu5fbYr.js → wardleyDiagram-VM6X3IG4-B5KfDjI-.js} +1 -1
- ksadk/server/static/assets/{xychartDiagram-S5SC5T6Z-BSVXs4IY.js → xychartDiagram-S5SC5T6Z-BaUlSZrn.js} +1 -1
- ksadk/server/static/index.html +2 -2
- ksadk/server/terminal_sessions.py +34 -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/invocation_identity.py +235 -0
- 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/__init__.py +26 -0
- ksadk/skills/events.py +464 -0
- ksadk/skills/manifest_cache.py +263 -0
- ksadk/skills/mcp_server/__init__.py +0 -0
- ksadk/skills/mcp_server/_registry.py +33 -0
- ksadk/skills/mcp_server/_routing.py +26 -0
- ksadk/skills/mcp_server/_workspace_files.py +160 -0
- ksadk/skills/mcp_server/register.py +415 -0
- ksadk/skills/mcp_server/server.py +218 -0
- ksadk/skills/models.py +37 -4
- ksadk/skills/observability.py +132 -0
- ksadk/skills/package_store.py +261 -40
- ksadk/skills/runtime/agent.py +67 -9
- ksadk/skills/runtime/artifact_delivery.py +139 -0
- ksadk/skills/runtime/artifacts.py +87 -0
- ksadk/skills/runtime/backends/e2b.py +460 -27
- ksadk/skills/runtime/backends/local.py +629 -62
- ksadk/skills/runtime/base.py +81 -7
- ksadk/skills/runtime/executor.py +268 -1
- ksadk/skills/runtime/loader.py +118 -5
- ksadk/skills/runtime/pinned.py +114 -0
- ksadk/skills/runtime/request.py +49 -0
- ksadk/skills/service_client.py +167 -28
- ksadk/skills/tool_defs.py +108 -3
- ksadk/studio/api.py +810 -93
- ksadk/studio/api_catalog_routes.py +18 -0
- ksadk/studio/api_contracts.py +8 -2
- ksadk/studio/api_plugin_routes.py +562 -104
- ksadk/studio/api_resource_connections.py +221 -0
- ksadk/studio/authoring.py +12 -6
- ksadk/studio/authoring_coordinator.py +23 -16
- ksadk/studio/builder.py +88 -0
- ksadk/studio/capabilities.py +23 -6
- ksadk/studio/channel_connections.py +333 -0
- ksadk/studio/cloud.py +370 -112
- ksadk/studio/cloud_shared_web.py +638 -0
- ksadk/studio/codex_agent_service.py +130 -28
- ksadk/studio/codex_builder.py +242 -3
- ksadk/studio/codex_credentials.py +90 -0
- ksadk/studio/codex_manifest.py +31 -4
- ksadk/studio/codex_plugin_store.py +746 -0
- ksadk/studio/codex_provider_build.py +231 -0
- ksadk/studio/codex_run.py +190 -26
- ksadk/studio/compatibility_report.py +12 -1
- ksadk/studio/compiler.py +88 -14
- ksadk/studio/configuration.py +182 -0
- ksadk/studio/contracts.py +165 -11
- ksadk/studio/dsh_application.py +247 -0
- ksadk/studio/dsh_capability_service.py +1374 -0
- ksadk/studio/dsh_lifecycle.py +58 -0
- ksadk/studio/dsh_models.py +59 -0
- ksadk/studio/dsh_provider_registration.py +367 -21
- ksadk/studio/entry.py +53 -0
- ksadk/studio/event_store.py +36 -5
- ksadk/studio/execution_host.py +525 -0
- ksadk/studio/framework_run.py +32 -10
- ksadk/studio/hosted_kernel.py +89 -14
- ksadk/studio/kernel_registry.py +418 -0
- ksadk/studio/kernel_sqlite_migration.py +181 -0
- ksadk/studio/mcp_runtime.py +11 -3
- ksadk/studio/model_client.py +1180 -66
- ksadk/studio/model_profile_service.py +26 -11
- ksadk/studio/native_documents.py +172 -0
- ksadk/studio/plugin_composition.py +202 -24
- ksadk/studio/plugin_kernel_adapter.py +21 -106
- ksadk/studio/plugin_lifecycle.py +80 -0
- ksadk/studio/plugin_runtime.py +448 -56
- ksadk/studio/provider_recovery.py +59 -0
- ksadk/studio/recovery_page.py +70 -0
- ksadk/studio/resource_authority.py +664 -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 -2
- ksadk/studio/resource_connections.py +220 -0
- ksadk/studio/run_activity.py +895 -0
- ksadk/studio/run_documents.py +127 -0
- ksadk/studio/run_service.py +789 -83
- ksadk/studio/runtime_catalog.py +53 -10
- ksadk/studio/runtime_source.py +16 -8
- ksadk/studio/scheduler_assistant.py +317 -0
- ksadk/studio/scheduler_runtime.py +32 -280
- ksadk/studio/scheduler_service.py +3 -0
- ksadk/studio/service.py +861 -120
- ksadk/studio/shared_web.py +579 -82
- ksadk/studio/static/assets/ChannelsPage-D_PGmKVq.js +8 -0
- ksadk/studio/static/assets/CodeBlock-DMIf4h33-UIqo-BPW.js +44 -0
- ksadk/studio/static/assets/ExecutionTree-v3HexvPo-Bk8wzGSy.js +1 -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-BesSeCYl-BEOyPC3w.css +1 -0
- ksadk/studio/static/assets/MathMessageMarkdown-BesSeCYl-OhNwH4K9.js +8 -0
- ksadk/studio/static/assets/MermaidBlock-H_0qzQDf-BdXtxug_.js +11 -0
- ksadk/studio/static/assets/MessageMarkdown-CwMTvgFj-g0I-I4dD.js +59 -0
- ksadk/studio/static/assets/PrismRenderer-5pK6tUdb.js +3 -0
- ksadk/studio/static/assets/TeamsPage-DqX4HWKQ.js +3 -0
- ksadk/studio/static/assets/abnfDiagram-VCTEODGH-Bnb1O3tA.js +1 -0
- ksadk/studio/static/assets/arc-Pry-7G1_.js +1 -0
- ksadk/studio/static/assets/architecture-7GRP2DOG-BMOPAkUC.js +1 -0
- ksadk/studio/static/assets/architectureDiagram-5GKGNRK7-5Zn1gqJv.js +36 -0
- ksadk/studio/static/assets/array-BifhSqXX.js +1 -0
- ksadk/studio/static/assets/blockDiagram-I7D4REHJ-CLB4L11u.js +129 -0
- ksadk/studio/static/assets/c4Diagram-7LVT6UL2-BOma_Z_F.js +38 -0
- ksadk/studio/static/assets/channel-r8itPEik.js +1 -0
- ksadk/studio/static/assets/chunk-2E4U76K2-BFf_huql.js +2 -0
- ksadk/studio/static/assets/chunk-2Q5K7J3B-C1jixKkw.js +1 -0
- ksadk/studio/static/assets/chunk-2ZTRR5NV-C2qZJila.js +2 -0
- ksadk/studio/static/assets/chunk-3Z5EZCMW-DMniOlPd.js +1 -0
- ksadk/studio/static/assets/chunk-4HAMMTFA-DVtDP4rm.js +62 -0
- ksadk/studio/static/assets/chunk-5V3GS4D5-i-ZDOEnP.js +1 -0
- ksadk/studio/static/assets/chunk-5VM5RSS4-ZNzvKenW.js +15 -0
- ksadk/studio/static/assets/chunk-6AZGARVD-BB6FqMl-.js +1 -0
- ksadk/studio/static/assets/chunk-6EIED4P4-DdUJkP0f.js +1 -0
- ksadk/studio/static/assets/chunk-6K3QC6MW-CqVsVn-y.js +1 -0
- ksadk/studio/static/assets/chunk-6TQVIW2G-DKlLbNIP.js +1 -0
- ksadk/studio/static/assets/chunk-747NJXEK-BFkZPlab.js +2 -0
- ksadk/studio/static/assets/chunk-75Z2AOVW-BZNhM4vB.js +2 -0
- ksadk/studio/static/assets/chunk-CLGD4ZFX-D-GTtyKs.js +1 -0
- ksadk/studio/static/assets/chunk-DU6HZSFF-CpEZCUgg.js +128 -0
- ksadk/studio/static/assets/chunk-F27PBJKO-D7pvKf0C.js +1 -0
- ksadk/studio/static/assets/chunk-FOHPRMQF-DHwB1DNv.js +161 -0
- ksadk/studio/static/assets/chunk-GMAD6QVW-DE_8H717.js +72 -0
- ksadk/studio/static/assets/chunk-GVQU2GXP-BfEB0lNv.js +1 -0
- ksadk/studio/static/assets/chunk-I5DQTOEV-Hm2LfiYI.js +1 -0
- ksadk/studio/static/assets/chunk-ICYGCRZG-749o-pGJ.js +1 -0
- ksadk/studio/static/assets/chunk-IH6LHLGP-CC6I9F3i.js +1 -0
- ksadk/studio/static/assets/chunk-IMKFNOWR-D38axYOR.js +231 -0
- ksadk/studio/static/assets/chunk-JWPE2WC7-DVXcaiue.js +1 -0
- ksadk/studio/static/assets/chunk-KI3K4JFJ-Rma-0k_M.js +1 -0
- ksadk/studio/static/assets/chunk-L3NEJ4N5-Dq5xn7aL.js +1 -0
- ksadk/studio/static/assets/chunk-LNGE3PJU-DWpGwHrW.js +34 -0
- ksadk/studio/static/assets/chunk-OSK3NFVY-DiCQjx9b.js +10 -0
- ksadk/studio/static/assets/chunk-OUJLGHUK-D0j2JRSg.js +2 -0
- ksadk/studio/static/assets/chunk-P2QGCYS3-VdhKmfYq.js +1 -0
- ksadk/studio/static/assets/chunk-POPQ4Y6H-C1_rzO5M.js +1 -0
- ksadk/studio/static/assets/chunk-PWAF6VOD-B45HvflI.js +1 -0
- ksadk/studio/static/assets/chunk-SHT3W25Y-DsCFnRVE.js +168 -0
- ksadk/studio/static/assets/chunk-SVP7TREG-DljApgRX.js +88 -0
- ksadk/studio/static/assets/chunk-TICWLB2K-DWqRtyqa.js +206 -0
- ksadk/studio/static/assets/chunk-TLUHSLCS-DUeGgnD5.js +2 -0
- ksadk/studio/static/assets/chunk-UY3FDG6J-CnmaAkG5.js +1 -0
- ksadk/studio/static/assets/chunk-XHIXRSVI-BFQ6B8BE.js +1 -0
- ksadk/studio/static/assets/chunk-XXDRQBXY-DqAYeljN.js +1 -0
- ksadk/studio/static/assets/chunk-Y2CYZVJY-DsF7k-Jl.js +1 -0
- ksadk/studio/static/assets/classDiagram-ZZMXUADV-DjeMNJmu.js +1 -0
- ksadk/studio/static/assets/classDiagram-v2-VYDZK3BY-DjeMNJmu.js +1 -0
- ksadk/studio/static/assets/clsx-DB0hHKMi.js +1 -0
- ksadk/studio/static/assets/cose-bilkent-JH36ORCC-om8AY0Mc.js +1 -0
- ksadk/studio/static/assets/createLucideIcon-DR0LGTP5.js +1 -0
- ksadk/studio/static/assets/cynefin-OW5HDTMX-7tP7QfM3.js +1 -0
- ksadk/studio/static/assets/cynefinDiagram-5FMLGOSQ-6BrmK52S.js +62 -0
- ksadk/studio/static/assets/cytoscape.esm-CGd-uY3x.js +321 -0
- ksadk/studio/static/assets/dagre-GXQ25YYZ-buZBRlwz.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-C6aH78c4.js +30 -0
- ksadk/studio/static/assets/diagram-UQ7AKVKN-DY_tQ6C_.js +41 -0
- ksadk/studio/static/assets/diagram-VSXAHHWV-DX9p5cQT.js +3 -0
- ksadk/studio/static/assets/diagram-VX7I27RA-DB2WSH8X.js +24 -0
- ksadk/studio/static/assets/diagram-Z3DM3KII-Ce1BJwHE.js +24 -0
- ksadk/studio/static/assets/dist-v5Q1xZ2K.js +1 -0
- ksadk/studio/static/assets/ebnfDiagram-PWID7BFC-Daukxwqf.js +1 -0
- ksadk/studio/static/assets/erDiagram-RLTQ6QDP-CGthTMmJ.js +99 -0
- ksadk/studio/static/assets/eventmodeling-NTZA5JFV-BR2FzK4R.js +1 -0
- ksadk/studio/static/assets/flowDiagram-HODETNUW-CZ1tEenp.js +1 -0
- ksadk/studio/static/assets/ganttDiagram-EL5Y4UJY-BfoAZW9X.js +292 -0
- ksadk/studio/static/assets/gitGraph-4MIJSDKK-DYlXv_yJ.js +1 -0
- ksadk/studio/static/assets/gitGraphDiagram-WWUBYQGX-S985OIJF.js +106 -0
- ksadk/studio/static/assets/graphlib-DS17s2tU.js +1 -0
- ksadk/studio/static/assets/iconfont-4HN3C9Pg.woff2 +0 -0
- ksadk/studio/static/assets/index-CfEnms6Y.css +2 -0
- ksadk/studio/static/assets/index-Dp61rOWZ.js +0 -0
- ksadk/studio/static/assets/index.dom-BQenBtFm.js +1 -0
- ksadk/studio/static/assets/info-A6RAGUB7-BlU-8_xu.js +1 -0
- ksadk/studio/static/assets/infoDiagram-27XIBGKW-CO3W8tFn.js +2 -0
- ksadk/studio/static/assets/init-C-OQMol4.js +1 -0
- ksadk/studio/static/assets/ishikawaDiagram-5VMMS53U-BUGEl8cO.js +70 -0
- ksadk/studio/static/assets/journeyDiagram-3NMN7TZE-Ch2ZYxvr.js +139 -0
- ksadk/studio/static/assets/kanban-definition-UXKFOSKX-Da-Fp4vC.js +89 -0
- ksadk/studio/static/assets/katex-DhON-x74.js +257 -0
- ksadk/studio/static/assets/kingsoft-cloud-BOcLiQ3e.ico +0 -0
- ksadk/studio/static/assets/line-BDaeq300.js +1 -0
- ksadk/studio/static/assets/linear-DmucvK78.js +1 -0
- ksadk/studio/static/assets/mermaid-parser.core-Cj5mYdBi.js +4 -0
- ksadk/studio/static/assets/mindmap-definition-YA3MSWOX-CvlsVQ38.js +96 -0
- ksadk/studio/static/assets/ordinal-BDEzSJ7C.js +1 -0
- ksadk/studio/static/assets/packet-AYTQ26CC-BSJEH9Lb.js +1 -0
- ksadk/studio/static/assets/path-fybaL0A-.js +1 -0
- ksadk/studio/static/assets/pegDiagram-XKGWAZYB-BuHuNgT5.js +1 -0
- ksadk/studio/static/assets/pie-WAS4IAKB-qxv01Y8W.js +1 -0
- ksadk/studio/static/assets/pieDiagram-E7YTZNPT-DlrWiSOv.js +39 -0
- ksadk/studio/static/assets/preload-helper-CO68xz6u.js +1 -0
- ksadk/studio/static/assets/presentation-yYw7xK60-BmcZriri.js +1 -0
- ksadk/studio/static/assets/quadrantDiagram-AXDQQJYC-BA3hpUZM.js +7 -0
- ksadk/studio/static/assets/radar-RG4KPBEZ-B6h6pWOs.js +1 -0
- ksadk/studio/static/assets/railroad-74A4TZTK-CGtTWdGc.js +1 -0
- ksadk/studio/static/assets/railroad-abnf-HS5TGJTU-Cq7y22IA.js +1 -0
- ksadk/studio/static/assets/railroad-ebnf-LZEXJU2U-V0aQVv9m.js +1 -0
- ksadk/studio/static/assets/railroad-peg-WCYAUIDC-BQiIsX_p.js +1 -0
- ksadk/studio/static/assets/railroadDiagram-O6MQD6OU-BxpAazym.js +1 -0
- ksadk/studio/static/assets/requirementDiagram-BXWQKSXE-E-Ge0FcV.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-CA6YKhQ3.js +40 -0
- ksadk/studio/static/assets/sequenceDiagram-WJ2MYXX4-CcElXGg4.js +162 -0
- ksadk/studio/static/assets/sizeCapture-INFHLROL-B0uUizjq.js +1 -0
- ksadk/studio/static/assets/src-B6xuSHsQ.js +1 -0
- ksadk/studio/static/assets/stateDiagram-D77RDMKH-DdXZOFqY.js +1 -0
- ksadk/studio/static/assets/stateDiagram-v2-MP3YSRHH-CJbOM-QK.js +1 -0
- ksadk/studio/static/assets/swimlanes-42K2YHIH-NtgEEHLY.js +1 -0
- ksadk/studio/static/assets/swimlanesDiagram-VR7AAH4N-D-AVlW8B.js +8 -0
- ksadk/studio/static/assets/timeline-definition-24CTP7MA-CIuYhNy3.js +120 -0
- ksadk/studio/static/assets/treeView-Q6P3EWNA-BTTYcvrF.js +1 -0
- ksadk/studio/static/assets/treemap-WGGIJYW6-Cg7tyfH8.js +1 -0
- ksadk/studio/static/assets/vennDiagram-4TSXK5OY-7HbApbrv.js +34 -0
- ksadk/studio/static/assets/wardley-WFR3VGLG-C6N1rULY.js +1 -0
- ksadk/studio/static/assets/wardleyDiagram-VM6X3IG4-CMJiaedy.js +78 -0
- ksadk/studio/static/assets/xychartDiagram-S5SC5T6Z-BdgtMvW2.js +7 -0
- ksadk/studio/static/index.html +8 -2
- ksadk/studio/teams_catalog.py +133 -0
- ksadk/studio/teams_installation.py +214 -0
- ksadk/studio/teams_node.py +545 -0
- ksadk/studio/teams_node_runner.py +69 -0
- ksadk/studio/teams_remote.py +274 -0
- ksadk/studio/templates.py +40 -19
- ksadk/studio/validator.py +13 -0
- ksadk/studio/workspace.py +19 -4
- ksadk/studio/workspace_plugins.py +136 -0
- ksadk/studio/workspace_registry.py +286 -0
- ksadk/toolsets/__init__.py +11 -0
- ksadk/toolsets/skills.py +446 -378
- ksadk/toolsets/workspace.py +3 -3
- ksadk/toolsets/workspace_identity.py +15 -0
- ksadk/version.py +1 -1
- ksadk_runtime_common/memory_backend/providers/lancedb.py +56 -2
- ksadk_runtime_common/schemas/memory_backend_manifest.schema.json +148 -148
- ksadk_runtime_common/workspace_files/router.py +26 -13
- agentengine_sdk_python-0.8.3.dist-info/RECORD +0 -833
- ksadk/server/static/assets/MathMessageMarkdown-D9uB55Oh.js +0 -8
- ksadk/server/static/assets/architecture-7GRP2DOG-Dk9nRQ6-.js +0 -1
- ksadk/server/static/assets/channel-s354Yo6o.js +0 -1
- ksadk/server/static/assets/chunk-2Q5K7J3B-CDpPpKR5.js +0 -1
- ksadk/server/static/assets/classDiagram-DTDB5LWJ-Dd0nucl9.js +0 -1
- ksadk/server/static/assets/classDiagram-v2-JRS7N3AN-Dd0nucl9.js +0 -1
- ksadk/server/static/assets/cynefin-OW5HDTMX-BBlT4uMf.js +0 -1
- ksadk/server/static/assets/dist-DdRBIceA.js +0 -1
- ksadk/server/static/assets/eventmodeling-NTZA5JFV-Dr5okd8V.js +0 -1
- ksadk/server/static/assets/flowDiagram-A5DVABFB-VEO-cVcO.js +0 -1
- ksadk/server/static/assets/gitGraph-4MIJSDKK-CKiKY9Cf.js +0 -1
- ksadk/server/static/assets/index-B2k_urY8.js +0 -241
- ksadk/server/static/assets/index-ILPt6IWF.css +0 -2
- ksadk/server/static/assets/info-A6RAGUB7-ubA4Nm_p.js +0 -1
- ksadk/server/static/assets/packet-AYTQ26CC-C7R3NUlK.js +0 -1
- ksadk/server/static/assets/pie-WAS4IAKB-BIT6qjr3.js +0 -1
- ksadk/server/static/assets/radar-RG4KPBEZ-l5noef9X.js +0 -1
- ksadk/server/static/assets/railroad-74A4TZTK-Baea6ZvM.js +0 -1
- ksadk/server/static/assets/railroad-abnf-HS5TGJTU-OKn8zZnU.js +0 -1
- ksadk/server/static/assets/railroad-ebnf-LZEXJU2U-DdKAKC4l.js +0 -1
- ksadk/server/static/assets/railroad-peg-WCYAUIDC-Bds8udlG.js +0 -1
- ksadk/server/static/assets/stateDiagram-v2-4QOOHH4V-5b-8o2iS.js +0 -1
- ksadk/server/static/assets/swimlanesDiagram-VK2B7HYN-uf6WPRA4.js +0 -8
- ksadk/server/static/assets/treeView-Q6P3EWNA-CK5CSrSO.js +0 -1
- ksadk/server/static/assets/treemap-WGGIJYW6-Ch2BKgAM.js +0 -1
- ksadk/server/static/assets/wardley-WFR3VGLG-YW3Q0ml_.js +0 -1
- ksadk/studio/static/assets/PrismRenderer-IYN-ffww.js +0 -3
- ksadk/studio/static/assets/index-DXs1Eq4M.css +0 -1
- ksadk/studio/static/assets/index-DeDqwTsD.js +0 -283
- {agentengine_sdk_python-0.8.3.dist-info → agentengine_sdk_python-0.8.5.dist-info}/WHEEL +0 -0
- {agentengine_sdk_python-0.8.3.dist-info → agentengine_sdk_python-0.8.5.dist-info}/entry_points.txt +0 -0
- {agentengine_sdk_python-0.8.3.dist-info → agentengine_sdk_python-0.8.5.dist-info}/licenses/LICENSE +0 -0
- {agentengine_sdk_python-0.8.3.dist-info → agentengine_sdk_python-0.8.5.dist-info}/top_level.txt +0 -0
ksadk/runners/adk_runner.py
CHANGED
|
@@ -21,6 +21,7 @@ from opentelemetry import trace
|
|
|
21
21
|
from ksadk.compat.adk_compat import genai_types as types
|
|
22
22
|
from ksadk.conversations.attachments import classify_attachment_kind, read_attachment_uri_bytes
|
|
23
23
|
from ksadk.conversations.model_context import supports_native_image_input
|
|
24
|
+
from ksadk.runners._session_identity import ADKSessionIdentityMixin
|
|
24
25
|
from ksadk.runners.base_runner import BaseRunner
|
|
25
26
|
from ksadk.runners.usage_accumulator import accumulate_usage
|
|
26
27
|
from ksadk.runners.utils import load_agent_module
|
|
@@ -45,7 +46,7 @@ def _part_metadata_flag(part: Any, key: str) -> bool:
|
|
|
45
46
|
return False
|
|
46
47
|
|
|
47
48
|
|
|
48
|
-
class ADKRunner(BaseRunner):
|
|
49
|
+
class ADKRunner(ADKSessionIdentityMixin, BaseRunner):
|
|
49
50
|
"""ADK 框架运行时"""
|
|
50
51
|
|
|
51
52
|
def __init__(self, detection_result: Any, project_dir: str):
|
|
@@ -54,10 +55,12 @@ class ADKRunner(BaseRunner):
|
|
|
54
55
|
self._session_service: Any = None
|
|
55
56
|
# Map external session_ids (e.g. from run_interactive or web) to ADK internal session IDs
|
|
56
57
|
self._session_map: Dict[str, str] = {}
|
|
58
|
+
self._session_user_map: Dict[str, str] = {}
|
|
57
59
|
# Fallback default session
|
|
58
60
|
self._default_session_id: Optional[str] = None
|
|
59
61
|
# Memory integration
|
|
60
62
|
self._short_term_memory: Any = None
|
|
63
|
+
self._checkpoint_storage_source = "none"
|
|
61
64
|
self._long_term_memory: Any = None
|
|
62
65
|
# Knowledge base integration
|
|
63
66
|
self._knowledge_base: Any = None
|
|
@@ -66,6 +69,7 @@ class ADKRunner(BaseRunner):
|
|
|
66
69
|
# ADK resumability state
|
|
67
70
|
self._resumable: bool = False
|
|
68
71
|
self._resume_disabled_reason: Optional[str] = None
|
|
72
|
+
self._resume_disabled_reason_code: Optional[str] = None
|
|
69
73
|
# P1.1 sub-issue: guard invocation_map read-modify-write so concurrent
|
|
70
74
|
# invocations on the same session don't lose each other's mappings.
|
|
71
75
|
self._invocation_map_lock = asyncio.Lock()
|
|
@@ -75,7 +79,21 @@ class ADKRunner(BaseRunner):
|
|
|
75
79
|
).strip()
|
|
76
80
|
|
|
77
81
|
async def close(self) -> None:
|
|
78
|
-
"""Close runtime toolsets owned by this runner."""
|
|
82
|
+
"""Close database sessions and runtime toolsets owned by this runner."""
|
|
83
|
+
session_service = self._session_service
|
|
84
|
+
self._session_service = None
|
|
85
|
+
if session_service is not None:
|
|
86
|
+
close_session = getattr(session_service, "aclose", None) or getattr(
|
|
87
|
+
session_service, "close", None
|
|
88
|
+
)
|
|
89
|
+
if callable(close_session):
|
|
90
|
+
try:
|
|
91
|
+
result = close_session()
|
|
92
|
+
if inspect.isawaitable(result):
|
|
93
|
+
await result
|
|
94
|
+
except Exception as exc:
|
|
95
|
+
logger.warning("Failed to close ADK session service: %s", exc)
|
|
96
|
+
|
|
79
97
|
toolsets = list(self._runtime_toolsets)
|
|
80
98
|
self._runtime_toolsets.clear()
|
|
81
99
|
for toolset in toolsets:
|
|
@@ -252,14 +270,23 @@ class ADKRunner(BaseRunner):
|
|
|
252
270
|
"KSADK_STM_DB_URL",
|
|
253
271
|
"KSADK_SESSION_BACKEND",
|
|
254
272
|
"KSADK_SESSION_DSN",
|
|
273
|
+
"KSADK_CHECKPOINT_DSN",
|
|
255
274
|
)
|
|
256
275
|
if not any(str(os.environ.get(name, "")).strip() for name in configured_names):
|
|
257
276
|
return None
|
|
258
277
|
|
|
259
278
|
try:
|
|
260
279
|
from ksadk.memory.adk import ShortTermMemory
|
|
280
|
+
from ksadk.sessions import resolve_persistence_topology
|
|
261
281
|
|
|
262
|
-
|
|
282
|
+
topology = resolve_persistence_topology(framework="adk")
|
|
283
|
+
self._checkpoint_storage_source = topology.checkpoint.source
|
|
284
|
+
if topology.checkpoint.backend == "postgres" and topology.checkpoint.dsn:
|
|
285
|
+
stm = ShortTermMemory.from_persistence_target(topology.checkpoint)
|
|
286
|
+
else:
|
|
287
|
+
# Preserve legacy SQLite ADK/STM path handling when no remote
|
|
288
|
+
# checkpoint target has been selected.
|
|
289
|
+
stm = ShortTermMemory.from_env()
|
|
263
290
|
logger.info(
|
|
264
291
|
"ShortTermMemory initialized: backend=%s path=%s",
|
|
265
292
|
stm.backend,
|
|
@@ -273,6 +300,69 @@ class ADKRunner(BaseRunner):
|
|
|
273
300
|
def get_session_adapter(self):
|
|
274
301
|
return ADKSessionAdapter()
|
|
275
302
|
|
|
303
|
+
async def prepare_runtime_capabilities(self) -> None:
|
|
304
|
+
"""Prepare persistence-backed capability state without importing user code."""
|
|
305
|
+
|
|
306
|
+
if self._short_term_memory is None:
|
|
307
|
+
self._short_term_memory = self._init_short_term_memory()
|
|
308
|
+
if self._short_term_memory is not None and self._session_service is None:
|
|
309
|
+
self._session_service = getattr(self._short_term_memory, "session_service", None)
|
|
310
|
+
resumable = self._resolve_resumability()
|
|
311
|
+
self._resume_disabled_reason = None
|
|
312
|
+
self._resume_disabled_reason_code = None
|
|
313
|
+
if resumable.enabled:
|
|
314
|
+
compatible, reason = self._check_adk_resume_compatibility()
|
|
315
|
+
if not compatible:
|
|
316
|
+
self._resumable = False
|
|
317
|
+
self._resume_disabled_reason = reason
|
|
318
|
+
self._resume_disabled_reason_code = "ADK_VERSION_UNSUPPORTED"
|
|
319
|
+
return
|
|
320
|
+
self._resumable = resumable.enabled
|
|
321
|
+
|
|
322
|
+
async def refresh_runtime_capabilities(self) -> None:
|
|
323
|
+
await super().refresh_runtime_capabilities()
|
|
324
|
+
session_service = (
|
|
325
|
+
getattr(self._short_term_memory, "session_service", None)
|
|
326
|
+
if self._short_term_memory
|
|
327
|
+
else None
|
|
328
|
+
)
|
|
329
|
+
refresh = getattr(session_service, "refresh_persistence_capability", None)
|
|
330
|
+
if callable(refresh):
|
|
331
|
+
result = refresh()
|
|
332
|
+
if inspect.isawaitable(result):
|
|
333
|
+
await result
|
|
334
|
+
|
|
335
|
+
async def attach_runtime_handle(self, handle: Any) -> bool:
|
|
336
|
+
"""Validate that a persisted ADK invocation can be resumed here.
|
|
337
|
+
|
|
338
|
+
Invocation existence is resolved by ADK when ``run_async`` receives the
|
|
339
|
+
invocation id. This seam proves the deployment-side prerequisites
|
|
340
|
+
before Runtime v2 accepts a handle restored from session metadata.
|
|
341
|
+
"""
|
|
342
|
+
|
|
343
|
+
if str(getattr(handle, "runtime_type", "") or "").strip().lower() != "adk":
|
|
344
|
+
return False
|
|
345
|
+
native_ref = getattr(handle, "native_ref", None)
|
|
346
|
+
if not isinstance(native_ref, Mapping):
|
|
347
|
+
return False
|
|
348
|
+
framework_ref = native_ref.get("framework_ref")
|
|
349
|
+
adk_ref = framework_ref.get("adk") if isinstance(framework_ref, Mapping) else None
|
|
350
|
+
invocation_id = str(
|
|
351
|
+
native_ref.get("invocation_id")
|
|
352
|
+
or (adk_ref.get("invocation_id") if isinstance(adk_ref, Mapping) else "")
|
|
353
|
+
or ""
|
|
354
|
+
).strip()
|
|
355
|
+
if not invocation_id:
|
|
356
|
+
return False
|
|
357
|
+
|
|
358
|
+
await self.prepare_runtime_capabilities()
|
|
359
|
+
capability = self.describe_checkpoint_capability()
|
|
360
|
+
return bool(
|
|
361
|
+
capability.get("Supported")
|
|
362
|
+
and capability.get("Durable")
|
|
363
|
+
and capability.get("SharedAcrossPods")
|
|
364
|
+
)
|
|
365
|
+
|
|
276
366
|
def describe_checkpoint_capability(self) -> dict[str, Any]:
|
|
277
367
|
resumable = getattr(self, "_resumable", False)
|
|
278
368
|
stm_backend = (
|
|
@@ -285,8 +375,16 @@ class ADKRunner(BaseRunner):
|
|
|
285
375
|
elif stm_backend == "database":
|
|
286
376
|
backend = "adk_invocation+postgres"
|
|
287
377
|
shared_across_pods = stm_backend == "database"
|
|
288
|
-
|
|
289
|
-
"
|
|
378
|
+
session_service = (
|
|
379
|
+
getattr(self._short_term_memory, "session_service", None)
|
|
380
|
+
if self._short_term_memory
|
|
381
|
+
else None
|
|
382
|
+
)
|
|
383
|
+
persistence_degraded = bool(
|
|
384
|
+
shared_across_pods and getattr(session_service, "degraded", False)
|
|
385
|
+
)
|
|
386
|
+
capability = {
|
|
387
|
+
"Supported": shared_across_pods and not persistence_degraded,
|
|
290
388
|
"Backend": backend,
|
|
291
389
|
"Scope": "invocation",
|
|
292
390
|
"Durable": stm_backend is not None and stm_backend != "local",
|
|
@@ -296,12 +394,19 @@ class ADKRunner(BaseRunner):
|
|
|
296
394
|
"Reason": (
|
|
297
395
|
"ADK ResumabilityConfig and shared database session backend enabled; "
|
|
298
396
|
"resume via invocation_id"
|
|
299
|
-
if shared_across_pods
|
|
397
|
+
if shared_across_pods and not persistence_degraded
|
|
398
|
+
else "ADK database session persistence is temporarily degraded"
|
|
399
|
+
if persistence_degraded
|
|
300
400
|
else "ADK ResumabilityConfig enabled, but the session backend is "
|
|
301
401
|
"process-local or SQLite and cannot support cross-pod recovery"
|
|
302
402
|
),
|
|
303
403
|
}
|
|
304
|
-
|
|
404
|
+
if persistence_degraded:
|
|
405
|
+
capability["ReasonCode"] = "CHECKPOINT_STORE_DEGRADED"
|
|
406
|
+
elif not shared_across_pods:
|
|
407
|
+
capability["ReasonCode"] = "CHECKPOINTER_NOT_DURABLE"
|
|
408
|
+
return capability
|
|
409
|
+
capability = {
|
|
305
410
|
"Supported": False,
|
|
306
411
|
"Backend": "none",
|
|
307
412
|
"Scope": "unknown",
|
|
@@ -314,6 +419,9 @@ class ADKRunner(BaseRunner):
|
|
|
314
419
|
"KSADK_ADK_RESUMABLE=1 or configure App with resumability_config"
|
|
315
420
|
),
|
|
316
421
|
}
|
|
422
|
+
if self._resume_disabled_reason_code:
|
|
423
|
+
capability["ReasonCode"] = self._resume_disabled_reason_code
|
|
424
|
+
return capability
|
|
317
425
|
|
|
318
426
|
def get_runtime_capabilities(self) -> dict[str, Any]:
|
|
319
427
|
capabilities = super().get_runtime_capabilities()
|
|
@@ -365,6 +473,9 @@ class ADKRunner(BaseRunner):
|
|
|
365
473
|
),
|
|
366
474
|
}
|
|
367
475
|
capabilities["ResumeRun"]["Reason"] = capabilities["Checkpoint"]["Reason"]
|
|
476
|
+
reason_code = str(capabilities["Checkpoint"].get("ReasonCode") or "")
|
|
477
|
+
if reason_code:
|
|
478
|
+
capabilities["ResumeRun"]["ReasonCode"] = reason_code
|
|
368
479
|
return capabilities
|
|
369
480
|
|
|
370
481
|
@dataclass
|
|
@@ -445,6 +556,8 @@ class ADKRunner(BaseRunner):
|
|
|
445
556
|
|
|
446
557
|
resumable = self._resolve_resumability()
|
|
447
558
|
resumability_enabled = resumable.enabled
|
|
559
|
+
self._resume_disabled_reason = None
|
|
560
|
+
self._resume_disabled_reason_code = None
|
|
448
561
|
|
|
449
562
|
# 版本兼容性检查:低于最低版本时强制关闭恢复
|
|
450
563
|
resume_compatible, resume_reason = self._check_adk_resume_compatibility()
|
|
@@ -453,6 +566,7 @@ class ADKRunner(BaseRunner):
|
|
|
453
566
|
resumable = self._ResolvabilityResult(enabled=False, source="version_check", app=None)
|
|
454
567
|
resumability_enabled = False
|
|
455
568
|
self._resume_disabled_reason = resume_reason
|
|
569
|
+
self._resume_disabled_reason_code = "ADK_VERSION_UNSUPPORTED"
|
|
456
570
|
|
|
457
571
|
if resumable.app is not None:
|
|
458
572
|
runner_kwargs = dict(
|
|
@@ -474,7 +588,7 @@ class ADKRunner(BaseRunner):
|
|
|
474
588
|
)
|
|
475
589
|
except ImportError:
|
|
476
590
|
logger.warning(
|
|
477
|
-
"ADK ResumabilityConfig not available (requires google-adk >= 1.
|
|
591
|
+
"ADK ResumabilityConfig not available (requires google-adk >= 1.16.0); "
|
|
478
592
|
"falling back to non-resumable Runner"
|
|
479
593
|
)
|
|
480
594
|
runner_kwargs = dict(
|
|
@@ -484,6 +598,7 @@ class ADKRunner(BaseRunner):
|
|
|
484
598
|
)
|
|
485
599
|
resumability_enabled = False
|
|
486
600
|
self._resume_disabled_reason = "ADK ResumabilityConfig is unavailable"
|
|
601
|
+
self._resume_disabled_reason_code = "ADK_VERSION_UNSUPPORTED"
|
|
487
602
|
else:
|
|
488
603
|
runner_kwargs = dict(
|
|
489
604
|
agent=self._agent,
|
|
@@ -530,7 +645,7 @@ class ADKRunner(BaseRunner):
|
|
|
530
645
|
|
|
531
646
|
agent_name = self._agent.name if self._agent else "default"
|
|
532
647
|
ltm = LongTermMemory.from_env(app_name=agent_name)
|
|
533
|
-
logger.info(f"LongTermMemory initialized: backend={backend},
|
|
648
|
+
logger.info(f"LongTermMemory initialized: backend={backend}, app_name={agent_name}")
|
|
534
649
|
return ltm
|
|
535
650
|
except Exception as e:
|
|
536
651
|
logger.warning(f"Failed to init LongTermMemory: {e}.")
|
|
@@ -554,7 +669,7 @@ class ADKRunner(BaseRunner):
|
|
|
554
669
|
|
|
555
670
|
kb = KnowledgeBaseClient.from_env()
|
|
556
671
|
logger.info(
|
|
557
|
-
f"KnowledgeBase initialized: dataset_id={kb.dataset_id},
|
|
672
|
+
f"KnowledgeBase initialized: dataset_id={kb.dataset_id}, region={kb.region}"
|
|
558
673
|
)
|
|
559
674
|
return kb
|
|
560
675
|
except ImportError:
|
|
@@ -938,7 +1053,8 @@ class ADKRunner(BaseRunner):
|
|
|
938
1053
|
raise TypeError("加载的对象不是有效的 ADK Agent")
|
|
939
1054
|
|
|
940
1055
|
# 初始化记忆体 (从环境变量读取配置)
|
|
941
|
-
self._short_term_memory
|
|
1056
|
+
if self._short_term_memory is None:
|
|
1057
|
+
self._short_term_memory = self._init_short_term_memory()
|
|
942
1058
|
self._long_term_memory = self._init_long_term_memory()
|
|
943
1059
|
|
|
944
1060
|
# 初始化知识库 (从环境变量读取配置)
|
|
@@ -1081,49 +1197,6 @@ class ADKRunner(BaseRunner):
|
|
|
1081
1197
|
|
|
1082
1198
|
return prepare_trace_metadata(detection_result=getattr(self, "detection_result", None))
|
|
1083
1199
|
|
|
1084
|
-
async def _ensure_session(self, external_session_id: Optional[str] = None) -> str:
|
|
1085
|
-
"""Get or create ADK session ID based on external ID
|
|
1086
|
-
|
|
1087
|
-
When ShortTermMemory is configured, uses its create_session method
|
|
1088
|
-
which supports session retrieval (if session_id already exists).
|
|
1089
|
-
"""
|
|
1090
|
-
# Case 1: External ID provided
|
|
1091
|
-
if external_session_id:
|
|
1092
|
-
if external_session_id in self._session_map:
|
|
1093
|
-
return self._session_map[external_session_id]
|
|
1094
|
-
|
|
1095
|
-
# Create new ADK session and map it
|
|
1096
|
-
if self._short_term_memory:
|
|
1097
|
-
session = await self._short_term_memory.create_session(
|
|
1098
|
-
app_name=self._agent.name,
|
|
1099
|
-
user_id="ksadk_user",
|
|
1100
|
-
session_id=external_session_id,
|
|
1101
|
-
)
|
|
1102
|
-
else:
|
|
1103
|
-
if self._session_service is None:
|
|
1104
|
-
raise RuntimeError("ADK session service is not initialized")
|
|
1105
|
-
session = await self._session_service.create_session(
|
|
1106
|
-
app_name=self._agent.name, user_id="ksadk_user"
|
|
1107
|
-
)
|
|
1108
|
-
self._session_map[external_session_id] = session.id
|
|
1109
|
-
return str(session.id)
|
|
1110
|
-
|
|
1111
|
-
# Case 2: No external ID (use default singleton)
|
|
1112
|
-
if self._default_session_id is None:
|
|
1113
|
-
if self._short_term_memory:
|
|
1114
|
-
session = await self._short_term_memory.create_session(
|
|
1115
|
-
app_name=self._agent.name,
|
|
1116
|
-
user_id="ksadk_user",
|
|
1117
|
-
)
|
|
1118
|
-
else:
|
|
1119
|
-
if self._session_service is None:
|
|
1120
|
-
raise RuntimeError("ADK session service is not initialized")
|
|
1121
|
-
session = await self._session_service.create_session(
|
|
1122
|
-
app_name=self._agent.name, user_id="ksadk_user"
|
|
1123
|
-
)
|
|
1124
|
-
self._default_session_id = session.id
|
|
1125
|
-
return str(self._default_session_id)
|
|
1126
|
-
|
|
1127
1200
|
async def save_session_to_long_term_memory(
|
|
1128
1201
|
self, session_id: str, user_id: str = "ksadk_user"
|
|
1129
1202
|
) -> bool:
|
|
@@ -1366,7 +1439,7 @@ class ADKRunner(BaseRunner):
|
|
|
1366
1439
|
return max_seq
|
|
1367
1440
|
except Exception as exc:
|
|
1368
1441
|
logger.warning(
|
|
1369
|
-
"ADKRunner: failed to query max checkpoint_seq
|
|
1442
|
+
"ADKRunner: failed to query max checkpoint_seq for run_id=%s: %s",
|
|
1370
1443
|
run_id,
|
|
1371
1444
|
exc,
|
|
1372
1445
|
)
|
|
@@ -1473,8 +1546,14 @@ class ADKRunner(BaseRunner):
|
|
|
1473
1546
|
session_id,
|
|
1474
1547
|
"adk",
|
|
1475
1548
|
{
|
|
1476
|
-
"external_session_id": str(
|
|
1477
|
-
|
|
1549
|
+
"external_session_id": str(
|
|
1550
|
+
binding.get("external_session_id") or session_id
|
|
1551
|
+
),
|
|
1552
|
+
"internal_session_id": str(
|
|
1553
|
+
binding.get("internal_session_id") or session_id
|
|
1554
|
+
),
|
|
1555
|
+
"native_user_id": str(binding.get("native_user_id") or "ksadk_user"),
|
|
1556
|
+
"owner_scope_ref": str(binding.get("owner_scope_ref") or ""),
|
|
1478
1557
|
"invocation_map": invocation_map,
|
|
1479
1558
|
},
|
|
1480
1559
|
)
|
|
@@ -1636,7 +1715,7 @@ class ADKRunner(BaseRunner):
|
|
|
1636
1715
|
metadata=metadata,
|
|
1637
1716
|
)
|
|
1638
1717
|
logger.debug(
|
|
1639
|
-
"ADKRunner: wrote checkpoint adk-ckpt-%d at boundary
|
|
1718
|
+
"ADKRunner: wrote checkpoint adk-ckpt-%d at boundary (session=%s, invocation_id=%s)",
|
|
1640
1719
|
checkpoint_seq,
|
|
1641
1720
|
session_id,
|
|
1642
1721
|
adk_invocation_id,
|
|
@@ -1669,17 +1748,32 @@ class ADKRunner(BaseRunner):
|
|
|
1669
1748
|
getattr(self._short_term_memory, "backend", None) if self._short_term_memory else None
|
|
1670
1749
|
)
|
|
1671
1750
|
shared_across_pods = stm_backend == "database"
|
|
1672
|
-
|
|
1751
|
+
session_service = (
|
|
1752
|
+
getattr(self._short_term_memory, "session_service", None)
|
|
1753
|
+
if self._short_term_memory
|
|
1754
|
+
else None
|
|
1755
|
+
)
|
|
1756
|
+
persistence_degraded = bool(
|
|
1757
|
+
shared_across_pods and getattr(session_service, "degraded", False)
|
|
1758
|
+
)
|
|
1759
|
+
platform_resumable = self._resumable and shared_across_pods and not persistence_degraded
|
|
1673
1760
|
metadata["is_resumable"] = platform_resumable
|
|
1674
1761
|
metadata["resume_status"] = "resumable" if platform_resumable else "disabled"
|
|
1675
1762
|
metadata["backend"] = stm_backend or "in_memory"
|
|
1676
1763
|
metadata["scope"] = "invocation"
|
|
1677
|
-
metadata["durable"] =
|
|
1678
|
-
|
|
1764
|
+
metadata["durable"] = (
|
|
1765
|
+
stm_backend is not None and stm_backend != "local" and not persistence_degraded
|
|
1766
|
+
)
|
|
1767
|
+
metadata["shared_across_pods"] = shared_across_pods and not persistence_degraded
|
|
1768
|
+
metadata["source"] = self._checkpoint_storage_source
|
|
1679
1769
|
if not platform_resumable:
|
|
1680
1770
|
metadata["resume_disabled_reason"] = (
|
|
1681
1771
|
self._resume_disabled_reason
|
|
1682
1772
|
if not self._resumable and self._resume_disabled_reason
|
|
1773
|
+
else (
|
|
1774
|
+
"ADK database session persistence was degraded when this checkpoint was written"
|
|
1775
|
+
)
|
|
1776
|
+
if persistence_degraded
|
|
1683
1777
|
else "ADK checkpoint uses an in-memory or local-only session backend; "
|
|
1684
1778
|
"cross-pod resume is unavailable"
|
|
1685
1779
|
)
|
|
@@ -1718,7 +1812,7 @@ class ADKRunner(BaseRunner):
|
|
|
1718
1812
|
)
|
|
1719
1813
|
if not adk_invocation_id:
|
|
1720
1814
|
logger.error(
|
|
1721
|
-
"Resume requested but ADK invocation_id not found for
|
|
1815
|
+
"Resume requested but ADK invocation_id not found for session=%s ksadk_inv=%s",
|
|
1722
1816
|
session_id,
|
|
1723
1817
|
ksadk_invocation_id,
|
|
1724
1818
|
)
|
|
@@ -1735,6 +1829,7 @@ class ADKRunner(BaseRunner):
|
|
|
1735
1829
|
*,
|
|
1736
1830
|
input_data: Dict[str, Any],
|
|
1737
1831
|
session_id: str,
|
|
1832
|
+
native_user_id: str = "ksadk_user",
|
|
1738
1833
|
user_input: str,
|
|
1739
1834
|
is_resume: bool,
|
|
1740
1835
|
run_config: Optional[Any] = None,
|
|
@@ -1764,7 +1859,7 @@ class ADKRunner(BaseRunner):
|
|
|
1764
1859
|
|
|
1765
1860
|
run_kwargs: Dict[str, Any] = {
|
|
1766
1861
|
"session_id": session_id,
|
|
1767
|
-
"user_id":
|
|
1862
|
+
"user_id": native_user_id,
|
|
1768
1863
|
}
|
|
1769
1864
|
if run_config is not None:
|
|
1770
1865
|
run_kwargs["run_config"] = run_config
|
|
@@ -1834,6 +1929,7 @@ class ADKRunner(BaseRunner):
|
|
|
1834
1929
|
# Use external session ID if provided
|
|
1835
1930
|
req_session_id = input_data.get("session_id")
|
|
1836
1931
|
session_id = await self._ensure_session(req_session_id)
|
|
1932
|
+
native_user_id = self._native_user_for_session(req_session_id)
|
|
1837
1933
|
|
|
1838
1934
|
# 准备 Metadata 并设置 Span Attributes
|
|
1839
1935
|
# Langfuse Exporter 会读取这些 span attributes
|
|
@@ -1848,6 +1944,7 @@ class ADKRunner(BaseRunner):
|
|
|
1848
1944
|
wrapped_async = await self._prepare_run_events(
|
|
1849
1945
|
input_data=input_data,
|
|
1850
1946
|
session_id=session_id,
|
|
1947
|
+
native_user_id=native_user_id,
|
|
1851
1948
|
user_input=user_input,
|
|
1852
1949
|
is_resume=is_resume,
|
|
1853
1950
|
)
|
|
@@ -1939,6 +2036,7 @@ class ADKRunner(BaseRunner):
|
|
|
1939
2036
|
# Use external session ID if provided
|
|
1940
2037
|
req_session_id = input_data.get("session_id")
|
|
1941
2038
|
session_id = await self._ensure_session(req_session_id)
|
|
2039
|
+
native_user_id = self._native_user_for_session(req_session_id)
|
|
1942
2040
|
|
|
1943
2041
|
# 准备 Metadata 并设置 Span Attributes
|
|
1944
2042
|
agent_user_id, tags, _, _ = self._prepare_trace_metadata(session_id)
|
|
@@ -1953,6 +2051,7 @@ class ADKRunner(BaseRunner):
|
|
|
1953
2051
|
wrapped_async = await self._prepare_run_events(
|
|
1954
2052
|
input_data=input_data,
|
|
1955
2053
|
session_id=session_id,
|
|
2054
|
+
native_user_id=native_user_id,
|
|
1956
2055
|
user_input=user_input,
|
|
1957
2056
|
is_resume=is_resume,
|
|
1958
2057
|
run_config=run_config,
|
|
@@ -2132,6 +2231,7 @@ class ADKRunner(BaseRunner):
|
|
|
2132
2231
|
fc_args = {}
|
|
2133
2232
|
yield {
|
|
2134
2233
|
"type": "tool_call",
|
|
2234
|
+
"tool_call_id": str(fc_id),
|
|
2135
2235
|
"tool_name": getattr(fc, "name", "unknown"),
|
|
2136
2236
|
"tool_args": fc_args,
|
|
2137
2237
|
}
|
|
@@ -2146,6 +2246,7 @@ class ADKRunner(BaseRunner):
|
|
|
2146
2246
|
emitted_tool_call_ids.add(tc_id)
|
|
2147
2247
|
yield {
|
|
2148
2248
|
"type": "tool_call",
|
|
2249
|
+
"tool_call_id": str(tc_id),
|
|
2149
2250
|
"tool_name": tc_name,
|
|
2150
2251
|
"tool_args": getattr(tool_call, "input", {}),
|
|
2151
2252
|
}
|
|
@@ -2174,6 +2275,7 @@ class ADKRunner(BaseRunner):
|
|
|
2174
2275
|
fr = getattr(part, "function_response", None)
|
|
2175
2276
|
if fr is not None:
|
|
2176
2277
|
fr_name = getattr(fr, "name", "unknown")
|
|
2278
|
+
fr_id = getattr(fr, "id", "") or fr_name
|
|
2177
2279
|
fr_output = getattr(fr, "response", None) or {}
|
|
2178
2280
|
if not isinstance(fr_output, dict):
|
|
2179
2281
|
try:
|
|
@@ -2187,6 +2289,7 @@ class ADKRunner(BaseRunner):
|
|
|
2187
2289
|
fr_output = {"raw": str(fr_output)}
|
|
2188
2290
|
yield {
|
|
2189
2291
|
"type": "tool_result",
|
|
2292
|
+
"tool_call_id": str(fr_id),
|
|
2190
2293
|
"tool_name": fr_name,
|
|
2191
2294
|
"tool_output": fr_output,
|
|
2192
2295
|
}
|
ksadk/runners/base_runner.py
CHANGED
|
@@ -151,6 +151,18 @@ class BaseRunner(ABC):
|
|
|
151
151
|
},
|
|
152
152
|
}
|
|
153
153
|
|
|
154
|
+
async def prepare_runtime_capabilities(self) -> None:
|
|
155
|
+
"""Prepare optional async resources required for capability discovery."""
|
|
156
|
+
return None
|
|
157
|
+
|
|
158
|
+
async def refresh_runtime_capabilities(self) -> None:
|
|
159
|
+
"""Refresh transient resources used for capability discovery.
|
|
160
|
+
|
|
161
|
+
The default implementation preserves compatibility for runners whose
|
|
162
|
+
capability preparation is either synchronous or permanently stable.
|
|
163
|
+
"""
|
|
164
|
+
await self.prepare_runtime_capabilities()
|
|
165
|
+
|
|
154
166
|
async def close(self) -> None:
|
|
155
167
|
"""释放 runner 持有的运行期资源。"""
|
|
156
168
|
return None
|
|
@@ -193,7 +205,9 @@ class BaseRunner(ABC):
|
|
|
193
205
|
return kwargs
|
|
194
206
|
|
|
195
207
|
@staticmethod
|
|
196
|
-
def build_native_context(
|
|
208
|
+
def build_native_context(
|
|
209
|
+
platform_context: Any, *, context_schema: Any = None
|
|
210
|
+
) -> dict[str, Any] | None:
|
|
197
211
|
if not isinstance(platform_context, dict):
|
|
198
212
|
return None
|
|
199
213
|
native_context = {
|
|
@@ -201,6 +215,20 @@ class BaseRunner(ABC):
|
|
|
201
215
|
for key in ("agent_id", "user_id", "session_id")
|
|
202
216
|
if platform_context.get(key) is not None
|
|
203
217
|
}
|
|
218
|
+
from typing import get_args, get_type_hints
|
|
219
|
+
from ksadk.session_context import SessionContext
|
|
220
|
+
|
|
221
|
+
try:
|
|
222
|
+
fields = get_type_hints(context_schema) if context_schema is not None else {}
|
|
223
|
+
except (TypeError, NameError):
|
|
224
|
+
fields = {}
|
|
225
|
+
session_type = fields.get("session")
|
|
226
|
+
if session_type is SessionContext or set(get_args(session_type)) == {
|
|
227
|
+
SessionContext,
|
|
228
|
+
type(None),
|
|
229
|
+
}:
|
|
230
|
+
native_context = {key: value for key, value in native_context.items() if key in fields}
|
|
231
|
+
native_context["session"] = SessionContext.from_payload(platform_context.get("session"))
|
|
204
232
|
return native_context or None
|
|
205
233
|
|
|
206
234
|
@staticmethod
|