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,38 @@
1
+ """usage 累加工具:逐字段求和(input/output/total + details 子键)。
2
+
3
+ 用于 runner 本轮内多次 LLM 调用的 usage 累积。input_tokens 各 provider 均含 cache
4
+ (Gemini prompt_token_count 含 cached_content_token_count;OpenAI prompt_tokens 含
5
+ cached_tokens;Anthropic 经 langchain_anthropic 转换后 input_tokens 含 cache_read+
6
+ cache_creation),直接相加不重复;input_token_details 键名不统一(cached/cache_read/
7
+ cache_creation),逐键求和作诊断明细。
8
+ """
9
+ from __future__ import annotations
10
+
11
+ from typing import Any
12
+
13
+ _MAIN_FIELDS = ("input_tokens", "output_tokens", "total_tokens")
14
+ _DETAIL_FIELDS = ("input_token_details", "output_token_details")
15
+
16
+
17
+ def accumulate_usage(acc: dict[str, Any], delta: dict[str, Any]) -> dict[str, Any]:
18
+ """把 delta 累加进 acc,返回新 dict(不改 acc)。"""
19
+ if not delta:
20
+ return dict(acc)
21
+ result = dict(acc)
22
+ for key in _MAIN_FIELDS:
23
+ result[key] = int(result.get(key) or 0) + int(delta.get(key) or 0)
24
+ for detail_key in _DETAIL_FIELDS:
25
+ delta_details = delta.get(detail_key)
26
+ if not isinstance(delta_details, dict):
27
+ continue
28
+ merged = dict(result.get(detail_key) or {})
29
+ for k, v in delta_details.items():
30
+ if v is None:
31
+ continue
32
+ try:
33
+ merged[k] = int(merged.get(k) or 0) + int(v)
34
+ except (TypeError, ValueError):
35
+ continue
36
+ if merged:
37
+ result[detail_key] = merged
38
+ return result
@@ -0,0 +1,19 @@
1
+ """
2
+ Runner 公共工具模块
3
+ """
4
+
5
+ from ksadk.runners.utils.langfuse import (
6
+ get_langfuse_callback,
7
+ get_langfuse_callbacks,
8
+ get_langfuse_metadata,
9
+ prepare_trace_metadata,
10
+ )
11
+ from ksadk.runners.utils.loader import load_agent_module
12
+
13
+ __all__ = [
14
+ "get_langfuse_callback",
15
+ "get_langfuse_callbacks",
16
+ "get_langfuse_metadata",
17
+ "prepare_trace_metadata",
18
+ "load_agent_module",
19
+ ]
@@ -0,0 +1,230 @@
1
+ """
2
+ Langfuse 集成工具
3
+
4
+ 提供 LangChain/LangGraph Runner 共用的 Langfuse 集成功能
5
+ """
6
+
7
+ import logging
8
+ import os
9
+ from typing import Any
10
+
11
+ logger = logging.getLogger(__name__)
12
+
13
+ # 全局缓存
14
+ _langfuse_callback = None
15
+ _cloud_monitor_langfuse_callback = None
16
+
17
+
18
+ def _env_flag_enabled(name: str) -> bool:
19
+ return os.getenv(name, "").strip().lower() in {"1", "true", "yes", "on"}
20
+
21
+
22
+ def _env_flag_disabled(name: str) -> bool:
23
+ return os.getenv(name, "").strip().lower() in {"0", "false", "no", "off", "disabled"}
24
+
25
+
26
+ def _first_env(*names: str) -> str:
27
+ for name in names:
28
+ value = os.getenv(name, "").strip()
29
+ if value:
30
+ return value
31
+ return ""
32
+
33
+
34
+ def _create_langfuse_callback(
35
+ *,
36
+ label: str,
37
+ public_key: str,
38
+ secret_key: str = "",
39
+ host: str = "",
40
+ ) -> Any | None:
41
+ try:
42
+ from langfuse import Langfuse
43
+ from langfuse.langchain import CallbackHandler
44
+ from opentelemetry.sdk.resources import Resource
45
+ from opentelemetry.sdk.trace import TracerProvider
46
+
47
+ resource_attributes = {}
48
+ service_name = os.getenv("OTEL_SERVICE_NAME", "").strip()
49
+ if service_name:
50
+ resource_attributes["service.name"] = service_name
51
+ tracer_provider = TracerProvider(resource=Resource.create(resource_attributes))
52
+ Langfuse(
53
+ public_key=public_key,
54
+ secret_key=secret_key or None,
55
+ base_url=host or None,
56
+ tracer_provider=tracer_provider,
57
+ )
58
+ try:
59
+ handler = CallbackHandler(public_key=public_key)
60
+ except TypeError:
61
+ handler = CallbackHandler()
62
+ logger.info(
63
+ "%s Langfuse CallbackHandler initialized "
64
+ "(host: %s public_key_present=%s secret_key_present=%s isolated_provider=True)",
65
+ label,
66
+ host or "default",
67
+ bool(public_key),
68
+ bool(secret_key),
69
+ )
70
+ return handler
71
+ except ImportError as e:
72
+ logger.warning("Langfuse not installed for %s callback: %s", label, e)
73
+ return None
74
+ except Exception as e:
75
+ logger.error("Failed to create %s Langfuse CallbackHandler: %s", label, e)
76
+ return None
77
+
78
+
79
+ def get_langfuse_callback():
80
+ """获取 Langfuse CallbackHandler
81
+
82
+ Returns:
83
+ CallbackHandler 实例,未配置时返回 None
84
+ """
85
+ global _langfuse_callback
86
+
87
+ if not _env_flag_enabled("LANGFUSE_USE_CALLBACK"):
88
+ logger.debug("Langfuse CallbackHandler disabled; using OTLP direct exporter by default")
89
+ return None
90
+
91
+ if _langfuse_callback is not None:
92
+ return _langfuse_callback
93
+
94
+ # 检查是否配置了 Langfuse
95
+ public_key = os.getenv("LANGFUSE_PUBLIC_KEY", "").strip()
96
+ if not public_key:
97
+ return None
98
+
99
+ _langfuse_callback = _create_langfuse_callback(
100
+ label="Primary",
101
+ public_key=public_key,
102
+ secret_key=os.getenv("LANGFUSE_SECRET_KEY", "").strip(),
103
+ host=_first_env("LANGFUSE_HOST", "LANGFUSE_BASE_URL"),
104
+ )
105
+ return _langfuse_callback
106
+
107
+
108
+ def get_cloud_monitor_langfuse_callback():
109
+ """获取云监控 Langfuse SDK CallbackHandler。"""
110
+ global _cloud_monitor_langfuse_callback
111
+
112
+ if not _env_flag_enabled("LANGFUSE_USE_CALLBACK"):
113
+ return None
114
+ if _env_flag_disabled("CLOUD_MONITOR_LANGFUSE_ENABLED"):
115
+ logger.info(
116
+ "CloudMonitor Langfuse CallbackHandler disabled by CLOUD_MONITOR_LANGFUSE_ENABLED"
117
+ )
118
+ return None
119
+ if _cloud_monitor_langfuse_callback is not None:
120
+ return _cloud_monitor_langfuse_callback
121
+
122
+ public_key = os.getenv("CLOUD_MONITOR_LANGFUSE_PUBLIC_KEY", "").strip()
123
+ secret_key = os.getenv("CLOUD_MONITOR_LANGFUSE_SECRET_KEY", "").strip()
124
+ host = _first_env("CLOUD_MONITOR_LANGFUSE_HOST", "CLOUD_MONITOR_OTLP_ENDPOINT")
125
+ if not public_key and not secret_key and not host:
126
+ return None
127
+ if not public_key or not secret_key or not host:
128
+ logger.warning(
129
+ "CloudMonitor Langfuse CallbackHandler skipped: public_key_present=%s "
130
+ "secret_key_present=%s host_present=%s",
131
+ bool(public_key),
132
+ bool(secret_key),
133
+ bool(host),
134
+ )
135
+ return None
136
+
137
+ _cloud_monitor_langfuse_callback = _create_langfuse_callback(
138
+ label="CloudMonitor",
139
+ public_key=public_key,
140
+ secret_key=secret_key,
141
+ host=host,
142
+ )
143
+ return _cloud_monitor_langfuse_callback
144
+
145
+
146
+ def get_langfuse_callbacks() -> list[Any]:
147
+ """获取所有 Langfuse CallbackHandler,原平台和云监控各自独立。"""
148
+ callbacks = []
149
+ primary = get_langfuse_callback()
150
+ if primary:
151
+ callbacks.append(primary)
152
+
153
+ cloud_monitor = get_cloud_monitor_langfuse_callback()
154
+ if cloud_monitor:
155
+ callbacks.append(cloud_monitor)
156
+
157
+ return callbacks
158
+
159
+
160
+ def get_langfuse_metadata(session_id: str = None) -> dict:
161
+ """获取 Langfuse 的 metadata 字典
162
+
163
+ 通过 metadata 字段传递 trace 属性:
164
+ - langfuse_user_id
165
+ - langfuse_session_id
166
+ - langfuse_tags
167
+
168
+ Args:
169
+ session_id: 会话 ID (可选)
170
+
171
+ Returns:
172
+ 包含 Langfuse 属性的 metadata 字典
173
+ """
174
+ metadata = {}
175
+
176
+ if session_id:
177
+ metadata["langfuse_session_id"] = session_id
178
+
179
+ try:
180
+ from ksadk.configs import settings
181
+
182
+ agent_config = settings.agent
183
+
184
+ if agent_config.user_id:
185
+ metadata["langfuse_user_id"] = agent_config.user_id
186
+
187
+ if not session_id and agent_config.session_id:
188
+ metadata["langfuse_session_id"] = agent_config.session_id
189
+
190
+ tags = list(agent_config.tags or [])
191
+ if agent_config.environment and agent_config.environment not in tags:
192
+ tags.append(agent_config.environment)
193
+ if agent_config.agent_name and agent_config.agent_name not in tags:
194
+ tags.append(agent_config.agent_name)
195
+ if tags:
196
+ metadata["langfuse_tags"] = tags
197
+
198
+ except (ImportError, Exception):
199
+ pass
200
+
201
+ return metadata
202
+
203
+
204
+ def prepare_trace_metadata(session_id: str = None) -> tuple:
205
+ """准备 Trace 元数据
206
+
207
+ Returns:
208
+ (user_id, tags, version, agent_name) 元组
209
+ """
210
+ user_id = None
211
+ tags = []
212
+ version = None
213
+ agent_name = None
214
+
215
+ try:
216
+ from ksadk.configs import settings
217
+
218
+ agent_config = settings.agent
219
+ user_id = agent_config.user_id
220
+ tags = list(agent_config.tags or [])
221
+ version = agent_config.version
222
+ agent_name = agent_config.agent_name
223
+
224
+ if agent_config.environment and agent_config.environment not in tags:
225
+ tags.append(agent_config.environment)
226
+
227
+ except (ImportError, Exception):
228
+ pass
229
+
230
+ return user_id, tags, version, agent_name
@@ -0,0 +1,62 @@
1
+ """
2
+ 模块加载工具
3
+
4
+ 提供通用的 Agent 模块加载逻辑
5
+ """
6
+
7
+ import importlib
8
+ import sys
9
+ from pathlib import Path
10
+ from typing import Any
11
+
12
+
13
+ def load_agent_module(
14
+ project_dir: str,
15
+ entry_point: str,
16
+ agent_variable: str,
17
+ *,
18
+ force_reload: bool = False,
19
+ ) -> Any:
20
+ """加载 Agent 模块
21
+
22
+ Args:
23
+ project_dir: 项目目录
24
+ entry_point: 入口文件 (e.g., "agent.py")
25
+ agent_variable: Agent 变量名 (e.g., "root_agent", "graph")
26
+
27
+ Returns:
28
+ 加载的 Agent 对象
29
+
30
+ Raises:
31
+ ImportError: 模块导入失败
32
+ AttributeError: 未找到 Agent 变量
33
+ """
34
+ project_path = Path(project_dir).resolve()
35
+
36
+ # 添加项目目录到 Python 路径
37
+ if str(project_path) not in sys.path:
38
+ sys.path.insert(0, str(project_path))
39
+ src_path = project_path / "src"
40
+ if src_path.is_dir() and str(src_path) not in sys.path:
41
+ sys.path.insert(0, str(src_path))
42
+
43
+ # 确定模块名
44
+ if entry_point.endswith(".py"):
45
+ module_name = entry_point[:-3]
46
+ else:
47
+ module_name = entry_point
48
+
49
+ # 路径转换为模块路径
50
+ module_name = module_name.replace("/", ".").replace("\\", ".")
51
+
52
+ try:
53
+ if force_reload and module_name in sys.modules:
54
+ module = importlib.reload(sys.modules[module_name])
55
+ else:
56
+ module = importlib.import_module(module_name)
57
+ agent = getattr(module, agent_variable)
58
+ return agent, module
59
+ except ImportError as e:
60
+ raise ImportError(f"无法导入模块 {module_name}: {e}")
61
+ except AttributeError:
62
+ raise AttributeError(f"模块 {module_name} 中未找到 {agent_variable}")
@@ -0,0 +1,166 @@
1
+ from __future__ import annotations
2
+
3
+ from contextlib import contextmanager
4
+ from contextvars import ContextVar, Token
5
+ from dataclasses import dataclass
6
+ from typing import Any, Iterator
7
+
8
+
9
+ @dataclass
10
+ class PlatformInvocationContext:
11
+ agent_id: str
12
+ user_id: str
13
+ session_id: str
14
+ history: list[dict[str, Any]]
15
+ input_content: list[dict[str, Any]]
16
+ input_messages: list[dict[str, Any]]
17
+ input_parts: list[dict[str, Any]]
18
+ attachments: list[dict[str, Any]]
19
+ attachment_results: list[dict[str, Any]]
20
+ current_attachments: list[dict[str, Any]]
21
+ current_attachment_results: list[dict[str, Any]]
22
+ has_current_files: bool
23
+ runner_type: str
24
+ account_id: str = ""
25
+ model: str | None = None
26
+ model_options: dict[str, Any] | None = None
27
+ kb_context: dict[str, Any] | None = None
28
+ memory_context: dict[str, Any] | None = None
29
+
30
+ def to_payload(self) -> dict[str, Any]:
31
+ return {
32
+ "agent_id": self.agent_id,
33
+ "user_id": self.user_id,
34
+ "account_id": self.account_id,
35
+ "session_id": self.session_id,
36
+ "history": list(self.history or []),
37
+ "input_content": list(self.input_content or []),
38
+ "input_messages": list(self.input_messages or []),
39
+ "input_parts": list(self.input_parts or []),
40
+ "attachments": list(self.attachments or []),
41
+ "attachment_results": list(self.attachment_results or []),
42
+ "current_attachments": list(self.current_attachments or []),
43
+ "current_attachment_results": list(self.current_attachment_results or []),
44
+ "has_current_files": self.has_current_files,
45
+ "runner_type": self.runner_type,
46
+ "model": self.model,
47
+ "model_options": dict(self.model_options or {}),
48
+ }
49
+
50
+
51
+ @dataclass
52
+ class ToolExecutionContext:
53
+ session_id: str = ""
54
+ run_id: str = ""
55
+ invocation_id: str = ""
56
+
57
+
58
+ _CURRENT_PLATFORM_INVOCATION_CONTEXT: ContextVar[PlatformInvocationContext | None] = ContextVar(
59
+ "ksadk_platform_invocation_context",
60
+ default=None,
61
+ )
62
+
63
+ _CURRENT_TOOL_EXECUTION_CONTEXT: ContextVar[ToolExecutionContext | None] = ContextVar(
64
+ "ksadk_tool_execution_context",
65
+ default=None,
66
+ )
67
+
68
+
69
+ def get_current_invocation_context() -> PlatformInvocationContext | None:
70
+ return _CURRENT_PLATFORM_INVOCATION_CONTEXT.get()
71
+
72
+
73
+ def get_current_invocation_context_or_default() -> PlatformInvocationContext:
74
+ context = get_current_invocation_context()
75
+ if context is not None:
76
+ return context
77
+ return PlatformInvocationContext(
78
+ agent_id="",
79
+ user_id="",
80
+ account_id="",
81
+ session_id="",
82
+ history=[],
83
+ input_content=[],
84
+ input_messages=[],
85
+ input_parts=[],
86
+ attachments=[],
87
+ attachment_results=[],
88
+ current_attachments=[],
89
+ current_attachment_results=[],
90
+ has_current_files=False,
91
+ runner_type="",
92
+ )
93
+
94
+
95
+ def get_current_tool_execution_context_or_default() -> ToolExecutionContext:
96
+ context = _CURRENT_TOOL_EXECUTION_CONTEXT.get()
97
+ if context is not None:
98
+ return context
99
+ return ToolExecutionContext()
100
+
101
+
102
+ def get_current_user_id(default: str = "") -> str:
103
+ context = get_current_invocation_context()
104
+ if context is None:
105
+ return default
106
+ return str(context.user_id or default)
107
+
108
+
109
+ def get_current_account_id(default: str = "") -> str:
110
+ context = get_current_invocation_context()
111
+ if context is None:
112
+ return default
113
+ return str(context.account_id or default)
114
+
115
+
116
+ def set_current_invocation_context(
117
+ context: PlatformInvocationContext | None,
118
+ ) -> Token[PlatformInvocationContext | None]:
119
+ return _CURRENT_PLATFORM_INVOCATION_CONTEXT.set(context)
120
+
121
+
122
+ def reset_current_invocation_context(
123
+ token: Token[PlatformInvocationContext | None],
124
+ ) -> None:
125
+ _CURRENT_PLATFORM_INVOCATION_CONTEXT.reset(token)
126
+
127
+
128
+ def set_current_tool_execution_context(
129
+ context: ToolExecutionContext | None,
130
+ ) -> Token[ToolExecutionContext | None]:
131
+ return _CURRENT_TOOL_EXECUTION_CONTEXT.set(context)
132
+
133
+
134
+ def reset_current_tool_execution_context(
135
+ token: Token[ToolExecutionContext | None],
136
+ ) -> None:
137
+ _CURRENT_TOOL_EXECUTION_CONTEXT.reset(token)
138
+
139
+
140
+ @contextmanager
141
+ def platform_invocation_scope(
142
+ context: PlatformInvocationContext | None,
143
+ ) -> Iterator[PlatformInvocationContext | None]:
144
+ token = set_current_invocation_context(context)
145
+ try:
146
+ yield context
147
+ finally:
148
+ reset_current_invocation_context(token)
149
+
150
+
151
+ @contextmanager
152
+ def tool_execution_scope(
153
+ session_id: str,
154
+ run_id: str | None = None,
155
+ invocation_id: str | None = None,
156
+ ) -> Iterator[ToolExecutionContext]:
157
+ context = ToolExecutionContext(
158
+ session_id=str(session_id or ""),
159
+ run_id=str(run_id or ""),
160
+ invocation_id=str(invocation_id or ""),
161
+ )
162
+ token = set_current_tool_execution_context(context)
163
+ try:
164
+ yield context
165
+ finally:
166
+ reset_current_tool_execution_context(token)
ksadk/runtime_state.py ADDED
@@ -0,0 +1,25 @@
1
+ """Runtime-safe helpers for reading local AgentEngine state."""
2
+
3
+ from __future__ import annotations
4
+
5
+ from pathlib import Path
6
+ from typing import Any
7
+
8
+ import yaml
9
+
10
+
11
+ STATE_FILE_NAME = ".agentengine.state"
12
+
13
+
14
+ def load_state(project_dir: Path) -> dict[str, Any]:
15
+ """Load .agentengine.state without importing deployment-only modules."""
16
+
17
+ state_file = Path(project_dir) / STATE_FILE_NAME
18
+ if not state_file.exists():
19
+ return {}
20
+
21
+ try:
22
+ with state_file.open("r", encoding="utf-8") as handle:
23
+ return yaml.safe_load(handle) or {}
24
+ except Exception:
25
+ return {}
@@ -0,0 +1,28 @@
1
+ from ksadk.sandbox.backends.e2b import E2BSandboxBackend, E2BSandboxSession
2
+ from ksadk.sandbox.backends.local_process import LocalProcessSandboxBackend, LocalProcessSandboxSession
3
+ from ksadk.sandbox.base import (
4
+ SandboxBackend,
5
+ SandboxCommandResult,
6
+ SandboxError,
7
+ SandboxInputFile,
8
+ SandboxSession,
9
+ SandboxSpec,
10
+ SandboxType,
11
+ )
12
+ from ksadk.sandbox.factory import create_sandbox_backend, sandbox_spec_from_env
13
+
14
+ __all__ = [
15
+ "E2BSandboxBackend",
16
+ "E2BSandboxSession",
17
+ "LocalProcessSandboxBackend",
18
+ "LocalProcessSandboxSession",
19
+ "SandboxBackend",
20
+ "SandboxCommandResult",
21
+ "SandboxError",
22
+ "SandboxInputFile",
23
+ "SandboxSession",
24
+ "SandboxSpec",
25
+ "SandboxType",
26
+ "create_sandbox_backend",
27
+ "sandbox_spec_from_env",
28
+ ]
@@ -0,0 +1,9 @@
1
+ from ksadk.sandbox.backends.e2b import E2BSandboxBackend, E2BSandboxSession
2
+ from ksadk.sandbox.backends.local_process import LocalProcessSandboxBackend, LocalProcessSandboxSession
3
+
4
+ __all__ = [
5
+ "E2BSandboxBackend",
6
+ "E2BSandboxSession",
7
+ "LocalProcessSandboxBackend",
8
+ "LocalProcessSandboxSession",
9
+ ]