agentengine-sdk-python 0.8.0__py3-none-any.whl → 0.8.2__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 (494) hide show
  1. {agentengine_sdk_python-0.8.0.dist-info → agentengine_sdk_python-0.8.2.dist-info}/METADATA +43 -7
  2. agentengine_sdk_python-0.8.2.dist-info/RECORD +778 -0
  3. {agentengine_sdk_python-0.8.0.dist-info → agentengine_sdk_python-0.8.2.dist-info}/WHEEL +1 -1
  4. ksadk/a2a/__init__.py +2 -0
  5. ksadk/a2a/_space_client_events.py +381 -0
  6. ksadk/a2a/bootstrap.py +0 -2
  7. ksadk/a2a/card.py +6 -111
  8. ksadk/a2a/control_plane.py +239 -1
  9. ksadk/a2a/event_adapter.py +156 -64
  10. ksadk/a2a/executor.py +195 -172
  11. ksadk/a2a/routes.py +12 -5
  12. ksadk/a2a/server.py +1 -8
  13. ksadk/a2a/service_env.py +33 -0
  14. ksadk/a2a/space_client.py +43 -349
  15. ksadk/a2a_card.py +101 -0
  16. ksadk/a2ui/core.py +222 -53
  17. ksadk/agui/_agent_helpers.py +243 -0
  18. ksadk/agui/a2ui_projection.py +12 -5
  19. ksadk/agui/agent.py +474 -275
  20. ksadk/agui/config.py +11 -5
  21. ksadk/agui/routes.py +7 -15
  22. ksadk/api/client.py +530 -40
  23. ksadk/api/environment.py +27 -0
  24. ksadk/builders/code_builder.py +352 -53
  25. ksadk/builders/container_builder.py +71 -44
  26. ksadk/builders/framework_requirements.py +2 -1
  27. ksadk/builders/ks3_uploader.py +2 -2
  28. ksadk/builders/managed_runtime_builder.py +60 -28
  29. ksadk/cli/__init__.py +25 -0
  30. ksadk/cli/cmd_a2a.py +18 -31
  31. ksadk/cli/cmd_create.py +13 -26
  32. ksadk/cli/cmd_dashboard.py +15 -1
  33. ksadk/cli/cmd_deploy.py +28 -3
  34. ksadk/cli/cmd_eval.py +443 -0
  35. ksadk/cli/cmd_evalset.py +284 -0
  36. ksadk/cli/cmd_files.py +5 -1
  37. ksadk/cli/cmd_hermes.py +137 -163
  38. ksadk/cli/cmd_invoke.py +28 -38
  39. ksadk/cli/cmd_launch.py +12 -0
  40. ksadk/cli/cmd_managed_runtime.py +95 -0
  41. ksadk/cli/cmd_observe.py +85 -0
  42. ksadk/cli/cmd_openclaw.py +85 -479
  43. ksadk/cli/cmd_replay.py +28 -4
  44. ksadk/cli/cmd_run.py +29 -67
  45. ksadk/cli/cmd_studio.py +201 -0
  46. ksadk/cli/cmd_web.py +15 -6
  47. ksadk/cli/dry_run.py +2 -1
  48. ksadk/cli/env_options.py +83 -0
  49. ksadk/cli/global_options.py +3 -1
  50. ksadk/cli/hermes_env.py +151 -0
  51. ksadk/cli/invoke_payload.py +49 -0
  52. ksadk/cli/network_options.py +7 -5
  53. ksadk/cli/openclaw_env.py +458 -0
  54. ksadk/cli/runtime_bootstrap.py +51 -0
  55. ksadk/cli/ui.py +6 -0
  56. ksadk/cli/workflow_common.py +5 -5
  57. ksadk/codex/__init__.py +3 -3
  58. ksadk/codex/client.py +833 -49
  59. ksadk/codex/phase.py +1 -1
  60. ksadk/codex/runtime.py +720 -127
  61. ksadk/common/kop_client.py +232 -0
  62. ksadk/configs/__init__.py +1 -3
  63. ksadk/configs/env_registry.py +244 -45
  64. ksadk/configs/env_registry_pcm.py +181 -0
  65. ksadk/configs/env_var_spec.py +18 -0
  66. ksadk/configs/global_config.py +6 -1
  67. ksadk/configs/settings.py +5 -108
  68. ksadk/context_engine/__init__.py +98 -0
  69. ksadk/context_engine/assembler.py +176 -0
  70. ksadk/context_engine/baseline.py +419 -0
  71. ksadk/context_engine/cache_observability.py +228 -0
  72. ksadk/context_engine/capabilities.py +443 -0
  73. ksadk/context_engine/contributors.py +344 -0
  74. ksadk/context_engine/hosted_pipeline.py +417 -0
  75. ksadk/context_engine/models.py +117 -0
  76. ksadk/context_engine/planner.py +698 -0
  77. ksadk/context_engine/policies.py +319 -0
  78. ksadk/context_engine/projection.py +31 -0
  79. ksadk/context_engine/shadow_plan.py +266 -0
  80. ksadk/context_engine/tokenizer.py +164 -0
  81. ksadk/conversations/__init__.py +85 -94
  82. ksadk/conversations/context.py +126 -6
  83. ksadk/conversations/message_projection.py +292 -28
  84. ksadk/conversations/model_context.py +49 -3
  85. ksadk/conversations/runtime_compaction.py +207 -5
  86. ksadk/conversations/runtime_input.py +193 -3
  87. ksadk/conversations/runtime_invocation.py +81 -3
  88. ksadk/conversations/runtime_observability.py +157 -4
  89. ksadk/conversations/runtime_payloads.py +42 -0
  90. ksadk/conversations/runtime_preparation.py +280 -2
  91. ksadk/conversations/runtime_resume.py +71 -32
  92. ksadk/conversations/runtime_stream_events.py +94 -9
  93. ksadk/conversations/runtime_streaming.py +175 -22
  94. ksadk/conversations/semantic_summary.py +311 -1
  95. ksadk/conversations/session_lock.py +51 -0
  96. ksadk/deployment/env_forward.py +72 -0
  97. ksadk/deployment/managed_runtime.py +38 -0
  98. ksadk/deployment/manager.py +24 -8
  99. ksadk/deployment/providers/serverless.py +228 -92
  100. ksadk/evaluation/__init__.py +116 -0
  101. ksadk/evaluation/a2a_adapter.py +452 -0
  102. ksadk/evaluation/adapters.py +67 -0
  103. ksadk/evaluation/agent_eval_client.py +395 -0
  104. ksadk/evaluation/cloud_binding.py +80 -0
  105. ksadk/evaluation/cloud_converter.py +194 -0
  106. ksadk/evaluation/cloud_service.py +199 -0
  107. ksadk/evaluation/contracts.py +478 -0
  108. ksadk/evaluation/evalset.py +351 -0
  109. ksadk/evaluation/evaluators.py +627 -0
  110. ksadk/evaluation/evidence.py +258 -0
  111. ksadk/evaluation/executor.py +143 -0
  112. ksadk/evaluation/local_adapter.py +550 -0
  113. ksadk/evaluation/service_env.py +27 -0
  114. ksadk/evaluation/storage.py +68 -0
  115. ksadk/evaluation/studio_build_adapter.py +253 -0
  116. ksadk/evaluation/target.py +82 -0
  117. ksadk/events/__init__.py +13 -13
  118. ksadk/events/_v1_compat/__init__.py +1 -0
  119. ksadk/events/_v1_compat/models.py +299 -0
  120. ksadk/events/_v1_compat/parser.py +247 -0
  121. ksadk/events/_v1_compat/projection.py +753 -0
  122. ksadk/events/adapters/__init__.py +34 -0
  123. ksadk/events/adapters/_a2a_snapshot.py +622 -0
  124. ksadk/events/adapters/_a2a_support.py +275 -0
  125. ksadk/events/adapters/_codex_interactions.py +375 -0
  126. ksadk/events/adapters/_codex_items.py +801 -0
  127. ksadk/events/adapters/_codex_validators.py +311 -0
  128. ksadk/events/adapters/_langgraph_support.py +785 -0
  129. ksadk/events/adapters/a2a.py +841 -0
  130. ksadk/events/adapters/adk.py +503 -0
  131. ksadk/events/adapters/codex.py +717 -0
  132. ksadk/events/adapters/langgraph.py +745 -0
  133. ksadk/events/canonical.py +440 -0
  134. ksadk/events/canonical_replay.py +497 -0
  135. ksadk/events/canonical_store.py +468 -0
  136. ksadk/events/cold_recovery.py +257 -0
  137. ksadk/events/content.py +89 -0
  138. ksadk/events/identity.py +86 -0
  139. ksadk/events/pipeline.py +455 -0
  140. ksadk/events/projections.py +66 -0
  141. ksadk/events/reducer.py +661 -0
  142. ksadk/events/replay.py +3 -36
  143. ksadk/events/runtime_event.py +20 -256
  144. ksadk/events/session_event.py +324 -0
  145. ksadk/events/store.py +3 -316
  146. ksadk/events/v1_compat.py +41 -0
  147. ksadk/harness/__init__.py +3 -2
  148. ksadk/harness/app.py +114 -123
  149. ksadk/harness/config.py +1 -1
  150. ksadk/harness/runtime.py +467 -0
  151. ksadk/hermes_terminal.py +5 -0
  152. ksadk/identity/resolver.py +4 -3
  153. ksadk/interaction/__init__.py +28 -0
  154. ksadk/interaction/contracts.py +136 -0
  155. ksadk/interaction/ledger.py +189 -0
  156. ksadk/interaction/provider.py +122 -0
  157. ksadk/interaction/providers/__init__.py +52 -0
  158. ksadk/interaction/providers/adk.py +40 -0
  159. ksadk/interaction/providers/codex.py +94 -0
  160. ksadk/interaction/providers/langgraph.py +58 -0
  161. ksadk/kernel/__init__.py +117 -0
  162. ksadk/kernel/authorization.py +258 -0
  163. ksadk/kernel/bootstrap.py +1074 -0
  164. ksadk/kernel/contract_fingerprints.py +61 -0
  165. ksadk/kernel/contracts.py +362 -0
  166. ksadk/kernel/control.py +219 -0
  167. ksadk/kernel/errors.py +79 -0
  168. ksadk/kernel/ingress.py +1102 -0
  169. ksadk/kernel/mapping.py +111 -0
  170. ksadk/kernel/memory_store.py +1133 -0
  171. ksadk/kernel/postgres_store.py +1756 -0
  172. ksadk/kernel/recovery.py +452 -0
  173. ksadk/kernel/runtime_identity.py +103 -0
  174. ksadk/kernel/sql/001_agent_kernel.sql +120 -0
  175. ksadk/kernel/sqlite_store.py +1410 -0
  176. ksadk/kernel/state.py +145 -0
  177. ksadk/kernel/store.py +232 -0
  178. ksadk/kernel/worker.py +953 -0
  179. ksadk/knowledge_base/client.py +22 -4
  180. ksadk/knowledge_base/service.py +32 -5
  181. ksadk/managed_a2a_card.py +160 -0
  182. ksadk/managed_runtime.py +16 -9
  183. ksadk/memory/__init__.py +61 -0
  184. ksadk/memory/adk/backends/base_ltm_backend.py +96 -1
  185. ksadk/memory/adk/backends/http_ltm_backend.py +14 -5
  186. ksadk/memory/adk/backends/inmemory_ltm_backend.py +136 -3
  187. ksadk/memory/adk/backends/sdk_ltm_backend.py +394 -5
  188. ksadk/memory/adk/backends/sqlite_ltm_backend.py +95 -0
  189. ksadk/memory/adk/long_term_memory.py +3 -2
  190. ksadk/memory/coordinator.py +461 -0
  191. ksadk/memory/events.py +202 -0
  192. ksadk/memory/extraction.py +228 -0
  193. ksadk/memory/ltm_backend_factory.py +16 -3
  194. ksadk/memory/models.py +316 -0
  195. ksadk/memory/policy.py +215 -0
  196. ksadk/memory/provider.py +47 -0
  197. ksadk/memory/provider_adapter.py +159 -0
  198. ksadk/memory/provider_resolver.py +71 -0
  199. ksadk/memory/providers/__init__.py +5 -0
  200. ksadk/memory/providers/local_sqlite.py +490 -0
  201. ksadk/memory/resolved_policy.py +145 -0
  202. ksadk/memory/service.py +198 -8
  203. ksadk/memory/tool.py +4 -0
  204. ksadk/model_proxy/bootstrap.py +16 -9
  205. ksadk/model_proxy/config.py +22 -1
  206. ksadk/model_proxy/detect.py +202 -9
  207. ksadk/model_proxy/namespace.py +67 -15
  208. ksadk/model_proxy/server.py +168 -6
  209. ksadk/model_proxy/transform.py +105 -3
  210. ksadk/observability/__init__.py +25 -0
  211. ksadk/observability/session_log.py +420 -0
  212. ksadk/observability/trajectory.py +105 -0
  213. ksadk/prompts/__init__.py +71 -0
  214. ksadk/prompts/compiler.py +215 -0
  215. ksadk/prompts/models.py +82 -0
  216. ksadk/prompts/projection.py +89 -0
  217. ksadk/prompts/resolved.py +137 -0
  218. ksadk/prompts/sources.py +233 -0
  219. ksadk/runners/_langgraph_runner_streams.py +822 -0
  220. ksadk/runners/adk_runner.py +14 -31
  221. ksadk/runners/base_runner.py +44 -3
  222. ksadk/runners/factory.py +3 -3
  223. ksadk/runners/langgraph_runner.py +252 -433
  224. ksadk/runners/utils/__init__.py +0 -10
  225. ksadk/runners/utils/loader.py +16 -0
  226. ksadk/runtime/__init__.py +67 -41
  227. ksadk/runtime/_runner_adapter/__init__.py +1 -0
  228. ksadk/runtime/_runner_adapter/stream_mapping.py +788 -0
  229. ksadk/runtime/adapter.py +199 -16
  230. ksadk/runtime/conversation_execution.py +687 -0
  231. ksadk/runtime/executor.py +392 -0
  232. ksadk/runtime/factory.py +342 -0
  233. ksadk/runtime/framework_adapters.py +6 -12
  234. ksadk/runtime/hosted_finalizer.py +268 -0
  235. ksadk/runtime/launch.py +61 -0
  236. ksadk/runtime/preprocessing.py +49 -14
  237. ksadk/runtime/runner_adapter.py +330 -391
  238. ksadk/runtime/runner_loading.py +36 -0
  239. ksadk/runtime/usage.py +33 -0
  240. ksadk/sandbox/backends/e2b.py +36 -3
  241. ksadk/server/__init__.py +39 -4
  242. ksadk/server/app.py +18 -492
  243. ksadk/server/composition.py +36 -2
  244. ksadk/server/factory.py +210 -149
  245. ksadk/server/routes/common.py +15 -46
  246. ksadk/server/routes/control.py +13 -9
  247. ksadk/server/routes/kernel_ingress.py +258 -0
  248. ksadk/server/routes/misc.py +10 -33
  249. ksadk/server/routes/models.py +14 -6
  250. ksadk/server/routes/openai_compat.py +129 -27
  251. ksadk/server/routes/projection.py +84 -16
  252. ksadk/server/routes/run.py +347 -460
  253. ksadk/server/routes/sessions.py +37 -40
  254. ksadk/server/routes/streaming.py +52 -7
  255. ksadk/server/routes/workspace.py +54 -21
  256. ksadk/server/static/assets/{ArtifactsPanel-Cjnqt-8W.js → ArtifactsPanel-DSU1sWD_.js} +1 -1
  257. ksadk/server/static/assets/{CodeBlock-BqyqZfuB.js → CodeBlock-DOH6MVcn.js} +4 -4
  258. ksadk/server/static/assets/{MathMessageMarkdown-BpH7jiFM.js → MathMessageMarkdown-BL8my1R2.js} +4 -4
  259. ksadk/server/static/assets/MathMessageMarkdown-BorAY7qD.css +1 -0
  260. ksadk/server/static/assets/MermaidBlock-Dz4IP-Tx.js +312 -0
  261. ksadk/server/static/assets/NativeTerminalPanel-DUrK0JpZ.js +1 -0
  262. ksadk/server/static/assets/abnfDiagram-VCTEODGH-g20pFzNV.js +1 -0
  263. ksadk/server/static/assets/arc-C4FzinUA.js +1 -0
  264. ksadk/server/static/assets/architecture-7GRP2DOG-DjKratdf.js +1 -0
  265. ksadk/server/static/assets/architectureDiagram-5GKGNRK7-DpIqL5h4.js +36 -0
  266. ksadk/server/static/assets/blockDiagram-NRAW4CY4-BjkljTNz.js +129 -0
  267. ksadk/server/static/assets/c4Diagram-UCG6FXSJ-Dk_ieq2X.js +38 -0
  268. ksadk/server/static/assets/channel-4cQHKtx1.js +1 -0
  269. ksadk/server/static/assets/chunk-2Q5K7J3B-DmgWkESh.js +1 -0
  270. ksadk/server/static/assets/{chunk-FMBD7UC4-BGhvzDYt.js → chunk-5VM5RSS4-BVHAchFb.js} +1 -1
  271. ksadk/server/static/assets/{chunk-ND2GUHAM-D98vPd-E.js → chunk-F27PBJKO-C-ipQzuS.js} +1 -1
  272. ksadk/server/static/assets/chunk-G27WJ6UU-C2EyJbIK.js +231 -0
  273. ksadk/server/static/assets/{chunk-4BX2VUAB-CsWIQRhc.js → chunk-JWPE2WC7-vYvVJb_M.js} +1 -1
  274. ksadk/server/static/assets/chunk-LCL6LL3I-BcI6ysPT.js +206 -0
  275. ksadk/server/static/assets/chunk-POPQ4Y6H-C030x_Z1.js +1 -0
  276. ksadk/server/static/assets/chunk-RHFEMEQ7-yyGpsz4n.js +168 -0
  277. ksadk/server/static/assets/chunk-SVP7TREG-BLTlmMU7.js +88 -0
  278. ksadk/server/static/assets/chunk-XXDRQBXY-C_32ArgP.js +1 -0
  279. ksadk/server/static/assets/classDiagram-DTDB5LWJ-DLFd9Xi0.js +1 -0
  280. ksadk/server/static/assets/classDiagram-v2-JRS7N3AN-DLFd9Xi0.js +1 -0
  281. ksadk/server/static/assets/{cose-bilkent-S5V4N54A-CX3yotHq.js → cose-bilkent-JH36ORCC-9YQYwdl0.js} +1 -1
  282. ksadk/server/static/assets/cynefin-OW5HDTMX-DjEM48Qp.js +1 -0
  283. ksadk/server/static/assets/cynefinDiagram-5FMLGOSQ-ErLF5N13.js +62 -0
  284. ksadk/server/static/assets/cytoscape.esm-CyCl8rPi.js +321 -0
  285. ksadk/server/static/assets/dagre-3AP2YEHR-DFiQF-6f.js +4 -0
  286. ksadk/server/static/assets/dagre-BuhGnRI1.js +1 -0
  287. ksadk/server/static/assets/diagram-S7CK7UJ4-Bt1v8-GC.js +30 -0
  288. ksadk/server/static/assets/diagram-UQ7AKVKN-DSCxJdBK.js +41 -0
  289. ksadk/server/static/assets/diagram-VSXAHHWV-DHfYwp_9.js +3 -0
  290. ksadk/server/static/assets/diagram-VX7I27RA-DdzD-4Le.js +24 -0
  291. ksadk/server/static/assets/diagram-Z3DM3KII-Du-nAJ9F.js +24 -0
  292. ksadk/server/static/assets/{dist-D82mtD2s.js → dist-8hqcx0sU.js} +1 -1
  293. ksadk/server/static/assets/dist-B7seoj3d.js +1 -0
  294. ksadk/server/static/assets/{dist-DHn6nBzr.js → dist-BE7bu-DL.js} +1 -1
  295. ksadk/server/static/assets/{dist-eoW6tZXA.js → dist-BVDffZ0U.js} +1 -1
  296. ksadk/server/static/assets/{dist-C2xjE7cO.js → dist-BX8z72IC.js} +1 -1
  297. ksadk/server/static/assets/{dist-CgF3fj15.js → dist-Bf2M8m3N.js} +1 -1
  298. ksadk/server/static/assets/{dist-Bs-jQcRX.js → dist-BjU6y-A2.js} +1 -1
  299. ksadk/server/static/assets/{dist-Djgl2wVZ.js → dist-BytlxIDT.js} +1 -1
  300. ksadk/server/static/assets/{dist-CVQRZjPu.js → dist-CSh_DE14.js} +1 -1
  301. ksadk/server/static/assets/{dist-6CVKuTAe.js → dist-CXYYBw3_.js} +1 -1
  302. ksadk/server/static/assets/{dist-DlzCRy0S.js → dist-C_wsv-Qd.js} +1 -1
  303. ksadk/server/static/assets/{dist-DF06ORQo.js → dist-ClxGviKw.js} +1 -1
  304. ksadk/server/static/assets/{dist-Cf23NY4L.js → dist-CttYUqzS.js} +1 -1
  305. ksadk/server/static/assets/{dist-ivOya1LD.js → dist-DNp6rLRA.js} +1 -1
  306. ksadk/server/static/assets/{dist-BibcG1V9.js → dist-DUX-id_F.js} +1 -1
  307. ksadk/server/static/assets/{dist-BUHRxvDG.js → dist-DmldrHd_.js} +1 -1
  308. ksadk/server/static/assets/{dist-BZ9n9AjO.js → dist-DnfXs8Vn.js} +2 -2
  309. ksadk/server/static/assets/{dist-DqNnNFrw.js → dist-Dq9gLD7L.js} +1 -1
  310. ksadk/server/static/assets/{dist-CGcp2ex8.js → dist-W-TIVntx.js} +1 -1
  311. ksadk/server/static/assets/{dist-Cwt7koer.js → dist-dDdADKFA.js} +1 -1
  312. ksadk/server/static/assets/{dist-C7-3jInC.js → dist-dydu68Fl.js} +1 -1
  313. ksadk/server/static/assets/{dist-C99THtIA.js → dist-ngtN0DJB.js} +1 -1
  314. ksadk/server/static/assets/ebnfDiagram-PWID7BFC-Da9C9NO1.js +1 -0
  315. ksadk/server/static/assets/erDiagram-SSCWMZ5O-EAGqqR79.js +99 -0
  316. ksadk/server/static/assets/eventmodeling-NTZA5JFV-CMgMaJrC.js +1 -0
  317. ksadk/server/static/assets/flowDiagram-A5DVABFB-BBKL0x3P.js +1 -0
  318. ksadk/server/static/assets/ganttDiagram-EL5Y4UJY-DqJsKb59.js +292 -0
  319. ksadk/server/static/assets/gitGraph-4MIJSDKK-Dw63mrhw.js +1 -0
  320. ksadk/server/static/assets/gitGraphDiagram-WWUBYQGX-B6g4dtDi.js +106 -0
  321. ksadk/server/static/assets/index-8ipRcQ-M.js +240 -0
  322. ksadk/server/static/assets/index-ByFCqjlh.css +2 -0
  323. ksadk/server/static/assets/info-A6RAGUB7-B6iAblII.js +1 -0
  324. ksadk/server/static/assets/infoDiagram-RXCK75RN-Djm_nbd5.js +2 -0
  325. ksadk/server/static/assets/{ishikawaDiagram-YF4QCWOH-DLOHGvWw.js → ishikawaDiagram-5VMMS53U-DWya9SG2.js} +6 -6
  326. ksadk/server/static/assets/{journeyDiagram-JHISSGLW-BIzKeejT.js → journeyDiagram-EYS64GPL-DutxhSNI.js} +6 -6
  327. ksadk/server/static/assets/{kanban-definition-UN3LZRKU-BWHoFSw2.js → kanban-definition-3QL26DDD-DJdOF8Fm.js} +10 -10
  328. ksadk/server/static/assets/katex-vFWytM5c.js +257 -0
  329. ksadk/server/static/assets/{linear-CvMBw9cA.js → linear-BHjG8b-J.js} +1 -1
  330. ksadk/server/static/assets/mermaid-parser.core-KGSy4jWT.js +166 -0
  331. ksadk/server/static/assets/{mindmap-definition-RKZ34NQL-CSAQxEAe.js → mindmap-definition-FBJOCRG2-9-HC88D4.js} +29 -29
  332. ksadk/server/static/assets/packet-AYTQ26CC-BOYAipuq.js +1 -0
  333. ksadk/server/static/assets/pegDiagram-XKGWAZYB-DrEZd4fD.js +1 -0
  334. ksadk/server/static/assets/pie-WAS4IAKB-Ctq0Kbku.js +1 -0
  335. ksadk/server/static/assets/pieDiagram-E7YTZNPT-DpjqOFFp.js +39 -0
  336. ksadk/server/static/assets/{quadrantDiagram-W4KKPZXB-CxIR4JXI.js → quadrantDiagram-AXDQQJYC-BiNhgOXX.js} +6 -6
  337. ksadk/server/static/assets/radar-RG4KPBEZ-DN0-ul_0.js +1 -0
  338. ksadk/server/static/assets/railroad-74A4TZTK-C6cC_to0.js +1 -0
  339. ksadk/server/static/assets/railroad-abnf-HS5TGJTU-BimjIuRc.js +1 -0
  340. ksadk/server/static/assets/railroad-ebnf-LZEXJU2U-CvY65ABq.js +1 -0
  341. ksadk/server/static/assets/railroad-peg-WCYAUIDC-D72Iq_Tv.js +1 -0
  342. ksadk/server/static/assets/railroadDiagram-O6MQD6OU-_Y3Ojg6G.js +1 -0
  343. ksadk/server/static/assets/requirementDiagram-EFPCY7ZU-DeCFdg9K.js +84 -0
  344. ksadk/server/static/assets/{sankeyDiagram-5OEKKPKP-DpGa6EAV.js → sankeyDiagram-P5KCCOFB-CPH75rhw.js} +7 -7
  345. ksadk/server/static/assets/{sequenceDiagram-3UESZ5HK-NTKNGGe5.js → sequenceDiagram-WJ2MYXX4-OEpQQdr4.js} +10 -10
  346. ksadk/server/static/assets/sizeCapture-X5ZJPWSS-heUErzhI.js +1 -0
  347. ksadk/server/static/assets/stateDiagram-HBIQ2CUA-DvA3jSMB.js +1 -0
  348. ksadk/server/static/assets/stateDiagram-v2-4QOOHH4V-BgQY03nz.js +1 -0
  349. ksadk/server/static/assets/swimlanes-XN3QIQJK-CR-dfN_t.js +1 -0
  350. ksadk/server/static/assets/swimlanesDiagram-VK2B7HYN-DLVw3q5Q.js +8 -0
  351. ksadk/server/static/assets/{timeline-definition-PNZ67QCA-jqoYs3jQ.js → timeline-definition-24CTP7MA-DAVJf1TX.js} +7 -7
  352. ksadk/server/static/assets/treeView-Q6P3EWNA-BMpO0wsB.js +1 -0
  353. ksadk/server/static/assets/treemap-WGGIJYW6-Et0aqzU3.js +1 -0
  354. ksadk/server/static/assets/vennDiagram-4TSXK5OY-DwM8eDkh.js +34 -0
  355. ksadk/server/static/assets/wardley-WFR3VGLG-CbY0mhpl.js +1 -0
  356. ksadk/server/static/assets/wardleyDiagram-VM6X3IG4-DZL-Zz2t.js +78 -0
  357. ksadk/server/static/assets/xychartDiagram-S5SC5T6Z-Dy6Yh_hu.js +7 -0
  358. ksadk/server/static/index.html +2 -2
  359. ksadk/sessions/__init__.py +26 -9
  360. ksadk/sessions/_local_service_sync.py +688 -0
  361. ksadk/sessions/_local_tables.py +21 -0
  362. ksadk/sessions/_postgres_schema.py +305 -0
  363. ksadk/sessions/_postgres_tables.py +15 -0
  364. ksadk/sessions/base.py +80 -1
  365. ksadk/sessions/in_memory.py +53 -2
  366. ksadk/sessions/local_service.py +63 -604
  367. ksadk/sessions/postgres_service.py +58 -148
  368. ksadk/sessions/resilient.py +35 -1
  369. ksadk/skills/runtime/backends/e2b.py +1 -1
  370. ksadk/skills/service_client.py +13 -3
  371. ksadk/studio/__init__.py +5 -0
  372. ksadk/studio/agent_avatar_assets.py +120 -0
  373. ksadk/studio/agent_lifecycle.py +51 -0
  374. ksadk/studio/api.py +1598 -0
  375. ksadk/studio/api_catalog_routes.py +324 -0
  376. ksadk/studio/api_contracts.py +286 -0
  377. ksadk/studio/api_helpers.py +132 -0
  378. ksadk/studio/api_memory_routes.py +82 -0
  379. ksadk/studio/authoring.py +749 -0
  380. ksadk/studio/authoring_coordinator.py +1017 -0
  381. ksadk/studio/builder.py +397 -0
  382. ksadk/studio/capabilities.py +368 -0
  383. ksadk/studio/cloud.py +2099 -0
  384. ksadk/studio/codex_agent_service.py +694 -0
  385. ksadk/studio/codex_authoring.py +469 -0
  386. ksadk/studio/codex_builder.py +437 -0
  387. ksadk/studio/codex_manifest.py +307 -0
  388. ksadk/studio/codex_run.py +395 -0
  389. ksadk/studio/compiler.py +190 -0
  390. ksadk/studio/contracts.py +755 -0
  391. ksadk/studio/errors.py +47 -0
  392. ksadk/studio/event_store.py +214 -0
  393. ksadk/studio/framework_run.py +342 -0
  394. ksadk/studio/hosted_kernel.py +317 -0
  395. ksadk/studio/identifiers.py +33 -0
  396. ksadk/studio/manifest_resolver.py +131 -0
  397. ksadk/studio/mcp_runtime.py +229 -0
  398. ksadk/studio/model_client.py +629 -0
  399. ksadk/studio/model_profile_service.py +214 -0
  400. ksadk/studio/operations.py +275 -0
  401. ksadk/studio/otel_trace.py +1060 -0
  402. ksadk/studio/pagination.py +182 -0
  403. ksadk/studio/pcm_memory.py +85 -0
  404. ksadk/studio/python_tool_inspection.py +183 -0
  405. ksadk/studio/repository.py +327 -0
  406. ksadk/studio/resource_catalog.py +1260 -0
  407. ksadk/studio/run_service.py +1133 -0
  408. ksadk/studio/runtime_catalog.py +74 -0
  409. ksadk/studio/runtime_source.py +365 -0
  410. ksadk/studio/service.py +2249 -0
  411. ksadk/studio/shared_web.py +1004 -0
  412. ksadk/studio/skill_discovery.py +628 -0
  413. ksadk/studio/static/assets/PrismRenderer-IYN-ffww.js +3 -0
  414. ksadk/studio/static/assets/index-BLpcdrgW.css +1 -0
  415. ksadk/studio/static/assets/index-CYekR2Xv.js +260 -0
  416. ksadk/studio/static/assets/react-vendor-BNmTiJ-I.js +9 -0
  417. ksadk/studio/static/assets/rolldown-runtime-hePW80VL.js +1 -0
  418. ksadk/studio/static/index.html +15 -0
  419. ksadk/studio/templates.py +722 -0
  420. ksadk/studio/validator.py +265 -0
  421. ksadk/studio/workspace.py +135 -0
  422. ksadk/tools/gateway.py +9 -0
  423. ksadk/toolsets/__init__.py +27 -1
  424. ksadk/toolsets/a2a.py +426 -0
  425. ksadk/tracing/__init__.py +19 -21
  426. ksadk/tracing/setup.py +317 -403
  427. ksadk/tracing/span_utils.py +0 -44
  428. ksadk/version.py +1 -1
  429. ksadk_runtime_common/memory_backend/registry.py +56 -56
  430. ksadk_runtime_common/schemas/runtime_event_v1.json +37 -0
  431. ksadk_runtime_common/schemas/runtime_event_v2.json +271 -0
  432. ksadk_runtime_common/workspace_files/router.py +8 -2
  433. agentengine_sdk_python-0.8.0.dist-info/RECORD +0 -578
  434. ksadk/a2a/card_builder.py +0 -64
  435. ksadk/a2a/client.py +0 -309
  436. ksadk/events/parser.py +0 -191
  437. ksadk/harness/runner.py +0 -211
  438. ksadk/runners/codex_runner.py +0 -132
  439. ksadk/runners/utils/langfuse.py +0 -230
  440. ksadk/server/static/assets/MathMessageMarkdown-DeYh8QPr.css +0 -1
  441. ksadk/server/static/assets/MermaidBlock-DWuxETaJ.js +0 -303
  442. ksadk/server/static/assets/NativeTerminalPanel-MDTopWMO.js +0 -1
  443. ksadk/server/static/assets/arc-CFKwSk_B.js +0 -1
  444. ksadk/server/static/assets/architecture-7EHR7CIX-CynqOWjZ.js +0 -1
  445. ksadk/server/static/assets/architectureDiagram-3BPJPVTR-Dej8jX8c.js +0 -36
  446. ksadk/server/static/assets/blockDiagram-GPEHLZMM-1F64jqvy.js +0 -132
  447. ksadk/server/static/assets/c4Diagram-AAUBKEIU-9q7AUAKb.js +0 -10
  448. ksadk/server/static/assets/channel-iUGv2N24.js +0 -1
  449. ksadk/server/static/assets/chunk-2J33WTMH-6qgwJm7Q.js +0 -1
  450. ksadk/server/static/assets/chunk-55IACEB6-BK8paA20.js +0 -1
  451. ksadk/server/static/assets/chunk-727SXJPM-B-JEhy7h.js +0 -206
  452. ksadk/server/static/assets/chunk-AQP2D5EJ-DYBvMHAa.js +0 -231
  453. ksadk/server/static/assets/chunk-QZHKN3VN-YQIEXeF6.js +0 -1
  454. ksadk/server/static/assets/classDiagram-4FO5ZUOK-CDAUuoXK.js +0 -1
  455. ksadk/server/static/assets/classDiagram-v2-Q7XG4LA2-CDAUuoXK.js +0 -1
  456. ksadk/server/static/assets/cytoscape.esm-DelgaX4f.js +0 -321
  457. ksadk/server/static/assets/dagre-BM42HDAG-C7TguAWo.js +0 -4
  458. ksadk/server/static/assets/dagre-Bx709z4p.js +0 -1
  459. ksadk/server/static/assets/diagram-2AECGRRQ-Dd17_kws.js +0 -43
  460. ksadk/server/static/assets/diagram-5GNKFQAL-DVIClIil.js +0 -10
  461. ksadk/server/static/assets/diagram-KO2AKTUF-Df_3gYQa.js +0 -3
  462. ksadk/server/static/assets/diagram-LMA3HP47-BhLk6ZtA.js +0 -24
  463. ksadk/server/static/assets/diagram-OG6HWLK6-D4GNGvuu.js +0 -24
  464. ksadk/server/static/assets/dist-DyvYLMW9.js +0 -1
  465. ksadk/server/static/assets/erDiagram-TEJ5UH35-CnfRcY2M.js +0 -85
  466. ksadk/server/static/assets/eventmodeling-FCH6USID-ChYO-ijM.js +0 -1
  467. ksadk/server/static/assets/flowDiagram-I6XJVG4X-DGaJjGNJ.js +0 -162
  468. ksadk/server/static/assets/ganttDiagram-6RSMTGT7-DpCoB2g9.js +0 -292
  469. ksadk/server/static/assets/gitGraph-WXDBUCRP-BN_0Fk-j.js +0 -1
  470. ksadk/server/static/assets/gitGraphDiagram-PVQCEYII-9IKVFBVT.js +0 -106
  471. ksadk/server/static/assets/graphlib-B8gBHxth.js +0 -1
  472. ksadk/server/static/assets/index-QSwCHuB8.js +0 -177
  473. ksadk/server/static/assets/index-jOPmTOZH.css +0 -2
  474. ksadk/server/static/assets/info-J43DQDTF-Cp6o3vId.js +0 -1
  475. ksadk/server/static/assets/infoDiagram-5YYISTIA-CYIIsb8y.js +0 -2
  476. ksadk/server/static/assets/katex-DATssjp1.js +0 -265
  477. ksadk/server/static/assets/mermaid-parser.core-mGAcEwcq.js +0 -161
  478. ksadk/server/static/assets/packet-YPE3B663-wQzct3cT.js +0 -1
  479. ksadk/server/static/assets/pie-LRSECV5Y-BgTQiv-9.js +0 -1
  480. ksadk/server/static/assets/pieDiagram-4H26LBE5-By-ra07M.js +0 -30
  481. ksadk/server/static/assets/radar-GUYGQ44K-BIq5fXsn.js +0 -1
  482. ksadk/server/static/assets/requirementDiagram-4Y6WPE33-DpW90iu3.js +0 -84
  483. ksadk/server/static/assets/stateDiagram-AJRCARHV-DGpd9yFG.js +0 -1
  484. ksadk/server/static/assets/stateDiagram-v2-BHNVJYJU-B3o579IQ.js +0 -1
  485. ksadk/server/static/assets/treeView-BLDUP644-Dqi-E0EM.js +0 -1
  486. ksadk/server/static/assets/treemap-LRROVOQU-ClQP9CJ9.js +0 -1
  487. ksadk/server/static/assets/vennDiagram-CIIHVFJN-l3Z7-wbP.js +0 -34
  488. ksadk/server/static/assets/wardley-L42UT6IY-8XLvnNIs.js +0 -1
  489. ksadk/server/static/assets/wardleyDiagram-YWT4CUSO-BR54GPmr.js +0 -78
  490. ksadk/server/static/assets/xychartDiagram-2RQKCTM6-SkiH8GsK.js +0 -7
  491. ksadk/tracing/exporters/langfuse_exporter.py +0 -460
  492. {agentengine_sdk_python-0.8.0.dist-info → agentengine_sdk_python-0.8.2.dist-info}/entry_points.txt +0 -0
  493. {agentengine_sdk_python-0.8.0.dist-info → agentengine_sdk_python-0.8.2.dist-info}/licenses/LICENSE +0 -0
  494. {agentengine_sdk_python-0.8.0.dist-info → agentengine_sdk_python-0.8.2.dist-info}/top_level.txt +0 -0
@@ -4,6 +4,7 @@ import asyncio
4
4
  import time
5
5
  from typing import Any, AsyncIterator, Callable, Dict, Mapping, Optional, Sequence
6
6
 
7
+ from ksadk.conversations.context import budget_tool_result_for_event
7
8
  from ksadk.conversations.run_kinds import (
8
9
  RUN_MODE_FOREGROUND,
9
10
  trigger_from_resume_input,
@@ -38,10 +39,13 @@ from ksadk.conversations.runtime_observability import (
38
39
  _extract_deferred_tool_names,
39
40
  _get_conversation_tracer,
40
41
  _normalize_usage_payload,
42
+ _set_context_plan_attributes,
41
43
  _set_conversation_input_attributes,
42
44
  _set_conversation_output_attributes,
43
45
  _set_conversation_span_attributes,
44
46
  _set_conversation_usage_attributes,
47
+ _set_prompt_cache_attributes,
48
+ _set_prompt_source_attributes,
45
49
  _set_span_attribute,
46
50
  _span_current_context,
47
51
  _span_feedback_metadata,
@@ -79,6 +83,35 @@ from ksadk.tools.gateway import (
79
83
  )
80
84
 
81
85
 
86
+ def _record_baseline_turn(
87
+ *,
88
+ prepared: Any,
89
+ model: str | None,
90
+ usage: Any,
91
+ ptl: bool,
92
+ attempts: int,
93
+ turn_start_monotonic: float | None,
94
+ ) -> None:
95
+ """env-gated 旁路采集:未启用时 no-op,启用时记录一条 turn 基线。不进决策路径。"""
96
+ from ksadk.context_engine.baseline import record_baseline_turn
97
+
98
+ latency_ms = None
99
+ if turn_start_monotonic is not None:
100
+ latency_ms = int((time.monotonic() - turn_start_monotonic) * 1000)
101
+ record_baseline_turn(
102
+ getattr(prepared, "shadow_context_plan", None),
103
+ session_id=getattr(prepared, "session_id", ""),
104
+ invocation_id=getattr(prepared, "invocation_id", ""),
105
+ model=str(model or ""),
106
+ usage=usage if isinstance(usage, Mapping) else None,
107
+ compaction_triggered=bool(getattr(prepared, "compaction_triggered", False)),
108
+ compaction_trigger=str(getattr(prepared, "compaction_trigger", "") or ""),
109
+ prompt_too_long=ptl,
110
+ retry_attempts=attempts,
111
+ turn_latency_ms=latency_ms,
112
+ )
113
+
114
+
82
115
  async def _iter_conversation_turn_events(
83
116
  *,
84
117
  runner: Any,
@@ -100,6 +133,9 @@ async def _iter_conversation_turn_events(
100
133
  invocation_id: Optional[str] = None,
101
134
  session_service_provider: Callable[[], Any] | None = None,
102
135
  run_mode: str = RUN_MODE_FOREGROUND,
136
+ agent_system: str = "",
137
+ agent_task: str = "",
138
+ prompt_integration_mode: str = "",
103
139
  ) -> AsyncIterator[dict[str, Any]]:
104
140
  """Internal semantic event stream shared by protocol serializers."""
105
141
  provider = session_service_provider or resolve_session_service
@@ -117,6 +153,8 @@ async def _iter_conversation_turn_events(
117
153
  model=model,
118
154
  model_metadata=model_metadata,
119
155
  session_service_provider=provider,
156
+ # PR D1:双阈值门控透传(仅 preview 用,不改会话)。
157
+ prompt_integration_mode=prompt_integration_mode,
120
158
  )
121
159
  else:
122
160
  compaction_preview = CompactionPlan(
@@ -155,6 +193,11 @@ async def _iter_conversation_turn_events(
155
193
  governance_state=governance,
156
194
  session_service_provider=provider,
157
195
  run_mode=entry_run_mode,
196
+ runner=runner,
197
+ runtime_type=_runner_type_name(runner),
198
+ agent_system=agent_system,
199
+ agent_task=agent_task,
200
+ prompt_integration_mode=prompt_integration_mode,
158
201
  )
159
202
  # prepared 之后的 run_status 写入复用 prepared 的 mode/trigger
160
203
  run_mode = prepared.run_mode
@@ -180,6 +223,7 @@ async def _iter_conversation_turn_events(
180
223
  user_id=user_id,
181
224
  user_input=prepared.user_input,
182
225
  )
226
+ prepared.memory_recall_events = ambient_contexts.get("memory_recall_events", [])
183
227
  runtime_context = PlatformInvocationContext(
184
228
  agent_id=agent_id,
185
229
  user_id=user_id,
@@ -200,9 +244,7 @@ async def _iter_conversation_turn_events(
200
244
  model_options=prepared.model_options,
201
245
  kb_context=ambient_contexts.get("kb_context"),
202
246
  memory_context=ambient_contexts.get("memory_context"),
203
- tool_approval_mode=str(
204
- prepared.request_metadata.get("tool_approval_mode") or ""
205
- ),
247
+ tool_approval_mode=str(prepared.request_metadata.get("tool_approval_mode") or ""),
206
248
  )
207
249
  if prepared.compaction_triggered:
208
250
  yield {
@@ -254,7 +296,11 @@ async def _iter_conversation_turn_events(
254
296
  response_id=response_id,
255
297
  )
256
298
  _set_conversation_input_attributes(span, prepared.user_input or prepared.user_display_input)
299
+ _set_context_plan_attributes(span, prepared.shadow_context_plan)
257
300
  trace_metadata = _span_feedback_metadata(span)
301
+ _baseline_turn_start = time.monotonic()
302
+ _baseline_ptl = False
303
+ _baseline_attempts = 0
258
304
  yield {
259
305
  "type": "started",
260
306
  "session_id": prepared.session_id,
@@ -558,12 +604,24 @@ async def _iter_conversation_turn_events(
558
604
  tool_call_id = str(
559
605
  chunk.get("call_id") or chunk.get("run_id") or tool_run_id
560
606
  ).strip()
607
+ # PR C:tool_result 单项预算(仅 ksadk_hosted 门控)。
608
+ # bound 进 content.parts[0].text(下一轮 history → 模型输入的那条), # noqa: E501
609
+ # metadata.tool_output 保留原值(UI/Responses 读取方不受影响)。
610
+ # enabled=False → (str(output), {}) 与旧逻辑字节级一致。
611
+ _tool_output_raw = chunk.get("tool_output", "")
612
+ _budget_enabled = prepared.prompt_integration_mode == "ksadk_hosted"
613
+ _budgeted_text, _budget_extras = budget_tool_result_for_event(
614
+ tool_name=tool_name,
615
+ tool_output=_tool_output_raw,
616
+ tool_call_id=tool_call_id,
617
+ enabled=_budget_enabled,
618
+ )
561
619
  checkpoint_metadata = _latest_checkpoint_metadata_for_run(
562
620
  await provider().get_events(prepared.session_id),
563
621
  tool_run_id,
564
622
  )
565
623
  approval_interrupt_info = approval_interrupt_info_from_result(
566
- chunk.get("tool_output", ""),
624
+ _tool_output_raw,
567
625
  fallback_tool_name=tool_name,
568
626
  tool_args=tool_args,
569
627
  run_id=tool_run_id,
@@ -602,17 +660,18 @@ async def _iter_conversation_turn_events(
602
660
  session_id=prepared.session_id,
603
661
  author=runner_name,
604
662
  role="user",
605
- text=str(chunk.get("tool_output", "")),
663
+ text=_budgeted_text,
606
664
  invocation_id=prepared.invocation_id,
607
665
  event_type="tool_result",
608
666
  metadata={
609
667
  "tool_name": tool_name,
610
- "tool_output": chunk.get("tool_output", ""),
668
+ "tool_output": _tool_output_raw,
611
669
  "run_id": tool_run_id,
612
670
  "tool_call_id": tool_call_id,
613
671
  "observability": _tool_observability_metadata(
614
- tool_name, chunk.get("tool_output", "")
672
+ tool_name, _tool_output_raw
615
673
  ),
674
+ **_budget_extras,
616
675
  "tool_receipt": _tool_receipt_metadata(
617
676
  session_id=prepared.session_id,
618
677
  run_id=tool_run_id,
@@ -624,8 +683,8 @@ async def _iter_conversation_turn_events(
624
683
  framework_ref=checkpoint_metadata.get("framework_ref"),
625
684
  status=(
626
685
  "failed"
627
- if isinstance(chunk.get("tool_output"), Mapping)
628
- and chunk.get("tool_output", {}).get("ok") is False
686
+ if isinstance(_tool_output_raw, Mapping)
687
+ and _tool_output_raw.get("ok") is False
629
688
  else "completed"
630
689
  ),
631
690
  ),
@@ -723,6 +782,8 @@ async def _iter_conversation_turn_events(
723
782
  return
724
783
  except Exception as exc:
725
784
  if attempt == 0 and not emitted_anything and _is_prompt_too_long_error(exc):
785
+ _baseline_ptl = True
786
+ _baseline_attempts = attempt + 1
726
787
  yield {"type": "compaction", "phase": "start", "trigger": "prompt_too_long"}
727
788
  try:
728
789
  checkpoint = await _compact_conversation_history_with_governance(
@@ -736,6 +797,15 @@ async def _iter_conversation_turn_events(
736
797
  trigger="prompt_too_long",
737
798
  keep_tail_groups=PTL_RETRY_KEEP_TAIL_GROUPS,
738
799
  session_service_provider=provider,
800
+ # PR D1:PTL 路径仍 force=True;透传 ownership 便于未来按门控调策略。
801
+ prompt_integration_mode=getattr(
802
+ prepared, "prompt_integration_mode", ""
803
+ ),
804
+ compaction_owner=str(
805
+ (getattr(prepared, "shadow_context_plan", None) or {}).get(
806
+ "compaction_owner", ""
807
+ )
808
+ ),
739
809
  )
740
810
  except RuntimeCircuitOpen as circuit_exc:
741
811
  await append_run_status_event(
@@ -887,6 +957,21 @@ async def _iter_conversation_turn_events(
887
957
  run_trigger=run_trigger,
888
958
  )
889
959
  _set_conversation_usage_attributes(span, assistant_metadata.get("usage"))
960
+ _set_prompt_cache_attributes(
961
+ span,
962
+ session_id=prepared.session_id,
963
+ plan=prepared.shadow_context_plan,
964
+ usage=assistant_metadata.get("usage"),
965
+ )
966
+ _set_prompt_source_attributes(span, getattr(prepared, "compiled_prompt", None))
967
+ _record_baseline_turn(
968
+ prepared=prepared,
969
+ model=model,
970
+ usage=assistant_metadata.get("usage"),
971
+ ptl=_baseline_ptl,
972
+ attempts=_baseline_attempts,
973
+ turn_start_monotonic=_baseline_turn_start,
974
+ )
890
975
  _finish_span()
891
976
  yield {
892
977
  "type": "completed",
@@ -14,6 +14,9 @@ from ksadk.conversations.runtime_payloads import (
14
14
  build_responses_payload,
15
15
  )
16
16
  from ksadk.conversations.runtime_stream_events import _iter_conversation_turn_events
17
+ from ksadk.runtime.conversation_execution import iter_runtime_conversation_semantic_events
18
+ from ksadk.runtime.executor import RuntimeExecutor, RuntimeStartPreparation
19
+ from ksadk.runtime.launch import RuntimeLaunchContext
17
20
 
18
21
 
19
22
  async def stream_conversation_turn(
@@ -38,7 +41,7 @@ async def stream_conversation_turn(
38
41
  run_mode: str = RUN_MODE_FOREGROUND,
39
42
  ) -> AsyncIterator[str]:
40
43
  """Legacy ksadk response SSE stream used by hosted chat and chat-completions."""
41
- async for event in _iter_conversation_turn_events(
44
+ events = _iter_conversation_turn_events(
42
45
  runner=runner,
43
46
  agent_id=agent_id,
44
47
  user_id=user_id,
@@ -57,7 +60,75 @@ async def stream_conversation_turn(
57
60
  invocation_id=invocation_id,
58
61
  session_service_provider=session_service_provider,
59
62
  run_mode=run_mode,
63
+ )
64
+ async for chunk in _stream_conversation_semantic_events(
65
+ events=events,
66
+ model=model,
67
+ session_id=session_id,
68
+ ):
69
+ yield chunk
70
+
71
+
72
+ async def stream_runtime_conversation_turn(
73
+ *,
74
+ executor: RuntimeExecutor,
75
+ launch_context: RuntimeLaunchContext,
76
+ agent_id: str,
77
+ user_id: str,
78
+ messages: Sequence[Dict[str, Any]],
79
+ session_id: Optional[str],
80
+ model: Optional[str],
81
+ model_metadata: Mapping[str, Any] | None = None,
82
+ model_options: Mapping[str, Any] | None = None,
83
+ state_delta: Optional[dict[str, Any]] = None,
84
+ instructions: Optional[str] = None,
85
+ request_metadata: Mapping[str, Any] | None = None,
86
+ custom_metadata: Mapping[str, Any] | None = None,
87
+ resume_input: Mapping[str, Any] | None = None,
88
+ account_id: str | None = None,
89
+ invocation_id: Optional[str] = None,
90
+ session_service_provider: Callable[[], Any] | None = None,
91
+ run_mode: str = RUN_MODE_FOREGROUND,
92
+ runtime_preparation: RuntimeStartPreparation | None = None,
93
+ ) -> AsyncIterator[str]:
94
+ """Legacy hosted-chat SSE driven by the canonical RuntimeExecutor."""
95
+
96
+ events = iter_runtime_conversation_semantic_events(
97
+ executor=executor,
98
+ launch_context=launch_context,
99
+ agent_id=agent_id,
100
+ user_id=user_id,
101
+ messages=messages,
102
+ session_id=session_id,
103
+ model=model,
104
+ model_metadata=model_metadata,
105
+ model_options=model_options,
106
+ state_delta=state_delta,
107
+ instructions=instructions,
108
+ request_metadata=request_metadata,
109
+ custom_metadata=custom_metadata,
110
+ resume_input=resume_input,
111
+ account_id=account_id,
112
+ invocation_id=invocation_id,
113
+ session_service_provider=session_service_provider,
114
+ run_mode=run_mode,
115
+ runtime_preparation=runtime_preparation,
116
+ )
117
+ async for chunk in _stream_conversation_semantic_events(
118
+ events=events,
119
+ model=model,
120
+ session_id=session_id,
60
121
  ):
122
+ yield chunk
123
+
124
+
125
+ async def _stream_conversation_semantic_events(
126
+ *,
127
+ events: AsyncIterator[dict[str, Any]],
128
+ model: Optional[str],
129
+ session_id: Optional[str],
130
+ ) -> AsyncIterator[str]:
131
+ async for event in events:
61
132
  event_type = event.get("type")
62
133
  if event_type == "compaction":
63
134
  yield build_compaction_sse_event(
@@ -160,6 +231,108 @@ async def stream_responses_conversation_turn(
160
231
  ) -> AsyncIterator[str]:
161
232
  """OpenAI Responses-style SSE stream."""
162
233
  response_id = f"resp_{uuid.uuid4().hex}"
234
+ events = _iter_conversation_turn_events(
235
+ runner=runner,
236
+ agent_id=agent_id,
237
+ user_id=user_id,
238
+ session_id=session_id,
239
+ messages=messages,
240
+ model=model,
241
+ prepare_runner=prepare_runner,
242
+ model_metadata=model_metadata,
243
+ model_options=model_options,
244
+ state_delta=state_delta,
245
+ instructions=instructions,
246
+ request_metadata=request_metadata,
247
+ custom_metadata=custom_metadata,
248
+ resume_input=resume_input,
249
+ response_id=response_id,
250
+ account_id=account_id,
251
+ invocation_id=invocation_id,
252
+ session_service_provider=session_service_provider,
253
+ run_mode=run_mode,
254
+ )
255
+ async for chunk in _stream_responses_semantic_events(
256
+ events=events,
257
+ model=model,
258
+ session_id=session_id,
259
+ custom_metadata=custom_metadata,
260
+ include_agentengine_metadata=include_agentengine_metadata,
261
+ response_id=response_id,
262
+ ):
263
+ yield chunk
264
+
265
+
266
+ async def stream_runtime_responses_conversation_turn(
267
+ *,
268
+ executor: RuntimeExecutor,
269
+ launch_context: RuntimeLaunchContext,
270
+ agent_id: str,
271
+ user_id: str,
272
+ messages: Sequence[Dict[str, Any]],
273
+ session_id: Optional[str],
274
+ model: Optional[str],
275
+ model_metadata: Mapping[str, Any] | None = None,
276
+ model_options: Mapping[str, Any] | None = None,
277
+ state_delta: Optional[dict[str, Any]] = None,
278
+ instructions: Optional[str] = None,
279
+ request_metadata: Mapping[str, Any] | None = None,
280
+ custom_metadata: Mapping[str, Any] | None = None,
281
+ include_agentengine_metadata: bool = False,
282
+ resume_input: Mapping[str, Any] | None = None,
283
+ account_id: str | None = None,
284
+ invocation_id: Optional[str] = None,
285
+ session_service_provider: Callable[[], Any] | None = None,
286
+ run_mode: str = RUN_MODE_FOREGROUND,
287
+ runtime_preparation: RuntimeStartPreparation | None = None,
288
+ ) -> AsyncIterator[str]:
289
+ """OpenAI Responses SSE driven by the canonical RuntimeExecutor."""
290
+
291
+ response_id = f"resp_{uuid.uuid4().hex}"
292
+ events = iter_runtime_conversation_semantic_events(
293
+ executor=executor,
294
+ launch_context=launch_context,
295
+ agent_id=agent_id,
296
+ user_id=user_id,
297
+ messages=messages,
298
+ session_id=session_id,
299
+ model=model,
300
+ model_metadata=model_metadata,
301
+ model_options=model_options,
302
+ state_delta=state_delta,
303
+ instructions=instructions,
304
+ request_metadata=request_metadata,
305
+ custom_metadata=custom_metadata,
306
+ resume_input=resume_input,
307
+ response_id=response_id,
308
+ account_id=account_id,
309
+ invocation_id=invocation_id,
310
+ session_service_provider=session_service_provider,
311
+ run_mode=run_mode,
312
+ runtime_preparation=runtime_preparation,
313
+ )
314
+ async for chunk in _stream_responses_semantic_events(
315
+ events=events,
316
+ model=model,
317
+ session_id=session_id,
318
+ custom_metadata=custom_metadata,
319
+ include_agentengine_metadata=include_agentengine_metadata,
320
+ response_id=response_id,
321
+ ):
322
+ yield chunk
323
+
324
+
325
+ async def _stream_responses_semantic_events(
326
+ *,
327
+ events: AsyncIterator[dict[str, Any]],
328
+ model: Optional[str],
329
+ session_id: Optional[str],
330
+ custom_metadata: Mapping[str, Any] | None,
331
+ include_agentengine_metadata: bool,
332
+ response_id: str,
333
+ ) -> AsyncIterator[str]:
334
+ """Serialize one semantic event stream into the Responses wire format."""
335
+
163
336
  created_at = int(time.time())
164
337
  response_metadata = dict(custom_metadata or {})
165
338
 
@@ -217,27 +390,7 @@ async def stream_responses_conversation_turn(
217
390
  next_output_index += 1
218
391
  return output_index
219
392
 
220
- async for event in _iter_conversation_turn_events(
221
- runner=runner,
222
- agent_id=agent_id,
223
- user_id=user_id,
224
- session_id=session_id,
225
- messages=messages,
226
- model=model,
227
- prepare_runner=prepare_runner,
228
- model_metadata=model_metadata,
229
- model_options=model_options,
230
- state_delta=state_delta,
231
- instructions=instructions,
232
- request_metadata=request_metadata,
233
- custom_metadata=custom_metadata,
234
- resume_input=resume_input,
235
- response_id=response_id,
236
- account_id=account_id,
237
- invocation_id=invocation_id,
238
- session_service_provider=session_service_provider,
239
- run_mode=run_mode,
240
- ):
393
+ async for event in events:
241
394
  if include_agentengine_metadata:
242
395
  event_metadata = event.get("metadata")
243
396
  agentengine_metadata = (