agentengine-sdk-python 0.8.3__py3-none-any.whl → 0.8.5__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 (819) hide show
  1. {agentengine_sdk_python-0.8.3.dist-info → agentengine_sdk_python-0.8.5.dist-info}/METADATA +13 -9
  2. agentengine_sdk_python-0.8.5.dist-info/RECORD +1296 -0
  3. ksadk/_build_provenance.json +1 -1
  4. ksadk/_process.py +83 -0
  5. ksadk/_str_enum.py +17 -0
  6. ksadk/a2ui/core.py +3 -3
  7. ksadk/api/client.py +111 -91
  8. ksadk/builders/code_builder.py +74 -21
  9. ksadk/builders/framework_requirements.py +22 -3
  10. ksadk/builders/ks3_uploader.py +36 -7
  11. ksadk/builders/managed_runtime_builder.py +1 -0
  12. ksadk/cli/__init__.py +68 -3
  13. ksadk/cli/cmd_config.py +4 -4
  14. ksadk/cli/cmd_create.py +12 -12
  15. ksadk/cli/cmd_hermes.py +24 -2
  16. ksadk/cli/cmd_invoke.py +28 -5
  17. ksadk/cli/cmd_managed_runtime.py +13 -1
  18. ksadk/cli/cmd_openclaw.py +26 -1
  19. ksadk/cli/cmd_plugin.py +76 -13
  20. ksadk/cli/cmd_studio.py +64 -16
  21. ksadk/cli/cmd_web.py +2 -5
  22. ksadk/cli/openclaw_env.py +1 -1
  23. ksadk/cli/resource_common.py +26 -0
  24. ksadk/cli/runtime_bootstrap.py +23 -1
  25. ksadk/codex/client.py +425 -96
  26. ksadk/codex/projection.py +24 -0
  27. ksadk/codex/runtime.py +56 -298
  28. ksadk/common/auth.py +16 -10
  29. ksadk/configs/__init__.py +1 -1
  30. ksadk/configs/env_registry.py +153 -31
  31. ksadk/configs/env_registry_studio.py +86 -0
  32. ksadk/configs/global_config.py +1 -1
  33. ksadk/configs/settings.py +3 -3
  34. ksadk/connector/__init__.py +17 -0
  35. ksadk/connector/channel.py +477 -0
  36. ksadk/context_engine/capabilities.py +52 -4
  37. ksadk/conversations/attachment_storage.py +10 -3
  38. ksadk/conversations/attachments.py +16 -5
  39. ksadk/conversations/message_projection.py +133 -21
  40. ksadk/conversations/normalize.py +28 -10
  41. ksadk/conversations/projector.py +4 -6
  42. ksadk/conversations/runtime_baseline.py +37 -0
  43. ksadk/conversations/runtime_invocation.py +22 -4
  44. ksadk/conversations/runtime_observability.py +39 -10
  45. ksadk/conversations/runtime_payloads.py +9 -0
  46. ksadk/conversations/runtime_persistence.py +105 -9
  47. ksadk/conversations/runtime_preparation.py +42 -33
  48. ksadk/conversations/runtime_resume.py +50 -2
  49. ksadk/conversations/runtime_stream_events.py +34 -35
  50. ksadk/conversations/runtime_streaming.py +33 -7
  51. ksadk/deployment/env_forward.py +2 -2
  52. ksadk/deployment/providers/serverless.py +1 -1
  53. ksadk/events/adapters/_codex_items.py +16 -8
  54. ksadk/events/adapters/_codex_validators.py +18 -7
  55. ksadk/events/adapters/_langgraph_support.py +34 -0
  56. ksadk/events/adapters/langgraph.py +15 -1
  57. ksadk/events/canonical_store.py +3 -1
  58. ksadk/events/projections.py +1 -1
  59. ksadk/events/session_event.py +2 -2
  60. ksadk/harness/__init__.py +14 -0
  61. ksadk/harness/app.py +11 -0
  62. ksadk/harness/artifact_store.py +213 -0
  63. ksadk/harness/capabilities.py +115 -0
  64. ksadk/harness/capability_runtime.py +237 -0
  65. ksadk/harness/closure_contract.py +92 -0
  66. ksadk/harness/compaction_record.py +122 -0
  67. ksadk/harness/compiler.py +284 -0
  68. ksadk/harness/config.py +2 -2
  69. ksadk/harness/conformance/__init__.py +33 -0
  70. ksadk/harness/conformance/contract.py +506 -0
  71. ksadk/harness/conformance/fixtures.py +102 -0
  72. ksadk/harness/context_engine.py +403 -0
  73. ksadk/harness/context_maintenance.py +259 -0
  74. ksadk/harness/context_manifest.py +188 -0
  75. ksadk/harness/context_tuning.py +168 -0
  76. ksadk/harness/draft_runtime.py +322 -0
  77. ksadk/harness/engine/__init__.py +40 -0
  78. ksadk/harness/engine/base.py +122 -0
  79. ksadk/harness/engine/budgets.py +108 -0
  80. ksadk/harness/engine/capability_declarations.py +59 -0
  81. ksadk/harness/engine/completion_guard.py +42 -0
  82. ksadk/harness/engine/context_pipeline.py +579 -0
  83. ksadk/harness/engine/graph_builder.py +859 -0
  84. ksadk/harness/engine/langgraph.py +931 -0
  85. ksadk/harness/engine/mcp_disclosure.py +750 -0
  86. ksadk/harness/engine/policy_runtime.py +70 -0
  87. ksadk/harness/engine/postgres_checkpointer.py +63 -0
  88. ksadk/harness/engine/run_control_bridge.py +80 -0
  89. ksadk/harness/engine/run_types.py +88 -0
  90. ksadk/harness/engine/skill_disclosure.py +189 -0
  91. ksadk/harness/engine/spans.py +41 -0
  92. ksadk/harness/engine/subagents.py +343 -0
  93. ksadk/harness/engine/thread_ids.py +112 -0
  94. ksadk/harness/engine/tool_dispatch.py +144 -0
  95. ksadk/harness/event_tree.py +212 -0
  96. ksadk/harness/events.py +461 -0
  97. ksadk/harness/execution_policy.py +94 -0
  98. ksadk/harness/insights.py +210 -0
  99. ksadk/harness/lifecycle.py +578 -0
  100. ksadk/harness/lifecycle_conformance.py +233 -0
  101. ksadk/harness/lifecycle_local_plane.py +104 -0
  102. ksadk/harness/loop/__init__.py +44 -0
  103. ksadk/harness/loop/reason.py +454 -0
  104. ksadk/harness/loop/tools.py +762 -0
  105. ksadk/harness/managed_runtime.py +884 -0
  106. ksadk/harness/mcp_matrix.py +474 -0
  107. ksadk/harness/mcp_runtime.py +471 -0
  108. ksadk/harness/memory_consolidation.py +157 -0
  109. ksadk/harness/memory_loop.py +156 -0
  110. ksadk/harness/memory_runtime.py +541 -0
  111. ksadk/harness/metrics.py +90 -0
  112. ksadk/harness/model_capability.py +253 -0
  113. ksadk/harness/model_provider.py +220 -0
  114. ksadk/harness/observability/__init__.py +29 -0
  115. ksadk/harness/observability/inspection.py +528 -0
  116. ksadk/harness/observability/metrics.py +167 -0
  117. ksadk/harness/observability/otel_exporter.py +218 -0
  118. ksadk/harness/prompt_cache.py +70 -0
  119. ksadk/harness/public_activity.py +154 -0
  120. ksadk/harness/readiness.py +249 -0
  121. ksadk/harness/reasoner.py +466 -13
  122. ksadk/harness/release_readiness.py +140 -0
  123. ksadk/harness/resource_ref.py +69 -0
  124. ksadk/harness/run_control.py +668 -0
  125. ksadk/harness/runtime.py +171 -136
  126. ksadk/harness/runtime_capabilities.py +158 -0
  127. ksadk/harness/runtime_server.py +514 -0
  128. ksadk/harness/sandbox_adapters.py +739 -0
  129. ksadk/harness/sandbox_backend.py +530 -0
  130. ksadk/harness/sandbox_conformance.py +288 -0
  131. ksadk/harness/sandbox_lease.py +77 -0
  132. ksadk/harness/sandbox_lease_conformance.py +259 -0
  133. ksadk/harness/sandbox_matrix.py +170 -0
  134. ksadk/harness/sandbox_reconciliation.py +140 -0
  135. ksadk/harness/sandbox_recovery.py +586 -0
  136. ksadk/harness/sandbox_recovery_conformance.py +246 -0
  137. ksadk/harness/session_store.py +243 -0
  138. ksadk/harness/skill_composition.py +212 -0
  139. ksadk/harness/skill_feedback.py +123 -0
  140. ksadk/harness/skill_matrix.py +233 -0
  141. ksadk/harness/skill_runtime.py +259 -0
  142. ksadk/harness/spec.py +332 -0
  143. ksadk/harness/state.py +153 -0
  144. ksadk/harness/strategies.py +149 -0
  145. ksadk/harness/subagent.py +253 -0
  146. ksadk/harness/tool_policy.py +131 -0
  147. ksadk/harness/tool_receipts.py +96 -0
  148. ksadk/harness/tool_reliability.py +81 -0
  149. ksadk/harness/tools.py +38 -13
  150. ksadk/harness/user_errors.py +69 -0
  151. ksadk/harness/working_context.py +81 -0
  152. ksadk/harness/working_context_patch.py +99 -0
  153. ksadk/identity/resolver.py +18 -0
  154. ksadk/interaction/__init__.py +1 -1
  155. ksadk/interaction/ledger.py +1 -1
  156. ksadk/interaction/provider.py +2 -1
  157. ksadk/interaction/providers/__init__.py +3 -1
  158. ksadk/interaction/providers/adk.py +1 -1
  159. ksadk/interaction/providers/codex.py +1 -1
  160. ksadk/interaction/providers/harness.py +50 -0
  161. ksadk/interaction/providers/langgraph.py +2 -1
  162. ksadk/kernel/__init__.py +10 -0
  163. ksadk/kernel/approval_presentation.py +91 -0
  164. ksadk/kernel/authorization.py +1 -1
  165. ksadk/kernel/bootstrap.py +114 -106
  166. ksadk/kernel/contract_fingerprints.py +1 -1
  167. ksadk/kernel/contracts.py +5 -0
  168. ksadk/kernel/control.py +32 -1
  169. ksadk/kernel/execution_grants.py +221 -0
  170. ksadk/kernel/execution_grants_memory.py +133 -0
  171. ksadk/kernel/execution_grants_postgres.py +217 -0
  172. ksadk/kernel/execution_grants_sqlite.py +209 -0
  173. ksadk/kernel/ingress.py +42 -29
  174. ksadk/kernel/mapping.py +1 -1
  175. ksadk/kernel/memory_store.py +24 -11
  176. ksadk/kernel/postgres_store.py +63 -33
  177. ksadk/kernel/recovery.py +78 -14
  178. ksadk/kernel/sql/001_agent_kernel.sql +23 -0
  179. ksadk/kernel/sqlite_store.py +331 -25
  180. ksadk/kernel/state.py +2 -3
  181. ksadk/kernel/store.py +72 -2
  182. ksadk/kernel/worker.py +144 -51
  183. ksadk/kernel/worker_history.py +72 -0
  184. ksadk/kernel/worker_identity.py +47 -0
  185. ksadk/knowledge_base/client.py +57 -27
  186. ksadk/mcp_runtime/__init__.py +12 -4
  187. ksadk/memory/adk/backends/sdk_ltm_backend.py +161 -41
  188. ksadk/memory/adk/resilient_session_service.py +25 -17
  189. ksadk/memory/adk/short_term_memory.py +26 -9
  190. ksadk/memory/coordinator.py +22 -6
  191. ksadk/memory/extraction.py +40 -1
  192. ksadk/memory/models.py +84 -5
  193. ksadk/memory/provider_resolver.py +8 -0
  194. ksadk/memory/providers/local_postgres.py +200 -0
  195. ksadk/memory/providers/local_sqlite.py +42 -3
  196. ksadk/memory/retrieval.py +189 -0
  197. ksadk/memory/store_adapter.py +150 -0
  198. ksadk/model_policy.py +2 -2
  199. ksadk/model_proxy/detect.py +254 -0
  200. ksadk/model_proxy/server.py +14 -7
  201. ksadk/model_proxy/transform.py +40 -2
  202. ksadk/plugins/__init__.py +5 -1
  203. ksadk/plugins/artifacts.py +275 -0
  204. ksadk/plugins/bridges/__init__.py +4 -2
  205. ksadk/plugins/bridges/codex.py +120 -13
  206. ksadk/plugins/bridges/dsh.py +351 -156
  207. ksadk/plugins/builtins.py +72 -35
  208. ksadk/plugins/bundle_security.py +28 -4
  209. ksadk/plugins/codex_manifest.py +983 -0
  210. ksadk/plugins/companion_artifacts.py +83 -0
  211. ksadk/plugins/companions.py +368 -0
  212. ksadk/plugins/composition.py +8 -0
  213. ksadk/plugins/contracts.py +119 -1
  214. ksadk/plugins/delivery.py +153 -0
  215. ksadk/plugins/dsh_channels.py +156 -0
  216. ksadk/plugins/dsh_home.py +140 -0
  217. ksadk/plugins/dsh_installation_digest.py +71 -0
  218. ksadk/plugins/dsh_teams.py +105 -0
  219. ksadk/plugins/dsh_toolchain.py +203 -32
  220. ksadk/plugins/ecosystem_probe.py +6 -6
  221. ksadk/plugins/execution_host.py +99 -0
  222. ksadk/plugins/host.py +102 -39
  223. ksadk/plugins/kernel_adapter.py +205 -0
  224. ksadk/plugins/providers/__init__.py +23 -0
  225. ksadk/plugins/providers/bundles/dsh-channels-client/client.js +19 -0
  226. ksadk/plugins/providers/bundles/dsh-channels-client/cordis.patch.yml +3 -0
  227. ksadk/plugins/providers/bundles/dsh-channels-client/index.mjs +7 -0
  228. ksadk/plugins/providers/bundles/dsh-channels-client/package.json +12 -0
  229. ksadk/plugins/providers/bundles/dsh-knowledge/cordis.patch.yml +3 -0
  230. ksadk/plugins/providers/bundles/dsh-knowledge/index.mjs +53 -0
  231. ksadk/plugins/providers/bundles/dsh-knowledge/package.json +16 -0
  232. ksadk/plugins/providers/bundles/dsh-memory/cordis.patch.yml +3 -0
  233. ksadk/plugins/providers/bundles/dsh-memory/index.mjs +175 -0
  234. ksadk/plugins/providers/bundles/dsh-memory/package.json +16 -0
  235. ksadk/plugins/providers/bundles/dsh-platform-resources/client.mjs +166 -0
  236. ksadk/plugins/providers/bundles/dsh-platform-resources/cordis.patch.yml +3 -0
  237. ksadk/plugins/providers/bundles/dsh-platform-resources/index.mjs +9 -0
  238. ksadk/plugins/providers/bundles/dsh-platform-resources/package.json +12 -0
  239. ksadk/plugins/providers/bundles/dsh-skill-center/cordis.patch.yml +3 -0
  240. ksadk/plugins/providers/bundles/dsh-skill-center/index.mjs +125 -0
  241. ksadk/plugins/providers/bundles/dsh-skill-center/package.json +16 -0
  242. ksadk/plugins/providers/bundles/dsh-teams-client/client.js +29 -0
  243. ksadk/plugins/providers/bundles/dsh-teams-client/cordis.patch.yml +3 -0
  244. ksadk/plugins/providers/bundles/dsh-teams-client/index.mjs +11 -0
  245. ksadk/plugins/providers/bundles/dsh-teams-client/package.json +35 -0
  246. ksadk/plugins/providers/bundles/dsh-teams-leader-policy/cordis.patch.yml +3 -0
  247. ksadk/plugins/providers/bundles/dsh-teams-leader-policy/index.mjs +13 -0
  248. ksadk/plugins/providers/bundles/dsh-teams-leader-policy/package.json +27 -0
  249. ksadk/plugins/providers/bundles/dsh-teams-profile/cordis.patch.yml +3 -0
  250. ksadk/plugins/providers/bundles/dsh-teams-profile/index.mjs +12 -0
  251. ksadk/plugins/providers/bundles/dsh-teams-profile/package.json +26 -0
  252. ksadk/plugins/providers/bundles/dsh-teams-router/cordis.patch.yml +3 -0
  253. ksadk/plugins/providers/bundles/dsh-teams-router/index.mjs +16 -0
  254. ksadk/plugins/providers/bundles/dsh-teams-router/package.json +27 -0
  255. ksadk/plugins/providers/bundles/dsh-teams-tasks/cordis.patch.yml +3 -0
  256. ksadk/plugins/providers/bundles/dsh-teams-tasks/index.mjs +16 -0
  257. ksadk/plugins/providers/bundles/dsh-teams-tasks/package.json +27 -0
  258. ksadk/plugins/providers/bundles/dsh-teams-tools/cordis.patch.yml +3 -0
  259. ksadk/plugins/providers/bundles/dsh-teams-tools/index.mjs +25 -0
  260. ksadk/plugins/providers/bundles/dsh-teams-tools/package.json +29 -0
  261. ksadk/plugins/providers/bundles/dsh-teams-tools/tools.json +235 -0
  262. ksadk/plugins/providers/bundles/ksadk-codex/index.mjs +1 -1
  263. ksadk/plugins/providers/bundles/ksadk-dsh-capability-host/cordis.patch.yml +3 -0
  264. ksadk/plugins/providers/bundles/ksadk-dsh-capability-host/index.mjs +920 -0
  265. ksadk/plugins/providers/bundles/ksadk-dsh-capability-host/package.json +27 -0
  266. ksadk/plugins/providers/bundles/ksadk-dsh-companion-host/client.mjs +133 -0
  267. ksadk/plugins/providers/bundles/ksadk-dsh-companion-host/index.mjs +14 -0
  268. ksadk/plugins/providers/bundles/ksadk-dsh-studio/client.js +115 -0
  269. ksadk/plugins/providers/bundles/ksadk-dsh-studio/index.mjs +19 -0
  270. ksadk/plugins/providers/bundles/ksadk-dsh-studio/package.json +7 -0
  271. ksadk/plugins/providers/bundles/ksadk-harness/index.mjs +1 -1
  272. ksadk/plugins/providers/codex.py +344 -70
  273. ksadk/plugins/providers/codex_native.py +368 -0
  274. ksadk/plugins/providers/codex_turn.py +301 -0
  275. ksadk/plugins/providers/dsh_capabilities.py +1450 -0
  276. ksadk/plugins/providers/dsh_mcp.py +467 -0
  277. ksadk/plugins/providers/harness.py +294 -141
  278. ksadk/plugins/providers/harness_delegation.py +593 -0
  279. ksadk/plugins/providers/harness_managed.py +456 -0
  280. ksadk/plugins/providers/harness_tools.py +326 -0
  281. ksadk/plugins/providers/mcp_projection.py +150 -0
  282. ksadk/plugins/providers/platform_resources.py +657 -0
  283. ksadk/plugins/providers/shipped_dsh.py +4 -1
  284. ksadk/plugins/resolver.py +8 -1
  285. ksadk/plugins/subagent_providers/codex.py +28 -6
  286. ksadk/plugins/teams/__init__.py +5 -0
  287. ksadk/plugins/teams/api.py +405 -0
  288. ksadk/plugins/teams/application.py +680 -0
  289. ksadk/plugins/teams/artifacts.py +60 -0
  290. ksadk/plugins/teams/context.py +96 -0
  291. ksadk/plugins/teams/contracts.py +136 -0
  292. ksadk/plugins/teams/domain.py +1427 -0
  293. ksadk/plugins/teams/domain_values.py +24 -0
  294. ksadk/plugins/teams/errors.py +13 -0
  295. ksadk/plugins/teams/migration.py +311 -0
  296. ksadk/plugins/teams/migration_cli.py +322 -0
  297. ksadk/plugins/teams/postgres_store.py +138 -0
  298. ksadk/plugins/teams/runtime.py +777 -0
  299. ksadk/plugins/teams/source_projection.py +84 -0
  300. ksadk/plugins/teams/store.py +311 -0
  301. ksadk/plugins/teams/task_decisions.py +423 -0
  302. ksadk/plugins/teams/transport.py +91 -0
  303. ksadk/plugins/teams/workspaces.py +255 -0
  304. ksadk/resource_runtime/__init__.py +4 -0
  305. ksadk/resource_runtime/broker.py +616 -0
  306. ksadk/resource_runtime/build_artifacts.py +165 -0
  307. ksadk/resource_runtime/contracts.py +138 -0
  308. ksadk/resource_runtime/discovery_receipts.py +100 -0
  309. ksadk/resource_runtime/discovery_skills.py +172 -0
  310. ksadk/resource_runtime/errors.py +6 -0
  311. ksadk/resource_runtime/ipc.py +142 -0
  312. ksadk/resource_runtime/kernel_approval.py +165 -0
  313. ksadk/resource_runtime/knowledge.py +114 -0
  314. ksadk/resource_runtime/langgraph.py +94 -0
  315. ksadk/resource_runtime/leases.py +191 -0
  316. ksadk/resource_runtime/managed_projection.py +186 -0
  317. ksadk/resource_runtime/mcp_server.py +138 -0
  318. ksadk/resource_runtime/memory_provider.py +318 -0
  319. ksadk/resource_runtime/memory_receipts.py +34 -0
  320. ksadk/resource_runtime/operation_ledger.py +211 -0
  321. ksadk/resource_runtime/plugin_config.py +48 -0
  322. ksadk/resource_runtime/policy_authorization.py +54 -0
  323. ksadk/resource_runtime/process.py +110 -0
  324. ksadk/resource_runtime/skill_artifacts.py +153 -0
  325. ksadk/resource_runtime/skill_runtime.py +42 -0
  326. ksadk/resource_runtime/skill_workspace.py +118 -0
  327. ksadk/resource_runtime/skills.py +215 -0
  328. ksadk/resource_runtime/snapshots.py +180 -0
  329. ksadk/resource_runtime/socket_server.py +103 -0
  330. ksadk/resource_runtime/supervisor.py +380 -0
  331. ksadk/resource_runtime/worker.py +504 -0
  332. ksadk/runners/_langgraph_runner_streams.py +182 -38
  333. ksadk/runners/_langgraph_state_reader.py +106 -0
  334. ksadk/runners/_session_identity.py +285 -0
  335. ksadk/runners/adk_runner.py +166 -63
  336. ksadk/runners/base_runner.py +29 -1
  337. ksadk/runners/langgraph_runner.py +542 -195
  338. ksadk/runners/patch_langchain.py +47 -0
  339. ksadk/runners/usage_accumulator.py +11 -3
  340. ksadk/runtime/_runner_adapter/stream_mapping.py +194 -20
  341. ksadk/runtime/adapter.py +2 -0
  342. ksadk/runtime/conversation_execution.py +117 -17
  343. ksadk/runtime/executor.py +87 -3
  344. ksadk/runtime/factory.py +65 -274
  345. ksadk/runtime/framework_adapters.py +23 -0
  346. ksadk/runtime/preprocessing.py +21 -5
  347. ksadk/runtime/runner_adapter.py +106 -18
  348. ksadk/runtime/skill_eval_result.py +36 -0
  349. ksadk/runtime/timing.py +46 -0
  350. ksadk/runtime/usage.py +49 -18
  351. ksadk/runtime_context.py +142 -2
  352. ksadk/sandbox/backends/e2b.py +288 -25
  353. ksadk/sandbox/backends/local_process.py +72 -39
  354. ksadk/sandbox/base.py +64 -1
  355. ksadk/sandbox/diagnostics.py +82 -0
  356. ksadk/sandbox/e2b_connection.py +66 -0
  357. ksadk/sandbox/local_controls.py +746 -0
  358. ksadk/sandbox/local_launcher.py +90 -0
  359. ksadk/scheduler/dispatcher.py +1 -1
  360. ksadk/scheduler/sqlite_store.py +18 -0
  361. ksadk/server/composition.py +2 -0
  362. ksadk/server/factory.py +5 -0
  363. ksadk/server/invocation_identity.py +118 -0
  364. ksadk/server/persistence_capability.py +516 -0
  365. ksadk/server/routes/common.py +32 -3
  366. ksadk/server/routes/control.py +271 -52
  367. ksadk/server/routes/dependencies.py +16 -0
  368. ksadk/server/routes/kernel_ingress.py +9 -1
  369. ksadk/server/routes/misc.py +233 -25
  370. ksadk/server/routes/models.py +47 -4
  371. ksadk/server/routes/openai_compat.py +76 -13
  372. ksadk/server/routes/projection.py +252 -12
  373. ksadk/server/routes/run.py +106 -35
  374. ksadk/server/routes/sessions.py +491 -138
  375. ksadk/server/routes/streaming.py +43 -9
  376. ksadk/server/routes/workspace.py +130 -21
  377. ksadk/server/static/assets/{ArtifactsPanel-10GPXIJ6.js → ArtifactsPanel-C1YoaKhx.js} +1 -1
  378. ksadk/server/static/assets/{CodeBlock-BXk1l-G1.js → CodeBlock-DHuAWfr5.js} +10 -7
  379. ksadk/server/static/assets/MathMessageMarkdown-cvdrBwYr.js +8 -0
  380. ksadk/server/static/assets/{MermaidBlock--OEYoXIJ.js → MermaidBlock-DeBkbJvI.js} +9 -9
  381. ksadk/server/static/assets/{NativeTerminalPanel-DrEe1syq.js → NativeTerminalPanel-oJj44_sV.js} +1 -1
  382. ksadk/server/static/assets/{abnfDiagram-VCTEODGH-eeTFJLvo.js → abnfDiagram-VCTEODGH-Dhfv25o2.js} +1 -1
  383. ksadk/server/static/assets/{arc-S3ZNbIAd.js → arc-C35w-pn1.js} +1 -1
  384. ksadk/server/static/assets/architecture-7GRP2DOG-BCsa26zi.js +1 -0
  385. ksadk/server/static/assets/{architectureDiagram-5GKGNRK7-CRjgEJDX.js → architectureDiagram-5GKGNRK7-FoMY_u6D.js} +1 -1
  386. ksadk/server/static/assets/{blockDiagram-NRAW4CY4-C7bsBoNH.js → blockDiagram-NRAW4CY4-zD4Rt7oE.js} +1 -1
  387. ksadk/server/static/assets/{c4Diagram-UCG6FXSJ-BX3c33Ob.js → c4Diagram-UCG6FXSJ-BCtGGkhN.js} +1 -1
  388. ksadk/server/static/assets/channel-_KDifNys.js +1 -0
  389. ksadk/server/static/assets/chunk-2Q5K7J3B-HdVkJ9F0.js +1 -0
  390. ksadk/server/static/assets/{chunk-5VM5RSS4-bZ7ws-8m.js → chunk-5VM5RSS4-C2Ms13_k.js} +1 -1
  391. ksadk/server/static/assets/{chunk-F27PBJKO-D2r0pvhY.js → chunk-F27PBJKO-BoTj-qgx.js} +1 -1
  392. ksadk/server/static/assets/{chunk-G27WJ6UU-CZwF3oUP.js → chunk-G27WJ6UU-DOMyyjHH.js} +1 -1
  393. ksadk/server/static/assets/{chunk-JWPE2WC7-DigFYCML.js → chunk-JWPE2WC7-DbJJqDli.js} +1 -1
  394. ksadk/server/static/assets/{chunk-LCL6LL3I-CnorGV5q.js → chunk-LCL6LL3I-CLuRCt_W.js} +1 -1
  395. ksadk/server/static/assets/{chunk-POPQ4Y6H-CexntQA-.js → chunk-POPQ4Y6H-D0Dz847e.js} +1 -1
  396. ksadk/server/static/assets/{chunk-RHFEMEQ7-CHTC7UxA.js → chunk-RHFEMEQ7-BWSRzEcd.js} +1 -1
  397. ksadk/server/static/assets/{chunk-SVP7TREG-BC1EWt_-.js → chunk-SVP7TREG-CPoHqkCY.js} +1 -1
  398. ksadk/server/static/assets/{chunk-XXDRQBXY-BTG24xN0.js → chunk-XXDRQBXY-Bx1jS-X-.js} +1 -1
  399. ksadk/server/static/assets/classDiagram-DTDB5LWJ-BVCW3ZqZ.js +1 -0
  400. ksadk/server/static/assets/classDiagram-v2-JRS7N3AN-BVCW3ZqZ.js +1 -0
  401. ksadk/server/static/assets/{cose-bilkent-JH36ORCC-CkonRdAS.js → cose-bilkent-JH36ORCC-LzyWm4m0.js} +1 -1
  402. ksadk/server/static/assets/cynefin-OW5HDTMX-CNXjFctL.js +1 -0
  403. ksadk/server/static/assets/{cynefinDiagram-5FMLGOSQ-DEOCBe15.js → cynefinDiagram-5FMLGOSQ-BlW_bHED.js} +1 -1
  404. ksadk/server/static/assets/{dagre-3AP2YEHR-DBThPuLa.js → dagre-3AP2YEHR-Bu_S86_i.js} +1 -1
  405. ksadk/server/static/assets/{dagre-ClTPrTht.js → dagre-B7nCawed.js} +1 -1
  406. ksadk/server/static/assets/{diagram-S7CK7UJ4-DsZHrnpJ.js → diagram-S7CK7UJ4-W_Zow2Km.js} +1 -1
  407. ksadk/server/static/assets/{diagram-UQ7AKVKN-BJR4nhVr.js → diagram-UQ7AKVKN-CLIKAHON.js} +1 -1
  408. ksadk/server/static/assets/{diagram-VSXAHHWV-xzcERX0a.js → diagram-VSXAHHWV-Dv6_QAlN.js} +1 -1
  409. ksadk/server/static/assets/{diagram-VX7I27RA-tn2xM1xu.js → diagram-VX7I27RA-BWAWRDtZ.js} +1 -1
  410. ksadk/server/static/assets/{diagram-Z3DM3KII-BZPGBkw5.js → diagram-Z3DM3KII-XA_rWMss.js} +1 -1
  411. ksadk/server/static/assets/dist-0X_j2Rcc.js +1 -0
  412. ksadk/server/static/assets/{dist-4zN1_tq5.js → dist-1nXCdsej.js} +1 -1
  413. ksadk/server/static/assets/{dist-M67Hwu0n.js → dist-2vL2sAdF.js} +1 -1
  414. ksadk/server/static/assets/{dist-BJLUwH6W.js → dist-B3bA05-e.js} +1 -1
  415. ksadk/server/static/assets/{dist-8VWI-2bZ.js → dist-BLpRy_Yx.js} +1 -1
  416. ksadk/server/static/assets/{dist-D1V3f1B4.js → dist-BO_UwatH.js} +1 -1
  417. ksadk/server/static/assets/{dist-Cq4OL6nO.js → dist-BdNFAney.js} +1 -1
  418. ksadk/server/static/assets/{dist-DfGFrb0v.js → dist-C0J5_3qM.js} +1 -1
  419. ksadk/server/static/assets/{dist-DyqV4fL4.js → dist-CGt_UGeO.js} +1 -1
  420. ksadk/server/static/assets/{dist-DjhwGUgZ.js → dist-CIRMvUM4.js} +1 -1
  421. ksadk/server/static/assets/{dist-B1oWRmrH.js → dist-CIpWk_5f.js} +1 -1
  422. ksadk/server/static/assets/{dist-CXpH_Rdd.js → dist-CPyieXEf.js} +1 -1
  423. ksadk/server/static/assets/{dist-Btyo4vX4.js → dist-D-92S-Fd.js} +1 -1
  424. ksadk/server/static/assets/{dist-u8tVH5Ak.js → dist-DNKuMzWc.js} +1 -1
  425. ksadk/server/static/assets/{dist-DQAB0qn_.js → dist-DWfdmz9s.js} +2 -2
  426. ksadk/server/static/assets/{dist-B-46q3Hk.js → dist-DppE_r-D.js} +1 -1
  427. ksadk/server/static/assets/{dist-C71CsujO.js → dist-DyG6Ya-z.js} +1 -1
  428. ksadk/server/static/assets/{dist-DJmCPRVB.js → dist-M-SrdhhZ.js} +1 -1
  429. ksadk/server/static/assets/{dist-Bbwqa8TG.js → dist-mqD5TZup.js} +1 -1
  430. ksadk/server/static/assets/{dist-BI1qQH4n.js → dist-n3n6t_FO.js} +1 -1
  431. ksadk/server/static/assets/{dist-DUwKa_l6.js → dist-qe8xjesy.js} +1 -1
  432. ksadk/server/static/assets/{dist-B0gdk4rl.js → dist-t6MzE0jU.js} +1 -1
  433. ksadk/server/static/assets/{ebnfDiagram-PWID7BFC-DVfMsLge.js → ebnfDiagram-PWID7BFC-BfCzF1Xi.js} +1 -1
  434. ksadk/server/static/assets/{erDiagram-SSCWMZ5O-CWEZSYaw.js → erDiagram-SSCWMZ5O-Dpz9_0zn.js} +1 -1
  435. ksadk/server/static/assets/eventmodeling-NTZA5JFV-B5-8RH9c.js +1 -0
  436. ksadk/server/static/assets/flowDiagram-A5DVABFB-BppFxEKw.js +1 -0
  437. ksadk/server/static/assets/{ganttDiagram-EL5Y4UJY-TWIxoyYL.js → ganttDiagram-EL5Y4UJY-DDaG1f4_.js} +1 -1
  438. ksadk/server/static/assets/gitGraph-4MIJSDKK-B-AhYj4C.js +1 -0
  439. ksadk/server/static/assets/{gitGraphDiagram-WWUBYQGX-DDh2hd2S.js → gitGraphDiagram-WWUBYQGX-DcxzRwYC.js} +1 -1
  440. ksadk/server/static/assets/index-BMd2mucF.css +2 -0
  441. ksadk/server/static/assets/index-D5qyyhTH.js +244 -0
  442. ksadk/server/static/assets/info-A6RAGUB7-0uiKrC35.js +1 -0
  443. ksadk/server/static/assets/{infoDiagram-RXCK75RN-CgoyWiDR.js → infoDiagram-RXCK75RN-CYMdn6lQ.js} +1 -1
  444. ksadk/server/static/assets/{ishikawaDiagram-5VMMS53U-CyRIu_om.js → ishikawaDiagram-5VMMS53U-CLHFAD6c.js} +1 -1
  445. ksadk/server/static/assets/{journeyDiagram-EYS64GPL-DN5JXHzN.js → journeyDiagram-EYS64GPL-BHSKQGAl.js} +1 -1
  446. ksadk/server/static/assets/{kanban-definition-3QL26DDD-CNP3ui66.js → kanban-definition-3QL26DDD-D5W3tjTT.js} +1 -1
  447. ksadk/server/static/assets/{katex-DWEzQy1d.js → katex-mtjOi4KM.js} +1 -1
  448. ksadk/server/static/assets/{linear-C-qHp7d2.js → linear-BETqsxE_.js} +1 -1
  449. ksadk/server/static/assets/{mermaid-parser.core-Cl-K943T.js → mermaid-parser.core-DPWrvs90.js} +2 -2
  450. ksadk/server/static/assets/{mindmap-definition-FBJOCRG2-D5DB5mYm.js → mindmap-definition-FBJOCRG2-CJG2mfBP.js} +1 -1
  451. ksadk/server/static/assets/packet-AYTQ26CC-BVTmZ_cw.js +1 -0
  452. ksadk/server/static/assets/{pegDiagram-XKGWAZYB-BQVc9ia_.js → pegDiagram-XKGWAZYB-GjAPNaqn.js} +1 -1
  453. ksadk/server/static/assets/pie-WAS4IAKB-DyfxBU7V.js +1 -0
  454. ksadk/server/static/assets/{pieDiagram-E7YTZNPT-B6UCAvtY.js → pieDiagram-E7YTZNPT-ToIewrqr.js} +1 -1
  455. ksadk/server/static/assets/{quadrantDiagram-AXDQQJYC-mIr2d3eb.js → quadrantDiagram-AXDQQJYC-4d78KiEY.js} +1 -1
  456. ksadk/server/static/assets/radar-RG4KPBEZ-FFontjL2.js +1 -0
  457. ksadk/server/static/assets/railroad-74A4TZTK-D0Uidzen.js +1 -0
  458. ksadk/server/static/assets/railroad-abnf-HS5TGJTU-BOo_9T2h.js +1 -0
  459. ksadk/server/static/assets/railroad-ebnf-LZEXJU2U-D6-BjW7Z.js +1 -0
  460. ksadk/server/static/assets/railroad-peg-WCYAUIDC-CXx__yMm.js +1 -0
  461. ksadk/server/static/assets/{railroadDiagram-O6MQD6OU-Dt3FFDmK.js → railroadDiagram-O6MQD6OU-DKzx4xfv.js} +1 -1
  462. ksadk/server/static/assets/{requirementDiagram-EFPCY7ZU-Cz_vQtgF.js → requirementDiagram-EFPCY7ZU-CJYljxQS.js} +1 -1
  463. ksadk/server/static/assets/{sankeyDiagram-P5KCCOFB-wlO1TsH5.js → sankeyDiagram-P5KCCOFB-DLU2fV1w.js} +1 -1
  464. ksadk/server/static/assets/{sequenceDiagram-WJ2MYXX4-CHRbElYq.js → sequenceDiagram-WJ2MYXX4-CVqysrA9.js} +1 -1
  465. ksadk/server/static/assets/{sizeCapture-X5ZJPWSS-DXX54iyO.js → sizeCapture-X5ZJPWSS-BUxfmTHc.js} +1 -1
  466. ksadk/server/static/assets/{stateDiagram-HBIQ2CUA-Dp_lw9II.js → stateDiagram-HBIQ2CUA-CNFgYI9E.js} +1 -1
  467. ksadk/server/static/assets/stateDiagram-v2-4QOOHH4V-BXAFScz8.js +1 -0
  468. ksadk/server/static/assets/{swimlanes-XN3QIQJK-D8O5UlLG.js → swimlanes-XN3QIQJK-B6qCMe8N.js} +1 -1
  469. ksadk/server/static/assets/swimlanesDiagram-VK2B7HYN-uIQ2lJKH.js +8 -0
  470. ksadk/server/static/assets/{timeline-definition-24CTP7MA-8mfKcxvG.js → timeline-definition-24CTP7MA-CMD3x_U_.js} +1 -1
  471. ksadk/server/static/assets/treeView-Q6P3EWNA-CK5GgucZ.js +1 -0
  472. ksadk/server/static/assets/treemap-WGGIJYW6-Bq1u1SpG.js +1 -0
  473. ksadk/server/static/assets/{vennDiagram-4TSXK5OY-EnNl0DE7.js → vennDiagram-4TSXK5OY-BqtUqvXM.js} +1 -1
  474. ksadk/server/static/assets/wardley-WFR3VGLG-QAt06uEz.js +1 -0
  475. ksadk/server/static/assets/{wardleyDiagram-VM6X3IG4-DBu5fbYr.js → wardleyDiagram-VM6X3IG4-B5KfDjI-.js} +1 -1
  476. ksadk/server/static/assets/{xychartDiagram-S5SC5T6Z-BSVXs4IY.js → xychartDiagram-S5SC5T6Z-BaUlSZrn.js} +1 -1
  477. ksadk/server/static/index.html +2 -2
  478. ksadk/server/terminal_sessions.py +34 -2
  479. ksadk/session_context.py +66 -0
  480. ksadk/sessions/__init__.py +11 -21
  481. ksadk/sessions/_local_service_sync.py +263 -1
  482. ksadk/sessions/base.py +176 -0
  483. ksadk/sessions/errors.py +4 -0
  484. ksadk/sessions/in_memory.py +309 -19
  485. ksadk/sessions/invocation_identity.py +235 -0
  486. ksadk/sessions/local_service.py +83 -1
  487. ksadk/sessions/persistence.py +275 -0
  488. ksadk/sessions/postgres_service.py +358 -0
  489. ksadk/sessions/resilience.py +8 -0
  490. ksadk/sessions/resilient.py +362 -4
  491. ksadk/sessions/topology.py +135 -0
  492. ksadk/skills/__init__.py +26 -0
  493. ksadk/skills/events.py +464 -0
  494. ksadk/skills/manifest_cache.py +263 -0
  495. ksadk/skills/mcp_server/__init__.py +0 -0
  496. ksadk/skills/mcp_server/_registry.py +33 -0
  497. ksadk/skills/mcp_server/_routing.py +26 -0
  498. ksadk/skills/mcp_server/_workspace_files.py +160 -0
  499. ksadk/skills/mcp_server/register.py +415 -0
  500. ksadk/skills/mcp_server/server.py +218 -0
  501. ksadk/skills/models.py +37 -4
  502. ksadk/skills/observability.py +132 -0
  503. ksadk/skills/package_store.py +261 -40
  504. ksadk/skills/runtime/agent.py +67 -9
  505. ksadk/skills/runtime/artifact_delivery.py +139 -0
  506. ksadk/skills/runtime/artifacts.py +87 -0
  507. ksadk/skills/runtime/backends/e2b.py +460 -27
  508. ksadk/skills/runtime/backends/local.py +629 -62
  509. ksadk/skills/runtime/base.py +81 -7
  510. ksadk/skills/runtime/executor.py +268 -1
  511. ksadk/skills/runtime/loader.py +118 -5
  512. ksadk/skills/runtime/pinned.py +114 -0
  513. ksadk/skills/runtime/request.py +49 -0
  514. ksadk/skills/service_client.py +167 -28
  515. ksadk/skills/tool_defs.py +108 -3
  516. ksadk/studio/api.py +810 -93
  517. ksadk/studio/api_catalog_routes.py +18 -0
  518. ksadk/studio/api_contracts.py +8 -2
  519. ksadk/studio/api_plugin_routes.py +562 -104
  520. ksadk/studio/api_resource_connections.py +221 -0
  521. ksadk/studio/authoring.py +12 -6
  522. ksadk/studio/authoring_coordinator.py +23 -16
  523. ksadk/studio/builder.py +88 -0
  524. ksadk/studio/capabilities.py +23 -6
  525. ksadk/studio/channel_connections.py +333 -0
  526. ksadk/studio/cloud.py +370 -112
  527. ksadk/studio/cloud_shared_web.py +638 -0
  528. ksadk/studio/codex_agent_service.py +130 -28
  529. ksadk/studio/codex_builder.py +242 -3
  530. ksadk/studio/codex_credentials.py +90 -0
  531. ksadk/studio/codex_manifest.py +31 -4
  532. ksadk/studio/codex_plugin_store.py +746 -0
  533. ksadk/studio/codex_provider_build.py +231 -0
  534. ksadk/studio/codex_run.py +190 -26
  535. ksadk/studio/compatibility_report.py +12 -1
  536. ksadk/studio/compiler.py +88 -14
  537. ksadk/studio/configuration.py +182 -0
  538. ksadk/studio/contracts.py +165 -11
  539. ksadk/studio/dsh_application.py +247 -0
  540. ksadk/studio/dsh_capability_service.py +1374 -0
  541. ksadk/studio/dsh_lifecycle.py +58 -0
  542. ksadk/studio/dsh_models.py +59 -0
  543. ksadk/studio/dsh_provider_registration.py +367 -21
  544. ksadk/studio/entry.py +53 -0
  545. ksadk/studio/event_store.py +36 -5
  546. ksadk/studio/execution_host.py +525 -0
  547. ksadk/studio/framework_run.py +32 -10
  548. ksadk/studio/hosted_kernel.py +89 -14
  549. ksadk/studio/kernel_registry.py +418 -0
  550. ksadk/studio/kernel_sqlite_migration.py +181 -0
  551. ksadk/studio/mcp_runtime.py +11 -3
  552. ksadk/studio/model_client.py +1180 -66
  553. ksadk/studio/model_profile_service.py +26 -11
  554. ksadk/studio/native_documents.py +172 -0
  555. ksadk/studio/plugin_composition.py +202 -24
  556. ksadk/studio/plugin_kernel_adapter.py +21 -106
  557. ksadk/studio/plugin_lifecycle.py +80 -0
  558. ksadk/studio/plugin_runtime.py +448 -56
  559. ksadk/studio/provider_recovery.py +59 -0
  560. ksadk/studio/recovery_page.py +70 -0
  561. ksadk/studio/resource_authority.py +664 -0
  562. ksadk/studio/resource_binding_validation.py +77 -0
  563. ksadk/studio/resource_build_admission.py +196 -0
  564. ksadk/studio/resource_build_materializer.py +149 -0
  565. ksadk/studio/resource_catalog.py +149 -2
  566. ksadk/studio/resource_connections.py +220 -0
  567. ksadk/studio/run_activity.py +895 -0
  568. ksadk/studio/run_documents.py +127 -0
  569. ksadk/studio/run_service.py +789 -83
  570. ksadk/studio/runtime_catalog.py +53 -10
  571. ksadk/studio/runtime_source.py +16 -8
  572. ksadk/studio/scheduler_assistant.py +317 -0
  573. ksadk/studio/scheduler_runtime.py +32 -280
  574. ksadk/studio/scheduler_service.py +3 -0
  575. ksadk/studio/service.py +861 -120
  576. ksadk/studio/shared_web.py +579 -82
  577. ksadk/studio/static/assets/ChannelsPage-D_PGmKVq.js +8 -0
  578. ksadk/studio/static/assets/CodeBlock-DMIf4h33-UIqo-BPW.js +44 -0
  579. ksadk/studio/static/assets/ExecutionTree-v3HexvPo-Bk8wzGSy.js +1 -0
  580. ksadk/studio/static/assets/KaTeX_AMS-Regular-BQhdFMY1.woff2 +0 -0
  581. ksadk/studio/static/assets/KaTeX_AMS-Regular-DMm9YOAa.woff +0 -0
  582. ksadk/studio/static/assets/KaTeX_AMS-Regular-DRggAlZN.ttf +0 -0
  583. ksadk/studio/static/assets/KaTeX_Caligraphic-Bold-ATXxdsX0.ttf +0 -0
  584. ksadk/studio/static/assets/KaTeX_Caligraphic-Bold-BEiXGLvX.woff +0 -0
  585. ksadk/studio/static/assets/KaTeX_Caligraphic-Bold-Dq_IR9rO.woff2 +0 -0
  586. ksadk/studio/static/assets/KaTeX_Caligraphic-Regular-CTRA-rTL.woff +0 -0
  587. ksadk/studio/static/assets/KaTeX_Caligraphic-Regular-Di6jR-x-.woff2 +0 -0
  588. ksadk/studio/static/assets/KaTeX_Caligraphic-Regular-wX97UBjC.ttf +0 -0
  589. ksadk/studio/static/assets/KaTeX_Fraktur-Bold-BdnERNNW.ttf +0 -0
  590. ksadk/studio/static/assets/KaTeX_Fraktur-Bold-BsDP51OF.woff +0 -0
  591. ksadk/studio/static/assets/KaTeX_Fraktur-Bold-CL6g_b3V.woff2 +0 -0
  592. ksadk/studio/static/assets/KaTeX_Fraktur-Regular-CB_wures.ttf +0 -0
  593. ksadk/studio/static/assets/KaTeX_Fraktur-Regular-CTYiF6lA.woff2 +0 -0
  594. ksadk/studio/static/assets/KaTeX_Fraktur-Regular-Dxdc4cR9.woff +0 -0
  595. ksadk/studio/static/assets/KaTeX_Main-Bold-Cx986IdX.woff2 +0 -0
  596. ksadk/studio/static/assets/KaTeX_Main-Bold-Jm3AIy58.woff +0 -0
  597. ksadk/studio/static/assets/KaTeX_Main-Bold-waoOVXN0.ttf +0 -0
  598. ksadk/studio/static/assets/KaTeX_Main-BoldItalic-DxDJ3AOS.woff2 +0 -0
  599. ksadk/studio/static/assets/KaTeX_Main-BoldItalic-DzxPMmG6.ttf +0 -0
  600. ksadk/studio/static/assets/KaTeX_Main-BoldItalic-SpSLRI95.woff +0 -0
  601. ksadk/studio/static/assets/KaTeX_Main-Italic-3WenGoN9.ttf +0 -0
  602. ksadk/studio/static/assets/KaTeX_Main-Italic-BMLOBm91.woff +0 -0
  603. ksadk/studio/static/assets/KaTeX_Main-Italic-NWA7e6Wa.woff2 +0 -0
  604. ksadk/studio/static/assets/KaTeX_Main-Regular-B22Nviop.woff2 +0 -0
  605. ksadk/studio/static/assets/KaTeX_Main-Regular-Dr94JaBh.woff +0 -0
  606. ksadk/studio/static/assets/KaTeX_Main-Regular-ypZvNtVU.ttf +0 -0
  607. ksadk/studio/static/assets/KaTeX_Math-BoldItalic-B3XSjfu4.ttf +0 -0
  608. ksadk/studio/static/assets/KaTeX_Math-BoldItalic-CZnvNsCZ.woff2 +0 -0
  609. ksadk/studio/static/assets/KaTeX_Math-BoldItalic-iY-2wyZ7.woff +0 -0
  610. ksadk/studio/static/assets/KaTeX_Math-Italic-DA0__PXp.woff +0 -0
  611. ksadk/studio/static/assets/KaTeX_Math-Italic-flOr_0UB.ttf +0 -0
  612. ksadk/studio/static/assets/KaTeX_Math-Italic-t53AETM-.woff2 +0 -0
  613. ksadk/studio/static/assets/KaTeX_SansSerif-Bold-CFMepnvq.ttf +0 -0
  614. ksadk/studio/static/assets/KaTeX_SansSerif-Bold-D1sUS0GD.woff2 +0 -0
  615. ksadk/studio/static/assets/KaTeX_SansSerif-Bold-DbIhKOiC.woff +0 -0
  616. ksadk/studio/static/assets/KaTeX_SansSerif-Italic-C3H0VqGB.woff2 +0 -0
  617. ksadk/studio/static/assets/KaTeX_SansSerif-Italic-DN2j7dab.woff +0 -0
  618. ksadk/studio/static/assets/KaTeX_SansSerif-Italic-YYjJ1zSn.ttf +0 -0
  619. ksadk/studio/static/assets/KaTeX_SansSerif-Regular-BNo7hRIc.ttf +0 -0
  620. ksadk/studio/static/assets/KaTeX_SansSerif-Regular-CS6fqUqJ.woff +0 -0
  621. ksadk/studio/static/assets/KaTeX_SansSerif-Regular-DDBCnlJ7.woff2 +0 -0
  622. ksadk/studio/static/assets/KaTeX_Script-Regular-C5JkGWo-.ttf +0 -0
  623. ksadk/studio/static/assets/KaTeX_Script-Regular-D3wIWfF6.woff2 +0 -0
  624. ksadk/studio/static/assets/KaTeX_Script-Regular-D5yQViql.woff +0 -0
  625. ksadk/studio/static/assets/KaTeX_Size1-Regular-C195tn64.woff +0 -0
  626. ksadk/studio/static/assets/KaTeX_Size1-Regular-Dbsnue_I.ttf +0 -0
  627. ksadk/studio/static/assets/KaTeX_Size1-Regular-mCD8mA8B.woff2 +0 -0
  628. ksadk/studio/static/assets/KaTeX_Size2-Regular-B7gKUWhC.ttf +0 -0
  629. ksadk/studio/static/assets/KaTeX_Size2-Regular-Dy4dx90m.woff2 +0 -0
  630. ksadk/studio/static/assets/KaTeX_Size2-Regular-oD1tc_U0.woff +0 -0
  631. ksadk/studio/static/assets/KaTeX_Size3-Regular-CTq5MqoE.woff +0 -0
  632. ksadk/studio/static/assets/KaTeX_Size3-Regular-DgpXs0kz.ttf +0 -0
  633. ksadk/studio/static/assets/KaTeX_Size4-Regular-BF-4gkZK.woff +0 -0
  634. ksadk/studio/static/assets/KaTeX_Size4-Regular-DWFBv043.ttf +0 -0
  635. ksadk/studio/static/assets/KaTeX_Size4-Regular-Dl5lxZxV.woff2 +0 -0
  636. ksadk/studio/static/assets/KaTeX_Typewriter-Regular-C0xS9mPB.woff +0 -0
  637. ksadk/studio/static/assets/KaTeX_Typewriter-Regular-CO6r4hn1.woff2 +0 -0
  638. ksadk/studio/static/assets/KaTeX_Typewriter-Regular-D3Ib7_Hf.ttf +0 -0
  639. ksadk/studio/static/assets/MathMessageMarkdown-BesSeCYl-BEOyPC3w.css +1 -0
  640. ksadk/studio/static/assets/MathMessageMarkdown-BesSeCYl-OhNwH4K9.js +8 -0
  641. ksadk/studio/static/assets/MermaidBlock-H_0qzQDf-BdXtxug_.js +11 -0
  642. ksadk/studio/static/assets/MessageMarkdown-CwMTvgFj-g0I-I4dD.js +59 -0
  643. ksadk/studio/static/assets/PrismRenderer-5pK6tUdb.js +3 -0
  644. ksadk/studio/static/assets/TeamsPage-DqX4HWKQ.js +3 -0
  645. ksadk/studio/static/assets/abnfDiagram-VCTEODGH-Bnb1O3tA.js +1 -0
  646. ksadk/studio/static/assets/arc-Pry-7G1_.js +1 -0
  647. ksadk/studio/static/assets/architecture-7GRP2DOG-BMOPAkUC.js +1 -0
  648. ksadk/studio/static/assets/architectureDiagram-5GKGNRK7-5Zn1gqJv.js +36 -0
  649. ksadk/studio/static/assets/array-BifhSqXX.js +1 -0
  650. ksadk/studio/static/assets/blockDiagram-I7D4REHJ-CLB4L11u.js +129 -0
  651. ksadk/studio/static/assets/c4Diagram-7LVT6UL2-BOma_Z_F.js +38 -0
  652. ksadk/studio/static/assets/channel-r8itPEik.js +1 -0
  653. ksadk/studio/static/assets/chunk-2E4U76K2-BFf_huql.js +2 -0
  654. ksadk/studio/static/assets/chunk-2Q5K7J3B-C1jixKkw.js +1 -0
  655. ksadk/studio/static/assets/chunk-2ZTRR5NV-C2qZJila.js +2 -0
  656. ksadk/studio/static/assets/chunk-3Z5EZCMW-DMniOlPd.js +1 -0
  657. ksadk/studio/static/assets/chunk-4HAMMTFA-DVtDP4rm.js +62 -0
  658. ksadk/studio/static/assets/chunk-5V3GS4D5-i-ZDOEnP.js +1 -0
  659. ksadk/studio/static/assets/chunk-5VM5RSS4-ZNzvKenW.js +15 -0
  660. ksadk/studio/static/assets/chunk-6AZGARVD-BB6FqMl-.js +1 -0
  661. ksadk/studio/static/assets/chunk-6EIED4P4-DdUJkP0f.js +1 -0
  662. ksadk/studio/static/assets/chunk-6K3QC6MW-CqVsVn-y.js +1 -0
  663. ksadk/studio/static/assets/chunk-6TQVIW2G-DKlLbNIP.js +1 -0
  664. ksadk/studio/static/assets/chunk-747NJXEK-BFkZPlab.js +2 -0
  665. ksadk/studio/static/assets/chunk-75Z2AOVW-BZNhM4vB.js +2 -0
  666. ksadk/studio/static/assets/chunk-CLGD4ZFX-D-GTtyKs.js +1 -0
  667. ksadk/studio/static/assets/chunk-DU6HZSFF-CpEZCUgg.js +128 -0
  668. ksadk/studio/static/assets/chunk-F27PBJKO-D7pvKf0C.js +1 -0
  669. ksadk/studio/static/assets/chunk-FOHPRMQF-DHwB1DNv.js +161 -0
  670. ksadk/studio/static/assets/chunk-GMAD6QVW-DE_8H717.js +72 -0
  671. ksadk/studio/static/assets/chunk-GVQU2GXP-BfEB0lNv.js +1 -0
  672. ksadk/studio/static/assets/chunk-I5DQTOEV-Hm2LfiYI.js +1 -0
  673. ksadk/studio/static/assets/chunk-ICYGCRZG-749o-pGJ.js +1 -0
  674. ksadk/studio/static/assets/chunk-IH6LHLGP-CC6I9F3i.js +1 -0
  675. ksadk/studio/static/assets/chunk-IMKFNOWR-D38axYOR.js +231 -0
  676. ksadk/studio/static/assets/chunk-JWPE2WC7-DVXcaiue.js +1 -0
  677. ksadk/studio/static/assets/chunk-KI3K4JFJ-Rma-0k_M.js +1 -0
  678. ksadk/studio/static/assets/chunk-L3NEJ4N5-Dq5xn7aL.js +1 -0
  679. ksadk/studio/static/assets/chunk-LNGE3PJU-DWpGwHrW.js +34 -0
  680. ksadk/studio/static/assets/chunk-OSK3NFVY-DiCQjx9b.js +10 -0
  681. ksadk/studio/static/assets/chunk-OUJLGHUK-D0j2JRSg.js +2 -0
  682. ksadk/studio/static/assets/chunk-P2QGCYS3-VdhKmfYq.js +1 -0
  683. ksadk/studio/static/assets/chunk-POPQ4Y6H-C1_rzO5M.js +1 -0
  684. ksadk/studio/static/assets/chunk-PWAF6VOD-B45HvflI.js +1 -0
  685. ksadk/studio/static/assets/chunk-SHT3W25Y-DsCFnRVE.js +168 -0
  686. ksadk/studio/static/assets/chunk-SVP7TREG-DljApgRX.js +88 -0
  687. ksadk/studio/static/assets/chunk-TICWLB2K-DWqRtyqa.js +206 -0
  688. ksadk/studio/static/assets/chunk-TLUHSLCS-DUeGgnD5.js +2 -0
  689. ksadk/studio/static/assets/chunk-UY3FDG6J-CnmaAkG5.js +1 -0
  690. ksadk/studio/static/assets/chunk-XHIXRSVI-BFQ6B8BE.js +1 -0
  691. ksadk/studio/static/assets/chunk-XXDRQBXY-DqAYeljN.js +1 -0
  692. ksadk/studio/static/assets/chunk-Y2CYZVJY-DsF7k-Jl.js +1 -0
  693. ksadk/studio/static/assets/classDiagram-ZZMXUADV-DjeMNJmu.js +1 -0
  694. ksadk/studio/static/assets/classDiagram-v2-VYDZK3BY-DjeMNJmu.js +1 -0
  695. ksadk/studio/static/assets/clsx-DB0hHKMi.js +1 -0
  696. ksadk/studio/static/assets/cose-bilkent-JH36ORCC-om8AY0Mc.js +1 -0
  697. ksadk/studio/static/assets/createLucideIcon-DR0LGTP5.js +1 -0
  698. ksadk/studio/static/assets/cynefin-OW5HDTMX-7tP7QfM3.js +1 -0
  699. ksadk/studio/static/assets/cynefinDiagram-5FMLGOSQ-6BrmK52S.js +62 -0
  700. ksadk/studio/static/assets/cytoscape.esm-CGd-uY3x.js +321 -0
  701. ksadk/studio/static/assets/dagre-GXQ25YYZ-buZBRlwz.js +4 -0
  702. ksadk/studio/static/assets/dagre-PrKaheQc.js +1 -0
  703. ksadk/studio/static/assets/defaultLocale-BFoDCU3G.js +1 -0
  704. ksadk/studio/static/assets/diagram-S7CK7UJ4-C6aH78c4.js +30 -0
  705. ksadk/studio/static/assets/diagram-UQ7AKVKN-DY_tQ6C_.js +41 -0
  706. ksadk/studio/static/assets/diagram-VSXAHHWV-DX9p5cQT.js +3 -0
  707. ksadk/studio/static/assets/diagram-VX7I27RA-DB2WSH8X.js +24 -0
  708. ksadk/studio/static/assets/diagram-Z3DM3KII-Ce1BJwHE.js +24 -0
  709. ksadk/studio/static/assets/dist-v5Q1xZ2K.js +1 -0
  710. ksadk/studio/static/assets/ebnfDiagram-PWID7BFC-Daukxwqf.js +1 -0
  711. ksadk/studio/static/assets/erDiagram-RLTQ6QDP-CGthTMmJ.js +99 -0
  712. ksadk/studio/static/assets/eventmodeling-NTZA5JFV-BR2FzK4R.js +1 -0
  713. ksadk/studio/static/assets/flowDiagram-HODETNUW-CZ1tEenp.js +1 -0
  714. ksadk/studio/static/assets/ganttDiagram-EL5Y4UJY-BfoAZW9X.js +292 -0
  715. ksadk/studio/static/assets/gitGraph-4MIJSDKK-DYlXv_yJ.js +1 -0
  716. ksadk/studio/static/assets/gitGraphDiagram-WWUBYQGX-S985OIJF.js +106 -0
  717. ksadk/studio/static/assets/graphlib-DS17s2tU.js +1 -0
  718. ksadk/studio/static/assets/iconfont-4HN3C9Pg.woff2 +0 -0
  719. ksadk/studio/static/assets/index-CfEnms6Y.css +2 -0
  720. ksadk/studio/static/assets/index-Dp61rOWZ.js +0 -0
  721. ksadk/studio/static/assets/index.dom-BQenBtFm.js +1 -0
  722. ksadk/studio/static/assets/info-A6RAGUB7-BlU-8_xu.js +1 -0
  723. ksadk/studio/static/assets/infoDiagram-27XIBGKW-CO3W8tFn.js +2 -0
  724. ksadk/studio/static/assets/init-C-OQMol4.js +1 -0
  725. ksadk/studio/static/assets/ishikawaDiagram-5VMMS53U-BUGEl8cO.js +70 -0
  726. ksadk/studio/static/assets/journeyDiagram-3NMN7TZE-Ch2ZYxvr.js +139 -0
  727. ksadk/studio/static/assets/kanban-definition-UXKFOSKX-Da-Fp4vC.js +89 -0
  728. ksadk/studio/static/assets/katex-DhON-x74.js +257 -0
  729. ksadk/studio/static/assets/kingsoft-cloud-BOcLiQ3e.ico +0 -0
  730. ksadk/studio/static/assets/line-BDaeq300.js +1 -0
  731. ksadk/studio/static/assets/linear-DmucvK78.js +1 -0
  732. ksadk/studio/static/assets/mermaid-parser.core-Cj5mYdBi.js +4 -0
  733. ksadk/studio/static/assets/mindmap-definition-YA3MSWOX-CvlsVQ38.js +96 -0
  734. ksadk/studio/static/assets/ordinal-BDEzSJ7C.js +1 -0
  735. ksadk/studio/static/assets/packet-AYTQ26CC-BSJEH9Lb.js +1 -0
  736. ksadk/studio/static/assets/path-fybaL0A-.js +1 -0
  737. ksadk/studio/static/assets/pegDiagram-XKGWAZYB-BuHuNgT5.js +1 -0
  738. ksadk/studio/static/assets/pie-WAS4IAKB-qxv01Y8W.js +1 -0
  739. ksadk/studio/static/assets/pieDiagram-E7YTZNPT-DlrWiSOv.js +39 -0
  740. ksadk/studio/static/assets/preload-helper-CO68xz6u.js +1 -0
  741. ksadk/studio/static/assets/presentation-yYw7xK60-BmcZriri.js +1 -0
  742. ksadk/studio/static/assets/quadrantDiagram-AXDQQJYC-BA3hpUZM.js +7 -0
  743. ksadk/studio/static/assets/radar-RG4KPBEZ-B6h6pWOs.js +1 -0
  744. ksadk/studio/static/assets/railroad-74A4TZTK-CGtTWdGc.js +1 -0
  745. ksadk/studio/static/assets/railroad-abnf-HS5TGJTU-Cq7y22IA.js +1 -0
  746. ksadk/studio/static/assets/railroad-ebnf-LZEXJU2U-V0aQVv9m.js +1 -0
  747. ksadk/studio/static/assets/railroad-peg-WCYAUIDC-BQiIsX_p.js +1 -0
  748. ksadk/studio/static/assets/railroadDiagram-O6MQD6OU-BxpAazym.js +1 -0
  749. ksadk/studio/static/assets/requirementDiagram-BXWQKSXE-E-Ge0FcV.js +84 -0
  750. ksadk/studio/static/assets/rolldown-runtime-Dy4uBu1J-DK3Fl9T5.js +1 -0
  751. ksadk/studio/static/assets/rough.esm-Dy-Kn_BL.js +1 -0
  752. ksadk/studio/static/assets/sankeyDiagram-P5KCCOFB-CA6YKhQ3.js +40 -0
  753. ksadk/studio/static/assets/sequenceDiagram-WJ2MYXX4-CcElXGg4.js +162 -0
  754. ksadk/studio/static/assets/sizeCapture-INFHLROL-B0uUizjq.js +1 -0
  755. ksadk/studio/static/assets/src-B6xuSHsQ.js +1 -0
  756. ksadk/studio/static/assets/stateDiagram-D77RDMKH-DdXZOFqY.js +1 -0
  757. ksadk/studio/static/assets/stateDiagram-v2-MP3YSRHH-CJbOM-QK.js +1 -0
  758. ksadk/studio/static/assets/swimlanes-42K2YHIH-NtgEEHLY.js +1 -0
  759. ksadk/studio/static/assets/swimlanesDiagram-VR7AAH4N-D-AVlW8B.js +8 -0
  760. ksadk/studio/static/assets/timeline-definition-24CTP7MA-CIuYhNy3.js +120 -0
  761. ksadk/studio/static/assets/treeView-Q6P3EWNA-BTTYcvrF.js +1 -0
  762. ksadk/studio/static/assets/treemap-WGGIJYW6-Cg7tyfH8.js +1 -0
  763. ksadk/studio/static/assets/vennDiagram-4TSXK5OY-7HbApbrv.js +34 -0
  764. ksadk/studio/static/assets/wardley-WFR3VGLG-C6N1rULY.js +1 -0
  765. ksadk/studio/static/assets/wardleyDiagram-VM6X3IG4-CMJiaedy.js +78 -0
  766. ksadk/studio/static/assets/xychartDiagram-S5SC5T6Z-BdgtMvW2.js +7 -0
  767. ksadk/studio/static/index.html +8 -2
  768. ksadk/studio/teams_catalog.py +133 -0
  769. ksadk/studio/teams_installation.py +214 -0
  770. ksadk/studio/teams_node.py +545 -0
  771. ksadk/studio/teams_node_runner.py +69 -0
  772. ksadk/studio/teams_remote.py +274 -0
  773. ksadk/studio/templates.py +40 -19
  774. ksadk/studio/validator.py +13 -0
  775. ksadk/studio/workspace.py +19 -4
  776. ksadk/studio/workspace_plugins.py +136 -0
  777. ksadk/studio/workspace_registry.py +286 -0
  778. ksadk/toolsets/__init__.py +11 -0
  779. ksadk/toolsets/skills.py +446 -378
  780. ksadk/toolsets/workspace.py +3 -3
  781. ksadk/toolsets/workspace_identity.py +15 -0
  782. ksadk/version.py +1 -1
  783. ksadk_runtime_common/memory_backend/providers/lancedb.py +56 -2
  784. ksadk_runtime_common/schemas/memory_backend_manifest.schema.json +148 -148
  785. ksadk_runtime_common/workspace_files/router.py +26 -13
  786. agentengine_sdk_python-0.8.3.dist-info/RECORD +0 -833
  787. ksadk/server/static/assets/MathMessageMarkdown-D9uB55Oh.js +0 -8
  788. ksadk/server/static/assets/architecture-7GRP2DOG-Dk9nRQ6-.js +0 -1
  789. ksadk/server/static/assets/channel-s354Yo6o.js +0 -1
  790. ksadk/server/static/assets/chunk-2Q5K7J3B-CDpPpKR5.js +0 -1
  791. ksadk/server/static/assets/classDiagram-DTDB5LWJ-Dd0nucl9.js +0 -1
  792. ksadk/server/static/assets/classDiagram-v2-JRS7N3AN-Dd0nucl9.js +0 -1
  793. ksadk/server/static/assets/cynefin-OW5HDTMX-BBlT4uMf.js +0 -1
  794. ksadk/server/static/assets/dist-DdRBIceA.js +0 -1
  795. ksadk/server/static/assets/eventmodeling-NTZA5JFV-Dr5okd8V.js +0 -1
  796. ksadk/server/static/assets/flowDiagram-A5DVABFB-VEO-cVcO.js +0 -1
  797. ksadk/server/static/assets/gitGraph-4MIJSDKK-CKiKY9Cf.js +0 -1
  798. ksadk/server/static/assets/index-B2k_urY8.js +0 -241
  799. ksadk/server/static/assets/index-ILPt6IWF.css +0 -2
  800. ksadk/server/static/assets/info-A6RAGUB7-ubA4Nm_p.js +0 -1
  801. ksadk/server/static/assets/packet-AYTQ26CC-C7R3NUlK.js +0 -1
  802. ksadk/server/static/assets/pie-WAS4IAKB-BIT6qjr3.js +0 -1
  803. ksadk/server/static/assets/radar-RG4KPBEZ-l5noef9X.js +0 -1
  804. ksadk/server/static/assets/railroad-74A4TZTK-Baea6ZvM.js +0 -1
  805. ksadk/server/static/assets/railroad-abnf-HS5TGJTU-OKn8zZnU.js +0 -1
  806. ksadk/server/static/assets/railroad-ebnf-LZEXJU2U-DdKAKC4l.js +0 -1
  807. ksadk/server/static/assets/railroad-peg-WCYAUIDC-Bds8udlG.js +0 -1
  808. ksadk/server/static/assets/stateDiagram-v2-4QOOHH4V-5b-8o2iS.js +0 -1
  809. ksadk/server/static/assets/swimlanesDiagram-VK2B7HYN-uf6WPRA4.js +0 -8
  810. ksadk/server/static/assets/treeView-Q6P3EWNA-CK5CSrSO.js +0 -1
  811. ksadk/server/static/assets/treemap-WGGIJYW6-Ch2BKgAM.js +0 -1
  812. ksadk/server/static/assets/wardley-WFR3VGLG-YW3Q0ml_.js +0 -1
  813. ksadk/studio/static/assets/PrismRenderer-IYN-ffww.js +0 -3
  814. ksadk/studio/static/assets/index-DXs1Eq4M.css +0 -1
  815. ksadk/studio/static/assets/index-DeDqwTsD.js +0 -283
  816. {agentengine_sdk_python-0.8.3.dist-info → agentengine_sdk_python-0.8.5.dist-info}/WHEEL +0 -0
  817. {agentengine_sdk_python-0.8.3.dist-info → agentengine_sdk_python-0.8.5.dist-info}/entry_points.txt +0 -0
  818. {agentengine_sdk_python-0.8.3.dist-info → agentengine_sdk_python-0.8.5.dist-info}/licenses/LICENSE +0 -0
  819. {agentengine_sdk_python-0.8.3.dist-info → agentengine_sdk_python-0.8.5.dist-info}/top_level.txt +0 -0
@@ -1 +1 @@
1
- {"schemaVersion":1,"sourceCommit":"320b7f324966bd3aa8557a65cf592716699edb8c","sourceTree":"clean","version":"0.8.3"}
1
+ {"schemaVersion":1,"sourceCommit":"5128ff1e57d1c37bc16f780028698da433c12a7e","sourceTree":"clean","version":"0.8.5"}
ksadk/_process.py ADDED
@@ -0,0 +1,83 @@
1
+ """Small process-group lifecycle helpers shared by local runtime backends."""
2
+
3
+ from __future__ import annotations
4
+
5
+ import os
6
+ import signal
7
+ import subprocess
8
+ import time
9
+
10
+
11
+ def starts_new_process_group() -> bool:
12
+ return os.name == "posix"
13
+
14
+
15
+ def terminate_process_group(
16
+ process: subprocess.Popen[object],
17
+ *,
18
+ grace_seconds: float = 0.2,
19
+ reap_seconds: float = 1.0,
20
+ ) -> str | None:
21
+ """Stop a process and its descendants, then reap the direct child.
22
+
23
+ The caller must have created the process with ``start_new_session=True`` on
24
+ POSIX. The bounded waits intentionally avoid ``communicate()`` because a
25
+ surviving descendant may keep inherited output descriptors open.
26
+ """
27
+
28
+ errors: list[str] = []
29
+ if os.name == "posix":
30
+ _signal_group(process.pid, signal.SIGTERM, errors)
31
+ deadline = time.monotonic() + max(grace_seconds, 0)
32
+ while time.monotonic() < deadline and _group_exists(process.pid):
33
+ # Reap an exited group leader before probing again. On Darwin an
34
+ # unreaped leader can make a now-empty group appear present and a
35
+ # subsequent killpg report EPERM.
36
+ process.poll()
37
+ time.sleep(0.01)
38
+ process.poll()
39
+ if _group_exists(process.pid):
40
+ _signal_group(process.pid, signal.SIGKILL, errors)
41
+ elif process.poll() is None:
42
+ try:
43
+ process.terminate()
44
+ except ProcessLookupError:
45
+ pass
46
+ except Exception as exc: # pragma: no cover - platform/runtime specific
47
+ errors.append(type(exc).__name__)
48
+
49
+ try:
50
+ process.wait(timeout=max(reap_seconds, 0.01))
51
+ except subprocess.TimeoutExpired:
52
+ try:
53
+ process.kill()
54
+ except ProcessLookupError:
55
+ pass
56
+ except Exception as exc: # pragma: no cover - platform/runtime specific
57
+ errors.append(type(exc).__name__)
58
+ try:
59
+ process.wait(timeout=max(reap_seconds, 0.01))
60
+ except subprocess.TimeoutExpired:
61
+ errors.append("process_reap_timeout")
62
+ except Exception as exc: # pragma: no cover - platform/runtime specific
63
+ errors.append(type(exc).__name__)
64
+ return ",".join(dict.fromkeys(errors)) or None
65
+
66
+
67
+ def _signal_group(pid: int, sig: signal.Signals, errors: list[str]) -> None:
68
+ try:
69
+ os.killpg(pid, sig)
70
+ except ProcessLookupError:
71
+ pass
72
+ except Exception as exc: # pragma: no cover - platform/runtime specific
73
+ errors.append(type(exc).__name__)
74
+
75
+
76
+ def _group_exists(pid: int) -> bool:
77
+ try:
78
+ os.killpg(pid, 0)
79
+ return True
80
+ except ProcessLookupError:
81
+ return False
82
+ except PermissionError: # pragma: no cover - cannot inspect another owner
83
+ return True
ksadk/_str_enum.py ADDED
@@ -0,0 +1,17 @@
1
+ """String-valued enums on all supported Python versions (including 3.10)."""
2
+
3
+ try:
4
+ from enum import StrEnum
5
+ except ImportError: # Python 3.10
6
+ from enum import Enum
7
+
8
+ class StrEnum(str, Enum):
9
+ __str__ = str.__str__
10
+ __format__ = str.__format__
11
+
12
+ @staticmethod
13
+ def _generate_next_value_(name, start, count, last_values):
14
+ return name.lower()
15
+
16
+
17
+ __all__ = ["StrEnum"]
ksadk/a2ui/core.py CHANGED
@@ -73,7 +73,7 @@ class A2UICore:
73
73
  self._seq = 0
74
74
  self._seen_surfaces: set[str] = set()
75
75
  # InteractionLedger 存在时它是 pending interaction 的唯一权威
76
- # (Phase 1 Task 5 Step 6);本地 dict 只作无 ledger 的降级路径。
76
+ # (Kernel Task 5 Step 6);本地 dict 只作无 ledger 的降级路径。
77
77
  self._ledger = interaction_ledger
78
78
  self._guard = interaction_guard
79
79
  self._tenant_id = tenant_id
@@ -181,7 +181,7 @@ class A2UICore:
181
181
  await self.display_ui(surface, invocation_id=invocation_id, origin=origin)
182
182
  interaction_id = f"int_{uuid.uuid4().hex[:12]}"
183
183
  if self._ledger is not None and self._guard is not None:
184
- # Phase 1 Task 5 Step 6:durable ledger 是 pending interaction 的
184
+ # Kernel Task 5 Step 6:durable ledger 是 pending interaction 的
185
185
  # 唯一权威;持久化身份与 interaction.requested 事实由 ledger 落盘。
186
186
  from datetime import datetime, timezone
187
187
 
@@ -264,7 +264,7 @@ class A2UICore:
264
264
  ``action``: ``{"action_id","surface_id","name","actor"?,"component_id"?}``;
265
265
  携带 ``interaction_id`` 且配置了 InteractionLedger 时,对原 ID 建
266
266
  InteractionSubmission 走 durable resolve,不再发第二个
267
- InteractionRequested(Phase 1 Task 5 Step 6)。
267
+ InteractionRequested(Kernel Task 5 Step 6)。
268
268
  """
269
269
  receipt = ActionReceipt(
270
270
  action_id=str(action.get("action_id") or f"act_{uuid.uuid4().hex[:12]}"),
ksadk/api/client.py CHANGED
@@ -162,8 +162,30 @@ class AgentEngineClient:
162
162
  timeout: float = 60.0,
163
163
  dry_run: bool = False,
164
164
  extra_headers: Optional[Dict[str, str]] = None,
165
+ allow_env_fallback: bool = True,
166
+ api_version: Optional[str] = None,
165
167
  ):
166
- resolved_base_url = base_url or os.getenv("AGENTENGINE_SERVER_URL")
168
+ if type(allow_env_fallback) is not bool:
169
+ raise ValueError("allow_env_fallback must be a boolean")
170
+ self._allow_env_fallback = allow_env_fallback
171
+ self._explicit_api_version = api_version
172
+ if not allow_env_fallback:
173
+ parsed = urlsplit(base_url or "")
174
+ parsed.port # validate malformed or out-of-range ports before any transport
175
+ if (
176
+ parsed.scheme not in {"http", "https"} or not parsed.hostname
177
+ or parsed.username is not None or parsed.password is not None
178
+ or parsed.query or parsed.fragment or "\\" in (base_url or "")
179
+ or any(char.isspace() for char in (base_url or ""))
180
+ or not access_key or not secret_key or not region
181
+ or region.strip().lower() == "pre-online"
182
+ ):
183
+ raise ValueError(
184
+ "Explicit control clients require endpoint, credentials and region"
185
+ )
186
+ resolved_base_url = base_url or (
187
+ os.getenv("AGENTENGINE_SERVER_URL") if allow_env_fallback else None
188
+ )
167
189
  self.base_url: str = resolved_base_url or self._detect_default_base_url()
168
190
 
169
191
  # 本地调试覆盖 (如果需要)
@@ -172,10 +194,12 @@ class AgentEngineClient:
172
194
  self.logical_region = region
173
195
  self.region = self._normalize_control_region(region)
174
196
  self.custom_source = self._resolve_custom_source(region)
175
- self.dry_run = bool(dry_run or self._is_global_dry_run_enabled())
197
+ self.dry_run = bool(dry_run or (allow_env_fallback and self._is_global_dry_run_enabled()))
176
198
  self.extra_headers = extra_headers or {}
177
199
  # 签名 service 可通过环境变量覆盖(例如 aicp)
178
- self.service: str = service or os.getenv("AGENTENGINE_SIGN_SERVICE") or "aicp"
200
+ self.service: str = service or (
201
+ os.getenv("AGENTENGINE_SIGN_SERVICE") if allow_env_fallback else None
202
+ ) or "aicp"
179
203
 
180
204
  # AWS V4 签名
181
205
  self._auth = AWSV4Auth(
@@ -183,6 +207,7 @@ class AgentEngineClient:
183
207
  secret_access_key=secret_key or "",
184
208
  region=self.region,
185
209
  service=self.service,
210
+ allow_env_fallback=allow_env_fallback,
186
211
  )
187
212
 
188
213
  if self._auth.is_enabled:
@@ -197,10 +222,6 @@ class AgentEngineClient:
197
222
  # requests.Session must not be used by several worker threads at once.
198
223
  self._async_action_lock = asyncio.Lock()
199
224
  self._http_error_log_suppressors: list[HttpErrorLogSuppressor] = []
200
- # A Server Action can be deployed before the external KOP publication
201
- # finishes. Remember that result per client so an approval retry does
202
- # not repeatedly hit the known-unpublished control-plane route.
203
- self._unpublished_kop_actions: set[str] = set()
204
225
  # 反查身份的实例缓存(避免同会话重复调 IAM);None=未尝试,ResolvedIdentity|None=已反查
205
226
  self._resolved_identity: Any = None
206
227
  self._identity_resolve_attempted: bool = False
@@ -217,6 +238,15 @@ class AgentEngineClient:
217
238
  return False
218
239
  return True
219
240
 
241
+ def _request_ssl_verify(self) -> bool:
242
+ return True if not self._allow_env_fallback else self._ssl_verify_enabled()
243
+
244
+ def _request_api_version(self) -> str:
245
+ return self._explicit_api_version or (
246
+ os.getenv("AGENTENGINE_API_VERSION", "2024-06-12")
247
+ if self._allow_env_fallback else "2024-06-12"
248
+ )
249
+
220
250
  @staticmethod
221
251
  def _is_global_dry_run_enabled() -> bool:
222
252
  """根命令 --dry-run 开关:支持未显式透传 dry_run 参数的命令。"""
@@ -259,6 +289,7 @@ class AgentEngineClient:
259
289
  def _get_session(self) -> requests.Session:
260
290
  if self._session is None:
261
291
  self._session = requests.Session()
292
+ self._session.trust_env = self._allow_env_fallback
262
293
  return self._session
263
294
 
264
295
  def _get_host(self) -> str:
@@ -421,6 +452,8 @@ class AgentEngineClient:
421
452
  )
422
453
 
423
454
  def _can_retry_with_inner_aicp_endpoint(self, details: Dict[str, Any]) -> bool:
455
+ if not self._allow_env_fallback:
456
+ return False
424
457
  if not self._is_inner_account_intranet_error(details):
425
458
  return False
426
459
  parsed = urlparse(self.base_url or "")
@@ -439,7 +472,7 @@ class AgentEngineClient:
439
472
  kop_mode = self._is_kop_mode()
440
473
  headers = self._build_headers(action=action, kop_mode=kop_mode)
441
474
  if kop_mode:
442
- version = os.getenv("AGENTENGINE_API_VERSION", "2024-06-12")
475
+ version = self._request_api_version()
443
476
  full_url = f"{self.base_url.rstrip('/')}/?Action={action}&Version={version}"
444
477
  else:
445
478
  full_url = f"{self.base_url}{path}"
@@ -453,7 +486,7 @@ class AgentEngineClient:
453
486
  headers["Accept"] = accept
454
487
  if has_files:
455
488
  headers.pop("Content-Type", None)
456
- version = os.getenv("AGENTENGINE_API_VERSION", "2024-06-12")
489
+ version = self._request_api_version()
457
490
  full_url = (
458
491
  f"{self.base_url.rstrip('/')}/?Action={action}&Version={version}"
459
492
  if kop_mode
@@ -532,7 +565,7 @@ class AgentEngineClient:
532
565
  }
533
566
  if kop_mode and action:
534
567
  headers["X-Action"] = action
535
- headers["X-Version"] = os.getenv("AGENTENGINE_API_VERSION", "2024-06-12")
568
+ headers["X-Version"] = self._request_api_version()
536
569
  if self.custom_source:
537
570
  headers["X-KSC-CUSTOM-SOURCE"] = self.custom_source
538
571
 
@@ -579,6 +612,10 @@ class AgentEngineClient:
579
612
 
580
613
  def _get_resolved_identity(self) -> Any:
581
614
  """反查身份并缓存到实例。dry-run 只读文件缓存不联网。"""
615
+ if not self._allow_env_fallback:
616
+ # Explicit resource admission owns identity resolution and its target.
617
+ # Never consult a global identity cache or contact an implicit service.
618
+ return None
582
619
  if self._identity_resolve_attempted:
583
620
  return self._resolved_identity
584
621
  self._identity_resolve_attempted = True
@@ -606,7 +643,9 @@ class AgentEngineClient:
606
643
  if key.lower() == "x-ksc-account-id" and str(value or "").strip():
607
644
  return str(value).strip()
608
645
  # 2. env KSYUN_ACCOUNT_ID
609
- account_id = os.getenv("KSYUN_ACCOUNT_ID", "").strip()
646
+ account_id = (
647
+ os.getenv("KSYUN_ACCOUNT_ID", "").strip() if self._allow_env_fallback else ""
648
+ )
610
649
  if account_id:
611
650
  return account_id
612
651
  # 3. 反查主账号 ID(复用 _get_resolved_identity 的反查,不重复调)
@@ -734,11 +773,17 @@ class AgentEngineClient:
734
773
  headers=headers,
735
774
  auth=self._auth.get_auth(), # AWS V4 签名
736
775
  timeout=self.timeout,
737
- verify=self._ssl_verify_enabled(),
776
+ verify=self._request_ssl_verify(),
777
+ allow_redirects=self._allow_env_fallback,
738
778
  )
739
779
 
740
780
  logger.debug(f"Response: {response.status_code}")
741
781
 
782
+ if not self._allow_env_fallback and 300 <= response.status_code < 400:
783
+ raise AgentEngineAPIError(
784
+ response.status_code, "Explicit connection redirect refused"
785
+ )
786
+
742
787
  if response.status_code < 400:
743
788
  break
744
789
 
@@ -996,24 +1041,6 @@ class AgentEngineClient:
996
1041
  )
997
1042
  return AgentEngineAPIError(response.status_code, message)
998
1043
 
999
- @staticmethod
1000
- def _is_unregistered_kop_action(error: AgentEngineAPIError, action: str) -> bool:
1001
- """Return whether KOP rejected an otherwise valid Server Action.
1002
-
1003
- Public Action publication is an infrastructure step independent of a
1004
- Server rollout. During that window the per-Agent Gateway route is
1005
- already authenticated and still forwards the exact same Action to
1006
- Server admission, so callers can safely use it as the data-plane
1007
- fallback instead of losing an approval response.
1008
- """
1009
-
1010
- message = str(error.message or "").strip().lower()
1011
- return (
1012
- error.code == 400
1013
- and f"action {action.lower()}" in message
1014
- and "not valid for this web service" in message
1015
- )
1016
-
1017
1044
  def _runtime_action(
1018
1045
  self,
1019
1046
  *,
@@ -1031,7 +1058,8 @@ class AgentEngineClient:
1031
1058
  headers={"Authorization": f"Bearer {api_key}"},
1032
1059
  json=params,
1033
1060
  timeout=self.timeout,
1034
- verify=self._ssl_verify_enabled(),
1061
+ verify=self._request_ssl_verify(),
1062
+ allow_redirects=self._allow_env_fallback,
1035
1063
  )
1036
1064
  if response.status_code >= 400:
1037
1065
  raise self._workspace_runtime_error(response)
@@ -1057,22 +1085,6 @@ class AgentEngineClient:
1057
1085
  raise AgentEngineAPIError(502, "Runtime Action returned non-object Data")
1058
1086
  return normalized
1059
1087
 
1060
- async def _runtime_action_for_agent(
1061
- self,
1062
- *,
1063
- agent_id: str,
1064
- action: str,
1065
- params: Dict[str, Any],
1066
- ) -> Dict[str, Any]:
1067
- detail = await self.get_agent(agent_id, include_api_key=True)
1068
- access = self._extract_runtime_access(detail)
1069
- return await asyncio.to_thread(
1070
- self._runtime_action,
1071
- access=access,
1072
- action=action,
1073
- params=params,
1074
- )
1075
-
1076
1088
  @staticmethod
1077
1089
  def _compact_params(params: Dict[str, Any] | None) -> Dict[str, Any]:
1078
1090
  return {key: value for key, value in (params or {}).items() if value is not None}
@@ -1164,7 +1176,8 @@ class AgentEngineClient:
1164
1176
  headers=headers,
1165
1177
  auth=self._auth.get_auth(),
1166
1178
  timeout=self.timeout,
1167
- verify=self._ssl_verify_enabled(),
1179
+ verify=self._request_ssl_verify(),
1180
+ allow_redirects=self._allow_env_fallback,
1168
1181
  )
1169
1182
  if response.status_code < 400:
1170
1183
  return response
@@ -1238,7 +1251,8 @@ class AgentEngineClient:
1238
1251
  files=files,
1239
1252
  stream=False,
1240
1253
  timeout=self.timeout,
1241
- verify=self._ssl_verify_enabled(),
1254
+ verify=self._request_ssl_verify(),
1255
+ allow_redirects=self._allow_env_fallback,
1242
1256
  )
1243
1257
  setattr(response, "_ksadk_workspace_url", url)
1244
1258
  if response.status_code >= 400:
@@ -1501,8 +1515,13 @@ class AgentEngineClient:
1501
1515
  }
1502
1516
  if manifest_sha256:
1503
1517
  payload["ManifestSHA256"] = manifest_sha256
1518
+ if isinstance(declaration, dict) and declaration.get("plugin_artifacts"):
1519
+ payload["PluginArtifacts"] = declaration["plugin_artifacts"]
1504
1520
  return payload
1505
1521
 
1522
+ async def get_plugin_delivery_capabilities(self) -> Dict[str, Any]:
1523
+ return await self._action_async("GetPluginDeliveryCapabilities", {})
1524
+
1506
1525
  async def create_agent(self, data: Dict[str, Any]) -> Dict[str, Any]:
1507
1526
  """Create an Agent through the established order workflow.
1508
1527
 
@@ -1596,6 +1615,9 @@ class AgentEngineClient:
1596
1615
  "EnableObservability": enable_observability,
1597
1616
  "EnvironmentVariables": env_vars,
1598
1617
  }
1618
+ component_config = data.get("component_config")
1619
+ if component_config:
1620
+ advanced["ComponentConfig"] = component_config
1599
1621
  inbound_identity_auth = data.get("inbound_identity_auth")
1600
1622
  if inbound_identity_auth is not None:
1601
1623
  advanced["InboundIdentityAuth"] = inbound_identity_auth
@@ -1604,21 +1626,10 @@ class AgentEngineClient:
1604
1626
  advanced["ProjectId"] = project_id
1605
1627
  params["Advanced"] = advanced
1606
1628
 
1607
- # ManagedRuntime is an already-paid, platform-owned YAML runtime. It
1608
- # has no Code/Container order callback to materialize later, so use
1609
- # the existing CreateAgent action to create its Agent/Runtime now.
1610
- # Code and Container keep the established CreateAgentProduct flow.
1611
- action = (
1612
- "CreateAgent"
1613
- if params["DeploymentType"] == "ManagedRuntime"
1614
- else "CreateAgentProduct"
1615
- )
1616
- if action == "CreateAgent":
1617
- # CreateAgent is also used as an order callback and therefore
1618
- # requires an InstanceId. A declarative runtime has no order to
1619
- # allocate one for us, so the SDK supplies a stable request UUID.
1620
- params["InstanceId"] = str(data.get("instance_id") or uuid.uuid4())
1621
- return self._action(action, params)
1629
+ # CreateAgentProduct is the established public Action. The Server
1630
+ # handles ManagedRuntime synchronously without involving Ding, while
1631
+ # Code and Container retain their existing order/callback lifecycle.
1632
+ return self._action("CreateAgentProduct", params)
1622
1633
 
1623
1634
  async def get_agent(
1624
1635
  self,
@@ -1686,6 +1697,33 @@ class AgentEngineClient:
1686
1697
  params["Name"] = name
1687
1698
  return self._action("ListAgentModels", params)
1688
1699
 
1700
+ async def list_knowledge_bases(self) -> Dict[str, Any]:
1701
+ """List knowledge bases visible to the current signed cloud identity."""
1702
+
1703
+ result = await self._action_async("ListKnowledgeBases", {})
1704
+ return {
1705
+ "knowledge_bases": result.get("knowledge_bases", []),
1706
+ "total_count": result.get("total_count", 0),
1707
+ }
1708
+
1709
+ async def list_memory_instances(self) -> Dict[str, Any]:
1710
+ """List long-term memory instances visible to the signed identity."""
1711
+
1712
+ result = await self._action_async("ListMemoryInstances", {})
1713
+ return {
1714
+ "memory_instances": result.get("memory_instances", []),
1715
+ "total_count": result.get("total_count", 0),
1716
+ }
1717
+
1718
+ async def list_skill_workspaces(self) -> Dict[str, Any]:
1719
+ """List Skill Center workspaces visible to the signed identity."""
1720
+
1721
+ result = await self._action_async("ListSkillWorkspaces", {})
1722
+ return {
1723
+ "skill_workspaces": result.get("skill_workspaces", []),
1724
+ "total_count": result.get("total_count", 0),
1725
+ }
1726
+
1689
1727
  async def create_dashboard_access_link(
1690
1728
  self,
1691
1729
  *,
@@ -1931,6 +1969,9 @@ class AgentEngineClient:
1931
1969
  inbound_identity_auth = data.get("inbound_identity_auth")
1932
1970
  if inbound_identity_auth is not None:
1933
1971
  advanced["InboundIdentityAuth"] = inbound_identity_auth
1972
+ component_config = data.get("component_config")
1973
+ if component_config:
1974
+ advanced["ComponentConfig"] = component_config
1934
1975
  project_id = data.get("project_id")
1935
1976
  if project_id:
1936
1977
  advanced["ProjectId"] = project_id
@@ -2060,24 +2101,7 @@ class AgentEngineClient:
2060
2101
  "Response": response or {},
2061
2102
  "IdempotencyKey": idempotency_key,
2062
2103
  }
2063
- if "SubmitInteraction" not in self._unpublished_kop_actions:
2064
- try:
2065
- return await self._action_async("SubmitInteraction", params)
2066
- except AgentEngineAPIError as exc:
2067
- if not self._is_unregistered_kop_action(exc, "SubmitInteraction"):
2068
- raise
2069
- self._unpublished_kop_actions.add("SubmitInteraction")
2070
- if "SubmitInteraction" in self._unpublished_kop_actions:
2071
- # KOP publication can lag the Server/Gateway rollout. The
2072
- # per-Agent endpoint is authenticated with the API key returned by
2073
- # signed GetAgent and still traverses Gateway -> Server admission;
2074
- # it never submits directly to Runtime.
2075
- return await self._runtime_action_for_agent(
2076
- agent_id=agent_id,
2077
- action="SubmitInteraction",
2078
- params=params,
2079
- )
2080
- raise AssertionError("unreachable SubmitInteraction transport state")
2104
+ return await self._action_async("SubmitInteraction", params)
2081
2105
 
2082
2106
  async def list_workspace_files(
2083
2107
  self,
@@ -2582,6 +2606,7 @@ class AgentEngineClient:
2582
2606
  raise AssertionError("dry-run request unexpectedly returned")
2583
2607
 
2584
2608
  session = requests.Session()
2609
+ session.trust_env = self._allow_env_fallback
2585
2610
  response: requests.Response | None = None
2586
2611
  retried_inner_endpoint = False
2587
2612
  try:
@@ -2596,7 +2621,8 @@ class AgentEngineClient:
2596
2621
  # reasoning before its next SSE chunk. Bound connection
2597
2622
  # establishment, not the lifetime of an admitted stream.
2598
2623
  timeout=(self.timeout, None),
2599
- verify=self._ssl_verify_enabled(),
2624
+ verify=self._request_ssl_verify(),
2625
+ allow_redirects=self._allow_env_fallback,
2600
2626
  stream=True,
2601
2627
  )
2602
2628
  content_type = str(response.headers.get("content-type") or "").lower()
@@ -2622,9 +2648,7 @@ class AgentEngineClient:
2622
2648
  )
2623
2649
  message = (
2624
2650
  str(
2625
- details.get("remote_error_message")
2626
- or details.get("message")
2627
- or ""
2651
+ details.get("remote_error_message") or details.get("message") or ""
2628
2652
  ).strip()
2629
2653
  or "RunAgent stream did not return text/event-stream"
2630
2654
  )
@@ -2650,11 +2674,7 @@ class AgentEngineClient:
2650
2674
  details=details,
2651
2675
  )
2652
2676
  message = (
2653
- str(
2654
- details.get("remote_error_message")
2655
- or details.get("message")
2656
- or ""
2657
- ).strip()
2677
+ str(details.get("remote_error_message") or details.get("message") or "").strip()
2658
2678
  or resp_text
2659
2679
  )
2660
2680
  raise AgentEngineAPIError(
@@ -236,6 +236,14 @@ class CodeBuilder(BaseBuilder):
236
236
  ".ruff_cache",
237
237
  }
238
238
  IGNORED_FILE_NAMES = {".DS_Store"}
239
+ BUNDLED_SOURCE_IGNORED_DIR_NAMES = {
240
+ "__pycache__",
241
+ "node_modules",
242
+ ".git",
243
+ ".pytest_cache",
244
+ ".mypy_cache",
245
+ ".ruff_cache",
246
+ }
239
247
  KSADK_ALLOWED_SUFFIXES = {
240
248
  ".py",
241
249
  ".yaml",
@@ -280,7 +288,15 @@ class CodeBuilder(BaseBuilder):
280
288
  "mcp>=1.1.0",
281
289
  "langchain-mcp-adapters>=0.0.1",
282
290
  )
283
- BUNDLED_KSADK_POSTGRES_SESSION_REQUIREMENTS = ("asyncpg>=0.30.0,<1.0.0",)
291
+ BUNDLED_KSADK_POSTGRES_SESSION_REQUIREMENTS = (
292
+ "asyncpg>=0.30.0,<1.0.0",
293
+ "greenlet>=1.0.0",
294
+ )
295
+ BUNDLED_KSADK_LANGGRAPH_POSTGRES_REQUIREMENTS = (
296
+ "langgraph-checkpoint-postgres>=3.1.0",
297
+ "psycopg[binary]>=3.2,<4.0",
298
+ "psycopg-pool>=3.2,<4.0",
299
+ )
284
300
  BUNDLED_KSADK_ATTACHMENT_RUNTIME_REQUIREMENTS = (
285
301
  "pypdf>=6.0.0",
286
302
  "beautifulsoup4>=4.12.0",
@@ -584,8 +600,14 @@ class CodeBuilder(BaseBuilder):
584
600
  value = os.getenv("KSADK_BUILD_ENABLE_ATTACHMENT_OCR", "")
585
601
  return value.strip().lower() in {"1", "true", "yes", "on"}
586
602
 
587
- def _bundled_runtime_requirements(self) -> tuple[str, ...]:
603
+ def _bundled_runtime_requirements(self, detection_result: Any = None) -> tuple[str, ...]:
588
604
  requirements = list(self.BUNDLED_KSADK_RUNTIME_REQUIREMENTS)
605
+ detection_type = getattr(detection_result, "type", None)
606
+ framework = str(
607
+ getattr(detection_type, "value", detection_type) or ""
608
+ ).strip().lower()
609
+ if framework in {"langgraph", "langchain", "deepagents"}:
610
+ requirements.extend(self.BUNDLED_KSADK_LANGGRAPH_POSTGRES_REQUIREMENTS)
589
611
  if self._attachment_ocr_runtime_enabled():
590
612
  requirements.extend(self.BUNDLED_KSADK_ATTACHMENT_OCR_RUNTIME_REQUIREMENTS)
591
613
  if self._mcp_runtime_enabled():
@@ -612,16 +634,26 @@ class CodeBuilder(BaseBuilder):
612
634
  if self._env_flag_enabled("KSADK_BUILD_ENABLE_POSTGRES_SESSION"):
613
635
  return True
614
636
  backend = (
615
- self._project_env_value("KSADK_SESSION_BACKEND")
616
- or self._project_env_value("AGENTENGINE_SESSION_BACKEND")
617
- or self._project_env_value("KSADK_STM_BACKEND")
637
+ self._project_file_env_value("KSADK_SESSION_BACKEND")
638
+ or self._project_file_env_value("AGENTENGINE_SESSION_BACKEND")
639
+ or self._project_file_env_value("KSADK_STM_BACKEND")
640
+ or os.getenv("KSADK_SESSION_BACKEND")
641
+ or os.getenv("AGENTENGINE_SESSION_BACKEND")
642
+ or os.getenv("KSADK_STM_BACKEND")
643
+ or ""
618
644
  )
619
645
  if backend.strip().lower() == "postgres":
620
646
  return True
621
647
  dsn = (
622
- self._project_env_value("KSADK_SESSION_DSN")
623
- or self._project_env_value("KSADK_STM_URL")
624
- or self._project_env_value("KSADK_STM_DB_URL")
648
+ self._project_file_env_value("KSADK_CHECKPOINT_DSN")
649
+ or self._project_file_env_value("KSADK_SESSION_DSN")
650
+ or self._project_file_env_value("KSADK_STM_URL")
651
+ or self._project_file_env_value("KSADK_STM_DB_URL")
652
+ or os.getenv("KSADK_CHECKPOINT_DSN")
653
+ or os.getenv("KSADK_SESSION_DSN")
654
+ or os.getenv("KSADK_STM_URL")
655
+ or os.getenv("KSADK_STM_DB_URL")
656
+ or ""
625
657
  )
626
658
  return self._looks_like_postgres_dsn(dsn)
627
659
 
@@ -642,6 +674,9 @@ class CodeBuilder(BaseBuilder):
642
674
  value = os.getenv(name)
643
675
  if value:
644
676
  return value
677
+ return self._project_file_env_value(name)
678
+
679
+ def _project_file_env_value(self, name: str) -> str:
645
680
  for env_file in (self.project_dir / ".env", self.project_dir / "agentengine.env"):
646
681
  if not env_file.is_file():
647
682
  continue
@@ -823,18 +858,36 @@ class CodeBuilder(BaseBuilder):
823
858
  yield from self._iter_bundled_source_package(package_name, package_root)
824
859
 
825
860
  def _iter_bundled_source_package(self, package_name: str, package_root: Path):
826
- for file_path in sorted(package_root.rglob("*")):
827
- if not file_path.is_file():
828
- continue
829
- relative_path = file_path.relative_to(package_root)
830
- if package_name == "ksadk" and self._should_skip_ksadk_relative_path(relative_path):
831
- continue
832
- if "__pycache__" in file_path.parts:
833
- continue
834
- suffix = file_path.suffix.lower()
835
- if suffix not in self.KSADK_ALLOWED_SUFFIXES:
836
- continue
837
- yield package_name, relative_path.as_posix(), file_path
861
+ bundled_files = []
862
+ for current_root, dirnames, filenames in os.walk(package_root):
863
+ current_path = Path(current_root)
864
+ dirnames[:] = sorted(
865
+ dir_name
866
+ for dir_name in dirnames
867
+ if dir_name not in self.BUNDLED_SOURCE_IGNORED_DIR_NAMES
868
+ and not (
869
+ package_name == "ksadk"
870
+ and self._should_skip_ksadk_relative_path(
871
+ (current_path / dir_name).relative_to(package_root)
872
+ )
873
+ )
874
+ )
875
+ for file_name in sorted(filenames):
876
+ file_path = current_path / file_name
877
+ if not file_path.is_file():
878
+ continue
879
+ relative_path = file_path.relative_to(package_root)
880
+ if (
881
+ package_name == "ksadk"
882
+ and self._should_skip_ksadk_relative_path(relative_path)
883
+ ):
884
+ continue
885
+ if file_path.suffix.lower() not in self.KSADK_ALLOWED_SUFFIXES:
886
+ continue
887
+ bundled_files.append((relative_path.as_posix(), file_path))
888
+
889
+ for relative_path, file_path in sorted(bundled_files):
890
+ yield package_name, relative_path, file_path
838
891
 
839
892
  def _should_skip_ksadk_relative_path(self, relative_path: Path) -> bool:
840
893
  parts = relative_path.parts
@@ -942,7 +995,7 @@ class CodeBuilder(BaseBuilder):
942
995
  def _build_requirements_list(self, detection_result) -> List[str]:
943
996
  final_deps = merge_requirement_lists(
944
997
  self._get_base_requirements(detection_result),
945
- self._bundled_runtime_requirements(),
998
+ self._bundled_runtime_requirements(detection_result),
946
999
  )
947
1000
 
948
1001
  user_requirements = self.project_dir / "requirements.txt"