agentengine-sdk-python 0.6.4__py3-none-any.whl → 0.7.0__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 (486) hide show
  1. agentengine_sdk_python-0.7.0.dist-info/METADATA +181 -0
  2. agentengine_sdk_python-0.7.0.dist-info/RECORD +482 -0
  3. {agentengine_sdk_python-0.6.4.dist-info → agentengine_sdk_python-0.7.0.dist-info}/WHEEL +1 -1
  4. agentengine_sdk_python-0.7.0.dist-info/entry_points.txt +3 -0
  5. agentengine_sdk_python-0.7.0.dist-info/licenses/LICENSE +175 -0
  6. agentengine_sdk_python-0.7.0.dist-info/top_level.txt +2 -0
  7. ksadk/__init__.py +13 -0
  8. ksadk/__main__.py +4 -0
  9. ksadk/a2a/__init__.py +15 -0
  10. ksadk/a2a/card_builder.py +64 -0
  11. ksadk/a2a/client.py +309 -0
  12. ksadk/a2a/executor.py +201 -0
  13. ksadk/a2a/server.py +79 -0
  14. ksadk/agents/__init__.py +20 -0
  15. ksadk/agents/base.py +370 -0
  16. ksadk/agents/context.py +38 -0
  17. ksadk/agents/event.py +35 -0
  18. ksadk/agents/loop_agent.py +71 -0
  19. ksadk/agents/parallel_agent.py +109 -0
  20. ksadk/agents/runner_adapter.py +24 -0
  21. ksadk/agents/sequential_agent.py +34 -0
  22. ksadk/api/__init__.py +3 -0
  23. ksadk/api/client.py +2246 -0
  24. ksadk/builders/__init__.py +20 -0
  25. ksadk/builders/base.py +66 -0
  26. ksadk/builders/code_builder.py +1990 -0
  27. ksadk/builders/container_builder.py +786 -0
  28. ksadk/builders/framework_requirements.py +59 -0
  29. ksadk/builders/ks3_uploader.py +389 -0
  30. ksadk/builders/mcp_builder.py +476 -0
  31. ksadk/builders/requirements_utils.py +75 -0
  32. ksadk/cli/__init__.py +531 -0
  33. ksadk/cli/__main__.py +4 -0
  34. ksadk/cli/agent_ref.py +204 -0
  35. ksadk/cli/cmd_a2a.py +167 -0
  36. ksadk/cli/cmd_agent.py +201 -0
  37. ksadk/cli/cmd_build.py +270 -0
  38. ksadk/cli/cmd_completion.py +304 -0
  39. ksadk/cli/cmd_config.py +758 -0
  40. ksadk/cli/cmd_create.py +2304 -0
  41. ksadk/cli/cmd_dashboard.py +900 -0
  42. ksadk/cli/cmd_deploy.py +704 -0
  43. ksadk/cli/cmd_destroy.py +345 -0
  44. ksadk/cli/cmd_files.py +1227 -0
  45. ksadk/cli/cmd_hermes.py +1263 -0
  46. ksadk/cli/cmd_invoke.py +1503 -0
  47. ksadk/cli/cmd_launch.py +564 -0
  48. ksadk/cli/cmd_mcp.py +1179 -0
  49. ksadk/cli/cmd_model.py +302 -0
  50. ksadk/cli/cmd_openclaw.py +3922 -0
  51. ksadk/cli/cmd_run.py +239 -0
  52. ksadk/cli/cmd_status.py +588 -0
  53. ksadk/cli/cmd_version.py +522 -0
  54. ksadk/cli/cmd_web.py +288 -0
  55. ksadk/cli/deploy_utils.py +87 -0
  56. ksadk/cli/dry_run.py +214 -0
  57. ksadk/cli/env_options.py +82 -0
  58. ksadk/cli/error_utils.py +525 -0
  59. ksadk/cli/global_options.py +31 -0
  60. ksadk/cli/local_runtime.py +97 -0
  61. ksadk/cli/model_catalog.py +136 -0
  62. ksadk/cli/network_options.py +412 -0
  63. ksadk/cli/resource_common.py +621 -0
  64. ksadk/cli/storage.py +84 -0
  65. ksadk/cli/ui.py +431 -0
  66. ksadk/cli/workflow_common.py +552 -0
  67. ksadk/common/__init__.py +14 -0
  68. ksadk/common/aicp_env.py +128 -0
  69. ksadk/common/auth.py +190 -0
  70. ksadk/common/constants.py +84 -0
  71. ksadk/common/llm_utils.py +61 -0
  72. ksadk/configs/__init__.py +61 -0
  73. ksadk/configs/env_registry.py +343 -0
  74. ksadk/configs/global_config.py +200 -0
  75. ksadk/configs/settings.py +706 -0
  76. ksadk/conversations/__init__.py +95 -0
  77. ksadk/conversations/attachment_storage.py +379 -0
  78. ksadk/conversations/attachments.py +774 -0
  79. ksadk/conversations/compaction_pipeline.py +387 -0
  80. ksadk/conversations/compaction_prompt.py +128 -0
  81. ksadk/conversations/context.py +303 -0
  82. ksadk/conversations/message_projection.py +269 -0
  83. ksadk/conversations/model_context.py +370 -0
  84. ksadk/conversations/model_options.py +136 -0
  85. ksadk/conversations/normalize.py +446 -0
  86. ksadk/conversations/reasoning_markup.py +91 -0
  87. ksadk/conversations/run_kinds.py +61 -0
  88. ksadk/conversations/run_status.py +53 -0
  89. ksadk/conversations/runtime.py +5276 -0
  90. ksadk/conversations/semantic_summary.py +359 -0
  91. ksadk/conversations/session_title.py +254 -0
  92. ksadk/deployment/__init__.py +83 -0
  93. ksadk/deployment/agent_access.py +226 -0
  94. ksadk/deployment/base.py +229 -0
  95. ksadk/deployment/manager.py +332 -0
  96. ksadk/deployment/providers/__init__.py +10 -0
  97. ksadk/deployment/providers/serverless.py +1115 -0
  98. ksadk/deployment/registry.py +120 -0
  99. ksadk/deployment/state.py +78 -0
  100. ksadk/deployment/ui_config.py +21 -0
  101. ksadk/detection/__init__.py +7 -0
  102. ksadk/detection/detector.py +431 -0
  103. ksadk/detection/mcp_detector.py +250 -0
  104. ksadk/hermes_terminal.py +467 -0
  105. ksadk/identity/__init__.py +17 -0
  106. ksadk/identity/resolver.py +385 -0
  107. ksadk/knowledge_base/__init__.py +62 -0
  108. ksadk/knowledge_base/adk_tool.py +47 -0
  109. ksadk/knowledge_base/client.py +297 -0
  110. ksadk/knowledge_base/langchain_tool.py +55 -0
  111. ksadk/knowledge_base/service.py +66 -0
  112. ksadk/knowledge_base/tool.py +50 -0
  113. ksadk/markdown.py +169 -0
  114. ksadk/mcp_runtime/__init__.py +231 -0
  115. ksadk/memory/__init__.py +57 -0
  116. ksadk/memory/adk/__init__.py +51 -0
  117. ksadk/memory/adk/backends/__init__.py +5 -0
  118. ksadk/memory/adk/backends/base_ltm_backend.py +52 -0
  119. ksadk/memory/adk/backends/http_ltm_backend.py +183 -0
  120. ksadk/memory/adk/backends/inmemory_ltm_backend.py +96 -0
  121. ksadk/memory/adk/backends/sdk_ltm_backend.py +456 -0
  122. ksadk/memory/adk/long_term_memory.py +273 -0
  123. ksadk/memory/adk/resilient_session_service.py +268 -0
  124. ksadk/memory/adk/short_term_memory.py +304 -0
  125. ksadk/memory/adk_tool.py +31 -0
  126. ksadk/memory/backends/__init__.py +6 -0
  127. ksadk/memory/backends/base.py +103 -0
  128. ksadk/memory/backends/memory.py +112 -0
  129. ksadk/memory/backends/redis.py +146 -0
  130. ksadk/memory/langchain_tool.py +39 -0
  131. ksadk/memory/ltm_backend_factory.py +24 -0
  132. ksadk/memory/manager.py +215 -0
  133. ksadk/memory/service.py +172 -0
  134. ksadk/memory/tool.py +96 -0
  135. ksadk/model_policy.py +223 -0
  136. ksadk/openclaw_gateway.py +378 -0
  137. ksadk/runners/__init__.py +8 -0
  138. ksadk/runners/adk_runner.py +1994 -0
  139. ksadk/runners/base_runner.py +305 -0
  140. ksadk/runners/deepagents_runner.py +13 -0
  141. ksadk/runners/factory.py +73 -0
  142. ksadk/runners/langchain_runner.py +751 -0
  143. ksadk/runners/langgraph_runner.py +985 -0
  144. ksadk/runners/patch_langchain.py +187 -0
  145. ksadk/runners/remote_runner.py +792 -0
  146. ksadk/runners/usage_accumulator.py +38 -0
  147. ksadk/runners/utils/__init__.py +19 -0
  148. ksadk/runners/utils/langfuse.py +230 -0
  149. ksadk/runners/utils/loader.py +62 -0
  150. ksadk/runtime_context.py +166 -0
  151. ksadk/runtime_state.py +25 -0
  152. ksadk/sandbox/__init__.py +28 -0
  153. ksadk/sandbox/backends/__init__.py +9 -0
  154. ksadk/sandbox/backends/e2b.py +154 -0
  155. ksadk/sandbox/backends/local_process.py +131 -0
  156. ksadk/sandbox/base.py +101 -0
  157. ksadk/sandbox/factory.py +53 -0
  158. ksadk/sandbox/registry.py +187 -0
  159. ksadk/server/__init__.py +7 -0
  160. ksadk/server/api_models.py +73 -0
  161. ksadk/server/app.py +3931 -0
  162. ksadk/server/static/assets/ArtifactsPanel-D-SSn2ee.js +1 -0
  163. ksadk/server/static/assets/CodeBlock-P16VOLYi.js +9 -0
  164. ksadk/server/static/assets/KaTeX_AMS-Regular-BQhdFMY1.woff2 +0 -0
  165. ksadk/server/static/assets/KaTeX_AMS-Regular-DMm9YOAa.woff +0 -0
  166. ksadk/server/static/assets/KaTeX_AMS-Regular-DRggAlZN.ttf +0 -0
  167. ksadk/server/static/assets/KaTeX_Caligraphic-Bold-ATXxdsX0.ttf +0 -0
  168. ksadk/server/static/assets/KaTeX_Caligraphic-Bold-BEiXGLvX.woff +0 -0
  169. ksadk/server/static/assets/KaTeX_Caligraphic-Bold-Dq_IR9rO.woff2 +0 -0
  170. ksadk/server/static/assets/KaTeX_Caligraphic-Regular-CTRA-rTL.woff +0 -0
  171. ksadk/server/static/assets/KaTeX_Caligraphic-Regular-Di6jR-x-.woff2 +0 -0
  172. ksadk/server/static/assets/KaTeX_Caligraphic-Regular-wX97UBjC.ttf +0 -0
  173. ksadk/server/static/assets/KaTeX_Fraktur-Bold-BdnERNNW.ttf +0 -0
  174. ksadk/server/static/assets/KaTeX_Fraktur-Bold-BsDP51OF.woff +0 -0
  175. ksadk/server/static/assets/KaTeX_Fraktur-Bold-CL6g_b3V.woff2 +0 -0
  176. ksadk/server/static/assets/KaTeX_Fraktur-Regular-CB_wures.ttf +0 -0
  177. ksadk/server/static/assets/KaTeX_Fraktur-Regular-CTYiF6lA.woff2 +0 -0
  178. ksadk/server/static/assets/KaTeX_Fraktur-Regular-Dxdc4cR9.woff +0 -0
  179. ksadk/server/static/assets/KaTeX_Main-Bold-Cx986IdX.woff2 +0 -0
  180. ksadk/server/static/assets/KaTeX_Main-Bold-Jm3AIy58.woff +0 -0
  181. ksadk/server/static/assets/KaTeX_Main-Bold-waoOVXN0.ttf +0 -0
  182. ksadk/server/static/assets/KaTeX_Main-BoldItalic-DxDJ3AOS.woff2 +0 -0
  183. ksadk/server/static/assets/KaTeX_Main-BoldItalic-DzxPMmG6.ttf +0 -0
  184. ksadk/server/static/assets/KaTeX_Main-BoldItalic-SpSLRI95.woff +0 -0
  185. ksadk/server/static/assets/KaTeX_Main-Italic-3WenGoN9.ttf +0 -0
  186. ksadk/server/static/assets/KaTeX_Main-Italic-BMLOBm91.woff +0 -0
  187. ksadk/server/static/assets/KaTeX_Main-Italic-NWA7e6Wa.woff2 +0 -0
  188. ksadk/server/static/assets/KaTeX_Main-Regular-B22Nviop.woff2 +0 -0
  189. ksadk/server/static/assets/KaTeX_Main-Regular-Dr94JaBh.woff +0 -0
  190. ksadk/server/static/assets/KaTeX_Main-Regular-ypZvNtVU.ttf +0 -0
  191. ksadk/server/static/assets/KaTeX_Math-BoldItalic-B3XSjfu4.ttf +0 -0
  192. ksadk/server/static/assets/KaTeX_Math-BoldItalic-CZnvNsCZ.woff2 +0 -0
  193. ksadk/server/static/assets/KaTeX_Math-BoldItalic-iY-2wyZ7.woff +0 -0
  194. ksadk/server/static/assets/KaTeX_Math-Italic-DA0__PXp.woff +0 -0
  195. ksadk/server/static/assets/KaTeX_Math-Italic-flOr_0UB.ttf +0 -0
  196. ksadk/server/static/assets/KaTeX_Math-Italic-t53AETM-.woff2 +0 -0
  197. ksadk/server/static/assets/KaTeX_SansSerif-Bold-CFMepnvq.ttf +0 -0
  198. ksadk/server/static/assets/KaTeX_SansSerif-Bold-D1sUS0GD.woff2 +0 -0
  199. ksadk/server/static/assets/KaTeX_SansSerif-Bold-DbIhKOiC.woff +0 -0
  200. ksadk/server/static/assets/KaTeX_SansSerif-Italic-C3H0VqGB.woff2 +0 -0
  201. ksadk/server/static/assets/KaTeX_SansSerif-Italic-DN2j7dab.woff +0 -0
  202. ksadk/server/static/assets/KaTeX_SansSerif-Italic-YYjJ1zSn.ttf +0 -0
  203. ksadk/server/static/assets/KaTeX_SansSerif-Regular-BNo7hRIc.ttf +0 -0
  204. ksadk/server/static/assets/KaTeX_SansSerif-Regular-CS6fqUqJ.woff +0 -0
  205. ksadk/server/static/assets/KaTeX_SansSerif-Regular-DDBCnlJ7.woff2 +0 -0
  206. ksadk/server/static/assets/KaTeX_Script-Regular-C5JkGWo-.ttf +0 -0
  207. ksadk/server/static/assets/KaTeX_Script-Regular-D3wIWfF6.woff2 +0 -0
  208. ksadk/server/static/assets/KaTeX_Script-Regular-D5yQViql.woff +0 -0
  209. ksadk/server/static/assets/KaTeX_Size1-Regular-C195tn64.woff +0 -0
  210. ksadk/server/static/assets/KaTeX_Size1-Regular-Dbsnue_I.ttf +0 -0
  211. ksadk/server/static/assets/KaTeX_Size1-Regular-mCD8mA8B.woff2 +0 -0
  212. ksadk/server/static/assets/KaTeX_Size2-Regular-B7gKUWhC.ttf +0 -0
  213. ksadk/server/static/assets/KaTeX_Size2-Regular-Dy4dx90m.woff2 +0 -0
  214. ksadk/server/static/assets/KaTeX_Size2-Regular-oD1tc_U0.woff +0 -0
  215. ksadk/server/static/assets/KaTeX_Size3-Regular-CTq5MqoE.woff +0 -0
  216. ksadk/server/static/assets/KaTeX_Size3-Regular-DgpXs0kz.ttf +0 -0
  217. ksadk/server/static/assets/KaTeX_Size4-Regular-BF-4gkZK.woff +0 -0
  218. ksadk/server/static/assets/KaTeX_Size4-Regular-DWFBv043.ttf +0 -0
  219. ksadk/server/static/assets/KaTeX_Size4-Regular-Dl5lxZxV.woff2 +0 -0
  220. ksadk/server/static/assets/KaTeX_Typewriter-Regular-C0xS9mPB.woff +0 -0
  221. ksadk/server/static/assets/KaTeX_Typewriter-Regular-CO6r4hn1.woff2 +0 -0
  222. ksadk/server/static/assets/KaTeX_Typewriter-Regular-D3Ib7_Hf.ttf +0 -0
  223. ksadk/server/static/assets/MathMessageMarkdown-CdGiQWHR.js +8 -0
  224. ksadk/server/static/assets/MathMessageMarkdown-DeYh8QPr.css +1 -0
  225. ksadk/server/static/assets/MermaidBlock-IOcal8cm.js +303 -0
  226. ksadk/server/static/assets/NativeTerminalPanel-CHOd7Rch.css +1 -0
  227. ksadk/server/static/assets/NativeTerminalPanel-DGSDWsei.js +1 -0
  228. ksadk/server/static/assets/addon-fit-DthTIhi3.js +1 -0
  229. ksadk/server/static/assets/apl-CnwPGSsG.js +1 -0
  230. ksadk/server/static/assets/arc-BA13sHc9.js +1 -0
  231. ksadk/server/static/assets/architecture-7EHR7CIX-BvUlsA6l.js +1 -0
  232. ksadk/server/static/assets/architectureDiagram-3BPJPVTR-DzJzgVoL.js +36 -0
  233. ksadk/server/static/assets/asciiarmor-qTkVPQu6.js +1 -0
  234. ksadk/server/static/assets/asn1-Dr8qZg38.js +1 -0
  235. ksadk/server/static/assets/asterisk-Bja0s6e1.js +1 -0
  236. ksadk/server/static/assets/blockDiagram-GPEHLZMM-UTdVcZhn.js +132 -0
  237. ksadk/server/static/assets/brainfuck-D5EjA2JK.js +1 -0
  238. ksadk/server/static/assets/c4Diagram-AAUBKEIU-Dix0GD4m.js +10 -0
  239. ksadk/server/static/assets/channel-CTuydARX.js +1 -0
  240. ksadk/server/static/assets/chunk-2J33WTMH-C2JxuZ42.js +1 -0
  241. ksadk/server/static/assets/chunk-4BX2VUAB-Be57QPgD.js +1 -0
  242. ksadk/server/static/assets/chunk-55IACEB6-WjSuy4nv.js +1 -0
  243. ksadk/server/static/assets/chunk-727SXJPM-BOovP-b5.js +206 -0
  244. ksadk/server/static/assets/chunk-AQP2D5EJ-DOmZNmWj.js +231 -0
  245. ksadk/server/static/assets/chunk-FMBD7UC4-DzwlodkU.js +15 -0
  246. ksadk/server/static/assets/chunk-ND2GUHAM-DMqAikEU.js +1 -0
  247. ksadk/server/static/assets/chunk-QZHKN3VN-BnCydivS.js +1 -0
  248. ksadk/server/static/assets/classDiagram-4FO5ZUOK-BNHg45Be.js +1 -0
  249. ksadk/server/static/assets/classDiagram-v2-Q7XG4LA2-BNHg45Be.js +1 -0
  250. ksadk/server/static/assets/clike-DHH8Ad3s.js +1 -0
  251. ksadk/server/static/assets/clojure-BflJGmDX.js +1 -0
  252. ksadk/server/static/assets/cmake-CyVbuzPu.js +1 -0
  253. ksadk/server/static/assets/cobol-B_OZ4V-R.js +1 -0
  254. ksadk/server/static/assets/coffeescript-B2pKbFk8.js +1 -0
  255. ksadk/server/static/assets/commonlisp-CcllspGY.js +1 -0
  256. ksadk/server/static/assets/cose-bilkent-S5V4N54A-Zhy2GBnP.js +1 -0
  257. ksadk/server/static/assets/crystal-M5-qzICs.js +1 -0
  258. ksadk/server/static/assets/css-CYpP4FRV.js +1 -0
  259. ksadk/server/static/assets/cypher-p9eYesGn.js +1 -0
  260. ksadk/server/static/assets/cytoscape.esm-DelgaX4f.js +321 -0
  261. ksadk/server/static/assets/d-BhMjBjQP.js +1 -0
  262. ksadk/server/static/assets/dagre-BM42HDAG-CbKrtIUz.js +4 -0
  263. ksadk/server/static/assets/dagre-Bx709z4p.js +1 -0
  264. ksadk/server/static/assets/defaultLocale-C8Fc0cco.js +1 -0
  265. ksadk/server/static/assets/diagram-2AECGRRQ-BRApgQRK.js +43 -0
  266. ksadk/server/static/assets/diagram-5GNKFQAL-D0xbnDiK.js +10 -0
  267. ksadk/server/static/assets/diagram-KO2AKTUF-CVugVI9L.js +3 -0
  268. ksadk/server/static/assets/diagram-LMA3HP47-DozUGgee.js +24 -0
  269. ksadk/server/static/assets/diagram-OG6HWLK6-ZOYsKlru.js +24 -0
  270. ksadk/server/static/assets/diff-ChtP43wD.js +1 -0
  271. ksadk/server/static/assets/dist-2hInLS_J.js +9 -0
  272. ksadk/server/static/assets/dist-8EEyGgDx.js +1 -0
  273. ksadk/server/static/assets/dist-8_SfK1IP.js +1 -0
  274. ksadk/server/static/assets/dist-B0NP_Z0z.js +23 -0
  275. ksadk/server/static/assets/dist-BIJVDMuB.js +1 -0
  276. ksadk/server/static/assets/dist-BmlMPsCc.js +2 -0
  277. ksadk/server/static/assets/dist-BrCcQ47T.js +1 -0
  278. ksadk/server/static/assets/dist-BssVmjIo.js +6 -0
  279. ksadk/server/static/assets/dist-C3HIIaN5.js +1 -0
  280. ksadk/server/static/assets/dist-CPBtqRTW.js +1 -0
  281. ksadk/server/static/assets/dist-CkEKJFtk.js +1 -0
  282. ksadk/server/static/assets/dist-D-JMdWPQ.js +1 -0
  283. ksadk/server/static/assets/dist-D-xOD048.js +1 -0
  284. ksadk/server/static/assets/dist-D57wnGWd.js +1 -0
  285. ksadk/server/static/assets/dist-DL_NKc_z.js +1 -0
  286. ksadk/server/static/assets/dist-DMezvBGJ.js +1 -0
  287. ksadk/server/static/assets/dist-DmFaq_Iy.js +1 -0
  288. ksadk/server/static/assets/dist-Dp0k7bWI.js +1 -0
  289. ksadk/server/static/assets/dist-DpKtt4Bo.js +1 -0
  290. ksadk/server/static/assets/dist-DyOkZmze.js +11 -0
  291. ksadk/server/static/assets/dist-DyWsb78Q.js +1 -0
  292. ksadk/server/static/assets/dist-gX6GOLKq.js +1 -0
  293. ksadk/server/static/assets/dockerfile-BLkNEvjs.js +1 -0
  294. ksadk/server/static/assets/dtd-DTF72YNO.js +1 -0
  295. ksadk/server/static/assets/dylan-C6jEEEk-.js +1 -0
  296. ksadk/server/static/assets/ebnf-D4c0_ac3.js +1 -0
  297. ksadk/server/static/assets/ecl-BSZaIHnp.js +1 -0
  298. ksadk/server/static/assets/eiffel-BEjRio4Q.js +1 -0
  299. ksadk/server/static/assets/elm-Cshzl8qu.js +1 -0
  300. ksadk/server/static/assets/erDiagram-TEJ5UH35-Bk-9bgE5.js +85 -0
  301. ksadk/server/static/assets/erlang-DaB2Rkuy.js +1 -0
  302. ksadk/server/static/assets/eventmodeling-FCH6USID-DsAgWnlf.js +1 -0
  303. ksadk/server/static/assets/factor-D7LVTn2l.js +1 -0
  304. ksadk/server/static/assets/fcl-ClOhbFR7.js +1 -0
  305. ksadk/server/static/assets/flowDiagram-I6XJVG4X-Dn9kZVuZ.js +162 -0
  306. ksadk/server/static/assets/forth-Cezjo90N.js +1 -0
  307. ksadk/server/static/assets/fortran-Bt6PBEDR.js +1 -0
  308. ksadk/server/static/assets/ganttDiagram-6RSMTGT7-BGxXlJqm.js +292 -0
  309. ksadk/server/static/assets/gas-BHEdbvp9.js +1 -0
  310. ksadk/server/static/assets/gherkin-oBAE_ms0.js +1 -0
  311. ksadk/server/static/assets/gitGraph-WXDBUCRP-BIao9Yjg.js +1 -0
  312. ksadk/server/static/assets/gitGraphDiagram-PVQCEYII-C7Q0X-wi.js +106 -0
  313. ksadk/server/static/assets/graphlib-B8gBHxth.js +1 -0
  314. ksadk/server/static/assets/groovy-BC3IOsC8.js +1 -0
  315. ksadk/server/static/assets/haskell-BRsoo5mP.js +1 -0
  316. ksadk/server/static/assets/haxe-DIz0ZZqd.js +1 -0
  317. ksadk/server/static/assets/http-CLVgA2GD.js +1 -0
  318. ksadk/server/static/assets/idl-BUZw3wgd.js +1 -0
  319. ksadk/server/static/assets/index-C00Lwg3L.js +165 -0
  320. ksadk/server/static/assets/index-DAURbCsP.css +1 -0
  321. ksadk/server/static/assets/info-J43DQDTF-CyipqGxU.js +1 -0
  322. ksadk/server/static/assets/infoDiagram-5YYISTIA-BO_CSqq5.js +2 -0
  323. ksadk/server/static/assets/init-D6jRqBbL.js +1 -0
  324. ksadk/server/static/assets/ishikawaDiagram-YF4QCWOH-eYLPLd46.js +70 -0
  325. ksadk/server/static/assets/javascript-9Tg8ixDm.js +1 -0
  326. ksadk/server/static/assets/journeyDiagram-JHISSGLW-De9geSb0.js +139 -0
  327. ksadk/server/static/assets/julia-CQfgDRfP.js +1 -0
  328. ksadk/server/static/assets/kanban-definition-UN3LZRKU-Cs80kQto.js +89 -0
  329. ksadk/server/static/assets/katex-DSrCFD8n.js +265 -0
  330. ksadk/server/static/assets/linear-CN9sbKTF.js +1 -0
  331. ksadk/server/static/assets/livescript-BXxG0Yva.js +1 -0
  332. ksadk/server/static/assets/lua-CiA1ziua.js +1 -0
  333. ksadk/server/static/assets/mathematica-u8YMmbU0.js +1 -0
  334. ksadk/server/static/assets/mbox-BEMVcqjs.js +1 -0
  335. ksadk/server/static/assets/mermaid-parser.core-DlgSBU8l.js +161 -0
  336. ksadk/server/static/assets/mindmap-definition-RKZ34NQL-9afz7Oug.js +96 -0
  337. ksadk/server/static/assets/mirc-C9zpzAZU.js +1 -0
  338. ksadk/server/static/assets/mllike-B45xgp2S.js +1 -0
  339. ksadk/server/static/assets/modelica-CqHI_q-D.js +1 -0
  340. ksadk/server/static/assets/mscgen-qgSLujhx.js +1 -0
  341. ksadk/server/static/assets/mumps-CW_TBmxz.js +1 -0
  342. ksadk/server/static/assets/nginx-BMaDbqW3.js +1 -0
  343. ksadk/server/static/assets/nsis-AQ_alPln.js +1 -0
  344. ksadk/server/static/assets/ntriples-d28e9m0E.js +1 -0
  345. ksadk/server/static/assets/octave-D2Q8cUp1.js +1 -0
  346. ksadk/server/static/assets/ordinal-hYBb2elL.js +1 -0
  347. ksadk/server/static/assets/oz-BwTct_5T.js +1 -0
  348. ksadk/server/static/assets/packet-YPE3B663-CGkyRxlg.js +1 -0
  349. ksadk/server/static/assets/pascal-Dp_KdFgX.js +1 -0
  350. ksadk/server/static/assets/perl-CdEHsPfU.js +1 -0
  351. ksadk/server/static/assets/pie-LRSECV5Y-M0uWAf4n.js +1 -0
  352. ksadk/server/static/assets/pieDiagram-4H26LBE5-DPv_VstN.js +30 -0
  353. ksadk/server/static/assets/pig-AF4Hwhju.js +1 -0
  354. ksadk/server/static/assets/powershell-CzG71I4L.js +1 -0
  355. ksadk/server/static/assets/properties-C357ku5U.js +1 -0
  356. ksadk/server/static/assets/protobuf-D1ij_kNL.js +1 -0
  357. ksadk/server/static/assets/pug-Bugr-47h.js +1 -0
  358. ksadk/server/static/assets/puppet-B4hC2X4m.js +1 -0
  359. ksadk/server/static/assets/python-BqYw9LYJ.js +1 -0
  360. ksadk/server/static/assets/q-B9NhS7L_.js +1 -0
  361. ksadk/server/static/assets/quadrantDiagram-W4KKPZXB-o77wZ1XK.js +7 -0
  362. ksadk/server/static/assets/r-DADKenSm.js +1 -0
  363. ksadk/server/static/assets/radar-GUYGQ44K-Bdbm24-x.js +1 -0
  364. ksadk/server/static/assets/requirementDiagram-4Y6WPE33-BYVw81VC.js +84 -0
  365. ksadk/server/static/assets/rpm-gpDK5sbt.js +1 -0
  366. ksadk/server/static/assets/ruby-DsYpTuWg.js +1 -0
  367. ksadk/server/static/assets/sankeyDiagram-5OEKKPKP-B7nZFMKT.js +40 -0
  368. ksadk/server/static/assets/sas-C2OyD2Y6.js +1 -0
  369. ksadk/server/static/assets/scheme-CyDdOh7e.js +1 -0
  370. ksadk/server/static/assets/sequenceDiagram-3UESZ5HK-BGRRrFw5.js +162 -0
  371. ksadk/server/static/assets/shell-Du5Qg9im.js +1 -0
  372. ksadk/server/static/assets/sieve-BAxa3IjF.js +1 -0
  373. ksadk/server/static/assets/simple-mode-DRpGK0lJ.js +1 -0
  374. ksadk/server/static/assets/smalltalk-BLp5-jwC.js +1 -0
  375. ksadk/server/static/assets/solr-BBopId9w.js +1 -0
  376. ksadk/server/static/assets/sparql-Dz-mlCAC.js +1 -0
  377. ksadk/server/static/assets/spreadsheet-CTIncYxj.js +1 -0
  378. ksadk/server/static/assets/sql-DcCJ9jop.js +1 -0
  379. ksadk/server/static/assets/stateDiagram-AJRCARHV-BUfHCoPs.js +1 -0
  380. ksadk/server/static/assets/stateDiagram-v2-BHNVJYJU-8xBN_gLM.js +1 -0
  381. ksadk/server/static/assets/stex-sDrdk2BW.js +1 -0
  382. ksadk/server/static/assets/stylus-DLLZ8dgm.js +1 -0
  383. ksadk/server/static/assets/swift-DKB6_1j6.js +1 -0
  384. ksadk/server/static/assets/tcl-BGfruO1u.js +1 -0
  385. ksadk/server/static/assets/textile-DWBqthVk.js +1 -0
  386. ksadk/server/static/assets/tiddlywiki-VlUiK86J.js +1 -0
  387. ksadk/server/static/assets/tiki-CxVlf5KZ.js +1 -0
  388. ksadk/server/static/assets/timeline-definition-PNZ67QCA-FbCTGrf9.js +120 -0
  389. ksadk/server/static/assets/toml-LvoKBwCs.js +1 -0
  390. ksadk/server/static/assets/treeView-BLDUP644-npMo0ak1.js +1 -0
  391. ksadk/server/static/assets/treemap-LRROVOQU-CHdzrrdo.js +1 -0
  392. ksadk/server/static/assets/troff-C2dAgh7P.js +1 -0
  393. ksadk/server/static/assets/ttcn-BePYh-hG.js +1 -0
  394. ksadk/server/static/assets/ttcn-cfg-CY0aot7Q.js +1 -0
  395. ksadk/server/static/assets/turtle-BDLWE2cD.js +1 -0
  396. ksadk/server/static/assets/vb-BthdM_4N.js +1 -0
  397. ksadk/server/static/assets/vbscript-D9f6rSsU.js +1 -0
  398. ksadk/server/static/assets/velocity-CqftRsjg.js +1 -0
  399. ksadk/server/static/assets/vennDiagram-CIIHVFJN-DWgwtPsJ.js +34 -0
  400. ksadk/server/static/assets/verilog-D-x6ne0Z.js +1 -0
  401. ksadk/server/static/assets/vhdl-CMrOq2q1.js +1 -0
  402. ksadk/server/static/assets/wardley-L42UT6IY-BEQz7wyy.js +1 -0
  403. ksadk/server/static/assets/wardleyDiagram-YWT4CUSO-2x8G-tTM.js +78 -0
  404. ksadk/server/static/assets/webidl-D5jiJvOU.js +1 -0
  405. ksadk/server/static/assets/xquery-fj_R-kMw.js +1 -0
  406. ksadk/server/static/assets/xterm-DooSxjI5.js +36 -0
  407. ksadk/server/static/assets/xychartDiagram-2RQKCTM6-Drma3AYl.js +7 -0
  408. ksadk/server/static/assets/yacas-CXXgtw0p.js +1 -0
  409. ksadk/server/static/assets/z80-CL1naaMV.js +1 -0
  410. ksadk/server/static/favicon.svg +1 -0
  411. ksadk/server/static/icons.svg +24 -0
  412. ksadk/server/static/index.html +14 -0
  413. ksadk/server/terminal_sessions.py +551 -0
  414. ksadk/sessions/__init__.py +279 -0
  415. ksadk/sessions/base.py +354 -0
  416. ksadk/sessions/continuity.py +337 -0
  417. ksadk/sessions/errors.py +7 -0
  418. ksadk/sessions/in_memory.py +273 -0
  419. ksadk/sessions/local_service.py +949 -0
  420. ksadk/sessions/postgres_service.py +901 -0
  421. ksadk/sessions/resilience.py +52 -0
  422. ksadk/sessions/resilient.py +360 -0
  423. ksadk/sessions/sqlite_service.py +13 -0
  424. ksadk/skills/__init__.py +9 -0
  425. ksadk/skills/loader.py +46 -0
  426. ksadk/skills/models.py +120 -0
  427. ksadk/skills/package_store.py +104 -0
  428. ksadk/skills/runtime/__init__.py +17 -0
  429. ksadk/skills/runtime/agent.py +183 -0
  430. ksadk/skills/runtime/artifacts.py +39 -0
  431. ksadk/skills/runtime/backends/__init__.py +1 -0
  432. ksadk/skills/runtime/backends/disabled.py +8 -0
  433. ksadk/skills/runtime/backends/e2b.py +168 -0
  434. ksadk/skills/runtime/backends/local.py +95 -0
  435. ksadk/skills/runtime/base.py +103 -0
  436. ksadk/skills/runtime/executor.py +219 -0
  437. ksadk/skills/runtime/factory.py +37 -0
  438. ksadk/skills/runtime/loader.py +131 -0
  439. ksadk/skills/runtime/registry.py +150 -0
  440. ksadk/skills/runtime/request.py +67 -0
  441. ksadk/skills/service_client.py +239 -0
  442. ksadk/skills/service_env.py +58 -0
  443. ksadk/skills/tool_defs.py +221 -0
  444. ksadk/terminal_client.py +69 -0
  445. ksadk/terminal_exec_policy.py +229 -0
  446. ksadk/tools/__init__.py +17 -0
  447. ksadk/tools/gateway.py +230 -0
  448. ksadk/tools/result_budget.py +154 -0
  449. ksadk/toolsets/__init__.py +854 -0
  450. ksadk/toolsets/_langchain.py +11 -0
  451. ksadk/toolsets/platform.py +93 -0
  452. ksadk/toolsets/sandbox.py +310 -0
  453. ksadk/toolsets/skills.py +217 -0
  454. ksadk/toolsets/web.py +266 -0
  455. ksadk/toolsets/workspace.py +917 -0
  456. ksadk/toolsets/workspace_state.py +44 -0
  457. ksadk/tracing/__init__.py +37 -0
  458. ksadk/tracing/exporters/__init__.py +1 -0
  459. ksadk/tracing/exporters/inmemory_exporter.py +116 -0
  460. ksadk/tracing/exporters/langfuse_exporter.py +445 -0
  461. ksadk/tracing/setup.py +892 -0
  462. ksadk/tracing/span_utils.py +114 -0
  463. ksadk/tui/__init__.py +27 -0
  464. ksadk/tui/loop.py +1877 -0
  465. ksadk/tui/stream_render.py +68 -0
  466. ksadk/ui_config.py +168 -0
  467. ksadk/version.py +4 -0
  468. ksadk_runtime_common/__init__.py +20 -0
  469. ksadk_runtime_common/memory_backend/__init__.py +29 -0
  470. ksadk_runtime_common/memory_backend/manifest.py +79 -0
  471. ksadk_runtime_common/memory_backend/providers/__init__.py +6 -0
  472. ksadk_runtime_common/memory_backend/providers/lancedb.py +151 -0
  473. ksadk_runtime_common/memory_backend/providers/mem0.py +74 -0
  474. ksadk_runtime_common/memory_backend/registry.py +56 -0
  475. ksadk_runtime_common/memory_backend/render.py +71 -0
  476. ksadk_runtime_common/schemas/memory_backend_manifest.schema.json +148 -0
  477. ksadk_runtime_common/workspace_files/__init__.py +29 -0
  478. ksadk_runtime_common/workspace_files/bootstrap.py +56 -0
  479. ksadk_runtime_common/workspace_files/constants.py +9 -0
  480. ksadk_runtime_common/workspace_files/path_utils.py +71 -0
  481. ksadk_runtime_common/workspace_files/preview.py +96 -0
  482. ksadk_runtime_common/workspace_files/router.py +254 -0
  483. agentengine_sdk_python/__init__.py +0 -3
  484. agentengine_sdk_python-0.6.4.dist-info/METADATA +0 -48
  485. agentengine_sdk_python-0.6.4.dist-info/RECORD +0 -5
  486. agentengine_sdk_python-0.6.4.dist-info/top_level.txt +0 -1
@@ -0,0 +1,71 @@
1
+ """Memory backend config renderer for runtime bootstrap integration."""
2
+
3
+ from __future__ import annotations
4
+
5
+ import json
6
+ import os
7
+ from collections.abc import Mapping
8
+ from typing import Any
9
+
10
+ from ksadk_runtime_common.memory_backend.manifest import (
11
+ MemoryBackendManifest,
12
+ parse_manifest,
13
+ )
14
+ from ksadk_runtime_common.memory_backend.registry import (
15
+ RenderResult,
16
+ get_provider,
17
+ )
18
+
19
+ MANIFEST_ENV_VAR = "MEMORY_BACKEND_MANIFEST"
20
+ MEMORY_BACKEND_PLUGIN_IDS = ["openclaw-mem0", "memory-lancedb"]
21
+ MEMORY_BACKEND_PLUGIN_SLOTS = ["memory"]
22
+
23
+
24
+ def render_memory_backend_config(
25
+ manifest: MemoryBackendManifest | str | Mapping[str, Any] | None = None,
26
+ ) -> RenderResult:
27
+ """Render memory backend config from a manifest."""
28
+ if manifest is None:
29
+ manifest_raw = os.getenv(MANIFEST_ENV_VAR)
30
+ if not manifest_raw:
31
+ return RenderResult(
32
+ backend_type="openclaw_default",
33
+ config_patch={},
34
+ required_env=[],
35
+ plugin_ids=[],
36
+ )
37
+ manifest = manifest_raw
38
+
39
+ parsed = parse_manifest(manifest)
40
+ if parsed is None:
41
+ return RenderResult(
42
+ backend_type="openclaw_default",
43
+ config_patch={},
44
+ required_env=[],
45
+ plugin_ids=[],
46
+ )
47
+
48
+ if parsed.backend_type == "openclaw_default":
49
+ return RenderResult(
50
+ backend_type="openclaw_default",
51
+ config_patch={},
52
+ required_env=[],
53
+ disabled_plugin_ids=MEMORY_BACKEND_PLUGIN_IDS,
54
+ clear_plugin_slots=MEMORY_BACKEND_PLUGIN_SLOTS,
55
+ )
56
+
57
+ provider = get_provider(parsed.backend_type)
58
+ if provider is None:
59
+ raise ValueError(f"Unknown backend_type: {parsed.backend_type}")
60
+
61
+ return provider.render(parsed)
62
+
63
+
64
+ def render_to_json(manifest: MemoryBackendManifest | str | dict[str, Any] | None = None) -> str:
65
+ """Render memory backend config to a JSON string."""
66
+ result = render_memory_backend_config(manifest)
67
+ return json.dumps(result.model_dump())
68
+
69
+
70
+ if __name__ == "__main__":
71
+ print(render_to_json())
@@ -0,0 +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
+ }
@@ -0,0 +1,29 @@
1
+ """Workspace files module shared across bundled runtimes."""
2
+
3
+ from ksadk_runtime_common.workspace_files.bootstrap import (
4
+ build_workspace_files_bootstrap,
5
+ workspace_files_enabled,
6
+ workspace_files_max_upload_bytes,
7
+ workspace_files_root_label,
8
+ )
9
+ from ksadk_runtime_common.workspace_files.constants import (
10
+ DEFAULT_WORKSPACE_MAX_UPLOAD_BYTES,
11
+ WORKSPACE_CONTENT_PATH,
12
+ WORKSPACE_ENTRY_ACTION,
13
+ WORKSPACE_PATH_ESCAPE_DETAIL,
14
+ WORKSPACE_UPLOAD_ACTION,
15
+ )
16
+ from ksadk_runtime_common.workspace_files.router import create_workspace_files_router
17
+
18
+ __all__ = [
19
+ "create_workspace_files_router",
20
+ "build_workspace_files_bootstrap",
21
+ "workspace_files_enabled",
22
+ "workspace_files_root_label",
23
+ "workspace_files_max_upload_bytes",
24
+ "DEFAULT_WORKSPACE_MAX_UPLOAD_BYTES",
25
+ "WORKSPACE_PATH_ESCAPE_DETAIL",
26
+ "WORKSPACE_ENTRY_ACTION",
27
+ "WORKSPACE_UPLOAD_ACTION",
28
+ "WORKSPACE_CONTENT_PATH",
29
+ ]
@@ -0,0 +1,56 @@
1
+ """Workspace files bootstrap configuration builder."""
2
+
3
+ from __future__ import annotations
4
+
5
+ import os
6
+
7
+ from ksadk_runtime_common.workspace_files.constants import (
8
+ DEFAULT_WORKSPACE_MAX_UPLOAD_BYTES,
9
+ WORKSPACE_CONTENT_PATH,
10
+ WORKSPACE_ENTRY_ACTION,
11
+ WORKSPACE_UPLOAD_ACTION,
12
+ )
13
+
14
+
15
+ def _env_flag(name: str, default: bool) -> bool:
16
+ """Parse boolean environment variable."""
17
+ raw = str(os.getenv(name, "")).strip().lower()
18
+ if not raw:
19
+ return default
20
+ return raw in {"1", "true", "yes", "on"}
21
+
22
+
23
+ def workspace_files_enabled(*, default: bool = True) -> bool:
24
+ """Check if workspace files feature is enabled."""
25
+ return _env_flag("KSADK_WORKSPACE_FILES_ENABLED", default)
26
+
27
+
28
+ def workspace_files_root_label() -> str:
29
+ """Get workspace root label for UI display."""
30
+ return str(os.getenv("KSADK_WORKSPACE_ROOT_LABEL") or "workspace").strip() or "workspace"
31
+
32
+
33
+ def workspace_files_max_upload_bytes() -> int:
34
+ """Get max upload size in bytes."""
35
+ raw = str(os.getenv("KSADK_WORKSPACE_MAX_UPLOAD_BYTES") or "").strip()
36
+ if not raw:
37
+ return DEFAULT_WORKSPACE_MAX_UPLOAD_BYTES
38
+ try:
39
+ return max(int(raw), 1)
40
+ except ValueError:
41
+ return DEFAULT_WORKSPACE_MAX_UPLOAD_BYTES
42
+
43
+
44
+ def build_workspace_files_bootstrap(*, enabled: bool) -> dict[str, bool | int | str] | None:
45
+ """Build bootstrap configuration for workspace files."""
46
+ if not enabled:
47
+ return None
48
+ return {
49
+ "Enabled": True,
50
+ "MaxUploadBytes": workspace_files_max_upload_bytes(),
51
+ "SupportsDelete": True,
52
+ "RootLabel": workspace_files_root_label(),
53
+ "EntryAction": WORKSPACE_ENTRY_ACTION,
54
+ "UploadAction": WORKSPACE_UPLOAD_ACTION,
55
+ "ContentPath": WORKSPACE_CONTENT_PATH,
56
+ }
@@ -0,0 +1,9 @@
1
+ """Workspace files constants - preserves the existing contract exactly."""
2
+
3
+ DEFAULT_WORKSPACE_MAX_UPLOAD_BYTES = 100 * 1024 * 1024
4
+
5
+ WORKSPACE_PATH_ESCAPE_DETAIL = "workspace path escapes the workspace root"
6
+
7
+ WORKSPACE_ENTRY_ACTION = "ListWorkspaceFiles"
8
+ WORKSPACE_UPLOAD_ACTION = "AddWorkspaceFile"
9
+ WORKSPACE_CONTENT_PATH = "/agentengine/api/v1/GetWorkspaceFileContent"
@@ -0,0 +1,71 @@
1
+ """Workspace files path utilities and security helpers."""
2
+
3
+ from __future__ import annotations
4
+
5
+ import os
6
+ import posixpath
7
+ import re
8
+ from collections.abc import Callable
9
+ from pathlib import Path
10
+
11
+ from fastapi import HTTPException
12
+
13
+ from ksadk_runtime_common.workspace_files.constants import WORKSPACE_PATH_ESCAPE_DETAIL
14
+
15
+ _SAFE_WORKSPACE_SEGMENT_RE = re.compile(r"^[^/\x00]+$")
16
+
17
+
18
+ def _env_flag(name: str, default: bool) -> bool:
19
+ """Parse boolean environment variable."""
20
+ raw = str(os.getenv(name, "")).strip().lower()
21
+ if not raw:
22
+ return default
23
+ return raw in {"1", "true", "yes", "on"}
24
+
25
+
26
+ def _normalize_workspace_path(raw_path: str | None, *, allow_root: bool) -> str:
27
+ """Normalize and validate a workspace path."""
28
+ raw = str(raw_path or ".").strip().replace("\\", "/")
29
+ if raw in {"", "."}:
30
+ if allow_root:
31
+ return "."
32
+ raise HTTPException(status_code=400, detail="workspace file path must not be empty")
33
+ if raw.startswith("/"):
34
+ raise HTTPException(status_code=400, detail=WORKSPACE_PATH_ESCAPE_DETAIL)
35
+
36
+ normalized = posixpath.normpath(raw)
37
+ if normalized in {"", "."}:
38
+ if allow_root:
39
+ return "."
40
+ raise HTTPException(status_code=400, detail="workspace file path must not be empty")
41
+ if normalized == ".." or normalized.startswith("../"):
42
+ raise HTTPException(status_code=400, detail=WORKSPACE_PATH_ESCAPE_DETAIL)
43
+ return normalized
44
+
45
+
46
+ def _resolve_workspace_root(root_getter: Callable[[], Path]) -> Path:
47
+ """Resolve and create the workspace root directory."""
48
+ root = Path(root_getter()).expanduser().resolve()
49
+ root.mkdir(parents=True, exist_ok=True)
50
+ return root
51
+
52
+
53
+ def _resolve_workspace_target(
54
+ root: Path, raw_path: str | None, *, allow_root: bool
55
+ ) -> tuple[str, Path]:
56
+ """Resolve a path within the workspace root with an escape check."""
57
+ normalized = _normalize_workspace_path(raw_path, allow_root=allow_root)
58
+ if normalized == ".":
59
+ target = root
60
+ else:
61
+ segments = tuple(part for part in normalized.split("/") if part)
62
+ if not segments or any(
63
+ part in {".", ".."} or not _SAFE_WORKSPACE_SEGMENT_RE.fullmatch(part)
64
+ for part in segments
65
+ ):
66
+ raise HTTPException(status_code=400, detail=WORKSPACE_PATH_ESCAPE_DETAIL)
67
+ target = root.joinpath(*segments)
68
+ resolved_target = target.resolve(strict=False)
69
+ if resolved_target != root and root not in resolved_target.parents:
70
+ raise HTTPException(status_code=400, detail=WORKSPACE_PATH_ESCAPE_DETAIL)
71
+ return normalized, resolved_target
@@ -0,0 +1,96 @@
1
+ """HTML preview helpers shared by local server and deployed runtime routes."""
2
+
3
+ from __future__ import annotations
4
+
5
+ import html as html_lib
6
+ import re
7
+ from urllib.parse import quote
8
+
9
+
10
+ def _source_list(*sources: str | None) -> str:
11
+ seen: list[str] = []
12
+ for source in sources:
13
+ if source and source not in seen:
14
+ seen.append(source)
15
+ return " ".join(seen)
16
+
17
+
18
+ def _quote_workspace_path(path: str) -> str:
19
+ return "/".join(quote(segment, safe="") for segment in path.split("/") if segment)
20
+
21
+
22
+ def build_workspace_file_base_href(file_path: str) -> str:
23
+ normalized = str(file_path or "").replace("\\", "/").strip("/")
24
+ if "/" not in normalized:
25
+ return "/_ksadk/workspace/v1/files/"
26
+ dir_path = normalized.rsplit("/", 1)[0]
27
+ encoded_dir_path = _quote_workspace_path(dir_path)
28
+ return f"/_ksadk/workspace/v1/files/{encoded_dir_path}/"
29
+
30
+
31
+ def build_workspace_preview_csp(asset_source: str | None = None) -> str:
32
+ script_sources = _source_list(
33
+ "'unsafe-inline'",
34
+ "'unsafe-eval'",
35
+ "'self'",
36
+ "https:",
37
+ asset_source,
38
+ )
39
+ render_asset_sources = _source_list("'self'", "https:", asset_source)
40
+ return "; ".join(
41
+ [
42
+ "sandbox allow-scripts allow-downloads",
43
+ "default-src 'none'",
44
+ f"script-src {script_sources}",
45
+ f"style-src 'unsafe-inline' data: {render_asset_sources}",
46
+ f"img-src data: blob: {render_asset_sources}",
47
+ f"font-src data: {render_asset_sources}",
48
+ f"media-src data: blob: {render_asset_sources}",
49
+ "worker-src blob:",
50
+ "connect-src 'none'",
51
+ "form-action 'none'",
52
+ "base-uri 'self'",
53
+ ]
54
+ )
55
+
56
+
57
+ HASH_ANCHOR_HANDLER = """<script data-ksadk-preview-anchor-handler>
58
+ (function() {
59
+ function scrollToHash(rawHref) {
60
+ if (!rawHref || rawHref === '#') return;
61
+ var rawId = rawHref.slice(1);
62
+ var id = rawId;
63
+ try {
64
+ id = decodeURIComponent(rawId);
65
+ } catch (_) {}
66
+ var target = document.getElementById(id) || document.getElementsByName(id)[0];
67
+ if (target) {
68
+ target.scrollIntoView({ behavior: 'smooth', block: 'start' });
69
+ }
70
+ }
71
+ document.addEventListener('click', function(event) {
72
+ var target = event.target && event.target.closest ? event.target.closest('a') : null;
73
+ if (!target) return;
74
+ var rawHref = target.getAttribute('href') || '';
75
+ if (rawHref.charAt(0) === '#') {
76
+ event.preventDefault();
77
+ scrollToHash(rawHref);
78
+ }
79
+ }, true);
80
+ })();
81
+ </script>"""
82
+
83
+
84
+ def inject_workspace_html_preview(html_doc: str, file_path: str) -> str:
85
+ base_href = build_workspace_file_base_href(file_path)
86
+ base_tag = f'<base href="{html_lib.escape(base_href, quote=True)}">'
87
+ injection = f"{base_tag}{HASH_ANCHOR_HANDLER}"
88
+ if re.search(r"<head[^>]*>", html_doc, re.IGNORECASE):
89
+ return re.sub(
90
+ r"<head[^>]*>",
91
+ lambda match: match.group() + injection,
92
+ html_doc,
93
+ count=1,
94
+ flags=re.IGNORECASE,
95
+ )
96
+ return injection + html_doc