agentengine-sdk-python 0.8.5__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.5.dist-info → agentengine_sdk_python-0.8.6.dist-info}/METADATA +12 -8
- {agentengine_sdk_python-0.8.5.dist-info → agentengine_sdk_python-0.8.6.dist-info}/RECORD +823 -388
- 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/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/api/client.py +32 -79
- ksadk/api/sse_stream.py +96 -0
- ksadk/builders/code_builder.py +83 -106
- ksadk/builders/container_builder.py +11 -29
- ksadk/builders/framework_requirements.py +2 -0
- ksadk/builders/managed_runtime_builder.py +12 -0
- ksadk/builders/source_provenance.py +87 -0
- ksadk/cli/cmd_a2a.py +43 -0
- ksadk/cli/cmd_build.py +9 -0
- ksadk/cli/cmd_deploy.py +27 -2
- ksadk/cli/cmd_invoke.py +45 -92
- ksadk/cli/cmd_studio.py +5 -1
- ksadk/cli/cmd_web.py +2 -0
- ksadk/cli/hosted_invoke.py +206 -0
- ksadk/cli/invoke_content.py +60 -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 -1048
- 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/env_registry.py +106 -127
- ksadk/configs/env_registry_a2a.py +173 -0
- ksadk/configs/env_registry_studio.py +53 -5
- ksadk/configs/global_config.py +1 -0
- ksadk/configs/settings.py +6 -0
- ksadk/context_engine/assembler.py +9 -0
- ksadk/context_engine/contributors.py +80 -17
- ksadk/context_engine/instruction_authority.py +18 -0
- ksadk/conversations/attachments.py +53 -15
- ksadk/conversations/contracts.py +28 -9
- ksadk/conversations/message_projection.py +30 -125
- ksadk/conversations/message_projection_blocks.py +137 -0
- ksadk/conversations/model_context.py +11 -3
- ksadk/conversations/projector.py +63 -0
- ksadk/conversations/runtime_compaction.py +7 -2
- ksadk/conversations/runtime_input.py +16 -4
- ksadk/conversations/runtime_payloads.py +4 -0
- ksadk/conversations/runtime_persistence.py +192 -24
- ksadk/conversations/runtime_preparation.py +85 -6
- ksadk/conversations/runtime_projection.py +217 -0
- ksadk/conversations/runtime_resume.py +141 -70
- 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/_langgraph_support.py +12 -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/harness/__init__.py +4 -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 +26 -9
- 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/capability_adapters/__init__.py +1 -0
- ksadk/harness/capability_adapters/native_dsh.py +289 -0
- ksadk/harness/capability_runtime.py +104 -9
- ksadk/harness/compaction_record.py +31 -0
- ksadk/harness/compiler.py +3 -3
- ksadk/harness/config.py +28 -5
- ksadk/harness/conformance/contract.py +9 -11
- ksadk/harness/context_engine.py +18 -33
- ksadk/harness/context_sections.py +397 -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/engine/completion_guard.py +16 -1
- ksadk/harness/engine/context_pipeline.py +864 -92
- ksadk/harness/engine/graph_builder.py +123 -630
- ksadk/harness/engine/hooked_reasoner.py +380 -0
- ksadk/harness/engine/langgraph.py +126 -8
- ksadk/harness/engine/mcp_disclosure.py +65 -114
- 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 +21 -10
- ksadk/harness/engine/postgres_checkpointer.py +325 -2
- ksadk/harness/engine/run_control_bridge.py +21 -1
- ksadk/harness/engine/run_types.py +10 -0
- ksadk/harness/engine/skill_disclosure.py +98 -12
- ksadk/harness/engine/steering.py +177 -0
- ksadk/harness/engine/subagents.py +18 -1
- ksadk/harness/engine/tool_dispatch.py +112 -7
- ksadk/harness/events.py +39 -2
- ksadk/harness/execution_policy.py +10 -0
- ksadk/harness/hooks.py +259 -0
- ksadk/harness/loop/reason.py +281 -36
- ksadk/harness/loop/tools.py +157 -12
- ksadk/harness/managed_runtime.py +254 -94
- ksadk/harness/mcp_disclosure_contract.py +85 -0
- ksadk/harness/mcp_result_policy.py +44 -0
- ksadk/harness/mcp_runtime.py +33 -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 +223 -8
- ksadk/harness/model_provider.py +214 -4
- 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/progress_adapters/__init__.py +5 -0
- ksadk/harness/progress_adapters/native_todo.py +75 -0
- ksadk/harness/prompt_cache.py +65 -3
- ksadk/harness/public_activity.py +59 -0
- ksadk/harness/public_output.py +30 -0
- ksadk/harness/public_summary.py +36 -0
- ksadk/harness/reasoner.py +331 -22
- ksadk/harness/rpc.py +200 -0
- ksadk/harness/run_control.py +107 -2
- ksadk/harness/runtime.py +11 -2
- ksadk/harness/runtime_capabilities.py +71 -1
- ksadk/harness/sandbox_backend.py +203 -0
- ksadk/harness/sdk.py +153 -0
- ksadk/harness/session_store.py +370 -24
- 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_intent.py +47 -0
- ksadk/harness/skill_runtime.py +74 -16
- ksadk/harness/spec.py +20 -10
- ksadk/harness/state.py +2 -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/subagent.py +12 -2
- 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 +3 -0
- ksadk/harness/tool_result_policy.py +216 -0
- ksadk/harness/tools.py +52 -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/interaction/providers/langgraph.py +8 -1
- ksadk/kernel/bootstrap.py +144 -160
- ksadk/kernel/contract_fingerprints.py +45 -1
- ksadk/kernel/contracts.py +25 -0
- ksadk/kernel/control.py +153 -33
- ksadk/kernel/execution_grants.py +209 -2
- ksadk/kernel/execution_grants_memory.py +127 -8
- ksadk/kernel/execution_grants_postgres.py +188 -10
- ksadk/kernel/execution_grants_sqlite.py +235 -9
- ksadk/kernel/execution_host_ingress.py +1071 -0
- ksadk/kernel/history_projection.py +120 -0
- ksadk/kernel/ingress.py +117 -204
- ksadk/kernel/ingress_bootstrap.py +268 -0
- ksadk/kernel/legacy_history.py +179 -0
- ksadk/kernel/memory_store.py +38 -48
- ksadk/kernel/memory_store_projection.py +63 -0
- ksadk/kernel/postgres_event_log.py +181 -0
- ksadk/kernel/postgres_store.py +167 -198
- ksadk/kernel/readiness.py +125 -0
- ksadk/kernel/recovery.py +89 -3
- ksadk/kernel/recovery_projection.py +124 -0
- ksadk/kernel/runtime_checkpoint.py +34 -0
- ksadk/kernel/sql/001_agent_kernel.sql +5 -0
- ksadk/kernel/sqlite_schema.py +100 -0
- ksadk/kernel/sqlite_store.py +147 -216
- ksadk/kernel/store.py +47 -15
- 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 +323 -332
- ksadk/kernel/worker_controls.py +454 -0
- ksadk/kernel/worker_identity.py +27 -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/extraction.py +120 -7
- ksadk/memory/providers/local_candidates.py +183 -0
- ksadk/memory/providers/local_sqlite.py +252 -78
- ksadk/memory/resolved_policy.py +12 -7
- 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_proxy/compat.py +670 -0
- ksadk/model_proxy/server.py +10 -7
- ksadk/model_proxy/transform.py +37 -9
- ksadk/plugins/bridges/dsh.py +18 -20
- ksadk/plugins/bridges/dsh_profile_manifest.py +36 -0
- ksadk/plugins/builtin_resources.py +199 -0
- ksadk/plugins/builtins.py +380 -186
- ksadk/plugins/context_contributor.py +15 -4
- ksadk/plugins/dsh_dependency_policy.py +41 -0
- ksadk/plugins/dsh_toolchain.py +24 -35
- ksadk/plugins/execution_host.py +8 -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-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-tools/package.json +1 -1
- ksadk/plugins/providers/bundles/ksadk-dsh-capability-host/package.json +1 -1
- ksadk/plugins/providers/codex.py +42 -38
- ksadk/plugins/providers/codex_native.py +20 -0
- ksadk/plugins/providers/codex_skills.py +46 -0
- ksadk/plugins/providers/dsh_capabilities.py +16 -171
- ksadk/plugins/providers/dsh_connector_lease.py +225 -0
- ksadk/plugins/providers/dsh_mcp.py +163 -1
- ksadk/plugins/providers/harness.py +247 -34
- ksadk/plugins/providers/harness_context.py +61 -0
- ksadk/plugins/providers/harness_contributions.py +241 -0
- ksadk/plugins/providers/harness_delegation.py +91 -14
- ksadk/plugins/providers/harness_hooks.py +121 -0
- ksadk/plugins/providers/harness_managed.py +269 -175
- ksadk/plugins/providers/harness_tools.py +165 -36
- 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/teams/application.py +3 -143
- 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/domain.py +201 -148
- ksadk/plugins/teams/effect_contracts.py +255 -0
- ksadk/plugins/teams/execution_projection.py +255 -0
- ksadk/plugins/teams/leader_decisions.py +106 -0
- ksadk/plugins/teams/postgres_store.py +299 -85
- ksadk/plugins/teams/release_contracts.py +60 -0
- ksadk/plugins/teams/runtime.py +116 -40
- ksadk/plugins/teams/store.py +214 -6
- ksadk/plugins/teams/task_decisions.py +21 -8
- ksadk/plugins/teams/tool_service.py +152 -0
- ksadk/plugins/teams/transport.py +8 -3
- 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 +6 -400
- ksadk/runners/_langgraph_tool_projection.py +86 -0
- ksadk/runners/_langgraph_tools_transformer.py +27 -0
- ksadk/runners/adk_runner.py +195 -290
- ksadk/runners/base_runner.py +6 -5
- ksadk/runners/langgraph_runner.py +82 -86
- 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 +83 -128
- ksadk/runtime/adapter.py +40 -3
- ksadk/runtime/conversation_execution.py +4 -2
- ksadk/runtime/executor.py +97 -7
- ksadk/runtime/factory.py +13 -6
- ksadk/runtime/framework_adapters.py +184 -10
- ksadk/runtime/hosted_finalizer.py +4 -6
- ksadk/runtime/launch.py +2 -0
- ksadk/runtime/runner_adapter.py +123 -13
- ksadk/runtime_context.py +2 -0
- ksadk/sandbox/backends/e2b.py +30 -4
- ksadk/sandbox/backends/local_process.py +10 -0
- ksadk/sandbox/e2b_connection.py +9 -1
- ksadk/sandbox/local_controls.py +32 -2
- ksadk/sandbox/local_launcher.py +34 -0
- ksadk/server/factory.py +178 -25
- ksadk/server/history_deadline.py +158 -0
- ksadk/server/history_page_cache.py +129 -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/control.py +51 -3
- ksadk/server/routes/display_projection.py +154 -0
- ksadk/server/routes/kernel_ingress.py +17 -2
- ksadk/server/routes/misc.py +102 -12
- ksadk/server/routes/models.py +25 -1
- ksadk/server/routes/openai_compat.py +6 -0
- ksadk/server/routes/projection.py +159 -216
- ksadk/server/routes/run.py +6 -2
- ksadk/server/routes/sessions.py +301 -342
- ksadk/server/routes/streaming.py +68 -15
- ksadk/server/routes/tool_receipt_claim_routes.py +107 -0
- ksadk/server/routes/workspace.py +5 -2
- ksadk/server/static/assets/{ArtifactsPanel-C1YoaKhx.js → ArtifactsPanel-CILaW-fC.js} +1 -1
- ksadk/server/static/assets/{CodeBlock-DHuAWfr5.js → CodeBlock-BVrNVtJC.js} +1 -1
- ksadk/server/static/assets/{MathMessageMarkdown-cvdrBwYr.js → MathMessageMarkdown-Dp7c4wWD.js} +1 -1
- ksadk/server/static/assets/{MermaidBlock-DeBkbJvI.js → MermaidBlock-Dxop8Rd7.js} +6 -6
- ksadk/server/static/assets/{NativeTerminalPanel-oJj44_sV.js → NativeTerminalPanel-Cjjz8B30.js} +1 -1
- ksadk/server/static/assets/{abnfDiagram-VCTEODGH-Dhfv25o2.js → abnfDiagram-VCTEODGH-ckWDmOzw.js} +1 -1
- ksadk/server/static/assets/{arc-C35w-pn1.js → arc-DqxJede-.js} +1 -1
- ksadk/server/static/assets/architecture-7GRP2DOG-pn_DuLy6.js +1 -0
- ksadk/server/static/assets/{architectureDiagram-5GKGNRK7-FoMY_u6D.js → architectureDiagram-5GKGNRK7-SEQA4bVi.js} +1 -1
- ksadk/server/static/assets/{blockDiagram-NRAW4CY4-zD4Rt7oE.js → blockDiagram-NRAW4CY4-pM0B-6NJ.js} +1 -1
- ksadk/server/static/assets/{c4Diagram-UCG6FXSJ-BCtGGkhN.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-C2Ms13_k.js → chunk-5VM5RSS4-GJHDr9Ww.js} +1 -1
- ksadk/server/static/assets/{chunk-F27PBJKO-BoTj-qgx.js → chunk-F27PBJKO-CbAN45AV.js} +1 -1
- ksadk/server/static/assets/{chunk-G27WJ6UU-DOMyyjHH.js → chunk-G27WJ6UU-D5ngbbzF.js} +1 -1
- ksadk/server/static/assets/{chunk-JWPE2WC7-DbJJqDli.js → chunk-JWPE2WC7-Cc5IwuYC.js} +1 -1
- ksadk/server/static/assets/{chunk-LCL6LL3I-CLuRCt_W.js → chunk-LCL6LL3I-CprgDDdJ.js} +1 -1
- ksadk/server/static/assets/{chunk-POPQ4Y6H-D0Dz847e.js → chunk-POPQ4Y6H-CDZhSy82.js} +1 -1
- ksadk/server/static/assets/{chunk-RHFEMEQ7-BWSRzEcd.js → chunk-RHFEMEQ7-CZchUNro.js} +1 -1
- ksadk/server/static/assets/{chunk-SVP7TREG-CPoHqkCY.js → chunk-SVP7TREG-BVruqk6T.js} +1 -1
- ksadk/server/static/assets/{chunk-XXDRQBXY-Bx1jS-X-.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-LzyWm4m0.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-BlW_bHED.js → cynefinDiagram-5FMLGOSQ-BIyq3EJb.js} +1 -1
- ksadk/server/static/assets/{dagre-3AP2YEHR-Bu_S86_i.js → dagre-3AP2YEHR-eBw08Qdk.js} +1 -1
- ksadk/server/static/assets/{dagre-B7nCawed.js → dagre-DfvnEf45.js} +1 -1
- ksadk/server/static/assets/{diagram-S7CK7UJ4-W_Zow2Km.js → diagram-S7CK7UJ4-CUSrE3Mg.js} +1 -1
- ksadk/server/static/assets/{diagram-UQ7AKVKN-CLIKAHON.js → diagram-UQ7AKVKN-Dq5Zw2gy.js} +1 -1
- ksadk/server/static/assets/{diagram-VSXAHHWV-Dv6_QAlN.js → diagram-VSXAHHWV-DyUHfNwT.js} +1 -1
- ksadk/server/static/assets/{diagram-VX7I27RA-BWAWRDtZ.js → diagram-VX7I27RA-CREmM89O.js} +1 -1
- ksadk/server/static/assets/{diagram-Z3DM3KII-XA_rWMss.js → diagram-Z3DM3KII-Dw9zhHUK.js} +1 -1
- ksadk/server/static/assets/{dist-CGt_UGeO.js → dist-0uJ4tdx6.js} +1 -1
- ksadk/server/static/assets/{dist-C0J5_3qM.js → dist-AEv-vXf-.js} +1 -1
- ksadk/server/static/assets/{dist-CIpWk_5f.js → dist-B49GzZDb.js} +1 -1
- ksadk/server/static/assets/{dist-B3bA05-e.js → dist-B8Myiet9.js} +1 -1
- ksadk/server/static/assets/{dist-DWfdmz9s.js → dist-BBsYarrI.js} +1 -1
- ksadk/server/static/assets/{dist-BLpRy_Yx.js → dist-BQMrUwdI.js} +1 -1
- ksadk/server/static/assets/{dist-CIRMvUM4.js → dist-BX_-FENW.js} +1 -1
- ksadk/server/static/assets/{dist-BdNFAney.js → dist-CD4L6ymH.js} +1 -1
- ksadk/server/static/assets/{dist-n3n6t_FO.js → dist-CHpW1BHj.js} +1 -1
- ksadk/server/static/assets/{dist-DppE_r-D.js → dist-CVPau3tn.js} +1 -1
- ksadk/server/static/assets/{dist-qe8xjesy.js → dist-C_qdxcSH.js} +1 -1
- ksadk/server/static/assets/{dist-2vL2sAdF.js → dist-Co68Apq4.js} +1 -1
- ksadk/server/static/assets/{dist-1nXCdsej.js → dist-Cp2PaOMY.js} +1 -1
- ksadk/server/static/assets/{dist-DNKuMzWc.js → dist-CuR5Bgme.js} +1 -1
- ksadk/server/static/assets/{dist-t6MzE0jU.js → dist-DDSyLEOX.js} +1 -1
- ksadk/server/static/assets/{dist-CPyieXEf.js → dist-DUxO0R99.js} +1 -1
- ksadk/server/static/assets/{dist-DyG6Ya-z.js → dist-QzbGrED_.js} +1 -1
- ksadk/server/static/assets/{dist-0X_j2Rcc.js → dist-bupkyEBZ.js} +1 -1
- ksadk/server/static/assets/{dist-mqD5TZup.js → dist-cxTGfdqx.js} +1 -1
- ksadk/server/static/assets/{dist-M-SrdhhZ.js → dist-hL5p1til.js} +1 -1
- ksadk/server/static/assets/{dist-D-92S-Fd.js → dist-lOy23y43.js} +1 -1
- ksadk/server/static/assets/{dist-BO_UwatH.js → dist-pq-nD33R.js} +1 -1
- ksadk/server/static/assets/{ebnfDiagram-PWID7BFC-BfCzF1Xi.js → ebnfDiagram-PWID7BFC-BS5LdNoR.js} +1 -1
- ksadk/server/static/assets/{erDiagram-SSCWMZ5O-Dpz9_0zn.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-DDaG1f4_.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-DcxzRwYC.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-CYMdn6lQ.js → infoDiagram-RXCK75RN-C1kEtv2y.js} +1 -1
- ksadk/server/static/assets/{ishikawaDiagram-5VMMS53U-CLHFAD6c.js → ishikawaDiagram-5VMMS53U-BCNPyMka.js} +1 -1
- ksadk/server/static/assets/{journeyDiagram-EYS64GPL-BHSKQGAl.js → journeyDiagram-EYS64GPL--cDbKnjP.js} +1 -1
- ksadk/server/static/assets/{kanban-definition-3QL26DDD-D5W3tjTT.js → kanban-definition-3QL26DDD-R1rAVw2f.js} +1 -1
- ksadk/server/static/assets/{katex-mtjOi4KM.js → katex-BT-X-V7U.js} +1 -1
- ksadk/server/static/assets/{linear-BETqsxE_.js → linear-DTR631iG.js} +1 -1
- ksadk/server/static/assets/{mermaid-parser.core-DPWrvs90.js → mermaid-parser.core-DfFzJhX8.js} +2 -2
- ksadk/server/static/assets/{mindmap-definition-FBJOCRG2-CJG2mfBP.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-GjAPNaqn.js → pegDiagram-XKGWAZYB-xWXPEh0c.js} +1 -1
- ksadk/server/static/assets/pie-WAS4IAKB-hwiz6fbw.js +1 -0
- ksadk/server/static/assets/{pieDiagram-E7YTZNPT-ToIewrqr.js → pieDiagram-E7YTZNPT-BudBDlCI.js} +1 -1
- ksadk/server/static/assets/{quadrantDiagram-AXDQQJYC-4d78KiEY.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-DKzx4xfv.js → railroadDiagram-O6MQD6OU-BdAYRYB8.js} +1 -1
- ksadk/server/static/assets/{requirementDiagram-EFPCY7ZU-CJYljxQS.js → requirementDiagram-EFPCY7ZU-CBBmaL70.js} +1 -1
- ksadk/server/static/assets/{sankeyDiagram-P5KCCOFB-DLU2fV1w.js → sankeyDiagram-P5KCCOFB-Doc3rdwp.js} +1 -1
- ksadk/server/static/assets/{sequenceDiagram-WJ2MYXX4-CVqysrA9.js → sequenceDiagram-WJ2MYXX4-0J8R8hWW.js} +1 -1
- ksadk/server/static/assets/{sizeCapture-X5ZJPWSS-BUxfmTHc.js → sizeCapture-X5ZJPWSS-CfFLlWsK.js} +1 -1
- ksadk/server/static/assets/{stateDiagram-HBIQ2CUA-CNFgYI9E.js → stateDiagram-HBIQ2CUA-jBwkjtTy.js} +1 -1
- ksadk/server/static/assets/stateDiagram-v2-4QOOHH4V-Cw1fPb5w.js +1 -0
- ksadk/server/static/assets/{swimlanes-XN3QIQJK-B6qCMe8N.js → swimlanes-XN3QIQJK-B0WxTQf8.js} +1 -1
- ksadk/server/static/assets/swimlanesDiagram-VK2B7HYN-Cc3JMBAF.js +8 -0
- ksadk/server/static/assets/{timeline-definition-24CTP7MA-CMD3x_U_.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-BqtUqvXM.js → vennDiagram-4TSXK5OY-9gX1VMDC.js} +1 -1
- ksadk/server/static/assets/wardley-WFR3VGLG-DokNktqB.js +1 -0
- ksadk/server/static/assets/{wardleyDiagram-VM6X3IG4-B5KfDjI-.js → wardleyDiagram-VM6X3IG4-sEs_BP6O.js} +1 -1
- ksadk/server/static/assets/{xychartDiagram-S5SC5T6Z-BaUlSZrn.js → xychartDiagram-S5SC5T6Z-Ll4jvUN9.js} +1 -1
- ksadk/server/static/index.html +2 -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/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/loader.py +44 -2
- ksadk/skills/runtime/backends/e2b.py +17 -14
- ksadk/skills/service_client.py +6 -1
- 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 +219 -389
- 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 +23 -0
- ksadk/studio/attachment_store.py +14 -2
- ksadk/studio/build_resolution.py +117 -0
- ksadk/studio/build_singleflight.py +37 -0
- ksadk/studio/builder.py +20 -2
- ksadk/studio/capabilities.py +8 -3
- ksadk/studio/cloud.py +83 -377
- ksadk/studio/cloud_gateways.py +424 -0
- ksadk/studio/cloud_shared_web.py +7 -0
- ksadk/studio/codex_agent_service.py +17 -0
- ksadk/studio/codex_manifest.py +5 -1
- ksadk/studio/codex_provider_build.py +65 -0
- ksadk/studio/compiler.py +102 -6
- ksadk/studio/contract_base.py +19 -0
- ksadk/studio/contracts.py +231 -201
- ksadk/studio/dsh_application.py +58 -12
- ksadk/studio/dsh_capability_service.py +17 -171
- ksadk/studio/dsh_mcp_transport.py +191 -0
- ksadk/studio/event_store.py +17 -0
- ksadk/studio/execution_host.py +84 -11
- ksadk/studio/framework_run.py +18 -0
- ksadk/studio/interaction_submission.py +265 -0
- ksadk/studio/kernel_registry.py +12 -1
- 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 +1241 -761
- ksadk/studio/model_content_stream.py +129 -0
- ksadk/studio/model_credentials.py +196 -0
- ksadk/studio/model_profile_service.py +65 -31
- 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_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 +26 -10
- ksadk/studio/plugin_kernel_adapter.py +75 -1
- ksadk/studio/plugin_native_activation.py +163 -0
- ksadk/studio/plugin_runtime.py +639 -119
- ksadk/studio/plugin_runtime_admission.py +57 -0
- ksadk/studio/presentation.py +92 -0
- ksadk/studio/public_output_store.py +69 -0
- ksadk/studio/resource_authority.py +11 -3
- ksadk/studio/resource_catalog.py +8 -12
- ksadk/studio/run_activity.py +338 -385
- ksadk/studio/run_controls.py +185 -0
- ksadk/studio/run_service.py +908 -319
- ksadk/studio/run_submission_receipts.py +68 -0
- ksadk/studio/runtime_catalog.py +23 -4
- ksadk/studio/runtime_prewarm.py +22 -0
- ksadk/studio/scheduler_assistant.py +4 -1
- ksadk/studio/service.py +356 -282
- ksadk/studio/service_settings.py +229 -0
- ksadk/studio/shared_web.py +393 -169
- 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-UIqo-BPW.js → CodeBlock-DMIf4h33-CkufcPYo.js} +3 -3
- ksadk/studio/static/assets/{MathMessageMarkdown-BesSeCYl-OhNwH4K9.js → MathMessageMarkdown-BesSeCYl-DYG1Wzbx.js} +1 -1
- ksadk/studio/static/assets/{MessageMarkdown-CwMTvgFj-g0I-I4dD.js → MessageMarkdown-CwMTvgFj-BeyLyQHu.js} +2 -2
- ksadk/studio/static/assets/TeamsPage-CCaaGaVp.js +3 -0
- ksadk/studio/static/assets/index-C7DNDik2.css +2 -0
- ksadk/studio/static/assets/index-Cy68gTlH.js +265 -0
- ksadk/studio/static/index.html +3 -3
- ksadk/studio/teams_catalog.py +33 -0
- ksadk/studio/teams_installation.py +4 -1
- ksadk/studio/teams_node.py +4 -0
- ksadk/studio/teams_node_factory.py +558 -0
- ksadk/studio/teams_node_runner.py +3 -0
- ksadk/studio/teams_node_v1.py +935 -0
- ksadk/studio/teams_remote.py +259 -37
- ksadk/studio/templates.py +1 -0
- ksadk/studio/workspace_plugins.py +3 -1
- 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 +82 -88
- ksadk/toolsets/a2a.py +89 -89
- ksadk/toolsets/sandbox.py +377 -6
- ksadk/toolsets/skill_management.py +315 -0
- ksadk/toolsets/tool_selection.py +94 -0
- ksadk/toolsets/workspace.py +342 -324
- ksadk/toolsets/workspace_editing.py +291 -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/workspace_files/router.py +2 -1
- ksadk/server/static/assets/architecture-7GRP2DOG-BCsa26zi.js +0 -1
- ksadk/server/static/assets/channel-_KDifNys.js +0 -1
- ksadk/server/static/assets/chunk-2Q5K7J3B-HdVkJ9F0.js +0 -1
- ksadk/server/static/assets/classDiagram-DTDB5LWJ-BVCW3ZqZ.js +0 -1
- ksadk/server/static/assets/classDiagram-v2-JRS7N3AN-BVCW3ZqZ.js +0 -1
- ksadk/server/static/assets/cynefin-OW5HDTMX-CNXjFctL.js +0 -1
- ksadk/server/static/assets/eventmodeling-NTZA5JFV-B5-8RH9c.js +0 -1
- ksadk/server/static/assets/flowDiagram-A5DVABFB-BppFxEKw.js +0 -1
- ksadk/server/static/assets/gitGraph-4MIJSDKK-B-AhYj4C.js +0 -1
- ksadk/server/static/assets/index-BMd2mucF.css +0 -2
- ksadk/server/static/assets/index-D5qyyhTH.js +0 -244
- ksadk/server/static/assets/info-A6RAGUB7-0uiKrC35.js +0 -1
- ksadk/server/static/assets/packet-AYTQ26CC-BVTmZ_cw.js +0 -1
- ksadk/server/static/assets/pie-WAS4IAKB-DyfxBU7V.js +0 -1
- ksadk/server/static/assets/radar-RG4KPBEZ-FFontjL2.js +0 -1
- ksadk/server/static/assets/railroad-74A4TZTK-D0Uidzen.js +0 -1
- ksadk/server/static/assets/railroad-abnf-HS5TGJTU-BOo_9T2h.js +0 -1
- ksadk/server/static/assets/railroad-ebnf-LZEXJU2U-D6-BjW7Z.js +0 -1
- ksadk/server/static/assets/railroad-peg-WCYAUIDC-CXx__yMm.js +0 -1
- ksadk/server/static/assets/stateDiagram-v2-4QOOHH4V-BXAFScz8.js +0 -1
- ksadk/server/static/assets/swimlanesDiagram-VK2B7HYN-uIQ2lJKH.js +0 -8
- ksadk/server/static/assets/treeView-Q6P3EWNA-CK5GgucZ.js +0 -1
- ksadk/server/static/assets/treemap-WGGIJYW6-Bq1u1SpG.js +0 -1
- ksadk/server/static/assets/wardley-WFR3VGLG-QAt06uEz.js +0 -1
- ksadk/studio/static/assets/ChannelsPage-D_PGmKVq.js +0 -8
- ksadk/studio/static/assets/TeamsPage-DqX4HWKQ.js +0 -3
- ksadk/studio/static/assets/index-CfEnms6Y.css +0 -2
- ksadk/studio/static/assets/index-Dp61rOWZ.js +0 -0
- {agentengine_sdk_python-0.8.5.dist-info → agentengine_sdk_python-0.8.6.dist-info}/WHEEL +0 -0
- {agentengine_sdk_python-0.8.5.dist-info → agentengine_sdk_python-0.8.6.dist-info}/entry_points.txt +0 -0
- {agentengine_sdk_python-0.8.5.dist-info → agentengine_sdk_python-0.8.6.dist-info}/licenses/LICENSE +0 -0
- {agentengine_sdk_python-0.8.5.dist-info → agentengine_sdk_python-0.8.6.dist-info}/top_level.txt +0 -0
|
@@ -10,20 +10,28 @@ not create another event stream or transcript store.
|
|
|
10
10
|
from __future__ import annotations
|
|
11
11
|
|
|
12
12
|
import asyncio
|
|
13
|
+
import inspect
|
|
13
14
|
import json
|
|
14
|
-
from collections.abc import Awaitable, Mapping, Sequence
|
|
15
|
+
from collections.abc import Awaitable, Callable, Mapping, Sequence
|
|
15
16
|
from contextlib import AsyncExitStack
|
|
16
17
|
from dataclasses import dataclass, replace
|
|
17
18
|
from pathlib import Path
|
|
18
|
-
from typing import Any, Protocol, cast, runtime_checkable
|
|
19
|
+
from typing import Any, Literal, Protocol, cast, runtime_checkable
|
|
19
20
|
|
|
20
21
|
from ksadk.harness.config import HarnessConfig, McpToolSpec, SandboxPolicy
|
|
21
|
-
from ksadk.harness.reasoner import HarnessReasoner,
|
|
22
|
+
from ksadk.harness.reasoner import HarnessReasoner, ModelGatewayHarnessReasoner
|
|
22
23
|
from ksadk.harness.runtime import HarnessRuntimeAdapter
|
|
23
24
|
from ksadk.plugins.bundle import ResolvedPluginBundle
|
|
24
25
|
from ksadk.plugins.contracts import CompositionProfile, PluginManifest
|
|
25
26
|
from ksadk.plugins.host import PluginExecutionContext, PluginHostError
|
|
26
|
-
from ksadk.plugins.
|
|
27
|
+
from ksadk.plugins.memory_provider import MemoryProviderBinding
|
|
28
|
+
from ksadk.plugins.providers.harness_context import HarnessContextContributorSource
|
|
29
|
+
from ksadk.plugins.providers.harness_hooks import HarnessHookBinding, project_harness_hooks
|
|
30
|
+
from ksadk.plugins.providers.mcp_projection import (
|
|
31
|
+
MCPResourcePin,
|
|
32
|
+
MCPRuntimeCredential,
|
|
33
|
+
project_mcp_capabilities,
|
|
34
|
+
)
|
|
27
35
|
from ksadk.runtime import (
|
|
28
36
|
CONVERSATION_PREPROCESSING_METADATA_KEY,
|
|
29
37
|
RuntimeAdapter,
|
|
@@ -44,6 +52,10 @@ class HarnessSkillContribution:
|
|
|
44
52
|
name: str
|
|
45
53
|
instructions: str
|
|
46
54
|
resource_root: Path | None = None
|
|
55
|
+
# Built-in Bundle Skills carry their locked resource identity into Native.
|
|
56
|
+
# External sources may omit these until they offer an equivalent binding.
|
|
57
|
+
source_ref: str | None = None
|
|
58
|
+
content_digest: str | None = None
|
|
47
59
|
|
|
48
60
|
|
|
49
61
|
@dataclass(frozen=True)
|
|
@@ -57,6 +69,44 @@ class HarnessProviderInventory:
|
|
|
57
69
|
context_contributors: tuple[str, ...]
|
|
58
70
|
|
|
59
71
|
|
|
72
|
+
@dataclass(frozen=True)
|
|
73
|
+
class HarnessEngineActivationContext:
|
|
74
|
+
"""Locked DSH inputs presented to a host-owned Native adapter builder.
|
|
75
|
+
|
|
76
|
+
The Bundle is already resolved by PluginHost; the builder must still bind
|
|
77
|
+
its own authenticated scope, model, tools and verifier for this activation.
|
|
78
|
+
Selection is never inferred from bundle text or a model response.
|
|
79
|
+
"""
|
|
80
|
+
|
|
81
|
+
bundle: ResolvedPluginBundle
|
|
82
|
+
config: HarnessConfig
|
|
83
|
+
agent_name: str
|
|
84
|
+
workspace_root: Path
|
|
85
|
+
user_workspace_root: Path | None
|
|
86
|
+
skills: tuple[HarnessSkillContribution, ...]
|
|
87
|
+
profile_digest: str
|
|
88
|
+
plugin_lock_digest: str
|
|
89
|
+
activation_key: str
|
|
90
|
+
activation_claims: tuple[tuple[str, str], ...] = ()
|
|
91
|
+
activation_generation: str = ""
|
|
92
|
+
activation_available: Callable[[], bool] | None = None
|
|
93
|
+
mcp_available: Callable[[], Awaitable[bool]] | None = None
|
|
94
|
+
mcp_resource_pins: tuple[MCPResourcePin, ...] = ()
|
|
95
|
+
mcp_runtime_credentials: tuple[MCPRuntimeCredential, ...] = ()
|
|
96
|
+
context_sources: tuple[HarnessContextBinding, ...] = ()
|
|
97
|
+
hook_sources: tuple[HarnessHookBinding, ...] = ()
|
|
98
|
+
memory_sources: tuple[MemoryProviderBinding, ...] = ()
|
|
99
|
+
|
|
100
|
+
|
|
101
|
+
HarnessEngineSelector = Callable[
|
|
102
|
+
[HarnessEngineActivationContext],
|
|
103
|
+
Literal["legacy", "native"] | Awaitable[Literal["legacy", "native"]],
|
|
104
|
+
]
|
|
105
|
+
HarnessNativeAdapterBuilder = Callable[
|
|
106
|
+
[HarnessEngineActivationContext], RuntimeAdapter | Awaitable[RuntimeAdapter]
|
|
107
|
+
]
|
|
108
|
+
|
|
109
|
+
|
|
60
110
|
@dataclass(frozen=True)
|
|
61
111
|
class HarnessTurnRequest:
|
|
62
112
|
user_id: str
|
|
@@ -140,6 +190,13 @@ class HarnessSkillSource(Protocol):
|
|
|
140
190
|
def harness_skill(self, bundle: ResolvedPluginBundle) -> HarnessSkillContribution: ...
|
|
141
191
|
|
|
142
192
|
|
|
193
|
+
@runtime_checkable
|
|
194
|
+
class HarnessSkillSetSource(Protocol):
|
|
195
|
+
def harness_skills(
|
|
196
|
+
self, bundle: ResolvedPluginBundle
|
|
197
|
+
) -> Sequence[HarnessSkillContribution]: ...
|
|
198
|
+
|
|
199
|
+
|
|
143
200
|
@runtime_checkable
|
|
144
201
|
class HarnessContextSource(Protocol):
|
|
145
202
|
async def harness_context(
|
|
@@ -147,6 +204,19 @@ class HarnessContextSource(Protocol):
|
|
|
147
204
|
) -> str: ...
|
|
148
205
|
|
|
149
206
|
|
|
207
|
+
@dataclass(frozen=True)
|
|
208
|
+
class HarnessContextBinding:
|
|
209
|
+
"""Host-selected source identity; text returned by it grants no authority."""
|
|
210
|
+
|
|
211
|
+
plugin_id: str
|
|
212
|
+
plugin_version: str
|
|
213
|
+
runtime: HarnessContextSource | HarnessContextContributorSource
|
|
214
|
+
# Preserve positional SDK callers. A missing slot is admissible only when
|
|
215
|
+
# the locked graph has exactly one Context offer for this owner.
|
|
216
|
+
slot: str | None = None
|
|
217
|
+
contributor: bool = False
|
|
218
|
+
|
|
219
|
+
|
|
150
220
|
class _ConversationHistoryReasoner:
|
|
151
221
|
"""Restore canonical message roles before calling the Harness reasoner.
|
|
152
222
|
|
|
@@ -195,6 +265,7 @@ class _ConversationHistoryReasoner:
|
|
|
195
265
|
messages: Sequence[dict[str, Any]],
|
|
196
266
|
tools: Sequence[Any],
|
|
197
267
|
max_output_tokens: int | None = None,
|
|
268
|
+
reasoning_effort: str | None = None,
|
|
198
269
|
) -> Any:
|
|
199
270
|
expanded = self._expand_messages(messages)
|
|
200
271
|
kwargs: dict[str, Any] = {
|
|
@@ -205,6 +276,8 @@ class _ConversationHistoryReasoner:
|
|
|
205
276
|
}
|
|
206
277
|
if max_output_tokens is not None:
|
|
207
278
|
kwargs["max_output_tokens"] = max_output_tokens
|
|
279
|
+
if reasoning_effort:
|
|
280
|
+
kwargs["reasoning_effort"] = reasoning_effort
|
|
208
281
|
return await self._delegate.complete(**kwargs)
|
|
209
282
|
|
|
210
283
|
async def stream_complete(
|
|
@@ -215,6 +288,7 @@ class _ConversationHistoryReasoner:
|
|
|
215
288
|
messages: Sequence[dict[str, Any]],
|
|
216
289
|
tools: Sequence[Any],
|
|
217
290
|
max_output_tokens: int | None = None,
|
|
291
|
+
reasoning_effort: str | None = None,
|
|
218
292
|
):
|
|
219
293
|
"""Forward incremental model events while preserving canonical history."""
|
|
220
294
|
stream = getattr(self._delegate, "stream_complete", None)
|
|
@@ -231,6 +305,7 @@ class _ConversationHistoryReasoner:
|
|
|
231
305
|
if max_output_tokens is not None
|
|
232
306
|
else {}
|
|
233
307
|
),
|
|
308
|
+
**({"reasoning_effort": reasoning_effort} if reasoning_effort else {}),
|
|
234
309
|
)
|
|
235
310
|
yield {"turn": turn}
|
|
236
311
|
return
|
|
@@ -242,6 +317,8 @@ class _ConversationHistoryReasoner:
|
|
|
242
317
|
}
|
|
243
318
|
if max_output_tokens is not None:
|
|
244
319
|
kwargs["max_output_tokens"] = max_output_tokens
|
|
320
|
+
if reasoning_effort:
|
|
321
|
+
kwargs["reasoning_effort"] = reasoning_effort
|
|
245
322
|
async for item in stream(**kwargs):
|
|
246
323
|
yield item
|
|
247
324
|
|
|
@@ -299,6 +376,8 @@ class KsADKHarnessProviderRuntime:
|
|
|
299
376
|
checkpoint_dsn: str | None = None,
|
|
300
377
|
execution_policy_resolver: Any | None = None,
|
|
301
378
|
user_workspace_root: Path | None = None,
|
|
379
|
+
engine_selector: HarnessEngineSelector | None = None,
|
|
380
|
+
native_adapter_builder: HarnessNativeAdapterBuilder | None = None,
|
|
302
381
|
) -> None:
|
|
303
382
|
self._plugin_id = plugin_id
|
|
304
383
|
self._session_service = session_service
|
|
@@ -307,6 +386,8 @@ class KsADKHarnessProviderRuntime:
|
|
|
307
386
|
self._checkpoint_dsn = checkpoint_dsn
|
|
308
387
|
self._execution_policy_resolver = execution_policy_resolver
|
|
309
388
|
self._user_workspace_root = user_workspace_root
|
|
389
|
+
self._engine_selector = engine_selector
|
|
390
|
+
self._native_adapter_builder = native_adapter_builder
|
|
310
391
|
self._ready = False
|
|
311
392
|
self._disposed = False
|
|
312
393
|
self._last_inventory: HarnessProviderInventory | None = None
|
|
@@ -344,6 +425,7 @@ class KsADKHarnessProviderRuntime:
|
|
|
344
425
|
raise PluginHostError("harness_provider_unavailable", "Harness provider is not ready")
|
|
345
426
|
|
|
346
427
|
async with AsyncExitStack() as mcp_cleanup:
|
|
428
|
+
hook_bindings = project_harness_hooks(bundle, capabilities)
|
|
347
429
|
projection = await project_mcp_capabilities(capabilities, bundle)
|
|
348
430
|
mcp_cleanup.push_async_callback(projection.aclose)
|
|
349
431
|
mcp_specs = list(projection.specs)
|
|
@@ -352,30 +434,59 @@ class KsADKHarnessProviderRuntime:
|
|
|
352
434
|
skills: list[HarnessSkillContribution] = []
|
|
353
435
|
skill_owners: list[str] = []
|
|
354
436
|
for binding in capabilities.all("skill.source/v1"):
|
|
355
|
-
|
|
437
|
+
plural = isinstance(binding.runtime, HarnessSkillSetSource)
|
|
438
|
+
if not plural and not isinstance(binding.runtime, HarnessSkillSource):
|
|
356
439
|
raise PluginHostError(
|
|
357
440
|
"harness_skill_incompatible",
|
|
358
441
|
f"plugin {binding.plugin_id} cannot project Harness instructions",
|
|
359
442
|
)
|
|
360
|
-
|
|
361
|
-
|
|
443
|
+
contributions = (
|
|
444
|
+
tuple(binding.runtime.harness_skills(bundle))
|
|
445
|
+
if plural
|
|
446
|
+
else (binding.runtime.harness_skill(bundle),)
|
|
447
|
+
)
|
|
448
|
+
if not contributions:
|
|
362
449
|
raise PluginHostError(
|
|
363
450
|
"harness_skill_invalid",
|
|
364
|
-
f"plugin {binding.plugin_id} returned
|
|
451
|
+
f"plugin {binding.plugin_id} returned no Skill contributions",
|
|
365
452
|
)
|
|
366
|
-
|
|
367
|
-
|
|
453
|
+
for contribution in contributions:
|
|
454
|
+
if (
|
|
455
|
+
not isinstance(contribution, HarnessSkillContribution)
|
|
456
|
+
or not contribution.name.strip()
|
|
457
|
+
or not contribution.instructions.strip()
|
|
458
|
+
):
|
|
459
|
+
raise PluginHostError(
|
|
460
|
+
"harness_skill_invalid",
|
|
461
|
+
f"plugin {binding.plugin_id} returned an invalid Skill contribution",
|
|
462
|
+
)
|
|
463
|
+
skills.append(contribution)
|
|
464
|
+
skill_owners.append(binding.plugin_id)
|
|
368
465
|
|
|
369
466
|
context_sources: list[HarnessContextSource] = []
|
|
370
467
|
context_owners: list[str] = []
|
|
468
|
+
context_bindings: list[HarnessContextBinding] = []
|
|
371
469
|
for binding in capabilities.all("context.contributor/v1"):
|
|
372
|
-
|
|
470
|
+
declarations = [item for item in bundle.composition.profile.capabilities
|
|
471
|
+
if item.ref == f"plugin://{binding.plugin_id}@{binding.plugin_version}"]
|
|
472
|
+
richer = bool(len(declarations) == 1 and declarations[0].config.get(
|
|
473
|
+
"schema_version",
|
|
474
|
+
) == "ksadk.harness-context-contributor-binding/v1")
|
|
475
|
+
required_protocol = (HarnessContextContributorSource if richer
|
|
476
|
+
else HarnessContextSource)
|
|
477
|
+
if not isinstance(binding.runtime, required_protocol):
|
|
373
478
|
raise PluginHostError(
|
|
374
479
|
"harness_context_incompatible",
|
|
375
480
|
f"plugin {binding.plugin_id} cannot contribute Harness context",
|
|
376
481
|
)
|
|
377
|
-
|
|
482
|
+
if not richer:
|
|
483
|
+
context_sources.append(binding.runtime)
|
|
378
484
|
context_owners.append(binding.plugin_id)
|
|
485
|
+
context_bindings.append(HarnessContextBinding(
|
|
486
|
+
binding.plugin_id, binding.plugin_version, binding.runtime,
|
|
487
|
+
slot=binding.slot,
|
|
488
|
+
contributor=richer,
|
|
489
|
+
))
|
|
379
490
|
|
|
380
491
|
execution = bundle.resolved_agent_spec.get("execution")
|
|
381
492
|
strategy = (
|
|
@@ -406,10 +517,63 @@ class KsADKHarnessProviderRuntime:
|
|
|
406
517
|
skills=tuple(item.name for item in skills),
|
|
407
518
|
context_contributors=tuple(context_owners),
|
|
408
519
|
)
|
|
409
|
-
self._last_inventory = inventory
|
|
410
520
|
workspace_root = bundle.root / "runtime"
|
|
411
521
|
if not workspace_root.is_dir():
|
|
412
522
|
workspace_root = bundle.root
|
|
523
|
+
engine_context = HarnessEngineActivationContext(
|
|
524
|
+
bundle=bundle,
|
|
525
|
+
config=config,
|
|
526
|
+
agent_name=bundle.manifest.agent_id,
|
|
527
|
+
workspace_root=workspace_root,
|
|
528
|
+
user_workspace_root=self._user_workspace_root,
|
|
529
|
+
skills=tuple(skills),
|
|
530
|
+
profile_digest=capabilities.profile_digest,
|
|
531
|
+
plugin_lock_digest=capabilities.plugin_lock_digest,
|
|
532
|
+
activation_key=capabilities.activation_key,
|
|
533
|
+
activation_claims=capabilities.activation_claims,
|
|
534
|
+
activation_generation=capabilities.activation_generation,
|
|
535
|
+
activation_available=capabilities.activation_available,
|
|
536
|
+
mcp_available=projection.available,
|
|
537
|
+
mcp_resource_pins=projection.resource_pins,
|
|
538
|
+
context_sources=tuple(context_bindings),
|
|
539
|
+
hook_sources=hook_bindings,
|
|
540
|
+
memory_sources=tuple(
|
|
541
|
+
MemoryProviderBinding(binding.plugin_id, binding.plugin_version,
|
|
542
|
+
binding.slot, binding.runtime)
|
|
543
|
+
for binding in capabilities.all("memory.provider/v1")
|
|
544
|
+
),
|
|
545
|
+
)
|
|
546
|
+
engine_kind: Literal["legacy", "native"] = "legacy"
|
|
547
|
+
if self._engine_selector is not None:
|
|
548
|
+
selected = self._engine_selector(engine_context)
|
|
549
|
+
if inspect.isawaitable(selected):
|
|
550
|
+
selected = await selected
|
|
551
|
+
if selected not in {"legacy", "native"}:
|
|
552
|
+
raise PluginHostError(
|
|
553
|
+
"harness_engine_selection_invalid",
|
|
554
|
+
"Harness engine selection must be legacy or native",
|
|
555
|
+
)
|
|
556
|
+
engine_kind = selected
|
|
557
|
+
if hook_bindings and engine_kind != "native":
|
|
558
|
+
raise PluginHostError(
|
|
559
|
+
"harness_hooks_native_required",
|
|
560
|
+
"selected harness.hook/v1 capabilities require Native execution",
|
|
561
|
+
)
|
|
562
|
+
if any(binding.contributor for binding in context_bindings) and engine_kind != "native":
|
|
563
|
+
raise PluginHostError(
|
|
564
|
+
"harness_context_native_required",
|
|
565
|
+
"typed Context Contributors require the selected Native execution path",
|
|
566
|
+
)
|
|
567
|
+
if engine_kind == "native":
|
|
568
|
+
inventory = replace(inventory, history_owner="native_run_ledger")
|
|
569
|
+
# Only clients consuming the ephemeral callbacks may use the
|
|
570
|
+
# renewable probe. Legacy/static clients retain token expiry.
|
|
571
|
+
engine_context = replace(
|
|
572
|
+
engine_context,
|
|
573
|
+
mcp_available=projection.runtime_available,
|
|
574
|
+
mcp_runtime_credentials=projection.runtime_credentials,
|
|
575
|
+
)
|
|
576
|
+
self._last_inventory = inventory
|
|
413
577
|
return KsADKHarnessActivation(
|
|
414
578
|
bundle=bundle,
|
|
415
579
|
config=config,
|
|
@@ -425,6 +589,9 @@ class KsADKHarnessProviderRuntime:
|
|
|
425
589
|
checkpoint_dsn=self._checkpoint_dsn,
|
|
426
590
|
execution_policy_resolver=self._execution_policy_resolver,
|
|
427
591
|
user_workspace_root=self._user_workspace_root,
|
|
592
|
+
engine_context=engine_context,
|
|
593
|
+
engine_kind=engine_kind,
|
|
594
|
+
native_adapter_builder=self._native_adapter_builder,
|
|
428
595
|
)
|
|
429
596
|
|
|
430
597
|
|
|
@@ -457,10 +624,20 @@ class KsADKHarnessProviderFactory:
|
|
|
457
624
|
)
|
|
458
625
|
reasoner = self._reasoner or services.get("harness_reasoner")
|
|
459
626
|
if reasoner is None:
|
|
460
|
-
reasoner =
|
|
627
|
+
reasoner = ModelGatewayHarnessReasoner()
|
|
461
628
|
state_dir = services.get("harness_state_dir")
|
|
462
629
|
checkpoint_dsn = services.get("checkpoint_dsn")
|
|
463
630
|
user_workspace_root = services.get("harness_workspace_root")
|
|
631
|
+
engine_selector = services.get("harness_engine_selector")
|
|
632
|
+
native_adapter_builder = services.get("harness_native_adapter_builder")
|
|
633
|
+
if (engine_selector is None) != (native_adapter_builder is None) or (
|
|
634
|
+
engine_selector is not None
|
|
635
|
+
and (not callable(engine_selector) or not callable(native_adapter_builder))
|
|
636
|
+
):
|
|
637
|
+
raise PluginHostError(
|
|
638
|
+
"harness_native_binding_invalid",
|
|
639
|
+
"Native Harness selection requires a host selector and adapter builder",
|
|
640
|
+
)
|
|
464
641
|
self.runtime = KsADKHarnessProviderRuntime(
|
|
465
642
|
plugin_id=manifest.metadata.id,
|
|
466
643
|
session_service=service,
|
|
@@ -468,9 +645,9 @@ class KsADKHarnessProviderFactory:
|
|
|
468
645
|
state_dir=str(state_dir) if state_dir else None,
|
|
469
646
|
checkpoint_dsn=str(checkpoint_dsn) if checkpoint_dsn else None,
|
|
470
647
|
execution_policy_resolver=services.get("execution_policy_resolver"),
|
|
471
|
-
user_workspace_root=(
|
|
472
|
-
|
|
473
|
-
|
|
648
|
+
user_workspace_root=(Path(user_workspace_root) if user_workspace_root else None),
|
|
649
|
+
engine_selector=engine_selector,
|
|
650
|
+
native_adapter_builder=native_adapter_builder,
|
|
474
651
|
)
|
|
475
652
|
return self.runtime
|
|
476
653
|
|
|
@@ -493,6 +670,9 @@ class KsADKHarnessActivation:
|
|
|
493
670
|
mcp_cleanup: AsyncExitStack | None = None,
|
|
494
671
|
execution_policy_resolver: Any | None = None,
|
|
495
672
|
user_workspace_root: Path | None = None,
|
|
673
|
+
engine_context: HarnessEngineActivationContext | None = None,
|
|
674
|
+
engine_kind: Literal["legacy", "native"] = "legacy",
|
|
675
|
+
native_adapter_builder: HarnessNativeAdapterBuilder | None = None,
|
|
496
676
|
) -> None:
|
|
497
677
|
self._bundle = bundle
|
|
498
678
|
self._config = config
|
|
@@ -500,6 +680,9 @@ class KsADKHarnessActivation:
|
|
|
500
680
|
self._workspace_root = workspace_root
|
|
501
681
|
# 用户当前选择的 Studio 工作区(bundle 之外);文件工具落盘目标。
|
|
502
682
|
self._user_workspace_root = user_workspace_root
|
|
683
|
+
self._engine_context = engine_context
|
|
684
|
+
self._engine_kind = engine_kind
|
|
685
|
+
self._native_adapter_builder = native_adapter_builder
|
|
503
686
|
self._reasoner = reasoner
|
|
504
687
|
self._skills = skills
|
|
505
688
|
self._context_sources = context_sources
|
|
@@ -543,6 +726,14 @@ class KsADKHarnessActivation:
|
|
|
543
726
|
raise PluginHostError(
|
|
544
727
|
"harness_activation_unavailable", "Harness activation is not ready"
|
|
545
728
|
)
|
|
729
|
+
if self._engine_kind == "native":
|
|
730
|
+
# The direct provider path owns separate Session/transcript state.
|
|
731
|
+
# Until it has a Native projection, only Scheduler's runtime_adapter
|
|
732
|
+
# path may execute this pinned Native activation.
|
|
733
|
+
raise PluginHostError(
|
|
734
|
+
"harness_native_direct_path_unavailable",
|
|
735
|
+
"Native Harness activation requires the Scheduler runtime adapter path",
|
|
736
|
+
)
|
|
546
737
|
turn = HarnessTurnRequest.parse(request)
|
|
547
738
|
context_sections = [
|
|
548
739
|
text.strip()
|
|
@@ -609,24 +800,42 @@ class KsADKHarnessActivation:
|
|
|
609
800
|
error, self._warmup_error = self._warmup_error, None
|
|
610
801
|
raise error
|
|
611
802
|
if self._kernel_adapter is None:
|
|
612
|
-
|
|
613
|
-
|
|
614
|
-
)
|
|
803
|
+
if self._engine_kind == "native":
|
|
804
|
+
from ksadk.harness.native_runtime import NativeRuntimeAdapter
|
|
615
805
|
|
|
616
|
-
|
|
617
|
-
|
|
618
|
-
|
|
619
|
-
|
|
620
|
-
|
|
621
|
-
|
|
622
|
-
|
|
623
|
-
|
|
624
|
-
|
|
625
|
-
|
|
626
|
-
|
|
627
|
-
|
|
628
|
-
|
|
629
|
-
|
|
806
|
+
if self._engine_context is None or self._native_adapter_builder is None:
|
|
807
|
+
raise PluginHostError(
|
|
808
|
+
"harness_native_binding_unavailable",
|
|
809
|
+
"Native Harness host bindings are unavailable",
|
|
810
|
+
)
|
|
811
|
+
adapter = self._native_adapter_builder(self._engine_context)
|
|
812
|
+
if inspect.isawaitable(adapter):
|
|
813
|
+
adapter = await adapter
|
|
814
|
+
if not isinstance(adapter, NativeRuntimeAdapter):
|
|
815
|
+
raise PluginHostError(
|
|
816
|
+
"harness_native_adapter_invalid",
|
|
817
|
+
"Native Harness host builder did not return a NativeRuntimeAdapter",
|
|
818
|
+
)
|
|
819
|
+
self._kernel_adapter = adapter
|
|
820
|
+
else:
|
|
821
|
+
from ksadk.plugins.providers.harness_managed import (
|
|
822
|
+
build_managed_provider_adapter,
|
|
823
|
+
)
|
|
824
|
+
|
|
825
|
+
self._kernel_adapter = await build_managed_provider_adapter(
|
|
826
|
+
self._config,
|
|
827
|
+
agent_name=self._agent_name,
|
|
828
|
+
reasoner=self._reasoner,
|
|
829
|
+
workspace_root=self._workspace_root,
|
|
830
|
+
user_workspace_root=self._user_workspace_root,
|
|
831
|
+
skills=self._skills,
|
|
832
|
+
tool_contracts=dict(self._bundle.resolved_agent_spec),
|
|
833
|
+
bundle_root=self._bundle.root,
|
|
834
|
+
state_dir=self._state_dir,
|
|
835
|
+
checkpoint_dsn=self._checkpoint_dsn,
|
|
836
|
+
execution_policy_resolver=self._execution_policy_resolver,
|
|
837
|
+
)
|
|
838
|
+
self._checkpoint_stack = getattr(self._kernel_adapter, "_checkpoint_stack", None)
|
|
630
839
|
return self._kernel_adapter
|
|
631
840
|
|
|
632
841
|
async def drain(self) -> None:
|
|
@@ -768,8 +977,12 @@ def _chat_history(history: Sequence[Mapping[str, Any]]) -> list[dict[str, Any]]:
|
|
|
768
977
|
|
|
769
978
|
__all__ = [
|
|
770
979
|
"HarnessContextSource",
|
|
980
|
+
"HarnessContextBinding",
|
|
981
|
+
"HarnessEngineActivationContext",
|
|
982
|
+
"HarnessEngineSelector",
|
|
771
983
|
"HarnessMCPSource",
|
|
772
984
|
"HarnessMCPActivationSource",
|
|
985
|
+
"HarnessNativeAdapterBuilder",
|
|
773
986
|
"HarnessProviderInventory",
|
|
774
987
|
"HarnessSkillContribution",
|
|
775
988
|
"HarnessSkillSource",
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
"""Host-selected, read-only Contributor protocol for the Native provider."""
|
|
2
|
+
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
from typing import Literal, Protocol, runtime_checkable
|
|
6
|
+
|
|
7
|
+
from pydantic import Field, field_validator, model_serializer
|
|
8
|
+
|
|
9
|
+
from ksadk.harness.native.state import Contract
|
|
10
|
+
from ksadk.plugins.bundle import ResolvedPluginBundle
|
|
11
|
+
from ksadk.plugins.context_contributor import (
|
|
12
|
+
ContextContributorCapabilities,
|
|
13
|
+
ContextContributorRequest,
|
|
14
|
+
ContextContributorResponse,
|
|
15
|
+
)
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
class HarnessContextContributorConfiguration(Contract):
|
|
19
|
+
schema_version: Literal["ksadk.harness-context-contributor-binding/v1"]
|
|
20
|
+
capabilities: ContextContributorCapabilities
|
|
21
|
+
policy_ref: str
|
|
22
|
+
allowed_classifications: tuple[str, ...]
|
|
23
|
+
max_chars: int = Field(default=32_000, strict=True, ge=1, le=131_072)
|
|
24
|
+
|
|
25
|
+
@field_validator("capabilities", mode="before")
|
|
26
|
+
@classmethod
|
|
27
|
+
def decode_profile_quota(cls, value):
|
|
28
|
+
if isinstance(value, dict) and "input_limit" in value:
|
|
29
|
+
if "max_tokens" in value or "maxTokens" in value:
|
|
30
|
+
raise ValueError("Context binding quota cannot have two spellings")
|
|
31
|
+
value = dict(value)
|
|
32
|
+
value["max_tokens"] = value.pop("input_limit")
|
|
33
|
+
return value
|
|
34
|
+
|
|
35
|
+
@model_serializer(mode="wrap")
|
|
36
|
+
def encode_profile_quota(self, serialize):
|
|
37
|
+
result = serialize(self)
|
|
38
|
+
# This private Profile binding uses an explicit numeric quota name.
|
|
39
|
+
# The frozen Contributor wire remains maxTokens. Do not weaken the
|
|
40
|
+
# generic Profile rule that credential/token config requires a ref.
|
|
41
|
+
capabilities = result["capabilities"]
|
|
42
|
+
field = "max_tokens" if "max_tokens" in capabilities else "maxTokens"
|
|
43
|
+
capabilities["input_limit"] = capabilities.pop(field)
|
|
44
|
+
return result
|
|
45
|
+
|
|
46
|
+
@field_validator("policy_ref")
|
|
47
|
+
@classmethod
|
|
48
|
+
def pinned_policy(cls, value):
|
|
49
|
+
return ContextContributorRequest.validate_policy_ref(value)
|
|
50
|
+
|
|
51
|
+
@field_validator("allowed_classifications")
|
|
52
|
+
@classmethod
|
|
53
|
+
def classifications(cls, value):
|
|
54
|
+
return ContextContributorRequest.validate_allowed_classifications(value)
|
|
55
|
+
|
|
56
|
+
|
|
57
|
+
@runtime_checkable
|
|
58
|
+
class HarnessContextContributorSource(Protocol):
|
|
59
|
+
async def harness_context_contribution(
|
|
60
|
+
self, bundle: ResolvedPluginBundle, request: ContextContributorRequest,
|
|
61
|
+
) -> ContextContributorResponse: ...
|