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.
Files changed (673) hide show
  1. {agentengine_sdk_python-0.8.4.dist-info → agentengine_sdk_python-0.8.5.dist-info}/METADATA +6 -3
  2. {agentengine_sdk_python-0.8.4.dist-info → agentengine_sdk_python-0.8.5.dist-info}/RECORD +591 -365
  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 +6 -0
  8. ksadk/builders/code_builder.py +38 -12
  9. ksadk/builders/framework_requirements.py +20 -2
  10. ksadk/cli/__init__.py +36 -0
  11. ksadk/cli/cmd_config.py +4 -4
  12. ksadk/cli/cmd_create.py +12 -12
  13. ksadk/cli/cmd_hermes.py +24 -2
  14. ksadk/cli/cmd_invoke.py +28 -5
  15. ksadk/cli/cmd_openclaw.py +26 -1
  16. ksadk/cli/cmd_plugin.py +70 -12
  17. ksadk/cli/cmd_studio.py +64 -16
  18. ksadk/cli/openclaw_env.py +1 -1
  19. ksadk/cli/resource_common.py +26 -0
  20. ksadk/codex/client.py +3 -2
  21. ksadk/configs/__init__.py +1 -1
  22. ksadk/configs/env_registry.py +125 -31
  23. ksadk/configs/env_registry_studio.py +86 -0
  24. ksadk/configs/global_config.py +1 -1
  25. ksadk/configs/settings.py +3 -3
  26. ksadk/connector/__init__.py +17 -0
  27. ksadk/connector/channel.py +477 -0
  28. ksadk/context_engine/capabilities.py +52 -4
  29. ksadk/conversations/attachment_storage.py +10 -3
  30. ksadk/conversations/attachments.py +16 -5
  31. ksadk/conversations/message_projection.py +23 -32
  32. ksadk/conversations/normalize.py +28 -10
  33. ksadk/conversations/runtime_baseline.py +37 -0
  34. ksadk/conversations/runtime_invocation.py +17 -4
  35. ksadk/conversations/runtime_observability.py +39 -10
  36. ksadk/conversations/runtime_payloads.py +8 -0
  37. ksadk/conversations/runtime_persistence.py +105 -9
  38. ksadk/conversations/runtime_preparation.py +13 -7
  39. ksadk/conversations/runtime_stream_events.py +29 -35
  40. ksadk/conversations/runtime_streaming.py +8 -0
  41. ksadk/events/adapters/_codex_items.py +16 -8
  42. ksadk/events/adapters/_langgraph_support.py +34 -0
  43. ksadk/events/session_event.py +2 -2
  44. ksadk/harness/__init__.py +14 -0
  45. ksadk/harness/app.py +11 -0
  46. ksadk/harness/artifact_store.py +213 -0
  47. ksadk/harness/capabilities.py +115 -0
  48. ksadk/harness/capability_runtime.py +237 -0
  49. ksadk/harness/closure_contract.py +92 -0
  50. ksadk/harness/compaction_record.py +122 -0
  51. ksadk/harness/compiler.py +284 -0
  52. ksadk/harness/conformance/__init__.py +33 -0
  53. ksadk/harness/conformance/contract.py +506 -0
  54. ksadk/harness/conformance/fixtures.py +102 -0
  55. ksadk/harness/context_engine.py +403 -0
  56. ksadk/harness/context_maintenance.py +259 -0
  57. ksadk/harness/context_manifest.py +188 -0
  58. ksadk/harness/context_tuning.py +168 -0
  59. ksadk/harness/draft_runtime.py +322 -0
  60. ksadk/harness/engine/__init__.py +40 -0
  61. ksadk/harness/engine/base.py +122 -0
  62. ksadk/harness/engine/budgets.py +108 -0
  63. ksadk/harness/engine/capability_declarations.py +59 -0
  64. ksadk/harness/engine/completion_guard.py +42 -0
  65. ksadk/harness/engine/context_pipeline.py +579 -0
  66. ksadk/harness/engine/graph_builder.py +859 -0
  67. ksadk/harness/engine/langgraph.py +931 -0
  68. ksadk/harness/engine/mcp_disclosure.py +750 -0
  69. ksadk/harness/engine/policy_runtime.py +70 -0
  70. ksadk/harness/engine/postgres_checkpointer.py +63 -0
  71. ksadk/harness/engine/run_control_bridge.py +80 -0
  72. ksadk/harness/engine/run_types.py +88 -0
  73. ksadk/harness/engine/skill_disclosure.py +189 -0
  74. ksadk/harness/engine/spans.py +41 -0
  75. ksadk/harness/engine/subagents.py +343 -0
  76. ksadk/harness/engine/thread_ids.py +112 -0
  77. ksadk/harness/engine/tool_dispatch.py +144 -0
  78. ksadk/harness/event_tree.py +212 -0
  79. ksadk/harness/events.py +461 -0
  80. ksadk/harness/execution_policy.py +94 -0
  81. ksadk/harness/insights.py +210 -0
  82. ksadk/harness/lifecycle.py +578 -0
  83. ksadk/harness/lifecycle_conformance.py +233 -0
  84. ksadk/harness/lifecycle_local_plane.py +104 -0
  85. ksadk/harness/loop/__init__.py +44 -0
  86. ksadk/harness/loop/reason.py +454 -0
  87. ksadk/harness/loop/tools.py +762 -0
  88. ksadk/harness/managed_runtime.py +884 -0
  89. ksadk/harness/mcp_matrix.py +474 -0
  90. ksadk/harness/mcp_runtime.py +471 -0
  91. ksadk/harness/memory_consolidation.py +157 -0
  92. ksadk/harness/memory_loop.py +156 -0
  93. ksadk/harness/memory_runtime.py +541 -0
  94. ksadk/harness/metrics.py +90 -0
  95. ksadk/harness/model_capability.py +253 -0
  96. ksadk/harness/model_provider.py +220 -0
  97. ksadk/harness/observability/__init__.py +29 -0
  98. ksadk/harness/observability/inspection.py +528 -0
  99. ksadk/harness/observability/metrics.py +167 -0
  100. ksadk/harness/observability/otel_exporter.py +218 -0
  101. ksadk/harness/prompt_cache.py +70 -0
  102. ksadk/harness/public_activity.py +154 -0
  103. ksadk/harness/readiness.py +249 -0
  104. ksadk/harness/reasoner.py +466 -13
  105. ksadk/harness/release_readiness.py +140 -0
  106. ksadk/harness/resource_ref.py +69 -0
  107. ksadk/harness/run_control.py +668 -0
  108. ksadk/harness/runtime.py +146 -111
  109. ksadk/harness/runtime_capabilities.py +158 -0
  110. ksadk/harness/runtime_server.py +514 -0
  111. ksadk/harness/sandbox_adapters.py +739 -0
  112. ksadk/harness/sandbox_backend.py +530 -0
  113. ksadk/harness/sandbox_conformance.py +288 -0
  114. ksadk/harness/sandbox_lease.py +77 -0
  115. ksadk/harness/sandbox_lease_conformance.py +259 -0
  116. ksadk/harness/sandbox_matrix.py +170 -0
  117. ksadk/harness/sandbox_reconciliation.py +140 -0
  118. ksadk/harness/sandbox_recovery.py +586 -0
  119. ksadk/harness/sandbox_recovery_conformance.py +246 -0
  120. ksadk/harness/session_store.py +243 -0
  121. ksadk/harness/skill_composition.py +212 -0
  122. ksadk/harness/skill_feedback.py +123 -0
  123. ksadk/harness/skill_matrix.py +233 -0
  124. ksadk/harness/skill_runtime.py +259 -0
  125. ksadk/harness/spec.py +332 -0
  126. ksadk/harness/state.py +153 -0
  127. ksadk/harness/strategies.py +149 -0
  128. ksadk/harness/subagent.py +253 -0
  129. ksadk/harness/tool_policy.py +131 -0
  130. ksadk/harness/tool_receipts.py +96 -0
  131. ksadk/harness/tool_reliability.py +81 -0
  132. ksadk/harness/user_errors.py +69 -0
  133. ksadk/harness/working_context.py +81 -0
  134. ksadk/harness/working_context_patch.py +99 -0
  135. ksadk/identity/resolver.py +18 -0
  136. ksadk/interaction/__init__.py +1 -1
  137. ksadk/interaction/ledger.py +1 -1
  138. ksadk/interaction/provider.py +1 -1
  139. ksadk/interaction/providers/__init__.py +3 -1
  140. ksadk/interaction/providers/adk.py +1 -1
  141. ksadk/interaction/providers/codex.py +1 -1
  142. ksadk/interaction/providers/harness.py +50 -0
  143. ksadk/interaction/providers/langgraph.py +1 -1
  144. ksadk/kernel/__init__.py +10 -0
  145. ksadk/kernel/approval_presentation.py +91 -0
  146. ksadk/kernel/authorization.py +1 -1
  147. ksadk/kernel/bootstrap.py +86 -102
  148. ksadk/kernel/contract_fingerprints.py +1 -1
  149. ksadk/kernel/contracts.py +5 -0
  150. ksadk/kernel/control.py +32 -1
  151. ksadk/kernel/execution_grants.py +221 -0
  152. ksadk/kernel/execution_grants_memory.py +133 -0
  153. ksadk/kernel/execution_grants_postgres.py +217 -0
  154. ksadk/kernel/execution_grants_sqlite.py +209 -0
  155. ksadk/kernel/ingress.py +27 -27
  156. ksadk/kernel/mapping.py +1 -1
  157. ksadk/kernel/memory_store.py +24 -11
  158. ksadk/kernel/postgres_store.py +63 -33
  159. ksadk/kernel/recovery.py +78 -14
  160. ksadk/kernel/sql/001_agent_kernel.sql +23 -0
  161. ksadk/kernel/sqlite_store.py +304 -25
  162. ksadk/kernel/state.py +2 -3
  163. ksadk/kernel/store.py +69 -2
  164. ksadk/kernel/worker.py +79 -41
  165. ksadk/kernel/worker_history.py +72 -0
  166. ksadk/kernel/worker_identity.py +47 -0
  167. ksadk/memory/coordinator.py +22 -6
  168. ksadk/memory/extraction.py +40 -1
  169. ksadk/memory/models.py +77 -1
  170. ksadk/memory/provider_resolver.py +5 -0
  171. ksadk/memory/providers/local_postgres.py +200 -0
  172. ksadk/memory/providers/local_sqlite.py +42 -3
  173. ksadk/memory/retrieval.py +189 -0
  174. ksadk/memory/store_adapter.py +150 -0
  175. ksadk/model_policy.py +2 -2
  176. ksadk/model_proxy/detect.py +254 -0
  177. ksadk/model_proxy/server.py +4 -2
  178. ksadk/model_proxy/transform.py +40 -2
  179. ksadk/plugins/__init__.py +1 -1
  180. ksadk/plugins/bridges/dsh.py +11 -0
  181. ksadk/plugins/builtins.py +40 -2
  182. ksadk/plugins/companion_artifacts.py +83 -0
  183. ksadk/plugins/companions.py +368 -0
  184. ksadk/plugins/contracts.py +1 -1
  185. ksadk/plugins/dsh_channels.py +156 -0
  186. ksadk/plugins/dsh_home.py +140 -0
  187. ksadk/plugins/dsh_teams.py +105 -0
  188. ksadk/plugins/dsh_toolchain.py +101 -19
  189. ksadk/plugins/execution_host.py +99 -0
  190. ksadk/plugins/providers/bundles/dsh-channels-client/client.js +19 -0
  191. ksadk/plugins/providers/bundles/dsh-channels-client/cordis.patch.yml +3 -0
  192. ksadk/plugins/providers/bundles/dsh-channels-client/index.mjs +7 -0
  193. ksadk/plugins/providers/bundles/dsh-channels-client/package.json +12 -0
  194. ksadk/plugins/providers/bundles/dsh-knowledge/package.json +1 -1
  195. ksadk/plugins/providers/bundles/dsh-memory/package.json +1 -1
  196. ksadk/plugins/providers/bundles/dsh-skill-center/package.json +1 -1
  197. ksadk/plugins/providers/bundles/dsh-teams-client/client.js +29 -0
  198. ksadk/plugins/providers/bundles/dsh-teams-client/cordis.patch.yml +3 -0
  199. ksadk/plugins/providers/bundles/dsh-teams-client/index.mjs +11 -0
  200. ksadk/plugins/providers/bundles/dsh-teams-client/package.json +35 -0
  201. ksadk/plugins/providers/bundles/dsh-teams-leader-policy/cordis.patch.yml +3 -0
  202. ksadk/plugins/providers/bundles/dsh-teams-leader-policy/index.mjs +13 -0
  203. ksadk/plugins/providers/bundles/dsh-teams-leader-policy/package.json +27 -0
  204. ksadk/plugins/providers/bundles/dsh-teams-profile/cordis.patch.yml +3 -0
  205. ksadk/plugins/providers/bundles/dsh-teams-profile/index.mjs +12 -0
  206. ksadk/plugins/providers/bundles/dsh-teams-profile/package.json +26 -0
  207. ksadk/plugins/providers/bundles/dsh-teams-router/cordis.patch.yml +3 -0
  208. ksadk/plugins/providers/bundles/dsh-teams-router/index.mjs +16 -0
  209. ksadk/plugins/providers/bundles/dsh-teams-router/package.json +27 -0
  210. ksadk/plugins/providers/bundles/dsh-teams-tasks/cordis.patch.yml +3 -0
  211. ksadk/plugins/providers/bundles/dsh-teams-tasks/index.mjs +16 -0
  212. ksadk/plugins/providers/bundles/dsh-teams-tasks/package.json +27 -0
  213. ksadk/plugins/providers/bundles/dsh-teams-tools/cordis.patch.yml +3 -0
  214. ksadk/plugins/providers/bundles/dsh-teams-tools/index.mjs +25 -0
  215. ksadk/plugins/providers/bundles/dsh-teams-tools/package.json +29 -0
  216. ksadk/plugins/providers/bundles/dsh-teams-tools/tools.json +235 -0
  217. ksadk/plugins/providers/bundles/ksadk-codex/index.mjs +1 -1
  218. ksadk/plugins/providers/bundles/ksadk-dsh-capability-host/index.mjs +51 -1
  219. ksadk/plugins/providers/bundles/ksadk-dsh-capability-host/package.json +2 -2
  220. ksadk/plugins/providers/bundles/ksadk-dsh-companion-host/client.mjs +133 -0
  221. ksadk/plugins/providers/bundles/ksadk-dsh-companion-host/index.mjs +14 -0
  222. ksadk/plugins/providers/bundles/ksadk-dsh-studio/client.js +27 -4
  223. ksadk/plugins/providers/bundles/ksadk-dsh-studio/index.mjs +9 -5
  224. ksadk/plugins/providers/bundles/ksadk-harness/index.mjs +1 -1
  225. ksadk/plugins/providers/codex.py +10 -2
  226. ksadk/plugins/providers/dsh_capabilities.py +61 -0
  227. ksadk/plugins/providers/harness.py +181 -33
  228. ksadk/plugins/providers/harness_delegation.py +593 -0
  229. ksadk/plugins/providers/harness_managed.py +456 -0
  230. ksadk/plugins/providers/harness_tools.py +326 -0
  231. ksadk/plugins/providers/shipped_dsh.py +4 -1
  232. ksadk/plugins/subagent_providers/codex.py +28 -6
  233. ksadk/plugins/teams/__init__.py +5 -0
  234. ksadk/plugins/teams/api.py +405 -0
  235. ksadk/plugins/teams/application.py +680 -0
  236. ksadk/plugins/teams/artifacts.py +60 -0
  237. ksadk/plugins/teams/context.py +96 -0
  238. ksadk/plugins/teams/contracts.py +136 -0
  239. ksadk/plugins/teams/domain.py +1427 -0
  240. ksadk/plugins/teams/domain_values.py +24 -0
  241. ksadk/plugins/teams/errors.py +13 -0
  242. ksadk/plugins/teams/migration.py +311 -0
  243. ksadk/plugins/teams/migration_cli.py +322 -0
  244. ksadk/plugins/teams/postgres_store.py +138 -0
  245. ksadk/plugins/teams/runtime.py +777 -0
  246. ksadk/plugins/teams/source_projection.py +84 -0
  247. ksadk/plugins/teams/store.py +311 -0
  248. ksadk/plugins/teams/task_decisions.py +423 -0
  249. ksadk/plugins/teams/transport.py +91 -0
  250. ksadk/plugins/teams/workspaces.py +255 -0
  251. ksadk/runners/_langgraph_runner_streams.py +121 -45
  252. ksadk/runners/_langgraph_state_reader.py +106 -0
  253. ksadk/runners/_session_identity.py +285 -0
  254. ksadk/runners/adk_runner.py +25 -60
  255. ksadk/runners/langgraph_runner.py +128 -111
  256. ksadk/runners/patch_langchain.py +47 -0
  257. ksadk/runners/usage_accumulator.py +11 -3
  258. ksadk/runtime/_runner_adapter/stream_mapping.py +52 -2
  259. ksadk/runtime/conversation_execution.py +25 -1
  260. ksadk/runtime/executor.py +9 -1
  261. ksadk/runtime/factory.py +36 -1
  262. ksadk/runtime/preprocessing.py +11 -3
  263. ksadk/runtime/runner_adapter.py +38 -9
  264. ksadk/runtime/skill_eval_result.py +36 -0
  265. ksadk/runtime/timing.py +46 -0
  266. ksadk/runtime/usage.py +49 -18
  267. ksadk/runtime_context.py +103 -1
  268. ksadk/sandbox/backends/e2b.py +245 -23
  269. ksadk/sandbox/backends/local_process.py +63 -39
  270. ksadk/sandbox/base.py +62 -1
  271. ksadk/sandbox/diagnostics.py +82 -0
  272. ksadk/sandbox/local_controls.py +746 -0
  273. ksadk/sandbox/local_launcher.py +90 -0
  274. ksadk/scheduler/dispatcher.py +1 -1
  275. ksadk/server/invocation_identity.py +118 -0
  276. ksadk/server/routes/common.py +32 -3
  277. ksadk/server/routes/control.py +64 -9
  278. ksadk/server/routes/dependencies.py +2 -1
  279. ksadk/server/routes/kernel_ingress.py +9 -1
  280. ksadk/server/routes/misc.py +233 -25
  281. ksadk/server/routes/models.py +3 -3
  282. ksadk/server/routes/openai_compat.py +76 -13
  283. ksadk/server/routes/run.py +106 -35
  284. ksadk/server/routes/sessions.py +244 -68
  285. ksadk/server/routes/workspace.py +130 -21
  286. ksadk/server/static/assets/{ArtifactsPanel-CGbWlMNh.js → ArtifactsPanel-C1YoaKhx.js} +1 -1
  287. ksadk/server/static/assets/{CodeBlock-b4C7upmO.js → CodeBlock-DHuAWfr5.js} +10 -7
  288. ksadk/server/static/assets/MathMessageMarkdown-cvdrBwYr.js +8 -0
  289. ksadk/server/static/assets/{MermaidBlock-BEBN4Ksz.js → MermaidBlock-DeBkbJvI.js} +9 -9
  290. ksadk/server/static/assets/{NativeTerminalPanel-zvL-WpAn.js → NativeTerminalPanel-oJj44_sV.js} +1 -1
  291. ksadk/server/static/assets/{abnfDiagram-VCTEODGH-BYafW7Za.js → abnfDiagram-VCTEODGH-Dhfv25o2.js} +1 -1
  292. ksadk/server/static/assets/{arc-bTohInsS.js → arc-C35w-pn1.js} +1 -1
  293. ksadk/server/static/assets/architecture-7GRP2DOG-BCsa26zi.js +1 -0
  294. ksadk/server/static/assets/{architectureDiagram-5GKGNRK7-Ch5Lbzsi.js → architectureDiagram-5GKGNRK7-FoMY_u6D.js} +1 -1
  295. ksadk/server/static/assets/{blockDiagram-NRAW4CY4-kqF4MDOG.js → blockDiagram-NRAW4CY4-zD4Rt7oE.js} +1 -1
  296. ksadk/server/static/assets/{c4Diagram-UCG6FXSJ-8uSRIODv.js → c4Diagram-UCG6FXSJ-BCtGGkhN.js} +1 -1
  297. ksadk/server/static/assets/channel-_KDifNys.js +1 -0
  298. ksadk/server/static/assets/chunk-2Q5K7J3B-HdVkJ9F0.js +1 -0
  299. ksadk/server/static/assets/{chunk-5VM5RSS4-DkhehZDr.js → chunk-5VM5RSS4-C2Ms13_k.js} +1 -1
  300. ksadk/server/static/assets/{chunk-F27PBJKO-BdXhtPe9.js → chunk-F27PBJKO-BoTj-qgx.js} +1 -1
  301. ksadk/server/static/assets/{chunk-G27WJ6UU-DPTpvpwi.js → chunk-G27WJ6UU-DOMyyjHH.js} +1 -1
  302. ksadk/server/static/assets/{chunk-JWPE2WC7-Pqoh38el.js → chunk-JWPE2WC7-DbJJqDli.js} +1 -1
  303. ksadk/server/static/assets/{chunk-LCL6LL3I-DeU00qC-.js → chunk-LCL6LL3I-CLuRCt_W.js} +1 -1
  304. ksadk/server/static/assets/{chunk-POPQ4Y6H-CzxScFkr.js → chunk-POPQ4Y6H-D0Dz847e.js} +1 -1
  305. ksadk/server/static/assets/{chunk-RHFEMEQ7-DpqMx-ux.js → chunk-RHFEMEQ7-BWSRzEcd.js} +1 -1
  306. ksadk/server/static/assets/{chunk-SVP7TREG-C6t0SypQ.js → chunk-SVP7TREG-CPoHqkCY.js} +1 -1
  307. ksadk/server/static/assets/{chunk-XXDRQBXY-DVaeafZk.js → chunk-XXDRQBXY-Bx1jS-X-.js} +1 -1
  308. ksadk/server/static/assets/classDiagram-DTDB5LWJ-BVCW3ZqZ.js +1 -0
  309. ksadk/server/static/assets/classDiagram-v2-JRS7N3AN-BVCW3ZqZ.js +1 -0
  310. ksadk/server/static/assets/{cose-bilkent-JH36ORCC-Bf9D3tzJ.js → cose-bilkent-JH36ORCC-LzyWm4m0.js} +1 -1
  311. ksadk/server/static/assets/cynefin-OW5HDTMX-CNXjFctL.js +1 -0
  312. ksadk/server/static/assets/{cynefinDiagram-5FMLGOSQ-B9cY3iTz.js → cynefinDiagram-5FMLGOSQ-BlW_bHED.js} +1 -1
  313. ksadk/server/static/assets/{dagre-3AP2YEHR-CSwlx3CB.js → dagre-3AP2YEHR-Bu_S86_i.js} +1 -1
  314. ksadk/server/static/assets/{dagre-UBpgon5q.js → dagre-B7nCawed.js} +1 -1
  315. ksadk/server/static/assets/{diagram-S7CK7UJ4-C9akhN9a.js → diagram-S7CK7UJ4-W_Zow2Km.js} +1 -1
  316. ksadk/server/static/assets/{diagram-UQ7AKVKN-CgedhTPI.js → diagram-UQ7AKVKN-CLIKAHON.js} +1 -1
  317. ksadk/server/static/assets/{diagram-VSXAHHWV-Cjucz5BY.js → diagram-VSXAHHWV-Dv6_QAlN.js} +1 -1
  318. ksadk/server/static/assets/{diagram-VX7I27RA-Dd4Vleyn.js → diagram-VX7I27RA-BWAWRDtZ.js} +1 -1
  319. ksadk/server/static/assets/{diagram-Z3DM3KII-CZ2jGtYW.js → diagram-Z3DM3KII-XA_rWMss.js} +1 -1
  320. ksadk/server/static/assets/dist-0X_j2Rcc.js +1 -0
  321. ksadk/server/static/assets/{dist-DiixqL0J.js → dist-1nXCdsej.js} +1 -1
  322. ksadk/server/static/assets/{dist-BIr4DSRq.js → dist-2vL2sAdF.js} +1 -1
  323. ksadk/server/static/assets/{dist-D_ctSS2i.js → dist-B3bA05-e.js} +1 -1
  324. ksadk/server/static/assets/{dist-ClYUxfeK.js → dist-BLpRy_Yx.js} +1 -1
  325. ksadk/server/static/assets/{dist-QfkEHOlb.js → dist-BO_UwatH.js} +1 -1
  326. ksadk/server/static/assets/{dist-B3FR1SKK.js → dist-BdNFAney.js} +1 -1
  327. ksadk/server/static/assets/{dist-BnaTiyzN.js → dist-C0J5_3qM.js} +1 -1
  328. ksadk/server/static/assets/{dist-Bj730Ib4.js → dist-CGt_UGeO.js} +1 -1
  329. ksadk/server/static/assets/{dist-CFzsn6BG.js → dist-CIRMvUM4.js} +1 -1
  330. ksadk/server/static/assets/{dist-BgV_owcB.js → dist-CIpWk_5f.js} +1 -1
  331. ksadk/server/static/assets/{dist-C5_ZAZsG.js → dist-CPyieXEf.js} +1 -1
  332. ksadk/server/static/assets/{dist-btbmmX5O.js → dist-D-92S-Fd.js} +1 -1
  333. ksadk/server/static/assets/{dist-fBO2v5Kt.js → dist-DNKuMzWc.js} +1 -1
  334. ksadk/server/static/assets/{dist-ufY3F5p6.js → dist-DWfdmz9s.js} +2 -2
  335. ksadk/server/static/assets/{dist-DVCOWtha.js → dist-DppE_r-D.js} +1 -1
  336. ksadk/server/static/assets/{dist-C1NMAY5a.js → dist-DyG6Ya-z.js} +1 -1
  337. ksadk/server/static/assets/{dist-CB9iJrvg.js → dist-M-SrdhhZ.js} +1 -1
  338. ksadk/server/static/assets/{dist-DvFK7p5S.js → dist-mqD5TZup.js} +1 -1
  339. ksadk/server/static/assets/{dist-Cf125P_m.js → dist-n3n6t_FO.js} +1 -1
  340. ksadk/server/static/assets/{dist-DFD6Qa6T.js → dist-qe8xjesy.js} +1 -1
  341. ksadk/server/static/assets/{dist-DoVSwoDb.js → dist-t6MzE0jU.js} +1 -1
  342. ksadk/server/static/assets/{ebnfDiagram-PWID7BFC-Ci8NqqZu.js → ebnfDiagram-PWID7BFC-BfCzF1Xi.js} +1 -1
  343. ksadk/server/static/assets/{erDiagram-SSCWMZ5O-CCIOhLZG.js → erDiagram-SSCWMZ5O-Dpz9_0zn.js} +1 -1
  344. ksadk/server/static/assets/eventmodeling-NTZA5JFV-B5-8RH9c.js +1 -0
  345. ksadk/server/static/assets/flowDiagram-A5DVABFB-BppFxEKw.js +1 -0
  346. ksadk/server/static/assets/{ganttDiagram-EL5Y4UJY-Cp_r9Hb6.js → ganttDiagram-EL5Y4UJY-DDaG1f4_.js} +1 -1
  347. ksadk/server/static/assets/gitGraph-4MIJSDKK-B-AhYj4C.js +1 -0
  348. ksadk/server/static/assets/{gitGraphDiagram-WWUBYQGX-Dlhc8Wr8.js → gitGraphDiagram-WWUBYQGX-DcxzRwYC.js} +1 -1
  349. ksadk/server/static/assets/index-BMd2mucF.css +2 -0
  350. ksadk/server/static/assets/index-D5qyyhTH.js +244 -0
  351. ksadk/server/static/assets/info-A6RAGUB7-0uiKrC35.js +1 -0
  352. ksadk/server/static/assets/{infoDiagram-RXCK75RN-CO0rRTRA.js → infoDiagram-RXCK75RN-CYMdn6lQ.js} +1 -1
  353. ksadk/server/static/assets/{ishikawaDiagram-5VMMS53U-CHiaedSS.js → ishikawaDiagram-5VMMS53U-CLHFAD6c.js} +1 -1
  354. ksadk/server/static/assets/{journeyDiagram-EYS64GPL-CHcCIB09.js → journeyDiagram-EYS64GPL-BHSKQGAl.js} +1 -1
  355. ksadk/server/static/assets/{kanban-definition-3QL26DDD-CJ_ebBZf.js → kanban-definition-3QL26DDD-D5W3tjTT.js} +1 -1
  356. ksadk/server/static/assets/{katex-B4weu383.js → katex-mtjOi4KM.js} +1 -1
  357. ksadk/server/static/assets/{linear-V-MgYHW1.js → linear-BETqsxE_.js} +1 -1
  358. ksadk/server/static/assets/{mermaid-parser.core-CBijEX_c.js → mermaid-parser.core-DPWrvs90.js} +2 -2
  359. ksadk/server/static/assets/{mindmap-definition-FBJOCRG2-Bc-pQvpp.js → mindmap-definition-FBJOCRG2-CJG2mfBP.js} +1 -1
  360. ksadk/server/static/assets/packet-AYTQ26CC-BVTmZ_cw.js +1 -0
  361. ksadk/server/static/assets/{pegDiagram-XKGWAZYB-D7genGLl.js → pegDiagram-XKGWAZYB-GjAPNaqn.js} +1 -1
  362. ksadk/server/static/assets/pie-WAS4IAKB-DyfxBU7V.js +1 -0
  363. ksadk/server/static/assets/{pieDiagram-E7YTZNPT-Bxj32zwD.js → pieDiagram-E7YTZNPT-ToIewrqr.js} +1 -1
  364. ksadk/server/static/assets/{quadrantDiagram-AXDQQJYC-BURv2mGh.js → quadrantDiagram-AXDQQJYC-4d78KiEY.js} +1 -1
  365. ksadk/server/static/assets/radar-RG4KPBEZ-FFontjL2.js +1 -0
  366. ksadk/server/static/assets/railroad-74A4TZTK-D0Uidzen.js +1 -0
  367. ksadk/server/static/assets/railroad-abnf-HS5TGJTU-BOo_9T2h.js +1 -0
  368. ksadk/server/static/assets/railroad-ebnf-LZEXJU2U-D6-BjW7Z.js +1 -0
  369. ksadk/server/static/assets/railroad-peg-WCYAUIDC-CXx__yMm.js +1 -0
  370. ksadk/server/static/assets/{railroadDiagram-O6MQD6OU-CCsh3avW.js → railroadDiagram-O6MQD6OU-DKzx4xfv.js} +1 -1
  371. ksadk/server/static/assets/{requirementDiagram-EFPCY7ZU-_FRRBKEd.js → requirementDiagram-EFPCY7ZU-CJYljxQS.js} +1 -1
  372. ksadk/server/static/assets/{sankeyDiagram-P5KCCOFB-C-gr2o9M.js → sankeyDiagram-P5KCCOFB-DLU2fV1w.js} +1 -1
  373. ksadk/server/static/assets/{sequenceDiagram-WJ2MYXX4-D97NmfKg.js → sequenceDiagram-WJ2MYXX4-CVqysrA9.js} +1 -1
  374. ksadk/server/static/assets/{sizeCapture-X5ZJPWSS-DjrPC5FX.js → sizeCapture-X5ZJPWSS-BUxfmTHc.js} +1 -1
  375. ksadk/server/static/assets/{stateDiagram-HBIQ2CUA-DzMNg1hh.js → stateDiagram-HBIQ2CUA-CNFgYI9E.js} +1 -1
  376. ksadk/server/static/assets/stateDiagram-v2-4QOOHH4V-BXAFScz8.js +1 -0
  377. ksadk/server/static/assets/{swimlanes-XN3QIQJK-Cssf_CsU.js → swimlanes-XN3QIQJK-B6qCMe8N.js} +1 -1
  378. ksadk/server/static/assets/swimlanesDiagram-VK2B7HYN-uIQ2lJKH.js +8 -0
  379. ksadk/server/static/assets/{timeline-definition-24CTP7MA-BWTHzyS1.js → timeline-definition-24CTP7MA-CMD3x_U_.js} +1 -1
  380. ksadk/server/static/assets/treeView-Q6P3EWNA-CK5GgucZ.js +1 -0
  381. ksadk/server/static/assets/treemap-WGGIJYW6-Bq1u1SpG.js +1 -0
  382. ksadk/server/static/assets/{vennDiagram-4TSXK5OY-BSKgJsmR.js → vennDiagram-4TSXK5OY-BqtUqvXM.js} +1 -1
  383. ksadk/server/static/assets/wardley-WFR3VGLG-QAt06uEz.js +1 -0
  384. ksadk/server/static/assets/{wardleyDiagram-VM6X3IG4-eflHNoaZ.js → wardleyDiagram-VM6X3IG4-B5KfDjI-.js} +1 -1
  385. ksadk/server/static/assets/{xychartDiagram-S5SC5T6Z-eYqrQ-v4.js → xychartDiagram-S5SC5T6Z-BaUlSZrn.js} +1 -1
  386. ksadk/server/static/index.html +2 -2
  387. ksadk/server/terminal_sessions.py +34 -2
  388. ksadk/sessions/invocation_identity.py +235 -0
  389. ksadk/skills/__init__.py +26 -0
  390. ksadk/skills/events.py +464 -0
  391. ksadk/skills/manifest_cache.py +263 -0
  392. ksadk/skills/mcp_server/__init__.py +0 -0
  393. ksadk/skills/mcp_server/_registry.py +33 -0
  394. ksadk/skills/mcp_server/_routing.py +26 -0
  395. ksadk/skills/mcp_server/_workspace_files.py +160 -0
  396. ksadk/skills/mcp_server/register.py +415 -0
  397. ksadk/skills/mcp_server/server.py +218 -0
  398. ksadk/skills/models.py +11 -0
  399. ksadk/skills/observability.py +132 -0
  400. ksadk/skills/package_store.py +75 -2
  401. ksadk/skills/runtime/agent.py +38 -5
  402. ksadk/skills/runtime/artifacts.py +87 -0
  403. ksadk/skills/runtime/backends/e2b.py +393 -52
  404. ksadk/skills/runtime/backends/local.py +621 -119
  405. ksadk/skills/runtime/base.py +78 -7
  406. ksadk/skills/runtime/executor.py +266 -1
  407. ksadk/skills/runtime/loader.py +108 -3
  408. ksadk/skills/runtime/request.py +18 -0
  409. ksadk/skills/tool_defs.py +108 -3
  410. ksadk/studio/api.py +592 -57
  411. ksadk/studio/api_contracts.py +8 -2
  412. ksadk/studio/api_plugin_routes.py +39 -12
  413. ksadk/studio/api_resource_connections.py +79 -41
  414. ksadk/studio/authoring.py +12 -6
  415. ksadk/studio/authoring_coordinator.py +4 -2
  416. ksadk/studio/builder.py +12 -0
  417. ksadk/studio/capabilities.py +23 -6
  418. ksadk/studio/channel_connections.py +333 -0
  419. ksadk/studio/cloud.py +30 -10
  420. ksadk/studio/cloud_shared_web.py +75 -2
  421. ksadk/studio/codex_agent_service.py +2 -2
  422. ksadk/studio/codex_builder.py +1 -1
  423. ksadk/studio/codex_run.py +6 -1
  424. ksadk/studio/compiler.py +10 -0
  425. ksadk/studio/configuration.py +182 -0
  426. ksadk/studio/contracts.py +33 -5
  427. ksadk/studio/dsh_application.py +135 -25
  428. ksadk/studio/dsh_capability_service.py +287 -20
  429. ksadk/studio/dsh_lifecycle.py +58 -0
  430. ksadk/studio/dsh_provider_registration.py +55 -16
  431. ksadk/studio/entry.py +53 -0
  432. ksadk/studio/event_store.py +36 -5
  433. ksadk/studio/execution_host.py +525 -0
  434. ksadk/studio/framework_run.py +32 -10
  435. ksadk/studio/hosted_kernel.py +1 -1
  436. ksadk/studio/kernel_registry.py +418 -0
  437. ksadk/studio/kernel_sqlite_migration.py +181 -0
  438. ksadk/studio/model_client.py +1178 -64
  439. ksadk/studio/model_profile_service.py +26 -11
  440. ksadk/studio/native_documents.py +172 -0
  441. ksadk/studio/plugin_composition.py +13 -2
  442. ksadk/studio/plugin_kernel_adapter.py +15 -0
  443. ksadk/studio/plugin_lifecycle.py +80 -0
  444. ksadk/studio/plugin_runtime.py +230 -17
  445. ksadk/studio/provider_recovery.py +59 -0
  446. ksadk/studio/recovery_page.py +70 -0
  447. ksadk/studio/resource_authority.py +59 -32
  448. ksadk/studio/resource_catalog.py +6 -0
  449. ksadk/studio/run_activity.py +895 -0
  450. ksadk/studio/run_documents.py +127 -0
  451. ksadk/studio/run_service.py +329 -33
  452. ksadk/studio/runtime_catalog.py +53 -10
  453. ksadk/studio/runtime_source.py +1 -1
  454. ksadk/studio/scheduler_runtime.py +32 -289
  455. ksadk/studio/service.py +398 -103
  456. ksadk/studio/shared_web.py +149 -36
  457. ksadk/studio/static/assets/ChannelsPage-D_PGmKVq.js +8 -0
  458. ksadk/studio/static/assets/CodeBlock-DMIf4h33-UIqo-BPW.js +44 -0
  459. ksadk/studio/static/assets/ExecutionTree-v3HexvPo-Bk8wzGSy.js +1 -0
  460. ksadk/studio/static/assets/MathMessageMarkdown-BesSeCYl-OhNwH4K9.js +8 -0
  461. ksadk/studio/static/assets/MermaidBlock-H_0qzQDf-BdXtxug_.js +11 -0
  462. ksadk/studio/static/assets/MessageMarkdown-CwMTvgFj-g0I-I4dD.js +59 -0
  463. ksadk/studio/static/assets/PrismRenderer-5pK6tUdb.js +3 -0
  464. ksadk/studio/static/assets/TeamsPage-DqX4HWKQ.js +3 -0
  465. ksadk/studio/static/assets/abnfDiagram-VCTEODGH-Bnb1O3tA.js +1 -0
  466. ksadk/studio/static/assets/architecture-7GRP2DOG-BMOPAkUC.js +1 -0
  467. ksadk/studio/static/assets/architectureDiagram-5GKGNRK7-5Zn1gqJv.js +36 -0
  468. ksadk/studio/static/assets/{blockDiagram-I7D4REHJ-CFmPl1de.js → blockDiagram-I7D4REHJ-CLB4L11u.js} +6 -6
  469. ksadk/studio/static/assets/{c4Diagram-7LVT6UL2-BRrGu8qt.js → c4Diagram-7LVT6UL2-BOma_Z_F.js} +7 -7
  470. ksadk/studio/static/assets/channel-r8itPEik.js +1 -0
  471. ksadk/studio/static/assets/chunk-2E4U76K2-BFf_huql.js +2 -0
  472. ksadk/studio/static/assets/chunk-2ZTRR5NV-C2qZJila.js +2 -0
  473. ksadk/studio/static/assets/chunk-3Z5EZCMW-DMniOlPd.js +1 -0
  474. ksadk/studio/static/assets/{chunk-4HAMMTFA-D220vUtq.js → chunk-4HAMMTFA-DVtDP4rm.js} +7 -7
  475. ksadk/studio/static/assets/chunk-5V3GS4D5-i-ZDOEnP.js +1 -0
  476. ksadk/studio/static/assets/chunk-6AZGARVD-BB6FqMl-.js +1 -0
  477. ksadk/studio/static/assets/chunk-6EIED4P4-DdUJkP0f.js +1 -0
  478. ksadk/studio/static/assets/chunk-6K3QC6MW-CqVsVn-y.js +1 -0
  479. ksadk/studio/static/assets/chunk-6TQVIW2G-DKlLbNIP.js +1 -0
  480. ksadk/studio/static/assets/chunk-747NJXEK-BFkZPlab.js +2 -0
  481. ksadk/studio/static/assets/chunk-75Z2AOVW-BZNhM4vB.js +2 -0
  482. ksadk/studio/static/assets/chunk-CLGD4ZFX-D-GTtyKs.js +1 -0
  483. ksadk/studio/static/assets/{chunk-DU6HZSFF-C4DtVpCu.js → chunk-DU6HZSFF-CpEZCUgg.js} +1 -1
  484. ksadk/studio/static/assets/chunk-F27PBJKO-D7pvKf0C.js +1 -0
  485. ksadk/studio/static/assets/{chunk-GMAD6QVW-DiQA-u2N.js → chunk-GMAD6QVW-DE_8H717.js} +6 -6
  486. ksadk/studio/static/assets/chunk-GVQU2GXP-BfEB0lNv.js +1 -0
  487. ksadk/studio/static/assets/chunk-I5DQTOEV-Hm2LfiYI.js +1 -0
  488. ksadk/studio/static/assets/chunk-ICYGCRZG-749o-pGJ.js +1 -0
  489. ksadk/studio/static/assets/chunk-IH6LHLGP-CC6I9F3i.js +1 -0
  490. ksadk/studio/static/assets/{chunk-IMKFNOWR-BSlbjT_b.js → chunk-IMKFNOWR-D38axYOR.js} +5 -5
  491. ksadk/studio/static/assets/chunk-KI3K4JFJ-Rma-0k_M.js +1 -0
  492. ksadk/studio/static/assets/chunk-L3NEJ4N5-Dq5xn7aL.js +1 -0
  493. ksadk/studio/static/assets/chunk-LNGE3PJU-DWpGwHrW.js +34 -0
  494. ksadk/studio/static/assets/{chunk-OSK3NFVY-M2m6G3j4.js → chunk-OSK3NFVY-DiCQjx9b.js} +5 -5
  495. ksadk/studio/static/assets/chunk-OUJLGHUK-D0j2JRSg.js +2 -0
  496. ksadk/studio/static/assets/{chunk-P2QGCYS3-DezaQxiK.js → chunk-P2QGCYS3-VdhKmfYq.js} +1 -1
  497. ksadk/studio/static/assets/chunk-POPQ4Y6H-C1_rzO5M.js +1 -0
  498. ksadk/studio/static/assets/chunk-PWAF6VOD-B45HvflI.js +1 -0
  499. ksadk/studio/static/assets/{chunk-SHT3W25Y-DAyIVp5H.js → chunk-SHT3W25Y-DsCFnRVE.js} +9 -9
  500. ksadk/studio/static/assets/{chunk-SVP7TREG-DulomOrS.js → chunk-SVP7TREG-DljApgRX.js} +1 -1
  501. ksadk/studio/static/assets/{chunk-TICWLB2K-bHJYoflj.js → chunk-TICWLB2K-DWqRtyqa.js} +6 -6
  502. ksadk/studio/static/assets/chunk-TLUHSLCS-DUeGgnD5.js +2 -0
  503. ksadk/studio/static/assets/chunk-UY3FDG6J-CnmaAkG5.js +1 -0
  504. ksadk/studio/static/assets/chunk-XHIXRSVI-BFQ6B8BE.js +1 -0
  505. ksadk/studio/static/assets/chunk-XXDRQBXY-DqAYeljN.js +1 -0
  506. ksadk/studio/static/assets/classDiagram-ZZMXUADV-DjeMNJmu.js +1 -0
  507. ksadk/studio/static/assets/classDiagram-v2-VYDZK3BY-DjeMNJmu.js +1 -0
  508. ksadk/studio/static/assets/clsx-DB0hHKMi.js +1 -0
  509. ksadk/studio/static/assets/cose-bilkent-JH36ORCC-om8AY0Mc.js +1 -0
  510. ksadk/studio/static/assets/createLucideIcon-DR0LGTP5.js +1 -0
  511. ksadk/studio/static/assets/cynefin-OW5HDTMX-7tP7QfM3.js +1 -0
  512. ksadk/studio/static/assets/cynefinDiagram-5FMLGOSQ-6BrmK52S.js +62 -0
  513. ksadk/studio/static/assets/dagre-GXQ25YYZ-buZBRlwz.js +4 -0
  514. ksadk/studio/static/assets/{diagram-S7CK7UJ4-0BZ98mya.js → diagram-S7CK7UJ4-C6aH78c4.js} +3 -3
  515. ksadk/studio/static/assets/diagram-UQ7AKVKN-DY_tQ6C_.js +41 -0
  516. ksadk/studio/static/assets/diagram-VSXAHHWV-DX9p5cQT.js +3 -0
  517. ksadk/studio/static/assets/diagram-VX7I27RA-DB2WSH8X.js +24 -0
  518. ksadk/studio/static/assets/diagram-Z3DM3KII-Ce1BJwHE.js +24 -0
  519. ksadk/studio/static/assets/ebnfDiagram-PWID7BFC-Daukxwqf.js +1 -0
  520. ksadk/studio/static/assets/{erDiagram-RLTQ6QDP-DLGry2Ap.js → erDiagram-RLTQ6QDP-CGthTMmJ.js} +6 -6
  521. ksadk/studio/static/assets/eventmodeling-NTZA5JFV-BR2FzK4R.js +1 -0
  522. ksadk/studio/static/assets/flowDiagram-HODETNUW-CZ1tEenp.js +1 -0
  523. ksadk/studio/static/assets/ganttDiagram-EL5Y4UJY-BfoAZW9X.js +292 -0
  524. ksadk/studio/static/assets/gitGraph-4MIJSDKK-DYlXv_yJ.js +1 -0
  525. ksadk/studio/static/assets/gitGraphDiagram-WWUBYQGX-S985OIJF.js +106 -0
  526. ksadk/studio/static/assets/iconfont-4HN3C9Pg.woff2 +0 -0
  527. ksadk/studio/static/assets/index-CfEnms6Y.css +2 -0
  528. ksadk/studio/static/assets/index-Dp61rOWZ.js +0 -0
  529. ksadk/studio/static/assets/index.dom-BQenBtFm.js +1 -0
  530. ksadk/studio/static/assets/info-A6RAGUB7-BlU-8_xu.js +1 -0
  531. ksadk/studio/static/assets/infoDiagram-27XIBGKW-CO3W8tFn.js +2 -0
  532. ksadk/studio/static/assets/{ishikawaDiagram-5VMMS53U-CljI2wyf.js → ishikawaDiagram-5VMMS53U-BUGEl8cO.js} +2 -2
  533. ksadk/studio/static/assets/{journeyDiagram-3NMN7TZE-D50Fo2sL.js → journeyDiagram-3NMN7TZE-Ch2ZYxvr.js} +6 -6
  534. ksadk/studio/static/assets/{kanban-definition-UXKFOSKX-DimfOTam.js → kanban-definition-UXKFOSKX-Da-Fp4vC.js} +3 -3
  535. ksadk/studio/static/assets/kingsoft-cloud-BOcLiQ3e.ico +0 -0
  536. ksadk/studio/static/assets/{line-CX5BOOUP.js → line-BDaeq300.js} +1 -1
  537. ksadk/studio/static/assets/linear-DmucvK78.js +1 -0
  538. ksadk/studio/static/assets/mermaid-parser.core-Cj5mYdBi.js +4 -0
  539. ksadk/studio/static/assets/{mindmap-definition-YA3MSWOX-Bizzqy5R.js → mindmap-definition-YA3MSWOX-CvlsVQ38.js} +1 -1
  540. ksadk/studio/static/assets/packet-AYTQ26CC-BSJEH9Lb.js +1 -0
  541. ksadk/studio/static/assets/pegDiagram-XKGWAZYB-BuHuNgT5.js +1 -0
  542. ksadk/studio/static/assets/pie-WAS4IAKB-qxv01Y8W.js +1 -0
  543. ksadk/studio/static/assets/{pieDiagram-E7YTZNPT-B9mrFSDF.js → pieDiagram-E7YTZNPT-DlrWiSOv.js} +1 -1
  544. ksadk/studio/static/assets/preload-helper-CO68xz6u.js +1 -0
  545. ksadk/studio/static/assets/presentation-yYw7xK60-BmcZriri.js +1 -0
  546. ksadk/studio/static/assets/{quadrantDiagram-AXDQQJYC-NzUfCbMR.js → quadrantDiagram-AXDQQJYC-BA3hpUZM.js} +6 -6
  547. ksadk/studio/static/assets/radar-RG4KPBEZ-B6h6pWOs.js +1 -0
  548. ksadk/studio/static/assets/railroad-74A4TZTK-CGtTWdGc.js +1 -0
  549. ksadk/studio/static/assets/railroad-abnf-HS5TGJTU-Cq7y22IA.js +1 -0
  550. ksadk/studio/static/assets/railroad-ebnf-LZEXJU2U-V0aQVv9m.js +1 -0
  551. ksadk/studio/static/assets/railroad-peg-WCYAUIDC-BQiIsX_p.js +1 -0
  552. ksadk/studio/static/assets/railroadDiagram-O6MQD6OU-BxpAazym.js +1 -0
  553. ksadk/studio/static/assets/{requirementDiagram-BXWQKSXE-BF3d103U.js → requirementDiagram-BXWQKSXE-E-Ge0FcV.js} +1 -1
  554. ksadk/studio/static/assets/sankeyDiagram-P5KCCOFB-CA6YKhQ3.js +40 -0
  555. ksadk/studio/static/assets/{sequenceDiagram-WJ2MYXX4-Dh4wZtUm.js → sequenceDiagram-WJ2MYXX4-CcElXGg4.js} +9 -9
  556. ksadk/studio/static/assets/src-B6xuSHsQ.js +1 -0
  557. ksadk/studio/static/assets/stateDiagram-D77RDMKH-DdXZOFqY.js +1 -0
  558. ksadk/studio/static/assets/stateDiagram-v2-MP3YSRHH-CJbOM-QK.js +1 -0
  559. ksadk/studio/static/assets/swimlanes-42K2YHIH-NtgEEHLY.js +1 -0
  560. ksadk/studio/static/assets/swimlanesDiagram-VR7AAH4N-D-AVlW8B.js +8 -0
  561. ksadk/studio/static/assets/{timeline-definition-24CTP7MA-DxmSSjRB.js → timeline-definition-24CTP7MA-CIuYhNy3.js} +7 -7
  562. ksadk/studio/static/assets/treeView-Q6P3EWNA-BTTYcvrF.js +1 -0
  563. ksadk/studio/static/assets/treemap-WGGIJYW6-Cg7tyfH8.js +1 -0
  564. ksadk/studio/static/assets/vennDiagram-4TSXK5OY-7HbApbrv.js +34 -0
  565. ksadk/studio/static/assets/wardley-WFR3VGLG-C6N1rULY.js +1 -0
  566. ksadk/studio/static/assets/{wardleyDiagram-VM6X3IG4-Ba1AOWoe.js → wardleyDiagram-VM6X3IG4-CMJiaedy.js} +1 -1
  567. ksadk/studio/static/assets/{xychartDiagram-S5SC5T6Z-Cr5pt5Y-.js → xychartDiagram-S5SC5T6Z-BdgtMvW2.js} +6 -6
  568. ksadk/studio/static/index.html +8 -2
  569. ksadk/studio/teams_catalog.py +133 -0
  570. ksadk/studio/teams_installation.py +214 -0
  571. ksadk/studio/teams_node.py +545 -0
  572. ksadk/studio/teams_node_runner.py +69 -0
  573. ksadk/studio/teams_remote.py +274 -0
  574. ksadk/studio/templates.py +40 -19
  575. ksadk/studio/validator.py +13 -0
  576. ksadk/studio/workspace.py +19 -4
  577. ksadk/studio/workspace_plugins.py +136 -0
  578. ksadk/studio/workspace_registry.py +286 -0
  579. ksadk/toolsets/__init__.py +11 -0
  580. ksadk/toolsets/skills.py +446 -378
  581. ksadk/toolsets/workspace.py +3 -3
  582. ksadk/toolsets/workspace_identity.py +15 -0
  583. ksadk/version.py +1 -1
  584. ksadk_runtime_common/memory_backend/providers/lancedb.py +56 -2
  585. ksadk_runtime_common/schemas/memory_backend_manifest.schema.json +148 -148
  586. ksadk_runtime_common/workspace_files/router.py +26 -13
  587. ksadk/server/static/assets/MathMessageMarkdown-DbdW5A4_.js +0 -8
  588. ksadk/server/static/assets/architecture-7GRP2DOG-BW5UtSnx.js +0 -1
  589. ksadk/server/static/assets/channel-CF5Up3hQ.js +0 -1
  590. ksadk/server/static/assets/chunk-2Q5K7J3B-KkXX47WI.js +0 -1
  591. ksadk/server/static/assets/classDiagram-DTDB5LWJ-Cz81acRQ.js +0 -1
  592. ksadk/server/static/assets/classDiagram-v2-JRS7N3AN-Cz81acRQ.js +0 -1
  593. ksadk/server/static/assets/cynefin-OW5HDTMX-DVWs8a2t.js +0 -1
  594. ksadk/server/static/assets/dist-B2_CVgKv.js +0 -1
  595. ksadk/server/static/assets/eventmodeling-NTZA5JFV-CQqR2hg3.js +0 -1
  596. ksadk/server/static/assets/flowDiagram-A5DVABFB-DDRRbGPm.js +0 -1
  597. ksadk/server/static/assets/gitGraph-4MIJSDKK-fgWEf7UD.js +0 -1
  598. ksadk/server/static/assets/index-DcTML1Up.css +0 -2
  599. ksadk/server/static/assets/index-Dh2XHqPK.js +0 -244
  600. ksadk/server/static/assets/info-A6RAGUB7-BUecLTdt.js +0 -1
  601. ksadk/server/static/assets/packet-AYTQ26CC-BeW-btFv.js +0 -1
  602. ksadk/server/static/assets/pie-WAS4IAKB-X0xh4SaT.js +0 -1
  603. ksadk/server/static/assets/radar-RG4KPBEZ-DzRMSqjd.js +0 -1
  604. ksadk/server/static/assets/railroad-74A4TZTK-Cc44icX-.js +0 -1
  605. ksadk/server/static/assets/railroad-abnf-HS5TGJTU-D6S4BdV-.js +0 -1
  606. ksadk/server/static/assets/railroad-ebnf-LZEXJU2U-vD3aVE2o.js +0 -1
  607. ksadk/server/static/assets/railroad-peg-WCYAUIDC-CYbW_b4T.js +0 -1
  608. ksadk/server/static/assets/stateDiagram-v2-4QOOHH4V-BIcjKFhF.js +0 -1
  609. ksadk/server/static/assets/swimlanesDiagram-VK2B7HYN-tq3K3Ybl.js +0 -8
  610. ksadk/server/static/assets/treeView-Q6P3EWNA-DBXt3GdU.js +0 -1
  611. ksadk/server/static/assets/treemap-WGGIJYW6-DrCy4E_l.js +0 -1
  612. ksadk/server/static/assets/wardley-WFR3VGLG-CefhOliM.js +0 -1
  613. ksadk/studio/static/assets/CodeBlock-DCUUY0PL-BLjA7kbS.js +0 -41
  614. ksadk/studio/static/assets/MathMessageMarkdown-CBcDrAw--CUYIXwgI.js +0 -8
  615. ksadk/studio/static/assets/MermaidBlock-DBFTztfQ-BTYKWEbD.js +0 -44
  616. ksadk/studio/static/assets/PrismRenderer-wiXRHURw.js +0 -3
  617. ksadk/studio/static/assets/abnfDiagram-VCTEODGH-CLETGjKq.js +0 -1
  618. ksadk/studio/static/assets/architecture-7GRP2DOG-hXMiO_AU.js +0 -1
  619. ksadk/studio/static/assets/architectureDiagram-5GKGNRK7-B5EQysk6.js +0 -36
  620. ksadk/studio/static/assets/channel-BqO-gtEw.js +0 -1
  621. ksadk/studio/static/assets/chunk-75Z2AOVW-C8lLv_qc.js +0 -2
  622. ksadk/studio/static/assets/chunk-F27PBJKO-Cpw14SNG.js +0 -1
  623. ksadk/studio/static/assets/chunk-GVQU2GXP-DUdNBUCi.js +0 -1
  624. ksadk/studio/static/assets/chunk-L3NEJ4N5-Db8Ab22W.js +0 -1
  625. ksadk/studio/static/assets/chunk-POPQ4Y6H-DOpufJ3t.js +0 -1
  626. ksadk/studio/static/assets/chunk-PWAF6VOD-CfLb1gSc.js +0 -1
  627. ksadk/studio/static/assets/chunk-XXDRQBXY-7PcdR2B1.js +0 -1
  628. ksadk/studio/static/assets/classDiagram-ZZMXUADV-D_bW8JjA.js +0 -1
  629. ksadk/studio/static/assets/classDiagram-v2-VYDZK3BY-D_bW8JjA.js +0 -1
  630. ksadk/studio/static/assets/cose-bilkent-JH36ORCC-snL88wkX.js +0 -1
  631. ksadk/studio/static/assets/cynefin-OW5HDTMX-Bd1YhRo1.js +0 -1
  632. ksadk/studio/static/assets/cynefinDiagram-5FMLGOSQ-BBrIG_mI.js +0 -62
  633. ksadk/studio/static/assets/dagre-GXQ25YYZ-DtF1nGdY.js +0 -4
  634. ksadk/studio/static/assets/diagram-UQ7AKVKN-6mLKEo6L.js +0 -41
  635. ksadk/studio/static/assets/diagram-VSXAHHWV-CJBIaiZ2.js +0 -3
  636. ksadk/studio/static/assets/diagram-VX7I27RA-BohLEE1C.js +0 -24
  637. ksadk/studio/static/assets/diagram-Z3DM3KII-D8KIGonG.js +0 -24
  638. ksadk/studio/static/assets/ebnfDiagram-PWID7BFC-C99HU61t.js +0 -1
  639. ksadk/studio/static/assets/eventmodeling-NTZA5JFV-B1_5Ac8j.js +0 -1
  640. ksadk/studio/static/assets/flowDiagram-HODETNUW-DD5hmicn.js +0 -1
  641. ksadk/studio/static/assets/ganttDiagram-EL5Y4UJY-BPJrVLSG.js +0 -292
  642. ksadk/studio/static/assets/gitGraph-4MIJSDKK-Cy_ZQBGi.js +0 -1
  643. ksadk/studio/static/assets/gitGraphDiagram-WWUBYQGX-CZCUz4MT.js +0 -106
  644. ksadk/studio/static/assets/index-CeHL9ARV.css +0 -2
  645. ksadk/studio/static/assets/index-D9QEcVpL.js +0 -320
  646. ksadk/studio/static/assets/info-A6RAGUB7-DBzDQB_I.js +0 -1
  647. ksadk/studio/static/assets/infoDiagram-27XIBGKW-B-sq07Hi.js +0 -2
  648. ksadk/studio/static/assets/linear-BCxN9JLv.js +0 -1
  649. ksadk/studio/static/assets/mermaid-parser.core-BdCz8fkS.js +0 -7
  650. ksadk/studio/static/assets/packet-AYTQ26CC-gPln-_kG.js +0 -1
  651. ksadk/studio/static/assets/pegDiagram-XKGWAZYB-Dy3fB-gW.js +0 -1
  652. ksadk/studio/static/assets/pie-WAS4IAKB-qZdHMr7B.js +0 -1
  653. ksadk/studio/static/assets/radar-RG4KPBEZ-BZlnaea9.js +0 -1
  654. ksadk/studio/static/assets/railroad-74A4TZTK-Ce3__H9c.js +0 -1
  655. ksadk/studio/static/assets/railroad-abnf-HS5TGJTU-DqQn7EzD.js +0 -1
  656. ksadk/studio/static/assets/railroad-ebnf-LZEXJU2U-B55kCA8F.js +0 -1
  657. ksadk/studio/static/assets/railroad-peg-WCYAUIDC-DfQnvkHd.js +0 -1
  658. ksadk/studio/static/assets/railroadDiagram-O6MQD6OU-DnhMjZCk.js +0 -1
  659. ksadk/studio/static/assets/sankeyDiagram-P5KCCOFB-Bo-JTwt0.js +0 -40
  660. ksadk/studio/static/assets/src-SFn9St9H.js +0 -1
  661. ksadk/studio/static/assets/stateDiagram-D77RDMKH-DH774G6d.js +0 -1
  662. ksadk/studio/static/assets/stateDiagram-v2-MP3YSRHH-DZvVWPBo.js +0 -1
  663. ksadk/studio/static/assets/swimlanes-42K2YHIH-Bl13OvTX.js +0 -1
  664. ksadk/studio/static/assets/swimlanesDiagram-VR7AAH4N-BnFOTALJ.js +0 -8
  665. ksadk/studio/static/assets/treeView-Q6P3EWNA-D5Nn9Swz.js +0 -1
  666. ksadk/studio/static/assets/treemap-WGGIJYW6-CgHgnQhE.js +0 -1
  667. ksadk/studio/static/assets/vennDiagram-4TSXK5OY-B9QEXcJq.js +0 -34
  668. ksadk/studio/static/assets/wardley-WFR3VGLG-DXrK2RRY.js +0 -1
  669. {agentengine_sdk_python-0.8.4.dist-info → agentengine_sdk_python-0.8.5.dist-info}/WHEEL +0 -0
  670. {agentengine_sdk_python-0.8.4.dist-info → agentengine_sdk_python-0.8.5.dist-info}/entry_points.txt +0 -0
  671. {agentengine_sdk_python-0.8.4.dist-info → agentengine_sdk_python-0.8.5.dist-info}/licenses/LICENSE +0 -0
  672. {agentengine_sdk_python-0.8.4.dist-info → agentengine_sdk_python-0.8.5.dist-info}/top_level.txt +0 -0
  673. /ksadk/studio/static/assets/{MathMessageMarkdown-CBcDrAw--BEOyPC3w.css → MathMessageMarkdown-BesSeCYl-BEOyPC3w.css} +0 -0
@@ -14,6 +14,7 @@ from ksadk.sessions.local_service import resolve_local_session_dir
14
14
  from ksadk.tools.gateway import ToolPolicy, default_tool_gateway
15
15
  from ksadk.tools.result_budget import budget_tool_output, default_tool_result_budget
16
16
  from ksadk.toolsets._langchain import as_tool
17
+ from ksadk.toolsets.workspace_identity import identity_workspace_root
17
18
  from ksadk.toolsets.workspace_state import WorkspaceReadState, get_read_state, record_read_state
18
19
 
19
20
  _WORKSPACE_TOOL_POLICIES = {
@@ -41,7 +42,7 @@ def _dict_result(value: Any, *, tool_name: str) -> dict[str, Any]:
41
42
 
42
43
 
43
44
  def workspace_root() -> Path:
44
- return Path(resolve_local_session_dir()) / "workspace"
45
+ return identity_workspace_root(Path(resolve_local_session_dir()) / "workspace")
45
46
 
46
47
 
47
48
  def resolve_workspace_path(relative_path: str) -> Path:
@@ -59,7 +60,6 @@ def workspace_relative(path: Path) -> str:
59
60
 
60
61
  def workspace_status() -> dict[str, Any]:
61
62
  """Return current AgentEngine workspace status."""
62
-
63
63
  return _dict_result(
64
64
  _gateway().invoke("workspace_status", _workspace_status_impl),
65
65
  tool_name="workspace_status",
@@ -818,7 +818,7 @@ def _validate_read_state(target: Path, relative: str) -> dict[str, Any] | None:
818
818
  "error_type": "file_modified_since_read",
819
819
  "error_message": "workspace file changed since last read",
820
820
  "suggested_action": (
821
- f"Re-read the file with read_workspace_file(path={relative!r}) " "and retry."
821
+ f"Re-read the file with read_workspace_file(path={relative!r}) and retry."
822
822
  ),
823
823
  }
824
824
  return None
@@ -0,0 +1,15 @@
1
+ """Identity-scoped root resolution for built-in workspace tools."""
2
+
3
+ from pathlib import Path
4
+
5
+ from ksadk.runtime_context import get_current_identity_context
6
+ from ksadk.sessions.invocation_identity import identity_scope_ref
7
+
8
+
9
+ def identity_workspace_root(root: Path) -> Path:
10
+ """Append the verified identity scope while preserving caller-owned roots."""
11
+
12
+ identity = get_current_identity_context()
13
+ if identity.is_empty:
14
+ return root
15
+ return root / "identities" / identity_scope_ref(identity)
ksadk/version.py CHANGED
@@ -1,4 +1,4 @@
1
1
  """KsADK 版本信息"""
2
2
 
3
- VERSION = "0.8.4"
3
+ VERSION = "0.8.5"
4
4
  __version__ = VERSION
@@ -2,12 +2,16 @@
2
2
 
3
3
  from __future__ import annotations
4
4
 
5
+ import os
5
6
  from typing import Any
6
7
 
7
8
  from ksadk_runtime_common.memory_backend.manifest import MemoryBackendManifest
8
9
  from ksadk_runtime_common.memory_backend.registry import RenderResult
9
10
 
10
11
 
12
+ _LANCEDB_API_KEY_FALLBACK_ENVS = ("OPENAI_API_KEY", "OPENCLAW_MODEL_API_KEY")
13
+
14
+
11
15
  class LanceDBProvider:
12
16
  """Provider for the in-process LanceDB OpenClaw memory plugin."""
13
17
 
@@ -21,8 +25,11 @@ class LanceDBProvider:
21
25
  """
22
26
  entry: dict[str, Any] = {"enabled": True}
23
27
  config = self._render_plugin_config(manifest.config or {})
28
+ self._apply_secrets_env(config, manifest.secrets_env or {})
24
29
  if config:
25
30
  entry["config"] = config
31
+ # 2026.9.1 requires non-bundled plugins to opt in to conversation hooks.
32
+ entry["hooks"] = {"allowConversationAccess": True}
26
33
 
27
34
  return RenderResult(
28
35
  backend_type="lancedb",
@@ -40,6 +47,46 @@ class LanceDBProvider:
40
47
  disabled_plugin_ids=["openclaw-mem0"],
41
48
  )
42
49
 
50
+ @staticmethod
51
+ def _resolve_env_name(secrets_env: dict[str, str], key: str, default: str) -> str:
52
+ return str(secrets_env.get(key) or default).strip() or default
53
+
54
+ @classmethod
55
+ def _apply_secrets_env(
56
+ cls,
57
+ config: dict[str, Any],
58
+ secrets_env: dict[str, str],
59
+ ) -> None:
60
+ if not secrets_env:
61
+ return
62
+ embedding = config.setdefault("embedding", {})
63
+ if not embedding.get("apiKey"):
64
+ api_key_env = cls._resolve_env_name(
65
+ secrets_env, "embedding_api_key", "LANCEDB_API_KEY"
66
+ )
67
+ if not (api_key_env and os.getenv(api_key_env)):
68
+ for fallback in _LANCEDB_API_KEY_FALLBACK_ENVS:
69
+ if os.getenv(fallback):
70
+ api_key_env = fallback
71
+ break
72
+ if api_key_env and os.getenv(api_key_env):
73
+ embedding["apiKey"] = f"${{{api_key_env}}}"
74
+ elif not embedding:
75
+ config.pop("embedding", None)
76
+ storage = config.get("storageOptions")
77
+ if not isinstance(storage, dict):
78
+ storage = {}
79
+ for target, secret_key, fallback_env in (
80
+ ("accessKeyId", "storage_access_key_id", "AWS_ACCESS_KEY_ID"),
81
+ ("secretAccessKey", "storage_secret_access_key", "AWS_SECRET_ACCESS_KEY"),
82
+ ):
83
+ if not storage.get(target):
84
+ env_name = cls._resolve_env_name(secrets_env, secret_key, fallback_env)
85
+ if env_name and os.getenv(env_name):
86
+ storage[target] = f"${{{env_name}}}"
87
+ if storage:
88
+ config["storageOptions"] = storage
89
+
43
90
  @staticmethod
44
91
  def _first(config: dict[str, Any], *keys: str) -> Any:
45
92
  for key in keys:
@@ -60,18 +107,25 @@ class LanceDBProvider:
60
107
  output: dict[str, Any] = {}
61
108
 
62
109
  embedding: dict[str, Any] = {}
110
+ embedding_source = config.get("embedding")
111
+ if not isinstance(embedding_source, dict):
112
+ embedding_source = {}
63
113
  for target_key, *source_keys in (
64
114
  ("provider", "provider", "embedding_provider"),
65
115
  ("model", "model", "embedding_model"),
66
116
  ("apiKey", "apiKey", "api_key", "embedding_api_key"),
67
117
  ("baseUrl", "baseUrl", "base_url", "embedding_base_url"),
68
118
  ):
69
- value = cls._first(config, *source_keys)
119
+ value = cls._first(embedding_source, *source_keys)
120
+ if value is None:
121
+ value = cls._first(config, *source_keys)
70
122
  if value is not None:
71
123
  embedding[target_key] = value
72
124
  dimensions = cls._first(
73
- config, "dimensions", "embedding_dimensions"
125
+ embedding_source, "dimensions", "embedding_dimensions"
74
126
  )
127
+ if dimensions is None:
128
+ dimensions = cls._first(config, "dimensions", "embedding_dimensions")
75
129
  if isinstance(dimensions, int) or (
76
130
  isinstance(dimensions, str) and dimensions.strip().isdigit()
77
131
  ):
@@ -1,148 +1,148 @@
1
- {
2
- "$schema": "https://json-schema.org/draft/2020-12/schema",
3
- "$id": "https://kingsoftcloud.github.io/ksadk-python/schemas/memory_backend_manifest/v1",
4
- "title": "MemoryBackendManifest",
5
- "description": "Memory backend manifest for OpenClaw runtime configuration.",
6
- "type": "object",
7
- "required": [
8
- "schema_version",
9
- "backend_type"
10
- ],
11
- "additionalProperties": false,
12
- "properties": {
13
- "schema_version": {
14
- "type": "string",
15
- "const": "v1",
16
- "description": "Schema version identifier. Must be 'v1'."
17
- },
18
- "backend_type": {
19
- "type": "string",
20
- "enum": [
21
- "openclaw_default",
22
- "mem0",
23
- "lancedb"
24
- ],
25
- "description": "Memory backend type. Supports 'openclaw_default', 'mem0', and 'lancedb'."
26
- },
27
- "config": {
28
- "type": "object",
29
- "description": "Backend-specific configuration.",
30
- "additionalProperties": true,
31
- "properties": {
32
- "mem0_instance_id": {
33
- "type": "string",
34
- "format": "uuid",
35
- "description": "Mem0 instance UUID (required when backend_type is 'mem0')."
36
- },
37
- "mem0_instance_name": {
38
- "type": "string",
39
- "description": "Mem0 instance display name."
40
- },
41
- "mem0_region": {
42
- "type": "string",
43
- "description": "Mem0 instance region."
44
- },
45
- "dbPath": {
46
- "type": "string",
47
- "description": "Optional LanceDB plugin dbPath override."
48
- },
49
- "database_uri": {
50
- "type": "string",
51
- "description": "Database URI for LanceDB storage (e.g. s3://bucket/prefix). Mapped to dbPath when dbPath is absent."
52
- },
53
- "embedding": {
54
- "type": "object",
55
- "description": "Optional LanceDB plugin embedding configuration.",
56
- "additionalProperties": true
57
- },
58
- "embedding_provider": {
59
- "type": "string",
60
- "description": "Embedding provider for LanceDB (e.g. openai)."
61
- },
62
- "embedding_model": {
63
- "type": "string",
64
- "description": "Embedding model name for LanceDB."
65
- },
66
- "embedding_dimensions": {
67
- "type": "integer",
68
- "description": "Embedding vector dimensions for LanceDB."
69
- },
70
- "embedding_base_url": {
71
- "type": "string",
72
- "description": "Embedding provider base URL for LanceDB."
73
- },
74
- "storageOptions": {
75
- "type": "object",
76
- "description": "Optional LanceDB plugin storage options.",
77
- "additionalProperties": true
78
- },
79
- "storage_endpoint": {
80
- "type": "string",
81
- "description": "S3-compatible storage endpoint URL. Mapped into storageOptions.endpoint."
82
- },
83
- "storage_region": {
84
- "type": "string",
85
- "description": "S3-compatible storage region. Mapped into storageOptions.region."
86
- },
87
- "storage_bucket": {
88
- "type": "string",
89
- "description": "S3-compatible storage bucket. Mapped into storageOptions.bucket."
90
- },
91
- "storage_prefix": {
92
- "type": "string",
93
- "description": "S3-compatible storage key prefix. Mapped into storageOptions.prefix."
94
- },
95
- "storage_access_key_id": {
96
- "type": "string",
97
- "description": "S3-compatible storage access key id. Mapped into storageOptions.accessKeyId."
98
- },
99
- "storage_secret_access_key": {
100
- "type": "string",
101
- "description": "S3-compatible storage secret access key. Mapped into storageOptions.secretAccessKey."
102
- },
103
- "storage_allow_http": {
104
- "type": ["boolean", "string"],
105
- "description": "Allow plain HTTP for S3-compatible storage. Mapped into storageOptions.allowHttp as a string (\"true\"/\"false\")."
106
- }
107
- }
108
- },
109
- "secrets_env": {
110
- "type": "object",
111
- "description": "Environment variable names for secrets. Values are env var names, not actual secrets.",
112
- "additionalProperties": {
113
- "type": "string"
114
- },
115
- "properties": {
116
- "api_key": {
117
- "type": "string",
118
- "description": "Environment variable name for API key (e.g., 'MEM0_API_KEY')."
119
- },
120
- "memory_id": {
121
- "type": "string",
122
- "description": "Environment variable name for memory ID (e.g., 'MEM0_MEMORY_ID')."
123
- },
124
- "embedding_api_key": {
125
- "type": "string",
126
- "description": "Reserved for future LanceDB embedding secrets."
127
- }
128
- }
129
- }
130
- },
131
- "allOf": [
132
- {
133
- "if": {
134
- "properties": {
135
- "backend_type": { "const": "mem0" }
136
- }
137
- },
138
- "then": {
139
- "required": ["config"],
140
- "properties": {
141
- "config": {
142
- "required": ["mem0_instance_id"]
143
- }
144
- }
145
- }
146
- }
147
- ]
148
- }
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://kingsoftcloud.github.io/ksadk-python/schemas/memory_backend_manifest/v1",
4
+ "title": "MemoryBackendManifest",
5
+ "description": "Memory backend manifest for OpenClaw runtime configuration.",
6
+ "type": "object",
7
+ "required": [
8
+ "schema_version",
9
+ "backend_type"
10
+ ],
11
+ "additionalProperties": false,
12
+ "properties": {
13
+ "schema_version": {
14
+ "type": "string",
15
+ "const": "v1",
16
+ "description": "Schema version identifier. Must be 'v1'."
17
+ },
18
+ "backend_type": {
19
+ "type": "string",
20
+ "enum": [
21
+ "openclaw_default",
22
+ "mem0",
23
+ "lancedb"
24
+ ],
25
+ "description": "Memory backend type. Supports 'openclaw_default', 'mem0', and 'lancedb'."
26
+ },
27
+ "config": {
28
+ "type": "object",
29
+ "description": "Backend-specific configuration.",
30
+ "additionalProperties": true,
31
+ "properties": {
32
+ "mem0_instance_id": {
33
+ "type": "string",
34
+ "format": "uuid",
35
+ "description": "Mem0 instance UUID (required when backend_type is 'mem0')."
36
+ },
37
+ "mem0_instance_name": {
38
+ "type": "string",
39
+ "description": "Mem0 instance display name."
40
+ },
41
+ "mem0_region": {
42
+ "type": "string",
43
+ "description": "Mem0 instance region."
44
+ },
45
+ "dbPath": {
46
+ "type": "string",
47
+ "description": "Optional LanceDB plugin dbPath override."
48
+ },
49
+ "database_uri": {
50
+ "type": "string",
51
+ "description": "Database URI for LanceDB storage (e.g. s3://bucket/prefix). Mapped to dbPath when dbPath is absent."
52
+ },
53
+ "embedding": {
54
+ "type": "object",
55
+ "description": "Optional LanceDB plugin embedding configuration.",
56
+ "additionalProperties": true
57
+ },
58
+ "embedding_provider": {
59
+ "type": "string",
60
+ "description": "Embedding provider for LanceDB (e.g. openai)."
61
+ },
62
+ "embedding_model": {
63
+ "type": "string",
64
+ "description": "Embedding model name for LanceDB."
65
+ },
66
+ "embedding_dimensions": {
67
+ "type": "integer",
68
+ "description": "Embedding vector dimensions for LanceDB."
69
+ },
70
+ "embedding_base_url": {
71
+ "type": "string",
72
+ "description": "Embedding provider base URL for LanceDB."
73
+ },
74
+ "storageOptions": {
75
+ "type": "object",
76
+ "description": "Optional LanceDB plugin storage options.",
77
+ "additionalProperties": true
78
+ },
79
+ "storage_endpoint": {
80
+ "type": "string",
81
+ "description": "S3-compatible storage endpoint URL. Mapped into storageOptions.endpoint."
82
+ },
83
+ "storage_region": {
84
+ "type": "string",
85
+ "description": "S3-compatible storage region. Mapped into storageOptions.region."
86
+ },
87
+ "storage_bucket": {
88
+ "type": "string",
89
+ "description": "S3-compatible storage bucket. Mapped into storageOptions.bucket."
90
+ },
91
+ "storage_prefix": {
92
+ "type": "string",
93
+ "description": "S3-compatible storage key prefix. Mapped into storageOptions.prefix."
94
+ },
95
+ "storage_access_key_id": {
96
+ "type": "string",
97
+ "description": "S3-compatible storage access key id. Mapped into storageOptions.accessKeyId."
98
+ },
99
+ "storage_secret_access_key": {
100
+ "type": "string",
101
+ "description": "S3-compatible storage secret access key. Mapped into storageOptions.secretAccessKey."
102
+ },
103
+ "storage_allow_http": {
104
+ "type": ["boolean", "string"],
105
+ "description": "Allow plain HTTP for S3-compatible storage. Mapped into storageOptions.allowHttp as a string (\"true\"/\"false\")."
106
+ }
107
+ }
108
+ },
109
+ "secrets_env": {
110
+ "type": "object",
111
+ "description": "Environment variable names for secrets. Values are env var names, not actual secrets.",
112
+ "additionalProperties": {
113
+ "type": "string"
114
+ },
115
+ "properties": {
116
+ "api_key": {
117
+ "type": "string",
118
+ "description": "Environment variable name for API key (e.g., 'MEM0_API_KEY')."
119
+ },
120
+ "memory_id": {
121
+ "type": "string",
122
+ "description": "Environment variable name for memory ID (e.g., 'MEM0_MEMORY_ID')."
123
+ },
124
+ "embedding_api_key": {
125
+ "type": "string",
126
+ "description": "Reserved for future LanceDB embedding secrets."
127
+ }
128
+ }
129
+ }
130
+ },
131
+ "allOf": [
132
+ {
133
+ "if": {
134
+ "properties": {
135
+ "backend_type": { "const": "mem0" }
136
+ }
137
+ },
138
+ "then": {
139
+ "required": ["config"],
140
+ "properties": {
141
+ "config": {
142
+ "required": ["mem0_instance_id"]
143
+ }
144
+ }
145
+ }
146
+ }
147
+ ]
148
+ }
@@ -10,7 +10,7 @@ from datetime import datetime, timezone
10
10
  from pathlib import Path
11
11
  from typing import Annotated
12
12
 
13
- from fastapi import APIRouter, File, HTTPException, Query, Response, UploadFile
13
+ from fastapi import APIRouter, File, HTTPException, Query, Request, Response, UploadFile
14
14
  from fastapi.responses import FileResponse, JSONResponse, StreamingResponse
15
15
 
16
16
  from ksadk_runtime_common.workspace_files.bootstrap import (
@@ -70,6 +70,7 @@ def create_workspace_files_router(
70
70
  *,
71
71
  root_getter: Callable[[], Path],
72
72
  enabled_getter: Callable[[], bool] | None = None,
73
+ request_root_getter: Callable[[Request], Path] | None = None,
73
74
  ) -> APIRouter:
74
75
  """Create a workspace files router using the v1 contract."""
75
76
  router = APIRouter(prefix="/_ksadk/workspace/v1", tags=["workspace-files"])
@@ -79,10 +80,18 @@ def create_workspace_files_router(
79
80
  if not is_enabled():
80
81
  raise HTTPException(status_code=404, detail="workspace files are disabled")
81
82
 
83
+ def _request_root(request: Request) -> Path:
84
+ getter = (
85
+ (lambda: request_root_getter(request))
86
+ if request_root_getter is not None
87
+ else root_getter
88
+ )
89
+ return _resolve_workspace_root(getter)
90
+
82
91
  @router.get("/healthz")
83
- async def workspace_healthz() -> HealthzResponse:
92
+ async def workspace_healthz(request: Request) -> HealthzResponse:
84
93
  _ensure_enabled()
85
- root = _resolve_workspace_root(root_getter)
94
+ root = _request_root(request)
86
95
  return {
87
96
  "ok": True,
88
97
  "root": workspace_files_root_label(),
@@ -91,11 +100,12 @@ def create_workspace_files_router(
91
100
 
92
101
  @router.get("/entries")
93
102
  async def list_workspace_entries(
103
+ request: Request,
94
104
  path: str = Query(".", alias="path"),
95
105
  recursive: bool = Query(False, alias="recursive"),
96
106
  ) -> EntriesResponse:
97
107
  _ensure_enabled()
98
- root = _resolve_workspace_root(root_getter)
108
+ root = _request_root(request)
99
109
  normalized, target = _resolve_workspace_target(root, path, allow_root=True)
100
110
  target = _trusted_workspace_path(root, target)
101
111
  if not target.exists():
@@ -115,9 +125,11 @@ def create_workspace_files_router(
115
125
  }
116
126
 
117
127
  @router.get("/export-zip")
118
- async def export_workspace_zip(path: str = Query(".", alias="path")) -> StreamingResponse:
128
+ async def export_workspace_zip(
129
+ request: Request, path: str = Query(".", alias="path")
130
+ ) -> StreamingResponse:
119
131
  _ensure_enabled()
120
- root = _resolve_workspace_root(root_getter)
132
+ root = _request_root(request)
121
133
  normalized, target = _resolve_workspace_target(root, path, allow_root=True)
122
134
  target = _trusted_workspace_path(root, target)
123
135
  if not target.exists():
@@ -151,9 +163,9 @@ def create_workspace_files_router(
151
163
  )
152
164
 
153
165
  @router.head("/files/{file_path:path}")
154
- async def head_workspace_file(file_path: str) -> Response:
166
+ async def head_workspace_file(request: Request, file_path: str) -> Response:
155
167
  _ensure_enabled()
156
- root = _resolve_workspace_root(root_getter)
168
+ root = _request_root(request)
157
169
  _, target = _resolve_workspace_target(root, file_path, allow_root=False)
158
170
  target = _trusted_workspace_path(root, target)
159
171
  if not target.exists() or not target.is_file():
@@ -169,9 +181,9 @@ def create_workspace_files_router(
169
181
  )
170
182
 
171
183
  @router.get("/files/{file_path:path}")
172
- async def download_workspace_file(file_path: str) -> Response:
184
+ async def download_workspace_file(request: Request, file_path: str) -> Response:
173
185
  _ensure_enabled()
174
- root = _resolve_workspace_root(root_getter)
186
+ root = _request_root(request)
175
187
  _, target = _resolve_workspace_target(root, file_path, allow_root=False)
176
188
  target = _trusted_workspace_path(root, target)
177
189
  if not target.exists() or not target.is_file():
@@ -201,11 +213,12 @@ def create_workspace_files_router(
201
213
 
202
214
  @router.post("/files/{file_path:path}")
203
215
  async def upload_workspace_file(
216
+ request: Request,
204
217
  file_path: str,
205
218
  file: Annotated[UploadFile, File(...)],
206
219
  ) -> UploadResponse:
207
220
  _ensure_enabled()
208
- root = _resolve_workspace_root(root_getter)
221
+ root = _request_root(request)
209
222
  _, target = _resolve_workspace_target(root, file_path, allow_root=False)
210
223
  target = _trusted_workspace_path(root, target)
211
224
  target.parent.mkdir(parents=True, exist_ok=True)
@@ -236,9 +249,9 @@ def create_workspace_files_router(
236
249
  return {"Entry": entry}
237
250
 
238
251
  @router.delete("/files/{file_path:path}")
239
- async def delete_workspace_file(file_path: str) -> JSONResponse:
252
+ async def delete_workspace_file(request: Request, file_path: str) -> JSONResponse:
240
253
  _ensure_enabled()
241
- root = _resolve_workspace_root(root_getter)
254
+ root = _request_root(request)
242
255
  _, target = _resolve_workspace_target(root, file_path, allow_root=False)
243
256
  target = _trusted_workspace_path(root, target)
244
257
  if not target.exists():
@@ -1,8 +0,0 @@
1
- import{$ as e,G as t,J as n,K as r,Q as i,St as a,Tt as o,X as s,Y as c,Z as l,et as u,q as d,xt as f}from"./index-Dh2XHqPK.js";import{t as p}from"./katex-B4weu383.js";import{CodeBlock as m,n as h,t as g}from"./CodeBlock-b4C7upmO.js";import{MermaidBlock as _}from"./MermaidBlock-BEBN4Ksz.js";function v(){return{enter:{mathFlow:e,mathFlowFenceMeta:t,mathText:a},exit:{mathFlow:i,mathFlowFence:r,mathFlowFenceMeta:n,mathFlowValue:s,mathText:o,mathTextData:s}};function e(e){this.enter({type:`math`,meta:null,value:``,data:{hName:`pre`,hChildren:[{type:`element`,tagName:`code`,properties:{className:[`language-math`,`math-display`]},children:[]}]}},e)}function t(){this.buffer()}function n(){let e=this.resume(),t=this.stack[this.stack.length-1];t.type,t.meta=e}function r(){this.data.mathFlowInside||(this.buffer(),this.data.mathFlowInside=!0)}function i(e){let t=this.resume().replace(/^(\r?\n|\r)|(\r?\n|\r)$/g,``),n=this.stack[this.stack.length-1];n.type,this.exit(e),n.value=t;let r=n.data.hChildren[0];r.type,r.tagName,r.children.push({type:`text`,value:t}),this.data.mathFlowInside=void 0}function a(e){this.enter({type:`inlineMath`,value:``,data:{hName:`code`,hProperties:{className:[`language-math`,`math-inline`]},hChildren:[]}},e),this.buffer()}function o(e){let t=this.resume(),n=this.stack[this.stack.length-1];n.type,this.exit(e),n.value=t,n.data.hChildren.push({type:`text`,value:t})}function s(e){this.config.enter.data.call(this,e),this.config.exit.data.call(this,e)}}function y(e){let t=(e||{}).singleDollarTextMath;return t??=!0,i.peek=a,{unsafe:[{character:`\r`,inConstruct:`mathFlowMeta`},{character:`
2
- `,inConstruct:`mathFlowMeta`},{character:`$`,after:t?void 0:`\\$`,inConstruct:`phrasing`},{character:`$`,inConstruct:`mathFlowMeta`},{atBreak:!0,character:`$`,after:`\\$`}],handlers:{math:r,inlineMath:i}};function r(e,t,r,i){let a=e.value||``,o=r.createTracker(i),s=`$`.repeat(Math.max(n(a,`$`)+1,2)),c=r.enter(`mathFlow`),l=o.move(s);if(e.meta){let t=r.enter(`mathFlowMeta`);l+=o.move(r.safe(e.meta,{after:`
3
- `,before:l,encode:[`$`],...o.current()})),t()}return l+=o.move(`
4
- `),a&&(l+=o.move(a+`
5
- `)),l+=o.move(s),c(),l}function i(e,n,r){let i=e.value||``,a=1;for(t||a++;RegExp(`(^|[^$])`+`\\$`.repeat(a)+`([^$]|$)`).test(i);)a++;let o=`$`.repeat(a);/[^ \r\n]/.test(i)&&(/^[ \r\n]/.test(i)&&/[ \r\n]$/.test(i)||/^\$|\$$/.test(i))&&(i=` `+i+` `);let s=-1;for(;++s<r.unsafe.length;){let e=r.unsafe[s];if(!e.atBreak)continue;let t=r.compilePattern(e),n;for(;n=t.exec(i);){let e=n.index;i.codePointAt(e)===10&&i.codePointAt(e-1)===13&&e--,i=i.slice(0,e)+` `+i.slice(n.index+1)}}return o+i+o}function a(){return`$`}}var b={tokenize:ee,concrete:!0,name:`mathFlow`},x={tokenize:te,partial:!0};function ee(t,n,r){let i=this,a=i.events[i.events.length-1],o=a&&a[1].type===`linePrefix`?a[2].sliceSerialize(a[1],!0).length:0,s=0;return c;function c(e){return t.enter(`mathFlow`),t.enter(`mathFlowFence`),t.enter(`mathFlowFenceSequence`),l(e)}function l(n){return n===36?(t.consume(n),s++,l):s<2?r(n):(t.exit(`mathFlowFenceSequence`),e(t,d,`whitespace`)(n))}function d(e){return e===null||u(e)?p(e):(t.enter(`mathFlowFenceMeta`),t.enter(`chunkString`,{contentType:`string`}),f(e))}function f(e){return e===null||u(e)?(t.exit(`chunkString`),t.exit(`mathFlowFenceMeta`),p(e)):e===36?r(e):(t.consume(e),f)}function p(e){return t.exit(`mathFlowFence`),i.interrupt?n(e):t.attempt(x,m,v)(e)}function m(e){return t.attempt({tokenize:y,partial:!0},v,h)(e)}function h(n){return(o?e(t,g,`linePrefix`,o+1):g)(n)}function g(e){return e===null?v(e):u(e)?t.attempt(x,m,v)(e):(t.enter(`mathFlowValue`),_(e))}function _(e){return e===null||u(e)?(t.exit(`mathFlowValue`),g(e)):(t.consume(e),_)}function v(e){return t.exit(`mathFlow`),n(e)}function y(t,n,r){let a=0;return e(t,o,`linePrefix`,i.parser.constructs.disable.null.includes(`codeIndented`)?void 0:4);function o(e){return t.enter(`mathFlowFence`),t.enter(`mathFlowFenceSequence`),c(e)}function c(n){return n===36?(a++,t.consume(n),c):a<s?r(n):(t.exit(`mathFlowFenceSequence`),e(t,l,`whitespace`)(n))}function l(e){return e===null||u(e)?(t.exit(`mathFlowFence`),n(e)):r(e)}}}function te(e,t,n){let r=this;return i;function i(n){return n===null?t(n):(e.enter(`lineEnding`),e.consume(n),e.exit(`lineEnding`),a)}function a(e){return r.parser.lazy[r.now().line]?n(e):t(e)}}function ne(e){let t=(e||{}).singleDollarTextMath;return t??=!0,{tokenize:n,resolve:S,previous:C,name:`mathText`};function n(e,n,r){let i=0,a,o;return s;function s(t){return e.enter(`mathText`),e.enter(`mathTextSequence`),c(t)}function c(n){return n===36?(e.consume(n),i++,c):i<2&&!t?r(n):(e.exit(`mathTextSequence`),l(n))}function l(t){return t===null?r(t):t===36?(o=e.enter(`mathTextSequence`),a=0,f(t)):t===32?(e.enter(`space`),e.consume(t),e.exit(`space`),l):u(t)?(e.enter(`lineEnding`),e.consume(t),e.exit(`lineEnding`),l):(e.enter(`mathTextData`),d(t))}function d(t){return t===null||t===32||t===36||u(t)?(e.exit(`mathTextData`),l(t)):(e.consume(t),d)}function f(t){return t===36?(e.consume(t),a++,f):a===i?(e.exit(`mathTextSequence`),e.exit(`mathText`),n(t)):(o.type=`mathTextData`,d(t))}}}function S(e){let t=e.length-4,n=3,r,i;if((e[n][1].type===`lineEnding`||e[n][1].type===`space`)&&(e[t][1].type===`lineEnding`||e[t][1].type===`space`)){for(r=n;++r<t;)if(e[r][1].type===`mathTextData`){e[t][1].type=`mathTextPadding`,e[n][1].type=`mathTextPadding`,n+=2,t-=2;break}}for(r=n-1,t++;++r<=t;)i===void 0?r!==t&&e[r][1].type!==`lineEnding`&&(i=r):(r===t||e[r][1].type===`lineEnding`)&&(e[i][1].type=`mathTextData`,r!==i+2&&(e[i][1].end=e[r-1][1].end,e.splice(i+2,r-i-2),t-=r-i-2,r=i+2),i=void 0);return e}function C(e){return e!==36||this.events[this.events.length-1][1].type===`characterEscape`}function w(e){return{flow:{36:b},text:{36:ne(e)}}}var T={};function E(e){let t=this,n=e||T,r=t.data(),i=r.micromarkExtensions||=[],a=r.fromMarkdownExtensions||=[],o=r.toMarkdownExtensions||=[];i.push(w(n)),a.push(v()),o.push(y(n))}var D={html:`http://www.w3.org/1999/xhtml`,mathml:`http://www.w3.org/1998/Math/MathML`,svg:`http://www.w3.org/2000/svg`,xlink:`http://www.w3.org/1999/xlink`,xml:`http://www.w3.org/XML/1998/namespace`,xmlns:`http://www.w3.org/2000/xmlns/`};function O(e,t){return k(e,t||{})||{type:`root`,children:[]}}function k(e,t){let n=re(e,t);return n&&t.afterTransform&&t.afterTransform(e,n),n}function re(e,t){switch(e.nodeType){case 1:return se(e,t);case 3:return ae(e);case 8:return oe(e);case 9:return A(e,t);case 10:return ie();case 11:return A(e,t);default:return}}function A(e,t){return{type:`root`,children:j(e,t)}}function ie(){return{type:`doctype`}}function ae(e){return{type:`text`,value:e.nodeValue||``}}function oe(e){return{type:`comment`,value:e.nodeValue||``}}function se(e,t){let n=e.namespaceURI,r=n===D.svg?h:g,i=n===D.html?e.tagName.toLowerCase():e.tagName,a=n===D.html&&i===`template`?e.content:e,o=e.getAttributeNames(),s={},c=-1;for(;++c<o.length;)s[o[c]]=e.getAttribute(o[c])||``;return r(i,s,j(a,t))}function j(e,t){let n=e.childNodes,r=[],i=-1;for(;++i<n.length;){let e=k(n[i],t);e!==void 0&&r.push(e)}return r}var M=new DOMParser;function N(e,t){return O(t?.fragment?P(e):M.parseFromString(e,`text/html`))}function P(e){let t=document.createElement(`template`);return t.innerHTML=e,t.content}var F=(function(e,t,n){let r=i(n);if(!e||!e.type||!e.children)throw Error(`Expected parent node`);if(typeof t==`number`){if(t<0||t===1/0)throw Error(`Expected positive finite number as index`)}else if(t=e.children.indexOf(t),t<0)throw Error(`Expected child node or index`);for(;++t<e.children.length;)if(r(e.children[t],t,e))return e.children[t]}),I=(function(e){if(e==null)return B;if(typeof e==`string`)return R(e);if(typeof e==`object`)return L(e);if(typeof e==`function`)return z(e);throw Error("Expected function, string, or array as `test`")});function L(e){let t=[],n=-1;for(;++n<e.length;)t[n]=I(e[n]);return z(r);function r(...e){let n=-1;for(;++n<t.length;)if(t[n].apply(this,e))return!0;return!1}}function R(e){return z(t);function t(t){return t.tagName===e}}function z(e){return t;function t(t,n,r){return!!(V(t)&&e.call(this,t,typeof n==`number`?n:void 0,r||void 0))}}function B(e){return!!(e&&typeof e==`object`&&`type`in e&&e.type===`element`&&`tagName`in e&&typeof e.tagName==`string`)}function V(e){return typeof e==`object`&&!!e&&`type`in e&&`tagName`in e}var H=/\n/g,U=/[\t ]+/g,W=I(`br`),G=I(me),K=I(`p`),q=I(`tr`),ce=I([`datalist`,`head`,`noembed`,`noframes`,`noscript`,`rp`,`script`,`style`,`template`,`title`,pe,Q]),J=I(`address.article.aside.blockquote.body.caption.center.dd.dialog.dir.dl.dt.div.figure.figcaption.footer.form,.h1.h2.h3.h4.h5.h6.header.hgroup.hr.html.legend.li.listing.main.menu.nav.ol.p.plaintext.pre.section.ul.xmp`.split(`.`));function le(e,t){let n=t||{},r=`children`in e?e.children:[],i=J(e),a=Z(e,{whitespace:n.whitespace||`normal`,breakBefore:!1,breakAfter:!1}),o=[];(e.type===`text`||e.type===`comment`)&&o.push(...X(e,{whitespace:a,breakBefore:!0,breakAfter:!0}));let s=-1;for(;++s<r.length;)o.push(...Y(r[s],e,{whitespace:a,breakBefore:s?void 0:i,breakAfter:s<r.length-1?W(r[s+1]):i}));let c=[],l;for(s=-1;++s<o.length;){let e=o[s];typeof e==`number`?l!==void 0&&e>l&&(l=e):e&&(l!==void 0&&l>-1&&c.push(`
6
- `.repeat(l)||` `),l=-1,c.push(e))}return c.join(``)}function Y(e,t,n){return e.type===`element`?ue(e,t,n):e.type===`text`?n.whitespace===`normal`?X(e,n):de(e):[]}function ue(e,t,n){let r=Z(e,n),i=e.children||[],a=-1,o=[];if(ce(e))return o;let s,c;for(W(e)||q(e)&&F(t,e,q)?c=`
7
- `:K(e)?(s=2,c=2):J(e)&&(s=1,c=1);++a<i.length;)o=o.concat(Y(i[a],e,{whitespace:r,breakBefore:a?void 0:s,breakAfter:a<i.length-1?W(i[a+1]):c}));return G(e)&&F(t,e,G)&&o.push(` `),s&&o.unshift(s),c&&o.push(c),o}function X(e,t){let n=String(e.value),r=[],i=[],a=0;for(;a<=n.length;){H.lastIndex=a;let e=H.exec(n),i=e&&`index`in e?e.index:n.length;r.push(fe(n.slice(a,i).replace(/[\u061C\u200E\u200F\u202A-\u202E\u2066-\u2069]/g,``),a===0?t.breakBefore:!0,i===n.length?t.breakAfter:!0)),a=i+1}let o=-1,s;for(;++o<r.length;)r[o].charCodeAt(r[o].length-1)===8203||o<r.length-1&&r[o+1].charCodeAt(0)===8203?(i.push(r[o]),s=void 0):r[o]?(typeof s==`number`&&i.push(s),i.push(r[o]),s=0):(o===0||o===r.length-1)&&i.push(0);return i}function de(e){return[String(e.value)]}function fe(e,t,n){let r=[],i=0,a;for(;i<e.length;){U.lastIndex=i;let n=U.exec(e);a=n?n.index:e.length,!i&&!a&&n&&!t&&r.push(``),i!==a&&r.push(e.slice(i,a)),i=n?a+n[0].length:a}return i!==a&&!n&&r.push(``),r.join(` `)}function Z(e,t){if(e.type===`element`){let n=e.properties||{};switch(e.tagName){case`listing`:case`plaintext`:case`xmp`:return`pre`;case`nobr`:return`nowrap`;case`pre`:return n.wrap?`pre-wrap`:`pre`;case`td`:case`th`:return n.noWrap?`nowrap`:t.whitespace;case`textarea`:return`pre-wrap`;default:}}return t.whitespace}function pe(e){return!!(e.properties||{}).hidden}function me(e){return e.tagName===`td`||e.tagName===`th`}function Q(e){return e.tagName===`dialog`&&!(e.properties||{}).open}var he={},ge=[];function _e(e){let t=e||he;return function(e,n){l(e,`element`,function(e,r){let i=Array.isArray(e.properties.className)?e.properties.className:ge,a=i.includes(`language-math`),o=i.includes(`math-display`),c=i.includes(`math-inline`),l=o;if(!a&&!o&&!c)return;let u=r[r.length-1],d=e;if(e.tagName===`code`&&a&&u&&u.type===`element`&&u.tagName===`pre`&&(d=u,u=r[r.length-2],l=!0),!u)return;let f=le(d,{whitespace:`pre`}),m;try{m=p.renderToString(f,{...t,displayMode:l,throwOnError:!0})}catch(i){let a=i,o=a.name.toLowerCase();n.message(`Could not render math with KaTeX`,{ancestors:[...r,e],cause:a,place:e.position,ruleId:o,source:`rehype-katex`});try{m=p.renderToString(f,{...t,displayMode:l,strict:`ignore`,throwOnError:!1})}catch{m=[{type:`element`,tagName:`span`,properties:{className:[`katex-error`],style:`color:`+(t.errorColor||`#cc0000`),title:String(i)},children:[{type:`text`,value:f}]}]}}typeof m==`string`&&(m=N(m,{fragment:!0}).children);let h=u.children.indexOf(d);return u.children.splice(h,1,...m),s})}}var ve=o(a(),1),$=f(),ye={code({className:e,children:t,...n}){let r=/language-(\w+)/.exec(e||``),i=String(t??``);if(!r&&!i.includes(`
8
- `))return(0,$.jsx)(`code`,{className:`break-all font-mono text-[0.92em] text-slate-800 dark:text-slate-200 before:content-none after:content-none`,...n,children:t});let a=r?r[1]:``;return a===`mermaid`?(0,$.jsx)(_,{chart:i}):(0,$.jsx)(m,{language:a,value:i})},table({children:e,...t}){return(0,$.jsx)(`div`,{className:`my-4 overflow-x-auto rounded-lg border border-slate-200 dark:border-slate-700`,children:(0,$.jsx)(`table`,{className:`my-0 w-full min-w-[36rem] table-auto text-left text-sm`,...t,children:e})})},th({children:e,...t}){return(0,$.jsx)(`th`,{className:`break-words border-b border-slate-200 bg-slate-50 px-3 py-2 text-left align-top font-semibold dark:border-slate-700 dark:bg-slate-800/50`,...t,children:e})},td({children:e,...t}){return(0,$.jsx)(`td`,{className:`break-words border-b border-slate-100 px-3 py-2 align-top dark:border-slate-800 last:border-0`,...t,children:e})},a({children:e,href:t,...n}){return(0,$.jsx)(`a`,{href:t,className:`text-blue-600 dark:text-blue-400 hover:underline`,target:`_blank`,rel:`noopener noreferrer`,...n,children:e})}},be=ve.memo(({content:e})=>{let n=t(e);return(0,$.jsx)(`div`,{className:`prose prose-slate dark:prose-invert max-w-none break-words text-[15px] leading-7 prose-headings:mb-3 prose-headings:mt-6 prose-headings:font-semibold prose-headings:text-slate-900 dark:prose-headings:text-slate-50 prose-h1:text-[1.95rem] prose-h1:leading-tight prose-h1:tracking-[-0.02em] prose-h2:text-[1.55rem] prose-h2:leading-tight prose-h2:tracking-[-0.015em] prose-h3:text-[1.2rem] prose-h3:leading-snug prose-p:my-3 prose-p:leading-7 prose-strong:text-slate-900 dark:prose-strong:text-slate-100 prose-ol:my-3 prose-ul:my-3 prose-li:my-1.5 prose-li:leading-7 prose-hr:my-5 prose-hr:border-slate-200 dark:prose-hr:border-slate-700 prose-pre:m-0 prose-pre:bg-transparent prose-pre:p-0 [&>*:first-child]:mt-0 [&>*:last-child]:mb-0`,children:(0,$.jsx)(c,{remarkPlugins:[d,E,r],rehypePlugins:[_e],components:ye,children:n})})});export{be as MathMessageMarkdown};
@@ -1 +0,0 @@
1
- import{M as e}from"./mermaid-parser.core-CBijEX_c.js";export{e as createArchitectureServices};
@@ -1 +0,0 @@
1
- import{Mr as e,jr as t}from"./MermaidBlock-BEBN4Ksz.js";var n=(n,r)=>e.lang.round(t.parse(n)[r]);export{n as t};
@@ -1 +0,0 @@
1
- import{Ir as e}from"./MermaidBlock-BEBN4Ksz.js";var t=class{constructor(e){this.init=e,this.records=this.init()}static{e(this,`ImperativeState`)}reset(){this.records=this.init()}};export{t};
@@ -1 +0,0 @@
1
- import"./chunk-F27PBJKO-BdXhtPe9.js";import"./chunk-XXDRQBXY-DVaeafZk.js";import"./chunk-POPQ4Y6H-CzxScFkr.js";import{i as e,n as t,r as n,t as r}from"./chunk-LCL6LL3I-DeU00qC-.js";import{Ir as i}from"./MermaidBlock-BEBN4Ksz.js";var a={parser:t,get db(){return new r},renderer:n,styles:e,init:i(e=>{e.class||={},e.class.arrowMarkerAbsolute=e.arrowMarkerAbsolute},`init`)};export{a as diagram};
@@ -1 +0,0 @@
1
- import"./chunk-F27PBJKO-BdXhtPe9.js";import"./chunk-XXDRQBXY-DVaeafZk.js";import"./chunk-POPQ4Y6H-CzxScFkr.js";import{i as e,n as t,r as n,t as r}from"./chunk-LCL6LL3I-DeU00qC-.js";import{Ir as i}from"./MermaidBlock-BEBN4Ksz.js";var a={parser:t,get db(){return new r},renderer:n,styles:e,init:i(e=>{e.class||={},e.class.arrowMarkerAbsolute=e.arrowMarkerAbsolute},`init`)};export{a as diagram};
@@ -1 +0,0 @@
1
- import{A as e}from"./mermaid-parser.core-CBijEX_c.js";export{e as createCynefinServices};