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/store.py
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
# -*- coding: utf-8 -*-
|
|
2
|
-
"""``AgentKernelStore`` port:durable Inbox / Run / ActivationLease 状态(
|
|
2
|
+
"""``AgentKernelStore`` port:durable Inbox / Run / ActivationLease 状态(Kernel Task 3)。
|
|
3
3
|
|
|
4
4
|
所有 mutation 都接受 ``expected_fence: int`` 并与当前 activation lease 的
|
|
5
5
|
fencing token 做事务内 CAS 比较;不匹配抛 :class:`StaleFenceError`。
|
|
@@ -13,7 +13,7 @@ import hashlib
|
|
|
13
13
|
import json
|
|
14
14
|
from dataclasses import dataclass
|
|
15
15
|
from datetime import datetime, timezone
|
|
16
|
-
from typing import Protocol, runtime_checkable
|
|
16
|
+
from typing import TYPE_CHECKING, Protocol, runtime_checkable
|
|
17
17
|
from uuid import uuid4
|
|
18
18
|
|
|
19
19
|
from ksadk.kernel.contracts import (
|
|
@@ -24,6 +24,14 @@ from ksadk.kernel.contracts import (
|
|
|
24
24
|
)
|
|
25
25
|
from ksadk.kernel.state import InboxState, RunState
|
|
26
26
|
|
|
27
|
+
if TYPE_CHECKING:
|
|
28
|
+
from ksadk.kernel.execution_grants import (
|
|
29
|
+
ExecutionGrantBarrier,
|
|
30
|
+
ExecutionGrantRecord,
|
|
31
|
+
ExecutionGrantSpec,
|
|
32
|
+
GrantState,
|
|
33
|
+
)
|
|
34
|
+
|
|
27
35
|
|
|
28
36
|
def now_utc() -> datetime:
|
|
29
37
|
return datetime.now(timezone.utc)
|
|
@@ -191,10 +199,43 @@ class AgentKernelStore(Protocol):
|
|
|
191
199
|
self, command: AgentControlCommand, *, queue_limit: int
|
|
192
200
|
) -> AgentControlReceipt: ...
|
|
193
201
|
|
|
202
|
+
async def ensure_execution_grant(
|
|
203
|
+
self, spec: ExecutionGrantSpec
|
|
204
|
+
) -> ExecutionGrantRecord: ...
|
|
205
|
+
|
|
206
|
+
async def get_execution_grant(
|
|
207
|
+
self, spec: ExecutionGrantSpec
|
|
208
|
+
) -> ExecutionGrantBarrier | None: ...
|
|
209
|
+
|
|
210
|
+
async def set_execution_grant_state(
|
|
211
|
+
self, spec: ExecutionGrantSpec, state: GrantState, *,
|
|
212
|
+
expected_revision: int, idempotency_key: str,
|
|
213
|
+
) -> ExecutionGrantBarrier: ...
|
|
214
|
+
|
|
194
215
|
async def claim_next(
|
|
195
216
|
self, agent_instance_id: str, session_id: str, fencing_token: int
|
|
196
217
|
) -> InboxMessage | None: ...
|
|
197
218
|
|
|
219
|
+
async def list_messages(
|
|
220
|
+
self, agent_instance_id: str, session_id: str | None = None
|
|
221
|
+
) -> list[InboxMessage]: ...
|
|
222
|
+
|
|
223
|
+
async def list_pending(
|
|
224
|
+
self,
|
|
225
|
+
agent_instance_id: str,
|
|
226
|
+
session_id: str | None = None,
|
|
227
|
+
*,
|
|
228
|
+
fencing_token: int | None = None,
|
|
229
|
+
) -> list[InboxMessage]: ...
|
|
230
|
+
|
|
231
|
+
async def claim_message(
|
|
232
|
+
self, message_id: str, fencing_token: int
|
|
233
|
+
) -> InboxMessage: ...
|
|
234
|
+
|
|
235
|
+
async def discard_claim(
|
|
236
|
+
self, message_id: str, *, expected_fence: int
|
|
237
|
+
) -> None: ...
|
|
238
|
+
|
|
198
239
|
async def complete_claim(self, message_id: str, *, expected_fence: int) -> None: ...
|
|
199
240
|
|
|
200
241
|
async def acquire_activation(self, request: ActivationLeaseRequest) -> ActivationLease: ...
|
|
@@ -221,6 +262,32 @@ class AgentKernelStore(Protocol):
|
|
|
221
262
|
|
|
222
263
|
async def load_message(self, message_id: str) -> InboxMessage | None: ...
|
|
223
264
|
|
|
265
|
+
async def load_by_idempotency(
|
|
266
|
+
self, session_id: str, idempotency_key: str
|
|
267
|
+
) -> InboxMessage | None: ...
|
|
268
|
+
|
|
269
|
+
async def reject_command(
|
|
270
|
+
self,
|
|
271
|
+
command: AgentControlCommand,
|
|
272
|
+
*,
|
|
273
|
+
status: str,
|
|
274
|
+
code: str,
|
|
275
|
+
message: str,
|
|
276
|
+
retryable: bool = False,
|
|
277
|
+
) -> AgentControlReceipt: ...
|
|
278
|
+
|
|
279
|
+
async def inbox_depth(
|
|
280
|
+
self, agent_instance_id: str, session_id: str | None = None
|
|
281
|
+
) -> int: ...
|
|
282
|
+
|
|
283
|
+
async def find_active_run(
|
|
284
|
+
self, agent_instance_id: str, session_id: str | None = None
|
|
285
|
+
) -> RunRecord | None: ...
|
|
286
|
+
|
|
287
|
+
async def current_lease(
|
|
288
|
+
self, agent_instance_id: str, session_id: str | None = None
|
|
289
|
+
) -> ActivationLease | None: ...
|
|
290
|
+
|
|
224
291
|
|
|
225
292
|
__all__ = [
|
|
226
293
|
"AgentKernelStore",
|
ksadk/kernel/worker.py
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
# -*- coding: utf-8 -*-
|
|
2
|
-
"""per-session FIFO worker(
|
|
2
|
+
"""per-session FIFO worker(Kernel Task 6 Step 6)。
|
|
3
3
|
|
|
4
4
|
- 持有 activation lease(fencing token 通过 Store 的 CAS 校验)才能 claim。
|
|
5
5
|
- 按 per-session accepted_seq 保序;active Run 存在时普通 enqueue 保持排队,
|
|
@@ -19,7 +19,6 @@ execution(同一 client 实例);control lookup 永远按 durable run id。
|
|
|
19
19
|
from __future__ import annotations
|
|
20
20
|
|
|
21
21
|
import asyncio
|
|
22
|
-
import json
|
|
23
22
|
import logging
|
|
24
23
|
from collections.abc import Callable, Mapping
|
|
25
24
|
from dataclasses import dataclass, replace
|
|
@@ -36,6 +35,7 @@ from ksadk.interaction.provider import (
|
|
|
36
35
|
UnavailableInteractionProvider,
|
|
37
36
|
)
|
|
38
37
|
from ksadk.interaction.providers import default_interaction_providers
|
|
38
|
+
from ksadk.kernel.approval_presentation import approval_presentation
|
|
39
39
|
from ksadk.kernel.contracts import (
|
|
40
40
|
ActivationLease,
|
|
41
41
|
ActivationWriteGuard,
|
|
@@ -54,6 +54,11 @@ from ksadk.kernel.errors import (
|
|
|
54
54
|
StaleFenceError,
|
|
55
55
|
UnsupportedControlError,
|
|
56
56
|
)
|
|
57
|
+
from ksadk.kernel.execution_grants import (
|
|
58
|
+
ExecutionGrantBlocked,
|
|
59
|
+
execution_grant_id,
|
|
60
|
+
execution_grant_run_id,
|
|
61
|
+
)
|
|
57
62
|
from ksadk.kernel.mapping import COMMAND_HANDLERS, RESUME_TARGET_KINDS
|
|
58
63
|
from ksadk.kernel.state import RunState
|
|
59
64
|
from ksadk.kernel.store import (
|
|
@@ -62,7 +67,9 @@ from ksadk.kernel.store import (
|
|
|
62
67
|
control_event,
|
|
63
68
|
new_message_id,
|
|
64
69
|
)
|
|
70
|
+
from ksadk.kernel.worker_identity import prepare_worker_identity
|
|
65
71
|
from ksadk.runtime.adapter import (
|
|
72
|
+
CONVERSATION_PREPROCESSING_METADATA_KEY,
|
|
66
73
|
CancelResult,
|
|
67
74
|
PauseResult,
|
|
68
75
|
RunHandle,
|
|
@@ -75,6 +82,7 @@ from ksadk.runtime.adapter import (
|
|
|
75
82
|
from ksadk.runtime.adapter import (
|
|
76
83
|
ResumeTarget as AdapterResumeTarget,
|
|
77
84
|
)
|
|
85
|
+
from ksadk.runtime_context import TRUSTED_IDENTITY_METADATA_KEY
|
|
78
86
|
|
|
79
87
|
logger = logging.getLogger(__name__)
|
|
80
88
|
|
|
@@ -121,12 +129,14 @@ class AgentKernelWorker:
|
|
|
121
129
|
session_events: object | None = None,
|
|
122
130
|
interaction_providers: Mapping[str, InteractionProvider] | None = None,
|
|
123
131
|
start_request_defaults: Mapping[str, object] | None = None,
|
|
132
|
+
session_service: object | None = None,
|
|
124
133
|
) -> None:
|
|
125
134
|
self._store = store
|
|
126
135
|
self._adapter_factory = adapter_factory
|
|
127
136
|
# SessionEventStore(typed RuntimeEventStore 的 envelope 写路径)。
|
|
128
137
|
# 缺省时不落 runtime 事件,仅保证 stream 被消费到自然结束。
|
|
129
138
|
self._session_events = session_events
|
|
139
|
+
self._session_service = session_service
|
|
130
140
|
# Deployment-owned defaults (model, prompt and sandbox) come from the
|
|
131
141
|
# admitted immutable manifest. Server may attach a bounded per-turn
|
|
132
142
|
# model/approval selector to the signed command; the worker validates
|
|
@@ -247,27 +257,31 @@ class AgentKernelWorker:
|
|
|
247
257
|
# enqueue,此时其后的 interrupt/pause/steer 等控制命令必须能越过
|
|
248
258
|
# 该 enqueue 作用于 active Run。只处理当前 activation 持有 lease 的
|
|
249
259
|
# session,避免跨 session 抢占。
|
|
250
|
-
|
|
260
|
+
suspended_enqueue = False
|
|
251
261
|
for message in sorted(pending, key=lambda m: m.accepted_seq):
|
|
252
262
|
if session_id is not None and message.session_id != session_id:
|
|
253
263
|
continue
|
|
254
264
|
lease = await self._store.current_lease(agent_instance_id, message.session_id)
|
|
255
265
|
if lease is None or lease.activation_id != activation.activation_id:
|
|
256
|
-
continue
|
|
257
|
-
if message.command is None:
|
|
266
|
+
continue
|
|
267
|
+
if message.command is None:
|
|
258
268
|
continue
|
|
259
269
|
if message.command.command_type == "enqueue":
|
|
260
270
|
active = await self._store.find_active_run(agent_instance_id, message.session_id)
|
|
261
|
-
if active is not None:
|
|
262
|
-
continue
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
+
if active is not None or suspended_enqueue:
|
|
272
|
+
continue
|
|
273
|
+
try:
|
|
274
|
+
# Store claim and execution-grant validation share one atomic
|
|
275
|
+
# transaction. A prior list/read is never start authorization.
|
|
276
|
+
claimed = await self._store.claim_message(message.message_id, fence)
|
|
277
|
+
except ExecutionGrantBlocked as error:
|
|
278
|
+
if error.grant_state in {"suspended", "queued", "busy"}:
|
|
279
|
+
# Preserve enqueue FIFO while still letting cancel/resume
|
|
280
|
+
# controls behind the suspended command reach active work.
|
|
281
|
+
suspended_enqueue = True
|
|
282
|
+
continue
|
|
283
|
+
return await self._execute_claim(claimed.command, activation)
|
|
284
|
+
return WorkResult(outcome="idle")
|
|
271
285
|
|
|
272
286
|
# ------------------------------------------------------------- execution
|
|
273
287
|
|
|
@@ -382,7 +396,21 @@ class AgentKernelWorker:
|
|
|
382
396
|
|
|
383
397
|
fence = activation.fencing_token
|
|
384
398
|
guard = ActivationWriteGuard(activation_id=activation.activation_id, fencing_token=fence)
|
|
385
|
-
|
|
399
|
+
grant_id = execution_grant_id(command)
|
|
400
|
+
run_id = execution_grant_run_id(command) if grant_id else new_message_id()
|
|
401
|
+
if grant_id:
|
|
402
|
+
previous = await self._store.load_run(run_id)
|
|
403
|
+
if previous is not None:
|
|
404
|
+
# Once start may have reached the provider, neither a lost ACK
|
|
405
|
+
# nor takeover may invent a second model run. Normal recovery
|
|
406
|
+
# attaches durable handles; a handle-less pending start is
|
|
407
|
+
# uncertain and requires attention, never an automatic replay.
|
|
408
|
+
if previous.state == RunState.PENDING:
|
|
409
|
+
await self._store.save_run_transition(previous.model_copy(update={
|
|
410
|
+
"state": RunState.INTERRUPTED,
|
|
411
|
+
"reason": "execution_start_uncertain",
|
|
412
|
+
}), expected_fence=fence)
|
|
413
|
+
return run_id
|
|
386
414
|
adapter = self._adapter_factory()
|
|
387
415
|
pending = RunRecord(
|
|
388
416
|
run_id=run_id,
|
|
@@ -396,6 +424,7 @@ class AgentKernelWorker:
|
|
|
396
424
|
# back to one occurrence without matching text or wall-clock time.
|
|
397
425
|
metadata={
|
|
398
426
|
"command_id": str(command.command_id),
|
|
427
|
+
**({"execution_grant_id": grant_id} if grant_id else {}),
|
|
399
428
|
"source_kind": command.source.kind,
|
|
400
429
|
"source_ref": command.source.ref,
|
|
401
430
|
"correlation_id": command.correlation_id,
|
|
@@ -429,10 +458,26 @@ class AgentKernelWorker:
|
|
|
429
458
|
}
|
|
430
459
|
if approval_mode in approval_overrides:
|
|
431
460
|
request_config["approval_mode"] = approval_overrides[approval_mode]
|
|
461
|
+
effective_user_id, invocation_identity = await prepare_worker_identity(
|
|
462
|
+
command=command,
|
|
463
|
+
defaults=defaults,
|
|
464
|
+
session_service=self._session_service,
|
|
465
|
+
)
|
|
466
|
+
|
|
467
|
+
conversation_metadata = {}
|
|
468
|
+
if adapter.runtime.runtime_type == "harness" and self._session_events is not None:
|
|
469
|
+
from ksadk.kernel.worker_history import harness_conversation_messages
|
|
470
|
+
|
|
471
|
+
conversation_metadata[CONVERSATION_PREPROCESSING_METADATA_KEY] = {
|
|
472
|
+
"messages": await harness_conversation_messages(
|
|
473
|
+
command, store=self._store, session_events=self._session_events,
|
|
474
|
+
),
|
|
475
|
+
}
|
|
476
|
+
|
|
432
477
|
handle = await adapter.start(
|
|
433
478
|
StartRequest(
|
|
434
479
|
input=command.payload.get("content"),
|
|
435
|
-
user_id=
|
|
480
|
+
user_id=effective_user_id,
|
|
436
481
|
session_id=command.session_id,
|
|
437
482
|
agent_id=str(defaults.get("agent_id") or command.agent_instance_id),
|
|
438
483
|
model=selected_model,
|
|
@@ -447,7 +492,21 @@ class AgentKernelWorker:
|
|
|
447
492
|
),
|
|
448
493
|
"command_id": str(command.command_id),
|
|
449
494
|
"run_id": run_id,
|
|
495
|
+
**(
|
|
496
|
+
{TRUSTED_IDENTITY_METADATA_KEY: dict(invocation_identity)}
|
|
497
|
+
if isinstance(invocation_identity, Mapping)
|
|
498
|
+
else {}
|
|
499
|
+
),
|
|
450
500
|
**continuation_metadata,
|
|
501
|
+
**conversation_metadata,
|
|
502
|
+
# Opaque policy reference is supplied only by a trusted
|
|
503
|
+
# ingress. The Provider resolves and reauthorizes it for
|
|
504
|
+
# this exact Run; Kernel owns no plugin policy semantics.
|
|
505
|
+
**(
|
|
506
|
+
{"execution_policy_ref": command.payload["execution_policy_ref"]}
|
|
507
|
+
if isinstance(command.payload.get("execution_policy_ref"), str)
|
|
508
|
+
else {}
|
|
509
|
+
),
|
|
451
510
|
},
|
|
452
511
|
)
|
|
453
512
|
)
|
|
@@ -747,7 +806,7 @@ class AgentKernelWorker:
|
|
|
747
806
|
"""Persist one framework interaction as the durable ledger authority."""
|
|
748
807
|
|
|
749
808
|
from ksadk.events.canonical import ApprovalRequest, InteractionRequested
|
|
750
|
-
from ksadk.interaction.contracts import
|
|
809
|
+
from ksadk.interaction.contracts import InteractionRecord
|
|
751
810
|
|
|
752
811
|
assert isinstance(event, InteractionRequested)
|
|
753
812
|
presentation = None
|
|
@@ -763,25 +822,7 @@ class AgentKernelWorker:
|
|
|
763
822
|
"required": ["decision"],
|
|
764
823
|
}
|
|
765
824
|
native_target = {"call_id": event.request.call_id or event.interaction_id}
|
|
766
|
-
|
|
767
|
-
visible_arguments = {
|
|
768
|
-
key: detail[key]
|
|
769
|
-
for key in ("command", "cwd", "reason", "grantRoot", "proposedExecpolicyAmendment")
|
|
770
|
-
if key in detail and detail[key] is not None
|
|
771
|
-
}
|
|
772
|
-
presentation = InteractionPresentation(
|
|
773
|
-
title={
|
|
774
|
-
"command_execution": "run_command",
|
|
775
|
-
"file_change": "apply_patch",
|
|
776
|
-
"permissions": "request_permission",
|
|
777
|
-
"dynamic_tool_call": "tool_call",
|
|
778
|
-
}.get(event.request.kind, event.request.kind),
|
|
779
|
-
description=json.dumps(
|
|
780
|
-
{"arguments": visible_arguments},
|
|
781
|
-
ensure_ascii=False,
|
|
782
|
-
separators=(",", ":"),
|
|
783
|
-
),
|
|
784
|
-
)
|
|
825
|
+
presentation = approval_presentation(event.request)
|
|
785
826
|
else:
|
|
786
827
|
request_schema = dict(event.request.schema_)
|
|
787
828
|
# Codex maps the native JSON-RPC request id to a stable canonical
|
|
@@ -933,10 +974,7 @@ class AgentKernelWorker:
|
|
|
933
974
|
# e.g. calling LangGraph checkpoint resume with a Codex live handle
|
|
934
975
|
# would acknowledge a response that can never reach the original run.
|
|
935
976
|
provider = execution.interaction_provider
|
|
936
|
-
if
|
|
937
|
-
provider.provider_id != record.provider_id
|
|
938
|
-
or provider.mode == "unavailable"
|
|
939
|
-
):
|
|
977
|
+
if provider.provider_id != record.provider_id or provider.mode == "unavailable":
|
|
940
978
|
raise AgentKernelError(
|
|
941
979
|
RUNTIME_INTERACTION_UNAVAILABLE,
|
|
942
980
|
f"interaction provider {record.provider_id!r} cannot deliver "
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
"""Recover Harness turn input from the Kernel's durable conversation facts."""
|
|
2
|
+
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
from ksadk.conversations.context import project_model_messages
|
|
6
|
+
from ksadk.events.canonical import RunCompleted
|
|
7
|
+
from ksadk.events.canonical_store import RuntimeEventStore, runtime_event_to_session_event
|
|
8
|
+
from ksadk.kernel.contracts import AgentControlCommand
|
|
9
|
+
from ksadk.kernel.state import RunState
|
|
10
|
+
from ksadk.kernel.store import AgentKernelStore
|
|
11
|
+
from ksadk.sessions.base import SessionEvent
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
async def harness_conversation_messages(
|
|
15
|
+
command: AgentControlCommand,
|
|
16
|
+
*,
|
|
17
|
+
store: AgentKernelStore,
|
|
18
|
+
session_events: object,
|
|
19
|
+
) -> list[dict[str, str]]:
|
|
20
|
+
"""Project successful prior turns; never use an adapter's process cache.
|
|
21
|
+
|
|
22
|
+
Harness checkpoints belong to individual Runs. The Kernel retains the
|
|
23
|
+
admitted user input in its Inbox and the reply in canonical RuntimeEvents;
|
|
24
|
+
join those facts by Run.command_id, within this instance, tenant and Session.
|
|
25
|
+
Reuse conversation projection so tool/approval and multiple-message semantics
|
|
26
|
+
stay aligned with the ordinary conversation preparation path.
|
|
27
|
+
"""
|
|
28
|
+
|
|
29
|
+
inbox = {
|
|
30
|
+
str(message.command.command_id): message.command
|
|
31
|
+
for message in await store.list_messages(command.agent_instance_id, command.session_id)
|
|
32
|
+
if message.command is not None
|
|
33
|
+
and message.command.command_type == "enqueue"
|
|
34
|
+
and message.command.tenant_id == command.tenant_id
|
|
35
|
+
and message.command.session_id == command.session_id
|
|
36
|
+
and message.command.agent_instance_id == command.agent_instance_id
|
|
37
|
+
and message.command.command_id != command.command_id
|
|
38
|
+
}
|
|
39
|
+
events = await RuntimeEventStore(session_events).list(command.session_id)
|
|
40
|
+
by_run: dict[str, list[SessionEvent]] = {}
|
|
41
|
+
projected_runs: set[str] = set()
|
|
42
|
+
history: list[dict[str, str]] = []
|
|
43
|
+
for event in events:
|
|
44
|
+
rows = by_run.setdefault(event.run_id, [])
|
|
45
|
+
rows.append(runtime_event_to_session_event(command.session_id, event))
|
|
46
|
+
if not isinstance(event, RunCompleted) or event.run_id in projected_runs:
|
|
47
|
+
continue
|
|
48
|
+
run = await store.load_run(event.run_id)
|
|
49
|
+
if (
|
|
50
|
+
run is None
|
|
51
|
+
or run.state is not RunState.COMPLETED
|
|
52
|
+
or run.agent_instance_id != command.agent_instance_id
|
|
53
|
+
or run.session_id != command.session_id
|
|
54
|
+
):
|
|
55
|
+
continue
|
|
56
|
+
previous = inbox.get(str(run.metadata.get("command_id") or ""))
|
|
57
|
+
if previous is None:
|
|
58
|
+
continue
|
|
59
|
+
# This row is an in-memory projection of the already-admitted Inbox
|
|
60
|
+
# command, not another persistent copy of the user's message.
|
|
61
|
+
user = SessionEvent(
|
|
62
|
+
id=str(previous.command_id),
|
|
63
|
+
session_id=command.session_id,
|
|
64
|
+
invocation_id=run.run_id,
|
|
65
|
+
event_type="user_message",
|
|
66
|
+
content={"parts": [{"text": str(previous.payload.get("content") or "")}]},
|
|
67
|
+
seq_id=max(1, rows[0].seq_id - 1),
|
|
68
|
+
)
|
|
69
|
+
history.extend(project_model_messages([user, *rows], assistant_role="assistant"))
|
|
70
|
+
projected_runs.add(event.run_id)
|
|
71
|
+
history.append({"role": "user", "content": str(command.payload.get("content") or "")})
|
|
72
|
+
return history
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
"""Trusted business-identity preparation for kernel worker starts."""
|
|
2
|
+
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
from collections.abc import Mapping
|
|
6
|
+
from typing import Any
|
|
7
|
+
|
|
8
|
+
from ksadk.conversations.runtime_persistence import ensure_conversation_session
|
|
9
|
+
from ksadk.kernel.contracts import AgentControlCommand
|
|
10
|
+
from ksadk.sessions.invocation_identity import identity_native_user_id
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
async def prepare_worker_identity(
|
|
14
|
+
*,
|
|
15
|
+
command: AgentControlCommand,
|
|
16
|
+
defaults: Mapping[str, object],
|
|
17
|
+
session_service: object | None,
|
|
18
|
+
) -> tuple[str, Mapping[str, Any] | None]:
|
|
19
|
+
"""Resolve the storage user and retain only an admitted identity payload."""
|
|
20
|
+
|
|
21
|
+
invocation_identity = command.payload.get("invocation_identity")
|
|
22
|
+
effective_user_id = str(command.tenant_id or "agent-kernel")
|
|
23
|
+
if not isinstance(invocation_identity, Mapping):
|
|
24
|
+
return effective_user_id, None
|
|
25
|
+
if session_service is None:
|
|
26
|
+
return identity_native_user_id(invocation_identity), invocation_identity
|
|
27
|
+
|
|
28
|
+
# Hosted runtimes have two stable identifiers: the platform deployment
|
|
29
|
+
# instance (used by the Kernel command) and the public AgentId used by
|
|
30
|
+
# CreateSession/RunAgent. The admission path has already authorized the
|
|
31
|
+
# command against this session; use the persisted session owner as the
|
|
32
|
+
# canonical lookup key instead of treating the internal instance alias as
|
|
33
|
+
# a different Agent. This prevents a valid hosted turn from becoming a
|
|
34
|
+
# misleading ``Session not found`` during worker startup.
|
|
35
|
+
agent_id = str(defaults.get("agent_id") or command.agent_instance_id)
|
|
36
|
+
existing = await session_service.get_session_metadata(command.session_id)
|
|
37
|
+
if existing is not None and str(existing.agent_id or "").strip():
|
|
38
|
+
agent_id = str(existing.agent_id)
|
|
39
|
+
canonical_session = await ensure_conversation_session(
|
|
40
|
+
agent_id=agent_id,
|
|
41
|
+
user_id=effective_user_id,
|
|
42
|
+
session_id=command.session_id,
|
|
43
|
+
session_service_provider=lambda: session_service,
|
|
44
|
+
invocation_identity=invocation_identity,
|
|
45
|
+
allow_agent_alias=True,
|
|
46
|
+
)
|
|
47
|
+
return canonical_session.user_id, invocation_identity
|
ksadk/memory/coordinator.py
CHANGED
|
@@ -129,6 +129,11 @@ class MemoryCoordinator:
|
|
|
129
129
|
latency_ms=0,
|
|
130
130
|
accounting_accuracy="opaque",
|
|
131
131
|
)
|
|
132
|
+
# TTL / 状态过滤(长任务方案 §7.2):过期与已 supersede 的记录不进召回。
|
|
133
|
+
now_iso = time.strftime("%Y-%m-%dT%H:%M:%SZ", time.gmtime())
|
|
134
|
+
active = [r for r in result.records if r.is_active_now(now_iso=now_iso)]
|
|
135
|
+
if len(active) != len(result.records):
|
|
136
|
+
result = replace(result, records=active)
|
|
132
137
|
return result
|
|
133
138
|
|
|
134
139
|
def list_core(self, request: CoreMemoryRequest) -> list[MemoryRecord]:
|
|
@@ -270,6 +275,11 @@ class MemoryCoordinator:
|
|
|
270
275
|
by_id[record.memory_id] = record
|
|
271
276
|
return list(by_id.values())
|
|
272
277
|
|
|
278
|
+
def find_existing_for_candidate(self, candidate: MemoryCandidate) -> MemoryRecord | None:
|
|
279
|
+
"""Return the active fact occupying the candidate's logical slot."""
|
|
280
|
+
records = self._find_active_slot_records(candidate)
|
|
281
|
+
return records[0] if records else None
|
|
282
|
+
|
|
273
283
|
def propose_and_commit(
|
|
274
284
|
self,
|
|
275
285
|
candidate: MemoryCandidate,
|
|
@@ -346,7 +356,7 @@ class MemoryCoordinator:
|
|
|
346
356
|
importance=candidate.importance,
|
|
347
357
|
valid_from=now_iso,
|
|
348
358
|
valid_to="",
|
|
349
|
-
expires_at=
|
|
359
|
+
expires_at=candidate.expires_at,
|
|
350
360
|
source_session_id="",
|
|
351
361
|
source_event_ids=list(candidate.source_event_ids),
|
|
352
362
|
source_seq_range=None,
|
|
@@ -359,17 +369,23 @@ class MemoryCoordinator:
|
|
|
359
369
|
"operation": evaluation.operation,
|
|
360
370
|
**({"slot_key": candidate.slot_key} if candidate.slot_key else {}),
|
|
361
371
|
**(
|
|
362
|
-
{
|
|
363
|
-
"supersedes": [
|
|
364
|
-
item.memory_id for item in conflicting_records or [existing]
|
|
365
|
-
]
|
|
366
|
-
}
|
|
372
|
+
{"supersedes": [item.memory_id for item in conflicting_records or [existing]]}
|
|
367
373
|
if evaluation.operation == "update" and existing is not None
|
|
368
374
|
else {}
|
|
369
375
|
),
|
|
370
376
|
},
|
|
371
377
|
created_at=now_iso,
|
|
372
378
|
updated_at=now_iso,
|
|
379
|
+
# 长任务方案 §7.2:来源 Artifact / 敏感级别 / 写策略 / TTL / supersede 链。
|
|
380
|
+
source_artifact_refs=tuple(candidate.source_artifact_refs),
|
|
381
|
+
source_artifacts=tuple(candidate.source_artifacts),
|
|
382
|
+
sensitivity=candidate.sensitivity,
|
|
383
|
+
write_policy=candidate.write_policy,
|
|
384
|
+
supersedes=tuple(
|
|
385
|
+
item.memory_id for item in (conflicting_records or [existing]) if item is not None
|
|
386
|
+
)
|
|
387
|
+
if evaluation.operation == "update" and existing is not None
|
|
388
|
+
else (),
|
|
373
389
|
)
|
|
374
390
|
self._provider.upsert(
|
|
375
391
|
record,
|
ksadk/memory/extraction.py
CHANGED
|
@@ -34,6 +34,14 @@ _PREFERENCE_CORRECTION = re.compile(
|
|
|
34
34
|
re.IGNORECASE,
|
|
35
35
|
)
|
|
36
36
|
_PREFERENCE_SLOT = re.compile(r"(?:我|本人)?喜欢(?P<action>吃|喝|用|看|听|玩)")
|
|
37
|
+
# 一般祈使纠偏("以后报表不要用英文,请改成中文"):语义边界不如动作型偏好
|
|
38
|
+
# 清晰,但"否定旧值 + 指定新值"结构明确,仍按显式纠错(update)处理。
|
|
39
|
+
_GENERAL_CORRECTION = re.compile(
|
|
40
|
+
r"(?:以后|今后)?(?P<subject>[一-龥A-Za-z0-9]{1,12})?"
|
|
41
|
+
r"(?:请)?(?:不要|别)(?P<old>.{1,20}?)[,,]?"
|
|
42
|
+
r"(?:请)?(?:改成|改为|换成|改用)(?P<new>.+?)(?:[。.!!]|$)",
|
|
43
|
+
re.IGNORECASE,
|
|
44
|
+
)
|
|
37
45
|
_HOBBY_DECLARATION = re.compile(
|
|
38
46
|
r"(?:我|本人)?的?爱好(?P<correction>其实|现在|改)?(?:是|改成|变成)\s*(?P<value>.+?)"
|
|
39
47
|
r"(?:[。.!!]|$)",
|
|
@@ -47,7 +55,16 @@ _IMPLICIT_PREFERENCE_PATTERNS: tuple[re.Pattern[str], ...] = (
|
|
|
47
55
|
),
|
|
48
56
|
)
|
|
49
57
|
# 工具稳定事实信号。
|
|
50
|
-
_FACT_SIGNALS = (
|
|
58
|
+
_FACT_SIGNALS = (
|
|
59
|
+
"confirmed",
|
|
60
|
+
"最终确认",
|
|
61
|
+
"final",
|
|
62
|
+
"verified",
|
|
63
|
+
"确认成功",
|
|
64
|
+
"查询成功",
|
|
65
|
+
"已认证",
|
|
66
|
+
"已核实",
|
|
67
|
+
)
|
|
51
68
|
|
|
52
69
|
|
|
53
70
|
def _event_text(event: any) -> str: # type: ignore[name-defined]
|
|
@@ -123,6 +140,28 @@ def propose_memory_candidates(
|
|
|
123
140
|
)
|
|
124
141
|
)
|
|
125
142
|
continue
|
|
143
|
+
general = _GENERAL_CORRECTION.search(text)
|
|
144
|
+
if general:
|
|
145
|
+
subject = (general.group("subject") or "").strip()
|
|
146
|
+
new_value = general.group("new").strip().strip("。.,, ")
|
|
147
|
+
if new_value:
|
|
148
|
+
content = f"{subject}改为{new_value}" if subject else f"改为{new_value}"
|
|
149
|
+
candidates.append(
|
|
150
|
+
MemoryCandidate(
|
|
151
|
+
candidate_id=f"cand_{uuid.uuid4().hex[:16]}",
|
|
152
|
+
operation="update",
|
|
153
|
+
memory_type="profile",
|
|
154
|
+
scope=scope,
|
|
155
|
+
scope_id=scope_id,
|
|
156
|
+
content=content[:1000],
|
|
157
|
+
confidence=0.9,
|
|
158
|
+
importance=0.8,
|
|
159
|
+
source_event_ids=[event_id],
|
|
160
|
+
slot_key=derive_profile_slot_key(content),
|
|
161
|
+
reason="explicit_user_correction",
|
|
162
|
+
)
|
|
163
|
+
)
|
|
164
|
+
continue
|
|
126
165
|
correction = _PREFERENCE_CORRECTION.search(text)
|
|
127
166
|
if correction:
|
|
128
167
|
prefix = correction.group("prefix").strip()
|