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/runners/adk_runner.py
CHANGED
|
@@ -5,47 +5,41 @@ ADKRunner - Google ADK 框架运行时
|
|
|
5
5
|
支持通过环境变量配置记忆体 (ShortTermMemory / LongTermMemory)。
|
|
6
6
|
"""
|
|
7
7
|
|
|
8
|
+
from __future__ import annotations
|
|
9
|
+
|
|
8
10
|
import asyncio
|
|
9
11
|
import base64
|
|
10
12
|
import inspect
|
|
13
|
+
import json
|
|
11
14
|
import logging
|
|
12
15
|
import os
|
|
16
|
+
from contextlib import aclosing
|
|
13
17
|
from dataclasses import dataclass
|
|
14
18
|
from importlib.metadata import PackageNotFoundError
|
|
15
19
|
from importlib.metadata import version as _pkg_version
|
|
16
20
|
from pathlib import Path
|
|
17
|
-
from typing import Any, AsyncIterator, Dict, Mapping, Optional, cast
|
|
21
|
+
from typing import TYPE_CHECKING, Any, AsyncGenerator, AsyncIterator, Dict, Mapping, Optional, cast
|
|
18
22
|
|
|
19
23
|
from opentelemetry import trace
|
|
20
24
|
|
|
21
25
|
from ksadk.compat.adk_compat import genai_types as types
|
|
22
26
|
from ksadk.conversations.attachments import classify_attachment_kind, read_attachment_uri_bytes
|
|
23
27
|
from ksadk.conversations.model_context import supports_native_image_input
|
|
28
|
+
from ksadk.runners._session_identity import ADKSessionIdentityMixin
|
|
24
29
|
from ksadk.runners.base_runner import BaseRunner
|
|
25
30
|
from ksadk.runners.usage_accumulator import accumulate_usage
|
|
26
31
|
from ksadk.runners.utils import load_agent_module
|
|
27
32
|
from ksadk.sessions.continuity import ADKSessionAdapter
|
|
28
33
|
|
|
34
|
+
if TYPE_CHECKING:
|
|
35
|
+
from ksadk.events.canonical import RuntimeEvent
|
|
36
|
+
|
|
29
37
|
logger = logging.getLogger(__name__)
|
|
30
38
|
|
|
31
39
|
tracer = trace.get_tracer(__name__)
|
|
32
40
|
|
|
33
41
|
|
|
34
|
-
|
|
35
|
-
"""读取 A2A→GenAI Part 保留下来的扩展 metadata 标记。"""
|
|
36
|
-
metadata = getattr(part, "part_metadata", None)
|
|
37
|
-
if isinstance(metadata, Mapping):
|
|
38
|
-
return bool(metadata.get(key))
|
|
39
|
-
getter = getattr(metadata, "get", None)
|
|
40
|
-
if callable(getter):
|
|
41
|
-
try:
|
|
42
|
-
return bool(getter(key))
|
|
43
|
-
except (KeyError, TypeError, ValueError):
|
|
44
|
-
return False
|
|
45
|
-
return False
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
class ADKRunner(BaseRunner):
|
|
42
|
+
class ADKRunner(ADKSessionIdentityMixin, BaseRunner):
|
|
49
43
|
"""ADK 框架运行时"""
|
|
50
44
|
|
|
51
45
|
def __init__(self, detection_result: Any, project_dir: str):
|
|
@@ -54,6 +48,7 @@ class ADKRunner(BaseRunner):
|
|
|
54
48
|
self._session_service: Any = None
|
|
55
49
|
# Map external session_ids (e.g. from run_interactive or web) to ADK internal session IDs
|
|
56
50
|
self._session_map: Dict[str, str] = {}
|
|
51
|
+
self._session_user_map: Dict[str, str] = {}
|
|
57
52
|
# Fallback default session
|
|
58
53
|
self._default_session_id: Optional[str] = None
|
|
59
54
|
# Memory integration
|
|
@@ -304,9 +299,7 @@ class ADKRunner(BaseRunner):
|
|
|
304
299
|
if self._short_term_memory is None:
|
|
305
300
|
self._short_term_memory = self._init_short_term_memory()
|
|
306
301
|
if self._short_term_memory is not None and self._session_service is None:
|
|
307
|
-
self._session_service = getattr(
|
|
308
|
-
self._short_term_memory, "session_service", None
|
|
309
|
-
)
|
|
302
|
+
self._session_service = getattr(self._short_term_memory, "session_service", None)
|
|
310
303
|
resumable = self._resolve_resumability()
|
|
311
304
|
self._resume_disabled_reason = None
|
|
312
305
|
self._resume_disabled_reason_code = None
|
|
@@ -333,35 +326,45 @@ class ADKRunner(BaseRunner):
|
|
|
333
326
|
await result
|
|
334
327
|
|
|
335
328
|
async def attach_runtime_handle(self, handle: Any) -> bool:
|
|
336
|
-
"""Validate
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
invocation id. This seam proves the deployment-side prerequisites
|
|
340
|
-
before Runtime v2 accepts a handle restored from session metadata.
|
|
341
|
-
"""
|
|
329
|
+
"""Validate the admitted run binding and its persisted native invocation."""
|
|
330
|
+
from ksadk.sessions import resolve_session_service
|
|
331
|
+
from ksadk.sessions.continuity import ConversationSessionCore
|
|
342
332
|
|
|
343
333
|
if str(getattr(handle, "runtime_type", "") or "").strip().lower() != "adk":
|
|
344
334
|
return False
|
|
345
335
|
native_ref = getattr(handle, "native_ref", None)
|
|
346
336
|
if not isinstance(native_ref, Mapping):
|
|
347
337
|
return False
|
|
338
|
+
await self.prepare_runtime_capabilities()
|
|
339
|
+
capability = self.describe_checkpoint_capability()
|
|
340
|
+
if not all(capability.get(key) for key in ("Supported", "Durable", "SharedAcrossPods")):
|
|
341
|
+
return False
|
|
342
|
+
core = ConversationSessionCore(resolve_session_service())
|
|
343
|
+
binding = await core.get_binding_by_session_id(handle.session_id, "adk")
|
|
344
|
+
internal_id = str(binding.get("internal_session_id") or "")
|
|
345
|
+
native_user = str(binding.get("native_user_id") or "")
|
|
346
|
+
if not internal_id or not native_user:
|
|
347
|
+
return False
|
|
348
|
+
invocation_map = dict(binding.get("invocation_map") or {})
|
|
349
|
+
if handle.run_id not in invocation_map and internal_id != handle.session_id:
|
|
350
|
+
# Existing collectors key their invocation map by the native
|
|
351
|
+
# session. Follow only the durable external-to-native binding.
|
|
352
|
+
native_binding = await core.get_binding_by_session_id(internal_id, "adk")
|
|
353
|
+
invocation_map = dict(native_binding.get("invocation_map") or {})
|
|
354
|
+
invocation_id = str(invocation_map.get(handle.run_id) or "")
|
|
355
|
+
if not invocation_id:
|
|
356
|
+
return False
|
|
348
357
|
framework_ref = native_ref.get("framework_ref")
|
|
349
358
|
adk_ref = framework_ref.get("adk") if isinstance(framework_ref, Mapping) else None
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
).strip()
|
|
355
|
-
if not invocation_id:
|
|
359
|
+
hints = [native_ref.get("invocation_id")]
|
|
360
|
+
if isinstance(adk_ref, Mapping):
|
|
361
|
+
hints.append(adk_ref.get("invocation_id"))
|
|
362
|
+
if any(value is not None and str(value) != invocation_id for value in hints):
|
|
356
363
|
return False
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
return
|
|
361
|
-
capability.get("Supported")
|
|
362
|
-
and capability.get("Durable")
|
|
363
|
-
and capability.get("SharedAcrossPods")
|
|
364
|
-
)
|
|
364
|
+
session = await self._get_adk_session(user_id=native_user, session_id=internal_id)
|
|
365
|
+
if session is None:
|
|
366
|
+
return False
|
|
367
|
+
return any(event.invocation_id == invocation_id for event in session.events)
|
|
365
368
|
|
|
366
369
|
def describe_checkpoint_capability(self) -> dict[str, Any]:
|
|
367
370
|
resumable = getattr(self, "_resumable", False)
|
|
@@ -645,7 +648,7 @@ class ADKRunner(BaseRunner):
|
|
|
645
648
|
|
|
646
649
|
agent_name = self._agent.name if self._agent else "default"
|
|
647
650
|
ltm = LongTermMemory.from_env(app_name=agent_name)
|
|
648
|
-
logger.info(f"LongTermMemory initialized: backend={backend},
|
|
651
|
+
logger.info(f"LongTermMemory initialized: backend={backend}, app_name={agent_name}")
|
|
649
652
|
return ltm
|
|
650
653
|
except Exception as e:
|
|
651
654
|
logger.warning(f"Failed to init LongTermMemory: {e}.")
|
|
@@ -669,7 +672,7 @@ class ADKRunner(BaseRunner):
|
|
|
669
672
|
|
|
670
673
|
kb = KnowledgeBaseClient.from_env()
|
|
671
674
|
logger.info(
|
|
672
|
-
f"KnowledgeBase initialized: dataset_id={kb.dataset_id},
|
|
675
|
+
f"KnowledgeBase initialized: dataset_id={kb.dataset_id}, region={kb.region}"
|
|
673
676
|
)
|
|
674
677
|
return kb
|
|
675
678
|
except ImportError:
|
|
@@ -1197,49 +1200,6 @@ class ADKRunner(BaseRunner):
|
|
|
1197
1200
|
|
|
1198
1201
|
return prepare_trace_metadata(detection_result=getattr(self, "detection_result", None))
|
|
1199
1202
|
|
|
1200
|
-
async def _ensure_session(self, external_session_id: Optional[str] = None) -> str:
|
|
1201
|
-
"""Get or create ADK session ID based on external ID
|
|
1202
|
-
|
|
1203
|
-
When ShortTermMemory is configured, uses its create_session method
|
|
1204
|
-
which supports session retrieval (if session_id already exists).
|
|
1205
|
-
"""
|
|
1206
|
-
# Case 1: External ID provided
|
|
1207
|
-
if external_session_id:
|
|
1208
|
-
if external_session_id in self._session_map:
|
|
1209
|
-
return self._session_map[external_session_id]
|
|
1210
|
-
|
|
1211
|
-
# Create new ADK session and map it
|
|
1212
|
-
if self._short_term_memory:
|
|
1213
|
-
session = await self._short_term_memory.create_session(
|
|
1214
|
-
app_name=self._agent.name,
|
|
1215
|
-
user_id="ksadk_user",
|
|
1216
|
-
session_id=external_session_id,
|
|
1217
|
-
)
|
|
1218
|
-
else:
|
|
1219
|
-
if self._session_service is None:
|
|
1220
|
-
raise RuntimeError("ADK session service is not initialized")
|
|
1221
|
-
session = await self._session_service.create_session(
|
|
1222
|
-
app_name=self._agent.name, user_id="ksadk_user"
|
|
1223
|
-
)
|
|
1224
|
-
self._session_map[external_session_id] = session.id
|
|
1225
|
-
return str(session.id)
|
|
1226
|
-
|
|
1227
|
-
# Case 2: No external ID (use default singleton)
|
|
1228
|
-
if self._default_session_id is None:
|
|
1229
|
-
if self._short_term_memory:
|
|
1230
|
-
session = await self._short_term_memory.create_session(
|
|
1231
|
-
app_name=self._agent.name,
|
|
1232
|
-
user_id="ksadk_user",
|
|
1233
|
-
)
|
|
1234
|
-
else:
|
|
1235
|
-
if self._session_service is None:
|
|
1236
|
-
raise RuntimeError("ADK session service is not initialized")
|
|
1237
|
-
session = await self._session_service.create_session(
|
|
1238
|
-
app_name=self._agent.name, user_id="ksadk_user"
|
|
1239
|
-
)
|
|
1240
|
-
self._default_session_id = session.id
|
|
1241
|
-
return str(self._default_session_id)
|
|
1242
|
-
|
|
1243
1203
|
async def save_session_to_long_term_memory(
|
|
1244
1204
|
self, session_id: str, user_id: str = "ksadk_user"
|
|
1245
1205
|
) -> bool:
|
|
@@ -1482,7 +1442,7 @@ class ADKRunner(BaseRunner):
|
|
|
1482
1442
|
return max_seq
|
|
1483
1443
|
except Exception as exc:
|
|
1484
1444
|
logger.warning(
|
|
1485
|
-
"ADKRunner: failed to query max checkpoint_seq
|
|
1445
|
+
"ADKRunner: failed to query max checkpoint_seq for run_id=%s: %s",
|
|
1486
1446
|
run_id,
|
|
1487
1447
|
exc,
|
|
1488
1448
|
)
|
|
@@ -1589,8 +1549,14 @@ class ADKRunner(BaseRunner):
|
|
|
1589
1549
|
session_id,
|
|
1590
1550
|
"adk",
|
|
1591
1551
|
{
|
|
1592
|
-
"external_session_id": str(
|
|
1593
|
-
|
|
1552
|
+
"external_session_id": str(
|
|
1553
|
+
binding.get("external_session_id") or session_id
|
|
1554
|
+
),
|
|
1555
|
+
"internal_session_id": str(
|
|
1556
|
+
binding.get("internal_session_id") or session_id
|
|
1557
|
+
),
|
|
1558
|
+
"native_user_id": str(binding.get("native_user_id") or "ksadk_user"),
|
|
1559
|
+
"owner_scope_ref": str(binding.get("owner_scope_ref") or ""),
|
|
1594
1560
|
"invocation_map": invocation_map,
|
|
1595
1561
|
},
|
|
1596
1562
|
)
|
|
@@ -1636,8 +1602,10 @@ class ADKRunner(BaseRunner):
|
|
|
1636
1602
|
|
|
1637
1603
|
1. **tool-confirmation**(``actions.requested_tool_confirmations``):工具执行前
|
|
1638
1604
|
yes/no 审批,1.34+ 均有。→ ``kind="tool"``。
|
|
1639
|
-
2. **workflow HITL**(v2.0+)
|
|
1640
|
-
|
|
1605
|
+
2. **workflow HITL**(v2.0+):优先识别 ADK 2.5 的
|
|
1606
|
+
``adk_request_input`` 长运行 function call;同时兼容早期版本的
|
|
1607
|
+
``event.interrupted=True`` + ``requested_input`` 字段。
|
|
1608
|
+
→ ``kind="input"``。
|
|
1641
1609
|
|
|
1642
1610
|
命中任一即返回 ``[{"approval_request_id","tool_name","args","kind","message"}, ...]``,
|
|
1643
1611
|
否则返回 ``[]``。不引入对 v2.0 API 的硬依赖——字段缺失时跳过,不报错。
|
|
@@ -1645,27 +1613,86 @@ class ADKRunner(BaseRunner):
|
|
|
1645
1613
|
signals: list[dict[str, Any]] = []
|
|
1646
1614
|
actions = getattr(event, "actions", None)
|
|
1647
1615
|
|
|
1616
|
+
# ADK 2.5 将 RequestInput 表示为名为 ``adk_request_input`` 的长运行
|
|
1617
|
+
# function call。该 event 的 ``interrupted`` 可能是 False/None,且不会
|
|
1618
|
+
# 填充 requested_input,因此必须直接识别 function call。
|
|
1619
|
+
explicit_request_input = False
|
|
1620
|
+
try:
|
|
1621
|
+
function_calls = (
|
|
1622
|
+
event.get_function_calls()
|
|
1623
|
+
if callable(getattr(event, "get_function_calls", None))
|
|
1624
|
+
else ()
|
|
1625
|
+
)
|
|
1626
|
+
except Exception:
|
|
1627
|
+
function_calls = ()
|
|
1628
|
+
for function_call in function_calls or ():
|
|
1629
|
+
if str(getattr(function_call, "name", "") or "") != "adk_request_input":
|
|
1630
|
+
continue
|
|
1631
|
+
call_args = getattr(function_call, "args", None)
|
|
1632
|
+
args = dict(call_args) if isinstance(call_args, Mapping) else {}
|
|
1633
|
+
interrupt_id = str(
|
|
1634
|
+
getattr(function_call, "id", "")
|
|
1635
|
+
or args.get("interruptId")
|
|
1636
|
+
or args.get("interrupt_id")
|
|
1637
|
+
or ""
|
|
1638
|
+
)
|
|
1639
|
+
if not interrupt_id:
|
|
1640
|
+
continue
|
|
1641
|
+
explicit_request_input = True
|
|
1642
|
+
payload = args.get("payload")
|
|
1643
|
+
response_schema = args.get("response_schema")
|
|
1644
|
+
signal = {
|
|
1645
|
+
"approval_request_id": interrupt_id,
|
|
1646
|
+
"call_id": interrupt_id,
|
|
1647
|
+
"tool_name": "RequestInput",
|
|
1648
|
+
"args": dict(payload) if isinstance(payload, Mapping) else {},
|
|
1649
|
+
"payload": payload,
|
|
1650
|
+
"kind": "input",
|
|
1651
|
+
"message": str(args.get("message") or args.get("prompt") or ""),
|
|
1652
|
+
}
|
|
1653
|
+
if isinstance(response_schema, Mapping):
|
|
1654
|
+
signal["response_schema"] = dict(response_schema)
|
|
1655
|
+
signals.append(signal)
|
|
1656
|
+
|
|
1648
1657
|
# 1) tool-confirmation:requested_tool_confirmations(1.34+,经 getattr 容错)
|
|
1649
1658
|
if actions is not None:
|
|
1650
1659
|
confirmations = getattr(actions, "requested_tool_confirmations", None)
|
|
1651
1660
|
if confirmations:
|
|
1652
|
-
|
|
1661
|
+
entries = (
|
|
1662
|
+
confirmations.items()
|
|
1663
|
+
if isinstance(confirmations, Mapping)
|
|
1664
|
+
else ((None, conf) for conf in confirmations)
|
|
1665
|
+
)
|
|
1666
|
+
for native_call_id, conf in entries:
|
|
1653
1667
|
if conf is None:
|
|
1654
1668
|
continue
|
|
1655
1669
|
conf_id = str(
|
|
1656
|
-
|
|
1670
|
+
native_call_id
|
|
1671
|
+
or getattr(conf, "id", "")
|
|
1672
|
+
or getattr(conf, "approval_request_id", "")
|
|
1673
|
+
or ""
|
|
1657
1674
|
)
|
|
1658
1675
|
if not conf_id:
|
|
1659
1676
|
continue
|
|
1677
|
+
args = getattr(conf, "args", None)
|
|
1678
|
+
payload = getattr(conf, "payload", None)
|
|
1660
1679
|
signals.append(
|
|
1661
1680
|
{
|
|
1662
1681
|
"approval_request_id": conf_id,
|
|
1682
|
+
"call_id": conf_id,
|
|
1663
1683
|
"tool_name": str(
|
|
1664
1684
|
getattr(conf, "tool_name", "")
|
|
1665
1685
|
or getattr(conf, "name", "")
|
|
1666
1686
|
or "tool"
|
|
1667
1687
|
),
|
|
1668
|
-
"args":
|
|
1688
|
+
"args": (
|
|
1689
|
+
dict(args)
|
|
1690
|
+
if isinstance(args, Mapping)
|
|
1691
|
+
else dict(payload)
|
|
1692
|
+
if isinstance(payload, Mapping)
|
|
1693
|
+
else {}
|
|
1694
|
+
),
|
|
1695
|
+
"payload": payload,
|
|
1669
1696
|
"kind": "tool",
|
|
1670
1697
|
"message": str(
|
|
1671
1698
|
getattr(conf, "message", "") or getattr(conf, "hint", "") or ""
|
|
@@ -1678,7 +1705,11 @@ class ADKRunner(BaseRunner):
|
|
|
1678
1705
|
try:
|
|
1679
1706
|
from ksadk.compat.adk_compat import adk_version_at_least
|
|
1680
1707
|
|
|
1681
|
-
if
|
|
1708
|
+
if (
|
|
1709
|
+
not explicit_request_input
|
|
1710
|
+
and adk_version_at_least("2.0.0")
|
|
1711
|
+
and getattr(event, "interrupted", False)
|
|
1712
|
+
):
|
|
1682
1713
|
# RequestInput 信号可能挂在 actions 或 event 上(字段名跨小版本未冻结,
|
|
1683
1714
|
# 用 getattr 容错,缺失即视为纯 interrupt 无 payload)。
|
|
1684
1715
|
req_input = None
|
|
@@ -1752,7 +1783,7 @@ class ADKRunner(BaseRunner):
|
|
|
1752
1783
|
metadata=metadata,
|
|
1753
1784
|
)
|
|
1754
1785
|
logger.debug(
|
|
1755
|
-
"ADKRunner: wrote checkpoint adk-ckpt-%d at boundary
|
|
1786
|
+
"ADKRunner: wrote checkpoint adk-ckpt-%d at boundary (session=%s, invocation_id=%s)",
|
|
1756
1787
|
checkpoint_seq,
|
|
1757
1788
|
session_id,
|
|
1758
1789
|
adk_invocation_id,
|
|
@@ -1793,9 +1824,7 @@ class ADKRunner(BaseRunner):
|
|
|
1793
1824
|
persistence_degraded = bool(
|
|
1794
1825
|
shared_across_pods and getattr(session_service, "degraded", False)
|
|
1795
1826
|
)
|
|
1796
|
-
platform_resumable =
|
|
1797
|
-
self._resumable and shared_across_pods and not persistence_degraded
|
|
1798
|
-
)
|
|
1827
|
+
platform_resumable = self._resumable and shared_across_pods and not persistence_degraded
|
|
1799
1828
|
metadata["is_resumable"] = platform_resumable
|
|
1800
1829
|
metadata["resume_status"] = "resumable" if platform_resumable else "disabled"
|
|
1801
1830
|
metadata["backend"] = stm_backend or "in_memory"
|
|
@@ -1810,8 +1839,7 @@ class ADKRunner(BaseRunner):
|
|
|
1810
1839
|
self._resume_disabled_reason
|
|
1811
1840
|
if not self._resumable and self._resume_disabled_reason
|
|
1812
1841
|
else (
|
|
1813
|
-
"ADK database session persistence was degraded when this checkpoint "
|
|
1814
|
-
"was written"
|
|
1842
|
+
"ADK database session persistence was degraded when this checkpoint was written"
|
|
1815
1843
|
)
|
|
1816
1844
|
if persistence_degraded
|
|
1817
1845
|
else "ADK checkpoint uses an in-memory or local-only session backend; "
|
|
@@ -1852,7 +1880,7 @@ class ADKRunner(BaseRunner):
|
|
|
1852
1880
|
)
|
|
1853
1881
|
if not adk_invocation_id:
|
|
1854
1882
|
logger.error(
|
|
1855
|
-
"Resume requested but ADK invocation_id not found for
|
|
1883
|
+
"Resume requested but ADK invocation_id not found for session=%s ksadk_inv=%s",
|
|
1856
1884
|
session_id,
|
|
1857
1885
|
ksadk_invocation_id,
|
|
1858
1886
|
)
|
|
@@ -1869,6 +1897,7 @@ class ADKRunner(BaseRunner):
|
|
|
1869
1897
|
*,
|
|
1870
1898
|
input_data: Dict[str, Any],
|
|
1871
1899
|
session_id: str,
|
|
1900
|
+
native_user_id: str = "ksadk_user",
|
|
1872
1901
|
user_input: str,
|
|
1873
1902
|
is_resume: bool,
|
|
1874
1903
|
run_config: Optional[Any] = None,
|
|
@@ -1887,9 +1916,40 @@ class ADKRunner(BaseRunner):
|
|
|
1887
1916
|
)
|
|
1888
1917
|
else:
|
|
1889
1918
|
new_message = None
|
|
1919
|
+
if str(input_data.get("resume_payload_kind") or "") == "hitl_answer":
|
|
1920
|
+
resume_call_id = str(input_data.get("resume_call_id") or "").strip()
|
|
1921
|
+
if not resume_call_id:
|
|
1922
|
+
raise ValueError("ADK RequestInput resume requires resume_call_id")
|
|
1923
|
+
resume_value = input_data.get("input")
|
|
1924
|
+
# ADK 2.5+ unwraps a singleton ``result`` response and JSON
|
|
1925
|
+
# decodes string values. Serializing every typed answer once
|
|
1926
|
+
# preserves strings such as ``"false"`` as strings while also
|
|
1927
|
+
# preserving objects, arrays, false, zero and null exactly.
|
|
1928
|
+
response = {
|
|
1929
|
+
"result": json.dumps(
|
|
1930
|
+
resume_value,
|
|
1931
|
+
ensure_ascii=False,
|
|
1932
|
+
sort_keys=True,
|
|
1933
|
+
separators=(",", ":"),
|
|
1934
|
+
allow_nan=False,
|
|
1935
|
+
)
|
|
1936
|
+
}
|
|
1937
|
+
new_message = types.Content(
|
|
1938
|
+
role="user",
|
|
1939
|
+
parts=[
|
|
1940
|
+
types.Part(
|
|
1941
|
+
function_response=types.FunctionResponse(
|
|
1942
|
+
id=resume_call_id,
|
|
1943
|
+
name="adk_request_input",
|
|
1944
|
+
response=response,
|
|
1945
|
+
)
|
|
1946
|
+
)
|
|
1947
|
+
],
|
|
1948
|
+
)
|
|
1890
1949
|
|
|
1891
1950
|
ksadk_invocation_id = str(input_data.get("invocation_id") or input_data.get("run_id") or "")
|
|
1892
1951
|
|
|
1952
|
+
canonical_session_id = str(input_data.get("session_id") or session_id)
|
|
1893
1953
|
checkpoint_run_id = (
|
|
1894
1954
|
str(input_data.get("run_id") or "").strip()
|
|
1895
1955
|
if is_resume and str(input_data.get("run_id") or "").strip()
|
|
@@ -1898,7 +1958,7 @@ class ADKRunner(BaseRunner):
|
|
|
1898
1958
|
|
|
1899
1959
|
run_kwargs: Dict[str, Any] = {
|
|
1900
1960
|
"session_id": session_id,
|
|
1901
|
-
"user_id":
|
|
1961
|
+
"user_id": native_user_id,
|
|
1902
1962
|
}
|
|
1903
1963
|
if run_config is not None:
|
|
1904
1964
|
run_kwargs["run_config"] = run_config
|
|
@@ -1911,30 +1971,35 @@ class ADKRunner(BaseRunner):
|
|
|
1911
1971
|
)
|
|
1912
1972
|
adk_invocation_id = await self._resolve_resume_invocation_id(
|
|
1913
1973
|
input_data=input_data,
|
|
1914
|
-
session_id=
|
|
1974
|
+
session_id=canonical_session_id,
|
|
1915
1975
|
ksadk_invocation_id=ksadk_invocation_id,
|
|
1916
1976
|
)
|
|
1917
1977
|
logger.info("Resuming ADK run with adk_invocation_id: %s", adk_invocation_id)
|
|
1918
1978
|
run_kwargs["invocation_id"] = adk_invocation_id
|
|
1979
|
+
if new_message is not None:
|
|
1980
|
+
run_kwargs["new_message"] = new_message
|
|
1919
1981
|
else:
|
|
1920
1982
|
run_kwargs["new_message"] = new_message
|
|
1921
1983
|
run_kwargs["state_delta"] = self._build_state_delta(input_data) or None
|
|
1922
1984
|
|
|
1923
1985
|
if self._runner is None:
|
|
1924
1986
|
raise RuntimeError("ADK runner is not initialized")
|
|
1987
|
+
from ksadk.runners._adk_a2a_stream import preserve_a2a_stream_identity
|
|
1988
|
+
|
|
1989
|
+
preserve_a2a_stream_identity(self._agent)
|
|
1925
1990
|
events_async = self._runner.run_async(**run_kwargs)
|
|
1926
1991
|
|
|
1927
1992
|
if ksadk_invocation_id and self._resumable:
|
|
1928
1993
|
wrapped_async = self._collect_adk_invocation_id(
|
|
1929
1994
|
events_async,
|
|
1930
1995
|
ksadk_invocation_id=ksadk_invocation_id,
|
|
1931
|
-
session_id=
|
|
1996
|
+
session_id=canonical_session_id,
|
|
1932
1997
|
checkpoint_run_id=checkpoint_run_id,
|
|
1933
1998
|
)
|
|
1934
1999
|
else:
|
|
1935
2000
|
wrapped_async = self._collect_adk_invocation_id_if_present(
|
|
1936
2001
|
events_async,
|
|
1937
|
-
session_id=
|
|
2002
|
+
session_id=canonical_session_id,
|
|
1938
2003
|
ksadk_invocation_id=ksadk_invocation_id,
|
|
1939
2004
|
)
|
|
1940
2005
|
return cast(AsyncIterator[Any], wrapped_async)
|
|
@@ -1968,6 +2033,7 @@ class ADKRunner(BaseRunner):
|
|
|
1968
2033
|
# Use external session ID if provided
|
|
1969
2034
|
req_session_id = input_data.get("session_id")
|
|
1970
2035
|
session_id = await self._ensure_session(req_session_id)
|
|
2036
|
+
native_user_id = self._native_user_for_session(req_session_id)
|
|
1971
2037
|
|
|
1972
2038
|
# 准备 Metadata 并设置 Span Attributes
|
|
1973
2039
|
# Langfuse Exporter 会读取这些 span attributes
|
|
@@ -1982,6 +2048,7 @@ class ADKRunner(BaseRunner):
|
|
|
1982
2048
|
wrapped_async = await self._prepare_run_events(
|
|
1983
2049
|
input_data=input_data,
|
|
1984
2050
|
session_id=session_id,
|
|
2051
|
+
native_user_id=native_user_id,
|
|
1985
2052
|
user_input=user_input,
|
|
1986
2053
|
is_resume=is_resume,
|
|
1987
2054
|
)
|
|
@@ -2040,12 +2107,26 @@ class ADKRunner(BaseRunner):
|
|
|
2040
2107
|
result.setdefault("metadata", {})["last_usage"] = last_usage
|
|
2041
2108
|
return result
|
|
2042
2109
|
|
|
2043
|
-
async def
|
|
2110
|
+
async def stream_canonical_events(
|
|
2111
|
+
self, input_data: Dict[str, Any]
|
|
2112
|
+
) -> AsyncGenerator[RuntimeEvent, None]:
|
|
2044
2113
|
"""流式调用 ADK Agent
|
|
2045
2114
|
|
|
2046
|
-
使用 StreamingMode.SSE
|
|
2115
|
+
使用 StreamingMode.SSE 输出 identity-aware RuntimeEvent v2。
|
|
2047
2116
|
"""
|
|
2048
2117
|
from ksadk.compat.adk_compat import RunConfig, StreamingMode
|
|
2118
|
+
from ksadk.events.run_authority import current_run_event_authority
|
|
2119
|
+
from ksadk.runners._adk_canonical_stream import canonical_events
|
|
2120
|
+
|
|
2121
|
+
run_id = str(input_data.get("run_id") or input_data.get("invocation_id") or "")
|
|
2122
|
+
authority = current_run_event_authority()
|
|
2123
|
+
if authority is not None:
|
|
2124
|
+
authority.require_session(input_data.get("session_id") or authority.session_id)
|
|
2125
|
+
# The ADK invocation/checkpoint ID remains native in input_data.
|
|
2126
|
+
# Canonical root and managed children share the durable Kernel run.
|
|
2127
|
+
run_id = authority.run_id
|
|
2128
|
+
if not run_id:
|
|
2129
|
+
raise ValueError("ADK canonical stream requires run_id or invocation_id")
|
|
2049
2130
|
|
|
2050
2131
|
# 判断是否为恢复调用 — 提前判断以避免将 resume_input dict 当作 string 处理
|
|
2051
2132
|
is_resume = bool(input_data.get("checkpoint_resume"))
|
|
@@ -2073,6 +2154,7 @@ class ADKRunner(BaseRunner):
|
|
|
2073
2154
|
# Use external session ID if provided
|
|
2074
2155
|
req_session_id = input_data.get("session_id")
|
|
2075
2156
|
session_id = await self._ensure_session(req_session_id)
|
|
2157
|
+
native_user_id = self._native_user_for_session(req_session_id)
|
|
2076
2158
|
|
|
2077
2159
|
# 准备 Metadata 并设置 Span Attributes
|
|
2078
2160
|
agent_user_id, tags, _, _ = self._prepare_trace_metadata(session_id)
|
|
@@ -2087,254 +2169,42 @@ class ADKRunner(BaseRunner):
|
|
|
2087
2169
|
wrapped_async = await self._prepare_run_events(
|
|
2088
2170
|
input_data=input_data,
|
|
2089
2171
|
session_id=session_id,
|
|
2172
|
+
native_user_id=native_user_id,
|
|
2090
2173
|
user_input=user_input,
|
|
2091
2174
|
is_resume=is_resume,
|
|
2092
2175
|
run_config=run_config,
|
|
2093
2176
|
)
|
|
2177
|
+
if getattr(self, "_managed_a2a_bootstrap", None) is not None:
|
|
2178
|
+
from ksadk.a2a.adk_runtime import managed_native_events
|
|
2179
|
+
|
|
2180
|
+
wrapped_async = managed_native_events(self, wrapped_async)
|
|
2181
|
+
async with (
|
|
2182
|
+
aclosing(wrapped_async),
|
|
2183
|
+
aclosing(
|
|
2184
|
+
canonical_events(
|
|
2185
|
+
self,
|
|
2186
|
+
wrapped_async,
|
|
2187
|
+
run_id=run_id,
|
|
2188
|
+
session_id=session_id,
|
|
2189
|
+
span=span,
|
|
2190
|
+
)
|
|
2191
|
+
) as events,
|
|
2192
|
+
):
|
|
2193
|
+
async for event in events:
|
|
2194
|
+
yield event
|
|
2094
2195
|
|
|
2095
|
-
|
|
2096
|
-
|
|
2097
|
-
|
|
2098
|
-
# handoff/sub-agent(如 RemoteA2aAgent)回复事件 partial=None,不进上面
|
|
2099
|
-
# partial 分支;且远端 agent 经 A2A 流式返回时,ADK 会产出多个"累积快照"
|
|
2100
|
-
# 事件(后一个含前一个内容)。按 author 记录已输出快照,只补发增量去重。
|
|
2101
|
-
sub_agent_snapshots: dict[str, str] = {}
|
|
2102
|
-
sub_agent_thought_snapshots: dict[str, str] = {}
|
|
2103
|
-
sub_agent_last_output_kind: dict[str, str] = {}
|
|
2104
|
-
top_agent_name = getattr(self._agent, "name", None)
|
|
2105
|
-
|
|
2106
|
-
async for event in wrapped_async:
|
|
2107
|
-
event_usage = self._extract_event_usage(event)
|
|
2108
|
-
if event_usage:
|
|
2109
|
-
usage = accumulate_usage(usage, event_usage)
|
|
2110
|
-
last_usage = event_usage # 保留最后一个非空
|
|
2111
|
-
# Only yield text delta if event is partial to avoid duplication of final summary
|
|
2112
|
-
if hasattr(event, "content") and event.content and getattr(event, "partial", False):
|
|
2113
|
-
if hasattr(event.content, "parts"):
|
|
2114
|
-
author = getattr(event, "author", None)
|
|
2115
|
-
is_sub_agent = bool(author and top_agent_name and author != top_agent_name)
|
|
2116
|
-
author_key = str(author)
|
|
2117
|
-
for part in event.content.parts:
|
|
2118
|
-
if hasattr(part, "text") and part.text:
|
|
2119
|
-
is_thought = getattr(part, "thought", False)
|
|
2120
|
-
replace_snapshot = bool(
|
|
2121
|
-
is_sub_agent
|
|
2122
|
-
and _part_metadata_flag(part, "ksadk_output_snapshot")
|
|
2123
|
-
)
|
|
2124
|
-
output_delta = part.text
|
|
2125
|
-
# 思考内容只作为 thinking delta 流出,不计入最终输出,
|
|
2126
|
-
# 否则最终回复会把思考过程再重复一遍(与 invoke() 语义对齐)。
|
|
2127
|
-
if is_thought and is_sub_agent:
|
|
2128
|
-
if sub_agent_last_output_kind.get(author_key) == "text":
|
|
2129
|
-
# 正文之后的 thought 是一个新的 reasoning segment。
|
|
2130
|
-
sub_agent_thought_snapshots[author_key] = ""
|
|
2131
|
-
previous_thought = sub_agent_thought_snapshots.get(
|
|
2132
|
-
author_key, ""
|
|
2133
|
-
)
|
|
2134
|
-
if part.text.startswith(previous_thought):
|
|
2135
|
-
output_delta = part.text[len(previous_thought) :]
|
|
2136
|
-
sub_agent_thought_snapshots[author_key] = part.text
|
|
2137
|
-
else:
|
|
2138
|
-
sub_agent_thought_snapshots[author_key] = (
|
|
2139
|
-
previous_thought + part.text
|
|
2140
|
-
)
|
|
2141
|
-
elif not is_thought:
|
|
2142
|
-
accumulated_text = (
|
|
2143
|
-
part.text
|
|
2144
|
-
if replace_snapshot
|
|
2145
|
-
else accumulated_text + part.text
|
|
2146
|
-
)
|
|
2147
|
-
# sub-agent(RemoteA2aAgent)增量也累积进快照,供后续
|
|
2148
|
-
# completed 全文消息(同一份结果)在 handoff 分支去重。
|
|
2149
|
-
if is_sub_agent:
|
|
2150
|
-
sub_agent_snapshots[author_key] = (
|
|
2151
|
-
part.text
|
|
2152
|
-
if replace_snapshot
|
|
2153
|
-
else sub_agent_snapshots.get(author_key, "") + part.text
|
|
2154
|
-
)
|
|
2155
|
-
# 标记思考内容,前端可以选择是否展示
|
|
2156
|
-
if output_delta:
|
|
2157
|
-
output_chunk: dict[str, Any] = {
|
|
2158
|
-
"delta": output_delta,
|
|
2159
|
-
"type": "thinking" if is_thought else "text",
|
|
2160
|
-
}
|
|
2161
|
-
if replace_snapshot and not is_thought:
|
|
2162
|
-
output_chunk["replace"] = True
|
|
2163
|
-
yield output_chunk
|
|
2164
|
-
if is_sub_agent:
|
|
2165
|
-
sub_agent_last_output_kind[author_key] = (
|
|
2166
|
-
"thinking" if is_thought else "text"
|
|
2167
|
-
)
|
|
2168
|
-
# handoff/sub-agent 回复:partial 为 None/False,上面分支跳过,这里补上。
|
|
2169
|
-
elif hasattr(event, "content") and event.content:
|
|
2170
|
-
author = getattr(event, "author", None)
|
|
2171
|
-
if (
|
|
2172
|
-
author
|
|
2173
|
-
and top_agent_name
|
|
2174
|
-
and author != top_agent_name
|
|
2175
|
-
and hasattr(event.content, "parts")
|
|
2176
|
-
):
|
|
2177
|
-
author_key = str(author)
|
|
2178
|
-
for part in event.content.parts:
|
|
2179
|
-
if (
|
|
2180
|
-
hasattr(part, "text")
|
|
2181
|
-
and part.text
|
|
2182
|
-
and getattr(part, "thought", False)
|
|
2183
|
-
):
|
|
2184
|
-
# A2A's terminal artifact is converted by ADK to
|
|
2185
|
-
# partial=False. Once that sub-agent has already
|
|
2186
|
-
# emitted response text, a trailing thought here is
|
|
2187
|
-
# a terminal snapshot/replacement (not a new
|
|
2188
|
-
# interleaved reasoning step). Showing it makes
|
|
2189
|
-
# the UI appear to end at "thinking" and hides the
|
|
2190
|
-
# just-emitted final response.
|
|
2191
|
-
if sub_agent_last_output_kind.get(author_key) == "text":
|
|
2192
|
-
continue
|
|
2193
|
-
# RemoteA2aAgent 将 last_chunk=True 映射成
|
|
2194
|
-
# partial=False;这可能是一个此前 partial thought
|
|
2195
|
-
# 的终态快照。只补发新增内容,避免正文之后再显示一遍
|
|
2196
|
-
# 相同的思考块;若此前没有 partial thought,仍完整透传。
|
|
2197
|
-
previous_thought = sub_agent_thought_snapshots.get(author_key, "")
|
|
2198
|
-
if part.text.startswith(previous_thought):
|
|
2199
|
-
thought_delta = part.text[len(previous_thought) :]
|
|
2200
|
-
sub_agent_thought_snapshots[author_key] = part.text
|
|
2201
|
-
elif previous_thought.startswith(part.text):
|
|
2202
|
-
thought_delta = ""
|
|
2203
|
-
else:
|
|
2204
|
-
thought_delta = part.text
|
|
2205
|
-
sub_agent_thought_snapshots[author_key] = (
|
|
2206
|
-
previous_thought + part.text
|
|
2207
|
-
)
|
|
2208
|
-
if thought_delta:
|
|
2209
|
-
yield {"delta": thought_delta, "type": "thinking"}
|
|
2210
|
-
snapshot = ""
|
|
2211
|
-
replace_snapshot = False
|
|
2212
|
-
for part in event.content.parts:
|
|
2213
|
-
if (
|
|
2214
|
-
hasattr(part, "text")
|
|
2215
|
-
and part.text
|
|
2216
|
-
and not getattr(part, "thought", False)
|
|
2217
|
-
):
|
|
2218
|
-
snapshot += part.text
|
|
2219
|
-
replace_snapshot = replace_snapshot or _part_metadata_flag(
|
|
2220
|
-
part,
|
|
2221
|
-
"ksadk_output_snapshot",
|
|
2222
|
-
)
|
|
2223
|
-
if snapshot:
|
|
2224
|
-
prev = sub_agent_snapshots.get(author_key, "")
|
|
2225
|
-
if replace_snapshot:
|
|
2226
|
-
delta = snapshot
|
|
2227
|
-
sub_agent_snapshots[author_key] = snapshot
|
|
2228
|
-
accumulated_text = snapshot
|
|
2229
|
-
elif snapshot.startswith(prev):
|
|
2230
|
-
# 累计快照(如 completed 全文):只补发超出已累积的部分;
|
|
2231
|
-
# 若增量已发全,delta 为空,避免 completed 再渲染一遍。
|
|
2232
|
-
delta = snapshot[len(prev) :]
|
|
2233
|
-
sub_agent_snapshots[author_key] = snapshot
|
|
2234
|
-
else:
|
|
2235
|
-
# final 增量(小块):追加进累积,不覆盖。
|
|
2236
|
-
delta = snapshot
|
|
2237
|
-
sub_agent_snapshots[author_key] = prev + snapshot
|
|
2238
|
-
if delta:
|
|
2239
|
-
if not replace_snapshot:
|
|
2240
|
-
accumulated_text += delta
|
|
2241
|
-
output_chunk = {"delta": delta, "type": "text"}
|
|
2242
|
-
if replace_snapshot:
|
|
2243
|
-
output_chunk["replace"] = True
|
|
2244
|
-
yield output_chunk
|
|
2245
|
-
|
|
2246
|
-
# 处理工具调用事件 — ADK 通过 event.content.parts[].function_call
|
|
2247
|
-
# 发出工具调用(即 event.get_function_calls()),而非
|
|
2248
|
-
# event.actions.tool_calls。此处需同时检测两种路径:
|
|
2249
|
-
# (a) get_function_calls() — ADK 标准 Event 模型
|
|
2250
|
-
# (b) actions.tool_calls — 某些旧版或自定义 runner 可能使用
|
|
2251
|
-
emitted_tool_call_ids: set[str] = set()
|
|
2252
|
-
if hasattr(event, "get_function_calls") and event.get_function_calls():
|
|
2253
|
-
for fc in event.get_function_calls():
|
|
2254
|
-
fc_id = getattr(fc, "id", "") or getattr(fc, "name", "unknown")
|
|
2255
|
-
if fc_id in emitted_tool_call_ids:
|
|
2256
|
-
continue
|
|
2257
|
-
emitted_tool_call_ids.add(fc_id)
|
|
2258
|
-
# fc.args 可能是 dict 或 None;确保可序列化
|
|
2259
|
-
fc_args = getattr(fc, "args", None) or {}
|
|
2260
|
-
if not isinstance(fc_args, dict):
|
|
2261
|
-
try:
|
|
2262
|
-
import json as _json
|
|
2263
|
-
|
|
2264
|
-
fc_args = _json.loads(fc_args) if isinstance(fc_args, str) else {}
|
|
2265
|
-
except Exception:
|
|
2266
|
-
fc_args = {}
|
|
2267
|
-
yield {
|
|
2268
|
-
"type": "tool_call",
|
|
2269
|
-
"tool_call_id": str(fc_id),
|
|
2270
|
-
"tool_name": getattr(fc, "name", "unknown"),
|
|
2271
|
-
"tool_args": fc_args,
|
|
2272
|
-
}
|
|
2273
|
-
if hasattr(event, "actions") and event.actions:
|
|
2274
|
-
tool_calls = getattr(event.actions, "tool_calls", None)
|
|
2275
|
-
if tool_calls:
|
|
2276
|
-
for tool_call in tool_calls:
|
|
2277
|
-
tc_name = getattr(tool_call, "name", "unknown")
|
|
2278
|
-
tc_id = getattr(tool_call, "id", "") or tc_name
|
|
2279
|
-
if tc_id in emitted_tool_call_ids:
|
|
2280
|
-
continue
|
|
2281
|
-
emitted_tool_call_ids.add(tc_id)
|
|
2282
|
-
yield {
|
|
2283
|
-
"type": "tool_call",
|
|
2284
|
-
"tool_call_id": str(tc_id),
|
|
2285
|
-
"tool_name": tc_name,
|
|
2286
|
-
"tool_args": getattr(tool_call, "input", {}),
|
|
2287
|
-
}
|
|
2288
|
-
|
|
2289
|
-
# ADK 原生审批 surface(tool-confirmation + v2.0 workflow HITL):
|
|
2290
|
-
# 翻译成统一 interrupt chunk,经 runtime:4645 既有 approval_request 通道
|
|
2291
|
-
# 消费 → 审批卡。能力探测兼容 1.34.x→2.x,缺字段则跳过。
|
|
2292
|
-
emitted_approval_ids: set[str] = set()
|
|
2293
|
-
for signal in self._extract_approval_signals(event):
|
|
2294
|
-
aid = signal.get("approval_request_id", "")
|
|
2295
|
-
if not aid or aid in emitted_approval_ids:
|
|
2296
|
-
continue
|
|
2297
|
-
emitted_approval_ids.add(aid)
|
|
2298
|
-
yield {
|
|
2299
|
-
"type": "interrupt",
|
|
2300
|
-
"interrupt_info": signal,
|
|
2301
|
-
"session_id": session_id,
|
|
2302
|
-
}
|
|
2196
|
+
async def stream(self, input_data: Dict[str, Any]) -> AsyncIterator[Dict[str, Any]]:
|
|
2197
|
+
"""Project canonical ADK events to the existing legacy chunk stream."""
|
|
2198
|
+
import uuid
|
|
2303
2199
|
|
|
2304
|
-
|
|
2305
|
-
# 发出工具执行结果。当工具执行完毕后 ADK 会产生一个包含
|
|
2306
|
-
# function_response 的事件,此处将其转为 tool_result 语义事件,
|
|
2307
|
-
# 让前端可以感知"某个工具已完成执行"并展示结果。
|
|
2308
|
-
if hasattr(event, "content") and event.content and hasattr(event.content, "parts"):
|
|
2309
|
-
for part in event.content.parts:
|
|
2310
|
-
fr = getattr(part, "function_response", None)
|
|
2311
|
-
if fr is not None:
|
|
2312
|
-
fr_name = getattr(fr, "name", "unknown")
|
|
2313
|
-
fr_id = getattr(fr, "id", "") or fr_name
|
|
2314
|
-
fr_output = getattr(fr, "response", None) or {}
|
|
2315
|
-
if not isinstance(fr_output, dict):
|
|
2316
|
-
try:
|
|
2317
|
-
import json as _json2
|
|
2318
|
-
|
|
2319
|
-
if isinstance(fr_output, str):
|
|
2320
|
-
fr_output = _json2.loads(fr_output)
|
|
2321
|
-
else:
|
|
2322
|
-
fr_output = {"raw": str(fr_output)}
|
|
2323
|
-
except Exception:
|
|
2324
|
-
fr_output = {"raw": str(fr_output)}
|
|
2325
|
-
yield {
|
|
2326
|
-
"type": "tool_result",
|
|
2327
|
-
"tool_call_id": str(fr_id),
|
|
2328
|
-
"tool_name": fr_name,
|
|
2329
|
-
"tool_output": fr_output,
|
|
2330
|
-
}
|
|
2200
|
+
from ksadk.runners._adk_canonical_stream import legacy_chunks
|
|
2331
2201
|
|
|
2332
|
-
|
|
2333
|
-
|
|
2334
|
-
|
|
2335
|
-
|
|
2336
|
-
|
|
2337
|
-
|
|
2338
|
-
|
|
2339
|
-
|
|
2340
|
-
|
|
2202
|
+
canonical_input = dict(input_data)
|
|
2203
|
+
canonical_input.setdefault(
|
|
2204
|
+
"run_id",
|
|
2205
|
+
canonical_input.get("invocation_id") or str(uuid.uuid4()),
|
|
2206
|
+
)
|
|
2207
|
+
async with aclosing(self.stream_canonical_events(canonical_input)) as events:
|
|
2208
|
+
async with aclosing(legacy_chunks(events)) as chunks:
|
|
2209
|
+
async for chunk in chunks:
|
|
2210
|
+
yield chunk
|