agentengine-sdk-python 0.8.3__py3-none-any.whl → 0.8.4__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 (509) hide show
  1. {agentengine_sdk_python-0.8.3.dist-info → agentengine_sdk_python-0.8.4.dist-info}/METADATA +9 -8
  2. {agentengine_sdk_python-0.8.3.dist-info → agentengine_sdk_python-0.8.4.dist-info}/RECORD +482 -245
  3. ksadk/_build_provenance.json +1 -1
  4. ksadk/api/client.py +105 -91
  5. ksadk/builders/code_builder.py +36 -9
  6. ksadk/builders/framework_requirements.py +2 -1
  7. ksadk/builders/ks3_uploader.py +36 -7
  8. ksadk/builders/managed_runtime_builder.py +1 -0
  9. ksadk/cli/__init__.py +32 -3
  10. ksadk/cli/cmd_managed_runtime.py +13 -1
  11. ksadk/cli/cmd_plugin.py +6 -1
  12. ksadk/cli/cmd_web.py +2 -5
  13. ksadk/cli/runtime_bootstrap.py +23 -1
  14. ksadk/codex/client.py +424 -96
  15. ksadk/codex/projection.py +24 -0
  16. ksadk/codex/runtime.py +56 -298
  17. ksadk/common/auth.py +16 -10
  18. ksadk/configs/env_registry.py +29 -1
  19. ksadk/conversations/message_projection.py +135 -14
  20. ksadk/conversations/projector.py +4 -6
  21. ksadk/conversations/runtime_invocation.py +5 -0
  22. ksadk/conversations/runtime_payloads.py +1 -0
  23. ksadk/conversations/runtime_preparation.py +30 -27
  24. ksadk/conversations/runtime_resume.py +50 -2
  25. ksadk/conversations/runtime_stream_events.py +5 -0
  26. ksadk/conversations/runtime_streaming.py +25 -7
  27. ksadk/deployment/env_forward.py +2 -2
  28. ksadk/deployment/providers/serverless.py +1 -1
  29. ksadk/events/adapters/_codex_validators.py +18 -7
  30. ksadk/events/adapters/langgraph.py +15 -1
  31. ksadk/events/canonical_store.py +3 -1
  32. ksadk/events/projections.py +1 -1
  33. ksadk/harness/config.py +2 -2
  34. ksadk/harness/runtime.py +27 -27
  35. ksadk/harness/tools.py +38 -13
  36. ksadk/interaction/provider.py +1 -0
  37. ksadk/interaction/providers/langgraph.py +1 -0
  38. ksadk/kernel/bootstrap.py +28 -4
  39. ksadk/kernel/ingress.py +15 -2
  40. ksadk/kernel/sqlite_store.py +27 -0
  41. ksadk/kernel/store.py +3 -0
  42. ksadk/kernel/worker.py +65 -10
  43. ksadk/knowledge_base/client.py +57 -27
  44. ksadk/mcp_runtime/__init__.py +12 -4
  45. ksadk/memory/adk/backends/sdk_ltm_backend.py +161 -41
  46. ksadk/memory/adk/resilient_session_service.py +25 -17
  47. ksadk/memory/adk/short_term_memory.py +26 -9
  48. ksadk/memory/models.py +7 -4
  49. ksadk/memory/provider_resolver.py +3 -0
  50. ksadk/model_proxy/server.py +10 -5
  51. ksadk/plugins/__init__.py +4 -0
  52. ksadk/plugins/artifacts.py +275 -0
  53. ksadk/plugins/bridges/__init__.py +4 -2
  54. ksadk/plugins/bridges/codex.py +120 -13
  55. ksadk/plugins/bridges/dsh.py +340 -156
  56. ksadk/plugins/builtins.py +35 -36
  57. ksadk/plugins/bundle_security.py +28 -4
  58. ksadk/plugins/codex_manifest.py +983 -0
  59. ksadk/plugins/composition.py +8 -0
  60. ksadk/plugins/contracts.py +118 -0
  61. ksadk/plugins/delivery.py +153 -0
  62. ksadk/plugins/dsh_installation_digest.py +71 -0
  63. ksadk/plugins/dsh_toolchain.py +110 -21
  64. ksadk/plugins/ecosystem_probe.py +6 -6
  65. ksadk/plugins/host.py +102 -39
  66. ksadk/plugins/kernel_adapter.py +205 -0
  67. ksadk/plugins/providers/__init__.py +23 -0
  68. ksadk/plugins/providers/bundles/dsh-knowledge/cordis.patch.yml +3 -0
  69. ksadk/plugins/providers/bundles/dsh-knowledge/index.mjs +53 -0
  70. ksadk/plugins/providers/bundles/dsh-knowledge/package.json +16 -0
  71. ksadk/plugins/providers/bundles/dsh-memory/cordis.patch.yml +3 -0
  72. ksadk/plugins/providers/bundles/dsh-memory/index.mjs +175 -0
  73. ksadk/plugins/providers/bundles/dsh-memory/package.json +16 -0
  74. ksadk/plugins/providers/bundles/dsh-platform-resources/client.mjs +166 -0
  75. ksadk/plugins/providers/bundles/dsh-platform-resources/cordis.patch.yml +3 -0
  76. ksadk/plugins/providers/bundles/dsh-platform-resources/index.mjs +9 -0
  77. ksadk/plugins/providers/bundles/dsh-platform-resources/package.json +12 -0
  78. ksadk/plugins/providers/bundles/dsh-skill-center/cordis.patch.yml +3 -0
  79. ksadk/plugins/providers/bundles/dsh-skill-center/index.mjs +125 -0
  80. ksadk/plugins/providers/bundles/dsh-skill-center/package.json +16 -0
  81. ksadk/plugins/providers/bundles/ksadk-dsh-capability-host/cordis.patch.yml +3 -0
  82. ksadk/plugins/providers/bundles/ksadk-dsh-capability-host/index.mjs +870 -0
  83. ksadk/plugins/providers/bundles/ksadk-dsh-capability-host/package.json +27 -0
  84. ksadk/plugins/providers/bundles/ksadk-dsh-studio/client.js +92 -0
  85. ksadk/plugins/providers/bundles/ksadk-dsh-studio/index.mjs +15 -0
  86. ksadk/plugins/providers/bundles/ksadk-dsh-studio/package.json +7 -0
  87. ksadk/plugins/providers/codex.py +335 -69
  88. ksadk/plugins/providers/codex_native.py +368 -0
  89. ksadk/plugins/providers/codex_turn.py +301 -0
  90. ksadk/plugins/providers/dsh_capabilities.py +1389 -0
  91. ksadk/plugins/providers/dsh_mcp.py +467 -0
  92. ksadk/plugins/providers/harness.py +118 -113
  93. ksadk/plugins/providers/mcp_projection.py +150 -0
  94. ksadk/plugins/providers/platform_resources.py +657 -0
  95. ksadk/plugins/resolver.py +8 -1
  96. ksadk/resource_runtime/__init__.py +4 -0
  97. ksadk/resource_runtime/broker.py +616 -0
  98. ksadk/resource_runtime/build_artifacts.py +165 -0
  99. ksadk/resource_runtime/contracts.py +138 -0
  100. ksadk/resource_runtime/discovery_receipts.py +100 -0
  101. ksadk/resource_runtime/discovery_skills.py +172 -0
  102. ksadk/resource_runtime/errors.py +6 -0
  103. ksadk/resource_runtime/ipc.py +142 -0
  104. ksadk/resource_runtime/kernel_approval.py +165 -0
  105. ksadk/resource_runtime/knowledge.py +114 -0
  106. ksadk/resource_runtime/langgraph.py +94 -0
  107. ksadk/resource_runtime/leases.py +191 -0
  108. ksadk/resource_runtime/managed_projection.py +186 -0
  109. ksadk/resource_runtime/mcp_server.py +138 -0
  110. ksadk/resource_runtime/memory_provider.py +318 -0
  111. ksadk/resource_runtime/memory_receipts.py +34 -0
  112. ksadk/resource_runtime/operation_ledger.py +211 -0
  113. ksadk/resource_runtime/plugin_config.py +48 -0
  114. ksadk/resource_runtime/policy_authorization.py +54 -0
  115. ksadk/resource_runtime/process.py +110 -0
  116. ksadk/resource_runtime/skill_artifacts.py +153 -0
  117. ksadk/resource_runtime/skill_runtime.py +42 -0
  118. ksadk/resource_runtime/skill_workspace.py +118 -0
  119. ksadk/resource_runtime/skills.py +215 -0
  120. ksadk/resource_runtime/snapshots.py +180 -0
  121. ksadk/resource_runtime/socket_server.py +103 -0
  122. ksadk/resource_runtime/supervisor.py +380 -0
  123. ksadk/resource_runtime/worker.py +504 -0
  124. ksadk/runners/_langgraph_runner_streams.py +74 -6
  125. ksadk/runners/adk_runner.py +149 -11
  126. ksadk/runners/base_runner.py +29 -1
  127. ksadk/runners/langgraph_runner.py +475 -145
  128. ksadk/runtime/_runner_adapter/stream_mapping.py +142 -18
  129. ksadk/runtime/adapter.py +2 -0
  130. ksadk/runtime/conversation_execution.py +92 -16
  131. ksadk/runtime/executor.py +78 -2
  132. ksadk/runtime/factory.py +29 -273
  133. ksadk/runtime/framework_adapters.py +23 -0
  134. ksadk/runtime/preprocessing.py +10 -2
  135. ksadk/runtime/runner_adapter.py +73 -14
  136. ksadk/runtime_context.py +40 -2
  137. ksadk/sandbox/backends/e2b.py +52 -11
  138. ksadk/sandbox/backends/local_process.py +9 -0
  139. ksadk/sandbox/base.py +2 -0
  140. ksadk/sandbox/e2b_connection.py +66 -0
  141. ksadk/scheduler/sqlite_store.py +18 -0
  142. ksadk/server/composition.py +2 -0
  143. ksadk/server/factory.py +5 -0
  144. ksadk/server/persistence_capability.py +516 -0
  145. ksadk/server/routes/control.py +210 -46
  146. ksadk/server/routes/dependencies.py +15 -0
  147. ksadk/server/routes/models.py +47 -4
  148. ksadk/server/routes/projection.py +252 -12
  149. ksadk/server/routes/sessions.py +284 -107
  150. ksadk/server/routes/streaming.py +43 -9
  151. ksadk/server/static/assets/{ArtifactsPanel-10GPXIJ6.js → ArtifactsPanel-CGbWlMNh.js} +1 -1
  152. ksadk/server/static/assets/{CodeBlock-BXk1l-G1.js → CodeBlock-b4C7upmO.js} +3 -3
  153. ksadk/server/static/assets/{MathMessageMarkdown-D9uB55Oh.js → MathMessageMarkdown-DbdW5A4_.js} +4 -4
  154. ksadk/server/static/assets/{MermaidBlock--OEYoXIJ.js → MermaidBlock-BEBN4Ksz.js} +6 -6
  155. ksadk/server/static/assets/{NativeTerminalPanel-DrEe1syq.js → NativeTerminalPanel-zvL-WpAn.js} +1 -1
  156. ksadk/server/static/assets/{abnfDiagram-VCTEODGH-eeTFJLvo.js → abnfDiagram-VCTEODGH-BYafW7Za.js} +1 -1
  157. ksadk/server/static/assets/{arc-S3ZNbIAd.js → arc-bTohInsS.js} +1 -1
  158. ksadk/server/static/assets/architecture-7GRP2DOG-BW5UtSnx.js +1 -0
  159. ksadk/server/static/assets/{architectureDiagram-5GKGNRK7-CRjgEJDX.js → architectureDiagram-5GKGNRK7-Ch5Lbzsi.js} +1 -1
  160. ksadk/server/static/assets/{blockDiagram-NRAW4CY4-C7bsBoNH.js → blockDiagram-NRAW4CY4-kqF4MDOG.js} +1 -1
  161. ksadk/server/static/assets/{c4Diagram-UCG6FXSJ-BX3c33Ob.js → c4Diagram-UCG6FXSJ-8uSRIODv.js} +1 -1
  162. ksadk/server/static/assets/channel-CF5Up3hQ.js +1 -0
  163. ksadk/server/static/assets/chunk-2Q5K7J3B-KkXX47WI.js +1 -0
  164. ksadk/server/static/assets/{chunk-5VM5RSS4-bZ7ws-8m.js → chunk-5VM5RSS4-DkhehZDr.js} +1 -1
  165. ksadk/server/static/assets/{chunk-F27PBJKO-D2r0pvhY.js → chunk-F27PBJKO-BdXhtPe9.js} +1 -1
  166. ksadk/server/static/assets/{chunk-G27WJ6UU-CZwF3oUP.js → chunk-G27WJ6UU-DPTpvpwi.js} +1 -1
  167. ksadk/server/static/assets/{chunk-JWPE2WC7-DigFYCML.js → chunk-JWPE2WC7-Pqoh38el.js} +1 -1
  168. ksadk/server/static/assets/{chunk-LCL6LL3I-CnorGV5q.js → chunk-LCL6LL3I-DeU00qC-.js} +1 -1
  169. ksadk/server/static/assets/{chunk-POPQ4Y6H-CexntQA-.js → chunk-POPQ4Y6H-CzxScFkr.js} +1 -1
  170. ksadk/server/static/assets/{chunk-RHFEMEQ7-CHTC7UxA.js → chunk-RHFEMEQ7-DpqMx-ux.js} +1 -1
  171. ksadk/server/static/assets/{chunk-SVP7TREG-BC1EWt_-.js → chunk-SVP7TREG-C6t0SypQ.js} +1 -1
  172. ksadk/server/static/assets/{chunk-XXDRQBXY-BTG24xN0.js → chunk-XXDRQBXY-DVaeafZk.js} +1 -1
  173. ksadk/server/static/assets/classDiagram-DTDB5LWJ-Cz81acRQ.js +1 -0
  174. ksadk/server/static/assets/classDiagram-v2-JRS7N3AN-Cz81acRQ.js +1 -0
  175. ksadk/server/static/assets/{cose-bilkent-JH36ORCC-CkonRdAS.js → cose-bilkent-JH36ORCC-Bf9D3tzJ.js} +1 -1
  176. ksadk/server/static/assets/cynefin-OW5HDTMX-DVWs8a2t.js +1 -0
  177. ksadk/server/static/assets/{cynefinDiagram-5FMLGOSQ-DEOCBe15.js → cynefinDiagram-5FMLGOSQ-B9cY3iTz.js} +1 -1
  178. ksadk/server/static/assets/{dagre-3AP2YEHR-DBThPuLa.js → dagre-3AP2YEHR-CSwlx3CB.js} +1 -1
  179. ksadk/server/static/assets/{dagre-ClTPrTht.js → dagre-UBpgon5q.js} +1 -1
  180. ksadk/server/static/assets/{diagram-S7CK7UJ4-DsZHrnpJ.js → diagram-S7CK7UJ4-C9akhN9a.js} +1 -1
  181. ksadk/server/static/assets/{diagram-UQ7AKVKN-BJR4nhVr.js → diagram-UQ7AKVKN-CgedhTPI.js} +1 -1
  182. ksadk/server/static/assets/{diagram-VSXAHHWV-xzcERX0a.js → diagram-VSXAHHWV-Cjucz5BY.js} +1 -1
  183. ksadk/server/static/assets/{diagram-VX7I27RA-tn2xM1xu.js → diagram-VX7I27RA-Dd4Vleyn.js} +1 -1
  184. ksadk/server/static/assets/{diagram-Z3DM3KII-BZPGBkw5.js → diagram-Z3DM3KII-CZ2jGtYW.js} +1 -1
  185. ksadk/server/static/assets/{dist-DdRBIceA.js → dist-B2_CVgKv.js} +1 -1
  186. ksadk/server/static/assets/{dist-Cq4OL6nO.js → dist-B3FR1SKK.js} +1 -1
  187. ksadk/server/static/assets/{dist-M67Hwu0n.js → dist-BIr4DSRq.js} +1 -1
  188. ksadk/server/static/assets/{dist-B1oWRmrH.js → dist-BgV_owcB.js} +1 -1
  189. ksadk/server/static/assets/{dist-DyqV4fL4.js → dist-Bj730Ib4.js} +1 -1
  190. ksadk/server/static/assets/{dist-DfGFrb0v.js → dist-BnaTiyzN.js} +1 -1
  191. ksadk/server/static/assets/{dist-C71CsujO.js → dist-C1NMAY5a.js} +1 -1
  192. ksadk/server/static/assets/{dist-CXpH_Rdd.js → dist-C5_ZAZsG.js} +1 -1
  193. ksadk/server/static/assets/{dist-DJmCPRVB.js → dist-CB9iJrvg.js} +1 -1
  194. ksadk/server/static/assets/{dist-DjhwGUgZ.js → dist-CFzsn6BG.js} +1 -1
  195. ksadk/server/static/assets/{dist-BI1qQH4n.js → dist-Cf125P_m.js} +1 -1
  196. ksadk/server/static/assets/{dist-8VWI-2bZ.js → dist-ClYUxfeK.js} +1 -1
  197. ksadk/server/static/assets/{dist-DUwKa_l6.js → dist-DFD6Qa6T.js} +1 -1
  198. ksadk/server/static/assets/{dist-B-46q3Hk.js → dist-DVCOWtha.js} +1 -1
  199. ksadk/server/static/assets/{dist-BJLUwH6W.js → dist-D_ctSS2i.js} +1 -1
  200. ksadk/server/static/assets/{dist-4zN1_tq5.js → dist-DiixqL0J.js} +1 -1
  201. ksadk/server/static/assets/{dist-B0gdk4rl.js → dist-DoVSwoDb.js} +1 -1
  202. ksadk/server/static/assets/{dist-Bbwqa8TG.js → dist-DvFK7p5S.js} +1 -1
  203. ksadk/server/static/assets/{dist-D1V3f1B4.js → dist-QfkEHOlb.js} +1 -1
  204. ksadk/server/static/assets/{dist-Btyo4vX4.js → dist-btbmmX5O.js} +1 -1
  205. ksadk/server/static/assets/{dist-u8tVH5Ak.js → dist-fBO2v5Kt.js} +1 -1
  206. ksadk/server/static/assets/{dist-DQAB0qn_.js → dist-ufY3F5p6.js} +1 -1
  207. ksadk/server/static/assets/{ebnfDiagram-PWID7BFC-DVfMsLge.js → ebnfDiagram-PWID7BFC-Ci8NqqZu.js} +1 -1
  208. ksadk/server/static/assets/{erDiagram-SSCWMZ5O-CWEZSYaw.js → erDiagram-SSCWMZ5O-CCIOhLZG.js} +1 -1
  209. ksadk/server/static/assets/eventmodeling-NTZA5JFV-CQqR2hg3.js +1 -0
  210. ksadk/server/static/assets/flowDiagram-A5DVABFB-DDRRbGPm.js +1 -0
  211. ksadk/server/static/assets/{ganttDiagram-EL5Y4UJY-TWIxoyYL.js → ganttDiagram-EL5Y4UJY-Cp_r9Hb6.js} +1 -1
  212. ksadk/server/static/assets/gitGraph-4MIJSDKK-fgWEf7UD.js +1 -0
  213. ksadk/server/static/assets/{gitGraphDiagram-WWUBYQGX-DDh2hd2S.js → gitGraphDiagram-WWUBYQGX-Dlhc8Wr8.js} +1 -1
  214. ksadk/server/static/assets/index-DcTML1Up.css +2 -0
  215. ksadk/server/static/assets/index-Dh2XHqPK.js +244 -0
  216. ksadk/server/static/assets/info-A6RAGUB7-BUecLTdt.js +1 -0
  217. ksadk/server/static/assets/{infoDiagram-RXCK75RN-CgoyWiDR.js → infoDiagram-RXCK75RN-CO0rRTRA.js} +1 -1
  218. ksadk/server/static/assets/{ishikawaDiagram-5VMMS53U-CyRIu_om.js → ishikawaDiagram-5VMMS53U-CHiaedSS.js} +1 -1
  219. ksadk/server/static/assets/{journeyDiagram-EYS64GPL-DN5JXHzN.js → journeyDiagram-EYS64GPL-CHcCIB09.js} +1 -1
  220. ksadk/server/static/assets/{kanban-definition-3QL26DDD-CNP3ui66.js → kanban-definition-3QL26DDD-CJ_ebBZf.js} +1 -1
  221. ksadk/server/static/assets/{katex-DWEzQy1d.js → katex-B4weu383.js} +1 -1
  222. ksadk/server/static/assets/{linear-C-qHp7d2.js → linear-V-MgYHW1.js} +1 -1
  223. ksadk/server/static/assets/{mermaid-parser.core-Cl-K943T.js → mermaid-parser.core-CBijEX_c.js} +2 -2
  224. ksadk/server/static/assets/{mindmap-definition-FBJOCRG2-D5DB5mYm.js → mindmap-definition-FBJOCRG2-Bc-pQvpp.js} +1 -1
  225. ksadk/server/static/assets/packet-AYTQ26CC-BeW-btFv.js +1 -0
  226. ksadk/server/static/assets/{pegDiagram-XKGWAZYB-BQVc9ia_.js → pegDiagram-XKGWAZYB-D7genGLl.js} +1 -1
  227. ksadk/server/static/assets/pie-WAS4IAKB-X0xh4SaT.js +1 -0
  228. ksadk/server/static/assets/{pieDiagram-E7YTZNPT-B6UCAvtY.js → pieDiagram-E7YTZNPT-Bxj32zwD.js} +1 -1
  229. ksadk/server/static/assets/{quadrantDiagram-AXDQQJYC-mIr2d3eb.js → quadrantDiagram-AXDQQJYC-BURv2mGh.js} +1 -1
  230. ksadk/server/static/assets/radar-RG4KPBEZ-DzRMSqjd.js +1 -0
  231. ksadk/server/static/assets/railroad-74A4TZTK-Cc44icX-.js +1 -0
  232. ksadk/server/static/assets/railroad-abnf-HS5TGJTU-D6S4BdV-.js +1 -0
  233. ksadk/server/static/assets/railroad-ebnf-LZEXJU2U-vD3aVE2o.js +1 -0
  234. ksadk/server/static/assets/railroad-peg-WCYAUIDC-CYbW_b4T.js +1 -0
  235. ksadk/server/static/assets/{railroadDiagram-O6MQD6OU-Dt3FFDmK.js → railroadDiagram-O6MQD6OU-CCsh3avW.js} +1 -1
  236. ksadk/server/static/assets/{requirementDiagram-EFPCY7ZU-Cz_vQtgF.js → requirementDiagram-EFPCY7ZU-_FRRBKEd.js} +1 -1
  237. ksadk/server/static/assets/{sankeyDiagram-P5KCCOFB-wlO1TsH5.js → sankeyDiagram-P5KCCOFB-C-gr2o9M.js} +1 -1
  238. ksadk/server/static/assets/{sequenceDiagram-WJ2MYXX4-CHRbElYq.js → sequenceDiagram-WJ2MYXX4-D97NmfKg.js} +1 -1
  239. ksadk/server/static/assets/{sizeCapture-X5ZJPWSS-DXX54iyO.js → sizeCapture-X5ZJPWSS-DjrPC5FX.js} +1 -1
  240. ksadk/server/static/assets/{stateDiagram-HBIQ2CUA-Dp_lw9II.js → stateDiagram-HBIQ2CUA-DzMNg1hh.js} +1 -1
  241. ksadk/server/static/assets/stateDiagram-v2-4QOOHH4V-BIcjKFhF.js +1 -0
  242. ksadk/server/static/assets/{swimlanes-XN3QIQJK-D8O5UlLG.js → swimlanes-XN3QIQJK-Cssf_CsU.js} +1 -1
  243. ksadk/server/static/assets/swimlanesDiagram-VK2B7HYN-tq3K3Ybl.js +8 -0
  244. ksadk/server/static/assets/{timeline-definition-24CTP7MA-8mfKcxvG.js → timeline-definition-24CTP7MA-BWTHzyS1.js} +1 -1
  245. ksadk/server/static/assets/treeView-Q6P3EWNA-DBXt3GdU.js +1 -0
  246. ksadk/server/static/assets/treemap-WGGIJYW6-DrCy4E_l.js +1 -0
  247. ksadk/server/static/assets/{vennDiagram-4TSXK5OY-EnNl0DE7.js → vennDiagram-4TSXK5OY-BSKgJsmR.js} +1 -1
  248. ksadk/server/static/assets/wardley-WFR3VGLG-CefhOliM.js +1 -0
  249. ksadk/server/static/assets/{wardleyDiagram-VM6X3IG4-DBu5fbYr.js → wardleyDiagram-VM6X3IG4-eflHNoaZ.js} +1 -1
  250. ksadk/server/static/assets/{xychartDiagram-S5SC5T6Z-BSVXs4IY.js → xychartDiagram-S5SC5T6Z-eYqrQ-v4.js} +1 -1
  251. ksadk/server/static/index.html +2 -2
  252. ksadk/session_context.py +66 -0
  253. ksadk/sessions/__init__.py +11 -21
  254. ksadk/sessions/_local_service_sync.py +263 -1
  255. ksadk/sessions/base.py +176 -0
  256. ksadk/sessions/errors.py +4 -0
  257. ksadk/sessions/in_memory.py +309 -19
  258. ksadk/sessions/local_service.py +83 -1
  259. ksadk/sessions/persistence.py +275 -0
  260. ksadk/sessions/postgres_service.py +358 -0
  261. ksadk/sessions/resilience.py +8 -0
  262. ksadk/sessions/resilient.py +362 -4
  263. ksadk/sessions/topology.py +135 -0
  264. ksadk/skills/models.py +26 -4
  265. ksadk/skills/package_store.py +186 -38
  266. ksadk/skills/runtime/agent.py +31 -6
  267. ksadk/skills/runtime/artifact_delivery.py +139 -0
  268. ksadk/skills/runtime/backends/e2b.py +98 -6
  269. ksadk/skills/runtime/backends/local.py +73 -8
  270. ksadk/skills/runtime/base.py +3 -0
  271. ksadk/skills/runtime/executor.py +2 -0
  272. ksadk/skills/runtime/loader.py +10 -2
  273. ksadk/skills/runtime/pinned.py +114 -0
  274. ksadk/skills/runtime/request.py +31 -0
  275. ksadk/skills/service_client.py +167 -28
  276. ksadk/studio/api.py +224 -42
  277. ksadk/studio/api_catalog_routes.py +18 -0
  278. ksadk/studio/api_plugin_routes.py +526 -95
  279. ksadk/studio/api_resource_connections.py +183 -0
  280. ksadk/studio/authoring_coordinator.py +19 -14
  281. ksadk/studio/builder.py +76 -0
  282. ksadk/studio/cloud.py +342 -104
  283. ksadk/studio/cloud_shared_web.py +565 -0
  284. ksadk/studio/codex_agent_service.py +128 -26
  285. ksadk/studio/codex_builder.py +241 -2
  286. ksadk/studio/codex_credentials.py +90 -0
  287. ksadk/studio/codex_manifest.py +31 -4
  288. ksadk/studio/codex_plugin_store.py +746 -0
  289. ksadk/studio/codex_provider_build.py +231 -0
  290. ksadk/studio/codex_run.py +184 -25
  291. ksadk/studio/compatibility_report.py +12 -1
  292. ksadk/studio/compiler.py +78 -14
  293. ksadk/studio/contracts.py +132 -6
  294. ksadk/studio/dsh_application.py +137 -0
  295. ksadk/studio/dsh_capability_service.py +1107 -0
  296. ksadk/studio/dsh_models.py +59 -0
  297. ksadk/studio/dsh_provider_registration.py +320 -13
  298. ksadk/studio/hosted_kernel.py +88 -13
  299. ksadk/studio/mcp_runtime.py +11 -3
  300. ksadk/studio/model_client.py +2 -2
  301. ksadk/studio/plugin_composition.py +190 -23
  302. ksadk/studio/plugin_kernel_adapter.py +12 -112
  303. ksadk/studio/plugin_runtime.py +224 -45
  304. ksadk/studio/resource_authority.py +637 -0
  305. ksadk/studio/resource_binding_validation.py +77 -0
  306. ksadk/studio/resource_build_admission.py +196 -0
  307. ksadk/studio/resource_build_materializer.py +149 -0
  308. ksadk/studio/resource_catalog.py +143 -2
  309. ksadk/studio/resource_connections.py +220 -0
  310. ksadk/studio/run_service.py +462 -52
  311. ksadk/studio/runtime_source.py +15 -7
  312. ksadk/studio/scheduler_assistant.py +317 -0
  313. ksadk/studio/scheduler_runtime.py +9 -0
  314. ksadk/studio/scheduler_service.py +3 -0
  315. ksadk/studio/service.py +490 -44
  316. ksadk/studio/shared_web.py +446 -62
  317. ksadk/studio/static/assets/CodeBlock-DCUUY0PL-BLjA7kbS.js +41 -0
  318. ksadk/studio/static/assets/KaTeX_AMS-Regular-BQhdFMY1.woff2 +0 -0
  319. ksadk/studio/static/assets/KaTeX_AMS-Regular-DMm9YOAa.woff +0 -0
  320. ksadk/studio/static/assets/KaTeX_AMS-Regular-DRggAlZN.ttf +0 -0
  321. ksadk/studio/static/assets/KaTeX_Caligraphic-Bold-ATXxdsX0.ttf +0 -0
  322. ksadk/studio/static/assets/KaTeX_Caligraphic-Bold-BEiXGLvX.woff +0 -0
  323. ksadk/studio/static/assets/KaTeX_Caligraphic-Bold-Dq_IR9rO.woff2 +0 -0
  324. ksadk/studio/static/assets/KaTeX_Caligraphic-Regular-CTRA-rTL.woff +0 -0
  325. ksadk/studio/static/assets/KaTeX_Caligraphic-Regular-Di6jR-x-.woff2 +0 -0
  326. ksadk/studio/static/assets/KaTeX_Caligraphic-Regular-wX97UBjC.ttf +0 -0
  327. ksadk/studio/static/assets/KaTeX_Fraktur-Bold-BdnERNNW.ttf +0 -0
  328. ksadk/studio/static/assets/KaTeX_Fraktur-Bold-BsDP51OF.woff +0 -0
  329. ksadk/studio/static/assets/KaTeX_Fraktur-Bold-CL6g_b3V.woff2 +0 -0
  330. ksadk/studio/static/assets/KaTeX_Fraktur-Regular-CB_wures.ttf +0 -0
  331. ksadk/studio/static/assets/KaTeX_Fraktur-Regular-CTYiF6lA.woff2 +0 -0
  332. ksadk/studio/static/assets/KaTeX_Fraktur-Regular-Dxdc4cR9.woff +0 -0
  333. ksadk/studio/static/assets/KaTeX_Main-Bold-Cx986IdX.woff2 +0 -0
  334. ksadk/studio/static/assets/KaTeX_Main-Bold-Jm3AIy58.woff +0 -0
  335. ksadk/studio/static/assets/KaTeX_Main-Bold-waoOVXN0.ttf +0 -0
  336. ksadk/studio/static/assets/KaTeX_Main-BoldItalic-DxDJ3AOS.woff2 +0 -0
  337. ksadk/studio/static/assets/KaTeX_Main-BoldItalic-DzxPMmG6.ttf +0 -0
  338. ksadk/studio/static/assets/KaTeX_Main-BoldItalic-SpSLRI95.woff +0 -0
  339. ksadk/studio/static/assets/KaTeX_Main-Italic-3WenGoN9.ttf +0 -0
  340. ksadk/studio/static/assets/KaTeX_Main-Italic-BMLOBm91.woff +0 -0
  341. ksadk/studio/static/assets/KaTeX_Main-Italic-NWA7e6Wa.woff2 +0 -0
  342. ksadk/studio/static/assets/KaTeX_Main-Regular-B22Nviop.woff2 +0 -0
  343. ksadk/studio/static/assets/KaTeX_Main-Regular-Dr94JaBh.woff +0 -0
  344. ksadk/studio/static/assets/KaTeX_Main-Regular-ypZvNtVU.ttf +0 -0
  345. ksadk/studio/static/assets/KaTeX_Math-BoldItalic-B3XSjfu4.ttf +0 -0
  346. ksadk/studio/static/assets/KaTeX_Math-BoldItalic-CZnvNsCZ.woff2 +0 -0
  347. ksadk/studio/static/assets/KaTeX_Math-BoldItalic-iY-2wyZ7.woff +0 -0
  348. ksadk/studio/static/assets/KaTeX_Math-Italic-DA0__PXp.woff +0 -0
  349. ksadk/studio/static/assets/KaTeX_Math-Italic-flOr_0UB.ttf +0 -0
  350. ksadk/studio/static/assets/KaTeX_Math-Italic-t53AETM-.woff2 +0 -0
  351. ksadk/studio/static/assets/KaTeX_SansSerif-Bold-CFMepnvq.ttf +0 -0
  352. ksadk/studio/static/assets/KaTeX_SansSerif-Bold-D1sUS0GD.woff2 +0 -0
  353. ksadk/studio/static/assets/KaTeX_SansSerif-Bold-DbIhKOiC.woff +0 -0
  354. ksadk/studio/static/assets/KaTeX_SansSerif-Italic-C3H0VqGB.woff2 +0 -0
  355. ksadk/studio/static/assets/KaTeX_SansSerif-Italic-DN2j7dab.woff +0 -0
  356. ksadk/studio/static/assets/KaTeX_SansSerif-Italic-YYjJ1zSn.ttf +0 -0
  357. ksadk/studio/static/assets/KaTeX_SansSerif-Regular-BNo7hRIc.ttf +0 -0
  358. ksadk/studio/static/assets/KaTeX_SansSerif-Regular-CS6fqUqJ.woff +0 -0
  359. ksadk/studio/static/assets/KaTeX_SansSerif-Regular-DDBCnlJ7.woff2 +0 -0
  360. ksadk/studio/static/assets/KaTeX_Script-Regular-C5JkGWo-.ttf +0 -0
  361. ksadk/studio/static/assets/KaTeX_Script-Regular-D3wIWfF6.woff2 +0 -0
  362. ksadk/studio/static/assets/KaTeX_Script-Regular-D5yQViql.woff +0 -0
  363. ksadk/studio/static/assets/KaTeX_Size1-Regular-C195tn64.woff +0 -0
  364. ksadk/studio/static/assets/KaTeX_Size1-Regular-Dbsnue_I.ttf +0 -0
  365. ksadk/studio/static/assets/KaTeX_Size1-Regular-mCD8mA8B.woff2 +0 -0
  366. ksadk/studio/static/assets/KaTeX_Size2-Regular-B7gKUWhC.ttf +0 -0
  367. ksadk/studio/static/assets/KaTeX_Size2-Regular-Dy4dx90m.woff2 +0 -0
  368. ksadk/studio/static/assets/KaTeX_Size2-Regular-oD1tc_U0.woff +0 -0
  369. ksadk/studio/static/assets/KaTeX_Size3-Regular-CTq5MqoE.woff +0 -0
  370. ksadk/studio/static/assets/KaTeX_Size3-Regular-DgpXs0kz.ttf +0 -0
  371. ksadk/studio/static/assets/KaTeX_Size4-Regular-BF-4gkZK.woff +0 -0
  372. ksadk/studio/static/assets/KaTeX_Size4-Regular-DWFBv043.ttf +0 -0
  373. ksadk/studio/static/assets/KaTeX_Size4-Regular-Dl5lxZxV.woff2 +0 -0
  374. ksadk/studio/static/assets/KaTeX_Typewriter-Regular-C0xS9mPB.woff +0 -0
  375. ksadk/studio/static/assets/KaTeX_Typewriter-Regular-CO6r4hn1.woff2 +0 -0
  376. ksadk/studio/static/assets/KaTeX_Typewriter-Regular-D3Ib7_Hf.ttf +0 -0
  377. ksadk/studio/static/assets/MathMessageMarkdown-CBcDrAw--BEOyPC3w.css +1 -0
  378. ksadk/studio/static/assets/MathMessageMarkdown-CBcDrAw--CUYIXwgI.js +8 -0
  379. ksadk/studio/static/assets/MermaidBlock-DBFTztfQ-BTYKWEbD.js +44 -0
  380. ksadk/studio/static/assets/PrismRenderer-wiXRHURw.js +3 -0
  381. ksadk/studio/static/assets/abnfDiagram-VCTEODGH-CLETGjKq.js +1 -0
  382. ksadk/studio/static/assets/arc-Pry-7G1_.js +1 -0
  383. ksadk/studio/static/assets/architecture-7GRP2DOG-hXMiO_AU.js +1 -0
  384. ksadk/studio/static/assets/architectureDiagram-5GKGNRK7-B5EQysk6.js +36 -0
  385. ksadk/studio/static/assets/array-BifhSqXX.js +1 -0
  386. ksadk/studio/static/assets/blockDiagram-I7D4REHJ-CFmPl1de.js +129 -0
  387. ksadk/studio/static/assets/c4Diagram-7LVT6UL2-BRrGu8qt.js +38 -0
  388. ksadk/studio/static/assets/channel-BqO-gtEw.js +1 -0
  389. ksadk/studio/static/assets/chunk-2Q5K7J3B-C1jixKkw.js +1 -0
  390. ksadk/studio/static/assets/chunk-4HAMMTFA-D220vUtq.js +62 -0
  391. ksadk/studio/static/assets/chunk-5VM5RSS4-ZNzvKenW.js +15 -0
  392. ksadk/studio/static/assets/chunk-75Z2AOVW-C8lLv_qc.js +2 -0
  393. ksadk/studio/static/assets/chunk-DU6HZSFF-C4DtVpCu.js +128 -0
  394. ksadk/studio/static/assets/chunk-F27PBJKO-Cpw14SNG.js +1 -0
  395. ksadk/studio/static/assets/chunk-FOHPRMQF-DHwB1DNv.js +161 -0
  396. ksadk/studio/static/assets/chunk-GMAD6QVW-DiQA-u2N.js +72 -0
  397. ksadk/studio/static/assets/chunk-GVQU2GXP-DUdNBUCi.js +1 -0
  398. ksadk/studio/static/assets/chunk-IMKFNOWR-BSlbjT_b.js +231 -0
  399. ksadk/studio/static/assets/chunk-JWPE2WC7-DVXcaiue.js +1 -0
  400. ksadk/studio/static/assets/chunk-L3NEJ4N5-Db8Ab22W.js +1 -0
  401. ksadk/studio/static/assets/chunk-OSK3NFVY-M2m6G3j4.js +10 -0
  402. ksadk/studio/static/assets/chunk-P2QGCYS3-DezaQxiK.js +1 -0
  403. ksadk/studio/static/assets/chunk-POPQ4Y6H-DOpufJ3t.js +1 -0
  404. ksadk/studio/static/assets/chunk-PWAF6VOD-CfLb1gSc.js +1 -0
  405. ksadk/studio/static/assets/chunk-SHT3W25Y-DAyIVp5H.js +168 -0
  406. ksadk/studio/static/assets/chunk-SVP7TREG-DulomOrS.js +88 -0
  407. ksadk/studio/static/assets/chunk-TICWLB2K-bHJYoflj.js +206 -0
  408. ksadk/studio/static/assets/chunk-XXDRQBXY-7PcdR2B1.js +1 -0
  409. ksadk/studio/static/assets/chunk-Y2CYZVJY-DsF7k-Jl.js +1 -0
  410. ksadk/studio/static/assets/classDiagram-ZZMXUADV-D_bW8JjA.js +1 -0
  411. ksadk/studio/static/assets/classDiagram-v2-VYDZK3BY-D_bW8JjA.js +1 -0
  412. ksadk/studio/static/assets/cose-bilkent-JH36ORCC-snL88wkX.js +1 -0
  413. ksadk/studio/static/assets/cynefin-OW5HDTMX-Bd1YhRo1.js +1 -0
  414. ksadk/studio/static/assets/cynefinDiagram-5FMLGOSQ-BBrIG_mI.js +62 -0
  415. ksadk/studio/static/assets/cytoscape.esm-CGd-uY3x.js +321 -0
  416. ksadk/studio/static/assets/dagre-GXQ25YYZ-DtF1nGdY.js +4 -0
  417. ksadk/studio/static/assets/dagre-PrKaheQc.js +1 -0
  418. ksadk/studio/static/assets/defaultLocale-BFoDCU3G.js +1 -0
  419. ksadk/studio/static/assets/diagram-S7CK7UJ4-0BZ98mya.js +30 -0
  420. ksadk/studio/static/assets/diagram-UQ7AKVKN-6mLKEo6L.js +41 -0
  421. ksadk/studio/static/assets/diagram-VSXAHHWV-CJBIaiZ2.js +3 -0
  422. ksadk/studio/static/assets/diagram-VX7I27RA-BohLEE1C.js +24 -0
  423. ksadk/studio/static/assets/diagram-Z3DM3KII-D8KIGonG.js +24 -0
  424. ksadk/studio/static/assets/dist-v5Q1xZ2K.js +1 -0
  425. ksadk/studio/static/assets/ebnfDiagram-PWID7BFC-C99HU61t.js +1 -0
  426. ksadk/studio/static/assets/erDiagram-RLTQ6QDP-DLGry2Ap.js +99 -0
  427. ksadk/studio/static/assets/eventmodeling-NTZA5JFV-B1_5Ac8j.js +1 -0
  428. ksadk/studio/static/assets/flowDiagram-HODETNUW-DD5hmicn.js +1 -0
  429. ksadk/studio/static/assets/ganttDiagram-EL5Y4UJY-BPJrVLSG.js +292 -0
  430. ksadk/studio/static/assets/gitGraph-4MIJSDKK-Cy_ZQBGi.js +1 -0
  431. ksadk/studio/static/assets/gitGraphDiagram-WWUBYQGX-CZCUz4MT.js +106 -0
  432. ksadk/studio/static/assets/graphlib-DS17s2tU.js +1 -0
  433. ksadk/studio/static/assets/index-CeHL9ARV.css +2 -0
  434. ksadk/studio/static/assets/index-D9QEcVpL.js +320 -0
  435. ksadk/studio/static/assets/info-A6RAGUB7-DBzDQB_I.js +1 -0
  436. ksadk/studio/static/assets/infoDiagram-27XIBGKW-B-sq07Hi.js +2 -0
  437. ksadk/studio/static/assets/init-C-OQMol4.js +1 -0
  438. ksadk/studio/static/assets/ishikawaDiagram-5VMMS53U-CljI2wyf.js +70 -0
  439. ksadk/studio/static/assets/journeyDiagram-3NMN7TZE-D50Fo2sL.js +139 -0
  440. ksadk/studio/static/assets/kanban-definition-UXKFOSKX-DimfOTam.js +89 -0
  441. ksadk/studio/static/assets/katex-DhON-x74.js +257 -0
  442. ksadk/studio/static/assets/line-CX5BOOUP.js +1 -0
  443. ksadk/studio/static/assets/linear-BCxN9JLv.js +1 -0
  444. ksadk/studio/static/assets/mermaid-parser.core-BdCz8fkS.js +7 -0
  445. ksadk/studio/static/assets/mindmap-definition-YA3MSWOX-Bizzqy5R.js +96 -0
  446. ksadk/studio/static/assets/ordinal-BDEzSJ7C.js +1 -0
  447. ksadk/studio/static/assets/packet-AYTQ26CC-gPln-_kG.js +1 -0
  448. ksadk/studio/static/assets/path-fybaL0A-.js +1 -0
  449. ksadk/studio/static/assets/pegDiagram-XKGWAZYB-Dy3fB-gW.js +1 -0
  450. ksadk/studio/static/assets/pie-WAS4IAKB-qZdHMr7B.js +1 -0
  451. ksadk/studio/static/assets/pieDiagram-E7YTZNPT-B9mrFSDF.js +39 -0
  452. ksadk/studio/static/assets/quadrantDiagram-AXDQQJYC-NzUfCbMR.js +7 -0
  453. ksadk/studio/static/assets/radar-RG4KPBEZ-BZlnaea9.js +1 -0
  454. ksadk/studio/static/assets/railroad-74A4TZTK-Ce3__H9c.js +1 -0
  455. ksadk/studio/static/assets/railroad-abnf-HS5TGJTU-DqQn7EzD.js +1 -0
  456. ksadk/studio/static/assets/railroad-ebnf-LZEXJU2U-B55kCA8F.js +1 -0
  457. ksadk/studio/static/assets/railroad-peg-WCYAUIDC-DfQnvkHd.js +1 -0
  458. ksadk/studio/static/assets/railroadDiagram-O6MQD6OU-DnhMjZCk.js +1 -0
  459. ksadk/studio/static/assets/requirementDiagram-BXWQKSXE-BF3d103U.js +84 -0
  460. ksadk/studio/static/assets/rolldown-runtime-Dy4uBu1J-DK3Fl9T5.js +1 -0
  461. ksadk/studio/static/assets/rough.esm-Dy-Kn_BL.js +1 -0
  462. ksadk/studio/static/assets/sankeyDiagram-P5KCCOFB-Bo-JTwt0.js +40 -0
  463. ksadk/studio/static/assets/sequenceDiagram-WJ2MYXX4-Dh4wZtUm.js +162 -0
  464. ksadk/studio/static/assets/sizeCapture-INFHLROL-B0uUizjq.js +1 -0
  465. ksadk/studio/static/assets/src-SFn9St9H.js +1 -0
  466. ksadk/studio/static/assets/stateDiagram-D77RDMKH-DH774G6d.js +1 -0
  467. ksadk/studio/static/assets/stateDiagram-v2-MP3YSRHH-DZvVWPBo.js +1 -0
  468. ksadk/studio/static/assets/swimlanes-42K2YHIH-Bl13OvTX.js +1 -0
  469. ksadk/studio/static/assets/swimlanesDiagram-VR7AAH4N-BnFOTALJ.js +8 -0
  470. ksadk/studio/static/assets/timeline-definition-24CTP7MA-DxmSSjRB.js +120 -0
  471. ksadk/studio/static/assets/treeView-Q6P3EWNA-D5Nn9Swz.js +1 -0
  472. ksadk/studio/static/assets/treemap-WGGIJYW6-CgHgnQhE.js +1 -0
  473. ksadk/studio/static/assets/vennDiagram-4TSXK5OY-B9QEXcJq.js +34 -0
  474. ksadk/studio/static/assets/wardley-WFR3VGLG-DXrK2RRY.js +1 -0
  475. ksadk/studio/static/assets/wardleyDiagram-VM6X3IG4-Ba1AOWoe.js +78 -0
  476. ksadk/studio/static/assets/xychartDiagram-S5SC5T6Z-Cr5pt5Y-.js +7 -0
  477. ksadk/studio/static/index.html +2 -2
  478. ksadk/version.py +1 -1
  479. ksadk/server/static/assets/architecture-7GRP2DOG-Dk9nRQ6-.js +0 -1
  480. ksadk/server/static/assets/channel-s354Yo6o.js +0 -1
  481. ksadk/server/static/assets/chunk-2Q5K7J3B-CDpPpKR5.js +0 -1
  482. ksadk/server/static/assets/classDiagram-DTDB5LWJ-Dd0nucl9.js +0 -1
  483. ksadk/server/static/assets/classDiagram-v2-JRS7N3AN-Dd0nucl9.js +0 -1
  484. ksadk/server/static/assets/cynefin-OW5HDTMX-BBlT4uMf.js +0 -1
  485. ksadk/server/static/assets/eventmodeling-NTZA5JFV-Dr5okd8V.js +0 -1
  486. ksadk/server/static/assets/flowDiagram-A5DVABFB-VEO-cVcO.js +0 -1
  487. ksadk/server/static/assets/gitGraph-4MIJSDKK-CKiKY9Cf.js +0 -1
  488. ksadk/server/static/assets/index-B2k_urY8.js +0 -241
  489. ksadk/server/static/assets/index-ILPt6IWF.css +0 -2
  490. ksadk/server/static/assets/info-A6RAGUB7-ubA4Nm_p.js +0 -1
  491. ksadk/server/static/assets/packet-AYTQ26CC-C7R3NUlK.js +0 -1
  492. ksadk/server/static/assets/pie-WAS4IAKB-BIT6qjr3.js +0 -1
  493. ksadk/server/static/assets/radar-RG4KPBEZ-l5noef9X.js +0 -1
  494. ksadk/server/static/assets/railroad-74A4TZTK-Baea6ZvM.js +0 -1
  495. ksadk/server/static/assets/railroad-abnf-HS5TGJTU-OKn8zZnU.js +0 -1
  496. ksadk/server/static/assets/railroad-ebnf-LZEXJU2U-DdKAKC4l.js +0 -1
  497. ksadk/server/static/assets/railroad-peg-WCYAUIDC-Bds8udlG.js +0 -1
  498. ksadk/server/static/assets/stateDiagram-v2-4QOOHH4V-5b-8o2iS.js +0 -1
  499. ksadk/server/static/assets/swimlanesDiagram-VK2B7HYN-uf6WPRA4.js +0 -8
  500. ksadk/server/static/assets/treeView-Q6P3EWNA-CK5CSrSO.js +0 -1
  501. ksadk/server/static/assets/treemap-WGGIJYW6-Ch2BKgAM.js +0 -1
  502. ksadk/server/static/assets/wardley-WFR3VGLG-YW3Q0ml_.js +0 -1
  503. ksadk/studio/static/assets/PrismRenderer-IYN-ffww.js +0 -3
  504. ksadk/studio/static/assets/index-DXs1Eq4M.css +0 -1
  505. ksadk/studio/static/assets/index-DeDqwTsD.js +0 -283
  506. {agentengine_sdk_python-0.8.3.dist-info → agentengine_sdk_python-0.8.4.dist-info}/WHEEL +0 -0
  507. {agentengine_sdk_python-0.8.3.dist-info → agentengine_sdk_python-0.8.4.dist-info}/entry_points.txt +0 -0
  508. {agentengine_sdk_python-0.8.3.dist-info → agentengine_sdk_python-0.8.4.dist-info}/licenses/LICENSE +0 -0
  509. {agentengine_sdk_python-0.8.3.dist-info → agentengine_sdk_python-0.8.4.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,231 @@
1
+ """Local Codex Provider admission and Bundle references, separate from cloud YAML.
2
+
3
+ A local Provider Bundle binds the existing immutable Codex record; native
4
+ marketplace bytes remain governed by that record's original plugin lock.
5
+ """
6
+
7
+ from __future__ import annotations
8
+
9
+ import hashlib
10
+ import json
11
+ from typing import Any
12
+
13
+ from pydantic import Field
14
+
15
+ from ksadk.plugins.providers.codex_dsh import (
16
+ SHIPPED_CODEX_PROVIDER_ID,
17
+ SHIPPED_CODEX_PROVIDER_VERSION,
18
+ )
19
+ from ksadk.studio.contracts import ContractModel, RuntimeRef
20
+ from ksadk.studio.errors import StudioError
21
+ from ksadk.studio.resource_build_admission import (
22
+ admit_resource_build,
23
+ resource_build_required,
24
+ )
25
+
26
+ CODEX_PROVIDER_REF = f"plugin://{SHIPPED_CODEX_PROVIDER_ID}@{SHIPPED_CODEX_PROVIDER_VERSION}"
27
+
28
+
29
+ def _digest(value: Any) -> str:
30
+ return (
31
+ "sha256:"
32
+ + hashlib.sha256(
33
+ json.dumps(
34
+ value,
35
+ sort_keys=True,
36
+ separators=(",", ":"),
37
+ ensure_ascii=False,
38
+ ).encode()
39
+ ).hexdigest()
40
+ )
41
+
42
+
43
+ class CodexProviderBuildReference(ContractModel):
44
+ provider_ref: str = Field(pattern=r"^plugin://io\.ksadk\.codex-provider@[^/]+$")
45
+ registration_digest: str = Field(pattern=r"^sha256:[0-9a-f]{64}$")
46
+ bundle_build_id: str = Field(pattern=r"^build_[0-9a-f]+$")
47
+ bundle_digest: str = Field(pattern=r"^sha256:[0-9a-f]{64}$")
48
+
49
+ @property
50
+ def digest(self) -> str:
51
+ return _digest(self.model_dump(by_alias=True))
52
+
53
+
54
+ class CodexProviderBuildManager:
55
+ def __init__(self, studio: Any):
56
+ self.studio = studio
57
+
58
+ def _registration_digest(self) -> str:
59
+ manifest = self.studio._active_provider_manifests.get(CODEX_PROVIDER_REF)
60
+ if manifest is None:
61
+ raise StudioError(
62
+ "AGENT_PROVIDER_NOT_REGISTERED",
63
+ "Codex Provider 未注册;请在插件中心安装并启用官方 Codex Provider,"
64
+ "确认 DSH 工具链可用后重试",
65
+ status_code=409,
66
+ )
67
+ return _digest(manifest.model_dump(by_alias=True, mode="json", exclude_none=True))
68
+
69
+ def prepare(
70
+ self,
71
+ snapshot,
72
+ model_profiles: dict,
73
+ model_profile_ids: list[str],
74
+ native_plugin_lock_digest: str | None,
75
+ ) -> CodexProviderBuildReference:
76
+ registration_digest = self._registration_digest()
77
+ # The current Provider owns one native client connection per activation.
78
+ # Model names may vary, but a different endpoint/credential needs a new
79
+ # activation contract; never silently send it to the default connection.
80
+ connections = {
81
+ (
82
+ p.get("provider", "openai-compatible"),
83
+ p.get("endpointUrl"),
84
+ p.get("baseUrl"),
85
+ p.get("credentialRef"),
86
+ p.get("wireApi"),
87
+ )
88
+ for p in model_profiles.values()
89
+ }
90
+ missing_profiles = set(snapshot.manifest.allowed_models) - set(model_profiles)
91
+ if len(connections) > 1 or (model_profiles and missing_profiles):
92
+ raise StudioError(
93
+ "CODEX_PROVIDER_MODEL_CONNECTION_UNSUPPORTED",
94
+ "当前 Codex Provider Build 的模型必须具有完整且相同的连接快照;"
95
+ "请补齐模型配置,或拆分不同连接的 Agent",
96
+ status_code=422,
97
+ )
98
+ draft = self.studio.codex_agents._project(snapshot).model_copy(deep=True)
99
+ draft.spec.runtime = RuntimeRef(
100
+ type="plugin",
101
+ provider_ref=CODEX_PROVIDER_REF,
102
+ version=snapshot.manifest.runtime.version,
103
+ provider_config={
104
+ "studioManifestDigest": "sha256:" + snapshot.manifest_sha256,
105
+ "studioBuildFingerprint": _digest(
106
+ {
107
+ "manifest": snapshot.manifest_sha256,
108
+ "profiles": model_profiles,
109
+ "resourceIds": sorted(model_profile_ids),
110
+ "pluginLockDigest": native_plugin_lock_digest,
111
+ }
112
+ ),
113
+ },
114
+ )
115
+ # This Bundle describes the Python AgentProvider. Codex-native marketplace
116
+ # selections stay in the manifest lock, while official DSH platform
117
+ # resources remain in this projected Draft and pass the same trusted
118
+ # resource admission used by framework runtimes.
119
+ draft.spec.bindings.plugins = [
120
+ binding
121
+ for binding in draft.spec.bindings.plugins
122
+ if binding.ecosystem == "dsh"
123
+ ]
124
+ manifest = self.studio._active_provider_manifests[CODEX_PROVIDER_REF]
125
+ missing_permissions = sorted(
126
+ set(manifest.spec.permissions) - set(draft.spec.security.allowed_permissions)
127
+ )
128
+ if missing_permissions:
129
+ raise StudioError(
130
+ "AGENT_PROVIDER_PERMISSION_DENIED",
131
+ "请打开 Agent 编辑页,在 Codex 本地执行权限中确认 Provider 请求的权限并保存;"
132
+ "安装插件时的同意不代替 Agent 授权",
133
+ status_code=422,
134
+ field="spec.security.allowedPermissions",
135
+ details={"missingPermissions": missing_permissions},
136
+ )
137
+ composition = self.studio.plugin_compositions.compile(draft)
138
+ resource_build = None
139
+ if resource_build_required(draft):
140
+ resource_build = admit_resource_build(
141
+ draft,
142
+ authority=self.studio.resource_authority,
143
+ connections=self.studio.resource_connections,
144
+ dsh_profile=(
145
+ self.studio.resource_dsh_capabilities.capture_resource_build_snapshot()
146
+ ),
147
+ )
148
+ built = self.studio.builder.build(
149
+ draft,
150
+ composition=composition,
151
+ resource_build=resource_build,
152
+ )
153
+ # Refuse a registration change during staging, before saving success.
154
+ if self._registration_digest() != registration_digest:
155
+ raise StudioError(
156
+ "CODEX_PROVIDER_CHANGED", "Provider 构建期间发生变更", status_code=409
157
+ )
158
+ return CodexProviderBuildReference(
159
+ provider_ref=CODEX_PROVIDER_REF,
160
+ registration_digest=registration_digest,
161
+ bundle_build_id=built.id,
162
+ bundle_digest=built.bundle_digest,
163
+ )
164
+
165
+ def bundle_root(self, record):
166
+ reference = record.provider_bundle
167
+ if reference is None:
168
+ return None
169
+ if reference.provider_ref != CODEX_PROVIDER_REF or (
170
+ reference.registration_digest != self._registration_digest()
171
+ ):
172
+ raise StudioError(
173
+ "CODEX_PROVIDER_CHANGED", "Provider 注册已变更,请重新构建", status_code=409
174
+ )
175
+ try:
176
+ built = self.studio.builds.get(reference.bundle_build_id)
177
+ except StudioError as error:
178
+ raise StudioError(
179
+ "CODEX_PROVIDER_BUNDLE_UNAVAILABLE", "Provider Bundle 记录不可用,请重新构建",
180
+ status_code=409,
181
+ ) from error
182
+ if built.agent_id != record.agent_name or built.bundle_digest != reference.bundle_digest:
183
+ raise StudioError(
184
+ "CODEX_PROVIDER_BUILD_MISMATCH", "Provider Bundle 与 Build 不一致", status_code=409
185
+ )
186
+ root = self.studio.plugin_runs._bundle_root(built)
187
+ bundle = self.studio.plugin_runs._resolve_bundle(root)
188
+ if (
189
+ bundle.bundle_digest != reference.bundle_digest
190
+ or (bundle.composition.profile.agent_provider.ref != reference.provider_ref)
191
+ or bundle.composition.profile.agent_provider.config.get("studioManifestDigest")
192
+ != ("sha256:" + record.manifest_sha256)
193
+ or bundle.composition.profile.agent_provider.config.get("studioBuildFingerprint")
194
+ != _digest(
195
+ {
196
+ "manifest": record.manifest_sha256,
197
+ "profiles": record.model_profiles,
198
+ "resourceIds": sorted(record.model_profile_ids or []),
199
+ "pluginLockDigest": record.plugin_lock_digest,
200
+ }
201
+ )
202
+ ):
203
+ raise StudioError(
204
+ "CODEX_PROVIDER_BUILD_MISMATCH", "Provider Bundle 引用校验失败", status_code=409
205
+ )
206
+ return root
207
+
208
+ def native_launch(self, bundle):
209
+ """Trusted host callback; no model arguments or serialized secrets accepted."""
210
+ marker = bundle.composition.profile.agent_provider.config.get("studioManifestDigest")
211
+ if marker is None:
212
+ return None
213
+ registration_digest = self._registration_digest()
214
+ matches = [
215
+ record
216
+ for record in self.studio.codex_builds.list()
217
+ if record.provider_bundle is not None
218
+ and record.provider_bundle.bundle_digest == bundle.bundle_digest
219
+ and record.provider_bundle.registration_digest == registration_digest
220
+ ]
221
+ if len(matches) != 1:
222
+ raise StudioError(
223
+ "CODEX_PROVIDER_BUILD_MISMATCH",
224
+ "Provider Bundle 缺少唯一 Codex Build",
225
+ status_code=409,
226
+ )
227
+ record = matches[0]
228
+ self.bundle_root(record)
229
+ # Retain native bootstrap, credentials, exact build HOME and workspace
230
+ # from the existing resolver. No cloud schema or second launch policy.
231
+ return self.studio.codex_runs.resolve(record.id).launch_context
ksadk/studio/codex_run.py CHANGED
@@ -2,16 +2,21 @@
2
2
 
3
3
  from __future__ import annotations
4
4
 
5
+ import json
5
6
  import os
6
7
  import zipfile
7
8
  from typing import Any, cast
9
+ from urllib.parse import urlparse
8
10
 
9
11
  import yaml # type: ignore[import-untyped]
10
12
 
11
13
  from ksadk.configs import ModelConfig
14
+ from ksadk.plugins.contracts import plugin_lock_digest
12
15
  from ksadk.runtime import RuntimeLaunchContext
13
16
  from ksadk.studio.codex_builder import CodexBuildRepository
17
+ from ksadk.studio.codex_credentials import restore_mcp_oauth_credentials
14
18
  from ksadk.studio.codex_manifest import CodexAgentManifest, CodexManifestRepository
19
+ from ksadk.studio.codex_plugin_store import CodexPluginSnapshotStore
15
20
  from ksadk.studio.contracts import Instructions, ModelSpec
16
21
  from ksadk.studio.errors import StudioError
17
22
  from ksadk.studio.run_service import StudioRunSpec
@@ -32,6 +37,8 @@ class CodexRunSpecResolver:
32
37
  credential_resolver: Any = None,
33
38
  resource_catalog: Any = None,
34
39
  draft_repository: Any = None,
40
+ plugin_snapshot_store: CodexPluginSnapshotStore | None = None,
41
+ provider_bundle_resolver: Any = None,
35
42
  ) -> None:
36
43
  self.workspace = workspace
37
44
  self.builds = build_repository or CodexBuildRepository(workspace)
@@ -39,6 +46,8 @@ class CodexRunSpecResolver:
39
46
  self.credentials = credential_resolver
40
47
  self.catalog = resource_catalog
41
48
  self.drafts = draft_repository
49
+ self.plugin_snapshots = plugin_snapshot_store or CodexPluginSnapshotStore(workspace)
50
+ self.provider_bundle_resolver = provider_bundle_resolver
42
51
 
43
52
  def resolve(
44
53
  self,
@@ -49,6 +58,16 @@ class CodexRunSpecResolver:
49
58
  approval_mode: str | None = None,
50
59
  ) -> StudioRunSpec:
51
60
  build = self.builds.get(build_id)
61
+ provider_root = None
62
+ if build.local_execution == "provider":
63
+ if self.provider_bundle_resolver is None:
64
+ raise StudioError("CODEX_PROVIDER_REQUIRED", "此 Build 必须通过 Provider 运行",
65
+ status_code=409)
66
+ provider_root = self.provider_bundle_resolver(build)
67
+ if provider_root is None:
68
+ raise StudioError(
69
+ "CODEX_PROVIDER_REQUIRED", "Provider Bundle 不可用", status_code=409,
70
+ )
52
71
  current = self.manifests.load(build.agent_name)
53
72
  if build.manifest_sha256 != current.manifest_sha256:
54
73
  raise StudioError(
@@ -61,6 +80,13 @@ class CodexRunSpecResolver:
61
80
  },
62
81
  )
63
82
  manifest = self._load_build_manifest(build.artifact_path)
83
+ restore_mcp_oauth_credentials(
84
+ self.workspace.root,
85
+ build,
86
+ self.builds.list(),
87
+ manifest.mcp_servers or [],
88
+ )
89
+ plugin_bootstrap = self._plugin_bootstrap(build, manifest)
64
90
  selected_model = self._select_model(manifest, model)
65
91
  project_dir = self.workspace.root.resolve()
66
92
  skills = self._skill_inputs(manifest)
@@ -72,15 +98,20 @@ class CodexRunSpecResolver:
72
98
  approval_mode=approval_profile or None,
73
99
  )
74
100
  if sandbox == "workspace-write":
75
- # workspace-write 默认断网;MCP/搜索类工具需要显式放行网络
101
+ # workspace-write 默认断网;原生搜索和 MCP 都需要显式放行网络。
76
102
  codex_overrides = [*codex_overrides, "sandbox_workspace_write.network_access=true"]
77
103
  launch_config: dict[str, Any] = {
104
+ "model": selected_model,
105
+ "models": list(manifest.allowed_models),
78
106
  "sandbox_read_only": sandbox == "read-only",
79
107
  "sandbox": sandbox,
80
108
  "approval_mode": approval,
109
+ "codex_home_key": build.id,
81
110
  }
82
111
  if codex_overrides:
83
112
  launch_config["codex_overrides"] = codex_overrides
113
+ if plugin_bootstrap is not None:
114
+ launch_config["codex_plugin_bootstrap"] = plugin_bootstrap
84
115
  runtime_env = {
85
116
  **self._resolve_model_env(build, manifest, selected_model),
86
117
  **self._resolve_mcp_env(manifest),
@@ -159,8 +190,85 @@ class CodexRunSpecResolver:
159
190
  model=selected_model,
160
191
  request_config=request_config,
161
192
  manifest_sha256=build.manifest_sha256,
193
+ plugin_bundle_root=provider_root,
162
194
  )
163
195
 
196
+ def _plugin_bootstrap(
197
+ self,
198
+ build: Any,
199
+ manifest: CodexAgentManifest,
200
+ ) -> dict[str, Any] | None:
201
+ # Only Codex-native bindings belong to the App Server bootstrap. DSH
202
+ # bindings are materialized by the Provider Bundle and intentionally do
203
+ # not have entries in the Codex plugin snapshot store.
204
+ bindings = [
205
+ item
206
+ for item in (manifest.plugins or [])
207
+ if item.enabled and item.ecosystem == "codex"
208
+ ]
209
+ lock = getattr(build, "plugin_lock", None)
210
+ lock_digest = getattr(build, "plugin_lock_digest", None)
211
+ marketplace = getattr(build, "plugin_marketplace", None)
212
+ statuses = getattr(build, "plugin_runtime_status", None) or {}
213
+ if not bindings:
214
+ if lock is not None or lock_digest is not None or marketplace is not None:
215
+ raise StudioError(
216
+ "CODEX_PLUGIN_BUILD_INVALID",
217
+ "Codex Build 含有未绑定的插件锁信息",
218
+ status_code=409,
219
+ details={"buildId": build.id},
220
+ )
221
+ return None
222
+ if lock is None or lock_digest is None or marketplace is None:
223
+ raise StudioError(
224
+ "CODEX_PLUGIN_REBUILD_REQUIRED",
225
+ "Codex Build 缺少原生插件不可变快照,请重新构建",
226
+ status_code=409,
227
+ details={"buildId": build.id},
228
+ )
229
+ actual_lock_digest = plugin_lock_digest(lock)
230
+ if actual_lock_digest != lock_digest or marketplace.plugin_lock_digest != lock_digest:
231
+ raise StudioError(
232
+ "CODEX_PLUGIN_LOCK_DIGEST_MISMATCH",
233
+ "Codex Build 的 PluginLock 摘要不一致",
234
+ status_code=409,
235
+ details={
236
+ "buildId": build.id,
237
+ "expected": lock_digest,
238
+ "actual": actual_lock_digest,
239
+ },
240
+ )
241
+ for binding in bindings:
242
+ stored = self.plugin_snapshots.load(binding.snapshot_digest)
243
+ if stored.plugin_ref != binding.plugin_ref:
244
+ raise StudioError(
245
+ "CODEX_PLUGIN_BINDING_MISMATCH",
246
+ "Codex 插件绑定与不可变快照身份不一致",
247
+ status_code=409,
248
+ details={"pluginRef": binding.plugin_ref},
249
+ )
250
+ stored.select_components(binding.components)
251
+ status = statuses.get(binding.plugin_ref) or {}
252
+ if status.get("runnable") is False or any(
253
+ selector.startswith("hook:") for selector in binding.components
254
+ ):
255
+ raise StudioError(
256
+ "CODEX_PLUGIN_HOOK_TRUST_UNAVAILABLE",
257
+ "Codex App Server 尚无可验证的 hook trust API;该绑定已安全阻断",
258
+ status_code=409,
259
+ details={
260
+ "pluginRef": binding.plugin_ref,
261
+ "hookTrust": status.get("hookTrust", "unsupported"),
262
+ },
263
+ )
264
+ root = self.plugin_snapshots.verify_marketplace(marketplace)
265
+ return {
266
+ "marketplace_path": str(root),
267
+ "marketplace_name": marketplace.marketplace_name,
268
+ "plugin_names": list(marketplace.plugin_names),
269
+ "snapshot_digest": marketplace.marketplace_digest,
270
+ }
271
+
164
272
  def _resolve_model_env(
165
273
  self,
166
274
  build: Any,
@@ -184,12 +292,23 @@ class CodexRunSpecResolver:
184
292
  if profile is not None
185
293
  else ModelConfig().api_base.rstrip("/")
186
294
  )
187
- return {
295
+ env = {
188
296
  "OPENAI_API_KEY": credential,
189
297
  "OPENAI_BASE_URL": base_url,
190
298
  "OPENAI_API_BASE": base_url,
191
299
  "OPENAI_MODEL_NAME": selected_model,
192
300
  }
301
+ # A chat-only profile necessarily needs the Responses-to-Chat bridge.
302
+ # KSPMAS build snapshots created before wireApi was persisted have the
303
+ # same requirement. Route those known profiles directly so every fresh
304
+ # Studio process does not spend several seconds probing /models and two
305
+ # /responses payload dialects before the user's first turn.
306
+ if "KSADK_CODEX_USE_PROXY" not in os.environ and (
307
+ (profile is not None and profile.wire_api == "chat")
308
+ or self._is_known_chat_model_gateway(base_url)
309
+ ):
310
+ env["KSADK_CODEX_USE_PROXY"] = "1"
311
+ return env
193
312
 
194
313
  def _resolve_model_profile(
195
314
  self,
@@ -248,19 +367,41 @@ class CodexRunSpecResolver:
248
367
  return raw[: -len(suffix)]
249
368
  return raw
250
369
 
370
+ @staticmethod
371
+ def _is_known_chat_model_gateway(base_url: str) -> bool:
372
+ host = (urlparse(base_url).hostname or "").lower()
373
+ return host == "kspmas.ksyun.com" or host.startswith("kspmas-internal.")
374
+
251
375
  @staticmethod
252
376
  def _mcp_overrides(manifest: CodexAgentManifest) -> list[str]:
253
377
  """Translate bound MCP servers into codex --config overrides."""
254
378
  overrides: list[str] = []
255
379
  for server in manifest.mcp_servers or []:
256
380
  name = str(server.get("name") or "").strip()
381
+ transport = str(
382
+ server.get("transport") or ("http" if server.get("url") else "")
383
+ ).lower()
257
384
  url = str(server.get("url") or "").strip()
258
- if not name or not url:
385
+ if not name:
259
386
  continue
260
- overrides.append(f"mcp_servers.{name}.url={url}")
261
- env_key = str(server.get("env_key") or "").strip()
262
- if env_key:
263
- overrides.append(f"mcp_servers.{name}.bearer_token_env_var={env_key}")
387
+ if transport == "stdio":
388
+ command = str(server.get("command") or "").strip()
389
+ if not command:
390
+ continue
391
+ args = [str(argument) for argument in (server.get("args") or [])]
392
+ overrides.append(f"mcp_servers.{name}.command={json.dumps(command)}")
393
+ overrides.append(f"mcp_servers.{name}.args={json.dumps(args)}")
394
+ env_refs = server.get("env_refs") or {}
395
+ if isinstance(env_refs, dict) and env_refs:
396
+ overrides.append(
397
+ f"mcp_servers.{name}.env_vars="
398
+ f"{json.dumps(sorted(str(key) for key in env_refs))}"
399
+ )
400
+ elif transport in {"http", "sse"} and url:
401
+ overrides.append(f"mcp_servers.{name}.url={url}")
402
+ env_key = str(server.get("env_key") or "").strip()
403
+ if env_key:
404
+ overrides.append(f"mcp_servers.{name}.bearer_token_env_var={env_key}")
264
405
  return overrides
265
406
 
266
407
  def _resolve_mcp_env(self, manifest: CodexAgentManifest) -> dict[str, str]:
@@ -272,10 +413,20 @@ class CodexRunSpecResolver:
272
413
  """
273
414
  env: dict[str, str] = {}
274
415
  for server in manifest.mcp_servers or []:
416
+ references: dict[str, str] = {}
275
417
  env_key = str(server.get("env_key") or "").strip()
276
- if not env_key:
277
- continue
278
- if env_key in env:
418
+ if env_key:
419
+ references[env_key] = f"env://{env_key}"
420
+ raw_references = server.get("env_refs") or {}
421
+ if isinstance(raw_references, dict):
422
+ references.update(
423
+ {
424
+ str(name).strip(): str(reference).strip()
425
+ for name, reference in raw_references.items()
426
+ if str(name).strip() and str(reference).strip()
427
+ }
428
+ )
429
+ if not references:
279
430
  continue
280
431
  resolver = self.credentials
281
432
  if resolver is None:
@@ -283,19 +434,22 @@ class CodexRunSpecResolver:
283
434
 
284
435
  resolver = CredentialResolver(self.workspace)
285
436
  self.credentials = resolver
286
- try:
287
- env[env_key] = resolver.resolve(f"env://{env_key}")
288
- except Exception as exc:
289
- raise StudioError(
290
- "MCP_CREDENTIAL_MISSING",
291
- f"MCP Server「{server.get('name')}」需要凭证 {env_key},"
292
- "请先在 MCP 页连接时保存该环境变量的值",
293
- status_code=422,
294
- details={
295
- "server": str(server.get("name") or ""),
296
- "reference": f"env://{env_key}",
297
- },
298
- ) from exc
437
+ for name, reference in references.items():
438
+ if name in env:
439
+ continue
440
+ try:
441
+ env[name] = resolver.resolve(reference)
442
+ except Exception as exc:
443
+ raise StudioError(
444
+ "MCP_CREDENTIAL_MISSING",
445
+ f"MCP Server「{server.get('name')}」需要凭证 {name},"
446
+ "请先保存对应 Secret 引用",
447
+ status_code=422,
448
+ details={
449
+ "server": str(server.get("name") or ""),
450
+ "reference": reference,
451
+ },
452
+ ) from exc
299
453
  return env
300
454
 
301
455
  @staticmethod
@@ -326,11 +480,16 @@ class CodexRunSpecResolver:
326
480
  if approval_mode:
327
481
  return approval_presets[normalize_tool_approval_mode(approval_mode)]
328
482
  raw = (
329
- (override or os.environ.get("KSADK_CODEX_SANDBOX") or manifest.sandbox or "read_only")
483
+ (
484
+ override
485
+ or os.environ.get("KSADK_CODEX_SANDBOX")
486
+ or manifest.sandbox
487
+ or "workspace_write_auto"
488
+ )
330
489
  .strip()
331
490
  .lower()
332
491
  )
333
- return presets.get(raw, ("read-only", "deny_all"))
492
+ return presets.get(raw, ("workspace-write", "auto_review"))
334
493
 
335
494
  def _skill_inputs(self, manifest: CodexAgentManifest) -> list[dict[str, str]]:
336
495
  """Resolve bound skill resource ids to codex SkillInput wire dicts."""
@@ -12,6 +12,7 @@ import json
12
12
  from collections.abc import Callable, Mapping
13
13
  from typing import Any
14
14
 
15
+ from ksadk.plugins.builtins import builtin_capability_permissions
15
16
  from ksadk.plugins.contracts import LockedCapability, PluginLockEntry, PluginManifest
16
17
  from ksadk.plugins.resolver import (
17
18
  PluginResolutionError,
@@ -36,6 +37,11 @@ def compatibility_facts_digest(
36
37
 
37
38
  payload: dict[str, Any] = {
38
39
  "allowedPermissions": sorted(set(draft.spec.security.allowed_permissions)),
40
+ "hostOwnedPermissions": (
41
+ sorted(builtin_capability_permissions(composition.profile))
42
+ if composition is not None
43
+ else []
44
+ ),
39
45
  "runtime": {
40
46
  "type": str(runtime_lock.get("type") or ""),
41
47
  "version": str(runtime_lock.get("version") or ""),
@@ -90,7 +96,12 @@ def build_bundle_compatibility_report(
90
96
  else {}
91
97
  ),
92
98
  }
93
- allowed_permissions = sorted(set(draft.spec.security.allowed_permissions))
99
+ allowed_permissions = sorted(
100
+ set(draft.spec.security.allowed_permissions)
101
+ | set(builtin_capability_permissions(composition.profile))
102
+ if composition is not None
103
+ else set(draft.spec.security.allowed_permissions)
104
+ )
94
105
  if composition is None:
95
106
  return _legacy_report(
96
107
  bundle=bundle,