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/studio/api_contracts.py
CHANGED
|
@@ -30,6 +30,12 @@ class WorkspaceOpenRequest(ContractModel):
|
|
|
30
30
|
create: bool = False
|
|
31
31
|
|
|
32
32
|
|
|
33
|
+
class LinkedDirectoryRequest(ContractModel):
|
|
34
|
+
path: str
|
|
35
|
+
mode: Literal["read", "write"] = "read"
|
|
36
|
+
label: str | None = Field(default=None, max_length=128)
|
|
37
|
+
|
|
38
|
+
|
|
33
39
|
class CreateAgentRequest(ContractModel):
|
|
34
40
|
id: str = Field(pattern=r"^[a-z][a-z0-9-]{2,62}$")
|
|
35
41
|
name: str = Field(min_length=1, max_length=128)
|
|
@@ -80,7 +86,7 @@ class MessageInput(ContractModel):
|
|
|
80
86
|
class QuickAuthoringRequest(ContractModel):
|
|
81
87
|
name: str = Field(min_length=1, max_length=128)
|
|
82
88
|
slug: str | None = Field(default=None, min_length=1, max_length=63)
|
|
83
|
-
runtime_type: Literal["codex", "adk", "langgraph", "plugin"]
|
|
89
|
+
runtime_type: Literal["harness", "codex", "adk", "langgraph", "plugin"]
|
|
84
90
|
template: Literal["blank", "research"] = "blank"
|
|
85
91
|
description: str = Field(default="", max_length=1024)
|
|
86
92
|
spec: AgentSpec | None = None
|
|
@@ -100,7 +106,7 @@ class ConversationAuthoringRequest(ContractModel):
|
|
|
100
106
|
# Runtime is a Studio-owned deployment choice. The authoring model only
|
|
101
107
|
# supplies semantic intent and must not choose an incompatible framework
|
|
102
108
|
# source contract on its own.
|
|
103
|
-
runtime_type: Literal["codex", "adk", "langgraph"] = "codex"
|
|
109
|
+
runtime_type: Literal["harness", "codex", "adk", "langgraph"] = "codex"
|
|
104
110
|
agent_model_profile_ids: list[str] = Field(default_factory=list, max_length=100)
|
|
105
111
|
agent_default_model_profile_id: str | None = Field(
|
|
106
112
|
default=None,
|
|
@@ -38,6 +38,12 @@ from ksadk.plugins.codex_manifest import (
|
|
|
38
38
|
CodexPluginSourceCoordinate,
|
|
39
39
|
snapshot_installed_codex_plugin,
|
|
40
40
|
)
|
|
41
|
+
from ksadk.plugins.dsh_home import (
|
|
42
|
+
DshHomeVersionError,
|
|
43
|
+
dsh_home_diagnostic,
|
|
44
|
+
prepare_studio_dsh_home,
|
|
45
|
+
studio_dsh_home,
|
|
46
|
+
)
|
|
41
47
|
from ksadk.plugins.dsh_toolchain import DshToolchainError, DshToolchainManager
|
|
42
48
|
from ksadk.plugins.host import PluginHostError
|
|
43
49
|
from ksadk.studio.codex_plugin_store import (
|
|
@@ -98,13 +104,14 @@ def _studio_codex_home(studio: StudioService) -> tuple[Path, str]:
|
|
|
98
104
|
return studio.workspace.root / ".agentkit" / "codex-home", "workspace-isolated"
|
|
99
105
|
|
|
100
106
|
|
|
107
|
+
def _active_studio(studio):
|
|
108
|
+
"""Resolve the active runtime while retaining compatibility with direct test fixtures."""
|
|
109
|
+
return getattr(studio, "active", studio)
|
|
110
|
+
|
|
111
|
+
|
|
101
112
|
def _studio_dsh_options(studio: StudioService) -> tuple[Path, str, tuple[str, ...] | None, str]:
|
|
102
113
|
configured_home = os.environ.get("KSADK_DSH_HOME", "").strip()
|
|
103
|
-
home = (
|
|
104
|
-
Path(configured_home).expanduser()
|
|
105
|
-
if configured_home
|
|
106
|
-
else studio.workspace.root / ".agentkit" / "dsh-home"
|
|
107
|
-
)
|
|
114
|
+
home = studio_dsh_home(studio.workspace.root)
|
|
108
115
|
configured_bin = os.environ.get("KSADK_DSH_BIN", "").strip()
|
|
109
116
|
if configured_bin:
|
|
110
117
|
command = (str(Path(configured_bin).expanduser()),)
|
|
@@ -513,6 +520,11 @@ def _codex_error(error: Exception) -> StudioError:
|
|
|
513
520
|
|
|
514
521
|
|
|
515
522
|
def _dsh_error(error: Exception) -> StudioError:
|
|
523
|
+
if isinstance(error, DshHomeVersionError):
|
|
524
|
+
return StudioError(
|
|
525
|
+
"DSH_HOME_VERSION_UNVERIFIED", str(error), status_code=409,
|
|
526
|
+
details=error.diagnostic,
|
|
527
|
+
)
|
|
516
528
|
if isinstance(error, DshPluginNotFoundError):
|
|
517
529
|
return StudioError("DSH_PLUGIN_NOT_FOUND", "DSH 插件未安装", status_code=404)
|
|
518
530
|
if isinstance(error, DshPluginApprovalRequired):
|
|
@@ -539,10 +551,8 @@ def _dsh_error(error: Exception) -> StudioError:
|
|
|
539
551
|
def register_plugin_routes(app: FastAPI, studio: StudioService) -> None:
|
|
540
552
|
"""Register only DSH Profile and Codex App Server lifecycle routes."""
|
|
541
553
|
|
|
542
|
-
codex_home, codex_mode = _studio_codex_home(studio)
|
|
543
|
-
dsh_home, dsh_profile, dsh_command, dsh_mode = _studio_dsh_options(studio)
|
|
544
|
-
|
|
545
554
|
def public_dsh(item: DshPluginInventory, host: DshBridgeHost) -> dict[str, Any]:
|
|
555
|
+
_, _, _, dsh_mode = _studio_dsh_options(_active_studio(studio))
|
|
546
556
|
return _public_dsh_inventory(
|
|
547
557
|
item,
|
|
548
558
|
host=host,
|
|
@@ -550,8 +560,14 @@ def register_plugin_routes(app: FastAPI, studio: StudioService) -> None:
|
|
|
550
560
|
runtime_state=studio.dsh_provider_runtime_state(item.name),
|
|
551
561
|
)
|
|
552
562
|
|
|
553
|
-
def call_dsh(operation: Callable[[DshProfilePluginBridge], Any]) -> Any:
|
|
563
|
+
def call_dsh(operation: Callable[[DshProfilePluginBridge], Any], *, write: bool = False) -> Any:
|
|
564
|
+
dsh_home, dsh_profile, dsh_command, _ = _studio_dsh_options(_active_studio(studio))
|
|
554
565
|
try:
|
|
566
|
+
# Even a read-only bridge creates its synchronization directory.
|
|
567
|
+
# Fence an empty home first so that lockfile cannot make our own
|
|
568
|
+
# fresh home look like an unversioned legacy installation later.
|
|
569
|
+
if write or dsh_home_diagnostic(dsh_home)["status"] == "new":
|
|
570
|
+
prepare_studio_dsh_home(dsh_home)
|
|
555
571
|
with DshProfilePluginBridge(
|
|
556
572
|
dsh_home=dsh_home, profile=dsh_profile, dsh_command=dsh_command
|
|
557
573
|
) as bridge:
|
|
@@ -591,6 +607,7 @@ def register_plugin_routes(app: FastAPI, studio: StudioService) -> None:
|
|
|
591
607
|
async def list_codex_plugins(
|
|
592
608
|
installed_only: bool = Query(default=False), force_refetch: bool = Query(default=False)
|
|
593
609
|
):
|
|
610
|
+
codex_home, codex_mode = _studio_codex_home(_active_studio(studio))
|
|
594
611
|
try:
|
|
595
612
|
async with CodexAppServerPluginBridge(codex_home=codex_home) as bridge:
|
|
596
613
|
items = await bridge.list_plugins(force_refetch=force_refetch)
|
|
@@ -620,6 +637,7 @@ def register_plugin_routes(app: FastAPI, studio: StudioService) -> None:
|
|
|
620
637
|
async def get_codex_plugin(
|
|
621
638
|
plugin_id: str, marketplace_name: str | None = Query(default=None, max_length=256)
|
|
622
639
|
):
|
|
640
|
+
codex_home, codex_mode = _studio_codex_home(_active_studio(studio))
|
|
623
641
|
try:
|
|
624
642
|
async with CodexAppServerPluginBridge(codex_home=codex_home) as bridge:
|
|
625
643
|
detail = await bridge.read_plugin(plugin_id, marketplace_name=marketplace_name)
|
|
@@ -635,6 +653,7 @@ def register_plugin_routes(app: FastAPI, studio: StudioService) -> None:
|
|
|
635
653
|
|
|
636
654
|
@app.post("/api/v1/plugin-ecosystems/codex/plugins/{plugin_id}:snapshot")
|
|
637
655
|
async def snapshot_codex_plugin(plugin_id: str, payload: CodexPluginSnapshotRequest):
|
|
656
|
+
codex_home, codex_mode = _studio_codex_home(_active_studio(studio))
|
|
638
657
|
"""Explicitly admit already-installed host bytes into the workspace store."""
|
|
639
658
|
|
|
640
659
|
try:
|
|
@@ -661,6 +680,7 @@ def register_plugin_routes(app: FastAPI, studio: StudioService) -> None:
|
|
|
661
680
|
|
|
662
681
|
@app.post("/api/v1/plugin-ecosystems/codex/plugins/{plugin_id}:install")
|
|
663
682
|
async def install_codex_plugin(plugin_id: str, payload: CodexPluginInstallRequest):
|
|
683
|
+
codex_home, codex_mode = _studio_codex_home(_active_studio(studio))
|
|
664
684
|
if not payload.accept_undeclared_permissions:
|
|
665
685
|
raise _codex_error(CodexPluginApprovalRequired("approval required"))
|
|
666
686
|
try:
|
|
@@ -745,6 +765,7 @@ def register_plugin_routes(app: FastAPI, studio: StudioService) -> None:
|
|
|
745
765
|
|
|
746
766
|
@app.delete("/api/v1/plugin-ecosystems/codex/plugins/{plugin_id}", status_code=204)
|
|
747
767
|
async def uninstall_codex_plugin(plugin_id: str):
|
|
768
|
+
codex_home, codex_mode = _studio_codex_home(_active_studio(studio))
|
|
748
769
|
try:
|
|
749
770
|
async with CodexAppServerPluginBridge(codex_home=codex_home) as bridge:
|
|
750
771
|
await bridge.uninstall_plugin(plugin_id)
|
|
@@ -754,6 +775,7 @@ def register_plugin_routes(app: FastAPI, studio: StudioService) -> None:
|
|
|
754
775
|
|
|
755
776
|
@app.get("/api/v1/plugin-ecosystems/dsh/plugins")
|
|
756
777
|
async def list_dsh_plugins():
|
|
778
|
+
dsh_home, dsh_profile, _, dsh_mode = _studio_dsh_options(_active_studio(studio))
|
|
757
779
|
try:
|
|
758
780
|
host, items = await asyncio.to_thread(call_dsh, lambda bridge: bridge.list_plugins())
|
|
759
781
|
return {
|
|
@@ -762,6 +784,7 @@ def register_plugin_routes(app: FastAPI, studio: StudioService) -> None:
|
|
|
762
784
|
"profile": dsh_profile,
|
|
763
785
|
"host": _public_host("dsh", host, home_mode=dsh_mode),
|
|
764
786
|
"items": [public_dsh(item, host) for item in items],
|
|
787
|
+
"homeCompatibility": dsh_home_diagnostic(dsh_home, workspace=studio.workspace.root),
|
|
765
788
|
}
|
|
766
789
|
except StudioError as error:
|
|
767
790
|
return {
|
|
@@ -771,12 +794,14 @@ def register_plugin_routes(app: FastAPI, studio: StudioService) -> None:
|
|
|
771
794
|
"host": _public_host("dsh", None, home_mode=dsh_mode),
|
|
772
795
|
"items": [],
|
|
773
796
|
"error": {"code": error.code, "message": error.message},
|
|
797
|
+
"homeCompatibility": dsh_home_diagnostic(dsh_home, workspace=studio.workspace.root),
|
|
774
798
|
}
|
|
775
799
|
|
|
776
800
|
@app.get("/api/v1/plugin-ecosystems/dsh/profile")
|
|
777
801
|
async def get_dsh_profile_projection():
|
|
802
|
+
_, dsh_profile, _, dsh_mode = _studio_dsh_options(_active_studio(studio))
|
|
778
803
|
host, projection = await asyncio.to_thread(
|
|
779
|
-
call_dsh, lambda bridge: bridge.project_profile()
|
|
804
|
+
call_dsh, lambda bridge: bridge.project_profile(), write=True,
|
|
780
805
|
)
|
|
781
806
|
return {
|
|
782
807
|
"host": _public_host("dsh", host, home_mode=dsh_mode),
|
|
@@ -812,7 +837,7 @@ def register_plugin_routes(app: FastAPI, studio: StudioService) -> None:
|
|
|
812
837
|
async def operation():
|
|
813
838
|
# Do not release Studio's admission fence while a cancelled HTTP
|
|
814
839
|
# request still has a filesystem migration running in its thread.
|
|
815
|
-
task = asyncio.create_task(asyncio.to_thread(call_dsh, migrate))
|
|
840
|
+
task = asyncio.create_task(asyncio.to_thread(call_dsh, migrate, write=True))
|
|
816
841
|
cancelled = False
|
|
817
842
|
while not task.done():
|
|
818
843
|
try:
|
|
@@ -844,6 +869,7 @@ def register_plugin_routes(app: FastAPI, studio: StudioService) -> None:
|
|
|
844
869
|
return await asyncio.to_thread(
|
|
845
870
|
call_dsh,
|
|
846
871
|
lambda bridge: bridge.install_plugin(payload.source, accept_host_permissions=True),
|
|
872
|
+
write=True,
|
|
847
873
|
)
|
|
848
874
|
|
|
849
875
|
host, item = await studio.reconfigure_dsh_profile(install)
|
|
@@ -863,7 +889,7 @@ def register_plugin_routes(app: FastAPI, studio: StudioService) -> None:
|
|
|
863
889
|
return await asyncio.to_thread(call_dsh, action)
|
|
864
890
|
|
|
865
891
|
async def mutate(): # type: ignore[no-untyped-def]
|
|
866
|
-
return await asyncio.to_thread(call_dsh, action)
|
|
892
|
+
return await asyncio.to_thread(call_dsh, action, write=True)
|
|
867
893
|
|
|
868
894
|
return await studio.reconfigure_dsh_profile(mutate)
|
|
869
895
|
|
|
@@ -886,6 +912,7 @@ def register_plugin_routes(app: FastAPI, studio: StudioService) -> None:
|
|
|
886
912
|
return await asyncio.to_thread(
|
|
887
913
|
call_dsh,
|
|
888
914
|
lambda bridge: bridge.update_plugin(plugin_name, accept_host_permissions=True),
|
|
915
|
+
write=True,
|
|
889
916
|
)
|
|
890
917
|
|
|
891
918
|
host, item = await studio.reconfigure_dsh_profile(update)
|
|
@@ -3,7 +3,6 @@
|
|
|
3
3
|
from __future__ import annotations
|
|
4
4
|
|
|
5
5
|
import asyncio
|
|
6
|
-
import os
|
|
7
6
|
from pathlib import Path
|
|
8
7
|
from typing import Any, Literal
|
|
9
8
|
|
|
@@ -43,6 +42,63 @@ class ValidateResourceBindings(PluginContractModel):
|
|
|
43
42
|
expected_revision: int = Field(strict=True, ge=1)
|
|
44
43
|
|
|
45
44
|
|
|
45
|
+
async def _bootstrap_default_connection(studio: Any) -> dict[str, Any] | None:
|
|
46
|
+
"""Lazily provision the local declaration from configured credentials."""
|
|
47
|
+
authority = getattr(studio, "resource_authority", None)
|
|
48
|
+
configuration = getattr(studio, "configuration", None)
|
|
49
|
+
environment = configuration.environment() if configuration is not None else {}
|
|
50
|
+
access_key = environment.get("KSYUN_ACCESS_KEY", "").strip()
|
|
51
|
+
secret_key = environment.get("KSYUN_SECRET_KEY", "").strip()
|
|
52
|
+
if authority is None or not access_key or not secret_key:
|
|
53
|
+
return None
|
|
54
|
+
connection_ref = "ksyun-platform-default"
|
|
55
|
+
try:
|
|
56
|
+
existing = await asyncio.to_thread(studio.resource_connections.get, connection_ref)
|
|
57
|
+
except StudioError as error:
|
|
58
|
+
if error.status_code != 404:
|
|
59
|
+
raise
|
|
60
|
+
else:
|
|
61
|
+
return {**existing.model_dump(by_alias=True, mode="json"), "validationState": "verified"}
|
|
62
|
+
tenant_ref, principal_ref = await asyncio.to_thread(
|
|
63
|
+
authority.resolve_signed_identity, access_key, secret_key
|
|
64
|
+
)
|
|
65
|
+
declaration = ResourceConnectionDeclaration(
|
|
66
|
+
label="金山云平台资源",
|
|
67
|
+
target=ConnectionTarget(
|
|
68
|
+
connection_ref=connection_ref,
|
|
69
|
+
tenant_ref=tenant_ref,
|
|
70
|
+
principal_ref=principal_ref,
|
|
71
|
+
endpoint=authority.policy.allowed_data_endpoints[0],
|
|
72
|
+
auth_mode="signed",
|
|
73
|
+
),
|
|
74
|
+
credentials=ResourceCredentialReferences(
|
|
75
|
+
access_key_ref="env://KSYUN_ACCESS_KEY",
|
|
76
|
+
secret_key_ref="env://KSYUN_SECRET_KEY",
|
|
77
|
+
),
|
|
78
|
+
)
|
|
79
|
+
try:
|
|
80
|
+
record = await asyncio.to_thread(
|
|
81
|
+
studio.resource_connections.save, declaration, expected_revision=0
|
|
82
|
+
)
|
|
83
|
+
except StudioError as error:
|
|
84
|
+
if error.status_code != 409:
|
|
85
|
+
raise
|
|
86
|
+
record = await asyncio.to_thread(studio.resource_connections.get, connection_ref)
|
|
87
|
+
return {**record.model_dump(by_alias=True, mode="json"), "validationState": "verified"}
|
|
88
|
+
|
|
89
|
+
|
|
90
|
+
def _binding_region(kind: PlatformResourceKind, service_region: str, control_region: str) -> str:
|
|
91
|
+
"""Memory's Default-CN is a service label, not an API signing region.
|
|
92
|
+
|
|
93
|
+
Resolve only this known service label at discovery, using the signed
|
|
94
|
+
client's region. Persist the resulting binding normally; never broaden the
|
|
95
|
+
host allowlist or silently rewrite an existing Revision/Bundle.
|
|
96
|
+
"""
|
|
97
|
+
if kind == "memory-instance" and service_region == "Default-CN":
|
|
98
|
+
return control_region
|
|
99
|
+
return service_region
|
|
100
|
+
|
|
101
|
+
|
|
46
102
|
def register_resource_connection_routes(app: FastAPI, studio: Any) -> None:
|
|
47
103
|
@app.get("/api/v1/platform-resources")
|
|
48
104
|
async def list_platform_resources(kind: PlatformResourceKind):
|
|
@@ -68,6 +124,9 @@ def register_resource_connection_routes(app: FastAPI, studio: Any) -> None:
|
|
|
68
124
|
/ plugin_id.split(".", 1)[1]
|
|
69
125
|
)
|
|
70
126
|
connections = await asyncio.to_thread(studio.resource_connections.list)
|
|
127
|
+
if not connections:
|
|
128
|
+
await _bootstrap_default_connection(studio)
|
|
129
|
+
connections = await asyncio.to_thread(studio.resource_connections.list)
|
|
71
130
|
connection_ref = connections[0].target.connection_ref if connections else None
|
|
72
131
|
return {
|
|
73
132
|
"kind": kind,
|
|
@@ -79,7 +138,8 @@ def register_resource_connection_routes(app: FastAPI, studio: Any) -> None:
|
|
|
79
138
|
{
|
|
80
139
|
"id": str(item.get("id") or ""),
|
|
81
140
|
"name": str(item.get("name") or item.get("id") or ""),
|
|
82
|
-
"region": str(item.get("region") or ""),
|
|
141
|
+
"region": _binding_region(kind, str(item.get("region") or ""), client.region),
|
|
142
|
+
"serviceRegion": str(item.get("region") or ""),
|
|
83
143
|
"status": str(item.get("status") or "unknown"),
|
|
84
144
|
"disabled": bool(item.get("disabled", False)),
|
|
85
145
|
"disableReason": str(item.get("disable_reason") or ""),
|
|
@@ -97,50 +157,28 @@ def register_resource_connection_routes(app: FastAPI, studio: Any) -> None:
|
|
|
97
157
|
|
|
98
158
|
@app.post("/api/v1/resource-connections:bootstrap", status_code=201)
|
|
99
159
|
async def bootstrap_resource_connection():
|
|
100
|
-
authority = studio
|
|
101
|
-
|
|
102
|
-
|
|
160
|
+
authority = getattr(studio, "resource_authority", None)
|
|
161
|
+
# Resolve through Studio's configuration precedence (workspace,
|
|
162
|
+
# global config, inherited environment, dotenv), rather than only the
|
|
163
|
+
# process environment. This keeps discovery and connection bootstrap
|
|
164
|
+
# on the same credential source.
|
|
165
|
+
environment = studio.configuration.environment()
|
|
166
|
+
access_key = environment.get("KSYUN_ACCESS_KEY", "").strip()
|
|
167
|
+
secret_key = environment.get("KSYUN_SECRET_KEY", "").strip()
|
|
103
168
|
if authority is None or not access_key or not secret_key:
|
|
104
169
|
raise StudioError(
|
|
105
170
|
"RESOURCE_CONNECTION_BOOTSTRAP_UNAVAILABLE",
|
|
106
|
-
"
|
|
171
|
+
"请先在设置的云端连接中填写账号凭据和控制面地址",
|
|
107
172
|
status_code=503,
|
|
108
173
|
)
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
raise
|
|
118
|
-
else:
|
|
119
|
-
return {
|
|
120
|
-
**existing.model_dump(by_alias=True, mode="json"),
|
|
121
|
-
"validationState": "verified",
|
|
122
|
-
}
|
|
123
|
-
declaration = ResourceConnectionDeclaration(
|
|
124
|
-
label="金山云平台资源",
|
|
125
|
-
target=ConnectionTarget(
|
|
126
|
-
connection_ref=connection_ref,
|
|
127
|
-
tenant_ref=tenant_ref,
|
|
128
|
-
principal_ref=principal_ref,
|
|
129
|
-
endpoint=authority.policy.allowed_data_endpoints[0],
|
|
130
|
-
auth_mode="signed",
|
|
131
|
-
),
|
|
132
|
-
credentials=ResourceCredentialReferences(
|
|
133
|
-
access_key_ref="env://KSYUN_ACCESS_KEY",
|
|
134
|
-
secret_key_ref="env://KSYUN_SECRET_KEY",
|
|
135
|
-
),
|
|
136
|
-
)
|
|
137
|
-
record = await asyncio.to_thread(
|
|
138
|
-
studio.resource_connections.save, declaration, expected_revision=0
|
|
139
|
-
)
|
|
140
|
-
return {
|
|
141
|
-
**record.model_dump(by_alias=True, mode="json"),
|
|
142
|
-
"validationState": "verified",
|
|
143
|
-
}
|
|
174
|
+
result = await _bootstrap_default_connection(studio)
|
|
175
|
+
if result is None:
|
|
176
|
+
raise StudioError(
|
|
177
|
+
"RESOURCE_CONNECTION_BOOTSTRAP_UNAVAILABLE",
|
|
178
|
+
"请先在设置的云端连接中填写账号凭据和控制面地址",
|
|
179
|
+
status_code=503,
|
|
180
|
+
)
|
|
181
|
+
return result
|
|
144
182
|
|
|
145
183
|
@app.get("/api/v1/agents/{agent_id}/resource-bindings/status")
|
|
146
184
|
async def binding_status(
|
ksadk/studio/authoring.py
CHANGED
|
@@ -40,7 +40,7 @@ from ksadk.studio.workspace import Workspace
|
|
|
40
40
|
_SLUG = re.compile(r"[^a-z0-9]+")
|
|
41
41
|
_MAX_IMPORT_BYTES = 100 * 1024 * 1024
|
|
42
42
|
_MAX_IMPORT_FILES = 2000
|
|
43
|
-
_SUPPORTED_RUNTIMES = frozenset({"codex", "adk", "langgraph"})
|
|
43
|
+
_SUPPORTED_RUNTIMES = frozenset({"harness", "codex", "adk", "langgraph"})
|
|
44
44
|
|
|
45
45
|
|
|
46
46
|
class ConversationProposal(BaseModel):
|
|
@@ -48,7 +48,7 @@ class ConversationProposal(BaseModel):
|
|
|
48
48
|
|
|
49
49
|
name: str = Field(min_length=1, max_length=128)
|
|
50
50
|
slug: str = Field(min_length=1, max_length=63)
|
|
51
|
-
runtimeType: Literal["codex", "adk", "langgraph"]
|
|
51
|
+
runtimeType: Literal["harness", "codex", "adk", "langgraph"]
|
|
52
52
|
description: str = Field(default="", max_length=1024)
|
|
53
53
|
spec: AgentSpec
|
|
54
54
|
|
|
@@ -128,18 +128,24 @@ class AgentAuthoringService:
|
|
|
128
128
|
if normalized not in _SUPPORTED_RUNTIMES:
|
|
129
129
|
raise StudioError(
|
|
130
130
|
"RUNTIME_NOT_SUPPORTED",
|
|
131
|
-
"创建方式仅支持 Codex、ADK 和 LangGraph",
|
|
131
|
+
"创建方式仅支持 KsADK Harness、Codex、ADK 和 LangGraph",
|
|
132
132
|
status_code=422,
|
|
133
133
|
field="runtimeType",
|
|
134
134
|
details={"runtimeType": normalized},
|
|
135
135
|
)
|
|
136
|
-
if normalized
|
|
136
|
+
if normalized in {"codex", "harness"}:
|
|
137
137
|
# A new YAML Agent must lock the CLI actually installed on this
|
|
138
138
|
# Studio host. Cloud admission resolves that explicit version via
|
|
139
139
|
# the Server-owned catalog instead of accepting a client image.
|
|
140
|
+
from ksadk.version import VERSION
|
|
141
|
+
|
|
140
142
|
return RuntimeRef(
|
|
141
|
-
type=
|
|
142
|
-
version=
|
|
143
|
+
type=cast(Any, normalized),
|
|
144
|
+
version=(
|
|
145
|
+
installed_runtime_version("codex") or "0.154.0"
|
|
146
|
+
if normalized == "codex"
|
|
147
|
+
else VERSION
|
|
148
|
+
),
|
|
143
149
|
)
|
|
144
150
|
return RuntimeRef(
|
|
145
151
|
type=cast(Any, normalized),
|
|
@@ -28,7 +28,7 @@ from ksadk.studio.contracts import (
|
|
|
28
28
|
)
|
|
29
29
|
from ksadk.studio.errors import StudioError
|
|
30
30
|
from ksadk.studio.identifiers import generate_agent_slug, is_generated_agent_slug
|
|
31
|
-
from ksadk.studio.templates import default_agent_spec
|
|
31
|
+
from ksadk.studio.templates import default_agent_spec, with_harness_provider_permissions
|
|
32
32
|
|
|
33
33
|
LOGGER = logging.getLogger(__name__)
|
|
34
34
|
|
|
@@ -319,6 +319,8 @@ class StudioAuthoringCoordinator:
|
|
|
319
319
|
canonical_runtime.version = proposed_runtime.version
|
|
320
320
|
canonical_runtime.detection = proposed_runtime.detection
|
|
321
321
|
resolved.runtime = canonical_runtime
|
|
322
|
+
if runtime_type == "harness" and spec is None:
|
|
323
|
+
resolved = with_harness_provider_permissions(resolved)
|
|
322
324
|
if _uses_codex_native_tools(canonical_runtime):
|
|
323
325
|
resolved.bindings = resolved.bindings.model_copy(update={"tools": []})
|
|
324
326
|
resolved.capabilities = resolved.capabilities.model_copy(update={"tools": []})
|
|
@@ -609,7 +611,7 @@ class StudioAuthoringCoordinator:
|
|
|
609
611
|
getattr(model, "endpoint_url", "-"),
|
|
610
612
|
)
|
|
611
613
|
normalized_runtime_type = str(runtime_type or "").strip().lower()
|
|
612
|
-
if normalized_runtime_type not in {"codex", "adk", "langgraph"}:
|
|
614
|
+
if normalized_runtime_type not in {"harness", "codex", "adk", "langgraph"}:
|
|
613
615
|
raise StudioError(
|
|
614
616
|
"AGENT_RUNTIME_INVALID",
|
|
615
617
|
"对话构建 Runtime 仅支持 Codex、ADK 或 LangGraph",
|
ksadk/studio/builder.py
CHANGED
|
@@ -142,6 +142,18 @@ class AgentBundleBuilder:
|
|
|
142
142
|
resource_reference = None
|
|
143
143
|
try:
|
|
144
144
|
self._copy_runtime_source(bundle_root, draft)
|
|
145
|
+
if draft.spec.runtime and draft.spec.runtime.type == "harness":
|
|
146
|
+
from ksadk.plugins.providers.harness_tools import python_tool_bundle_path
|
|
147
|
+
|
|
148
|
+
for tool in compiled.resolved.capabilities.tools:
|
|
149
|
+
if tool.enabled and tool.executor == "python":
|
|
150
|
+
source = self.workspace.resolve(tool.source_path, must_exist=True)
|
|
151
|
+
content = source.read_bytes()
|
|
152
|
+
if "sha256:" + hashlib.sha256(content).hexdigest() != tool.source_sha256:
|
|
153
|
+
raise ValueError("Python Tool source changed since registration")
|
|
154
|
+
target = bundle_root / python_tool_bundle_path(tool.source_sha256)
|
|
155
|
+
target.parent.mkdir(parents=True, exist_ok=True)
|
|
156
|
+
target.write_bytes(content)
|
|
145
157
|
self._write_runtime_launch_config(bundle_root, draft)
|
|
146
158
|
if resource_build is not None:
|
|
147
159
|
resource_reference = resource_build.materialize(
|
ksadk/studio/capabilities.py
CHANGED
|
@@ -150,12 +150,29 @@ class LocalCapabilityResolver:
|
|
|
150
150
|
payload.pop("digest", None)
|
|
151
151
|
digest = sha256_digest(canonical_json(payload))
|
|
152
152
|
if contract.digest and contract.digest != digest:
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
153
|
+
# 运行时生成的内置工具没有持久化源头,合同随宿主状态(后端可用
|
|
154
|
+
# 性、插件注册)重算;compose 与 build 之间的状态漂移会误报失配,
|
|
155
|
+
# 这里按当前目录重算放行。已发布/持久化工具仍严格拒改。
|
|
156
|
+
from ksadk.toolsets import describe_agentengine_tools
|
|
157
|
+
|
|
158
|
+
runtime_names = {
|
|
159
|
+
str(item.get("name"))
|
|
160
|
+
for item in describe_agentengine_tools(profile="coding", mode="direct")
|
|
161
|
+
}
|
|
162
|
+
# 目录/合同用连字符命名,运行时注册名是下划线:两种变体都认。
|
|
163
|
+
normalized = {name.replace("_", "-") for name in runtime_names}
|
|
164
|
+
normalized |= runtime_names
|
|
165
|
+
if contract.name not in normalized:
|
|
166
|
+
raise StudioError(
|
|
167
|
+
"CAPABILITY_DIGEST_MISMATCH",
|
|
168
|
+
"Tool 合同与声明 digest 不一致",
|
|
169
|
+
status_code=422,
|
|
170
|
+
details={
|
|
171
|
+
"name": contract.name,
|
|
172
|
+
"expected": contract.digest,
|
|
173
|
+
"actual": digest,
|
|
174
|
+
},
|
|
175
|
+
)
|
|
159
176
|
return cast(
|
|
160
177
|
ToolContract,
|
|
161
178
|
contract.model_copy(update={"digest": digest}),
|