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/codex/runtime.py
CHANGED
|
@@ -22,6 +22,7 @@ import asyncio
|
|
|
22
22
|
import json
|
|
23
23
|
import logging
|
|
24
24
|
import time
|
|
25
|
+
from contextlib import aclosing
|
|
25
26
|
from collections.abc import Mapping
|
|
26
27
|
from dataclasses import dataclass, field
|
|
27
28
|
from typing import Any, AsyncIterator, Optional
|
|
@@ -37,6 +38,7 @@ from ksadk.events.canonical import (
|
|
|
37
38
|
RunCompleted,
|
|
38
39
|
RunFailed,
|
|
39
40
|
RunInterrupted,
|
|
41
|
+
RunStarted,
|
|
40
42
|
RuntimeEvent,
|
|
41
43
|
SourceRef,
|
|
42
44
|
)
|
|
@@ -55,28 +57,13 @@ from ksadk.runtime.adapter import (
|
|
|
55
57
|
StartRequest,
|
|
56
58
|
)
|
|
57
59
|
|
|
60
|
+
from ksadk.codex.base_runtime import _CodexAsBaseRuntime
|
|
61
|
+
|
|
58
62
|
logger = logging.getLogger(__name__)
|
|
59
63
|
|
|
60
64
|
_INTERRUPT_DRAIN_TIMEOUT_SECONDS = 5.0
|
|
61
65
|
|
|
62
66
|
|
|
63
|
-
class _CodexAsBaseRuntime(BaseRuntime):
|
|
64
|
-
"""把 CodexClient 包装为 BaseRuntime(原生能力面)。"""
|
|
65
|
-
|
|
66
|
-
def __init__(self, client: CodexClient) -> None:
|
|
67
|
-
self._client = client
|
|
68
|
-
self.runtime_type = "codex"
|
|
69
|
-
|
|
70
|
-
def native_capabilities(self) -> dict[str, Any]:
|
|
71
|
-
return {
|
|
72
|
-
"Framework": "codex",
|
|
73
|
-
"cancel": "thread",
|
|
74
|
-
"pause": "interrupt_then_resume_thread",
|
|
75
|
-
"resume": "thread_id",
|
|
76
|
-
"live_interaction": True,
|
|
77
|
-
}
|
|
78
|
-
|
|
79
|
-
|
|
80
67
|
@dataclass
|
|
81
68
|
class _CodexThread:
|
|
82
69
|
thread_id: str
|
|
@@ -92,6 +79,7 @@ class _CodexThread:
|
|
|
92
79
|
duration_ms: int | None = None
|
|
93
80
|
goal_mode: bool = False
|
|
94
81
|
continuation_preexisting: bool = False
|
|
82
|
+
cancel_experts: Any = None
|
|
95
83
|
|
|
96
84
|
|
|
97
85
|
class CodexRuntimeAdapter(RuntimeAdapter):
|
|
@@ -106,9 +94,17 @@ class CodexRuntimeAdapter(RuntimeAdapter):
|
|
|
106
94
|
bound_skill_paths: Mapping[str, str] | None = None,
|
|
107
95
|
plugin_bootstrap: CodexPluginBootstrap | None = None,
|
|
108
96
|
turn_projector: CodexTurnProjection | None = None,
|
|
97
|
+
a2a_experts=(),
|
|
98
|
+
managed_a2a_bootstrap=None,
|
|
109
99
|
) -> None:
|
|
110
100
|
super().__init__(_CodexAsBaseRuntime(client))
|
|
111
101
|
self._client = client
|
|
102
|
+
self._a2a_experts = tuple(a2a_experts)
|
|
103
|
+
self._managed_a2a_bootstrap = managed_a2a_bootstrap
|
|
104
|
+
if self._a2a_experts:
|
|
105
|
+
if managed_a2a_bootstrap is None:
|
|
106
|
+
raise ValueError("A2A_MANAGED_BOOTSTRAP_REQUIRED")
|
|
107
|
+
client.configure_a2a_experts(self._a2a_experts)
|
|
112
108
|
self._sandbox_read_only = sandbox_read_only
|
|
113
109
|
self._turn_timeout_seconds = turn_timeout_seconds
|
|
114
110
|
if turn_projector is not None and bound_skill_paths:
|
|
@@ -125,6 +121,8 @@ class CodexRuntimeAdapter(RuntimeAdapter):
|
|
|
125
121
|
self._plugins_bootstrapped = False
|
|
126
122
|
self._threads: dict[str, _CodexThread] = {}
|
|
127
123
|
self._requests: dict[str, StartRequest] = {}
|
|
124
|
+
self._canonical_roots: dict[str, RunStarted] = {}
|
|
125
|
+
self._recovery_records: dict[str, Any] = {}
|
|
128
126
|
self._known_threads: set[str] = set()
|
|
129
127
|
self._pending_cancels: set[str] = set()
|
|
130
128
|
# 被杀/interrupt 的 session 不持久化(goal-09 契约 1)。
|
|
@@ -133,29 +131,61 @@ class CodexRuntimeAdapter(RuntimeAdapter):
|
|
|
133
131
|
self.last_cancel_dropped_approvals: set[str] = set()
|
|
134
132
|
self._seq = 0
|
|
135
133
|
self._closed = False
|
|
134
|
+
self._owned_by_app = False
|
|
135
|
+
|
|
136
|
+
def configure_managed_a2a(self, bootstrap) -> None:
|
|
137
|
+
if self._managed_a2a_bootstrap is bootstrap:
|
|
138
|
+
return
|
|
139
|
+
if self._threads or self._known_threads:
|
|
140
|
+
raise RuntimeError("cannot change managed A2A after a native thread starts")
|
|
141
|
+
if self._managed_a2a_bootstrap is not None:
|
|
142
|
+
raise ValueError("A2A_BOOTSTRAP_IDENTITY_CONFLICT")
|
|
143
|
+
self._managed_a2a_bootstrap = bootstrap
|
|
136
144
|
|
|
137
145
|
# ---- capability matrix(v1,诚实声明) ----
|
|
138
146
|
|
|
139
147
|
def capabilities(self) -> RuntimeCapabilityMatrix:
|
|
140
|
-
"""
|
|
141
|
-
|
|
142
|
-
|
|
148
|
+
"""Native controls plus explicitly configured managed-expert recovery.
|
|
149
|
+
|
|
150
|
+
Ordinary Codex threads retain their existing process-local declaration.
|
|
151
|
+
Recovery needs both an explicit native home and durable A2A storage.
|
|
143
152
|
"""
|
|
144
153
|
|
|
145
154
|
def _unavailable(reason: str) -> RuntimeCapability:
|
|
146
155
|
return RuntimeCapability(supported=False, mode="unavailable", reason=reason)
|
|
147
156
|
|
|
157
|
+
recovery = False
|
|
158
|
+
if self._a2a_experts and getattr(self._client, "_checkpoint_home", None):
|
|
159
|
+
bootstrap = self._managed_a2a_bootstrap
|
|
160
|
+
try:
|
|
161
|
+
recovery = bool(bootstrap.outbound_enabled
|
|
162
|
+
and bootstrap.invocation_checkpoint_store is not None)
|
|
163
|
+
except (AttributeError, RuntimeError):
|
|
164
|
+
recovery = False
|
|
165
|
+
|
|
166
|
+
bootstrap = self._managed_a2a_bootstrap
|
|
167
|
+
scoped_cancel = bool(
|
|
168
|
+
bootstrap is not None and getattr(bootstrap, "scoped_cancel_available", False)
|
|
169
|
+
)
|
|
148
170
|
return RuntimeCapabilityMatrix(
|
|
171
|
+
scoped_cancel=(RuntimeCapability(supported=True, mode="emulated")
|
|
172
|
+
if scoped_cancel else None),
|
|
149
173
|
cancel=RuntimeCapability(supported=True, mode="native"),
|
|
150
174
|
pause=RuntimeCapability(supported=True, mode="native"),
|
|
151
175
|
resume=RuntimeCapability(supported=True, mode="native"),
|
|
152
176
|
submit_interaction=RuntimeCapability(supported=True, mode="native"),
|
|
153
|
-
attach=
|
|
177
|
+
attach=(RuntimeCapability(supported=True, mode="native") if recovery
|
|
178
|
+
else _unavailable("codex_process_local_thread_table")),
|
|
154
179
|
steer=_unavailable("runtime_no_native_steer"),
|
|
155
180
|
inject=_unavailable("runtime_no_native_inject"),
|
|
156
181
|
checkpoint=RuntimeCapability(supported=True, mode="native"),
|
|
157
|
-
durable_restore=
|
|
158
|
-
|
|
182
|
+
durable_restore=(RuntimeCapability(supported=True, mode="native") if recovery
|
|
183
|
+
else _unavailable("codex_durable_restore_requires_attach_seam")),
|
|
184
|
+
goal=(
|
|
185
|
+
_unavailable("a2a_codex_expert_goal_unsupported")
|
|
186
|
+
if self._a2a_experts
|
|
187
|
+
else RuntimeCapability(supported=True, mode="native")
|
|
188
|
+
),
|
|
159
189
|
loop=_unavailable("codex_loop_requires_run_control_spec"),
|
|
160
190
|
plan=RuntimeCapability(supported=True, mode="native"),
|
|
161
191
|
interaction_mode="live_submit",
|
|
@@ -192,14 +222,15 @@ class CodexRuntimeAdapter(RuntimeAdapter):
|
|
|
192
222
|
cwd = request.config.get("cwd")
|
|
193
223
|
if cwd:
|
|
194
224
|
thread_config["cwd"] = str(cwd)
|
|
195
|
-
#
|
|
196
|
-
#
|
|
197
|
-
#
|
|
198
|
-
#
|
|
199
|
-
# resumed across that transport boundary.
|
|
225
|
+
# Independently owned adapters close their transport per turn;
|
|
226
|
+
# app-owned adapters may also cross a process boundary on restart.
|
|
227
|
+
# An ephemeral thread has no rollout to resume across either
|
|
228
|
+
# boundary, so retain the native durable thread by default.
|
|
200
229
|
thread_config.setdefault("ephemeral", False)
|
|
201
230
|
thread_id = await self._client.start_thread(thread_config)
|
|
231
|
+
self._do_not_persist.discard(thread_id)
|
|
202
232
|
self._known_threads.add(thread_id)
|
|
233
|
+
self._canonical_roots.pop(thread_id, None)
|
|
203
234
|
thread = _CodexThread(
|
|
204
235
|
thread_id=thread_id,
|
|
205
236
|
continuation_preexisting=bool(provided),
|
|
@@ -214,6 +245,91 @@ class CodexRuntimeAdapter(RuntimeAdapter):
|
|
|
214
245
|
native_ref={"thread_id": thread_id, "user_id": request.user_id},
|
|
215
246
|
)
|
|
216
247
|
|
|
248
|
+
async def prepare_session_continuation(
|
|
249
|
+
self, record, request: StartRequest, *, agent_instance_id: str, tenant_id: str,
|
|
250
|
+
) -> None:
|
|
251
|
+
"""Only Kernel-loaded completed history can authorize an expert follow-up."""
|
|
252
|
+
if not self._a2a_experts:
|
|
253
|
+
return
|
|
254
|
+
from ksadk.a2a.codex_session_checkpoint import validated_session_checkpoint
|
|
255
|
+
|
|
256
|
+
bridge = getattr(self._client, "_a2a_expert_bridge", None)
|
|
257
|
+
try:
|
|
258
|
+
handle = RunHandle.model_validate(record.metadata.get("handle"))
|
|
259
|
+
checkpoint = validated_session_checkpoint(
|
|
260
|
+
record, handle, request, agent_instance_id=agent_instance_id,
|
|
261
|
+
tenant_id=tenant_id, experts=bridge.experts,
|
|
262
|
+
)
|
|
263
|
+
except (ValueError, TypeError, AttributeError):
|
|
264
|
+
raise ValueError("A2A_CODEX_SESSION_CHECKPOINT_INVALID") from None
|
|
265
|
+
await self._bootstrap_plugins_once()
|
|
266
|
+
await self._client.restore_completed_a2a_thread(checkpoint)
|
|
267
|
+
|
|
268
|
+
async def prepare_attach_record(self, handle: RunHandle, record) -> None:
|
|
269
|
+
from ksadk.a2a.codex_recovery import validated_recovery_checkpoint
|
|
270
|
+
|
|
271
|
+
if not self._a2a_experts:
|
|
272
|
+
return
|
|
273
|
+
if self._managed_a2a_bootstrap is None:
|
|
274
|
+
raise ValueError("A2A_CODEX_RECOVERY_MANAGED_EXPERTS_REQUIRED")
|
|
275
|
+
if handle.run_id in self._known_threads or handle.run_id in self._recovery_records:
|
|
276
|
+
raise ValueError("A2A_CODEX_RECOVERY_THREAD_ALREADY_ATTACHED")
|
|
277
|
+
bridge = self._client._a2a_expert_bridge
|
|
278
|
+
if record.metadata.get("runtime_checkpoint", {}).get("schema") == "codex.a2a.session/v1":
|
|
279
|
+
from ksadk.a2a.codex_session_checkpoint import validated_terminal_recovery_checkpoint
|
|
280
|
+
|
|
281
|
+
self._recovery_records[handle.run_id] = validated_terminal_recovery_checkpoint(
|
|
282
|
+
record, handle, experts=bridge.experts,
|
|
283
|
+
)
|
|
284
|
+
return
|
|
285
|
+
recovery = validated_recovery_checkpoint(record, handle, experts=bridge.experts)
|
|
286
|
+
if recovery.continuation_started:
|
|
287
|
+
raise ValueError("A2A_CODEX_RECOVERY_CONTINUATION_UNCERTAIN")
|
|
288
|
+
self._recovery_records[handle.run_id] = recovery
|
|
289
|
+
|
|
290
|
+
async def attach(self, handle: RunHandle) -> RunHandle:
|
|
291
|
+
if not self._a2a_experts:
|
|
292
|
+
return await super().attach(handle)
|
|
293
|
+
recovery = self._recovery_records.pop(handle.run_id, None)
|
|
294
|
+
if recovery is None:
|
|
295
|
+
raise ValueError("A2A_CODEX_RECOVERY_RECORD_REQUIRED")
|
|
296
|
+
# No cached handle alone may authorize native access or a new turn.
|
|
297
|
+
if (handle.runtime_type != "codex" or handle.session_id != recovery.session_id
|
|
298
|
+
or handle.native_ref.get("thread_id") != recovery.thread_id
|
|
299
|
+
or handle.native_ref.get("user_id") != recovery.start_request.user_id):
|
|
300
|
+
raise ValueError("A2A_CODEX_RECOVERY_HANDLE_CONFLICT")
|
|
301
|
+
from ksadk.a2a.codex_session_checkpoint import CodexSessionCheckpoint
|
|
302
|
+
|
|
303
|
+
if isinstance(recovery, CodexSessionCheckpoint):
|
|
304
|
+
thread = _CodexThread(thread_id=handle.run_id, continuation_preexisting=True)
|
|
305
|
+
thread.__dict__["_terminal_recovery"] = recovery
|
|
306
|
+
self._threads[handle.run_id] = thread
|
|
307
|
+
self._requests[handle.run_id] = recovery.start_request
|
|
308
|
+
self._known_threads.add(handle.run_id)
|
|
309
|
+
return handle
|
|
310
|
+
await self._bootstrap_plugins_once()
|
|
311
|
+
restored = await self._client.restore_managed_a2a_thread(recovery)
|
|
312
|
+
if restored != handle.run_id:
|
|
313
|
+
raise ValueError("A2A_CODEX_RECOVERY_NATIVE_IDENTITY_INVALID")
|
|
314
|
+
thread = _CodexThread(thread_id=restored, continuation_preexisting=True)
|
|
315
|
+
thread.__dict__["_start_request"] = recovery.start_request
|
|
316
|
+
thread.__dict__["_recovery"] = recovery
|
|
317
|
+
self._threads[restored] = thread
|
|
318
|
+
self._requests[restored] = recovery.start_request
|
|
319
|
+
self._known_threads.add(restored)
|
|
320
|
+
return handle
|
|
321
|
+
|
|
322
|
+
async def durable_restore(self, handle: RunHandle) -> RunHandle:
|
|
323
|
+
if not self._a2a_experts:
|
|
324
|
+
return await super().durable_restore(handle)
|
|
325
|
+
return await self.attach(handle)
|
|
326
|
+
|
|
327
|
+
def requires_recovery_stream(self, handle: RunHandle) -> bool:
|
|
328
|
+
thread = self._threads.get(handle.run_id)
|
|
329
|
+
return thread is not None and any(
|
|
330
|
+
thread.__dict__.get(key) is not None for key in ("_recovery", "_terminal_recovery")
|
|
331
|
+
)
|
|
332
|
+
|
|
217
333
|
async def _bootstrap_plugins_once(self) -> None:
|
|
218
334
|
config = self._plugin_bootstrap
|
|
219
335
|
if config is None or self._plugins_bootstrapped:
|
|
@@ -238,6 +354,10 @@ class CodexRuntimeAdapter(RuntimeAdapter):
|
|
|
238
354
|
return CancelResult.NOT_RUNNING
|
|
239
355
|
assert thread is not None
|
|
240
356
|
try:
|
|
357
|
+
# Cancel bound experts while the Kernel still owns this live run.
|
|
358
|
+
# Native interruption can settle the parent before stream teardown.
|
|
359
|
+
if thread.cancel_experts is not None:
|
|
360
|
+
await thread.cancel_experts()
|
|
241
361
|
# 级联丢弃 pending 工具审批(快照 runtime 自跟踪的 pending 集,供观测)。
|
|
242
362
|
# 真实 SDK 无独立 drain API:interrupt 后 turn 停止,pending 审批随之失效。
|
|
243
363
|
self.last_cancel_dropped_approvals = set(thread.pending_approvals)
|
|
@@ -252,14 +372,17 @@ class CodexRuntimeAdapter(RuntimeAdapter):
|
|
|
252
372
|
if thread.goal_mode
|
|
253
373
|
else await self._client.interrupt_active_turn(thread.thread_id)
|
|
254
374
|
)
|
|
255
|
-
if not interrupted:
|
|
375
|
+
if not interrupted and thread.__dict__.get("_recovery") is None:
|
|
256
376
|
# 无活跃 handle 可 interrupt(竞态:turn 刚好结束)→ 视为未在运行。
|
|
257
377
|
return CancelResult.NOT_RUNNING
|
|
258
378
|
# 被中断的 session 不持久化(goal-09 契约 1)。
|
|
259
379
|
self._do_not_persist.add(thread_id)
|
|
260
380
|
thread.done = True
|
|
261
381
|
self._threads.pop(thread_id, None)
|
|
262
|
-
|
|
382
|
+
if thread.__dict__.get("_recovery") is None:
|
|
383
|
+
self._requests.pop(thread_id, None)
|
|
384
|
+
# Recovery has no native terminal notification yet. Its consumer
|
|
385
|
+
# still needs the original caller identity to emit run.canceled.
|
|
263
386
|
self._pending_cancels.discard(thread_id)
|
|
264
387
|
return CancelResult.INTERRUPTED_ACTIVE_TURN
|
|
265
388
|
except Exception: # noqa: BLE001
|
|
@@ -327,6 +450,7 @@ class CodexRuntimeAdapter(RuntimeAdapter):
|
|
|
327
450
|
if handle.run_id in self._do_not_persist:
|
|
328
451
|
raise ValueError(f"thread {handle.run_id} 已被中断/杀进程,不持久化,不可 resume")
|
|
329
452
|
self._pending_cancels.discard(handle.run_id)
|
|
453
|
+
self._canonical_roots.pop(handle.run_id, None)
|
|
330
454
|
self._known_threads.add(target.id)
|
|
331
455
|
thread = _CodexThread(
|
|
332
456
|
thread_id=target.id,
|
|
@@ -379,9 +503,29 @@ class CodexRuntimeAdapter(RuntimeAdapter):
|
|
|
379
503
|
ref={"thread_id": handle.native_ref.get("thread_id")},
|
|
380
504
|
)
|
|
381
505
|
|
|
506
|
+
def adopt_app_lifetime(self) -> None:
|
|
507
|
+
"""A shared composition root owns the native transport and projector."""
|
|
508
|
+
self._owned_by_app = True
|
|
509
|
+
|
|
510
|
+
async def close_app_resources(self) -> None:
|
|
511
|
+
if self._owned_by_app:
|
|
512
|
+
await self.close_all()
|
|
513
|
+
|
|
382
514
|
async def close(self, handle: RunHandle) -> None:
|
|
383
515
|
self._do_not_persist.add(handle.run_id)
|
|
384
|
-
|
|
516
|
+
if not self._owned_by_app:
|
|
517
|
+
await self.close_all()
|
|
518
|
+
return
|
|
519
|
+
thread = self._threads.get(handle.run_id)
|
|
520
|
+
if thread is not None and thread.streaming and not thread.done:
|
|
521
|
+
thread.interrupt_event.set()
|
|
522
|
+
await self._client.interrupt_active_turn(thread.thread_id)
|
|
523
|
+
# Preserve the native client's completed-thread cache for the next
|
|
524
|
+
# turn; release only this Kernel run's projections and request.
|
|
525
|
+
self._threads.pop(handle.run_id, None)
|
|
526
|
+
self._requests.pop(handle.run_id, None)
|
|
527
|
+
self._canonical_roots.pop(handle.run_id, None)
|
|
528
|
+
self._pending_cancels.discard(handle.run_id)
|
|
385
529
|
|
|
386
530
|
async def compact_session(self, thread_id: str, config: dict[str, Any]) -> dict[str, Any]:
|
|
387
531
|
"""Compact an existing native session using this build's client."""
|
|
@@ -392,10 +536,9 @@ class CodexRuntimeAdapter(RuntimeAdapter):
|
|
|
392
536
|
async def close_all(self) -> None:
|
|
393
537
|
"""Dispose every thread and the activation-owned App Server process.
|
|
394
538
|
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
that has been created but not started yet.
|
|
539
|
+
An independently owned adapter closes the transport with its handle.
|
|
540
|
+
Shared app-owned adapters retain it until application shutdown. This
|
|
541
|
+
helper also lets a draining AgentProvider release an unused runtime.
|
|
399
542
|
"""
|
|
400
543
|
|
|
401
544
|
if self._closed:
|
|
@@ -422,6 +565,8 @@ class CodexRuntimeAdapter(RuntimeAdapter):
|
|
|
422
565
|
self._do_not_persist.update(thread_ids)
|
|
423
566
|
self._threads.clear()
|
|
424
567
|
self._requests.clear()
|
|
568
|
+
self._canonical_roots.clear()
|
|
569
|
+
self._recovery_records.clear()
|
|
425
570
|
self._known_threads.clear()
|
|
426
571
|
self._pending_cancels.clear()
|
|
427
572
|
|
|
@@ -441,25 +586,59 @@ class CodexRuntimeAdapter(RuntimeAdapter):
|
|
|
441
586
|
thread = _CodexThread(thread_id=handle.run_id)
|
|
442
587
|
self._threads[handle.run_id] = thread
|
|
443
588
|
|
|
589
|
+
terminal = thread.__dict__.get("_terminal_recovery")
|
|
590
|
+
if terminal is not None:
|
|
591
|
+
from ksadk.a2a.codex_session_checkpoint import terminal_recovery_event
|
|
592
|
+
|
|
593
|
+
try:
|
|
594
|
+
yield await terminal_recovery_event(terminal)
|
|
595
|
+
finally:
|
|
596
|
+
thread.done = True
|
|
597
|
+
self._threads.pop(handle.run_id, None)
|
|
598
|
+
return
|
|
599
|
+
|
|
600
|
+
recovery = thread.__dict__.get("_recovery")
|
|
601
|
+
if recovery is not None:
|
|
602
|
+
await self._restore_canonical_root(handle, recovery)
|
|
603
|
+
|
|
444
604
|
if handle.run_id in self._pending_cancels:
|
|
445
605
|
self._pending_cancels.discard(handle.run_id)
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
|
|
606
|
+
try:
|
|
607
|
+
yield self._make_run_canceled(
|
|
608
|
+
handle,
|
|
609
|
+
reason=f"pending_cancel:{CancelResult.PENDING_CANCEL_RECORDED.value}",
|
|
610
|
+
)
|
|
611
|
+
finally:
|
|
612
|
+
self._canonical_roots.pop(handle.run_id, None)
|
|
450
613
|
return
|
|
451
614
|
|
|
452
615
|
request = thread.__dict__.get("_start_request")
|
|
453
616
|
resume_state = thread.__dict__.get("_resume")
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
617
|
+
if recovery is None:
|
|
618
|
+
projected = self._turn_projector.project(
|
|
619
|
+
request, resume_state.get("payload") if resume_state is not None else None,
|
|
620
|
+
)
|
|
621
|
+
run_input = projected.input
|
|
622
|
+
else:
|
|
623
|
+
# The original user input is already in the restored transcript.
|
|
624
|
+
# Only verified expert outputs precede the next native turn.
|
|
625
|
+
run_input = []
|
|
458
626
|
thread.streaming = True
|
|
459
627
|
thread.turn_id = thread.turn_id or f"turn_{thread.thread_id}"
|
|
460
628
|
try:
|
|
461
|
-
|
|
462
|
-
|
|
629
|
+
events = self._map_codex_stream(handle, thread, run_input)
|
|
630
|
+
if self._a2a_experts:
|
|
631
|
+
from ksadk.a2a.codex_runtime import managed_codex_events
|
|
632
|
+
events = managed_codex_events(self._client, self._managed_a2a_bootstrap, events, request=request, owner=thread, recovery=recovery)
|
|
633
|
+
async with aclosing(events):
|
|
634
|
+
async for event in events:
|
|
635
|
+
if (isinstance(event, RunStarted) and event.parent_scope_id is None
|
|
636
|
+
and event.run_id == self._event_run_id(handle)):
|
|
637
|
+
# Runtime fallbacks must terminate the public/native
|
|
638
|
+
# root already observed by consumers, even if cancel
|
|
639
|
+
# removes the request/thread before stream teardown.
|
|
640
|
+
self._canonical_roots.setdefault(handle.run_id, event)
|
|
641
|
+
yield event
|
|
463
642
|
except asyncio.CancelledError:
|
|
464
643
|
thread.interrupted = True
|
|
465
644
|
self._do_not_persist.add(handle.run_id)
|
|
@@ -474,12 +653,31 @@ class CodexRuntimeAdapter(RuntimeAdapter):
|
|
|
474
653
|
await self._client.close()
|
|
475
654
|
yield self._make_run_failed(handle, "codex turn timed out")
|
|
476
655
|
except Exception as exc: # noqa: BLE001 通用兜底:任何异常都发 RunFailed
|
|
656
|
+
from ksadk.a2a.codex_runtime import CodexRecoveryCancelled
|
|
657
|
+
|
|
477
658
|
self._do_not_persist.add(handle.run_id)
|
|
478
|
-
|
|
659
|
+
if isinstance(exc, CodexRecoveryCancelled):
|
|
660
|
+
yield self._make_run_canceled(handle, reason="recovery_canceled")
|
|
661
|
+
else:
|
|
662
|
+
yield self._make_run_failed(handle, str(exc))
|
|
479
663
|
finally:
|
|
480
664
|
thread.streaming = False
|
|
481
665
|
thread.done = True
|
|
482
666
|
self._threads.pop(handle.run_id, None)
|
|
667
|
+
self._canonical_roots.pop(handle.run_id, None)
|
|
668
|
+
|
|
669
|
+
async def _restore_canonical_root(self, handle: RunHandle, recovery: Any) -> None:
|
|
670
|
+
from ksadk.events.run_authority import current_run_event_authority
|
|
671
|
+
|
|
672
|
+
authority = current_run_event_authority()
|
|
673
|
+
if authority is None:
|
|
674
|
+
raise RuntimeError("A2A_KERNEL_AUTHORITY_REQUIRED")
|
|
675
|
+
# No tail limit: the root may precede hundreds of native observations.
|
|
676
|
+
# The capability enforces the validated public session/run identity.
|
|
677
|
+
for event in await authority.list(handle.session_id, run_id=recovery.run_id):
|
|
678
|
+
if isinstance(event, RunStarted) and event.parent_scope_id is None:
|
|
679
|
+
self._canonical_roots[handle.run_id] = event
|
|
680
|
+
return
|
|
483
681
|
|
|
484
682
|
async def _map_codex_stream(
|
|
485
683
|
self,
|
|
@@ -607,6 +805,11 @@ class CodexRuntimeAdapter(RuntimeAdapter):
|
|
|
607
805
|
chunk_method = (
|
|
608
806
|
str((chunk or {}).get("method") or "") if isinstance(chunk, dict) else ""
|
|
609
807
|
)
|
|
808
|
+
if chunk_method in {"ksadk/a2a/toolCall", "ksadk/a2a/toolCancel"}:
|
|
809
|
+
if not self._a2a_experts:
|
|
810
|
+
raise ValueError("A2A_CODEX_EXPERTS_NOT_CONFIGURED")
|
|
811
|
+
yield chunk
|
|
812
|
+
continue
|
|
610
813
|
if chunk_method in {
|
|
611
814
|
"item/autoApprovalReview/started",
|
|
612
815
|
"item/autoApprovalReview/completed",
|
|
@@ -627,6 +830,14 @@ class CodexRuntimeAdapter(RuntimeAdapter):
|
|
|
627
830
|
timestamp=time.time(),
|
|
628
831
|
):
|
|
629
832
|
event = self._with_caller_scope(event, request)
|
|
833
|
+
if thread.__dict__.get("_recovery") is not None:
|
|
834
|
+
root = self._canonical_roots.get(handle.run_id)
|
|
835
|
+
if (root is not None and isinstance(event, RunStarted)
|
|
836
|
+
and event.run_id == root.run_id and event.parent_scope_id is None):
|
|
837
|
+
# The public run already started before recovery;
|
|
838
|
+
# a new native turn must not start it a second time.
|
|
839
|
+
continue
|
|
840
|
+
event = self._with_recovered_root(event, handle)
|
|
630
841
|
# 跟踪 pending 审批(cancel 级联丢弃契约依赖该集合)。
|
|
631
842
|
if isinstance(event, InteractionRequested):
|
|
632
843
|
if event.interaction_id:
|
|
@@ -665,23 +876,31 @@ class CodexRuntimeAdapter(RuntimeAdapter):
|
|
|
665
876
|
# ---- canonical run.* helpers (for runtime-owned lifecycle) ----
|
|
666
877
|
|
|
667
878
|
def _event_run_id(self, handle: RunHandle) -> str:
|
|
668
|
-
"""
|
|
879
|
+
"""事件使用调用方 invocation_id 或 Kernel run_id,最后回退到 thread id。
|
|
669
880
|
|
|
670
881
|
``handle.run_id`` 是 codex 原生 thread id(resume/cancel 按 thread 寻址);
|
|
671
882
|
但 canonical RuntimeEvent 的 run_id 必须与调用方
|
|
672
|
-
``StartRequest.metadata['invocation_id']``
|
|
673
|
-
|
|
883
|
+
``StartRequest.metadata['invocation_id']`` 或 Kernel 的 ``run_id`` 一致,
|
|
884
|
+
否则同一原生 thread 上的后续调用可能复用事件身份并被去重。
|
|
674
885
|
"""
|
|
886
|
+
root = self._canonical_roots.get(handle.run_id)
|
|
887
|
+
if root is not None:
|
|
888
|
+
return root.run_id
|
|
675
889
|
request = self._requests.get(handle.run_id)
|
|
676
890
|
if request is not None:
|
|
677
891
|
invocation_id = str(
|
|
678
|
-
(getattr(request, "metadata", None) or {}).get("invocation_id")
|
|
892
|
+
(getattr(request, "metadata", None) or {}).get("invocation_id")
|
|
893
|
+
or (getattr(request, "metadata", None) or {}).get("run_id")
|
|
894
|
+
or ""
|
|
679
895
|
).strip()
|
|
680
896
|
if invocation_id:
|
|
681
897
|
return invocation_id
|
|
682
898
|
return handle.run_id
|
|
683
899
|
|
|
684
900
|
def _make_source(self, handle: RunHandle) -> SourceRef:
|
|
901
|
+
root = self._canonical_roots.get(handle.run_id)
|
|
902
|
+
if root is not None:
|
|
903
|
+
return root.source
|
|
685
904
|
request = self._requests.get(handle.run_id)
|
|
686
905
|
return SourceRef(
|
|
687
906
|
framework="codex",
|
|
@@ -695,13 +914,26 @@ class CodexRuntimeAdapter(RuntimeAdapter):
|
|
|
695
914
|
),
|
|
696
915
|
"session_id": handle.session_id,
|
|
697
916
|
"invocation_id": (
|
|
698
|
-
|
|
917
|
+
self._event_run_id(handle)
|
|
699
918
|
if request is not None
|
|
700
919
|
else handle.run_id
|
|
701
920
|
),
|
|
702
921
|
},
|
|
703
922
|
)
|
|
704
923
|
|
|
924
|
+
def _with_recovered_root(self, event: RuntimeEvent, handle: RunHandle) -> RuntimeEvent:
|
|
925
|
+
root = self._canonical_roots.get(handle.run_id)
|
|
926
|
+
if (root is None or event.run_id != root.run_id
|
|
927
|
+
or event.parent_scope_id is not None
|
|
928
|
+
or not event.event_type.startswith("run.")):
|
|
929
|
+
return event
|
|
930
|
+
# Normalize before managed checkpointing, preserving native source and
|
|
931
|
+
# item/child identities of the continuation's new native turn.
|
|
932
|
+
updates = {"scope_id": root.scope_id}
|
|
933
|
+
if isinstance(event, RunFailed):
|
|
934
|
+
updates["error"] = event.error.model_copy(update={"scope_id": root.scope_id})
|
|
935
|
+
return event.model_copy(update=updates)
|
|
936
|
+
|
|
705
937
|
def _with_caller_scope(self, event: RuntimeEvent, request: Any) -> RuntimeEvent:
|
|
706
938
|
"""把调用方 scope(request 的 agent/user/session/invocation)并入事件 source。"""
|
|
707
939
|
|
|
@@ -747,10 +979,14 @@ class CodexRuntimeAdapter(RuntimeAdapter):
|
|
|
747
979
|
"source": self._make_source(handle),
|
|
748
980
|
}
|
|
749
981
|
|
|
982
|
+
def _lifecycle_scope_id(self, handle: RunHandle) -> str:
|
|
983
|
+
root = self._canonical_roots.get(handle.run_id)
|
|
984
|
+
return root.scope_id if root is not None else stable_scope_id("codex", self._event_run_id(handle))
|
|
985
|
+
|
|
750
986
|
def _make_run_canceled(self, handle: RunHandle, *, reason: str | None = None) -> RunCanceled:
|
|
751
987
|
framework = "codex"
|
|
752
988
|
run_id = self._event_run_id(handle)
|
|
753
|
-
scope_id =
|
|
989
|
+
scope_id = self._lifecycle_scope_id(handle)
|
|
754
990
|
item_id = stable_item_id(framework, run_id, "$run")
|
|
755
991
|
return RunCanceled(
|
|
756
992
|
**self._canonical_kwargs(
|
|
@@ -769,7 +1005,7 @@ class CodexRuntimeAdapter(RuntimeAdapter):
|
|
|
769
1005
|
) -> RunInterrupted:
|
|
770
1006
|
framework = "codex"
|
|
771
1007
|
run_id = self._event_run_id(handle)
|
|
772
|
-
scope_id =
|
|
1008
|
+
scope_id = self._lifecycle_scope_id(handle)
|
|
773
1009
|
item_id = stable_item_id(framework, run_id, "$run")
|
|
774
1010
|
return RunInterrupted(
|
|
775
1011
|
**self._canonical_kwargs(
|
|
@@ -786,7 +1022,7 @@ class CodexRuntimeAdapter(RuntimeAdapter):
|
|
|
786
1022
|
def _make_run_failed(self, handle: RunHandle, error_message: str) -> RunFailed:
|
|
787
1023
|
framework = "codex"
|
|
788
1024
|
run_id = self._event_run_id(handle)
|
|
789
|
-
scope_id =
|
|
1025
|
+
scope_id = self._lifecycle_scope_id(handle)
|
|
790
1026
|
item_id = stable_item_id(framework, run_id, "$run")
|
|
791
1027
|
return RunFailed(
|
|
792
1028
|
**self._canonical_kwargs(
|
ksadk/common/auth.py
CHANGED
|
@@ -120,7 +120,7 @@ class AWSV4Auth:
|
|
|
120
120
|
method: str,
|
|
121
121
|
url: str,
|
|
122
122
|
headers: Dict[str, str],
|
|
123
|
-
body: str = "",
|
|
123
|
+
body: str | bytes = "",
|
|
124
124
|
) -> Dict[str, str]:
|
|
125
125
|
"""手动签名并返回带签名的 headers
|
|
126
126
|
|
|
@@ -145,7 +145,7 @@ class AWSV4Auth:
|
|
|
145
145
|
method=method,
|
|
146
146
|
url=url,
|
|
147
147
|
headers=headers,
|
|
148
|
-
data=body.encode("utf-8") if body else None,
|
|
148
|
+
data=(body.encode("utf-8") if isinstance(body, str) else body) if body else None,
|
|
149
149
|
)
|
|
150
150
|
prepared = req.prepare()
|
|
151
151
|
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
"""Shared source attribution for KsADK-managed cloud resource requests."""
|
|
2
|
+
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
import os
|
|
6
|
+
from collections.abc import Mapping
|
|
7
|
+
|
|
8
|
+
DEFAULT_TRAFFIC_SOURCE = "agentkit"
|
|
9
|
+
TRAFFIC_SOURCE_HEADER = "X-Traffic-Source"
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
def resolve_traffic_source(value: str | None = None) -> str:
|
|
13
|
+
"""Resolve an explicit snapshot or the process setting, with a stable default."""
|
|
14
|
+
if value is None:
|
|
15
|
+
value = os.getenv("KSADK_TRAFFIC_SOURCE", "")
|
|
16
|
+
# Reject controls before trimming so even trailing CR/LF cannot enter headers.
|
|
17
|
+
if not isinstance(value, str) or any(ord(char) < 32 or ord(char) > 126 for char in value):
|
|
18
|
+
raise ValueError("Traffic source must contain printable ASCII characters only")
|
|
19
|
+
return value.strip() or DEFAULT_TRAFFIC_SOURCE
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
def build_cloud_headers(
|
|
23
|
+
headers: Mapping[str, str] | None = None, *, traffic_source: str | None = None
|
|
24
|
+
) -> dict[str, str]:
|
|
25
|
+
"""Copy headers and set one canonical source header before request signing.
|
|
26
|
+
|
|
27
|
+
Source attribution is owned by KSADK_TRAFFIC_SOURCE (or an explicit worker
|
|
28
|
+
snapshot), including when a caller supplies differently cased extra headers.
|
|
29
|
+
"""
|
|
30
|
+
result = {
|
|
31
|
+
name: value
|
|
32
|
+
for name, value in (headers or {}).items()
|
|
33
|
+
if name.lower() != TRAFFIC_SOURCE_HEADER.lower()
|
|
34
|
+
}
|
|
35
|
+
result[TRAFFIC_SOURCE_HEADER] = resolve_traffic_source(traffic_source)
|
|
36
|
+
return result
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
"""可进入运行事件和日志的异常摘要。"""
|
|
2
|
+
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
import re
|
|
6
|
+
|
|
7
|
+
_URL = re.compile(r"\b[A-Za-z][A-Za-z0-9+.-]*://[^\s<>\"']+")
|
|
8
|
+
_AUTH = re.compile(r"\b(?:bearer|basic)\s+[^\s,;\"']+", re.IGNORECASE)
|
|
9
|
+
_PRIVATE_HEADER = re.compile(
|
|
10
|
+
r"\b(?:[A-Za-z0-9]+[_-])*(?:set-cookie|cookie|authorization)[\"']?"
|
|
11
|
+
r"\s*[:=]\s*[^\r\n]+",
|
|
12
|
+
re.IGNORECASE,
|
|
13
|
+
)
|
|
14
|
+
_CREDENTIAL = re.compile(
|
|
15
|
+
r"\b(?:[A-Za-z0-9]+[_-])*(?:api[_-]?key|access[_-]?key(?:[_-]?id)?|"
|
|
16
|
+
r"secret[_-]?access[_-]?key|"
|
|
17
|
+
r"authorization|password|passwd|(?:access[_-]?|refresh[_-]?|session[_-]?)token|"
|
|
18
|
+
r"secret|client[_-]?secret|_authToken)[\"']?\s*[:=]\s*"
|
|
19
|
+
r"(?:\"(?:\\.|[^\"\\])*\"|'(?:\\.|[^'\\])*'|[^\s,;}\]]+)",
|
|
20
|
+
re.IGNORECASE,
|
|
21
|
+
)
|
|
22
|
+
_API_KEY = re.compile(r"\bsk-[A-Za-z0-9_-]{8,}\b", re.IGNORECASE)
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
def safe_exception_detail(error: Exception, *, limit: int = 2048) -> str:
|
|
26
|
+
"""保留异常类型与诊断文本,去掉 URL、凭证和 cookie 后再截断。
|
|
27
|
+
|
|
28
|
+
URL 整体移除,避免遗漏签名下载地址中厂商各异的鉴权参数。
|
|
29
|
+
不使用 exc_info,防止日志在安全摘要后再次打印原始异常。
|
|
30
|
+
"""
|
|
31
|
+
detail = f"{type(error).__name__}: {error}"
|
|
32
|
+
for pattern in (_URL, _AUTH, _PRIVATE_HEADER, _CREDENTIAL, _API_KEY):
|
|
33
|
+
detail = pattern.sub("[REDACTED]", detail)
|
|
34
|
+
return detail[:limit]
|