agentengine-sdk-python 0.8.1__py3-none-any.whl → 0.8.3__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 (476) hide show
  1. {agentengine_sdk_python-0.8.1.dist-info → agentengine_sdk_python-0.8.3.dist-info}/METADATA +25 -12
  2. {agentengine_sdk_python-0.8.1.dist-info → agentengine_sdk_python-0.8.3.dist-info}/RECORD +421 -232
  3. ksadk/_build_provenance.json +1 -0
  4. ksadk/a2a/_space_client_events.py +381 -0
  5. ksadk/a2a/event_adapter.py +156 -64
  6. ksadk/a2a/executor.py +179 -63
  7. ksadk/a2a/space_client.py +6 -333
  8. ksadk/a2ui/core.py +222 -53
  9. ksadk/agui/_agent_helpers.py +247 -0
  10. ksadk/agui/a2ui_projection.py +12 -5
  11. ksadk/agui/agent.py +443 -259
  12. ksadk/api/client.py +528 -27
  13. ksadk/builders/code_builder.py +284 -8
  14. ksadk/builders/container_builder.py +8 -1
  15. ksadk/builders/managed_runtime_builder.py +42 -35
  16. ksadk/cli/__init__.py +23 -0
  17. ksadk/cli/cmd_dashboard.py +15 -1
  18. ksadk/cli/cmd_deploy.py +10 -2
  19. ksadk/cli/cmd_eval.py +66 -9
  20. ksadk/cli/cmd_evalset.py +284 -0
  21. ksadk/cli/cmd_files.py +5 -1
  22. ksadk/cli/cmd_hermes.py +1 -126
  23. ksadk/cli/cmd_invoke.py +28 -38
  24. ksadk/cli/cmd_managed_runtime.py +95 -0
  25. ksadk/cli/cmd_observe.py +85 -0
  26. ksadk/cli/cmd_openclaw.py +1 -435
  27. ksadk/cli/cmd_plugin.py +657 -0
  28. ksadk/cli/cmd_replay.py +28 -4
  29. ksadk/cli/cmd_studio.py +99 -8
  30. ksadk/cli/cmd_web.py +10 -2
  31. ksadk/cli/hermes_env.py +151 -0
  32. ksadk/cli/invoke_payload.py +49 -0
  33. ksadk/cli/openclaw_env.py +458 -0
  34. ksadk/codex/client.py +180 -30
  35. ksadk/codex/runtime.py +475 -331
  36. ksadk/configs/env_registry.py +94 -12
  37. ksadk/configs/env_registry_pcm.py +181 -0
  38. ksadk/configs/env_var_spec.py +18 -0
  39. ksadk/configs/global_config.py +5 -0
  40. ksadk/configs/settings.py +9 -0
  41. ksadk/context_engine/__init__.py +98 -0
  42. ksadk/context_engine/assembler.py +176 -0
  43. ksadk/context_engine/baseline.py +419 -0
  44. ksadk/context_engine/cache_observability.py +228 -0
  45. ksadk/context_engine/capabilities.py +443 -0
  46. ksadk/context_engine/contributors.py +409 -0
  47. ksadk/context_engine/hosted_pipeline.py +417 -0
  48. ksadk/context_engine/models.py +117 -0
  49. ksadk/context_engine/planner.py +698 -0
  50. ksadk/context_engine/policies.py +319 -0
  51. ksadk/context_engine/projection.py +31 -0
  52. ksadk/context_engine/shadow_plan.py +266 -0
  53. ksadk/context_engine/tokenizer.py +164 -0
  54. ksadk/conversations/__init__.py +19 -0
  55. ksadk/conversations/context.py +230 -30
  56. ksadk/conversations/contracts.py +266 -0
  57. ksadk/conversations/message_projection.py +308 -26
  58. ksadk/conversations/model_context.py +49 -3
  59. ksadk/conversations/projector.py +616 -0
  60. ksadk/conversations/reducer.py +98 -0
  61. ksadk/conversations/runtime_compaction.py +207 -5
  62. ksadk/conversations/runtime_input.py +184 -2
  63. ksadk/conversations/runtime_invocation.py +81 -3
  64. ksadk/conversations/runtime_observability.py +141 -0
  65. ksadk/conversations/runtime_payloads.py +42 -0
  66. ksadk/conversations/runtime_preparation.py +272 -2
  67. ksadk/conversations/runtime_resume.py +20 -1
  68. ksadk/conversations/runtime_stream_events.py +94 -9
  69. ksadk/conversations/semantic_summary.py +311 -1
  70. ksadk/conversations/session_lock.py +51 -0
  71. ksadk/deployment/env_forward.py +72 -0
  72. ksadk/deployment/managed_runtime.py +5 -0
  73. ksadk/deployment/providers/serverless.py +143 -69
  74. ksadk/evaluation/__init__.py +32 -0
  75. ksadk/evaluation/a2a_adapter.py +9 -1
  76. ksadk/evaluation/adapters.py +18 -5
  77. ksadk/evaluation/agent_eval_client.py +395 -0
  78. ksadk/evaluation/cloud_binding.py +80 -0
  79. ksadk/evaluation/cloud_converter.py +194 -0
  80. ksadk/evaluation/cloud_service.py +199 -0
  81. ksadk/evaluation/contracts.py +73 -4
  82. ksadk/evaluation/evaluators.py +183 -17
  83. ksadk/evaluation/evidence.py +258 -0
  84. ksadk/evaluation/executor.py +31 -6
  85. ksadk/evaluation/local_adapter.py +550 -0
  86. ksadk/evaluation/service_env.py +27 -0
  87. ksadk/evaluation/studio_build_adapter.py +253 -0
  88. ksadk/evaluation/target.py +15 -6
  89. ksadk/events/__init__.py +13 -13
  90. ksadk/events/_v1_compat/__init__.py +1 -0
  91. ksadk/events/_v1_compat/models.py +299 -0
  92. ksadk/events/_v1_compat/parser.py +247 -0
  93. ksadk/events/_v1_compat/projection.py +755 -0
  94. ksadk/events/adapters/__init__.py +34 -0
  95. ksadk/events/adapters/_a2a_snapshot.py +622 -0
  96. ksadk/events/adapters/_a2a_support.py +275 -0
  97. ksadk/events/adapters/_codex_interactions.py +375 -0
  98. ksadk/events/adapters/_codex_items.py +801 -0
  99. ksadk/events/adapters/_codex_validators.py +311 -0
  100. ksadk/events/adapters/_langgraph_support.py +785 -0
  101. ksadk/events/adapters/a2a.py +841 -0
  102. ksadk/events/adapters/adk.py +503 -0
  103. ksadk/events/adapters/codex.py +907 -0
  104. ksadk/events/adapters/langgraph.py +745 -0
  105. ksadk/events/canonical.py +440 -0
  106. ksadk/events/canonical_replay.py +497 -0
  107. ksadk/events/canonical_store.py +468 -0
  108. ksadk/events/cold_recovery.py +257 -0
  109. ksadk/events/content.py +89 -0
  110. ksadk/events/identity.py +86 -0
  111. ksadk/events/pipeline.py +455 -0
  112. ksadk/events/projections.py +66 -0
  113. ksadk/events/reducer.py +661 -0
  114. ksadk/events/replay.py +3 -36
  115. ksadk/events/runtime_event.py +20 -265
  116. ksadk/events/session_event.py +324 -0
  117. ksadk/events/store.py +3 -316
  118. ksadk/events/v1_compat.py +41 -0
  119. ksadk/harness/__init__.py +45 -35
  120. ksadk/harness/runtime.py +220 -58
  121. ksadk/identity/resolver.py +4 -3
  122. ksadk/interaction/__init__.py +28 -0
  123. ksadk/interaction/contracts.py +136 -0
  124. ksadk/interaction/ledger.py +189 -0
  125. ksadk/interaction/provider.py +122 -0
  126. ksadk/interaction/providers/__init__.py +52 -0
  127. ksadk/interaction/providers/adk.py +40 -0
  128. ksadk/interaction/providers/codex.py +94 -0
  129. ksadk/interaction/providers/langgraph.py +58 -0
  130. ksadk/kernel/__init__.py +117 -0
  131. ksadk/kernel/authorization.py +258 -0
  132. ksadk/kernel/bootstrap.py +1074 -0
  133. ksadk/kernel/contract_fingerprints.py +62 -0
  134. ksadk/kernel/contracts.py +370 -0
  135. ksadk/kernel/control.py +220 -0
  136. ksadk/kernel/errors.py +79 -0
  137. ksadk/kernel/ingress.py +1123 -0
  138. ksadk/kernel/mapping.py +111 -0
  139. ksadk/kernel/memory_store.py +1134 -0
  140. ksadk/kernel/postgres_store.py +1757 -0
  141. ksadk/kernel/recovery.py +452 -0
  142. ksadk/kernel/runtime_identity.py +103 -0
  143. ksadk/kernel/sql/001_agent_kernel.sql +120 -0
  144. ksadk/kernel/sqlite_store.py +1411 -0
  145. ksadk/kernel/state.py +145 -0
  146. ksadk/kernel/store.py +232 -0
  147. ksadk/kernel/worker.py +964 -0
  148. ksadk/knowledge_base/client.py +7 -0
  149. ksadk/knowledge_base/service.py +32 -5
  150. ksadk/memory/__init__.py +61 -0
  151. ksadk/memory/adk/backends/base_ltm_backend.py +96 -1
  152. ksadk/memory/adk/backends/http_ltm_backend.py +14 -5
  153. ksadk/memory/adk/backends/inmemory_ltm_backend.py +136 -3
  154. ksadk/memory/adk/backends/sdk_ltm_backend.py +384 -2
  155. ksadk/memory/adk/backends/sqlite_ltm_backend.py +95 -0
  156. ksadk/memory/coordinator.py +461 -0
  157. ksadk/memory/events.py +202 -0
  158. ksadk/memory/extraction.py +228 -0
  159. ksadk/memory/ltm_backend_factory.py +16 -3
  160. ksadk/memory/models.py +316 -0
  161. ksadk/memory/policy.py +215 -0
  162. ksadk/memory/provider.py +47 -0
  163. ksadk/memory/provider_adapter.py +159 -0
  164. ksadk/memory/provider_resolver.py +71 -0
  165. ksadk/memory/providers/__init__.py +5 -0
  166. ksadk/memory/providers/local_sqlite.py +497 -0
  167. ksadk/memory/resolved_policy.py +145 -0
  168. ksadk/memory/service.py +188 -6
  169. ksadk/model_proxy/bootstrap.py +16 -9
  170. ksadk/model_proxy/detect.py +202 -9
  171. ksadk/model_proxy/namespace.py +39 -15
  172. ksadk/model_proxy/server.py +24 -5
  173. ksadk/model_proxy/transform.py +60 -2
  174. ksadk/observability/__init__.py +25 -0
  175. ksadk/observability/session_log.py +420 -0
  176. ksadk/observability/trajectory.py +105 -0
  177. ksadk/plugins/__init__.py +167 -0
  178. ksadk/plugins/bridges/__init__.py +45 -0
  179. ksadk/plugins/bridges/codex.py +552 -0
  180. ksadk/plugins/bridges/dsh.py +1116 -0
  181. ksadk/plugins/builtins.py +747 -0
  182. ksadk/plugins/bundle.py +246 -0
  183. ksadk/plugins/bundle_security.py +167 -0
  184. ksadk/plugins/composition.py +529 -0
  185. ksadk/plugins/context_contributor.py +437 -0
  186. ksadk/plugins/contracts.py +451 -0
  187. ksadk/plugins/dsh_toolchain.py +935 -0
  188. ksadk/plugins/ecosystem_bridge.py +1105 -0
  189. ksadk/plugins/ecosystem_probe.py +191 -0
  190. ksadk/plugins/host.py +724 -0
  191. ksadk/plugins/providers/__init__.py +85 -0
  192. ksadk/plugins/providers/bundles/ksadk-codex/cordis.patch.yml +3 -0
  193. ksadk/plugins/providers/bundles/ksadk-codex/index.mjs +18 -0
  194. ksadk/plugins/providers/bundles/ksadk-codex/package.json +19 -0
  195. ksadk/plugins/providers/bundles/ksadk-harness/cordis.patch.yml +3 -0
  196. ksadk/plugins/providers/bundles/ksadk-harness/index.mjs +19 -0
  197. ksadk/plugins/providers/bundles/ksadk-harness/package.json +19 -0
  198. ksadk/plugins/providers/codex.py +722 -0
  199. ksadk/plugins/providers/codex_dsh.py +83 -0
  200. ksadk/plugins/providers/dsh.py +951 -0
  201. ksadk/plugins/providers/dsh_descriptor_host.py +226 -0
  202. ksadk/plugins/providers/harness.py +627 -0
  203. ksadk/plugins/providers/harness_dsh.py +91 -0
  204. ksadk/plugins/providers/legacy.py +215 -0
  205. ksadk/plugins/providers/legacy_catalog.py +100 -0
  206. ksadk/plugins/providers/shipped_dsh.py +370 -0
  207. ksadk/plugins/resolver.py +331 -0
  208. ksadk/plugins/subagent_providers/__init__.py +12 -0
  209. ksadk/plugins/subagent_providers/codex.py +443 -0
  210. ksadk/plugins/subagents.py +333 -0
  211. ksadk/prompts/__init__.py +71 -0
  212. ksadk/prompts/compiler.py +215 -0
  213. ksadk/prompts/models.py +82 -0
  214. ksadk/prompts/projection.py +89 -0
  215. ksadk/prompts/resolved.py +137 -0
  216. ksadk/prompts/sources.py +233 -0
  217. ksadk/runners/_langgraph_runner_streams.py +822 -0
  218. ksadk/runners/adk_runner.py +5 -5
  219. ksadk/runners/base_runner.py +16 -0
  220. ksadk/runners/factory.py +1 -2
  221. ksadk/runners/langgraph_runner.py +198 -437
  222. ksadk/runtime/_runner_adapter/__init__.py +1 -0
  223. ksadk/runtime/_runner_adapter/stream_mapping.py +797 -0
  224. ksadk/runtime/adapter.py +119 -2
  225. ksadk/runtime/conversation_execution.py +316 -182
  226. ksadk/runtime/executor.py +144 -3
  227. ksadk/runtime/factory.py +268 -8
  228. ksadk/runtime/framework_adapters.py +18 -0
  229. ksadk/runtime/hosted_finalizer.py +268 -0
  230. ksadk/runtime/launch.py +14 -1
  231. ksadk/runtime/preprocessing.py +25 -3
  232. ksadk/runtime/runner_adapter.py +293 -508
  233. ksadk/runtime/usage.py +33 -0
  234. ksadk/sandbox/__init__.py +2 -1
  235. ksadk/sandbox/backends/e2b.py +35 -2
  236. ksadk/sandbox/factory.py +72 -0
  237. ksadk/scheduler/__init__.py +18 -0
  238. ksadk/scheduler/calendar.py +102 -0
  239. ksadk/scheduler/contracts.py +254 -0
  240. ksadk/scheduler/dispatcher.py +129 -0
  241. ksadk/scheduler/engine.py +416 -0
  242. ksadk/scheduler/sqlite_store.py +563 -0
  243. ksadk/server/composition.py +8 -0
  244. ksadk/server/factory.py +69 -6
  245. ksadk/server/routes/kernel_ingress.py +258 -0
  246. ksadk/server/routes/openai_compat.py +88 -8
  247. ksadk/server/routes/projection.py +35 -20
  248. ksadk/server/routes/run.py +94 -0
  249. ksadk/server/routes/sessions.py +2 -0
  250. ksadk/server/routes/streaming.py +5 -2
  251. ksadk/server/static/assets/{ArtifactsPanel-CakCqxEN.js → ArtifactsPanel-10GPXIJ6.js} +1 -1
  252. ksadk/server/static/assets/{CodeBlock-CynLknyO.js → CodeBlock-BXk1l-G1.js} +4 -4
  253. ksadk/server/static/assets/MathMessageMarkdown-BorAY7qD.css +1 -0
  254. ksadk/server/static/assets/{MathMessageMarkdown-3sQdOysS.js → MathMessageMarkdown-D9uB55Oh.js} +4 -4
  255. ksadk/server/static/assets/MermaidBlock--OEYoXIJ.js +312 -0
  256. ksadk/server/static/assets/NativeTerminalPanel-DrEe1syq.js +1 -0
  257. ksadk/server/static/assets/abnfDiagram-VCTEODGH-eeTFJLvo.js +1 -0
  258. ksadk/server/static/assets/arc-S3ZNbIAd.js +1 -0
  259. ksadk/server/static/assets/architecture-7GRP2DOG-Dk9nRQ6-.js +1 -0
  260. ksadk/server/static/assets/architectureDiagram-5GKGNRK7-CRjgEJDX.js +36 -0
  261. ksadk/server/static/assets/blockDiagram-NRAW4CY4-C7bsBoNH.js +129 -0
  262. ksadk/server/static/assets/c4Diagram-UCG6FXSJ-BX3c33Ob.js +38 -0
  263. ksadk/server/static/assets/channel-s354Yo6o.js +1 -0
  264. ksadk/server/static/assets/chunk-2Q5K7J3B-CDpPpKR5.js +1 -0
  265. ksadk/server/static/assets/{chunk-FMBD7UC4-B_fH2YuH.js → chunk-5VM5RSS4-bZ7ws-8m.js} +1 -1
  266. ksadk/server/static/assets/{chunk-ND2GUHAM-D6rFLaVV.js → chunk-F27PBJKO-D2r0pvhY.js} +1 -1
  267. ksadk/server/static/assets/chunk-G27WJ6UU-CZwF3oUP.js +231 -0
  268. ksadk/server/static/assets/{chunk-4BX2VUAB-B9drTgOW.js → chunk-JWPE2WC7-DigFYCML.js} +1 -1
  269. ksadk/server/static/assets/chunk-LCL6LL3I-CnorGV5q.js +206 -0
  270. ksadk/server/static/assets/chunk-POPQ4Y6H-CexntQA-.js +1 -0
  271. ksadk/server/static/assets/chunk-RHFEMEQ7-CHTC7UxA.js +168 -0
  272. ksadk/server/static/assets/chunk-SVP7TREG-BC1EWt_-.js +88 -0
  273. ksadk/server/static/assets/chunk-XXDRQBXY-BTG24xN0.js +1 -0
  274. ksadk/server/static/assets/classDiagram-DTDB5LWJ-Dd0nucl9.js +1 -0
  275. ksadk/server/static/assets/classDiagram-v2-JRS7N3AN-Dd0nucl9.js +1 -0
  276. ksadk/server/static/assets/{cose-bilkent-S5V4N54A-ChNs_Mdk.js → cose-bilkent-JH36ORCC-CkonRdAS.js} +1 -1
  277. ksadk/server/static/assets/cynefin-OW5HDTMX-BBlT4uMf.js +1 -0
  278. ksadk/server/static/assets/cynefinDiagram-5FMLGOSQ-DEOCBe15.js +62 -0
  279. ksadk/server/static/assets/cytoscape.esm-CyCl8rPi.js +321 -0
  280. ksadk/server/static/assets/dagre-3AP2YEHR-DBThPuLa.js +4 -0
  281. ksadk/server/static/assets/dagre-ClTPrTht.js +1 -0
  282. ksadk/server/static/assets/diagram-S7CK7UJ4-DsZHrnpJ.js +30 -0
  283. ksadk/server/static/assets/diagram-UQ7AKVKN-BJR4nhVr.js +41 -0
  284. ksadk/server/static/assets/diagram-VSXAHHWV-xzcERX0a.js +3 -0
  285. ksadk/server/static/assets/diagram-VX7I27RA-tn2xM1xu.js +24 -0
  286. ksadk/server/static/assets/diagram-Z3DM3KII-BZPGBkw5.js +24 -0
  287. ksadk/server/static/assets/{dist-gLnrGsoU.js → dist-4zN1_tq5.js} +1 -1
  288. ksadk/server/static/assets/{dist-C1sz5Eo3.js → dist-8VWI-2bZ.js} +1 -1
  289. ksadk/server/static/assets/{dist-BjOdlDjj.js → dist-B-46q3Hk.js} +1 -1
  290. ksadk/server/static/assets/{dist-o2OVmKvt.js → dist-B0gdk4rl.js} +1 -1
  291. ksadk/server/static/assets/{dist-4N2NMVYg.js → dist-B1oWRmrH.js} +1 -1
  292. ksadk/server/static/assets/{dist-CmZHzlwZ.js → dist-BI1qQH4n.js} +1 -1
  293. ksadk/server/static/assets/{dist-X4TnqwOK.js → dist-BJLUwH6W.js} +1 -1
  294. ksadk/server/static/assets/{dist-B5oS1zcj.js → dist-Bbwqa8TG.js} +1 -1
  295. ksadk/server/static/assets/{dist-j6Dxmf_j.js → dist-Btyo4vX4.js} +1 -1
  296. ksadk/server/static/assets/{dist-DQU9EWw-.js → dist-C71CsujO.js} +1 -1
  297. ksadk/server/static/assets/{dist-BIlKoW0k.js → dist-CXpH_Rdd.js} +1 -1
  298. ksadk/server/static/assets/{dist-DJN_6Y39.js → dist-Cq4OL6nO.js} +1 -1
  299. ksadk/server/static/assets/{dist-Dli7qW-B.js → dist-D1V3f1B4.js} +1 -1
  300. ksadk/server/static/assets/{dist-fhOuWds5.js → dist-DJmCPRVB.js} +1 -1
  301. ksadk/server/static/assets/{dist-CWV4lDr1.js → dist-DQAB0qn_.js} +2 -2
  302. ksadk/server/static/assets/{dist-D6MpCZtz.js → dist-DUwKa_l6.js} +1 -1
  303. ksadk/server/static/assets/dist-DdRBIceA.js +1 -0
  304. ksadk/server/static/assets/{dist-DWKByxWV.js → dist-DfGFrb0v.js} +1 -1
  305. ksadk/server/static/assets/{dist-DsHPdk3W.js → dist-DjhwGUgZ.js} +1 -1
  306. ksadk/server/static/assets/{dist-B-jNR6Vn.js → dist-DyqV4fL4.js} +1 -1
  307. ksadk/server/static/assets/{dist-BB3-OwTQ.js → dist-M67Hwu0n.js} +1 -1
  308. ksadk/server/static/assets/{dist-_pHPTyZ-.js → dist-u8tVH5Ak.js} +1 -1
  309. ksadk/server/static/assets/ebnfDiagram-PWID7BFC-DVfMsLge.js +1 -0
  310. ksadk/server/static/assets/erDiagram-SSCWMZ5O-CWEZSYaw.js +99 -0
  311. ksadk/server/static/assets/eventmodeling-NTZA5JFV-Dr5okd8V.js +1 -0
  312. ksadk/server/static/assets/flowDiagram-A5DVABFB-VEO-cVcO.js +1 -0
  313. ksadk/server/static/assets/ganttDiagram-EL5Y4UJY-TWIxoyYL.js +292 -0
  314. ksadk/server/static/assets/gitGraph-4MIJSDKK-CKiKY9Cf.js +1 -0
  315. ksadk/server/static/assets/gitGraphDiagram-WWUBYQGX-DDh2hd2S.js +106 -0
  316. ksadk/server/static/assets/index-B2k_urY8.js +241 -0
  317. ksadk/server/static/assets/index-ILPt6IWF.css +2 -0
  318. ksadk/server/static/assets/info-A6RAGUB7-ubA4Nm_p.js +1 -0
  319. ksadk/server/static/assets/infoDiagram-RXCK75RN-CgoyWiDR.js +2 -0
  320. ksadk/server/static/assets/{ishikawaDiagram-YF4QCWOH-K0OOfVna.js → ishikawaDiagram-5VMMS53U-CyRIu_om.js} +6 -6
  321. ksadk/server/static/assets/{journeyDiagram-JHISSGLW-8LeOJaZp.js → journeyDiagram-EYS64GPL-DN5JXHzN.js} +6 -6
  322. ksadk/server/static/assets/{kanban-definition-UN3LZRKU-C6uCgZrW.js → kanban-definition-3QL26DDD-CNP3ui66.js} +10 -10
  323. ksadk/server/static/assets/katex-DWEzQy1d.js +257 -0
  324. ksadk/server/static/assets/{linear-hdBcYzM8.js → linear-C-qHp7d2.js} +1 -1
  325. ksadk/server/static/assets/mermaid-parser.core-Cl-K943T.js +166 -0
  326. ksadk/server/static/assets/{mindmap-definition-RKZ34NQL-Bjy_2v4_.js → mindmap-definition-FBJOCRG2-D5DB5mYm.js} +29 -29
  327. ksadk/server/static/assets/packet-AYTQ26CC-C7R3NUlK.js +1 -0
  328. ksadk/server/static/assets/pegDiagram-XKGWAZYB-BQVc9ia_.js +1 -0
  329. ksadk/server/static/assets/pie-WAS4IAKB-BIT6qjr3.js +1 -0
  330. ksadk/server/static/assets/pieDiagram-E7YTZNPT-B6UCAvtY.js +39 -0
  331. ksadk/server/static/assets/{quadrantDiagram-W4KKPZXB-BmkRbwCg.js → quadrantDiagram-AXDQQJYC-mIr2d3eb.js} +6 -6
  332. ksadk/server/static/assets/radar-RG4KPBEZ-l5noef9X.js +1 -0
  333. ksadk/server/static/assets/railroad-74A4TZTK-Baea6ZvM.js +1 -0
  334. ksadk/server/static/assets/railroad-abnf-HS5TGJTU-OKn8zZnU.js +1 -0
  335. ksadk/server/static/assets/railroad-ebnf-LZEXJU2U-DdKAKC4l.js +1 -0
  336. ksadk/server/static/assets/railroad-peg-WCYAUIDC-Bds8udlG.js +1 -0
  337. ksadk/server/static/assets/railroadDiagram-O6MQD6OU-Dt3FFDmK.js +1 -0
  338. ksadk/server/static/assets/requirementDiagram-EFPCY7ZU-Cz_vQtgF.js +84 -0
  339. ksadk/server/static/assets/{sankeyDiagram-5OEKKPKP-l6iXmU65.js → sankeyDiagram-P5KCCOFB-wlO1TsH5.js} +7 -7
  340. ksadk/server/static/assets/{sequenceDiagram-3UESZ5HK-Cq6UBeQB.js → sequenceDiagram-WJ2MYXX4-CHRbElYq.js} +10 -10
  341. ksadk/server/static/assets/sizeCapture-X5ZJPWSS-DXX54iyO.js +1 -0
  342. ksadk/server/static/assets/stateDiagram-HBIQ2CUA-Dp_lw9II.js +1 -0
  343. ksadk/server/static/assets/stateDiagram-v2-4QOOHH4V-5b-8o2iS.js +1 -0
  344. ksadk/server/static/assets/swimlanes-XN3QIQJK-D8O5UlLG.js +1 -0
  345. ksadk/server/static/assets/swimlanesDiagram-VK2B7HYN-uf6WPRA4.js +8 -0
  346. ksadk/server/static/assets/{timeline-definition-PNZ67QCA-DEz24vV0.js → timeline-definition-24CTP7MA-8mfKcxvG.js} +7 -7
  347. ksadk/server/static/assets/treeView-Q6P3EWNA-CK5CSrSO.js +1 -0
  348. ksadk/server/static/assets/treemap-WGGIJYW6-Ch2BKgAM.js +1 -0
  349. ksadk/server/static/assets/vennDiagram-4TSXK5OY-EnNl0DE7.js +34 -0
  350. ksadk/server/static/assets/wardley-WFR3VGLG-YW3Q0ml_.js +1 -0
  351. ksadk/server/static/assets/wardleyDiagram-VM6X3IG4-DBu5fbYr.js +78 -0
  352. ksadk/server/static/assets/xychartDiagram-S5SC5T6Z-BSVXs4IY.js +7 -0
  353. ksadk/server/static/index.html +2 -2
  354. ksadk/sessions/__init__.py +26 -9
  355. ksadk/sessions/_local_service_sync.py +688 -0
  356. ksadk/sessions/_local_tables.py +21 -0
  357. ksadk/sessions/_postgres_schema.py +305 -0
  358. ksadk/sessions/_postgres_tables.py +15 -0
  359. ksadk/sessions/base.py +80 -1
  360. ksadk/sessions/in_memory.py +53 -2
  361. ksadk/sessions/local_service.py +63 -604
  362. ksadk/sessions/postgres_service.py +58 -148
  363. ksadk/sessions/resilient.py +35 -1
  364. ksadk/skills/service_client.py +48 -0
  365. ksadk/studio/agent_lifecycle.py +26 -20
  366. ksadk/studio/api.py +1063 -69
  367. ksadk/studio/api_catalog_routes.py +5 -0
  368. ksadk/studio/api_contracts.py +148 -6
  369. ksadk/studio/api_memory_routes.py +82 -0
  370. ksadk/studio/api_plugin_routes.py +480 -0
  371. ksadk/studio/attachment_store.py +187 -0
  372. ksadk/studio/authoring.py +259 -28
  373. ksadk/studio/authoring_coordinator.py +809 -67
  374. ksadk/studio/builder.py +197 -40
  375. ksadk/studio/capabilities.py +17 -0
  376. ksadk/studio/cloud.py +1920 -95
  377. ksadk/studio/codex_agent_service.py +137 -15
  378. ksadk/studio/codex_authoring.py +469 -0
  379. ksadk/studio/codex_builder.py +177 -25
  380. ksadk/studio/codex_manifest.py +71 -22
  381. ksadk/studio/codex_run.py +59 -4
  382. ksadk/studio/compatibility_report.py +445 -0
  383. ksadk/studio/compiler.py +7 -1
  384. ksadk/studio/contracts.py +234 -4
  385. ksadk/studio/dsh_provider_registration.py +768 -0
  386. ksadk/studio/event_store.py +79 -101
  387. ksadk/studio/framework_run.py +264 -3
  388. ksadk/studio/hosted_kernel.py +317 -0
  389. ksadk/studio/manifest_resolver.py +131 -0
  390. ksadk/studio/model_client.py +95 -9
  391. ksadk/studio/model_profile_service.py +1 -1
  392. ksadk/studio/operations.py +47 -5
  393. ksadk/studio/otel_trace.py +348 -42
  394. ksadk/studio/pcm_memory.py +85 -0
  395. ksadk/studio/plugin_composition.py +301 -0
  396. ksadk/studio/plugin_kernel_adapter.py +128 -0
  397. ksadk/studio/plugin_runtime.py +652 -0
  398. ksadk/studio/repository.py +23 -2
  399. ksadk/studio/resource_catalog.py +49 -1
  400. ksadk/studio/run_service.py +1266 -202
  401. ksadk/studio/runtime_source.py +51 -17
  402. ksadk/studio/scheduler_runtime.py +374 -0
  403. ksadk/studio/scheduler_service.py +211 -0
  404. ksadk/studio/service.py +1815 -117
  405. ksadk/studio/shared_web.py +199 -50
  406. ksadk/studio/soul.py +52 -0
  407. ksadk/studio/static/assets/index-DXs1Eq4M.css +1 -0
  408. ksadk/studio/static/assets/index-DeDqwTsD.js +283 -0
  409. ksadk/studio/static/index.html +2 -2
  410. ksadk/studio/templates.py +100 -8
  411. ksadk/studio/validator.py +20 -1
  412. ksadk/studio/workspace.py +31 -32
  413. ksadk/tracing/setup.py +304 -3
  414. ksadk/version.py +1 -1
  415. ksadk_runtime_common/schemas/runtime_event_v1.json +37 -0
  416. ksadk_runtime_common/schemas/runtime_event_v2.json +271 -0
  417. ksadk_runtime_common/workspace_files/path_utils.py +41 -0
  418. ksadk/events/parser.py +0 -191
  419. ksadk/server/static/assets/MathMessageMarkdown-DeYh8QPr.css +0 -1
  420. ksadk/server/static/assets/MermaidBlock-NERD_ef7.js +0 -303
  421. ksadk/server/static/assets/NativeTerminalPanel-CiHWf82q.js +0 -1
  422. ksadk/server/static/assets/arc-DrgjcKhl.js +0 -1
  423. ksadk/server/static/assets/architecture-7EHR7CIX-CpZLRCcY.js +0 -1
  424. ksadk/server/static/assets/architectureDiagram-3BPJPVTR-BXoVRbQ6.js +0 -36
  425. ksadk/server/static/assets/blockDiagram-GPEHLZMM-BnaB3Ywv.js +0 -132
  426. ksadk/server/static/assets/c4Diagram-AAUBKEIU-Dw4weZcp.js +0 -10
  427. ksadk/server/static/assets/channel-Dt3rQTFI.js +0 -1
  428. ksadk/server/static/assets/chunk-2J33WTMH-ChjpLK7j.js +0 -1
  429. ksadk/server/static/assets/chunk-55IACEB6-CK4ROATy.js +0 -1
  430. ksadk/server/static/assets/chunk-727SXJPM-B9KtTTgw.js +0 -206
  431. ksadk/server/static/assets/chunk-AQP2D5EJ-1O1mki3m.js +0 -231
  432. ksadk/server/static/assets/chunk-QZHKN3VN-iXEZtKQc.js +0 -1
  433. ksadk/server/static/assets/classDiagram-4FO5ZUOK-DIveV17Q.js +0 -1
  434. ksadk/server/static/assets/classDiagram-v2-Q7XG4LA2-DIveV17Q.js +0 -1
  435. ksadk/server/static/assets/cytoscape.esm-DelgaX4f.js +0 -321
  436. ksadk/server/static/assets/dagre-BM42HDAG-D0QXg_MQ.js +0 -4
  437. ksadk/server/static/assets/dagre-Bx709z4p.js +0 -1
  438. ksadk/server/static/assets/diagram-2AECGRRQ-DBDDKwBQ.js +0 -43
  439. ksadk/server/static/assets/diagram-5GNKFQAL-BkwDOxmO.js +0 -10
  440. ksadk/server/static/assets/diagram-KO2AKTUF-Bv8waYvY.js +0 -3
  441. ksadk/server/static/assets/diagram-LMA3HP47-e1VECDdu.js +0 -24
  442. ksadk/server/static/assets/diagram-OG6HWLK6-Ds9adfRl.js +0 -24
  443. ksadk/server/static/assets/dist-B5J2uhNk.js +0 -1
  444. ksadk/server/static/assets/erDiagram-TEJ5UH35-BPItFKH6.js +0 -85
  445. ksadk/server/static/assets/eventmodeling-FCH6USID-DYFSxbqr.js +0 -1
  446. ksadk/server/static/assets/flowDiagram-I6XJVG4X-BbYB9w5Y.js +0 -162
  447. ksadk/server/static/assets/ganttDiagram-6RSMTGT7-TQXa0KXv.js +0 -292
  448. ksadk/server/static/assets/gitGraph-WXDBUCRP-DyNYp6BN.js +0 -1
  449. ksadk/server/static/assets/gitGraphDiagram-PVQCEYII-bKblCnpa.js +0 -106
  450. ksadk/server/static/assets/graphlib-B8gBHxth.js +0 -1
  451. ksadk/server/static/assets/index-R52pJJvg.js +0 -177
  452. ksadk/server/static/assets/index-jJr3_955.css +0 -2
  453. ksadk/server/static/assets/info-J43DQDTF-WUx7qTde.js +0 -1
  454. ksadk/server/static/assets/infoDiagram-5YYISTIA-BGVT7J_i.js +0 -2
  455. ksadk/server/static/assets/katex-CYWseY5E.js +0 -265
  456. ksadk/server/static/assets/mermaid-parser.core-BWrDjSZM.js +0 -161
  457. ksadk/server/static/assets/packet-YPE3B663-BN13y_xl.js +0 -1
  458. ksadk/server/static/assets/pie-LRSECV5Y-ftSLXhhc.js +0 -1
  459. ksadk/server/static/assets/pieDiagram-4H26LBE5-GmmqNiVH.js +0 -30
  460. ksadk/server/static/assets/radar-GUYGQ44K-jaICkIeO.js +0 -1
  461. ksadk/server/static/assets/requirementDiagram-4Y6WPE33-DSWFqL7c.js +0 -84
  462. ksadk/server/static/assets/stateDiagram-AJRCARHV-qzTQpg3Y.js +0 -1
  463. ksadk/server/static/assets/stateDiagram-v2-BHNVJYJU-BYCoYGAN.js +0 -1
  464. ksadk/server/static/assets/treeView-BLDUP644-Cpib_vlz.js +0 -1
  465. ksadk/server/static/assets/treemap-LRROVOQU-DQxfmVHK.js +0 -1
  466. ksadk/server/static/assets/vennDiagram-CIIHVFJN-CMCixki2.js +0 -34
  467. ksadk/server/static/assets/wardley-L42UT6IY-BQYHnnkU.js +0 -1
  468. ksadk/server/static/assets/wardleyDiagram-YWT4CUSO-CVzB8F9K.js +0 -78
  469. ksadk/server/static/assets/xychartDiagram-2RQKCTM6-BFBqBLc1.js +0 -7
  470. ksadk/studio/evaluation.py +0 -192
  471. ksadk/studio/static/assets/index-CaEN0eTR.css +0 -1
  472. ksadk/studio/static/assets/index-DI2eY_NH.js +0 -252
  473. {agentengine_sdk_python-0.8.1.dist-info → agentengine_sdk_python-0.8.3.dist-info}/WHEEL +0 -0
  474. {agentengine_sdk_python-0.8.1.dist-info → agentengine_sdk_python-0.8.3.dist-info}/entry_points.txt +0 -0
  475. {agentengine_sdk_python-0.8.1.dist-info → agentengine_sdk_python-0.8.3.dist-info}/licenses/LICENSE +0 -0
  476. {agentengine_sdk_python-0.8.1.dist-info → agentengine_sdk_python-0.8.3.dist-info}/top_level.txt +0 -0
ksadk/studio/contracts.py CHANGED
@@ -43,10 +43,37 @@ class Instructions(ContractModel):
43
43
  task: str = Field(default="", max_length=32768)
44
44
 
45
45
 
46
+ class SoulDocument(ContractModel):
47
+ """Reviewed identity/boundary source that compiles ahead of task prompts.
48
+
49
+ This is deliberately an immutable revision input, not a mutable memory
50
+ file. Runtime may read the compiled snapshot but cannot promote a new
51
+ SoulDocument from a conversation.
52
+ """
53
+
54
+ schema_version: Literal["agentkit.soul/v1"] = "agentkit.soul/v1"
55
+ identity: str = Field(min_length=1, max_length=4096)
56
+ principles: list[str] = Field(default_factory=list, max_length=64)
57
+ boundaries: list[str] = Field(default_factory=list, max_length=64)
58
+ tone: str | None = Field(default=None, max_length=1024)
59
+
60
+ @field_validator("principles", "boundaries")
61
+ @classmethod
62
+ def validate_nonempty_items(cls, value: list[str]) -> list[str]:
63
+ if any(not item.strip() for item in value):
64
+ raise ValueError("soul principles and boundaries must not contain empty items")
65
+ return value
66
+
67
+
46
68
  class ModelParameters(ContractModel):
47
- temperature: float = Field(default=0.2, ge=0, le=2)
48
- max_tokens: int = Field(default=2048, ge=1, le=131072)
69
+ # 三者 None=未配置:请求 payload 一律不携带该字段,使用服务端默认,
70
+ # 规避各模型族对 temperature/max_tokens 的硬约束(如 kimi 只接受默认温度)。
71
+ temperature: float | None = Field(default=None, ge=0, le=2)
72
+ max_tokens: int | None = Field(default=None, ge=1, le=131072)
49
73
  top_p: float | None = Field(default=None, gt=0, le=1)
74
+ # 是否允许在 chat 请求中携带 response_format(json_object 结构化输出)。
75
+ # 关闭后 compose 等结构化调用退回纯文本输出,兼容不支持该字段的网关。
76
+ allow_json_response_format: bool = Field(default=True)
50
77
 
51
78
 
52
79
  class ModelSpec(ContractModel):
@@ -218,20 +245,92 @@ class ExecutionSpec(ContractModel):
218
245
  class CompactionSpec(ContractModel):
219
246
  enabled: bool = True
220
247
  threshold_ratio: float = Field(default=0.8, gt=0, le=1)
248
+ # PCM:双阈值(方案 §8.2 / §9.1)。soft=主动整理,hard=强制压缩。
249
+ soft_threshold_ratio: float = Field(default=0.50, gt=0, le=1)
250
+ hard_threshold_ratio: float = Field(default=0.85, gt=0, le=1)
251
+ preserve_working_state: bool = True
252
+ flush_memory_before_compaction: bool = True
253
+
254
+ @model_validator(mode="after")
255
+ def validate_ratios(self) -> "CompactionSpec":
256
+ if self.soft_threshold_ratio >= self.hard_threshold_ratio:
257
+ raise ValueError("softThresholdRatio 必须小于 hardThresholdRatio")
258
+ return self
259
+
260
+
261
+ class ContextContributorsSpec(ContractModel):
262
+ """ContextContributor 开关与预算(方案 §5.1 / §8.7)。默认按 policy,可显式开关。"""
263
+
264
+ workspace_rules: bool | None = None
265
+ skill_manifest: bool | None = None
266
+ memory_recall: bool | None = None
267
+
268
+
269
+ class RolloutSpec(ContractModel):
270
+ """AgentVersion 级灰度/回退状态(方案 §8.5)。替代环境变量控制正式灰度。"""
271
+
272
+ context_engine: Literal["off", "shadow", "enabled"] = "shadow"
273
+ memory_write: Literal["off", "shadow", "enabled"] = "shadow"
221
274
 
222
275
 
223
276
  class ContextSpec(ContractModel):
224
277
  max_input_tokens: int = Field(default=32000, ge=1024)
225
278
  reserve_output_tokens: int = Field(default=4096, ge=1)
226
279
  compaction: CompactionSpec = Field(default_factory=CompactionSpec)
280
+ # prompt_ownership:标记本 Agent 的 system prompt 归属。
281
+ # framework(默认)= 框架自带 SystemMessage,ksadk 不接管 Runner 输入;
282
+ # ksadk = 由 ksadk 的 PromptCompiler 编译 CompiledPrompt 并接管 instructions。
283
+ prompt_ownership: Literal["framework", "ksadk"] = "framework"
284
+ # PCM:ownership 高阶字段(方案 §5.1)。auto=按 capability 推导,向后兼容现有
285
+ # prompt_ownership;显式 ksadk/framework/native 时覆盖。Studio 据 capability 限制选项。
286
+ ownership: Literal["auto", "ksadk", "framework", "native"] = "auto"
287
+ tokenizer: Literal["auto", "heuristic"] = "auto"
288
+ policy_version: str = Field(default="context-v2", max_length=64)
289
+ contributors: ContextContributorsSpec = Field(default_factory=ContextContributorsSpec)
290
+ rollout: RolloutSpec = Field(default_factory=RolloutSpec)
227
291
 
228
292
  @model_validator(mode="after")
229
293
  def validate_budget(self) -> "ContextSpec":
230
294
  if self.reserve_output_tokens >= self.max_input_tokens:
231
295
  raise ValueError("reserveOutputTokens 必须小于 maxInputTokens")
296
+ # ownership 与 prompt_ownership 一致性:显式 ownership 收窄 prompt_ownership(§5.2)。
297
+ if self.ownership == "ksadk":
298
+ self.prompt_ownership = "ksadk"
299
+ elif self.ownership == "framework":
300
+ self.prompt_ownership = "framework"
301
+ # native 不收窄 prompt_ownership(native runtime 的 prompt 投影由 Adapter 决定)。
232
302
  return self
233
303
 
234
304
 
305
+ class MemoryRecallSpec(ContractModel):
306
+ enabled: bool = True
307
+ max_tokens: int = Field(default=1600, ge=0)
308
+ top_k: int = Field(default=8, ge=1, le=64)
309
+ min_score: float = Field(default=0.45, ge=0, le=1)
310
+
311
+
312
+ class MemoryWriteSpec(ContractModel):
313
+ mode: Literal["off", "explicit_only", "candidate"] = "candidate"
314
+ flush_before_compaction: bool = True
315
+
316
+
317
+ MemoryScope = Literal["tenant", "workspace", "agent", "user"]
318
+
319
+
320
+ def _default_memory_scopes() -> list[MemoryScope]:
321
+ return ["workspace", "agent", "user"]
322
+
323
+
324
+ class MemorySpec(ContractModel):
325
+ """AgentVersion 级 Memory 策略(方案 §5.1 / §10)。Build 只存 providerRef,不存凭证。"""
326
+
327
+ enabled: bool = False
328
+ provider_ref: str = Field(default="local-default", max_length=128)
329
+ recall: MemoryRecallSpec = Field(default_factory=MemoryRecallSpec)
330
+ write: MemoryWriteSpec = Field(default_factory=MemoryWriteSpec)
331
+ scopes: list[MemoryScope] = Field(default_factory=_default_memory_scopes)
332
+
333
+
235
334
  class NetworkPolicy(ContractModel):
236
335
  mode: Literal["restricted", "open"] = "restricted"
237
336
  allowed_hosts: list[str] = Field(default_factory=list)
@@ -257,12 +356,17 @@ class RuntimeRef(ContractModel):
257
356
  project entrypoint that is snapshotted by its Build.
258
357
  """
259
358
 
260
- type: Literal["codex", "adk", "langgraph"]
359
+ type: Literal["codex", "adk", "langgraph", "harness", "plugin"]
261
360
  project_path: str | None = Field(default=None, min_length=1, max_length=1024)
262
361
  entry_point: str | None = Field(default=None, min_length=1, max_length=1024)
263
362
  agent_variable: str = Field(default="root_agent", min_length=1, max_length=256)
264
363
  version: str | None = Field(default=None, min_length=1, max_length=64)
265
364
  detection: Literal["declared", "auto"] = "declared"
365
+ provider_ref: str | None = Field(default=None, min_length=12, max_length=256)
366
+ provider_config: dict[str, Any] = Field(
367
+ default_factory=dict,
368
+ exclude_if=lambda value: not value,
369
+ )
266
370
 
267
371
  @field_validator("project_path", "entry_point")
268
372
  @classmethod
@@ -280,8 +384,32 @@ class RuntimeRef(ContractModel):
280
384
  raise ValueError("Runtime 路径必须是工作区内的相对路径")
281
385
  return normalized
282
386
 
387
+ @field_validator("provider_ref")
388
+ @classmethod
389
+ def validate_provider_ref(cls, value: str | None) -> str | None:
390
+ if value is None:
391
+ return None
392
+ if not re.fullmatch(
393
+ r"plugin://[a-z0-9]+(?:[._-][a-z0-9]+)*@"
394
+ r"\d+\.\d+\.\d+(?:-[0-9A-Za-z.-]+)?(?:\+[0-9A-Za-z.-]+)?",
395
+ value,
396
+ ):
397
+ raise ValueError("Provider 引用必须固定为 plugin://<id>@<exact-version>")
398
+ return value
399
+
400
+ @field_validator("provider_config")
401
+ @classmethod
402
+ def validate_provider_config(cls, value: dict[str, Any]) -> dict[str, Any]:
403
+ _reject_clear_runtime_secrets(value)
404
+ return value
405
+
283
406
  @model_validator(mode="after")
284
407
  def validate_framework_source(self) -> "RuntimeRef":
408
+ if self.type == "plugin":
409
+ if not self.provider_ref:
410
+ raise ValueError("plugin Runtime 必须配置 providerRef")
411
+ elif self.provider_ref is not None or self.provider_config:
412
+ raise ValueError("只有 plugin Runtime 可以配置 providerRef/providerConfig")
285
413
  if self.type in {"adk", "langgraph"}:
286
414
  if not self.project_path:
287
415
  raise ValueError(f"{self.type} Runtime 必须配置 projectPath")
@@ -290,15 +418,45 @@ class RuntimeRef(ContractModel):
290
418
  return self
291
419
 
292
420
 
421
+ _RUNTIME_SECRET_KEY = re.compile(
422
+ r"(?:secret|password|token|api[_-]?key)", re.IGNORECASE
423
+ )
424
+ _RUNTIME_SECRET_REF_PREFIXES = (
425
+ "secret://",
426
+ "env://",
427
+ "credential://",
428
+ "vault://",
429
+ )
430
+
431
+
432
+ def _reject_clear_runtime_secrets(value: Any, *, path: str = "providerConfig") -> None:
433
+ """Provider config is revision data: it may only retain secret references."""
434
+
435
+ if isinstance(value, dict):
436
+ for key, child in value.items():
437
+ child_path = f"{path}.{key}"
438
+ if _RUNTIME_SECRET_KEY.search(str(key)) and child is not None:
439
+ if not isinstance(child, str) or not child.startswith(
440
+ _RUNTIME_SECRET_REF_PREFIXES
441
+ ):
442
+ raise ValueError(f"{child_path} 必须保存 Secret 引用,不能保存明文")
443
+ _reject_clear_runtime_secrets(child, path=child_path)
444
+ elif isinstance(value, list):
445
+ for index, child in enumerate(value):
446
+ _reject_clear_runtime_secrets(child, path=f"{path}[{index}]")
447
+
448
+
293
449
  class AgentSpec(ContractModel):
294
450
  description: str = Field(default="", max_length=1024)
295
451
  runtime: RuntimeRef | None = None
296
452
  instructions: Instructions = Field(default_factory=Instructions)
453
+ soul: SoulDocument | None = None
297
454
  model: ModelSpec | None = None
298
455
  capabilities: CapabilitiesSpec = Field(default_factory=CapabilitiesSpec)
299
456
  bindings: AgentBindings = Field(default_factory=AgentBindings)
300
457
  execution: ExecutionSpec = Field(default_factory=ExecutionSpec)
301
458
  context: ContextSpec = Field(default_factory=ContextSpec)
459
+ memory: MemorySpec = Field(default_factory=MemorySpec)
302
460
  security: SecuritySpec = Field(default_factory=SecuritySpec)
303
461
  evaluation: EvaluationSpec = Field(default_factory=EvaluationSpec)
304
462
 
@@ -383,9 +541,23 @@ class AgentTemplateRecommendation(ContractModel):
383
541
  resource_id: str | None = None
384
542
 
385
543
 
544
+ class AgentBehaviorDesign(ContractModel):
545
+ """Human-readable explanation of the generated Agent behavior contract."""
546
+
547
+ role: str
548
+ objective: str
549
+ operating_principles: list[str] = Field(default_factory=list)
550
+ workflow: list[str] = Field(default_factory=list)
551
+ explicit_boundaries: list[str] = Field(default_factory=list)
552
+ safety_boundaries: list[str] = Field(default_factory=list)
553
+ output_expectations: list[str] = Field(default_factory=list)
554
+ source_notes: list[str] = Field(default_factory=list)
555
+
556
+
386
557
  class AgentTemplateComposition(ContractModel):
387
558
  template_id: Literal["blank", "research"]
388
559
  spec: AgentSpec
560
+ behavior_design: AgentBehaviorDesign | None = None
389
561
  recommendations: list[AgentTemplateRecommendation] = Field(default_factory=list)
390
562
  warnings: list[str] = Field(default_factory=list)
391
563
 
@@ -411,10 +583,12 @@ class ResolvedAgentSpec(ContractModel):
411
583
  source_revision: int
412
584
  compiler_version: str = "1"
413
585
  instructions: Instructions
586
+ soul: SoulDocument | None = None
414
587
  model: ResolvedModel
415
588
  capabilities: ResolvedCapabilities
416
589
  execution: ExecutionSpec
417
590
  context: ContextSpec
591
+ memory: MemorySpec
418
592
  security: SecuritySpec
419
593
  evaluation: EvaluationSpec
420
594
  source_digest: str
@@ -446,17 +620,55 @@ class FileEntry(ContractModel):
446
620
 
447
621
 
448
622
  class BundleManifest(ContractModel):
449
- bundle_format: Literal["agentkit.bundle/v1"] = "agentkit.bundle/v1"
623
+ # v1 remains readable for existing local Build records. Every new Studio
624
+ # build uses v2 because Server admission requires a deterministic plugin
625
+ # lock even when the lock is empty.
626
+ bundle_format: Literal["agentkit.bundle/v1", "agentkit.bundle/v2"] = "agentkit.bundle/v1"
450
627
  agent_id: str
451
628
  source_revision: int
452
629
  resolved_digest: str
453
630
  runtime_type: str = ""
454
631
  source_digest: str = ""
455
632
  runtime_contract: Literal["agentkit.runtime/v1"] = "agentkit.runtime/v1"
633
+ plugin_lock_digest: str = ""
634
+ # A v0.8.2 bundle already used the v2 envelope without a composition.
635
+ # Keep that wire shape readable as the explicit legacy execution profile;
636
+ # newly built bundles write ``composition_mode`` so consumers never need
637
+ # to infer whether PluginHost admission is required from missing files.
638
+ composition_mode: Literal["legacy", "composed"] | None = None
639
+ composition_profile_digest: str | None = None
640
+ hosted_kernel_requirement_digest: str = ""
456
641
  files: list[FileEntry]
457
642
  created_at: str = "1970-01-01T00:00:00Z"
458
643
  bundle_digest: str = ""
459
644
 
645
+ @model_validator(mode="after")
646
+ def validate_composition_mode(self) -> "BundleManifest":
647
+ if self.composition_mode == "composed" and not self.composition_profile_digest:
648
+ raise ValueError("composed Bundle v2 requires compositionProfileDigest")
649
+ if self.composition_mode == "legacy" and self.composition_profile_digest:
650
+ raise ValueError("legacy Bundle v2 cannot declare compositionProfileDigest")
651
+ return self
652
+
653
+ @property
654
+ def execution_profile(self) -> Literal["legacy", "composed"]:
655
+ """Normalize historical v2 manifests without rewriting their bytes.
656
+
657
+ ``compositionMode`` was added after the v0.8.2 envelope. Its absence
658
+ remains a backward-compatible projection: an embedded composition
659
+ digest is composed; its absence selects the established runtime path.
660
+ """
661
+
662
+ if self.composition_mode is not None:
663
+ return self.composition_mode
664
+ return "composed" if self.composition_profile_digest else "legacy"
665
+
666
+
667
+ # ``BundleManifest`` is the existing, installed source type. The explicit
668
+ # name documents that its ``agentkit.bundle/v2`` branch is the Phase 2
669
+ # AgentBundleManifest/v2 contract; it is an alias, not a parallel manifest.
670
+ AgentBundleManifest = BundleManifest
671
+
460
672
 
461
673
  class BuildRecord(ContractModel):
462
674
  id: str
@@ -495,6 +707,7 @@ class Operation(ContractModel):
495
707
  kind: OperationKind
496
708
  status: OperationStatus = OperationStatus.QUEUED
497
709
  resource_id: str
710
+ metadata: dict[str, Any] = Field(default_factory=dict)
498
711
  error: dict[str, Any] | None = None
499
712
  created_at: datetime = Field(default_factory=lambda: datetime.now(timezone.utc))
500
713
  completed_at: datetime | None = None
@@ -551,6 +764,11 @@ class RunRecord(ContractModel):
551
764
  completed_at: datetime | None = None
552
765
  duration_ms: int | None = None
553
766
  duration_source: Literal["runtime", "studio"] | None = None
767
+ # PR-S4:PCM evidence(方案 §6.3)。由 run_service 以 shadow 方式捕获(不进真实输入),
768
+ # 供 Context Inspector 展示 planned/projected/actual + 精度。默认空(未捕获)。
769
+ context_plan: dict[str, Any] | None = None
770
+ prompt_evidence: dict[str, Any] | None = None
771
+ working_state: dict[str, Any] | None = None
554
772
 
555
773
 
556
774
  class RunEvent(ContractModel):
@@ -642,3 +860,15 @@ class DeploymentRecord(ContractModel):
642
860
  version_id: str
643
861
  status: Literal["ADMITTING", "DEPLOYING", "READY", "FAILED", "ROLLED_BACK"]
644
862
  target: DeploymentTarget
863
+ # These are receipts from the existing Agent creation control plane, not
864
+ # Studio-generated deployment identities.
865
+ agent_id: str | None = None
866
+ instance_id: str | None = None
867
+ endpoint: str | None = None
868
+ # Immutable KS3 object selected by this receipt. It is a deployment fact,
869
+ # not a browser-supplied credential or a mutable "latest" alias.
870
+ bundle_uri: str | None = None
871
+ artifact_id: str | None = None
872
+ # New direct-cloud receipts are expected to pass AgentKernel/v1 admission.
873
+ # Older receipts intentionally default to false for read compatibility.
874
+ requires_kernel: bool = False