agentengine-sdk-python 0.7.0__py3-none-any.whl → 0.8.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 (371) hide show
  1. {agentengine_sdk_python-0.7.0.dist-info → agentengine_sdk_python-0.8.0.dist-info}/METADATA +36 -20
  2. agentengine_sdk_python-0.8.0.dist-info/RECORD +578 -0
  3. ksadk/a2a/__init__.py +178 -11
  4. ksadk/a2a/bootstrap.py +334 -0
  5. ksadk/a2a/card.py +120 -0
  6. ksadk/a2a/context_store.py +203 -0
  7. ksadk/a2a/control_plane.py +818 -0
  8. ksadk/a2a/credential.py +99 -0
  9. ksadk/a2a/event_adapter.py +149 -0
  10. ksadk/a2a/executor.py +406 -89
  11. ksadk/a2a/external_transport.py +516 -0
  12. ksadk/a2a/identity.py +304 -0
  13. ksadk/a2a/ids.py +22 -0
  14. ksadk/a2a/langgraph.py +285 -0
  15. ksadk/a2a/resume_store.py +201 -0
  16. ksadk/a2a/routes.py +105 -0
  17. ksadk/a2a/server.py +107 -60
  18. ksadk/a2a/space_client.py +1101 -0
  19. ksadk/a2a/task_adapter.py +423 -0
  20. ksadk/a2a/task_event_dispatcher.py +167 -0
  21. ksadk/a2a/task_event_outbox.py +326 -0
  22. ksadk/a2a/task_store.py +206 -0
  23. ksadk/a2ui/__init__.py +27 -0
  24. ksadk/a2ui/core.py +186 -0
  25. ksadk/a2ui/models.py +166 -0
  26. ksadk/a2ui/renderer.py +198 -0
  27. ksadk/agui/__init__.py +9 -0
  28. ksadk/agui/a2ui_projection.py +92 -0
  29. ksadk/agui/agent.py +857 -0
  30. ksadk/agui/config.py +86 -0
  31. ksadk/agui/routes.py +55 -0
  32. ksadk/api/client.py +233 -191
  33. ksadk/builders/__init__.py +2 -0
  34. ksadk/builders/base.py +16 -14
  35. ksadk/builders/code_builder.py +318 -236
  36. ksadk/builders/container_builder.py +187 -167
  37. ksadk/builders/framework_requirements.py +29 -11
  38. ksadk/builders/ks3_uploader.py +58 -27
  39. ksadk/builders/managed_runtime_builder.py +145 -0
  40. ksadk/builders/mcp_builder.py +91 -92
  41. ksadk/builders/requirements_utils.py +1 -5
  42. ksadk/cli/__init__.py +89 -171
  43. ksadk/cli/cmd_a2a.py +254 -70
  44. ksadk/cli/cmd_agent.py +19 -5
  45. ksadk/cli/cmd_build.py +158 -29
  46. ksadk/cli/cmd_completion.py +47 -35
  47. ksadk/cli/cmd_config.py +267 -198
  48. ksadk/cli/cmd_create.py +500 -720
  49. ksadk/cli/cmd_dashboard.py +120 -45
  50. ksadk/cli/cmd_deploy.py +117 -58
  51. ksadk/cli/cmd_destroy.py +44 -14
  52. ksadk/cli/cmd_files.py +63 -24
  53. ksadk/cli/cmd_hermes.py +168 -89
  54. ksadk/cli/cmd_invoke.py +184 -122
  55. ksadk/cli/cmd_launch.py +64 -28
  56. ksadk/cli/cmd_mcp.py +98 -64
  57. ksadk/cli/cmd_model.py +14 -5
  58. ksadk/cli/cmd_openclaw.py +483 -227
  59. ksadk/cli/cmd_replay.py +71 -0
  60. ksadk/cli/cmd_run.py +33 -10
  61. ksadk/cli/cmd_status.py +80 -31
  62. ksadk/cli/cmd_version.py +20 -13
  63. ksadk/cli/cmd_web.py +89 -13
  64. ksadk/cli/deploy_utils.py +20 -20
  65. ksadk/cli/dry_run.py +5 -3
  66. ksadk/cli/error_utils.py +37 -12
  67. ksadk/cli/global_options.py +1 -2
  68. ksadk/cli/local_runtime.py +1 -2
  69. ksadk/cli/model_catalog.py +6 -2
  70. ksadk/cli/network_options.py +34 -14
  71. ksadk/cli/resource_common.py +6 -2
  72. ksadk/cli/storage.py +0 -1
  73. ksadk/cli/ui.py +5 -3
  74. ksadk/cli/workflow_common.py +51 -17
  75. ksadk/codex/__init__.py +12 -0
  76. ksadk/codex/client.py +408 -0
  77. ksadk/codex/phase.py +143 -0
  78. ksadk/codex/runtime.py +449 -0
  79. ksadk/common/aicp_env.py +0 -1
  80. ksadk/common/auth.py +2 -2
  81. ksadk/common/constants.py +1 -3
  82. ksadk/common/llm_utils.py +17 -13
  83. ksadk/compat/__init__.py +5 -0
  84. ksadk/compat/adk_compat.py +200 -0
  85. ksadk/compat/copilotkit_a2ui.py +330 -0
  86. ksadk/configs/__init__.py +12 -12
  87. ksadk/configs/env_registry.py +500 -100
  88. ksadk/configs/global_config.py +2 -1
  89. ksadk/configs/settings.py +151 -124
  90. ksadk/conversations/__init__.py +7 -5
  91. ksadk/conversations/attachment_storage.py +16 -11
  92. ksadk/conversations/attachments.py +44 -36
  93. ksadk/conversations/compaction_pipeline.py +12 -12
  94. ksadk/conversations/compaction_prompt.py +9 -5
  95. ksadk/conversations/context.py +221 -6
  96. ksadk/conversations/message_projection.py +438 -51
  97. ksadk/conversations/model_context.py +12 -6
  98. ksadk/conversations/model_options.py +0 -1
  99. ksadk/conversations/normalize.py +20 -16
  100. ksadk/conversations/reasoning_markup.py +1 -1
  101. ksadk/conversations/runtime.py +339 -5255
  102. ksadk/conversations/runtime_compaction.py +333 -0
  103. ksadk/conversations/runtime_constants.py +27 -0
  104. ksadk/conversations/runtime_governance.py +185 -0
  105. ksadk/conversations/runtime_input.py +652 -0
  106. ksadk/conversations/runtime_invocation.py +395 -0
  107. ksadk/conversations/runtime_metadata.py +475 -0
  108. ksadk/conversations/runtime_observability.py +355 -0
  109. ksadk/conversations/runtime_payloads.py +272 -0
  110. ksadk/conversations/runtime_persistence.py +440 -0
  111. ksadk/conversations/runtime_preparation.py +418 -0
  112. ksadk/conversations/runtime_resume.py +816 -0
  113. ksadk/conversations/runtime_stream_events.py +902 -0
  114. ksadk/conversations/runtime_streaming.py +547 -0
  115. ksadk/conversations/semantic_summary.py +17 -5
  116. ksadk/conversations/session_title.py +6 -3
  117. ksadk/deployment/__init__.py +15 -16
  118. ksadk/deployment/agent_access.py +12 -23
  119. ksadk/deployment/base.py +51 -38
  120. ksadk/deployment/manager.py +63 -65
  121. ksadk/deployment/providers/serverless.py +309 -202
  122. ksadk/deployment/registry.py +38 -32
  123. ksadk/deployment/state.py +11 -11
  124. ksadk/deployment/ui_config.py +1 -1
  125. ksadk/detection/__init__.py +1 -1
  126. ksadk/detection/detector.py +146 -83
  127. ksadk/detection/mcp_detector.py +9 -6
  128. ksadk/events/__init__.py +25 -0
  129. ksadk/events/parser.py +191 -0
  130. ksadk/events/replay.py +37 -0
  131. ksadk/events/runtime_event.py +264 -0
  132. ksadk/events/store.py +317 -0
  133. ksadk/harness/__init__.py +34 -0
  134. ksadk/harness/app.py +278 -0
  135. ksadk/harness/config.py +181 -0
  136. ksadk/harness/reasoner.py +105 -0
  137. ksadk/harness/runner.py +211 -0
  138. ksadk/harness/sandbox.py +141 -0
  139. ksadk/harness/tools.py +222 -0
  140. ksadk/hermes_terminal.py +23 -12
  141. ksadk/identity/resolver.py +15 -9
  142. ksadk/ids.py +32 -0
  143. ksadk/knowledge_base/adk_tool.py +1 -1
  144. ksadk/knowledge_base/client.py +23 -29
  145. ksadk/managed_runtime.py +188 -0
  146. ksadk/markdown.py +5 -2
  147. ksadk/mcp_runtime/__init__.py +9 -6
  148. ksadk/memory/__init__.py +1 -1
  149. ksadk/memory/adk/__init__.py +2 -0
  150. ksadk/memory/adk/backends/base_ltm_backend.py +2 -6
  151. ksadk/memory/adk/backends/http_ltm_backend.py +13 -21
  152. ksadk/memory/adk/backends/inmemory_ltm_backend.py +7 -13
  153. ksadk/memory/adk/backends/sdk_ltm_backend.py +26 -33
  154. ksadk/memory/adk/long_term_memory.py +31 -35
  155. ksadk/memory/adk/resilient_session_service.py +4 -5
  156. ksadk/memory/adk/short_term_memory.py +12 -21
  157. ksadk/memory/adk_tool.py +3 -2
  158. ksadk/memory/backends/base.py +19 -19
  159. ksadk/memory/backends/memory.py +24 -25
  160. ksadk/memory/backends/redis.py +31 -30
  161. ksadk/memory/langchain_tool.py +2 -1
  162. ksadk/memory/manager.py +52 -47
  163. ksadk/memory/service.py +10 -8
  164. ksadk/model_policy.py +15 -7
  165. ksadk/model_proxy/__init__.py +51 -0
  166. ksadk/model_proxy/bootstrap.py +80 -0
  167. ksadk/model_proxy/cache.py +165 -0
  168. ksadk/model_proxy/config.py +45 -0
  169. ksadk/model_proxy/demo_webui.py +115 -0
  170. ksadk/model_proxy/detect.py +145 -0
  171. ksadk/model_proxy/gate.py +68 -0
  172. ksadk/model_proxy/namespace.py +173 -0
  173. ksadk/model_proxy/protocol_proxy.py +22 -0
  174. ksadk/model_proxy/server.py +300 -0
  175. ksadk/model_proxy/transform.py +691 -0
  176. ksadk/openclaw_gateway.py +29 -14
  177. ksadk/runners/adk_runner.py +345 -120
  178. ksadk/runners/base_runner.py +46 -29
  179. ksadk/runners/codex_runner.py +132 -0
  180. ksadk/runners/deepagents_runner.py +0 -1
  181. ksadk/runners/factory.py +17 -5
  182. ksadk/runners/langchain_runner.py +29 -742
  183. ksadk/runners/langgraph_runner.py +352 -90
  184. ksadk/runners/patch_langchain.py +16 -16
  185. ksadk/runners/remote_runner.py +134 -33
  186. ksadk/runners/usage_accumulator.py +1 -0
  187. ksadk/runners/utils/langfuse.py +3 -3
  188. ksadk/runners/utils/loader.py +7 -7
  189. ksadk/runtime/__init__.py +41 -0
  190. ksadk/runtime/adapter.py +345 -0
  191. ksadk/runtime/framework_adapters.py +124 -0
  192. ksadk/runtime/preprocessing.py +118 -0
  193. ksadk/runtime/runner_adapter.py +873 -0
  194. ksadk/runtime_context.py +18 -3
  195. ksadk/runtime_state.py +0 -1
  196. ksadk/sandbox/__init__.py +4 -1
  197. ksadk/sandbox/backends/__init__.py +4 -1
  198. ksadk/sandbox/backends/e2b.py +13 -5
  199. ksadk/sandbox/backends/local_process.py +11 -3
  200. ksadk/sandbox/base.py +10 -15
  201. ksadk/sandbox/factory.py +14 -4
  202. ksadk/sandbox/registry.py +57 -6
  203. ksadk/server/api_models.py +15 -5
  204. ksadk/server/app.py +455 -3885
  205. ksadk/server/composition.py +21 -0
  206. ksadk/server/factory.py +624 -0
  207. ksadk/server/routes/__init__.py +1 -0
  208. ksadk/server/routes/checkpoint_resolution.py +116 -0
  209. ksadk/server/routes/common.py +713 -0
  210. ksadk/server/routes/control.py +327 -0
  211. ksadk/server/routes/dependencies.py +98 -0
  212. ksadk/server/routes/misc.py +448 -0
  213. ksadk/server/routes/models.py +443 -0
  214. ksadk/server/routes/openai_compat.py +207 -0
  215. ksadk/server/routes/projection.py +795 -0
  216. ksadk/server/routes/routers.py +52 -0
  217. ksadk/server/routes/run.py +726 -0
  218. ksadk/server/routes/sessions.py +649 -0
  219. ksadk/server/routes/streaming.py +223 -0
  220. ksadk/server/routes/workspace.py +381 -0
  221. ksadk/server/static/assets/{ArtifactsPanel-D-SSn2ee.js → ArtifactsPanel-Cjnqt-8W.js} +1 -1
  222. ksadk/server/static/assets/CodeBlock-BqyqZfuB.js +9 -0
  223. ksadk/server/static/assets/MathMessageMarkdown-BpH7jiFM.js +8 -0
  224. ksadk/server/static/assets/MermaidBlock-DWuxETaJ.js +303 -0
  225. ksadk/server/static/assets/NativeTerminalPanel-MDTopWMO.js +1 -0
  226. ksadk/server/static/assets/{arc-BA13sHc9.js → arc-CFKwSk_B.js} +1 -1
  227. ksadk/server/static/assets/architecture-7EHR7CIX-CynqOWjZ.js +1 -0
  228. ksadk/server/static/assets/{architectureDiagram-3BPJPVTR-DzJzgVoL.js → architectureDiagram-3BPJPVTR-Dej8jX8c.js} +1 -1
  229. ksadk/server/static/assets/{blockDiagram-GPEHLZMM-UTdVcZhn.js → blockDiagram-GPEHLZMM-1F64jqvy.js} +1 -1
  230. ksadk/server/static/assets/{c4Diagram-AAUBKEIU-Dix0GD4m.js → c4Diagram-AAUBKEIU-9q7AUAKb.js} +1 -1
  231. ksadk/server/static/assets/channel-iUGv2N24.js +1 -0
  232. ksadk/server/static/assets/{chunk-2J33WTMH-C2JxuZ42.js → chunk-2J33WTMH-6qgwJm7Q.js} +1 -1
  233. ksadk/server/static/assets/{chunk-4BX2VUAB-Be57QPgD.js → chunk-4BX2VUAB-CsWIQRhc.js} +1 -1
  234. ksadk/server/static/assets/{chunk-55IACEB6-WjSuy4nv.js → chunk-55IACEB6-BK8paA20.js} +1 -1
  235. ksadk/server/static/assets/{chunk-727SXJPM-BOovP-b5.js → chunk-727SXJPM-B-JEhy7h.js} +1 -1
  236. ksadk/server/static/assets/{chunk-AQP2D5EJ-DOmZNmWj.js → chunk-AQP2D5EJ-DYBvMHAa.js} +1 -1
  237. ksadk/server/static/assets/{chunk-FMBD7UC4-DzwlodkU.js → chunk-FMBD7UC4-BGhvzDYt.js} +1 -1
  238. ksadk/server/static/assets/{chunk-ND2GUHAM-DMqAikEU.js → chunk-ND2GUHAM-D98vPd-E.js} +1 -1
  239. ksadk/server/static/assets/chunk-QZHKN3VN-YQIEXeF6.js +1 -0
  240. ksadk/server/static/assets/classDiagram-4FO5ZUOK-CDAUuoXK.js +1 -0
  241. ksadk/server/static/assets/classDiagram-v2-Q7XG4LA2-CDAUuoXK.js +1 -0
  242. ksadk/server/static/assets/{cose-bilkent-S5V4N54A-Zhy2GBnP.js → cose-bilkent-S5V4N54A-CX3yotHq.js} +1 -1
  243. ksadk/server/static/assets/{dagre-BM42HDAG-CbKrtIUz.js → dagre-BM42HDAG-C7TguAWo.js} +1 -1
  244. ksadk/server/static/assets/{diagram-2AECGRRQ-BRApgQRK.js → diagram-2AECGRRQ-Dd17_kws.js} +1 -1
  245. ksadk/server/static/assets/{diagram-5GNKFQAL-D0xbnDiK.js → diagram-5GNKFQAL-DVIClIil.js} +1 -1
  246. ksadk/server/static/assets/{diagram-KO2AKTUF-CVugVI9L.js → diagram-KO2AKTUF-Df_3gYQa.js} +1 -1
  247. ksadk/server/static/assets/{diagram-LMA3HP47-DozUGgee.js → diagram-LMA3HP47-BhLk6ZtA.js} +1 -1
  248. ksadk/server/static/assets/{diagram-OG6HWLK6-ZOYsKlru.js → diagram-OG6HWLK6-D4GNGvuu.js} +1 -1
  249. ksadk/server/static/assets/{dist-DmFaq_Iy.js → dist-6CVKuTAe.js} +1 -1
  250. ksadk/server/static/assets/{dist-8EEyGgDx.js → dist-BUHRxvDG.js} +1 -1
  251. ksadk/server/static/assets/{dist-B0NP_Z0z.js → dist-BZ9n9AjO.js} +1 -1
  252. ksadk/server/static/assets/{dist-DMezvBGJ.js → dist-BibcG1V9.js} +1 -1
  253. ksadk/server/static/assets/{dist-C3HIIaN5.js → dist-Bs-jQcRX.js} +1 -1
  254. ksadk/server/static/assets/{dist-BrCcQ47T.js → dist-C2xjE7cO.js} +1 -1
  255. ksadk/server/static/assets/{dist-Dp0k7bWI.js → dist-C7-3jInC.js} +1 -1
  256. ksadk/server/static/assets/{dist-D-xOD048.js → dist-C99THtIA.js} +1 -1
  257. ksadk/server/static/assets/{dist-CkEKJFtk.js → dist-CGcp2ex8.js} +1 -1
  258. ksadk/server/static/assets/{dist-DyOkZmze.js → dist-CVQRZjPu.js} +1 -1
  259. ksadk/server/static/assets/{dist-BssVmjIo.js → dist-Cf23NY4L.js} +1 -1
  260. ksadk/server/static/assets/{dist-BIJVDMuB.js → dist-CgF3fj15.js} +1 -1
  261. ksadk/server/static/assets/{dist-2hInLS_J.js → dist-Cwt7koer.js} +1 -1
  262. ksadk/server/static/assets/{dist-DyWsb78Q.js → dist-D82mtD2s.js} +1 -1
  263. ksadk/server/static/assets/{dist-D-JMdWPQ.js → dist-DF06ORQo.js} +1 -1
  264. ksadk/server/static/assets/{dist-BmlMPsCc.js → dist-DHn6nBzr.js} +1 -1
  265. ksadk/server/static/assets/{dist-gX6GOLKq.js → dist-Djgl2wVZ.js} +1 -1
  266. ksadk/server/static/assets/{dist-DpKtt4Bo.js → dist-DlzCRy0S.js} +1 -1
  267. ksadk/server/static/assets/{dist-8_SfK1IP.js → dist-DqNnNFrw.js} +1 -1
  268. ksadk/server/static/assets/{dist-D57wnGWd.js → dist-DyvYLMW9.js} +1 -1
  269. ksadk/server/static/assets/{dist-CPBtqRTW.js → dist-eoW6tZXA.js} +1 -1
  270. ksadk/server/static/assets/{dist-DL_NKc_z.js → dist-ivOya1LD.js} +1 -1
  271. ksadk/server/static/assets/{erDiagram-TEJ5UH35-Bk-9bgE5.js → erDiagram-TEJ5UH35-CnfRcY2M.js} +1 -1
  272. ksadk/server/static/assets/eventmodeling-FCH6USID-ChYO-ijM.js +1 -0
  273. ksadk/server/static/assets/{flowDiagram-I6XJVG4X-Dn9kZVuZ.js → flowDiagram-I6XJVG4X-DGaJjGNJ.js} +1 -1
  274. ksadk/server/static/assets/{ganttDiagram-6RSMTGT7-BGxXlJqm.js → ganttDiagram-6RSMTGT7-DpCoB2g9.js} +1 -1
  275. ksadk/server/static/assets/gitGraph-WXDBUCRP-BN_0Fk-j.js +1 -0
  276. ksadk/server/static/assets/{gitGraphDiagram-PVQCEYII-C7Q0X-wi.js → gitGraphDiagram-PVQCEYII-9IKVFBVT.js} +1 -1
  277. ksadk/server/static/assets/index-QSwCHuB8.js +177 -0
  278. ksadk/server/static/assets/index-jOPmTOZH.css +2 -0
  279. ksadk/server/static/assets/info-J43DQDTF-Cp6o3vId.js +1 -0
  280. ksadk/server/static/assets/{infoDiagram-5YYISTIA-BO_CSqq5.js → infoDiagram-5YYISTIA-CYIIsb8y.js} +1 -1
  281. ksadk/server/static/assets/{ishikawaDiagram-YF4QCWOH-eYLPLd46.js → ishikawaDiagram-YF4QCWOH-DLOHGvWw.js} +1 -1
  282. ksadk/server/static/assets/{journeyDiagram-JHISSGLW-De9geSb0.js → journeyDiagram-JHISSGLW-BIzKeejT.js} +1 -1
  283. ksadk/server/static/assets/{kanban-definition-UN3LZRKU-Cs80kQto.js → kanban-definition-UN3LZRKU-BWHoFSw2.js} +1 -1
  284. ksadk/server/static/assets/{katex-DSrCFD8n.js → katex-DATssjp1.js} +1 -1
  285. ksadk/server/static/assets/{linear-CN9sbKTF.js → linear-CvMBw9cA.js} +1 -1
  286. ksadk/server/static/assets/{mermaid-parser.core-DlgSBU8l.js → mermaid-parser.core-mGAcEwcq.js} +2 -2
  287. ksadk/server/static/assets/{mindmap-definition-RKZ34NQL-9afz7Oug.js → mindmap-definition-RKZ34NQL-CSAQxEAe.js} +1 -1
  288. ksadk/server/static/assets/packet-YPE3B663-wQzct3cT.js +1 -0
  289. ksadk/server/static/assets/pie-LRSECV5Y-BgTQiv-9.js +1 -0
  290. ksadk/server/static/assets/{pieDiagram-4H26LBE5-DPv_VstN.js → pieDiagram-4H26LBE5-By-ra07M.js} +1 -1
  291. ksadk/server/static/assets/{quadrantDiagram-W4KKPZXB-o77wZ1XK.js → quadrantDiagram-W4KKPZXB-CxIR4JXI.js} +1 -1
  292. ksadk/server/static/assets/radar-GUYGQ44K-BIq5fXsn.js +1 -0
  293. ksadk/server/static/assets/{requirementDiagram-4Y6WPE33-BYVw81VC.js → requirementDiagram-4Y6WPE33-DpW90iu3.js} +1 -1
  294. ksadk/server/static/assets/{sankeyDiagram-5OEKKPKP-B7nZFMKT.js → sankeyDiagram-5OEKKPKP-DpGa6EAV.js} +1 -1
  295. ksadk/server/static/assets/{sequenceDiagram-3UESZ5HK-BGRRrFw5.js → sequenceDiagram-3UESZ5HK-NTKNGGe5.js} +1 -1
  296. ksadk/server/static/assets/{stateDiagram-AJRCARHV-BUfHCoPs.js → stateDiagram-AJRCARHV-DGpd9yFG.js} +1 -1
  297. ksadk/server/static/assets/stateDiagram-v2-BHNVJYJU-B3o579IQ.js +1 -0
  298. ksadk/server/static/assets/{timeline-definition-PNZ67QCA-FbCTGrf9.js → timeline-definition-PNZ67QCA-jqoYs3jQ.js} +1 -1
  299. ksadk/server/static/assets/treeView-BLDUP644-Dqi-E0EM.js +1 -0
  300. ksadk/server/static/assets/treemap-LRROVOQU-ClQP9CJ9.js +1 -0
  301. ksadk/server/static/assets/{vennDiagram-CIIHVFJN-DWgwtPsJ.js → vennDiagram-CIIHVFJN-l3Z7-wbP.js} +1 -1
  302. ksadk/server/static/assets/wardley-L42UT6IY-8XLvnNIs.js +1 -0
  303. ksadk/server/static/assets/{wardleyDiagram-YWT4CUSO-2x8G-tTM.js → wardleyDiagram-YWT4CUSO-BR54GPmr.js} +1 -1
  304. ksadk/server/static/assets/{xychartDiagram-2RQKCTM6-Drma3AYl.js → xychartDiagram-2RQKCTM6-SkiH8GsK.js} +1 -1
  305. ksadk/server/static/index.html +2 -2
  306. ksadk/server/terminal_sessions.py +111 -58
  307. ksadk/sessions/__init__.py +69 -19
  308. ksadk/sessions/base.py +31 -11
  309. ksadk/sessions/continuity.py +2 -3
  310. ksadk/sessions/in_memory.py +46 -2
  311. ksadk/sessions/local_service.py +148 -17
  312. ksadk/sessions/postgres_service.py +143 -25
  313. ksadk/sessions/resilient.py +36 -8
  314. ksadk/skills/models.py +17 -5
  315. ksadk/skills/package_store.py +5 -2
  316. ksadk/skills/runtime/agent.py +20 -5
  317. ksadk/skills/runtime/artifacts.py +1 -5
  318. ksadk/skills/runtime/backends/e2b.py +10 -4
  319. ksadk/skills/runtime/backends/local.py +15 -3
  320. ksadk/skills/runtime/base.py +1 -2
  321. ksadk/skills/runtime/executor.py +10 -3
  322. ksadk/skills/runtime/factory.py +4 -2
  323. ksadk/skills/runtime/loader.py +1 -2
  324. ksadk/skills/runtime/registry.py +15 -10
  325. ksadk/skills/runtime/request.py +3 -1
  326. ksadk/skills/service_client.py +38 -17
  327. ksadk/skills/tool_defs.py +15 -10
  328. ksadk/terminal_exec_policy.py +3 -4
  329. ksadk/tools/gateway.py +92 -15
  330. ksadk/tools/result_budget.py +12 -4
  331. ksadk/toolsets/__init__.py +134 -36
  332. ksadk/toolsets/platform.py +21 -5
  333. ksadk/toolsets/sandbox.py +82 -16
  334. ksadk/toolsets/skills.py +200 -39
  335. ksadk/toolsets/web.py +123 -26
  336. ksadk/toolsets/workspace.py +212 -101
  337. ksadk/tracing/exporters/inmemory_exporter.py +62 -51
  338. ksadk/tracing/exporters/langfuse_exporter.py +91 -76
  339. ksadk/tracing/setup.py +69 -53
  340. ksadk/tracing/span_utils.py +5 -2
  341. ksadk/tui/loop.py +78 -30
  342. ksadk/tui/stream_render.py +1 -0
  343. ksadk/ui_config.py +5 -3
  344. ksadk/version.py +1 -1
  345. ksadk_runtime_common/schemas/runtime_event_v1.json +95 -0
  346. agentengine_sdk_python-0.7.0.dist-info/RECORD +0 -482
  347. ksadk/server/static/assets/CodeBlock-P16VOLYi.js +0 -9
  348. ksadk/server/static/assets/MathMessageMarkdown-CdGiQWHR.js +0 -8
  349. ksadk/server/static/assets/MermaidBlock-IOcal8cm.js +0 -303
  350. ksadk/server/static/assets/NativeTerminalPanel-DGSDWsei.js +0 -1
  351. ksadk/server/static/assets/architecture-7EHR7CIX-BvUlsA6l.js +0 -1
  352. ksadk/server/static/assets/channel-CTuydARX.js +0 -1
  353. ksadk/server/static/assets/chunk-QZHKN3VN-BnCydivS.js +0 -1
  354. ksadk/server/static/assets/classDiagram-4FO5ZUOK-BNHg45Be.js +0 -1
  355. ksadk/server/static/assets/classDiagram-v2-Q7XG4LA2-BNHg45Be.js +0 -1
  356. ksadk/server/static/assets/eventmodeling-FCH6USID-DsAgWnlf.js +0 -1
  357. ksadk/server/static/assets/gitGraph-WXDBUCRP-BIao9Yjg.js +0 -1
  358. ksadk/server/static/assets/index-C00Lwg3L.js +0 -165
  359. ksadk/server/static/assets/index-DAURbCsP.css +0 -1
  360. ksadk/server/static/assets/info-J43DQDTF-CyipqGxU.js +0 -1
  361. ksadk/server/static/assets/packet-YPE3B663-CGkyRxlg.js +0 -1
  362. ksadk/server/static/assets/pie-LRSECV5Y-M0uWAf4n.js +0 -1
  363. ksadk/server/static/assets/radar-GUYGQ44K-Bdbm24-x.js +0 -1
  364. ksadk/server/static/assets/stateDiagram-v2-BHNVJYJU-8xBN_gLM.js +0 -1
  365. ksadk/server/static/assets/treeView-BLDUP644-npMo0ak1.js +0 -1
  366. ksadk/server/static/assets/treemap-LRROVOQU-CHdzrrdo.js +0 -1
  367. ksadk/server/static/assets/wardley-L42UT6IY-BEQz7wyy.js +0 -1
  368. {agentengine_sdk_python-0.7.0.dist-info → agentengine_sdk_python-0.8.0.dist-info}/WHEEL +0 -0
  369. {agentengine_sdk_python-0.7.0.dist-info → agentengine_sdk_python-0.8.0.dist-info}/entry_points.txt +0 -0
  370. {agentengine_sdk_python-0.7.0.dist-info → agentengine_sdk_python-0.8.0.dist-info}/licenses/LICENSE +0 -0
  371. {agentengine_sdk_python-0.7.0.dist-info → agentengine_sdk_python-0.8.0.dist-info}/top_level.txt +0 -0
@@ -18,7 +18,8 @@ class BaseRunner(ABC):
18
18
  def __init__(self, detection_result: Any, project_dir: str):
19
19
  self.detection_result = detection_result
20
20
  self.project_dir = project_dir
21
- self._agent = None
21
+ # Framework runners populate this with SDK-specific agent/graph objects.
22
+ self._agent: Any = None
22
23
 
23
24
  @abstractmethod
24
25
  def load_agent(self) -> None:
@@ -38,7 +39,7 @@ class BaseRunner(ABC):
38
39
  pass
39
40
 
40
41
  @abstractmethod
41
- async def stream(self, input_data: Dict[str, Any]) -> AsyncIterator[Dict[str, Any]]:
42
+ def stream(self, input_data: Dict[str, Any]) -> AsyncIterator[Dict[str, Any]]:
42
43
  """流式调用 Agent
43
44
 
44
45
  Args:
@@ -47,7 +48,7 @@ class BaseRunner(ABC):
47
48
  Yields:
48
49
  流式输出的数据块
49
50
  """
50
- pass
51
+ raise NotImplementedError
51
52
 
52
53
  @staticmethod
53
54
  def normalize_requested_model(model: Optional[str]) -> Optional[str]:
@@ -108,23 +109,28 @@ class BaseRunner(ABC):
108
109
  if cancel_supported
109
110
  else ["unsupported"]
110
111
  ),
111
- "Reason": ""
112
- if cancel_supported
113
- else "runner does not implement cooperative cancellation",
112
+ "Reason": (
113
+ "" if cancel_supported else "runner does not implement cooperative cancellation"
114
+ ),
114
115
  },
115
116
  "Checkpoint": checkpoint,
116
117
  "ResumeRun": {
117
118
  "Supported": checkpoint_supported,
118
119
  "ResumeMode": str(checkpoint.get("ResumeMode") or "none"),
119
- "Reason": checkpoint_reason
120
- if not checkpoint_supported
121
- else str(checkpoint.get("ResumeReason") or ""),
120
+ "Reason": (
121
+ checkpoint_reason
122
+ if not checkpoint_supported
123
+ else str(checkpoint.get("ResumeReason") or "")
124
+ ),
122
125
  },
123
126
  "SessionContinuity": {
124
127
  "Supported": True,
125
128
  "Type": "semantic_replay",
126
129
  "Level": "semantic",
127
- "Reason": "conversation transcript can be replayed, but exact runtime checkpoint resume is not available",
130
+ "Reason": (
131
+ "conversation transcript can be replayed, but exact runtime checkpoint "
132
+ "resume is not available"
133
+ ),
128
134
  },
129
135
  }
130
136
 
@@ -193,15 +199,15 @@ class BaseRunner(ABC):
193
199
  if isinstance(usage_metadata, Mapping):
194
200
  input_tokens = cls._int_usage_value(usage_metadata.get("input_tokens"))
195
201
  output_tokens = cls._int_usage_value(usage_metadata.get("output_tokens"))
196
- input_token_details = usage_metadata.get("input_token_details")
197
- output_token_details = usage_metadata.get("output_token_details")
198
- if not any(
199
- key in usage_metadata
200
- for key in ("input_tokens", "output_tokens", "total_tokens")
201
- ) and not (
202
- isinstance(input_token_details, Mapping) and input_token_details
203
- ) and not (
204
- isinstance(output_token_details, Mapping) and output_token_details
202
+ usage_input_details = usage_metadata.get("input_token_details")
203
+ usage_output_details = usage_metadata.get("output_token_details")
204
+ if (
205
+ not any(
206
+ key in usage_metadata
207
+ for key in ("input_tokens", "output_tokens", "total_tokens")
208
+ )
209
+ and not (isinstance(usage_input_details, Mapping) and usage_input_details)
210
+ and not (isinstance(usage_output_details, Mapping) and usage_output_details)
205
211
  ):
206
212
  return {}
207
213
  return {
@@ -211,10 +217,10 @@ class BaseRunner(ABC):
211
217
  usage_metadata.get("total_tokens") or (input_tokens + output_tokens)
212
218
  ),
213
219
  "input_token_details": (
214
- dict(input_token_details) if isinstance(input_token_details, Mapping) else {}
220
+ dict(usage_input_details) if isinstance(usage_input_details, Mapping) else {}
215
221
  ),
216
222
  "output_token_details": (
217
- dict(output_token_details) if isinstance(output_token_details, Mapping) else {}
223
+ dict(usage_output_details) if isinstance(usage_output_details, Mapping) else {}
218
224
  ),
219
225
  }
220
226
 
@@ -237,10 +243,14 @@ class BaseRunner(ABC):
237
243
  reasoning_tokens = completion_details.get("reasoning_tokens")
238
244
  if reasoning_tokens is not None:
239
245
  output_token_details["reasoning"] = cls._int_usage_value(reasoning_tokens)
240
- if not any(
241
- key in token_usage
242
- for key in ("prompt_tokens", "completion_tokens", "total_tokens")
243
- ) and not input_token_details and not output_token_details:
246
+ if (
247
+ not any(
248
+ key in token_usage
249
+ for key in ("prompt_tokens", "completion_tokens", "total_tokens")
250
+ )
251
+ and not input_token_details
252
+ and not output_token_details
253
+ ):
244
254
  return {}
245
255
  return {
246
256
  "input_tokens": input_tokens,
@@ -295,11 +305,18 @@ class BaseRunner(ABC):
295
305
  usage = cls._message_usage(result)
296
306
  return usage if usage else {}
297
307
 
298
-
299
308
  def run_server(self, port: int = 8000) -> None:
300
- """启动 HTTP Server"""
301
- from ksadk.server import app, set_runner
309
+ """启动 HTTP Server(per-app factory,不再依赖 set_runner 全局态)。"""
302
310
  import uvicorn
303
311
 
304
- set_runner(self)
312
+ from ksadk.agui.config import default_agui_config
313
+ from ksadk.server.composition import configure_runtime_app
314
+ from ksadk.server.factory import RuntimeAppConfig, create_runtime_app
315
+
316
+ # goal-01/16:经 create_runtime_app 注入 runner(per-app state),替代全局 ``app`` +
317
+ # ``set_runner`` 全局态。普通 runtime app 装配全部 route group。
318
+ app = create_runtime_app(
319
+ RuntimeAppConfig(runner=self, agui=default_agui_config(self)),
320
+ configure_runtime_app,
321
+ )
305
322
  uvicorn.run(app, host="0.0.0.0", port=port)
@@ -0,0 +1,132 @@
1
+ """CodexRunner — 把 codex runtime(CodexRuntime,RuntimeAdapter)适配成 BaseRunner。
2
+
3
+ 让 codex 项目能像 ADK/LangGraph 一样经 `ksadk web` 起 hosted UI:``create_runner``
4
+ 返回本 runner → ``run_server`` 走 ``create_runtime_app`` → /run_sse 与 AGUI 都走它。
5
+
6
+ 适配方向:``CodexRuntime.stream`` 产出 ``RuntimeEvent``(TEXT_DELTA/RUN_COMPLETED/…),
7
+ 本 runner 反向投射成 ADK-style 扁平 dict(``/run_sse`` 期望的 type 词表
8
+ text/thinking/interrupt/final),与 ``ADKRunner.stream`` 产出形状一致。AGUI 路径经
9
+ ``RunnerRuntimeAdapter`` 把本 runner 包回 ``RuntimeAdapter``(``_chunk_to_event`` 已覆盖
10
+ 全部 type),无需新代码。
11
+
12
+ codex thread 是 ephemeral(``ksadk/codex/client.py`` ``ephemeral=True``),不支持 resume。
13
+ """
14
+
15
+ from __future__ import annotations
16
+
17
+ import asyncio
18
+ import uuid
19
+ from typing import Any, AsyncIterator, Dict
20
+
21
+ from ksadk.codex.client import AsyncCodexClient
22
+ from ksadk.codex.runtime import CodexRuntime
23
+ from ksadk.events.runtime_event import EventType
24
+ from ksadk.runners.base_runner import BaseRunner
25
+ from ksadk.runtime.adapter import RunHandle, StartRequest
26
+
27
+
28
+ class CodexRunner(BaseRunner):
29
+ """codex 的 BaseRunner 适配。"""
30
+
31
+ def __init__(self, detection_result: Any, project_dir: str) -> None:
32
+ super().__init__(detection_result, project_dir)
33
+ # opt-in 代理(env KSADK_CODEX_USE_PROXY=1)在 client 构造时自动注入 provider
34
+ self._client = AsyncCodexClient()
35
+ self._runtime = CodexRuntime(self._client, sandbox_read_only=True)
36
+ # invocation_id -> RunHandle(stream 期间持有,cancel 用)
37
+ self._handles: dict[str, RunHandle] = {}
38
+
39
+ def load_agent(self) -> None:
40
+ # codex 无 root_agent 变量;agent 逻辑由 prompt 承载,无需加载
41
+ self._agent = True
42
+
43
+ async def invoke(self, input_data: Dict[str, Any]) -> Dict[str, Any]:
44
+ output = ""
45
+ usage: dict[str, Any] = {}
46
+ async for chunk in self.stream(input_data):
47
+ if chunk.get("type") == "final":
48
+ output = chunk.get("output", "") or output
49
+ if chunk.get("usage"):
50
+ usage = chunk["usage"]
51
+ return {"output": output, "usage": usage}
52
+
53
+ def stream(self, input_data: Dict[str, Any]) -> AsyncIterator[Dict[str, Any]]:
54
+ return self._stream(input_data)
55
+
56
+ async def _stream(self, input_data: Dict[str, Any]) -> AsyncIterator[Dict[str, Any]]:
57
+ prompt = str(input_data.get("input") or "")
58
+ session_id = str(input_data.get("session_id") or uuid.uuid4().hex)
59
+ # model:本轮请求优先,fallback 到 yaml(raw_config);prompt:codex 的 base_instructions
60
+ raw = getattr(self.detection_result, "raw_config", None) or {}
61
+ model = input_data.get("model") or raw.get("model")
62
+ base_instructions = raw.get("prompt")
63
+ if model:
64
+ self.sync_process_model_env(str(model))
65
+ config: Dict[str, Any] = {"sandbox_read_only": True}
66
+ if base_instructions:
67
+ config["base_instructions"] = str(base_instructions)
68
+ request = StartRequest(
69
+ input=prompt,
70
+ user_id="local",
71
+ session_id=session_id,
72
+ model=str(model) if model else None,
73
+ config=config,
74
+ )
75
+ handle = await self._runtime.start(request)
76
+ self._handles[handle.run_id] = handle
77
+ try:
78
+ accumulated = "" # TEXT_DELTA 累积(流式增量,前端打字机用)
79
+ completed_text = "" # 最后一次 TEXT_COMPLETED 的全文(权威,防 delta 丢包)
80
+ final_sent = False
81
+ async for event in self._runtime.stream(handle):
82
+ et = event.event_type
83
+ payload = event.payload or {}
84
+ if et == EventType.TEXT_DELTA:
85
+ phase = event.phase or "commentary"
86
+ delta = payload.get("text", "")
87
+ # final_answer 的 delta 当 text 流(前端打字机);commentary 当 thinking
88
+ if phase == "final_answer":
89
+ accumulated += delta
90
+ yield {"type": "text", "delta": delta}
91
+ else:
92
+ yield {"type": "thinking", "delta": delta}
93
+ elif et == EventType.TEXT_COMPLETED:
94
+ # 收尾全文:权威,记下来给 final 用;不当 delta 发(前端已通过 delta 收到)。
95
+ # 只收 final_answer(真正的回复);commentary completed 是思考收尾,忽略。
96
+ phase = event.phase or "final_answer"
97
+ if phase == "final_answer":
98
+ completed_text = payload.get("text", "")
99
+ elif et == EventType.RUN_COMPLETED:
100
+ final_sent = True
101
+ # final.output 优先用 completed 全文,fallback accumulated(delta 流)
102
+ yield {"type": "final", "output": completed_text or accumulated}
103
+ elif et == EventType.RUN_FAILED:
104
+ final_sent = True
105
+ yield {"type": "final", "output": completed_text or accumulated,
106
+ "error": payload.get("error", "codex run failed")}
107
+ elif et == EventType.RUN_INTERRUPTED:
108
+ yield {"type": "interrupt", "reason": "interrupted"}
109
+ elif et == EventType.RUN_CANCELED:
110
+ yield {"type": "interrupt", "reason": "canceled"}
111
+ if not final_sent:
112
+ yield {"type": "final", "output": completed_text or accumulated}
113
+ finally:
114
+ self._handles.pop(handle.run_id, None)
115
+
116
+ def request_cancel(self, invocation_id: str) -> str:
117
+ handle = self._handles.get(invocation_id)
118
+ if handle is None:
119
+ return "not_running"
120
+ result: Any
121
+ try:
122
+ result = asyncio.run(self._runtime.cancel(handle))
123
+ except RuntimeError:
124
+ # 已有事件循环(异步上下文):用独立线程跑 cancel,避免嵌套 asyncio.run
125
+ result = asyncio.run(asyncio.to_thread(self._runtime.cancel, handle))
126
+ return str(getattr(result, "value", result))
127
+
128
+ async def close(self) -> None:
129
+ try:
130
+ await self._client.close()
131
+ except Exception: # noqa: BLE001
132
+ pass
@@ -10,4 +10,3 @@ from ksadk.runners.langgraph_runner import LangGraphRunner
10
10
 
11
11
  class DeepAgentsRunner(LangGraphRunner):
12
12
  """DeepAgents 运行时(复用 LangGraphRunner)"""
13
-
ksadk/runners/factory.py CHANGED
@@ -6,6 +6,7 @@ import importlib
6
6
  import sys
7
7
  from pathlib import Path
8
8
  from typing import TYPE_CHECKING
9
+
9
10
  from ksadk.detection import DetectionResult, FrameworkType
10
11
  from ksadk.runners.base_runner import BaseRunner
11
12
 
@@ -15,11 +16,11 @@ if TYPE_CHECKING:
15
16
 
16
17
  def create_runner(detection_result: DetectionResult, project_dir: str) -> BaseRunner:
17
18
  """根据检测结果创建对应的 Runner
18
-
19
+
19
20
  Args:
20
21
  detection_result: 框架检测结果
21
22
  project_dir: 项目目录
22
-
23
+
23
24
  Returns:
24
25
  对应框架的 Runner 实例
25
26
  """
@@ -55,19 +56,30 @@ def create_runner(detection_result: DetectionResult, project_dir: str) -> BaseRu
55
56
 
56
57
  if detection_result.type == FrameworkType.ADK:
57
58
  from ksadk.runners.adk_runner import ADKRunner
59
+
58
60
  return ADKRunner(detection_result, project_dir)
59
-
61
+
60
62
  elif detection_result.type == FrameworkType.LANGGRAPH:
61
63
  from ksadk.runners.langgraph_runner import LangGraphRunner
64
+
62
65
  return LangGraphRunner(detection_result, project_dir)
63
-
66
+
64
67
  elif detection_result.type == FrameworkType.LANGCHAIN:
68
+ # 新 LangChain(create_agent)= LangGraph 图,经 LangChainRunner 薄壳复用
69
+ # LangGraphRunner(deepagents 同款);legacy 链在 load_agent 时被薄壳拒绝并给迁移指引。
65
70
  from ksadk.runners.langchain_runner import LangChainRunner
71
+
66
72
  return LangChainRunner(detection_result, project_dir)
67
73
 
68
74
  elif detection_result.type == FrameworkType.DEEPAGENTS:
69
75
  from ksadk.runners.deepagents_runner import DeepAgentsRunner
76
+
70
77
  return DeepAgentsRunner(detection_result, project_dir)
71
-
78
+
79
+ elif detection_result.type == FrameworkType.CODEX:
80
+ from ksadk.runners.codex_runner import CodexRunner
81
+
82
+ return CodexRunner(detection_result, project_dir)
83
+
72
84
  else:
73
85
  raise ValueError(f"不支持的框架类型: {detection_result.type}")