agentengine-sdk-python 0.8.3__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.
Files changed (819) hide show
  1. {agentengine_sdk_python-0.8.3.dist-info → agentengine_sdk_python-0.8.5.dist-info}/METADATA +13 -9
  2. agentengine_sdk_python-0.8.5.dist-info/RECORD +1296 -0
  3. ksadk/_build_provenance.json +1 -1
  4. ksadk/_process.py +83 -0
  5. ksadk/_str_enum.py +17 -0
  6. ksadk/a2ui/core.py +3 -3
  7. ksadk/api/client.py +111 -91
  8. ksadk/builders/code_builder.py +74 -21
  9. ksadk/builders/framework_requirements.py +22 -3
  10. ksadk/builders/ks3_uploader.py +36 -7
  11. ksadk/builders/managed_runtime_builder.py +1 -0
  12. ksadk/cli/__init__.py +68 -3
  13. ksadk/cli/cmd_config.py +4 -4
  14. ksadk/cli/cmd_create.py +12 -12
  15. ksadk/cli/cmd_hermes.py +24 -2
  16. ksadk/cli/cmd_invoke.py +28 -5
  17. ksadk/cli/cmd_managed_runtime.py +13 -1
  18. ksadk/cli/cmd_openclaw.py +26 -1
  19. ksadk/cli/cmd_plugin.py +76 -13
  20. ksadk/cli/cmd_studio.py +64 -16
  21. ksadk/cli/cmd_web.py +2 -5
  22. ksadk/cli/openclaw_env.py +1 -1
  23. ksadk/cli/resource_common.py +26 -0
  24. ksadk/cli/runtime_bootstrap.py +23 -1
  25. ksadk/codex/client.py +425 -96
  26. ksadk/codex/projection.py +24 -0
  27. ksadk/codex/runtime.py +56 -298
  28. ksadk/common/auth.py +16 -10
  29. ksadk/configs/__init__.py +1 -1
  30. ksadk/configs/env_registry.py +153 -31
  31. ksadk/configs/env_registry_studio.py +86 -0
  32. ksadk/configs/global_config.py +1 -1
  33. ksadk/configs/settings.py +3 -3
  34. ksadk/connector/__init__.py +17 -0
  35. ksadk/connector/channel.py +477 -0
  36. ksadk/context_engine/capabilities.py +52 -4
  37. ksadk/conversations/attachment_storage.py +10 -3
  38. ksadk/conversations/attachments.py +16 -5
  39. ksadk/conversations/message_projection.py +133 -21
  40. ksadk/conversations/normalize.py +28 -10
  41. ksadk/conversations/projector.py +4 -6
  42. ksadk/conversations/runtime_baseline.py +37 -0
  43. ksadk/conversations/runtime_invocation.py +22 -4
  44. ksadk/conversations/runtime_observability.py +39 -10
  45. ksadk/conversations/runtime_payloads.py +9 -0
  46. ksadk/conversations/runtime_persistence.py +105 -9
  47. ksadk/conversations/runtime_preparation.py +42 -33
  48. ksadk/conversations/runtime_resume.py +50 -2
  49. ksadk/conversations/runtime_stream_events.py +34 -35
  50. ksadk/conversations/runtime_streaming.py +33 -7
  51. ksadk/deployment/env_forward.py +2 -2
  52. ksadk/deployment/providers/serverless.py +1 -1
  53. ksadk/events/adapters/_codex_items.py +16 -8
  54. ksadk/events/adapters/_codex_validators.py +18 -7
  55. ksadk/events/adapters/_langgraph_support.py +34 -0
  56. ksadk/events/adapters/langgraph.py +15 -1
  57. ksadk/events/canonical_store.py +3 -1
  58. ksadk/events/projections.py +1 -1
  59. ksadk/events/session_event.py +2 -2
  60. ksadk/harness/__init__.py +14 -0
  61. ksadk/harness/app.py +11 -0
  62. ksadk/harness/artifact_store.py +213 -0
  63. ksadk/harness/capabilities.py +115 -0
  64. ksadk/harness/capability_runtime.py +237 -0
  65. ksadk/harness/closure_contract.py +92 -0
  66. ksadk/harness/compaction_record.py +122 -0
  67. ksadk/harness/compiler.py +284 -0
  68. ksadk/harness/config.py +2 -2
  69. ksadk/harness/conformance/__init__.py +33 -0
  70. ksadk/harness/conformance/contract.py +506 -0
  71. ksadk/harness/conformance/fixtures.py +102 -0
  72. ksadk/harness/context_engine.py +403 -0
  73. ksadk/harness/context_maintenance.py +259 -0
  74. ksadk/harness/context_manifest.py +188 -0
  75. ksadk/harness/context_tuning.py +168 -0
  76. ksadk/harness/draft_runtime.py +322 -0
  77. ksadk/harness/engine/__init__.py +40 -0
  78. ksadk/harness/engine/base.py +122 -0
  79. ksadk/harness/engine/budgets.py +108 -0
  80. ksadk/harness/engine/capability_declarations.py +59 -0
  81. ksadk/harness/engine/completion_guard.py +42 -0
  82. ksadk/harness/engine/context_pipeline.py +579 -0
  83. ksadk/harness/engine/graph_builder.py +859 -0
  84. ksadk/harness/engine/langgraph.py +931 -0
  85. ksadk/harness/engine/mcp_disclosure.py +750 -0
  86. ksadk/harness/engine/policy_runtime.py +70 -0
  87. ksadk/harness/engine/postgres_checkpointer.py +63 -0
  88. ksadk/harness/engine/run_control_bridge.py +80 -0
  89. ksadk/harness/engine/run_types.py +88 -0
  90. ksadk/harness/engine/skill_disclosure.py +189 -0
  91. ksadk/harness/engine/spans.py +41 -0
  92. ksadk/harness/engine/subagents.py +343 -0
  93. ksadk/harness/engine/thread_ids.py +112 -0
  94. ksadk/harness/engine/tool_dispatch.py +144 -0
  95. ksadk/harness/event_tree.py +212 -0
  96. ksadk/harness/events.py +461 -0
  97. ksadk/harness/execution_policy.py +94 -0
  98. ksadk/harness/insights.py +210 -0
  99. ksadk/harness/lifecycle.py +578 -0
  100. ksadk/harness/lifecycle_conformance.py +233 -0
  101. ksadk/harness/lifecycle_local_plane.py +104 -0
  102. ksadk/harness/loop/__init__.py +44 -0
  103. ksadk/harness/loop/reason.py +454 -0
  104. ksadk/harness/loop/tools.py +762 -0
  105. ksadk/harness/managed_runtime.py +884 -0
  106. ksadk/harness/mcp_matrix.py +474 -0
  107. ksadk/harness/mcp_runtime.py +471 -0
  108. ksadk/harness/memory_consolidation.py +157 -0
  109. ksadk/harness/memory_loop.py +156 -0
  110. ksadk/harness/memory_runtime.py +541 -0
  111. ksadk/harness/metrics.py +90 -0
  112. ksadk/harness/model_capability.py +253 -0
  113. ksadk/harness/model_provider.py +220 -0
  114. ksadk/harness/observability/__init__.py +29 -0
  115. ksadk/harness/observability/inspection.py +528 -0
  116. ksadk/harness/observability/metrics.py +167 -0
  117. ksadk/harness/observability/otel_exporter.py +218 -0
  118. ksadk/harness/prompt_cache.py +70 -0
  119. ksadk/harness/public_activity.py +154 -0
  120. ksadk/harness/readiness.py +249 -0
  121. ksadk/harness/reasoner.py +466 -13
  122. ksadk/harness/release_readiness.py +140 -0
  123. ksadk/harness/resource_ref.py +69 -0
  124. ksadk/harness/run_control.py +668 -0
  125. ksadk/harness/runtime.py +171 -136
  126. ksadk/harness/runtime_capabilities.py +158 -0
  127. ksadk/harness/runtime_server.py +514 -0
  128. ksadk/harness/sandbox_adapters.py +739 -0
  129. ksadk/harness/sandbox_backend.py +530 -0
  130. ksadk/harness/sandbox_conformance.py +288 -0
  131. ksadk/harness/sandbox_lease.py +77 -0
  132. ksadk/harness/sandbox_lease_conformance.py +259 -0
  133. ksadk/harness/sandbox_matrix.py +170 -0
  134. ksadk/harness/sandbox_reconciliation.py +140 -0
  135. ksadk/harness/sandbox_recovery.py +586 -0
  136. ksadk/harness/sandbox_recovery_conformance.py +246 -0
  137. ksadk/harness/session_store.py +243 -0
  138. ksadk/harness/skill_composition.py +212 -0
  139. ksadk/harness/skill_feedback.py +123 -0
  140. ksadk/harness/skill_matrix.py +233 -0
  141. ksadk/harness/skill_runtime.py +259 -0
  142. ksadk/harness/spec.py +332 -0
  143. ksadk/harness/state.py +153 -0
  144. ksadk/harness/strategies.py +149 -0
  145. ksadk/harness/subagent.py +253 -0
  146. ksadk/harness/tool_policy.py +131 -0
  147. ksadk/harness/tool_receipts.py +96 -0
  148. ksadk/harness/tool_reliability.py +81 -0
  149. ksadk/harness/tools.py +38 -13
  150. ksadk/harness/user_errors.py +69 -0
  151. ksadk/harness/working_context.py +81 -0
  152. ksadk/harness/working_context_patch.py +99 -0
  153. ksadk/identity/resolver.py +18 -0
  154. ksadk/interaction/__init__.py +1 -1
  155. ksadk/interaction/ledger.py +1 -1
  156. ksadk/interaction/provider.py +2 -1
  157. ksadk/interaction/providers/__init__.py +3 -1
  158. ksadk/interaction/providers/adk.py +1 -1
  159. ksadk/interaction/providers/codex.py +1 -1
  160. ksadk/interaction/providers/harness.py +50 -0
  161. ksadk/interaction/providers/langgraph.py +2 -1
  162. ksadk/kernel/__init__.py +10 -0
  163. ksadk/kernel/approval_presentation.py +91 -0
  164. ksadk/kernel/authorization.py +1 -1
  165. ksadk/kernel/bootstrap.py +114 -106
  166. ksadk/kernel/contract_fingerprints.py +1 -1
  167. ksadk/kernel/contracts.py +5 -0
  168. ksadk/kernel/control.py +32 -1
  169. ksadk/kernel/execution_grants.py +221 -0
  170. ksadk/kernel/execution_grants_memory.py +133 -0
  171. ksadk/kernel/execution_grants_postgres.py +217 -0
  172. ksadk/kernel/execution_grants_sqlite.py +209 -0
  173. ksadk/kernel/ingress.py +42 -29
  174. ksadk/kernel/mapping.py +1 -1
  175. ksadk/kernel/memory_store.py +24 -11
  176. ksadk/kernel/postgres_store.py +63 -33
  177. ksadk/kernel/recovery.py +78 -14
  178. ksadk/kernel/sql/001_agent_kernel.sql +23 -0
  179. ksadk/kernel/sqlite_store.py +331 -25
  180. ksadk/kernel/state.py +2 -3
  181. ksadk/kernel/store.py +72 -2
  182. ksadk/kernel/worker.py +144 -51
  183. ksadk/kernel/worker_history.py +72 -0
  184. ksadk/kernel/worker_identity.py +47 -0
  185. ksadk/knowledge_base/client.py +57 -27
  186. ksadk/mcp_runtime/__init__.py +12 -4
  187. ksadk/memory/adk/backends/sdk_ltm_backend.py +161 -41
  188. ksadk/memory/adk/resilient_session_service.py +25 -17
  189. ksadk/memory/adk/short_term_memory.py +26 -9
  190. ksadk/memory/coordinator.py +22 -6
  191. ksadk/memory/extraction.py +40 -1
  192. ksadk/memory/models.py +84 -5
  193. ksadk/memory/provider_resolver.py +8 -0
  194. ksadk/memory/providers/local_postgres.py +200 -0
  195. ksadk/memory/providers/local_sqlite.py +42 -3
  196. ksadk/memory/retrieval.py +189 -0
  197. ksadk/memory/store_adapter.py +150 -0
  198. ksadk/model_policy.py +2 -2
  199. ksadk/model_proxy/detect.py +254 -0
  200. ksadk/model_proxy/server.py +14 -7
  201. ksadk/model_proxy/transform.py +40 -2
  202. ksadk/plugins/__init__.py +5 -1
  203. ksadk/plugins/artifacts.py +275 -0
  204. ksadk/plugins/bridges/__init__.py +4 -2
  205. ksadk/plugins/bridges/codex.py +120 -13
  206. ksadk/plugins/bridges/dsh.py +351 -156
  207. ksadk/plugins/builtins.py +72 -35
  208. ksadk/plugins/bundle_security.py +28 -4
  209. ksadk/plugins/codex_manifest.py +983 -0
  210. ksadk/plugins/companion_artifacts.py +83 -0
  211. ksadk/plugins/companions.py +368 -0
  212. ksadk/plugins/composition.py +8 -0
  213. ksadk/plugins/contracts.py +119 -1
  214. ksadk/plugins/delivery.py +153 -0
  215. ksadk/plugins/dsh_channels.py +156 -0
  216. ksadk/plugins/dsh_home.py +140 -0
  217. ksadk/plugins/dsh_installation_digest.py +71 -0
  218. ksadk/plugins/dsh_teams.py +105 -0
  219. ksadk/plugins/dsh_toolchain.py +203 -32
  220. ksadk/plugins/ecosystem_probe.py +6 -6
  221. ksadk/plugins/execution_host.py +99 -0
  222. ksadk/plugins/host.py +102 -39
  223. ksadk/plugins/kernel_adapter.py +205 -0
  224. ksadk/plugins/providers/__init__.py +23 -0
  225. ksadk/plugins/providers/bundles/dsh-channels-client/client.js +19 -0
  226. ksadk/plugins/providers/bundles/dsh-channels-client/cordis.patch.yml +3 -0
  227. ksadk/plugins/providers/bundles/dsh-channels-client/index.mjs +7 -0
  228. ksadk/plugins/providers/bundles/dsh-channels-client/package.json +12 -0
  229. ksadk/plugins/providers/bundles/dsh-knowledge/cordis.patch.yml +3 -0
  230. ksadk/plugins/providers/bundles/dsh-knowledge/index.mjs +53 -0
  231. ksadk/plugins/providers/bundles/dsh-knowledge/package.json +16 -0
  232. ksadk/plugins/providers/bundles/dsh-memory/cordis.patch.yml +3 -0
  233. ksadk/plugins/providers/bundles/dsh-memory/index.mjs +175 -0
  234. ksadk/plugins/providers/bundles/dsh-memory/package.json +16 -0
  235. ksadk/plugins/providers/bundles/dsh-platform-resources/client.mjs +166 -0
  236. ksadk/plugins/providers/bundles/dsh-platform-resources/cordis.patch.yml +3 -0
  237. ksadk/plugins/providers/bundles/dsh-platform-resources/index.mjs +9 -0
  238. ksadk/plugins/providers/bundles/dsh-platform-resources/package.json +12 -0
  239. ksadk/plugins/providers/bundles/dsh-skill-center/cordis.patch.yml +3 -0
  240. ksadk/plugins/providers/bundles/dsh-skill-center/index.mjs +125 -0
  241. ksadk/plugins/providers/bundles/dsh-skill-center/package.json +16 -0
  242. ksadk/plugins/providers/bundles/dsh-teams-client/client.js +29 -0
  243. ksadk/plugins/providers/bundles/dsh-teams-client/cordis.patch.yml +3 -0
  244. ksadk/plugins/providers/bundles/dsh-teams-client/index.mjs +11 -0
  245. ksadk/plugins/providers/bundles/dsh-teams-client/package.json +35 -0
  246. ksadk/plugins/providers/bundles/dsh-teams-leader-policy/cordis.patch.yml +3 -0
  247. ksadk/plugins/providers/bundles/dsh-teams-leader-policy/index.mjs +13 -0
  248. ksadk/plugins/providers/bundles/dsh-teams-leader-policy/package.json +27 -0
  249. ksadk/plugins/providers/bundles/dsh-teams-profile/cordis.patch.yml +3 -0
  250. ksadk/plugins/providers/bundles/dsh-teams-profile/index.mjs +12 -0
  251. ksadk/plugins/providers/bundles/dsh-teams-profile/package.json +26 -0
  252. ksadk/plugins/providers/bundles/dsh-teams-router/cordis.patch.yml +3 -0
  253. ksadk/plugins/providers/bundles/dsh-teams-router/index.mjs +16 -0
  254. ksadk/plugins/providers/bundles/dsh-teams-router/package.json +27 -0
  255. ksadk/plugins/providers/bundles/dsh-teams-tasks/cordis.patch.yml +3 -0
  256. ksadk/plugins/providers/bundles/dsh-teams-tasks/index.mjs +16 -0
  257. ksadk/plugins/providers/bundles/dsh-teams-tasks/package.json +27 -0
  258. ksadk/plugins/providers/bundles/dsh-teams-tools/cordis.patch.yml +3 -0
  259. ksadk/plugins/providers/bundles/dsh-teams-tools/index.mjs +25 -0
  260. ksadk/plugins/providers/bundles/dsh-teams-tools/package.json +29 -0
  261. ksadk/plugins/providers/bundles/dsh-teams-tools/tools.json +235 -0
  262. ksadk/plugins/providers/bundles/ksadk-codex/index.mjs +1 -1
  263. ksadk/plugins/providers/bundles/ksadk-dsh-capability-host/cordis.patch.yml +3 -0
  264. ksadk/plugins/providers/bundles/ksadk-dsh-capability-host/index.mjs +920 -0
  265. ksadk/plugins/providers/bundles/ksadk-dsh-capability-host/package.json +27 -0
  266. ksadk/plugins/providers/bundles/ksadk-dsh-companion-host/client.mjs +133 -0
  267. ksadk/plugins/providers/bundles/ksadk-dsh-companion-host/index.mjs +14 -0
  268. ksadk/plugins/providers/bundles/ksadk-dsh-studio/client.js +115 -0
  269. ksadk/plugins/providers/bundles/ksadk-dsh-studio/index.mjs +19 -0
  270. ksadk/plugins/providers/bundles/ksadk-dsh-studio/package.json +7 -0
  271. ksadk/plugins/providers/bundles/ksadk-harness/index.mjs +1 -1
  272. ksadk/plugins/providers/codex.py +344 -70
  273. ksadk/plugins/providers/codex_native.py +368 -0
  274. ksadk/plugins/providers/codex_turn.py +301 -0
  275. ksadk/plugins/providers/dsh_capabilities.py +1450 -0
  276. ksadk/plugins/providers/dsh_mcp.py +467 -0
  277. ksadk/plugins/providers/harness.py +294 -141
  278. ksadk/plugins/providers/harness_delegation.py +593 -0
  279. ksadk/plugins/providers/harness_managed.py +456 -0
  280. ksadk/plugins/providers/harness_tools.py +326 -0
  281. ksadk/plugins/providers/mcp_projection.py +150 -0
  282. ksadk/plugins/providers/platform_resources.py +657 -0
  283. ksadk/plugins/providers/shipped_dsh.py +4 -1
  284. ksadk/plugins/resolver.py +8 -1
  285. ksadk/plugins/subagent_providers/codex.py +28 -6
  286. ksadk/plugins/teams/__init__.py +5 -0
  287. ksadk/plugins/teams/api.py +405 -0
  288. ksadk/plugins/teams/application.py +680 -0
  289. ksadk/plugins/teams/artifacts.py +60 -0
  290. ksadk/plugins/teams/context.py +96 -0
  291. ksadk/plugins/teams/contracts.py +136 -0
  292. ksadk/plugins/teams/domain.py +1427 -0
  293. ksadk/plugins/teams/domain_values.py +24 -0
  294. ksadk/plugins/teams/errors.py +13 -0
  295. ksadk/plugins/teams/migration.py +311 -0
  296. ksadk/plugins/teams/migration_cli.py +322 -0
  297. ksadk/plugins/teams/postgres_store.py +138 -0
  298. ksadk/plugins/teams/runtime.py +777 -0
  299. ksadk/plugins/teams/source_projection.py +84 -0
  300. ksadk/plugins/teams/store.py +311 -0
  301. ksadk/plugins/teams/task_decisions.py +423 -0
  302. ksadk/plugins/teams/transport.py +91 -0
  303. ksadk/plugins/teams/workspaces.py +255 -0
  304. ksadk/resource_runtime/__init__.py +4 -0
  305. ksadk/resource_runtime/broker.py +616 -0
  306. ksadk/resource_runtime/build_artifacts.py +165 -0
  307. ksadk/resource_runtime/contracts.py +138 -0
  308. ksadk/resource_runtime/discovery_receipts.py +100 -0
  309. ksadk/resource_runtime/discovery_skills.py +172 -0
  310. ksadk/resource_runtime/errors.py +6 -0
  311. ksadk/resource_runtime/ipc.py +142 -0
  312. ksadk/resource_runtime/kernel_approval.py +165 -0
  313. ksadk/resource_runtime/knowledge.py +114 -0
  314. ksadk/resource_runtime/langgraph.py +94 -0
  315. ksadk/resource_runtime/leases.py +191 -0
  316. ksadk/resource_runtime/managed_projection.py +186 -0
  317. ksadk/resource_runtime/mcp_server.py +138 -0
  318. ksadk/resource_runtime/memory_provider.py +318 -0
  319. ksadk/resource_runtime/memory_receipts.py +34 -0
  320. ksadk/resource_runtime/operation_ledger.py +211 -0
  321. ksadk/resource_runtime/plugin_config.py +48 -0
  322. ksadk/resource_runtime/policy_authorization.py +54 -0
  323. ksadk/resource_runtime/process.py +110 -0
  324. ksadk/resource_runtime/skill_artifacts.py +153 -0
  325. ksadk/resource_runtime/skill_runtime.py +42 -0
  326. ksadk/resource_runtime/skill_workspace.py +118 -0
  327. ksadk/resource_runtime/skills.py +215 -0
  328. ksadk/resource_runtime/snapshots.py +180 -0
  329. ksadk/resource_runtime/socket_server.py +103 -0
  330. ksadk/resource_runtime/supervisor.py +380 -0
  331. ksadk/resource_runtime/worker.py +504 -0
  332. ksadk/runners/_langgraph_runner_streams.py +182 -38
  333. ksadk/runners/_langgraph_state_reader.py +106 -0
  334. ksadk/runners/_session_identity.py +285 -0
  335. ksadk/runners/adk_runner.py +166 -63
  336. ksadk/runners/base_runner.py +29 -1
  337. ksadk/runners/langgraph_runner.py +542 -195
  338. ksadk/runners/patch_langchain.py +47 -0
  339. ksadk/runners/usage_accumulator.py +11 -3
  340. ksadk/runtime/_runner_adapter/stream_mapping.py +194 -20
  341. ksadk/runtime/adapter.py +2 -0
  342. ksadk/runtime/conversation_execution.py +117 -17
  343. ksadk/runtime/executor.py +87 -3
  344. ksadk/runtime/factory.py +65 -274
  345. ksadk/runtime/framework_adapters.py +23 -0
  346. ksadk/runtime/preprocessing.py +21 -5
  347. ksadk/runtime/runner_adapter.py +106 -18
  348. ksadk/runtime/skill_eval_result.py +36 -0
  349. ksadk/runtime/timing.py +46 -0
  350. ksadk/runtime/usage.py +49 -18
  351. ksadk/runtime_context.py +142 -2
  352. ksadk/sandbox/backends/e2b.py +288 -25
  353. ksadk/sandbox/backends/local_process.py +72 -39
  354. ksadk/sandbox/base.py +64 -1
  355. ksadk/sandbox/diagnostics.py +82 -0
  356. ksadk/sandbox/e2b_connection.py +66 -0
  357. ksadk/sandbox/local_controls.py +746 -0
  358. ksadk/sandbox/local_launcher.py +90 -0
  359. ksadk/scheduler/dispatcher.py +1 -1
  360. ksadk/scheduler/sqlite_store.py +18 -0
  361. ksadk/server/composition.py +2 -0
  362. ksadk/server/factory.py +5 -0
  363. ksadk/server/invocation_identity.py +118 -0
  364. ksadk/server/persistence_capability.py +516 -0
  365. ksadk/server/routes/common.py +32 -3
  366. ksadk/server/routes/control.py +271 -52
  367. ksadk/server/routes/dependencies.py +16 -0
  368. ksadk/server/routes/kernel_ingress.py +9 -1
  369. ksadk/server/routes/misc.py +233 -25
  370. ksadk/server/routes/models.py +47 -4
  371. ksadk/server/routes/openai_compat.py +76 -13
  372. ksadk/server/routes/projection.py +252 -12
  373. ksadk/server/routes/run.py +106 -35
  374. ksadk/server/routes/sessions.py +491 -138
  375. ksadk/server/routes/streaming.py +43 -9
  376. ksadk/server/routes/workspace.py +130 -21
  377. ksadk/server/static/assets/{ArtifactsPanel-10GPXIJ6.js → ArtifactsPanel-C1YoaKhx.js} +1 -1
  378. ksadk/server/static/assets/{CodeBlock-BXk1l-G1.js → CodeBlock-DHuAWfr5.js} +10 -7
  379. ksadk/server/static/assets/MathMessageMarkdown-cvdrBwYr.js +8 -0
  380. ksadk/server/static/assets/{MermaidBlock--OEYoXIJ.js → MermaidBlock-DeBkbJvI.js} +9 -9
  381. ksadk/server/static/assets/{NativeTerminalPanel-DrEe1syq.js → NativeTerminalPanel-oJj44_sV.js} +1 -1
  382. ksadk/server/static/assets/{abnfDiagram-VCTEODGH-eeTFJLvo.js → abnfDiagram-VCTEODGH-Dhfv25o2.js} +1 -1
  383. ksadk/server/static/assets/{arc-S3ZNbIAd.js → arc-C35w-pn1.js} +1 -1
  384. ksadk/server/static/assets/architecture-7GRP2DOG-BCsa26zi.js +1 -0
  385. ksadk/server/static/assets/{architectureDiagram-5GKGNRK7-CRjgEJDX.js → architectureDiagram-5GKGNRK7-FoMY_u6D.js} +1 -1
  386. ksadk/server/static/assets/{blockDiagram-NRAW4CY4-C7bsBoNH.js → blockDiagram-NRAW4CY4-zD4Rt7oE.js} +1 -1
  387. ksadk/server/static/assets/{c4Diagram-UCG6FXSJ-BX3c33Ob.js → c4Diagram-UCG6FXSJ-BCtGGkhN.js} +1 -1
  388. ksadk/server/static/assets/channel-_KDifNys.js +1 -0
  389. ksadk/server/static/assets/chunk-2Q5K7J3B-HdVkJ9F0.js +1 -0
  390. ksadk/server/static/assets/{chunk-5VM5RSS4-bZ7ws-8m.js → chunk-5VM5RSS4-C2Ms13_k.js} +1 -1
  391. ksadk/server/static/assets/{chunk-F27PBJKO-D2r0pvhY.js → chunk-F27PBJKO-BoTj-qgx.js} +1 -1
  392. ksadk/server/static/assets/{chunk-G27WJ6UU-CZwF3oUP.js → chunk-G27WJ6UU-DOMyyjHH.js} +1 -1
  393. ksadk/server/static/assets/{chunk-JWPE2WC7-DigFYCML.js → chunk-JWPE2WC7-DbJJqDli.js} +1 -1
  394. ksadk/server/static/assets/{chunk-LCL6LL3I-CnorGV5q.js → chunk-LCL6LL3I-CLuRCt_W.js} +1 -1
  395. ksadk/server/static/assets/{chunk-POPQ4Y6H-CexntQA-.js → chunk-POPQ4Y6H-D0Dz847e.js} +1 -1
  396. ksadk/server/static/assets/{chunk-RHFEMEQ7-CHTC7UxA.js → chunk-RHFEMEQ7-BWSRzEcd.js} +1 -1
  397. ksadk/server/static/assets/{chunk-SVP7TREG-BC1EWt_-.js → chunk-SVP7TREG-CPoHqkCY.js} +1 -1
  398. ksadk/server/static/assets/{chunk-XXDRQBXY-BTG24xN0.js → chunk-XXDRQBXY-Bx1jS-X-.js} +1 -1
  399. ksadk/server/static/assets/classDiagram-DTDB5LWJ-BVCW3ZqZ.js +1 -0
  400. ksadk/server/static/assets/classDiagram-v2-JRS7N3AN-BVCW3ZqZ.js +1 -0
  401. ksadk/server/static/assets/{cose-bilkent-JH36ORCC-CkonRdAS.js → cose-bilkent-JH36ORCC-LzyWm4m0.js} +1 -1
  402. ksadk/server/static/assets/cynefin-OW5HDTMX-CNXjFctL.js +1 -0
  403. ksadk/server/static/assets/{cynefinDiagram-5FMLGOSQ-DEOCBe15.js → cynefinDiagram-5FMLGOSQ-BlW_bHED.js} +1 -1
  404. ksadk/server/static/assets/{dagre-3AP2YEHR-DBThPuLa.js → dagre-3AP2YEHR-Bu_S86_i.js} +1 -1
  405. ksadk/server/static/assets/{dagre-ClTPrTht.js → dagre-B7nCawed.js} +1 -1
  406. ksadk/server/static/assets/{diagram-S7CK7UJ4-DsZHrnpJ.js → diagram-S7CK7UJ4-W_Zow2Km.js} +1 -1
  407. ksadk/server/static/assets/{diagram-UQ7AKVKN-BJR4nhVr.js → diagram-UQ7AKVKN-CLIKAHON.js} +1 -1
  408. ksadk/server/static/assets/{diagram-VSXAHHWV-xzcERX0a.js → diagram-VSXAHHWV-Dv6_QAlN.js} +1 -1
  409. ksadk/server/static/assets/{diagram-VX7I27RA-tn2xM1xu.js → diagram-VX7I27RA-BWAWRDtZ.js} +1 -1
  410. ksadk/server/static/assets/{diagram-Z3DM3KII-BZPGBkw5.js → diagram-Z3DM3KII-XA_rWMss.js} +1 -1
  411. ksadk/server/static/assets/dist-0X_j2Rcc.js +1 -0
  412. ksadk/server/static/assets/{dist-4zN1_tq5.js → dist-1nXCdsej.js} +1 -1
  413. ksadk/server/static/assets/{dist-M67Hwu0n.js → dist-2vL2sAdF.js} +1 -1
  414. ksadk/server/static/assets/{dist-BJLUwH6W.js → dist-B3bA05-e.js} +1 -1
  415. ksadk/server/static/assets/{dist-8VWI-2bZ.js → dist-BLpRy_Yx.js} +1 -1
  416. ksadk/server/static/assets/{dist-D1V3f1B4.js → dist-BO_UwatH.js} +1 -1
  417. ksadk/server/static/assets/{dist-Cq4OL6nO.js → dist-BdNFAney.js} +1 -1
  418. ksadk/server/static/assets/{dist-DfGFrb0v.js → dist-C0J5_3qM.js} +1 -1
  419. ksadk/server/static/assets/{dist-DyqV4fL4.js → dist-CGt_UGeO.js} +1 -1
  420. ksadk/server/static/assets/{dist-DjhwGUgZ.js → dist-CIRMvUM4.js} +1 -1
  421. ksadk/server/static/assets/{dist-B1oWRmrH.js → dist-CIpWk_5f.js} +1 -1
  422. ksadk/server/static/assets/{dist-CXpH_Rdd.js → dist-CPyieXEf.js} +1 -1
  423. ksadk/server/static/assets/{dist-Btyo4vX4.js → dist-D-92S-Fd.js} +1 -1
  424. ksadk/server/static/assets/{dist-u8tVH5Ak.js → dist-DNKuMzWc.js} +1 -1
  425. ksadk/server/static/assets/{dist-DQAB0qn_.js → dist-DWfdmz9s.js} +2 -2
  426. ksadk/server/static/assets/{dist-B-46q3Hk.js → dist-DppE_r-D.js} +1 -1
  427. ksadk/server/static/assets/{dist-C71CsujO.js → dist-DyG6Ya-z.js} +1 -1
  428. ksadk/server/static/assets/{dist-DJmCPRVB.js → dist-M-SrdhhZ.js} +1 -1
  429. ksadk/server/static/assets/{dist-Bbwqa8TG.js → dist-mqD5TZup.js} +1 -1
  430. ksadk/server/static/assets/{dist-BI1qQH4n.js → dist-n3n6t_FO.js} +1 -1
  431. ksadk/server/static/assets/{dist-DUwKa_l6.js → dist-qe8xjesy.js} +1 -1
  432. ksadk/server/static/assets/{dist-B0gdk4rl.js → dist-t6MzE0jU.js} +1 -1
  433. ksadk/server/static/assets/{ebnfDiagram-PWID7BFC-DVfMsLge.js → ebnfDiagram-PWID7BFC-BfCzF1Xi.js} +1 -1
  434. ksadk/server/static/assets/{erDiagram-SSCWMZ5O-CWEZSYaw.js → erDiagram-SSCWMZ5O-Dpz9_0zn.js} +1 -1
  435. ksadk/server/static/assets/eventmodeling-NTZA5JFV-B5-8RH9c.js +1 -0
  436. ksadk/server/static/assets/flowDiagram-A5DVABFB-BppFxEKw.js +1 -0
  437. ksadk/server/static/assets/{ganttDiagram-EL5Y4UJY-TWIxoyYL.js → ganttDiagram-EL5Y4UJY-DDaG1f4_.js} +1 -1
  438. ksadk/server/static/assets/gitGraph-4MIJSDKK-B-AhYj4C.js +1 -0
  439. ksadk/server/static/assets/{gitGraphDiagram-WWUBYQGX-DDh2hd2S.js → gitGraphDiagram-WWUBYQGX-DcxzRwYC.js} +1 -1
  440. ksadk/server/static/assets/index-BMd2mucF.css +2 -0
  441. ksadk/server/static/assets/index-D5qyyhTH.js +244 -0
  442. ksadk/server/static/assets/info-A6RAGUB7-0uiKrC35.js +1 -0
  443. ksadk/server/static/assets/{infoDiagram-RXCK75RN-CgoyWiDR.js → infoDiagram-RXCK75RN-CYMdn6lQ.js} +1 -1
  444. ksadk/server/static/assets/{ishikawaDiagram-5VMMS53U-CyRIu_om.js → ishikawaDiagram-5VMMS53U-CLHFAD6c.js} +1 -1
  445. ksadk/server/static/assets/{journeyDiagram-EYS64GPL-DN5JXHzN.js → journeyDiagram-EYS64GPL-BHSKQGAl.js} +1 -1
  446. ksadk/server/static/assets/{kanban-definition-3QL26DDD-CNP3ui66.js → kanban-definition-3QL26DDD-D5W3tjTT.js} +1 -1
  447. ksadk/server/static/assets/{katex-DWEzQy1d.js → katex-mtjOi4KM.js} +1 -1
  448. ksadk/server/static/assets/{linear-C-qHp7d2.js → linear-BETqsxE_.js} +1 -1
  449. ksadk/server/static/assets/{mermaid-parser.core-Cl-K943T.js → mermaid-parser.core-DPWrvs90.js} +2 -2
  450. ksadk/server/static/assets/{mindmap-definition-FBJOCRG2-D5DB5mYm.js → mindmap-definition-FBJOCRG2-CJG2mfBP.js} +1 -1
  451. ksadk/server/static/assets/packet-AYTQ26CC-BVTmZ_cw.js +1 -0
  452. ksadk/server/static/assets/{pegDiagram-XKGWAZYB-BQVc9ia_.js → pegDiagram-XKGWAZYB-GjAPNaqn.js} +1 -1
  453. ksadk/server/static/assets/pie-WAS4IAKB-DyfxBU7V.js +1 -0
  454. ksadk/server/static/assets/{pieDiagram-E7YTZNPT-B6UCAvtY.js → pieDiagram-E7YTZNPT-ToIewrqr.js} +1 -1
  455. ksadk/server/static/assets/{quadrantDiagram-AXDQQJYC-mIr2d3eb.js → quadrantDiagram-AXDQQJYC-4d78KiEY.js} +1 -1
  456. ksadk/server/static/assets/radar-RG4KPBEZ-FFontjL2.js +1 -0
  457. ksadk/server/static/assets/railroad-74A4TZTK-D0Uidzen.js +1 -0
  458. ksadk/server/static/assets/railroad-abnf-HS5TGJTU-BOo_9T2h.js +1 -0
  459. ksadk/server/static/assets/railroad-ebnf-LZEXJU2U-D6-BjW7Z.js +1 -0
  460. ksadk/server/static/assets/railroad-peg-WCYAUIDC-CXx__yMm.js +1 -0
  461. ksadk/server/static/assets/{railroadDiagram-O6MQD6OU-Dt3FFDmK.js → railroadDiagram-O6MQD6OU-DKzx4xfv.js} +1 -1
  462. ksadk/server/static/assets/{requirementDiagram-EFPCY7ZU-Cz_vQtgF.js → requirementDiagram-EFPCY7ZU-CJYljxQS.js} +1 -1
  463. ksadk/server/static/assets/{sankeyDiagram-P5KCCOFB-wlO1TsH5.js → sankeyDiagram-P5KCCOFB-DLU2fV1w.js} +1 -1
  464. ksadk/server/static/assets/{sequenceDiagram-WJ2MYXX4-CHRbElYq.js → sequenceDiagram-WJ2MYXX4-CVqysrA9.js} +1 -1
  465. ksadk/server/static/assets/{sizeCapture-X5ZJPWSS-DXX54iyO.js → sizeCapture-X5ZJPWSS-BUxfmTHc.js} +1 -1
  466. ksadk/server/static/assets/{stateDiagram-HBIQ2CUA-Dp_lw9II.js → stateDiagram-HBIQ2CUA-CNFgYI9E.js} +1 -1
  467. ksadk/server/static/assets/stateDiagram-v2-4QOOHH4V-BXAFScz8.js +1 -0
  468. ksadk/server/static/assets/{swimlanes-XN3QIQJK-D8O5UlLG.js → swimlanes-XN3QIQJK-B6qCMe8N.js} +1 -1
  469. ksadk/server/static/assets/swimlanesDiagram-VK2B7HYN-uIQ2lJKH.js +8 -0
  470. ksadk/server/static/assets/{timeline-definition-24CTP7MA-8mfKcxvG.js → timeline-definition-24CTP7MA-CMD3x_U_.js} +1 -1
  471. ksadk/server/static/assets/treeView-Q6P3EWNA-CK5GgucZ.js +1 -0
  472. ksadk/server/static/assets/treemap-WGGIJYW6-Bq1u1SpG.js +1 -0
  473. ksadk/server/static/assets/{vennDiagram-4TSXK5OY-EnNl0DE7.js → vennDiagram-4TSXK5OY-BqtUqvXM.js} +1 -1
  474. ksadk/server/static/assets/wardley-WFR3VGLG-QAt06uEz.js +1 -0
  475. ksadk/server/static/assets/{wardleyDiagram-VM6X3IG4-DBu5fbYr.js → wardleyDiagram-VM6X3IG4-B5KfDjI-.js} +1 -1
  476. ksadk/server/static/assets/{xychartDiagram-S5SC5T6Z-BSVXs4IY.js → xychartDiagram-S5SC5T6Z-BaUlSZrn.js} +1 -1
  477. ksadk/server/static/index.html +2 -2
  478. ksadk/server/terminal_sessions.py +34 -2
  479. ksadk/session_context.py +66 -0
  480. ksadk/sessions/__init__.py +11 -21
  481. ksadk/sessions/_local_service_sync.py +263 -1
  482. ksadk/sessions/base.py +176 -0
  483. ksadk/sessions/errors.py +4 -0
  484. ksadk/sessions/in_memory.py +309 -19
  485. ksadk/sessions/invocation_identity.py +235 -0
  486. ksadk/sessions/local_service.py +83 -1
  487. ksadk/sessions/persistence.py +275 -0
  488. ksadk/sessions/postgres_service.py +358 -0
  489. ksadk/sessions/resilience.py +8 -0
  490. ksadk/sessions/resilient.py +362 -4
  491. ksadk/sessions/topology.py +135 -0
  492. ksadk/skills/__init__.py +26 -0
  493. ksadk/skills/events.py +464 -0
  494. ksadk/skills/manifest_cache.py +263 -0
  495. ksadk/skills/mcp_server/__init__.py +0 -0
  496. ksadk/skills/mcp_server/_registry.py +33 -0
  497. ksadk/skills/mcp_server/_routing.py +26 -0
  498. ksadk/skills/mcp_server/_workspace_files.py +160 -0
  499. ksadk/skills/mcp_server/register.py +415 -0
  500. ksadk/skills/mcp_server/server.py +218 -0
  501. ksadk/skills/models.py +37 -4
  502. ksadk/skills/observability.py +132 -0
  503. ksadk/skills/package_store.py +261 -40
  504. ksadk/skills/runtime/agent.py +67 -9
  505. ksadk/skills/runtime/artifact_delivery.py +139 -0
  506. ksadk/skills/runtime/artifacts.py +87 -0
  507. ksadk/skills/runtime/backends/e2b.py +460 -27
  508. ksadk/skills/runtime/backends/local.py +629 -62
  509. ksadk/skills/runtime/base.py +81 -7
  510. ksadk/skills/runtime/executor.py +268 -1
  511. ksadk/skills/runtime/loader.py +118 -5
  512. ksadk/skills/runtime/pinned.py +114 -0
  513. ksadk/skills/runtime/request.py +49 -0
  514. ksadk/skills/service_client.py +167 -28
  515. ksadk/skills/tool_defs.py +108 -3
  516. ksadk/studio/api.py +810 -93
  517. ksadk/studio/api_catalog_routes.py +18 -0
  518. ksadk/studio/api_contracts.py +8 -2
  519. ksadk/studio/api_plugin_routes.py +562 -104
  520. ksadk/studio/api_resource_connections.py +221 -0
  521. ksadk/studio/authoring.py +12 -6
  522. ksadk/studio/authoring_coordinator.py +23 -16
  523. ksadk/studio/builder.py +88 -0
  524. ksadk/studio/capabilities.py +23 -6
  525. ksadk/studio/channel_connections.py +333 -0
  526. ksadk/studio/cloud.py +370 -112
  527. ksadk/studio/cloud_shared_web.py +638 -0
  528. ksadk/studio/codex_agent_service.py +130 -28
  529. ksadk/studio/codex_builder.py +242 -3
  530. ksadk/studio/codex_credentials.py +90 -0
  531. ksadk/studio/codex_manifest.py +31 -4
  532. ksadk/studio/codex_plugin_store.py +746 -0
  533. ksadk/studio/codex_provider_build.py +231 -0
  534. ksadk/studio/codex_run.py +190 -26
  535. ksadk/studio/compatibility_report.py +12 -1
  536. ksadk/studio/compiler.py +88 -14
  537. ksadk/studio/configuration.py +182 -0
  538. ksadk/studio/contracts.py +165 -11
  539. ksadk/studio/dsh_application.py +247 -0
  540. ksadk/studio/dsh_capability_service.py +1374 -0
  541. ksadk/studio/dsh_lifecycle.py +58 -0
  542. ksadk/studio/dsh_models.py +59 -0
  543. ksadk/studio/dsh_provider_registration.py +367 -21
  544. ksadk/studio/entry.py +53 -0
  545. ksadk/studio/event_store.py +36 -5
  546. ksadk/studio/execution_host.py +525 -0
  547. ksadk/studio/framework_run.py +32 -10
  548. ksadk/studio/hosted_kernel.py +89 -14
  549. ksadk/studio/kernel_registry.py +418 -0
  550. ksadk/studio/kernel_sqlite_migration.py +181 -0
  551. ksadk/studio/mcp_runtime.py +11 -3
  552. ksadk/studio/model_client.py +1180 -66
  553. ksadk/studio/model_profile_service.py +26 -11
  554. ksadk/studio/native_documents.py +172 -0
  555. ksadk/studio/plugin_composition.py +202 -24
  556. ksadk/studio/plugin_kernel_adapter.py +21 -106
  557. ksadk/studio/plugin_lifecycle.py +80 -0
  558. ksadk/studio/plugin_runtime.py +448 -56
  559. ksadk/studio/provider_recovery.py +59 -0
  560. ksadk/studio/recovery_page.py +70 -0
  561. ksadk/studio/resource_authority.py +664 -0
  562. ksadk/studio/resource_binding_validation.py +77 -0
  563. ksadk/studio/resource_build_admission.py +196 -0
  564. ksadk/studio/resource_build_materializer.py +149 -0
  565. ksadk/studio/resource_catalog.py +149 -2
  566. ksadk/studio/resource_connections.py +220 -0
  567. ksadk/studio/run_activity.py +895 -0
  568. ksadk/studio/run_documents.py +127 -0
  569. ksadk/studio/run_service.py +789 -83
  570. ksadk/studio/runtime_catalog.py +53 -10
  571. ksadk/studio/runtime_source.py +16 -8
  572. ksadk/studio/scheduler_assistant.py +317 -0
  573. ksadk/studio/scheduler_runtime.py +32 -280
  574. ksadk/studio/scheduler_service.py +3 -0
  575. ksadk/studio/service.py +861 -120
  576. ksadk/studio/shared_web.py +579 -82
  577. ksadk/studio/static/assets/ChannelsPage-D_PGmKVq.js +8 -0
  578. ksadk/studio/static/assets/CodeBlock-DMIf4h33-UIqo-BPW.js +44 -0
  579. ksadk/studio/static/assets/ExecutionTree-v3HexvPo-Bk8wzGSy.js +1 -0
  580. ksadk/studio/static/assets/KaTeX_AMS-Regular-BQhdFMY1.woff2 +0 -0
  581. ksadk/studio/static/assets/KaTeX_AMS-Regular-DMm9YOAa.woff +0 -0
  582. ksadk/studio/static/assets/KaTeX_AMS-Regular-DRggAlZN.ttf +0 -0
  583. ksadk/studio/static/assets/KaTeX_Caligraphic-Bold-ATXxdsX0.ttf +0 -0
  584. ksadk/studio/static/assets/KaTeX_Caligraphic-Bold-BEiXGLvX.woff +0 -0
  585. ksadk/studio/static/assets/KaTeX_Caligraphic-Bold-Dq_IR9rO.woff2 +0 -0
  586. ksadk/studio/static/assets/KaTeX_Caligraphic-Regular-CTRA-rTL.woff +0 -0
  587. ksadk/studio/static/assets/KaTeX_Caligraphic-Regular-Di6jR-x-.woff2 +0 -0
  588. ksadk/studio/static/assets/KaTeX_Caligraphic-Regular-wX97UBjC.ttf +0 -0
  589. ksadk/studio/static/assets/KaTeX_Fraktur-Bold-BdnERNNW.ttf +0 -0
  590. ksadk/studio/static/assets/KaTeX_Fraktur-Bold-BsDP51OF.woff +0 -0
  591. ksadk/studio/static/assets/KaTeX_Fraktur-Bold-CL6g_b3V.woff2 +0 -0
  592. ksadk/studio/static/assets/KaTeX_Fraktur-Regular-CB_wures.ttf +0 -0
  593. ksadk/studio/static/assets/KaTeX_Fraktur-Regular-CTYiF6lA.woff2 +0 -0
  594. ksadk/studio/static/assets/KaTeX_Fraktur-Regular-Dxdc4cR9.woff +0 -0
  595. ksadk/studio/static/assets/KaTeX_Main-Bold-Cx986IdX.woff2 +0 -0
  596. ksadk/studio/static/assets/KaTeX_Main-Bold-Jm3AIy58.woff +0 -0
  597. ksadk/studio/static/assets/KaTeX_Main-Bold-waoOVXN0.ttf +0 -0
  598. ksadk/studio/static/assets/KaTeX_Main-BoldItalic-DxDJ3AOS.woff2 +0 -0
  599. ksadk/studio/static/assets/KaTeX_Main-BoldItalic-DzxPMmG6.ttf +0 -0
  600. ksadk/studio/static/assets/KaTeX_Main-BoldItalic-SpSLRI95.woff +0 -0
  601. ksadk/studio/static/assets/KaTeX_Main-Italic-3WenGoN9.ttf +0 -0
  602. ksadk/studio/static/assets/KaTeX_Main-Italic-BMLOBm91.woff +0 -0
  603. ksadk/studio/static/assets/KaTeX_Main-Italic-NWA7e6Wa.woff2 +0 -0
  604. ksadk/studio/static/assets/KaTeX_Main-Regular-B22Nviop.woff2 +0 -0
  605. ksadk/studio/static/assets/KaTeX_Main-Regular-Dr94JaBh.woff +0 -0
  606. ksadk/studio/static/assets/KaTeX_Main-Regular-ypZvNtVU.ttf +0 -0
  607. ksadk/studio/static/assets/KaTeX_Math-BoldItalic-B3XSjfu4.ttf +0 -0
  608. ksadk/studio/static/assets/KaTeX_Math-BoldItalic-CZnvNsCZ.woff2 +0 -0
  609. ksadk/studio/static/assets/KaTeX_Math-BoldItalic-iY-2wyZ7.woff +0 -0
  610. ksadk/studio/static/assets/KaTeX_Math-Italic-DA0__PXp.woff +0 -0
  611. ksadk/studio/static/assets/KaTeX_Math-Italic-flOr_0UB.ttf +0 -0
  612. ksadk/studio/static/assets/KaTeX_Math-Italic-t53AETM-.woff2 +0 -0
  613. ksadk/studio/static/assets/KaTeX_SansSerif-Bold-CFMepnvq.ttf +0 -0
  614. ksadk/studio/static/assets/KaTeX_SansSerif-Bold-D1sUS0GD.woff2 +0 -0
  615. ksadk/studio/static/assets/KaTeX_SansSerif-Bold-DbIhKOiC.woff +0 -0
  616. ksadk/studio/static/assets/KaTeX_SansSerif-Italic-C3H0VqGB.woff2 +0 -0
  617. ksadk/studio/static/assets/KaTeX_SansSerif-Italic-DN2j7dab.woff +0 -0
  618. ksadk/studio/static/assets/KaTeX_SansSerif-Italic-YYjJ1zSn.ttf +0 -0
  619. ksadk/studio/static/assets/KaTeX_SansSerif-Regular-BNo7hRIc.ttf +0 -0
  620. ksadk/studio/static/assets/KaTeX_SansSerif-Regular-CS6fqUqJ.woff +0 -0
  621. ksadk/studio/static/assets/KaTeX_SansSerif-Regular-DDBCnlJ7.woff2 +0 -0
  622. ksadk/studio/static/assets/KaTeX_Script-Regular-C5JkGWo-.ttf +0 -0
  623. ksadk/studio/static/assets/KaTeX_Script-Regular-D3wIWfF6.woff2 +0 -0
  624. ksadk/studio/static/assets/KaTeX_Script-Regular-D5yQViql.woff +0 -0
  625. ksadk/studio/static/assets/KaTeX_Size1-Regular-C195tn64.woff +0 -0
  626. ksadk/studio/static/assets/KaTeX_Size1-Regular-Dbsnue_I.ttf +0 -0
  627. ksadk/studio/static/assets/KaTeX_Size1-Regular-mCD8mA8B.woff2 +0 -0
  628. ksadk/studio/static/assets/KaTeX_Size2-Regular-B7gKUWhC.ttf +0 -0
  629. ksadk/studio/static/assets/KaTeX_Size2-Regular-Dy4dx90m.woff2 +0 -0
  630. ksadk/studio/static/assets/KaTeX_Size2-Regular-oD1tc_U0.woff +0 -0
  631. ksadk/studio/static/assets/KaTeX_Size3-Regular-CTq5MqoE.woff +0 -0
  632. ksadk/studio/static/assets/KaTeX_Size3-Regular-DgpXs0kz.ttf +0 -0
  633. ksadk/studio/static/assets/KaTeX_Size4-Regular-BF-4gkZK.woff +0 -0
  634. ksadk/studio/static/assets/KaTeX_Size4-Regular-DWFBv043.ttf +0 -0
  635. ksadk/studio/static/assets/KaTeX_Size4-Regular-Dl5lxZxV.woff2 +0 -0
  636. ksadk/studio/static/assets/KaTeX_Typewriter-Regular-C0xS9mPB.woff +0 -0
  637. ksadk/studio/static/assets/KaTeX_Typewriter-Regular-CO6r4hn1.woff2 +0 -0
  638. ksadk/studio/static/assets/KaTeX_Typewriter-Regular-D3Ib7_Hf.ttf +0 -0
  639. ksadk/studio/static/assets/MathMessageMarkdown-BesSeCYl-BEOyPC3w.css +1 -0
  640. ksadk/studio/static/assets/MathMessageMarkdown-BesSeCYl-OhNwH4K9.js +8 -0
  641. ksadk/studio/static/assets/MermaidBlock-H_0qzQDf-BdXtxug_.js +11 -0
  642. ksadk/studio/static/assets/MessageMarkdown-CwMTvgFj-g0I-I4dD.js +59 -0
  643. ksadk/studio/static/assets/PrismRenderer-5pK6tUdb.js +3 -0
  644. ksadk/studio/static/assets/TeamsPage-DqX4HWKQ.js +3 -0
  645. ksadk/studio/static/assets/abnfDiagram-VCTEODGH-Bnb1O3tA.js +1 -0
  646. ksadk/studio/static/assets/arc-Pry-7G1_.js +1 -0
  647. ksadk/studio/static/assets/architecture-7GRP2DOG-BMOPAkUC.js +1 -0
  648. ksadk/studio/static/assets/architectureDiagram-5GKGNRK7-5Zn1gqJv.js +36 -0
  649. ksadk/studio/static/assets/array-BifhSqXX.js +1 -0
  650. ksadk/studio/static/assets/blockDiagram-I7D4REHJ-CLB4L11u.js +129 -0
  651. ksadk/studio/static/assets/c4Diagram-7LVT6UL2-BOma_Z_F.js +38 -0
  652. ksadk/studio/static/assets/channel-r8itPEik.js +1 -0
  653. ksadk/studio/static/assets/chunk-2E4U76K2-BFf_huql.js +2 -0
  654. ksadk/studio/static/assets/chunk-2Q5K7J3B-C1jixKkw.js +1 -0
  655. ksadk/studio/static/assets/chunk-2ZTRR5NV-C2qZJila.js +2 -0
  656. ksadk/studio/static/assets/chunk-3Z5EZCMW-DMniOlPd.js +1 -0
  657. ksadk/studio/static/assets/chunk-4HAMMTFA-DVtDP4rm.js +62 -0
  658. ksadk/studio/static/assets/chunk-5V3GS4D5-i-ZDOEnP.js +1 -0
  659. ksadk/studio/static/assets/chunk-5VM5RSS4-ZNzvKenW.js +15 -0
  660. ksadk/studio/static/assets/chunk-6AZGARVD-BB6FqMl-.js +1 -0
  661. ksadk/studio/static/assets/chunk-6EIED4P4-DdUJkP0f.js +1 -0
  662. ksadk/studio/static/assets/chunk-6K3QC6MW-CqVsVn-y.js +1 -0
  663. ksadk/studio/static/assets/chunk-6TQVIW2G-DKlLbNIP.js +1 -0
  664. ksadk/studio/static/assets/chunk-747NJXEK-BFkZPlab.js +2 -0
  665. ksadk/studio/static/assets/chunk-75Z2AOVW-BZNhM4vB.js +2 -0
  666. ksadk/studio/static/assets/chunk-CLGD4ZFX-D-GTtyKs.js +1 -0
  667. ksadk/studio/static/assets/chunk-DU6HZSFF-CpEZCUgg.js +128 -0
  668. ksadk/studio/static/assets/chunk-F27PBJKO-D7pvKf0C.js +1 -0
  669. ksadk/studio/static/assets/chunk-FOHPRMQF-DHwB1DNv.js +161 -0
  670. ksadk/studio/static/assets/chunk-GMAD6QVW-DE_8H717.js +72 -0
  671. ksadk/studio/static/assets/chunk-GVQU2GXP-BfEB0lNv.js +1 -0
  672. ksadk/studio/static/assets/chunk-I5DQTOEV-Hm2LfiYI.js +1 -0
  673. ksadk/studio/static/assets/chunk-ICYGCRZG-749o-pGJ.js +1 -0
  674. ksadk/studio/static/assets/chunk-IH6LHLGP-CC6I9F3i.js +1 -0
  675. ksadk/studio/static/assets/chunk-IMKFNOWR-D38axYOR.js +231 -0
  676. ksadk/studio/static/assets/chunk-JWPE2WC7-DVXcaiue.js +1 -0
  677. ksadk/studio/static/assets/chunk-KI3K4JFJ-Rma-0k_M.js +1 -0
  678. ksadk/studio/static/assets/chunk-L3NEJ4N5-Dq5xn7aL.js +1 -0
  679. ksadk/studio/static/assets/chunk-LNGE3PJU-DWpGwHrW.js +34 -0
  680. ksadk/studio/static/assets/chunk-OSK3NFVY-DiCQjx9b.js +10 -0
  681. ksadk/studio/static/assets/chunk-OUJLGHUK-D0j2JRSg.js +2 -0
  682. ksadk/studio/static/assets/chunk-P2QGCYS3-VdhKmfYq.js +1 -0
  683. ksadk/studio/static/assets/chunk-POPQ4Y6H-C1_rzO5M.js +1 -0
  684. ksadk/studio/static/assets/chunk-PWAF6VOD-B45HvflI.js +1 -0
  685. ksadk/studio/static/assets/chunk-SHT3W25Y-DsCFnRVE.js +168 -0
  686. ksadk/studio/static/assets/chunk-SVP7TREG-DljApgRX.js +88 -0
  687. ksadk/studio/static/assets/chunk-TICWLB2K-DWqRtyqa.js +206 -0
  688. ksadk/studio/static/assets/chunk-TLUHSLCS-DUeGgnD5.js +2 -0
  689. ksadk/studio/static/assets/chunk-UY3FDG6J-CnmaAkG5.js +1 -0
  690. ksadk/studio/static/assets/chunk-XHIXRSVI-BFQ6B8BE.js +1 -0
  691. ksadk/studio/static/assets/chunk-XXDRQBXY-DqAYeljN.js +1 -0
  692. ksadk/studio/static/assets/chunk-Y2CYZVJY-DsF7k-Jl.js +1 -0
  693. ksadk/studio/static/assets/classDiagram-ZZMXUADV-DjeMNJmu.js +1 -0
  694. ksadk/studio/static/assets/classDiagram-v2-VYDZK3BY-DjeMNJmu.js +1 -0
  695. ksadk/studio/static/assets/clsx-DB0hHKMi.js +1 -0
  696. ksadk/studio/static/assets/cose-bilkent-JH36ORCC-om8AY0Mc.js +1 -0
  697. ksadk/studio/static/assets/createLucideIcon-DR0LGTP5.js +1 -0
  698. ksadk/studio/static/assets/cynefin-OW5HDTMX-7tP7QfM3.js +1 -0
  699. ksadk/studio/static/assets/cynefinDiagram-5FMLGOSQ-6BrmK52S.js +62 -0
  700. ksadk/studio/static/assets/cytoscape.esm-CGd-uY3x.js +321 -0
  701. ksadk/studio/static/assets/dagre-GXQ25YYZ-buZBRlwz.js +4 -0
  702. ksadk/studio/static/assets/dagre-PrKaheQc.js +1 -0
  703. ksadk/studio/static/assets/defaultLocale-BFoDCU3G.js +1 -0
  704. ksadk/studio/static/assets/diagram-S7CK7UJ4-C6aH78c4.js +30 -0
  705. ksadk/studio/static/assets/diagram-UQ7AKVKN-DY_tQ6C_.js +41 -0
  706. ksadk/studio/static/assets/diagram-VSXAHHWV-DX9p5cQT.js +3 -0
  707. ksadk/studio/static/assets/diagram-VX7I27RA-DB2WSH8X.js +24 -0
  708. ksadk/studio/static/assets/diagram-Z3DM3KII-Ce1BJwHE.js +24 -0
  709. ksadk/studio/static/assets/dist-v5Q1xZ2K.js +1 -0
  710. ksadk/studio/static/assets/ebnfDiagram-PWID7BFC-Daukxwqf.js +1 -0
  711. ksadk/studio/static/assets/erDiagram-RLTQ6QDP-CGthTMmJ.js +99 -0
  712. ksadk/studio/static/assets/eventmodeling-NTZA5JFV-BR2FzK4R.js +1 -0
  713. ksadk/studio/static/assets/flowDiagram-HODETNUW-CZ1tEenp.js +1 -0
  714. ksadk/studio/static/assets/ganttDiagram-EL5Y4UJY-BfoAZW9X.js +292 -0
  715. ksadk/studio/static/assets/gitGraph-4MIJSDKK-DYlXv_yJ.js +1 -0
  716. ksadk/studio/static/assets/gitGraphDiagram-WWUBYQGX-S985OIJF.js +106 -0
  717. ksadk/studio/static/assets/graphlib-DS17s2tU.js +1 -0
  718. ksadk/studio/static/assets/iconfont-4HN3C9Pg.woff2 +0 -0
  719. ksadk/studio/static/assets/index-CfEnms6Y.css +2 -0
  720. ksadk/studio/static/assets/index-Dp61rOWZ.js +0 -0
  721. ksadk/studio/static/assets/index.dom-BQenBtFm.js +1 -0
  722. ksadk/studio/static/assets/info-A6RAGUB7-BlU-8_xu.js +1 -0
  723. ksadk/studio/static/assets/infoDiagram-27XIBGKW-CO3W8tFn.js +2 -0
  724. ksadk/studio/static/assets/init-C-OQMol4.js +1 -0
  725. ksadk/studio/static/assets/ishikawaDiagram-5VMMS53U-BUGEl8cO.js +70 -0
  726. ksadk/studio/static/assets/journeyDiagram-3NMN7TZE-Ch2ZYxvr.js +139 -0
  727. ksadk/studio/static/assets/kanban-definition-UXKFOSKX-Da-Fp4vC.js +89 -0
  728. ksadk/studio/static/assets/katex-DhON-x74.js +257 -0
  729. ksadk/studio/static/assets/kingsoft-cloud-BOcLiQ3e.ico +0 -0
  730. ksadk/studio/static/assets/line-BDaeq300.js +1 -0
  731. ksadk/studio/static/assets/linear-DmucvK78.js +1 -0
  732. ksadk/studio/static/assets/mermaid-parser.core-Cj5mYdBi.js +4 -0
  733. ksadk/studio/static/assets/mindmap-definition-YA3MSWOX-CvlsVQ38.js +96 -0
  734. ksadk/studio/static/assets/ordinal-BDEzSJ7C.js +1 -0
  735. ksadk/studio/static/assets/packet-AYTQ26CC-BSJEH9Lb.js +1 -0
  736. ksadk/studio/static/assets/path-fybaL0A-.js +1 -0
  737. ksadk/studio/static/assets/pegDiagram-XKGWAZYB-BuHuNgT5.js +1 -0
  738. ksadk/studio/static/assets/pie-WAS4IAKB-qxv01Y8W.js +1 -0
  739. ksadk/studio/static/assets/pieDiagram-E7YTZNPT-DlrWiSOv.js +39 -0
  740. ksadk/studio/static/assets/preload-helper-CO68xz6u.js +1 -0
  741. ksadk/studio/static/assets/presentation-yYw7xK60-BmcZriri.js +1 -0
  742. ksadk/studio/static/assets/quadrantDiagram-AXDQQJYC-BA3hpUZM.js +7 -0
  743. ksadk/studio/static/assets/radar-RG4KPBEZ-B6h6pWOs.js +1 -0
  744. ksadk/studio/static/assets/railroad-74A4TZTK-CGtTWdGc.js +1 -0
  745. ksadk/studio/static/assets/railroad-abnf-HS5TGJTU-Cq7y22IA.js +1 -0
  746. ksadk/studio/static/assets/railroad-ebnf-LZEXJU2U-V0aQVv9m.js +1 -0
  747. ksadk/studio/static/assets/railroad-peg-WCYAUIDC-BQiIsX_p.js +1 -0
  748. ksadk/studio/static/assets/railroadDiagram-O6MQD6OU-BxpAazym.js +1 -0
  749. ksadk/studio/static/assets/requirementDiagram-BXWQKSXE-E-Ge0FcV.js +84 -0
  750. ksadk/studio/static/assets/rolldown-runtime-Dy4uBu1J-DK3Fl9T5.js +1 -0
  751. ksadk/studio/static/assets/rough.esm-Dy-Kn_BL.js +1 -0
  752. ksadk/studio/static/assets/sankeyDiagram-P5KCCOFB-CA6YKhQ3.js +40 -0
  753. ksadk/studio/static/assets/sequenceDiagram-WJ2MYXX4-CcElXGg4.js +162 -0
  754. ksadk/studio/static/assets/sizeCapture-INFHLROL-B0uUizjq.js +1 -0
  755. ksadk/studio/static/assets/src-B6xuSHsQ.js +1 -0
  756. ksadk/studio/static/assets/stateDiagram-D77RDMKH-DdXZOFqY.js +1 -0
  757. ksadk/studio/static/assets/stateDiagram-v2-MP3YSRHH-CJbOM-QK.js +1 -0
  758. ksadk/studio/static/assets/swimlanes-42K2YHIH-NtgEEHLY.js +1 -0
  759. ksadk/studio/static/assets/swimlanesDiagram-VR7AAH4N-D-AVlW8B.js +8 -0
  760. ksadk/studio/static/assets/timeline-definition-24CTP7MA-CIuYhNy3.js +120 -0
  761. ksadk/studio/static/assets/treeView-Q6P3EWNA-BTTYcvrF.js +1 -0
  762. ksadk/studio/static/assets/treemap-WGGIJYW6-Cg7tyfH8.js +1 -0
  763. ksadk/studio/static/assets/vennDiagram-4TSXK5OY-7HbApbrv.js +34 -0
  764. ksadk/studio/static/assets/wardley-WFR3VGLG-C6N1rULY.js +1 -0
  765. ksadk/studio/static/assets/wardleyDiagram-VM6X3IG4-CMJiaedy.js +78 -0
  766. ksadk/studio/static/assets/xychartDiagram-S5SC5T6Z-BdgtMvW2.js +7 -0
  767. ksadk/studio/static/index.html +8 -2
  768. ksadk/studio/teams_catalog.py +133 -0
  769. ksadk/studio/teams_installation.py +214 -0
  770. ksadk/studio/teams_node.py +545 -0
  771. ksadk/studio/teams_node_runner.py +69 -0
  772. ksadk/studio/teams_remote.py +274 -0
  773. ksadk/studio/templates.py +40 -19
  774. ksadk/studio/validator.py +13 -0
  775. ksadk/studio/workspace.py +19 -4
  776. ksadk/studio/workspace_plugins.py +136 -0
  777. ksadk/studio/workspace_registry.py +286 -0
  778. ksadk/toolsets/__init__.py +11 -0
  779. ksadk/toolsets/skills.py +446 -378
  780. ksadk/toolsets/workspace.py +3 -3
  781. ksadk/toolsets/workspace_identity.py +15 -0
  782. ksadk/version.py +1 -1
  783. ksadk_runtime_common/memory_backend/providers/lancedb.py +56 -2
  784. ksadk_runtime_common/schemas/memory_backend_manifest.schema.json +148 -148
  785. ksadk_runtime_common/workspace_files/router.py +26 -13
  786. agentengine_sdk_python-0.8.3.dist-info/RECORD +0 -833
  787. ksadk/server/static/assets/MathMessageMarkdown-D9uB55Oh.js +0 -8
  788. ksadk/server/static/assets/architecture-7GRP2DOG-Dk9nRQ6-.js +0 -1
  789. ksadk/server/static/assets/channel-s354Yo6o.js +0 -1
  790. ksadk/server/static/assets/chunk-2Q5K7J3B-CDpPpKR5.js +0 -1
  791. ksadk/server/static/assets/classDiagram-DTDB5LWJ-Dd0nucl9.js +0 -1
  792. ksadk/server/static/assets/classDiagram-v2-JRS7N3AN-Dd0nucl9.js +0 -1
  793. ksadk/server/static/assets/cynefin-OW5HDTMX-BBlT4uMf.js +0 -1
  794. ksadk/server/static/assets/dist-DdRBIceA.js +0 -1
  795. ksadk/server/static/assets/eventmodeling-NTZA5JFV-Dr5okd8V.js +0 -1
  796. ksadk/server/static/assets/flowDiagram-A5DVABFB-VEO-cVcO.js +0 -1
  797. ksadk/server/static/assets/gitGraph-4MIJSDKK-CKiKY9Cf.js +0 -1
  798. ksadk/server/static/assets/index-B2k_urY8.js +0 -241
  799. ksadk/server/static/assets/index-ILPt6IWF.css +0 -2
  800. ksadk/server/static/assets/info-A6RAGUB7-ubA4Nm_p.js +0 -1
  801. ksadk/server/static/assets/packet-AYTQ26CC-C7R3NUlK.js +0 -1
  802. ksadk/server/static/assets/pie-WAS4IAKB-BIT6qjr3.js +0 -1
  803. ksadk/server/static/assets/radar-RG4KPBEZ-l5noef9X.js +0 -1
  804. ksadk/server/static/assets/railroad-74A4TZTK-Baea6ZvM.js +0 -1
  805. ksadk/server/static/assets/railroad-abnf-HS5TGJTU-OKn8zZnU.js +0 -1
  806. ksadk/server/static/assets/railroad-ebnf-LZEXJU2U-DdKAKC4l.js +0 -1
  807. ksadk/server/static/assets/railroad-peg-WCYAUIDC-Bds8udlG.js +0 -1
  808. ksadk/server/static/assets/stateDiagram-v2-4QOOHH4V-5b-8o2iS.js +0 -1
  809. ksadk/server/static/assets/swimlanesDiagram-VK2B7HYN-uf6WPRA4.js +0 -8
  810. ksadk/server/static/assets/treeView-Q6P3EWNA-CK5CSrSO.js +0 -1
  811. ksadk/server/static/assets/treemap-WGGIJYW6-Ch2BKgAM.js +0 -1
  812. ksadk/server/static/assets/wardley-WFR3VGLG-YW3Q0ml_.js +0 -1
  813. ksadk/studio/static/assets/PrismRenderer-IYN-ffww.js +0 -3
  814. ksadk/studio/static/assets/index-DXs1Eq4M.css +0 -1
  815. ksadk/studio/static/assets/index-DeDqwTsD.js +0 -283
  816. {agentengine_sdk_python-0.8.3.dist-info → agentengine_sdk_python-0.8.5.dist-info}/WHEEL +0 -0
  817. {agentengine_sdk_python-0.8.3.dist-info → agentengine_sdk_python-0.8.5.dist-info}/entry_points.txt +0 -0
  818. {agentengine_sdk_python-0.8.3.dist-info → agentengine_sdk_python-0.8.5.dist-info}/licenses/LICENSE +0 -0
  819. {agentengine_sdk_python-0.8.3.dist-info → agentengine_sdk_python-0.8.5.dist-info}/top_level.txt +0 -0
@@ -8,8 +8,9 @@ FASTAPI_REQUIREMENT = "fastapi>=0.136.0,<0.137.0"
8
8
  STARLETTE_REQUIREMENT = "starlette>=1.0,<1.4"
9
9
 
10
10
  ADK_REQUIREMENTS = (
11
- # goal-00: 与 ksadk 自身 adk extra 对齐,允许 1.34.x 与 2.x
11
+ # 与 ksadk 自身 adk extra 对齐,支持 1.x 与 2.x。
12
12
  "google-adk>=1.34.0,<3.0.0",
13
+ "greenlet>=1.0.0",
13
14
  "litellm>=1.0.0",
14
15
  )
15
16
 
@@ -22,8 +23,22 @@ LANGCHAIN_ECOSYSTEM_REQUIREMENTS = (
22
23
 
23
24
  DEEPAGENTS_REQUIREMENTS = ("deepagents>=0.6.2,<1.0.0",)
24
25
 
25
- # codex runtime:openai-codex SDK(自带 codex CLI 二进制,见 PyPI cli-bin wheel)
26
- CODEX_REQUIREMENTS = ("openai-codex==0.144.4",)
26
+ # codex runtime:openai-codex SDK(自带 codex CLI 二进制,见 PyPI cli-bin wheel)。
27
+ # 版本必须与 pyproject.toml 的 ksadk[codex] extra 保持一致:适配层
28
+ # (ksadk/codex/client.py)依赖 app-server 私有协议,SDK/CLI 是精确 co-pin。
29
+ CODEX_REQUIREMENTS = ("openai-codex==0.154.0",)
30
+
31
+ # KsADK Harness is a managed LangGraph runtime. Keep its checkpoint adapter
32
+ # explicit: LangGraph split the SQLite saver into a separately distributed
33
+ # package, so installing only ``langgraph`` leaves
34
+ # ``langgraph.checkpoint.sqlite`` unavailable in a freshly built agent.
35
+ HARNESS_REQUIREMENTS = (
36
+ "langgraph>=1.2.0,<1.3.0",
37
+ "langgraph-checkpoint-sqlite>=2.0.0",
38
+ "langchain>=1.3.14,<2.0.0",
39
+ "langchain-core>=1.5.0,<2.0.0",
40
+ "langchain-openai>=1.4.0,<2.0.0",
41
+ )
27
42
 
28
43
 
29
44
  def code_requirements_for_framework(framework: str) -> list[str]:
@@ -45,6 +60,8 @@ def requirements_for_framework(framework: str) -> list[str]:
45
60
  return list(ADK_REQUIREMENTS)
46
61
  if normalized == "codex":
47
62
  return list(CODEX_REQUIREMENTS)
63
+ if normalized == "harness":
64
+ return list(HARNESS_REQUIREMENTS)
48
65
  if normalized in {"langchain", "langgraph", "deepagents"}:
49
66
  requirements = list(LANGCHAIN_ECOSYSTEM_REQUIREMENTS)
50
67
  if normalized == "deepagents":
@@ -60,6 +77,8 @@ def minimal_requirements_for_framework(framework: str) -> list[str]:
60
77
  return list(ADK_REQUIREMENTS)
61
78
  if normalized == "codex":
62
79
  return list(CODEX_REQUIREMENTS)
80
+ if normalized == "harness":
81
+ return list(HARNESS_REQUIREMENTS)
63
82
  if normalized in {"langchain", "langgraph", "deepagents"}:
64
83
  requirements = [
65
84
  "langchain>=1.3.14,<2.0.0",
@@ -2,6 +2,7 @@
2
2
  KS3 上传模块 - 金山云对象存储上传
3
3
  """
4
4
 
5
+ import logging
5
6
  import os
6
7
  import socket
7
8
  import time
@@ -27,7 +28,15 @@ class KS3Uploader:
27
28
  UPLOAD_TIMEOUT_PER_MB_SECONDS = 4.0
28
29
  UPLOAD_TIMEOUT_MAX_SECONDS = 3600
29
30
 
30
- def __init__(self, region: str = "cn-beijing-6", bucket: Optional[str] = None):
31
+ def __init__(
32
+ self,
33
+ region: str = "cn-beijing-6",
34
+ bucket: Optional[str] = None,
35
+ *,
36
+ access_key: Optional[str] = None,
37
+ secret_key: Optional[str] = None,
38
+ public_read: bool = True,
39
+ ):
31
40
  """初始化 KS3 上传器
32
41
 
33
42
  Args:
@@ -37,7 +46,15 @@ class KS3Uploader:
37
46
  - 如果未指定,优先从环境变量 KS3_BUCKET 读取
38
47
  - 如果环境变量也未设置,默认使用 agentengine-{region}
39
48
  """
49
+ # ks3sdk logs the signed Authorization header at INFO. Studio uploads
50
+ # run inside a long-lived server process, so keep that transport logger
51
+ # above INFO before any request can be emitted.
52
+ logging.getLogger("ks3.http").setLevel(logging.WARNING)
53
+
40
54
  self.region = region
55
+ self.access_key = access_key
56
+ self.secret_key = secret_key
57
+ self.public_read = public_read
41
58
 
42
59
  # 确定 bucket 名称 (优先级: 参数 > 环境变量 > 默认值)
43
60
  if bucket:
@@ -260,8 +277,12 @@ class KS3Uploader:
260
277
  def _upload_via_host(self, file_path: Path, object_key: str, host: str) -> bool:
261
278
  from ks3.connection import Connection # type: ignore[import-untyped]
262
279
 
263
- ak = os.environ.get("KSYUN_ACCESS_KEY") or os.environ.get("KS3_ACCESS_KEY")
264
- sk = os.environ.get("KSYUN_SECRET_KEY") or os.environ.get("KS3_SECRET_KEY")
280
+ ak = self.access_key or os.environ.get("KSYUN_ACCESS_KEY") or os.environ.get(
281
+ "KS3_ACCESS_KEY"
282
+ )
283
+ sk = self.secret_key or os.environ.get("KSYUN_SECRET_KEY") or os.environ.get(
284
+ "KS3_SECRET_KEY"
285
+ )
265
286
 
266
287
  conn = Connection(
267
288
  ak,
@@ -291,10 +312,14 @@ class KS3Uploader:
291
312
  resumable=True,
292
313
  resumable_filename=str(resume_path),
293
314
  )
294
- result = upload_task.upload(headers={"x-kss-acl": "public-read"})
315
+ headers = {"x-kss-acl": "public-read"} if self.public_read else {}
316
+ result = upload_task.upload(headers=headers)
295
317
  else:
296
318
  click.echo(f" 普通上传: {file_path.stat().st_size / (1024 * 1024):.2f} MB")
297
- result = key.set_contents_from_filename(str(file_path), policy="public-read")
319
+ if self.public_read:
320
+ result = key.set_contents_from_filename(str(file_path), policy="public-read")
321
+ else:
322
+ result = key.set_contents_from_filename(str(file_path))
298
323
 
299
324
  status = getattr(result, "status", None)
300
325
  if status is None:
@@ -313,8 +338,12 @@ class KS3Uploader:
313
338
  成功返回 ks3:// URI, 失败返回 None
314
339
  """
315
340
  # 检查环境变量 (优先使用 KSYUN_* 金山云 IAM 凭证)
316
- ak = os.environ.get("KSYUN_ACCESS_KEY") or os.environ.get("KS3_ACCESS_KEY")
317
- sk = os.environ.get("KSYUN_SECRET_KEY") or os.environ.get("KS3_SECRET_KEY")
341
+ ak = self.access_key or os.environ.get("KSYUN_ACCESS_KEY") or os.environ.get(
342
+ "KS3_ACCESS_KEY"
343
+ )
344
+ sk = self.secret_key or os.environ.get("KSYUN_SECRET_KEY") or os.environ.get(
345
+ "KS3_SECRET_KEY"
346
+ )
318
347
 
319
348
  if not ak or not sk:
320
349
  click.secho("❌ 请在 .env 文件中设置金山云 IAM 凭证:", fg="red")
@@ -27,6 +27,7 @@ _MANIFEST_KEYS = (
27
27
  "soul_digest",
28
28
  "skills",
29
29
  "mcp_servers",
30
+ "plugins",
30
31
  "sandbox",
31
32
  "approval_mode",
32
33
  "context",
ksadk/cli/__init__.py CHANGED
@@ -339,16 +339,44 @@ def _register_optional_command(cli: click.Group, module_path: str, *cmd_names: s
339
339
 
340
340
 
341
341
  def _register_commands():
342
+ # Runtime fast path: when the hosted entrypoint runs ``ksadk web`` the
343
+ # process only needs the web command. Importing the other commands here
344
+ # pulls in deploy/create/run deps (ks3, questionary, ...) that the hosted
345
+ # Python runtime image does not ship, so a full register crashes the
346
+ # runtime before the server starts. Only import what argv actually needs;
347
+ # ``--help`` and other exploratory invocations still register everything.
348
+ import sys as _sys
349
+
350
+ _argv = [a for a in _sys.argv[1:] if not a.startswith("-")]
351
+ _runtime_only = bool(_argv) and _argv[0] == "web"
352
+
353
+ from ksadk.cli.cmd_web import web
354
+
355
+ _add_command_once(cli, web)
356
+
357
+ # The desktop shell invokes exactly ``ksadk studio``. Avoid importing the
358
+ # full command registry (A2A, deploy, eval, etc.) on this hot path: those
359
+ # optional SDKs are unrelated to Studio and their import warnings used to
360
+ # obscure the real startup error. This also shortens the time to the first
361
+ # local health check in Electron.
362
+ if bool(_argv) and _argv[0] == "studio":
363
+ from ksadk.cli.cmd_studio import studio
364
+
365
+ _add_command_once(cli, studio)
366
+ return
367
+
368
+ if _runtime_only:
369
+ # Skip create/deploy/run/managed_runtime imports on the runtime path.
370
+ return
371
+
342
372
  from ksadk.cli.cmd_create import create
343
373
  from ksadk.cli.cmd_deploy import deploy
344
374
  from ksadk.cli.cmd_managed_runtime import managed_runtime
345
375
  from ksadk.cli.cmd_run import run
346
- from ksadk.cli.cmd_web import web
347
376
 
348
377
  # 注册现有命令
349
378
  _add_command_once(cli, run)
350
379
  _add_command_once(cli, deploy)
351
- _add_command_once(cli, web)
352
380
  _add_command_once(cli, managed_runtime)
353
381
 
354
382
  # init 作为主命令 (PRD 规范)
@@ -391,7 +419,7 @@ def _register_commands():
391
419
  _register_optional_command(cli, "ksadk.cli.cmd_hermes", "hermes")
392
420
 
393
421
 
394
- def main():
422
+ def _main():
395
423
  # 全局加载 .env 文件
396
424
  try:
397
425
  from dotenv import find_dotenv, load_dotenv
@@ -443,6 +471,31 @@ def main():
443
471
  except ImportError:
444
472
  pass
445
473
 
474
+ # Studio and ordinary CLI commands consume the same saved workspace values.
475
+ from pathlib import Path
476
+
477
+ from ksadk.studio.configuration import WorkspaceConfiguration
478
+ from ksadk.studio.workspace import Workspace
479
+
480
+ try:
481
+ root = Path.cwd()
482
+ if any(
483
+ (root / ".agentkit" / name).is_file()
484
+ for name in ("config.yaml", "settings.yaml", "secrets.env")
485
+ ):
486
+ configuration = WorkspaceConfiguration(Workspace(root))
487
+ effective = configuration.environment()
488
+ os.environ.update(effective)
489
+ if (
490
+ "codexProxy" in configuration.settings()
491
+ and "KSADK_CODEX_USE_PROXY" not in effective
492
+ ):
493
+ os.environ.pop("KSADK_CODEX_USE_PROXY", None)
494
+ except Exception as error:
495
+ cli_error = cli_error_from_exception(error, show_help=False)
496
+ emit_cli_error(cli_error)
497
+ raise SystemExit(cli_error.exit_code) from None
498
+
446
499
  # 全局配置回退: .env 未设置的变量从 ~/.agentengine/settings.json 补充
447
500
  try:
448
501
  from ksadk.configs.global_config import get_env_from_global_config
@@ -476,5 +529,17 @@ def main():
476
529
  raise SystemExit(cli_error.exit_code) from None
477
530
 
478
531
 
532
+ def main():
533
+ """Run the CLI without exposing a traceback for an operator interrupt."""
534
+
535
+ try:
536
+ return _main()
537
+ except KeyboardInterrupt:
538
+ # Ctrl+C can arrive while optional commands are still importing, before
539
+ # Click or Uvicorn installs its own signal handling. Treat it as the
540
+ # same clean operator stop and preserve the conventional exit status.
541
+ raise SystemExit(130) from None
542
+
543
+
479
544
  if __name__ == "__main__":
480
545
  main()
ksadk/cli/cmd_config.py CHANGED
@@ -184,7 +184,7 @@ def _apply_set_command(
184
184
  if not updates_yaml and not updates_env and invalid_items:
185
185
  raise usage_error(
186
186
  "至少提供一个有效的 KEY=VALUE 配置项。",
187
- hints=["示例: `agentengine config set region=cn-beijing-6 OPENAI_MODEL_NAME=glm-5.2`"],
187
+ hints=["示例: `agentengine config set region=cn-beijing-6 OPENAI_MODEL_NAME=deepseek-v4.1-flash`"],
188
188
  )
189
189
 
190
190
  result = {
@@ -323,7 +323,7 @@ def _run_config_set_command(
323
323
  if not set_items:
324
324
  raise usage_error(
325
325
  "请至少提供一个 KEY=VALUE 配置项。",
326
- hints=["示例: `agentengine config set region=cn-beijing-6 OPENAI_MODEL_NAME=glm-5.2`"],
326
+ hints=["示例: `agentengine config set region=cn-beijing-6 OPENAI_MODEL_NAME=deepseek-v4.1-flash`"],
327
327
  )
328
328
  return _apply_set_command(set_items, output_path, env_path, is_global)
329
329
 
@@ -464,7 +464,7 @@ def run_config_wizard(config_file: str | None, set_items: tuple, is_global: bool
464
464
 
465
465
  new_env["OPENAI_MODEL_NAME"] = _ask_or_exit(
466
466
  questionary.text(
467
- "模型名称 (OPENAI_MODEL_NAME) [选填,默认使用金山云星流平台glm-5.2]:",
467
+ "模型名称 (OPENAI_MODEL_NAME) [选填,默认使用金山云星流平台deepseek-v4.1-flash]:",
468
468
  default=existing_env.get("OPENAI_MODEL_NAME", ""),
469
469
  style=_questionary_style(),
470
470
  )
@@ -784,7 +784,7 @@ def config_set(set_items: tuple, is_global: bool, output_mode: str | None):
784
784
  \b
785
785
  示例:
786
786
  agentengine config set region=cn-beijing-6
787
- agentengine config set OPENAI_MODEL_NAME=glm-5.2 OPENAI_BASE_URL=https://example.com/v1
787
+ agentengine config set OPENAI_MODEL_NAME=deepseek-v4.1-flash OPENAI_BASE_URL=https://example.com/v1
788
788
  agentengine config set KSYUN_REGION=cn-beijing-6 --global
789
789
  """
790
790
  _ = output_mode
ksadk/cli/cmd_create.py CHANGED
@@ -104,7 +104,7 @@ from google.adk.agents import Agent
104
104
  from google.adk.models.lite_llm import LiteLlm
105
105
 
106
106
  model = LiteLlm(
107
- model=f"openai/{{os.getenv('OPENAI_MODEL_NAME', 'glm-5.2')}}",
107
+ model=f"openai/{{os.getenv('OPENAI_MODEL_NAME', 'deepseek-v4.1-flash')}}",
108
108
  api_base=os.getenv("OPENAI_BASE_URL"),
109
109
  api_key=os.getenv("OPENAI_API_KEY"),
110
110
  stream=True, # 启用流式输出
@@ -147,7 +147,7 @@ from langchain.agents import create_agent
147
147
  from langchain_openai import ChatOpenAI
148
148
 
149
149
  llm = ChatOpenAI(
150
- model=os.getenv("OPENAI_MODEL_NAME", "glm-5.2"),
150
+ model=os.getenv("OPENAI_MODEL_NAME", "deepseek-v4.1-flash"),
151
151
  base_url=os.getenv("OPENAI_BASE_URL"),
152
152
  api_key=os.getenv("OPENAI_API_KEY"),
153
153
  streaming=True,
@@ -194,7 +194,7 @@ from typing import TypedDict, Annotated
194
194
  import operator
195
195
 
196
196
  llm = ChatOpenAI(
197
- model=os.getenv("OPENAI_MODEL_NAME", "glm-5.2"),
197
+ model=os.getenv("OPENAI_MODEL_NAME", "deepseek-v4.1-flash"),
198
198
  base_url=os.getenv("OPENAI_BASE_URL"),
199
199
  api_key=os.getenv("OPENAI_API_KEY"),
200
200
  streaming=True,
@@ -234,7 +234,7 @@ from deepagents import create_deep_agent
234
234
  from langchain_openai import ChatOpenAI
235
235
 
236
236
  llm = ChatOpenAI(
237
- model=os.getenv("OPENAI_MODEL_NAME", "glm-5.2"),
237
+ model=os.getenv("OPENAI_MODEL_NAME", "deepseek-v4.1-flash"),
238
238
  base_url=os.getenv("OPENAI_BASE_URL"),
239
239
  api_key=os.getenv("OPENAI_API_KEY"),
240
240
  streaming=True,
@@ -671,7 +671,7 @@ def _generate_codex_env_content(global_env: dict) -> str:
671
671
  "# 本地 Codex 模型配置(仅用于 ksadk web,不会进入 ManagedRuntime bundle)",
672
672
  "# OPENAI_API_KEY=",
673
673
  f"OPENAI_BASE_URL={base_url}" if base_url else "# OPENAI_BASE_URL=",
674
- f"OPENAI_MODEL_NAME={model_name}" if model_name else "# OPENAI_MODEL_NAME=glm-5.2",
674
+ f"OPENAI_MODEL_NAME={model_name}" if model_name else "# OPENAI_MODEL_NAME=deepseek-v4.1-flash",
675
675
  "",
676
676
  "# 可选:自定义上游仅支持 Chat Completions 时,强制启用协议转换代理",
677
677
  "# KSADK_CODEX_USE_PROXY=1",
@@ -1601,7 +1601,7 @@ runtime:
1601
1601
  name: codex
1602
1602
 
1603
1603
  # codex 的模型与开发者指令(CodexRuntimeAdapter 传入 codex thread)
1604
- model: glm-5.2
1604
+ model: deepseek-v4.1-flash
1605
1605
  prompt: |
1606
1606
  你是 codex 编码助手。简洁回答,能跑命令验证就跑(shell 工具),中文回复。
1607
1607
  """,
@@ -1820,7 +1820,7 @@ KSYUN_REGION={ks_region}
1820
1820
  if model_name:
1821
1821
  env_content += f"OPENAI_MODEL_NAME={model_name}\n"
1822
1822
  else:
1823
- env_content += "# OPENAI_MODEL_NAME=glm-5.2\n"
1823
+ env_content += "# OPENAI_MODEL_NAME=deepseek-v4.1-flash\n"
1824
1824
  elif framework == "hermes":
1825
1825
  env_content = f"""# ======================
1826
1826
  # Hermes 标准部署最小配置
@@ -1840,7 +1840,7 @@ KSYUN_REGION={ks_region}
1840
1840
  if model_name:
1841
1841
  env_content += f"OPENAI_MODEL_NAME={model_name}\n"
1842
1842
  else:
1843
- env_content += "# OPENAI_MODEL_NAME=glm-5.2\n"
1843
+ env_content += "# OPENAI_MODEL_NAME=deepseek-v4.1-flash\n"
1844
1844
 
1845
1845
  env_content += """
1846
1846
  # Hermes runtime
@@ -1851,7 +1851,7 @@ HERMES_DASHBOARD_HOST=127.0.0.1
1851
1851
  HERMES_DASHBOARD_PORT=9119
1852
1852
  PORT=8080
1853
1853
  # HERMES_CONTEXT_LENGTH=200000
1854
- # HERMES_FALLBACK_MODEL=deepseek-v4-pro
1854
+ # HERMES_FALLBACK_MODEL=glm-5.3-flash
1855
1855
  """
1856
1856
  env_example_content = """# ======================
1857
1857
  # Hermes 标准部署最小配置示例
@@ -1863,7 +1863,7 @@ KSYUN_REGION=cn-beijing-6
1863
1863
 
1864
1864
  OPENAI_API_KEY=your-model-api-key
1865
1865
  OPENAI_BASE_URL=https://kspmas.ksyun.com/v1/
1866
- OPENAI_MODEL_NAME=glm-5.2
1866
+ OPENAI_MODEL_NAME=deepseek-v4.1-flash
1867
1867
 
1868
1868
  # Hermes runtime
1869
1869
  API_SERVER_ENABLED=true
@@ -1873,7 +1873,7 @@ HERMES_DASHBOARD_HOST=127.0.0.1
1873
1873
  HERMES_DASHBOARD_PORT=9119
1874
1874
  PORT=8080
1875
1875
  # HERMES_CONTEXT_LENGTH=200000
1876
- # HERMES_FALLBACK_MODEL=deepseek-v4-pro
1876
+ # HERMES_FALLBACK_MODEL=glm-5.3-flash
1877
1877
  """
1878
1878
  elif framework == "codex":
1879
1879
  env_content = _generate_codex_env_content(global_env)
@@ -1893,7 +1893,7 @@ PORT=8080
1893
1893
  if model_name:
1894
1894
  env_content += f"OPENAI_MODEL_NAME={model_name}\n"
1895
1895
  else:
1896
- env_content += "# OPENAI_MODEL_NAME=glm-5.2\n"
1896
+ env_content += "# OPENAI_MODEL_NAME=deepseek-v4.1-flash\n"
1897
1897
 
1898
1898
  env_content += """
1899
1899
  # ======================
ksadk/cli/cmd_hermes.py CHANGED
@@ -24,6 +24,7 @@ from ksadk.cli.error_utils import remote_error, resolution_error
24
24
  from ksadk.cli.model_catalog import fetch_provider_model_metadata
25
25
  from ksadk.cli.network_options import build_network_payload, network_cli_kwargs, network_options
26
26
  from ksadk.cli.resource_common import (
27
+ build_component_config,
27
28
  CONTEXT_SETTINGS,
28
29
  ResourceActionSet,
29
30
  ResourceDescriptor,
@@ -65,8 +66,8 @@ from ksadk.hermes_terminal import (
65
66
  )
66
67
 
67
68
  DEFAULT_HERMES_IMAGE = "ghcr.io/kingsoftcloud/hermes-agent:v2026.7.7.2-ksadk-v070"
68
- DEFAULT_HERMES_CONTEXT_LENGTHS = (("glm-5.1", "200000"),)
69
- DEFAULT_HERMES_MODEL_NAME = "glm-5.2"
69
+ DEFAULT_HERMES_CONTEXT_LENGTHS = (("deepseek-v4.1-flash", "128000"),)
70
+ DEFAULT_HERMES_MODEL_NAME = "deepseek-v4.1-flash"
70
71
  DEFAULT_HERMES_PUBLIC_BASE_URL = "https://kspmas.ksyun.com/v1/"
71
72
  DEFAULT_HERMES_RUNTIME_BASE_URL = DEFAULT_HERMES_PUBLIC_BASE_URL
72
73
  KSPMAS_PUBLIC_BASES = (
@@ -163,6 +164,8 @@ def _build_hermes_update_payload(
163
164
  update_payload["storage"] = storage_config
164
165
  if network_payload:
165
166
  update_payload["network"] = network_payload
167
+ if payload.get("component_config"):
168
+ update_payload["component_config"] = payload["component_config"]
166
169
  return update_payload
167
170
 
168
171
 
@@ -428,6 +431,9 @@ def _render_hermes_dry_run(
428
431
  @click.option("--storage-size-gi", type=int, default=20, show_default=True, help="PVC 容量(Gi)")
429
432
  @click.option("--storage-mount-path", default=None, help="PVC 挂载目录(默认: /home/node/.hermes)")
430
433
  @click.option("--no-storage", is_flag=True, help="禁用默认 PVC 挂载")
434
+ @click.option("--skill-space-id", "skill_space_ids", multiple=True, help="Skill 中心空间 ID(可重复传入多个)")
435
+ @click.option("--sandbox-template-id", default=None, help="沙箱模板 ID(启用 E2B 沙箱执行 execute_skills)")
436
+ @click.option("--sandbox-api-key", default=None, help="沙箱 API Key(可选,默认从服务端注入)")
431
437
  @env_options
432
438
  @click.option(
433
439
  "--observability/--no-observability",
@@ -468,6 +474,9 @@ def deploy(
468
474
  subnet_id: Optional[str],
469
475
  security_group_id: Optional[str],
470
476
  availability_zone: Optional[str],
477
+ skill_space_ids: tuple[str, ...],
478
+ sandbox_template_id: Optional[str],
479
+ sandbox_api_key: Optional[str],
471
480
  dry_run: bool,
472
481
  output_mode: str | None,
473
482
  ):
@@ -510,6 +519,9 @@ def deploy(
510
519
  include_storage_on_update=include_storage_on_update,
511
520
  extra_env=extra_env,
512
521
  env_file=env_file,
522
+ skill_space_ids=skill_space_ids,
523
+ sandbox_template_id=sandbox_template_id,
524
+ sandbox_api_key=sandbox_api_key,
513
525
  **network_cli_kwargs(
514
526
  enable_public_access=enable_public_access,
515
527
  enable_vpc_access=enable_vpc_access,
@@ -551,6 +563,9 @@ async def _deploy_hermes(
551
563
  subnet_id: str | None = None,
552
564
  security_group_id: str | None = None,
553
565
  availability_zone: str | None = None,
566
+ skill_space_ids: tuple[str, ...] = (),
567
+ sandbox_template_id: str | None = None,
568
+ sandbox_api_key: str | None = None,
554
569
  dry_run: bool = False,
555
570
  ) -> None:
556
571
  project_dir = Path(".").resolve()
@@ -606,6 +621,11 @@ async def _deploy_hermes(
606
621
  auto_dotenv=auto_dotenv,
607
622
  shell_keys=shell_keys,
608
623
  )
624
+ component_config = build_component_config(
625
+ skill_space_ids=skill_space_ids,
626
+ sandbox_template_id=sandbox_template_id,
627
+ sandbox_api_key=sandbox_api_key,
628
+ )
609
629
  payload = {
610
630
  "name": agent_name,
611
631
  "description": "Hermes Agent (managed by AgentEngine)",
@@ -619,6 +639,8 @@ async def _deploy_hermes(
619
639
  "env_vars": env_vars,
620
640
  "ui_config": {"profile": "hermes", "path": "/", "url": None},
621
641
  }
642
+ if component_config:
643
+ payload["component_config"] = component_config
622
644
  storage_config = build_storage_config(
623
645
  "hermes",
624
646
  no_storage=no_storage,
ksadk/cli/cmd_invoke.py CHANGED
@@ -18,7 +18,6 @@ import click
18
18
 
19
19
  from ksadk.api import AgentEngineAPIError, AgentEngineClient
20
20
  from ksadk.cli.agent_ref import merge_agent_inputs, resolve_agent_ref, resolve_openclaw_ref
21
- from ksadk.cli.invoke_payload import build_chat_request
22
21
  from ksadk.cli.cmd_files import (
23
22
  _build_sync_payload,
24
23
  _collect_local_files_report,
@@ -27,6 +26,7 @@ from ksadk.cli.cmd_files import (
27
26
  _normalize_workspace_dir,
28
27
  _push_workspace_files,
29
28
  )
29
+ from ksadk.cli.invoke_payload import build_chat_request
30
30
  from ksadk.cli.resource_common import (
31
31
  CONTEXT_SETTINGS,
32
32
  CompatibilityAliasCommand,
@@ -1311,7 +1311,15 @@ async def _invoke_once(
1311
1311
  last_refresh_time = 0.0
1312
1312
  full_reasoning = ""
1313
1313
  async for chunk in _stream_chat(
1314
- endpoint, message, api_key, session_id, True, insecure, model, api_format, default_model
1314
+ endpoint,
1315
+ message,
1316
+ api_key,
1317
+ session_id,
1318
+ True,
1319
+ insecure,
1320
+ model,
1321
+ api_format,
1322
+ default_model,
1315
1323
  ):
1316
1324
  content, reasoning = _extract_content(chunk)
1317
1325
 
@@ -1341,7 +1349,15 @@ async def _invoke_once(
1341
1349
  live.refresh() # 确保最后一次刷新
1342
1350
  else:
1343
1351
  async for chunk in _stream_chat(
1344
- endpoint, message, api_key, session_id, True, insecure, model, api_format, default_model
1352
+ endpoint,
1353
+ message,
1354
+ api_key,
1355
+ session_id,
1356
+ True,
1357
+ insecure,
1358
+ model,
1359
+ api_format,
1360
+ default_model,
1345
1361
  ):
1346
1362
  content, reasoning = _extract_content(chunk)
1347
1363
  if reasoning:
@@ -1510,8 +1526,15 @@ def _extract_content(chunk: dict) -> tuple[str, str]:
1510
1526
  event_name = str(chunk.get("_event") or "")
1511
1527
  if event_name == "response.output_text.delta":
1512
1528
  return str(chunk.get("delta") or ""), ""
1513
- if event_name == "response.reasoning.delta":
1514
- return "", str(chunk.get("delta") or "")
1529
+ # reasoning delta 有 4 个变体名(与 remote_runner / 前端 chatProtocol 对齐),
1530
+ # 主 runtime 发 reasoning.delta,Studio shared_web 发 reasoning_summary_text.delta。
1531
+ if event_name in {
1532
+ "response.reasoning.delta",
1533
+ "response.reasoning_text.delta",
1534
+ "response.reasoning_summary.delta",
1535
+ "response.reasoning_summary_text.delta",
1536
+ }:
1537
+ return "", str(chunk.get("delta") or chunk.get("text") or "")
1515
1538
  if event_name == "response.completed":
1516
1539
  return "", ""
1517
1540
 
@@ -83,8 +83,20 @@ def managed_runtime(manifest_path: Path, port: int, host: str) -> None:
83
83
  """Serve one mounted, declarative ``agentengine.yaml`` in hosted mode."""
84
84
 
85
85
  manifest_path = manifest_path.resolve()
86
- _load_managed_runtime_manifest(manifest_path)
86
+ manifest = _load_managed_runtime_manifest(manifest_path)
87
87
  work_dir = _prepare_writable_runtime_dir(manifest_path)
88
+ from ksadk.plugins.delivery import prepare_cloud_plugins
89
+
90
+ try:
91
+ prepare_cloud_plugins(manifest, work_dir)
92
+ except Exception as exc:
93
+ # Transport exceptions can contain signed URLs; keep startup logs secret-free.
94
+ import httpx
95
+
96
+ detail = "artifact transport failed" if isinstance(exc, httpx.HTTPError) else str(exc)
97
+ raise click.ClickException(
98
+ "plugin delivery failed before runtime startup: " + detail
99
+ ) from None
88
100
  # The command is a production process entrypoint, never a local UI action.
89
101
  # ``web`` owns the RuntimeAdapter composition, while no_open prevents an
90
102
  # accidental browser launch if this container is ever run with a display.
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 {"glm-5.1", "glm-5.2"}:
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