agentengine-sdk-python 0.8.3__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.3.dist-info → agentengine_sdk_python-0.8.5.dist-info}/METADATA +13 -9
- agentengine_sdk_python-0.8.5.dist-info/RECORD +1296 -0
- 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 +111 -91
- ksadk/builders/code_builder.py +74 -21
- ksadk/builders/framework_requirements.py +22 -3
- ksadk/builders/ks3_uploader.py +36 -7
- ksadk/builders/managed_runtime_builder.py +1 -0
- ksadk/cli/__init__.py +68 -3
- 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_managed_runtime.py +13 -1
- ksadk/cli/cmd_openclaw.py +26 -1
- ksadk/cli/cmd_plugin.py +76 -13
- ksadk/cli/cmd_studio.py +64 -16
- ksadk/cli/cmd_web.py +2 -5
- ksadk/cli/openclaw_env.py +1 -1
- ksadk/cli/resource_common.py +26 -0
- ksadk/cli/runtime_bootstrap.py +23 -1
- ksadk/codex/client.py +425 -96
- ksadk/codex/projection.py +24 -0
- ksadk/codex/runtime.py +56 -298
- ksadk/common/auth.py +16 -10
- ksadk/configs/__init__.py +1 -1
- ksadk/configs/env_registry.py +153 -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 +133 -21
- ksadk/conversations/normalize.py +28 -10
- ksadk/conversations/projector.py +4 -6
- ksadk/conversations/runtime_baseline.py +37 -0
- ksadk/conversations/runtime_invocation.py +22 -4
- ksadk/conversations/runtime_observability.py +39 -10
- ksadk/conversations/runtime_payloads.py +9 -0
- ksadk/conversations/runtime_persistence.py +105 -9
- ksadk/conversations/runtime_preparation.py +42 -33
- ksadk/conversations/runtime_resume.py +50 -2
- ksadk/conversations/runtime_stream_events.py +34 -35
- ksadk/conversations/runtime_streaming.py +33 -7
- ksadk/deployment/env_forward.py +2 -2
- ksadk/deployment/providers/serverless.py +1 -1
- ksadk/events/adapters/_codex_items.py +16 -8
- ksadk/events/adapters/_codex_validators.py +18 -7
- ksadk/events/adapters/_langgraph_support.py +34 -0
- ksadk/events/adapters/langgraph.py +15 -1
- ksadk/events/canonical_store.py +3 -1
- ksadk/events/projections.py +1 -1
- 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/config.py +2 -2
- 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 +171 -136
- 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/tools.py +38 -13
- 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 +2 -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 +2 -1
- ksadk/kernel/__init__.py +10 -0
- ksadk/kernel/approval_presentation.py +91 -0
- ksadk/kernel/authorization.py +1 -1
- ksadk/kernel/bootstrap.py +114 -106
- 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 +42 -29
- 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 +331 -25
- ksadk/kernel/state.py +2 -3
- ksadk/kernel/store.py +72 -2
- ksadk/kernel/worker.py +144 -51
- ksadk/kernel/worker_history.py +72 -0
- ksadk/kernel/worker_identity.py +47 -0
- ksadk/knowledge_base/client.py +57 -27
- ksadk/mcp_runtime/__init__.py +12 -4
- ksadk/memory/adk/backends/sdk_ltm_backend.py +161 -41
- ksadk/memory/adk/resilient_session_service.py +25 -17
- ksadk/memory/adk/short_term_memory.py +26 -9
- ksadk/memory/coordinator.py +22 -6
- ksadk/memory/extraction.py +40 -1
- ksadk/memory/models.py +84 -5
- ksadk/memory/provider_resolver.py +8 -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 +14 -7
- ksadk/model_proxy/transform.py +40 -2
- ksadk/plugins/__init__.py +5 -1
- ksadk/plugins/artifacts.py +275 -0
- ksadk/plugins/bridges/__init__.py +4 -2
- ksadk/plugins/bridges/codex.py +120 -13
- ksadk/plugins/bridges/dsh.py +351 -156
- ksadk/plugins/builtins.py +72 -35
- ksadk/plugins/bundle_security.py +28 -4
- ksadk/plugins/codex_manifest.py +983 -0
- ksadk/plugins/companion_artifacts.py +83 -0
- ksadk/plugins/companions.py +368 -0
- ksadk/plugins/composition.py +8 -0
- ksadk/plugins/contracts.py +119 -1
- ksadk/plugins/delivery.py +153 -0
- ksadk/plugins/dsh_channels.py +156 -0
- ksadk/plugins/dsh_home.py +140 -0
- ksadk/plugins/dsh_installation_digest.py +71 -0
- ksadk/plugins/dsh_teams.py +105 -0
- ksadk/plugins/dsh_toolchain.py +203 -32
- ksadk/plugins/ecosystem_probe.py +6 -6
- ksadk/plugins/execution_host.py +99 -0
- ksadk/plugins/host.py +102 -39
- ksadk/plugins/kernel_adapter.py +205 -0
- ksadk/plugins/providers/__init__.py +23 -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/cordis.patch.yml +3 -0
- ksadk/plugins/providers/bundles/dsh-knowledge/index.mjs +53 -0
- ksadk/plugins/providers/bundles/dsh-knowledge/package.json +16 -0
- ksadk/plugins/providers/bundles/dsh-memory/cordis.patch.yml +3 -0
- ksadk/plugins/providers/bundles/dsh-memory/index.mjs +175 -0
- ksadk/plugins/providers/bundles/dsh-memory/package.json +16 -0
- ksadk/plugins/providers/bundles/dsh-platform-resources/client.mjs +166 -0
- ksadk/plugins/providers/bundles/dsh-platform-resources/cordis.patch.yml +3 -0
- ksadk/plugins/providers/bundles/dsh-platform-resources/index.mjs +9 -0
- ksadk/plugins/providers/bundles/dsh-platform-resources/package.json +12 -0
- ksadk/plugins/providers/bundles/dsh-skill-center/cordis.patch.yml +3 -0
- ksadk/plugins/providers/bundles/dsh-skill-center/index.mjs +125 -0
- ksadk/plugins/providers/bundles/dsh-skill-center/package.json +16 -0
- 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/cordis.patch.yml +3 -0
- ksadk/plugins/providers/bundles/ksadk-dsh-capability-host/index.mjs +920 -0
- ksadk/plugins/providers/bundles/ksadk-dsh-capability-host/package.json +27 -0
- 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 +115 -0
- ksadk/plugins/providers/bundles/ksadk-dsh-studio/index.mjs +19 -0
- ksadk/plugins/providers/bundles/ksadk-dsh-studio/package.json +7 -0
- ksadk/plugins/providers/bundles/ksadk-harness/index.mjs +1 -1
- ksadk/plugins/providers/codex.py +344 -70
- ksadk/plugins/providers/codex_native.py +368 -0
- ksadk/plugins/providers/codex_turn.py +301 -0
- ksadk/plugins/providers/dsh_capabilities.py +1450 -0
- ksadk/plugins/providers/dsh_mcp.py +467 -0
- ksadk/plugins/providers/harness.py +294 -141
- 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/mcp_projection.py +150 -0
- ksadk/plugins/providers/platform_resources.py +657 -0
- ksadk/plugins/providers/shipped_dsh.py +4 -1
- ksadk/plugins/resolver.py +8 -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/resource_runtime/__init__.py +4 -0
- ksadk/resource_runtime/broker.py +616 -0
- ksadk/resource_runtime/build_artifacts.py +165 -0
- ksadk/resource_runtime/contracts.py +138 -0
- ksadk/resource_runtime/discovery_receipts.py +100 -0
- ksadk/resource_runtime/discovery_skills.py +172 -0
- ksadk/resource_runtime/errors.py +6 -0
- ksadk/resource_runtime/ipc.py +142 -0
- ksadk/resource_runtime/kernel_approval.py +165 -0
- ksadk/resource_runtime/knowledge.py +114 -0
- ksadk/resource_runtime/langgraph.py +94 -0
- ksadk/resource_runtime/leases.py +191 -0
- ksadk/resource_runtime/managed_projection.py +186 -0
- ksadk/resource_runtime/mcp_server.py +138 -0
- ksadk/resource_runtime/memory_provider.py +318 -0
- ksadk/resource_runtime/memory_receipts.py +34 -0
- ksadk/resource_runtime/operation_ledger.py +211 -0
- ksadk/resource_runtime/plugin_config.py +48 -0
- ksadk/resource_runtime/policy_authorization.py +54 -0
- ksadk/resource_runtime/process.py +110 -0
- ksadk/resource_runtime/skill_artifacts.py +153 -0
- ksadk/resource_runtime/skill_runtime.py +42 -0
- ksadk/resource_runtime/skill_workspace.py +118 -0
- ksadk/resource_runtime/skills.py +215 -0
- ksadk/resource_runtime/snapshots.py +180 -0
- ksadk/resource_runtime/socket_server.py +103 -0
- ksadk/resource_runtime/supervisor.py +380 -0
- ksadk/resource_runtime/worker.py +504 -0
- ksadk/runners/_langgraph_runner_streams.py +182 -38
- ksadk/runners/_langgraph_state_reader.py +106 -0
- ksadk/runners/_session_identity.py +285 -0
- ksadk/runners/adk_runner.py +166 -63
- ksadk/runners/base_runner.py +29 -1
- ksadk/runners/langgraph_runner.py +542 -195
- ksadk/runners/patch_langchain.py +47 -0
- ksadk/runners/usage_accumulator.py +11 -3
- ksadk/runtime/_runner_adapter/stream_mapping.py +194 -20
- ksadk/runtime/adapter.py +2 -0
- ksadk/runtime/conversation_execution.py +117 -17
- ksadk/runtime/executor.py +87 -3
- ksadk/runtime/factory.py +65 -274
- ksadk/runtime/framework_adapters.py +23 -0
- ksadk/runtime/preprocessing.py +21 -5
- ksadk/runtime/runner_adapter.py +106 -18
- ksadk/runtime/skill_eval_result.py +36 -0
- ksadk/runtime/timing.py +46 -0
- ksadk/runtime/usage.py +49 -18
- ksadk/runtime_context.py +142 -2
- ksadk/sandbox/backends/e2b.py +288 -25
- ksadk/sandbox/backends/local_process.py +72 -39
- ksadk/sandbox/base.py +64 -1
- ksadk/sandbox/diagnostics.py +82 -0
- ksadk/sandbox/e2b_connection.py +66 -0
- ksadk/sandbox/local_controls.py +746 -0
- ksadk/sandbox/local_launcher.py +90 -0
- ksadk/scheduler/dispatcher.py +1 -1
- ksadk/scheduler/sqlite_store.py +18 -0
- ksadk/server/composition.py +2 -0
- ksadk/server/factory.py +5 -0
- ksadk/server/invocation_identity.py +118 -0
- ksadk/server/persistence_capability.py +516 -0
- ksadk/server/routes/common.py +32 -3
- ksadk/server/routes/control.py +271 -52
- ksadk/server/routes/dependencies.py +16 -0
- ksadk/server/routes/kernel_ingress.py +9 -1
- ksadk/server/routes/misc.py +233 -25
- ksadk/server/routes/models.py +47 -4
- ksadk/server/routes/openai_compat.py +76 -13
- ksadk/server/routes/projection.py +252 -12
- ksadk/server/routes/run.py +106 -35
- ksadk/server/routes/sessions.py +491 -138
- ksadk/server/routes/streaming.py +43 -9
- ksadk/server/routes/workspace.py +130 -21
- ksadk/server/static/assets/{ArtifactsPanel-10GPXIJ6.js → ArtifactsPanel-C1YoaKhx.js} +1 -1
- ksadk/server/static/assets/{CodeBlock-BXk1l-G1.js → CodeBlock-DHuAWfr5.js} +10 -7
- ksadk/server/static/assets/MathMessageMarkdown-cvdrBwYr.js +8 -0
- ksadk/server/static/assets/{MermaidBlock--OEYoXIJ.js → MermaidBlock-DeBkbJvI.js} +9 -9
- ksadk/server/static/assets/{NativeTerminalPanel-DrEe1syq.js → NativeTerminalPanel-oJj44_sV.js} +1 -1
- ksadk/server/static/assets/{abnfDiagram-VCTEODGH-eeTFJLvo.js → abnfDiagram-VCTEODGH-Dhfv25o2.js} +1 -1
- ksadk/server/static/assets/{arc-S3ZNbIAd.js → arc-C35w-pn1.js} +1 -1
- ksadk/server/static/assets/architecture-7GRP2DOG-BCsa26zi.js +1 -0
- ksadk/server/static/assets/{architectureDiagram-5GKGNRK7-CRjgEJDX.js → architectureDiagram-5GKGNRK7-FoMY_u6D.js} +1 -1
- ksadk/server/static/assets/{blockDiagram-NRAW4CY4-C7bsBoNH.js → blockDiagram-NRAW4CY4-zD4Rt7oE.js} +1 -1
- ksadk/server/static/assets/{c4Diagram-UCG6FXSJ-BX3c33Ob.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-bZ7ws-8m.js → chunk-5VM5RSS4-C2Ms13_k.js} +1 -1
- ksadk/server/static/assets/{chunk-F27PBJKO-D2r0pvhY.js → chunk-F27PBJKO-BoTj-qgx.js} +1 -1
- ksadk/server/static/assets/{chunk-G27WJ6UU-CZwF3oUP.js → chunk-G27WJ6UU-DOMyyjHH.js} +1 -1
- ksadk/server/static/assets/{chunk-JWPE2WC7-DigFYCML.js → chunk-JWPE2WC7-DbJJqDli.js} +1 -1
- ksadk/server/static/assets/{chunk-LCL6LL3I-CnorGV5q.js → chunk-LCL6LL3I-CLuRCt_W.js} +1 -1
- ksadk/server/static/assets/{chunk-POPQ4Y6H-CexntQA-.js → chunk-POPQ4Y6H-D0Dz847e.js} +1 -1
- ksadk/server/static/assets/{chunk-RHFEMEQ7-CHTC7UxA.js → chunk-RHFEMEQ7-BWSRzEcd.js} +1 -1
- ksadk/server/static/assets/{chunk-SVP7TREG-BC1EWt_-.js → chunk-SVP7TREG-CPoHqkCY.js} +1 -1
- ksadk/server/static/assets/{chunk-XXDRQBXY-BTG24xN0.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-CkonRdAS.js → cose-bilkent-JH36ORCC-LzyWm4m0.js} +1 -1
- ksadk/server/static/assets/cynefin-OW5HDTMX-CNXjFctL.js +1 -0
- ksadk/server/static/assets/{cynefinDiagram-5FMLGOSQ-DEOCBe15.js → cynefinDiagram-5FMLGOSQ-BlW_bHED.js} +1 -1
- ksadk/server/static/assets/{dagre-3AP2YEHR-DBThPuLa.js → dagre-3AP2YEHR-Bu_S86_i.js} +1 -1
- ksadk/server/static/assets/{dagre-ClTPrTht.js → dagre-B7nCawed.js} +1 -1
- ksadk/server/static/assets/{diagram-S7CK7UJ4-DsZHrnpJ.js → diagram-S7CK7UJ4-W_Zow2Km.js} +1 -1
- ksadk/server/static/assets/{diagram-UQ7AKVKN-BJR4nhVr.js → diagram-UQ7AKVKN-CLIKAHON.js} +1 -1
- ksadk/server/static/assets/{diagram-VSXAHHWV-xzcERX0a.js → diagram-VSXAHHWV-Dv6_QAlN.js} +1 -1
- ksadk/server/static/assets/{diagram-VX7I27RA-tn2xM1xu.js → diagram-VX7I27RA-BWAWRDtZ.js} +1 -1
- ksadk/server/static/assets/{diagram-Z3DM3KII-BZPGBkw5.js → diagram-Z3DM3KII-XA_rWMss.js} +1 -1
- ksadk/server/static/assets/dist-0X_j2Rcc.js +1 -0
- ksadk/server/static/assets/{dist-4zN1_tq5.js → dist-1nXCdsej.js} +1 -1
- ksadk/server/static/assets/{dist-M67Hwu0n.js → dist-2vL2sAdF.js} +1 -1
- ksadk/server/static/assets/{dist-BJLUwH6W.js → dist-B3bA05-e.js} +1 -1
- ksadk/server/static/assets/{dist-8VWI-2bZ.js → dist-BLpRy_Yx.js} +1 -1
- ksadk/server/static/assets/{dist-D1V3f1B4.js → dist-BO_UwatH.js} +1 -1
- ksadk/server/static/assets/{dist-Cq4OL6nO.js → dist-BdNFAney.js} +1 -1
- ksadk/server/static/assets/{dist-DfGFrb0v.js → dist-C0J5_3qM.js} +1 -1
- ksadk/server/static/assets/{dist-DyqV4fL4.js → dist-CGt_UGeO.js} +1 -1
- ksadk/server/static/assets/{dist-DjhwGUgZ.js → dist-CIRMvUM4.js} +1 -1
- ksadk/server/static/assets/{dist-B1oWRmrH.js → dist-CIpWk_5f.js} +1 -1
- ksadk/server/static/assets/{dist-CXpH_Rdd.js → dist-CPyieXEf.js} +1 -1
- ksadk/server/static/assets/{dist-Btyo4vX4.js → dist-D-92S-Fd.js} +1 -1
- ksadk/server/static/assets/{dist-u8tVH5Ak.js → dist-DNKuMzWc.js} +1 -1
- ksadk/server/static/assets/{dist-DQAB0qn_.js → dist-DWfdmz9s.js} +2 -2
- ksadk/server/static/assets/{dist-B-46q3Hk.js → dist-DppE_r-D.js} +1 -1
- ksadk/server/static/assets/{dist-C71CsujO.js → dist-DyG6Ya-z.js} +1 -1
- ksadk/server/static/assets/{dist-DJmCPRVB.js → dist-M-SrdhhZ.js} +1 -1
- ksadk/server/static/assets/{dist-Bbwqa8TG.js → dist-mqD5TZup.js} +1 -1
- ksadk/server/static/assets/{dist-BI1qQH4n.js → dist-n3n6t_FO.js} +1 -1
- ksadk/server/static/assets/{dist-DUwKa_l6.js → dist-qe8xjesy.js} +1 -1
- ksadk/server/static/assets/{dist-B0gdk4rl.js → dist-t6MzE0jU.js} +1 -1
- ksadk/server/static/assets/{ebnfDiagram-PWID7BFC-DVfMsLge.js → ebnfDiagram-PWID7BFC-BfCzF1Xi.js} +1 -1
- ksadk/server/static/assets/{erDiagram-SSCWMZ5O-CWEZSYaw.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-TWIxoyYL.js → ganttDiagram-EL5Y4UJY-DDaG1f4_.js} +1 -1
- ksadk/server/static/assets/gitGraph-4MIJSDKK-B-AhYj4C.js +1 -0
- ksadk/server/static/assets/{gitGraphDiagram-WWUBYQGX-DDh2hd2S.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-CgoyWiDR.js → infoDiagram-RXCK75RN-CYMdn6lQ.js} +1 -1
- ksadk/server/static/assets/{ishikawaDiagram-5VMMS53U-CyRIu_om.js → ishikawaDiagram-5VMMS53U-CLHFAD6c.js} +1 -1
- ksadk/server/static/assets/{journeyDiagram-EYS64GPL-DN5JXHzN.js → journeyDiagram-EYS64GPL-BHSKQGAl.js} +1 -1
- ksadk/server/static/assets/{kanban-definition-3QL26DDD-CNP3ui66.js → kanban-definition-3QL26DDD-D5W3tjTT.js} +1 -1
- ksadk/server/static/assets/{katex-DWEzQy1d.js → katex-mtjOi4KM.js} +1 -1
- ksadk/server/static/assets/{linear-C-qHp7d2.js → linear-BETqsxE_.js} +1 -1
- ksadk/server/static/assets/{mermaid-parser.core-Cl-K943T.js → mermaid-parser.core-DPWrvs90.js} +2 -2
- ksadk/server/static/assets/{mindmap-definition-FBJOCRG2-D5DB5mYm.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-BQVc9ia_.js → pegDiagram-XKGWAZYB-GjAPNaqn.js} +1 -1
- ksadk/server/static/assets/pie-WAS4IAKB-DyfxBU7V.js +1 -0
- ksadk/server/static/assets/{pieDiagram-E7YTZNPT-B6UCAvtY.js → pieDiagram-E7YTZNPT-ToIewrqr.js} +1 -1
- ksadk/server/static/assets/{quadrantDiagram-AXDQQJYC-mIr2d3eb.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-Dt3FFDmK.js → railroadDiagram-O6MQD6OU-DKzx4xfv.js} +1 -1
- ksadk/server/static/assets/{requirementDiagram-EFPCY7ZU-Cz_vQtgF.js → requirementDiagram-EFPCY7ZU-CJYljxQS.js} +1 -1
- ksadk/server/static/assets/{sankeyDiagram-P5KCCOFB-wlO1TsH5.js → sankeyDiagram-P5KCCOFB-DLU2fV1w.js} +1 -1
- ksadk/server/static/assets/{sequenceDiagram-WJ2MYXX4-CHRbElYq.js → sequenceDiagram-WJ2MYXX4-CVqysrA9.js} +1 -1
- ksadk/server/static/assets/{sizeCapture-X5ZJPWSS-DXX54iyO.js → sizeCapture-X5ZJPWSS-BUxfmTHc.js} +1 -1
- ksadk/server/static/assets/{stateDiagram-HBIQ2CUA-Dp_lw9II.js → stateDiagram-HBIQ2CUA-CNFgYI9E.js} +1 -1
- ksadk/server/static/assets/stateDiagram-v2-4QOOHH4V-BXAFScz8.js +1 -0
- ksadk/server/static/assets/{swimlanes-XN3QIQJK-D8O5UlLG.js → swimlanes-XN3QIQJK-B6qCMe8N.js} +1 -1
- ksadk/server/static/assets/swimlanesDiagram-VK2B7HYN-uIQ2lJKH.js +8 -0
- ksadk/server/static/assets/{timeline-definition-24CTP7MA-8mfKcxvG.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-EnNl0DE7.js → vennDiagram-4TSXK5OY-BqtUqvXM.js} +1 -1
- ksadk/server/static/assets/wardley-WFR3VGLG-QAt06uEz.js +1 -0
- ksadk/server/static/assets/{wardleyDiagram-VM6X3IG4-DBu5fbYr.js → wardleyDiagram-VM6X3IG4-B5KfDjI-.js} +1 -1
- ksadk/server/static/assets/{xychartDiagram-S5SC5T6Z-BSVXs4IY.js → xychartDiagram-S5SC5T6Z-BaUlSZrn.js} +1 -1
- ksadk/server/static/index.html +2 -2
- ksadk/server/terminal_sessions.py +34 -2
- ksadk/session_context.py +66 -0
- ksadk/sessions/__init__.py +11 -21
- ksadk/sessions/_local_service_sync.py +263 -1
- ksadk/sessions/base.py +176 -0
- ksadk/sessions/errors.py +4 -0
- ksadk/sessions/in_memory.py +309 -19
- ksadk/sessions/invocation_identity.py +235 -0
- ksadk/sessions/local_service.py +83 -1
- ksadk/sessions/persistence.py +275 -0
- ksadk/sessions/postgres_service.py +358 -0
- ksadk/sessions/resilience.py +8 -0
- ksadk/sessions/resilient.py +362 -4
- ksadk/sessions/topology.py +135 -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 +37 -4
- ksadk/skills/observability.py +132 -0
- ksadk/skills/package_store.py +261 -40
- ksadk/skills/runtime/agent.py +67 -9
- ksadk/skills/runtime/artifact_delivery.py +139 -0
- ksadk/skills/runtime/artifacts.py +87 -0
- ksadk/skills/runtime/backends/e2b.py +460 -27
- ksadk/skills/runtime/backends/local.py +629 -62
- ksadk/skills/runtime/base.py +81 -7
- ksadk/skills/runtime/executor.py +268 -1
- ksadk/skills/runtime/loader.py +118 -5
- ksadk/skills/runtime/pinned.py +114 -0
- ksadk/skills/runtime/request.py +49 -0
- ksadk/skills/service_client.py +167 -28
- ksadk/skills/tool_defs.py +108 -3
- ksadk/studio/api.py +810 -93
- ksadk/studio/api_catalog_routes.py +18 -0
- ksadk/studio/api_contracts.py +8 -2
- ksadk/studio/api_plugin_routes.py +562 -104
- ksadk/studio/api_resource_connections.py +221 -0
- ksadk/studio/authoring.py +12 -6
- ksadk/studio/authoring_coordinator.py +23 -16
- ksadk/studio/builder.py +88 -0
- ksadk/studio/capabilities.py +23 -6
- ksadk/studio/channel_connections.py +333 -0
- ksadk/studio/cloud.py +370 -112
- ksadk/studio/cloud_shared_web.py +638 -0
- ksadk/studio/codex_agent_service.py +130 -28
- ksadk/studio/codex_builder.py +242 -3
- ksadk/studio/codex_credentials.py +90 -0
- ksadk/studio/codex_manifest.py +31 -4
- ksadk/studio/codex_plugin_store.py +746 -0
- ksadk/studio/codex_provider_build.py +231 -0
- ksadk/studio/codex_run.py +190 -26
- ksadk/studio/compatibility_report.py +12 -1
- ksadk/studio/compiler.py +88 -14
- ksadk/studio/configuration.py +182 -0
- ksadk/studio/contracts.py +165 -11
- ksadk/studio/dsh_application.py +247 -0
- ksadk/studio/dsh_capability_service.py +1374 -0
- ksadk/studio/dsh_lifecycle.py +58 -0
- ksadk/studio/dsh_models.py +59 -0
- ksadk/studio/dsh_provider_registration.py +367 -21
- 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 +89 -14
- ksadk/studio/kernel_registry.py +418 -0
- ksadk/studio/kernel_sqlite_migration.py +181 -0
- ksadk/studio/mcp_runtime.py +11 -3
- ksadk/studio/model_client.py +1180 -66
- ksadk/studio/model_profile_service.py +26 -11
- ksadk/studio/native_documents.py +172 -0
- ksadk/studio/plugin_composition.py +202 -24
- ksadk/studio/plugin_kernel_adapter.py +21 -106
- ksadk/studio/plugin_lifecycle.py +80 -0
- ksadk/studio/plugin_runtime.py +448 -56
- ksadk/studio/provider_recovery.py +59 -0
- ksadk/studio/recovery_page.py +70 -0
- ksadk/studio/resource_authority.py +664 -0
- ksadk/studio/resource_binding_validation.py +77 -0
- ksadk/studio/resource_build_admission.py +196 -0
- ksadk/studio/resource_build_materializer.py +149 -0
- ksadk/studio/resource_catalog.py +149 -2
- ksadk/studio/resource_connections.py +220 -0
- ksadk/studio/run_activity.py +895 -0
- ksadk/studio/run_documents.py +127 -0
- ksadk/studio/run_service.py +789 -83
- ksadk/studio/runtime_catalog.py +53 -10
- ksadk/studio/runtime_source.py +16 -8
- ksadk/studio/scheduler_assistant.py +317 -0
- ksadk/studio/scheduler_runtime.py +32 -280
- ksadk/studio/scheduler_service.py +3 -0
- ksadk/studio/service.py +861 -120
- ksadk/studio/shared_web.py +579 -82
- 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/KaTeX_AMS-Regular-BQhdFMY1.woff2 +0 -0
- ksadk/studio/static/assets/KaTeX_AMS-Regular-DMm9YOAa.woff +0 -0
- ksadk/studio/static/assets/KaTeX_AMS-Regular-DRggAlZN.ttf +0 -0
- ksadk/studio/static/assets/KaTeX_Caligraphic-Bold-ATXxdsX0.ttf +0 -0
- ksadk/studio/static/assets/KaTeX_Caligraphic-Bold-BEiXGLvX.woff +0 -0
- ksadk/studio/static/assets/KaTeX_Caligraphic-Bold-Dq_IR9rO.woff2 +0 -0
- ksadk/studio/static/assets/KaTeX_Caligraphic-Regular-CTRA-rTL.woff +0 -0
- ksadk/studio/static/assets/KaTeX_Caligraphic-Regular-Di6jR-x-.woff2 +0 -0
- ksadk/studio/static/assets/KaTeX_Caligraphic-Regular-wX97UBjC.ttf +0 -0
- ksadk/studio/static/assets/KaTeX_Fraktur-Bold-BdnERNNW.ttf +0 -0
- ksadk/studio/static/assets/KaTeX_Fraktur-Bold-BsDP51OF.woff +0 -0
- ksadk/studio/static/assets/KaTeX_Fraktur-Bold-CL6g_b3V.woff2 +0 -0
- ksadk/studio/static/assets/KaTeX_Fraktur-Regular-CB_wures.ttf +0 -0
- ksadk/studio/static/assets/KaTeX_Fraktur-Regular-CTYiF6lA.woff2 +0 -0
- ksadk/studio/static/assets/KaTeX_Fraktur-Regular-Dxdc4cR9.woff +0 -0
- ksadk/studio/static/assets/KaTeX_Main-Bold-Cx986IdX.woff2 +0 -0
- ksadk/studio/static/assets/KaTeX_Main-Bold-Jm3AIy58.woff +0 -0
- ksadk/studio/static/assets/KaTeX_Main-Bold-waoOVXN0.ttf +0 -0
- ksadk/studio/static/assets/KaTeX_Main-BoldItalic-DxDJ3AOS.woff2 +0 -0
- ksadk/studio/static/assets/KaTeX_Main-BoldItalic-DzxPMmG6.ttf +0 -0
- ksadk/studio/static/assets/KaTeX_Main-BoldItalic-SpSLRI95.woff +0 -0
- ksadk/studio/static/assets/KaTeX_Main-Italic-3WenGoN9.ttf +0 -0
- ksadk/studio/static/assets/KaTeX_Main-Italic-BMLOBm91.woff +0 -0
- ksadk/studio/static/assets/KaTeX_Main-Italic-NWA7e6Wa.woff2 +0 -0
- ksadk/studio/static/assets/KaTeX_Main-Regular-B22Nviop.woff2 +0 -0
- ksadk/studio/static/assets/KaTeX_Main-Regular-Dr94JaBh.woff +0 -0
- ksadk/studio/static/assets/KaTeX_Main-Regular-ypZvNtVU.ttf +0 -0
- ksadk/studio/static/assets/KaTeX_Math-BoldItalic-B3XSjfu4.ttf +0 -0
- ksadk/studio/static/assets/KaTeX_Math-BoldItalic-CZnvNsCZ.woff2 +0 -0
- ksadk/studio/static/assets/KaTeX_Math-BoldItalic-iY-2wyZ7.woff +0 -0
- ksadk/studio/static/assets/KaTeX_Math-Italic-DA0__PXp.woff +0 -0
- ksadk/studio/static/assets/KaTeX_Math-Italic-flOr_0UB.ttf +0 -0
- ksadk/studio/static/assets/KaTeX_Math-Italic-t53AETM-.woff2 +0 -0
- ksadk/studio/static/assets/KaTeX_SansSerif-Bold-CFMepnvq.ttf +0 -0
- ksadk/studio/static/assets/KaTeX_SansSerif-Bold-D1sUS0GD.woff2 +0 -0
- ksadk/studio/static/assets/KaTeX_SansSerif-Bold-DbIhKOiC.woff +0 -0
- ksadk/studio/static/assets/KaTeX_SansSerif-Italic-C3H0VqGB.woff2 +0 -0
- ksadk/studio/static/assets/KaTeX_SansSerif-Italic-DN2j7dab.woff +0 -0
- ksadk/studio/static/assets/KaTeX_SansSerif-Italic-YYjJ1zSn.ttf +0 -0
- ksadk/studio/static/assets/KaTeX_SansSerif-Regular-BNo7hRIc.ttf +0 -0
- ksadk/studio/static/assets/KaTeX_SansSerif-Regular-CS6fqUqJ.woff +0 -0
- ksadk/studio/static/assets/KaTeX_SansSerif-Regular-DDBCnlJ7.woff2 +0 -0
- ksadk/studio/static/assets/KaTeX_Script-Regular-C5JkGWo-.ttf +0 -0
- ksadk/studio/static/assets/KaTeX_Script-Regular-D3wIWfF6.woff2 +0 -0
- ksadk/studio/static/assets/KaTeX_Script-Regular-D5yQViql.woff +0 -0
- ksadk/studio/static/assets/KaTeX_Size1-Regular-C195tn64.woff +0 -0
- ksadk/studio/static/assets/KaTeX_Size1-Regular-Dbsnue_I.ttf +0 -0
- ksadk/studio/static/assets/KaTeX_Size1-Regular-mCD8mA8B.woff2 +0 -0
- ksadk/studio/static/assets/KaTeX_Size2-Regular-B7gKUWhC.ttf +0 -0
- ksadk/studio/static/assets/KaTeX_Size2-Regular-Dy4dx90m.woff2 +0 -0
- ksadk/studio/static/assets/KaTeX_Size2-Regular-oD1tc_U0.woff +0 -0
- ksadk/studio/static/assets/KaTeX_Size3-Regular-CTq5MqoE.woff +0 -0
- ksadk/studio/static/assets/KaTeX_Size3-Regular-DgpXs0kz.ttf +0 -0
- ksadk/studio/static/assets/KaTeX_Size4-Regular-BF-4gkZK.woff +0 -0
- ksadk/studio/static/assets/KaTeX_Size4-Regular-DWFBv043.ttf +0 -0
- ksadk/studio/static/assets/KaTeX_Size4-Regular-Dl5lxZxV.woff2 +0 -0
- ksadk/studio/static/assets/KaTeX_Typewriter-Regular-C0xS9mPB.woff +0 -0
- ksadk/studio/static/assets/KaTeX_Typewriter-Regular-CO6r4hn1.woff2 +0 -0
- ksadk/studio/static/assets/KaTeX_Typewriter-Regular-D3Ib7_Hf.ttf +0 -0
- ksadk/studio/static/assets/MathMessageMarkdown-BesSeCYl-BEOyPC3w.css +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/arc-Pry-7G1_.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/array-BifhSqXX.js +1 -0
- ksadk/studio/static/assets/blockDiagram-I7D4REHJ-CLB4L11u.js +129 -0
- ksadk/studio/static/assets/c4Diagram-7LVT6UL2-BOma_Z_F.js +38 -0
- 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-2Q5K7J3B-C1jixKkw.js +1 -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-DVtDP4rm.js +62 -0
- ksadk/studio/static/assets/chunk-5V3GS4D5-i-ZDOEnP.js +1 -0
- ksadk/studio/static/assets/chunk-5VM5RSS4-ZNzvKenW.js +15 -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-CpEZCUgg.js +128 -0
- ksadk/studio/static/assets/chunk-F27PBJKO-D7pvKf0C.js +1 -0
- ksadk/studio/static/assets/chunk-FOHPRMQF-DHwB1DNv.js +161 -0
- ksadk/studio/static/assets/chunk-GMAD6QVW-DE_8H717.js +72 -0
- 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-D38axYOR.js +231 -0
- ksadk/studio/static/assets/chunk-JWPE2WC7-DVXcaiue.js +1 -0
- 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-DiCQjx9b.js +10 -0
- ksadk/studio/static/assets/chunk-OUJLGHUK-D0j2JRSg.js +2 -0
- ksadk/studio/static/assets/chunk-P2QGCYS3-VdhKmfYq.js +1 -0
- 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-DsCFnRVE.js +168 -0
- ksadk/studio/static/assets/chunk-SVP7TREG-DljApgRX.js +88 -0
- ksadk/studio/static/assets/chunk-TICWLB2K-DWqRtyqa.js +206 -0
- 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/chunk-Y2CYZVJY-DsF7k-Jl.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/cytoscape.esm-CGd-uY3x.js +321 -0
- ksadk/studio/static/assets/dagre-GXQ25YYZ-buZBRlwz.js +4 -0
- ksadk/studio/static/assets/dagre-PrKaheQc.js +1 -0
- ksadk/studio/static/assets/defaultLocale-BFoDCU3G.js +1 -0
- ksadk/studio/static/assets/diagram-S7CK7UJ4-C6aH78c4.js +30 -0
- 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/dist-v5Q1xZ2K.js +1 -0
- ksadk/studio/static/assets/ebnfDiagram-PWID7BFC-Daukxwqf.js +1 -0
- ksadk/studio/static/assets/erDiagram-RLTQ6QDP-CGthTMmJ.js +99 -0
- 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/graphlib-DS17s2tU.js +1 -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/init-C-OQMol4.js +1 -0
- ksadk/studio/static/assets/ishikawaDiagram-5VMMS53U-BUGEl8cO.js +70 -0
- ksadk/studio/static/assets/journeyDiagram-3NMN7TZE-Ch2ZYxvr.js +139 -0
- ksadk/studio/static/assets/kanban-definition-UXKFOSKX-Da-Fp4vC.js +89 -0
- ksadk/studio/static/assets/katex-DhON-x74.js +257 -0
- ksadk/studio/static/assets/kingsoft-cloud-BOcLiQ3e.ico +0 -0
- ksadk/studio/static/assets/line-BDaeq300.js +1 -0
- 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-CvlsVQ38.js +96 -0
- ksadk/studio/static/assets/ordinal-BDEzSJ7C.js +1 -0
- ksadk/studio/static/assets/packet-AYTQ26CC-BSJEH9Lb.js +1 -0
- ksadk/studio/static/assets/path-fybaL0A-.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-DlrWiSOv.js +39 -0
- 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-BA3hpUZM.js +7 -0
- 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-E-Ge0FcV.js +84 -0
- ksadk/studio/static/assets/rolldown-runtime-Dy4uBu1J-DK3Fl9T5.js +1 -0
- ksadk/studio/static/assets/rough.esm-Dy-Kn_BL.js +1 -0
- ksadk/studio/static/assets/sankeyDiagram-P5KCCOFB-CA6YKhQ3.js +40 -0
- ksadk/studio/static/assets/sequenceDiagram-WJ2MYXX4-CcElXGg4.js +162 -0
- ksadk/studio/static/assets/sizeCapture-INFHLROL-B0uUizjq.js +1 -0
- 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-CIuYhNy3.js +120 -0
- 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-CMJiaedy.js +78 -0
- ksadk/studio/static/assets/xychartDiagram-S5SC5T6Z-BdgtMvW2.js +7 -0
- 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
- agentengine_sdk_python-0.8.3.dist-info/RECORD +0 -833
- ksadk/server/static/assets/MathMessageMarkdown-D9uB55Oh.js +0 -8
- ksadk/server/static/assets/architecture-7GRP2DOG-Dk9nRQ6-.js +0 -1
- ksadk/server/static/assets/channel-s354Yo6o.js +0 -1
- ksadk/server/static/assets/chunk-2Q5K7J3B-CDpPpKR5.js +0 -1
- ksadk/server/static/assets/classDiagram-DTDB5LWJ-Dd0nucl9.js +0 -1
- ksadk/server/static/assets/classDiagram-v2-JRS7N3AN-Dd0nucl9.js +0 -1
- ksadk/server/static/assets/cynefin-OW5HDTMX-BBlT4uMf.js +0 -1
- ksadk/server/static/assets/dist-DdRBIceA.js +0 -1
- ksadk/server/static/assets/eventmodeling-NTZA5JFV-Dr5okd8V.js +0 -1
- ksadk/server/static/assets/flowDiagram-A5DVABFB-VEO-cVcO.js +0 -1
- ksadk/server/static/assets/gitGraph-4MIJSDKK-CKiKY9Cf.js +0 -1
- ksadk/server/static/assets/index-B2k_urY8.js +0 -241
- ksadk/server/static/assets/index-ILPt6IWF.css +0 -2
- ksadk/server/static/assets/info-A6RAGUB7-ubA4Nm_p.js +0 -1
- ksadk/server/static/assets/packet-AYTQ26CC-C7R3NUlK.js +0 -1
- ksadk/server/static/assets/pie-WAS4IAKB-BIT6qjr3.js +0 -1
- ksadk/server/static/assets/radar-RG4KPBEZ-l5noef9X.js +0 -1
- ksadk/server/static/assets/railroad-74A4TZTK-Baea6ZvM.js +0 -1
- ksadk/server/static/assets/railroad-abnf-HS5TGJTU-OKn8zZnU.js +0 -1
- ksadk/server/static/assets/railroad-ebnf-LZEXJU2U-DdKAKC4l.js +0 -1
- ksadk/server/static/assets/railroad-peg-WCYAUIDC-Bds8udlG.js +0 -1
- ksadk/server/static/assets/stateDiagram-v2-4QOOHH4V-5b-8o2iS.js +0 -1
- ksadk/server/static/assets/swimlanesDiagram-VK2B7HYN-uf6WPRA4.js +0 -8
- ksadk/server/static/assets/treeView-Q6P3EWNA-CK5CSrSO.js +0 -1
- ksadk/server/static/assets/treemap-WGGIJYW6-Ch2BKgAM.js +0 -1
- ksadk/server/static/assets/wardley-WFR3VGLG-YW3Q0ml_.js +0 -1
- ksadk/studio/static/assets/PrismRenderer-IYN-ffww.js +0 -3
- ksadk/studio/static/assets/index-DXs1Eq4M.css +0 -1
- ksadk/studio/static/assets/index-DeDqwTsD.js +0 -283
- {agentengine_sdk_python-0.8.3.dist-info → agentengine_sdk_python-0.8.5.dist-info}/WHEEL +0 -0
- {agentengine_sdk_python-0.8.3.dist-info → agentengine_sdk_python-0.8.5.dist-info}/entry_points.txt +0 -0
- {agentengine_sdk_python-0.8.3.dist-info → agentengine_sdk_python-0.8.5.dist-info}/licenses/LICENSE +0 -0
- {agentengine_sdk_python-0.8.3.dist-info → agentengine_sdk_python-0.8.5.dist-info}/top_level.txt +0 -0
|
@@ -6,10 +6,13 @@ delegates every turn to ``HarnessRuntimeAdapter`` through
|
|
|
6
6
|
history therefore stay on the existing conversation pipeline; this module does
|
|
7
7
|
not create another event stream or transcript store.
|
|
8
8
|
"""
|
|
9
|
+
|
|
9
10
|
from __future__ import annotations
|
|
10
11
|
|
|
12
|
+
import asyncio
|
|
11
13
|
import json
|
|
12
|
-
from collections.abc import Mapping, Sequence
|
|
14
|
+
from collections.abc import Awaitable, Mapping, Sequence
|
|
15
|
+
from contextlib import AsyncExitStack
|
|
13
16
|
from dataclasses import dataclass, replace
|
|
14
17
|
from pathlib import Path
|
|
15
18
|
from typing import Any, Protocol, cast, runtime_checkable
|
|
@@ -20,7 +23,15 @@ from ksadk.harness.runtime import HarnessRuntimeAdapter
|
|
|
20
23
|
from ksadk.plugins.bundle import ResolvedPluginBundle
|
|
21
24
|
from ksadk.plugins.contracts import CompositionProfile, PluginManifest
|
|
22
25
|
from ksadk.plugins.host import PluginExecutionContext, PluginHostError
|
|
23
|
-
from ksadk.
|
|
26
|
+
from ksadk.plugins.providers.mcp_projection import project_mcp_capabilities
|
|
27
|
+
from ksadk.runtime import (
|
|
28
|
+
CONVERSATION_PREPROCESSING_METADATA_KEY,
|
|
29
|
+
RuntimeAdapter,
|
|
30
|
+
RuntimeExecutor,
|
|
31
|
+
RuntimeLaunchContext,
|
|
32
|
+
RuntimeRegistry,
|
|
33
|
+
StartRequest,
|
|
34
|
+
)
|
|
24
35
|
from ksadk.runtime.conversation_execution import invoke_runtime_conversation_once
|
|
25
36
|
from ksadk.sessions import create_session_service
|
|
26
37
|
from ksadk.sessions.base import BaseSessionService
|
|
@@ -32,6 +43,7 @@ _HISTORY_ENVELOPE_PREFIX = "agentkit.conversation-history/v1:"
|
|
|
32
43
|
class HarnessSkillContribution:
|
|
33
44
|
name: str
|
|
34
45
|
instructions: str
|
|
46
|
+
resource_root: Path | None = None
|
|
35
47
|
|
|
36
48
|
|
|
37
49
|
@dataclass(frozen=True)
|
|
@@ -59,23 +71,15 @@ class HarnessTurnRequest:
|
|
|
59
71
|
if isinstance(value, cls):
|
|
60
72
|
return value
|
|
61
73
|
if not isinstance(value, Mapping):
|
|
62
|
-
raise PluginHostError(
|
|
63
|
-
"harness_input_invalid", "Harness input must be an object"
|
|
64
|
-
)
|
|
74
|
+
raise PluginHostError("harness_input_invalid", "Harness input must be an object")
|
|
65
75
|
user_id = str(value.get("user_id") or value.get("userId") or "").strip()
|
|
66
76
|
if not user_id:
|
|
67
|
-
raise PluginHostError(
|
|
68
|
-
"harness_input_invalid", "Harness input requires user_id"
|
|
69
|
-
)
|
|
77
|
+
raise PluginHostError("harness_input_invalid", "Harness input requires user_id")
|
|
70
78
|
raw_messages = value.get("messages")
|
|
71
79
|
if raw_messages is None and value.get("input") is not None:
|
|
72
80
|
raw_messages = [{"role": "user", "content": value.get("input")}]
|
|
73
|
-
if not isinstance(raw_messages, Sequence) or isinstance(
|
|
74
|
-
|
|
75
|
-
):
|
|
76
|
-
raise PluginHostError(
|
|
77
|
-
"harness_input_invalid", "Harness input requires messages"
|
|
78
|
-
)
|
|
81
|
+
if not isinstance(raw_messages, Sequence) or isinstance(raw_messages, (str, bytes)):
|
|
82
|
+
raise PluginHostError("harness_input_invalid", "Harness input requires messages")
|
|
79
83
|
messages: list[Mapping[str, Any]] = []
|
|
80
84
|
for index, message in enumerate(raw_messages):
|
|
81
85
|
if not isinstance(message, Mapping):
|
|
@@ -94,24 +98,18 @@ class HarnessTurnRequest:
|
|
|
94
98
|
raise PluginHostError(
|
|
95
99
|
"harness_input_invalid", "Harness turn must end with a user message"
|
|
96
100
|
)
|
|
97
|
-
session_id = str(
|
|
98
|
-
value.get("session_id") or value.get("sessionId") or ""
|
|
99
|
-
).strip()
|
|
101
|
+
session_id = str(value.get("session_id") or value.get("sessionId") or "").strip()
|
|
100
102
|
model = str(value.get("model") or "").strip()
|
|
101
103
|
metadata = value.get("request_metadata") or value.get("requestMetadata")
|
|
102
104
|
if metadata is not None and not isinstance(metadata, Mapping):
|
|
103
|
-
raise PluginHostError(
|
|
104
|
-
"harness_input_invalid", "request_metadata must be an object"
|
|
105
|
-
)
|
|
105
|
+
raise PluginHostError("harness_input_invalid", "request_metadata must be an object")
|
|
106
106
|
return cls(
|
|
107
107
|
user_id=user_id,
|
|
108
108
|
session_id=session_id or None,
|
|
109
109
|
messages=tuple(messages),
|
|
110
110
|
model=model or None,
|
|
111
111
|
request_metadata=dict(metadata) if metadata is not None else None,
|
|
112
|
-
invocation_id=str(
|
|
113
|
-
value.get("invocation_id") or value.get("invocationId") or ""
|
|
114
|
-
).strip()
|
|
112
|
+
invocation_id=str(value.get("invocation_id") or value.get("invocationId") or "").strip()
|
|
115
113
|
or None,
|
|
116
114
|
)
|
|
117
115
|
|
|
@@ -129,14 +127,17 @@ class HarnessTurnResult:
|
|
|
129
127
|
class HarnessMCPSource(Protocol):
|
|
130
128
|
def harness_mcp_specs(
|
|
131
129
|
self, bundle: ResolvedPluginBundle
|
|
132
|
-
) -> Sequence[McpToolSpec]: ...
|
|
130
|
+
) -> Sequence[McpToolSpec] | Awaitable[Sequence[McpToolSpec]]: ...
|
|
131
|
+
|
|
132
|
+
|
|
133
|
+
@runtime_checkable
|
|
134
|
+
class HarnessMCPActivationSource(Protocol):
|
|
135
|
+
async def release_harness_mcp_specs(self, specs: Sequence[McpToolSpec]) -> None: ...
|
|
133
136
|
|
|
134
137
|
|
|
135
138
|
@runtime_checkable
|
|
136
139
|
class HarnessSkillSource(Protocol):
|
|
137
|
-
def harness_skill(
|
|
138
|
-
self, bundle: ResolvedPluginBundle
|
|
139
|
-
) -> HarnessSkillContribution: ...
|
|
140
|
+
def harness_skill(self, bundle: ResolvedPluginBundle) -> HarnessSkillContribution: ...
|
|
140
141
|
|
|
141
142
|
|
|
142
143
|
@runtime_checkable
|
|
@@ -157,6 +158,34 @@ class _ConversationHistoryReasoner:
|
|
|
157
158
|
|
|
158
159
|
def __init__(self, delegate: HarnessReasoner) -> None:
|
|
159
160
|
self._delegate = delegate
|
|
161
|
+
# graph_builder 以 engine._reasoner._streaming 决定是否走增量推理;
|
|
162
|
+
# 包装器必须透传该声明,否则 managed Harness 静默回退到整段
|
|
163
|
+
# complete(),前端看不到任何 TEXT_DELTA。
|
|
164
|
+
self._streaming = getattr(delegate, "_streaming", None) is True
|
|
165
|
+
|
|
166
|
+
@staticmethod
|
|
167
|
+
def _expand_messages(messages: Sequence[dict[str, Any]]) -> list[dict[str, Any]]:
|
|
168
|
+
"""Restore the canonical history envelope for either reasoner path.
|
|
169
|
+
|
|
170
|
+
The wrapper used to expand only ``complete``. That made the managed
|
|
171
|
+
Harness graph silently fall back to a buffered model call whenever
|
|
172
|
+
Studio enabled streaming, because the wrapper no longer exposed the
|
|
173
|
+
delegate's ``stream_complete`` method.
|
|
174
|
+
"""
|
|
175
|
+
expanded = list(messages)
|
|
176
|
+
if len(expanded) < 2:
|
|
177
|
+
return expanded
|
|
178
|
+
content = expanded[1].get("content")
|
|
179
|
+
if not isinstance(content, str) or not content.startswith(_HISTORY_ENVELOPE_PREFIX):
|
|
180
|
+
return expanded
|
|
181
|
+
raw = content.removeprefix(_HISTORY_ENVELOPE_PREFIX)
|
|
182
|
+
try:
|
|
183
|
+
history = json.loads(raw)
|
|
184
|
+
except json.JSONDecodeError as error:
|
|
185
|
+
raise RuntimeError("invalid canonical Harness history envelope") from error
|
|
186
|
+
if not isinstance(history, list) or not all(isinstance(item, dict) for item in history):
|
|
187
|
+
raise RuntimeError("invalid canonical Harness history payload")
|
|
188
|
+
return [expanded[0], *_chat_history(history), *expanded[2:]]
|
|
160
189
|
|
|
161
190
|
async def complete(
|
|
162
191
|
self,
|
|
@@ -165,27 +194,56 @@ class _ConversationHistoryReasoner:
|
|
|
165
194
|
prompt: str,
|
|
166
195
|
messages: Sequence[dict[str, Any]],
|
|
167
196
|
tools: Sequence[Any],
|
|
197
|
+
max_output_tokens: int | None = None,
|
|
168
198
|
) -> Any:
|
|
169
|
-
expanded =
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
199
|
+
expanded = self._expand_messages(messages)
|
|
200
|
+
kwargs: dict[str, Any] = {
|
|
201
|
+
"model": model,
|
|
202
|
+
"prompt": prompt,
|
|
203
|
+
"messages": expanded,
|
|
204
|
+
"tools": tools,
|
|
205
|
+
}
|
|
206
|
+
if max_output_tokens is not None:
|
|
207
|
+
kwargs["max_output_tokens"] = max_output_tokens
|
|
208
|
+
return await self._delegate.complete(**kwargs)
|
|
209
|
+
|
|
210
|
+
async def stream_complete(
|
|
211
|
+
self,
|
|
212
|
+
*,
|
|
213
|
+
model: str,
|
|
214
|
+
prompt: str,
|
|
215
|
+
messages: Sequence[dict[str, Any]],
|
|
216
|
+
tools: Sequence[Any],
|
|
217
|
+
max_output_tokens: int | None = None,
|
|
218
|
+
):
|
|
219
|
+
"""Forward incremental model events while preserving canonical history."""
|
|
220
|
+
stream = getattr(self._delegate, "stream_complete", None)
|
|
221
|
+
if stream is None:
|
|
222
|
+
# Keep compatibility with custom reasoners that only implement
|
|
223
|
+
# ``complete``; callers still receive one terminal turn.
|
|
224
|
+
turn = await self.complete(
|
|
225
|
+
model=model,
|
|
226
|
+
prompt=prompt,
|
|
227
|
+
messages=messages,
|
|
228
|
+
tools=tools,
|
|
229
|
+
**(
|
|
230
|
+
{"max_output_tokens": max_output_tokens}
|
|
231
|
+
if max_output_tokens is not None
|
|
232
|
+
else {}
|
|
233
|
+
),
|
|
234
|
+
)
|
|
235
|
+
yield {"turn": turn}
|
|
236
|
+
return
|
|
237
|
+
kwargs = {
|
|
238
|
+
"model": model,
|
|
239
|
+
"prompt": prompt,
|
|
240
|
+
"messages": self._expand_messages(messages),
|
|
241
|
+
"tools": tools,
|
|
242
|
+
}
|
|
243
|
+
if max_output_tokens is not None:
|
|
244
|
+
kwargs["max_output_tokens"] = max_output_tokens
|
|
245
|
+
async for item in stream(**kwargs):
|
|
246
|
+
yield item
|
|
189
247
|
|
|
190
248
|
|
|
191
249
|
class _ConversationHistoryHarnessAdapter(HarnessRuntimeAdapter):
|
|
@@ -194,6 +252,11 @@ class _ConversationHistoryHarnessAdapter(HarnessRuntimeAdapter):
|
|
|
194
252
|
async def start(self, request: StartRequest): # type: ignore[no-untyped-def]
|
|
195
253
|
preprocessing = request.conversation_preprocessing()
|
|
196
254
|
if preprocessing is not None and preprocessing.messages:
|
|
255
|
+
metadata = {
|
|
256
|
+
key: value
|
|
257
|
+
for key, value in request.metadata.items()
|
|
258
|
+
if key != CONVERSATION_PREPROCESSING_METADATA_KEY
|
|
259
|
+
}
|
|
197
260
|
request = request.model_copy(
|
|
198
261
|
update={
|
|
199
262
|
"input": _HISTORY_ENVELOPE_PREFIX
|
|
@@ -202,7 +265,8 @@ class _ConversationHistoryHarnessAdapter(HarnessRuntimeAdapter):
|
|
|
202
265
|
ensure_ascii=False,
|
|
203
266
|
sort_keys=True,
|
|
204
267
|
separators=(",", ":"),
|
|
205
|
-
)
|
|
268
|
+
),
|
|
269
|
+
"metadata": metadata,
|
|
206
270
|
}
|
|
207
271
|
)
|
|
208
272
|
return await super().start(request)
|
|
@@ -231,10 +295,18 @@ class KsADKHarnessProviderRuntime:
|
|
|
231
295
|
plugin_id: str,
|
|
232
296
|
session_service: BaseSessionService,
|
|
233
297
|
reasoner: HarnessReasoner,
|
|
298
|
+
state_dir: str | None = None,
|
|
299
|
+
checkpoint_dsn: str | None = None,
|
|
300
|
+
execution_policy_resolver: Any | None = None,
|
|
301
|
+
user_workspace_root: Path | None = None,
|
|
234
302
|
) -> None:
|
|
235
303
|
self._plugin_id = plugin_id
|
|
236
304
|
self._session_service = session_service
|
|
237
305
|
self._reasoner = reasoner
|
|
306
|
+
self._state_dir = state_dir
|
|
307
|
+
self._checkpoint_dsn = checkpoint_dsn
|
|
308
|
+
self._execution_policy_resolver = execution_policy_resolver
|
|
309
|
+
self._user_workspace_root = user_workspace_root
|
|
238
310
|
self._ready = False
|
|
239
311
|
self._disposed = False
|
|
240
312
|
self._last_inventory: HarnessProviderInventory | None = None
|
|
@@ -269,97 +341,91 @@ class KsADKHarnessProviderRuntime:
|
|
|
269
341
|
capabilities: PluginExecutionContext,
|
|
270
342
|
) -> "KsADKHarnessActivation":
|
|
271
343
|
if not self._ready or self._disposed:
|
|
272
|
-
raise PluginHostError(
|
|
273
|
-
|
|
344
|
+
raise PluginHostError("harness_provider_unavailable", "Harness provider is not ready")
|
|
345
|
+
|
|
346
|
+
async with AsyncExitStack() as mcp_cleanup:
|
|
347
|
+
projection = await project_mcp_capabilities(capabilities, bundle)
|
|
348
|
+
mcp_cleanup.push_async_callback(projection.aclose)
|
|
349
|
+
mcp_specs = list(projection.specs)
|
|
350
|
+
mcp_owners = list(projection.owners)
|
|
351
|
+
|
|
352
|
+
skills: list[HarnessSkillContribution] = []
|
|
353
|
+
skill_owners: list[str] = []
|
|
354
|
+
for binding in capabilities.all("skill.source/v1"):
|
|
355
|
+
if not isinstance(binding.runtime, HarnessSkillSource):
|
|
356
|
+
raise PluginHostError(
|
|
357
|
+
"harness_skill_incompatible",
|
|
358
|
+
f"plugin {binding.plugin_id} cannot project Harness instructions",
|
|
359
|
+
)
|
|
360
|
+
contribution = binding.runtime.harness_skill(bundle)
|
|
361
|
+
if not contribution.name.strip() or not contribution.instructions.strip():
|
|
362
|
+
raise PluginHostError(
|
|
363
|
+
"harness_skill_invalid",
|
|
364
|
+
f"plugin {binding.plugin_id} returned an empty Skill contribution",
|
|
365
|
+
)
|
|
366
|
+
skills.append(contribution)
|
|
367
|
+
skill_owners.append(binding.plugin_id)
|
|
368
|
+
|
|
369
|
+
context_sources: list[HarnessContextSource] = []
|
|
370
|
+
context_owners: list[str] = []
|
|
371
|
+
for binding in capabilities.all("context.contributor/v1"):
|
|
372
|
+
if not isinstance(binding.runtime, HarnessContextSource):
|
|
373
|
+
raise PluginHostError(
|
|
374
|
+
"harness_context_incompatible",
|
|
375
|
+
f"plugin {binding.plugin_id} cannot contribute Harness context",
|
|
376
|
+
)
|
|
377
|
+
context_sources.append(binding.runtime)
|
|
378
|
+
context_owners.append(binding.plugin_id)
|
|
379
|
+
|
|
380
|
+
execution = bundle.resolved_agent_spec.get("execution")
|
|
381
|
+
strategy = (
|
|
382
|
+
str(execution.get("strategy") or "direct").strip()
|
|
383
|
+
if isinstance(execution, Mapping)
|
|
384
|
+
else "direct"
|
|
274
385
|
)
|
|
275
|
-
|
|
276
|
-
mcp_specs: list[McpToolSpec] = []
|
|
277
|
-
mcp_owners: list[str] = []
|
|
278
|
-
for binding in capabilities.all("mcp.connector/v1"):
|
|
279
|
-
if not isinstance(binding.runtime, HarnessMCPSource):
|
|
280
|
-
raise PluginHostError(
|
|
281
|
-
"harness_mcp_incompatible",
|
|
282
|
-
f"plugin {binding.plugin_id} cannot project Harness MCP config",
|
|
283
|
-
)
|
|
284
|
-
mcp_specs.extend(binding.runtime.harness_mcp_specs(bundle))
|
|
285
|
-
mcp_owners.append(binding.plugin_id)
|
|
286
|
-
|
|
287
|
-
skills: list[HarnessSkillContribution] = []
|
|
288
|
-
skill_owners: list[str] = []
|
|
289
|
-
for binding in capabilities.all("skill.source/v1"):
|
|
290
|
-
if not isinstance(binding.runtime, HarnessSkillSource):
|
|
291
|
-
raise PluginHostError(
|
|
292
|
-
"harness_skill_incompatible",
|
|
293
|
-
f"plugin {binding.plugin_id} cannot project Harness instructions",
|
|
294
|
-
)
|
|
295
|
-
contribution = binding.runtime.harness_skill(bundle)
|
|
296
|
-
if not contribution.name.strip() or not contribution.instructions.strip():
|
|
386
|
+
if strategy not in {"direct", "plan-act-observe"}:
|
|
297
387
|
raise PluginHostError(
|
|
298
|
-
"
|
|
299
|
-
f"
|
|
388
|
+
"harness_execution_strategy_unsupported",
|
|
389
|
+
f"KsADK Harness Provider does not support {strategy!r}",
|
|
300
390
|
)
|
|
301
|
-
skills.append(contribution)
|
|
302
|
-
skill_owners.append(binding.plugin_id)
|
|
303
391
|
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
)
|
|
312
|
-
context_sources.append(binding.runtime)
|
|
313
|
-
context_owners.append(binding.plugin_id)
|
|
314
|
-
|
|
315
|
-
execution = bundle.resolved_agent_spec.get("execution")
|
|
316
|
-
strategy = (
|
|
317
|
-
str(execution.get("strategy") or "direct").strip()
|
|
318
|
-
if isinstance(execution, Mapping)
|
|
319
|
-
else "direct"
|
|
320
|
-
)
|
|
321
|
-
if strategy != "direct":
|
|
322
|
-
raise PluginHostError(
|
|
323
|
-
"harness_execution_strategy_unsupported",
|
|
324
|
-
f"KsADK Harness Provider does not support {strategy!r}",
|
|
392
|
+
model, prompt = _bundle_model_and_prompt(bundle)
|
|
393
|
+
config = HarnessConfig(
|
|
394
|
+
model=model,
|
|
395
|
+
prompt=prompt,
|
|
396
|
+
mcp_tools=tuple(mcp_specs),
|
|
397
|
+
sandbox=SandboxPolicy(read_only=True),
|
|
398
|
+
runtime="yaml",
|
|
325
399
|
)
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
400
|
+
inventory = HarnessProviderInventory(
|
|
401
|
+
provider=self._plugin_id,
|
|
402
|
+
execution_strategy=strategy,
|
|
403
|
+
model=model,
|
|
404
|
+
history_owner="canonical_session_service",
|
|
405
|
+
mcp_servers=tuple(mcp_owners),
|
|
406
|
+
skills=tuple(item.name for item in skills),
|
|
407
|
+
context_contributors=tuple(context_owners),
|
|
408
|
+
)
|
|
409
|
+
self._last_inventory = inventory
|
|
410
|
+
workspace_root = bundle.root / "runtime"
|
|
411
|
+
if not workspace_root.is_dir():
|
|
412
|
+
workspace_root = bundle.root
|
|
413
|
+
return KsADKHarnessActivation(
|
|
414
|
+
bundle=bundle,
|
|
415
|
+
config=config,
|
|
416
|
+
agent_name=bundle.manifest.agent_id,
|
|
417
|
+
workspace_root=workspace_root,
|
|
418
|
+
reasoner=self._reasoner,
|
|
419
|
+
skills=tuple(skills),
|
|
420
|
+
context_sources=tuple(context_sources),
|
|
421
|
+
session_service=self._session_service,
|
|
422
|
+
inventory=inventory,
|
|
423
|
+
mcp_cleanup=mcp_cleanup.pop_all(),
|
|
424
|
+
state_dir=self._state_dir,
|
|
425
|
+
checkpoint_dsn=self._checkpoint_dsn,
|
|
426
|
+
execution_policy_resolver=self._execution_policy_resolver,
|
|
427
|
+
user_workspace_root=self._user_workspace_root,
|
|
332
428
|
)
|
|
333
|
-
config = HarnessConfig(
|
|
334
|
-
model=model,
|
|
335
|
-
prompt=prompt,
|
|
336
|
-
mcp_tools=tuple(mcp_specs),
|
|
337
|
-
sandbox=SandboxPolicy(read_only=True),
|
|
338
|
-
runtime="yaml",
|
|
339
|
-
)
|
|
340
|
-
inventory = HarnessProviderInventory(
|
|
341
|
-
provider=self._plugin_id,
|
|
342
|
-
execution_strategy=strategy,
|
|
343
|
-
model=model,
|
|
344
|
-
history_owner="canonical_session_service",
|
|
345
|
-
mcp_servers=tuple(mcp_owners),
|
|
346
|
-
skills=tuple(item.name for item in skills),
|
|
347
|
-
context_contributors=tuple(context_owners),
|
|
348
|
-
)
|
|
349
|
-
self._last_inventory = inventory
|
|
350
|
-
workspace_root = bundle.root / "runtime"
|
|
351
|
-
if not workspace_root.is_dir():
|
|
352
|
-
workspace_root = bundle.root
|
|
353
|
-
return KsADKHarnessActivation(
|
|
354
|
-
bundle=bundle,
|
|
355
|
-
config=config,
|
|
356
|
-
agent_name=bundle.manifest.agent_id,
|
|
357
|
-
workspace_root=workspace_root,
|
|
358
|
-
reasoner=self._reasoner,
|
|
359
|
-
context_sources=tuple(context_sources),
|
|
360
|
-
session_service=self._session_service,
|
|
361
|
-
inventory=inventory,
|
|
362
|
-
)
|
|
363
429
|
|
|
364
430
|
|
|
365
431
|
class KsADKHarnessProviderFactory:
|
|
@@ -392,10 +458,19 @@ class KsADKHarnessProviderFactory:
|
|
|
392
458
|
reasoner = self._reasoner or services.get("harness_reasoner")
|
|
393
459
|
if reasoner is None:
|
|
394
460
|
reasoner = LiteLLMHarnessReasoner()
|
|
461
|
+
state_dir = services.get("harness_state_dir")
|
|
462
|
+
checkpoint_dsn = services.get("checkpoint_dsn")
|
|
463
|
+
user_workspace_root = services.get("harness_workspace_root")
|
|
395
464
|
self.runtime = KsADKHarnessProviderRuntime(
|
|
396
465
|
plugin_id=manifest.metadata.id,
|
|
397
466
|
session_service=service,
|
|
398
467
|
reasoner=reasoner,
|
|
468
|
+
state_dir=str(state_dir) if state_dir else None,
|
|
469
|
+
checkpoint_dsn=str(checkpoint_dsn) if checkpoint_dsn else None,
|
|
470
|
+
execution_policy_resolver=services.get("execution_policy_resolver"),
|
|
471
|
+
user_workspace_root=(
|
|
472
|
+
Path(user_workspace_root) if user_workspace_root else None
|
|
473
|
+
),
|
|
399
474
|
)
|
|
400
475
|
return self.runtime
|
|
401
476
|
|
|
@@ -409,27 +484,56 @@ class KsADKHarnessActivation:
|
|
|
409
484
|
agent_name: str,
|
|
410
485
|
workspace_root: Path,
|
|
411
486
|
reasoner: HarnessReasoner,
|
|
487
|
+
skills: tuple[HarnessSkillContribution, ...],
|
|
412
488
|
context_sources: tuple[HarnessContextSource, ...],
|
|
413
489
|
session_service: BaseSessionService,
|
|
414
490
|
inventory: HarnessProviderInventory,
|
|
491
|
+
state_dir: str | None = None,
|
|
492
|
+
checkpoint_dsn: str | None = None,
|
|
493
|
+
mcp_cleanup: AsyncExitStack | None = None,
|
|
494
|
+
execution_policy_resolver: Any | None = None,
|
|
495
|
+
user_workspace_root: Path | None = None,
|
|
415
496
|
) -> None:
|
|
416
497
|
self._bundle = bundle
|
|
417
498
|
self._config = config
|
|
418
499
|
self._agent_name = agent_name
|
|
419
500
|
self._workspace_root = workspace_root
|
|
501
|
+
# 用户当前选择的 Studio 工作区(bundle 之外);文件工具落盘目标。
|
|
502
|
+
self._user_workspace_root = user_workspace_root
|
|
420
503
|
self._reasoner = reasoner
|
|
504
|
+
self._skills = skills
|
|
421
505
|
self._context_sources = context_sources
|
|
422
506
|
self._session_service = session_service
|
|
423
507
|
self._inventory = inventory
|
|
508
|
+
self._state_dir = state_dir
|
|
509
|
+
self._checkpoint_dsn = checkpoint_dsn
|
|
510
|
+
self._checkpoint_stack: Any | None = None
|
|
511
|
+
self._execution_policy_resolver = execution_policy_resolver
|
|
512
|
+
self._mcp_cleanup = mcp_cleanup
|
|
513
|
+
self._mcp_cleanup_lock = asyncio.Lock()
|
|
424
514
|
self._ready = False
|
|
425
515
|
self._disposed = False
|
|
426
516
|
self._executors: list[RuntimeExecutor] = []
|
|
427
|
-
self._kernel_adapter:
|
|
517
|
+
self._kernel_adapter: RuntimeAdapter | None = None
|
|
518
|
+
self._warmup_task: asyncio.Task[Any] | None = None
|
|
519
|
+
self._warmup_error: BaseException | None = None
|
|
428
520
|
|
|
429
521
|
async def start(self) -> None:
|
|
430
522
|
if self._disposed:
|
|
431
523
|
raise RuntimeError("Harness activation is disposed")
|
|
432
524
|
self._ready = True
|
|
525
|
+
# Compilation and MCP/tool discovery are independent of the first
|
|
526
|
+
# user turn. Start them in the background so Studio can finish
|
|
527
|
+
# opening immediately; the first turn awaits the same task if needed.
|
|
528
|
+
self._warmup_task = asyncio.create_task(self._warmup_kernel())
|
|
529
|
+
|
|
530
|
+
async def _warmup_kernel(self) -> None:
|
|
531
|
+
try:
|
|
532
|
+
await self.runtime_adapter()
|
|
533
|
+
except asyncio.CancelledError:
|
|
534
|
+
raise
|
|
535
|
+
except BaseException as error: # retain the error for the first turn
|
|
536
|
+
self._warmup_error = error
|
|
433
537
|
|
|
434
538
|
async def health(self) -> bool:
|
|
435
539
|
return self._ready and not self._disposed
|
|
@@ -447,7 +551,13 @@ class KsADKHarnessActivation:
|
|
|
447
551
|
]
|
|
448
552
|
config = replace(
|
|
449
553
|
self._config,
|
|
450
|
-
prompt=_append_prompt_sections(
|
|
554
|
+
prompt=_append_prompt_sections(
|
|
555
|
+
self._config.prompt,
|
|
556
|
+
[
|
|
557
|
+
*[f"Skill {item.name}:\n{item.instructions}" for item in self._skills],
|
|
558
|
+
*context_sections,
|
|
559
|
+
],
|
|
560
|
+
),
|
|
451
561
|
)
|
|
452
562
|
executor, launch_context = _build_direct_backend(
|
|
453
563
|
config,
|
|
@@ -479,7 +589,7 @@ class KsADKHarnessActivation:
|
|
|
479
589
|
inventory=self._inventory,
|
|
480
590
|
)
|
|
481
591
|
|
|
482
|
-
def runtime_adapter(self) ->
|
|
592
|
+
async def runtime_adapter(self) -> RuntimeAdapter:
|
|
483
593
|
"""Return the activation-owned adapter used by AgentKernel Scheduler.
|
|
484
594
|
|
|
485
595
|
The immutable profile has already assembled model instructions, MCP,
|
|
@@ -492,21 +602,58 @@ class KsADKHarnessActivation:
|
|
|
492
602
|
raise PluginHostError(
|
|
493
603
|
"harness_activation_unavailable", "Harness activation is not ready"
|
|
494
604
|
)
|
|
605
|
+
current = asyncio.current_task()
|
|
606
|
+
if self._warmup_task is not None and self._warmup_task is not current:
|
|
607
|
+
await asyncio.shield(self._warmup_task)
|
|
608
|
+
if self._warmup_error is not None:
|
|
609
|
+
error, self._warmup_error = self._warmup_error, None
|
|
610
|
+
raise error
|
|
495
611
|
if self._kernel_adapter is None:
|
|
496
|
-
|
|
612
|
+
from ksadk.plugins.providers.harness_managed import (
|
|
613
|
+
build_managed_provider_adapter,
|
|
614
|
+
)
|
|
615
|
+
|
|
616
|
+
self._kernel_adapter = await build_managed_provider_adapter(
|
|
497
617
|
self._config,
|
|
498
618
|
agent_name=self._agent_name,
|
|
499
619
|
reasoner=self._reasoner,
|
|
500
620
|
workspace_root=self._workspace_root,
|
|
621
|
+
user_workspace_root=self._user_workspace_root,
|
|
622
|
+
skills=self._skills,
|
|
623
|
+
tool_contracts=dict(self._bundle.resolved_agent_spec),
|
|
624
|
+
bundle_root=self._bundle.root,
|
|
625
|
+
state_dir=self._state_dir,
|
|
626
|
+
checkpoint_dsn=self._checkpoint_dsn,
|
|
627
|
+
execution_policy_resolver=self._execution_policy_resolver,
|
|
501
628
|
)
|
|
629
|
+
self._checkpoint_stack = getattr(self._kernel_adapter, "_checkpoint_stack", None)
|
|
502
630
|
return self._kernel_adapter
|
|
503
631
|
|
|
504
632
|
async def drain(self) -> None:
|
|
505
633
|
self._ready = False
|
|
506
634
|
|
|
635
|
+
async def abort(self) -> None:
|
|
636
|
+
"""Revoke external MCP credentials before waiting on a stuck turn."""
|
|
637
|
+
|
|
638
|
+
await self._release_mcp_credentials()
|
|
639
|
+
|
|
507
640
|
async def dispose(self) -> None:
|
|
508
641
|
self._ready = False
|
|
642
|
+
if self._warmup_task is not None and not self._warmup_task.done():
|
|
643
|
+
self._warmup_task.cancel()
|
|
644
|
+
await asyncio.gather(self._warmup_task, return_exceptions=True)
|
|
645
|
+
self._warmup_task = None
|
|
509
646
|
first_error: BaseException | None = None
|
|
647
|
+
if self._checkpoint_stack is not None:
|
|
648
|
+
try:
|
|
649
|
+
await self._checkpoint_stack.aclose()
|
|
650
|
+
except BaseException as error: # cleanup must continue
|
|
651
|
+
first_error = error
|
|
652
|
+
self._checkpoint_stack = None
|
|
653
|
+
try:
|
|
654
|
+
await self._release_mcp_credentials()
|
|
655
|
+
except BaseException as error: # cleanup must continue
|
|
656
|
+
first_error = error
|
|
510
657
|
if self._kernel_adapter is not None:
|
|
511
658
|
try:
|
|
512
659
|
await self._kernel_adapter.close_all()
|
|
@@ -524,6 +671,13 @@ class KsADKHarnessActivation:
|
|
|
524
671
|
if first_error is not None:
|
|
525
672
|
raise first_error
|
|
526
673
|
|
|
674
|
+
async def _release_mcp_credentials(self) -> None:
|
|
675
|
+
async with self._mcp_cleanup_lock:
|
|
676
|
+
cleanup = self._mcp_cleanup
|
|
677
|
+
if cleanup is not None:
|
|
678
|
+
await cleanup.aclose()
|
|
679
|
+
self._mcp_cleanup = None
|
|
680
|
+
|
|
527
681
|
|
|
528
682
|
def _build_direct_backend(
|
|
529
683
|
config: HarnessConfig,
|
|
@@ -532,7 +686,7 @@ def _build_direct_backend(
|
|
|
532
686
|
workspace_root: Path,
|
|
533
687
|
reasoner: HarnessReasoner,
|
|
534
688
|
) -> tuple[RuntimeExecutor, RuntimeLaunchContext]:
|
|
535
|
-
"""Internal execution seam;
|
|
689
|
+
"""Internal execution seam; Release does not expose strategy as a plugin."""
|
|
536
690
|
|
|
537
691
|
history_reasoner = _ConversationHistoryReasoner(reasoner)
|
|
538
692
|
registry = RuntimeRegistry()
|
|
@@ -597,9 +751,7 @@ def _chat_history(history: Sequence[Mapping[str, Any]]) -> list[dict[str, Any]]:
|
|
|
597
751
|
if role not in {"user", "assistant", "tool"}:
|
|
598
752
|
continue
|
|
599
753
|
content = item.get("content")
|
|
600
|
-
if isinstance(content, Sequence) and not isinstance(
|
|
601
|
-
content, (str, bytes, bytearray)
|
|
602
|
-
):
|
|
754
|
+
if isinstance(content, Sequence) and not isinstance(content, (str, bytes, bytearray)):
|
|
603
755
|
segments = [
|
|
604
756
|
str(part.get("text") or "")
|
|
605
757
|
for part in content
|
|
@@ -617,6 +769,7 @@ def _chat_history(history: Sequence[Mapping[str, Any]]) -> list[dict[str, Any]]:
|
|
|
617
769
|
__all__ = [
|
|
618
770
|
"HarnessContextSource",
|
|
619
771
|
"HarnessMCPSource",
|
|
772
|
+
"HarnessMCPActivationSource",
|
|
620
773
|
"HarnessProviderInventory",
|
|
621
774
|
"HarnessSkillContribution",
|
|
622
775
|
"HarnessSkillSource",
|