agentengine-sdk-python 0.8.4__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.4.dist-info → agentengine_sdk_python-0.8.5.dist-info}/METADATA +6 -3
- {agentengine_sdk_python-0.8.4.dist-info → agentengine_sdk_python-0.8.5.dist-info}/RECORD +591 -365
- 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 +6 -0
- ksadk/builders/code_builder.py +38 -12
- ksadk/builders/framework_requirements.py +20 -2
- ksadk/cli/__init__.py +36 -0
- 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_openclaw.py +26 -1
- ksadk/cli/cmd_plugin.py +70 -12
- ksadk/cli/cmd_studio.py +64 -16
- ksadk/cli/openclaw_env.py +1 -1
- ksadk/cli/resource_common.py +26 -0
- ksadk/codex/client.py +3 -2
- ksadk/configs/__init__.py +1 -1
- ksadk/configs/env_registry.py +125 -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 +23 -32
- ksadk/conversations/normalize.py +28 -10
- ksadk/conversations/runtime_baseline.py +37 -0
- ksadk/conversations/runtime_invocation.py +17 -4
- ksadk/conversations/runtime_observability.py +39 -10
- ksadk/conversations/runtime_payloads.py +8 -0
- ksadk/conversations/runtime_persistence.py +105 -9
- ksadk/conversations/runtime_preparation.py +13 -7
- ksadk/conversations/runtime_stream_events.py +29 -35
- ksadk/conversations/runtime_streaming.py +8 -0
- ksadk/events/adapters/_codex_items.py +16 -8
- ksadk/events/adapters/_langgraph_support.py +34 -0
- 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/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 +146 -111
- 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/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 +1 -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 +1 -1
- ksadk/kernel/__init__.py +10 -0
- ksadk/kernel/approval_presentation.py +91 -0
- ksadk/kernel/authorization.py +1 -1
- ksadk/kernel/bootstrap.py +86 -102
- 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 +27 -27
- 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 +304 -25
- ksadk/kernel/state.py +2 -3
- ksadk/kernel/store.py +69 -2
- ksadk/kernel/worker.py +79 -41
- ksadk/kernel/worker_history.py +72 -0
- ksadk/kernel/worker_identity.py +47 -0
- ksadk/memory/coordinator.py +22 -6
- ksadk/memory/extraction.py +40 -1
- ksadk/memory/models.py +77 -1
- ksadk/memory/provider_resolver.py +5 -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 +4 -2
- ksadk/model_proxy/transform.py +40 -2
- ksadk/plugins/__init__.py +1 -1
- ksadk/plugins/bridges/dsh.py +11 -0
- ksadk/plugins/builtins.py +40 -2
- ksadk/plugins/companion_artifacts.py +83 -0
- ksadk/plugins/companions.py +368 -0
- ksadk/plugins/contracts.py +1 -1
- ksadk/plugins/dsh_channels.py +156 -0
- ksadk/plugins/dsh_home.py +140 -0
- ksadk/plugins/dsh_teams.py +105 -0
- ksadk/plugins/dsh_toolchain.py +101 -19
- ksadk/plugins/execution_host.py +99 -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/package.json +1 -1
- ksadk/plugins/providers/bundles/dsh-memory/package.json +1 -1
- ksadk/plugins/providers/bundles/dsh-skill-center/package.json +1 -1
- 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/index.mjs +51 -1
- ksadk/plugins/providers/bundles/ksadk-dsh-capability-host/package.json +2 -2
- 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 +27 -4
- ksadk/plugins/providers/bundles/ksadk-dsh-studio/index.mjs +9 -5
- ksadk/plugins/providers/bundles/ksadk-harness/index.mjs +1 -1
- ksadk/plugins/providers/codex.py +10 -2
- ksadk/plugins/providers/dsh_capabilities.py +61 -0
- ksadk/plugins/providers/harness.py +181 -33
- 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/shipped_dsh.py +4 -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/runners/_langgraph_runner_streams.py +121 -45
- ksadk/runners/_langgraph_state_reader.py +106 -0
- ksadk/runners/_session_identity.py +285 -0
- ksadk/runners/adk_runner.py +25 -60
- ksadk/runners/langgraph_runner.py +128 -111
- ksadk/runners/patch_langchain.py +47 -0
- ksadk/runners/usage_accumulator.py +11 -3
- ksadk/runtime/_runner_adapter/stream_mapping.py +52 -2
- ksadk/runtime/conversation_execution.py +25 -1
- ksadk/runtime/executor.py +9 -1
- ksadk/runtime/factory.py +36 -1
- ksadk/runtime/preprocessing.py +11 -3
- ksadk/runtime/runner_adapter.py +38 -9
- ksadk/runtime/skill_eval_result.py +36 -0
- ksadk/runtime/timing.py +46 -0
- ksadk/runtime/usage.py +49 -18
- ksadk/runtime_context.py +103 -1
- ksadk/sandbox/backends/e2b.py +245 -23
- ksadk/sandbox/backends/local_process.py +63 -39
- ksadk/sandbox/base.py +62 -1
- ksadk/sandbox/diagnostics.py +82 -0
- ksadk/sandbox/local_controls.py +746 -0
- ksadk/sandbox/local_launcher.py +90 -0
- ksadk/scheduler/dispatcher.py +1 -1
- ksadk/server/invocation_identity.py +118 -0
- ksadk/server/routes/common.py +32 -3
- ksadk/server/routes/control.py +64 -9
- ksadk/server/routes/dependencies.py +2 -1
- ksadk/server/routes/kernel_ingress.py +9 -1
- ksadk/server/routes/misc.py +233 -25
- ksadk/server/routes/models.py +3 -3
- ksadk/server/routes/openai_compat.py +76 -13
- ksadk/server/routes/run.py +106 -35
- ksadk/server/routes/sessions.py +244 -68
- ksadk/server/routes/workspace.py +130 -21
- ksadk/server/static/assets/{ArtifactsPanel-CGbWlMNh.js → ArtifactsPanel-C1YoaKhx.js} +1 -1
- ksadk/server/static/assets/{CodeBlock-b4C7upmO.js → CodeBlock-DHuAWfr5.js} +10 -7
- ksadk/server/static/assets/MathMessageMarkdown-cvdrBwYr.js +8 -0
- ksadk/server/static/assets/{MermaidBlock-BEBN4Ksz.js → MermaidBlock-DeBkbJvI.js} +9 -9
- ksadk/server/static/assets/{NativeTerminalPanel-zvL-WpAn.js → NativeTerminalPanel-oJj44_sV.js} +1 -1
- ksadk/server/static/assets/{abnfDiagram-VCTEODGH-BYafW7Za.js → abnfDiagram-VCTEODGH-Dhfv25o2.js} +1 -1
- ksadk/server/static/assets/{arc-bTohInsS.js → arc-C35w-pn1.js} +1 -1
- ksadk/server/static/assets/architecture-7GRP2DOG-BCsa26zi.js +1 -0
- ksadk/server/static/assets/{architectureDiagram-5GKGNRK7-Ch5Lbzsi.js → architectureDiagram-5GKGNRK7-FoMY_u6D.js} +1 -1
- ksadk/server/static/assets/{blockDiagram-NRAW4CY4-kqF4MDOG.js → blockDiagram-NRAW4CY4-zD4Rt7oE.js} +1 -1
- ksadk/server/static/assets/{c4Diagram-UCG6FXSJ-8uSRIODv.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-DkhehZDr.js → chunk-5VM5RSS4-C2Ms13_k.js} +1 -1
- ksadk/server/static/assets/{chunk-F27PBJKO-BdXhtPe9.js → chunk-F27PBJKO-BoTj-qgx.js} +1 -1
- ksadk/server/static/assets/{chunk-G27WJ6UU-DPTpvpwi.js → chunk-G27WJ6UU-DOMyyjHH.js} +1 -1
- ksadk/server/static/assets/{chunk-JWPE2WC7-Pqoh38el.js → chunk-JWPE2WC7-DbJJqDli.js} +1 -1
- ksadk/server/static/assets/{chunk-LCL6LL3I-DeU00qC-.js → chunk-LCL6LL3I-CLuRCt_W.js} +1 -1
- ksadk/server/static/assets/{chunk-POPQ4Y6H-CzxScFkr.js → chunk-POPQ4Y6H-D0Dz847e.js} +1 -1
- ksadk/server/static/assets/{chunk-RHFEMEQ7-DpqMx-ux.js → chunk-RHFEMEQ7-BWSRzEcd.js} +1 -1
- ksadk/server/static/assets/{chunk-SVP7TREG-C6t0SypQ.js → chunk-SVP7TREG-CPoHqkCY.js} +1 -1
- ksadk/server/static/assets/{chunk-XXDRQBXY-DVaeafZk.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-Bf9D3tzJ.js → cose-bilkent-JH36ORCC-LzyWm4m0.js} +1 -1
- ksadk/server/static/assets/cynefin-OW5HDTMX-CNXjFctL.js +1 -0
- ksadk/server/static/assets/{cynefinDiagram-5FMLGOSQ-B9cY3iTz.js → cynefinDiagram-5FMLGOSQ-BlW_bHED.js} +1 -1
- ksadk/server/static/assets/{dagre-3AP2YEHR-CSwlx3CB.js → dagre-3AP2YEHR-Bu_S86_i.js} +1 -1
- ksadk/server/static/assets/{dagre-UBpgon5q.js → dagre-B7nCawed.js} +1 -1
- ksadk/server/static/assets/{diagram-S7CK7UJ4-C9akhN9a.js → diagram-S7CK7UJ4-W_Zow2Km.js} +1 -1
- ksadk/server/static/assets/{diagram-UQ7AKVKN-CgedhTPI.js → diagram-UQ7AKVKN-CLIKAHON.js} +1 -1
- ksadk/server/static/assets/{diagram-VSXAHHWV-Cjucz5BY.js → diagram-VSXAHHWV-Dv6_QAlN.js} +1 -1
- ksadk/server/static/assets/{diagram-VX7I27RA-Dd4Vleyn.js → diagram-VX7I27RA-BWAWRDtZ.js} +1 -1
- ksadk/server/static/assets/{diagram-Z3DM3KII-CZ2jGtYW.js → diagram-Z3DM3KII-XA_rWMss.js} +1 -1
- ksadk/server/static/assets/dist-0X_j2Rcc.js +1 -0
- ksadk/server/static/assets/{dist-DiixqL0J.js → dist-1nXCdsej.js} +1 -1
- ksadk/server/static/assets/{dist-BIr4DSRq.js → dist-2vL2sAdF.js} +1 -1
- ksadk/server/static/assets/{dist-D_ctSS2i.js → dist-B3bA05-e.js} +1 -1
- ksadk/server/static/assets/{dist-ClYUxfeK.js → dist-BLpRy_Yx.js} +1 -1
- ksadk/server/static/assets/{dist-QfkEHOlb.js → dist-BO_UwatH.js} +1 -1
- ksadk/server/static/assets/{dist-B3FR1SKK.js → dist-BdNFAney.js} +1 -1
- ksadk/server/static/assets/{dist-BnaTiyzN.js → dist-C0J5_3qM.js} +1 -1
- ksadk/server/static/assets/{dist-Bj730Ib4.js → dist-CGt_UGeO.js} +1 -1
- ksadk/server/static/assets/{dist-CFzsn6BG.js → dist-CIRMvUM4.js} +1 -1
- ksadk/server/static/assets/{dist-BgV_owcB.js → dist-CIpWk_5f.js} +1 -1
- ksadk/server/static/assets/{dist-C5_ZAZsG.js → dist-CPyieXEf.js} +1 -1
- ksadk/server/static/assets/{dist-btbmmX5O.js → dist-D-92S-Fd.js} +1 -1
- ksadk/server/static/assets/{dist-fBO2v5Kt.js → dist-DNKuMzWc.js} +1 -1
- ksadk/server/static/assets/{dist-ufY3F5p6.js → dist-DWfdmz9s.js} +2 -2
- ksadk/server/static/assets/{dist-DVCOWtha.js → dist-DppE_r-D.js} +1 -1
- ksadk/server/static/assets/{dist-C1NMAY5a.js → dist-DyG6Ya-z.js} +1 -1
- ksadk/server/static/assets/{dist-CB9iJrvg.js → dist-M-SrdhhZ.js} +1 -1
- ksadk/server/static/assets/{dist-DvFK7p5S.js → dist-mqD5TZup.js} +1 -1
- ksadk/server/static/assets/{dist-Cf125P_m.js → dist-n3n6t_FO.js} +1 -1
- ksadk/server/static/assets/{dist-DFD6Qa6T.js → dist-qe8xjesy.js} +1 -1
- ksadk/server/static/assets/{dist-DoVSwoDb.js → dist-t6MzE0jU.js} +1 -1
- ksadk/server/static/assets/{ebnfDiagram-PWID7BFC-Ci8NqqZu.js → ebnfDiagram-PWID7BFC-BfCzF1Xi.js} +1 -1
- ksadk/server/static/assets/{erDiagram-SSCWMZ5O-CCIOhLZG.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-Cp_r9Hb6.js → ganttDiagram-EL5Y4UJY-DDaG1f4_.js} +1 -1
- ksadk/server/static/assets/gitGraph-4MIJSDKK-B-AhYj4C.js +1 -0
- ksadk/server/static/assets/{gitGraphDiagram-WWUBYQGX-Dlhc8Wr8.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-CO0rRTRA.js → infoDiagram-RXCK75RN-CYMdn6lQ.js} +1 -1
- ksadk/server/static/assets/{ishikawaDiagram-5VMMS53U-CHiaedSS.js → ishikawaDiagram-5VMMS53U-CLHFAD6c.js} +1 -1
- ksadk/server/static/assets/{journeyDiagram-EYS64GPL-CHcCIB09.js → journeyDiagram-EYS64GPL-BHSKQGAl.js} +1 -1
- ksadk/server/static/assets/{kanban-definition-3QL26DDD-CJ_ebBZf.js → kanban-definition-3QL26DDD-D5W3tjTT.js} +1 -1
- ksadk/server/static/assets/{katex-B4weu383.js → katex-mtjOi4KM.js} +1 -1
- ksadk/server/static/assets/{linear-V-MgYHW1.js → linear-BETqsxE_.js} +1 -1
- ksadk/server/static/assets/{mermaid-parser.core-CBijEX_c.js → mermaid-parser.core-DPWrvs90.js} +2 -2
- ksadk/server/static/assets/{mindmap-definition-FBJOCRG2-Bc-pQvpp.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-D7genGLl.js → pegDiagram-XKGWAZYB-GjAPNaqn.js} +1 -1
- ksadk/server/static/assets/pie-WAS4IAKB-DyfxBU7V.js +1 -0
- ksadk/server/static/assets/{pieDiagram-E7YTZNPT-Bxj32zwD.js → pieDiagram-E7YTZNPT-ToIewrqr.js} +1 -1
- ksadk/server/static/assets/{quadrantDiagram-AXDQQJYC-BURv2mGh.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-CCsh3avW.js → railroadDiagram-O6MQD6OU-DKzx4xfv.js} +1 -1
- ksadk/server/static/assets/{requirementDiagram-EFPCY7ZU-_FRRBKEd.js → requirementDiagram-EFPCY7ZU-CJYljxQS.js} +1 -1
- ksadk/server/static/assets/{sankeyDiagram-P5KCCOFB-C-gr2o9M.js → sankeyDiagram-P5KCCOFB-DLU2fV1w.js} +1 -1
- ksadk/server/static/assets/{sequenceDiagram-WJ2MYXX4-D97NmfKg.js → sequenceDiagram-WJ2MYXX4-CVqysrA9.js} +1 -1
- ksadk/server/static/assets/{sizeCapture-X5ZJPWSS-DjrPC5FX.js → sizeCapture-X5ZJPWSS-BUxfmTHc.js} +1 -1
- ksadk/server/static/assets/{stateDiagram-HBIQ2CUA-DzMNg1hh.js → stateDiagram-HBIQ2CUA-CNFgYI9E.js} +1 -1
- ksadk/server/static/assets/stateDiagram-v2-4QOOHH4V-BXAFScz8.js +1 -0
- ksadk/server/static/assets/{swimlanes-XN3QIQJK-Cssf_CsU.js → swimlanes-XN3QIQJK-B6qCMe8N.js} +1 -1
- ksadk/server/static/assets/swimlanesDiagram-VK2B7HYN-uIQ2lJKH.js +8 -0
- ksadk/server/static/assets/{timeline-definition-24CTP7MA-BWTHzyS1.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-BSKgJsmR.js → vennDiagram-4TSXK5OY-BqtUqvXM.js} +1 -1
- ksadk/server/static/assets/wardley-WFR3VGLG-QAt06uEz.js +1 -0
- ksadk/server/static/assets/{wardleyDiagram-VM6X3IG4-eflHNoaZ.js → wardleyDiagram-VM6X3IG4-B5KfDjI-.js} +1 -1
- ksadk/server/static/assets/{xychartDiagram-S5SC5T6Z-eYqrQ-v4.js → xychartDiagram-S5SC5T6Z-BaUlSZrn.js} +1 -1
- ksadk/server/static/index.html +2 -2
- ksadk/server/terminal_sessions.py +34 -2
- ksadk/sessions/invocation_identity.py +235 -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 +11 -0
- ksadk/skills/observability.py +132 -0
- ksadk/skills/package_store.py +75 -2
- ksadk/skills/runtime/agent.py +38 -5
- ksadk/skills/runtime/artifacts.py +87 -0
- ksadk/skills/runtime/backends/e2b.py +393 -52
- ksadk/skills/runtime/backends/local.py +621 -119
- ksadk/skills/runtime/base.py +78 -7
- ksadk/skills/runtime/executor.py +266 -1
- ksadk/skills/runtime/loader.py +108 -3
- ksadk/skills/runtime/request.py +18 -0
- ksadk/skills/tool_defs.py +108 -3
- ksadk/studio/api.py +592 -57
- ksadk/studio/api_contracts.py +8 -2
- ksadk/studio/api_plugin_routes.py +39 -12
- ksadk/studio/api_resource_connections.py +79 -41
- ksadk/studio/authoring.py +12 -6
- ksadk/studio/authoring_coordinator.py +4 -2
- ksadk/studio/builder.py +12 -0
- ksadk/studio/capabilities.py +23 -6
- ksadk/studio/channel_connections.py +333 -0
- ksadk/studio/cloud.py +30 -10
- ksadk/studio/cloud_shared_web.py +75 -2
- ksadk/studio/codex_agent_service.py +2 -2
- ksadk/studio/codex_builder.py +1 -1
- ksadk/studio/codex_run.py +6 -1
- ksadk/studio/compiler.py +10 -0
- ksadk/studio/configuration.py +182 -0
- ksadk/studio/contracts.py +33 -5
- ksadk/studio/dsh_application.py +135 -25
- ksadk/studio/dsh_capability_service.py +287 -20
- ksadk/studio/dsh_lifecycle.py +58 -0
- ksadk/studio/dsh_provider_registration.py +55 -16
- 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 +1 -1
- ksadk/studio/kernel_registry.py +418 -0
- ksadk/studio/kernel_sqlite_migration.py +181 -0
- ksadk/studio/model_client.py +1178 -64
- ksadk/studio/model_profile_service.py +26 -11
- ksadk/studio/native_documents.py +172 -0
- ksadk/studio/plugin_composition.py +13 -2
- ksadk/studio/plugin_kernel_adapter.py +15 -0
- ksadk/studio/plugin_lifecycle.py +80 -0
- ksadk/studio/plugin_runtime.py +230 -17
- ksadk/studio/provider_recovery.py +59 -0
- ksadk/studio/recovery_page.py +70 -0
- ksadk/studio/resource_authority.py +59 -32
- ksadk/studio/resource_catalog.py +6 -0
- ksadk/studio/run_activity.py +895 -0
- ksadk/studio/run_documents.py +127 -0
- ksadk/studio/run_service.py +329 -33
- ksadk/studio/runtime_catalog.py +53 -10
- ksadk/studio/runtime_source.py +1 -1
- ksadk/studio/scheduler_runtime.py +32 -289
- ksadk/studio/service.py +398 -103
- ksadk/studio/shared_web.py +149 -36
- 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/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/architecture-7GRP2DOG-BMOPAkUC.js +1 -0
- ksadk/studio/static/assets/architectureDiagram-5GKGNRK7-5Zn1gqJv.js +36 -0
- ksadk/studio/static/assets/{blockDiagram-I7D4REHJ-CFmPl1de.js → blockDiagram-I7D4REHJ-CLB4L11u.js} +6 -6
- ksadk/studio/static/assets/{c4Diagram-7LVT6UL2-BRrGu8qt.js → c4Diagram-7LVT6UL2-BOma_Z_F.js} +7 -7
- 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-2ZTRR5NV-C2qZJila.js +2 -0
- ksadk/studio/static/assets/chunk-3Z5EZCMW-DMniOlPd.js +1 -0
- ksadk/studio/static/assets/{chunk-4HAMMTFA-D220vUtq.js → chunk-4HAMMTFA-DVtDP4rm.js} +7 -7
- ksadk/studio/static/assets/chunk-5V3GS4D5-i-ZDOEnP.js +1 -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-C4DtVpCu.js → chunk-DU6HZSFF-CpEZCUgg.js} +1 -1
- ksadk/studio/static/assets/chunk-F27PBJKO-D7pvKf0C.js +1 -0
- ksadk/studio/static/assets/{chunk-GMAD6QVW-DiQA-u2N.js → chunk-GMAD6QVW-DE_8H717.js} +6 -6
- 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-BSlbjT_b.js → chunk-IMKFNOWR-D38axYOR.js} +5 -5
- 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-M2m6G3j4.js → chunk-OSK3NFVY-DiCQjx9b.js} +5 -5
- ksadk/studio/static/assets/chunk-OUJLGHUK-D0j2JRSg.js +2 -0
- ksadk/studio/static/assets/{chunk-P2QGCYS3-DezaQxiK.js → chunk-P2QGCYS3-VdhKmfYq.js} +1 -1
- 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-DAyIVp5H.js → chunk-SHT3W25Y-DsCFnRVE.js} +9 -9
- ksadk/studio/static/assets/{chunk-SVP7TREG-DulomOrS.js → chunk-SVP7TREG-DljApgRX.js} +1 -1
- ksadk/studio/static/assets/{chunk-TICWLB2K-bHJYoflj.js → chunk-TICWLB2K-DWqRtyqa.js} +6 -6
- 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/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/dagre-GXQ25YYZ-buZBRlwz.js +4 -0
- ksadk/studio/static/assets/{diagram-S7CK7UJ4-0BZ98mya.js → diagram-S7CK7UJ4-C6aH78c4.js} +3 -3
- 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/ebnfDiagram-PWID7BFC-Daukxwqf.js +1 -0
- ksadk/studio/static/assets/{erDiagram-RLTQ6QDP-DLGry2Ap.js → erDiagram-RLTQ6QDP-CGthTMmJ.js} +6 -6
- 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/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/{ishikawaDiagram-5VMMS53U-CljI2wyf.js → ishikawaDiagram-5VMMS53U-BUGEl8cO.js} +2 -2
- ksadk/studio/static/assets/{journeyDiagram-3NMN7TZE-D50Fo2sL.js → journeyDiagram-3NMN7TZE-Ch2ZYxvr.js} +6 -6
- ksadk/studio/static/assets/{kanban-definition-UXKFOSKX-DimfOTam.js → kanban-definition-UXKFOSKX-Da-Fp4vC.js} +3 -3
- ksadk/studio/static/assets/kingsoft-cloud-BOcLiQ3e.ico +0 -0
- ksadk/studio/static/assets/{line-CX5BOOUP.js → line-BDaeq300.js} +1 -1
- 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-Bizzqy5R.js → mindmap-definition-YA3MSWOX-CvlsVQ38.js} +1 -1
- ksadk/studio/static/assets/packet-AYTQ26CC-BSJEH9Lb.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-B9mrFSDF.js → pieDiagram-E7YTZNPT-DlrWiSOv.js} +1 -1
- 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-NzUfCbMR.js → quadrantDiagram-AXDQQJYC-BA3hpUZM.js} +6 -6
- 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-BF3d103U.js → requirementDiagram-BXWQKSXE-E-Ge0FcV.js} +1 -1
- ksadk/studio/static/assets/sankeyDiagram-P5KCCOFB-CA6YKhQ3.js +40 -0
- ksadk/studio/static/assets/{sequenceDiagram-WJ2MYXX4-Dh4wZtUm.js → sequenceDiagram-WJ2MYXX4-CcElXGg4.js} +9 -9
- 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-DxmSSjRB.js → timeline-definition-24CTP7MA-CIuYhNy3.js} +7 -7
- 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-Ba1AOWoe.js → wardleyDiagram-VM6X3IG4-CMJiaedy.js} +1 -1
- ksadk/studio/static/assets/{xychartDiagram-S5SC5T6Z-Cr5pt5Y-.js → xychartDiagram-S5SC5T6Z-BdgtMvW2.js} +6 -6
- 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
- ksadk/server/static/assets/MathMessageMarkdown-DbdW5A4_.js +0 -8
- ksadk/server/static/assets/architecture-7GRP2DOG-BW5UtSnx.js +0 -1
- ksadk/server/static/assets/channel-CF5Up3hQ.js +0 -1
- ksadk/server/static/assets/chunk-2Q5K7J3B-KkXX47WI.js +0 -1
- ksadk/server/static/assets/classDiagram-DTDB5LWJ-Cz81acRQ.js +0 -1
- ksadk/server/static/assets/classDiagram-v2-JRS7N3AN-Cz81acRQ.js +0 -1
- ksadk/server/static/assets/cynefin-OW5HDTMX-DVWs8a2t.js +0 -1
- ksadk/server/static/assets/dist-B2_CVgKv.js +0 -1
- ksadk/server/static/assets/eventmodeling-NTZA5JFV-CQqR2hg3.js +0 -1
- ksadk/server/static/assets/flowDiagram-A5DVABFB-DDRRbGPm.js +0 -1
- ksadk/server/static/assets/gitGraph-4MIJSDKK-fgWEf7UD.js +0 -1
- ksadk/server/static/assets/index-DcTML1Up.css +0 -2
- ksadk/server/static/assets/index-Dh2XHqPK.js +0 -244
- ksadk/server/static/assets/info-A6RAGUB7-BUecLTdt.js +0 -1
- ksadk/server/static/assets/packet-AYTQ26CC-BeW-btFv.js +0 -1
- ksadk/server/static/assets/pie-WAS4IAKB-X0xh4SaT.js +0 -1
- ksadk/server/static/assets/radar-RG4KPBEZ-DzRMSqjd.js +0 -1
- ksadk/server/static/assets/railroad-74A4TZTK-Cc44icX-.js +0 -1
- ksadk/server/static/assets/railroad-abnf-HS5TGJTU-D6S4BdV-.js +0 -1
- ksadk/server/static/assets/railroad-ebnf-LZEXJU2U-vD3aVE2o.js +0 -1
- ksadk/server/static/assets/railroad-peg-WCYAUIDC-CYbW_b4T.js +0 -1
- ksadk/server/static/assets/stateDiagram-v2-4QOOHH4V-BIcjKFhF.js +0 -1
- ksadk/server/static/assets/swimlanesDiagram-VK2B7HYN-tq3K3Ybl.js +0 -8
- ksadk/server/static/assets/treeView-Q6P3EWNA-DBXt3GdU.js +0 -1
- ksadk/server/static/assets/treemap-WGGIJYW6-DrCy4E_l.js +0 -1
- ksadk/server/static/assets/wardley-WFR3VGLG-CefhOliM.js +0 -1
- ksadk/studio/static/assets/CodeBlock-DCUUY0PL-BLjA7kbS.js +0 -41
- ksadk/studio/static/assets/MathMessageMarkdown-CBcDrAw--CUYIXwgI.js +0 -8
- ksadk/studio/static/assets/MermaidBlock-DBFTztfQ-BTYKWEbD.js +0 -44
- ksadk/studio/static/assets/PrismRenderer-wiXRHURw.js +0 -3
- ksadk/studio/static/assets/abnfDiagram-VCTEODGH-CLETGjKq.js +0 -1
- ksadk/studio/static/assets/architecture-7GRP2DOG-hXMiO_AU.js +0 -1
- ksadk/studio/static/assets/architectureDiagram-5GKGNRK7-B5EQysk6.js +0 -36
- ksadk/studio/static/assets/channel-BqO-gtEw.js +0 -1
- ksadk/studio/static/assets/chunk-75Z2AOVW-C8lLv_qc.js +0 -2
- ksadk/studio/static/assets/chunk-F27PBJKO-Cpw14SNG.js +0 -1
- ksadk/studio/static/assets/chunk-GVQU2GXP-DUdNBUCi.js +0 -1
- ksadk/studio/static/assets/chunk-L3NEJ4N5-Db8Ab22W.js +0 -1
- ksadk/studio/static/assets/chunk-POPQ4Y6H-DOpufJ3t.js +0 -1
- ksadk/studio/static/assets/chunk-PWAF6VOD-CfLb1gSc.js +0 -1
- ksadk/studio/static/assets/chunk-XXDRQBXY-7PcdR2B1.js +0 -1
- ksadk/studio/static/assets/classDiagram-ZZMXUADV-D_bW8JjA.js +0 -1
- ksadk/studio/static/assets/classDiagram-v2-VYDZK3BY-D_bW8JjA.js +0 -1
- ksadk/studio/static/assets/cose-bilkent-JH36ORCC-snL88wkX.js +0 -1
- ksadk/studio/static/assets/cynefin-OW5HDTMX-Bd1YhRo1.js +0 -1
- ksadk/studio/static/assets/cynefinDiagram-5FMLGOSQ-BBrIG_mI.js +0 -62
- ksadk/studio/static/assets/dagre-GXQ25YYZ-DtF1nGdY.js +0 -4
- ksadk/studio/static/assets/diagram-UQ7AKVKN-6mLKEo6L.js +0 -41
- ksadk/studio/static/assets/diagram-VSXAHHWV-CJBIaiZ2.js +0 -3
- ksadk/studio/static/assets/diagram-VX7I27RA-BohLEE1C.js +0 -24
- ksadk/studio/static/assets/diagram-Z3DM3KII-D8KIGonG.js +0 -24
- ksadk/studio/static/assets/ebnfDiagram-PWID7BFC-C99HU61t.js +0 -1
- ksadk/studio/static/assets/eventmodeling-NTZA5JFV-B1_5Ac8j.js +0 -1
- ksadk/studio/static/assets/flowDiagram-HODETNUW-DD5hmicn.js +0 -1
- ksadk/studio/static/assets/ganttDiagram-EL5Y4UJY-BPJrVLSG.js +0 -292
- ksadk/studio/static/assets/gitGraph-4MIJSDKK-Cy_ZQBGi.js +0 -1
- ksadk/studio/static/assets/gitGraphDiagram-WWUBYQGX-CZCUz4MT.js +0 -106
- ksadk/studio/static/assets/index-CeHL9ARV.css +0 -2
- ksadk/studio/static/assets/index-D9QEcVpL.js +0 -320
- ksadk/studio/static/assets/info-A6RAGUB7-DBzDQB_I.js +0 -1
- ksadk/studio/static/assets/infoDiagram-27XIBGKW-B-sq07Hi.js +0 -2
- ksadk/studio/static/assets/linear-BCxN9JLv.js +0 -1
- ksadk/studio/static/assets/mermaid-parser.core-BdCz8fkS.js +0 -7
- ksadk/studio/static/assets/packet-AYTQ26CC-gPln-_kG.js +0 -1
- ksadk/studio/static/assets/pegDiagram-XKGWAZYB-Dy3fB-gW.js +0 -1
- ksadk/studio/static/assets/pie-WAS4IAKB-qZdHMr7B.js +0 -1
- ksadk/studio/static/assets/radar-RG4KPBEZ-BZlnaea9.js +0 -1
- ksadk/studio/static/assets/railroad-74A4TZTK-Ce3__H9c.js +0 -1
- ksadk/studio/static/assets/railroad-abnf-HS5TGJTU-DqQn7EzD.js +0 -1
- ksadk/studio/static/assets/railroad-ebnf-LZEXJU2U-B55kCA8F.js +0 -1
- ksadk/studio/static/assets/railroad-peg-WCYAUIDC-DfQnvkHd.js +0 -1
- ksadk/studio/static/assets/railroadDiagram-O6MQD6OU-DnhMjZCk.js +0 -1
- ksadk/studio/static/assets/sankeyDiagram-P5KCCOFB-Bo-JTwt0.js +0 -40
- ksadk/studio/static/assets/src-SFn9St9H.js +0 -1
- ksadk/studio/static/assets/stateDiagram-D77RDMKH-DH774G6d.js +0 -1
- ksadk/studio/static/assets/stateDiagram-v2-MP3YSRHH-DZvVWPBo.js +0 -1
- ksadk/studio/static/assets/swimlanes-42K2YHIH-Bl13OvTX.js +0 -1
- ksadk/studio/static/assets/swimlanesDiagram-VR7AAH4N-BnFOTALJ.js +0 -8
- ksadk/studio/static/assets/treeView-Q6P3EWNA-D5Nn9Swz.js +0 -1
- ksadk/studio/static/assets/treemap-WGGIJYW6-CgHgnQhE.js +0 -1
- ksadk/studio/static/assets/vennDiagram-4TSXK5OY-B9QEXcJq.js +0 -34
- ksadk/studio/static/assets/wardley-WFR3VGLG-DXrK2RRY.js +0 -1
- {agentengine_sdk_python-0.8.4.dist-info → agentengine_sdk_python-0.8.5.dist-info}/WHEEL +0 -0
- {agentengine_sdk_python-0.8.4.dist-info → agentengine_sdk_python-0.8.5.dist-info}/entry_points.txt +0 -0
- {agentengine_sdk_python-0.8.4.dist-info → agentengine_sdk_python-0.8.5.dist-info}/licenses/LICENSE +0 -0
- {agentengine_sdk_python-0.8.4.dist-info → agentengine_sdk_python-0.8.5.dist-info}/top_level.txt +0 -0
- /ksadk/studio/static/assets/{MathMessageMarkdown-CBcDrAw--BEOyPC3w.css → MathMessageMarkdown-BesSeCYl-BEOyPC3w.css} +0 -0
|
@@ -18,6 +18,7 @@ def project_session_messages(
|
|
|
18
18
|
include_reasoning: bool = False,
|
|
19
19
|
include_tool_events: bool = False,
|
|
20
20
|
include_attachments: bool = True,
|
|
21
|
+
session_id: str | None = None,
|
|
21
22
|
) -> list[dict[str, Any]]:
|
|
22
23
|
"""Project persisted runtime events into the chat history contract.
|
|
23
24
|
|
|
@@ -53,7 +54,17 @@ def project_session_messages(
|
|
|
53
54
|
approval_responses=approval_responses,
|
|
54
55
|
)
|
|
55
56
|
)
|
|
56
|
-
|
|
57
|
+
projected = sorted(messages, key=lambda item: int(item.get("SeqId") or 0))
|
|
58
|
+
if session_id:
|
|
59
|
+
for message in projected:
|
|
60
|
+
for attachment in message.get("Attachments") or []:
|
|
61
|
+
file_uri = str(attachment.get("file_uri") or "")
|
|
62
|
+
if file_uri.startswith(("ksadk-upload://", "ae-upload://")):
|
|
63
|
+
attachment["url"] = (
|
|
64
|
+
"/agentengine/api/v1/AttachmentContent?FileUri="
|
|
65
|
+
f"{quote(file_uri, safe='')}&SessionId={quote(str(session_id), safe='')}"
|
|
66
|
+
)
|
|
67
|
+
return projected
|
|
57
68
|
|
|
58
69
|
|
|
59
70
|
def _project_event_group(
|
|
@@ -119,8 +130,7 @@ def _project_event_group(
|
|
|
119
130
|
# emit a placeholder assistant message for them first.
|
|
120
131
|
if has_pre_assistant_approvals and not assistant_seen:
|
|
121
132
|
anchor = next(
|
|
122
|
-
(e for e in events
|
|
123
|
-
if str(e.get("EventType") or "") == "approval_request"),
|
|
133
|
+
(e for e in events if str(e.get("EventType") or "") == "approval_request"),
|
|
124
134
|
events[0],
|
|
125
135
|
)
|
|
126
136
|
placeholder = _base_message(anchor, "assistant", content="")
|
|
@@ -224,9 +234,7 @@ def _project_interleaved_blocks(
|
|
|
224
234
|
saw_stream_text = False
|
|
225
235
|
saw_reasoning_after_stream_text = False
|
|
226
236
|
tools_by_seq_id = {
|
|
227
|
-
int(tool.get("SeqId") or 0): tool
|
|
228
|
-
for tool in tool_events
|
|
229
|
-
if int(tool.get("SeqId") or 0) > 0
|
|
237
|
+
int(tool.get("SeqId") or 0): tool for tool in tool_events if int(tool.get("SeqId") or 0) > 0
|
|
230
238
|
}
|
|
231
239
|
|
|
232
240
|
def append_text(text: str, seq_id: Any) -> None:
|
|
@@ -493,9 +501,7 @@ def _project_approval_events(
|
|
|
493
501
|
)
|
|
494
502
|
if not isinstance(first_action, Mapping):
|
|
495
503
|
first_action = {}
|
|
496
|
-
interaction_id = runtime_event.get("interaction_id") or req.get(
|
|
497
|
-
"call_id"
|
|
498
|
-
)
|
|
504
|
+
interaction_id = runtime_event.get("interaction_id") or req.get("call_id")
|
|
499
505
|
interrupt_info = {
|
|
500
506
|
"approval_request_id": interaction_id,
|
|
501
507
|
"id": interaction_id,
|
|
@@ -528,17 +534,11 @@ def _project_approval_events(
|
|
|
528
534
|
# 这里统一提取,避免 Name fallback 成 "approval" 导致前端显示不对。
|
|
529
535
|
action_requests = interrupt_info.get("action_requests")
|
|
530
536
|
first_action = (
|
|
531
|
-
action_requests[0]
|
|
532
|
-
if isinstance(action_requests, list) and action_requests
|
|
533
|
-
else {}
|
|
537
|
+
action_requests[0] if isinstance(action_requests, list) and action_requests else {}
|
|
534
538
|
)
|
|
535
539
|
if not isinstance(first_action, Mapping):
|
|
536
540
|
first_action = {}
|
|
537
|
-
tool_name = (
|
|
538
|
-
interrupt_info.get("tool_name")
|
|
539
|
-
or first_action.get("name")
|
|
540
|
-
or "approval"
|
|
541
|
-
)
|
|
541
|
+
tool_name = interrupt_info.get("tool_name") or first_action.get("name") or "approval"
|
|
542
542
|
entry: dict[str, Any] = {
|
|
543
543
|
"SeqId": request.get("SeqId"),
|
|
544
544
|
"Type": "approval",
|
|
@@ -559,10 +559,7 @@ def _project_approval_events(
|
|
|
559
559
|
)
|
|
560
560
|
if arguments is not None:
|
|
561
561
|
entry["Args"] = arguments
|
|
562
|
-
description = (
|
|
563
|
-
interrupt_info.get("description")
|
|
564
|
-
or first_action.get("description")
|
|
565
|
-
)
|
|
562
|
+
description = interrupt_info.get("description") or first_action.get("description")
|
|
566
563
|
if description:
|
|
567
564
|
entry["Description"] = str(description)
|
|
568
565
|
review_configs = interrupt_info.get("review_configs")
|
|
@@ -721,7 +718,7 @@ def _normalize_canonical_event(
|
|
|
721
718
|
initial = runtime_event.get("initial") or {}
|
|
722
719
|
parts = initial.get("parts") if isinstance(initial, Mapping) else []
|
|
723
720
|
data: Any = {}
|
|
724
|
-
for part in
|
|
721
|
+
for part in parts or []:
|
|
725
722
|
if isinstance(part, Mapping) and part.get("content_type") == "data":
|
|
726
723
|
data = part.get("data")
|
|
727
724
|
break
|
|
@@ -821,9 +818,7 @@ def _normalize_canonical_event(
|
|
|
821
818
|
# 嵌在 action_requests[0] 里,detail 顶层没有,需要提取。
|
|
822
819
|
action_requests = detail.get("action_requests")
|
|
823
820
|
first_action = (
|
|
824
|
-
action_requests[0]
|
|
825
|
-
if isinstance(action_requests, list) and action_requests
|
|
826
|
-
else {}
|
|
821
|
+
action_requests[0] if isinstance(action_requests, list) and action_requests else {}
|
|
827
822
|
)
|
|
828
823
|
if not isinstance(first_action, Mapping):
|
|
829
824
|
first_action = {}
|
|
@@ -833,20 +828,16 @@ def _normalize_canonical_event(
|
|
|
833
828
|
normalized_metadata["interrupt_info"] = {
|
|
834
829
|
"approval_request_id": interaction_id or call_id,
|
|
835
830
|
"id": interaction_id or call_id,
|
|
836
|
-
"tool_name": detail.get("tool_name")
|
|
837
|
-
or first_action.get("name")
|
|
838
|
-
or kind,
|
|
831
|
+
"tool_name": detail.get("tool_name") or first_action.get("name") or kind,
|
|
839
832
|
"arguments": detail.get("arguments")
|
|
840
833
|
or detail.get("args")
|
|
841
834
|
or first_action.get("args")
|
|
842
835
|
or first_action.get("arguments"),
|
|
843
|
-
"description": detail.get("description")
|
|
844
|
-
or first_action.get("description"),
|
|
836
|
+
"description": detail.get("description") or first_action.get("description"),
|
|
845
837
|
"review_configs": review_configs if isinstance(review_configs, list) else None,
|
|
846
838
|
"approval_level": detail.get("approval_level")
|
|
847
839
|
or first_action.get("approval_level"),
|
|
848
|
-
"approval_message": detail.get("message")
|
|
849
|
-
or first_action.get("description"),
|
|
840
|
+
"approval_message": detail.get("message") or first_action.get("description"),
|
|
850
841
|
}
|
|
851
842
|
# Preserve ag-ui protocol tag from source metadata.
|
|
852
843
|
source = runtime_event.get("source") or {}
|
ksadk/conversations/normalize.py
CHANGED
|
@@ -290,7 +290,9 @@ def compact_attachment_for_session(attachment: Dict[str, Any]) -> Dict[str, Any]
|
|
|
290
290
|
}
|
|
291
291
|
|
|
292
292
|
|
|
293
|
-
def attachment_from_part(
|
|
293
|
+
def attachment_from_part(
|
|
294
|
+
part: Part, *, owner_scope_ref: str | None = None
|
|
295
|
+
) -> Optional[Dict[str, Any]]:
|
|
294
296
|
inline = part.inlineData
|
|
295
297
|
if inline and inline.data:
|
|
296
298
|
display_name = inline.displayName or "uploaded_file"
|
|
@@ -312,7 +314,9 @@ def attachment_from_part(part: Part) -> Optional[Dict[str, Any]]:
|
|
|
312
314
|
if file_data and (file_data.fileUri or file_data.displayName):
|
|
313
315
|
display_name = file_data.displayName or file_data.fileUri or "uploaded_file"
|
|
314
316
|
mime_type = (file_data.mimeType or "").strip() or "application/octet-stream"
|
|
315
|
-
storage_path = resolve_attachment_storage_path(
|
|
317
|
+
storage_path = resolve_attachment_storage_path(
|
|
318
|
+
file_data.fileUri or "", owner_scope_ref=owner_scope_ref
|
|
319
|
+
)
|
|
316
320
|
try:
|
|
317
321
|
size_bytes = (
|
|
318
322
|
storage_path.stat().st_size if storage_path and storage_path.exists() else None
|
|
@@ -357,9 +361,15 @@ def display_content_from_parts(parts: List[Part]) -> str:
|
|
|
357
361
|
return "\n\n".join(blocks).strip()
|
|
358
362
|
|
|
359
363
|
|
|
360
|
-
def normalize_parts_content(
|
|
364
|
+
def normalize_parts_content(
|
|
365
|
+
parts: List[Part], *, owner_scope_ref: str | None = None
|
|
366
|
+
) -> dict[str, Any]:
|
|
361
367
|
attachments = [
|
|
362
|
-
attachment
|
|
368
|
+
attachment
|
|
369
|
+
for attachment in (
|
|
370
|
+
attachment_from_part(part, owner_scope_ref=owner_scope_ref) for part in parts
|
|
371
|
+
)
|
|
372
|
+
if attachment
|
|
363
373
|
]
|
|
364
374
|
attachment_results = build_attachment_results(attachments)
|
|
365
375
|
display_content = display_content_from_parts(parts)
|
|
@@ -383,7 +393,9 @@ def normalize_parts_content(parts: List[Part]) -> dict[str, Any]:
|
|
|
383
393
|
}
|
|
384
394
|
|
|
385
395
|
|
|
386
|
-
def normalize_kop_message_content(
|
|
396
|
+
def normalize_kop_message_content(
|
|
397
|
+
content: Any, *, owner_scope_ref: str | None = None
|
|
398
|
+
) -> dict[str, Any]:
|
|
387
399
|
input_content = canonical_input_content_from_message_content(content)
|
|
388
400
|
if isinstance(content, list):
|
|
389
401
|
parts: List[Part] = []
|
|
@@ -397,7 +409,7 @@ def normalize_kop_message_content(content: Any) -> dict[str, Any]:
|
|
|
397
409
|
parts.append(Part.model_validate(payload))
|
|
398
410
|
except Exception:
|
|
399
411
|
continue
|
|
400
|
-
normalized = normalize_parts_content(parts)
|
|
412
|
+
normalized = normalize_parts_content(parts, owner_scope_ref=owner_scope_ref)
|
|
401
413
|
normalized["input_content"] = input_content
|
|
402
414
|
return normalized
|
|
403
415
|
text = str(content or "")
|
|
@@ -411,11 +423,15 @@ def normalize_kop_message_content(content: Any) -> dict[str, Any]:
|
|
|
411
423
|
}
|
|
412
424
|
|
|
413
425
|
|
|
414
|
-
def normalize_kop_messages(
|
|
426
|
+
def normalize_kop_messages(
|
|
427
|
+
messages: List[Dict[str, Any]], *, owner_scope_ref: str | None = None
|
|
428
|
+
) -> List[Dict[str, Any]]:
|
|
415
429
|
normalized: List[Dict[str, Any]] = []
|
|
416
430
|
for message in messages or []:
|
|
417
431
|
role = str(message.get("role") or "user")
|
|
418
|
-
normalized_content = normalize_kop_message_content(
|
|
432
|
+
normalized_content = normalize_kop_message_content(
|
|
433
|
+
message.get("content", ""), owner_scope_ref=owner_scope_ref
|
|
434
|
+
)
|
|
419
435
|
normalized.append(
|
|
420
436
|
{
|
|
421
437
|
"role": role,
|
|
@@ -430,7 +446,9 @@ def normalize_kop_messages(messages: List[Dict[str, Any]]) -> List[Dict[str, Any
|
|
|
430
446
|
return normalized
|
|
431
447
|
|
|
432
448
|
|
|
433
|
-
def normalize_responses_input(
|
|
449
|
+
def normalize_responses_input(
|
|
450
|
+
input_payload: Any, *, owner_scope_ref: str | None = None
|
|
451
|
+
) -> List[Dict[str, Any]]:
|
|
434
452
|
if isinstance(input_payload, str):
|
|
435
453
|
return [
|
|
436
454
|
{
|
|
@@ -446,5 +464,5 @@ def normalize_responses_input(input_payload: Any) -> List[Dict[str, Any]]:
|
|
|
446
464
|
}
|
|
447
465
|
]
|
|
448
466
|
if isinstance(input_payload, list):
|
|
449
|
-
return normalize_kop_messages(input_payload)
|
|
467
|
+
return normalize_kop_messages(input_payload, owner_scope_ref=owner_scope_ref)
|
|
450
468
|
return []
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
"""Context-engine baseline recording kept outside the stream hot path."""
|
|
2
|
+
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
import time
|
|
6
|
+
from collections.abc import Mapping
|
|
7
|
+
from typing import Any
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
def record_baseline_turn(
|
|
11
|
+
*,
|
|
12
|
+
prepared: Any,
|
|
13
|
+
model: str | None,
|
|
14
|
+
usage: Any,
|
|
15
|
+
ptl: bool,
|
|
16
|
+
attempts: int,
|
|
17
|
+
turn_start_monotonic: float | None,
|
|
18
|
+
) -> None:
|
|
19
|
+
"""Record one env-gated baseline turn without affecting decisions."""
|
|
20
|
+
|
|
21
|
+
from ksadk.context_engine.baseline import record_baseline_turn as record
|
|
22
|
+
|
|
23
|
+
latency_ms = None
|
|
24
|
+
if turn_start_monotonic is not None:
|
|
25
|
+
latency_ms = int((time.monotonic() - turn_start_monotonic) * 1000)
|
|
26
|
+
record(
|
|
27
|
+
getattr(prepared, "shadow_context_plan", None),
|
|
28
|
+
session_id=getattr(prepared, "session_id", ""),
|
|
29
|
+
invocation_id=getattr(prepared, "invocation_id", ""),
|
|
30
|
+
model=str(model or ""),
|
|
31
|
+
usage=usage if isinstance(usage, Mapping) else None,
|
|
32
|
+
compaction_triggered=bool(getattr(prepared, "compaction_triggered", False)),
|
|
33
|
+
compaction_trigger=str(getattr(prepared, "compaction_trigger", "") or ""),
|
|
34
|
+
prompt_too_long=ptl,
|
|
35
|
+
retry_attempts=attempts,
|
|
36
|
+
turn_latency_ms=latency_ms,
|
|
37
|
+
)
|
|
@@ -40,6 +40,7 @@ from ksadk.conversations.runtime_observability import (
|
|
|
40
40
|
_set_conversation_usage_attributes,
|
|
41
41
|
_set_prompt_cache_attributes,
|
|
42
42
|
_set_prompt_source_attributes,
|
|
43
|
+
_set_skill_eval_result_attributes,
|
|
43
44
|
_span_feedback_metadata,
|
|
44
45
|
)
|
|
45
46
|
from ksadk.conversations.runtime_persistence import (
|
|
@@ -55,7 +56,10 @@ from ksadk.conversations.runtime_resume import (
|
|
|
55
56
|
_merge_agentengine_metadata,
|
|
56
57
|
)
|
|
57
58
|
from ksadk.model_policy import fallback_model_for_exception, model_policy_options_for_model
|
|
59
|
+
from ksadk.runtime.skill_eval_result import skill_eval_response_fields
|
|
58
60
|
from ksadk.runtime_context import (
|
|
61
|
+
TRUSTED_IDENTITY_METADATA_KEY,
|
|
62
|
+
PlatformIdentityContext,
|
|
59
63
|
PlatformInvocationContext,
|
|
60
64
|
platform_invocation_scope,
|
|
61
65
|
tool_execution_scope,
|
|
@@ -180,9 +184,13 @@ async def invoke_conversation_once(
|
|
|
180
184
|
)
|
|
181
185
|
raise
|
|
182
186
|
_inject_runner_deferred_tools_for_request(runner, prepared)
|
|
187
|
+
effective_user_id = prepared.user_id or user_id
|
|
188
|
+
invocation_identity = PlatformIdentityContext.from_payload(
|
|
189
|
+
dict(request_metadata or {}).get(TRUSTED_IDENTITY_METADATA_KEY)
|
|
190
|
+
)
|
|
183
191
|
ambient_contexts = _build_runner_ambient_contexts(
|
|
184
192
|
runner=runner,
|
|
185
|
-
user_id=
|
|
193
|
+
user_id=effective_user_id,
|
|
186
194
|
user_input=prepared.user_input,
|
|
187
195
|
)
|
|
188
196
|
prepared.memory_recall_events = ambient_contexts.get("memory_recall_events", [])
|
|
@@ -191,7 +199,7 @@ async def invoke_conversation_once(
|
|
|
191
199
|
runtime_context = PlatformInvocationContext(
|
|
192
200
|
session=SessionContext.from_payload(prepared.session_context),
|
|
193
201
|
agent_id=agent_id,
|
|
194
|
-
user_id=
|
|
202
|
+
user_id=effective_user_id,
|
|
195
203
|
account_id=str(account_id or ""),
|
|
196
204
|
session_id=prepared.session_id,
|
|
197
205
|
history=list(prepared.history),
|
|
@@ -210,13 +218,14 @@ async def invoke_conversation_once(
|
|
|
210
218
|
kb_context=ambient_contexts.get("kb_context"),
|
|
211
219
|
memory_context=ambient_contexts.get("memory_context"),
|
|
212
220
|
tool_approval_mode=str(prepared.request_metadata.get("tool_approval_mode") or ""),
|
|
221
|
+
identity=invocation_identity,
|
|
213
222
|
)
|
|
214
223
|
runner_name = _runner_name(runner)
|
|
215
224
|
async with _conversation_span_scope(runner_name) as span:
|
|
216
225
|
_set_conversation_span_attributes(
|
|
217
226
|
span,
|
|
218
227
|
agent_id=agent_id,
|
|
219
|
-
user_id=
|
|
228
|
+
user_id=effective_user_id,
|
|
220
229
|
session_id=prepared.session_id,
|
|
221
230
|
invocation_id=prepared.invocation_id,
|
|
222
231
|
runner_name=runner_name,
|
|
@@ -354,6 +363,9 @@ async def invoke_conversation_once(
|
|
|
354
363
|
if last_invoke_error is not None:
|
|
355
364
|
raise last_invoke_error
|
|
356
365
|
result = result or {}
|
|
366
|
+
result_fields = skill_eval_response_fields(result)
|
|
367
|
+
if result_fields:
|
|
368
|
+
_set_skill_eval_result_attributes(span, result_fields["skill_eval_result"])
|
|
357
369
|
output_text = strip_reasoning_markup(str(result.get("output", "")))
|
|
358
370
|
result_usage = _normalize_usage_payload(result.get("usage"))
|
|
359
371
|
result_last_usage = _normalize_usage_payload(
|
|
@@ -434,7 +446,7 @@ async def invoke_conversation_once(
|
|
|
434
446
|
)
|
|
435
447
|
await _auto_save_ltm_turn(
|
|
436
448
|
agent_id=agent_id,
|
|
437
|
-
user_id=
|
|
449
|
+
user_id=effective_user_id,
|
|
438
450
|
prepared=prepared,
|
|
439
451
|
output_text=output_text,
|
|
440
452
|
runner_type=runtime_context.runner_type,
|
|
@@ -450,6 +462,7 @@ async def invoke_conversation_once(
|
|
|
450
462
|
run_trigger=run_trigger,
|
|
451
463
|
)
|
|
452
464
|
result_payload: dict[str, Any] = {
|
|
465
|
+
**result_fields,
|
|
453
466
|
"output_text": output_text,
|
|
454
467
|
"model": model,
|
|
455
468
|
"metadata": {
|
|
@@ -45,6 +45,8 @@ def _normalize_usage_payload(usage: Mapping[str, Any] | None) -> dict[str, Any]:
|
|
|
45
45
|
"total_tokens",
|
|
46
46
|
"prompt_tokens",
|
|
47
47
|
"completion_tokens",
|
|
48
|
+
"cached_tokens",
|
|
49
|
+
"reasoning_tokens",
|
|
48
50
|
):
|
|
49
51
|
value = usage.get(key)
|
|
50
52
|
if value is None:
|
|
@@ -57,6 +59,23 @@ def _normalize_usage_payload(usage: Mapping[str, Any] | None) -> dict[str, Any]:
|
|
|
57
59
|
value = usage.get(key)
|
|
58
60
|
if isinstance(value, Mapping):
|
|
59
61
|
normalized[key] = dict(value)
|
|
62
|
+
for source_key, target_key in (
|
|
63
|
+
("input_tokens_details", "input_token_details"),
|
|
64
|
+
("output_tokens_details", "output_token_details"),
|
|
65
|
+
):
|
|
66
|
+
value = usage.get(source_key)
|
|
67
|
+
if isinstance(value, Mapping) and target_key not in normalized:
|
|
68
|
+
normalized[target_key] = dict(value)
|
|
69
|
+
cached_tokens = normalized.get("cached_tokens")
|
|
70
|
+
if cached_tokens is not None:
|
|
71
|
+
input_details = normalized.setdefault("input_token_details", {})
|
|
72
|
+
if not any(key in input_details for key in ("cached_tokens", "cached", "cache_read")):
|
|
73
|
+
input_details["cached"] = cached_tokens
|
|
74
|
+
reasoning_tokens = normalized.get("reasoning_tokens")
|
|
75
|
+
if reasoning_tokens is not None:
|
|
76
|
+
output_details = normalized.setdefault("output_token_details", {})
|
|
77
|
+
if not any(key in output_details for key in ("reasoning_tokens", "reasoning")):
|
|
78
|
+
output_details["reasoning"] = reasoning_tokens
|
|
60
79
|
prompt_details = usage.get("prompt_tokens_details")
|
|
61
80
|
if isinstance(prompt_details, Mapping):
|
|
62
81
|
normalized["prompt_tokens_details"] = dict(prompt_details)
|
|
@@ -339,10 +358,21 @@ def _set_conversation_output_attributes(span: Any | None, output_text: str | Non
|
|
|
339
358
|
_set_span_attribute(span, key, text)
|
|
340
359
|
|
|
341
360
|
|
|
361
|
+
def _set_skill_eval_result_attributes(span: Any | None, result: Mapping[str, Any]) -> None:
|
|
362
|
+
"""Attach structured evidence without changing trace/observation output text."""
|
|
363
|
+
payload = json.dumps({"skill_eval_result": dict(result)}, ensure_ascii=False)
|
|
364
|
+
_set_span_attribute(span, "metadata", payload)
|
|
365
|
+
_set_span_attribute(
|
|
366
|
+
span, "langfuse.trace.metadata.skill_eval_result",
|
|
367
|
+
json.dumps(dict(result), ensure_ascii=False),
|
|
368
|
+
)
|
|
369
|
+
|
|
370
|
+
|
|
342
371
|
def _set_conversation_usage_attributes(
|
|
343
372
|
span: Any | None,
|
|
344
373
|
usage: Mapping[str, Any] | None,
|
|
345
374
|
) -> None:
|
|
375
|
+
"""Write run-level usage as KsADK diagnostics, never as model generation usage."""
|
|
346
376
|
normalized = _normalize_usage_payload(usage)
|
|
347
377
|
if not normalized:
|
|
348
378
|
return
|
|
@@ -372,19 +402,14 @@ def _set_conversation_usage_attributes(
|
|
|
372
402
|
)
|
|
373
403
|
|
|
374
404
|
attributes = {
|
|
375
|
-
"
|
|
376
|
-
"
|
|
377
|
-
"
|
|
378
|
-
"llm.usage.prompt_tokens": input_tokens,
|
|
379
|
-
"llm.usage.completion_tokens": output_tokens,
|
|
380
|
-
"llm.usage.total_tokens": total_tokens,
|
|
405
|
+
"ksadk.runtime.usage.input_tokens": input_tokens,
|
|
406
|
+
"ksadk.runtime.usage.output_tokens": output_tokens,
|
|
407
|
+
"ksadk.runtime.usage.total_tokens": total_tokens,
|
|
381
408
|
}
|
|
382
409
|
if cache_read_tokens:
|
|
383
|
-
attributes["
|
|
384
|
-
attributes["llm.usage.cache_read.input_tokens"] = cache_read_tokens
|
|
410
|
+
attributes["ksadk.runtime.usage.cache_read.input_tokens"] = cache_read_tokens
|
|
385
411
|
if reasoning_tokens:
|
|
386
|
-
attributes["
|
|
387
|
-
attributes["llm.usage.reasoning_tokens"] = reasoning_tokens
|
|
412
|
+
attributes["ksadk.runtime.usage.reasoning.output_tokens"] = reasoning_tokens
|
|
388
413
|
|
|
389
414
|
for key, value in attributes.items():
|
|
390
415
|
if value:
|
|
@@ -405,6 +430,10 @@ def _set_conversation_span_attributes(
|
|
|
405
430
|
if span is None:
|
|
406
431
|
return
|
|
407
432
|
try:
|
|
433
|
+
# A conversation span wraps the whole run. Real token-bearing model
|
|
434
|
+
# calls are separate child generations; keep this span out of the
|
|
435
|
+
# generation namespace so trace aggregation does not double-count.
|
|
436
|
+
span.set_attribute("openinference.span.kind", "AGENT")
|
|
408
437
|
span.set_attribute("ksadk.agent_id", agent_id)
|
|
409
438
|
span.set_attribute("ksadk.user_id", user_id)
|
|
410
439
|
span.set_attribute("ksadk.session_id", session_id)
|
|
@@ -15,6 +15,8 @@ from ksadk.conversations.runtime_observability import (
|
|
|
15
15
|
_responses_usage_payload,
|
|
16
16
|
_usage_from_metadata,
|
|
17
17
|
)
|
|
18
|
+
from ksadk.runtime.skill_eval_result import skill_eval_response_fields
|
|
19
|
+
from ksadk.runtime.timing import normalize_timing
|
|
18
20
|
from ksadk.sessions import SessionEvent
|
|
19
21
|
|
|
20
22
|
|
|
@@ -131,6 +133,8 @@ def build_responses_payload(
|
|
|
131
133
|
status: str = "completed",
|
|
132
134
|
metadata: Mapping[str, Any] | None = None,
|
|
133
135
|
usage: Mapping[str, Any] | None = None,
|
|
136
|
+
timing: Mapping[str, Any] | None = None,
|
|
137
|
+
skill_eval_result: Mapping[str, Any] | None = None,
|
|
134
138
|
incomplete_details: Mapping[str, Any] | None = None,
|
|
135
139
|
error: Mapping[str, Any] | None = None,
|
|
136
140
|
output_items: Sequence[Mapping[str, Any]] | None = None,
|
|
@@ -174,7 +178,11 @@ def build_responses_payload(
|
|
|
174
178
|
"tools": [],
|
|
175
179
|
"output": output,
|
|
176
180
|
"output_text": output_text,
|
|
181
|
+
**skill_eval_response_fields({"skill_eval_result": skill_eval_result}),
|
|
177
182
|
"usage": usage_payload,
|
|
183
|
+
**(
|
|
184
|
+
{"timing": normalized_timing} if (normalized_timing := normalize_timing(timing)) else {}
|
|
185
|
+
),
|
|
178
186
|
"session_id": session_id,
|
|
179
187
|
}
|
|
180
188
|
|
|
@@ -19,7 +19,13 @@ from ksadk.conversations.runtime_constants import (
|
|
|
19
19
|
EVENT_SCAN_PAGE_SIZE,
|
|
20
20
|
)
|
|
21
21
|
from ksadk.conversations.runtime_observability import _extract_deferred_tool_names
|
|
22
|
+
from ksadk.runtime_context import TRUSTED_IDENTITY_METADATA_KEY, PlatformIdentityContext
|
|
22
23
|
from ksadk.sessions import Session, SessionEvent, resolve_session_service
|
|
24
|
+
from ksadk.sessions.invocation_identity import (
|
|
25
|
+
bind_or_validate_session_identity,
|
|
26
|
+
identity_native_user_id,
|
|
27
|
+
require_complete_platform_identity,
|
|
28
|
+
)
|
|
23
29
|
|
|
24
30
|
|
|
25
31
|
async def ensure_conversation_session(
|
|
@@ -28,20 +34,110 @@ async def ensure_conversation_session(
|
|
|
28
34
|
user_id: str,
|
|
29
35
|
session_id: Optional[str],
|
|
30
36
|
session_service_provider: Callable[[], Any] | None = None,
|
|
37
|
+
invocation_identity: Any = None,
|
|
38
|
+
allow_agent_alias: bool = False,
|
|
31
39
|
) -> Session:
|
|
32
|
-
"""
|
|
40
|
+
"""确保会话存在,并在读取历史前校验可信业务 owner。"""
|
|
33
41
|
service = (session_service_provider or resolve_session_service)()
|
|
42
|
+
identity = require_complete_platform_identity(invocation_identity)
|
|
34
43
|
if session_id:
|
|
35
|
-
|
|
44
|
+
# Ownership is decided from metadata/state before any transcript read.
|
|
45
|
+
existing = await service.get_session_metadata(session_id)
|
|
36
46
|
if existing:
|
|
37
|
-
if existing.agent_id != agent_id
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
47
|
+
if existing.agent_id != agent_id:
|
|
48
|
+
if allow_agent_alias and not identity.is_empty:
|
|
49
|
+
# Hosted workers receive an internal instance alias while
|
|
50
|
+
# the control plane persists the public AgentId. The
|
|
51
|
+
# worker is already scoped to this session store; adopt
|
|
52
|
+
# the persisted owner before validating business identity.
|
|
53
|
+
agent_id = existing.agent_id
|
|
54
|
+
elif not identity.is_empty:
|
|
55
|
+
raise HTTPException(status_code=404, detail="Session not found")
|
|
56
|
+
else:
|
|
57
|
+
raise HTTPException(
|
|
58
|
+
status_code=409,
|
|
59
|
+
detail="Session id belongs to a different agent or user",
|
|
60
|
+
)
|
|
61
|
+
if existing.agent_id == agent_id:
|
|
62
|
+
return await bind_or_validate_session_identity(
|
|
63
|
+
service=service,
|
|
64
|
+
session=existing,
|
|
65
|
+
identity=identity,
|
|
66
|
+
requested_user_id=user_id,
|
|
41
67
|
)
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
68
|
+
native_user_id = identity_native_user_id(identity) or user_id
|
|
69
|
+
created = await service.create_session(agent_id, native_user_id, session_id=session_id)
|
|
70
|
+
if created.agent_id != agent_id:
|
|
71
|
+
raise HTTPException(status_code=404, detail="Session not found")
|
|
72
|
+
return await bind_or_validate_session_identity(
|
|
73
|
+
service=service,
|
|
74
|
+
session=created,
|
|
75
|
+
identity=identity,
|
|
76
|
+
requested_user_id=user_id,
|
|
77
|
+
)
|
|
78
|
+
native_user_id = identity_native_user_id(identity) or user_id
|
|
79
|
+
created = await service.create_session(agent_id, native_user_id)
|
|
80
|
+
return await bind_or_validate_session_identity(
|
|
81
|
+
service=service,
|
|
82
|
+
session=created,
|
|
83
|
+
identity=identity,
|
|
84
|
+
requested_user_id=user_id,
|
|
85
|
+
)
|
|
86
|
+
|
|
87
|
+
|
|
88
|
+
async def require_conversation_session(
|
|
89
|
+
*,
|
|
90
|
+
agent_id: str,
|
|
91
|
+
user_id: str,
|
|
92
|
+
session_id: str,
|
|
93
|
+
session_service_provider: Callable[[], Any] | None = None,
|
|
94
|
+
invocation_identity: Any = None,
|
|
95
|
+
) -> Session:
|
|
96
|
+
"""Authorize an existing session without creating state on a read/control path."""
|
|
97
|
+
|
|
98
|
+
service = (session_service_provider or resolve_session_service)()
|
|
99
|
+
identity = require_complete_platform_identity(invocation_identity)
|
|
100
|
+
existing = await service.get_session_metadata(session_id)
|
|
101
|
+
if existing is None:
|
|
102
|
+
raise HTTPException(status_code=404, detail="Session not found")
|
|
103
|
+
if existing.agent_id != agent_id:
|
|
104
|
+
if not identity.is_empty:
|
|
105
|
+
raise HTTPException(status_code=404, detail="Session not found")
|
|
106
|
+
raise HTTPException(
|
|
107
|
+
status_code=409,
|
|
108
|
+
detail="Session id belongs to a different agent or user",
|
|
109
|
+
)
|
|
110
|
+
return await bind_or_validate_session_identity(
|
|
111
|
+
service=service,
|
|
112
|
+
session=existing,
|
|
113
|
+
identity=identity,
|
|
114
|
+
requested_user_id=user_id,
|
|
115
|
+
)
|
|
116
|
+
|
|
117
|
+
|
|
118
|
+
async def prepare_stream_identity_session(
|
|
119
|
+
*,
|
|
120
|
+
agent_id: str,
|
|
121
|
+
user_id: str,
|
|
122
|
+
session_id: str | None,
|
|
123
|
+
request_metadata: Mapping[str, Any] | None,
|
|
124
|
+
session_service_provider: Callable[[], Any] | None = None,
|
|
125
|
+
) -> tuple[str, str | None, PlatformIdentityContext, dict[str, Any]]:
|
|
126
|
+
"""Authorize a stream before preview reads and hide its private identity carrier."""
|
|
127
|
+
|
|
128
|
+
public_metadata = dict(request_metadata or {})
|
|
129
|
+
identity_payload = public_metadata.pop(TRUSTED_IDENTITY_METADATA_KEY, None)
|
|
130
|
+
identity = PlatformIdentityContext.from_payload(identity_payload)
|
|
131
|
+
if not identity_payload:
|
|
132
|
+
return user_id, session_id, identity, public_metadata
|
|
133
|
+
session = await ensure_conversation_session(
|
|
134
|
+
agent_id=agent_id,
|
|
135
|
+
user_id=user_id,
|
|
136
|
+
session_id=session_id,
|
|
137
|
+
session_service_provider=session_service_provider,
|
|
138
|
+
invocation_identity=identity_payload,
|
|
139
|
+
)
|
|
140
|
+
return session.user_id, session.id, identity, public_metadata
|
|
45
141
|
|
|
46
142
|
|
|
47
143
|
async def append_conversation_event(
|
|
@@ -73,6 +73,8 @@ from ksadk.conversations.runtime_resume import (
|
|
|
73
73
|
)
|
|
74
74
|
from ksadk.ids import new_run_id
|
|
75
75
|
from ksadk.model_policy import model_policy_options_for_model
|
|
76
|
+
from ksadk.runtime_context import TRUSTED_IDENTITY_METADATA_KEY, PlatformIdentityContext
|
|
77
|
+
from ksadk.session_context import split_session_context
|
|
76
78
|
from ksadk.sessions import SessionEvent, resolve_session_service
|
|
77
79
|
|
|
78
80
|
logger = logging.getLogger(__name__)
|
|
@@ -122,25 +124,25 @@ async def build_run_input(
|
|
|
122
124
|
caller_run_trigger = trigger_from_resume_input(resume_input)
|
|
123
125
|
provider = session_service_provider or resolve_session_service
|
|
124
126
|
service = provider()
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
if existing_session and existing_session.user_id:
|
|
129
|
-
resolved_user_id = existing_session.user_id
|
|
127
|
+
private_request_metadata = dict(request_metadata or {})
|
|
128
|
+
identity_payload = private_request_metadata.pop(TRUSTED_IDENTITY_METADATA_KEY, None)
|
|
129
|
+
invocation_identity = PlatformIdentityContext.from_payload(identity_payload)
|
|
130
130
|
|
|
131
131
|
session = await ensure_conversation_session(
|
|
132
132
|
agent_id=agent_id,
|
|
133
|
-
user_id=
|
|
133
|
+
user_id=user_id,
|
|
134
134
|
session_id=session_id,
|
|
135
135
|
session_service_provider=provider,
|
|
136
|
+
invocation_identity=invocation_identity,
|
|
136
137
|
)
|
|
138
|
+
resolved_user_id = session.user_id
|
|
137
139
|
resolved_session_id = session.id
|
|
138
140
|
resolved_invocation_id = str(invocation_id or new_run_id(resolved_session_id))
|
|
139
141
|
resolved_model_metadata = await _resolve_runtime_model_metadata(
|
|
140
142
|
model,
|
|
141
143
|
model_metadata=model_metadata,
|
|
142
144
|
)
|
|
143
|
-
session_context, normalized_request_metadata = split_session_context(
|
|
145
|
+
session_context, normalized_request_metadata = split_session_context(private_request_metadata)
|
|
144
146
|
normalized_custom_metadata = dict(custom_metadata or {})
|
|
145
147
|
policy_model = model or os.getenv("OPENAI_MODEL_NAME") or os.getenv("MODEL_NAME")
|
|
146
148
|
normalized_model_options = {
|
|
@@ -205,6 +207,8 @@ async def build_run_input(
|
|
|
205
207
|
session_context=session_context.to_payload(),
|
|
206
208
|
session_id=resolved_session_id,
|
|
207
209
|
invocation_id=resolved_invocation_id,
|
|
210
|
+
user_id=resolved_user_id,
|
|
211
|
+
agent_id=agent_id,
|
|
208
212
|
user_input="",
|
|
209
213
|
user_display_input="",
|
|
210
214
|
history=history,
|
|
@@ -323,6 +327,8 @@ async def build_run_input(
|
|
|
323
327
|
session_context=session_context.to_payload(),
|
|
324
328
|
session_id=resolved_session_id,
|
|
325
329
|
invocation_id=resolved_invocation_id,
|
|
330
|
+
user_id=resolved_user_id,
|
|
331
|
+
agent_id=agent_id,
|
|
326
332
|
user_input=resume_text,
|
|
327
333
|
user_display_input=resume_text,
|
|
328
334
|
history=history,
|