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
ksadk/cli/cmd_openclaw.py
CHANGED
|
@@ -46,6 +46,7 @@ from ksadk.cli.error_utils import abort_with_cli_error, remote_error, resolution
|
|
|
46
46
|
from ksadk.cli.model_catalog import fetch_provider_model_catalog, find_model_in_catalog
|
|
47
47
|
from ksadk.cli.network_options import build_network_payload, network_cli_kwargs, network_options
|
|
48
48
|
from ksadk.cli.resource_common import (
|
|
49
|
+
build_component_config,
|
|
49
50
|
CONTEXT_SETTINGS,
|
|
50
51
|
ResourceActionDescriptor,
|
|
51
52
|
ResourceDescriptor,
|
|
@@ -271,6 +272,7 @@ def _build_openclaw_update_payload(
|
|
|
271
272
|
network_payload: dict[str, Any] | None,
|
|
272
273
|
include_env: bool,
|
|
273
274
|
include_storage: bool,
|
|
275
|
+
component_config: dict[str, Any] | None = None,
|
|
274
276
|
):
|
|
275
277
|
"""构建已有 OpenClaw 的最小更新请求,默认保留服务端现有配置。"""
|
|
276
278
|
update_payload: dict[str, Any] = {
|
|
@@ -290,6 +292,8 @@ def _build_openclaw_update_payload(
|
|
|
290
292
|
update_payload["storage"] = storage_config
|
|
291
293
|
if network_payload:
|
|
292
294
|
update_payload["network"] = network_payload
|
|
295
|
+
if component_config:
|
|
296
|
+
update_payload["component_config"] = component_config
|
|
293
297
|
return update_payload
|
|
294
298
|
|
|
295
299
|
|
|
@@ -430,7 +434,7 @@ def _strip_provider_prefix(provider_id: str, model_id: str) -> str:
|
|
|
430
434
|
def _default_openclaw_model_inputs(provider_id: str, model_id: str) -> list[str]:
|
|
431
435
|
if str(provider_id or "").strip().lower() == "ksyun" and str(
|
|
432
436
|
model_id or ""
|
|
433
|
-
).strip().lower() in {"
|
|
437
|
+
).strip().lower() in {"deepseek-v4.1-flash", "glm-5.3-flash"}:
|
|
434
438
|
return ["text"]
|
|
435
439
|
return ["text", "image"]
|
|
436
440
|
|
|
@@ -2952,6 +2956,9 @@ def channel_doctor(
|
|
|
2952
2956
|
"--storage-mount-path", default=None, help="PVC 挂载目录(默认: /home/node/.openclaw)"
|
|
2953
2957
|
)
|
|
2954
2958
|
@click.option("--no-storage", is_flag=True, help="禁用默认 PVC 挂载")
|
|
2959
|
+
@click.option("--skill-space-id", "skill_space_ids", multiple=True, help="Skill 中心空间 ID(可重复传入多个)")
|
|
2960
|
+
@click.option("--sandbox-template-id", default=None, help="沙箱模板 ID(启用 E2B 沙箱执行 execute_skills)")
|
|
2961
|
+
@click.option("--sandbox-api-key", default=None, help="沙箱 API Key(可选,默认从服务端注入)")
|
|
2955
2962
|
@click.option(
|
|
2956
2963
|
"--agent-id",
|
|
2957
2964
|
"agent_id_opt",
|
|
@@ -2987,6 +2994,9 @@ def deploy(
|
|
|
2987
2994
|
subnet_id: Optional[str],
|
|
2988
2995
|
security_group_id: Optional[str],
|
|
2989
2996
|
availability_zone: Optional[str],
|
|
2997
|
+
skill_space_ids: tuple[str, ...],
|
|
2998
|
+
sandbox_template_id: Optional[str],
|
|
2999
|
+
sandbox_api_key: Optional[str],
|
|
2990
3000
|
dry_run: bool,
|
|
2991
3001
|
):
|
|
2992
3002
|
"""部署 OpenClaw 到云端
|
|
@@ -3052,6 +3062,9 @@ def deploy(
|
|
|
3052
3062
|
mem0_region=mem0_region,
|
|
3053
3063
|
extra_env=extra_env,
|
|
3054
3064
|
env_file=env_file,
|
|
3065
|
+
skill_space_ids=skill_space_ids,
|
|
3066
|
+
sandbox_template_id=sandbox_template_id,
|
|
3067
|
+
sandbox_api_key=sandbox_api_key,
|
|
3055
3068
|
storage_size_gi=storage_size_gi,
|
|
3056
3069
|
storage_mount_path=storage_mount_path,
|
|
3057
3070
|
no_storage=no_storage,
|
|
@@ -3101,6 +3114,9 @@ async def _deploy_openclaw(
|
|
|
3101
3114
|
subnet_id: Optional[str] = None,
|
|
3102
3115
|
security_group_id: Optional[str] = None,
|
|
3103
3116
|
availability_zone: Optional[str] = None,
|
|
3117
|
+
skill_space_ids: tuple[str, ...] = (),
|
|
3118
|
+
sandbox_template_id: str | None = None,
|
|
3119
|
+
sandbox_api_key: str | None = None,
|
|
3104
3120
|
dry_run: bool,
|
|
3105
3121
|
):
|
|
3106
3122
|
"""异步部署 OpenClaw"""
|
|
@@ -3233,6 +3249,13 @@ async def _deploy_openclaw(
|
|
|
3233
3249
|
"auth_type": "None",
|
|
3234
3250
|
"inbound_identity_auth": "None",
|
|
3235
3251
|
}
|
|
3252
|
+
component_config = build_component_config(
|
|
3253
|
+
skill_space_ids=skill_space_ids,
|
|
3254
|
+
sandbox_template_id=sandbox_template_id,
|
|
3255
|
+
sandbox_api_key=sandbox_api_key,
|
|
3256
|
+
)
|
|
3257
|
+
if component_config:
|
|
3258
|
+
request_data["component_config"] = component_config
|
|
3236
3259
|
if memory_config:
|
|
3237
3260
|
request_data["memory_config"] = memory_config
|
|
3238
3261
|
storage_config = build_storage_config(
|
|
@@ -3307,6 +3330,7 @@ async def _deploy_openclaw(
|
|
|
3307
3330
|
network_payload=network_payload,
|
|
3308
3331
|
include_env=include_env_on_update,
|
|
3309
3332
|
include_storage=include_storage_on_update,
|
|
3333
|
+
component_config=component_config,
|
|
3310
3334
|
)
|
|
3311
3335
|
await client.update_agent(existing_agent_id, update_payload)
|
|
3312
3336
|
else:
|
|
@@ -3364,6 +3388,7 @@ async def _deploy_openclaw(
|
|
|
3364
3388
|
network_payload=network_payload,
|
|
3365
3389
|
include_env=include_env_on_update,
|
|
3366
3390
|
include_storage=include_storage_on_update,
|
|
3391
|
+
component_config=component_config,
|
|
3367
3392
|
)
|
|
3368
3393
|
res = await client.update_agent(existing_agent_id, update_payload)
|
|
3369
3394
|
agent_id = existing_agent_id
|
ksadk/cli/cmd_plugin.py
CHANGED
|
@@ -41,10 +41,9 @@ def _codex_home() -> Path:
|
|
|
41
41
|
|
|
42
42
|
|
|
43
43
|
def _dsh_home() -> Path:
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
return Path.cwd() / ".agentkit" / "dsh-home"
|
|
44
|
+
from ksadk.plugins.dsh_home import studio_dsh_home
|
|
45
|
+
|
|
46
|
+
return studio_dsh_home(Path.cwd())
|
|
48
47
|
|
|
49
48
|
|
|
50
49
|
def _dsh_command() -> tuple[str, ...] | None:
|
|
@@ -125,14 +124,24 @@ def _call_codex(operation):
|
|
|
125
124
|
)
|
|
126
125
|
|
|
127
126
|
|
|
128
|
-
def _call_dsh(operation):
|
|
127
|
+
def _call_dsh(operation, *, write: bool = False):
|
|
129
128
|
"""Run one bounded DSH Profile lifecycle request from the synchronous CLI."""
|
|
130
129
|
|
|
131
130
|
from ksadk.plugins.bridges.dsh import DshProfilePluginBridge
|
|
131
|
+
from ksadk.plugins.dsh_home import (
|
|
132
|
+
DshHomeVersionError,
|
|
133
|
+
dsh_home_diagnostic,
|
|
134
|
+
prepare_studio_dsh_home,
|
|
135
|
+
)
|
|
132
136
|
|
|
133
137
|
try:
|
|
138
|
+
home = _dsh_home()
|
|
139
|
+
# The bridge creates Profile lock directories even for catalog reads.
|
|
140
|
+
# Fence a fresh home first; an existing legacy catalog remains readable.
|
|
141
|
+
if write or dsh_home_diagnostic(home)["status"] == "new":
|
|
142
|
+
prepare_studio_dsh_home(home)
|
|
134
143
|
with DshProfilePluginBridge(
|
|
135
|
-
dsh_home=
|
|
144
|
+
dsh_home=home,
|
|
136
145
|
profile=_dsh_profile(),
|
|
137
146
|
dsh_command=_dsh_command(),
|
|
138
147
|
) as bridge:
|
|
@@ -140,7 +149,30 @@ def _call_dsh(operation):
|
|
|
140
149
|
except (KeyboardInterrupt, SystemExit):
|
|
141
150
|
raise
|
|
142
151
|
except Exception as err:
|
|
152
|
+
if isinstance(err, DshHomeVersionError):
|
|
153
|
+
abort_with_cli_error(
|
|
154
|
+
CLIError(
|
|
155
|
+
code=err.code,
|
|
156
|
+
message=f"DSH 目录版本未经验证。{err.diagnostic['recovery']}",
|
|
157
|
+
exit_code=EXIT_CODE_VALIDATION,
|
|
158
|
+
details=err.diagnostic,
|
|
159
|
+
),
|
|
160
|
+
context="Plugin",
|
|
161
|
+
)
|
|
143
162
|
name = type(err).__name__
|
|
163
|
+
if name == "DshToolchainUnavailableError":
|
|
164
|
+
abort_with_cli_error(
|
|
165
|
+
CLIError(
|
|
166
|
+
code="dsh_toolchain_unavailable",
|
|
167
|
+
message="DSH 插件开发工具链不可用",
|
|
168
|
+
exit_code=EXIT_CODE_VALIDATION,
|
|
169
|
+
details={
|
|
170
|
+
"hint": "运行 `agentengine plugin toolchain install` 安装受管理 DSH 工具链",
|
|
171
|
+
"reason": str(err),
|
|
172
|
+
},
|
|
173
|
+
),
|
|
174
|
+
context="Plugin",
|
|
175
|
+
)
|
|
144
176
|
code = (
|
|
145
177
|
"dsh_plugin_not_found"
|
|
146
178
|
if name == "DshPluginNotFoundError"
|
|
@@ -165,6 +197,7 @@ def _call_dsh(operation):
|
|
|
165
197
|
exit_code=(
|
|
166
198
|
EXIT_CODE_RESOLUTION if code == "dsh_plugin_not_found" else EXIT_CODE_VALIDATION
|
|
167
199
|
),
|
|
200
|
+
details={"reason": str(err)},
|
|
168
201
|
),
|
|
169
202
|
context="Plugin",
|
|
170
203
|
)
|
|
@@ -173,6 +206,8 @@ def _call_dsh(operation):
|
|
|
173
206
|
def _call_dsh_developer(operation):
|
|
174
207
|
"""Run one bounded standard DSH bundle development operation."""
|
|
175
208
|
|
|
209
|
+
import re
|
|
210
|
+
|
|
176
211
|
from ksadk.plugins.dsh_toolchain import (
|
|
177
212
|
DshPluginPackError,
|
|
178
213
|
DshPluginSourceError,
|
|
@@ -182,8 +217,28 @@ def _call_dsh_developer(operation):
|
|
|
182
217
|
DshToolchainVersionMismatchError,
|
|
183
218
|
)
|
|
184
219
|
|
|
220
|
+
_VERSION_PAIR = re.compile(
|
|
221
|
+
r"expected (?:pnpm|DSH) (?P<expected>[0-9A-Za-z.\-]+), got (?P<actual>[0-9A-Za-z.\-]+)"
|
|
222
|
+
)
|
|
223
|
+
|
|
224
|
+
def _toolchain_error_details(err: Exception) -> dict:
|
|
225
|
+
details: dict = {}
|
|
226
|
+
if isinstance(err, DshToolchainVersionMismatchError):
|
|
227
|
+
match = _VERSION_PAIR.search(str(err))
|
|
228
|
+
if match:
|
|
229
|
+
details["expected"] = match.group("expected")
|
|
230
|
+
details["actual"] = match.group("actual")
|
|
231
|
+
details["hint"] = (
|
|
232
|
+
"使用 corepack 启用固定版本 pnpm(corepack enable 后重试),"
|
|
233
|
+
"或安装 pnpm 11.7.0 并设置 AGENTENGINE_PNPM_BIN 指向该可执行文件"
|
|
234
|
+
)
|
|
235
|
+
elif isinstance(err, DshToolchainUnavailableError):
|
|
236
|
+
details["hint"] = "运行 `agentengine plugin toolchain install` 安装受管理 DSH 工具链"
|
|
237
|
+
return details
|
|
238
|
+
|
|
185
239
|
try:
|
|
186
240
|
return operation()
|
|
241
|
+
|
|
187
242
|
except (KeyboardInterrupt, SystemExit):
|
|
188
243
|
raise
|
|
189
244
|
except Exception as err:
|
|
@@ -211,6 +266,7 @@ def _call_dsh_developer(operation):
|
|
|
211
266
|
stage = getattr(err, "stage", None)
|
|
212
267
|
if isinstance(stage, str) and stage:
|
|
213
268
|
details["stage"] = stage
|
|
269
|
+
details.update(_toolchain_error_details(err))
|
|
214
270
|
diagnostic = getattr(err, "diagnostic", None)
|
|
215
271
|
if isinstance(err, DshPluginSourceError):
|
|
216
272
|
diagnostic = str(err)
|
|
@@ -533,7 +589,7 @@ def install_dsh_plugin(source: str, accept_host_permissions: bool) -> None:
|
|
|
533
589
|
context="Plugin",
|
|
534
590
|
)
|
|
535
591
|
host, item = _call_dsh(
|
|
536
|
-
lambda bridge: bridge.install_plugin(source, accept_host_permissions=True)
|
|
592
|
+
lambda bridge: bridge.install_plugin(source, accept_host_permissions=True), write=True
|
|
537
593
|
)
|
|
538
594
|
payload = {
|
|
539
595
|
"item": _dsh_inventory_payload(item),
|
|
@@ -550,7 +606,7 @@ def install_dsh_plugin(source: str, accept_host_permissions: bool) -> None:
|
|
|
550
606
|
def enable_dsh_plugin(plugin_name: str) -> None:
|
|
551
607
|
"""在 DSH Profile 中启用已安装的 bundle。"""
|
|
552
608
|
|
|
553
|
-
host, item = _call_dsh(lambda bridge: bridge.set_enabled(plugin_name, enabled=True))
|
|
609
|
+
host, item = _call_dsh(lambda bridge: bridge.set_enabled(plugin_name, enabled=True), write=True)
|
|
554
610
|
payload = {
|
|
555
611
|
"item": _dsh_inventory_payload(item),
|
|
556
612
|
"host": {"id": host.host_id, "version": host.version, "available": True},
|
|
@@ -566,7 +622,9 @@ def enable_dsh_plugin(plugin_name: str) -> None:
|
|
|
566
622
|
def disable_dsh_plugin(plugin_name: str) -> None:
|
|
567
623
|
"""从 DSH Profile 组合中停用 bundle,但保留已安装包。"""
|
|
568
624
|
|
|
569
|
-
host, item = _call_dsh(
|
|
625
|
+
host, item = _call_dsh(
|
|
626
|
+
lambda bridge: bridge.set_enabled(plugin_name, enabled=False), write=True
|
|
627
|
+
)
|
|
570
628
|
payload = {
|
|
571
629
|
"item": _dsh_inventory_payload(item),
|
|
572
630
|
"host": {"id": host.host_id, "version": host.version, "available": True},
|
|
@@ -597,7 +655,7 @@ def update_dsh_plugin(plugin_name: str, accept_host_permissions: bool) -> None:
|
|
|
597
655
|
context="Plugin",
|
|
598
656
|
)
|
|
599
657
|
host, item = _call_dsh(
|
|
600
|
-
lambda bridge: bridge.update_plugin(plugin_name, accept_host_permissions=True)
|
|
658
|
+
lambda bridge: bridge.update_plugin(plugin_name, accept_host_permissions=True), write=True
|
|
601
659
|
)
|
|
602
660
|
payload = {
|
|
603
661
|
"item": _dsh_inventory_payload(item),
|
|
@@ -614,7 +672,7 @@ def update_dsh_plugin(plugin_name: str, accept_host_permissions: bool) -> None:
|
|
|
614
672
|
def uninstall_dsh_plugin(plugin_name: str) -> None:
|
|
615
673
|
"""从 DSH Profile 卸载一个 bundle。"""
|
|
616
674
|
|
|
617
|
-
host, _ = _call_dsh(lambda bridge: bridge.uninstall_plugin(plugin_name))
|
|
675
|
+
host, _ = _call_dsh(lambda bridge: bridge.uninstall_plugin(plugin_name), write=True)
|
|
618
676
|
payload = {
|
|
619
677
|
"ecosystem": "dsh",
|
|
620
678
|
"integrationMode": "bridged",
|
|
@@ -634,7 +692,7 @@ def uninstall_dsh_plugin(plugin_name: str) -> None:
|
|
|
634
692
|
def dsh_profile_info() -> None:
|
|
635
693
|
"""预检并显示当前 DSH Profile 的无 Secret 配置摘要。"""
|
|
636
694
|
|
|
637
|
-
host, projection = _call_dsh(lambda bridge: bridge.project_profile())
|
|
695
|
+
host, projection = _call_dsh(lambda bridge: bridge.project_profile(), write=True)
|
|
638
696
|
payload = {
|
|
639
697
|
"profile": projection.model_dump(mode="json", by_alias=True),
|
|
640
698
|
"host": {"id": host.host_id, "version": host.version, "available": True},
|
ksadk/cli/cmd_studio.py
CHANGED
|
@@ -5,6 +5,9 @@ from __future__ import annotations
|
|
|
5
5
|
import logging
|
|
6
6
|
import os
|
|
7
7
|
import secrets
|
|
8
|
+
import socket
|
|
9
|
+
import threading
|
|
10
|
+
import time
|
|
8
11
|
import webbrowser
|
|
9
12
|
from pathlib import Path
|
|
10
13
|
|
|
@@ -13,6 +16,8 @@ import uvicorn
|
|
|
13
16
|
|
|
14
17
|
from ksadk.cli.env_options import load_env_file
|
|
15
18
|
from ksadk.cli.ui import print_info, print_kv, print_success, print_title
|
|
19
|
+
from ksadk.studio.api import create_studio_app
|
|
20
|
+
from ksadk.studio.service import StudioService
|
|
16
21
|
|
|
17
22
|
# veadk 风格:日志行带模块名与行号(filename:lineno),本地排障时能直接定位代码。
|
|
18
23
|
_LOG_FORMAT = "%(asctime)s %(levelname)s %(name)s %(filename)s:%(lineno)d %(message)s"
|
|
@@ -44,8 +49,6 @@ _STUDIO_LOG_CONFIG = {
|
|
|
44
49
|
"root": {"handlers": ["default"], "level": "INFO"},
|
|
45
50
|
}
|
|
46
51
|
|
|
47
|
-
from ksadk.studio.api import create_studio_app
|
|
48
|
-
from ksadk.studio.service import StudioService
|
|
49
52
|
|
|
50
53
|
# 模型环境变量白名单。OPENAI_BASE_URL 与 OPENAI_API_BASE 互为别名,两者都接受;
|
|
51
54
|
# 加载时做别名归一(见 studio()),运行时统一 OPENAI_BASE_URL 优先(与 cmd_config/cmd_model
|
|
@@ -56,12 +59,12 @@ _MODEL_ENV_KEYS = (
|
|
|
56
59
|
"OPENAI_API_KEY",
|
|
57
60
|
"OPENAI_MODEL_NAME",
|
|
58
61
|
)
|
|
59
|
-
#
|
|
60
|
-
#
|
|
61
|
-
# never become browser settings, workspace files, or runtime environment.
|
|
62
|
+
# Explicit env-file credentials are process-only overrides. They are never
|
|
63
|
+
# copied into the workspace store or exposed as browser settings.
|
|
62
64
|
_CLOUD_CONTROL_ENV_KEYS = (
|
|
63
65
|
"KSYUN_ACCESS_KEY",
|
|
64
66
|
"KSYUN_SECRET_KEY",
|
|
67
|
+
"KSYUN_ACCOUNT_ID",
|
|
65
68
|
"KSYUN_REGION",
|
|
66
69
|
"AGENTENGINE_REGION",
|
|
67
70
|
"AGENTENGINE_SERVER_URL",
|
|
@@ -71,11 +74,30 @@ _CLOUD_CONTROL_ENV_KEYS = (
|
|
|
71
74
|
"KS3_ACCESS_KEY",
|
|
72
75
|
"KS3_SECRET_KEY",
|
|
73
76
|
)
|
|
74
|
-
|
|
77
|
+
_WEB_SEARCH_ENV_KEYS = (
|
|
78
|
+
"KSADK_WEB_SEARCH_PROVIDER",
|
|
79
|
+
"KSADK_WEB_SEARCH_API_KEY",
|
|
80
|
+
"KSADK_WEB_SEARCH_BASE_URL",
|
|
81
|
+
"KSADK_WEB_SEARCH_SCOPE",
|
|
82
|
+
)
|
|
83
|
+
_STUDIO_ENV_FILE_KEYS = (*_MODEL_ENV_KEYS, *_CLOUD_CONTROL_ENV_KEYS, *_WEB_SEARCH_ENV_KEYS)
|
|
75
84
|
# 别名归一:两者任一有值时,把另一个也设上,保证下游无论读哪个都命中。
|
|
76
85
|
_MODEL_BASE_URL_ALIASES = ("OPENAI_BASE_URL", "OPENAI_API_BASE")
|
|
77
86
|
|
|
78
87
|
|
|
88
|
+
def _open_browser_when_ready(url: str, port: int, *, timeout: float = 90.0) -> None:
|
|
89
|
+
"""Open Studio only after Uvicorn accepts loopback connections."""
|
|
90
|
+
|
|
91
|
+
deadline = time.monotonic() + timeout
|
|
92
|
+
while time.monotonic() < deadline:
|
|
93
|
+
try:
|
|
94
|
+
with socket.create_connection(("127.0.0.1", port), timeout=0.5):
|
|
95
|
+
webbrowser.open(url)
|
|
96
|
+
return
|
|
97
|
+
except OSError:
|
|
98
|
+
time.sleep(0.2)
|
|
99
|
+
|
|
100
|
+
|
|
79
101
|
@click.command(context_settings=dict(help_option_names=["-h", "--help"]))
|
|
80
102
|
@click.argument("workspace", default=".", type=click.Path())
|
|
81
103
|
@click.option("--port", "-p", default=8080, type=click.IntRange(1, 65535))
|
|
@@ -84,7 +106,7 @@ _MODEL_BASE_URL_ALIASES = ("OPENAI_BASE_URL", "OPENAI_API_BASE")
|
|
|
84
106
|
"--env-file",
|
|
85
107
|
type=click.Path(exists=True, dir_okay=False),
|
|
86
108
|
help=(
|
|
87
|
-
"
|
|
109
|
+
"本地模型、云端控制与搜索环境文件;只读取允许的 OPENAI/KSYUN/KS3/KSADK_WEB_SEARCH "
|
|
88
110
|
"字段,且仅保留在 Studio 进程"
|
|
89
111
|
),
|
|
90
112
|
)
|
|
@@ -112,6 +134,7 @@ def studio(
|
|
|
112
134
|
managed_keys = (*_STUDIO_ENV_FILE_KEYS, "KSADK_CODEX_USE_PROXY")
|
|
113
135
|
previous = {key: os.environ.get(key) for key in managed_keys}
|
|
114
136
|
previously_present = {key for key in managed_keys if key in os.environ}
|
|
137
|
+
configuration_overrides: dict[str, str] = {}
|
|
115
138
|
try:
|
|
116
139
|
if env_file:
|
|
117
140
|
try:
|
|
@@ -120,27 +143,36 @@ def studio(
|
|
|
120
143
|
raise click.ClickException(str(exc)) from exc
|
|
121
144
|
loaded_models = 0
|
|
122
145
|
loaded_cloud_control = 0
|
|
146
|
+
loaded_search = 0
|
|
123
147
|
for key, value in values.items():
|
|
124
148
|
if key not in _STUDIO_ENV_FILE_KEYS or not value:
|
|
125
149
|
continue
|
|
126
150
|
if key in _MODEL_ENV_KEYS:
|
|
127
151
|
loaded_models += 1
|
|
152
|
+
elif key in _WEB_SEARCH_ENV_KEYS:
|
|
153
|
+
loaded_search += 1
|
|
128
154
|
else:
|
|
129
155
|
loaded_cloud_control += 1
|
|
130
156
|
# An explicit --env-file is the operator's selected cloud
|
|
131
|
-
# identity
|
|
132
|
-
#
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
os.environ[key] = value
|
|
157
|
+
# identity and model configuration; it overrides inherited
|
|
158
|
+
# and saved values consistently for this process.
|
|
159
|
+
os.environ[key] = value
|
|
160
|
+
configuration_overrides[key] = os.environ[key]
|
|
136
161
|
# 别名归一(方案 §2.4 第 5 点):OPENAI_BASE_URL 与 OPENAI_API_BASE 互为别名。
|
|
137
162
|
# 加载后任一有值则把另一个也设上,保证下游无论读哪个都命中;OPENAI_BASE_URL 优先。
|
|
138
|
-
resolved_base_url =
|
|
139
|
-
"
|
|
163
|
+
resolved_base_url = (
|
|
164
|
+
configuration_overrides.get("OPENAI_BASE_URL")
|
|
165
|
+
or configuration_overrides.get("OPENAI_API_BASE")
|
|
166
|
+
or os.environ.get("OPENAI_BASE_URL")
|
|
167
|
+
or os.environ.get("OPENAI_API_BASE")
|
|
140
168
|
)
|
|
141
169
|
if resolved_base_url:
|
|
142
170
|
os.environ["OPENAI_BASE_URL"] = resolved_base_url
|
|
143
171
|
os.environ["OPENAI_API_BASE"] = resolved_base_url
|
|
172
|
+
if any(key in configuration_overrides for key in _MODEL_BASE_URL_ALIASES):
|
|
173
|
+
configuration_overrides.update(
|
|
174
|
+
dict.fromkeys(_MODEL_BASE_URL_ALIASES, resolved_base_url)
|
|
175
|
+
)
|
|
144
176
|
# base_url 至少算一次,避免显示 0/4 误导。
|
|
145
177
|
loaded_models = max(loaded_models, 2)
|
|
146
178
|
print_kv(
|
|
@@ -154,15 +186,23 @@ def studio(
|
|
|
154
186
|
f"{loaded_cloud_control}/{len(_CLOUD_CONTROL_ENV_KEYS)} 个字段"
|
|
155
187
|
"(仅本地进程)",
|
|
156
188
|
)
|
|
189
|
+
if loaded_search:
|
|
190
|
+
print_kv("联网搜索", f"已安全加载 {loaded_search} 个字段(仅本地进程)")
|
|
157
191
|
if codex_proxy == "forced":
|
|
158
192
|
os.environ["KSADK_CODEX_USE_PROXY"] = "1"
|
|
159
193
|
elif codex_proxy == "direct":
|
|
160
194
|
os.environ["KSADK_CODEX_USE_PROXY"] = "0"
|
|
161
195
|
elif codex_proxy == "auto":
|
|
162
196
|
os.environ.pop("KSADK_CODEX_USE_PROXY", None)
|
|
197
|
+
if codex_proxy != "inherit":
|
|
198
|
+
configuration_overrides["KSADK_CODEX_USE_PROXY"] = {
|
|
199
|
+
"forced": "1",
|
|
200
|
+
"direct": "0",
|
|
201
|
+
"auto": "",
|
|
202
|
+
}[codex_proxy]
|
|
163
203
|
session_token = os.environ.get("KSADK_STUDIO_SESSION_TOKEN") or secrets.token_urlsafe(32)
|
|
164
204
|
csrf_token = secrets.token_urlsafe(24)
|
|
165
|
-
service = StudioService(root)
|
|
205
|
+
service = StudioService(root, configuration_overrides=configuration_overrides)
|
|
166
206
|
app = create_studio_app(
|
|
167
207
|
root,
|
|
168
208
|
service=service,
|
|
@@ -179,7 +219,12 @@ def studio(
|
|
|
179
219
|
print_success("构建与运行均在本地执行")
|
|
180
220
|
print_info("按 Ctrl+C 停止")
|
|
181
221
|
if not no_open:
|
|
182
|
-
|
|
222
|
+
threading.Thread(
|
|
223
|
+
target=_open_browser_when_ready,
|
|
224
|
+
args=(launch_url, port),
|
|
225
|
+
daemon=True,
|
|
226
|
+
name="studio-browser-launcher",
|
|
227
|
+
).start()
|
|
183
228
|
# 业务日志(ksadk.*)走 root handler,同样带 filename:lineno。
|
|
184
229
|
logging.basicConfig(level=logging.INFO, format=_LOG_FORMAT)
|
|
185
230
|
uvicorn.run(
|
|
@@ -187,6 +232,9 @@ def studio(
|
|
|
187
232
|
host="127.0.0.1",
|
|
188
233
|
port=port,
|
|
189
234
|
log_level="info",
|
|
235
|
+
# Lifespan cleanup releases local authority only after HTTP draining.
|
|
236
|
+
# Bound long-lived/stalled streams so a restart can acquire that authority.
|
|
237
|
+
timeout_graceful_shutdown=10,
|
|
190
238
|
# Access logging stays enabled through the Studio log config while
|
|
191
239
|
# retaining filename/line-number context for both API and business
|
|
192
240
|
# logs. This preserves master's observability intent and the
|
ksadk/cli/openclaw_env.py
CHANGED
|
@@ -248,7 +248,7 @@ def _build_openclaw_env_vars(
|
|
|
248
248
|
api_key = model_api_key or _resolve_env(
|
|
249
249
|
"OPENCLAW_MODEL_API_KEY", "OPENAI_API_KEY", "LLM_API_KEY", "MODEL_API_KEY"
|
|
250
250
|
)
|
|
251
|
-
model = model_preference or "
|
|
251
|
+
model = model_preference or "deepseek-v4.1-flash"
|
|
252
252
|
explicit_provider_id = model_provider_id or _resolve_env("OPENCLAW_MODEL_PROVIDER_ID")
|
|
253
253
|
inferred_provider_id = explicit_provider_id
|
|
254
254
|
if not inferred_provider_id and model and "/" in model:
|
ksadk/cli/resource_common.py
CHANGED
|
@@ -26,6 +26,32 @@ CONTEXT_SETTINGS = dict(help_option_names=["-h", "--help"])
|
|
|
26
26
|
_CONSOLE = get_console()
|
|
27
27
|
|
|
28
28
|
|
|
29
|
+
def build_component_config(
|
|
30
|
+
*,
|
|
31
|
+
skill_space_ids: Sequence[str] = (),
|
|
32
|
+
sandbox_template_id: str | None = None,
|
|
33
|
+
sandbox_api_key: str | None = None,
|
|
34
|
+
) -> dict[str, dict[str, str]] | None:
|
|
35
|
+
"""Build component_config payload for skill center + sandbox injection.
|
|
36
|
+
|
|
37
|
+
When the CLI passes this dict in the deploy/update payload, the server-side
|
|
38
|
+
build_component_runtime_env injects SKILL_SPACE_ID, KSADK_SKILL_RUNTIME_BACKEND,
|
|
39
|
+
KSADK_SANDBOX_* and E2B_* environment variables into the runtime pod.
|
|
40
|
+
"""
|
|
41
|
+
# Keys MUST be PascalCase to match the server-side ComponentConfigSchema
|
|
42
|
+
# (Pydantic v2 is case-sensitive; snake_case keys are silently ignored).
|
|
43
|
+
component_config: dict[str, dict[str, str]] = {}
|
|
44
|
+
resolved = [sid.strip() for sid in skill_space_ids if sid and sid.strip()]
|
|
45
|
+
if resolved:
|
|
46
|
+
component_config["SkillWorkspace"] = {"Id": ",".join(resolved)}
|
|
47
|
+
if sandbox_template_id:
|
|
48
|
+
sandbox: dict[str, str] = {"Id": sandbox_template_id}
|
|
49
|
+
if sandbox_api_key:
|
|
50
|
+
sandbox["ApiKey"] = sandbox_api_key
|
|
51
|
+
component_config["Sandbox"] = sandbox
|
|
52
|
+
return component_config or None
|
|
53
|
+
|
|
54
|
+
|
|
29
55
|
@dataclass(frozen=True)
|
|
30
56
|
class ResourceActionDescriptor:
|
|
31
57
|
"""Explicit resource action metadata shared by help, hints and JSON output."""
|
ksadk/codex/client.py
CHANGED
|
@@ -720,6 +720,9 @@ class AsyncCodexClient(CodexClient):
|
|
|
720
720
|
# Full access authorizes tool execution, never OAuth login or arbitrary
|
|
721
721
|
# server forms. Only Codex's native, empty tool-approval form qualifies.
|
|
722
722
|
schema = raw.get("requestedSchema") or {}
|
|
723
|
+
# MCP 工具调用不属于风险操作:无论沙箱/审批档位如何,codex 的
|
|
724
|
+
# mcp_tool_call 审批 elicitation(原生空表单)一律自动放行;真正的
|
|
725
|
+
# 风险操作(shell 命令/文件改动审批、真实表单 elicitation)不受影响。
|
|
723
726
|
if (
|
|
724
727
|
method == "mcpServer/elicitation/request"
|
|
725
728
|
and request_queue is not None
|
|
@@ -727,8 +730,6 @@ class AsyncCodexClient(CodexClient):
|
|
|
727
730
|
and metadata.get("codex_approval_kind") == "mcp_tool_call"
|
|
728
731
|
and raw.get("mode") == "form"
|
|
729
732
|
and schema == {"type": "object", "properties": {}}
|
|
730
|
-
and policy.get("sandbox") == "full-access"
|
|
731
|
-
and policy.get("approval_mode") == "deny_all"
|
|
732
733
|
):
|
|
733
734
|
return {"action": "accept", "content": {}}
|
|
734
735
|
interaction_id = str(
|