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/kernel/store.py
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
# -*- coding: utf-8 -*-
|
|
2
|
-
"""``AgentKernelStore`` port:durable Inbox / Run / ActivationLease 状态(
|
|
2
|
+
"""``AgentKernelStore`` port:durable Inbox / Run / ActivationLease 状态(Kernel Task 3)。
|
|
3
3
|
|
|
4
4
|
所有 mutation 都接受 ``expected_fence: int`` 并与当前 activation lease 的
|
|
5
5
|
fencing token 做事务内 CAS 比较;不匹配抛 :class:`StaleFenceError`。
|
|
@@ -13,7 +13,7 @@ import hashlib
|
|
|
13
13
|
import json
|
|
14
14
|
from dataclasses import dataclass
|
|
15
15
|
from datetime import datetime, timezone
|
|
16
|
-
from typing import Protocol, runtime_checkable
|
|
16
|
+
from typing import TYPE_CHECKING, Protocol, runtime_checkable
|
|
17
17
|
from uuid import uuid4
|
|
18
18
|
|
|
19
19
|
from ksadk.kernel.contracts import (
|
|
@@ -24,6 +24,14 @@ from ksadk.kernel.contracts import (
|
|
|
24
24
|
)
|
|
25
25
|
from ksadk.kernel.state import InboxState, RunState
|
|
26
26
|
|
|
27
|
+
if TYPE_CHECKING:
|
|
28
|
+
from ksadk.kernel.execution_grants import (
|
|
29
|
+
ExecutionGrantBarrier,
|
|
30
|
+
ExecutionGrantRecord,
|
|
31
|
+
ExecutionGrantSpec,
|
|
32
|
+
GrantState,
|
|
33
|
+
)
|
|
34
|
+
|
|
27
35
|
|
|
28
36
|
def now_utc() -> datetime:
|
|
29
37
|
return datetime.now(timezone.utc)
|
|
@@ -54,6 +62,9 @@ def command_digest(command: AgentControlCommand) -> str:
|
|
|
54
62
|
canonical["source"] = source
|
|
55
63
|
|
|
56
64
|
payload = dict(canonical.get("payload") or {})
|
|
65
|
+
# Admission derives this immutable snapshot from the current session. A
|
|
66
|
+
# retry after a tag update must still resolve to the first accepted command.
|
|
67
|
+
payload.pop("session_context", None)
|
|
57
68
|
if command.command_type == "submit_interaction":
|
|
58
69
|
payload.pop("token_ref", None)
|
|
59
70
|
canonical["payload"] = payload
|
|
@@ -188,10 +199,43 @@ class AgentKernelStore(Protocol):
|
|
|
188
199
|
self, command: AgentControlCommand, *, queue_limit: int
|
|
189
200
|
) -> AgentControlReceipt: ...
|
|
190
201
|
|
|
202
|
+
async def ensure_execution_grant(
|
|
203
|
+
self, spec: ExecutionGrantSpec
|
|
204
|
+
) -> ExecutionGrantRecord: ...
|
|
205
|
+
|
|
206
|
+
async def get_execution_grant(
|
|
207
|
+
self, spec: ExecutionGrantSpec
|
|
208
|
+
) -> ExecutionGrantBarrier | None: ...
|
|
209
|
+
|
|
210
|
+
async def set_execution_grant_state(
|
|
211
|
+
self, spec: ExecutionGrantSpec, state: GrantState, *,
|
|
212
|
+
expected_revision: int, idempotency_key: str,
|
|
213
|
+
) -> ExecutionGrantBarrier: ...
|
|
214
|
+
|
|
191
215
|
async def claim_next(
|
|
192
216
|
self, agent_instance_id: str, session_id: str, fencing_token: int
|
|
193
217
|
) -> InboxMessage | None: ...
|
|
194
218
|
|
|
219
|
+
async def list_messages(
|
|
220
|
+
self, agent_instance_id: str, session_id: str | None = None
|
|
221
|
+
) -> list[InboxMessage]: ...
|
|
222
|
+
|
|
223
|
+
async def list_pending(
|
|
224
|
+
self,
|
|
225
|
+
agent_instance_id: str,
|
|
226
|
+
session_id: str | None = None,
|
|
227
|
+
*,
|
|
228
|
+
fencing_token: int | None = None,
|
|
229
|
+
) -> list[InboxMessage]: ...
|
|
230
|
+
|
|
231
|
+
async def claim_message(
|
|
232
|
+
self, message_id: str, fencing_token: int
|
|
233
|
+
) -> InboxMessage: ...
|
|
234
|
+
|
|
235
|
+
async def discard_claim(
|
|
236
|
+
self, message_id: str, *, expected_fence: int
|
|
237
|
+
) -> None: ...
|
|
238
|
+
|
|
195
239
|
async def complete_claim(self, message_id: str, *, expected_fence: int) -> None: ...
|
|
196
240
|
|
|
197
241
|
async def acquire_activation(self, request: ActivationLeaseRequest) -> ActivationLease: ...
|
|
@@ -218,6 +262,32 @@ class AgentKernelStore(Protocol):
|
|
|
218
262
|
|
|
219
263
|
async def load_message(self, message_id: str) -> InboxMessage | None: ...
|
|
220
264
|
|
|
265
|
+
async def load_by_idempotency(
|
|
266
|
+
self, session_id: str, idempotency_key: str
|
|
267
|
+
) -> InboxMessage | None: ...
|
|
268
|
+
|
|
269
|
+
async def reject_command(
|
|
270
|
+
self,
|
|
271
|
+
command: AgentControlCommand,
|
|
272
|
+
*,
|
|
273
|
+
status: str,
|
|
274
|
+
code: str,
|
|
275
|
+
message: str,
|
|
276
|
+
retryable: bool = False,
|
|
277
|
+
) -> AgentControlReceipt: ...
|
|
278
|
+
|
|
279
|
+
async def inbox_depth(
|
|
280
|
+
self, agent_instance_id: str, session_id: str | None = None
|
|
281
|
+
) -> int: ...
|
|
282
|
+
|
|
283
|
+
async def find_active_run(
|
|
284
|
+
self, agent_instance_id: str, session_id: str | None = None
|
|
285
|
+
) -> RunRecord | None: ...
|
|
286
|
+
|
|
287
|
+
async def current_lease(
|
|
288
|
+
self, agent_instance_id: str, session_id: str | None = None
|
|
289
|
+
) -> ActivationLease | None: ...
|
|
290
|
+
|
|
221
291
|
|
|
222
292
|
__all__ = [
|
|
223
293
|
"AgentKernelStore",
|
ksadk/kernel/worker.py
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
# -*- coding: utf-8 -*-
|
|
2
|
-
"""per-session FIFO worker(
|
|
2
|
+
"""per-session FIFO worker(Kernel Task 6 Step 6)。
|
|
3
3
|
|
|
4
4
|
- 持有 activation lease(fencing token 通过 Store 的 CAS 校验)才能 claim。
|
|
5
5
|
- 按 per-session accepted_seq 保序;active Run 存在时普通 enqueue 保持排队,
|
|
@@ -19,7 +19,6 @@ execution(同一 client 实例);control lookup 永远按 durable run id。
|
|
|
19
19
|
from __future__ import annotations
|
|
20
20
|
|
|
21
21
|
import asyncio
|
|
22
|
-
import json
|
|
23
22
|
import logging
|
|
24
23
|
from collections.abc import Callable, Mapping
|
|
25
24
|
from dataclasses import dataclass, replace
|
|
@@ -36,6 +35,7 @@ from ksadk.interaction.provider import (
|
|
|
36
35
|
UnavailableInteractionProvider,
|
|
37
36
|
)
|
|
38
37
|
from ksadk.interaction.providers import default_interaction_providers
|
|
38
|
+
from ksadk.kernel.approval_presentation import approval_presentation
|
|
39
39
|
from ksadk.kernel.contracts import (
|
|
40
40
|
ActivationLease,
|
|
41
41
|
ActivationWriteGuard,
|
|
@@ -54,6 +54,11 @@ from ksadk.kernel.errors import (
|
|
|
54
54
|
StaleFenceError,
|
|
55
55
|
UnsupportedControlError,
|
|
56
56
|
)
|
|
57
|
+
from ksadk.kernel.execution_grants import (
|
|
58
|
+
ExecutionGrantBlocked,
|
|
59
|
+
execution_grant_id,
|
|
60
|
+
execution_grant_run_id,
|
|
61
|
+
)
|
|
57
62
|
from ksadk.kernel.mapping import COMMAND_HANDLERS, RESUME_TARGET_KINDS
|
|
58
63
|
from ksadk.kernel.state import RunState
|
|
59
64
|
from ksadk.kernel.store import (
|
|
@@ -62,7 +67,9 @@ from ksadk.kernel.store import (
|
|
|
62
67
|
control_event,
|
|
63
68
|
new_message_id,
|
|
64
69
|
)
|
|
70
|
+
from ksadk.kernel.worker_identity import prepare_worker_identity
|
|
65
71
|
from ksadk.runtime.adapter import (
|
|
72
|
+
CONVERSATION_PREPROCESSING_METADATA_KEY,
|
|
66
73
|
CancelResult,
|
|
67
74
|
PauseResult,
|
|
68
75
|
RunHandle,
|
|
@@ -75,6 +82,7 @@ from ksadk.runtime.adapter import (
|
|
|
75
82
|
from ksadk.runtime.adapter import (
|
|
76
83
|
ResumeTarget as AdapterResumeTarget,
|
|
77
84
|
)
|
|
85
|
+
from ksadk.runtime_context import TRUSTED_IDENTITY_METADATA_KEY
|
|
78
86
|
|
|
79
87
|
logger = logging.getLogger(__name__)
|
|
80
88
|
|
|
@@ -109,6 +117,7 @@ class WorkResult:
|
|
|
109
117
|
message_id: str | None = None
|
|
110
118
|
run_id: str | None = None
|
|
111
119
|
last_seq: int | None = None
|
|
120
|
+
error: Exception | None = None
|
|
112
121
|
|
|
113
122
|
|
|
114
123
|
class AgentKernelWorker:
|
|
@@ -120,12 +129,14 @@ class AgentKernelWorker:
|
|
|
120
129
|
session_events: object | None = None,
|
|
121
130
|
interaction_providers: Mapping[str, InteractionProvider] | None = None,
|
|
122
131
|
start_request_defaults: Mapping[str, object] | None = None,
|
|
132
|
+
session_service: object | None = None,
|
|
123
133
|
) -> None:
|
|
124
134
|
self._store = store
|
|
125
135
|
self._adapter_factory = adapter_factory
|
|
126
136
|
# SessionEventStore(typed RuntimeEventStore 的 envelope 写路径)。
|
|
127
137
|
# 缺省时不落 runtime 事件,仅保证 stream 被消费到自然结束。
|
|
128
138
|
self._session_events = session_events
|
|
139
|
+
self._session_service = session_service
|
|
129
140
|
# Deployment-owned defaults (model, prompt and sandbox) come from the
|
|
130
141
|
# admitted immutable manifest. Server may attach a bounded per-turn
|
|
131
142
|
# model/approval selector to the signed command; the worker validates
|
|
@@ -246,27 +257,31 @@ class AgentKernelWorker:
|
|
|
246
257
|
# enqueue,此时其后的 interrupt/pause/steer 等控制命令必须能越过
|
|
247
258
|
# 该 enqueue 作用于 active Run。只处理当前 activation 持有 lease 的
|
|
248
259
|
# session,避免跨 session 抢占。
|
|
249
|
-
|
|
260
|
+
suspended_enqueue = False
|
|
250
261
|
for message in sorted(pending, key=lambda m: m.accepted_seq):
|
|
251
262
|
if session_id is not None and message.session_id != session_id:
|
|
252
263
|
continue
|
|
253
264
|
lease = await self._store.current_lease(agent_instance_id, message.session_id)
|
|
254
265
|
if lease is None or lease.activation_id != activation.activation_id:
|
|
255
|
-
continue
|
|
256
|
-
if message.command is None:
|
|
266
|
+
continue
|
|
267
|
+
if message.command is None:
|
|
257
268
|
continue
|
|
258
269
|
if message.command.command_type == "enqueue":
|
|
259
270
|
active = await self._store.find_active_run(agent_instance_id, message.session_id)
|
|
260
|
-
if active is not None:
|
|
261
|
-
continue
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
271
|
+
if active is not None or suspended_enqueue:
|
|
272
|
+
continue
|
|
273
|
+
try:
|
|
274
|
+
# Store claim and execution-grant validation share one atomic
|
|
275
|
+
# transaction. A prior list/read is never start authorization.
|
|
276
|
+
claimed = await self._store.claim_message(message.message_id, fence)
|
|
277
|
+
except ExecutionGrantBlocked as error:
|
|
278
|
+
if error.grant_state in {"suspended", "queued", "busy"}:
|
|
279
|
+
# Preserve enqueue FIFO while still letting cancel/resume
|
|
280
|
+
# controls behind the suspended command reach active work.
|
|
281
|
+
suspended_enqueue = True
|
|
282
|
+
continue
|
|
283
|
+
return await self._execute_claim(claimed.command, activation)
|
|
284
|
+
return WorkResult(outcome="idle")
|
|
270
285
|
|
|
271
286
|
# ------------------------------------------------------------- execution
|
|
272
287
|
|
|
@@ -294,8 +309,10 @@ class AgentKernelWorker:
|
|
|
294
309
|
)
|
|
295
310
|
await self._store.discard_claim(message_id, expected_fence=fence)
|
|
296
311
|
return WorkResult(outcome="completed", message_id=message_id)
|
|
297
|
-
except StaleFenceError:
|
|
298
|
-
return WorkResult(
|
|
312
|
+
except StaleFenceError as error:
|
|
313
|
+
return WorkResult(
|
|
314
|
+
outcome="terminal_failure", message_id=message_id, error=error
|
|
315
|
+
)
|
|
299
316
|
except AgentKernelError as error:
|
|
300
317
|
if error.code == RUNTIME_INTERACTION_UNAVAILABLE:
|
|
301
318
|
# typed rejection:provider 诚实声明无法原生送达回包,
|
|
@@ -316,16 +333,46 @@ class AgentKernelWorker:
|
|
|
316
333
|
await self._store.discard_claim(message_id, expected_fence=fence)
|
|
317
334
|
return WorkResult(outcome="completed", message_id=message_id)
|
|
318
335
|
if error.retryable:
|
|
319
|
-
return WorkResult(
|
|
320
|
-
|
|
321
|
-
|
|
336
|
+
return WorkResult(
|
|
337
|
+
outcome="retryable_failure", message_id=message_id, error=error
|
|
338
|
+
)
|
|
339
|
+
logger.error(
|
|
340
|
+
"agent kernel command failed permanently: "
|
|
341
|
+
"agent_instance_id=%s session_id=%s command_id=%s "
|
|
342
|
+
"command_type=%s error=%s: %s",
|
|
343
|
+
command.agent_instance_id,
|
|
344
|
+
command.session_id,
|
|
345
|
+
command.command_id,
|
|
346
|
+
command.command_type,
|
|
347
|
+
type(error).__name__,
|
|
348
|
+
error,
|
|
349
|
+
)
|
|
350
|
+
return WorkResult(
|
|
351
|
+
outcome="terminal_failure", message_id=message_id, error=error
|
|
352
|
+
)
|
|
353
|
+
except Exception as error:
|
|
322
354
|
# 未知异常绝不 ack 为成功:消息保持 claimed。
|
|
323
|
-
|
|
355
|
+
logger.exception(
|
|
356
|
+
"agent kernel command raised an unexpected exception: "
|
|
357
|
+
"agent_instance_id=%s session_id=%s command_id=%s "
|
|
358
|
+
"command_type=%s error=%s: %s",
|
|
359
|
+
command.agent_instance_id,
|
|
360
|
+
command.session_id,
|
|
361
|
+
command.command_id,
|
|
362
|
+
command.command_type,
|
|
363
|
+
type(error).__name__,
|
|
364
|
+
error,
|
|
365
|
+
)
|
|
366
|
+
return WorkResult(
|
|
367
|
+
outcome="terminal_failure", message_id=message_id, error=error
|
|
368
|
+
)
|
|
324
369
|
|
|
325
370
|
try:
|
|
326
371
|
await self._store.complete_claim(message_id, expected_fence=fence)
|
|
327
|
-
except StaleFenceError:
|
|
328
|
-
return WorkResult(
|
|
372
|
+
except StaleFenceError as error:
|
|
373
|
+
return WorkResult(
|
|
374
|
+
outcome="terminal_failure", message_id=message_id, error=error
|
|
375
|
+
)
|
|
329
376
|
return WorkResult(outcome="completed", message_id=message_id, run_id=run_id)
|
|
330
377
|
|
|
331
378
|
async def _message_id_for(self, command: AgentControlCommand) -> str:
|
|
@@ -349,7 +396,21 @@ class AgentKernelWorker:
|
|
|
349
396
|
|
|
350
397
|
fence = activation.fencing_token
|
|
351
398
|
guard = ActivationWriteGuard(activation_id=activation.activation_id, fencing_token=fence)
|
|
352
|
-
|
|
399
|
+
grant_id = execution_grant_id(command)
|
|
400
|
+
run_id = execution_grant_run_id(command) if grant_id else new_message_id()
|
|
401
|
+
if grant_id:
|
|
402
|
+
previous = await self._store.load_run(run_id)
|
|
403
|
+
if previous is not None:
|
|
404
|
+
# Once start may have reached the provider, neither a lost ACK
|
|
405
|
+
# nor takeover may invent a second model run. Normal recovery
|
|
406
|
+
# attaches durable handles; a handle-less pending start is
|
|
407
|
+
# uncertain and requires attention, never an automatic replay.
|
|
408
|
+
if previous.state == RunState.PENDING:
|
|
409
|
+
await self._store.save_run_transition(previous.model_copy(update={
|
|
410
|
+
"state": RunState.INTERRUPTED,
|
|
411
|
+
"reason": "execution_start_uncertain",
|
|
412
|
+
}), expected_fence=fence)
|
|
413
|
+
return run_id
|
|
353
414
|
adapter = self._adapter_factory()
|
|
354
415
|
pending = RunRecord(
|
|
355
416
|
run_id=run_id,
|
|
@@ -363,6 +424,7 @@ class AgentKernelWorker:
|
|
|
363
424
|
# back to one occurrence without matching text or wall-clock time.
|
|
364
425
|
metadata={
|
|
365
426
|
"command_id": str(command.command_id),
|
|
427
|
+
**({"execution_grant_id": grant_id} if grant_id else {}),
|
|
366
428
|
"source_kind": command.source.kind,
|
|
367
429
|
"source_ref": command.source.ref,
|
|
368
430
|
"correlation_id": command.correlation_id,
|
|
@@ -396,10 +458,26 @@ class AgentKernelWorker:
|
|
|
396
458
|
}
|
|
397
459
|
if approval_mode in approval_overrides:
|
|
398
460
|
request_config["approval_mode"] = approval_overrides[approval_mode]
|
|
461
|
+
effective_user_id, invocation_identity = await prepare_worker_identity(
|
|
462
|
+
command=command,
|
|
463
|
+
defaults=defaults,
|
|
464
|
+
session_service=self._session_service,
|
|
465
|
+
)
|
|
466
|
+
|
|
467
|
+
conversation_metadata = {}
|
|
468
|
+
if adapter.runtime.runtime_type == "harness" and self._session_events is not None:
|
|
469
|
+
from ksadk.kernel.worker_history import harness_conversation_messages
|
|
470
|
+
|
|
471
|
+
conversation_metadata[CONVERSATION_PREPROCESSING_METADATA_KEY] = {
|
|
472
|
+
"messages": await harness_conversation_messages(
|
|
473
|
+
command, store=self._store, session_events=self._session_events,
|
|
474
|
+
),
|
|
475
|
+
}
|
|
476
|
+
|
|
399
477
|
handle = await adapter.start(
|
|
400
478
|
StartRequest(
|
|
401
479
|
input=command.payload.get("content"),
|
|
402
|
-
user_id=
|
|
480
|
+
user_id=effective_user_id,
|
|
403
481
|
session_id=command.session_id,
|
|
404
482
|
agent_id=str(defaults.get("agent_id") or command.agent_instance_id),
|
|
405
483
|
model=selected_model,
|
|
@@ -407,9 +485,28 @@ class AgentKernelWorker:
|
|
|
407
485
|
# durable run_id 优先传给 adapter;adapter 不认时以
|
|
408
486
|
# runtime_run_id 映射显式记录两个 ID 的对应关系。
|
|
409
487
|
metadata={
|
|
488
|
+
**(
|
|
489
|
+
{"session_context": command.payload["session_context"]}
|
|
490
|
+
if "session_context" in command.payload
|
|
491
|
+
else {}
|
|
492
|
+
),
|
|
410
493
|
"command_id": str(command.command_id),
|
|
411
494
|
"run_id": run_id,
|
|
495
|
+
**(
|
|
496
|
+
{TRUSTED_IDENTITY_METADATA_KEY: dict(invocation_identity)}
|
|
497
|
+
if isinstance(invocation_identity, Mapping)
|
|
498
|
+
else {}
|
|
499
|
+
),
|
|
412
500
|
**continuation_metadata,
|
|
501
|
+
**conversation_metadata,
|
|
502
|
+
# Opaque policy reference is supplied only by a trusted
|
|
503
|
+
# ingress. The Provider resolves and reauthorizes it for
|
|
504
|
+
# this exact Run; Kernel owns no plugin policy semantics.
|
|
505
|
+
**(
|
|
506
|
+
{"execution_policy_ref": command.payload["execution_policy_ref"]}
|
|
507
|
+
if isinstance(command.payload.get("execution_policy_ref"), str)
|
|
508
|
+
else {}
|
|
509
|
+
),
|
|
413
510
|
},
|
|
414
511
|
)
|
|
415
512
|
)
|
|
@@ -709,7 +806,7 @@ class AgentKernelWorker:
|
|
|
709
806
|
"""Persist one framework interaction as the durable ledger authority."""
|
|
710
807
|
|
|
711
808
|
from ksadk.events.canonical import ApprovalRequest, InteractionRequested
|
|
712
|
-
from ksadk.interaction.contracts import
|
|
809
|
+
from ksadk.interaction.contracts import InteractionRecord
|
|
713
810
|
|
|
714
811
|
assert isinstance(event, InteractionRequested)
|
|
715
812
|
presentation = None
|
|
@@ -725,28 +822,20 @@ class AgentKernelWorker:
|
|
|
725
822
|
"required": ["decision"],
|
|
726
823
|
}
|
|
727
824
|
native_target = {"call_id": event.request.call_id or event.interaction_id}
|
|
728
|
-
|
|
729
|
-
visible_arguments = {
|
|
730
|
-
key: detail[key]
|
|
731
|
-
for key in ("command", "cwd", "reason", "grantRoot", "proposedExecpolicyAmendment")
|
|
732
|
-
if key in detail and detail[key] is not None
|
|
733
|
-
}
|
|
734
|
-
presentation = InteractionPresentation(
|
|
735
|
-
title={
|
|
736
|
-
"command_execution": "run_command",
|
|
737
|
-
"file_change": "apply_patch",
|
|
738
|
-
"permissions": "request_permission",
|
|
739
|
-
"dynamic_tool_call": "tool_call",
|
|
740
|
-
}.get(event.request.kind, event.request.kind),
|
|
741
|
-
description=json.dumps(
|
|
742
|
-
{"arguments": visible_arguments},
|
|
743
|
-
ensure_ascii=False,
|
|
744
|
-
separators=(",", ":"),
|
|
745
|
-
),
|
|
746
|
-
)
|
|
825
|
+
presentation = approval_presentation(event.request)
|
|
747
826
|
else:
|
|
748
827
|
request_schema = dict(event.request.schema_)
|
|
749
|
-
|
|
828
|
+
# Codex maps the native JSON-RPC request id to a stable canonical
|
|
829
|
+
# interaction id for replay. The live client, however, indexes its
|
|
830
|
+
# pending callback by the original request id. Preserve that id as
|
|
831
|
+
# the provider target or SubmitInteraction can find the durable
|
|
832
|
+
# record but cannot wake the blocked Codex callback.
|
|
833
|
+
native_call_id = (
|
|
834
|
+
event.source.native_event_id
|
|
835
|
+
or event.source.native_item_id
|
|
836
|
+
or event.interaction_id
|
|
837
|
+
)
|
|
838
|
+
native_target = {"call_id": native_call_id}
|
|
750
839
|
for key in ("checkpoint_id", "thread_id"):
|
|
751
840
|
value = execution.handle.native_ref.get(key)
|
|
752
841
|
if value is not None:
|
|
@@ -812,7 +901,13 @@ class AgentKernelWorker:
|
|
|
812
901
|
kind=RESUME_TARGET_KINDS[target_dict["kind"]],
|
|
813
902
|
id=str(target_dict["id"]),
|
|
814
903
|
)
|
|
815
|
-
resumed = await adapter.resume(
|
|
904
|
+
resumed = await adapter.resume(
|
|
905
|
+
handle,
|
|
906
|
+
target,
|
|
907
|
+
AdapterResumePayload(
|
|
908
|
+
kind="free_text", session_context=command.payload.get("session_context")
|
|
909
|
+
),
|
|
910
|
+
)
|
|
816
911
|
execution = self._replace_handle(execution, resumed)
|
|
817
912
|
self._start_stream(
|
|
818
913
|
execution,
|
|
@@ -879,10 +974,7 @@ class AgentKernelWorker:
|
|
|
879
974
|
# e.g. calling LangGraph checkpoint resume with a Codex live handle
|
|
880
975
|
# would acknowledge a response that can never reach the original run.
|
|
881
976
|
provider = execution.interaction_provider
|
|
882
|
-
if
|
|
883
|
-
provider.provider_id != record.provider_id
|
|
884
|
-
or provider.mode == "unavailable"
|
|
885
|
-
):
|
|
977
|
+
if provider.provider_id != record.provider_id or provider.mode == "unavailable":
|
|
886
978
|
raise AgentKernelError(
|
|
887
979
|
RUNTIME_INTERACTION_UNAVAILABLE,
|
|
888
980
|
f"interaction provider {record.provider_id!r} cannot deliver "
|
|
@@ -910,6 +1002,7 @@ class AgentKernelWorker:
|
|
|
910
1002
|
context = InteractionResolveContext(
|
|
911
1003
|
adapter=execution.adapter,
|
|
912
1004
|
handle=execution.handle,
|
|
1005
|
+
session_context=command.payload.get("session_context"),
|
|
913
1006
|
activation_id=activation.activation_id,
|
|
914
1007
|
fencing_token=fence,
|
|
915
1008
|
)
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
"""Recover Harness turn input from the Kernel's durable conversation facts."""
|
|
2
|
+
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
from ksadk.conversations.context import project_model_messages
|
|
6
|
+
from ksadk.events.canonical import RunCompleted
|
|
7
|
+
from ksadk.events.canonical_store import RuntimeEventStore, runtime_event_to_session_event
|
|
8
|
+
from ksadk.kernel.contracts import AgentControlCommand
|
|
9
|
+
from ksadk.kernel.state import RunState
|
|
10
|
+
from ksadk.kernel.store import AgentKernelStore
|
|
11
|
+
from ksadk.sessions.base import SessionEvent
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
async def harness_conversation_messages(
|
|
15
|
+
command: AgentControlCommand,
|
|
16
|
+
*,
|
|
17
|
+
store: AgentKernelStore,
|
|
18
|
+
session_events: object,
|
|
19
|
+
) -> list[dict[str, str]]:
|
|
20
|
+
"""Project successful prior turns; never use an adapter's process cache.
|
|
21
|
+
|
|
22
|
+
Harness checkpoints belong to individual Runs. The Kernel retains the
|
|
23
|
+
admitted user input in its Inbox and the reply in canonical RuntimeEvents;
|
|
24
|
+
join those facts by Run.command_id, within this instance, tenant and Session.
|
|
25
|
+
Reuse conversation projection so tool/approval and multiple-message semantics
|
|
26
|
+
stay aligned with the ordinary conversation preparation path.
|
|
27
|
+
"""
|
|
28
|
+
|
|
29
|
+
inbox = {
|
|
30
|
+
str(message.command.command_id): message.command
|
|
31
|
+
for message in await store.list_messages(command.agent_instance_id, command.session_id)
|
|
32
|
+
if message.command is not None
|
|
33
|
+
and message.command.command_type == "enqueue"
|
|
34
|
+
and message.command.tenant_id == command.tenant_id
|
|
35
|
+
and message.command.session_id == command.session_id
|
|
36
|
+
and message.command.agent_instance_id == command.agent_instance_id
|
|
37
|
+
and message.command.command_id != command.command_id
|
|
38
|
+
}
|
|
39
|
+
events = await RuntimeEventStore(session_events).list(command.session_id)
|
|
40
|
+
by_run: dict[str, list[SessionEvent]] = {}
|
|
41
|
+
projected_runs: set[str] = set()
|
|
42
|
+
history: list[dict[str, str]] = []
|
|
43
|
+
for event in events:
|
|
44
|
+
rows = by_run.setdefault(event.run_id, [])
|
|
45
|
+
rows.append(runtime_event_to_session_event(command.session_id, event))
|
|
46
|
+
if not isinstance(event, RunCompleted) or event.run_id in projected_runs:
|
|
47
|
+
continue
|
|
48
|
+
run = await store.load_run(event.run_id)
|
|
49
|
+
if (
|
|
50
|
+
run is None
|
|
51
|
+
or run.state is not RunState.COMPLETED
|
|
52
|
+
or run.agent_instance_id != command.agent_instance_id
|
|
53
|
+
or run.session_id != command.session_id
|
|
54
|
+
):
|
|
55
|
+
continue
|
|
56
|
+
previous = inbox.get(str(run.metadata.get("command_id") or ""))
|
|
57
|
+
if previous is None:
|
|
58
|
+
continue
|
|
59
|
+
# This row is an in-memory projection of the already-admitted Inbox
|
|
60
|
+
# command, not another persistent copy of the user's message.
|
|
61
|
+
user = SessionEvent(
|
|
62
|
+
id=str(previous.command_id),
|
|
63
|
+
session_id=command.session_id,
|
|
64
|
+
invocation_id=run.run_id,
|
|
65
|
+
event_type="user_message",
|
|
66
|
+
content={"parts": [{"text": str(previous.payload.get("content") or "")}]},
|
|
67
|
+
seq_id=max(1, rows[0].seq_id - 1),
|
|
68
|
+
)
|
|
69
|
+
history.extend(project_model_messages([user, *rows], assistant_role="assistant"))
|
|
70
|
+
projected_runs.add(event.run_id)
|
|
71
|
+
history.append({"role": "user", "content": str(command.payload.get("content") or "")})
|
|
72
|
+
return history
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
"""Trusted business-identity preparation for kernel worker starts."""
|
|
2
|
+
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
from collections.abc import Mapping
|
|
6
|
+
from typing import Any
|
|
7
|
+
|
|
8
|
+
from ksadk.conversations.runtime_persistence import ensure_conversation_session
|
|
9
|
+
from ksadk.kernel.contracts import AgentControlCommand
|
|
10
|
+
from ksadk.sessions.invocation_identity import identity_native_user_id
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
async def prepare_worker_identity(
|
|
14
|
+
*,
|
|
15
|
+
command: AgentControlCommand,
|
|
16
|
+
defaults: Mapping[str, object],
|
|
17
|
+
session_service: object | None,
|
|
18
|
+
) -> tuple[str, Mapping[str, Any] | None]:
|
|
19
|
+
"""Resolve the storage user and retain only an admitted identity payload."""
|
|
20
|
+
|
|
21
|
+
invocation_identity = command.payload.get("invocation_identity")
|
|
22
|
+
effective_user_id = str(command.tenant_id or "agent-kernel")
|
|
23
|
+
if not isinstance(invocation_identity, Mapping):
|
|
24
|
+
return effective_user_id, None
|
|
25
|
+
if session_service is None:
|
|
26
|
+
return identity_native_user_id(invocation_identity), invocation_identity
|
|
27
|
+
|
|
28
|
+
# Hosted runtimes have two stable identifiers: the platform deployment
|
|
29
|
+
# instance (used by the Kernel command) and the public AgentId used by
|
|
30
|
+
# CreateSession/RunAgent. The admission path has already authorized the
|
|
31
|
+
# command against this session; use the persisted session owner as the
|
|
32
|
+
# canonical lookup key instead of treating the internal instance alias as
|
|
33
|
+
# a different Agent. This prevents a valid hosted turn from becoming a
|
|
34
|
+
# misleading ``Session not found`` during worker startup.
|
|
35
|
+
agent_id = str(defaults.get("agent_id") or command.agent_instance_id)
|
|
36
|
+
existing = await session_service.get_session_metadata(command.session_id)
|
|
37
|
+
if existing is not None and str(existing.agent_id or "").strip():
|
|
38
|
+
agent_id = str(existing.agent_id)
|
|
39
|
+
canonical_session = await ensure_conversation_session(
|
|
40
|
+
agent_id=agent_id,
|
|
41
|
+
user_id=effective_user_id,
|
|
42
|
+
session_id=command.session_id,
|
|
43
|
+
session_service_provider=lambda: session_service,
|
|
44
|
+
invocation_identity=invocation_identity,
|
|
45
|
+
allow_agent_alias=True,
|
|
46
|
+
)
|
|
47
|
+
return canonical_session.user_id, invocation_identity
|