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
|
@@ -26,6 +26,7 @@ from ksadk.conversations.runtime_observability import (
|
|
|
26
26
|
_set_conversation_output_attributes,
|
|
27
27
|
_set_conversation_span_attributes,
|
|
28
28
|
_set_conversation_usage_attributes,
|
|
29
|
+
_set_skill_eval_result_attributes,
|
|
29
30
|
)
|
|
30
31
|
from ksadk.events.canonical import (
|
|
31
32
|
ApprovalRequest,
|
|
@@ -37,6 +38,7 @@ from ksadk.events.canonical import (
|
|
|
37
38
|
ItemCompleted,
|
|
38
39
|
ItemStarted,
|
|
39
40
|
ItemUpdated,
|
|
41
|
+
RunCompleted,
|
|
40
42
|
RunFailed,
|
|
41
43
|
RunProgress,
|
|
42
44
|
RuntimeEvent,
|
|
@@ -47,6 +49,9 @@ from ksadk.events.content import DataContent, TextContent, ToolCallContent, Tool
|
|
|
47
49
|
from ksadk.events.identity import stable_event_id, stable_item_id, stable_scope_id
|
|
48
50
|
from ksadk.runtime.adapter import RunHandle
|
|
49
51
|
from ksadk.runtime.preprocessing import PreparedRuntimeStart
|
|
52
|
+
from ksadk.runtime.skill_eval_result import extract_skill_eval_result
|
|
53
|
+
from ksadk.runtime.timing import extract_timing
|
|
54
|
+
from ksadk.runtime.usage import canonical_usage_payload
|
|
50
55
|
from ksadk.runtime_context import platform_invocation_scope
|
|
51
56
|
from ksadk.tools.gateway import approval_interrupt_info_from_result
|
|
52
57
|
|
|
@@ -283,7 +288,9 @@ class _RunnerStreamMappingMixin:
|
|
|
283
288
|
# _chunk_to_events 的 tool_result 分支,canonical 快速路径
|
|
284
289
|
# (stream_canonical_events)不覆盖该语义。
|
|
285
290
|
if getattr(
|
|
286
|
-
self._runner,
|
|
291
|
+
self._runner,
|
|
292
|
+
"supports_gateway_approval_semantic_resume",
|
|
293
|
+
False, # type: ignore[attr-defined]
|
|
287
294
|
):
|
|
288
295
|
canonical_stream = None
|
|
289
296
|
stream_result = (
|
|
@@ -357,6 +364,10 @@ class _RunnerStreamMappingMixin:
|
|
|
357
364
|
if isinstance(chunk, EventEnvelope):
|
|
358
365
|
# canonical 事件(来自 stream_canonical_events):直接转发,
|
|
359
366
|
# 追踪 output/usage 供 span 属性。
|
|
367
|
+
if isinstance(chunk, RunCompleted):
|
|
368
|
+
evidence = extract_skill_eval_result(chunk.source.metadata.get("metrics"))
|
|
369
|
+
if evidence:
|
|
370
|
+
_set_skill_eval_result_attributes(span, evidence)
|
|
360
371
|
if isinstance(chunk, ItemCompleted) and chunk.item_kind == "message":
|
|
361
372
|
accumulated_output = "".join(
|
|
362
373
|
part.text
|
|
@@ -376,6 +387,11 @@ class _RunnerStreamMappingMixin:
|
|
|
376
387
|
if isinstance(chunk, dict):
|
|
377
388
|
chunk_type = str(chunk.get("type") or "")
|
|
378
389
|
if chunk_type == "final" and run is not None:
|
|
390
|
+
if evidence := extract_skill_eval_result(chunk):
|
|
391
|
+
run.completion_metrics["skill_eval_result"] = evidence
|
|
392
|
+
_set_skill_eval_result_attributes(span, evidence)
|
|
393
|
+
if timing := extract_timing(chunk):
|
|
394
|
+
run.completion_metrics["timing"] = timing
|
|
379
395
|
for source_key, target_key in (
|
|
380
396
|
("duration_ms", "duration_ms"),
|
|
381
397
|
("started_at", "started_at"),
|
|
@@ -786,7 +802,11 @@ class _RunnerStreamMappingMixin:
|
|
|
786
802
|
# ---- usage ----
|
|
787
803
|
if chunk_type == "usage":
|
|
788
804
|
raw_usage = chunk.get("usage")
|
|
789
|
-
usage_dict
|
|
805
|
+
usage_dict = (
|
|
806
|
+
canonical_usage_payload(raw_usage, runtime_type=framework)
|
|
807
|
+
if isinstance(raw_usage, Mapping)
|
|
808
|
+
else {}
|
|
809
|
+
)
|
|
790
810
|
item_id = stable_item_id(framework, run_id, "$run")
|
|
791
811
|
return [
|
|
792
812
|
UsageReported(
|
|
@@ -873,6 +893,36 @@ class _RunnerStreamMappingMixin:
|
|
|
873
893
|
events.extend(
|
|
874
894
|
ensure_started(item_id=item_id, item_kind="message", phase="final_answer")
|
|
875
895
|
)
|
|
896
|
+
# The dict-chunk path is still required for gateway approval flows.
|
|
897
|
+
# It must project runner-final usage into the canonical stream too;
|
|
898
|
+
# otherwise non-streaming Runs aggregate zero even when the runner
|
|
899
|
+
# returned provider token accounting.
|
|
900
|
+
raw_usage = chunk.get("usage")
|
|
901
|
+
if isinstance(raw_usage, Mapping):
|
|
902
|
+
usage_dict = canonical_usage_payload(
|
|
903
|
+
raw_usage,
|
|
904
|
+
runtime_type=framework,
|
|
905
|
+
)
|
|
906
|
+
input_tokens = usage_dict["input_tokens"]
|
|
907
|
+
output_tokens = usage_dict["output_tokens"]
|
|
908
|
+
total_tokens = usage_dict["total_tokens"]
|
|
909
|
+
if input_tokens or output_tokens or total_tokens:
|
|
910
|
+
events.append(
|
|
911
|
+
UsageReported(
|
|
912
|
+
**self._canonical_kwargs( # type: ignore[attr-defined]
|
|
913
|
+
handle,
|
|
914
|
+
scope_id=scope_id,
|
|
915
|
+
item_id=stable_item_id(framework, run_id, "$run"),
|
|
916
|
+
event_type="usage.reported",
|
|
917
|
+
part_id="usage",
|
|
918
|
+
),
|
|
919
|
+
input_tokens=input_tokens,
|
|
920
|
+
output_tokens=output_tokens,
|
|
921
|
+
total_tokens=total_tokens,
|
|
922
|
+
cached_tokens=usage_dict["cached_tokens"],
|
|
923
|
+
reasoning_tokens=usage_dict["reasoning_tokens"],
|
|
924
|
+
)
|
|
925
|
+
)
|
|
876
926
|
events.append(
|
|
877
927
|
ItemCompleted(
|
|
878
928
|
**self._canonical_kwargs( # type: ignore[attr-defined]
|
|
@@ -48,6 +48,8 @@ from ksadk.runtime.adapter import (
|
|
|
48
48
|
from ksadk.runtime.executor import RuntimeExecutor, RuntimeStartPreparation
|
|
49
49
|
from ksadk.runtime.factory import apply_runtime_start_request_defaults
|
|
50
50
|
from ksadk.runtime.launch import RuntimeLaunchContext
|
|
51
|
+
from ksadk.runtime.skill_eval_result import skill_eval_response_fields
|
|
52
|
+
from ksadk.runtime.timing import normalize_timing
|
|
51
53
|
from ksadk.sessions import resolve_session_service
|
|
52
54
|
|
|
53
55
|
_TERMINAL_EVENTS = frozenset(
|
|
@@ -647,20 +649,31 @@ async def iter_runtime_conversation_semantic_events(
|
|
|
647
649
|
"session_id": execution_context.get("session_id", ""),
|
|
648
650
|
}
|
|
649
651
|
elif isinstance(event, RunFailed):
|
|
652
|
+
metrics = event.source.metadata.get("metrics")
|
|
653
|
+
timing = normalize_timing(metrics.get("timing")) if isinstance(metrics, Mapping) else {}
|
|
650
654
|
yield {
|
|
651
655
|
"type": "error",
|
|
652
656
|
"message": event.error.message or "Agent 运行失败",
|
|
653
657
|
"session_id": execution_context.get("session_id", ""),
|
|
654
658
|
"usage": projection.usage.model_dump(),
|
|
659
|
+
**({"timing": timing} if timing else {}),
|
|
660
|
+
**skill_eval_response_fields(metrics),
|
|
655
661
|
}
|
|
656
662
|
elif isinstance(event, RunCanceled):
|
|
663
|
+
metrics = event.source.metadata.get("metrics")
|
|
664
|
+
timing = normalize_timing(metrics.get("timing")) if isinstance(metrics, Mapping) else {}
|
|
657
665
|
yield {
|
|
658
666
|
"type": "cancelled",
|
|
659
667
|
"session_id": execution_context.get("session_id", ""),
|
|
660
668
|
"usage": projection.usage.model_dump(),
|
|
669
|
+
**({"timing": timing} if timing else {}),
|
|
670
|
+
**skill_eval_response_fields(metrics),
|
|
661
671
|
}
|
|
662
672
|
elif isinstance(event, RunCompleted):
|
|
663
673
|
completion_metadata = dict(event.source.metadata)
|
|
674
|
+
metrics = completion_metadata.get("metrics")
|
|
675
|
+
metrics = metrics if isinstance(metrics, Mapping) else {}
|
|
676
|
+
timing = normalize_timing(metrics.get("timing"))
|
|
664
677
|
request_metadata = kwargs.get("request_metadata")
|
|
665
678
|
requested_agentengine = (
|
|
666
679
|
request_metadata.get("agentengine")
|
|
@@ -674,7 +687,10 @@ async def iter_runtime_conversation_semantic_events(
|
|
|
674
687
|
if key != "session_context"
|
|
675
688
|
}
|
|
676
689
|
completion_metadata["runtime"] = {
|
|
677
|
-
"duration_ms":
|
|
690
|
+
"duration_ms": timing.get(
|
|
691
|
+
"agent_duration_ms",
|
|
692
|
+
metrics.get("duration_ms", event.source.metadata.get("duration_ms")),
|
|
693
|
+
),
|
|
678
694
|
"runtime_type": kwargs["launch_context"].runtime_type,
|
|
679
695
|
}
|
|
680
696
|
yield {
|
|
@@ -683,6 +699,8 @@ async def iter_runtime_conversation_semantic_events(
|
|
|
683
699
|
"session_id": execution_context.get("session_id", ""),
|
|
684
700
|
"usage": projection.usage.model_dump(),
|
|
685
701
|
"metadata": completion_metadata,
|
|
702
|
+
**({"timing": timing} if timing else {}),
|
|
703
|
+
**skill_eval_response_fields(metrics),
|
|
686
704
|
}
|
|
687
705
|
|
|
688
706
|
|
|
@@ -728,6 +746,8 @@ async def invoke_runtime_conversation_once(
|
|
|
728
746
|
usage: dict[str, Any] = {}
|
|
729
747
|
metadata: dict[str, Any] = {}
|
|
730
748
|
completed = False
|
|
749
|
+
timing: dict[str, Any] = {}
|
|
750
|
+
result_fields: dict[str, Any] = {}
|
|
731
751
|
async for event in iter_runtime_conversation_semantic_events(**kwargs):
|
|
732
752
|
event_type = event.get("type")
|
|
733
753
|
if event_type == "started":
|
|
@@ -741,6 +761,8 @@ async def invoke_runtime_conversation_once(
|
|
|
741
761
|
output_text = str(event.get("output_text") or output_text)
|
|
742
762
|
usage = dict(event.get("usage") or {})
|
|
743
763
|
metadata = dict(event.get("metadata") or {})
|
|
764
|
+
timing = normalize_timing(event.get("timing"))
|
|
765
|
+
result_fields = skill_eval_response_fields(event)
|
|
744
766
|
elif event_type == "error":
|
|
745
767
|
raise RuntimeError(str(event.get("message") or "Agent 运行失败"))
|
|
746
768
|
elif event_type == "cancelled":
|
|
@@ -751,8 +773,10 @@ async def invoke_runtime_conversation_once(
|
|
|
751
773
|
raise RuntimeError("runtime did not produce a completed result")
|
|
752
774
|
return session_id, {
|
|
753
775
|
"output_text": output_text,
|
|
776
|
+
**result_fields,
|
|
754
777
|
"usage": usage,
|
|
755
778
|
"metadata": metadata,
|
|
779
|
+
**({"timing": timing} if timing else {}),
|
|
756
780
|
}
|
|
757
781
|
|
|
758
782
|
|
ksadk/runtime/executor.py
CHANGED
|
@@ -246,6 +246,8 @@ class RuntimeExecutor:
|
|
|
246
246
|
self,
|
|
247
247
|
context: RuntimeLaunchContext,
|
|
248
248
|
handle: RunHandle,
|
|
249
|
+
*,
|
|
250
|
+
preparation: RuntimeStartPreparation | None = None,
|
|
249
251
|
) -> RunHandle:
|
|
250
252
|
expected_type = _normalize_runtime_type(context.runtime_type)
|
|
251
253
|
if _normalize_runtime_type(handle.runtime_type) != expected_type:
|
|
@@ -253,7 +255,13 @@ class RuntimeExecutor:
|
|
|
253
255
|
if self.is_attached(handle):
|
|
254
256
|
return handle
|
|
255
257
|
|
|
256
|
-
|
|
258
|
+
if preparation is not None:
|
|
259
|
+
if preparation.context != context or preparation.consumed:
|
|
260
|
+
raise ValueError("attach preparation must be unused and match launch context")
|
|
261
|
+
preparation.consumed = True
|
|
262
|
+
adapter = preparation.adapter
|
|
263
|
+
else:
|
|
264
|
+
adapter = self._registry.create(context)
|
|
257
265
|
restored = await adapter.attach(handle)
|
|
258
266
|
if restored != handle:
|
|
259
267
|
with suppress(Exception):
|
ksadk/runtime/factory.py
CHANGED
|
@@ -37,6 +37,40 @@ from ksadk.runtime.framework_adapters import ADKRuntimeAdapter, LangGraphRuntime
|
|
|
37
37
|
from ksadk.runtime.launch import RuntimeLaunchContext
|
|
38
38
|
|
|
39
39
|
|
|
40
|
+
def _create_harness(context: RuntimeLaunchContext) -> RuntimeAdapter:
|
|
41
|
+
"""Create the managed KsADK Harness adapter from an immutable launch manifest."""
|
|
42
|
+
|
|
43
|
+
import re
|
|
44
|
+
|
|
45
|
+
from ksadk.harness.managed_runtime import ManagedHarnessRuntimeAdapter
|
|
46
|
+
from ksadk.harness.reasoner import LiteLLMHarnessReasoner
|
|
47
|
+
from ksadk.harness.spec import HarnessSpec, ModelBinding, PromptSpec
|
|
48
|
+
|
|
49
|
+
config = dict(context.config)
|
|
50
|
+
prompt = str(config.get("prompt") or config.get("base_instructions") or "").strip()
|
|
51
|
+
model = str(config.get("model") or "").strip()
|
|
52
|
+
if not prompt:
|
|
53
|
+
raise ValueError("harness runtime requires prompt/base_instructions")
|
|
54
|
+
if not model:
|
|
55
|
+
raise ValueError("harness runtime requires model")
|
|
56
|
+
model_ref_name = re.sub(r"[^A-Za-z0-9._-]+", "-", model).strip("-") or "studio-model"
|
|
57
|
+
agent_ref_name = re.sub(
|
|
58
|
+
r"[^A-Za-z0-9._-]+", "-", str(config.get("agent_id") or "studio-agent")
|
|
59
|
+
).strip("-") or "studio-agent"
|
|
60
|
+
spec = HarnessSpec(
|
|
61
|
+
agent_revision_ref=f"agent-revision://{agent_ref_name}@1",
|
|
62
|
+
model=ModelBinding(profile_ref=f"model-profile://{model_ref_name}@1"),
|
|
63
|
+
prompt=PromptSpec(instructions=prompt),
|
|
64
|
+
)
|
|
65
|
+
return ManagedHarnessRuntimeAdapter(
|
|
66
|
+
spec,
|
|
67
|
+
reasoner=LiteLLMHarnessReasoner(
|
|
68
|
+
base_url=str(config.get("base_url") or ""),
|
|
69
|
+
),
|
|
70
|
+
workspace_root=context.project_dir,
|
|
71
|
+
)
|
|
72
|
+
|
|
73
|
+
|
|
40
74
|
def kernel_start_request_defaults(context: RuntimeLaunchContext) -> dict[str, Any]:
|
|
41
75
|
"""Project an admitted launch manifest into immutable Kernel turn defaults.
|
|
42
76
|
|
|
@@ -149,10 +183,11 @@ def _create_langgraph(context: RuntimeLaunchContext) -> RuntimeAdapter:
|
|
|
149
183
|
|
|
150
184
|
|
|
151
185
|
def build_default_runtime_registry() -> RuntimeRegistry:
|
|
152
|
-
"""注册内置 Codex、ADK 和 LangGraph Runtime Factory。"""
|
|
186
|
+
"""注册内置 KsADK Harness、Codex、ADK 和 LangGraph Runtime Factory。"""
|
|
153
187
|
|
|
154
188
|
registry = RuntimeRegistry()
|
|
155
189
|
registry.register("codex", _create_codex)
|
|
190
|
+
registry.register("harness", _create_harness)
|
|
156
191
|
registry.register("adk", _create_adk)
|
|
157
192
|
registry.register("langgraph", _create_langgraph)
|
|
158
193
|
return registry
|
ksadk/runtime/preprocessing.py
CHANGED
|
@@ -18,7 +18,11 @@ from ksadk.runtime.adapter import (
|
|
|
18
18
|
CONVERSATION_PREPROCESSING_METADATA_KEY,
|
|
19
19
|
StartRequest,
|
|
20
20
|
)
|
|
21
|
-
from ksadk.runtime_context import
|
|
21
|
+
from ksadk.runtime_context import (
|
|
22
|
+
TRUSTED_IDENTITY_METADATA_KEY,
|
|
23
|
+
PlatformIdentityContext,
|
|
24
|
+
PlatformInvocationContext,
|
|
25
|
+
)
|
|
22
26
|
from ksadk.session_context import split_session_context
|
|
23
27
|
|
|
24
28
|
|
|
@@ -62,6 +66,7 @@ async def prepare_runtime_start(request: StartRequest, runner: Any) -> PreparedR
|
|
|
62
66
|
if key not in {CONVERSATION_PREPROCESSING_METADATA_KEY, "session_context"}
|
|
63
67
|
}
|
|
64
68
|
request_metadata = {**outer_metadata, **conversation.request_metadata}
|
|
69
|
+
identity_payload: Any = request_metadata.get(TRUSTED_IDENTITY_METADATA_KEY)
|
|
65
70
|
messages = conversation.messages or _fallback_messages(request.input)
|
|
66
71
|
raw_prepared = (conversation.model_extra or {}).get("prepared_turn")
|
|
67
72
|
if isinstance(raw_prepared, Mapping):
|
|
@@ -70,6 +75,7 @@ async def prepare_runtime_start(request: StartRequest, runner: Any) -> PreparedR
|
|
|
70
75
|
**prepared.request_metadata,
|
|
71
76
|
**request_metadata,
|
|
72
77
|
}
|
|
78
|
+
identity_payload = merged_metadata.pop(TRUSTED_IDENTITY_METADATA_KEY, identity_payload)
|
|
73
79
|
snapshot, prepared.request_metadata = split_session_context(merged_metadata)
|
|
74
80
|
controls = merged_metadata.get("agentengine")
|
|
75
81
|
if isinstance(controls, Mapping) and "session_context" in controls:
|
|
@@ -105,10 +111,11 @@ async def prepare_runtime_start(request: StartRequest, runner: Any) -> PreparedR
|
|
|
105
111
|
flush_before_compaction=bool(request.config.get("flush_before_compaction", True)),
|
|
106
112
|
provider_ref=str(request.config.get("provider_ref") or "local-default"),
|
|
107
113
|
)
|
|
114
|
+
request_metadata.pop(TRUSTED_IDENTITY_METADATA_KEY, None)
|
|
108
115
|
_inject_runner_deferred_tools_for_request(runner, prepared)
|
|
109
116
|
ambient_contexts = _build_runner_ambient_contexts(
|
|
110
117
|
runner=runner,
|
|
111
|
-
user_id=request.user_id,
|
|
118
|
+
user_id=prepared.user_id or request.user_id,
|
|
112
119
|
user_input=prepared.user_input,
|
|
113
120
|
)
|
|
114
121
|
# Studio/平台控制面可以按 AgentVersion 的 providerRef 提前完成召回;它比仅依赖
|
|
@@ -124,7 +131,7 @@ async def prepare_runtime_start(request: StartRequest, runner: Any) -> PreparedR
|
|
|
124
131
|
runtime_context = PlatformInvocationContext(
|
|
125
132
|
session=SessionContext.from_payload(prepared.session_context),
|
|
126
133
|
agent_id=str(request.agent_id or "agent"),
|
|
127
|
-
user_id=request.user_id,
|
|
134
|
+
user_id=prepared.user_id or request.user_id,
|
|
128
135
|
account_id=str(conversation.account_id or ""),
|
|
129
136
|
session_id=prepared.session_id,
|
|
130
137
|
history=list(prepared.history),
|
|
@@ -143,6 +150,7 @@ async def prepare_runtime_start(request: StartRequest, runner: Any) -> PreparedR
|
|
|
143
150
|
kb_context=ambient_contexts.get("kb_context"),
|
|
144
151
|
memory_context=ambient_contexts.get("memory_context"),
|
|
145
152
|
tool_approval_mode=str(prepared.request_metadata.get("tool_approval_mode") or ""),
|
|
153
|
+
identity=PlatformIdentityContext.from_payload(identity_payload),
|
|
146
154
|
)
|
|
147
155
|
canonical_payload = _build_runner_request_payload(
|
|
148
156
|
prepared=prepared,
|
ksadk/runtime/runner_adapter.py
CHANGED
|
@@ -54,7 +54,11 @@ from ksadk.runtime.adapter import (
|
|
|
54
54
|
)
|
|
55
55
|
from ksadk.runtime.preprocessing import PreparedRuntimeStart, prepare_runtime_start
|
|
56
56
|
from ksadk.runtime.runner_loading import ensure_runner_loaded
|
|
57
|
-
from ksadk.
|
|
57
|
+
from ksadk.runtime.timing import normalize_timing
|
|
58
|
+
from ksadk.runtime_context import (
|
|
59
|
+
TRUSTED_IDENTITY_METADATA_KEY,
|
|
60
|
+
session_invocation_context,
|
|
61
|
+
)
|
|
58
62
|
|
|
59
63
|
logger = logging.getLogger(__name__)
|
|
60
64
|
|
|
@@ -282,13 +286,15 @@ class RunnerRuntimeAdapter(_RunnerStreamMappingMixin, RuntimeAdapter):
|
|
|
282
286
|
# 暂存 start 输入,供 stream() 使用。
|
|
283
287
|
self._active_runs[run_id].__dict__["_start_request"] = request
|
|
284
288
|
snapshot = request.metadata.get("session_context")
|
|
285
|
-
|
|
289
|
+
invocation_identity = request.metadata.get(TRUSTED_IDENTITY_METADATA_KEY)
|
|
290
|
+
if snapshot is not None or invocation_identity is not None:
|
|
286
291
|
self._active_runs[run_id].__dict__["_tag_context"] = session_invocation_context(
|
|
287
292
|
snapshot,
|
|
288
293
|
agent_id=request.agent_id or "",
|
|
289
294
|
user_id=request.user_id,
|
|
290
295
|
session_id=request.session_id,
|
|
291
296
|
runner_type=self._runtime_type,
|
|
297
|
+
identity=invocation_identity,
|
|
292
298
|
)
|
|
293
299
|
if prepared_start is not None:
|
|
294
300
|
self._active_runs[run_id].__dict__["_prepared_start"] = prepared_start
|
|
@@ -322,8 +328,7 @@ class RunnerRuntimeAdapter(_RunnerStreamMappingMixin, RuntimeAdapter):
|
|
|
322
328
|
attach = getattr(self._runner, "attach_runtime_handle", None)
|
|
323
329
|
if not callable(attach):
|
|
324
330
|
raise UnsupportedControlError(
|
|
325
|
-
f"runner for {self._runtime_type!r} has no durable "
|
|
326
|
-
"attach_runtime_handle capability"
|
|
331
|
+
f"runner for {self._runtime_type!r} has no durable attach_runtime_handle capability"
|
|
327
332
|
)
|
|
328
333
|
ensure_runner_loaded(self._runner, runtime_type=self._runtime_type)
|
|
329
334
|
restored = attach(handle)
|
|
@@ -457,8 +462,7 @@ class RunnerRuntimeAdapter(_RunnerStreamMappingMixin, RuntimeAdapter):
|
|
|
457
462
|
checkpoint_id = str(handle.native_ref.get("checkpoint_id") or "").strip()
|
|
458
463
|
if not checkpoint_id:
|
|
459
464
|
raise UnsupportedControlError(
|
|
460
|
-
f"{self._runtime_type} runner has no native checkpoint for run "
|
|
461
|
-
f"{handle.run_id!r}"
|
|
465
|
+
f"{self._runtime_type} runner has no native checkpoint for run {handle.run_id!r}"
|
|
462
466
|
)
|
|
463
467
|
return CheckpointDescriptor(
|
|
464
468
|
checkpoint_id=checkpoint_id,
|
|
@@ -566,6 +570,14 @@ class RunnerRuntimeAdapter(_RunnerStreamMappingMixin, RuntimeAdapter):
|
|
|
566
570
|
|
|
567
571
|
request = run.__dict__.get("_start_request")
|
|
568
572
|
runner_input = self._build_runner_input(handle, request)
|
|
573
|
+
runner_started = time.perf_counter()
|
|
574
|
+
|
|
575
|
+
def record_timing() -> None:
|
|
576
|
+
timing = normalize_timing(run.completion_metrics.get("timing"))
|
|
577
|
+
timing["agent_duration_ms"] = round((time.perf_counter() - runner_started) * 1000, 3)
|
|
578
|
+
timing["phase_status"] = {**timing.get("phase_status", {}), "agent": "measured"}
|
|
579
|
+
run.completion_metrics["timing"] = timing
|
|
580
|
+
|
|
569
581
|
gen: Optional[AsyncIterator[RuntimeEvent]] = None
|
|
570
582
|
terminal_event_seen = False
|
|
571
583
|
approval_interrupted = False
|
|
@@ -573,6 +585,24 @@ class RunnerRuntimeAdapter(_RunnerStreamMappingMixin, RuntimeAdapter):
|
|
|
573
585
|
gen = self._map_runner_stream(event_handle, runner_input, active_run=run)
|
|
574
586
|
run.stream = gen
|
|
575
587
|
async for event in gen:
|
|
588
|
+
if event.event_type in {
|
|
589
|
+
"run.completed",
|
|
590
|
+
"run.failed",
|
|
591
|
+
"run.canceled",
|
|
592
|
+
"run.interrupted",
|
|
593
|
+
}:
|
|
594
|
+
source_metrics = event.source.metadata.get("metrics")
|
|
595
|
+
if isinstance(source_metrics, Mapping):
|
|
596
|
+
run.completion_metrics.update(source_metrics)
|
|
597
|
+
record_timing()
|
|
598
|
+
metrics = dict(run.completion_metrics)
|
|
599
|
+
event = event.model_copy(
|
|
600
|
+
update={
|
|
601
|
+
"source": event.source.model_copy(
|
|
602
|
+
update={"metadata": {**event.source.metadata, "metrics": metrics}}
|
|
603
|
+
)
|
|
604
|
+
}
|
|
605
|
+
)
|
|
576
606
|
yield event
|
|
577
607
|
if event.event_type == "interaction.requested":
|
|
578
608
|
approval_interrupted = True
|
|
@@ -595,6 +625,7 @@ class RunnerRuntimeAdapter(_RunnerStreamMappingMixin, RuntimeAdapter):
|
|
|
595
625
|
if event.event_type in {"run.failed", "run.canceled"}:
|
|
596
626
|
return
|
|
597
627
|
|
|
628
|
+
record_timing()
|
|
598
629
|
if run.interrupt_event.is_set() and not terminal_event_seen:
|
|
599
630
|
yield self._make_run_canceled(
|
|
600
631
|
event_handle, reason=CancelResult.INTERRUPTED_ACTIVE_TURN.value
|
|
@@ -645,9 +676,7 @@ class RunnerRuntimeAdapter(_RunnerStreamMappingMixin, RuntimeAdapter):
|
|
|
645
676
|
{
|
|
646
677
|
"input": override.get("input"),
|
|
647
678
|
"session_id": handle.session_id,
|
|
648
|
-
"invocation_id": str(
|
|
649
|
-
merged.get("invocation_id") or handle.run_id
|
|
650
|
-
),
|
|
679
|
+
"invocation_id": str(merged.get("invocation_id") or handle.run_id),
|
|
651
680
|
"metadata": {
|
|
652
681
|
**(dict(base_metadata) if isinstance(base_metadata, Mapping) else {}),
|
|
653
682
|
**dict(override.get("metadata") or {}),
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
"""Opt-in Skill evaluation evidence, carried separately from assistant text."""
|
|
2
|
+
|
|
3
|
+
import json
|
|
4
|
+
import re
|
|
5
|
+
from collections.abc import Mapping
|
|
6
|
+
from typing import Any
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
def extract_skill_eval_result(value: Any) -> dict[str, Any]:
|
|
10
|
+
"""Read only an explicit state/result field; never parse model messages."""
|
|
11
|
+
result = value.get("skill_eval_result") if isinstance(value, Mapping) else None
|
|
12
|
+
if (
|
|
13
|
+
not isinstance(result, Mapping)
|
|
14
|
+
or result.get("schema_version") != "base_agent.skill_eval_result.v2"
|
|
15
|
+
):
|
|
16
|
+
return {}
|
|
17
|
+
try:
|
|
18
|
+
return json.loads(json.dumps(dict(result), ensure_ascii=False, allow_nan=False))
|
|
19
|
+
except (TypeError, ValueError, RecursionError):
|
|
20
|
+
return {}
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
def skill_eval_response_fields(value: Any) -> dict[str, Any]:
|
|
24
|
+
result = extract_skill_eval_result(value)
|
|
25
|
+
if not result:
|
|
26
|
+
return {}
|
|
27
|
+
fields: dict[str, Any] = {"skill_eval_result": result}
|
|
28
|
+
run = result.get("run")
|
|
29
|
+
trace_id = run.get("trace_id") if isinstance(run, Mapping) else None
|
|
30
|
+
if (
|
|
31
|
+
isinstance(trace_id, str)
|
|
32
|
+
and re.fullmatch(r"[0-9a-fA-F]{32}", trace_id)
|
|
33
|
+
and int(trace_id, 16)
|
|
34
|
+
):
|
|
35
|
+
fields["trace_id"] = trace_id.lower()
|
|
36
|
+
return fields
|
ksadk/runtime/timing.py
ADDED
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
"""Response timing contract. Durations use milliseconds, never model content."""
|
|
2
|
+
|
|
3
|
+
import math
|
|
4
|
+
from collections.abc import Mapping
|
|
5
|
+
from typing import Any
|
|
6
|
+
|
|
7
|
+
PHASES = ("agent", "selection", "answer", "skill_load", "skill_execution")
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
def normalize_timing(value: Any) -> dict[str, Any]:
|
|
11
|
+
if not isinstance(value, Mapping):
|
|
12
|
+
return {}
|
|
13
|
+
result: dict[str, Any] = {}
|
|
14
|
+
statuses: dict[str, str] = {}
|
|
15
|
+
raw_statuses = value.get("phase_status")
|
|
16
|
+
raw_statuses = raw_statuses if isinstance(raw_statuses, Mapping) else {}
|
|
17
|
+
for phase in PHASES:
|
|
18
|
+
key = f"{phase}_duration_ms"
|
|
19
|
+
if key not in value:
|
|
20
|
+
continue
|
|
21
|
+
duration = value[key]
|
|
22
|
+
try:
|
|
23
|
+
valid = (
|
|
24
|
+
isinstance(duration, (int, float))
|
|
25
|
+
and not isinstance(duration, bool)
|
|
26
|
+
and math.isfinite(duration)
|
|
27
|
+
and duration >= 0
|
|
28
|
+
)
|
|
29
|
+
except OverflowError:
|
|
30
|
+
valid = False
|
|
31
|
+
result[key] = duration if valid else None
|
|
32
|
+
statuses[phase] = (
|
|
33
|
+
"measured"
|
|
34
|
+
if valid
|
|
35
|
+
else "skipped"
|
|
36
|
+
if duration is None and raw_statuses.get(phase) == "skipped"
|
|
37
|
+
else "unavailable"
|
|
38
|
+
)
|
|
39
|
+
if result:
|
|
40
|
+
result["phase_status"] = statuses
|
|
41
|
+
return result
|
|
42
|
+
|
|
43
|
+
|
|
44
|
+
def extract_timing(result: Any) -> dict[str, Any]:
|
|
45
|
+
"""Only opt-in graph/runner state fields are eligible; don't inspect messages."""
|
|
46
|
+
return normalize_timing(result.get("timing")) if isinstance(result, Mapping) else {}
|
ksadk/runtime/usage.py
CHANGED
|
@@ -5,29 +5,60 @@ from __future__ import annotations
|
|
|
5
5
|
from typing import Any, Mapping
|
|
6
6
|
|
|
7
7
|
|
|
8
|
-
def
|
|
9
|
-
|
|
10
|
-
|
|
8
|
+
def _usage_int(value: Any) -> int:
|
|
9
|
+
try:
|
|
10
|
+
return int(value or 0)
|
|
11
|
+
except (TypeError, ValueError):
|
|
12
|
+
return 0
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
def _details(usage: Mapping[str, Any], *keys: str) -> Mapping[str, Any]:
|
|
16
|
+
for key in keys:
|
|
17
|
+
value = usage.get(key)
|
|
18
|
+
if isinstance(value, Mapping):
|
|
19
|
+
return value
|
|
20
|
+
return {}
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
def _first_present_int(*values: Any) -> int:
|
|
24
|
+
for value in values:
|
|
25
|
+
if value is not None:
|
|
26
|
+
return _usage_int(value)
|
|
27
|
+
return 0
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
def canonical_usage_payload(usage: Mapping[str, Any], *, runtime_type: str) -> dict[str, Any]:
|
|
11
31
|
"""Normalize provider usage, including nested cache/reasoning details."""
|
|
12
|
-
input_details =
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
32
|
+
input_details = _details(
|
|
33
|
+
usage,
|
|
34
|
+
"input_token_details",
|
|
35
|
+
"input_tokens_details",
|
|
36
|
+
"prompt_tokens_details",
|
|
37
|
+
)
|
|
38
|
+
output_details = _details(
|
|
39
|
+
usage,
|
|
40
|
+
"output_token_details",
|
|
41
|
+
"output_tokens_details",
|
|
42
|
+
"completion_tokens_details",
|
|
43
|
+
)
|
|
44
|
+
cached = _first_present_int(
|
|
45
|
+
input_details.get("cached_tokens"),
|
|
46
|
+
input_details.get("cached"),
|
|
47
|
+
input_details.get("cache_read"),
|
|
48
|
+
usage.get("cached_tokens"),
|
|
18
49
|
)
|
|
19
|
-
reasoning = (
|
|
20
|
-
output_details.get("
|
|
21
|
-
|
|
22
|
-
|
|
50
|
+
reasoning = _first_present_int(
|
|
51
|
+
output_details.get("reasoning_tokens"),
|
|
52
|
+
output_details.get("reasoning"),
|
|
53
|
+
usage.get("reasoning_tokens"),
|
|
23
54
|
)
|
|
24
|
-
input_tokens =
|
|
25
|
-
output_tokens =
|
|
55
|
+
input_tokens = _first_present_int(usage.get("input_tokens"), usage.get("prompt_tokens"))
|
|
56
|
+
output_tokens = _first_present_int(usage.get("output_tokens"), usage.get("completion_tokens"))
|
|
26
57
|
return {
|
|
27
58
|
"input_tokens": input_tokens,
|
|
28
59
|
"output_tokens": output_tokens,
|
|
29
|
-
"total_tokens":
|
|
30
|
-
"cached_tokens":
|
|
31
|
-
"reasoning_tokens":
|
|
60
|
+
"total_tokens": _first_present_int(usage.get("total_tokens"), input_tokens + output_tokens),
|
|
61
|
+
"cached_tokens": cached,
|
|
62
|
+
"reasoning_tokens": reasoning,
|
|
32
63
|
"source": str(usage.get("source") or runtime_type),
|
|
33
64
|
}
|