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
ksadk/kernel/bootstrap.py
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
# -*- coding: utf-8 -*-
|
|
2
|
-
"""生产 composition root(
|
|
2
|
+
"""生产 composition root(Kernel Task 4 Step 4)。
|
|
3
3
|
|
|
4
4
|
``build_agent_kernel_runtime(config) -> AgentKernelRuntime`` 把 AgentKernel
|
|
5
5
|
栈的全部运行时角色组装成一个可启动 / 可关闭的单元:
|
|
@@ -18,6 +18,7 @@ RuntimeAdapter provider、contract digest 或 durable nonce store 时
|
|
|
18
18
|
``build_agent_kernel_runtime`` 直接抛 ``RuntimeError``,绝不静默降级到
|
|
19
19
|
内存栈或本地自签 authority。
|
|
20
20
|
"""
|
|
21
|
+
|
|
21
22
|
from __future__ import annotations
|
|
22
23
|
|
|
23
24
|
import asyncio
|
|
@@ -190,9 +191,7 @@ class AgentKernelReadiness:
|
|
|
190
191
|
store_ok = False
|
|
191
192
|
try:
|
|
192
193
|
# 真实 store 查询(PG driver 即真实 SQL round-trip)。
|
|
193
|
-
await self.runtime.kernel_store.list_messages(
|
|
194
|
-
config.agent_instance_id
|
|
195
|
-
)
|
|
194
|
+
await self.runtime.kernel_store.list_messages(config.agent_instance_id)
|
|
196
195
|
store_ok = True
|
|
197
196
|
except Exception:
|
|
198
197
|
store_ok = False
|
|
@@ -219,9 +218,7 @@ class AgentKernelReadiness:
|
|
|
219
218
|
try:
|
|
220
219
|
from datetime import datetime
|
|
221
220
|
|
|
222
|
-
expires_at = datetime.fromisoformat(
|
|
223
|
-
str(expires).replace("Z", "+00:00")
|
|
224
|
-
)
|
|
221
|
+
expires_at = datetime.fromisoformat(str(expires).replace("Z", "+00:00"))
|
|
225
222
|
if expires_at <= datetime.now(expires_at.tzinfo):
|
|
226
223
|
lease_healthy = False
|
|
227
224
|
except ValueError:
|
|
@@ -244,10 +241,7 @@ class AgentKernelReadiness:
|
|
|
244
241
|
config.bundle_digest,
|
|
245
242
|
)
|
|
246
243
|
)
|
|
247
|
-
ready =
|
|
248
|
-
store_ok and worker_running and lease_healthy and digests_match
|
|
249
|
-
and not degraded
|
|
250
|
-
)
|
|
244
|
+
ready = store_ok and worker_running and lease_healthy and digests_match and not degraded
|
|
251
245
|
health = {
|
|
252
246
|
"ready": ready,
|
|
253
247
|
"store_ok": store_ok,
|
|
@@ -283,9 +277,7 @@ class AgentKernelReadiness:
|
|
|
283
277
|
if degraded:
|
|
284
278
|
health["degradation_reason"] = self.runtime._degradation_reason
|
|
285
279
|
health["degraded_at"] = self.runtime._degraded_at
|
|
286
|
-
health["degradation_last_error"] =
|
|
287
|
-
self.runtime._degraded_last_error
|
|
288
|
-
)
|
|
280
|
+
health["degradation_last_error"] = self.runtime._degraded_last_error
|
|
289
281
|
return health
|
|
290
282
|
|
|
291
283
|
|
|
@@ -303,6 +295,7 @@ class AgentKernelRuntime:
|
|
|
303
295
|
session_events: Any = field(repr=False)
|
|
304
296
|
_owns_pool: bool = field(default=False, repr=False)
|
|
305
297
|
_pool: Any = field(default=None, repr=False)
|
|
298
|
+
_owns_store: bool = field(default=False, repr=False)
|
|
306
299
|
|
|
307
300
|
def __post_init__(self) -> None:
|
|
308
301
|
self._tasks: list[asyncio.Task] = []
|
|
@@ -322,17 +315,13 @@ class AgentKernelRuntime:
|
|
|
322
315
|
|
|
323
316
|
# ------------------------------------------------------------ degradation
|
|
324
317
|
|
|
325
|
-
def _mark_degraded(
|
|
326
|
-
self, reason: str, exc: BaseException | None = None
|
|
327
|
-
) -> None:
|
|
318
|
+
def _mark_degraded(self, reason: str, exc: BaseException | None = None) -> None:
|
|
328
319
|
"""统一降级入口:醒目 ERROR 日志 + 可供 health 端点回读的诊断状态。"""
|
|
329
320
|
|
|
330
321
|
self._degraded = True
|
|
331
322
|
if self._degradation_reason is None:
|
|
332
323
|
self._degradation_reason = reason
|
|
333
|
-
last_error = (
|
|
334
|
-
f"{type(exc).__name__}: {exc}" if exc is not None else "n/a"
|
|
335
|
-
)
|
|
324
|
+
last_error = f"{type(exc).__name__}: {exc}" if exc is not None else "n/a"
|
|
336
325
|
self._degraded_last_error = last_error
|
|
337
326
|
try:
|
|
338
327
|
self._degraded_at = self.config.clock().isoformat()
|
|
@@ -377,14 +366,14 @@ class AgentKernelRuntime:
|
|
|
377
366
|
async def start(self) -> None:
|
|
378
367
|
if self._tasks:
|
|
379
368
|
return
|
|
369
|
+
if hasattr(self.kernel_store, "ensure_schema"):
|
|
370
|
+
await self.kernel_store.ensure_schema() # type: ignore[attr-defined]
|
|
380
371
|
self._worker_running = True
|
|
381
372
|
self._tasks.append(asyncio.create_task(self._run_loop(), name="kernel-runtime"))
|
|
382
373
|
# 心跳续约必须是独立任务:run loop 可能长时间阻塞在某个 session 的
|
|
383
374
|
# adapter.start()(hosted pod 上 codex 握手可超过 lease TTL),内联
|
|
384
375
|
# 续约会把其它已持有 lease 的 session 拖过期(stream guard StaleFence)。
|
|
385
|
-
self._tasks.append(
|
|
386
|
-
asyncio.create_task(self._heartbeat_loop(), name="kernel-heartbeat")
|
|
387
|
-
)
|
|
376
|
+
self._tasks.append(asyncio.create_task(self._heartbeat_loop(), name="kernel-heartbeat"))
|
|
388
377
|
|
|
389
378
|
async def close(self) -> None:
|
|
390
379
|
for task in self._tasks:
|
|
@@ -403,9 +392,7 @@ class AgentKernelRuntime:
|
|
|
403
392
|
lease = await self.kernel_store.current_lease(
|
|
404
393
|
self.config.agent_instance_id, session_id
|
|
405
394
|
)
|
|
406
|
-
if lease is not None and self.lease_heartbeat.owns_lease(
|
|
407
|
-
session_id, lease
|
|
408
|
-
):
|
|
395
|
+
if lease is not None and self.lease_heartbeat.owns_lease(session_id, lease):
|
|
409
396
|
await self.kernel_store.release_activation(
|
|
410
397
|
lease.activation_id, expected_fence=lease.fencing_token
|
|
411
398
|
)
|
|
@@ -419,6 +406,11 @@ class AgentKernelRuntime:
|
|
|
419
406
|
await self._pool.close()
|
|
420
407
|
except Exception:
|
|
421
408
|
pass
|
|
409
|
+
if self._owns_store and hasattr(self.kernel_store, "close"):
|
|
410
|
+
try:
|
|
411
|
+
await self.kernel_store.close() # type: ignore[attr-defined]
|
|
412
|
+
except Exception:
|
|
413
|
+
pass
|
|
422
414
|
|
|
423
415
|
# ------------------------------------------------------------- run loop
|
|
424
416
|
|
|
@@ -436,9 +428,7 @@ class AgentKernelRuntime:
|
|
|
436
428
|
# 隔离中的 session:不 claim inbox、不恢复、
|
|
437
429
|
# 不写任何 canonical 事件(等待人工清理)。
|
|
438
430
|
continue
|
|
439
|
-
lease, took_over = await self.lease_heartbeat.ensure_lease(
|
|
440
|
-
session_id
|
|
441
|
-
)
|
|
431
|
+
lease, took_over = await self.lease_heartbeat.ensure_lease(session_id)
|
|
442
432
|
if lease is None:
|
|
443
433
|
continue
|
|
444
434
|
self._heartbeat_sessions.add(session_id)
|
|
@@ -451,13 +441,9 @@ class AgentKernelRuntime:
|
|
|
451
441
|
# session 并上报,其余 session 继续服务;只有
|
|
452
442
|
# 全局性故障(store 不可达或失败扩散到阈值)
|
|
453
443
|
# 才进程级 degraded。
|
|
454
|
-
failure = await self._recover_safely(
|
|
455
|
-
lease, session_id
|
|
456
|
-
)
|
|
444
|
+
failure = await self._recover_safely(lease, session_id)
|
|
457
445
|
if failure is not None:
|
|
458
|
-
if not await self._quarantine_session(
|
|
459
|
-
session_id, failure
|
|
460
|
-
):
|
|
446
|
+
if not await self._quarantine_session(session_id, failure):
|
|
461
447
|
return
|
|
462
448
|
continue
|
|
463
449
|
result = await self.worker.run_once(
|
|
@@ -487,15 +473,20 @@ class AgentKernelRuntime:
|
|
|
487
473
|
self._store_failures = 0
|
|
488
474
|
except asyncio.CancelledError:
|
|
489
475
|
raise
|
|
490
|
-
except Exception:
|
|
476
|
+
except Exception as exc:
|
|
491
477
|
self._store_failures += 1
|
|
478
|
+
logger.exception(
|
|
479
|
+
"agent kernel poll failed: agent_instance_id=%s "
|
|
480
|
+
"consecutive_failures=%d",
|
|
481
|
+
self.config.agent_instance_id,
|
|
482
|
+
self._store_failures,
|
|
483
|
+
)
|
|
492
484
|
if (
|
|
493
|
-
self._store_failures
|
|
494
|
-
>= self.config.store_failure_degrade_threshold
|
|
485
|
+
self._store_failures >= self.config.store_failure_degrade_threshold
|
|
495
486
|
and not await self._store_reachable()
|
|
496
487
|
):
|
|
497
488
|
# store 持续不可达是全局性故障:宁降级不静默。
|
|
498
|
-
self._mark_degraded("store_unreachable")
|
|
489
|
+
self._mark_degraded("store_unreachable", exc)
|
|
499
490
|
return
|
|
500
491
|
await asyncio.sleep(self.config.poll_interval * 4)
|
|
501
492
|
continue
|
|
@@ -507,9 +498,7 @@ class AgentKernelRuntime:
|
|
|
507
498
|
async def _heartbeat_loop(self) -> None:
|
|
508
499
|
"""独立心跳任务:按 TTL/3 节奏续约所有已持有的 lease。"""
|
|
509
500
|
|
|
510
|
-
interval = max(
|
|
511
|
-
self.config.lease_ttl_seconds / 3.0, self.config.poll_interval
|
|
512
|
-
)
|
|
501
|
+
interval = max(self.config.lease_ttl_seconds / 3.0, self.config.poll_interval)
|
|
513
502
|
while True:
|
|
514
503
|
await asyncio.sleep(interval / 2.0)
|
|
515
504
|
await self._renew_leased_sessions()
|
|
@@ -526,9 +515,7 @@ class AgentKernelRuntime:
|
|
|
526
515
|
activation lease 仍由本 runtime 持有,就以 TTL/3 的节奏幂等续约。
|
|
527
516
|
"""
|
|
528
517
|
|
|
529
|
-
interval = max(
|
|
530
|
-
self.config.lease_ttl_seconds / 3.0, self.config.poll_interval
|
|
531
|
-
)
|
|
518
|
+
interval = max(self.config.lease_ttl_seconds / 3.0, self.config.poll_interval)
|
|
532
519
|
now = time.monotonic()
|
|
533
520
|
for session_id in sorted(self._heartbeat_sessions):
|
|
534
521
|
if session_id in self._quarantined:
|
|
@@ -537,9 +524,7 @@ class AgentKernelRuntime:
|
|
|
537
524
|
continue
|
|
538
525
|
self._last_renewed[session_id] = now
|
|
539
526
|
try:
|
|
540
|
-
lease, took_over = await self.lease_heartbeat.ensure_lease(
|
|
541
|
-
session_id
|
|
542
|
-
)
|
|
527
|
+
lease, took_over = await self.lease_heartbeat.ensure_lease(session_id)
|
|
543
528
|
except asyncio.CancelledError:
|
|
544
529
|
raise
|
|
545
530
|
except Exception:
|
|
@@ -555,14 +540,10 @@ class AgentKernelRuntime:
|
|
|
555
540
|
if failure is not None:
|
|
556
541
|
if not await self._quarantine_session(session_id, failure):
|
|
557
542
|
if not self._degraded:
|
|
558
|
-
self._mark_degraded(
|
|
559
|
-
"renew_recovery_failure", failure
|
|
560
|
-
)
|
|
543
|
+
self._mark_degraded("renew_recovery_failure", failure)
|
|
561
544
|
return
|
|
562
545
|
|
|
563
|
-
async def _recover_safely(
|
|
564
|
-
self, lease, session_id: str | None = None
|
|
565
|
-
) -> Exception | None:
|
|
546
|
+
async def _recover_safely(self, lease, session_id: str | None = None) -> Exception | None:
|
|
566
547
|
"""takeover 后的安全恢复:失败必须持久化收口,否则返回失败原因。
|
|
567
548
|
|
|
568
549
|
返回 None 表示恢复路径已收口(含 durable interrupted 兜底),
|
|
@@ -571,7 +552,9 @@ class AgentKernelRuntime:
|
|
|
571
552
|
"""
|
|
572
553
|
|
|
573
554
|
try:
|
|
574
|
-
await self.recovery.recover(
|
|
555
|
+
await self.recovery.recover(
|
|
556
|
+
self.config.agent_instance_id, lease, session_id=session_id
|
|
557
|
+
)
|
|
575
558
|
return None
|
|
576
559
|
except Exception as exc:
|
|
577
560
|
first_failure = exc
|
|
@@ -589,7 +572,7 @@ class AgentKernelRuntime:
|
|
|
589
572
|
)
|
|
590
573
|
try:
|
|
591
574
|
await self.recovery.settle_interrupted(
|
|
592
|
-
self.config.agent_instance_id, lease
|
|
575
|
+
self.config.agent_instance_id, lease, session_id=session_id
|
|
593
576
|
)
|
|
594
577
|
# 主恢复失败但 durable interrupted 兜底收口成功:半恢复状态,
|
|
595
578
|
# 运维需要可见(事件流里会出现确定性的 interrupted 收口)。
|
|
@@ -644,9 +627,7 @@ class AgentKernelRuntime:
|
|
|
644
627
|
|
|
645
628
|
if not await self._store_reachable():
|
|
646
629
|
# store 本身不可达:这不是单个 session 的问题。
|
|
647
|
-
self._mark_degraded(
|
|
648
|
-
"store_unreachable_during_recovery", exc
|
|
649
|
-
)
|
|
630
|
+
self._mark_degraded("store_unreachable_during_recovery", exc)
|
|
650
631
|
return False
|
|
651
632
|
self._quarantined.add(session_id)
|
|
652
633
|
self._recovery_failed_sessions.add(session_id)
|
|
@@ -662,28 +643,34 @@ class AgentKernelRuntime:
|
|
|
662
643
|
type(exc).__name__,
|
|
663
644
|
exc,
|
|
664
645
|
)
|
|
665
|
-
if (
|
|
666
|
-
len(self._recovery_failed_sessions)
|
|
667
|
-
>= self.config.quarantine_degrade_threshold
|
|
668
|
-
):
|
|
646
|
+
if len(self._recovery_failed_sessions) >= self.config.quarantine_degrade_threshold:
|
|
669
647
|
self._mark_degraded(
|
|
670
|
-
"recovery_failures_spread_to_%d_sessions" % len(
|
|
671
|
-
self._recovery_failed_sessions
|
|
672
|
-
),
|
|
648
|
+
"recovery_failures_spread_to_%d_sessions" % len(self._recovery_failed_sessions),
|
|
673
649
|
exc,
|
|
674
650
|
)
|
|
675
651
|
return False
|
|
676
652
|
return True
|
|
677
653
|
|
|
678
654
|
async def _pending_sessions(self) -> set[str]:
|
|
679
|
-
messages = await self.kernel_store.list_messages(
|
|
680
|
-
self.config.agent_instance_id
|
|
681
|
-
)
|
|
655
|
+
messages = await self.kernel_store.list_messages(self.config.agent_instance_id)
|
|
682
656
|
inbox_sessions = {
|
|
683
657
|
message.session_id
|
|
684
658
|
for message in messages
|
|
685
659
|
if message.status.value in ("accepted", "claimed")
|
|
686
660
|
}
|
|
661
|
+
# A process may die after the Inbox claim is completed but before the
|
|
662
|
+
# Runtime run reaches a terminal state. On restart there is then no
|
|
663
|
+
# pending Inbox row to discover the session from; scan sessions seen in
|
|
664
|
+
# the durable Inbox and retain those with an open Run for takeover.
|
|
665
|
+
known_sessions = {message.session_id for message in messages}
|
|
666
|
+
open_run_sessions = {
|
|
667
|
+
session_id
|
|
668
|
+
for session_id in known_sessions
|
|
669
|
+
if await self.kernel_store.find_active_run(
|
|
670
|
+
self.config.agent_instance_id, session_id
|
|
671
|
+
)
|
|
672
|
+
is not None
|
|
673
|
+
}
|
|
687
674
|
# Inbox is completed as soon as a stream is launched. Keep renewing
|
|
688
675
|
# the owning lease after the independent live execution finishes too:
|
|
689
676
|
# this runtime remains the session's activation owner while the Pod is
|
|
@@ -692,7 +679,7 @@ class AgentKernelRuntime:
|
|
|
692
679
|
# releases the retained leases; an ungraceful stop lets their TTL
|
|
693
680
|
# expire for recovery by a new activation.
|
|
694
681
|
active_sessions = self.worker.active_session_ids()
|
|
695
|
-
return inbox_sessions | active_sessions
|
|
682
|
+
return inbox_sessions | open_run_sessions | active_sessions
|
|
696
683
|
|
|
697
684
|
|
|
698
685
|
# ---------------------------------------------------------------------------
|
|
@@ -776,6 +763,7 @@ def build_agent_kernel_runtime(
|
|
|
776
763
|
session_events = config.session_events
|
|
777
764
|
session_service = config.session_service
|
|
778
765
|
owns_pool = config.owns_pool
|
|
766
|
+
owns_store = False
|
|
779
767
|
pool = config.pool
|
|
780
768
|
|
|
781
769
|
if store is None or session_events is None:
|
|
@@ -788,9 +776,7 @@ def build_agent_kernel_runtime(
|
|
|
788
776
|
from ksadk.sessions.postgres_service import PostgresSessionService
|
|
789
777
|
|
|
790
778
|
if not config.dsn:
|
|
791
|
-
raise RuntimeError(
|
|
792
|
-
"postgres agent kernel runtime requires a store DSN"
|
|
793
|
-
)
|
|
779
|
+
raise RuntimeError("postgres agent kernel runtime requires a store DSN")
|
|
794
780
|
if session_service is None:
|
|
795
781
|
session_service = PostgresSessionService(
|
|
796
782
|
dsn=config.dsn,
|
|
@@ -806,11 +792,23 @@ def build_agent_kernel_runtime(
|
|
|
806
792
|
workspace_id=session_service.workspace_id,
|
|
807
793
|
)
|
|
808
794
|
kernel_store: AgentKernelStore = PostgresAgentKernelStore(
|
|
809
|
-
pool, event_log
|
|
795
|
+
pool, event_log, tenant_id=session_service.tenant_id
|
|
810
796
|
)
|
|
811
797
|
# typed RuntimeEvent 写路径走 fenced store:每个
|
|
812
798
|
# ActivationWriteGuard append 在同一事务验证 activation 行。
|
|
813
799
|
events = PostgresFencedSessionEventStore(kernel_store) # type: ignore[arg-type]
|
|
800
|
+
elif config.driver == "sqlite":
|
|
801
|
+
from ksadk.kernel.sqlite_store import SQLiteAgentKernelStore
|
|
802
|
+
from ksadk.sessions.in_memory import InMemorySessionService
|
|
803
|
+
|
|
804
|
+
if not config.dsn:
|
|
805
|
+
raise RuntimeError("sqlite agent kernel runtime requires a database path")
|
|
806
|
+
if session_service is None:
|
|
807
|
+
session_service = InMemorySessionService()
|
|
808
|
+
base_events = SessionServiceEventStore(session_service)
|
|
809
|
+
kernel_store = SQLiteAgentKernelStore(config.dsn, base_events)
|
|
810
|
+
events = base_events
|
|
811
|
+
owns_store = True
|
|
814
812
|
else:
|
|
815
813
|
from ksadk.kernel.memory_store import InMemoryAgentKernelStore
|
|
816
814
|
from ksadk.sessions.in_memory import InMemorySessionService
|
|
@@ -845,9 +843,7 @@ def build_agent_kernel_runtime(
|
|
|
845
843
|
raise RuntimeError(
|
|
846
844
|
"hosted agent kernel runtime cannot determine adapter capabilities"
|
|
847
845
|
) from exc
|
|
848
|
-
computed_capability_digest = runtime_capability_matrix_digest(
|
|
849
|
-
capability_snapshot
|
|
850
|
-
)
|
|
846
|
+
computed_capability_digest = runtime_capability_matrix_digest(capability_snapshot)
|
|
851
847
|
if config.capability_digest != computed_capability_digest:
|
|
852
848
|
raise RuntimeError(
|
|
853
849
|
"capability_digest_mismatch: hosted adapter capabilities do not "
|
|
@@ -878,6 +874,7 @@ def build_agent_kernel_runtime(
|
|
|
878
874
|
store,
|
|
879
875
|
adapter_factory=adapter_provider,
|
|
880
876
|
session_events=session_events,
|
|
877
|
+
session_service=session_service,
|
|
881
878
|
start_request_defaults=config.start_request_defaults,
|
|
882
879
|
)
|
|
883
880
|
recovery = RecoveryCoordinator(
|
|
@@ -894,8 +891,7 @@ def build_agent_kernel_runtime(
|
|
|
894
891
|
heartbeat = LeaseHeartbeat(
|
|
895
892
|
store,
|
|
896
893
|
agent_instance_id=config.agent_instance_id,
|
|
897
|
-
activation_id=config.activation_id
|
|
898
|
-
or f"{config.agent_instance_id}:kernel-runtime",
|
|
894
|
+
activation_id=config.activation_id or f"{config.agent_instance_id}:kernel-runtime",
|
|
899
895
|
runtime_type=config.runtime_type,
|
|
900
896
|
bundle_digest=config.bundle_digest,
|
|
901
897
|
# Lease metadata must represent the exact matrix this owner executes,
|
|
@@ -914,6 +910,7 @@ def build_agent_kernel_runtime(
|
|
|
914
910
|
session_events=session_events,
|
|
915
911
|
_owns_pool=owns_pool,
|
|
916
912
|
_pool=pool,
|
|
913
|
+
_owns_store=owns_store,
|
|
917
914
|
)
|
|
918
915
|
runtime.readiness.runtime = runtime
|
|
919
916
|
return runtime
|
|
@@ -958,13 +955,9 @@ async def bootstrap_agent_kernel_runtime_from_env(
|
|
|
958
955
|
driver = os.environ.get("AGENT_KERNEL_STORE_DRIVER", "memory").strip().lower()
|
|
959
956
|
dsn = os.environ.get("AGENT_KERNEL_STORE_DSN", "").strip()
|
|
960
957
|
jwks_url = os.environ.get(ENV_JWKS_URL, "").strip()
|
|
961
|
-
session_namespace = (
|
|
962
|
-
os.environ.get("KSADK_SESSION_NAMESPACE", "default").strip() or "default"
|
|
963
|
-
)
|
|
958
|
+
session_namespace = os.environ.get("KSADK_SESSION_NAMESPACE", "default").strip() or "default"
|
|
964
959
|
tenant_id = (
|
|
965
|
-
os.environ.get("KSADK_TENANT_ID")
|
|
966
|
-
or os.environ.get("AGENTENGINE_TENANT_ID")
|
|
967
|
-
or "default"
|
|
960
|
+
os.environ.get("KSADK_TENANT_ID") or os.environ.get("AGENTENGINE_TENANT_ID") or "default"
|
|
968
961
|
).strip()
|
|
969
962
|
workspace_id = (
|
|
970
963
|
os.environ.get("KSADK_WORKSPACE_ID")
|
|
@@ -972,16 +965,11 @@ async def bootstrap_agent_kernel_runtime_from_env(
|
|
|
972
965
|
or "default"
|
|
973
966
|
).strip()
|
|
974
967
|
mode: AuthorityMode = authority_mode() # type: ignore[assignment]
|
|
975
|
-
durability_tier: DurabilityTier =
|
|
976
|
-
"AGENT_KERNEL_DURABILITY_TIER", "durable"
|
|
977
|
-
)
|
|
978
|
-
injected_contract_digest = os.environ.get(
|
|
979
|
-
|
|
980
|
-
).strip()
|
|
981
|
-
if (
|
|
982
|
-
mode == "hosted"
|
|
983
|
-
and injected_contract_digest != AGENT_KERNEL_V1_AGGREGATE_DIGEST
|
|
984
|
-
):
|
|
968
|
+
durability_tier: DurabilityTier = (
|
|
969
|
+
os.environ.get("AGENT_KERNEL_DURABILITY_TIER", "durable").strip().lower()
|
|
970
|
+
) # type: ignore[assignment]
|
|
971
|
+
injected_contract_digest = os.environ.get("AGENT_KERNEL_CONTRACT_DIGEST", "").strip()
|
|
972
|
+
if mode == "hosted" and injected_contract_digest != AGENT_KERNEL_V1_AGGREGATE_DIGEST:
|
|
985
973
|
raise RuntimeError(
|
|
986
974
|
"contract_digest_mismatch: hosted agent kernel runtime image "
|
|
987
975
|
"does not support the control-plane contract digest"
|
|
@@ -1015,7 +1003,7 @@ async def bootstrap_agent_kernel_runtime_from_env(
|
|
|
1015
1003
|
workspace_id=session_service.workspace_id,
|
|
1016
1004
|
)
|
|
1017
1005
|
store: AgentKernelStore = PostgresAgentKernelStore(
|
|
1018
|
-
pool, event_log, owns_pool=True
|
|
1006
|
+
pool, event_log, tenant_id=session_service.tenant_id, owns_pool=True
|
|
1019
1007
|
)
|
|
1020
1008
|
await store.ensure_schema()
|
|
1021
1009
|
session_events: Any = PostgresFencedSessionEventStore(store)
|
|
@@ -1054,9 +1042,7 @@ async def bootstrap_agent_kernel_runtime_from_env(
|
|
|
1054
1042
|
adapter_provider=adapter_provider,
|
|
1055
1043
|
start_request_defaults=dict(start_request_defaults or {}),
|
|
1056
1044
|
contract_digest=(
|
|
1057
|
-
AGENT_KERNEL_V1_AGGREGATE_DIGEST
|
|
1058
|
-
if mode == "hosted"
|
|
1059
|
-
else injected_contract_digest
|
|
1045
|
+
AGENT_KERNEL_V1_AGGREGATE_DIGEST if mode == "hosted" else injected_contract_digest
|
|
1060
1046
|
),
|
|
1061
1047
|
capability_digest=os.environ.get("AGENT_KERNEL_CAPABILITY_DIGEST", ""),
|
|
1062
1048
|
bundle_digest=os.environ.get("AGENT_BUNDLE_DIGEST", ""),
|
|
@@ -1074,9 +1060,7 @@ async def bootstrap_agent_kernel_runtime_from_env(
|
|
|
1074
1060
|
# 组合才是 activation owner;hosted 少了它必须拒绝启动,不能退回到
|
|
1075
1061
|
# 所有副本共享的固定字符串。
|
|
1076
1062
|
activation_id=f"{agent_instance_id}:{pod_uid}" if pod_uid else None,
|
|
1077
|
-
lease_ttl_seconds=float(
|
|
1078
|
-
os.environ.get("AGENT_KERNEL_LEASE_TTL_SECONDS", "60") or "60"
|
|
1079
|
-
),
|
|
1063
|
+
lease_ttl_seconds=float(os.environ.get("AGENT_KERNEL_LEASE_TTL_SECONDS", "60") or "60"),
|
|
1080
1064
|
)
|
|
1081
1065
|
runtime = build_agent_kernel_runtime(config)
|
|
1082
1066
|
await runtime.start()
|
|
@@ -29,7 +29,7 @@ def runtime_capability_matrix_wire_value(matrix: Any) -> dict[str, Any]:
|
|
|
29
29
|
"""
|
|
30
30
|
|
|
31
31
|
dump = matrix.model_dump(mode="json")
|
|
32
|
-
for key in ("interaction_mode", "goal", "loop", "plan"):
|
|
32
|
+
for key in ("interaction_mode", "goal", "loop", "plan", "execution_policy"):
|
|
33
33
|
if dump.get(key) is None:
|
|
34
34
|
dump.pop(key, None)
|
|
35
35
|
return dump
|
ksadk/kernel/contracts.py
CHANGED
|
@@ -55,6 +55,9 @@ class WireModel(BaseModel):
|
|
|
55
55
|
class EnqueuePayload(WireModel):
|
|
56
56
|
content: JsonValue
|
|
57
57
|
reply_to: str | None = None
|
|
58
|
+
# Optional execution-grants/v1 extension. AgentControlCommand retains the
|
|
59
|
+
# caller's original payload, so old command digests are unchanged.
|
|
60
|
+
execution_grant_id: str | None = Field(default=None, min_length=1, max_length=512, strict=True)
|
|
58
61
|
|
|
59
62
|
|
|
60
63
|
class SteerPayload(WireModel):
|
|
@@ -325,6 +328,8 @@ class RuntimeCapabilityMatrix(WireModel):
|
|
|
325
328
|
goal: RuntimeCapability | None = None
|
|
326
329
|
loop: RuntimeCapability | None = None
|
|
327
330
|
plan: RuntimeCapability | None = None
|
|
331
|
+
# Trusted host policy injection is independent of prompt/tool availability.
|
|
332
|
+
execution_policy: RuntimeCapability | None = None
|
|
328
333
|
|
|
329
334
|
|
|
330
335
|
class AgentStatusSnapshot(WireModel):
|
ksadk/kernel/control.py
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
# -*- coding: utf-8 -*-
|
|
2
|
-
"""深模块 AgentKernel control facade(
|
|
2
|
+
"""深模块 AgentKernel control facade(Kernel Task 6 Step 3)。
|
|
3
3
|
|
|
4
4
|
小接口 ``submit`` / ``status`` / ``subscribe``:
|
|
5
5
|
|
|
@@ -33,6 +33,12 @@ from ksadk.kernel.contracts import (
|
|
|
33
33
|
SessionEventSubscription,
|
|
34
34
|
)
|
|
35
35
|
from ksadk.kernel.errors import InvalidPermitError
|
|
36
|
+
from ksadk.kernel.execution_grants import (
|
|
37
|
+
ExecutionGrantBarrier,
|
|
38
|
+
ExecutionGrantRecord,
|
|
39
|
+
ExecutionGrantSpec,
|
|
40
|
+
GrantState,
|
|
41
|
+
)
|
|
36
42
|
from ksadk.kernel.mapping import (
|
|
37
43
|
CapabilityProvider,
|
|
38
44
|
capability_of,
|
|
@@ -89,6 +95,31 @@ class AgentKernel:
|
|
|
89
95
|
|
|
90
96
|
return self._capabilities()
|
|
91
97
|
|
|
98
|
+
async def ensure_execution_grant(self, spec: ExecutionGrantSpec) -> ExecutionGrantRecord:
|
|
99
|
+
"""Trusted host port; the host MUST authorize the owner and exact scope.
|
|
100
|
+
|
|
101
|
+
A grant does not replace AgentControlPermit. Existing sessions may have
|
|
102
|
+
several independent grants, e.g. distinct scheduled occurrences.
|
|
103
|
+
"""
|
|
104
|
+
return await self._store.ensure_execution_grant(spec)
|
|
105
|
+
|
|
106
|
+
async def get_execution_grant(self, spec: ExecutionGrantSpec) -> ExecutionGrantBarrier | None:
|
|
107
|
+
"""Read current durable state for an already-authorized host scope."""
|
|
108
|
+
return await self._store.get_execution_grant(spec)
|
|
109
|
+
|
|
110
|
+
async def set_execution_grant_state(
|
|
111
|
+
self, spec: ExecutionGrantSpec, state: GrantState, *,
|
|
112
|
+
expected_revision: int, idempotency_key: str,
|
|
113
|
+
) -> ExecutionGrantBarrier:
|
|
114
|
+
"""Serialize suspension/revocation with start qualification.
|
|
115
|
+
|
|
116
|
+
The returned receipt is durable and idempotent. A revoked grant is
|
|
117
|
+
irreversible; qualified commands still require normal Run control.
|
|
118
|
+
"""
|
|
119
|
+
return await self._store.set_execution_grant_state(
|
|
120
|
+
spec, state, expected_revision=expected_revision, idempotency_key=idempotency_key,
|
|
121
|
+
)
|
|
122
|
+
|
|
92
123
|
# ---------------------------------------------------------------- submit
|
|
93
124
|
|
|
94
125
|
async def submit(
|