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
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
from __future__ import annotations
|
|
4
4
|
|
|
5
5
|
import asyncio
|
|
6
|
+
import json
|
|
6
7
|
import logging
|
|
7
8
|
from collections.abc import AsyncIterator, Mapping
|
|
8
9
|
from datetime import datetime, timezone
|
|
@@ -49,6 +50,7 @@ async def _require_action_session(
|
|
|
49
50
|
or (agent_id is not None and session.agent_id != agent_id)
|
|
50
51
|
or (user_id is not None and session.user_id != user_id)
|
|
51
52
|
):
|
|
53
|
+
logger.warning("Session %s not found, userId %s", session_id, user_id)
|
|
52
54
|
raise HTTPException(status_code=404, detail="Session not found")
|
|
53
55
|
return cast(Session, session)
|
|
54
56
|
|
|
@@ -149,6 +151,171 @@ def _runtime_continuity_payload() -> dict[str, Any]:
|
|
|
149
151
|
}
|
|
150
152
|
|
|
151
153
|
|
|
154
|
+
def _first_text_part(parts: list[Any] | None) -> str:
|
|
155
|
+
"""Return the text of the first part with content_type == 'text'."""
|
|
156
|
+
if not isinstance(parts, list):
|
|
157
|
+
return ""
|
|
158
|
+
for part in parts:
|
|
159
|
+
if isinstance(part, Mapping) and part.get("content_type") == "text":
|
|
160
|
+
return str(part.get("text") or "")
|
|
161
|
+
return ""
|
|
162
|
+
|
|
163
|
+
|
|
164
|
+
def _first_tool_name(parts: list[Any] | None) -> str:
|
|
165
|
+
"""Return the name from the first tool_call part."""
|
|
166
|
+
if not isinstance(parts, list) or not parts:
|
|
167
|
+
return ""
|
|
168
|
+
part = parts[0]
|
|
169
|
+
if isinstance(part, Mapping):
|
|
170
|
+
return str(part.get("name") or "")
|
|
171
|
+
return ""
|
|
172
|
+
|
|
173
|
+
|
|
174
|
+
def _first_tool_result(parts: list[Any] | None) -> str:
|
|
175
|
+
"""Return the result of the first tool_result part as a string."""
|
|
176
|
+
if not isinstance(parts, list) or not parts:
|
|
177
|
+
return ""
|
|
178
|
+
part = parts[0]
|
|
179
|
+
if not isinstance(part, Mapping):
|
|
180
|
+
return ""
|
|
181
|
+
result = part.get("result")
|
|
182
|
+
if result is None:
|
|
183
|
+
return ""
|
|
184
|
+
if isinstance(result, str):
|
|
185
|
+
return result
|
|
186
|
+
return json.dumps(result, ensure_ascii=False)
|
|
187
|
+
|
|
188
|
+
|
|
189
|
+
def _derive_display_text(content: Mapping[str, Any]) -> str:
|
|
190
|
+
"""Derive a display string for Content.parts[0].text from a canonical runtime event.
|
|
191
|
+
|
|
192
|
+
For canonical runtime events (family=runtime/v2) the Content dict carries a
|
|
193
|
+
``runtime_event`` payload but no top-level ``parts``. This helper extracts a
|
|
194
|
+
short human-readable string so that frontends reading ``Content.parts[0].text``
|
|
195
|
+
continue to display meaningful text without changes.
|
|
196
|
+
"""
|
|
197
|
+
runtime_event = content.get("runtime_event")
|
|
198
|
+
if not isinstance(runtime_event, Mapping):
|
|
199
|
+
return str(content.get("text") or "")
|
|
200
|
+
|
|
201
|
+
event_type = str(runtime_event.get("event_type") or "")
|
|
202
|
+
item_kind = str(runtime_event.get("item_kind") or "")
|
|
203
|
+
|
|
204
|
+
if event_type == "item.updated":
|
|
205
|
+
update = runtime_event.get("update")
|
|
206
|
+
if not isinstance(update, Mapping):
|
|
207
|
+
return ""
|
|
208
|
+
if item_kind in ("message", "reasoning"):
|
|
209
|
+
return str(update.get("text") or "")
|
|
210
|
+
if item_kind == "tool_call":
|
|
211
|
+
name = str(update.get("name") or "")
|
|
212
|
+
return f"调用工具:{name}" if name else ""
|
|
213
|
+
return ""
|
|
214
|
+
|
|
215
|
+
if event_type == "item.started":
|
|
216
|
+
initial = runtime_event.get("initial")
|
|
217
|
+
parts = initial.get("parts") if isinstance(initial, Mapping) else None
|
|
218
|
+
if item_kind == "tool_call":
|
|
219
|
+
name = _first_tool_name(parts)
|
|
220
|
+
return f"调用工具:{name}" if name else ""
|
|
221
|
+
if item_kind in ("message", "reasoning"):
|
|
222
|
+
return _first_text_part(parts)
|
|
223
|
+
return ""
|
|
224
|
+
|
|
225
|
+
if event_type == "item.completed":
|
|
226
|
+
snapshot = runtime_event.get("snapshot")
|
|
227
|
+
parts = snapshot.get("parts") if isinstance(snapshot, Mapping) else None
|
|
228
|
+
if item_kind == "message":
|
|
229
|
+
return _first_text_part(parts)
|
|
230
|
+
if item_kind == "tool_result":
|
|
231
|
+
result = _first_tool_result(parts)
|
|
232
|
+
return _truncate_session_text(result) if result else ""
|
|
233
|
+
if item_kind == "tool_call":
|
|
234
|
+
name = _first_tool_name(parts)
|
|
235
|
+
return f"工具调用完成:{name}" if name else ""
|
|
236
|
+
return ""
|
|
237
|
+
|
|
238
|
+
if event_type == "item.snapshot_replaced":
|
|
239
|
+
snapshot = runtime_event.get("snapshot")
|
|
240
|
+
parts = snapshot.get("parts") if isinstance(snapshot, Mapping) else None
|
|
241
|
+
if item_kind in ("message", "reasoning"):
|
|
242
|
+
return _first_text_part(parts)
|
|
243
|
+
return ""
|
|
244
|
+
|
|
245
|
+
if event_type == "item.failed":
|
|
246
|
+
error = runtime_event.get("error")
|
|
247
|
+
if isinstance(error, Mapping):
|
|
248
|
+
return str(error.get("message") or "执行失败")
|
|
249
|
+
return "执行失败"
|
|
250
|
+
|
|
251
|
+
if event_type == "run.started":
|
|
252
|
+
return "运行开始"
|
|
253
|
+
if event_type == "run.progress":
|
|
254
|
+
return str(runtime_event.get("message") or "")
|
|
255
|
+
if event_type == "run.completed":
|
|
256
|
+
return "运行完成"
|
|
257
|
+
if event_type == "run.failed":
|
|
258
|
+
error = runtime_event.get("error")
|
|
259
|
+
if isinstance(error, Mapping):
|
|
260
|
+
return str(error.get("message") or "运行失败")
|
|
261
|
+
return "运行失败"
|
|
262
|
+
if event_type == "run.interrupted":
|
|
263
|
+
return str(runtime_event.get("reason") or "运行已中断")
|
|
264
|
+
if event_type == "run.canceled":
|
|
265
|
+
return str(runtime_event.get("reason") or "运行已取消")
|
|
266
|
+
|
|
267
|
+
if event_type == "interaction.requested":
|
|
268
|
+
request = runtime_event.get("request")
|
|
269
|
+
if isinstance(request, Mapping):
|
|
270
|
+
kind = str(request.get("kind") or "approval")
|
|
271
|
+
return f"请求审批:{kind}"
|
|
272
|
+
return "请求审批"
|
|
273
|
+
|
|
274
|
+
if event_type == "interaction.resolved":
|
|
275
|
+
response = runtime_event.get("response")
|
|
276
|
+
if isinstance(response, Mapping):
|
|
277
|
+
return str(response.get("decision") or "")
|
|
278
|
+
return ""
|
|
279
|
+
|
|
280
|
+
if event_type == "continuation.created":
|
|
281
|
+
return f"创建恢复点:{runtime_event.get('continuation_kind') or ''}"
|
|
282
|
+
if event_type == "continuation.resumed":
|
|
283
|
+
return f"恢复执行:{runtime_event.get('continuation_kind') or ''}"
|
|
284
|
+
|
|
285
|
+
if event_type == "context.compaction.started":
|
|
286
|
+
return "上下文压缩开始"
|
|
287
|
+
if event_type == "context.compaction.completed":
|
|
288
|
+
return "上下文压缩完成"
|
|
289
|
+
|
|
290
|
+
if event_type == "usage.reported":
|
|
291
|
+
total = runtime_event.get("total_tokens")
|
|
292
|
+
if total is not None:
|
|
293
|
+
return f"用量上报:{total} tokens"
|
|
294
|
+
return "用量上报"
|
|
295
|
+
|
|
296
|
+
return ""
|
|
297
|
+
|
|
298
|
+
|
|
299
|
+
def _derive_checkpoint_id(event: SessionEvent, content: Mapping[str, Any]) -> str:
|
|
300
|
+
"""Surface checkpoint_id to Content top level for checkpoint-bearing events.
|
|
301
|
+
|
|
302
|
+
``run_checkpoint`` events already carry ``checkpoint_id`` at Content top
|
|
303
|
+
level. ``continuation.created`` events with ``continuation_kind=
|
|
304
|
+
graph_checkpoint`` store it deeper as ``Content.runtime_event.
|
|
305
|
+
continuation_id``; this helper extracts it so frontends reading
|
|
306
|
+
``Content.checkpoint_id`` work uniformly across both event shapes.
|
|
307
|
+
Returns an empty string for non-checkpoint events.
|
|
308
|
+
"""
|
|
309
|
+
if content.get("checkpoint_id") is not None:
|
|
310
|
+
return str(content.get("checkpoint_id") or "")
|
|
311
|
+
if event.event_type == "continuation.created":
|
|
312
|
+
runtime_event = content.get("runtime_event")
|
|
313
|
+
if isinstance(runtime_event, Mapping):
|
|
314
|
+
if str(runtime_event.get("continuation_kind") or "") == "graph_checkpoint":
|
|
315
|
+
return str(runtime_event.get("continuation_id") or "")
|
|
316
|
+
return ""
|
|
317
|
+
|
|
318
|
+
|
|
152
319
|
def _event_to_action_payload(event: SessionEvent) -> dict[str, Any]:
|
|
153
320
|
"""Serialize a stored SessionEvent for the REST action wire.
|
|
154
321
|
|
|
@@ -156,13 +323,29 @@ def _event_to_action_payload(event: SessionEvent) -> dict[str, Any]:
|
|
|
156
323
|
``EventId``/``SessionId``/``Author``/``EventType``/``Content``/``Timestamp``/
|
|
157
324
|
``SeqId``(有值时附 ``InvocationId``)。这是存储事件形态本身的透传,
|
|
158
325
|
``Content``/``Metadata`` 的内部结构不在承诺范围。
|
|
326
|
+
|
|
327
|
+
对于 canonical runtime 事件(family=runtime/v2),``Content`` 没有
|
|
328
|
+
顶层 ``parts``。此处根据事件类型从 ``runtime_event`` payload 提取一段
|
|
329
|
+
人类可读文本注入 ``Content.parts[0].text``,兼容前端读取旧路径。
|
|
330
|
+
同理,``continuation.created`` (graph_checkpoint) 的 checkpoint id 存在
|
|
331
|
+
``Content.runtime_event.continuation_id`` 深处;此处将其提升到
|
|
332
|
+
``Content.checkpoint_id``,与 ``run_checkpoint`` 事件的外层结构对齐,
|
|
333
|
+
内层 ``runtime_event`` 原始结构保持不动。
|
|
159
334
|
"""
|
|
335
|
+
content = dict(event.content or {})
|
|
336
|
+
if not isinstance(content.get("parts"), list):
|
|
337
|
+
display_text = _derive_display_text(content)
|
|
338
|
+
if display_text:
|
|
339
|
+
content["parts"] = [{"text": display_text}]
|
|
340
|
+
checkpoint_id = _derive_checkpoint_id(event, content)
|
|
341
|
+
if checkpoint_id and "checkpoint_id" not in content:
|
|
342
|
+
content["checkpoint_id"] = checkpoint_id
|
|
160
343
|
payload = {
|
|
161
344
|
"EventId": event.id,
|
|
162
345
|
"SessionId": event.session_id,
|
|
163
346
|
"Author": event.author,
|
|
164
347
|
"EventType": event.event_type,
|
|
165
|
-
"Content":
|
|
348
|
+
"Content": content,
|
|
166
349
|
"Timestamp": event.timestamp,
|
|
167
350
|
"SeqId": event.seq_id,
|
|
168
351
|
"Metadata": event.metadata,
|
|
@@ -258,9 +441,33 @@ def _checkpoint_event_to_action_payload(event: SessionEvent) -> dict[str, Any] |
|
|
|
258
441
|
if canonical.continuation_kind != "graph_checkpoint":
|
|
259
442
|
return None
|
|
260
443
|
framework = canonical.source.framework
|
|
444
|
+
source_metadata = canonical.source.metadata
|
|
261
445
|
framework_ref = {framework: dict(canonical.ref)}
|
|
262
|
-
capability =
|
|
446
|
+
capability = source_metadata.get("capability")
|
|
263
447
|
capability = capability if isinstance(capability, Mapping) else {}
|
|
448
|
+
# Fallback: when the canonical event lacks capability fields, try
|
|
449
|
+
# the raw event metadata (legacy run_checkpoint stored backend/scope
|
|
450
|
+
# directly in metadata, and some adapters may not enrich source).
|
|
451
|
+
event_meta = event.metadata or {}
|
|
452
|
+
def _capability_str(key: str, default: str = "unknown") -> str:
|
|
453
|
+
value = capability.get(key)
|
|
454
|
+
if value is not None:
|
|
455
|
+
return str(value)
|
|
456
|
+
value = event_meta.get(key)
|
|
457
|
+
if value is not None:
|
|
458
|
+
return str(value)
|
|
459
|
+
value = source_metadata.get(key)
|
|
460
|
+
if value is not None:
|
|
461
|
+
return str(value)
|
|
462
|
+
return default
|
|
463
|
+
durable_raw = capability.get("durable")
|
|
464
|
+
if durable_raw is None:
|
|
465
|
+
durable_raw = event_meta.get("durable", False)
|
|
466
|
+
def _cap_val(key: str, default: Any = None) -> Any:
|
|
467
|
+
value = capability.get(key)
|
|
468
|
+
if value is not None:
|
|
469
|
+
return value
|
|
470
|
+
return event_meta.get(key, default)
|
|
264
471
|
metadata = {
|
|
265
472
|
**dict(event.metadata or {}),
|
|
266
473
|
**dict(canonical.source.metadata),
|
|
@@ -269,10 +476,29 @@ def _checkpoint_event_to_action_payload(event: SessionEvent) -> dict[str, Any] |
|
|
|
269
476
|
"checkpoint_id": canonical.continuation_id,
|
|
270
477
|
"framework": framework,
|
|
271
478
|
"framework_ref": dict(framework_ref),
|
|
272
|
-
"backend":
|
|
273
|
-
"scope":
|
|
274
|
-
"durable": bool(
|
|
479
|
+
"backend": _capability_str("backend"),
|
|
480
|
+
"scope": _capability_str("scope"),
|
|
481
|
+
"durable": bool(durable_raw),
|
|
275
482
|
"is_resumable": canonical.resumable,
|
|
483
|
+
"is_terminal": bool(
|
|
484
|
+
capability.get("is_terminal", event_meta.get("is_terminal", False))
|
|
485
|
+
),
|
|
486
|
+
"next_node": _capability_str("next_node", ""),
|
|
487
|
+
"resume_status": _capability_str("resume_status", ""),
|
|
488
|
+
"resume_disabled_reason": _capability_str("resume_disabled_reason", ""),
|
|
489
|
+
"phase": _capability_str("phase", ""),
|
|
490
|
+
"stage": _capability_str("stage", ""),
|
|
491
|
+
"stage_name": _capability_str("stage_name", ""),
|
|
492
|
+
"stage_key": _capability_str("stage_key", ""),
|
|
493
|
+
"summary": _capability_str("summary", ""),
|
|
494
|
+
"next_action": _capability_str("next_action", ""),
|
|
495
|
+
"status": _capability_str("status", ""),
|
|
496
|
+
"tool_name": _capability_str("tool_name", ""),
|
|
497
|
+
"receipt_key": _capability_str("receipt_key", ""),
|
|
498
|
+
"artifact_path": _capability_str("artifact_path", ""),
|
|
499
|
+
"stage_index": _cap_val("stage_index"),
|
|
500
|
+
"total_stages": _cap_val("total_stages"),
|
|
501
|
+
"artifact_preview": _cap_val("artifact_preview", {}),
|
|
276
502
|
}
|
|
277
503
|
run_id = str(metadata.get("run_id") or "").strip()
|
|
278
504
|
checkpoint_id = str(metadata.get("checkpoint_id") or "").strip()
|
|
@@ -282,9 +508,17 @@ def _checkpoint_event_to_action_payload(event: SessionEvent) -> dict[str, Any] |
|
|
|
282
508
|
return None
|
|
283
509
|
next_node = str(metadata.get("next_node") or "").strip()
|
|
284
510
|
if not next_node:
|
|
285
|
-
langgraph_ref = framework_ref.get(
|
|
511
|
+
langgraph_ref = framework_ref.get(framework)
|
|
286
512
|
if isinstance(langgraph_ref, Mapping):
|
|
287
513
|
next_node = str(langgraph_ref.get("next_node") or "").strip()
|
|
514
|
+
# Fallback: stream_mapping wraps framework_ref one level deeper;
|
|
515
|
+
# try ref[framework].framework_ref[framework].next_node.
|
|
516
|
+
if not next_node:
|
|
517
|
+
inner_ref = langgraph_ref.get("framework_ref")
|
|
518
|
+
if isinstance(inner_ref, Mapping):
|
|
519
|
+
inner_framework_ref = inner_ref.get(framework)
|
|
520
|
+
if isinstance(inner_framework_ref, Mapping):
|
|
521
|
+
next_node = str(inner_framework_ref.get("next_node") or "").strip()
|
|
288
522
|
is_terminal = bool(metadata.get("is_terminal", False))
|
|
289
523
|
is_resumable_raw = metadata.get("is_resumable")
|
|
290
524
|
is_resumable = is_resumable_raw if isinstance(is_resumable_raw, bool) else None
|
|
@@ -398,14 +632,14 @@ def _resume_audit_by_checkpoint(
|
|
|
398
632
|
|
|
399
633
|
def _apply_checkpoint_resume_audit(
|
|
400
634
|
checkpoint: dict[str, Any],
|
|
401
|
-
audit_by_checkpoint: Mapping[tuple[str,
|
|
635
|
+
audit_by_checkpoint: Mapping[tuple[str, ...], Mapping[str, Any]],
|
|
402
636
|
) -> dict[str, Any]:
|
|
637
|
+
session_id = str(checkpoint.get("SessionId") or "")
|
|
638
|
+
run_id = str(checkpoint.get("RunId") or "")
|
|
639
|
+
checkpoint_id = str(checkpoint.get("CheckpointId") or "")
|
|
403
640
|
audit = audit_by_checkpoint.get(
|
|
404
|
-
(
|
|
405
|
-
|
|
406
|
-
str(checkpoint.get("CheckpointId") or ""),
|
|
407
|
-
),
|
|
408
|
-
{},
|
|
641
|
+
(session_id, run_id, checkpoint_id),
|
|
642
|
+
audit_by_checkpoint.get((run_id, checkpoint_id), {}),
|
|
409
643
|
)
|
|
410
644
|
metadata = dict(checkpoint.get("Metadata") or {})
|
|
411
645
|
resume_count = int(audit.get("resume_count") or checkpoint.get("ResumeCount") or 0)
|
|
@@ -595,11 +829,17 @@ def _checkpoint_resume_disabled_detail(checkpoint: Mapping[str, Any]) -> dict[st
|
|
|
595
829
|
str(checkpoint.get("ResumeDisabledReason") or "").strip() or "Checkpoint is not resumable"
|
|
596
830
|
)
|
|
597
831
|
return {
|
|
832
|
+
"Code": "checkpoint_not_resumable",
|
|
598
833
|
"code": "checkpoint_not_resumable",
|
|
834
|
+
"Reason": reason,
|
|
599
835
|
"reason": reason,
|
|
836
|
+
"CheckpointId": str(checkpoint.get("CheckpointId") or ""),
|
|
600
837
|
"checkpoint_id": str(checkpoint.get("CheckpointId") or ""),
|
|
838
|
+
"RunId": str(checkpoint.get("RunId") or ""),
|
|
601
839
|
"run_id": str(checkpoint.get("RunId") or ""),
|
|
840
|
+
"ResumeStatus": str(checkpoint.get("ResumeStatus") or "disabled"),
|
|
602
841
|
"resume_status": str(checkpoint.get("ResumeStatus") or "disabled"),
|
|
842
|
+
"IsTerminal": bool(checkpoint.get("IsTerminal")),
|
|
603
843
|
"is_terminal": bool(checkpoint.get("IsTerminal")),
|
|
604
844
|
}
|
|
605
845
|
|
ksadk/server/routes/run.py
CHANGED
|
@@ -9,6 +9,7 @@ import uuid
|
|
|
9
9
|
from collections.abc import Mapping
|
|
10
10
|
from typing import TYPE_CHECKING, Any
|
|
11
11
|
|
|
12
|
+
from fastapi import Depends
|
|
12
13
|
from fastapi.responses import StreamingResponse
|
|
13
14
|
|
|
14
15
|
from ksadk.conversations.normalize import (
|
|
@@ -44,9 +45,16 @@ from ksadk.runtime.conversation_execution import (
|
|
|
44
45
|
invoke_runtime_conversation_once,
|
|
45
46
|
iter_runtime_conversation_semantic_events,
|
|
46
47
|
)
|
|
48
|
+
from ksadk.runtime_context import PlatformIdentityContext
|
|
47
49
|
from ksadk.server.api_models import AgentRunRequest
|
|
48
50
|
from ksadk.server.factory import get_runtime_execution
|
|
51
|
+
from ksadk.sessions.invocation_identity import identity_scope_ref
|
|
49
52
|
|
|
53
|
+
from ..invocation_identity import (
|
|
54
|
+
coerce_trusted_invocation_identity,
|
|
55
|
+
inject_trusted_invocation_identity,
|
|
56
|
+
resolve_trusted_invocation_identity,
|
|
57
|
+
)
|
|
50
58
|
from . import dependencies as deps
|
|
51
59
|
from .checkpoint_resolution import _resolve_checkpoint_resume_input_from_session
|
|
52
60
|
from .common import (
|
|
@@ -76,14 +84,33 @@ logger = logging.getLogger(__name__)
|
|
|
76
84
|
|
|
77
85
|
|
|
78
86
|
@run_router.post("/agentengine/api/v1/RunAgent")
|
|
79
|
-
async def run_agent_action(
|
|
87
|
+
async def run_agent_action(
|
|
88
|
+
request: RunAgentActionRequest,
|
|
89
|
+
invocation_identity: PlatformIdentityContext = Depends(resolve_trusted_invocation_identity),
|
|
90
|
+
):
|
|
91
|
+
invocation_identity = coerce_trusted_invocation_identity(invocation_identity)
|
|
80
92
|
executor, launch_context = get_runtime_execution()
|
|
81
93
|
if kernel_route_active():
|
|
82
|
-
return await _kernel_run_agent_action(request, launch_context)
|
|
94
|
+
return await _kernel_run_agent_action(request, launch_context, invocation_identity)
|
|
83
95
|
api_format = (request.ApiFormat or "responses").strip().lower()
|
|
84
|
-
|
|
96
|
+
requested_user_id = _clean_optional_string(request.UserId)
|
|
85
97
|
account_id = _clean_optional_string(request.AccountId)
|
|
86
98
|
service = deps.resolve_session_service()
|
|
99
|
+
user_id_explicit = "UserId" in request.model_fields_set
|
|
100
|
+
if not user_id_explicit and invocation_identity.is_empty and request.SessionId:
|
|
101
|
+
legacy_session = await service.get_session_metadata(request.SessionId)
|
|
102
|
+
if legacy_session is not None and legacy_session.agent_id == request.AgentId:
|
|
103
|
+
requested_user_id = legacy_session.user_id
|
|
104
|
+
requested_user_id = requested_user_id or "user"
|
|
105
|
+
authorized_session = await ensure_conversation_session(
|
|
106
|
+
agent_id=request.AgentId,
|
|
107
|
+
user_id=requested_user_id,
|
|
108
|
+
session_id=request.SessionId,
|
|
109
|
+
session_service_provider=deps.resolve_session_service,
|
|
110
|
+
invocation_identity=invocation_identity,
|
|
111
|
+
)
|
|
112
|
+
run_user_id = authorized_session.user_id
|
|
113
|
+
run_session_id = authorized_session.id
|
|
87
114
|
resume_input = (
|
|
88
115
|
extract_responses_resume_input(request.ResponsesInput)
|
|
89
116
|
if request.ResponsesInput is not None
|
|
@@ -92,39 +119,47 @@ async def run_agent_action(request: RunAgentActionRequest):
|
|
|
92
119
|
resume_input = await _resolve_checkpoint_resume_input_from_session(
|
|
93
120
|
service=service,
|
|
94
121
|
agent_id=request.AgentId,
|
|
95
|
-
session_id=
|
|
122
|
+
session_id=run_session_id,
|
|
96
123
|
resume_input=resume_input,
|
|
97
124
|
)
|
|
98
125
|
if resume_input is not None:
|
|
99
126
|
messages = []
|
|
100
127
|
elif request.ResponsesInput is not None and api_format == "responses":
|
|
101
|
-
messages = normalize_responses_input(
|
|
128
|
+
messages = normalize_responses_input(
|
|
129
|
+
request.ResponsesInput,
|
|
130
|
+
owner_scope_ref=(
|
|
131
|
+
identity_scope_ref(invocation_identity)
|
|
132
|
+
if not invocation_identity.is_empty
|
|
133
|
+
else None
|
|
134
|
+
),
|
|
135
|
+
)
|
|
102
136
|
else:
|
|
103
|
-
messages = normalize_kop_messages(
|
|
137
|
+
messages = normalize_kop_messages(
|
|
138
|
+
request.Messages,
|
|
139
|
+
owner_scope_ref=(
|
|
140
|
+
identity_scope_ref(invocation_identity)
|
|
141
|
+
if not invocation_identity.is_empty
|
|
142
|
+
else None
|
|
143
|
+
),
|
|
144
|
+
)
|
|
104
145
|
request_metadata: dict[str, Any] = (
|
|
105
146
|
{"previous_response_id": request.PreviousResponseId} if request.PreviousResponseId else {}
|
|
106
147
|
)
|
|
107
148
|
custom_metadata, metadata_runtime_controls = _split_custom_metadata(request.Metadata)
|
|
108
149
|
request_metadata.update(metadata_runtime_controls)
|
|
150
|
+
request_metadata = inject_trusted_invocation_identity(request_metadata, invocation_identity)
|
|
109
151
|
if api_format == "responses":
|
|
110
152
|
request_metadata["responses_conversation"] = True
|
|
111
153
|
|
|
112
154
|
if request.Background:
|
|
113
155
|
runtime_preparation = (
|
|
114
|
-
None
|
|
115
|
-
if resume_input is not None
|
|
116
|
-
else await executor.prepare_start(launch_context)
|
|
156
|
+
None if resume_input is not None else await executor.prepare_start(launch_context)
|
|
117
157
|
)
|
|
118
|
-
invocation_id = request.InvocationId or new_run_id(
|
|
158
|
+
invocation_id = request.InvocationId or new_run_id(run_session_id)
|
|
119
159
|
# 后台 stream 在 detached task 里才被消费(lazy),此时 session 尚未创建。
|
|
120
160
|
# 先 ensure 出 session,才能立刻写 run_status=in_progress(供 SubscribeRunEvents
|
|
121
161
|
# 拉到起始态),并把 resolved session_id 回填给 detached stream 的终态写入与 SubscribeUrl。
|
|
122
|
-
background_session =
|
|
123
|
-
agent_id=request.AgentId,
|
|
124
|
-
user_id=run_user_id,
|
|
125
|
-
session_id=request.SessionId,
|
|
126
|
-
session_service_provider=deps.resolve_session_service,
|
|
127
|
-
)
|
|
162
|
+
background_session = authorized_session
|
|
128
163
|
resolved_background_session_id = background_session.id
|
|
129
164
|
if resume_input is None:
|
|
130
165
|
await prime_session_metadata_for_user_turn(
|
|
@@ -196,9 +231,7 @@ async def run_agent_action(request: RunAgentActionRequest):
|
|
|
196
231
|
|
|
197
232
|
if request.Stream:
|
|
198
233
|
runtime_preparation = (
|
|
199
|
-
None
|
|
200
|
-
if resume_input is not None
|
|
201
|
-
else await executor.prepare_start(launch_context)
|
|
234
|
+
None if resume_input is not None else await executor.prepare_start(launch_context)
|
|
202
235
|
)
|
|
203
236
|
if api_format == "chat_completions":
|
|
204
237
|
return StreamingResponse(
|
|
@@ -208,7 +241,7 @@ async def run_agent_action(request: RunAgentActionRequest):
|
|
|
208
241
|
agent_id=_runtime_agent_id(launch_context),
|
|
209
242
|
user_id=run_user_id,
|
|
210
243
|
messages=messages,
|
|
211
|
-
session_id=
|
|
244
|
+
session_id=run_session_id,
|
|
212
245
|
model=request.Model,
|
|
213
246
|
model_metadata=request.ModelMetadata,
|
|
214
247
|
model_options=request.ModelOptions,
|
|
@@ -222,7 +255,7 @@ async def run_agent_action(request: RunAgentActionRequest):
|
|
|
222
255
|
),
|
|
223
256
|
media_type="text/event-stream",
|
|
224
257
|
)
|
|
225
|
-
resume_key = _detached_resume_key_from_input(
|
|
258
|
+
resume_key = _detached_resume_key_from_input(run_session_id, resume_input)
|
|
226
259
|
_reject_if_detached_resume_active(resume_key)
|
|
227
260
|
return deps.detached_streaming_response(
|
|
228
261
|
stream_runtime_responses_conversation_turn(
|
|
@@ -231,7 +264,7 @@ async def run_agent_action(request: RunAgentActionRequest):
|
|
|
231
264
|
agent_id=request.AgentId,
|
|
232
265
|
user_id=run_user_id,
|
|
233
266
|
messages=messages,
|
|
234
|
-
session_id=
|
|
267
|
+
session_id=run_session_id,
|
|
235
268
|
model=request.Model,
|
|
236
269
|
model_metadata=request.ModelMetadata,
|
|
237
270
|
model_options=request.ModelOptions,
|
|
@@ -258,7 +291,7 @@ async def run_agent_action(request: RunAgentActionRequest):
|
|
|
258
291
|
agent_id=request.AgentId,
|
|
259
292
|
user_id=run_user_id,
|
|
260
293
|
messages=messages,
|
|
261
|
-
session_id=
|
|
294
|
+
session_id=run_session_id,
|
|
262
295
|
model=request.Model,
|
|
263
296
|
model_metadata=request.ModelMetadata,
|
|
264
297
|
model_options=request.ModelOptions,
|
|
@@ -287,11 +320,17 @@ async def run_agent_action(request: RunAgentActionRequest):
|
|
|
287
320
|
response_id=responses_response_id,
|
|
288
321
|
metadata=_run_agent_response_metadata(custom_metadata, result),
|
|
289
322
|
usage=result.get("usage") if isinstance(result.get("usage"), Mapping) else None,
|
|
323
|
+
timing=result.get("timing") if isinstance(result.get("timing"), Mapping) else None,
|
|
324
|
+
skill_eval_result=result.get("skill_eval_result"),
|
|
290
325
|
)
|
|
291
326
|
return _action_response("RunAgent", payload)
|
|
292
327
|
|
|
293
328
|
|
|
294
|
-
async def _kernel_run_agent_action(
|
|
329
|
+
async def _kernel_run_agent_action(
|
|
330
|
+
request: RunAgentActionRequest,
|
|
331
|
+
launch_context,
|
|
332
|
+
invocation_identity: PlatformIdentityContext,
|
|
333
|
+
):
|
|
295
334
|
"""kernel 路径(灰度 opt-in):RunAgent -> AgentControlCommand -> receipt。
|
|
296
335
|
|
|
297
336
|
旧响应 shape 不变;receipt 状态走 RECEIPT_HTTP_STATUS 映射;
|
|
@@ -305,6 +344,7 @@ async def _kernel_run_agent_action(request: RunAgentActionRequest, launch_contex
|
|
|
305
344
|
user_id=run_user_id,
|
|
306
345
|
session_id=request.SessionId,
|
|
307
346
|
session_service_provider=deps.resolve_session_service,
|
|
347
|
+
invocation_identity=invocation_identity,
|
|
308
348
|
)
|
|
309
349
|
session_id = session.id
|
|
310
350
|
idempotency_key = (
|
|
@@ -317,10 +357,24 @@ async def _kernel_run_agent_action(request: RunAgentActionRequest, launch_contex
|
|
|
317
357
|
or new_run_id(session_id)
|
|
318
358
|
)
|
|
319
359
|
messages = (
|
|
320
|
-
normalize_responses_input(
|
|
360
|
+
normalize_responses_input(
|
|
361
|
+
request.ResponsesInput,
|
|
362
|
+
owner_scope_ref=(
|
|
363
|
+
identity_scope_ref(invocation_identity)
|
|
364
|
+
if not invocation_identity.is_empty
|
|
365
|
+
else None
|
|
366
|
+
),
|
|
367
|
+
)
|
|
321
368
|
if request.ResponsesInput is not None
|
|
322
369
|
and (request.ApiFormat or "responses").strip().lower() == "responses"
|
|
323
|
-
else normalize_kop_messages(
|
|
370
|
+
else normalize_kop_messages(
|
|
371
|
+
request.Messages,
|
|
372
|
+
owner_scope_ref=(
|
|
373
|
+
identity_scope_ref(invocation_identity)
|
|
374
|
+
if not invocation_identity.is_empty
|
|
375
|
+
else None
|
|
376
|
+
),
|
|
377
|
+
)
|
|
324
378
|
)
|
|
325
379
|
# RunAgent 的 Model 覆盖走 runtime_options.model:与 agentengine-server 的
|
|
326
380
|
# _kernel_runtime_options 投影同构;worker 侧按部署 defaults/白名单校验。
|
|
@@ -336,6 +390,7 @@ async def _kernel_run_agent_action(request: RunAgentActionRequest, launch_contex
|
|
|
336
390
|
correlation_ref=request.InvocationId,
|
|
337
391
|
source_kind="system",
|
|
338
392
|
runtime_options=runtime_options or None,
|
|
393
|
+
invocation_identity=invocation_identity,
|
|
339
394
|
)
|
|
340
395
|
if receipt.status not in ("accepted", "duplicate"):
|
|
341
396
|
return _kernel_error_response(receipt)
|
|
@@ -401,7 +456,10 @@ def _adk_usage_metadata(usage: Mapping[str, Any] | None) -> dict[str, int] | Non
|
|
|
401
456
|
}
|
|
402
457
|
|
|
403
458
|
|
|
404
|
-
async def _runtime_run_sse(
|
|
459
|
+
async def _runtime_run_sse(
|
|
460
|
+
request: AgentRunRequest,
|
|
461
|
+
invocation_identity: PlatformIdentityContext | None = None,
|
|
462
|
+
) -> StreamingResponse:
|
|
405
463
|
executor, launch_context = get_runtime_execution()
|
|
406
464
|
# Validate explicit ownership before StreamingResponse commits HTTP 200.
|
|
407
465
|
# Also resolve an omitted id exactly once so preparation cannot create a
|
|
@@ -411,9 +469,19 @@ async def _runtime_run_sse(request: AgentRunRequest) -> StreamingResponse:
|
|
|
411
469
|
user_id=request.userId,
|
|
412
470
|
session_id=request.sessionId,
|
|
413
471
|
session_service_provider=deps.resolve_session_service,
|
|
472
|
+
invocation_identity=invocation_identity,
|
|
414
473
|
)
|
|
415
474
|
execution_session_id = execution_session.id
|
|
416
|
-
|
|
475
|
+
execution_user_id = execution_session.user_id
|
|
476
|
+
request_metadata = inject_trusted_invocation_identity({}, invocation_identity)
|
|
477
|
+
normalized = normalize_parts_content(
|
|
478
|
+
request.newMessage.parts,
|
|
479
|
+
owner_scope_ref=(
|
|
480
|
+
identity_scope_ref(invocation_identity)
|
|
481
|
+
if invocation_identity is not None and not invocation_identity.is_empty
|
|
482
|
+
else None
|
|
483
|
+
),
|
|
484
|
+
)
|
|
417
485
|
message = {
|
|
418
486
|
"role": "user",
|
|
419
487
|
"content": str(normalized.get("content") or ""),
|
|
@@ -432,11 +500,12 @@ async def _runtime_run_sse(request: AgentRunRequest) -> StreamingResponse:
|
|
|
432
500
|
executor=executor,
|
|
433
501
|
launch_context=launch_context,
|
|
434
502
|
agent_id=request.appName,
|
|
435
|
-
user_id=
|
|
503
|
+
user_id=execution_user_id,
|
|
436
504
|
messages=[message],
|
|
437
505
|
session_id=execution_session_id,
|
|
438
506
|
model=request.model,
|
|
439
507
|
state_delta=request.stateDelta or {},
|
|
508
|
+
request_metadata=request_metadata,
|
|
440
509
|
invocation_id=invocation_id,
|
|
441
510
|
session_service_provider=deps.resolve_session_service,
|
|
442
511
|
run_mode=RUN_MODE_FOREGROUND,
|
|
@@ -477,11 +546,12 @@ async def _runtime_run_sse(request: AgentRunRequest) -> StreamingResponse:
|
|
|
477
546
|
executor=executor,
|
|
478
547
|
launch_context=launch_context,
|
|
479
548
|
agent_id=request.appName,
|
|
480
|
-
user_id=
|
|
549
|
+
user_id=execution_user_id,
|
|
481
550
|
messages=[message],
|
|
482
551
|
session_id=execution_session_id,
|
|
483
552
|
model=request.model,
|
|
484
553
|
state_delta=request.stateDelta or {},
|
|
554
|
+
request_metadata=request_metadata,
|
|
485
555
|
invocation_id=invocation_id,
|
|
486
556
|
session_service_provider=deps.resolve_session_service,
|
|
487
557
|
run_mode=RUN_MODE_FOREGROUND,
|
|
@@ -528,9 +598,7 @@ async def _runtime_run_sse(request: AgentRunRequest) -> StreamingResponse:
|
|
|
528
598
|
)
|
|
529
599
|
else:
|
|
530
600
|
text_payload.update({"partial": True, "replace": False})
|
|
531
|
-
yield _adk_sse_event(
|
|
532
|
-
text_payload
|
|
533
|
-
)
|
|
601
|
+
yield _adk_sse_event(text_payload)
|
|
534
602
|
elif event_type == "tool_call":
|
|
535
603
|
yield _adk_sse_event(
|
|
536
604
|
{"name": event.get("name"), "args": event.get("args") or {}},
|
|
@@ -592,14 +660,17 @@ async def _runtime_run_sse(request: AgentRunRequest) -> StreamingResponse:
|
|
|
592
660
|
|
|
593
661
|
|
|
594
662
|
@run_router.post("/run_sse")
|
|
595
|
-
async def run_sse(
|
|
663
|
+
async def run_sse(
|
|
664
|
+
request: AgentRunRequest,
|
|
665
|
+
invocation_identity: PlatformIdentityContext = Depends(resolve_trusted_invocation_identity),
|
|
666
|
+
):
|
|
596
667
|
"""Unified Streaming Endpoint compatible with ADK Web
|
|
597
668
|
|
|
598
669
|
Respects the `streaming` parameter:
|
|
599
670
|
- streaming=False: Accumulate full response, send as single event
|
|
600
671
|
- streaming=True: Stream tokens as they arrive (real-time)
|
|
601
672
|
"""
|
|
602
|
-
return await _runtime_run_sse(request)
|
|
673
|
+
return await _runtime_run_sse(request, coerce_trusted_invocation_identity(invocation_identity))
|
|
603
674
|
|
|
604
675
|
|
|
605
676
|
# ============================================================
|