agentengine-sdk-python 0.8.4__py3-none-any.whl → 0.8.6__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.6.dist-info}/METADATA +17 -10
- agentengine_sdk_python-0.8.6.dist-info/RECORD +1731 -0
- ksadk/_async_iterators.py +79 -0
- ksadk/_build_provenance.json +1 -1
- ksadk/_model_anthropic.py +49 -0
- ksadk/_model_input.py +86 -0
- ksadk/_model_json.py +40 -0
- ksadk/_model_reasoning.py +17 -0
- ksadk/_model_refusal.py +20 -0
- ksadk/_model_sse.py +163 -0
- ksadk/_process.py +83 -0
- ksadk/_str_enum.py +17 -0
- ksadk/a2a/__init__.py +157 -167
- ksadk/a2a/_invocation_state.py +86 -0
- ksadk/a2a/_space_client_events.py +33 -22
- ksadk/a2a/adk.py +194 -0
- ksadk/a2a/adk_invocation_context.py +242 -0
- ksadk/a2a/adk_runtime.py +126 -0
- ksadk/a2a/adk_tools.py +319 -0
- ksadk/a2a/bootstrap.py +149 -23
- ksadk/a2a/build_validation.py +147 -0
- ksadk/a2a/card.py +23 -15
- ksadk/a2a/codex.py +160 -0
- ksadk/a2a/codex_checkpoint.py +111 -0
- ksadk/a2a/codex_recovery.py +96 -0
- ksadk/a2a/codex_recovery_events.py +123 -0
- ksadk/a2a/codex_runtime.py +198 -0
- ksadk/a2a/codex_session_checkpoint.py +162 -0
- ksadk/a2a/composition.py +88 -0
- ksadk/a2a/context_store.py +118 -19
- ksadk/a2a/control_plane.py +108 -106
- ksadk/a2a/event_adapter.py +92 -193
- ksadk/a2a/executor.py +257 -85
- ksadk/a2a/exposure.py +106 -0
- ksadk/a2a/external_transport.py +3 -4
- ksadk/a2a/identity.py +106 -12
- ksadk/a2a/ids.py +14 -3
- ksadk/a2a/inbound_kernel.py +133 -0
- ksadk/a2a/interaction_wire.py +76 -0
- ksadk/a2a/invocation_checkpoint.py +274 -0
- ksadk/a2a/invocation_policy.py +87 -0
- ksadk/a2a/invocation_publication.py +210 -0
- ksadk/a2a/invocation_service.py +972 -0
- ksadk/a2a/invocation_types.py +459 -0
- ksadk/a2a/kernel_task_adapter.py +259 -0
- ksadk/a2a/langgraph.py +20 -7
- ksadk/a2a/langgraph_invocation_context.py +136 -0
- ksadk/a2a/langgraph_managed.py +150 -0
- ksadk/a2a/langgraph_recovery.py +32 -0
- ksadk/a2a/langgraph_runtime.py +89 -0
- ksadk/a2a/langgraph_tool_runtime.py +132 -0
- ksadk/a2a/langgraph_tools.py +63 -0
- ksadk/a2a/message_digest.py +40 -0
- ksadk/a2a/platform.py +389 -0
- ksadk/a2a/policy_refs.py +13 -0
- ksadk/a2a/presentation.py +402 -0
- ksadk/a2a/product_kernel_facts.py +177 -0
- ksadk/a2a/product_key.py +99 -0
- ksadk/a2a/protocol_errors.py +116 -0
- ksadk/a2a/result_text.py +49 -0
- ksadk/a2a/resume_store.py +93 -3
- ksadk/a2a/routes.py +6 -1
- ksadk/a2a/runtime_approval.py +198 -0
- ksadk/a2a/runtime_input.py +151 -0
- ksadk/a2a/server.py +16 -7
- ksadk/a2a/space_client.py +101 -16
- ksadk/a2a/task_adapter.py +19 -5
- ksadk/a2a/task_event_dispatcher.py +39 -2
- ksadk/a2a/task_event_outbox.py +215 -0
- ksadk/a2a/task_event_outbox_owned.py +130 -0
- ksadk/a2a/task_store.py +37 -0
- ksadk/a2a/tool_activity.py +176 -0
- ksadk/a2a/workload_tokens.py +134 -0
- ksadk/a2ui/core.py +3 -3
- ksadk/api/client.py +38 -79
- ksadk/api/sse_stream.py +96 -0
- ksadk/builders/code_builder.py +121 -118
- ksadk/builders/container_builder.py +11 -29
- ksadk/builders/framework_requirements.py +22 -2
- ksadk/builders/managed_runtime_builder.py +12 -0
- ksadk/builders/source_provenance.py +87 -0
- ksadk/cli/__init__.py +36 -0
- ksadk/cli/cmd_a2a.py +43 -0
- ksadk/cli/cmd_build.py +9 -0
- ksadk/cli/cmd_config.py +4 -4
- ksadk/cli/cmd_create.py +12 -12
- ksadk/cli/cmd_deploy.py +27 -2
- ksadk/cli/cmd_hermes.py +24 -2
- ksadk/cli/cmd_invoke.py +64 -88
- ksadk/cli/cmd_openclaw.py +26 -1
- ksadk/cli/cmd_plugin.py +70 -12
- ksadk/cli/cmd_studio.py +69 -17
- ksadk/cli/cmd_web.py +2 -0
- ksadk/cli/hosted_invoke.py +206 -0
- ksadk/cli/invoke_content.py +60 -0
- ksadk/cli/openclaw_env.py +1 -1
- ksadk/cli/resource_common.py +26 -0
- ksadk/cli/runtime_bootstrap.py +27 -5
- ksadk/codex/_expert_request_reader.py +48 -0
- ksadk/codex/a2a_tools.py +140 -0
- ksadk/codex/async_approval.py +169 -0
- ksadk/codex/async_client.py +938 -0
- ksadk/codex/async_proxy.py +216 -0
- ksadk/codex/base_runtime.py +25 -0
- ksadk/codex/client.py +3 -1047
- ksadk/codex/client_payloads.py +85 -0
- ksadk/codex/rollout_checkpoint.py +264 -0
- ksadk/codex/runtime.py +290 -54
- ksadk/common/auth.py +2 -2
- ksadk/common/cloud_headers.py +36 -0
- ksadk/common/diagnostics.py +34 -0
- ksadk/common/kop_client.py +2 -1
- ksadk/configs/__init__.py +1 -1
- ksadk/configs/env_registry.py +216 -143
- ksadk/configs/env_registry_a2a.py +173 -0
- ksadk/configs/env_registry_studio.py +134 -0
- ksadk/configs/global_config.py +2 -1
- ksadk/configs/settings.py +9 -3
- ksadk/connector/__init__.py +17 -0
- ksadk/connector/channel.py +477 -0
- ksadk/context_engine/assembler.py +9 -0
- ksadk/context_engine/capabilities.py +52 -4
- ksadk/context_engine/contributors.py +80 -17
- ksadk/context_engine/instruction_authority.py +18 -0
- ksadk/conversations/attachment_storage.py +10 -3
- ksadk/conversations/attachments.py +69 -20
- ksadk/conversations/contracts.py +28 -9
- ksadk/conversations/message_projection.py +51 -155
- ksadk/conversations/message_projection_blocks.py +137 -0
- ksadk/conversations/model_context.py +11 -3
- ksadk/conversations/normalize.py +28 -10
- ksadk/conversations/projector.py +63 -0
- ksadk/conversations/runtime_baseline.py +37 -0
- ksadk/conversations/runtime_compaction.py +7 -2
- ksadk/conversations/runtime_input.py +16 -4
- ksadk/conversations/runtime_invocation.py +17 -4
- ksadk/conversations/runtime_observability.py +39 -10
- ksadk/conversations/runtime_payloads.py +12 -0
- ksadk/conversations/runtime_persistence.py +296 -32
- ksadk/conversations/runtime_preparation.py +98 -13
- ksadk/conversations/runtime_projection.py +217 -0
- ksadk/conversations/runtime_resume.py +141 -70
- ksadk/conversations/runtime_stream_events.py +29 -35
- ksadk/conversations/runtime_streaming.py +8 -0
- ksadk/conversations/tool_receipt_resume.py +387 -0
- ksadk/conversations/tool_receipts.py +32 -0
- ksadk/deployment/env_forward.py +5 -0
- ksadk/deployment/manager.py +15 -6
- ksadk/deployment/providers/serverless.py +76 -136
- ksadk/deployment/providers/serverless_payloads.py +122 -0
- ksadk/evaluation/agent_eval_client.py +2 -1
- ksadk/evaluation/contracts.py +78 -3
- ksadk/evaluation/evaluators.py +166 -1
- ksadk/evaluation/evidence.py +271 -4
- ksadk/evaluation/local_adapter.py +76 -12
- ksadk/evaluation/studio_build_adapter.py +73 -9
- ksadk/events/adapters/_a2a_checkpoint.py +151 -0
- ksadk/events/adapters/_a2a_snapshot.py +18 -14
- ksadk/events/adapters/_a2a_support.py +15 -3
- ksadk/events/adapters/_a2a_tool_activity.py +123 -0
- ksadk/events/adapters/_codex_errors.py +49 -0
- ksadk/events/adapters/_codex_items.py +16 -8
- ksadk/events/adapters/_langgraph_support.py +46 -1
- ksadk/events/adapters/a2a.py +54 -26
- ksadk/events/adapters/adk.py +188 -30
- ksadk/events/adapters/codex.py +33 -7
- ksadk/events/adapters/langgraph.py +16 -6
- ksadk/events/canonical.py +5 -0
- ksadk/events/canonical_store.py +200 -4
- ksadk/events/reducer.py +82 -0
- ksadk/events/run_authority.py +176 -0
- ksadk/events/session_event.py +2 -2
- ksadk/harness/__init__.py +18 -0
- ksadk/harness/app.py +11 -0
- ksadk/harness/artifact_adapters/__init__.py +1 -0
- ksadk/harness/artifact_adapters/native_page_budget.py +172 -0
- ksadk/harness/artifact_adapters/native_search.py +249 -0
- ksadk/harness/artifact_adapters/native_search_budget.py +134 -0
- ksadk/harness/artifact_adapters/native_store.py +115 -0
- ksadk/harness/artifact_adapters/native_tool.py +222 -0
- ksadk/harness/artifact_store.py +230 -0
- ksadk/harness/browser_adapters/__init__.py +6 -0
- ksadk/harness/browser_adapters/native_browser_tool.py +92 -0
- ksadk/harness/browser_adapters/native_dom_snapshot.py +187 -0
- ksadk/harness/browser_adapters/native_playwright.py +953 -0
- ksadk/harness/browser_adapters/native_vision.py +295 -0
- ksadk/harness/capabilities.py +115 -0
- ksadk/harness/capability_adapters/__init__.py +1 -0
- ksadk/harness/capability_adapters/native_dsh.py +289 -0
- ksadk/harness/capability_runtime.py +332 -0
- ksadk/harness/closure_contract.py +92 -0
- ksadk/harness/compaction_record.py +153 -0
- ksadk/harness/compiler.py +284 -0
- ksadk/harness/config.py +28 -5
- ksadk/harness/conformance/__init__.py +33 -0
- ksadk/harness/conformance/contract.py +504 -0
- ksadk/harness/conformance/fixtures.py +102 -0
- ksadk/harness/context_engine.py +388 -0
- ksadk/harness/context_maintenance.py +259 -0
- ksadk/harness/context_manifest.py +188 -0
- ksadk/harness/context_sections.py +397 -0
- ksadk/harness/context_tuning.py +168 -0
- ksadk/harness/diagnostic_adapters/__init__.py +1 -0
- ksadk/harness/diagnostic_adapters/contracts.py +70 -0
- ksadk/harness/diagnostic_adapters/lsp_rpc.py +210 -0
- ksadk/harness/diagnostic_adapters/native_lsp.py +286 -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 +57 -0
- ksadk/harness/engine/context_pipeline.py +1351 -0
- ksadk/harness/engine/graph_builder.py +352 -0
- ksadk/harness/engine/hooked_reasoner.py +380 -0
- ksadk/harness/engine/langgraph.py +1049 -0
- ksadk/harness/engine/mcp_disclosure.py +701 -0
- ksadk/harness/engine/phases/__init__.py +6 -0
- ksadk/harness/engine/phases/context.py +48 -0
- ksadk/harness/engine/phases/interaction.py +31 -0
- ksadk/harness/engine/phases/reason.py +552 -0
- ksadk/harness/engine/phases/tools.py +638 -0
- ksadk/harness/engine/policy_runtime.py +81 -0
- ksadk/harness/engine/postgres_checkpointer.py +386 -0
- ksadk/harness/engine/run_control_bridge.py +100 -0
- ksadk/harness/engine/run_types.py +98 -0
- ksadk/harness/engine/skill_disclosure.py +275 -0
- ksadk/harness/engine/spans.py +41 -0
- ksadk/harness/engine/steering.py +177 -0
- ksadk/harness/engine/subagents.py +360 -0
- ksadk/harness/engine/thread_ids.py +112 -0
- ksadk/harness/engine/tool_dispatch.py +249 -0
- ksadk/harness/event_tree.py +212 -0
- ksadk/harness/events.py +498 -0
- ksadk/harness/execution_policy.py +104 -0
- ksadk/harness/hooks.py +259 -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 +699 -0
- ksadk/harness/loop/tools.py +907 -0
- ksadk/harness/managed_runtime.py +1044 -0
- ksadk/harness/mcp_disclosure_contract.py +85 -0
- ksadk/harness/mcp_matrix.py +474 -0
- ksadk/harness/mcp_result_policy.py +44 -0
- ksadk/harness/mcp_runtime.py +504 -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/micro_compact.py +69 -0
- ksadk/harness/model_adapters/__init__.py +1 -0
- ksadk/harness/model_adapters/native_mcp_media.py +100 -0
- ksadk/harness/model_adapters/native_mcp_result.py +36 -0
- ksadk/harness/model_adapters/native_openai.py +703 -0
- ksadk/harness/model_capability.py +468 -0
- ksadk/harness/model_provider.py +430 -0
- ksadk/harness/multimodal.py +57 -0
- ksadk/harness/native/__init__.py +1 -0
- ksadk/harness/native/activation_contract.py +25 -0
- ksadk/harness/native/activation_recovery.py +29 -0
- ksadk/harness/native/adapters.py +291 -0
- ksadk/harness/native/artifact_contract.py +14 -0
- ksadk/harness/native/artifact_partial_read_capacity.py +171 -0
- ksadk/harness/native/artifact_read_capacity.py +182 -0
- ksadk/harness/native/artifact_read_contract.py +27 -0
- ksadk/harness/native/artifact_runtime.py +408 -0
- ksadk/harness/native/artifact_search_capacity.py +206 -0
- ksadk/harness/native/artifact_search_contract.py +40 -0
- ksadk/harness/native/artifact_single_read_capacity.py +170 -0
- ksadk/harness/native/browser_contract.py +229 -0
- ksadk/harness/native/browser_recovery.py +183 -0
- ksadk/harness/native/capabilities.py +204 -0
- ksadk/harness/native/child_approval.py +60 -0
- ksadk/harness/native/child_budget.py +136 -0
- ksadk/harness/native/child_cancellation.py +80 -0
- ksadk/harness/native/child_input.py +98 -0
- ksadk/harness/native/child_input_runtime.py +59 -0
- ksadk/harness/native/child_interruption.py +81 -0
- ksadk/harness/native/child_lifecycle.py +246 -0
- ksadk/harness/native/child_lifecycle_contract.py +91 -0
- ksadk/harness/native/child_notifications.py +75 -0
- ksadk/harness/native/child_promotion.py +66 -0
- ksadk/harness/native/command_runtime.py +99 -0
- ksadk/harness/native/completion.py +302 -0
- ksadk/harness/native/completion_text.py +116 -0
- ksadk/harness/native/context.py +358 -0
- ksadk/harness/native/context_artifact_page.py +75 -0
- ksadk/harness/native/context_compaction_projection.py +131 -0
- ksadk/harness/native/context_contributions.py +320 -0
- ksadk/harness/native/context_contributor_contract.py +133 -0
- ksadk/harness/native/context_driver.py +820 -0
- ksadk/harness/native/context_fresh_tools.py +49 -0
- ksadk/harness/native/context_history.py +272 -0
- ksadk/harness/native/context_microcompact.py +61 -0
- ksadk/harness/native/context_partial_summary.py +58 -0
- ksadk/harness/native/context_partition.py +492 -0
- ksadk/harness/native/context_pruning.py +275 -0
- ksadk/harness/native/context_reduction.py +60 -0
- ksadk/harness/native/context_replay.py +148 -0
- ksadk/harness/native/context_request_projection.py +526 -0
- ksadk/harness/native/context_runtime.py +976 -0
- ksadk/harness/native/context_runtime_contracts.py +409 -0
- ksadk/harness/native/context_search.py +112 -0
- ksadk/harness/native/context_source_fragments.py +188 -0
- ksadk/harness/native/context_source_progress.py +119 -0
- ksadk/harness/native/context_summary_planning.py +788 -0
- ksadk/harness/native/context_summary_recovery.py +105 -0
- ksadk/harness/native/delivery_review.py +331 -0
- ksadk/harness/native/delivery_review_contract.py +54 -0
- ksadk/harness/native/effect_admission.py +82 -0
- ksadk/harness/native/effect_control.py +318 -0
- ksadk/harness/native/effect_receipts.py +729 -0
- ksadk/harness/native/effect_runtime.py +303 -0
- ksadk/harness/native/effective_configuration.py +28 -0
- ksadk/harness/native/engine.py +945 -0
- ksadk/harness/native/final_output.py +34 -0
- ksadk/harness/native/final_submission.py +58 -0
- ksadk/harness/native/finalization_workspace.py +96 -0
- ksadk/harness/native/fork.py +151 -0
- ksadk/harness/native/guidance.py +91 -0
- ksadk/harness/native/history.py +381 -0
- ksadk/harness/native/hook_executor.py +205 -0
- ksadk/harness/native/hook_runtime_contract.py +282 -0
- ksadk/harness/native/interaction_observation.py +117 -0
- ksadk/harness/native/lease.py +103 -0
- ksadk/harness/native/machine.py +974 -0
- ksadk/harness/native/mcp_result_governance.py +156 -0
- ksadk/harness/native/model.py +570 -0
- ksadk/harness/native/model_feedback.py +63 -0
- ksadk/harness/native/model_input.py +30 -0
- ksadk/harness/native/model_recovery_contract.py +35 -0
- ksadk/harness/native/model_replay.py +128 -0
- ksadk/harness/native/model_request.py +133 -0
- ksadk/harness/native/model_runtime.py +196 -0
- ksadk/harness/native/model_takeover.py +419 -0
- ksadk/harness/native/model_tool_batch.py +40 -0
- ksadk/harness/native/observed_progress.py +46 -0
- ksadk/harness/native/operator_guidance.py +201 -0
- ksadk/harness/native/output_contract.py +80 -0
- ksadk/harness/native/output_recovery.py +24 -0
- ksadk/harness/native/ports.py +749 -0
- ksadk/harness/native/precompact_hook_runtime.py +171 -0
- ksadk/harness/native/replay_context.py +149 -0
- ksadk/harness/native/request_media.py +112 -0
- ksadk/harness/native/restore_contract.py +16 -0
- ksadk/harness/native/run_clock.py +120 -0
- ksadk/harness/native/state.py +436 -0
- ksadk/harness/native/steering.py +170 -0
- ksadk/harness/native/stop_hook_runtime.py +151 -0
- ksadk/harness/native/studio_admission.py +29 -0
- ksadk/harness/native/subagents.py +86 -0
- ksadk/harness/native/task_policy.py +99 -0
- ksadk/harness/native/task_progress.py +86 -0
- ksadk/harness/native/terminal_verification.py +43 -0
- ksadk/harness/native/tool_argument_feedback.py +178 -0
- ksadk/harness/native/tool_budget.py +253 -0
- ksadk/harness/native/tool_error_streak.py +89 -0
- ksadk/harness/native/tool_hook_runtime.py +343 -0
- ksadk/harness/native/tool_input_validation.py +58 -0
- ksadk/harness/native/tool_interruption.py +96 -0
- ksadk/harness/native/tool_observation.py +259 -0
- ksadk/harness/native/tool_progress.py +223 -0
- ksadk/harness/native/tool_recovery.py +25 -0
- ksadk/harness/native/tool_scheduling.py +33 -0
- ksadk/harness/native/tool_schema.py +126 -0
- ksadk/harness/native/transitions.py +151 -0
- ksadk/harness/native/turn_control.py +98 -0
- ksadk/harness/native/user_document.py +98 -0
- ksadk/harness/native/user_document_capture.py +49 -0
- ksadk/harness/native/user_input.py +87 -0
- ksadk/harness/native/verification.py +432 -0
- ksadk/harness/native/verification_binding.py +40 -0
- ksadk/harness/native/verification_runtime.py +233 -0
- ksadk/harness/native/verification_workspace.py +67 -0
- ksadk/harness/native_driver_failure.py +123 -0
- ksadk/harness/native_facade.py +977 -0
- ksadk/harness/native_factory.py +244 -0
- ksadk/harness/native_projection.py +503 -0
- ksadk/harness/native_runtime.py +621 -0
- ksadk/harness/native_shadow.py +250 -0
- ksadk/harness/native_shadow_inputs.py +146 -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/progress_adapters/__init__.py +5 -0
- ksadk/harness/progress_adapters/native_todo.py +75 -0
- ksadk/harness/prompt_cache.py +132 -0
- ksadk/harness/public_activity.py +213 -0
- ksadk/harness/public_output.py +30 -0
- ksadk/harness/public_summary.py +36 -0
- ksadk/harness/readiness.py +249 -0
- ksadk/harness/reasoner.py +779 -17
- ksadk/harness/release_readiness.py +140 -0
- ksadk/harness/resource_ref.py +69 -0
- ksadk/harness/rpc.py +200 -0
- ksadk/harness/run_control.py +773 -0
- ksadk/harness/runtime.py +157 -113
- ksadk/harness/runtime_capabilities.py +228 -0
- ksadk/harness/runtime_server.py +514 -0
- ksadk/harness/sandbox_adapters.py +739 -0
- ksadk/harness/sandbox_backend.py +733 -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/sdk.py +153 -0
- ksadk/harness/session_store.py +589 -0
- ksadk/harness/skill_adapters/__init__.py +1 -0
- ksadk/harness/skill_adapters/native_bundle.py +148 -0
- ksadk/harness/skill_adapters/native_disclosure.py +306 -0
- ksadk/harness/skill_composition.py +212 -0
- ksadk/harness/skill_feedback.py +123 -0
- ksadk/harness/skill_intent.py +47 -0
- ksadk/harness/skill_matrix.py +233 -0
- ksadk/harness/skill_runtime.py +317 -0
- ksadk/harness/spec.py +342 -0
- ksadk/harness/state.py +155 -0
- ksadk/harness/stores/__init__.py +14 -0
- ksadk/harness/stores/native_command_settlement.py +65 -0
- ksadk/harness/stores/native_contract.py +311 -0
- ksadk/harness/stores/native_memory.py +326 -0
- ksadk/harness/stores/native_memory_archive.py +70 -0
- ksadk/harness/stores/native_migration_cli.py +91 -0
- ksadk/harness/stores/native_outbox.py +56 -0
- ksadk/harness/stores/native_sqlite.py +782 -0
- ksadk/harness/stores/native_sqlite_audit.py +29 -0
- ksadk/harness/stores/native_sqlite_migration.py +252 -0
- ksadk/harness/strategies.py +149 -0
- ksadk/harness/subagent.py +263 -0
- ksadk/harness/subagent_adapters/checkpoint_recovery.py +120 -0
- ksadk/harness/subagent_adapters/native_background_child.py +803 -0
- ksadk/harness/subagent_adapters/native_child.py +819 -0
- ksadk/harness/subagent_adapters/native_child_approval.py +128 -0
- ksadk/harness/subagent_adapters/native_child_continuation.py +51 -0
- ksadk/harness/subagent_adapters/native_child_result.py +392 -0
- ksadk/harness/subagent_adapters/prepared_recovery.py +120 -0
- ksadk/harness/tool_display.py +75 -0
- ksadk/harness/tool_display_contract.py +134 -0
- ksadk/harness/tool_output.py +141 -0
- ksadk/harness/tool_policy.py +134 -0
- ksadk/harness/tool_receipts.py +96 -0
- ksadk/harness/tool_reliability.py +81 -0
- ksadk/harness/tool_result_policy.py +216 -0
- ksadk/harness/tools.py +52 -0
- ksadk/harness/user_errors.py +69 -0
- ksadk/harness/working_context.py +81 -0
- ksadk/harness/working_context_patch.py +99 -0
- ksadk/harness/workspace_adapters/__init__.py +6 -0
- ksadk/harness/workspace_adapters/native_directory.py +180 -0
- ksadk/harness/workspace_adapters/native_git.py +208 -0
- ksadk/harness/workspace_adapters/native_isolation.py +350 -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 +9 -2
- ksadk/kernel/__init__.py +10 -0
- ksadk/kernel/approval_presentation.py +91 -0
- ksadk/kernel/authorization.py +1 -1
- ksadk/kernel/bootstrap.py +220 -252
- ksadk/kernel/contract_fingerprints.py +45 -1
- ksadk/kernel/contracts.py +30 -0
- ksadk/kernel/control.py +180 -29
- ksadk/kernel/execution_grants.py +428 -0
- ksadk/kernel/execution_grants_memory.py +252 -0
- ksadk/kernel/execution_grants_postgres.py +395 -0
- ksadk/kernel/execution_grants_sqlite.py +435 -0
- ksadk/kernel/execution_host_ingress.py +1071 -0
- ksadk/kernel/history_projection.py +120 -0
- ksadk/kernel/ingress.py +139 -226
- ksadk/kernel/ingress_bootstrap.py +268 -0
- ksadk/kernel/legacy_history.py +179 -0
- ksadk/kernel/mapping.py +1 -1
- ksadk/kernel/memory_store.py +61 -58
- ksadk/kernel/memory_store_projection.py +63 -0
- ksadk/kernel/postgres_event_log.py +181 -0
- ksadk/kernel/postgres_store.py +230 -231
- ksadk/kernel/readiness.py +125 -0
- ksadk/kernel/recovery.py +166 -16
- ksadk/kernel/recovery_projection.py +124 -0
- ksadk/kernel/runtime_checkpoint.py +34 -0
- ksadk/kernel/sql/001_agent_kernel.sql +28 -0
- ksadk/kernel/sqlite_schema.py +100 -0
- ksadk/kernel/sqlite_store.py +410 -200
- ksadk/kernel/state.py +2 -3
- ksadk/kernel/store.py +104 -5
- ksadk/kernel/teams_artifact_tools.py +392 -0
- ksadk/kernel/teams_effects.py +851 -0
- ksadk/kernel/teams_execution_context.py +408 -0
- ksadk/kernel/teams_host_http.py +237 -0
- ksadk/kernel/teams_material_transport.py +245 -0
- ksadk/kernel/teams_materials.py +318 -0
- ksadk/kernel/teams_runtime_bootstrap.py +604 -0
- ksadk/kernel/teams_tool_runtime.py +273 -0
- ksadk/kernel/teams_workspace.py +259 -0
- ksadk/kernel/worker.py +369 -340
- ksadk/kernel/worker_controls.py +454 -0
- ksadk/kernel/worker_history.py +72 -0
- ksadk/kernel/worker_identity.py +74 -0
- ksadk/kernel/worker_interactions.py +197 -0
- ksadk/knowledge_base/client.py +15 -1
- ksadk/managed_runtime.py +29 -2
- ksadk/memory/adk/backends/http_ltm_backend.py +2 -1
- ksadk/memory/adk/backends/sdk_ltm_backend.py +15 -1
- ksadk/memory/adk/bounded_database_session_service.py +232 -0
- ksadk/memory/adk/resilient_session_service.py +115 -15
- ksadk/memory/adk/short_term_memory.py +8 -9
- ksadk/memory/coordinator.py +22 -6
- ksadk/memory/extraction.py +159 -7
- ksadk/memory/models.py +77 -1
- ksadk/memory/provider_resolver.py +5 -0
- ksadk/memory/providers/local_candidates.py +183 -0
- ksadk/memory/providers/local_postgres.py +200 -0
- ksadk/memory/providers/local_sqlite.py +280 -67
- ksadk/memory/resolved_policy.py +12 -7
- ksadk/memory/retrieval.py +189 -0
- ksadk/memory/store_adapter.py +150 -0
- ksadk/model_gateway/__init__.py +29 -0
- ksadk/model_gateway/client.py +253 -0
- ksadk/model_gateway/events.py +113 -0
- ksadk/model_gateway/matrix.py +297 -0
- ksadk/model_policy.py +2 -2
- ksadk/model_proxy/compat.py +670 -0
- ksadk/model_proxy/detect.py +254 -0
- ksadk/model_proxy/server.py +14 -9
- ksadk/model_proxy/transform.py +72 -6
- ksadk/plugins/__init__.py +1 -1
- ksadk/plugins/bridges/dsh.py +29 -20
- ksadk/plugins/bridges/dsh_profile_manifest.py +36 -0
- ksadk/plugins/builtin_resources.py +199 -0
- ksadk/plugins/builtins.py +417 -185
- ksadk/plugins/companion_artifacts.py +83 -0
- ksadk/plugins/companions.py +368 -0
- ksadk/plugins/context_contributor.py +15 -4
- ksadk/plugins/contracts.py +1 -1
- ksadk/plugins/dsh_channels.py +156 -0
- ksadk/plugins/dsh_dependency_policy.py +41 -0
- ksadk/plugins/dsh_home.py +140 -0
- ksadk/plugins/dsh_teams.py +105 -0
- ksadk/plugins/dsh_toolchain.py +92 -21
- ksadk/plugins/execution_host.py +107 -0
- ksadk/plugins/host.py +73 -5
- ksadk/plugins/kernel_adapter.py +44 -1
- ksadk/plugins/memory_provider.py +180 -0
- ksadk/plugins/providers/_process_group.py +50 -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/index.mjs +24 -2
- 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 +52 -40
- ksadk/plugins/providers/codex_native.py +20 -0
- ksadk/plugins/providers/codex_skills.py +46 -0
- ksadk/plugins/providers/dsh_capabilities.py +49 -143
- ksadk/plugins/providers/dsh_connector_lease.py +225 -0
- ksadk/plugins/providers/dsh_mcp.py +163 -1
- ksadk/plugins/providers/harness.py +413 -52
- ksadk/plugins/providers/harness_context.py +61 -0
- ksadk/plugins/providers/harness_contributions.py +241 -0
- ksadk/plugins/providers/harness_delegation.py +670 -0
- ksadk/plugins/providers/harness_hooks.py +121 -0
- ksadk/plugins/providers/harness_managed.py +550 -0
- ksadk/plugins/providers/harness_tools.py +455 -0
- ksadk/plugins/providers/legacy_catalog.py +1 -1
- ksadk/plugins/providers/mcp_projection.py +100 -3
- ksadk/plugins/providers/platform_resources.py +16 -6
- 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 +540 -0
- ksadk/plugins/teams/artifacts.py +60 -0
- ksadk/plugins/teams/build_artifacts.py +460 -0
- ksadk/plugins/teams/cloud_contract_fingerprints.py +22 -0
- ksadk/plugins/teams/cloud_contracts.py +928 -0
- ksadk/plugins/teams/cloud_permits.py +250 -0
- ksadk/plugins/teams/context.py +96 -0
- ksadk/plugins/teams/contracts.py +136 -0
- ksadk/plugins/teams/domain.py +1480 -0
- ksadk/plugins/teams/domain_values.py +24 -0
- ksadk/plugins/teams/effect_contracts.py +255 -0
- ksadk/plugins/teams/errors.py +13 -0
- ksadk/plugins/teams/execution_projection.py +255 -0
- ksadk/plugins/teams/leader_decisions.py +106 -0
- ksadk/plugins/teams/migration.py +311 -0
- ksadk/plugins/teams/migration_cli.py +322 -0
- ksadk/plugins/teams/postgres_store.py +352 -0
- ksadk/plugins/teams/release_contracts.py +60 -0
- ksadk/plugins/teams/runtime.py +853 -0
- ksadk/plugins/teams/source_projection.py +84 -0
- ksadk/plugins/teams/store.py +519 -0
- ksadk/plugins/teams/task_decisions.py +436 -0
- ksadk/plugins/teams/tool_service.py +152 -0
- ksadk/plugins/teams/transport.py +96 -0
- ksadk/plugins/teams/workspaces.py +255 -0
- ksadk/resource_runtime/skill_runtime.py +3 -0
- ksadk/resource_runtime/socket_server.py +11 -0
- ksadk/resource_runtime/worker.py +28 -4
- ksadk/runners/_adk_a2a_stream.py +122 -0
- ksadk/runners/_adk_canonical_stream.py +474 -0
- ksadk/runners/_langgraph_canonical_streams.py +527 -0
- ksadk/runners/_langgraph_runner_streams.py +83 -401
- ksadk/runners/_langgraph_state_reader.py +106 -0
- ksadk/runners/_langgraph_tool_projection.py +86 -0
- ksadk/runners/_langgraph_tools_transformer.py +27 -0
- ksadk/runners/_session_identity.py +285 -0
- ksadk/runners/adk_runner.py +220 -350
- ksadk/runners/base_runner.py +6 -5
- ksadk/runners/langgraph_runner.py +208 -195
- ksadk/runners/patch_langchain.py +47 -0
- ksadk/runners/usage_accumulator.py +11 -3
- ksadk/runners/utils/loader.py +28 -14
- ksadk/runtime/_runner_adapter/a2ui_surface.py +145 -0
- ksadk/runtime/_runner_adapter/gateway_approvals.py +93 -0
- ksadk/runtime/_runner_adapter/stream_mapping.py +134 -129
- ksadk/runtime/adapter.py +40 -3
- ksadk/runtime/conversation_execution.py +29 -3
- ksadk/runtime/executor.py +105 -7
- ksadk/runtime/factory.py +45 -3
- ksadk/runtime/framework_adapters.py +184 -10
- ksadk/runtime/hosted_finalizer.py +4 -6
- ksadk/runtime/launch.py +2 -0
- ksadk/runtime/preprocessing.py +11 -3
- ksadk/runtime/runner_adapter.py +160 -21
- ksadk/runtime/skill_eval_result.py +36 -0
- ksadk/runtime/timing.py +46 -0
- ksadk/runtime/usage.py +49 -18
- ksadk/runtime_context.py +105 -1
- ksadk/sandbox/backends/e2b.py +272 -24
- ksadk/sandbox/backends/local_process.py +73 -39
- ksadk/sandbox/base.py +62 -1
- ksadk/sandbox/diagnostics.py +82 -0
- ksadk/sandbox/e2b_connection.py +9 -1
- ksadk/sandbox/local_controls.py +776 -0
- ksadk/sandbox/local_launcher.py +124 -0
- ksadk/scheduler/dispatcher.py +1 -1
- ksadk/server/factory.py +178 -25
- ksadk/server/history_deadline.py +158 -0
- ksadk/server/history_page_cache.py +129 -0
- ksadk/server/invocation_identity.py +118 -0
- ksadk/server/routes/checkpoint_audit.py +88 -0
- ksadk/server/routes/checkpoint_listing.py +294 -0
- ksadk/server/routes/checkpoint_resolution.py +73 -20
- ksadk/server/routes/common.py +32 -3
- ksadk/server/routes/control.py +112 -9
- ksadk/server/routes/dependencies.py +2 -1
- ksadk/server/routes/display_projection.py +154 -0
- ksadk/server/routes/kernel_ingress.py +26 -3
- ksadk/server/routes/misc.py +331 -33
- ksadk/server/routes/models.py +28 -4
- ksadk/server/routes/openai_compat.py +82 -13
- ksadk/server/routes/projection.py +159 -216
- ksadk/server/routes/run.py +112 -37
- ksadk/server/routes/sessions.py +493 -358
- ksadk/server/routes/streaming.py +68 -15
- ksadk/server/routes/tool_receipt_claim_routes.py +107 -0
- ksadk/server/routes/workspace.py +135 -23
- ksadk/server/static/assets/{ArtifactsPanel-CGbWlMNh.js → ArtifactsPanel-CILaW-fC.js} +1 -1
- ksadk/server/static/assets/{CodeBlock-b4C7upmO.js → CodeBlock-BVrNVtJC.js} +10 -7
- ksadk/server/static/assets/MathMessageMarkdown-Dp7c4wWD.js +8 -0
- ksadk/server/static/assets/{MermaidBlock-BEBN4Ksz.js → MermaidBlock-Dxop8Rd7.js} +9 -9
- ksadk/server/static/assets/{NativeTerminalPanel-zvL-WpAn.js → NativeTerminalPanel-Cjjz8B30.js} +1 -1
- ksadk/server/static/assets/{abnfDiagram-VCTEODGH-BYafW7Za.js → abnfDiagram-VCTEODGH-ckWDmOzw.js} +1 -1
- ksadk/server/static/assets/{arc-bTohInsS.js → arc-DqxJede-.js} +1 -1
- ksadk/server/static/assets/architecture-7GRP2DOG-pn_DuLy6.js +1 -0
- ksadk/server/static/assets/{architectureDiagram-5GKGNRK7-Ch5Lbzsi.js → architectureDiagram-5GKGNRK7-SEQA4bVi.js} +1 -1
- ksadk/server/static/assets/{blockDiagram-NRAW4CY4-kqF4MDOG.js → blockDiagram-NRAW4CY4-pM0B-6NJ.js} +1 -1
- ksadk/server/static/assets/{c4Diagram-UCG6FXSJ-8uSRIODv.js → c4Diagram-UCG6FXSJ-m2tuCNVq.js} +1 -1
- ksadk/server/static/assets/channel-fySsnkft.js +1 -0
- ksadk/server/static/assets/chunk-2Q5K7J3B-BheGxKRQ.js +1 -0
- ksadk/server/static/assets/{chunk-5VM5RSS4-DkhehZDr.js → chunk-5VM5RSS4-GJHDr9Ww.js} +1 -1
- ksadk/server/static/assets/{chunk-F27PBJKO-BdXhtPe9.js → chunk-F27PBJKO-CbAN45AV.js} +1 -1
- ksadk/server/static/assets/{chunk-G27WJ6UU-DPTpvpwi.js → chunk-G27WJ6UU-D5ngbbzF.js} +1 -1
- ksadk/server/static/assets/{chunk-JWPE2WC7-Pqoh38el.js → chunk-JWPE2WC7-Cc5IwuYC.js} +1 -1
- ksadk/server/static/assets/{chunk-LCL6LL3I-DeU00qC-.js → chunk-LCL6LL3I-CprgDDdJ.js} +1 -1
- ksadk/server/static/assets/{chunk-POPQ4Y6H-CzxScFkr.js → chunk-POPQ4Y6H-CDZhSy82.js} +1 -1
- ksadk/server/static/assets/{chunk-RHFEMEQ7-DpqMx-ux.js → chunk-RHFEMEQ7-CZchUNro.js} +1 -1
- ksadk/server/static/assets/{chunk-SVP7TREG-C6t0SypQ.js → chunk-SVP7TREG-BVruqk6T.js} +1 -1
- ksadk/server/static/assets/{chunk-XXDRQBXY-DVaeafZk.js → chunk-XXDRQBXY-4ld9SxPN.js} +1 -1
- ksadk/server/static/assets/classDiagram-DTDB5LWJ-DSfLtNYm.js +1 -0
- ksadk/server/static/assets/classDiagram-v2-JRS7N3AN-DSfLtNYm.js +1 -0
- ksadk/server/static/assets/{cose-bilkent-JH36ORCC-Bf9D3tzJ.js → cose-bilkent-JH36ORCC-Dmyyk_Vp.js} +1 -1
- ksadk/server/static/assets/cynefin-OW5HDTMX-PFWIGtvA.js +1 -0
- ksadk/server/static/assets/{cynefinDiagram-5FMLGOSQ-B9cY3iTz.js → cynefinDiagram-5FMLGOSQ-BIyq3EJb.js} +1 -1
- ksadk/server/static/assets/{dagre-3AP2YEHR-CSwlx3CB.js → dagre-3AP2YEHR-eBw08Qdk.js} +1 -1
- ksadk/server/static/assets/{dagre-UBpgon5q.js → dagre-DfvnEf45.js} +1 -1
- ksadk/server/static/assets/{diagram-S7CK7UJ4-C9akhN9a.js → diagram-S7CK7UJ4-CUSrE3Mg.js} +1 -1
- ksadk/server/static/assets/{diagram-UQ7AKVKN-CgedhTPI.js → diagram-UQ7AKVKN-Dq5Zw2gy.js} +1 -1
- ksadk/server/static/assets/{diagram-VSXAHHWV-Cjucz5BY.js → diagram-VSXAHHWV-DyUHfNwT.js} +1 -1
- ksadk/server/static/assets/{diagram-VX7I27RA-Dd4Vleyn.js → diagram-VX7I27RA-CREmM89O.js} +1 -1
- ksadk/server/static/assets/{diagram-Z3DM3KII-CZ2jGtYW.js → diagram-Z3DM3KII-Dw9zhHUK.js} +1 -1
- ksadk/server/static/assets/{dist-Bj730Ib4.js → dist-0uJ4tdx6.js} +1 -1
- ksadk/server/static/assets/{dist-BnaTiyzN.js → dist-AEv-vXf-.js} +1 -1
- ksadk/server/static/assets/{dist-BgV_owcB.js → dist-B49GzZDb.js} +1 -1
- ksadk/server/static/assets/{dist-D_ctSS2i.js → dist-B8Myiet9.js} +1 -1
- ksadk/server/static/assets/{dist-ufY3F5p6.js → dist-BBsYarrI.js} +2 -2
- ksadk/server/static/assets/{dist-ClYUxfeK.js → dist-BQMrUwdI.js} +1 -1
- ksadk/server/static/assets/{dist-CFzsn6BG.js → dist-BX_-FENW.js} +1 -1
- ksadk/server/static/assets/{dist-B3FR1SKK.js → dist-CD4L6ymH.js} +1 -1
- ksadk/server/static/assets/{dist-Cf125P_m.js → dist-CHpW1BHj.js} +1 -1
- ksadk/server/static/assets/{dist-DVCOWtha.js → dist-CVPau3tn.js} +1 -1
- ksadk/server/static/assets/{dist-DFD6Qa6T.js → dist-C_qdxcSH.js} +1 -1
- ksadk/server/static/assets/{dist-BIr4DSRq.js → dist-Co68Apq4.js} +1 -1
- ksadk/server/static/assets/{dist-DiixqL0J.js → dist-Cp2PaOMY.js} +1 -1
- ksadk/server/static/assets/{dist-fBO2v5Kt.js → dist-CuR5Bgme.js} +1 -1
- ksadk/server/static/assets/{dist-DoVSwoDb.js → dist-DDSyLEOX.js} +1 -1
- ksadk/server/static/assets/{dist-C5_ZAZsG.js → dist-DUxO0R99.js} +1 -1
- ksadk/server/static/assets/{dist-C1NMAY5a.js → dist-QzbGrED_.js} +1 -1
- ksadk/server/static/assets/dist-bupkyEBZ.js +1 -0
- ksadk/server/static/assets/{dist-DvFK7p5S.js → dist-cxTGfdqx.js} +1 -1
- ksadk/server/static/assets/{dist-CB9iJrvg.js → dist-hL5p1til.js} +1 -1
- ksadk/server/static/assets/{dist-btbmmX5O.js → dist-lOy23y43.js} +1 -1
- ksadk/server/static/assets/{dist-QfkEHOlb.js → dist-pq-nD33R.js} +1 -1
- ksadk/server/static/assets/{ebnfDiagram-PWID7BFC-Ci8NqqZu.js → ebnfDiagram-PWID7BFC-BS5LdNoR.js} +1 -1
- ksadk/server/static/assets/{erDiagram-SSCWMZ5O-CCIOhLZG.js → erDiagram-SSCWMZ5O-Bv1QtiY-.js} +1 -1
- ksadk/server/static/assets/eventmodeling-NTZA5JFV-DsM4upQX.js +1 -0
- ksadk/server/static/assets/flowDiagram-A5DVABFB-D5NA16k9.js +1 -0
- ksadk/server/static/assets/{ganttDiagram-EL5Y4UJY-Cp_r9Hb6.js → ganttDiagram-EL5Y4UJY-musi-e0G.js} +1 -1
- ksadk/server/static/assets/gitGraph-4MIJSDKK-DUCVz-ih.js +1 -0
- ksadk/server/static/assets/{gitGraphDiagram-WWUBYQGX-Dlhc8Wr8.js → gitGraphDiagram-WWUBYQGX-DH37EGkG.js} +1 -1
- ksadk/server/static/assets/index-CZdkAvsv.js +244 -0
- ksadk/server/static/assets/index-CvXdHgF3.css +2 -0
- ksadk/server/static/assets/info-A6RAGUB7-rw0ZNHZp.js +1 -0
- ksadk/server/static/assets/{infoDiagram-RXCK75RN-CO0rRTRA.js → infoDiagram-RXCK75RN-C1kEtv2y.js} +1 -1
- ksadk/server/static/assets/{ishikawaDiagram-5VMMS53U-CHiaedSS.js → ishikawaDiagram-5VMMS53U-BCNPyMka.js} +1 -1
- ksadk/server/static/assets/{journeyDiagram-EYS64GPL-CHcCIB09.js → journeyDiagram-EYS64GPL--cDbKnjP.js} +1 -1
- ksadk/server/static/assets/{kanban-definition-3QL26DDD-CJ_ebBZf.js → kanban-definition-3QL26DDD-R1rAVw2f.js} +1 -1
- ksadk/server/static/assets/{katex-B4weu383.js → katex-BT-X-V7U.js} +1 -1
- ksadk/server/static/assets/{linear-V-MgYHW1.js → linear-DTR631iG.js} +1 -1
- ksadk/server/static/assets/{mermaid-parser.core-CBijEX_c.js → mermaid-parser.core-DfFzJhX8.js} +2 -2
- ksadk/server/static/assets/{mindmap-definition-FBJOCRG2-Bc-pQvpp.js → mindmap-definition-FBJOCRG2-D4by_rmk.js} +1 -1
- ksadk/server/static/assets/packet-AYTQ26CC-Ca4Hvki9.js +1 -0
- ksadk/server/static/assets/{pegDiagram-XKGWAZYB-D7genGLl.js → pegDiagram-XKGWAZYB-xWXPEh0c.js} +1 -1
- ksadk/server/static/assets/pie-WAS4IAKB-hwiz6fbw.js +1 -0
- ksadk/server/static/assets/{pieDiagram-E7YTZNPT-Bxj32zwD.js → pieDiagram-E7YTZNPT-BudBDlCI.js} +1 -1
- ksadk/server/static/assets/{quadrantDiagram-AXDQQJYC-BURv2mGh.js → quadrantDiagram-AXDQQJYC-DXZ0PCJF.js} +1 -1
- ksadk/server/static/assets/radar-RG4KPBEZ-BR1oZXLM.js +1 -0
- ksadk/server/static/assets/railroad-74A4TZTK-DfgEISfX.js +1 -0
- ksadk/server/static/assets/railroad-abnf-HS5TGJTU-CWOC3rdk.js +1 -0
- ksadk/server/static/assets/railroad-ebnf-LZEXJU2U-CiRvHCLY.js +1 -0
- ksadk/server/static/assets/railroad-peg-WCYAUIDC-DSDDyJ2f.js +1 -0
- ksadk/server/static/assets/{railroadDiagram-O6MQD6OU-CCsh3avW.js → railroadDiagram-O6MQD6OU-BdAYRYB8.js} +1 -1
- ksadk/server/static/assets/{requirementDiagram-EFPCY7ZU-_FRRBKEd.js → requirementDiagram-EFPCY7ZU-CBBmaL70.js} +1 -1
- ksadk/server/static/assets/{sankeyDiagram-P5KCCOFB-C-gr2o9M.js → sankeyDiagram-P5KCCOFB-Doc3rdwp.js} +1 -1
- ksadk/server/static/assets/{sequenceDiagram-WJ2MYXX4-D97NmfKg.js → sequenceDiagram-WJ2MYXX4-0J8R8hWW.js} +1 -1
- ksadk/server/static/assets/{sizeCapture-X5ZJPWSS-DjrPC5FX.js → sizeCapture-X5ZJPWSS-CfFLlWsK.js} +1 -1
- ksadk/server/static/assets/{stateDiagram-HBIQ2CUA-DzMNg1hh.js → stateDiagram-HBIQ2CUA-jBwkjtTy.js} +1 -1
- ksadk/server/static/assets/stateDiagram-v2-4QOOHH4V-Cw1fPb5w.js +1 -0
- ksadk/server/static/assets/{swimlanes-XN3QIQJK-Cssf_CsU.js → swimlanes-XN3QIQJK-B0WxTQf8.js} +1 -1
- ksadk/server/static/assets/swimlanesDiagram-VK2B7HYN-Cc3JMBAF.js +8 -0
- ksadk/server/static/assets/{timeline-definition-24CTP7MA-BWTHzyS1.js → timeline-definition-24CTP7MA-BfCT_75A.js} +1 -1
- ksadk/server/static/assets/treeView-Q6P3EWNA-C05SJHxo.js +1 -0
- ksadk/server/static/assets/treemap-WGGIJYW6-BqNLAhc3.js +1 -0
- ksadk/server/static/assets/{vennDiagram-4TSXK5OY-BSKgJsmR.js → vennDiagram-4TSXK5OY-9gX1VMDC.js} +1 -1
- ksadk/server/static/assets/wardley-WFR3VGLG-DokNktqB.js +1 -0
- ksadk/server/static/assets/{wardleyDiagram-VM6X3IG4-eflHNoaZ.js → wardleyDiagram-VM6X3IG4-sEs_BP6O.js} +1 -1
- ksadk/server/static/assets/{xychartDiagram-S5SC5T6Z-eYqrQ-v4.js → xychartDiagram-S5SC5T6Z-Ll4jvUN9.js} +1 -1
- ksadk/server/static/index.html +2 -2
- ksadk/server/terminal_sessions.py +34 -2
- ksadk/sessions/__init__.py +8 -1
- ksadk/sessions/_checkpoint_resume_audit.py +44 -0
- ksadk/sessions/_in_memory_query.py +112 -0
- ksadk/sessions/_local_service_sync.py +157 -156
- ksadk/sessions/_local_state_sync.py +152 -0
- ksadk/sessions/_local_tables.py +2 -0
- ksadk/sessions/_postgres_checkpoint_read.py +323 -0
- ksadk/sessions/_postgres_checkpoint_stats.py +330 -0
- ksadk/sessions/_postgres_history_read.py +678 -0
- ksadk/sessions/_postgres_schema.py +44 -2
- ksadk/sessions/_postgres_tables.py +2 -0
- ksadk/sessions/_postgres_tool_receipts.py +169 -0
- ksadk/sessions/_resilient_read.py +630 -0
- ksadk/sessions/_tool_receipt_sync.py +119 -0
- ksadk/sessions/agent_identity.py +16 -0
- ksadk/sessions/base.py +278 -0
- ksadk/sessions/db_budget.py +332 -0
- ksadk/sessions/errors.py +12 -0
- ksadk/sessions/history_budget.py +36 -0
- ksadk/sessions/history_identity.py +27 -0
- ksadk/sessions/in_memory.py +376 -113
- ksadk/sessions/invocation_identity.py +235 -0
- ksadk/sessions/local_service.py +345 -0
- ksadk/sessions/postgres_service.py +515 -549
- ksadk/sessions/resilience.py +21 -14
- ksadk/sessions/resilient.py +611 -504
- ksadk/skills/__init__.py +26 -0
- ksadk/skills/events.py +464 -0
- ksadk/skills/loader.py +44 -2
- 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 +400 -56
- 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/service_client.py +6 -1
- ksadk/skills/tool_defs.py +108 -3
- ksadk/studio/a2a_bindings.py +407 -0
- ksadk/studio/a2a_orchestration.py +178 -0
- ksadk/studio/active_run_output.py +92 -0
- ksadk/studio/activity_records.py +542 -0
- ksadk/studio/agent_configuration.py +173 -0
- ksadk/studio/api.py +784 -419
- ksadk/studio/api_a2a_routes.py +93 -0
- ksadk/studio/api_catalog_routes.py +13 -0
- ksadk/studio/api_cloud_chat_routes.py +382 -0
- ksadk/studio/api_contracts.py +31 -2
- ksadk/studio/api_plugin_routes.py +39 -12
- ksadk/studio/api_resource_connections.py +79 -41
- ksadk/studio/attachment_store.py +14 -2
- ksadk/studio/authoring.py +12 -6
- ksadk/studio/authoring_coordinator.py +4 -2
- ksadk/studio/build_resolution.py +117 -0
- ksadk/studio/build_singleflight.py +37 -0
- ksadk/studio/builder.py +32 -2
- ksadk/studio/capabilities.py +31 -9
- ksadk/studio/channel_connections.py +333 -0
- ksadk/studio/cloud.py +113 -387
- ksadk/studio/cloud_gateways.py +424 -0
- ksadk/studio/cloud_shared_web.py +82 -2
- ksadk/studio/codex_agent_service.py +19 -2
- ksadk/studio/codex_builder.py +1 -1
- ksadk/studio/codex_manifest.py +5 -1
- ksadk/studio/codex_provider_build.py +65 -0
- ksadk/studio/codex_run.py +6 -1
- ksadk/studio/compiler.py +112 -6
- ksadk/studio/configuration.py +182 -0
- ksadk/studio/contract_base.py +19 -0
- ksadk/studio/contracts.py +260 -202
- ksadk/studio/dsh_application.py +183 -27
- ksadk/studio/dsh_capability_service.py +302 -189
- ksadk/studio/dsh_lifecycle.py +58 -0
- ksadk/studio/dsh_mcp_transport.py +191 -0
- ksadk/studio/dsh_provider_registration.py +55 -16
- ksadk/studio/entry.py +53 -0
- ksadk/studio/event_store.py +53 -5
- ksadk/studio/execution_host.py +598 -0
- ksadk/studio/framework_run.py +50 -10
- ksadk/studio/hosted_kernel.py +1 -1
- ksadk/studio/interaction_submission.py +265 -0
- ksadk/studio/kernel_registry.py +429 -0
- ksadk/studio/kernel_sqlite_migration.py +181 -0
- ksadk/studio/lifecycle_status.py +43 -0
- ksadk/studio/model_buffered_wire.py +227 -0
- ksadk/studio/model_chat_tools.py +143 -0
- ksadk/studio/model_client.py +1939 -345
- ksadk/studio/model_content_stream.py +129 -0
- ksadk/studio/model_credentials.py +196 -0
- ksadk/studio/model_profile_service.py +89 -40
- ksadk/studio/model_request_projection.py +284 -0
- ksadk/studio/model_responses_content.py +296 -0
- ksadk/studio/model_usage.py +109 -0
- ksadk/studio/model_wire_failure.py +110 -0
- ksadk/studio/model_wire_identity.py +138 -0
- ksadk/studio/model_wire_snapshot.py +45 -0
- ksadk/studio/model_wire_tools.py +283 -0
- ksadk/studio/native_acceptance.py +68 -0
- ksadk/studio/native_approval.py +111 -0
- ksadk/studio/native_browser_port.py +861 -0
- ksadk/studio/native_child_mcp.py +87 -0
- ksadk/studio/native_child_publication.py +68 -0
- ksadk/studio/native_child_skills.py +72 -0
- ksadk/studio/native_child_workspace.py +176 -0
- ksadk/studio/native_command_policy.py +53 -0
- ksadk/studio/native_context_port.py +326 -0
- ksadk/studio/native_context_registration.py +54 -0
- ksadk/studio/native_document_input.py +88 -0
- ksadk/studio/native_documents.py +172 -0
- ksadk/studio/native_final_shape.py +852 -0
- ksadk/studio/native_gateway_stream.py +69 -0
- ksadk/studio/native_hook_port.py +145 -0
- ksadk/studio/native_hook_registration.py +70 -0
- ksadk/studio/native_inventory_disclosure.py +223 -0
- ksadk/studio/native_kernel_admission.py +84 -0
- ksadk/studio/native_language_diagnostics.py +320 -0
- ksadk/studio/native_mcp_disclosure.py +198 -0
- ksadk/studio/native_mcp_tool_port.py +219 -0
- ksadk/studio/native_memory_acceptance.py +362 -0
- ksadk/studio/native_memory_context.py +266 -0
- ksadk/studio/native_memory_flush.py +174 -0
- ksadk/studio/native_memory_sources.py +80 -0
- ksadk/studio/native_memory_tool_port.py +360 -0
- ksadk/studio/native_memory_turn.py +183 -0
- ksadk/studio/native_model_port.py +765 -0
- ksadk/studio/native_model_recovery.py +126 -0
- ksadk/studio/native_options.py +75 -0
- ksadk/studio/native_output_fields.py +58 -0
- ksadk/studio/native_planning.py +156 -0
- ksadk/studio/native_product.py +988 -0
- ksadk/studio/native_read_budget.py +426 -0
- ksadk/studio/native_recovery.py +171 -0
- ksadk/studio/native_scope.py +35 -0
- ksadk/studio/native_session_context_port.py +141 -0
- ksadk/studio/native_session_engine.py +14 -0
- ksadk/studio/native_skill_source.py +74 -0
- ksadk/studio/native_subagent_port.py +700 -0
- ksadk/studio/native_terminal_recovery.py +95 -0
- ksadk/studio/native_test_action.py +610 -0
- ksadk/studio/native_tool_port.py +477 -0
- ksadk/studio/native_user_input.py +60 -0
- ksadk/studio/native_verification_presentation.py +65 -0
- ksadk/studio/native_workspace_diagnostics.py +183 -0
- ksadk/studio/native_workspace_port.py +43 -0
- ksadk/studio/operations.py +34 -9
- ksadk/studio/plugin_composition.py +39 -12
- ksadk/studio/plugin_kernel_adapter.py +89 -0
- ksadk/studio/plugin_lifecycle.py +80 -0
- ksadk/studio/plugin_native_activation.py +163 -0
- ksadk/studio/plugin_runtime.py +832 -99
- ksadk/studio/plugin_runtime_admission.py +57 -0
- ksadk/studio/presentation.py +92 -0
- ksadk/studio/provider_recovery.py +59 -0
- ksadk/studio/public_output_store.py +69 -0
- ksadk/studio/recovery_page.py +70 -0
- ksadk/studio/resource_authority.py +69 -34
- ksadk/studio/resource_catalog.py +14 -12
- ksadk/studio/run_activity.py +848 -0
- ksadk/studio/run_controls.py +185 -0
- ksadk/studio/run_documents.py +127 -0
- ksadk/studio/run_service.py +1220 -335
- ksadk/studio/run_submission_receipts.py +68 -0
- ksadk/studio/runtime_catalog.py +73 -11
- ksadk/studio/runtime_prewarm.py +22 -0
- ksadk/studio/runtime_source.py +1 -1
- ksadk/studio/scheduler_assistant.py +4 -1
- ksadk/studio/scheduler_runtime.py +32 -289
- ksadk/studio/service.py +615 -246
- ksadk/studio/service_settings.py +229 -0
- ksadk/studio/shared_web.py +518 -181
- ksadk/studio/shared_web_response_events.py +180 -0
- ksadk/studio/shared_web_run_state.py +133 -0
- ksadk/studio/skill_discovery.py +305 -3
- ksadk/studio/static/assets/ChannelsPage-xX5HlMId.js +8 -0
- ksadk/studio/static/assets/CodeBlock-DMIf4h33-CkufcPYo.js +44 -0
- ksadk/studio/static/assets/ExecutionTree-v3HexvPo-Bk8wzGSy.js +1 -0
- ksadk/studio/static/assets/MathMessageMarkdown-BesSeCYl-DYG1Wzbx.js +8 -0
- ksadk/studio/static/assets/MermaidBlock-H_0qzQDf-BdXtxug_.js +11 -0
- ksadk/studio/static/assets/MessageMarkdown-CwMTvgFj-BeyLyQHu.js +59 -0
- ksadk/studio/static/assets/PrismRenderer-5pK6tUdb.js +3 -0
- ksadk/studio/static/assets/TeamsPage-CCaaGaVp.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-C7DNDik2.css +2 -0
- ksadk/studio/static/assets/index-Cy68gTlH.js +265 -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 +166 -0
- ksadk/studio/teams_installation.py +217 -0
- ksadk/studio/teams_node.py +549 -0
- ksadk/studio/teams_node_factory.py +558 -0
- ksadk/studio/teams_node_runner.py +72 -0
- ksadk/studio/teams_node_v1.py +935 -0
- ksadk/studio/teams_remote.py +496 -0
- ksadk/studio/templates.py +41 -19
- ksadk/studio/validator.py +13 -0
- ksadk/studio/workspace.py +19 -4
- ksadk/studio/workspace_plugins.py +138 -0
- ksadk/studio/workspace_registry.py +286 -0
- ksadk/tools/a2a_policy.py +5 -0
- ksadk/tools/artifact_observation.py +53 -0
- ksadk/tools/captured_source_artifact.py +68 -0
- ksadk/tools/schema.py +34 -0
- ksadk/toolsets/__init__.py +93 -88
- ksadk/toolsets/a2a.py +89 -89
- ksadk/toolsets/sandbox.py +377 -6
- ksadk/toolsets/skill_management.py +315 -0
- ksadk/toolsets/skills.py +446 -378
- ksadk/toolsets/tool_selection.py +94 -0
- ksadk/toolsets/workspace.py +344 -326
- ksadk/toolsets/workspace_editing.py +291 -0
- ksadk/toolsets/workspace_identity.py +15 -0
- ksadk/toolsets/workspace_model_observation.py +104 -0
- ksadk/toolsets/workspace_mutation.py +75 -0
- ksadk/toolsets/workspace_read_budget.py +216 -0
- ksadk/toolsets/workspace_search.py +192 -0
- ksadk/toolsets/workspace_search_process.py +129 -0
- ksadk/toolsets/workspace_state.py +6 -0
- ksadk/version.py +1 -1
- ksadk_runtime_common/http_headers.py +18 -0
- 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 +28 -14
- agentengine_sdk_python-0.8.4.dist-info/RECORD +0 -1070
- 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.6.dist-info}/WHEEL +0 -0
- {agentengine_sdk_python-0.8.4.dist-info → agentengine_sdk_python-0.8.6.dist-info}/entry_points.txt +0 -0
- {agentengine_sdk_python-0.8.4.dist-info → agentengine_sdk_python-0.8.6.dist-info}/licenses/LICENSE +0 -0
- {agentengine_sdk_python-0.8.4.dist-info → agentengine_sdk_python-0.8.6.dist-info}/top_level.txt +0 -0
- /ksadk/studio/static/assets/{MathMessageMarkdown-CBcDrAw--BEOyPC3w.css → MathMessageMarkdown-BesSeCYl-BEOyPC3w.css} +0 -0
ksadk/kernel/bootstrap.py
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
# -*- coding: utf-8 -*-
|
|
2
|
-
"""生产 composition root(
|
|
2
|
+
"""生产 composition root(Kernel Task 4 Step 4)。
|
|
3
3
|
|
|
4
4
|
``build_agent_kernel_runtime(config) -> AgentKernelRuntime`` 把 AgentKernel
|
|
5
5
|
栈的全部运行时角色组装成一个可启动 / 可关闭的单元:
|
|
@@ -18,6 +18,7 @@ RuntimeAdapter provider、contract digest 或 durable nonce store 时
|
|
|
18
18
|
``build_agent_kernel_runtime`` 直接抛 ``RuntimeError``,绝不静默降级到
|
|
19
19
|
内存栈或本地自签 authority。
|
|
20
20
|
"""
|
|
21
|
+
|
|
21
22
|
from __future__ import annotations
|
|
22
23
|
|
|
23
24
|
import asyncio
|
|
@@ -34,7 +35,7 @@ from ksadk.events.session_event import SessionServiceEventStore
|
|
|
34
35
|
from ksadk.kernel.authorization import AgentControlPermitVerifier, InMemoryNonceStore
|
|
35
36
|
from ksadk.kernel.contract_fingerprints import (
|
|
36
37
|
AGENT_KERNEL_V1_AGGREGATE_DIGEST,
|
|
37
|
-
|
|
38
|
+
runtime_capability_admission_digest,
|
|
38
39
|
runtime_capability_matrix_wire_value,
|
|
39
40
|
)
|
|
40
41
|
from ksadk.kernel.contracts import RuntimeCapabilityMatrix
|
|
@@ -46,10 +47,13 @@ from ksadk.kernel.store import AgentKernelStore, now_utc
|
|
|
46
47
|
from ksadk.kernel.worker import AgentKernelWorker
|
|
47
48
|
from ksadk.runtime.adapter import RuntimeAdapter
|
|
48
49
|
|
|
50
|
+
from ksadk.kernel.readiness import AgentKernelReadiness
|
|
51
|
+
|
|
49
52
|
AuthorityMode = Literal["local", "hosted"]
|
|
50
53
|
DurabilityTier = Literal["durable", "ephemeral"]
|
|
51
54
|
|
|
52
55
|
logger = logging.getLogger(__name__)
|
|
56
|
+
MAX_CONCURRENT_KERNEL_SESSIONS = 64
|
|
53
57
|
|
|
54
58
|
|
|
55
59
|
@dataclass
|
|
@@ -179,116 +183,6 @@ class LeaseHeartbeat:
|
|
|
179
183
|
self._last_tokens.pop(session_id, None)
|
|
180
184
|
|
|
181
185
|
|
|
182
|
-
@dataclass
|
|
183
|
-
class AgentKernelReadiness:
|
|
184
|
-
"""truthful readiness probe:每个维度都是真实查询,不是配置回显。"""
|
|
185
|
-
|
|
186
|
-
runtime: "AgentKernelRuntime"
|
|
187
|
-
|
|
188
|
-
async def check(self) -> dict[str, Any]:
|
|
189
|
-
config = self.runtime.config
|
|
190
|
-
store_ok = False
|
|
191
|
-
try:
|
|
192
|
-
# 真实 store 查询(PG driver 即真实 SQL round-trip)。
|
|
193
|
-
await self.runtime.kernel_store.list_messages(
|
|
194
|
-
config.agent_instance_id
|
|
195
|
-
)
|
|
196
|
-
store_ok = True
|
|
197
|
-
except Exception:
|
|
198
|
-
store_ok = False
|
|
199
|
-
|
|
200
|
-
lease_healthy = True
|
|
201
|
-
activation_id: str | None = None
|
|
202
|
-
for session_id in self.runtime.heartbeat_sessions():
|
|
203
|
-
try:
|
|
204
|
-
lease = await self.runtime.kernel_store.current_lease(
|
|
205
|
-
config.agent_instance_id, session_id
|
|
206
|
-
)
|
|
207
|
-
except Exception:
|
|
208
|
-
lease = None
|
|
209
|
-
if lease is None:
|
|
210
|
-
lease_healthy = False
|
|
211
|
-
continue
|
|
212
|
-
if not self.runtime.lease_heartbeat.owns_lease(session_id, lease):
|
|
213
|
-
# lease 存在但已被其它 activation 接管:对本 runtime 而言
|
|
214
|
-
# 等价于丢失,必须如实上报 not-ready。
|
|
215
|
-
lease_healthy = False
|
|
216
|
-
continue
|
|
217
|
-
activation_id = activation_id or lease.activation_id
|
|
218
|
-
expires = getattr(lease, "lease_expires_at", "")
|
|
219
|
-
try:
|
|
220
|
-
from datetime import datetime
|
|
221
|
-
|
|
222
|
-
expires_at = datetime.fromisoformat(
|
|
223
|
-
str(expires).replace("Z", "+00:00")
|
|
224
|
-
)
|
|
225
|
-
if expires_at <= datetime.now(expires_at.tzinfo):
|
|
226
|
-
lease_healthy = False
|
|
227
|
-
except ValueError:
|
|
228
|
-
lease_healthy = False
|
|
229
|
-
|
|
230
|
-
worker_running = self.runtime.worker_running
|
|
231
|
-
degraded = self.runtime.degraded
|
|
232
|
-
quarantined = self.runtime.quarantined_sessions()
|
|
233
|
-
capability = self.runtime.kernel.capabilities()
|
|
234
|
-
capability_matrix = runtime_capability_matrix_wire_value(capability)
|
|
235
|
-
computed_capability_digest = runtime_capability_matrix_digest(capability)
|
|
236
|
-
# The control plane compares all three digests before declaring an
|
|
237
|
-
# AgentInstance ready. Reporting ready with only a contract digest
|
|
238
|
-
# would conceal a missing bundle/capability projection and make the
|
|
239
|
-
# runtime's health endpoint more optimistic than Server readiness.
|
|
240
|
-
digests_match = all(
|
|
241
|
-
(
|
|
242
|
-
config.contract_digest == AGENT_KERNEL_V1_AGGREGATE_DIGEST,
|
|
243
|
-
config.capability_digest == computed_capability_digest,
|
|
244
|
-
config.bundle_digest,
|
|
245
|
-
)
|
|
246
|
-
)
|
|
247
|
-
ready = (
|
|
248
|
-
store_ok and worker_running and lease_healthy and digests_match
|
|
249
|
-
and not degraded
|
|
250
|
-
)
|
|
251
|
-
health = {
|
|
252
|
-
"ready": ready,
|
|
253
|
-
"store_ok": store_ok,
|
|
254
|
-
"worker_running": worker_running,
|
|
255
|
-
"degraded": degraded,
|
|
256
|
-
# additive:被隔离(恢复失败)的 session 数量;隔离本身不影响
|
|
257
|
-
# ready,其余 session 照常服务。
|
|
258
|
-
"quarantined_sessions": len(quarantined),
|
|
259
|
-
"lease_healthy": lease_healthy,
|
|
260
|
-
"activation_id": activation_id,
|
|
261
|
-
# Contract support is packaged with this KsADK image; never echo
|
|
262
|
-
# an unverified control-plane environment value as evidence.
|
|
263
|
-
"contract_digest": AGENT_KERNEL_V1_AGGREGATE_DIGEST,
|
|
264
|
-
# Likewise derive capabilities from the actual Adapter matrix,
|
|
265
|
-
# rather than trusting the requested deployment digest.
|
|
266
|
-
"capability_digest": computed_capability_digest,
|
|
267
|
-
# Runtime/Operator/Server readiness chain must carry the actual
|
|
268
|
-
# typed capability facts, not merely a digest supplied at deploy
|
|
269
|
-
# time. Server admission uses these to reject unsupported control
|
|
270
|
-
# operations before they enter the durable inbox.
|
|
271
|
-
"capabilities": capability_matrix,
|
|
272
|
-
"bundle_digest": config.bundle_digest,
|
|
273
|
-
"durability_tier": config.durability_tier,
|
|
274
|
-
# Identity is derived from the KsADK source Python imported, not
|
|
275
|
-
# ``importlib.metadata`` for the base image distribution.
|
|
276
|
-
"runtime_identity": runtime_identity(),
|
|
277
|
-
}
|
|
278
|
-
# 诊断字段(additive,runtime 内部端点非 wire 冻结合同):
|
|
279
|
-
# degraded 时必须能从 health 直接回答 "为什么降级、何时降级",
|
|
280
|
-
# 出问题的 session 明细同样可见,运维不必再对着布尔值猜。
|
|
281
|
-
if quarantined:
|
|
282
|
-
health["quarantined_session_ids"] = sorted(quarantined)
|
|
283
|
-
if degraded:
|
|
284
|
-
health["degradation_reason"] = self.runtime._degradation_reason
|
|
285
|
-
health["degraded_at"] = self.runtime._degraded_at
|
|
286
|
-
health["degradation_last_error"] = (
|
|
287
|
-
self.runtime._degraded_last_error
|
|
288
|
-
)
|
|
289
|
-
return health
|
|
290
|
-
|
|
291
|
-
|
|
292
186
|
@dataclass
|
|
293
187
|
class AgentKernelRuntime:
|
|
294
188
|
"""生产 kernel runtime:start() 启动后台 worker/lease loop,close() 全停。"""
|
|
@@ -303,10 +197,14 @@ class AgentKernelRuntime:
|
|
|
303
197
|
session_events: Any = field(repr=False)
|
|
304
198
|
_owns_pool: bool = field(default=False, repr=False)
|
|
305
199
|
_pool: Any = field(default=None, repr=False)
|
|
200
|
+
_owns_store: bool = field(default=False, repr=False)
|
|
306
201
|
|
|
307
202
|
def __post_init__(self) -> None:
|
|
308
203
|
self._tasks: list[asyncio.Task] = []
|
|
204
|
+
self._session_tasks: dict[str, asyncio.Task[bool]] = {}
|
|
309
205
|
self._worker_running = False
|
|
206
|
+
self._last_scheduler_poll = 0.0
|
|
207
|
+
self._session_capacity_exhausted = False
|
|
310
208
|
self._heartbeat_sessions: set[str] = set()
|
|
311
209
|
self._last_renewed: dict[str, float] = {}
|
|
312
210
|
self._degraded = False
|
|
@@ -322,17 +220,13 @@ class AgentKernelRuntime:
|
|
|
322
220
|
|
|
323
221
|
# ------------------------------------------------------------ degradation
|
|
324
222
|
|
|
325
|
-
def _mark_degraded(
|
|
326
|
-
self, reason: str, exc: BaseException | None = None
|
|
327
|
-
) -> None:
|
|
223
|
+
def _mark_degraded(self, reason: str, exc: BaseException | None = None) -> None:
|
|
328
224
|
"""统一降级入口:醒目 ERROR 日志 + 可供 health 端点回读的诊断状态。"""
|
|
329
225
|
|
|
330
226
|
self._degraded = True
|
|
331
227
|
if self._degradation_reason is None:
|
|
332
228
|
self._degradation_reason = reason
|
|
333
|
-
last_error = (
|
|
334
|
-
f"{type(exc).__name__}: {exc}" if exc is not None else "n/a"
|
|
335
|
-
)
|
|
229
|
+
last_error = f"{type(exc).__name__}: {exc}" if exc is not None else "n/a"
|
|
336
230
|
self._degraded_last_error = last_error
|
|
337
231
|
try:
|
|
338
232
|
self._degraded_at = self.config.clock().isoformat()
|
|
@@ -352,7 +246,13 @@ class AgentKernelRuntime:
|
|
|
352
246
|
|
|
353
247
|
@property
|
|
354
248
|
def worker_running(self) -> bool:
|
|
355
|
-
return
|
|
249
|
+
return (
|
|
250
|
+
self._worker_running
|
|
251
|
+
and not self._degraded
|
|
252
|
+
and not self._session_capacity_exhausted
|
|
253
|
+
and time.monotonic() - self._last_scheduler_poll
|
|
254
|
+
<= max(10.0, self.config.poll_interval * 20)
|
|
255
|
+
)
|
|
356
256
|
|
|
357
257
|
@property
|
|
358
258
|
def degraded(self) -> bool:
|
|
@@ -370,32 +270,35 @@ class AgentKernelRuntime:
|
|
|
370
270
|
|
|
371
271
|
@property
|
|
372
272
|
def background_tasks(self) -> list[asyncio.Task]:
|
|
373
|
-
return
|
|
273
|
+
return [*self._tasks, *self._session_tasks.values()]
|
|
374
274
|
|
|
375
275
|
# ------------------------------------------------------------- lifecycle
|
|
376
276
|
|
|
377
277
|
async def start(self) -> None:
|
|
378
278
|
if self._tasks:
|
|
379
279
|
return
|
|
280
|
+
if hasattr(self.kernel_store, "ensure_schema"):
|
|
281
|
+
await self.kernel_store.ensure_schema() # type: ignore[attr-defined]
|
|
380
282
|
self._worker_running = True
|
|
283
|
+
self._last_scheduler_poll = time.monotonic()
|
|
381
284
|
self._tasks.append(asyncio.create_task(self._run_loop(), name="kernel-runtime"))
|
|
382
285
|
# 心跳续约必须是独立任务:run loop 可能长时间阻塞在某个 session 的
|
|
383
286
|
# adapter.start()(hosted pod 上 codex 握手可超过 lease TTL),内联
|
|
384
287
|
# 续约会把其它已持有 lease 的 session 拖过期(stream guard StaleFence)。
|
|
385
|
-
self._tasks.append(
|
|
386
|
-
asyncio.create_task(self._heartbeat_loop(), name="kernel-heartbeat")
|
|
387
|
-
)
|
|
288
|
+
self._tasks.append(asyncio.create_task(self._heartbeat_loop(), name="kernel-heartbeat"))
|
|
388
289
|
|
|
389
290
|
async def close(self) -> None:
|
|
390
|
-
|
|
291
|
+
all_tasks = self.background_tasks
|
|
292
|
+
for task in all_tasks:
|
|
391
293
|
if not task.done():
|
|
392
294
|
task.cancel()
|
|
393
|
-
for task in
|
|
295
|
+
for task in all_tasks:
|
|
394
296
|
try:
|
|
395
297
|
await task
|
|
396
298
|
except (asyncio.CancelledError, Exception):
|
|
397
299
|
pass
|
|
398
300
|
self._tasks.clear()
|
|
301
|
+
self._session_tasks.clear()
|
|
399
302
|
self._worker_running = False
|
|
400
303
|
# best-effort 释放持有的 activation(不阻塞关闭)。
|
|
401
304
|
for session_id in list(self._heartbeat_sessions | self._quarantined):
|
|
@@ -403,9 +306,7 @@ class AgentKernelRuntime:
|
|
|
403
306
|
lease = await self.kernel_store.current_lease(
|
|
404
307
|
self.config.agent_instance_id, session_id
|
|
405
308
|
)
|
|
406
|
-
if lease is not None and self.lease_heartbeat.owns_lease(
|
|
407
|
-
session_id, lease
|
|
408
|
-
):
|
|
309
|
+
if lease is not None and self.lease_heartbeat.owns_lease(session_id, lease):
|
|
409
310
|
await self.kernel_store.release_activation(
|
|
410
311
|
lease.activation_id, expected_fence=lease.fencing_token
|
|
411
312
|
)
|
|
@@ -419,6 +320,11 @@ class AgentKernelRuntime:
|
|
|
419
320
|
await self._pool.close()
|
|
420
321
|
except Exception:
|
|
421
322
|
pass
|
|
323
|
+
if self._owns_store and hasattr(self.kernel_store, "close"):
|
|
324
|
+
try:
|
|
325
|
+
await self.kernel_store.close() # type: ignore[attr-defined]
|
|
326
|
+
except Exception:
|
|
327
|
+
pass
|
|
422
328
|
|
|
423
329
|
# ------------------------------------------------------------- run loop
|
|
424
330
|
|
|
@@ -429,87 +335,128 @@ class AgentKernelRuntime:
|
|
|
429
335
|
if self._degraded:
|
|
430
336
|
return
|
|
431
337
|
progressed = False
|
|
338
|
+
task_failed = False
|
|
432
339
|
try:
|
|
433
|
-
|
|
434
|
-
|
|
435
|
-
if session_id in self._quarantined:
|
|
436
|
-
# 隔离中的 session:不 claim inbox、不恢复、
|
|
437
|
-
# 不写任何 canonical 事件(等待人工清理)。
|
|
340
|
+
for session_id, task in list(self._session_tasks.items()):
|
|
341
|
+
if not task.done():
|
|
438
342
|
continue
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
|
|
445
|
-
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
# 全局性故障(store 不可达或失败扩散到阈值)
|
|
453
|
-
# 才进程级 degraded。
|
|
454
|
-
failure = await self._recover_safely(
|
|
455
|
-
lease, session_id
|
|
456
|
-
)
|
|
457
|
-
if failure is not None:
|
|
458
|
-
if not await self._quarantine_session(
|
|
459
|
-
session_id, failure
|
|
460
|
-
):
|
|
461
|
-
return
|
|
462
|
-
continue
|
|
463
|
-
result = await self.worker.run_once(
|
|
464
|
-
self.config.agent_instance_id,
|
|
465
|
-
lease,
|
|
466
|
-
session_id=session_id,
|
|
467
|
-
)
|
|
468
|
-
if result.outcome in {"claimed", "completed"}:
|
|
469
|
-
progressed = True
|
|
470
|
-
elif result.outcome == "terminal_failure":
|
|
471
|
-
if isinstance(result.error, StaleFenceError):
|
|
472
|
-
# 当前 activation 已失去 fence,不能继续触碰该
|
|
473
|
-
# session,也不应把正常 takeover 误判为坏数据。
|
|
474
|
-
self._heartbeat_sessions.discard(session_id)
|
|
475
|
-
self._last_renewed.pop(session_id, None)
|
|
476
|
-
self.lease_heartbeat.forget(session_id)
|
|
477
|
-
continue
|
|
478
|
-
failure = result.error or RuntimeError(
|
|
479
|
-
"agent kernel command failed without an error detail"
|
|
480
|
-
)
|
|
481
|
-
if not await self._quarantine_session(
|
|
343
|
+
del self._session_tasks[session_id]
|
|
344
|
+
try:
|
|
345
|
+
progressed = task.result() or progressed
|
|
346
|
+
except asyncio.CancelledError:
|
|
347
|
+
raise
|
|
348
|
+
except Exception as exc:
|
|
349
|
+
task_failed = True
|
|
350
|
+
self._store_failures += 1
|
|
351
|
+
logger.exception(
|
|
352
|
+
"agent kernel session poll failed: "
|
|
353
|
+
"agent_instance_id=%s session_id=%s "
|
|
354
|
+
"consecutive_failures=%d",
|
|
355
|
+
self.config.agent_instance_id,
|
|
482
356
|
session_id,
|
|
483
|
-
|
|
484
|
-
|
|
357
|
+
self._store_failures,
|
|
358
|
+
exc_info=exc,
|
|
359
|
+
)
|
|
360
|
+
if (
|
|
361
|
+
self._store_failures >= self.config.store_failure_degrade_threshold
|
|
362
|
+
and not await self._store_reachable()
|
|
485
363
|
):
|
|
364
|
+
self._mark_degraded("store_unreachable", exc)
|
|
486
365
|
return
|
|
487
|
-
|
|
366
|
+
sessions = await self._pending_sessions()
|
|
367
|
+
self._last_scheduler_poll = time.monotonic()
|
|
368
|
+
self._session_capacity_exhausted = False
|
|
369
|
+
for session_id in sorted(sessions):
|
|
370
|
+
if session_id in self._quarantined or session_id in self._session_tasks:
|
|
371
|
+
continue
|
|
372
|
+
if len(self._session_tasks) >= MAX_CONCURRENT_KERNEL_SESSIONS:
|
|
373
|
+
self._session_capacity_exhausted = True
|
|
374
|
+
break
|
|
375
|
+
self._session_tasks[session_id] = asyncio.create_task(
|
|
376
|
+
self._run_session_once(session_id),
|
|
377
|
+
name=f"kernel-session:{session_id}",
|
|
378
|
+
)
|
|
379
|
+
if not task_failed:
|
|
380
|
+
self._store_failures = 0
|
|
488
381
|
except asyncio.CancelledError:
|
|
489
382
|
raise
|
|
490
|
-
except Exception:
|
|
383
|
+
except Exception as exc:
|
|
491
384
|
self._store_failures += 1
|
|
385
|
+
logger.exception(
|
|
386
|
+
"agent kernel poll failed: agent_instance_id=%s "
|
|
387
|
+
"consecutive_failures=%d",
|
|
388
|
+
self.config.agent_instance_id,
|
|
389
|
+
self._store_failures,
|
|
390
|
+
)
|
|
492
391
|
if (
|
|
493
|
-
self._store_failures
|
|
494
|
-
>= self.config.store_failure_degrade_threshold
|
|
392
|
+
self._store_failures >= self.config.store_failure_degrade_threshold
|
|
495
393
|
and not await self._store_reachable()
|
|
496
394
|
):
|
|
497
395
|
# store 持续不可达是全局性故障:宁降级不静默。
|
|
498
|
-
self._mark_degraded("store_unreachable")
|
|
396
|
+
self._mark_degraded("store_unreachable", exc)
|
|
499
397
|
return
|
|
500
398
|
await asyncio.sleep(self.config.poll_interval * 4)
|
|
501
399
|
continue
|
|
502
|
-
if
|
|
503
|
-
await asyncio.sleep(self.config.poll_interval)
|
|
400
|
+
await asyncio.sleep(0 if progressed else self.config.poll_interval)
|
|
504
401
|
finally:
|
|
505
402
|
self._worker_running = False
|
|
506
403
|
|
|
404
|
+
async def _run_session_once(self, session_id: str) -> bool:
|
|
405
|
+
"""Process one session without stalling admission for other sessions."""
|
|
406
|
+
|
|
407
|
+
lease, took_over = await self.lease_heartbeat.ensure_lease(session_id)
|
|
408
|
+
if lease is None:
|
|
409
|
+
return False
|
|
410
|
+
self._heartbeat_sessions.add(session_id)
|
|
411
|
+
self._last_renewed[session_id] = time.monotonic()
|
|
412
|
+
if took_over:
|
|
413
|
+
failure = await self._recover_safely(lease, session_id)
|
|
414
|
+
if failure is not None:
|
|
415
|
+
await self._quarantine_session(session_id, failure)
|
|
416
|
+
return False
|
|
417
|
+
active = await self.kernel_store.find_active_run(
|
|
418
|
+
self.config.agent_instance_id, session_id
|
|
419
|
+
)
|
|
420
|
+
if active is not None and self.worker.take_stream_failure(
|
|
421
|
+
active.run_id, lease
|
|
422
|
+
) is not None:
|
|
423
|
+
try:
|
|
424
|
+
await self.recovery.settle_interrupted(
|
|
425
|
+
self.config.agent_instance_id, lease,
|
|
426
|
+
session_id=session_id, reason="runtime_stream_failed",
|
|
427
|
+
)
|
|
428
|
+
return True
|
|
429
|
+
except StaleFenceError:
|
|
430
|
+
self._heartbeat_sessions.discard(session_id)
|
|
431
|
+
self._last_renewed.pop(session_id, None)
|
|
432
|
+
self.lease_heartbeat.forget(session_id)
|
|
433
|
+
return False
|
|
434
|
+
except Exception as error:
|
|
435
|
+
await self._quarantine_session(
|
|
436
|
+
session_id, error, context="background stream settlement"
|
|
437
|
+
)
|
|
438
|
+
return False
|
|
439
|
+
result = await self.worker.run_once(
|
|
440
|
+
self.config.agent_instance_id, lease, session_id=session_id
|
|
441
|
+
)
|
|
442
|
+
if result.outcome == "terminal_failure":
|
|
443
|
+
if isinstance(result.error, StaleFenceError):
|
|
444
|
+
self._heartbeat_sessions.discard(session_id)
|
|
445
|
+
self._last_renewed.pop(session_id, None)
|
|
446
|
+
self.lease_heartbeat.forget(session_id)
|
|
447
|
+
else:
|
|
448
|
+
failure = result.error or RuntimeError(
|
|
449
|
+
"agent kernel command failed without an error detail"
|
|
450
|
+
)
|
|
451
|
+
await self._quarantine_session(
|
|
452
|
+
session_id, failure, context="command execution"
|
|
453
|
+
)
|
|
454
|
+
return result.outcome in {"claimed", "completed"}
|
|
455
|
+
|
|
507
456
|
async def _heartbeat_loop(self) -> None:
|
|
508
457
|
"""独立心跳任务:按 TTL/3 节奏续约所有已持有的 lease。"""
|
|
509
458
|
|
|
510
|
-
interval = max(
|
|
511
|
-
self.config.lease_ttl_seconds / 3.0, self.config.poll_interval
|
|
512
|
-
)
|
|
459
|
+
interval = max(self.config.lease_ttl_seconds / 3.0, self.config.poll_interval)
|
|
513
460
|
while True:
|
|
514
461
|
await asyncio.sleep(interval / 2.0)
|
|
515
462
|
await self._renew_leased_sessions()
|
|
@@ -526,9 +473,7 @@ class AgentKernelRuntime:
|
|
|
526
473
|
activation lease 仍由本 runtime 持有,就以 TTL/3 的节奏幂等续约。
|
|
527
474
|
"""
|
|
528
475
|
|
|
529
|
-
interval = max(
|
|
530
|
-
self.config.lease_ttl_seconds / 3.0, self.config.poll_interval
|
|
531
|
-
)
|
|
476
|
+
interval = max(self.config.lease_ttl_seconds / 3.0, self.config.poll_interval)
|
|
532
477
|
now = time.monotonic()
|
|
533
478
|
for session_id in sorted(self._heartbeat_sessions):
|
|
534
479
|
if session_id in self._quarantined:
|
|
@@ -537,9 +482,7 @@ class AgentKernelRuntime:
|
|
|
537
482
|
continue
|
|
538
483
|
self._last_renewed[session_id] = now
|
|
539
484
|
try:
|
|
540
|
-
lease, took_over = await self.lease_heartbeat.ensure_lease(
|
|
541
|
-
session_id
|
|
542
|
-
)
|
|
485
|
+
lease, took_over = await self.lease_heartbeat.ensure_lease(session_id)
|
|
543
486
|
except asyncio.CancelledError:
|
|
544
487
|
raise
|
|
545
488
|
except Exception:
|
|
@@ -555,14 +498,10 @@ class AgentKernelRuntime:
|
|
|
555
498
|
if failure is not None:
|
|
556
499
|
if not await self._quarantine_session(session_id, failure):
|
|
557
500
|
if not self._degraded:
|
|
558
|
-
self._mark_degraded(
|
|
559
|
-
"renew_recovery_failure", failure
|
|
560
|
-
)
|
|
501
|
+
self._mark_degraded("renew_recovery_failure", failure)
|
|
561
502
|
return
|
|
562
503
|
|
|
563
|
-
async def _recover_safely(
|
|
564
|
-
self, lease, session_id: str | None = None
|
|
565
|
-
) -> Exception | None:
|
|
504
|
+
async def _recover_safely(self, lease, session_id: str | None = None) -> Exception | None:
|
|
566
505
|
"""takeover 后的安全恢复:失败必须持久化收口,否则返回失败原因。
|
|
567
506
|
|
|
568
507
|
返回 None 表示恢复路径已收口(含 durable interrupted 兜底),
|
|
@@ -571,7 +510,11 @@ class AgentKernelRuntime:
|
|
|
571
510
|
"""
|
|
572
511
|
|
|
573
512
|
try:
|
|
574
|
-
await self.recovery.recover(
|
|
513
|
+
report = await self.recovery.recover(
|
|
514
|
+
self.config.agent_instance_id, lease, session_id=session_id
|
|
515
|
+
)
|
|
516
|
+
if getattr(report, "outcome", None) == "failed":
|
|
517
|
+
raise RuntimeError(f"runtime recovery failed: {report.reason}")
|
|
575
518
|
return None
|
|
576
519
|
except Exception as exc:
|
|
577
520
|
first_failure = exc
|
|
@@ -589,7 +532,7 @@ class AgentKernelRuntime:
|
|
|
589
532
|
)
|
|
590
533
|
try:
|
|
591
534
|
await self.recovery.settle_interrupted(
|
|
592
|
-
self.config.agent_instance_id, lease
|
|
535
|
+
self.config.agent_instance_id, lease, session_id=session_id
|
|
593
536
|
)
|
|
594
537
|
# 主恢复失败但 durable interrupted 兜底收口成功:半恢复状态,
|
|
595
538
|
# 运维需要可见(事件流里会出现确定性的 interrupted 收口)。
|
|
@@ -644,9 +587,7 @@ class AgentKernelRuntime:
|
|
|
644
587
|
|
|
645
588
|
if not await self._store_reachable():
|
|
646
589
|
# store 本身不可达:这不是单个 session 的问题。
|
|
647
|
-
self._mark_degraded(
|
|
648
|
-
"store_unreachable_during_recovery", exc
|
|
649
|
-
)
|
|
590
|
+
self._mark_degraded("store_unreachable_during_recovery", exc)
|
|
650
591
|
return False
|
|
651
592
|
self._quarantined.add(session_id)
|
|
652
593
|
self._recovery_failed_sessions.add(session_id)
|
|
@@ -662,28 +603,34 @@ class AgentKernelRuntime:
|
|
|
662
603
|
type(exc).__name__,
|
|
663
604
|
exc,
|
|
664
605
|
)
|
|
665
|
-
if (
|
|
666
|
-
len(self._recovery_failed_sessions)
|
|
667
|
-
>= self.config.quarantine_degrade_threshold
|
|
668
|
-
):
|
|
606
|
+
if len(self._recovery_failed_sessions) >= self.config.quarantine_degrade_threshold:
|
|
669
607
|
self._mark_degraded(
|
|
670
|
-
"recovery_failures_spread_to_%d_sessions" % len(
|
|
671
|
-
self._recovery_failed_sessions
|
|
672
|
-
),
|
|
608
|
+
"recovery_failures_spread_to_%d_sessions" % len(self._recovery_failed_sessions),
|
|
673
609
|
exc,
|
|
674
610
|
)
|
|
675
611
|
return False
|
|
676
612
|
return True
|
|
677
613
|
|
|
678
614
|
async def _pending_sessions(self) -> set[str]:
|
|
679
|
-
messages = await self.kernel_store.list_messages(
|
|
680
|
-
self.config.agent_instance_id
|
|
681
|
-
)
|
|
615
|
+
messages = await self.kernel_store.list_messages(self.config.agent_instance_id)
|
|
682
616
|
inbox_sessions = {
|
|
683
617
|
message.session_id
|
|
684
618
|
for message in messages
|
|
685
619
|
if message.status.value in ("accepted", "claimed")
|
|
686
620
|
}
|
|
621
|
+
# A process may die after the Inbox claim is completed but before the
|
|
622
|
+
# Runtime run reaches a terminal state. On restart there is then no
|
|
623
|
+
# pending Inbox row to discover the session from; scan sessions seen in
|
|
624
|
+
# the durable Inbox and retain those with an open Run for takeover.
|
|
625
|
+
known_sessions = {message.session_id for message in messages}
|
|
626
|
+
open_run_sessions = {
|
|
627
|
+
session_id
|
|
628
|
+
for session_id in known_sessions
|
|
629
|
+
if await self.kernel_store.find_active_run(
|
|
630
|
+
self.config.agent_instance_id, session_id
|
|
631
|
+
)
|
|
632
|
+
is not None
|
|
633
|
+
}
|
|
687
634
|
# Inbox is completed as soon as a stream is launched. Keep renewing
|
|
688
635
|
# the owning lease after the independent live execution finishes too:
|
|
689
636
|
# this runtime remains the session's activation owner while the Pod is
|
|
@@ -692,7 +639,7 @@ class AgentKernelRuntime:
|
|
|
692
639
|
# releases the retained leases; an ungraceful stop lets their TTL
|
|
693
640
|
# expire for recovery by a new activation.
|
|
694
641
|
active_sessions = self.worker.active_session_ids()
|
|
695
|
-
return inbox_sessions | active_sessions
|
|
642
|
+
return inbox_sessions | open_run_sessions | active_sessions
|
|
696
643
|
|
|
697
644
|
|
|
698
645
|
# ---------------------------------------------------------------------------
|
|
@@ -776,6 +723,7 @@ def build_agent_kernel_runtime(
|
|
|
776
723
|
session_events = config.session_events
|
|
777
724
|
session_service = config.session_service
|
|
778
725
|
owns_pool = config.owns_pool
|
|
726
|
+
owns_store = False
|
|
779
727
|
pool = config.pool
|
|
780
728
|
|
|
781
729
|
if store is None or session_events is None:
|
|
@@ -788,9 +736,7 @@ def build_agent_kernel_runtime(
|
|
|
788
736
|
from ksadk.sessions.postgres_service import PostgresSessionService
|
|
789
737
|
|
|
790
738
|
if not config.dsn:
|
|
791
|
-
raise RuntimeError(
|
|
792
|
-
"postgres agent kernel runtime requires a store DSN"
|
|
793
|
-
)
|
|
739
|
+
raise RuntimeError("postgres agent kernel runtime requires a store DSN")
|
|
794
740
|
if session_service is None:
|
|
795
741
|
session_service = PostgresSessionService(
|
|
796
742
|
dsn=config.dsn,
|
|
@@ -806,11 +752,23 @@ def build_agent_kernel_runtime(
|
|
|
806
752
|
workspace_id=session_service.workspace_id,
|
|
807
753
|
)
|
|
808
754
|
kernel_store: AgentKernelStore = PostgresAgentKernelStore(
|
|
809
|
-
pool, event_log
|
|
755
|
+
pool, event_log, tenant_id=session_service.tenant_id
|
|
810
756
|
)
|
|
811
757
|
# typed RuntimeEvent 写路径走 fenced store:每个
|
|
812
758
|
# ActivationWriteGuard append 在同一事务验证 activation 行。
|
|
813
759
|
events = PostgresFencedSessionEventStore(kernel_store) # type: ignore[arg-type]
|
|
760
|
+
elif config.driver == "sqlite":
|
|
761
|
+
from ksadk.kernel.sqlite_store import SQLiteAgentKernelStore
|
|
762
|
+
from ksadk.sessions.in_memory import InMemorySessionService
|
|
763
|
+
|
|
764
|
+
if not config.dsn:
|
|
765
|
+
raise RuntimeError("sqlite agent kernel runtime requires a database path")
|
|
766
|
+
if session_service is None:
|
|
767
|
+
session_service = InMemorySessionService()
|
|
768
|
+
base_events = SessionServiceEventStore(session_service)
|
|
769
|
+
kernel_store = SQLiteAgentKernelStore(config.dsn, base_events)
|
|
770
|
+
events = base_events
|
|
771
|
+
owns_store = True
|
|
814
772
|
else:
|
|
815
773
|
from ksadk.kernel.memory_store import InMemoryAgentKernelStore
|
|
816
774
|
from ksadk.sessions.in_memory import InMemorySessionService
|
|
@@ -845,13 +803,14 @@ def build_agent_kernel_runtime(
|
|
|
845
803
|
raise RuntimeError(
|
|
846
804
|
"hosted agent kernel runtime cannot determine adapter capabilities"
|
|
847
805
|
) from exc
|
|
848
|
-
computed_capability_digest =
|
|
849
|
-
capability_snapshot
|
|
806
|
+
computed_capability_digest = runtime_capability_admission_digest(
|
|
807
|
+
capability_snapshot, config.capability_digest
|
|
850
808
|
)
|
|
851
809
|
if config.capability_digest != computed_capability_digest:
|
|
852
810
|
raise RuntimeError(
|
|
853
811
|
"capability_digest_mismatch: hosted adapter capabilities do not "
|
|
854
|
-
"match the control-plane deployment digest"
|
|
812
|
+
"match the control-plane deployment digest "
|
|
813
|
+
f"(expected={config.capability_digest}, actual={computed_capability_digest})"
|
|
855
814
|
)
|
|
856
815
|
|
|
857
816
|
def capabilities() -> RuntimeCapabilityMatrix: # type: ignore[misc]
|
|
@@ -878,6 +837,7 @@ def build_agent_kernel_runtime(
|
|
|
878
837
|
store,
|
|
879
838
|
adapter_factory=adapter_provider,
|
|
880
839
|
session_events=session_events,
|
|
840
|
+
session_service=session_service,
|
|
881
841
|
start_request_defaults=config.start_request_defaults,
|
|
882
842
|
)
|
|
883
843
|
recovery = RecoveryCoordinator(
|
|
@@ -887,20 +847,23 @@ def build_agent_kernel_runtime(
|
|
|
887
847
|
executor=config.runtime_executor,
|
|
888
848
|
launch_context=config.launch_context,
|
|
889
849
|
adapter_factory=adapter_provider,
|
|
850
|
+
session_service=session_service,
|
|
890
851
|
# takeover 重建的 live execution 交还 worker(ActiveExecution 归
|
|
891
852
|
# 当前 activation 持有,Interaction 回包才能打到同一 client 实例)。
|
|
892
853
|
execution_sink=worker.adopt_execution,
|
|
854
|
+
recovery_stream_sink=worker.recover_stream,
|
|
893
855
|
)
|
|
894
856
|
heartbeat = LeaseHeartbeat(
|
|
895
857
|
store,
|
|
896
858
|
agent_instance_id=config.agent_instance_id,
|
|
897
|
-
activation_id=config.activation_id
|
|
898
|
-
or f"{config.agent_instance_id}:kernel-runtime",
|
|
859
|
+
activation_id=config.activation_id or f"{config.agent_instance_id}:kernel-runtime",
|
|
899
860
|
runtime_type=config.runtime_type,
|
|
900
861
|
bundle_digest=config.bundle_digest,
|
|
901
|
-
#
|
|
902
|
-
#
|
|
903
|
-
capability_digest=
|
|
862
|
+
# The lease carries the verified admission policy; command admission
|
|
863
|
+
# continues to read the adapter's complete capability matrix.
|
|
864
|
+
capability_digest=runtime_capability_admission_digest(
|
|
865
|
+
capabilities(), config.capability_digest
|
|
866
|
+
),
|
|
904
867
|
lease_ttl_seconds=config.lease_ttl_seconds,
|
|
905
868
|
)
|
|
906
869
|
runtime = AgentKernelRuntime(
|
|
@@ -914,6 +877,7 @@ def build_agent_kernel_runtime(
|
|
|
914
877
|
session_events=session_events,
|
|
915
878
|
_owns_pool=owns_pool,
|
|
916
879
|
_pool=pool,
|
|
880
|
+
_owns_store=owns_store,
|
|
917
881
|
)
|
|
918
882
|
runtime.readiness.runtime = runtime
|
|
919
883
|
return runtime
|
|
@@ -930,6 +894,7 @@ async def bootstrap_agent_kernel_runtime_from_env(
|
|
|
930
894
|
launch_context: Any | None = None,
|
|
931
895
|
start_request_defaults: dict[str, Any] | None = None,
|
|
932
896
|
session_service: Any | None = None,
|
|
897
|
+
before_start: Any | None = None,
|
|
933
898
|
) -> AgentKernelRuntime | None:
|
|
934
899
|
"""Operator env 投影 -> 生产 runtime(AGENT_KERNEL_ENABLED=1 时)。
|
|
935
900
|
|
|
@@ -958,13 +923,9 @@ async def bootstrap_agent_kernel_runtime_from_env(
|
|
|
958
923
|
driver = os.environ.get("AGENT_KERNEL_STORE_DRIVER", "memory").strip().lower()
|
|
959
924
|
dsn = os.environ.get("AGENT_KERNEL_STORE_DSN", "").strip()
|
|
960
925
|
jwks_url = os.environ.get(ENV_JWKS_URL, "").strip()
|
|
961
|
-
session_namespace = (
|
|
962
|
-
os.environ.get("KSADK_SESSION_NAMESPACE", "default").strip() or "default"
|
|
963
|
-
)
|
|
926
|
+
session_namespace = os.environ.get("KSADK_SESSION_NAMESPACE", "default").strip() or "default"
|
|
964
927
|
tenant_id = (
|
|
965
|
-
os.environ.get("KSADK_TENANT_ID")
|
|
966
|
-
or os.environ.get("AGENTENGINE_TENANT_ID")
|
|
967
|
-
or "default"
|
|
928
|
+
os.environ.get("KSADK_TENANT_ID") or os.environ.get("AGENTENGINE_TENANT_ID") or "default"
|
|
968
929
|
).strip()
|
|
969
930
|
workspace_id = (
|
|
970
931
|
os.environ.get("KSADK_WORKSPACE_ID")
|
|
@@ -972,21 +933,25 @@ async def bootstrap_agent_kernel_runtime_from_env(
|
|
|
972
933
|
or "default"
|
|
973
934
|
).strip()
|
|
974
935
|
mode: AuthorityMode = authority_mode() # type: ignore[assignment]
|
|
975
|
-
durability_tier: DurabilityTier =
|
|
976
|
-
"AGENT_KERNEL_DURABILITY_TIER", "durable"
|
|
977
|
-
)
|
|
978
|
-
injected_contract_digest = os.environ.get(
|
|
979
|
-
|
|
980
|
-
).strip()
|
|
981
|
-
if (
|
|
982
|
-
mode == "hosted"
|
|
983
|
-
and injected_contract_digest != AGENT_KERNEL_V1_AGGREGATE_DIGEST
|
|
984
|
-
):
|
|
936
|
+
durability_tier: DurabilityTier = (
|
|
937
|
+
os.environ.get("AGENT_KERNEL_DURABILITY_TIER", "durable").strip().lower()
|
|
938
|
+
) # type: ignore[assignment]
|
|
939
|
+
injected_contract_digest = os.environ.get("AGENT_KERNEL_CONTRACT_DIGEST", "").strip()
|
|
940
|
+
if mode == "hosted" and injected_contract_digest != AGENT_KERNEL_V1_AGGREGATE_DIGEST:
|
|
985
941
|
raise RuntimeError(
|
|
986
942
|
"contract_digest_mismatch: hosted agent kernel runtime image "
|
|
987
943
|
"does not support the control-plane contract digest"
|
|
988
944
|
)
|
|
989
945
|
|
|
946
|
+
# Lazy framework adapters learn their native checkpoint capabilities during
|
|
947
|
+
# preflight. Snapshotting before it permanently disables cold recovery even
|
|
948
|
+
# when the deployment has configured durable native sessions.
|
|
949
|
+
capabilities = None
|
|
950
|
+
if adapter_provider is not None:
|
|
951
|
+
capability_adapter = adapter_provider()
|
|
952
|
+
await capability_adapter.preflight()
|
|
953
|
+
capabilities = capability_adapter.capabilities
|
|
954
|
+
|
|
990
955
|
pool = None
|
|
991
956
|
owns_pool = False
|
|
992
957
|
if driver == "postgres":
|
|
@@ -1015,7 +980,7 @@ async def bootstrap_agent_kernel_runtime_from_env(
|
|
|
1015
980
|
workspace_id=session_service.workspace_id,
|
|
1016
981
|
)
|
|
1017
982
|
store: AgentKernelStore = PostgresAgentKernelStore(
|
|
1018
|
-
pool, event_log, owns_pool=True
|
|
983
|
+
pool, event_log, tenant_id=session_service.tenant_id, owns_pool=True
|
|
1019
984
|
)
|
|
1020
985
|
await store.ensure_schema()
|
|
1021
986
|
session_events: Any = PostgresFencedSessionEventStore(store)
|
|
@@ -1052,11 +1017,10 @@ async def bootstrap_agent_kernel_runtime_from_env(
|
|
|
1052
1017
|
permit_issuer=os.environ.get("AGENT_CONTROL_PERMIT_ISSUER", ""),
|
|
1053
1018
|
nonce_store=nonce_store,
|
|
1054
1019
|
adapter_provider=adapter_provider,
|
|
1020
|
+
capabilities=capabilities,
|
|
1055
1021
|
start_request_defaults=dict(start_request_defaults or {}),
|
|
1056
1022
|
contract_digest=(
|
|
1057
|
-
AGENT_KERNEL_V1_AGGREGATE_DIGEST
|
|
1058
|
-
if mode == "hosted"
|
|
1059
|
-
else injected_contract_digest
|
|
1023
|
+
AGENT_KERNEL_V1_AGGREGATE_DIGEST if mode == "hosted" else injected_contract_digest
|
|
1060
1024
|
),
|
|
1061
1025
|
capability_digest=os.environ.get("AGENT_KERNEL_CAPABILITY_DIGEST", ""),
|
|
1062
1026
|
bundle_digest=os.environ.get("AGENT_BUNDLE_DIGEST", ""),
|
|
@@ -1074,12 +1038,16 @@ async def bootstrap_agent_kernel_runtime_from_env(
|
|
|
1074
1038
|
# 组合才是 activation owner;hosted 少了它必须拒绝启动,不能退回到
|
|
1075
1039
|
# 所有副本共享的固定字符串。
|
|
1076
1040
|
activation_id=f"{agent_instance_id}:{pod_uid}" if pod_uid else None,
|
|
1077
|
-
lease_ttl_seconds=float(
|
|
1078
|
-
os.environ.get("AGENT_KERNEL_LEASE_TTL_SECONDS", "60") or "60"
|
|
1079
|
-
),
|
|
1041
|
+
lease_ttl_seconds=float(os.environ.get("AGENT_KERNEL_LEASE_TTL_SECONDS", "60") or "60"),
|
|
1080
1042
|
)
|
|
1081
1043
|
runtime = build_agent_kernel_runtime(config)
|
|
1082
|
-
|
|
1044
|
+
try:
|
|
1045
|
+
if before_start is not None:
|
|
1046
|
+
await before_start(runtime)
|
|
1047
|
+
await runtime.start()
|
|
1048
|
+
except BaseException:
|
|
1049
|
+
await runtime.close()
|
|
1050
|
+
raise
|
|
1083
1051
|
set_agent_kernel(runtime.kernel)
|
|
1084
1052
|
set_agent_kernel_runtime(runtime)
|
|
1085
1053
|
return runtime
|