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
@@ -0,0 +1,181 @@
1
+ """Prompt, Context and Memory environment-variable registry entries."""
2
+
3
+ from __future__ import annotations
4
+
5
+ from dataclasses import replace
6
+
7
+ from ksadk.configs.env_var_spec import EnvVarSpec
8
+
9
+ _PCM_ENV_VAR_REGISTRY_ITEMS: tuple[EnvVarSpec, ...] = (
10
+ EnvVarSpec("KSADK_BASELINE_COLLECT", "context", "Enable PCM baseline collection.", "0"),
11
+ EnvVarSpec(
12
+ "KSADK_BASELINE_EXECUTION_TARGET", "context", "PCM baseline execution target label."
13
+ ),
14
+ EnvVarSpec(
15
+ "KSADK_BASELINE_FLUSH_EACH_TURN",
16
+ "context",
17
+ "Flush PCM baseline output after every turn.",
18
+ "0",
19
+ ),
20
+ EnvVarSpec("KSADK_BASELINE_PATH", "context", "PCM baseline JSONL output path."),
21
+ EnvVarSpec("KSADK_COMPACT_HARD_LIMIT_PCT", "context", "Hard compaction threshold percentage."),
22
+ EnvVarSpec(
23
+ "KSADK_COMPACT_HARD_LIMIT_PCT_DEFAULT",
24
+ "context",
25
+ "Default hard compaction threshold percentage.",
26
+ ),
27
+ EnvVarSpec("KSADK_COMPACT_SOFT_LIMIT_PCT", "context", "Soft compaction threshold percentage."),
28
+ EnvVarSpec(
29
+ "KSADK_COMPACT_SOFT_LIMIT_PCT_DEFAULT",
30
+ "context",
31
+ "Default soft compaction threshold percentage.",
32
+ ),
33
+ EnvVarSpec(
34
+ "KSADK_CONTEXT_CACHE_BREAK_OBSERVABILITY",
35
+ "context",
36
+ "Enable prompt cache-break diagnostics.",
37
+ "0",
38
+ ),
39
+ EnvVarSpec(
40
+ "KSADK_CONTEXT_CONTRIBUTOR_ALLOW_PLATFORM_TRUST",
41
+ "context",
42
+ "Allow trusted platform context contributors.",
43
+ "0",
44
+ ),
45
+ EnvVarSpec(
46
+ "KSADK_CONTEXT_CONTRIBUTOR_FAILURE_MODE",
47
+ "context",
48
+ "Context contributor failure policy.",
49
+ ),
50
+ EnvVarSpec(
51
+ "KSADK_CONTEXT_CONTRIBUTOR_TIMEOUT_MS",
52
+ "context",
53
+ "Context contributor timeout in milliseconds.",
54
+ ),
55
+ EnvVarSpec(
56
+ "KSADK_CONTEXT_EMERGENCY_KEEP_TAIL_GROUPS",
57
+ "context",
58
+ "Recent event groups retained during emergency compaction.",
59
+ ),
60
+ EnvVarSpec(
61
+ "KSADK_CONTEXT_ENGINE_V2_ENABLED", "context", "Enable the PCM context planner.", "0"
62
+ ),
63
+ EnvVarSpec(
64
+ "KSADK_CONTEXT_HARD_LIMIT_PERCENT",
65
+ "context",
66
+ "Hard request-context budget threshold percentage.",
67
+ ),
68
+ EnvVarSpec(
69
+ "KSADK_CONTEXT_KEEP_TAIL_GROUPS",
70
+ "context",
71
+ "Recent event groups retained during normal compaction.",
72
+ ),
73
+ EnvVarSpec(
74
+ "KSADK_CONTEXT_MAX_RETRY_AFTER_PTL",
75
+ "context",
76
+ "Maximum controlled retries after prompt-too-long.",
77
+ ),
78
+ EnvVarSpec(
79
+ "KSADK_CONTEXT_RULE_FILES_MAX_TOKENS", "context", "Combined rule-file token budget."
80
+ ),
81
+ EnvVarSpec("KSADK_CONTEXT_RULE_FILE_MAX_TOKENS", "context", "Per rule-file token budget."),
82
+ EnvVarSpec(
83
+ "KSADK_CONTEXT_SAFETY_BUFFER_TOKENS", "context", "Reserved context-window safety buffer."
84
+ ),
85
+ EnvVarSpec("KSADK_CONTEXT_SEMANTIC_ENABLED", "context", "Enable semantic compaction.", "0"),
86
+ EnvVarSpec(
87
+ "KSADK_CONTEXT_SEMANTIC_TIMEOUT_MS",
88
+ "context",
89
+ "Semantic compaction timeout in milliseconds.",
90
+ ),
91
+ EnvVarSpec(
92
+ "KSADK_CONTEXT_SOFT_LIMIT_PERCENT",
93
+ "context",
94
+ "Soft request-context budget threshold percentage.",
95
+ ),
96
+ EnvVarSpec(
97
+ "KSADK_CONTEXT_TOOL_RESULT_MAX_TOKENS",
98
+ "context",
99
+ "Maximum token budget for one tool result.",
100
+ ),
101
+ EnvVarSpec(
102
+ "KSADK_CONTEXT_WORKING_STATE_ENABLED",
103
+ "context",
104
+ "Enable structured working-state extraction.",
105
+ "0",
106
+ ),
107
+ EnvVarSpec(
108
+ "KSADK_CONTEXT_WORKING_STATE_EXTRACTION_TIMEOUT_MS",
109
+ "context",
110
+ "Working-state extraction timeout in milliseconds.",
111
+ ),
112
+ EnvVarSpec(
113
+ "KSADK_CONTEXT_WORKING_STATE_MAX_TOKENS", "context", "Working-state token budget."
114
+ ),
115
+ EnvVarSpec(
116
+ "KSADK_CONTEXT_WORKING_STATE_MIN_TOKEN_GROWTH",
117
+ "context",
118
+ "Minimum growth before refreshing working state.",
119
+ ),
120
+ EnvVarSpec(
121
+ "KSADK_LTM_FORCE_INMEMORY",
122
+ "memory",
123
+ "Force in-memory long-term-memory backend for tests.",
124
+ "0",
125
+ ),
126
+ EnvVarSpec("KSADK_MEMORY_CORE_MAX_TOKENS", "memory", "Core-memory token budget."),
127
+ EnvVarSpec("KSADK_MEMORY_DB_PATH", "memory", "Local PCM memory database path."),
128
+ EnvVarSpec("KSADK_MEMORY_ENABLED", "memory", "Enable platform memory projection.", "0"),
129
+ EnvVarSpec(
130
+ "KSADK_MEMORY_FLUSH_BEFORE_COMPACTION",
131
+ "memory",
132
+ "Flush memory candidates before compaction.",
133
+ "0",
134
+ ),
135
+ EnvVarSpec("KSADK_MEMORY_FLUSH_ENABLED", "memory", "Enable memory candidate commit.", "0"),
136
+ EnvVarSpec("KSADK_MEMORY_MIN_SCORE", "memory", "Minimum memory recall relevance score."),
137
+ EnvVarSpec(
138
+ "KSADK_MEMORY_MAX_RECORDS",
139
+ "memory",
140
+ "Maximum retained records for the local PCM memory provider.",
141
+ "10000",
142
+ ),
143
+ EnvVarSpec("KSADK_MEMORY_PROVIDER", "memory", "Platform memory provider selector."),
144
+ EnvVarSpec("KSADK_MEMORY_RECALL_MAX_TOKENS", "memory", "Memory recall token budget."),
145
+ EnvVarSpec("KSADK_MEMORY_RECALL_TOP_K", "memory", "Maximum recalled memory items."),
146
+ EnvVarSpec(
147
+ "KSADK_MEMORY_RETENTION_DAYS",
148
+ "memory",
149
+ "Retention period in days for the local PCM memory provider.",
150
+ "90",
151
+ ),
152
+ EnvVarSpec(
153
+ "KSADK_MEMORY_WRITE_MODE",
154
+ "memory",
155
+ "Memory write mode: off, explicit-only, or candidate.",
156
+ ),
157
+ EnvVarSpec(
158
+ "KSADK_PLATFORM_SAFETY_TEXT",
159
+ "prompt",
160
+ "Platform safety rules injected by the prompt compiler.",
161
+ ),
162
+ EnvVarSpec(
163
+ "KSADK_PROMPT_AUTO_DISCOVERY", "prompt", "Enable project prompt-source discovery.", "0"
164
+ ),
165
+ EnvVarSpec(
166
+ "KSADK_PROMPT_COMPILER_ENABLED", "prompt", "Enable structured prompt compilation.", "0"
167
+ ),
168
+ EnvVarSpec(
169
+ "KSADK_TOKENIZER_PROVIDER", "context", "Tokenizer provider used for context accounting."
170
+ ),
171
+ )
172
+
173
+ # PCM rollout, budget and diagnostic environment variables are internal runtime
174
+ # controls. Public users configure the same behavior through AgentSpec policies,
175
+ # so these names intentionally do not expand the public environment reference.
176
+ PCM_ENV_VAR_REGISTRY_ITEMS: tuple[EnvVarSpec, ...] = tuple(
177
+ replace(item, documented=False) for item in _PCM_ENV_VAR_REGISTRY_ITEMS
178
+ )
179
+
180
+
181
+ __all__ = ["PCM_ENV_VAR_REGISTRY_ITEMS"]
@@ -0,0 +1,18 @@
1
+ """Shared environment-variable registry value object."""
2
+
3
+ from __future__ import annotations
4
+
5
+ from dataclasses import dataclass
6
+
7
+
8
+ @dataclass(frozen=True)
9
+ class EnvVarSpec:
10
+ name: str
11
+ module: str
12
+ purpose: str
13
+ default: str = ""
14
+ sensitive: bool = False
15
+ documented: bool = True
16
+
17
+
18
+ __all__ = ["EnvVarSpec"]
@@ -43,8 +43,13 @@ CONFIG_GROUPS = {
43
43
  # 嵌套对象,get_env_from_global_config 跳过它(不当 env-var),build 保留它
44
44
  "IDENTITY_CACHE",
45
45
  ],
46
+ "evaluation": [
47
+ "AGENT_EVAL_BASE_URL",
48
+ "AGENT_EVAL_API_TOKEN",
49
+ "AGENT_EVAL_ACCOUNT_ID",
50
+ ],
46
51
  # 未来可扩展更多分组
47
- # "observability": ["LANGFUSE_PUBLIC_KEY", ...],
52
+ # "observability": ["OTEL_EXPORTER_OTLP_ENDPOINT", ...],
48
53
  # "plugins": {...},
49
54
  }
50
55
 
ksadk/configs/settings.py CHANGED
@@ -11,8 +11,8 @@ AgentEngine 统一配置管理
11
11
  print(settings.model.api_key)
12
12
  print(settings.model.api_base)
13
13
 
14
- # 访问 Langfuse 配置
15
- print(settings.langfuse.public_key)
14
+ # 访问标准 OpenTelemetry 配置
15
+ print(settings.otel.otlp_endpoint)
16
16
 
17
17
  # 访问 Agent 运行时信息
18
18
  print(settings.agent.agent_id)
@@ -263,73 +263,6 @@ class ModelConfig:
263
263
  return result
264
264
 
265
265
 
266
- # =============================================================================
267
- # Langfuse 配置
268
- # =============================================================================
269
-
270
-
271
- @dataclass
272
- class LangfuseConfig:
273
- """Langfuse 可观测性配置
274
-
275
- 标准环境变量 (Langfuse 官方):
276
- LANGFUSE_PUBLIC_KEY - API Public Key
277
- LANGFUSE_SECRET_KEY - API Secret Key
278
- LANGFUSE_HOST - Langfuse 服务地址
279
-
280
- Serverless 平台扩展:
281
- LANGFUSE_PROJECT_ID - 项目 ID (区分用户)
282
- LANGCHAIN_TRACING_V2 - 启用 LangChain 追踪
283
- """
284
-
285
- @property
286
- def public_key(self) -> Optional[str]:
287
- return os.getenv("LANGFUSE_PUBLIC_KEY")
288
-
289
- @property
290
- def secret_key(self) -> Optional[str]:
291
- return os.getenv("LANGFUSE_SECRET_KEY")
292
-
293
- @property
294
- def host(self) -> str:
295
- return (
296
- _get_env(
297
- "LANGFUSE_HOST",
298
- "LANGFUSE_BASE_URL",
299
- default="http://localhost:3000",
300
- )
301
- or "http://localhost:3000"
302
- )
303
-
304
- @property
305
- def project_id(self) -> Optional[str]:
306
- """Langfuse 项目 ID (Serverless 平台扩展)"""
307
- return os.getenv("LANGFUSE_PROJECT_ID")
308
-
309
- @property
310
- def tracing_enabled(self) -> bool:
311
- """是否启用 LangChain tracing"""
312
- return os.getenv("LANGCHAIN_TRACING_V2", "").lower() == "true"
313
-
314
- @property
315
- def is_enabled(self) -> bool:
316
- """是否启用 Langfuse (有 public_key 就启用)"""
317
- return bool(self.public_key)
318
-
319
- @property
320
- def is_configured(self) -> bool:
321
- """是否完整配置"""
322
- return bool(self.public_key and self.secret_key)
323
-
324
- def to_dict(self) -> dict:
325
- """转换为字典"""
326
- return {
327
- "public_key": self.public_key,
328
- "secret_key": self.secret_key,
329
- "host": self.host,
330
- }
331
-
332
-
333
266
  # =============================================================================
334
267
  # Agent 配置
335
268
  # =============================================================================
@@ -438,39 +371,6 @@ class AgentConfig:
438
371
  """是否有 Agent 信息"""
439
372
  return bool(self.agent_id or self.agent_name)
440
373
 
441
- # ------------------
442
- # Langfuse 集成方法
443
- # ------------------
444
-
445
- def to_langfuse_params(self) -> dict:
446
- """转换为 Langfuse trace() 方法的原生参数"""
447
- params: Dict[str, Any] = {}
448
- if self.session_id:
449
- params["session_id"] = self.session_id
450
- if self.user_id:
451
- params["user_id"] = self.user_id
452
- if self.tags:
453
- params["tags"] = self.tags
454
- if self.version:
455
- params["version"] = self.version
456
- return params
457
-
458
- def to_langfuse_metadata(self) -> dict:
459
- """转换为 Langfuse metadata 字段"""
460
- metadata = {}
461
- if self.agent_id:
462
- metadata["agent_id"] = self.agent_id
463
- if self.agent_name:
464
- metadata["agent_name"] = self.agent_name
465
- if self.tenant_id:
466
- metadata["tenant_id"] = self.tenant_id
467
- if self.environment:
468
- metadata["environment"] = self.environment
469
- if self.extra_metadata:
470
- metadata.update(self.extra_metadata)
471
- return metadata
472
-
473
-
474
374
  # =============================================================================
475
375
  # 金山云配置
476
376
  # =============================================================================
@@ -594,16 +494,15 @@ class Settings:
594
494
  if settings.model.is_configured:
595
495
  llm = LiteLLM(api_key=settings.model.api_key)
596
496
 
597
- # Langfuse 配置
598
- if settings.langfuse.is_enabled:
599
- setup_tracing(langfuse_config=settings.langfuse.to_dict())
497
+ # 标准 OTLP 配置
498
+ if settings.otel.is_enabled:
499
+ setup_tracing()
600
500
 
601
501
  # Agent 信息
602
502
  print(settings.agent.agent_id)
603
503
  """
604
504
 
605
505
  model: ModelConfig = field(default_factory=ModelConfig)
606
- langfuse: LangfuseConfig = field(default_factory=LangfuseConfig)
607
506
  agent: AgentConfig = field(default_factory=AgentConfig)
608
507
  cloud: KingsoftCloudConfig = field(default_factory=KingsoftCloudConfig)
609
508
  code: CodeModeConfig = field(default_factory=CodeModeConfig)
@@ -615,8 +514,6 @@ class Settings:
615
514
  lines.append(
616
515
  f" Model: {'✅ Configured' if self.model.is_configured else '❌ Not configured'}"
617
516
  )
618
- lines.append(f" Langfuse: {'✅ Enabled' if self.langfuse.is_enabled else '⚪ Disabled'}")
619
-
620
517
  agent_info = self.agent.agent_id or self.agent.agent_name
621
518
  lines.append(f" Agent: {'✅ ' + agent_info if agent_info else '⚪ No info'}")
622
519
 
@@ -0,0 +1,98 @@
1
+ """Context Engine —— Prompt/Context/Memory 的运行时上下文协调层。
2
+
3
+ 数据模型、capability 合同与 shadow 可观测基线已落地;后续 PR 新增 planner / assembler /
4
+ policies / contributors 的实际逻辑。本模块导出稳定类型与运行时合同。
5
+ """
6
+
7
+ from ksadk.context_engine.assembler import AssembledInput, ContextAssembler, assemble
8
+ from ksadk.context_engine.capabilities import (
9
+ DEFAULT_CONTEXT_CAPABILITIES,
10
+ CapabilityCircuitOpen,
11
+ ContextAccuracy,
12
+ ContextCapabilities,
13
+ ContextIntegrationMode,
14
+ ContextOwner,
15
+ DeploymentMode,
16
+ adk_context_capabilities,
17
+ assert_capability_not_circuit_open,
18
+ capabilities_for_runner,
19
+ capabilities_for_runtime_type,
20
+ capability_hash,
21
+ codex_context_capabilities,
22
+ deepagents_context_capabilities,
23
+ detect_capability_mismatch,
24
+ is_capability_circuit_open,
25
+ langchain_context_capabilities,
26
+ langgraph_context_capabilities,
27
+ mark_capability_mismatch,
28
+ reset_capability_circuit,
29
+ )
30
+ from ksadk.context_engine.models import (
31
+ CONTEXT_POLICY_VERSION,
32
+ ContextBudget,
33
+ ContextDecision,
34
+ ContextItem,
35
+ ContextKind,
36
+ ContextPlan,
37
+ )
38
+ from ksadk.context_engine.planner import ContextPlanner, build_budget
39
+ from ksadk.context_engine.policies import (
40
+ ContextBudgetPolicy,
41
+ ContextPolicy,
42
+ SectionBudget,
43
+ compute_budget_tokens,
44
+ )
45
+ from ksadk.context_engine.projection import PROJECTION_VERSION, ProjectionResult
46
+ from ksadk.context_engine.tokenizer import (
47
+ HEURISTIC_TOKENIZER_NAME,
48
+ HeuristicTokenCounter,
49
+ TokenCounter,
50
+ get_default_token_counter,
51
+ )
52
+
53
+ __all__ = [
54
+ "AssembledInput",
55
+ "CONTEXT_POLICY_VERSION",
56
+ "ContextAssembler",
57
+ "ContextAccuracy",
58
+ "ContextBudget",
59
+ "ContextBudgetPolicy",
60
+ "ContextCapabilities",
61
+ "ContextDecision",
62
+ "ContextIntegrationMode",
63
+ "ContextItem",
64
+ "ContextKind",
65
+ "ContextOwner",
66
+ "ContextPlan",
67
+ "ContextPlanner",
68
+ "ContextPolicy",
69
+ "DEFAULT_CONTEXT_CAPABILITIES",
70
+ "DeploymentMode",
71
+ "HEURISTIC_TOKENIZER_NAME",
72
+ "HeuristicTokenCounter",
73
+ "PROJECTION_VERSION",
74
+ "ProjectionResult",
75
+ "SectionBudget",
76
+ "TokenCounter",
77
+ "adk_context_capabilities",
78
+ "assemble",
79
+ "build_budget",
80
+ "capabilities_for_runner",
81
+ "capabilities_for_runtime_type",
82
+ "capability_hash",
83
+ "codex_context_capabilities",
84
+ "compute_budget_tokens",
85
+ "deepagents_context_capabilities",
86
+ "detect_capability_mismatch",
87
+ "get_default_token_counter",
88
+ "is_capability_circuit_open",
89
+ "langchain_context_capabilities",
90
+ "langgraph_context_capabilities",
91
+ "mark_capability_mismatch",
92
+ "reset_capability_circuit",
93
+ "assert_capability_not_circuit_open",
94
+ "CapabilityCircuitOpen",
95
+ "allowed_ownership_choices",
96
+ "validate_ownership_for_runtime",
97
+ "resolve_ownership",
98
+ ]
@@ -0,0 +1,176 @@
1
+ """Context Assembler —— 把 ContextPlan.selected 投影成 messages/responses 输入(方案 §8)。
2
+
3
+ Assembler 是 KsADK-owned(``ksadk_hosted``)路径的最终输入组装器:把 ``ContextPlan.selected``
4
+ 按方案 §7.4 的稳定前缀→部署级→动态后缀顺序投影成 Chat/Responses 格式。assisted/native 路径
5
+ 不调用本模块,由 RuntimeAdapter 自行投影(方案 §6.2)。
6
+
7
+ 第一个版本只实现 Chat messages 与 Responses items 两种合法投影,不含模型调用;actual_token
8
+ 由调用方在收到 usage 后回填 ``ContextPlan.runtime_reported_input_tokens``。
9
+ """
10
+
11
+ from __future__ import annotations
12
+
13
+ from dataclasses import dataclass
14
+ from typing import Any, Literal
15
+
16
+ from ksadk.context_engine.models import ContextItem, ContextPlan
17
+
18
+ ProjectionFormat = Literal["chat", "responses"]
19
+
20
+
21
+ @dataclass(frozen=True)
22
+ class AssembledInput:
23
+ """组装后的模型输入(shadow/可观测用,不直接发模型)。"""
24
+
25
+ format: ProjectionFormat
26
+ system: str
27
+ messages: list[dict[str, Any]]
28
+ responses_items: list[dict[str, Any]]
29
+ estimated_tokens: int
30
+ warnings: tuple[str, ...] = ()
31
+
32
+
33
+ def _item_text(item: ContextItem) -> str:
34
+ content = item.content
35
+ if isinstance(content, str):
36
+ return content
37
+ if isinstance(content, list):
38
+ parts: list[str] = []
39
+ for part in content:
40
+ if isinstance(part, str):
41
+ parts.append(part)
42
+ elif isinstance(part, dict):
43
+ t = part.get("text") or part.get("content")
44
+ if isinstance(t, str):
45
+ parts.append(t)
46
+ return "\n".join(parts)
47
+ return str(content or "")
48
+
49
+
50
+ def _split_prompt_and_rest(selected: list[ContextItem]) -> tuple[str, list[ContextItem]]:
51
+ """稳定前缀(compiled_prompt)单独提为 system,其余按顺序进入 messages。"""
52
+ prompt_text = ""
53
+ rest: list[ContextItem] = []
54
+ for item in selected:
55
+ if item.kind == "compiled_prompt":
56
+ prompt_text = (
57
+ (prompt_text + "\n\n" + _item_text(item)).strip("\n\n")
58
+ if prompt_text
59
+ else _item_text(item)
60
+ )
61
+ else:
62
+ rest.append(item)
63
+ return prompt_text, rest
64
+
65
+
66
+ def _role_for(item: ContextItem) -> str:
67
+ if item.kind == "current_input":
68
+ return "user"
69
+ if item.kind == "history_round":
70
+ # history_round 的 content 形如 {"role": "...", "content": ...} 或带 role metadata
71
+ role = item.metadata.get("role")
72
+ if isinstance(role, str):
73
+ return role
74
+ return "assistant"
75
+ if item.kind == "tool_result":
76
+ return "tool"
77
+ return "assistant"
78
+
79
+
80
+ def _current_input_last(items: list[ContextItem]) -> list[ContextItem]:
81
+ """Keep the canonical current input at the end of Chat chronology.
82
+
83
+ Planner order represents retention priority, not physical message order. If
84
+ ``current_input`` is projected before selected history, the runner can treat
85
+ it as history and inject it again as the new input. Preserve every other
86
+ item's relative order and move only ``current_input`` to the end.
87
+ """
88
+
89
+ return [item for item in items if item.kind != "current_input"] + [
90
+ item for item in items if item.kind == "current_input"
91
+ ]
92
+
93
+
94
+ class ContextAssembler:
95
+ """把 ContextPlan 投影成 Chat/Responses 输入(方案 §8)。
96
+
97
+ 纯函数式、无副作用。``assemble_chat`` 输出 OpenAI Chat 风格 messages;
98
+ ``assemble_responses`` 输出 Responses API items。两者共用同一 selected 顺序。
99
+ """
100
+
101
+ def assemble_chat(self, plan: ContextPlan) -> AssembledInput:
102
+ system, rest = _split_prompt_and_rest(plan.selected)
103
+ rest = _current_input_last(rest)
104
+ messages: list[dict[str, Any]] = []
105
+ if system:
106
+ messages.append({"role": "system", "content": system})
107
+ warnings: list[str] = []
108
+ for item in rest:
109
+ role = _role_for(item)
110
+ content = _item_text(item)
111
+ if item.metadata.get("truncated_to_tokens") is not None:
112
+ warnings.append(f"{item.item_id}:truncated")
113
+ if item.metadata.get("replaced_with_artifact_summary"):
114
+ warnings.append(f"{item.item_id}:artifact_summary")
115
+ messages.append({"role": role, "content": content, "name": item.metadata.get("name")})
116
+ return AssembledInput(
117
+ format="chat",
118
+ system=system,
119
+ messages=messages,
120
+ responses_items=[],
121
+ estimated_tokens=plan.planned_input_tokens,
122
+ warnings=tuple(warnings),
123
+ )
124
+
125
+ def assemble_responses(self, plan: ContextPlan) -> AssembledInput:
126
+ system, rest = _split_prompt_and_rest(plan.selected)
127
+ rest = _current_input_last(rest)
128
+ items: list[dict[str, Any]] = []
129
+ if system:
130
+ items.append(
131
+ {
132
+ "type": "message",
133
+ "role": "system",
134
+ "content": [{"type": "input_text", "text": system}],
135
+ }
136
+ )
137
+ warnings: list[str] = []
138
+ for item in rest:
139
+ role = _role_for(item)
140
+ content = _item_text(item)
141
+ if item.metadata.get("truncated_to_tokens") is not None:
142
+ warnings.append(f"{item.item_id}:truncated")
143
+ if item.kind == "tool_result":
144
+ # Responses function_call_output
145
+ call_id = str(
146
+ item.metadata.get("call_id") or item.metadata.get("tool_call_id") or ""
147
+ )
148
+ items.append(
149
+ {"type": "function_call_output", "call_id": call_id, "output": content}
150
+ )
151
+ else:
152
+ item_type = "input_text" if role == "user" else "output_text"
153
+ items.append(
154
+ {
155
+ "type": "message",
156
+ "role": role,
157
+ "content": [{"type": item_type, "text": content}],
158
+ }
159
+ )
160
+ return AssembledInput(
161
+ format="responses",
162
+ system=system,
163
+ messages=[],
164
+ responses_items=items,
165
+ estimated_tokens=plan.planned_input_tokens,
166
+ warnings=tuple(warnings),
167
+ )
168
+
169
+
170
+ def assemble(plan: ContextPlan, *, fmt: ProjectionFormat = "chat") -> AssembledInput:
171
+ """便捷入口。"""
172
+ asm = ContextAssembler()
173
+ return asm.assemble_chat(plan) if fmt == "chat" else asm.assemble_responses(plan)
174
+
175
+
176
+ __all__ = ["AssembledInput", "ContextAssembler", "ProjectionFormat", "assemble"]