agentengine-sdk-python 0.6.2__py3-none-any.whl → 0.6.9__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 (490) hide show
  1. agentengine_sdk_python-0.6.9.dist-info/METADATA +179 -0
  2. agentengine_sdk_python-0.6.9.dist-info/RECORD +487 -0
  3. {agentengine_sdk_python-0.6.2.dist-info → agentengine_sdk_python-0.6.9.dist-info}/WHEEL +1 -1
  4. agentengine_sdk_python-0.6.9.dist-info/entry_points.txt +3 -0
  5. agentengine_sdk_python-0.6.9.dist-info/licenses/LICENSE +175 -0
  6. agentengine_sdk_python-0.6.9.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 +2227 -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 +2277 -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 +1259 -0
  46. ksadk/cli/cmd_invoke.py +1336 -0
  47. ksadk/cli/cmd_launch.py +564 -0
  48. ksadk/cli/cmd_mcp.py +1174 -0
  49. ksadk/cli/cmd_model.py +302 -0
  50. ksadk/cli/cmd_openclaw.py +3918 -0
  51. ksadk/cli/cmd_run.py +232 -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 +410 -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 +342 -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/model_context.py +360 -0
  83. ksadk/conversations/model_options.py +136 -0
  84. ksadk/conversations/normalize.py +446 -0
  85. ksadk/conversations/reasoning_markup.py +91 -0
  86. ksadk/conversations/run_kinds.py +61 -0
  87. ksadk/conversations/run_status.py +53 -0
  88. ksadk/conversations/runtime.py +5208 -0
  89. ksadk/conversations/semantic_summary.py +359 -0
  90. ksadk/conversations/session_title.py +254 -0
  91. ksadk/deployment/__init__.py +83 -0
  92. ksadk/deployment/agent_access.py +226 -0
  93. ksadk/deployment/base.py +229 -0
  94. ksadk/deployment/manager.py +332 -0
  95. ksadk/deployment/providers/__init__.py +10 -0
  96. ksadk/deployment/providers/serverless.py +1105 -0
  97. ksadk/deployment/registry.py +120 -0
  98. ksadk/deployment/state.py +78 -0
  99. ksadk/deployment/ui_config.py +21 -0
  100. ksadk/detection/__init__.py +7 -0
  101. ksadk/detection/detector.py +431 -0
  102. ksadk/detection/mcp_detector.py +250 -0
  103. ksadk/hermes_terminal.py +467 -0
  104. ksadk/identity/__init__.py +17 -0
  105. ksadk/identity/resolver.py +385 -0
  106. ksadk/knowledge_base/__init__.py +62 -0
  107. ksadk/knowledge_base/adk_tool.py +47 -0
  108. ksadk/knowledge_base/client.py +297 -0
  109. ksadk/knowledge_base/langchain_tool.py +55 -0
  110. ksadk/knowledge_base/service.py +66 -0
  111. ksadk/knowledge_base/tool.py +50 -0
  112. ksadk/markdown.py +169 -0
  113. ksadk/mcp_runtime/__init__.py +231 -0
  114. ksadk/memory/__init__.py +57 -0
  115. ksadk/memory/adk/__init__.py +51 -0
  116. ksadk/memory/adk/backends/__init__.py +5 -0
  117. ksadk/memory/adk/backends/base_ltm_backend.py +52 -0
  118. ksadk/memory/adk/backends/http_ltm_backend.py +183 -0
  119. ksadk/memory/adk/backends/inmemory_ltm_backend.py +96 -0
  120. ksadk/memory/adk/backends/sdk_ltm_backend.py +456 -0
  121. ksadk/memory/adk/long_term_memory.py +273 -0
  122. ksadk/memory/adk/short_term_memory.py +289 -0
  123. ksadk/memory/adk_tool.py +31 -0
  124. ksadk/memory/backends/__init__.py +6 -0
  125. ksadk/memory/backends/base.py +103 -0
  126. ksadk/memory/backends/memory.py +112 -0
  127. ksadk/memory/backends/redis.py +146 -0
  128. ksadk/memory/langchain_tool.py +39 -0
  129. ksadk/memory/ltm_backend_factory.py +24 -0
  130. ksadk/memory/manager.py +215 -0
  131. ksadk/memory/service.py +172 -0
  132. ksadk/memory/tool.py +96 -0
  133. ksadk/model_policy.py +223 -0
  134. ksadk/openclaw_gateway.py +378 -0
  135. ksadk/runners/__init__.py +8 -0
  136. ksadk/runners/adk_runner.py +1135 -0
  137. ksadk/runners/base_runner.py +305 -0
  138. ksadk/runners/deepagents_runner.py +13 -0
  139. ksadk/runners/factory.py +73 -0
  140. ksadk/runners/langchain_runner.py +539 -0
  141. ksadk/runners/langgraph_runner.py +852 -0
  142. ksadk/runners/patch_langchain.py +187 -0
  143. ksadk/runners/remote_runner.py +667 -0
  144. ksadk/runners/usage_accumulator.py +38 -0
  145. ksadk/runners/utils/__init__.py +19 -0
  146. ksadk/runners/utils/langfuse.py +230 -0
  147. ksadk/runners/utils/loader.py +62 -0
  148. ksadk/runtime_context.py +166 -0
  149. ksadk/runtime_state.py +25 -0
  150. ksadk/sandbox/__init__.py +28 -0
  151. ksadk/sandbox/backends/__init__.py +9 -0
  152. ksadk/sandbox/backends/e2b.py +154 -0
  153. ksadk/sandbox/backends/local_process.py +131 -0
  154. ksadk/sandbox/base.py +101 -0
  155. ksadk/sandbox/factory.py +53 -0
  156. ksadk/sandbox/registry.py +187 -0
  157. ksadk/server/__init__.py +7 -0
  158. ksadk/server/api_models.py +73 -0
  159. ksadk/server/app.py +3789 -0
  160. ksadk/server/static/assets/ArtifactsPanel-C0meuOdi.js +1 -0
  161. ksadk/server/static/assets/CodeBlock-BbI4HPtJ.js +9 -0
  162. ksadk/server/static/assets/KaTeX_AMS-Regular-BQhdFMY1.woff2 +0 -0
  163. ksadk/server/static/assets/KaTeX_AMS-Regular-DMm9YOAa.woff +0 -0
  164. ksadk/server/static/assets/KaTeX_AMS-Regular-DRggAlZN.ttf +0 -0
  165. ksadk/server/static/assets/KaTeX_Caligraphic-Bold-ATXxdsX0.ttf +0 -0
  166. ksadk/server/static/assets/KaTeX_Caligraphic-Bold-BEiXGLvX.woff +0 -0
  167. ksadk/server/static/assets/KaTeX_Caligraphic-Bold-Dq_IR9rO.woff2 +0 -0
  168. ksadk/server/static/assets/KaTeX_Caligraphic-Regular-CTRA-rTL.woff +0 -0
  169. ksadk/server/static/assets/KaTeX_Caligraphic-Regular-Di6jR-x-.woff2 +0 -0
  170. ksadk/server/static/assets/KaTeX_Caligraphic-Regular-wX97UBjC.ttf +0 -0
  171. ksadk/server/static/assets/KaTeX_Fraktur-Bold-BdnERNNW.ttf +0 -0
  172. ksadk/server/static/assets/KaTeX_Fraktur-Bold-BsDP51OF.woff +0 -0
  173. ksadk/server/static/assets/KaTeX_Fraktur-Bold-CL6g_b3V.woff2 +0 -0
  174. ksadk/server/static/assets/KaTeX_Fraktur-Regular-CB_wures.ttf +0 -0
  175. ksadk/server/static/assets/KaTeX_Fraktur-Regular-CTYiF6lA.woff2 +0 -0
  176. ksadk/server/static/assets/KaTeX_Fraktur-Regular-Dxdc4cR9.woff +0 -0
  177. ksadk/server/static/assets/KaTeX_Main-Bold-Cx986IdX.woff2 +0 -0
  178. ksadk/server/static/assets/KaTeX_Main-Bold-Jm3AIy58.woff +0 -0
  179. ksadk/server/static/assets/KaTeX_Main-Bold-waoOVXN0.ttf +0 -0
  180. ksadk/server/static/assets/KaTeX_Main-BoldItalic-DxDJ3AOS.woff2 +0 -0
  181. ksadk/server/static/assets/KaTeX_Main-BoldItalic-DzxPMmG6.ttf +0 -0
  182. ksadk/server/static/assets/KaTeX_Main-BoldItalic-SpSLRI95.woff +0 -0
  183. ksadk/server/static/assets/KaTeX_Main-Italic-3WenGoN9.ttf +0 -0
  184. ksadk/server/static/assets/KaTeX_Main-Italic-BMLOBm91.woff +0 -0
  185. ksadk/server/static/assets/KaTeX_Main-Italic-NWA7e6Wa.woff2 +0 -0
  186. ksadk/server/static/assets/KaTeX_Main-Regular-B22Nviop.woff2 +0 -0
  187. ksadk/server/static/assets/KaTeX_Main-Regular-Dr94JaBh.woff +0 -0
  188. ksadk/server/static/assets/KaTeX_Main-Regular-ypZvNtVU.ttf +0 -0
  189. ksadk/server/static/assets/KaTeX_Math-BoldItalic-B3XSjfu4.ttf +0 -0
  190. ksadk/server/static/assets/KaTeX_Math-BoldItalic-CZnvNsCZ.woff2 +0 -0
  191. ksadk/server/static/assets/KaTeX_Math-BoldItalic-iY-2wyZ7.woff +0 -0
  192. ksadk/server/static/assets/KaTeX_Math-Italic-DA0__PXp.woff +0 -0
  193. ksadk/server/static/assets/KaTeX_Math-Italic-flOr_0UB.ttf +0 -0
  194. ksadk/server/static/assets/KaTeX_Math-Italic-t53AETM-.woff2 +0 -0
  195. ksadk/server/static/assets/KaTeX_SansSerif-Bold-CFMepnvq.ttf +0 -0
  196. ksadk/server/static/assets/KaTeX_SansSerif-Bold-D1sUS0GD.woff2 +0 -0
  197. ksadk/server/static/assets/KaTeX_SansSerif-Bold-DbIhKOiC.woff +0 -0
  198. ksadk/server/static/assets/KaTeX_SansSerif-Italic-C3H0VqGB.woff2 +0 -0
  199. ksadk/server/static/assets/KaTeX_SansSerif-Italic-DN2j7dab.woff +0 -0
  200. ksadk/server/static/assets/KaTeX_SansSerif-Italic-YYjJ1zSn.ttf +0 -0
  201. ksadk/server/static/assets/KaTeX_SansSerif-Regular-BNo7hRIc.ttf +0 -0
  202. ksadk/server/static/assets/KaTeX_SansSerif-Regular-CS6fqUqJ.woff +0 -0
  203. ksadk/server/static/assets/KaTeX_SansSerif-Regular-DDBCnlJ7.woff2 +0 -0
  204. ksadk/server/static/assets/KaTeX_Script-Regular-C5JkGWo-.ttf +0 -0
  205. ksadk/server/static/assets/KaTeX_Script-Regular-D3wIWfF6.woff2 +0 -0
  206. ksadk/server/static/assets/KaTeX_Script-Regular-D5yQViql.woff +0 -0
  207. ksadk/server/static/assets/KaTeX_Size1-Regular-C195tn64.woff +0 -0
  208. ksadk/server/static/assets/KaTeX_Size1-Regular-Dbsnue_I.ttf +0 -0
  209. ksadk/server/static/assets/KaTeX_Size1-Regular-mCD8mA8B.woff2 +0 -0
  210. ksadk/server/static/assets/KaTeX_Size2-Regular-B7gKUWhC.ttf +0 -0
  211. ksadk/server/static/assets/KaTeX_Size2-Regular-Dy4dx90m.woff2 +0 -0
  212. ksadk/server/static/assets/KaTeX_Size2-Regular-oD1tc_U0.woff +0 -0
  213. ksadk/server/static/assets/KaTeX_Size3-Regular-CTq5MqoE.woff +0 -0
  214. ksadk/server/static/assets/KaTeX_Size3-Regular-DgpXs0kz.ttf +0 -0
  215. ksadk/server/static/assets/KaTeX_Size4-Regular-BF-4gkZK.woff +0 -0
  216. ksadk/server/static/assets/KaTeX_Size4-Regular-DWFBv043.ttf +0 -0
  217. ksadk/server/static/assets/KaTeX_Size4-Regular-Dl5lxZxV.woff2 +0 -0
  218. ksadk/server/static/assets/KaTeX_Typewriter-Regular-C0xS9mPB.woff +0 -0
  219. ksadk/server/static/assets/KaTeX_Typewriter-Regular-CO6r4hn1.woff2 +0 -0
  220. ksadk/server/static/assets/KaTeX_Typewriter-Regular-D3Ib7_Hf.ttf +0 -0
  221. ksadk/server/static/assets/MathMessageMarkdown-DMLQYoLp.js +8 -0
  222. ksadk/server/static/assets/MathMessageMarkdown-DeYh8QPr.css +1 -0
  223. ksadk/server/static/assets/MermaidBlock-DCR8WZ17.js +303 -0
  224. ksadk/server/static/assets/NativeTerminalPanel-CHOd7Rch.css +1 -0
  225. ksadk/server/static/assets/NativeTerminalPanel-CKUvWhUz.js +1 -0
  226. ksadk/server/static/assets/addon-fit-DthTIhi3.js +1 -0
  227. ksadk/server/static/assets/apl-CnwPGSsG.js +1 -0
  228. ksadk/server/static/assets/arc-bj2rZnP5.js +1 -0
  229. ksadk/server/static/assets/architecture-7EHR7CIX-Cr6Xz1_c.js +1 -0
  230. ksadk/server/static/assets/architectureDiagram-3BPJPVTR-2u1ltDIj.js +36 -0
  231. ksadk/server/static/assets/asciiarmor-qTkVPQu6.js +1 -0
  232. ksadk/server/static/assets/asn1-Dr8qZg38.js +1 -0
  233. ksadk/server/static/assets/asterisk-Bja0s6e1.js +1 -0
  234. ksadk/server/static/assets/blockDiagram-GPEHLZMM-D6fvdK20.js +132 -0
  235. ksadk/server/static/assets/brainfuck-D5EjA2JK.js +1 -0
  236. ksadk/server/static/assets/c4Diagram-AAUBKEIU-BK82L5n5.js +10 -0
  237. ksadk/server/static/assets/channel-BSSOwFIb.js +1 -0
  238. ksadk/server/static/assets/chunk-2J33WTMH-DLVdkeyQ.js +1 -0
  239. ksadk/server/static/assets/chunk-4BX2VUAB-BbwsYcbW.js +1 -0
  240. ksadk/server/static/assets/chunk-55IACEB6-DOairxzw.js +1 -0
  241. ksadk/server/static/assets/chunk-727SXJPM-hCO487gs.js +206 -0
  242. ksadk/server/static/assets/chunk-AQP2D5EJ-XU8vDOuG.js +231 -0
  243. ksadk/server/static/assets/chunk-FMBD7UC4-PrapyfMu.js +15 -0
  244. ksadk/server/static/assets/chunk-ND2GUHAM-CboKhTZ3.js +1 -0
  245. ksadk/server/static/assets/chunk-QZHKN3VN-XXpdiwUL.js +1 -0
  246. ksadk/server/static/assets/classDiagram-4FO5ZUOK-C5HvGiyK.js +1 -0
  247. ksadk/server/static/assets/classDiagram-v2-Q7XG4LA2-C5HvGiyK.js +1 -0
  248. ksadk/server/static/assets/clike-DHH8Ad3s.js +1 -0
  249. ksadk/server/static/assets/clojure-BflJGmDX.js +1 -0
  250. ksadk/server/static/assets/cmake-CyVbuzPu.js +1 -0
  251. ksadk/server/static/assets/cobol-B_OZ4V-R.js +1 -0
  252. ksadk/server/static/assets/coffeescript-B2pKbFk8.js +1 -0
  253. ksadk/server/static/assets/commonlisp-CcllspGY.js +1 -0
  254. ksadk/server/static/assets/cose-bilkent-S5V4N54A-_N8bJ-EU.js +1 -0
  255. ksadk/server/static/assets/crystal-M5-qzICs.js +1 -0
  256. ksadk/server/static/assets/css-CYpP4FRV.js +1 -0
  257. ksadk/server/static/assets/cypher-p9eYesGn.js +1 -0
  258. ksadk/server/static/assets/cytoscape.esm-DelgaX4f.js +321 -0
  259. ksadk/server/static/assets/d-BhMjBjQP.js +1 -0
  260. ksadk/server/static/assets/dagre-BM42HDAG-FoDlo5J2.js +4 -0
  261. ksadk/server/static/assets/dagre-Bx709z4p.js +1 -0
  262. ksadk/server/static/assets/defaultLocale-C8Fc0cco.js +1 -0
  263. ksadk/server/static/assets/diagram-2AECGRRQ-BBp6ebBw.js +43 -0
  264. ksadk/server/static/assets/diagram-5GNKFQAL-CqOvG1PR.js +10 -0
  265. ksadk/server/static/assets/diagram-KO2AKTUF-O9T3t6ba.js +3 -0
  266. ksadk/server/static/assets/diagram-LMA3HP47-CGG8ekBO.js +24 -0
  267. ksadk/server/static/assets/diagram-OG6HWLK6-4BmH1EEg.js +24 -0
  268. ksadk/server/static/assets/diff-ChtP43wD.js +1 -0
  269. ksadk/server/static/assets/dist-6kSZvCZh.js +1 -0
  270. ksadk/server/static/assets/dist-B67uF2uK.js +1 -0
  271. ksadk/server/static/assets/dist-BMKM66B4.js +1 -0
  272. ksadk/server/static/assets/dist-BVzcWa6D.js +1 -0
  273. ksadk/server/static/assets/dist-Bk1l05Ni.js +1 -0
  274. ksadk/server/static/assets/dist-BkJjNih3.js +1 -0
  275. ksadk/server/static/assets/dist-BmuTWcm7.js +9 -0
  276. ksadk/server/static/assets/dist-C2DKRFVK.js +1 -0
  277. ksadk/server/static/assets/dist-CWiTDN_V.js +6 -0
  278. ksadk/server/static/assets/dist-CZ6C3x8B.js +23 -0
  279. ksadk/server/static/assets/dist-CiZHB6ZW.js +1 -0
  280. ksadk/server/static/assets/dist-Cp1_jKwf.js +1 -0
  281. ksadk/server/static/assets/dist-Cwhk4lwI.js +2 -0
  282. ksadk/server/static/assets/dist-D5JGcxBx.js +11 -0
  283. ksadk/server/static/assets/dist-D99wf6_X.js +1 -0
  284. ksadk/server/static/assets/dist-DCpZrjaK.js +1 -0
  285. ksadk/server/static/assets/dist-DI-oVAXw.js +1 -0
  286. ksadk/server/static/assets/dist-DLMjL01k.js +1 -0
  287. ksadk/server/static/assets/dist-DLeM1OCK.js +1 -0
  288. ksadk/server/static/assets/dist-DM0rEQPk.js +1 -0
  289. ksadk/server/static/assets/dist-DbaH3p5h.js +1 -0
  290. ksadk/server/static/assets/dist-S4klkK5W.js +1 -0
  291. ksadk/server/static/assets/dockerfile-BLkNEvjs.js +1 -0
  292. ksadk/server/static/assets/dtd-DTF72YNO.js +1 -0
  293. ksadk/server/static/assets/dylan-C6jEEEk-.js +1 -0
  294. ksadk/server/static/assets/ebnf-D4c0_ac3.js +1 -0
  295. ksadk/server/static/assets/ecl-BSZaIHnp.js +1 -0
  296. ksadk/server/static/assets/eiffel-BEjRio4Q.js +1 -0
  297. ksadk/server/static/assets/elm-Cshzl8qu.js +1 -0
  298. ksadk/server/static/assets/erDiagram-TEJ5UH35-oJhaci7S.js +85 -0
  299. ksadk/server/static/assets/erlang-DaB2Rkuy.js +1 -0
  300. ksadk/server/static/assets/eventmodeling-FCH6USID-CIgwHJLL.js +1 -0
  301. ksadk/server/static/assets/factor-D7LVTn2l.js +1 -0
  302. ksadk/server/static/assets/fcl-ClOhbFR7.js +1 -0
  303. ksadk/server/static/assets/flowDiagram-I6XJVG4X-DtTmUan-.js +162 -0
  304. ksadk/server/static/assets/forth-Cezjo90N.js +1 -0
  305. ksadk/server/static/assets/fortran-Bt6PBEDR.js +1 -0
  306. ksadk/server/static/assets/ganttDiagram-6RSMTGT7-BSsb_eij.js +292 -0
  307. ksadk/server/static/assets/gas-BHEdbvp9.js +1 -0
  308. ksadk/server/static/assets/gherkin-oBAE_ms0.js +1 -0
  309. ksadk/server/static/assets/gitGraph-WXDBUCRP-BVAJ7uo0.js +1 -0
  310. ksadk/server/static/assets/gitGraphDiagram-PVQCEYII-BR5s6Pws.js +106 -0
  311. ksadk/server/static/assets/graphlib-B8gBHxth.js +1 -0
  312. ksadk/server/static/assets/groovy-BC3IOsC8.js +1 -0
  313. ksadk/server/static/assets/haskell-BRsoo5mP.js +1 -0
  314. ksadk/server/static/assets/haxe-DIz0ZZqd.js +1 -0
  315. ksadk/server/static/assets/http-CLVgA2GD.js +1 -0
  316. ksadk/server/static/assets/idl-BUZw3wgd.js +1 -0
  317. ksadk/server/static/assets/index-BH7-pC0B.js +165 -0
  318. ksadk/server/static/assets/index-DAURbCsP.css +1 -0
  319. ksadk/server/static/assets/info-J43DQDTF-MT80V4ge.js +1 -0
  320. ksadk/server/static/assets/infoDiagram-5YYISTIA-DYPc5cvh.js +2 -0
  321. ksadk/server/static/assets/init-D6jRqBbL.js +1 -0
  322. ksadk/server/static/assets/ishikawaDiagram-YF4QCWOH-MoBdALDg.js +70 -0
  323. ksadk/server/static/assets/javascript-9Tg8ixDm.js +1 -0
  324. ksadk/server/static/assets/journeyDiagram-JHISSGLW-DgLiQT8l.js +139 -0
  325. ksadk/server/static/assets/julia-CQfgDRfP.js +1 -0
  326. ksadk/server/static/assets/kanban-definition-UN3LZRKU-CsFx112F.js +89 -0
  327. ksadk/server/static/assets/katex-DRsiwpM2.js +265 -0
  328. ksadk/server/static/assets/linear-TNRQ5Orv.js +1 -0
  329. ksadk/server/static/assets/livescript-BXxG0Yva.js +1 -0
  330. ksadk/server/static/assets/lua-CiA1ziua.js +1 -0
  331. ksadk/server/static/assets/mathematica-u8YMmbU0.js +1 -0
  332. ksadk/server/static/assets/mbox-BEMVcqjs.js +1 -0
  333. ksadk/server/static/assets/mermaid-parser.core-D2eMVOgo.js +161 -0
  334. ksadk/server/static/assets/mindmap-definition-RKZ34NQL-BtByYFhL.js +96 -0
  335. ksadk/server/static/assets/mirc-C9zpzAZU.js +1 -0
  336. ksadk/server/static/assets/mllike-B45xgp2S.js +1 -0
  337. ksadk/server/static/assets/modelica-CqHI_q-D.js +1 -0
  338. ksadk/server/static/assets/mscgen-qgSLujhx.js +1 -0
  339. ksadk/server/static/assets/mumps-CW_TBmxz.js +1 -0
  340. ksadk/server/static/assets/nginx-BMaDbqW3.js +1 -0
  341. ksadk/server/static/assets/nsis-AQ_alPln.js +1 -0
  342. ksadk/server/static/assets/ntriples-d28e9m0E.js +1 -0
  343. ksadk/server/static/assets/octave-D2Q8cUp1.js +1 -0
  344. ksadk/server/static/assets/ordinal-hYBb2elL.js +1 -0
  345. ksadk/server/static/assets/oz-BwTct_5T.js +1 -0
  346. ksadk/server/static/assets/packet-YPE3B663-BLKhbXZB.js +1 -0
  347. ksadk/server/static/assets/pascal-Dp_KdFgX.js +1 -0
  348. ksadk/server/static/assets/perl-CdEHsPfU.js +1 -0
  349. ksadk/server/static/assets/pie-LRSECV5Y-DFOikjSY.js +1 -0
  350. ksadk/server/static/assets/pieDiagram-4H26LBE5-DPnuCB8c.js +30 -0
  351. ksadk/server/static/assets/pig-AF4Hwhju.js +1 -0
  352. ksadk/server/static/assets/powershell-CzG71I4L.js +1 -0
  353. ksadk/server/static/assets/properties-C357ku5U.js +1 -0
  354. ksadk/server/static/assets/protobuf-D1ij_kNL.js +1 -0
  355. ksadk/server/static/assets/pug-Bugr-47h.js +1 -0
  356. ksadk/server/static/assets/puppet-B4hC2X4m.js +1 -0
  357. ksadk/server/static/assets/python-BqYw9LYJ.js +1 -0
  358. ksadk/server/static/assets/q-B9NhS7L_.js +1 -0
  359. ksadk/server/static/assets/quadrantDiagram-W4KKPZXB-miFpCPv4.js +7 -0
  360. ksadk/server/static/assets/r-DADKenSm.js +1 -0
  361. ksadk/server/static/assets/radar-GUYGQ44K-095b1Ikw.js +1 -0
  362. ksadk/server/static/assets/requirementDiagram-4Y6WPE33-mjB_yYkW.js +84 -0
  363. ksadk/server/static/assets/rpm-gpDK5sbt.js +1 -0
  364. ksadk/server/static/assets/ruby-DsYpTuWg.js +1 -0
  365. ksadk/server/static/assets/sankeyDiagram-5OEKKPKP-D7hSlZZZ.js +40 -0
  366. ksadk/server/static/assets/sas-C2OyD2Y6.js +1 -0
  367. ksadk/server/static/assets/scheme-CyDdOh7e.js +1 -0
  368. ksadk/server/static/assets/sequenceDiagram-3UESZ5HK-D9Cx6hC3.js +162 -0
  369. ksadk/server/static/assets/shell-Du5Qg9im.js +1 -0
  370. ksadk/server/static/assets/sieve-BAxa3IjF.js +1 -0
  371. ksadk/server/static/assets/simple-mode-DRpGK0lJ.js +1 -0
  372. ksadk/server/static/assets/smalltalk-BLp5-jwC.js +1 -0
  373. ksadk/server/static/assets/solr-BBopId9w.js +1 -0
  374. ksadk/server/static/assets/sparql-Dz-mlCAC.js +1 -0
  375. ksadk/server/static/assets/spreadsheet-CTIncYxj.js +1 -0
  376. ksadk/server/static/assets/sql-DcCJ9jop.js +1 -0
  377. ksadk/server/static/assets/stateDiagram-AJRCARHV-D_zrg47o.js +1 -0
  378. ksadk/server/static/assets/stateDiagram-v2-BHNVJYJU-J9kCb0nC.js +1 -0
  379. ksadk/server/static/assets/stex-sDrdk2BW.js +1 -0
  380. ksadk/server/static/assets/stylus-DLLZ8dgm.js +1 -0
  381. ksadk/server/static/assets/swift-DKB6_1j6.js +1 -0
  382. ksadk/server/static/assets/tcl-BGfruO1u.js +1 -0
  383. ksadk/server/static/assets/textile-DWBqthVk.js +1 -0
  384. ksadk/server/static/assets/tiddlywiki-VlUiK86J.js +1 -0
  385. ksadk/server/static/assets/tiki-CxVlf5KZ.js +1 -0
  386. ksadk/server/static/assets/timeline-definition-PNZ67QCA-CwSec0Wa.js +120 -0
  387. ksadk/server/static/assets/toml-LvoKBwCs.js +1 -0
  388. ksadk/server/static/assets/treeView-BLDUP644-yinfJEY6.js +1 -0
  389. ksadk/server/static/assets/treemap-LRROVOQU-DosUqN1Q.js +1 -0
  390. ksadk/server/static/assets/troff-C2dAgh7P.js +1 -0
  391. ksadk/server/static/assets/ttcn-BePYh-hG.js +1 -0
  392. ksadk/server/static/assets/ttcn-cfg-CY0aot7Q.js +1 -0
  393. ksadk/server/static/assets/turtle-BDLWE2cD.js +1 -0
  394. ksadk/server/static/assets/vb-BthdM_4N.js +1 -0
  395. ksadk/server/static/assets/vbscript-D9f6rSsU.js +1 -0
  396. ksadk/server/static/assets/velocity-CqftRsjg.js +1 -0
  397. ksadk/server/static/assets/vennDiagram-CIIHVFJN-agCVobiF.js +34 -0
  398. ksadk/server/static/assets/verilog-D-x6ne0Z.js +1 -0
  399. ksadk/server/static/assets/vhdl-CMrOq2q1.js +1 -0
  400. ksadk/server/static/assets/wardley-L42UT6IY-Bvp7-5uH.js +1 -0
  401. ksadk/server/static/assets/wardleyDiagram-YWT4CUSO-TmrlhWNt.js +78 -0
  402. ksadk/server/static/assets/webidl-D5jiJvOU.js +1 -0
  403. ksadk/server/static/assets/xquery-fj_R-kMw.js +1 -0
  404. ksadk/server/static/assets/xterm-DooSxjI5.js +36 -0
  405. ksadk/server/static/assets/xychartDiagram-2RQKCTM6-DV71V-ah.js +7 -0
  406. ksadk/server/static/assets/yacas-CXXgtw0p.js +1 -0
  407. ksadk/server/static/assets/z80-CL1naaMV.js +1 -0
  408. ksadk/server/static/favicon.svg +1 -0
  409. ksadk/server/static/icons.svg +24 -0
  410. ksadk/server/static/index.html +14 -0
  411. ksadk/server/terminal_sessions.py +551 -0
  412. ksadk/sessions/__init__.py +283 -0
  413. ksadk/sessions/base.py +354 -0
  414. ksadk/sessions/continuity.py +313 -0
  415. ksadk/sessions/errors.py +7 -0
  416. ksadk/sessions/in_memory.py +273 -0
  417. ksadk/sessions/local_service.py +949 -0
  418. ksadk/sessions/postgres_service.py +838 -0
  419. ksadk/sessions/sqlite_service.py +13 -0
  420. ksadk/skills/__init__.py +9 -0
  421. ksadk/skills/loader.py +46 -0
  422. ksadk/skills/models.py +120 -0
  423. ksadk/skills/package_store.py +104 -0
  424. ksadk/skills/runtime/__init__.py +17 -0
  425. ksadk/skills/runtime/agent.py +183 -0
  426. ksadk/skills/runtime/artifacts.py +39 -0
  427. ksadk/skills/runtime/backends/__init__.py +1 -0
  428. ksadk/skills/runtime/backends/disabled.py +8 -0
  429. ksadk/skills/runtime/backends/e2b.py +168 -0
  430. ksadk/skills/runtime/backends/local.py +95 -0
  431. ksadk/skills/runtime/base.py +103 -0
  432. ksadk/skills/runtime/executor.py +219 -0
  433. ksadk/skills/runtime/factory.py +37 -0
  434. ksadk/skills/runtime/loader.py +131 -0
  435. ksadk/skills/runtime/registry.py +150 -0
  436. ksadk/skills/runtime/request.py +67 -0
  437. ksadk/skills/service_client.py +239 -0
  438. ksadk/skills/service_env.py +58 -0
  439. ksadk/skills/tool_defs.py +221 -0
  440. ksadk/terminal_client.py +69 -0
  441. ksadk/terminal_exec_policy.py +229 -0
  442. ksadk/tools/__init__.py +17 -0
  443. ksadk/tools/gateway.py +230 -0
  444. ksadk/tools/result_budget.py +154 -0
  445. ksadk/toolsets/__init__.py +852 -0
  446. ksadk/toolsets/_langchain.py +11 -0
  447. ksadk/toolsets/platform.py +93 -0
  448. ksadk/toolsets/sandbox.py +310 -0
  449. ksadk/toolsets/skills.py +217 -0
  450. ksadk/toolsets/web.py +266 -0
  451. ksadk/toolsets/workspace.py +878 -0
  452. ksadk/toolsets/workspace_state.py +44 -0
  453. ksadk/tracing/__init__.py +37 -0
  454. ksadk/tracing/exporters/__init__.py +1 -0
  455. ksadk/tracing/exporters/inmemory_exporter.py +116 -0
  456. ksadk/tracing/exporters/langfuse_exporter.py +445 -0
  457. ksadk/tracing/setup.py +829 -0
  458. ksadk/tracing/span_utils.py +114 -0
  459. ksadk/tui/__init__.py +12 -0
  460. ksadk/tui/app.py +400 -0
  461. ksadk/tui/clipboard.py +100 -0
  462. ksadk/tui/widgets/__init__.py +22 -0
  463. ksadk/tui/widgets/assistant.py +89 -0
  464. ksadk/tui/widgets/base.py +54 -0
  465. ksadk/tui/widgets/chat_input.py +246 -0
  466. ksadk/tui/widgets/history.py +156 -0
  467. ksadk/tui/widgets/system.py +87 -0
  468. ksadk/tui/widgets/thinking.py +110 -0
  469. ksadk/tui/widgets/tool_call.py +161 -0
  470. ksadk/tui/widgets/user.py +37 -0
  471. ksadk/ui_config.py +168 -0
  472. ksadk/version.py +4 -0
  473. ksadk_runtime_common/__init__.py +20 -0
  474. ksadk_runtime_common/memory_backend/__init__.py +29 -0
  475. ksadk_runtime_common/memory_backend/manifest.py +79 -0
  476. ksadk_runtime_common/memory_backend/providers/__init__.py +6 -0
  477. ksadk_runtime_common/memory_backend/providers/lancedb.py +151 -0
  478. ksadk_runtime_common/memory_backend/providers/mem0.py +74 -0
  479. ksadk_runtime_common/memory_backend/registry.py +56 -0
  480. ksadk_runtime_common/memory_backend/render.py +71 -0
  481. ksadk_runtime_common/schemas/memory_backend_manifest.schema.json +148 -0
  482. ksadk_runtime_common/workspace_files/__init__.py +29 -0
  483. ksadk_runtime_common/workspace_files/bootstrap.py +56 -0
  484. ksadk_runtime_common/workspace_files/constants.py +9 -0
  485. ksadk_runtime_common/workspace_files/path_utils.py +71 -0
  486. ksadk_runtime_common/workspace_files/preview.py +96 -0
  487. ksadk_runtime_common/workspace_files/router.py +254 -0
  488. agentengine_sdk_python-0.6.2.dist-info/METADATA +0 -46
  489. agentengine_sdk_python-0.6.2.dist-info/RECORD +0 -4
  490. agentengine_sdk_python-0.6.2.dist-info/top_level.txt +0 -1
@@ -0,0 +1,13 @@
1
+ """Compatibility wrapper for the legacy sqlite-backed local session service path."""
2
+
3
+ from ksadk.sessions.local_service import (
4
+ LocalSessionService,
5
+ create_local_session_service,
6
+ resolve_local_session_dir,
7
+ )
8
+
9
+ __all__ = [
10
+ "LocalSessionService",
11
+ "create_local_session_service",
12
+ "resolve_local_session_dir",
13
+ ]
@@ -0,0 +1,9 @@
1
+ """Skill Center runtime consumption helpers."""
2
+
3
+ from ksadk.skills.models import ContentHash, SkillListResponse, SkillRef
4
+
5
+ __all__ = [
6
+ "ContentHash",
7
+ "SkillListResponse",
8
+ "SkillRef",
9
+ ]
ksadk/skills/loader.py ADDED
@@ -0,0 +1,46 @@
1
+ from __future__ import annotations
2
+
3
+ from dataclasses import dataclass
4
+ from pathlib import Path
5
+
6
+
7
+ @dataclass(frozen=True)
8
+ class LocalSkill:
9
+ name: str
10
+ description: str
11
+ root_dir: Path
12
+ skill_md: Path
13
+ body: str
14
+
15
+
16
+ def load_local_skill(root_dir: str | Path) -> LocalSkill:
17
+ root = Path(root_dir)
18
+ skill_md = root / "SKILL.md"
19
+ if not skill_md.exists():
20
+ raise FileNotFoundError(f"SKILL.md not found: {skill_md}")
21
+ content = skill_md.read_text(encoding="utf-8")
22
+ metadata, body = _parse_frontmatter(content)
23
+ return LocalSkill(
24
+ name=metadata.get("name") or root.name,
25
+ description=metadata.get("description") or "",
26
+ root_dir=root,
27
+ skill_md=skill_md,
28
+ body=body,
29
+ )
30
+
31
+
32
+ def _parse_frontmatter(content: str) -> tuple[dict[str, str], str]:
33
+ if not content.startswith("---\n"):
34
+ return {}, content
35
+ end = content.find("\n---\n", 4)
36
+ if end == -1:
37
+ return {}, content
38
+ raw_meta = content[4:end]
39
+ body = content[end + 5 :]
40
+ metadata: dict[str, str] = {}
41
+ for line in raw_meta.splitlines():
42
+ if ":" not in line:
43
+ continue
44
+ key, value = line.split(":", 1)
45
+ metadata[key.strip()] = value.strip().strip("\"'")
46
+ return metadata, body
ksadk/skills/models.py ADDED
@@ -0,0 +1,120 @@
1
+ from __future__ import annotations
2
+
3
+ from dataclasses import dataclass
4
+ from typing import Any
5
+
6
+
7
+ @dataclass(frozen=True)
8
+ class ContentHash:
9
+ algorithm: str
10
+ value: str
11
+
12
+ @classmethod
13
+ def parse(cls, raw: str | None) -> "ContentHash | None":
14
+ normalized = str(raw or "").strip()
15
+ if not normalized:
16
+ return None
17
+ if ":" not in normalized:
18
+ return cls("sha256", normalized.lower())
19
+ algorithm, value = normalized.split(":", 1)
20
+ return cls(algorithm.strip().lower(), value.strip().lower())
21
+
22
+ def render(self) -> str:
23
+ return f"{self.algorithm}:{self.value}"
24
+
25
+
26
+ @dataclass(frozen=True)
27
+ class SkillRef:
28
+ skill_id: str
29
+ version_id: str
30
+ version: str
31
+ name: str
32
+ description: str = ""
33
+ status: str = ""
34
+ content_hash: ContentHash | None = None
35
+ archive_uri: str = ""
36
+ aliases: tuple[str, ...] = ()
37
+ tags: tuple[str, ...] = ()
38
+ examples: tuple[str, ...] = ()
39
+ input_schema: dict[str, Any] | None = None
40
+ runtime_requirements: dict[str, Any] | None = None
41
+
42
+ @classmethod
43
+ def from_payload(cls, payload: dict[str, Any]) -> "SkillRef":
44
+ return cls(
45
+ skill_id=str(payload.get("SkillId") or payload.get("skill_id") or ""),
46
+ version_id=str(payload.get("VersionId") or payload.get("version_id") or ""),
47
+ version=str(payload.get("Version") or payload.get("version") or ""),
48
+ name=str(payload.get("Name") or payload.get("name") or ""),
49
+ description=str(payload.get("Description") or payload.get("description") or ""),
50
+ status=str(payload.get("Status") or payload.get("status") or ""),
51
+ content_hash=ContentHash.parse(payload.get("ContentHash") or payload.get("content_hash")),
52
+ archive_uri=str(payload.get("ArchiveUri") or payload.get("archive_uri") or ""),
53
+ aliases=_string_tuple(payload.get("Aliases") or payload.get("aliases")),
54
+ tags=_string_tuple(payload.get("Tags") or payload.get("tags")),
55
+ examples=_string_tuple(payload.get("Examples") or payload.get("examples")),
56
+ input_schema=_dict_or_none(payload.get("InputSchema") or payload.get("input_schema")),
57
+ runtime_requirements=_dict_or_none(
58
+ payload.get("RuntimeRequirements") or payload.get("runtime_requirements")
59
+ ),
60
+ )
61
+
62
+ @property
63
+ def cache_key(self) -> str:
64
+ identity = self.skill_id or self.name
65
+ version_key = self.version_id or self.version
66
+ if not version_key and self.content_hash:
67
+ version_key = self.content_hash.value
68
+ return "__".join(part.replace("/", "_").replace(":", "_") for part in (identity, version_key) if part)
69
+
70
+ @property
71
+ def is_active(self) -> bool:
72
+ return not self.status or self.status.lower() in {"active", "available", "enabled"}
73
+
74
+
75
+ @dataclass(frozen=True)
76
+ class SkillListResponse:
77
+ request_id: str
78
+ space_id: str
79
+ space_name: str
80
+ skills: list[SkillRef]
81
+ code: int = 0
82
+ message: str = ""
83
+
84
+ @classmethod
85
+ def from_payload(
86
+ cls,
87
+ payload: dict[str, Any],
88
+ *,
89
+ space_id: str = "",
90
+ space_name: str = "",
91
+ ) -> "SkillListResponse":
92
+ data = payload.get("Data") or payload.get("data") or {}
93
+ skills_payload = data.get("Skills") or data.get("skills") or data.get("Items") or data.get("items") or []
94
+ return cls(
95
+ code=int(payload.get("Code") or payload.get("code") or 0),
96
+ message=str(payload.get("Message") or payload.get("message") or ""),
97
+ request_id=str(payload.get("RequestId") or payload.get("request_id") or ""),
98
+ space_id=str(data.get("SkillSpaceId") or data.get("skill_space_id") or space_id),
99
+ space_name=str(data.get("SkillSpaceName") or data.get("skill_space_name") or space_name),
100
+ skills=[SkillRef.from_payload(item) for item in skills_payload if isinstance(item, dict)],
101
+ )
102
+
103
+ def active_skills(self) -> list[SkillRef]:
104
+ return [skill for skill in self.skills if skill.is_active]
105
+
106
+
107
+ def _string_tuple(raw: Any) -> tuple[str, ...]:
108
+ if raw is None:
109
+ return ()
110
+ if isinstance(raw, str):
111
+ values = raw.split(",")
112
+ elif isinstance(raw, (list, tuple, set)):
113
+ values = raw
114
+ else:
115
+ return ()
116
+ return tuple(value for value in (str(item).strip() for item in values) if value)
117
+
118
+
119
+ def _dict_or_none(raw: Any) -> dict[str, Any] | None:
120
+ return dict(raw) if isinstance(raw, dict) else None
@@ -0,0 +1,104 @@
1
+ from __future__ import annotations
2
+
3
+ import hashlib
4
+ import shutil
5
+ import zipfile
6
+ from dataclasses import dataclass
7
+ from pathlib import Path
8
+
9
+ from ksadk.skills.models import SkillRef
10
+
11
+
12
+ class SkillPackageError(RuntimeError):
13
+ pass
14
+
15
+
16
+ @dataclass(frozen=True)
17
+ class SkillPackage:
18
+ ref: SkillRef
19
+ archive_path: Path
20
+ extract_dir: Path
21
+ root_dir: Path
22
+ cache_hit: bool = False
23
+
24
+
25
+ class PackageStore:
26
+ def __init__(self, cache_dir: str | Path):
27
+ self.cache_dir = Path(cache_dir)
28
+ self.cache_dir.mkdir(parents=True, exist_ok=True)
29
+
30
+ def store_archive(self, ref: SkillRef, content: bytes) -> SkillPackage:
31
+ self._verify_hash(ref, content)
32
+ skill_dir = self._skill_dir(ref)
33
+ archive_path = skill_dir / "archive.zip"
34
+ extract_dir = skill_dir / "extracted"
35
+
36
+ if archive_path.exists() and extract_dir.exists():
37
+ cached = self.get_cached(ref)
38
+ if cached is not None:
39
+ return cached
40
+
41
+ if skill_dir.exists():
42
+ shutil.rmtree(skill_dir)
43
+ skill_dir.mkdir(parents=True, exist_ok=True)
44
+ archive_path.write_bytes(content)
45
+ extract_dir.mkdir(parents=True, exist_ok=True)
46
+ self._safe_extract(archive_path, extract_dir)
47
+
48
+ return SkillPackage(
49
+ ref=ref,
50
+ archive_path=archive_path,
51
+ extract_dir=extract_dir,
52
+ root_dir=self._find_skill_root(extract_dir),
53
+ cache_hit=False,
54
+ )
55
+
56
+ def get_cached(self, ref: SkillRef) -> SkillPackage | None:
57
+ skill_dir = self._skill_dir(ref)
58
+ archive_path = skill_dir / "archive.zip"
59
+ extract_dir = skill_dir / "extracted"
60
+ if not archive_path.exists() or not extract_dir.exists():
61
+ return None
62
+ content = archive_path.read_bytes()
63
+ try:
64
+ self._verify_hash(ref, content)
65
+ except SkillPackageError:
66
+ return None
67
+ return SkillPackage(
68
+ ref=ref,
69
+ archive_path=archive_path,
70
+ extract_dir=extract_dir,
71
+ root_dir=self._find_skill_root(extract_dir),
72
+ cache_hit=True,
73
+ )
74
+
75
+ def _skill_dir(self, ref: SkillRef) -> Path:
76
+ return self.cache_dir / (ref.cache_key or ref.name or "skill")
77
+
78
+ def _verify_hash(self, ref: SkillRef, content: bytes) -> None:
79
+ if not ref.content_hash:
80
+ return
81
+ if ref.content_hash.algorithm != "sha256":
82
+ raise SkillPackageError(f"Unsupported ContentHash algorithm: {ref.content_hash.algorithm}")
83
+ actual = hashlib.sha256(content).hexdigest()
84
+ if actual.lower() != ref.content_hash.value.lower():
85
+ raise SkillPackageError(
86
+ f"ContentHash mismatch for {ref.name}: expected {ref.content_hash.render()}, got sha256:{actual}"
87
+ )
88
+
89
+ def _safe_extract(self, archive_path: Path, extract_dir: Path) -> None:
90
+ base = extract_dir.resolve()
91
+ with zipfile.ZipFile(archive_path) as archive:
92
+ for member in archive.infolist():
93
+ target = (extract_dir / member.filename).resolve()
94
+ if not str(target).startswith(str(base) + "/") and target != base:
95
+ raise SkillPackageError(f"unsafe zip member: {member.filename}")
96
+ archive.extractall(extract_dir)
97
+
98
+ def _find_skill_root(self, extract_dir: Path) -> Path:
99
+ if (extract_dir / "SKILL.md").exists():
100
+ return extract_dir
101
+ candidates = sorted(path.parent for path in extract_dir.rglob("SKILL.md"))
102
+ if not candidates:
103
+ raise SkillPackageError(f"SKILL.md not found under {extract_dir}")
104
+ return candidates[0]
@@ -0,0 +1,17 @@
1
+ from ksadk.skills.runtime.base import (
2
+ SandboxInputFile,
3
+ SkillRuntimeBackend,
4
+ SkillRuntimeError,
5
+ SkillRuntimeResult,
6
+ )
7
+ from ksadk.skills.runtime.factory import create_skill_runtime_backend
8
+ from ksadk.skills.runtime.request import SkillWorkflowRequest
9
+
10
+ __all__ = [
11
+ "SandboxInputFile",
12
+ "SkillRuntimeBackend",
13
+ "SkillRuntimeError",
14
+ "SkillRuntimeResult",
15
+ "SkillWorkflowRequest",
16
+ "create_skill_runtime_backend",
17
+ ]
@@ -0,0 +1,183 @@
1
+ from __future__ import annotations
2
+
3
+ import json
4
+ import os
5
+ import subprocess
6
+ import sys
7
+ from dataclasses import asdict
8
+ from pathlib import Path
9
+
10
+ import httpx
11
+
12
+ from ksadk.skills.loader import LocalSkill
13
+ from ksadk.skills.models import SkillRef
14
+ from ksadk.skills.package_store import PackageStore
15
+ from ksadk.skills.runtime.base import normalize_skill_names
16
+ from ksadk.skills.runtime.executor import (
17
+ WorkflowExecution,
18
+ execute_workflow,
19
+ _can_run_web_artifacts_builder as _executor_can_run_web_artifacts_builder,
20
+ _run_command as _executor_run_command,
21
+ _run_web_artifacts_builder as _executor_run_web_artifacts_builder,
22
+ _runtime_timeout as _executor_runtime_timeout,
23
+ _safe_project_name as _executor_safe_project_name,
24
+ _tail as _executor_tail,
25
+ )
26
+ from ksadk.skills.runtime.request import (
27
+ SkillWorkflowRequest,
28
+ SkillWorkflowRequestError,
29
+ parse_workflow_request,
30
+ )
31
+ from ksadk.skills.runtime import loader as runtime_loader
32
+ from ksadk.skills.runtime import registry as runtime_registry
33
+
34
+
35
+ def _skill_space_ids() -> list[str]:
36
+ return runtime_registry.skill_space_ids()
37
+
38
+
39
+ def _user_skill_space_ids() -> list[str]:
40
+ return runtime_registry.user_skill_space_ids()
41
+
42
+
43
+ def _public_skill_space_ids() -> list[str]:
44
+ return runtime_registry.public_skill_space_ids()
45
+
46
+
47
+ def _parse_space_ids(*raw_values: str) -> list[str]:
48
+ return runtime_registry.parse_space_ids(*raw_values)
49
+
50
+
51
+ _SKILL_LOAD_WARNINGS: list[str] = []
52
+
53
+
54
+ def _load_skills(
55
+ *,
56
+ prompt: str = "",
57
+ skill_names: list[str] | None = None,
58
+ service_transport: httpx.BaseTransport | None = None,
59
+ ) -> list[LocalSkill]:
60
+ result = runtime_loader.load_skills(
61
+ prompt=prompt,
62
+ skill_names=skill_names,
63
+ service_transport=service_transport,
64
+ )
65
+ _SKILL_LOAD_WARNINGS.extend(result.warnings)
66
+ return result.skills
67
+
68
+
69
+ def _dedupe_skill_refs(skill_refs: list[SkillRef], *, seen_names: set[str]) -> list[SkillRef]:
70
+ return runtime_registry.dedupe_skill_refs(skill_refs, seen_names=seen_names)
71
+
72
+
73
+ def _select_public_skill_refs(skill_refs: list[SkillRef]) -> list[SkillRef]:
74
+ return runtime_registry.select_public_skill_refs(skill_refs)
75
+
76
+
77
+ def _allow_hash_mismatch() -> bool:
78
+ return runtime_loader._allow_hash_mismatch()
79
+
80
+
81
+ def _store_unverified_archive(store: PackageStore, skill: SkillRef, archive: bytes):
82
+ return runtime_loader._store_unverified_archive(store, skill, archive)
83
+
84
+
85
+ def _select_remote_skill_refs(
86
+ skill_refs: list[SkillRef],
87
+ prompt: str,
88
+ *,
89
+ skill_names: list[str] | None = None,
90
+ ) -> list[SkillRef]:
91
+ return runtime_registry.select_remote_skill_refs(skill_refs, prompt, skill_names=skill_names)
92
+
93
+
94
+ def _load_local_skills() -> list[LocalSkill]:
95
+ return runtime_loader.load_local_skills()
96
+
97
+
98
+ def run_agent(
99
+ argv: list[str] | None = None,
100
+ *,
101
+ service_transport: httpx.BaseTransport | None = None,
102
+ ) -> int:
103
+ _SKILL_LOAD_WARNINGS.clear()
104
+ args = list(argv if argv is not None else sys.argv[1:])
105
+ try:
106
+ request = _resolve_request(args)
107
+ except SkillWorkflowRequestError as exc:
108
+ execution = WorkflowExecution(status="failed", error=str(exc))
109
+ print("workflow=")
110
+ print(f"skill_spaces={','.join(_skill_space_ids())}")
111
+ print("loaded_skills=")
112
+ print(f"workflow_result={json.dumps(asdict(execution), ensure_ascii=False, sort_keys=True)}")
113
+ return 1
114
+
115
+ prompt = request.workflow_prompt
116
+ selected_skill_names = request.skill_names or _selected_skill_names()
117
+ loaded_skills = _load_skills(
118
+ prompt=prompt,
119
+ skill_names=selected_skill_names,
120
+ service_transport=service_transport,
121
+ )
122
+ execution = _execute_workflow(prompt, loaded_skills, selected_skill_names=selected_skill_names)
123
+ print(f"workflow={prompt}")
124
+ print(f"skill_spaces={','.join(_skill_space_ids())}")
125
+ print(f"loaded_skills={','.join(skill.name for skill in loaded_skills)}")
126
+ print(f"selected_skills={json.dumps(selected_skill_names, ensure_ascii=False, sort_keys=True)}")
127
+ if _SKILL_LOAD_WARNINGS:
128
+ print(f"skill_warnings={json.dumps(_SKILL_LOAD_WARNINGS, ensure_ascii=False, sort_keys=True)}")
129
+ print(f"workflow_result={json.dumps(asdict(execution), ensure_ascii=False, sort_keys=True)}")
130
+ return 0 if execution.status != "failed" else 1
131
+
132
+
133
+ def _resolve_request(args: list[str]) -> SkillWorkflowRequest:
134
+ return parse_workflow_request(args)
135
+
136
+
137
+ def _selected_skill_names() -> list[str]:
138
+ return normalize_skill_names(os.environ.get("KSADK_SELECTED_SKILL_NAMES", ""))
139
+
140
+
141
+ def _execute_workflow(
142
+ prompt: str,
143
+ skills: list[LocalSkill],
144
+ *,
145
+ selected_skill_names: list[str] | None = None,
146
+ ) -> WorkflowExecution:
147
+ return execute_workflow(prompt, skills, selected_skill_names=selected_skill_names)
148
+
149
+
150
+ def _can_run_web_artifacts_builder(skill: LocalSkill, prompt: str) -> bool:
151
+ return _executor_can_run_web_artifacts_builder(skill, prompt)
152
+
153
+
154
+ def _run_web_artifacts_builder(skill: LocalSkill) -> WorkflowExecution:
155
+ return _executor_run_web_artifacts_builder(skill)
156
+
157
+
158
+ def _run_command(args: list[str], *, cwd: Path, timeout: int) -> dict[str, object]:
159
+ return _executor_run_command(args, cwd=cwd, timeout=timeout)
160
+
161
+
162
+ def _runtime_timeout() -> int:
163
+ return _executor_runtime_timeout()
164
+
165
+
166
+ def _safe_project_name(raw: str) -> str:
167
+ return _executor_safe_project_name(raw)
168
+
169
+
170
+ def _tail(value: str | bytes, limit: int = 4000) -> str:
171
+ return _executor_tail(value, limit=limit)
172
+
173
+
174
+ def _resolve_prompt(args: list[str]) -> str:
175
+ return _resolve_request(args).workflow_prompt
176
+
177
+
178
+ def main(argv: list[str] | None = None) -> int:
179
+ return run_agent(argv)
180
+
181
+
182
+ if __name__ == "__main__":
183
+ raise SystemExit(main())
@@ -0,0 +1,39 @@
1
+ from __future__ import annotations
2
+
3
+ from pathlib import Path
4
+
5
+
6
+ def parse_artifact_lines(stdout: str) -> list[str]:
7
+ artifacts: list[str] = []
8
+ seen: set[str] = set()
9
+ for line in stdout.splitlines():
10
+ if not line.startswith("artifact="):
11
+ continue
12
+ value = line.split("=", 1)[1].strip()
13
+ if not value or value in seen:
14
+ continue
15
+ seen.add(value)
16
+ artifacts.append(value)
17
+ return artifacts
18
+
19
+
20
+ def collect_output_dir_artifacts(output_dir: Path) -> list[str]:
21
+ if not output_dir.is_dir():
22
+ return []
23
+ return [
24
+ str(path)
25
+ for path in sorted(output_dir.rglob("*"))
26
+ if path.is_file()
27
+ ]
28
+
29
+
30
+ def merge_artifacts(*groups: list[str]) -> list[str]:
31
+ merged: list[str] = []
32
+ seen: set[str] = set()
33
+ for group in groups:
34
+ for item in group:
35
+ if item in seen:
36
+ continue
37
+ seen.add(item)
38
+ merged.append(item)
39
+ return merged
@@ -0,0 +1 @@
1
+ """Skill Runtime backend implementations."""
@@ -0,0 +1,8 @@
1
+ from __future__ import annotations
2
+
3
+ from ksadk.skills.runtime.base import SkillRuntimeError, SkillRuntimeResult
4
+
5
+
6
+ class DisabledSkillRuntimeBackend:
7
+ def run_workflow(self, *args, **kwargs) -> SkillRuntimeResult:
8
+ raise SkillRuntimeError("Skill Runtime is disabled")