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
|
@@ -10,6 +10,7 @@ from ksadk.conversations.run_kinds import (
|
|
|
10
10
|
trigger_from_resume_input,
|
|
11
11
|
validate_run_mode,
|
|
12
12
|
)
|
|
13
|
+
from ksadk.conversations.runtime_baseline import record_baseline_turn
|
|
13
14
|
from ksadk.conversations.runtime_compaction import preview_auto_compaction
|
|
14
15
|
from ksadk.conversations.runtime_constants import (
|
|
15
16
|
ASSISTANT_STREAM_SNAPSHOT_INTERVAL_SECONDS,
|
|
@@ -46,6 +47,7 @@ from ksadk.conversations.runtime_observability import (
|
|
|
46
47
|
_set_conversation_usage_attributes,
|
|
47
48
|
_set_prompt_cache_attributes,
|
|
48
49
|
_set_prompt_source_attributes,
|
|
50
|
+
_set_skill_eval_result_attributes,
|
|
49
51
|
_set_span_attribute,
|
|
50
52
|
_span_current_context,
|
|
51
53
|
_span_feedback_metadata,
|
|
@@ -57,6 +59,7 @@ from ksadk.conversations.runtime_persistence import (
|
|
|
57
59
|
append_reasoning_event,
|
|
58
60
|
append_run_checkpoint_event,
|
|
59
61
|
append_run_status_event,
|
|
62
|
+
prepare_stream_identity_session,
|
|
60
63
|
)
|
|
61
64
|
from ksadk.conversations.runtime_preparation import _refresh_history, build_run_input
|
|
62
65
|
from ksadk.conversations.runtime_resume import (
|
|
@@ -72,6 +75,7 @@ from ksadk.conversations.runtime_resume import (
|
|
|
72
75
|
_tool_receipt_metadata,
|
|
73
76
|
)
|
|
74
77
|
from ksadk.model_policy import fallback_model_for_exception, model_policy_options_for_model
|
|
78
|
+
from ksadk.runtime.skill_eval_result import skill_eval_response_fields
|
|
75
79
|
from ksadk.runtime_context import (
|
|
76
80
|
PlatformInvocationContext,
|
|
77
81
|
platform_invocation_scope,
|
|
@@ -83,35 +87,6 @@ from ksadk.tools.gateway import (
|
|
|
83
87
|
)
|
|
84
88
|
|
|
85
89
|
|
|
86
|
-
def _record_baseline_turn(
|
|
87
|
-
*,
|
|
88
|
-
prepared: Any,
|
|
89
|
-
model: str | None,
|
|
90
|
-
usage: Any,
|
|
91
|
-
ptl: bool,
|
|
92
|
-
attempts: int,
|
|
93
|
-
turn_start_monotonic: float | None,
|
|
94
|
-
) -> None:
|
|
95
|
-
"""env-gated 旁路采集:未启用时 no-op,启用时记录一条 turn 基线。不进决策路径。"""
|
|
96
|
-
from ksadk.context_engine.baseline import record_baseline_turn
|
|
97
|
-
|
|
98
|
-
latency_ms = None
|
|
99
|
-
if turn_start_monotonic is not None:
|
|
100
|
-
latency_ms = int((time.monotonic() - turn_start_monotonic) * 1000)
|
|
101
|
-
record_baseline_turn(
|
|
102
|
-
getattr(prepared, "shadow_context_plan", None),
|
|
103
|
-
session_id=getattr(prepared, "session_id", ""),
|
|
104
|
-
invocation_id=getattr(prepared, "invocation_id", ""),
|
|
105
|
-
model=str(model or ""),
|
|
106
|
-
usage=usage if isinstance(usage, Mapping) else None,
|
|
107
|
-
compaction_triggered=bool(getattr(prepared, "compaction_triggered", False)),
|
|
108
|
-
compaction_trigger=str(getattr(prepared, "compaction_trigger", "") or ""),
|
|
109
|
-
prompt_too_long=ptl,
|
|
110
|
-
retry_attempts=attempts,
|
|
111
|
-
turn_latency_ms=latency_ms,
|
|
112
|
-
)
|
|
113
|
-
|
|
114
|
-
|
|
115
90
|
async def _iter_conversation_turn_events(
|
|
116
91
|
*,
|
|
117
92
|
runner: Any,
|
|
@@ -145,6 +120,18 @@ async def _iter_conversation_turn_events(
|
|
|
145
120
|
_governance_record_turn_start(governance)
|
|
146
121
|
entry_run_mode = validate_run_mode(run_mode)
|
|
147
122
|
entry_run_trigger = trigger_from_resume_input(resume_input)
|
|
123
|
+
(
|
|
124
|
+
user_id,
|
|
125
|
+
session_id,
|
|
126
|
+
invocation_identity,
|
|
127
|
+
public_request_metadata,
|
|
128
|
+
) = await prepare_stream_identity_session(
|
|
129
|
+
agent_id=agent_id,
|
|
130
|
+
user_id=user_id,
|
|
131
|
+
session_id=session_id,
|
|
132
|
+
request_metadata=request_metadata,
|
|
133
|
+
session_service_provider=provider,
|
|
134
|
+
)
|
|
148
135
|
if resume_input is None:
|
|
149
136
|
compaction_preview = await preview_auto_compaction(
|
|
150
137
|
agent_id=agent_id,
|
|
@@ -220,9 +207,10 @@ async def _iter_conversation_turn_events(
|
|
|
220
207
|
yield {"type": "error", "message": str(exc) or "Agent 运行失败"}
|
|
221
208
|
return
|
|
222
209
|
_inject_runner_deferred_tools_for_request(runner, prepared)
|
|
210
|
+
effective_user_id = prepared.user_id or user_id
|
|
223
211
|
ambient_contexts = _build_runner_ambient_contexts(
|
|
224
212
|
runner=runner,
|
|
225
|
-
user_id=
|
|
213
|
+
user_id=effective_user_id,
|
|
226
214
|
user_input=prepared.user_input,
|
|
227
215
|
)
|
|
228
216
|
prepared.memory_recall_events = ambient_contexts.get("memory_recall_events", [])
|
|
@@ -231,7 +219,7 @@ async def _iter_conversation_turn_events(
|
|
|
231
219
|
runtime_context = PlatformInvocationContext(
|
|
232
220
|
session=SessionContext.from_payload(prepared.session_context),
|
|
233
221
|
agent_id=agent_id,
|
|
234
|
-
user_id=
|
|
222
|
+
user_id=effective_user_id,
|
|
235
223
|
account_id=str(account_id or ""),
|
|
236
224
|
session_id=prepared.session_id,
|
|
237
225
|
history=list(prepared.history),
|
|
@@ -250,6 +238,7 @@ async def _iter_conversation_turn_events(
|
|
|
250
238
|
kb_context=ambient_contexts.get("kb_context"),
|
|
251
239
|
memory_context=ambient_contexts.get("memory_context"),
|
|
252
240
|
tool_approval_mode=str(prepared.request_metadata.get("tool_approval_mode") or ""),
|
|
241
|
+
identity=invocation_identity,
|
|
253
242
|
)
|
|
254
243
|
if prepared.compaction_triggered:
|
|
255
244
|
yield {
|
|
@@ -293,7 +282,7 @@ async def _iter_conversation_turn_events(
|
|
|
293
282
|
_set_conversation_span_attributes(
|
|
294
283
|
span,
|
|
295
284
|
agent_id=agent_id,
|
|
296
|
-
user_id=
|
|
285
|
+
user_id=effective_user_id,
|
|
297
286
|
session_id=prepared.session_id,
|
|
298
287
|
invocation_id=prepared.invocation_id,
|
|
299
288
|
runner_name=runner_name,
|
|
@@ -309,7 +298,7 @@ async def _iter_conversation_turn_events(
|
|
|
309
298
|
yield {
|
|
310
299
|
"type": "started",
|
|
311
300
|
"session_id": prepared.session_id,
|
|
312
|
-
"metadata": {**trace_metadata, **
|
|
301
|
+
"metadata": {**trace_metadata, **public_request_metadata},
|
|
313
302
|
}
|
|
314
303
|
await append_run_status_event(
|
|
315
304
|
session_id=prepared.session_id,
|
|
@@ -329,6 +318,7 @@ async def _iter_conversation_turn_events(
|
|
|
329
318
|
emitted_anything = False
|
|
330
319
|
emitted_response_artifacts = False
|
|
331
320
|
saw_final_chunk = False
|
|
321
|
+
result_fields: dict[str, Any] = {}
|
|
332
322
|
responses_output: list[Any] = []
|
|
333
323
|
responses_response_id: str | None = response_id
|
|
334
324
|
runner_agentengine_metadata: dict[str, Any] = {}
|
|
@@ -756,6 +746,9 @@ async def _iter_conversation_turn_events(
|
|
|
756
746
|
return
|
|
757
747
|
if chunk_type == "final":
|
|
758
748
|
saw_final_chunk = True
|
|
749
|
+
result_fields = skill_eval_response_fields(chunk)
|
|
750
|
+
if result_fields:
|
|
751
|
+
_set_skill_eval_result_attributes(span, result_fields["skill_eval_result"])
|
|
759
752
|
final_text = str(chunk.get("output", ""))
|
|
760
753
|
if final_text:
|
|
761
754
|
accumulated_text = final_text
|
|
@@ -946,7 +939,7 @@ async def _iter_conversation_turn_events(
|
|
|
946
939
|
)
|
|
947
940
|
await _auto_save_ltm_turn(
|
|
948
941
|
agent_id=agent_id,
|
|
949
|
-
user_id=
|
|
942
|
+
user_id=effective_user_id,
|
|
950
943
|
prepared=prepared,
|
|
951
944
|
output_text=accumulated_text,
|
|
952
945
|
runner_type=runtime_context.runner_type,
|
|
@@ -969,7 +962,7 @@ async def _iter_conversation_turn_events(
|
|
|
969
962
|
usage=assistant_metadata.get("usage"),
|
|
970
963
|
)
|
|
971
964
|
_set_prompt_source_attributes(span, getattr(prepared, "compiled_prompt", None))
|
|
972
|
-
|
|
965
|
+
record_baseline_turn(
|
|
973
966
|
prepared=prepared,
|
|
974
967
|
model=model,
|
|
975
968
|
usage=assistant_metadata.get("usage"),
|
|
@@ -980,6 +973,7 @@ async def _iter_conversation_turn_events(
|
|
|
980
973
|
_finish_span()
|
|
981
974
|
yield {
|
|
982
975
|
"type": "completed",
|
|
976
|
+
**result_fields,
|
|
983
977
|
"output_text": accumulated_text,
|
|
984
978
|
"model": model,
|
|
985
979
|
"session_id": prepared.session_id,
|
|
@@ -205,6 +205,8 @@ async def _stream_conversation_semantic_events(
|
|
|
205
205
|
event.get("metadata") if isinstance(event.get("metadata"), Mapping) else None
|
|
206
206
|
),
|
|
207
207
|
usage=event.get("usage") if isinstance(event.get("usage"), Mapping) else None,
|
|
208
|
+
timing=event.get("timing") if isinstance(event.get("timing"), Mapping) else None,
|
|
209
|
+
skill_eval_result=event.get("skill_eval_result"),
|
|
208
210
|
)
|
|
209
211
|
yield _response_sse("response.completed", final_payload)
|
|
210
212
|
|
|
@@ -626,6 +628,8 @@ async def _stream_responses_semantic_events(
|
|
|
626
628
|
status="failed",
|
|
627
629
|
metadata=response_metadata,
|
|
628
630
|
usage=event.get("usage") if isinstance(event.get("usage"), Mapping) else None,
|
|
631
|
+
timing=event.get("timing") if isinstance(event.get("timing"), Mapping) else None,
|
|
632
|
+
skill_eval_result=event.get("skill_eval_result"),
|
|
629
633
|
error={"message": event.get("message") or "Agent 运行失败"},
|
|
630
634
|
)
|
|
631
635
|
yield _response_sse("response.failed", failed_payload)
|
|
@@ -641,6 +645,8 @@ async def _stream_responses_semantic_events(
|
|
|
641
645
|
status="cancelled",
|
|
642
646
|
metadata=response_metadata,
|
|
643
647
|
usage=event.get("usage") if isinstance(event.get("usage"), Mapping) else None,
|
|
648
|
+
timing=event.get("timing") if isinstance(event.get("timing"), Mapping) else None,
|
|
649
|
+
skill_eval_result=event.get("skill_eval_result"),
|
|
644
650
|
)
|
|
645
651
|
yield _response_sse("response.cancelled", cancelled_payload)
|
|
646
652
|
return
|
|
@@ -704,6 +710,8 @@ async def _stream_responses_semantic_events(
|
|
|
704
710
|
status="completed",
|
|
705
711
|
metadata=response_metadata,
|
|
706
712
|
usage=event.get("usage") if isinstance(event.get("usage"), Mapping) else None,
|
|
713
|
+
timing=event.get("timing") if isinstance(event.get("timing"), Mapping) else None,
|
|
714
|
+
skill_eval_result=event.get("skill_eval_result"),
|
|
707
715
|
output_items=(
|
|
708
716
|
event.get("responses_output")
|
|
709
717
|
if isinstance(event.get("responses_output"), Sequence)
|
|
@@ -42,6 +42,7 @@ from ksadk.events.identity import stable_event_id, stable_item_id, stable_part_i
|
|
|
42
42
|
|
|
43
43
|
_CODEX_0_147_0_NOTIFICATION_METHODS = frozenset("""
|
|
44
44
|
account/login/completed account/rateLimits/updated account/updated app/list/updated
|
|
45
|
+
autoApprovalReview/strictReviewRequired
|
|
45
46
|
command/exec/outputDelta configWarning deprecationNotice error
|
|
46
47
|
externalAgentConfig/import/completed externalAgentConfig/import/progress fs/changed
|
|
47
48
|
fuzzyFileSearch/sessionCompleted fuzzyFileSearch/sessionUpdated guardianWarning
|
|
@@ -50,16 +51,23 @@ _CODEX_0_147_0_NOTIFICATION_METHODS = frozenset("""
|
|
|
50
51
|
item/commandExecution/terminalInteraction item/completed item/fileChange/outputDelta
|
|
51
52
|
item/fileChange/patchUpdated item/mcpToolCall/progress item/plan/delta
|
|
52
53
|
item/reasoning/summaryPartAdded item/reasoning/summaryTextDelta item/reasoning/textDelta
|
|
53
|
-
item/started mcpServer/
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
54
|
+
item/started mcpServer/event/stream/notification mcpServer/oauthLogin/completed
|
|
55
|
+
mcpServer/startupStatus/updated
|
|
56
|
+
model/rerouted model/safetyBuffering/updated model/verification
|
|
57
|
+
modelProvider/authRecoveryCompleted modelProvider/authRecoveryStarted
|
|
58
|
+
process/exited process/outputDelta project/changed
|
|
59
|
+
remoteControl/status/changed serverRequest/resolved skills/changed
|
|
60
|
+
thread/archived thread/attachment/updated thread/closed thread/compacted thread/deleted
|
|
61
|
+
thread/goal/cleared thread/environment/connected thread/environment/disconnected
|
|
62
|
+
thread/goal/updated thread/name/updated thread/project/updated thread/queue/changed
|
|
63
|
+
thread/realtime/closed thread/realtime/error
|
|
64
|
+
thread/realtime/item/completed thread/realtime/item/started
|
|
65
|
+
thread/realtime/item/transcript/delta
|
|
59
66
|
thread/realtime/itemAdded thread/realtime/outputAudio/delta thread/realtime/sdp
|
|
60
67
|
thread/realtime/started thread/realtime/transcript/delta thread/realtime/transcript/done
|
|
61
|
-
thread/settings/updated thread/started thread/status/changed
|
|
62
|
-
thread/unarchived turn/completed turn/diff/updated
|
|
68
|
+
thread/reverted thread/settings/updated thread/started thread/status/changed
|
|
69
|
+
thread/tokenUsage/updated thread/unarchived turn/completed turn/diff/updated
|
|
70
|
+
turn/moderationMetadata
|
|
63
71
|
turn/plan/updated turn/started warning windows/worldWritableWarning
|
|
64
72
|
windowsSandbox/setupCompleted
|
|
65
73
|
""".split())
|
|
@@ -17,6 +17,7 @@ from ksadk.events.canonical import (
|
|
|
17
17
|
ItemUpdated,
|
|
18
18
|
RuntimeEvent,
|
|
19
19
|
SourceRef,
|
|
20
|
+
UsageReported,
|
|
20
21
|
)
|
|
21
22
|
from ksadk.events.content import (
|
|
22
23
|
ContentSnapshot,
|
|
@@ -32,6 +33,7 @@ from ksadk.events.identity import (
|
|
|
32
33
|
stable_part_id,
|
|
33
34
|
stable_scope_id,
|
|
34
35
|
)
|
|
36
|
+
from ksadk.runners.base_runner import BaseRunner
|
|
35
37
|
|
|
36
38
|
# Native content-block types that carry a tool call identity.
|
|
37
39
|
_TOOL_CALL_BLOCKS = frozenset(
|
|
@@ -423,9 +425,41 @@ def _map_whole_message(
|
|
|
423
425
|
),
|
|
424
426
|
)
|
|
425
427
|
)
|
|
428
|
+
usage = BaseRunner._message_usage(payload)
|
|
429
|
+
if usage:
|
|
430
|
+
usage_item_id = stable_item_id("langgraph", state.scope_id, "$run")
|
|
431
|
+
emitted.append(
|
|
432
|
+
UsageReported(
|
|
433
|
+
**env(
|
|
434
|
+
state.scope_id,
|
|
435
|
+
state.parent_scope_id,
|
|
436
|
+
usage_item_id,
|
|
437
|
+
"usage.reported",
|
|
438
|
+
"usage",
|
|
439
|
+
source,
|
|
440
|
+
),
|
|
441
|
+
input_tokens=usage["input_tokens"],
|
|
442
|
+
output_tokens=usage["output_tokens"],
|
|
443
|
+
total_tokens=usage["total_tokens"],
|
|
444
|
+
cached_tokens=_usage_detail(usage.get("input_token_details"), "cached"),
|
|
445
|
+
reasoning_tokens=_usage_detail(usage.get("output_token_details"), "reasoning"),
|
|
446
|
+
)
|
|
447
|
+
)
|
|
426
448
|
return tuple(emitted)
|
|
427
449
|
|
|
428
450
|
|
|
451
|
+
def _usage_detail(details: Any, key: str) -> int:
|
|
452
|
+
if not isinstance(details, Mapping):
|
|
453
|
+
return 0
|
|
454
|
+
value = details.get(key)
|
|
455
|
+
if value is None and key == "cached":
|
|
456
|
+
value = details.get("cache_read") or details.get("cached_tokens")
|
|
457
|
+
try:
|
|
458
|
+
return int(value or 0)
|
|
459
|
+
except (TypeError, ValueError):
|
|
460
|
+
return 0
|
|
461
|
+
|
|
462
|
+
|
|
429
463
|
def _envelope(
|
|
430
464
|
context: LangGraphAdapterContext,
|
|
431
465
|
occurrence_key: str,
|
ksadk/events/session_event.py
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
"""Generic single-log SessionEvent store port(
|
|
1
|
+
"""Generic single-log SessionEvent store port(Kernel Task 2)。
|
|
2
2
|
|
|
3
3
|
把 control/runtime/workflow 等 family 的 ``SessionEventEnvelope/v1`` 收敛进
|
|
4
4
|
同一个 session event log,复用 Session backend 的原子 per-session seq。
|
|
@@ -79,7 +79,7 @@ def validate_write_guard(
|
|
|
79
79
|
"""Typed write permission: no bare booleans, no nullable fences.
|
|
80
80
|
|
|
81
81
|
AdmissionWriteGuard 只允许 admission 产生的 ``control.command_accepted`` /
|
|
82
|
-
``control.command_rejected``。ActivationWriteGuard 在
|
|
82
|
+
``control.command_rejected``。ActivationWriteGuard 在 Kernel 允许
|
|
83
83
|
worker/control/runtime facts;activation_id/fencing_token 与 lease 的
|
|
84
84
|
事务内比较由 Task 3 的 AgentKernelStore 承接。
|
|
85
85
|
"""
|
ksadk/harness/__init__.py
CHANGED
|
@@ -22,10 +22,24 @@ _EXPORTS = {
|
|
|
22
22
|
"HarnessReasoningTurn": ("ksadk.harness.reasoner", "HarnessReasoningTurn"),
|
|
23
23
|
"HarnessToolCall": ("ksadk.harness.reasoner", "HarnessToolCall"),
|
|
24
24
|
"LiteLLMHarnessReasoner": ("ksadk.harness.reasoner", "LiteLLMHarnessReasoner"),
|
|
25
|
+
"AcceptanceCheck": ("ksadk.harness.run_control", "AcceptanceCheck"),
|
|
26
|
+
"MilestoneSpec": ("ksadk.harness.run_control", "MilestoneSpec"),
|
|
27
|
+
"RunControlSpec": ("ksadk.harness.run_control", "RunControlSpec"),
|
|
28
|
+
"RunLimits": ("ksadk.harness.run_control", "RunLimits"),
|
|
29
|
+
"StagnationPolicy": ("ksadk.harness.run_control", "StagnationPolicy"),
|
|
25
30
|
"HarnessRuntime": ("ksadk.harness.runtime", "HarnessRuntime"),
|
|
26
31
|
"HarnessRuntimeAdapter": ("ksadk.harness.runtime", "HarnessRuntimeAdapter"),
|
|
27
32
|
"HarnessSandboxExecutor": ("ksadk.harness.sandbox", "HarnessSandboxExecutor"),
|
|
28
33
|
"SandboxPolicyDenied": ("ksadk.harness.sandbox", "SandboxPolicyDenied"),
|
|
34
|
+
"ToolDeliverySemantics": (
|
|
35
|
+
"ksadk.harness.tool_reliability",
|
|
36
|
+
"ToolDeliverySemantics",
|
|
37
|
+
),
|
|
38
|
+
"ToolReliability": ("ksadk.harness.tool_reliability", "ToolReliability"),
|
|
39
|
+
"classify_tool_reliability": (
|
|
40
|
+
"ksadk.harness.tool_reliability",
|
|
41
|
+
"classify_tool_reliability",
|
|
42
|
+
),
|
|
29
43
|
}
|
|
30
44
|
|
|
31
45
|
__all__ = list(_EXPORTS)
|
ksadk/harness/app.py
CHANGED
|
@@ -10,6 +10,7 @@ from typing import Any, Callable, Optional, Protocol, Sequence
|
|
|
10
10
|
from fastapi import FastAPI
|
|
11
11
|
|
|
12
12
|
from ksadk.harness.config import HarnessConfig
|
|
13
|
+
from ksadk.harness.insights import HarnessInsightsRegistry, mount_insights
|
|
13
14
|
from ksadk.harness.reasoner import HarnessReasoner
|
|
14
15
|
from ksadk.harness.runtime import HarnessRuntimeAdapter
|
|
15
16
|
from ksadk.runtime import (
|
|
@@ -88,6 +89,8 @@ class HarnessApp:
|
|
|
88
89
|
registry = RuntimeRegistry()
|
|
89
90
|
registry.register(self._runtime_type, lambda _context: self.adapter())
|
|
90
91
|
self._executor = RuntimeExecutor(registry)
|
|
92
|
+
# P3 补强:长任务洞察登记处(Studio 经 /insights API 消费)。
|
|
93
|
+
self._insights = HarnessInsightsRegistry()
|
|
91
94
|
|
|
92
95
|
from ksadk.sessions import create_session_service
|
|
93
96
|
|
|
@@ -120,6 +123,11 @@ class HarnessApp:
|
|
|
120
123
|
def executor(self) -> RuntimeExecutor:
|
|
121
124
|
return self._executor
|
|
122
125
|
|
|
126
|
+
@property
|
|
127
|
+
def insights(self) -> HarnessInsightsRegistry:
|
|
128
|
+
"""长任务洞察登记处(context-trace / token-report 的数据源)。"""
|
|
129
|
+
return self._insights
|
|
130
|
+
|
|
123
131
|
@property
|
|
124
132
|
def launch_context(self) -> RuntimeLaunchContext:
|
|
125
133
|
return self._launch_context
|
|
@@ -260,6 +268,9 @@ class HarnessApp:
|
|
|
260
268
|
)
|
|
261
269
|
app.state.runtime.session_service = self._session_service
|
|
262
270
|
app.state.runtime.harness_capabilities = self._capabilities
|
|
271
|
+
# P3 补强:Studio 消费端(长任务方案 §3.2)——/insights/runs/...
|
|
272
|
+
# 的 context-trace / token-report / compaction-trace 纯 dict 投影。
|
|
273
|
+
mount_insights(app, self._insights)
|
|
263
274
|
for plugin in self._plugins:
|
|
264
275
|
plugin.after_build(app, self._config)
|
|
265
276
|
self._fastapi_app = app
|
|
@@ -0,0 +1,213 @@
|
|
|
1
|
+
"""Harness Artifact Store(缺口 5 / plan §6.2 大结果外置)。
|
|
2
|
+
|
|
3
|
+
工具产出的大结果(报表、文件、生成物)落工作区磁盘,State/事件流只带
|
|
4
|
+
引用(``artifact.created`` payload 的 ``uri``)。同一 ``(run, name)`` 重复
|
|
5
|
+
保存递增 ``version``,历史版本保留可下载。
|
|
6
|
+
|
|
7
|
+
存储形态:内容文件 ``{root}/{run_id}/{name}.v{version}`` + SQLite 索引
|
|
8
|
+
(run_id / name / version / mime / content_hash / bytes / created_at)。
|
|
9
|
+
"""
|
|
10
|
+
|
|
11
|
+
from __future__ import annotations
|
|
12
|
+
|
|
13
|
+
import hashlib
|
|
14
|
+
import sqlite3
|
|
15
|
+
import time
|
|
16
|
+
from dataclasses import dataclass
|
|
17
|
+
from pathlib import Path
|
|
18
|
+
from typing import Any
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
@dataclass(frozen=True)
|
|
22
|
+
class ArtifactRecord:
|
|
23
|
+
run_id: str
|
|
24
|
+
name: str
|
|
25
|
+
version: int
|
|
26
|
+
mime: str
|
|
27
|
+
content_hash: str
|
|
28
|
+
bytes: int
|
|
29
|
+
uri: str
|
|
30
|
+
created_at: str
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
class ArtifactStore:
|
|
34
|
+
"""Run 作用域 Artifact 持久化(线程安全由 SQLite 连接锁保证)。"""
|
|
35
|
+
|
|
36
|
+
def __init__(self, root: str | Path, db_path: str | Path | None = None) -> None:
|
|
37
|
+
self._root = Path(root)
|
|
38
|
+
self._root.mkdir(parents=True, exist_ok=True)
|
|
39
|
+
self._db = sqlite3.connect(str(db_path or self._root / "artifacts.sqlite3"))
|
|
40
|
+
self._db.execute(
|
|
41
|
+
"""
|
|
42
|
+
CREATE TABLE IF NOT EXISTS artifacts (
|
|
43
|
+
run_id TEXT NOT NULL,
|
|
44
|
+
name TEXT NOT NULL,
|
|
45
|
+
version INTEGER NOT NULL,
|
|
46
|
+
mime TEXT NOT NULL DEFAULT "text/plain",
|
|
47
|
+
content_hash TEXT NOT NULL,
|
|
48
|
+
bytes INTEGER NOT NULL,
|
|
49
|
+
uri TEXT NOT NULL,
|
|
50
|
+
created_at TEXT NOT NULL,
|
|
51
|
+
PRIMARY KEY (run_id, name, version)
|
|
52
|
+
)
|
|
53
|
+
"""
|
|
54
|
+
)
|
|
55
|
+
self._db.commit()
|
|
56
|
+
|
|
57
|
+
# ------------------------------------------------------------- 写入
|
|
58
|
+
|
|
59
|
+
def save(
|
|
60
|
+
self, *, run_id: str, name: str, content: bytes, mime: str = "text/plain"
|
|
61
|
+
) -> ArtifactRecord:
|
|
62
|
+
name = _safe_name(name)
|
|
63
|
+
if not name:
|
|
64
|
+
raise ValueError("artifact name 不能为空")
|
|
65
|
+
run_id = _safe_name(run_id)
|
|
66
|
+
if not run_id:
|
|
67
|
+
raise ValueError("run_id 不能为空")
|
|
68
|
+
version = self._next_version(run_id, name)
|
|
69
|
+
digest = "sha256:" + hashlib.sha256(content).hexdigest()
|
|
70
|
+
directory = self._root / run_id
|
|
71
|
+
directory.mkdir(parents=True, exist_ok=True)
|
|
72
|
+
file_path = directory / f"{name}.v{version}"
|
|
73
|
+
# 目录穿越防线:规范化后必须仍在 Store 根目录内(run_id/name 已各
|
|
74
|
+
# 自过 _safe_name,此处校验最终落点,防御纵深)。
|
|
75
|
+
_assert_within_root(self._root, file_path)
|
|
76
|
+
file_path.write_bytes(content)
|
|
77
|
+
uri = f"artifact://{run_id}/{name}@v{version}"
|
|
78
|
+
record = ArtifactRecord(
|
|
79
|
+
run_id=run_id,
|
|
80
|
+
name=name,
|
|
81
|
+
version=version,
|
|
82
|
+
mime=mime,
|
|
83
|
+
content_hash=digest,
|
|
84
|
+
bytes=len(content),
|
|
85
|
+
uri=uri,
|
|
86
|
+
created_at=time.strftime("%Y-%m-%dT%H:%M:%SZ", time.gmtime()),
|
|
87
|
+
)
|
|
88
|
+
self._db.execute(
|
|
89
|
+
"INSERT INTO artifacts VALUES (?, ?, ?, ?, ?, ?, ?, ?)",
|
|
90
|
+
(
|
|
91
|
+
record.run_id,
|
|
92
|
+
record.name,
|
|
93
|
+
record.version,
|
|
94
|
+
record.mime,
|
|
95
|
+
record.content_hash,
|
|
96
|
+
record.bytes,
|
|
97
|
+
record.uri,
|
|
98
|
+
record.created_at,
|
|
99
|
+
),
|
|
100
|
+
)
|
|
101
|
+
self._db.commit()
|
|
102
|
+
return record
|
|
103
|
+
|
|
104
|
+
# ------------------------------------------------------------- 读取
|
|
105
|
+
|
|
106
|
+
def list(self, run_id: str, *, name: str | None = None) -> list[ArtifactRecord]:
|
|
107
|
+
run_id = _safe_name(run_id)
|
|
108
|
+
query = "SELECT * FROM artifacts WHERE run_id = ?"
|
|
109
|
+
params: list[Any] = [run_id]
|
|
110
|
+
if name is not None:
|
|
111
|
+
query += " AND name = ?"
|
|
112
|
+
params.append(_safe_name(name))
|
|
113
|
+
query += " ORDER BY name, version"
|
|
114
|
+
rows = self._db.execute(query, params).fetchall()
|
|
115
|
+
return [_record(row) for row in rows]
|
|
116
|
+
|
|
117
|
+
def latest(self, run_id: str, name: str) -> ArtifactRecord | None:
|
|
118
|
+
records = self.list(run_id, name=name)
|
|
119
|
+
return records[-1] if records else None
|
|
120
|
+
|
|
121
|
+
def read(self, record: ArtifactRecord) -> bytes:
|
|
122
|
+
return self._read_uri(record.uri)
|
|
123
|
+
|
|
124
|
+
def read_latest(self, run_id: str, name: str) -> bytes | None:
|
|
125
|
+
record = self.latest(run_id, name)
|
|
126
|
+
return None if record is None else self.read(record)
|
|
127
|
+
|
|
128
|
+
def _read_uri(self, uri: str) -> bytes:
|
|
129
|
+
# uri: artifact://{run_id}/{name}@v{version}
|
|
130
|
+
try:
|
|
131
|
+
body = uri[len("artifact://") :]
|
|
132
|
+
run_id, rest = body.split("/", 1)
|
|
133
|
+
name, version = rest.rsplit("@v", 1)
|
|
134
|
+
file_path = self._root / _safe_name(run_id) / f"{_safe_name(name)}.v{int(version)}"
|
|
135
|
+
except ValueError as exc:
|
|
136
|
+
raise ValueError(f"非法 artifact uri: {uri!r}") from exc
|
|
137
|
+
_assert_within_root(self._root, file_path)
|
|
138
|
+
if not file_path.is_file():
|
|
139
|
+
raise FileNotFoundError(f"artifact 内容缺失: {uri}")
|
|
140
|
+
return file_path.read_bytes()
|
|
141
|
+
|
|
142
|
+
# ------------------------------------------------------------- 内部
|
|
143
|
+
|
|
144
|
+
def _next_version(self, run_id: str, name: str) -> int:
|
|
145
|
+
row = self._db.execute(
|
|
146
|
+
"SELECT MAX(version) FROM artifacts WHERE run_id = ? AND name = ?",
|
|
147
|
+
(run_id, name),
|
|
148
|
+
).fetchone()
|
|
149
|
+
return (row[0] or 0) + 1
|
|
150
|
+
|
|
151
|
+
def close(self) -> None:
|
|
152
|
+
self._db.close()
|
|
153
|
+
|
|
154
|
+
|
|
155
|
+
class BudgetedArtifactStore:
|
|
156
|
+
"""Run 级写入守卫;在委托真实 Store 前原子检查数量预算。"""
|
|
157
|
+
|
|
158
|
+
def __init__(self, store: ArtifactStore, *, run_id: str, max_artifacts: int) -> None:
|
|
159
|
+
self._store = store
|
|
160
|
+
self._run_id = run_id
|
|
161
|
+
self._max_artifacts = max_artifacts
|
|
162
|
+
|
|
163
|
+
def save(self, *, run_id: str, name: str, content: bytes, mime: str = "text/plain"):
|
|
164
|
+
if run_id != self._run_id:
|
|
165
|
+
raise ValueError("budgeted artifact store run_id mismatch")
|
|
166
|
+
if len(self._store.list(run_id)) >= self._max_artifacts:
|
|
167
|
+
raise ArtifactBudgetExceeded(
|
|
168
|
+
f"artifact budget {self._max_artifacts} exhausted before write"
|
|
169
|
+
)
|
|
170
|
+
return self._store.save(run_id=run_id, name=name, content=content, mime=mime)
|
|
171
|
+
|
|
172
|
+
def list(self, run_id: str, *, name: str | None = None):
|
|
173
|
+
return self._store.list(run_id, name=name)
|
|
174
|
+
|
|
175
|
+
def __getattr__(self, name: str):
|
|
176
|
+
return getattr(self._store, name)
|
|
177
|
+
|
|
178
|
+
|
|
179
|
+
class ArtifactBudgetExceeded(ValueError):
|
|
180
|
+
"""Artifact 写入在产生文件或索引副作用前被预算拒绝。"""
|
|
181
|
+
|
|
182
|
+
|
|
183
|
+
def _safe_name(name: str) -> str:
|
|
184
|
+
keep = [c if (c.isalnum() or c in "-_.") else "_" for c in str(name or "").strip()]
|
|
185
|
+
return "".join(keep)[:128]
|
|
186
|
+
|
|
187
|
+
|
|
188
|
+
def _assert_within_root(root: Path, path: Path) -> None:
|
|
189
|
+
root_resolved = root.resolve()
|
|
190
|
+
path_resolved = path.resolve()
|
|
191
|
+
if root_resolved != path_resolved and root_resolved not in path_resolved.parents:
|
|
192
|
+
raise ValueError(f"artifact 路径越界: {path}")
|
|
193
|
+
|
|
194
|
+
|
|
195
|
+
def _record(row: tuple) -> ArtifactRecord:
|
|
196
|
+
return ArtifactRecord(
|
|
197
|
+
run_id=row[0],
|
|
198
|
+
name=row[1],
|
|
199
|
+
version=int(row[2]),
|
|
200
|
+
mime=row[3],
|
|
201
|
+
content_hash=row[4],
|
|
202
|
+
bytes=int(row[5]),
|
|
203
|
+
uri=row[6],
|
|
204
|
+
created_at=row[7],
|
|
205
|
+
)
|
|
206
|
+
|
|
207
|
+
|
|
208
|
+
__all__ = [
|
|
209
|
+
"ArtifactBudgetExceeded",
|
|
210
|
+
"ArtifactRecord",
|
|
211
|
+
"ArtifactStore",
|
|
212
|
+
"BudgetedArtifactStore",
|
|
213
|
+
]
|