@google/adk 2.3.0 → 2.5.0

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 (396) hide show
  1. package/dist/cjs/a2a/a2a_remote_agent.js +17 -2
  2. package/dist/cjs/a2a/a2a_remote_agent_utils.js +8 -4
  3. package/dist/cjs/a2a/agent_card.js +5 -81
  4. package/dist/cjs/a2a/agent_to_a2a.js +7 -0
  5. package/dist/cjs/a2a/event_converter_utils.js +10 -3
  6. package/dist/cjs/agents/agent_engine_client.js +399 -0
  7. package/dist/cjs/agents/base_agent.js +127 -68
  8. package/dist/cjs/agents/functions.js +64 -59
  9. package/dist/cjs/agents/instructions.js +8 -6
  10. package/dist/cjs/agents/invocation_context.js +2 -2
  11. package/dist/cjs/agents/llm_agent.js +124 -101
  12. package/dist/cjs/agents/processors/basic_llm_request_processor.js +1 -1
  13. package/dist/cjs/agents/processors/code_execution_request_processor.js +8 -0
  14. package/dist/cjs/agents/processors/content_processor_utils.js +72 -17
  15. package/dist/cjs/agents/processors/content_request_processor.js +51 -2
  16. package/dist/cjs/agents/processors/context_compactor_request_processor.js +5 -1
  17. package/dist/cjs/agents/processors/instructions_llm_request_processor.js +1 -1
  18. package/dist/cjs/agents/processors/nl_planning_processor.js +13 -3
  19. package/dist/cjs/artifacts/file_artifact_service.js +1 -1
  20. package/dist/cjs/cli/cli_eval.js +884 -17
  21. package/dist/cjs/cli/utils/cleanup.js +84 -0
  22. package/dist/cjs/cli/utils/envs.js +33 -2
  23. package/dist/cjs/cli/utils/evals.js +75 -8
  24. package/dist/cjs/cli/utils/logs.js +134 -15
  25. package/dist/cjs/cli/utils/path_validation.js +83 -0
  26. package/dist/cjs/code_executors/container_code_executor.js +171 -38
  27. package/dist/cjs/code_executors/unsafe_local_code_executor.js +6 -1
  28. package/dist/cjs/common.js +59 -32
  29. package/dist/cjs/context/compaction_utils.js +19 -0
  30. package/dist/cjs/errors/input_validation_error.js +3 -2
  31. package/dist/cjs/events/event.js +7 -3
  32. package/dist/cjs/features/feature_registry.js +5 -0
  33. package/dist/cjs/index.js +34 -12
  34. package/dist/cjs/models/google_llm.js +33 -2
  35. package/dist/cjs/models/interactions_utils.js +3 -0
  36. package/dist/cjs/plugins/base_plugin.js +54 -40
  37. package/dist/cjs/plugins/plugin_manager.js +27 -0
  38. package/dist/cjs/runner/runner.js +306 -189
  39. package/dist/cjs/sessions/base_session_service.js +15 -12
  40. package/dist/cjs/sessions/database_session_service.js +232 -38
  41. package/dist/cjs/sessions/db/operations.js +70 -1
  42. package/dist/cjs/sessions/db/schema.js +4 -0
  43. package/dist/cjs/sessions/in_memory_session_service.js +2 -2
  44. package/dist/cjs/sessions/stale_session_error.js +59 -0
  45. package/dist/cjs/sessions/vertex_ai_session_service.js +11 -3
  46. package/dist/cjs/skills/loader.js +76 -41
  47. package/dist/cjs/telemetry/api/instrumentation.js +632 -0
  48. package/dist/cjs/telemetry/api/internal/common/accumulators.js +169 -0
  49. package/dist/cjs/telemetry/api/internal/common/attributes.js +131 -0
  50. package/dist/cjs/telemetry/api/internal/common/config.js +159 -0
  51. package/dist/cjs/telemetry/api/internal/common/error.js +98 -0
  52. package/dist/cjs/telemetry/api/internal/common/finish_reason.js +63 -0
  53. package/dist/cjs/telemetry/api/internal/common/genai_messages.js +217 -0
  54. package/dist/cjs/telemetry/api/internal/common/http_exchange.js +169 -0
  55. package/dist/cjs/telemetry/api/internal/common/provider_name.js +87 -0
  56. package/dist/cjs/telemetry/api/internal/common/redaction.js +148 -0
  57. package/dist/cjs/telemetry/api/internal/common/serialization.js +58 -0
  58. package/dist/cjs/telemetry/api/internal/common/token_usage.js +118 -0
  59. package/dist/cjs/telemetry/api/internal/logs/inference.js +50 -0
  60. package/dist/cjs/telemetry/api/internal/logs/logger.js +46 -0
  61. package/dist/cjs/telemetry/api/internal/logs/mcp.js +141 -0
  62. package/dist/cjs/telemetry/api/internal/metrics/agent.js +128 -0
  63. package/dist/cjs/telemetry/api/internal/metrics/inference_start_hook.js +56 -0
  64. package/dist/cjs/telemetry/api/internal/metrics/meters.js +189 -0
  65. package/dist/cjs/telemetry/api/internal/metrics/tool.js +147 -0
  66. package/dist/cjs/telemetry/api/internal/metrics/workflow.js +132 -0
  67. package/dist/cjs/telemetry/api/internal/trace/agent.js +52 -0
  68. package/dist/cjs/telemetry/api/internal/trace/compaction.js +78 -0
  69. package/dist/cjs/telemetry/api/internal/trace/inference.js +132 -0
  70. package/dist/cjs/telemetry/api/internal/trace/live.js +52 -0
  71. package/dist/cjs/telemetry/api/internal/trace/node.js +73 -0
  72. package/dist/cjs/telemetry/api/internal/trace/propagation.js +67 -0
  73. package/dist/cjs/telemetry/api/internal/trace/tool.js +122 -0
  74. package/dist/cjs/telemetry/api/internal/trace/tracer.js +77 -0
  75. package/dist/cjs/telemetry/api/internal/trace/workflow.js +77 -0
  76. package/dist/cjs/telemetry/export/agent_engine.js +90 -0
  77. package/dist/cjs/telemetry/export/agent_runtime.js +73 -0
  78. package/dist/cjs/telemetry/export/google_cloud.js +763 -0
  79. package/dist/cjs/telemetry/export/request_driven_metric_reader.js +303 -0
  80. package/dist/cjs/telemetry/{setup.js → export/setup.js} +72 -6
  81. package/dist/cjs/tools/agent_tool.js +9 -1
  82. package/dist/cjs/tools/apihub_tool/apihub_toolset.js +18 -23
  83. package/dist/cjs/tools/application_integration_tool/application_integration_toolset.js +109 -43
  84. package/dist/cjs/tools/application_integration_tool/clients/connections_client.js +222 -114
  85. package/dist/cjs/tools/application_integration_tool/clients/integration_client.js +34 -14
  86. package/dist/cjs/tools/application_integration_tool/integration_connector_tool.js +175 -0
  87. package/dist/cjs/tools/base_toolset.js +1 -1
  88. package/dist/cjs/tools/computer_use/base_computer.js +125 -0
  89. package/dist/cjs/tools/computer_use/computer_use_actions.js +502 -0
  90. package/dist/cjs/tools/computer_use/computer_use_tool.js +244 -0
  91. package/dist/cjs/tools/computer_use/computer_use_toolset.js +360 -0
  92. package/dist/cjs/tools/function_tool.js +15 -5
  93. package/dist/cjs/tools/google_api_tool/google_api_tool.js +4 -1
  94. package/dist/cjs/tools/google_api_tool/google_api_toolset.js +174 -0
  95. package/dist/cjs/tools/google_api_tool/google_api_toolsets.js +124 -0
  96. package/dist/cjs/tools/google_api_tool/googleapi_to_openapi_converter.js +5 -3
  97. package/dist/cjs/tools/google_api_tool/index.js +20 -23
  98. package/dist/cjs/tools/load_artifacts_tool.js +27 -11
  99. package/dist/cjs/tools/load_memory_tool.js +14 -15
  100. package/dist/cjs/tools/mcp/mcp_session_manager.js +23 -3
  101. package/dist/cjs/tools/mcp/mcp_tool.js +7 -3
  102. package/dist/cjs/tools/mcp/mcp_toolset.js +19 -20
  103. package/dist/cjs/tools/openapi_tool/auth/auth_helpers.js +30 -29
  104. package/dist/cjs/tools/openapi_tool/auth/credential_exchangers/oauth2_exchanger.js +4 -4
  105. package/dist/cjs/tools/openapi_tool/openapi_spec_parser/openapi_spec_parser.js +20 -6
  106. package/dist/cjs/tools/openapi_tool/openapi_spec_parser/operation_parser.js +17 -6
  107. package/dist/cjs/tools/openapi_tool/openapi_toolset.js +7 -13
  108. package/dist/cjs/tools/openapi_tool/rest_api_tool.js +57 -10
  109. package/dist/cjs/tools/skill/load_skill_resource_tool.js +7 -0
  110. package/dist/cjs/tools/skill/load_skill_tool.js +3 -0
  111. package/dist/cjs/tools/skill/run_skill_script_tool.js +12 -2
  112. package/dist/cjs/tools/toolbox_toolset.js +193 -0
  113. package/dist/cjs/tools/webmcp/webmcp_toolset.js +1 -14
  114. package/dist/cjs/utils/async_queue.js +37 -3
  115. package/dist/cjs/utils/client_labels.js +17 -2
  116. package/dist/cjs/utils/env_aware_utils.js +13 -7
  117. package/dist/cjs/utils/error_utils.js +40 -2
  118. package/dist/cjs/utils/failover_utils.js +11 -10
  119. package/dist/cjs/utils/gemini_schema_util.js +145 -14
  120. package/dist/cjs/utils/id_provider.js +63 -0
  121. package/dist/cjs/utils/logger_node.js +4 -0
  122. package/dist/cjs/utils/model_name.js +15 -0
  123. package/dist/cjs/utils/output_schema_utils.js +5 -2
  124. package/dist/cjs/utils/simple_zod_to_json.js +13 -31
  125. package/dist/cjs/utils/ssrf_guard.js +46 -16
  126. package/dist/cjs/utils/task.js +1 -1
  127. package/dist/cjs/version.js +1 -1
  128. package/dist/cjs/workflow/index.js +2 -0
  129. package/dist/cjs/workflow/node_runner.js +24 -80
  130. package/dist/cjs/workflow/nodes/parallel_worker.js +18 -7
  131. package/dist/cjs/workflow/run_llm_agent_as_node.js +19 -14
  132. package/dist/cjs/workflow/utils/retry_utils.js +2 -2
  133. package/dist/cjs/workflow/workflow.js +12 -12
  134. package/dist/esm/a2a/a2a_remote_agent.js +23 -3
  135. package/dist/esm/a2a/a2a_remote_agent_utils.js +8 -4
  136. package/dist/esm/a2a/agent_card.js +5 -83
  137. package/dist/esm/a2a/agent_to_a2a.js +7 -0
  138. package/dist/esm/a2a/event_converter_utils.js +10 -3
  139. package/dist/esm/agents/agent_engine_client.js +382 -0
  140. package/dist/esm/agents/base_agent.js +127 -72
  141. package/dist/esm/agents/functions.js +69 -63
  142. package/dist/esm/agents/instructions.js +8 -6
  143. package/dist/esm/agents/invocation_context.js +2 -2
  144. package/dist/esm/agents/llm_agent.js +130 -106
  145. package/dist/esm/agents/processors/basic_llm_request_processor.js +1 -1
  146. package/dist/esm/agents/processors/code_execution_request_processor.js +8 -0
  147. package/dist/esm/agents/processors/content_processor_utils.js +72 -17
  148. package/dist/esm/agents/processors/content_request_processor.js +51 -2
  149. package/dist/esm/agents/processors/context_compactor_request_processor.js +5 -1
  150. package/dist/esm/agents/processors/instructions_llm_request_processor.js +1 -1
  151. package/dist/esm/agents/processors/nl_planning_processor.js +13 -3
  152. package/dist/esm/artifacts/file_artifact_service.js +1 -1
  153. package/dist/esm/cli/cli_eval.js +880 -17
  154. package/dist/esm/cli/utils/cleanup.js +56 -0
  155. package/dist/esm/cli/utils/envs.js +33 -2
  156. package/dist/esm/cli/utils/evals.js +74 -8
  157. package/dist/esm/cli/utils/logs.js +132 -13
  158. package/dist/esm/cli/utils/path_validation.js +45 -0
  159. package/dist/esm/code_executors/container_code_executor.js +171 -38
  160. package/dist/esm/code_executors/unsafe_local_code_executor.js +6 -1
  161. package/dist/esm/common.js +59 -19
  162. package/dist/esm/context/compaction_utils.js +19 -0
  163. package/dist/esm/errors/input_validation_error.js +3 -2
  164. package/dist/esm/events/event.js +7 -3
  165. package/dist/esm/features/feature_registry.js +5 -0
  166. package/dist/esm/index.js +36 -10
  167. package/dist/esm/models/google_llm.js +33 -2
  168. package/dist/esm/models/interactions_utils.js +3 -0
  169. package/dist/esm/plugins/base_plugin.js +54 -40
  170. package/dist/esm/plugins/plugin_manager.js +27 -0
  171. package/dist/esm/runner/runner.js +310 -192
  172. package/dist/esm/sessions/base_session_service.js +13 -11
  173. package/dist/esm/sessions/database_session_service.js +231 -38
  174. package/dist/esm/sessions/db/operations.js +70 -1
  175. package/dist/esm/sessions/db/schema.js +4 -0
  176. package/dist/esm/sessions/in_memory_session_service.js +2 -2
  177. package/dist/esm/sessions/stale_session_error.js +31 -0
  178. package/dist/esm/sessions/vertex_ai_session_service.js +11 -3
  179. package/dist/esm/skills/loader.js +76 -41
  180. package/dist/esm/telemetry/api/instrumentation.js +655 -0
  181. package/dist/esm/telemetry/api/internal/common/accumulators.js +139 -0
  182. package/dist/esm/telemetry/api/internal/common/attributes.js +94 -0
  183. package/dist/esm/telemetry/api/internal/common/config.js +128 -0
  184. package/dist/esm/telemetry/api/internal/common/error.js +69 -0
  185. package/dist/esm/telemetry/api/internal/common/finish_reason.js +35 -0
  186. package/dist/esm/telemetry/api/internal/common/genai_messages.js +188 -0
  187. package/dist/esm/telemetry/api/internal/common/http_exchange.js +142 -0
  188. package/dist/esm/telemetry/api/internal/common/provider_name.js +59 -0
  189. package/dist/esm/telemetry/api/internal/common/redaction.js +121 -0
  190. package/dist/esm/telemetry/api/internal/common/serialization.js +30 -0
  191. package/dist/esm/telemetry/api/internal/common/token_usage.js +85 -0
  192. package/dist/esm/telemetry/api/internal/logs/inference.js +23 -0
  193. package/dist/esm/telemetry/api/internal/logs/logger.js +19 -0
  194. package/dist/esm/telemetry/api/internal/logs/mcp.js +113 -0
  195. package/dist/esm/telemetry/api/internal/metrics/agent.js +107 -0
  196. package/dist/esm/telemetry/api/internal/metrics/inference_start_hook.js +29 -0
  197. package/dist/esm/telemetry/api/internal/metrics/meters.js +165 -0
  198. package/dist/esm/telemetry/api/internal/metrics/tool.js +119 -0
  199. package/dist/esm/telemetry/api/internal/metrics/workflow.js +112 -0
  200. package/dist/esm/telemetry/api/internal/trace/agent.js +25 -0
  201. package/dist/esm/telemetry/api/internal/trace/compaction.js +50 -0
  202. package/dist/esm/telemetry/api/internal/trace/inference.js +107 -0
  203. package/dist/esm/telemetry/api/internal/trace/live.js +28 -0
  204. package/dist/esm/telemetry/api/internal/trace/node.js +44 -0
  205. package/dist/esm/telemetry/api/internal/trace/propagation.js +39 -0
  206. package/dist/esm/telemetry/api/internal/trace/tool.js +96 -0
  207. package/dist/esm/telemetry/api/internal/trace/tracer.js +52 -0
  208. package/dist/esm/telemetry/api/internal/trace/workflow.js +54 -0
  209. package/dist/esm/telemetry/export/agent_engine.js +67 -0
  210. package/dist/esm/telemetry/export/agent_runtime.js +46 -0
  211. package/dist/esm/telemetry/export/google_cloud.js +733 -0
  212. package/dist/esm/telemetry/export/request_driven_metric_reader.js +276 -0
  213. package/dist/esm/telemetry/export/setup.js +160 -0
  214. package/dist/esm/tools/agent_tool.js +9 -1
  215. package/dist/esm/tools/apihub_tool/apihub_toolset.js +17 -22
  216. package/dist/esm/tools/application_integration_tool/application_integration_toolset.js +114 -44
  217. package/dist/esm/tools/application_integration_tool/clients/connections_client.js +226 -115
  218. package/dist/esm/tools/application_integration_tool/clients/integration_client.js +34 -14
  219. package/dist/esm/tools/application_integration_tool/integration_connector_tool.js +149 -0
  220. package/dist/esm/tools/base_toolset.js +1 -1
  221. package/dist/esm/tools/computer_use/base_computer.js +99 -0
  222. package/dist/esm/tools/computer_use/computer_use_actions.js +477 -0
  223. package/dist/esm/tools/computer_use/computer_use_tool.js +217 -0
  224. package/dist/esm/tools/computer_use/computer_use_toolset.js +344 -0
  225. package/dist/esm/tools/function_tool.js +15 -5
  226. package/dist/esm/tools/google_api_tool/google_api_tool.js +4 -1
  227. package/dist/esm/tools/google_api_tool/google_api_toolset.js +147 -0
  228. package/dist/esm/tools/google_api_tool/google_api_toolsets.js +94 -0
  229. package/dist/esm/tools/google_api_tool/googleapi_to_openapi_converter.js +5 -3
  230. package/dist/esm/tools/google_api_tool/index.js +18 -20
  231. package/dist/esm/tools/load_artifacts_tool.js +25 -10
  232. package/dist/esm/tools/load_memory_tool.js +14 -15
  233. package/dist/esm/tools/mcp/mcp_session_manager.js +23 -3
  234. package/dist/esm/tools/mcp/mcp_tool.js +7 -3
  235. package/dist/esm/tools/mcp/mcp_toolset.js +19 -20
  236. package/dist/esm/tools/openapi_tool/auth/auth_helpers.js +27 -26
  237. package/dist/esm/tools/openapi_tool/auth/credential_exchangers/oauth2_exchanger.js +4 -4
  238. package/dist/esm/tools/openapi_tool/openapi_spec_parser/openapi_spec_parser.js +20 -6
  239. package/dist/esm/tools/openapi_tool/openapi_spec_parser/operation_parser.js +17 -6
  240. package/dist/esm/tools/openapi_tool/openapi_toolset.js +6 -12
  241. package/dist/esm/tools/openapi_tool/rest_api_tool.js +57 -10
  242. package/dist/esm/tools/skill/load_skill_resource_tool.js +7 -0
  243. package/dist/esm/tools/skill/load_skill_tool.js +3 -0
  244. package/dist/esm/tools/skill/run_skill_script_tool.js +12 -2
  245. package/dist/esm/tools/toolbox_toolset.js +167 -0
  246. package/dist/esm/tools/webmcp/webmcp_toolset.js +1 -14
  247. package/dist/esm/utils/async_queue.js +37 -3
  248. package/dist/esm/utils/client_labels.js +17 -2
  249. package/dist/esm/utils/env_aware_utils.js +12 -7
  250. package/dist/esm/utils/error_utils.js +37 -1
  251. package/dist/esm/utils/failover_utils.js +11 -10
  252. package/dist/esm/utils/gemini_schema_util.js +144 -14
  253. package/dist/esm/utils/id_provider.js +33 -0
  254. package/dist/esm/utils/logger_node.js +4 -0
  255. package/dist/esm/utils/model_name.js +14 -0
  256. package/dist/esm/utils/output_schema_utils.js +5 -2
  257. package/dist/esm/utils/simple_zod_to_json.js +13 -31
  258. package/dist/esm/utils/ssrf_guard.js +55 -15
  259. package/dist/esm/utils/task.js +1 -1
  260. package/dist/esm/version.js +1 -1
  261. package/dist/esm/workflow/index.js +2 -1
  262. package/dist/esm/workflow/node_runner.js +26 -80
  263. package/dist/esm/workflow/nodes/parallel_worker.js +16 -6
  264. package/dist/esm/workflow/run_llm_agent_as_node.js +19 -14
  265. package/dist/esm/workflow/utils/retry_utils.js +2 -2
  266. package/dist/esm/workflow/workflow.js +12 -12
  267. package/dist/types/a2a/a2a_remote_agent.d.ts +6 -0
  268. package/dist/types/a2a/a2a_remote_agent_utils.d.ts +3 -2
  269. package/dist/types/agents/agent_engine_client.d.ts +155 -0
  270. package/dist/types/agents/base_agent.d.ts +14 -0
  271. package/dist/types/agents/llm_agent.d.ts +5 -1
  272. package/dist/types/agents/processors/content_processor_utils.d.ts +12 -10
  273. package/dist/types/agents/processors/nl_planning_processor.d.ts +2 -1
  274. package/dist/types/agents/run_config.d.ts +14 -0
  275. package/dist/types/cli/cli_eval.d.ts +172 -9
  276. package/dist/types/cli/utils/cleanup.d.ts +18 -0
  277. package/dist/types/cli/utils/envs.d.ts +13 -3
  278. package/dist/types/cli/utils/evals.d.ts +64 -1
  279. package/dist/types/cli/utils/logs.d.ts +20 -3
  280. package/dist/types/cli/utils/path_validation.d.ts +30 -0
  281. package/dist/types/code_executors/container_code_executor.d.ts +62 -9
  282. package/dist/types/common.d.ts +21 -18
  283. package/dist/types/context/compaction_utils.d.ts +13 -1
  284. package/dist/types/errors/input_validation_error.d.ts +2 -1
  285. package/dist/types/events/event.d.ts +3 -0
  286. package/dist/types/features/feature_registry.d.ts +1 -0
  287. package/dist/types/index.d.ts +11 -6
  288. package/dist/types/plugins/base_plugin.d.ts +50 -31
  289. package/dist/types/plugins/plugin_manager.d.ts +13 -0
  290. package/dist/types/runner/runner.d.ts +11 -0
  291. package/dist/types/sessions/base_session_service.d.ts +5 -2
  292. package/dist/types/sessions/database_session_service.d.ts +17 -1
  293. package/dist/types/sessions/db/operations.d.ts +2 -1
  294. package/dist/types/sessions/db/schema.d.ts +5 -3
  295. package/dist/types/sessions/stale_session_error.d.ts +21 -0
  296. package/dist/types/skills/loader.d.ts +3 -2
  297. package/dist/types/telemetry/api/instrumentation.d.ts +259 -0
  298. package/dist/types/telemetry/api/internal/common/accumulators.d.ts +91 -0
  299. package/dist/types/telemetry/api/internal/common/attributes.d.ts +90 -0
  300. package/dist/types/telemetry/api/internal/common/config.d.ts +61 -0
  301. package/dist/types/telemetry/api/internal/common/error.d.ts +29 -0
  302. package/dist/types/telemetry/api/internal/common/finish_reason.d.ts +18 -0
  303. package/dist/types/telemetry/api/internal/common/genai_messages.d.ts +26 -0
  304. package/dist/types/telemetry/api/internal/common/http_exchange.d.ts +50 -0
  305. package/dist/types/telemetry/api/internal/common/provider_name.d.ts +16 -0
  306. package/dist/types/telemetry/api/internal/common/redaction.d.ts +14 -0
  307. package/dist/types/telemetry/api/internal/common/serialization.d.ts +18 -0
  308. package/dist/types/telemetry/api/internal/common/token_usage.d.ts +47 -0
  309. package/dist/types/telemetry/api/internal/logs/inference.d.ts +15 -0
  310. package/dist/types/telemetry/api/internal/logs/logger.d.ts +13 -0
  311. package/dist/types/telemetry/api/internal/logs/mcp.d.ts +31 -0
  312. package/dist/types/telemetry/api/internal/metrics/agent.d.ts +28 -0
  313. package/dist/types/telemetry/api/internal/metrics/inference_start_hook.d.ts +12 -0
  314. package/dist/types/telemetry/api/internal/metrics/meters.d.ts +57 -0
  315. package/dist/types/telemetry/api/internal/metrics/tool.d.ts +44 -0
  316. package/dist/types/telemetry/api/internal/metrics/workflow.d.ts +32 -0
  317. package/dist/types/telemetry/api/internal/trace/agent.d.ts +14 -0
  318. package/dist/types/telemetry/api/internal/trace/compaction.d.ts +20 -0
  319. package/dist/types/telemetry/api/internal/trace/inference.d.ts +31 -0
  320. package/dist/types/telemetry/api/internal/trace/live.d.ts +21 -0
  321. package/dist/types/telemetry/api/internal/trace/node.d.ts +22 -0
  322. package/dist/types/telemetry/api/internal/trace/propagation.d.ts +22 -0
  323. package/dist/types/telemetry/api/internal/trace/tool.d.ts +57 -0
  324. package/dist/types/telemetry/api/internal/trace/tracer.d.ts +31 -0
  325. package/dist/types/telemetry/api/internal/trace/workflow.d.ts +21 -0
  326. package/dist/types/telemetry/export/agent_engine.d.ts +23 -0
  327. package/dist/types/telemetry/export/agent_runtime.d.ts +40 -0
  328. package/dist/types/telemetry/export/google_cloud.d.ts +189 -0
  329. package/dist/types/telemetry/export/request_driven_metric_reader.d.ts +144 -0
  330. package/dist/types/telemetry/{setup.d.ts → export/setup.d.ts} +3 -0
  331. package/dist/types/tools/agent_tool.d.ts +1 -1
  332. package/dist/types/tools/apihub_tool/apihub_toolset.d.ts +14 -21
  333. package/dist/types/tools/application_integration_tool/application_integration_toolset.d.ts +32 -9
  334. package/dist/types/tools/application_integration_tool/clients/connections_client.d.ts +35 -12
  335. package/dist/types/tools/application_integration_tool/clients/integration_client.d.ts +3 -3
  336. package/dist/types/tools/application_integration_tool/integration_connector_tool.d.ts +70 -0
  337. package/dist/types/tools/base_toolset.d.ts +7 -6
  338. package/dist/types/tools/computer_use/base_computer.d.ts +281 -0
  339. package/dist/types/tools/computer_use/computer_use_actions.d.ts +53 -0
  340. package/dist/types/tools/computer_use/computer_use_tool.d.ts +108 -0
  341. package/dist/types/tools/computer_use/computer_use_toolset.d.ts +132 -0
  342. package/dist/types/tools/google_api_tool/google_api_tool.d.ts +10 -3
  343. package/dist/types/tools/google_api_tool/google_api_toolset.d.ts +57 -0
  344. package/dist/types/tools/google_api_tool/google_api_toolsets.d.ts +48 -0
  345. package/dist/types/tools/google_api_tool/googleapi_to_openapi_converter.d.ts +5 -4
  346. package/dist/types/tools/google_api_tool/index.d.ts +4 -5
  347. package/dist/types/tools/load_artifacts_tool.d.ts +18 -1
  348. package/dist/types/tools/load_memory_tool.d.ts +32 -4
  349. package/dist/types/tools/mcp/mcp_session_manager.d.ts +16 -0
  350. package/dist/types/tools/openapi_tool/auth/auth_helpers.d.ts +8 -8
  351. package/dist/types/tools/openapi_tool/openapi_spec_parser/openapi_spec_parser.d.ts +12 -0
  352. package/dist/types/tools/openapi_tool/openapi_spec_parser/operation_parser.d.ts +15 -3
  353. package/dist/types/tools/openapi_tool/openapi_toolset.d.ts +5 -0
  354. package/dist/types/tools/openapi_tool/rest_api_tool.d.ts +10 -0
  355. package/dist/types/tools/toolbox_toolset.d.ts +154 -0
  356. package/dist/types/utils/async_queue.d.ts +14 -0
  357. package/dist/types/utils/client_labels.d.ts +2 -1
  358. package/dist/types/utils/env_aware_utils.d.ts +11 -0
  359. package/dist/types/utils/error_utils.d.ts +4 -0
  360. package/dist/types/utils/gemini_schema_util.d.ts +29 -0
  361. package/dist/types/utils/id_provider.d.ts +43 -0
  362. package/dist/types/utils/model_name.d.ts +8 -0
  363. package/dist/types/utils/output_schema_utils.d.ts +3 -2
  364. package/dist/types/utils/simple_zod_to_json.d.ts +1 -2
  365. package/dist/types/utils/ssrf_guard.d.ts +2 -0
  366. package/dist/types/version.d.ts +1 -1
  367. package/dist/types/workflow/index.d.ts +1 -1
  368. package/dist/types/workflow/nodes/parallel_worker.d.ts +8 -1
  369. package/dist/web/index_web.js +94 -88
  370. package/dist/web/index_web.js.map +4 -4
  371. package/package.json +43 -38
  372. package/dist/cjs/agents/remote_agent.js +0 -187
  373. package/dist/cjs/telemetry/google_cloud.js +0 -116
  374. package/dist/cjs/telemetry/tracing.js +0 -350
  375. package/dist/cjs/tools/crewai_tool.js +0 -132
  376. package/dist/cjs/tools/google_api_tool/google_api_tool_set.js +0 -226
  377. package/dist/cjs/tools/google_api_tool/google_api_tool_sets.js +0 -58
  378. package/dist/cjs/tools/langchain_tool.js +0 -172
  379. package/dist/cjs/tools/toolbox_tool.js +0 -108
  380. package/dist/esm/agents/remote_agent.js +0 -164
  381. package/dist/esm/telemetry/google_cloud.js +0 -99
  382. package/dist/esm/telemetry/setup.js +0 -89
  383. package/dist/esm/telemetry/tracing.js +0 -315
  384. package/dist/esm/tools/crewai_tool.js +0 -107
  385. package/dist/esm/tools/google_api_tool/google_api_tool_set.js +0 -188
  386. package/dist/esm/tools/google_api_tool/google_api_tool_sets.js +0 -24
  387. package/dist/esm/tools/langchain_tool.js +0 -148
  388. package/dist/esm/tools/toolbox_tool.js +0 -80
  389. package/dist/types/agents/remote_agent.d.ts +0 -68
  390. package/dist/types/telemetry/google_cloud.d.ts +0 -9
  391. package/dist/types/telemetry/tracing.d.ts +0 -129
  392. package/dist/types/tools/crewai_tool.d.ts +0 -85
  393. package/dist/types/tools/google_api_tool/google_api_tool_set.d.ts +0 -78
  394. package/dist/types/tools/google_api_tool/google_api_tool_sets.d.ts +0 -33
  395. package/dist/types/tools/langchain_tool.d.ts +0 -103
  396. package/dist/types/tools/toolbox_tool.d.ts +0 -73
@@ -28,13 +28,16 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
28
28
  * Copyright 2026 Google LLC
29
29
  * SPDX-License-Identifier: Apache-2.0
30
30
  */
31
- import { randomUUID } from "../utils/env_aware_utils.js";
31
+ import { newId } from "../utils/id_provider.js";
32
+ import { logger } from "../utils/logger.js";
32
33
  import {
33
34
  BaseSessionService,
34
35
  mergeStates,
35
- trimTempDeltaState
36
+ trimTempDeltaState,
37
+ upsertSessionEvent
36
38
  } from "./base_session_service.js";
37
39
  import { createSession } from "./session.js";
40
+ import { StaleSessionError } from "./stale_session_error.js";
38
41
  import { State } from "./state.js";
39
42
  let MikroORM;
40
43
  let LockMode;
@@ -67,6 +70,85 @@ async function importMikroOrm() {
67
70
  } = operations);
68
71
  }
69
72
  __name(importMikroOrm, "importMikroOrm");
73
+ import { isStaleSessionError, StaleSessionError as StaleSessionError2 } from "./stale_session_error.js";
74
+ const STORAGE_UPDATE_MARKER_SYMBOL = /* @__PURE__ */ Symbol.for(
75
+ "google.adk.session.storageUpdateMarker"
76
+ );
77
+ function setStorageRevisionMarker(session, revision) {
78
+ Object.defineProperty(session, STORAGE_UPDATE_MARKER_SYMBOL, {
79
+ value: revision,
80
+ writable: true,
81
+ configurable: true,
82
+ enumerable: false
83
+ });
84
+ }
85
+ __name(setStorageRevisionMarker, "setStorageRevisionMarker");
86
+ function getStorageRevisionMarker(session) {
87
+ return session[STORAGE_UPDATE_MARKER_SYMBOL];
88
+ }
89
+ __name(getStorageRevisionMarker, "getStorageRevisionMarker");
90
+ const MAX_IN_QUERY_IDS = 500;
91
+ async function sessionMatchesStorageRevision(txEm, session, eventsComplete, totalEventCount) {
92
+ const sessionWhere = {
93
+ appName: session.appName,
94
+ userId: session.userId,
95
+ sessionId: session.id
96
+ };
97
+ const latestStorageEvent = await txEm.findOne(StorageEvent, sessionWhere, {
98
+ orderBy: { timestamp: "DESC", id: "DESC" }
99
+ });
100
+ if (session.events.length === 0) {
101
+ if (latestStorageEvent !== null) {
102
+ return false;
103
+ }
104
+ if (totalEventCount !== void 0 && totalEventCount !== 0) {
105
+ return false;
106
+ }
107
+ return true;
108
+ }
109
+ if ((latestStorageEvent == null ? void 0 : latestStorageEvent.id) !== session.events[session.events.length - 1].id) {
110
+ return false;
111
+ }
112
+ if (totalEventCount !== void 0) {
113
+ const totalStored = await txEm.count(StorageEvent, sessionWhere);
114
+ if (totalStored !== totalEventCount) {
115
+ return false;
116
+ }
117
+ }
118
+ const knownIds = session.events.map((e) => e.id);
119
+ if (knownIds.length <= MAX_IN_QUERY_IDS) {
120
+ const unknownEventWhere = {
121
+ ...sessionWhere,
122
+ id: { $nin: knownIds }
123
+ };
124
+ if (!eventsComplete) {
125
+ unknownEventWhere.timestamp = {
126
+ $gte: new Date(session.events[0].timestamp)
127
+ };
128
+ }
129
+ return await txEm.count(StorageEvent, unknownEventWhere) === 0;
130
+ }
131
+ const filter = { ...sessionWhere };
132
+ if (!eventsComplete) {
133
+ filter.timestamp = { $gte: new Date(session.events[0].timestamp) };
134
+ }
135
+ const storedEvents = await txEm.find(StorageEvent, filter, {
136
+ fields: ["id"]
137
+ });
138
+ const knownSet = new Set(knownIds);
139
+ for (const stored of storedEvents) {
140
+ if (!knownSet.has(stored.id)) {
141
+ return false;
142
+ }
143
+ }
144
+ return true;
145
+ }
146
+ __name(sessionMatchesStorageRevision, "sessionMatchesStorageRevision");
147
+ function formatDateTime(dateOrEpochMs) {
148
+ const date = typeof dateOrEpochMs === "number" ? new Date(dateOrEpochMs) : dateOrEpochMs;
149
+ return date.toISOString().replace("T", " ").replace("Z", "");
150
+ }
151
+ __name(formatDateTime, "formatDateTime");
70
152
  function isDatabaseConnectionString(uri) {
71
153
  if (!uri) {
72
154
  return false;
@@ -75,16 +157,31 @@ function isDatabaseConnectionString(uri) {
75
157
  }
76
158
  __name(isDatabaseConnectionString, "isDatabaseConnectionString");
77
159
  const _DatabaseSessionService = class _DatabaseSessionService extends BaseSessionService {
78
- constructor(connectionStringOrOptions) {
160
+ constructor(connectionStringOrOptions, options) {
161
+ var _a;
79
162
  super();
80
163
  this.initialized = false;
81
164
  if (typeof connectionStringOrOptions === "string") {
82
165
  this.connectionString = connectionStringOrOptions;
166
+ if (options) {
167
+ const { staleSession, ...mikroOptions } = options;
168
+ this.options = mikroOptions;
169
+ this.staleSession = staleSession != null ? staleSession : "reject";
170
+ } else {
171
+ this.staleSession = "reject";
172
+ }
83
173
  } else {
84
- if (!connectionStringOrOptions.driver) {
174
+ const { staleSession: firstStaleSession, ...firstMikroOptions } = connectionStringOrOptions;
175
+ const { staleSession: secondStaleSession, ...secondMikroOptions } = options != null ? options : {};
176
+ const mergedMikroOptions = {
177
+ ...firstMikroOptions,
178
+ ...secondMikroOptions
179
+ };
180
+ if (!mergedMikroOptions.driver) {
85
181
  throw new Error("Driver is required when passing options object.");
86
182
  }
87
- this.options = connectionStringOrOptions;
183
+ this.options = mergedMikroOptions;
184
+ this.staleSession = (_a = secondStaleSession != null ? secondStaleSession : firstStaleSession) != null ? _a : "reject";
88
185
  }
89
186
  }
90
187
  async init() {
@@ -92,7 +189,11 @@ const _DatabaseSessionService = class _DatabaseSessionService extends BaseSessio
92
189
  return;
93
190
  }
94
191
  await loadMikroOrm();
95
- const options = this.connectionString ? await getConnectionOptionsFromUri(this.connectionString) : { ...this.options, entities: ENTITIES };
192
+ const options = this.connectionString ? {
193
+ ...await getConnectionOptionsFromUri(this.connectionString),
194
+ ...this.options,
195
+ entities: ENTITIES
196
+ } : { ...this.options, entities: ENTITIES };
96
197
  this.options = options;
97
198
  this.orm = await MikroORM.init(options);
98
199
  await ensureDatabaseCreated(this.orm);
@@ -107,7 +208,7 @@ const _DatabaseSessionService = class _DatabaseSessionService extends BaseSessio
107
208
  }) {
108
209
  await this.init();
109
210
  const em = this.orm.em.fork();
110
- const id = sessionId || randomUUID();
211
+ const id = sessionId || newId();
111
212
  const now = /* @__PURE__ */ new Date();
112
213
  const existing = await em.findOne(StorageSession, {
113
214
  id,
@@ -170,14 +271,22 @@ const _DatabaseSessionService = class _DatabaseSessionService extends BaseSessio
170
271
  userStateModel.state,
171
272
  sessionState
172
273
  );
173
- return createSession({
274
+ const session = createSession({
174
275
  id,
175
276
  appName,
176
277
  userId,
177
278
  state: mergedState,
178
279
  events: [],
179
- lastUpdateTime: storageSession.createTime.getTime()
280
+ lastUpdateTime: storageSession.updateTime.getTime()
281
+ });
282
+ setStorageRevisionMarker(session, {
283
+ marker: storageSession.updateTime.toISOString(),
284
+ recordedLastUpdateTime: session.lastUpdateTime,
285
+ unverifiedWrite: true,
286
+ eventsComplete: true,
287
+ totalEventCount: 0
180
288
  });
289
+ return session;
181
290
  }
182
291
  async getSession({
183
292
  appName,
@@ -218,7 +327,7 @@ const _DatabaseSessionService = class _DatabaseSessionService extends BaseSessio
218
327
  (userStateModel == null ? void 0 : userStateModel.state) || {},
219
328
  storageSession.state
220
329
  );
221
- return createSession({
330
+ const session = createSession({
222
331
  id: sessionId,
223
332
  appName,
224
333
  userId,
@@ -226,6 +335,16 @@ const _DatabaseSessionService = class _DatabaseSessionService extends BaseSessio
226
335
  events: storageEvents.map((se) => se.eventData),
227
336
  lastUpdateTime: storageSession.updateTime.getTime()
228
337
  });
338
+ const eventsComplete = (config == null ? void 0 : config.numRecentEvents) === void 0 && (config == null ? void 0 : config.afterTimestamp) === void 0;
339
+ const totalEventCount = eventsComplete ? session.events.length : await em.count(StorageEvent, { appName, userId, sessionId });
340
+ setStorageRevisionMarker(session, {
341
+ marker: storageSession.updateTime.toISOString(),
342
+ recordedLastUpdateTime: session.lastUpdateTime,
343
+ unverifiedWrite: false,
344
+ eventsComplete,
345
+ totalEventCount
346
+ });
347
+ return session;
229
348
  }
230
349
  async listSessions({
231
350
  appName,
@@ -238,7 +357,7 @@ const _DatabaseSessionService = class _DatabaseSessionService extends BaseSessio
238
357
  await this.init();
239
358
  const em = this.orm.em.fork();
240
359
  const where = { appName };
241
- if (userId) {
360
+ if (userId !== void 0) {
242
361
  where.userId = userId;
243
362
  }
244
363
  const orderBy = order === "asc" ? { updateTime: "ASC", id: "ASC" } : order === "desc" ? { updateTime: "DESC", id: "ASC" } : void 0;
@@ -287,7 +406,7 @@ const _DatabaseSessionService = class _DatabaseSessionService extends BaseSessio
287
406
  const appStateModel = await em.findOne(StorageAppState, { appName });
288
407
  const appState = (appStateModel == null ? void 0 : appStateModel.state) || {};
289
408
  const userStateMap = {};
290
- if (userId) {
409
+ if (userId !== void 0) {
291
410
  const u = await em.findOne(StorageUserState, { appName, userId });
292
411
  if (u) userStateMap[userId] = u.state;
293
412
  } else {
@@ -299,7 +418,7 @@ const _DatabaseSessionService = class _DatabaseSessionService extends BaseSessio
299
418
  const sessions = storageSessions.map((ss) => {
300
419
  const uState = userStateMap[ss.userId] || {};
301
420
  const merged = mergeStates(appState, uState, ss.state);
302
- return createSession({
421
+ const session = createSession({
303
422
  id: ss.id,
304
423
  appName: ss.appName,
305
424
  userId: ss.userId,
@@ -307,6 +426,13 @@ const _DatabaseSessionService = class _DatabaseSessionService extends BaseSessio
307
426
  events: [],
308
427
  lastUpdateTime: ss.updateTime.getTime()
309
428
  });
429
+ setStorageRevisionMarker(session, {
430
+ marker: ss.updateTime.toISOString(),
431
+ recordedLastUpdateTime: session.lastUpdateTime,
432
+ unverifiedWrite: false,
433
+ eventsComplete: false
434
+ });
435
+ return session;
310
436
  });
311
437
  return { sessions, ...paginationMeta };
312
438
  }
@@ -324,12 +450,15 @@ const _DatabaseSessionService = class _DatabaseSessionService extends BaseSessio
324
450
  session,
325
451
  event
326
452
  }) {
453
+ var _a, _b;
327
454
  await this.init();
328
455
  const em = this.orm.em.fork();
329
456
  if (event.partial) {
330
457
  return event;
331
458
  }
459
+ const stateDelta = (_b = (_a = event.actions) == null ? void 0 : _a.stateDelta) != null ? _b : {};
332
460
  const trimmedEvent = trimTempDeltaState(event);
461
+ let sessionWasStale = false;
333
462
  await em.transactional(async (txEm) => {
334
463
  const storageSession = await txEm.findOne(
335
464
  StorageSession,
@@ -343,6 +472,40 @@ const _DatabaseSessionService = class _DatabaseSessionService extends BaseSessio
343
472
  if (!storageSession) {
344
473
  throw new Error(`Session ${session.id} not found for appendEvent`);
345
474
  }
475
+ const storageUpdateTime = storageSession.updateTime.getTime();
476
+ const storageUpdateMarker = storageSession.updateTime.toISOString();
477
+ const rev = getStorageRevisionMarker(session);
478
+ const callerMutatedLastUpdateTime = rev !== void 0 && rev.recordedLastUpdateTime !== session.lastUpdateTime;
479
+ let isStale = false;
480
+ if (rev !== void 0 && !callerMutatedLastUpdateTime) {
481
+ if (rev.marker === storageUpdateMarker) {
482
+ session.lastUpdateTime = storageUpdateTime;
483
+ } else if (rev.unverifiedWrite && storageUpdateTime % 1e3 === 0 && Math.abs(storageUpdateTime - rev.recordedLastUpdateTime) < 1e3 && await sessionMatchesStorageRevision(
484
+ txEm,
485
+ session,
486
+ rev.eventsComplete,
487
+ rev.totalEventCount
488
+ )) {
489
+ session.lastUpdateTime = storageUpdateTime;
490
+ } else {
491
+ isStale = true;
492
+ }
493
+ } else if (rev !== void 0) {
494
+ isStale = storageUpdateTime > session.lastUpdateTime;
495
+ } else if (storageUpdateTime > session.lastUpdateTime) {
496
+ if (await sessionMatchesStorageRevision(txEm, session, false)) {
497
+ session.lastUpdateTime = storageUpdateTime;
498
+ } else {
499
+ isStale = true;
500
+ }
501
+ }
502
+ if (isStale) {
503
+ if (this.staleSession === "reject") {
504
+ const message = storageUpdateTime > session.lastUpdateTime ? `The last_update_time provided in the session object ${formatDateTime(session.lastUpdateTime)} is earlier than the update_time in the storage_session ${formatDateTime(storageSession.updateTime)}. Please check if it is a stale session.` : `The session object with last_update_time ${formatDateTime(session.lastUpdateTime)} does not match the storage_session revision with update_time ${formatDateTime(storageSession.updateTime)}. Please check if it is a stale session.`;
505
+ throw new StaleSessionError(message);
506
+ }
507
+ sessionWasStale = true;
508
+ }
346
509
  let appStateModel = await txEm.findOne(StorageAppState, {
347
510
  appName: session.appName
348
511
  });
@@ -366,24 +529,6 @@ const _DatabaseSessionService = class _DatabaseSessionService extends BaseSessio
366
529
  });
367
530
  txEm.persist(userStateModel);
368
531
  }
369
- if (storageSession.updateTime.getTime() > session.lastUpdateTime) {
370
- const events = await txEm.find(
371
- StorageEvent,
372
- {
373
- appName: session.appName,
374
- userId: session.userId,
375
- sessionId: session.id
376
- },
377
- { orderBy: { timestamp: "ASC" } }
378
- );
379
- const mergedState = mergeStates(
380
- appStateModel.state,
381
- userStateModel.state,
382
- storageSession.state
383
- );
384
- session.state = mergedState;
385
- session.events = events.map((e) => e.eventData);
386
- }
387
532
  if (event.actions && event.actions.stateDelta) {
388
533
  const appDelta = {};
389
534
  const userDelta = {};
@@ -436,15 +581,61 @@ const _DatabaseSessionService = class _DatabaseSessionService extends BaseSessio
436
581
  userStateModel.state,
437
582
  storageSession.state
438
583
  );
439
- session.state = newMergedState;
440
- const index = session.events.findIndex((e) => e.id === event.id);
441
- if (index >= 0) {
442
- session.events[index] = event;
443
- } else {
444
- session.events.push(event);
584
+ for (const source of [session.state, stateDelta]) {
585
+ for (const [key, value] of Object.entries(source)) {
586
+ if (key.startsWith(State.TEMP_PREFIX)) {
587
+ newMergedState[key] = value;
588
+ }
589
+ }
445
590
  }
591
+ session.state = newMergedState;
592
+ const isNewEvent = !existingStorageEvent;
593
+ upsertSessionEvent(session, event);
446
594
  session.lastUpdateTime = storageSession.updateTime.getTime();
595
+ let nextTotalEventCount;
596
+ if (!callerMutatedLastUpdateTime && !isStale) {
597
+ if ((rev == null ? void 0 : rev.totalEventCount) !== void 0) {
598
+ nextTotalEventCount = rev.totalEventCount + (isNewEvent ? 1 : 0);
599
+ } else if ((rev == null ? void 0 : rev.eventsComplete) === true) {
600
+ nextTotalEventCount = session.events.length;
601
+ }
602
+ }
603
+ setStorageRevisionMarker(session, {
604
+ marker: storageSession.updateTime.toISOString(),
605
+ recordedLastUpdateTime: session.lastUpdateTime,
606
+ unverifiedWrite: true,
607
+ eventsComplete: !callerMutatedLastUpdateTime && (rev == null ? void 0 : rev.eventsComplete) === true && !isStale,
608
+ totalEventCount: nextTotalEventCount
609
+ });
447
610
  });
611
+ if (sessionWasStale) {
612
+ try {
613
+ const storageEvents = await em.find(
614
+ StorageEvent,
615
+ {
616
+ appName: session.appName,
617
+ userId: session.userId,
618
+ sessionId: session.id
619
+ },
620
+ { orderBy: { timestamp: "ASC" } }
621
+ );
622
+ session.events = storageEvents.map((se) => se.eventData);
623
+ upsertSessionEvent(session, event);
624
+ const lastRev = getStorageRevisionMarker(session);
625
+ if (lastRev) {
626
+ setStorageRevisionMarker(session, {
627
+ ...lastRev,
628
+ eventsComplete: true,
629
+ totalEventCount: session.events.length
630
+ });
631
+ }
632
+ } catch (e) {
633
+ const message = e instanceof Error ? e.message : String(e);
634
+ logger.warn(
635
+ `Failed to reload events for stale session ${session.id} after appendEvent; the event was persisted but session.events may be missing concurrent appends: ${message}`
636
+ );
637
+ }
638
+ }
448
639
  return event;
449
640
  }
450
641
  };
@@ -452,5 +643,7 @@ __name(_DatabaseSessionService, "DatabaseSessionService");
452
643
  let DatabaseSessionService = _DatabaseSessionService;
453
644
  export {
454
645
  DatabaseSessionService,
455
- isDatabaseConnectionString
646
+ StaleSessionError2 as StaleSessionError,
647
+ isDatabaseConnectionString,
648
+ isStaleSessionError
456
649
  };
@@ -300,8 +300,77 @@ async function getConnectionOptionsFromUri(uri) {
300
300
  }
301
301
  __name(getConnectionOptionsFromUri, "getConnectionOptionsFromUri");
302
302
  async function ensureDatabaseCreated(orm) {
303
+ var _a;
303
304
  await orm.schema.ensureDatabase();
304
- await orm.schema.update({ safe: true });
305
+ const entityMetadata = [...orm.getMetadata().getAll().values()].filter(
306
+ (meta) => !meta.embeddable && !meta.virtual && !meta.view
307
+ );
308
+ if (entityMetadata.length === 0) {
309
+ return;
310
+ }
311
+ const platform = orm.driver.getPlatform();
312
+ const schemaHelper = platform.getSchemaHelper();
313
+ if (typeof (schemaHelper == null ? void 0 : schemaHelper.getAllTables) !== "function") {
314
+ await orm.schema.create();
315
+ return;
316
+ }
317
+ const connection = orm.driver.getConnection();
318
+ const defaultSchema = platform.getDefaultSchemaName();
319
+ const configSchema = orm.config.get("schema");
320
+ const dbName = orm.config.get("dbName");
321
+ const isCurrentSchema = /* @__PURE__ */ __name((schemaName) => !schemaName || schemaName === defaultSchema || defaultSchema === void 0 && schemaName === dbName, "isCurrentSchema");
322
+ const tableKey = /* @__PURE__ */ __name((tableName, schemaName) => {
323
+ const schemaPart = !schemaName || isCurrentSchema(schemaName) ? "" : schemaName;
324
+ return `${schemaPart}.${tableName}`.toLowerCase();
325
+ }, "tableKey");
326
+ const listedTables = await schemaHelper.getAllTables(connection);
327
+ const listedTableKeys = new Set(
328
+ listedTables.map((table) => tableKey(table.table_name, table.schema_name))
329
+ );
330
+ const seenTableKeys = /* @__PURE__ */ new Set();
331
+ const existingTableNames = [];
332
+ let missingCount = 0;
333
+ for (const meta of entityMetadata) {
334
+ const schemaName = (_a = meta.schema) != null ? _a : configSchema;
335
+ const key = tableKey(meta.tableName, schemaName);
336
+ if (seenTableKeys.has(key)) {
337
+ continue;
338
+ }
339
+ seenTableKeys.add(key);
340
+ let exists = listedTableKeys.has(key);
341
+ if (!exists && defaultSchema === void 0 && !isCurrentSchema(schemaName) && typeof schemaHelper.tableExists === "function") {
342
+ exists = await schemaHelper.tableExists(
343
+ connection,
344
+ meta.tableName,
345
+ schemaName
346
+ );
347
+ }
348
+ if (exists) {
349
+ existingTableNames.push(
350
+ schemaName && schemaName !== defaultSchema ? `${schemaName}.${meta.tableName}` : meta.tableName
351
+ );
352
+ } else {
353
+ missingCount++;
354
+ }
355
+ }
356
+ if (missingCount === 0) {
357
+ return;
358
+ }
359
+ if (existingTableNames.length === 0) {
360
+ await orm.schema.create();
361
+ return;
362
+ }
363
+ const schemaGenConfig = orm.config.get("schemaGenerator");
364
+ const previousSkipTables = schemaGenConfig.skipTables;
365
+ schemaGenConfig.skipTables = [
366
+ ...previousSkipTables != null ? previousSkipTables : [],
367
+ ...existingTableNames
368
+ ];
369
+ try {
370
+ await orm.schema.create();
371
+ } finally {
372
+ schemaGenConfig.skipTables = previousSkipTables;
373
+ }
305
374
  }
306
375
  __name(ensureDatabaseCreated, "ensureDatabaseCreated");
307
376
  async function validateDatabaseSchemaVersion(orm) {
@@ -65,6 +65,7 @@ const storageAppStateSchema = new EntitySchema({
65
65
  state: { type: "json" },
66
66
  updateTime: {
67
67
  type: "datetime",
68
+ length: EVENT_TIMESTAMP_PRECISION,
68
69
  fieldName: "update_time",
69
70
  onCreate: /* @__PURE__ */ __name(() => /* @__PURE__ */ new Date(), "onCreate"),
70
71
  onUpdate: /* @__PURE__ */ __name(() => /* @__PURE__ */ new Date(), "onUpdate")
@@ -88,6 +89,7 @@ const storageUserStateSchema = new EntitySchema({
88
89
  state: { type: "json" },
89
90
  updateTime: {
90
91
  type: "datetime",
92
+ length: EVENT_TIMESTAMP_PRECISION,
91
93
  fieldName: "update_time",
92
94
  onCreate: /* @__PURE__ */ __name(() => /* @__PURE__ */ new Date(), "onCreate"),
93
95
  onUpdate: /* @__PURE__ */ __name(() => /* @__PURE__ */ new Date(), "onUpdate")
@@ -113,11 +115,13 @@ const storageSessionSchema = new EntitySchema({
113
115
  state: { type: "json" },
114
116
  createTime: {
115
117
  type: "datetime",
118
+ length: EVENT_TIMESTAMP_PRECISION,
116
119
  fieldName: "create_time",
117
120
  onCreate: /* @__PURE__ */ __name(() => /* @__PURE__ */ new Date(), "onCreate")
118
121
  },
119
122
  updateTime: {
120
123
  type: "datetime",
124
+ length: EVENT_TIMESTAMP_PRECISION,
121
125
  fieldName: "update_time",
122
126
  onCreate: /* @__PURE__ */ __name(() => /* @__PURE__ */ new Date(), "onCreate")
123
127
  }
@@ -8,7 +8,7 @@ var __name = (target, value) => __defProp(target, "name", { value, configurable:
8
8
  * SPDX-License-Identifier: Apache-2.0
9
9
  */
10
10
  import { cloneDeep } from "lodash-es";
11
- import { randomUUID } from "../utils/env_aware_utils.js";
11
+ import { newId } from "../utils/id_provider.js";
12
12
  import { logger } from "../utils/logger.js";
13
13
  import {
14
14
  BaseSessionService,
@@ -49,7 +49,7 @@ const _InMemorySessionService = class _InMemorySessionService extends BaseSessio
49
49
  const session = createSession({
50
50
  // Surrounding whitespace is dropped so that a later lookup by the bare
51
51
  // id finds the session, and a blank id gets a generated one.
52
- id: (sessionId == null ? void 0 : sessionId.trim()) || randomUUID(),
52
+ id: (sessionId == null ? void 0 : sessionId.trim()) || newId(),
53
53
  appName,
54
54
  userId,
55
55
  state: filteredState,
@@ -0,0 +1,31 @@
1
+ import {createRequire as topLevelCreateRequire} from 'module';
2
+ const require = topLevelCreateRequire(import.meta.url);
3
+ var __defProp = Object.defineProperty;
4
+ var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
5
+ /**
6
+ * @license
7
+ * Copyright 2026 Google LLC
8
+ * SPDX-License-Identifier: Apache-2.0
9
+ */
10
+ var _a, _b;
11
+ const STALE_SESSION_ERROR_SIGNATURE_SYMBOL = /* @__PURE__ */ Symbol.for(
12
+ "google.adk.staleSessionError"
13
+ );
14
+ const _StaleSessionError = class _StaleSessionError extends (_b = Error, _a = STALE_SESSION_ERROR_SIGNATURE_SYMBOL, _b) {
15
+ constructor(message) {
16
+ super(message);
17
+ this[_a] = true;
18
+ this.name = "StaleSessionError";
19
+ Object.setPrototypeOf(this, _StaleSessionError.prototype);
20
+ }
21
+ };
22
+ __name(_StaleSessionError, "StaleSessionError");
23
+ let StaleSessionError = _StaleSessionError;
24
+ function isStaleSessionError(obj) {
25
+ return typeof obj === "object" && obj !== null && (STALE_SESSION_ERROR_SIGNATURE_SYMBOL in obj || obj instanceof Error && obj.name === "StaleSessionError");
26
+ }
27
+ __name(isStaleSessionError, "isStaleSessionError");
28
+ export {
29
+ StaleSessionError,
30
+ isStaleSessionError
31
+ };
@@ -19,6 +19,7 @@ var __decorateClass = (decorators, target, key, kind) => {
19
19
  import { Client } from "@google-cloud/vertexai";
20
20
  import { isCompactedEvent } from "../events/compacted_event.js";
21
21
  import { experimental } from "../utils/experimental.js";
22
+ import { formatError } from "../utils/error_utils.js";
22
23
  import { logger } from "../utils/logger.js";
23
24
  import {
24
25
  EXPRESS_MODE_UNSUPPORTED_MESSAGE,
@@ -314,9 +315,16 @@ let VertexAiSessionService = class extends BaseSessionService {
314
315
  if (!session) {
315
316
  return;
316
317
  }
317
- await this.sessions.delete({
318
- name: `reasoningEngines/${reasoningEngineId}/sessions/${sessionId}`
319
- });
318
+ try {
319
+ await this.sessions.delete({
320
+ name: `reasoningEngines/${reasoningEngineId}/sessions/${sessionId}`
321
+ });
322
+ } catch (error) {
323
+ logger.error(
324
+ `Error deleting session ${sessionId}: ${formatError(error)}`
325
+ );
326
+ throw error;
327
+ }
320
328
  }
321
329
  async appendEvent({
322
330
  session,