agentengine-sdk-python 0.8.4__py3-none-any.whl → 0.8.5__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {agentengine_sdk_python-0.8.4.dist-info → agentengine_sdk_python-0.8.5.dist-info}/METADATA +6 -3
- {agentengine_sdk_python-0.8.4.dist-info → agentengine_sdk_python-0.8.5.dist-info}/RECORD +591 -365
- ksadk/_build_provenance.json +1 -1
- ksadk/_process.py +83 -0
- ksadk/_str_enum.py +17 -0
- ksadk/a2ui/core.py +3 -3
- ksadk/api/client.py +6 -0
- ksadk/builders/code_builder.py +38 -12
- ksadk/builders/framework_requirements.py +20 -2
- ksadk/cli/__init__.py +36 -0
- ksadk/cli/cmd_config.py +4 -4
- ksadk/cli/cmd_create.py +12 -12
- ksadk/cli/cmd_hermes.py +24 -2
- ksadk/cli/cmd_invoke.py +28 -5
- ksadk/cli/cmd_openclaw.py +26 -1
- ksadk/cli/cmd_plugin.py +70 -12
- ksadk/cli/cmd_studio.py +64 -16
- ksadk/cli/openclaw_env.py +1 -1
- ksadk/cli/resource_common.py +26 -0
- ksadk/codex/client.py +3 -2
- ksadk/configs/__init__.py +1 -1
- ksadk/configs/env_registry.py +125 -31
- ksadk/configs/env_registry_studio.py +86 -0
- ksadk/configs/global_config.py +1 -1
- ksadk/configs/settings.py +3 -3
- ksadk/connector/__init__.py +17 -0
- ksadk/connector/channel.py +477 -0
- ksadk/context_engine/capabilities.py +52 -4
- ksadk/conversations/attachment_storage.py +10 -3
- ksadk/conversations/attachments.py +16 -5
- ksadk/conversations/message_projection.py +23 -32
- ksadk/conversations/normalize.py +28 -10
- ksadk/conversations/runtime_baseline.py +37 -0
- ksadk/conversations/runtime_invocation.py +17 -4
- ksadk/conversations/runtime_observability.py +39 -10
- ksadk/conversations/runtime_payloads.py +8 -0
- ksadk/conversations/runtime_persistence.py +105 -9
- ksadk/conversations/runtime_preparation.py +13 -7
- ksadk/conversations/runtime_stream_events.py +29 -35
- ksadk/conversations/runtime_streaming.py +8 -0
- ksadk/events/adapters/_codex_items.py +16 -8
- ksadk/events/adapters/_langgraph_support.py +34 -0
- ksadk/events/session_event.py +2 -2
- ksadk/harness/__init__.py +14 -0
- ksadk/harness/app.py +11 -0
- ksadk/harness/artifact_store.py +213 -0
- ksadk/harness/capabilities.py +115 -0
- ksadk/harness/capability_runtime.py +237 -0
- ksadk/harness/closure_contract.py +92 -0
- ksadk/harness/compaction_record.py +122 -0
- ksadk/harness/compiler.py +284 -0
- ksadk/harness/conformance/__init__.py +33 -0
- ksadk/harness/conformance/contract.py +506 -0
- ksadk/harness/conformance/fixtures.py +102 -0
- ksadk/harness/context_engine.py +403 -0
- ksadk/harness/context_maintenance.py +259 -0
- ksadk/harness/context_manifest.py +188 -0
- ksadk/harness/context_tuning.py +168 -0
- ksadk/harness/draft_runtime.py +322 -0
- ksadk/harness/engine/__init__.py +40 -0
- ksadk/harness/engine/base.py +122 -0
- ksadk/harness/engine/budgets.py +108 -0
- ksadk/harness/engine/capability_declarations.py +59 -0
- ksadk/harness/engine/completion_guard.py +42 -0
- ksadk/harness/engine/context_pipeline.py +579 -0
- ksadk/harness/engine/graph_builder.py +859 -0
- ksadk/harness/engine/langgraph.py +931 -0
- ksadk/harness/engine/mcp_disclosure.py +750 -0
- ksadk/harness/engine/policy_runtime.py +70 -0
- ksadk/harness/engine/postgres_checkpointer.py +63 -0
- ksadk/harness/engine/run_control_bridge.py +80 -0
- ksadk/harness/engine/run_types.py +88 -0
- ksadk/harness/engine/skill_disclosure.py +189 -0
- ksadk/harness/engine/spans.py +41 -0
- ksadk/harness/engine/subagents.py +343 -0
- ksadk/harness/engine/thread_ids.py +112 -0
- ksadk/harness/engine/tool_dispatch.py +144 -0
- ksadk/harness/event_tree.py +212 -0
- ksadk/harness/events.py +461 -0
- ksadk/harness/execution_policy.py +94 -0
- ksadk/harness/insights.py +210 -0
- ksadk/harness/lifecycle.py +578 -0
- ksadk/harness/lifecycle_conformance.py +233 -0
- ksadk/harness/lifecycle_local_plane.py +104 -0
- ksadk/harness/loop/__init__.py +44 -0
- ksadk/harness/loop/reason.py +454 -0
- ksadk/harness/loop/tools.py +762 -0
- ksadk/harness/managed_runtime.py +884 -0
- ksadk/harness/mcp_matrix.py +474 -0
- ksadk/harness/mcp_runtime.py +471 -0
- ksadk/harness/memory_consolidation.py +157 -0
- ksadk/harness/memory_loop.py +156 -0
- ksadk/harness/memory_runtime.py +541 -0
- ksadk/harness/metrics.py +90 -0
- ksadk/harness/model_capability.py +253 -0
- ksadk/harness/model_provider.py +220 -0
- ksadk/harness/observability/__init__.py +29 -0
- ksadk/harness/observability/inspection.py +528 -0
- ksadk/harness/observability/metrics.py +167 -0
- ksadk/harness/observability/otel_exporter.py +218 -0
- ksadk/harness/prompt_cache.py +70 -0
- ksadk/harness/public_activity.py +154 -0
- ksadk/harness/readiness.py +249 -0
- ksadk/harness/reasoner.py +466 -13
- ksadk/harness/release_readiness.py +140 -0
- ksadk/harness/resource_ref.py +69 -0
- ksadk/harness/run_control.py +668 -0
- ksadk/harness/runtime.py +146 -111
- ksadk/harness/runtime_capabilities.py +158 -0
- ksadk/harness/runtime_server.py +514 -0
- ksadk/harness/sandbox_adapters.py +739 -0
- ksadk/harness/sandbox_backend.py +530 -0
- ksadk/harness/sandbox_conformance.py +288 -0
- ksadk/harness/sandbox_lease.py +77 -0
- ksadk/harness/sandbox_lease_conformance.py +259 -0
- ksadk/harness/sandbox_matrix.py +170 -0
- ksadk/harness/sandbox_reconciliation.py +140 -0
- ksadk/harness/sandbox_recovery.py +586 -0
- ksadk/harness/sandbox_recovery_conformance.py +246 -0
- ksadk/harness/session_store.py +243 -0
- ksadk/harness/skill_composition.py +212 -0
- ksadk/harness/skill_feedback.py +123 -0
- ksadk/harness/skill_matrix.py +233 -0
- ksadk/harness/skill_runtime.py +259 -0
- ksadk/harness/spec.py +332 -0
- ksadk/harness/state.py +153 -0
- ksadk/harness/strategies.py +149 -0
- ksadk/harness/subagent.py +253 -0
- ksadk/harness/tool_policy.py +131 -0
- ksadk/harness/tool_receipts.py +96 -0
- ksadk/harness/tool_reliability.py +81 -0
- ksadk/harness/user_errors.py +69 -0
- ksadk/harness/working_context.py +81 -0
- ksadk/harness/working_context_patch.py +99 -0
- ksadk/identity/resolver.py +18 -0
- ksadk/interaction/__init__.py +1 -1
- ksadk/interaction/ledger.py +1 -1
- ksadk/interaction/provider.py +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 +1 -1
- ksadk/kernel/__init__.py +10 -0
- ksadk/kernel/approval_presentation.py +91 -0
- ksadk/kernel/authorization.py +1 -1
- ksadk/kernel/bootstrap.py +86 -102
- ksadk/kernel/contract_fingerprints.py +1 -1
- ksadk/kernel/contracts.py +5 -0
- ksadk/kernel/control.py +32 -1
- ksadk/kernel/execution_grants.py +221 -0
- ksadk/kernel/execution_grants_memory.py +133 -0
- ksadk/kernel/execution_grants_postgres.py +217 -0
- ksadk/kernel/execution_grants_sqlite.py +209 -0
- ksadk/kernel/ingress.py +27 -27
- ksadk/kernel/mapping.py +1 -1
- ksadk/kernel/memory_store.py +24 -11
- ksadk/kernel/postgres_store.py +63 -33
- ksadk/kernel/recovery.py +78 -14
- ksadk/kernel/sql/001_agent_kernel.sql +23 -0
- ksadk/kernel/sqlite_store.py +304 -25
- ksadk/kernel/state.py +2 -3
- ksadk/kernel/store.py +69 -2
- ksadk/kernel/worker.py +79 -41
- ksadk/kernel/worker_history.py +72 -0
- ksadk/kernel/worker_identity.py +47 -0
- ksadk/memory/coordinator.py +22 -6
- ksadk/memory/extraction.py +40 -1
- ksadk/memory/models.py +77 -1
- ksadk/memory/provider_resolver.py +5 -0
- ksadk/memory/providers/local_postgres.py +200 -0
- ksadk/memory/providers/local_sqlite.py +42 -3
- ksadk/memory/retrieval.py +189 -0
- ksadk/memory/store_adapter.py +150 -0
- ksadk/model_policy.py +2 -2
- ksadk/model_proxy/detect.py +254 -0
- ksadk/model_proxy/server.py +4 -2
- ksadk/model_proxy/transform.py +40 -2
- ksadk/plugins/__init__.py +1 -1
- ksadk/plugins/bridges/dsh.py +11 -0
- ksadk/plugins/builtins.py +40 -2
- ksadk/plugins/companion_artifacts.py +83 -0
- ksadk/plugins/companions.py +368 -0
- ksadk/plugins/contracts.py +1 -1
- ksadk/plugins/dsh_channels.py +156 -0
- ksadk/plugins/dsh_home.py +140 -0
- ksadk/plugins/dsh_teams.py +105 -0
- ksadk/plugins/dsh_toolchain.py +101 -19
- ksadk/plugins/execution_host.py +99 -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/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 +10 -2
- ksadk/plugins/providers/dsh_capabilities.py +61 -0
- ksadk/plugins/providers/harness.py +181 -33
- ksadk/plugins/providers/harness_delegation.py +593 -0
- ksadk/plugins/providers/harness_managed.py +456 -0
- ksadk/plugins/providers/harness_tools.py +326 -0
- ksadk/plugins/providers/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 +680 -0
- ksadk/plugins/teams/artifacts.py +60 -0
- ksadk/plugins/teams/context.py +96 -0
- ksadk/plugins/teams/contracts.py +136 -0
- ksadk/plugins/teams/domain.py +1427 -0
- ksadk/plugins/teams/domain_values.py +24 -0
- ksadk/plugins/teams/errors.py +13 -0
- ksadk/plugins/teams/migration.py +311 -0
- ksadk/plugins/teams/migration_cli.py +322 -0
- ksadk/plugins/teams/postgres_store.py +138 -0
- ksadk/plugins/teams/runtime.py +777 -0
- ksadk/plugins/teams/source_projection.py +84 -0
- ksadk/plugins/teams/store.py +311 -0
- ksadk/plugins/teams/task_decisions.py +423 -0
- ksadk/plugins/teams/transport.py +91 -0
- ksadk/plugins/teams/workspaces.py +255 -0
- ksadk/runners/_langgraph_runner_streams.py +121 -45
- ksadk/runners/_langgraph_state_reader.py +106 -0
- ksadk/runners/_session_identity.py +285 -0
- ksadk/runners/adk_runner.py +25 -60
- ksadk/runners/langgraph_runner.py +128 -111
- ksadk/runners/patch_langchain.py +47 -0
- ksadk/runners/usage_accumulator.py +11 -3
- ksadk/runtime/_runner_adapter/stream_mapping.py +52 -2
- ksadk/runtime/conversation_execution.py +25 -1
- ksadk/runtime/executor.py +9 -1
- ksadk/runtime/factory.py +36 -1
- ksadk/runtime/preprocessing.py +11 -3
- ksadk/runtime/runner_adapter.py +38 -9
- ksadk/runtime/skill_eval_result.py +36 -0
- ksadk/runtime/timing.py +46 -0
- ksadk/runtime/usage.py +49 -18
- ksadk/runtime_context.py +103 -1
- ksadk/sandbox/backends/e2b.py +245 -23
- ksadk/sandbox/backends/local_process.py +63 -39
- ksadk/sandbox/base.py +62 -1
- ksadk/sandbox/diagnostics.py +82 -0
- ksadk/sandbox/local_controls.py +746 -0
- ksadk/sandbox/local_launcher.py +90 -0
- ksadk/scheduler/dispatcher.py +1 -1
- ksadk/server/invocation_identity.py +118 -0
- ksadk/server/routes/common.py +32 -3
- ksadk/server/routes/control.py +64 -9
- ksadk/server/routes/dependencies.py +2 -1
- ksadk/server/routes/kernel_ingress.py +9 -1
- ksadk/server/routes/misc.py +233 -25
- ksadk/server/routes/models.py +3 -3
- ksadk/server/routes/openai_compat.py +76 -13
- ksadk/server/routes/run.py +106 -35
- ksadk/server/routes/sessions.py +244 -68
- ksadk/server/routes/workspace.py +130 -21
- ksadk/server/static/assets/{ArtifactsPanel-CGbWlMNh.js → ArtifactsPanel-C1YoaKhx.js} +1 -1
- ksadk/server/static/assets/{CodeBlock-b4C7upmO.js → CodeBlock-DHuAWfr5.js} +10 -7
- ksadk/server/static/assets/MathMessageMarkdown-cvdrBwYr.js +8 -0
- ksadk/server/static/assets/{MermaidBlock-BEBN4Ksz.js → MermaidBlock-DeBkbJvI.js} +9 -9
- ksadk/server/static/assets/{NativeTerminalPanel-zvL-WpAn.js → NativeTerminalPanel-oJj44_sV.js} +1 -1
- ksadk/server/static/assets/{abnfDiagram-VCTEODGH-BYafW7Za.js → abnfDiagram-VCTEODGH-Dhfv25o2.js} +1 -1
- ksadk/server/static/assets/{arc-bTohInsS.js → arc-C35w-pn1.js} +1 -1
- ksadk/server/static/assets/architecture-7GRP2DOG-BCsa26zi.js +1 -0
- ksadk/server/static/assets/{architectureDiagram-5GKGNRK7-Ch5Lbzsi.js → architectureDiagram-5GKGNRK7-FoMY_u6D.js} +1 -1
- ksadk/server/static/assets/{blockDiagram-NRAW4CY4-kqF4MDOG.js → blockDiagram-NRAW4CY4-zD4Rt7oE.js} +1 -1
- ksadk/server/static/assets/{c4Diagram-UCG6FXSJ-8uSRIODv.js → c4Diagram-UCG6FXSJ-BCtGGkhN.js} +1 -1
- ksadk/server/static/assets/channel-_KDifNys.js +1 -0
- ksadk/server/static/assets/chunk-2Q5K7J3B-HdVkJ9F0.js +1 -0
- ksadk/server/static/assets/{chunk-5VM5RSS4-DkhehZDr.js → chunk-5VM5RSS4-C2Ms13_k.js} +1 -1
- ksadk/server/static/assets/{chunk-F27PBJKO-BdXhtPe9.js → chunk-F27PBJKO-BoTj-qgx.js} +1 -1
- ksadk/server/static/assets/{chunk-G27WJ6UU-DPTpvpwi.js → chunk-G27WJ6UU-DOMyyjHH.js} +1 -1
- ksadk/server/static/assets/{chunk-JWPE2WC7-Pqoh38el.js → chunk-JWPE2WC7-DbJJqDli.js} +1 -1
- ksadk/server/static/assets/{chunk-LCL6LL3I-DeU00qC-.js → chunk-LCL6LL3I-CLuRCt_W.js} +1 -1
- ksadk/server/static/assets/{chunk-POPQ4Y6H-CzxScFkr.js → chunk-POPQ4Y6H-D0Dz847e.js} +1 -1
- ksadk/server/static/assets/{chunk-RHFEMEQ7-DpqMx-ux.js → chunk-RHFEMEQ7-BWSRzEcd.js} +1 -1
- ksadk/server/static/assets/{chunk-SVP7TREG-C6t0SypQ.js → chunk-SVP7TREG-CPoHqkCY.js} +1 -1
- ksadk/server/static/assets/{chunk-XXDRQBXY-DVaeafZk.js → chunk-XXDRQBXY-Bx1jS-X-.js} +1 -1
- ksadk/server/static/assets/classDiagram-DTDB5LWJ-BVCW3ZqZ.js +1 -0
- ksadk/server/static/assets/classDiagram-v2-JRS7N3AN-BVCW3ZqZ.js +1 -0
- ksadk/server/static/assets/{cose-bilkent-JH36ORCC-Bf9D3tzJ.js → cose-bilkent-JH36ORCC-LzyWm4m0.js} +1 -1
- ksadk/server/static/assets/cynefin-OW5HDTMX-CNXjFctL.js +1 -0
- ksadk/server/static/assets/{cynefinDiagram-5FMLGOSQ-B9cY3iTz.js → cynefinDiagram-5FMLGOSQ-BlW_bHED.js} +1 -1
- ksadk/server/static/assets/{dagre-3AP2YEHR-CSwlx3CB.js → dagre-3AP2YEHR-Bu_S86_i.js} +1 -1
- ksadk/server/static/assets/{dagre-UBpgon5q.js → dagre-B7nCawed.js} +1 -1
- ksadk/server/static/assets/{diagram-S7CK7UJ4-C9akhN9a.js → diagram-S7CK7UJ4-W_Zow2Km.js} +1 -1
- ksadk/server/static/assets/{diagram-UQ7AKVKN-CgedhTPI.js → diagram-UQ7AKVKN-CLIKAHON.js} +1 -1
- ksadk/server/static/assets/{diagram-VSXAHHWV-Cjucz5BY.js → diagram-VSXAHHWV-Dv6_QAlN.js} +1 -1
- ksadk/server/static/assets/{diagram-VX7I27RA-Dd4Vleyn.js → diagram-VX7I27RA-BWAWRDtZ.js} +1 -1
- ksadk/server/static/assets/{diagram-Z3DM3KII-CZ2jGtYW.js → diagram-Z3DM3KII-XA_rWMss.js} +1 -1
- ksadk/server/static/assets/dist-0X_j2Rcc.js +1 -0
- ksadk/server/static/assets/{dist-DiixqL0J.js → dist-1nXCdsej.js} +1 -1
- ksadk/server/static/assets/{dist-BIr4DSRq.js → dist-2vL2sAdF.js} +1 -1
- ksadk/server/static/assets/{dist-D_ctSS2i.js → dist-B3bA05-e.js} +1 -1
- ksadk/server/static/assets/{dist-ClYUxfeK.js → dist-BLpRy_Yx.js} +1 -1
- ksadk/server/static/assets/{dist-QfkEHOlb.js → dist-BO_UwatH.js} +1 -1
- ksadk/server/static/assets/{dist-B3FR1SKK.js → dist-BdNFAney.js} +1 -1
- ksadk/server/static/assets/{dist-BnaTiyzN.js → dist-C0J5_3qM.js} +1 -1
- ksadk/server/static/assets/{dist-Bj730Ib4.js → dist-CGt_UGeO.js} +1 -1
- ksadk/server/static/assets/{dist-CFzsn6BG.js → dist-CIRMvUM4.js} +1 -1
- ksadk/server/static/assets/{dist-BgV_owcB.js → dist-CIpWk_5f.js} +1 -1
- ksadk/server/static/assets/{dist-C5_ZAZsG.js → dist-CPyieXEf.js} +1 -1
- ksadk/server/static/assets/{dist-btbmmX5O.js → dist-D-92S-Fd.js} +1 -1
- ksadk/server/static/assets/{dist-fBO2v5Kt.js → dist-DNKuMzWc.js} +1 -1
- ksadk/server/static/assets/{dist-ufY3F5p6.js → dist-DWfdmz9s.js} +2 -2
- ksadk/server/static/assets/{dist-DVCOWtha.js → dist-DppE_r-D.js} +1 -1
- ksadk/server/static/assets/{dist-C1NMAY5a.js → dist-DyG6Ya-z.js} +1 -1
- ksadk/server/static/assets/{dist-CB9iJrvg.js → dist-M-SrdhhZ.js} +1 -1
- ksadk/server/static/assets/{dist-DvFK7p5S.js → dist-mqD5TZup.js} +1 -1
- ksadk/server/static/assets/{dist-Cf125P_m.js → dist-n3n6t_FO.js} +1 -1
- ksadk/server/static/assets/{dist-DFD6Qa6T.js → dist-qe8xjesy.js} +1 -1
- ksadk/server/static/assets/{dist-DoVSwoDb.js → dist-t6MzE0jU.js} +1 -1
- ksadk/server/static/assets/{ebnfDiagram-PWID7BFC-Ci8NqqZu.js → ebnfDiagram-PWID7BFC-BfCzF1Xi.js} +1 -1
- ksadk/server/static/assets/{erDiagram-SSCWMZ5O-CCIOhLZG.js → erDiagram-SSCWMZ5O-Dpz9_0zn.js} +1 -1
- ksadk/server/static/assets/eventmodeling-NTZA5JFV-B5-8RH9c.js +1 -0
- ksadk/server/static/assets/flowDiagram-A5DVABFB-BppFxEKw.js +1 -0
- ksadk/server/static/assets/{ganttDiagram-EL5Y4UJY-Cp_r9Hb6.js → ganttDiagram-EL5Y4UJY-DDaG1f4_.js} +1 -1
- ksadk/server/static/assets/gitGraph-4MIJSDKK-B-AhYj4C.js +1 -0
- ksadk/server/static/assets/{gitGraphDiagram-WWUBYQGX-Dlhc8Wr8.js → gitGraphDiagram-WWUBYQGX-DcxzRwYC.js} +1 -1
- ksadk/server/static/assets/index-BMd2mucF.css +2 -0
- ksadk/server/static/assets/index-D5qyyhTH.js +244 -0
- ksadk/server/static/assets/info-A6RAGUB7-0uiKrC35.js +1 -0
- ksadk/server/static/assets/{infoDiagram-RXCK75RN-CO0rRTRA.js → infoDiagram-RXCK75RN-CYMdn6lQ.js} +1 -1
- ksadk/server/static/assets/{ishikawaDiagram-5VMMS53U-CHiaedSS.js → ishikawaDiagram-5VMMS53U-CLHFAD6c.js} +1 -1
- ksadk/server/static/assets/{journeyDiagram-EYS64GPL-CHcCIB09.js → journeyDiagram-EYS64GPL-BHSKQGAl.js} +1 -1
- ksadk/server/static/assets/{kanban-definition-3QL26DDD-CJ_ebBZf.js → kanban-definition-3QL26DDD-D5W3tjTT.js} +1 -1
- ksadk/server/static/assets/{katex-B4weu383.js → katex-mtjOi4KM.js} +1 -1
- ksadk/server/static/assets/{linear-V-MgYHW1.js → linear-BETqsxE_.js} +1 -1
- ksadk/server/static/assets/{mermaid-parser.core-CBijEX_c.js → mermaid-parser.core-DPWrvs90.js} +2 -2
- ksadk/server/static/assets/{mindmap-definition-FBJOCRG2-Bc-pQvpp.js → mindmap-definition-FBJOCRG2-CJG2mfBP.js} +1 -1
- ksadk/server/static/assets/packet-AYTQ26CC-BVTmZ_cw.js +1 -0
- ksadk/server/static/assets/{pegDiagram-XKGWAZYB-D7genGLl.js → pegDiagram-XKGWAZYB-GjAPNaqn.js} +1 -1
- ksadk/server/static/assets/pie-WAS4IAKB-DyfxBU7V.js +1 -0
- ksadk/server/static/assets/{pieDiagram-E7YTZNPT-Bxj32zwD.js → pieDiagram-E7YTZNPT-ToIewrqr.js} +1 -1
- ksadk/server/static/assets/{quadrantDiagram-AXDQQJYC-BURv2mGh.js → quadrantDiagram-AXDQQJYC-4d78KiEY.js} +1 -1
- ksadk/server/static/assets/radar-RG4KPBEZ-FFontjL2.js +1 -0
- ksadk/server/static/assets/railroad-74A4TZTK-D0Uidzen.js +1 -0
- ksadk/server/static/assets/railroad-abnf-HS5TGJTU-BOo_9T2h.js +1 -0
- ksadk/server/static/assets/railroad-ebnf-LZEXJU2U-D6-BjW7Z.js +1 -0
- ksadk/server/static/assets/railroad-peg-WCYAUIDC-CXx__yMm.js +1 -0
- ksadk/server/static/assets/{railroadDiagram-O6MQD6OU-CCsh3avW.js → railroadDiagram-O6MQD6OU-DKzx4xfv.js} +1 -1
- ksadk/server/static/assets/{requirementDiagram-EFPCY7ZU-_FRRBKEd.js → requirementDiagram-EFPCY7ZU-CJYljxQS.js} +1 -1
- ksadk/server/static/assets/{sankeyDiagram-P5KCCOFB-C-gr2o9M.js → sankeyDiagram-P5KCCOFB-DLU2fV1w.js} +1 -1
- ksadk/server/static/assets/{sequenceDiagram-WJ2MYXX4-D97NmfKg.js → sequenceDiagram-WJ2MYXX4-CVqysrA9.js} +1 -1
- ksadk/server/static/assets/{sizeCapture-X5ZJPWSS-DjrPC5FX.js → sizeCapture-X5ZJPWSS-BUxfmTHc.js} +1 -1
- ksadk/server/static/assets/{stateDiagram-HBIQ2CUA-DzMNg1hh.js → stateDiagram-HBIQ2CUA-CNFgYI9E.js} +1 -1
- ksadk/server/static/assets/stateDiagram-v2-4QOOHH4V-BXAFScz8.js +1 -0
- ksadk/server/static/assets/{swimlanes-XN3QIQJK-Cssf_CsU.js → swimlanes-XN3QIQJK-B6qCMe8N.js} +1 -1
- ksadk/server/static/assets/swimlanesDiagram-VK2B7HYN-uIQ2lJKH.js +8 -0
- ksadk/server/static/assets/{timeline-definition-24CTP7MA-BWTHzyS1.js → timeline-definition-24CTP7MA-CMD3x_U_.js} +1 -1
- ksadk/server/static/assets/treeView-Q6P3EWNA-CK5GgucZ.js +1 -0
- ksadk/server/static/assets/treemap-WGGIJYW6-Bq1u1SpG.js +1 -0
- ksadk/server/static/assets/{vennDiagram-4TSXK5OY-BSKgJsmR.js → vennDiagram-4TSXK5OY-BqtUqvXM.js} +1 -1
- ksadk/server/static/assets/wardley-WFR3VGLG-QAt06uEz.js +1 -0
- ksadk/server/static/assets/{wardleyDiagram-VM6X3IG4-eflHNoaZ.js → wardleyDiagram-VM6X3IG4-B5KfDjI-.js} +1 -1
- ksadk/server/static/assets/{xychartDiagram-S5SC5T6Z-eYqrQ-v4.js → xychartDiagram-S5SC5T6Z-BaUlSZrn.js} +1 -1
- ksadk/server/static/index.html +2 -2
- ksadk/server/terminal_sessions.py +34 -2
- ksadk/sessions/invocation_identity.py +235 -0
- ksadk/skills/__init__.py +26 -0
- ksadk/skills/events.py +464 -0
- ksadk/skills/manifest_cache.py +263 -0
- ksadk/skills/mcp_server/__init__.py +0 -0
- ksadk/skills/mcp_server/_registry.py +33 -0
- ksadk/skills/mcp_server/_routing.py +26 -0
- ksadk/skills/mcp_server/_workspace_files.py +160 -0
- ksadk/skills/mcp_server/register.py +415 -0
- ksadk/skills/mcp_server/server.py +218 -0
- ksadk/skills/models.py +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 +393 -52
- 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/tool_defs.py +108 -3
- ksadk/studio/api.py +592 -57
- ksadk/studio/api_contracts.py +8 -2
- ksadk/studio/api_plugin_routes.py +39 -12
- ksadk/studio/api_resource_connections.py +79 -41
- ksadk/studio/authoring.py +12 -6
- ksadk/studio/authoring_coordinator.py +4 -2
- ksadk/studio/builder.py +12 -0
- ksadk/studio/capabilities.py +23 -6
- ksadk/studio/channel_connections.py +333 -0
- ksadk/studio/cloud.py +30 -10
- ksadk/studio/cloud_shared_web.py +75 -2
- ksadk/studio/codex_agent_service.py +2 -2
- ksadk/studio/codex_builder.py +1 -1
- ksadk/studio/codex_run.py +6 -1
- ksadk/studio/compiler.py +10 -0
- ksadk/studio/configuration.py +182 -0
- ksadk/studio/contracts.py +33 -5
- ksadk/studio/dsh_application.py +135 -25
- ksadk/studio/dsh_capability_service.py +287 -20
- ksadk/studio/dsh_lifecycle.py +58 -0
- ksadk/studio/dsh_provider_registration.py +55 -16
- ksadk/studio/entry.py +53 -0
- ksadk/studio/event_store.py +36 -5
- ksadk/studio/execution_host.py +525 -0
- ksadk/studio/framework_run.py +32 -10
- ksadk/studio/hosted_kernel.py +1 -1
- ksadk/studio/kernel_registry.py +418 -0
- ksadk/studio/kernel_sqlite_migration.py +181 -0
- ksadk/studio/model_client.py +1178 -64
- ksadk/studio/model_profile_service.py +26 -11
- ksadk/studio/native_documents.py +172 -0
- ksadk/studio/plugin_composition.py +13 -2
- ksadk/studio/plugin_kernel_adapter.py +15 -0
- ksadk/studio/plugin_lifecycle.py +80 -0
- ksadk/studio/plugin_runtime.py +230 -17
- ksadk/studio/provider_recovery.py +59 -0
- ksadk/studio/recovery_page.py +70 -0
- ksadk/studio/resource_authority.py +59 -32
- ksadk/studio/resource_catalog.py +6 -0
- ksadk/studio/run_activity.py +895 -0
- ksadk/studio/run_documents.py +127 -0
- ksadk/studio/run_service.py +329 -33
- ksadk/studio/runtime_catalog.py +53 -10
- ksadk/studio/runtime_source.py +1 -1
- ksadk/studio/scheduler_runtime.py +32 -289
- ksadk/studio/service.py +398 -103
- ksadk/studio/shared_web.py +149 -36
- ksadk/studio/static/assets/ChannelsPage-D_PGmKVq.js +8 -0
- ksadk/studio/static/assets/CodeBlock-DMIf4h33-UIqo-BPW.js +44 -0
- ksadk/studio/static/assets/ExecutionTree-v3HexvPo-Bk8wzGSy.js +1 -0
- ksadk/studio/static/assets/MathMessageMarkdown-BesSeCYl-OhNwH4K9.js +8 -0
- ksadk/studio/static/assets/MermaidBlock-H_0qzQDf-BdXtxug_.js +11 -0
- ksadk/studio/static/assets/MessageMarkdown-CwMTvgFj-g0I-I4dD.js +59 -0
- ksadk/studio/static/assets/PrismRenderer-5pK6tUdb.js +3 -0
- ksadk/studio/static/assets/TeamsPage-DqX4HWKQ.js +3 -0
- ksadk/studio/static/assets/abnfDiagram-VCTEODGH-Bnb1O3tA.js +1 -0
- ksadk/studio/static/assets/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-CfEnms6Y.css +2 -0
- ksadk/studio/static/assets/index-Dp61rOWZ.js +0 -0
- ksadk/studio/static/assets/index.dom-BQenBtFm.js +1 -0
- ksadk/studio/static/assets/info-A6RAGUB7-BlU-8_xu.js +1 -0
- ksadk/studio/static/assets/infoDiagram-27XIBGKW-CO3W8tFn.js +2 -0
- ksadk/studio/static/assets/{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 +133 -0
- ksadk/studio/teams_installation.py +214 -0
- ksadk/studio/teams_node.py +545 -0
- ksadk/studio/teams_node_runner.py +69 -0
- ksadk/studio/teams_remote.py +274 -0
- ksadk/studio/templates.py +40 -19
- ksadk/studio/validator.py +13 -0
- ksadk/studio/workspace.py +19 -4
- ksadk/studio/workspace_plugins.py +136 -0
- ksadk/studio/workspace_registry.py +286 -0
- ksadk/toolsets/__init__.py +11 -0
- ksadk/toolsets/skills.py +446 -378
- ksadk/toolsets/workspace.py +3 -3
- ksadk/toolsets/workspace_identity.py +15 -0
- ksadk/version.py +1 -1
- ksadk_runtime_common/memory_backend/providers/lancedb.py +56 -2
- ksadk_runtime_common/schemas/memory_backend_manifest.schema.json +148 -148
- ksadk_runtime_common/workspace_files/router.py +26 -13
- 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.5.dist-info}/WHEEL +0 -0
- {agentengine_sdk_python-0.8.4.dist-info → agentengine_sdk_python-0.8.5.dist-info}/entry_points.txt +0 -0
- {agentengine_sdk_python-0.8.4.dist-info → agentengine_sdk_python-0.8.5.dist-info}/licenses/LICENSE +0 -0
- {agentengine_sdk_python-0.8.4.dist-info → agentengine_sdk_python-0.8.5.dist-info}/top_level.txt +0 -0
- /ksadk/studio/static/assets/{MathMessageMarkdown-CBcDrAw--BEOyPC3w.css → MathMessageMarkdown-BesSeCYl-BEOyPC3w.css} +0 -0
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
"""Isolated Python entrypoint that applies rlimits before exec.
|
|
2
|
+
|
|
3
|
+
It is started with ``python -I -S`` so untrusted workspace modules cannot replace
|
|
4
|
+
the imported launcher or the standard-library ``resource`` module.
|
|
5
|
+
"""
|
|
6
|
+
|
|
7
|
+
from __future__ import annotations
|
|
8
|
+
|
|
9
|
+
import argparse
|
|
10
|
+
import json
|
|
11
|
+
import os
|
|
12
|
+
import sys
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
def main(argv: list[str] | None = None) -> int:
|
|
16
|
+
parser = argparse.ArgumentParser(add_help=False)
|
|
17
|
+
parser.add_argument("--limits", required=True)
|
|
18
|
+
parser.add_argument("--report-fd", required=True, type=int)
|
|
19
|
+
parser.add_argument("command", nargs=argparse.REMAINDER)
|
|
20
|
+
arguments = parser.parse_args(argv)
|
|
21
|
+
command = list(arguments.command)
|
|
22
|
+
if command[:1] == ["--"]:
|
|
23
|
+
command = command[1:]
|
|
24
|
+
report = _apply_limits(json.loads(arguments.limits))
|
|
25
|
+
os.write(arguments.report_fd, json.dumps(report, sort_keys=True).encode("utf-8"))
|
|
26
|
+
os.close(arguments.report_fd)
|
|
27
|
+
status = report["status"]
|
|
28
|
+
if status != "applied" and not (status == "partial" and sys.platform == "darwin"):
|
|
29
|
+
return 125
|
|
30
|
+
if not command:
|
|
31
|
+
return 125
|
|
32
|
+
try:
|
|
33
|
+
os.execvpe(command[0], command, os.environ)
|
|
34
|
+
except OSError as exc:
|
|
35
|
+
print(f"local-process launcher exec failed: {type(exc).__name__}: {exc}", file=sys.stderr)
|
|
36
|
+
return 126
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
def _apply_limits(configured: dict[str, object]) -> dict[str, object]:
|
|
40
|
+
try:
|
|
41
|
+
import resource
|
|
42
|
+
except ImportError:
|
|
43
|
+
return {"status": "unsupported", "applied": {}, "unsupported": ["resource_module"]}
|
|
44
|
+
|
|
45
|
+
names = {
|
|
46
|
+
"cpu_seconds": "RLIMIT_CPU",
|
|
47
|
+
"address_space_bytes": "RLIMIT_AS",
|
|
48
|
+
"max_processes": "RLIMIT_NPROC",
|
|
49
|
+
"max_open_files": "RLIMIT_NOFILE",
|
|
50
|
+
"max_file_bytes": "RLIMIT_FSIZE",
|
|
51
|
+
}
|
|
52
|
+
applied: dict[str, int] = {}
|
|
53
|
+
unsupported: list[str] = []
|
|
54
|
+
failed: list[str] = []
|
|
55
|
+
for name, constant_name in names.items():
|
|
56
|
+
limit = configured.get(name)
|
|
57
|
+
if type(limit) is not int or limit < 1:
|
|
58
|
+
failed.append(f"{name}:invalid")
|
|
59
|
+
continue
|
|
60
|
+
if name == "address_space_bytes" and sys.platform == "darwin":
|
|
61
|
+
# Darwin exposes RLIMIT_AS but rejects useful values on supported
|
|
62
|
+
# Python/macOS combinations. Linux is the deployment target.
|
|
63
|
+
unsupported.append(name)
|
|
64
|
+
continue
|
|
65
|
+
if name == "max_processes" and sys.platform == "darwin":
|
|
66
|
+
# RLIMIT_NPROC is per UID. Developer desktops commonly already have
|
|
67
|
+
# more processes than the requested Skill budget.
|
|
68
|
+
unsupported.append(name)
|
|
69
|
+
continue
|
|
70
|
+
if not hasattr(resource, constant_name):
|
|
71
|
+
unsupported.append(name)
|
|
72
|
+
continue
|
|
73
|
+
resource_id = getattr(resource, constant_name)
|
|
74
|
+
try:
|
|
75
|
+
_, hard = resource.getrlimit(resource_id)
|
|
76
|
+
effective = limit if hard == resource.RLIM_INFINITY else min(limit, hard)
|
|
77
|
+
resource.setrlimit(resource_id, (effective, effective))
|
|
78
|
+
soft_after, hard_after = resource.getrlimit(resource_id)
|
|
79
|
+
if soft_after != effective or hard_after != effective:
|
|
80
|
+
failed.append(f"{name}:verification")
|
|
81
|
+
else:
|
|
82
|
+
applied[name] = effective
|
|
83
|
+
except (OSError, ValueError) as exc:
|
|
84
|
+
failed.append(f"{name}:{type(exc).__name__}")
|
|
85
|
+
status = "failed" if failed else ("partial" if unsupported else "applied")
|
|
86
|
+
return {"status": status, "applied": applied, "unsupported": unsupported, "failed": failed}
|
|
87
|
+
|
|
88
|
+
|
|
89
|
+
if __name__ == "__main__": # pragma: no cover - exercised through subprocesses
|
|
90
|
+
raise SystemExit(main())
|
ksadk/scheduler/dispatcher.py
CHANGED
|
@@ -30,7 +30,7 @@ class AgentControlSchedulerDispatcher:
|
|
|
30
30
|
"""Translate one occurrence into a single durable AgentControl enqueue.
|
|
31
31
|
|
|
32
32
|
This dispatcher is intentionally local-runtime only. A hosted scheduler
|
|
33
|
-
must obtain a Server-issued permit at its admission boundary in
|
|
33
|
+
must obtain a Server-issued permit at its admission boundary in admission boundary;
|
|
34
34
|
this class never makes local permits look valid against hosted JWKS.
|
|
35
35
|
"""
|
|
36
36
|
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
"""Private trusted-identity carrier for hosted runtime requests."""
|
|
2
|
+
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
from typing import Any, Mapping
|
|
6
|
+
|
|
7
|
+
from fastapi import Header, HTTPException
|
|
8
|
+
|
|
9
|
+
from ksadk.runtime_context import TRUSTED_IDENTITY_METADATA_KEY, PlatformIdentityContext
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
def _header_value(value: Any) -> str:
|
|
13
|
+
return value.strip() if isinstance(value, str) else ""
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
def trusted_invocation_identity_from_headers(
|
|
17
|
+
headers: Mapping[str, Any],
|
|
18
|
+
) -> PlatformIdentityContext:
|
|
19
|
+
"""Resolve the private carrier from an ASGI/HTTP header mapping."""
|
|
20
|
+
|
|
21
|
+
return _resolve_trusted_invocation_identity_values(
|
|
22
|
+
identity_namespace=headers.get("x-agentengine-identity-namespace"),
|
|
23
|
+
tenant_id=headers.get("x-agentengine-business-tenant-id"),
|
|
24
|
+
subject_type=headers.get("x-agentengine-subject-type"),
|
|
25
|
+
subject_id=headers.get("x-agentengine-subject-id"),
|
|
26
|
+
)
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
def _resolve_trusted_invocation_identity_values(
|
|
30
|
+
*,
|
|
31
|
+
identity_namespace: Any,
|
|
32
|
+
tenant_id: Any,
|
|
33
|
+
subject_type: Any,
|
|
34
|
+
subject_id: Any,
|
|
35
|
+
) -> PlatformIdentityContext:
|
|
36
|
+
values = {
|
|
37
|
+
"identity_namespace": _header_value(identity_namespace),
|
|
38
|
+
"tenant_id": _header_value(tenant_id),
|
|
39
|
+
"subject_type": _header_value(subject_type),
|
|
40
|
+
"subject_id": _header_value(subject_id),
|
|
41
|
+
}
|
|
42
|
+
present = {field for field, value in values.items() if value}
|
|
43
|
+
if not present:
|
|
44
|
+
return PlatformIdentityContext()
|
|
45
|
+
if present != set(values):
|
|
46
|
+
raise HTTPException(status_code=401, detail="Incomplete trusted business identity context")
|
|
47
|
+
limits = {"identity_namespace": 128, "tenant_id": 128, "subject_type": 32, "subject_id": 128}
|
|
48
|
+
for field, value in values.items():
|
|
49
|
+
if len(value) > limits[field] or any(ord(char) < 32 or ord(char) == 127 for char in value):
|
|
50
|
+
raise HTTPException(
|
|
51
|
+
status_code=400,
|
|
52
|
+
detail=f"Invalid trusted business identity field: {field}",
|
|
53
|
+
)
|
|
54
|
+
return PlatformIdentityContext.from_payload(values)
|
|
55
|
+
|
|
56
|
+
|
|
57
|
+
def trusted_invocation_identity_headers(identity: Any) -> dict[str, str]:
|
|
58
|
+
"""Build the private header carrier for an in-process runtime hop."""
|
|
59
|
+
|
|
60
|
+
resolved = coerce_trusted_invocation_identity(identity)
|
|
61
|
+
if resolved.is_empty:
|
|
62
|
+
return {}
|
|
63
|
+
return {
|
|
64
|
+
"X-AgentEngine-Identity-Namespace": resolved.identity_namespace,
|
|
65
|
+
"X-AgentEngine-Business-Tenant-Id": resolved.tenant_id,
|
|
66
|
+
"X-AgentEngine-Subject-Type": resolved.subject_type,
|
|
67
|
+
"X-AgentEngine-Subject-Id": resolved.subject_id,
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
|
|
71
|
+
def resolve_trusted_invocation_identity(
|
|
72
|
+
x_agentengine_identity_namespace: str | None = Header(
|
|
73
|
+
None, alias="X-AgentEngine-Identity-Namespace"
|
|
74
|
+
),
|
|
75
|
+
x_agentengine_business_tenant_id: str | None = Header(
|
|
76
|
+
None, alias="X-AgentEngine-Business-Tenant-Id"
|
|
77
|
+
),
|
|
78
|
+
x_agentengine_subject_type: str | None = Header(None, alias="X-AgentEngine-Subject-Type"),
|
|
79
|
+
x_agentengine_subject_id: str | None = Header(None, alias="X-AgentEngine-Subject-Id"),
|
|
80
|
+
) -> PlatformIdentityContext:
|
|
81
|
+
"""Resolve the all-or-none identity rebuilt by the private gateway hop."""
|
|
82
|
+
|
|
83
|
+
return _resolve_trusted_invocation_identity_values(
|
|
84
|
+
identity_namespace=x_agentengine_identity_namespace,
|
|
85
|
+
tenant_id=x_agentengine_business_tenant_id,
|
|
86
|
+
subject_type=x_agentengine_subject_type,
|
|
87
|
+
subject_id=x_agentengine_subject_id,
|
|
88
|
+
)
|
|
89
|
+
|
|
90
|
+
|
|
91
|
+
def coerce_trusted_invocation_identity(value: Any) -> PlatformIdentityContext:
|
|
92
|
+
"""Keep direct unit calls compatible with FastAPI's dependency default."""
|
|
93
|
+
|
|
94
|
+
return value if isinstance(value, PlatformIdentityContext) else PlatformIdentityContext()
|
|
95
|
+
|
|
96
|
+
|
|
97
|
+
def inject_trusted_invocation_identity(
|
|
98
|
+
metadata: Mapping[str, Any] | None,
|
|
99
|
+
identity: Any,
|
|
100
|
+
) -> dict[str, Any]:
|
|
101
|
+
"""Overwrite the private key; caller metadata can never create this context."""
|
|
102
|
+
|
|
103
|
+
result = dict(metadata or {})
|
|
104
|
+
result.pop(TRUSTED_IDENTITY_METADATA_KEY, None)
|
|
105
|
+
resolved = coerce_trusted_invocation_identity(identity)
|
|
106
|
+
if not resolved.is_empty:
|
|
107
|
+
result[TRUSTED_IDENTITY_METADATA_KEY] = resolved.to_payload()
|
|
108
|
+
return result
|
|
109
|
+
|
|
110
|
+
|
|
111
|
+
__all__ = [
|
|
112
|
+
"TRUSTED_IDENTITY_METADATA_KEY",
|
|
113
|
+
"coerce_trusted_invocation_identity",
|
|
114
|
+
"inject_trusted_invocation_identity",
|
|
115
|
+
"resolve_trusted_invocation_identity",
|
|
116
|
+
"trusted_invocation_identity_from_headers",
|
|
117
|
+
"trusted_invocation_identity_headers",
|
|
118
|
+
]
|
ksadk/server/routes/common.py
CHANGED
|
@@ -16,6 +16,7 @@ from fastapi.responses import FileResponse, Response
|
|
|
16
16
|
|
|
17
17
|
from ksadk.conversations.attachments import compact_attachment_result_for_session
|
|
18
18
|
from ksadk.conversations.model_context import normalize_model_metadata
|
|
19
|
+
from ksadk.runtime_context import PlatformIdentityContext
|
|
19
20
|
from ksadk.runtime_state import load_state as load_runtime_state
|
|
20
21
|
from ksadk.server.factory import (
|
|
21
22
|
RuntimeAppState,
|
|
@@ -28,6 +29,7 @@ from ksadk.server.terminal_sessions import (
|
|
|
28
29
|
register_terminal_routes,
|
|
29
30
|
)
|
|
30
31
|
from ksadk.sessions import Session
|
|
32
|
+
from ksadk.sessions.invocation_identity import identity_scope_ref
|
|
31
33
|
from ksadk.sessions.local_service import resolve_local_session_dir
|
|
32
34
|
from ksadk.ui_config import UI_PROFILE_CUSTOM, resolve_ui_config
|
|
33
35
|
from ksadk_runtime_common.workspace_files import (
|
|
@@ -35,6 +37,10 @@ from ksadk_runtime_common.workspace_files import (
|
|
|
35
37
|
workspace_files_enabled,
|
|
36
38
|
)
|
|
37
39
|
|
|
40
|
+
from ..invocation_identity import (
|
|
41
|
+
trusted_invocation_identity_from_headers,
|
|
42
|
+
trusted_invocation_identity_headers,
|
|
43
|
+
)
|
|
38
44
|
from . import dependencies as deps
|
|
39
45
|
from .routers import health_meta_router
|
|
40
46
|
|
|
@@ -92,8 +98,17 @@ _MAX_REFERENCE_TEXT_BYTES = 3_000_000
|
|
|
92
98
|
_UPLOAD_URI_SCHEME = "ksadk-upload://"
|
|
93
99
|
|
|
94
100
|
|
|
95
|
-
def _workspace_root_dir(
|
|
96
|
-
|
|
101
|
+
def _workspace_root_dir(
|
|
102
|
+
invocation_identity: PlatformIdentityContext | None = None,
|
|
103
|
+
) -> Path:
|
|
104
|
+
root = Path(resolve_local_session_dir()) / "workspace"
|
|
105
|
+
if invocation_identity is not None and not invocation_identity.is_empty:
|
|
106
|
+
root = root / "identities" / identity_scope_ref(invocation_identity)
|
|
107
|
+
return root
|
|
108
|
+
|
|
109
|
+
|
|
110
|
+
def _workspace_request_root(request: Request) -> Path:
|
|
111
|
+
return _workspace_root_dir(trusted_invocation_identity_from_headers(request.headers))
|
|
97
112
|
|
|
98
113
|
|
|
99
114
|
_NATIVE_TUI_FRAMEWORKS = {"hermes", "openclaw"}
|
|
@@ -104,10 +119,18 @@ def _current_framework() -> str:
|
|
|
104
119
|
return str(context.runtime_type if context is not None else "").strip().lower()
|
|
105
120
|
|
|
106
121
|
|
|
107
|
-
def _build_native_terminal_capability(
|
|
122
|
+
def _build_native_terminal_capability(
|
|
123
|
+
framework: str,
|
|
124
|
+
invocation_identity: PlatformIdentityContext | None = None,
|
|
125
|
+
) -> dict[str, Any]:
|
|
126
|
+
isolated_identity = (
|
|
127
|
+
isinstance(invocation_identity, PlatformIdentityContext)
|
|
128
|
+
and not invocation_identity.is_empty
|
|
129
|
+
)
|
|
108
130
|
enabled = (
|
|
109
131
|
native_terminal_supported()
|
|
110
132
|
and str(framework or "").strip().lower() in _NATIVE_TUI_FRAMEWORKS
|
|
133
|
+
and not isolated_identity
|
|
111
134
|
)
|
|
112
135
|
return {
|
|
113
136
|
"Enabled": enabled,
|
|
@@ -127,6 +150,7 @@ def _register_integrated_routers(app: FastAPI, state: RuntimeAppState) -> None:
|
|
|
127
150
|
create_workspace_files_router(
|
|
128
151
|
root_getter=_workspace_root_dir,
|
|
129
152
|
enabled_getter=lambda: workspace_files_enabled(default=True),
|
|
153
|
+
request_root_getter=_workspace_request_root,
|
|
130
154
|
)
|
|
131
155
|
)
|
|
132
156
|
state.terminal_manager = TerminalSessionManager(
|
|
@@ -137,6 +161,9 @@ def _register_integrated_routers(app: FastAPI, state: RuntimeAppState) -> None:
|
|
|
137
161
|
app,
|
|
138
162
|
state.terminal_manager,
|
|
139
163
|
bind_context=lambda: bind_runtime_state(state),
|
|
164
|
+
identity_access_allowed=lambda headers: (
|
|
165
|
+
trusted_invocation_identity_from_headers(headers).is_empty
|
|
166
|
+
),
|
|
140
167
|
)
|
|
141
168
|
|
|
142
169
|
|
|
@@ -631,6 +658,7 @@ async def _workspace_runtime_request(
|
|
|
631
658
|
*,
|
|
632
659
|
params: Optional[Dict[str, Any]] = None,
|
|
633
660
|
files: Optional[Dict[str, Any]] = None,
|
|
661
|
+
invocation_identity: PlatformIdentityContext | None = None,
|
|
634
662
|
) -> httpx.Response:
|
|
635
663
|
runtime_app = get_state().app
|
|
636
664
|
if runtime_app is None:
|
|
@@ -640,6 +668,7 @@ async def _workspace_runtime_request(
|
|
|
640
668
|
response = await client.request(
|
|
641
669
|
method,
|
|
642
670
|
runtime_path,
|
|
671
|
+
headers=trusted_invocation_identity_headers(invocation_identity),
|
|
643
672
|
params=params,
|
|
644
673
|
files=files,
|
|
645
674
|
)
|
ksadk/server/routes/control.py
CHANGED
|
@@ -10,7 +10,7 @@ import uuid
|
|
|
10
10
|
from collections.abc import AsyncIterator, Mapping
|
|
11
11
|
from typing import Any, Optional
|
|
12
12
|
|
|
13
|
-
from fastapi import HTTPException, Query
|
|
13
|
+
from fastapi import Depends, HTTPException, Query
|
|
14
14
|
from fastapi.responses import StreamingResponse
|
|
15
15
|
|
|
16
16
|
from ksadk.conversations.run_kinds import (
|
|
@@ -19,10 +19,17 @@ from ksadk.conversations.run_kinds import (
|
|
|
19
19
|
RUN_TRIGGER_CHECKPOINT_RESUME,
|
|
20
20
|
)
|
|
21
21
|
from ksadk.conversations.runtime_payloads import build_responses_payload
|
|
22
|
+
from ksadk.conversations.runtime_persistence import require_conversation_session
|
|
22
23
|
from ksadk.conversations.runtime_streaming import stream_runtime_responses_conversation_turn
|
|
23
24
|
from ksadk.runtime.conversation_execution import invoke_runtime_conversation_once
|
|
25
|
+
from ksadk.runtime_context import PlatformIdentityContext
|
|
24
26
|
from ksadk.server.factory import get_runtime_execution, get_state
|
|
25
27
|
|
|
28
|
+
from ..invocation_identity import (
|
|
29
|
+
coerce_trusted_invocation_identity,
|
|
30
|
+
inject_trusted_invocation_identity,
|
|
31
|
+
resolve_trusted_invocation_identity,
|
|
32
|
+
)
|
|
26
33
|
from . import dependencies as deps
|
|
27
34
|
from .checkpoint_resolution import _find_session_checkpoint
|
|
28
35
|
from .common import _action_response
|
|
@@ -54,6 +61,33 @@ from .streaming import (
|
|
|
54
61
|
)
|
|
55
62
|
|
|
56
63
|
|
|
64
|
+
async def _require_control_session(
|
|
65
|
+
service: Any,
|
|
66
|
+
*,
|
|
67
|
+
session_id: str,
|
|
68
|
+
agent_id: str | None,
|
|
69
|
+
user_id: str | None,
|
|
70
|
+
invocation_identity: PlatformIdentityContext,
|
|
71
|
+
):
|
|
72
|
+
invocation_identity = coerce_trusted_invocation_identity(invocation_identity)
|
|
73
|
+
if invocation_identity.is_empty:
|
|
74
|
+
return await _require_action_session(
|
|
75
|
+
service,
|
|
76
|
+
session_id=session_id,
|
|
77
|
+
agent_id=agent_id,
|
|
78
|
+
user_id=user_id,
|
|
79
|
+
)
|
|
80
|
+
if not agent_id:
|
|
81
|
+
raise HTTPException(status_code=400, detail="AgentId is required")
|
|
82
|
+
return await require_conversation_session(
|
|
83
|
+
agent_id=agent_id,
|
|
84
|
+
user_id=str(user_id or ""),
|
|
85
|
+
session_id=session_id,
|
|
86
|
+
session_service_provider=lambda: service,
|
|
87
|
+
invocation_identity=invocation_identity,
|
|
88
|
+
)
|
|
89
|
+
|
|
90
|
+
|
|
57
91
|
def _resolve_active_runner() -> Any:
|
|
58
92
|
"""Expose the adapter-owned runner for persistence capability probing."""
|
|
59
93
|
|
|
@@ -66,13 +100,18 @@ def _resolve_active_runner() -> Any:
|
|
|
66
100
|
|
|
67
101
|
|
|
68
102
|
@control_router.post("/agentengine/api/v1/GetCheckpointResumePreview")
|
|
69
|
-
async def get_checkpoint_resume_preview_action(
|
|
103
|
+
async def get_checkpoint_resume_preview_action(
|
|
104
|
+
request: GetCheckpointResumePreviewActionRequest,
|
|
105
|
+
invocation_identity: PlatformIdentityContext = Depends(resolve_trusted_invocation_identity),
|
|
106
|
+
):
|
|
107
|
+
invocation_identity = coerce_trusted_invocation_identity(invocation_identity)
|
|
70
108
|
service = deps.resolve_session_service()
|
|
71
|
-
await
|
|
109
|
+
await _require_control_session(
|
|
72
110
|
service,
|
|
73
111
|
session_id=request.SessionId,
|
|
74
112
|
agent_id=request.AgentId,
|
|
75
113
|
user_id=request.UserId,
|
|
114
|
+
invocation_identity=invocation_identity,
|
|
76
115
|
)
|
|
77
116
|
|
|
78
117
|
checkpoint = await _find_session_checkpoint(
|
|
@@ -123,14 +162,19 @@ async def get_checkpoint_resume_preview_action(request: GetCheckpointResumePrevi
|
|
|
123
162
|
|
|
124
163
|
|
|
125
164
|
@control_router.post("/agentengine/api/v1/ResumeRun")
|
|
126
|
-
async def resume_run_action(
|
|
165
|
+
async def resume_run_action(
|
|
166
|
+
request: ResumeRunActionRequest,
|
|
167
|
+
invocation_identity: PlatformIdentityContext = Depends(resolve_trusted_invocation_identity),
|
|
168
|
+
):
|
|
169
|
+
invocation_identity = coerce_trusted_invocation_identity(invocation_identity)
|
|
127
170
|
executor, launch_context = get_runtime_execution()
|
|
128
171
|
service = deps.resolve_session_service()
|
|
129
|
-
session = await
|
|
172
|
+
session = await _require_control_session(
|
|
130
173
|
service,
|
|
131
174
|
session_id=request.SessionId,
|
|
132
175
|
agent_id=request.AgentId,
|
|
133
176
|
user_id=request.UserId,
|
|
177
|
+
invocation_identity=invocation_identity,
|
|
134
178
|
)
|
|
135
179
|
|
|
136
180
|
checkpoint = await _find_session_checkpoint(
|
|
@@ -201,6 +245,10 @@ async def resume_run_action(request: ResumeRunActionRequest):
|
|
|
201
245
|
**_metadata_runtime_controls,
|
|
202
246
|
"responses_conversation": True,
|
|
203
247
|
}
|
|
248
|
+
resume_request_metadata = inject_trusted_invocation_identity(
|
|
249
|
+
resume_request_metadata,
|
|
250
|
+
invocation_identity,
|
|
251
|
+
)
|
|
204
252
|
|
|
205
253
|
if request.Background:
|
|
206
254
|
resume_invocation_id = str(request.InvocationId or resume_input["resume_attempt_id"])
|
|
@@ -374,9 +422,7 @@ async def _runtime_capability_snapshot(*, force: bool) -> Any:
|
|
|
374
422
|
|
|
375
423
|
state = get_state()
|
|
376
424
|
runner = _resolve_active_runner()
|
|
377
|
-
wait_timeout = max(
|
|
378
|
-
0.1, float(os.getenv("KSADK_PERSISTENCE_PROBE_TIMEOUT") or "2")
|
|
379
|
-
)
|
|
425
|
+
wait_timeout = max(0.1, float(os.getenv("KSADK_PERSISTENCE_PROBE_TIMEOUT") or "2"))
|
|
380
426
|
return await state.persistence_capability.get_snapshot(
|
|
381
427
|
runner=runner,
|
|
382
428
|
framework=_runner_framework(runner),
|
|
@@ -430,17 +476,20 @@ async def subscribe_run_events_action(
|
|
|
430
476
|
AfterSeqId: int = Query(0),
|
|
431
477
|
AgentId: Optional[str] = Query(None),
|
|
432
478
|
UserId: Optional[str] = Query(None),
|
|
479
|
+
invocation_identity: PlatformIdentityContext = Depends(resolve_trusted_invocation_identity),
|
|
433
480
|
):
|
|
481
|
+
invocation_identity = coerce_trusted_invocation_identity(invocation_identity)
|
|
434
482
|
session_id = str(SessionId or "").strip()
|
|
435
483
|
invocation_id = str(InvocationId or "").strip()
|
|
436
484
|
if not session_id or not invocation_id:
|
|
437
485
|
raise HTTPException(status_code=400, detail="SessionId and InvocationId are required")
|
|
438
486
|
service = deps.resolve_session_service()
|
|
439
|
-
await
|
|
487
|
+
await _require_control_session(
|
|
440
488
|
service,
|
|
441
489
|
session_id=session_id,
|
|
442
490
|
agent_id=AgentId,
|
|
443
491
|
user_id=UserId,
|
|
492
|
+
invocation_identity=invocation_identity,
|
|
444
493
|
)
|
|
445
494
|
if not await _session_contains_invocation(service, session_id, invocation_id):
|
|
446
495
|
raise HTTPException(
|
|
@@ -453,6 +502,12 @@ async def subscribe_run_events_action(
|
|
|
453
502
|
deadline = time.monotonic() + 5 * 60
|
|
454
503
|
last_heartbeat_at = time.monotonic()
|
|
455
504
|
last_terminal_check_at = 0.0
|
|
505
|
+
if deps.heartbeat_interval() <= 0:
|
|
506
|
+
# A zero interval explicitly requests an immediate keepalive. Do
|
|
507
|
+
# this before the first storage poll so a concurrently completed
|
|
508
|
+
# run cannot make the reconnect response timing-dependent.
|
|
509
|
+
yield ": heartbeat\n\n"
|
|
510
|
+
last_heartbeat_at = time.monotonic()
|
|
456
511
|
while True:
|
|
457
512
|
events = await _oldest_unconsumed_session_events(
|
|
458
513
|
service,
|
|
@@ -78,7 +78,8 @@ def describe_session_backend() -> dict[str, Any]:
|
|
|
78
78
|
async def get_persistence_status(
|
|
79
79
|
*, framework: str | None = None, use_cache: bool = True
|
|
80
80
|
) -> dict[str, Any]:
|
|
81
|
-
|
|
81
|
+
# App-scoped session routes also run without the legacy global app.
|
|
82
|
+
provider = _dependencies.get_persistence_status if _dependencies is not None else None
|
|
82
83
|
if provider is None:
|
|
83
84
|
from ksadk.sessions.persistence import get_persistence_status as provider
|
|
84
85
|
try:
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
# -*- coding: utf-8 -*-
|
|
2
|
-
"""RunAgent / Responses 入口的 kernel 路径(
|
|
2
|
+
"""RunAgent / Responses 入口的 kernel 路径(Kernel Task 8 Step 3-5)。
|
|
3
3
|
|
|
4
4
|
只在 ``kernel_route_active()`` 时启用(灰度 opt-in);旧 HTTP 行为保持兼容:
|
|
5
5
|
- accepted -> 202、duplicate -> 200、rejected -> 400、unsupported -> 409、
|
|
@@ -18,6 +18,8 @@ from fastapi.responses import JSONResponse, StreamingResponse
|
|
|
18
18
|
|
|
19
19
|
from ksadk.kernel import ingress
|
|
20
20
|
from ksadk.kernel.contracts import AgentControlReceipt
|
|
21
|
+
from ksadk.runtime_context import PlatformIdentityContext
|
|
22
|
+
from ksadk.sessions.invocation_identity import identity_owner_payload
|
|
21
23
|
|
|
22
24
|
logger = logging.getLogger(__name__)
|
|
23
25
|
|
|
@@ -35,6 +37,7 @@ async def _kernel_submit(
|
|
|
35
37
|
correlation_ref: str | None,
|
|
36
38
|
source_kind: str,
|
|
37
39
|
runtime_options: dict[str, Any] | None = None,
|
|
40
|
+
invocation_identity: PlatformIdentityContext | None = None,
|
|
38
41
|
) -> tuple[AgentControlReceipt, ingress.TrustedRuntimeContext]:
|
|
39
42
|
trusted = ingress.trusted_context(
|
|
40
43
|
source_kind=source_kind,
|
|
@@ -60,6 +63,11 @@ async def _kernel_submit(
|
|
|
60
63
|
**({correlation_kwarg: correlation_ref} if correlation_ref else {}),
|
|
61
64
|
**({"runtime_options": runtime_options} if runtime_options else {}),
|
|
62
65
|
)
|
|
66
|
+
owner = identity_owner_payload(invocation_identity)
|
|
67
|
+
if owner:
|
|
68
|
+
command = command.model_copy(
|
|
69
|
+
update={"payload": {**dict(command.payload), "invocation_identity": owner}}
|
|
70
|
+
)
|
|
63
71
|
receipt = await ingress.submit_command(command, permit=trusted.permit)
|
|
64
72
|
return receipt, trusted
|
|
65
73
|
|