@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
@@ -36,13 +36,18 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
36
36
  var database_session_service_exports = {};
37
37
  __export(database_session_service_exports, {
38
38
  DatabaseSessionService: () => DatabaseSessionService,
39
- isDatabaseConnectionString: () => isDatabaseConnectionString
39
+ StaleSessionError: () => import_stale_session_error2.StaleSessionError,
40
+ isDatabaseConnectionString: () => isDatabaseConnectionString,
41
+ isStaleSessionError: () => import_stale_session_error2.isStaleSessionError
40
42
  });
41
43
  module.exports = __toCommonJS(database_session_service_exports);
42
- var import_env_aware_utils = require("../utils/env_aware_utils.js");
44
+ var import_id_provider = require("../utils/id_provider.js");
45
+ var import_logger = require("../utils/logger.js");
43
46
  var import_base_session_service = require("./base_session_service.js");
44
47
  var import_session = require("./session.js");
48
+ var import_stale_session_error = require("./stale_session_error.js");
45
49
  var import_state = require("./state.js");
50
+ var import_stale_session_error2 = require("./stale_session_error.js");
46
51
  /**
47
52
  * @license
48
53
  * Copyright 2026 Google LLC
@@ -79,6 +84,84 @@ async function importMikroOrm() {
79
84
  } = operations);
80
85
  }
81
86
  __name(importMikroOrm, "importMikroOrm");
87
+ const STORAGE_UPDATE_MARKER_SYMBOL = /* @__PURE__ */ Symbol.for(
88
+ "google.adk.session.storageUpdateMarker"
89
+ );
90
+ function setStorageRevisionMarker(session, revision) {
91
+ Object.defineProperty(session, STORAGE_UPDATE_MARKER_SYMBOL, {
92
+ value: revision,
93
+ writable: true,
94
+ configurable: true,
95
+ enumerable: false
96
+ });
97
+ }
98
+ __name(setStorageRevisionMarker, "setStorageRevisionMarker");
99
+ function getStorageRevisionMarker(session) {
100
+ return session[STORAGE_UPDATE_MARKER_SYMBOL];
101
+ }
102
+ __name(getStorageRevisionMarker, "getStorageRevisionMarker");
103
+ const MAX_IN_QUERY_IDS = 500;
104
+ async function sessionMatchesStorageRevision(txEm, session, eventsComplete, totalEventCount) {
105
+ const sessionWhere = {
106
+ appName: session.appName,
107
+ userId: session.userId,
108
+ sessionId: session.id
109
+ };
110
+ const latestStorageEvent = await txEm.findOne(StorageEvent, sessionWhere, {
111
+ orderBy: { timestamp: "DESC", id: "DESC" }
112
+ });
113
+ if (session.events.length === 0) {
114
+ if (latestStorageEvent !== null) {
115
+ return false;
116
+ }
117
+ if (totalEventCount !== void 0 && totalEventCount !== 0) {
118
+ return false;
119
+ }
120
+ return true;
121
+ }
122
+ if ((latestStorageEvent == null ? void 0 : latestStorageEvent.id) !== session.events[session.events.length - 1].id) {
123
+ return false;
124
+ }
125
+ if (totalEventCount !== void 0) {
126
+ const totalStored = await txEm.count(StorageEvent, sessionWhere);
127
+ if (totalStored !== totalEventCount) {
128
+ return false;
129
+ }
130
+ }
131
+ const knownIds = session.events.map((e) => e.id);
132
+ if (knownIds.length <= MAX_IN_QUERY_IDS) {
133
+ const unknownEventWhere = {
134
+ ...sessionWhere,
135
+ id: { $nin: knownIds }
136
+ };
137
+ if (!eventsComplete) {
138
+ unknownEventWhere.timestamp = {
139
+ $gte: new Date(session.events[0].timestamp)
140
+ };
141
+ }
142
+ return await txEm.count(StorageEvent, unknownEventWhere) === 0;
143
+ }
144
+ const filter = { ...sessionWhere };
145
+ if (!eventsComplete) {
146
+ filter.timestamp = { $gte: new Date(session.events[0].timestamp) };
147
+ }
148
+ const storedEvents = await txEm.find(StorageEvent, filter, {
149
+ fields: ["id"]
150
+ });
151
+ const knownSet = new Set(knownIds);
152
+ for (const stored of storedEvents) {
153
+ if (!knownSet.has(stored.id)) {
154
+ return false;
155
+ }
156
+ }
157
+ return true;
158
+ }
159
+ __name(sessionMatchesStorageRevision, "sessionMatchesStorageRevision");
160
+ function formatDateTime(dateOrEpochMs) {
161
+ const date = typeof dateOrEpochMs === "number" ? new Date(dateOrEpochMs) : dateOrEpochMs;
162
+ return date.toISOString().replace("T", " ").replace("Z", "");
163
+ }
164
+ __name(formatDateTime, "formatDateTime");
82
165
  function isDatabaseConnectionString(uri) {
83
166
  if (!uri) {
84
167
  return false;
@@ -87,16 +170,31 @@ function isDatabaseConnectionString(uri) {
87
170
  }
88
171
  __name(isDatabaseConnectionString, "isDatabaseConnectionString");
89
172
  const _DatabaseSessionService = class _DatabaseSessionService extends import_base_session_service.BaseSessionService {
90
- constructor(connectionStringOrOptions) {
173
+ constructor(connectionStringOrOptions, options) {
174
+ var _a;
91
175
  super();
92
176
  this.initialized = false;
93
177
  if (typeof connectionStringOrOptions === "string") {
94
178
  this.connectionString = connectionStringOrOptions;
179
+ if (options) {
180
+ const { staleSession, ...mikroOptions } = options;
181
+ this.options = mikroOptions;
182
+ this.staleSession = staleSession != null ? staleSession : "reject";
183
+ } else {
184
+ this.staleSession = "reject";
185
+ }
95
186
  } else {
96
- if (!connectionStringOrOptions.driver) {
187
+ const { staleSession: firstStaleSession, ...firstMikroOptions } = connectionStringOrOptions;
188
+ const { staleSession: secondStaleSession, ...secondMikroOptions } = options != null ? options : {};
189
+ const mergedMikroOptions = {
190
+ ...firstMikroOptions,
191
+ ...secondMikroOptions
192
+ };
193
+ if (!mergedMikroOptions.driver) {
97
194
  throw new Error("Driver is required when passing options object.");
98
195
  }
99
- this.options = connectionStringOrOptions;
196
+ this.options = mergedMikroOptions;
197
+ this.staleSession = (_a = secondStaleSession != null ? secondStaleSession : firstStaleSession) != null ? _a : "reject";
100
198
  }
101
199
  }
102
200
  async init() {
@@ -104,7 +202,11 @@ const _DatabaseSessionService = class _DatabaseSessionService extends import_bas
104
202
  return;
105
203
  }
106
204
  await loadMikroOrm();
107
- const options = this.connectionString ? await getConnectionOptionsFromUri(this.connectionString) : { ...this.options, entities: ENTITIES };
205
+ const options = this.connectionString ? {
206
+ ...await getConnectionOptionsFromUri(this.connectionString),
207
+ ...this.options,
208
+ entities: ENTITIES
209
+ } : { ...this.options, entities: ENTITIES };
108
210
  this.options = options;
109
211
  this.orm = await MikroORM.init(options);
110
212
  await ensureDatabaseCreated(this.orm);
@@ -119,7 +221,7 @@ const _DatabaseSessionService = class _DatabaseSessionService extends import_bas
119
221
  }) {
120
222
  await this.init();
121
223
  const em = this.orm.em.fork();
122
- const id = sessionId || (0, import_env_aware_utils.randomUUID)();
224
+ const id = sessionId || (0, import_id_provider.newId)();
123
225
  const now = /* @__PURE__ */ new Date();
124
226
  const existing = await em.findOne(StorageSession, {
125
227
  id,
@@ -182,14 +284,22 @@ const _DatabaseSessionService = class _DatabaseSessionService extends import_bas
182
284
  userStateModel.state,
183
285
  sessionState
184
286
  );
185
- return (0, import_session.createSession)({
287
+ const session = (0, import_session.createSession)({
186
288
  id,
187
289
  appName,
188
290
  userId,
189
291
  state: mergedState,
190
292
  events: [],
191
- lastUpdateTime: storageSession.createTime.getTime()
293
+ lastUpdateTime: storageSession.updateTime.getTime()
294
+ });
295
+ setStorageRevisionMarker(session, {
296
+ marker: storageSession.updateTime.toISOString(),
297
+ recordedLastUpdateTime: session.lastUpdateTime,
298
+ unverifiedWrite: true,
299
+ eventsComplete: true,
300
+ totalEventCount: 0
192
301
  });
302
+ return session;
193
303
  }
194
304
  async getSession({
195
305
  appName,
@@ -230,7 +340,7 @@ const _DatabaseSessionService = class _DatabaseSessionService extends import_bas
230
340
  (userStateModel == null ? void 0 : userStateModel.state) || {},
231
341
  storageSession.state
232
342
  );
233
- return (0, import_session.createSession)({
343
+ const session = (0, import_session.createSession)({
234
344
  id: sessionId,
235
345
  appName,
236
346
  userId,
@@ -238,6 +348,16 @@ const _DatabaseSessionService = class _DatabaseSessionService extends import_bas
238
348
  events: storageEvents.map((se) => se.eventData),
239
349
  lastUpdateTime: storageSession.updateTime.getTime()
240
350
  });
351
+ const eventsComplete = (config == null ? void 0 : config.numRecentEvents) === void 0 && (config == null ? void 0 : config.afterTimestamp) === void 0;
352
+ const totalEventCount = eventsComplete ? session.events.length : await em.count(StorageEvent, { appName, userId, sessionId });
353
+ setStorageRevisionMarker(session, {
354
+ marker: storageSession.updateTime.toISOString(),
355
+ recordedLastUpdateTime: session.lastUpdateTime,
356
+ unverifiedWrite: false,
357
+ eventsComplete,
358
+ totalEventCount
359
+ });
360
+ return session;
241
361
  }
242
362
  async listSessions({
243
363
  appName,
@@ -250,7 +370,7 @@ const _DatabaseSessionService = class _DatabaseSessionService extends import_bas
250
370
  await this.init();
251
371
  const em = this.orm.em.fork();
252
372
  const where = { appName };
253
- if (userId) {
373
+ if (userId !== void 0) {
254
374
  where.userId = userId;
255
375
  }
256
376
  const orderBy = order === "asc" ? { updateTime: "ASC", id: "ASC" } : order === "desc" ? { updateTime: "DESC", id: "ASC" } : void 0;
@@ -299,7 +419,7 @@ const _DatabaseSessionService = class _DatabaseSessionService extends import_bas
299
419
  const appStateModel = await em.findOne(StorageAppState, { appName });
300
420
  const appState = (appStateModel == null ? void 0 : appStateModel.state) || {};
301
421
  const userStateMap = {};
302
- if (userId) {
422
+ if (userId !== void 0) {
303
423
  const u = await em.findOne(StorageUserState, { appName, userId });
304
424
  if (u) userStateMap[userId] = u.state;
305
425
  } else {
@@ -311,7 +431,7 @@ const _DatabaseSessionService = class _DatabaseSessionService extends import_bas
311
431
  const sessions = storageSessions.map((ss) => {
312
432
  const uState = userStateMap[ss.userId] || {};
313
433
  const merged = (0, import_base_session_service.mergeStates)(appState, uState, ss.state);
314
- return (0, import_session.createSession)({
434
+ const session = (0, import_session.createSession)({
315
435
  id: ss.id,
316
436
  appName: ss.appName,
317
437
  userId: ss.userId,
@@ -319,6 +439,13 @@ const _DatabaseSessionService = class _DatabaseSessionService extends import_bas
319
439
  events: [],
320
440
  lastUpdateTime: ss.updateTime.getTime()
321
441
  });
442
+ setStorageRevisionMarker(session, {
443
+ marker: ss.updateTime.toISOString(),
444
+ recordedLastUpdateTime: session.lastUpdateTime,
445
+ unverifiedWrite: false,
446
+ eventsComplete: false
447
+ });
448
+ return session;
322
449
  });
323
450
  return { sessions, ...paginationMeta };
324
451
  }
@@ -336,12 +463,15 @@ const _DatabaseSessionService = class _DatabaseSessionService extends import_bas
336
463
  session,
337
464
  event
338
465
  }) {
466
+ var _a, _b;
339
467
  await this.init();
340
468
  const em = this.orm.em.fork();
341
469
  if (event.partial) {
342
470
  return event;
343
471
  }
472
+ const stateDelta = (_b = (_a = event.actions) == null ? void 0 : _a.stateDelta) != null ? _b : {};
344
473
  const trimmedEvent = (0, import_base_session_service.trimTempDeltaState)(event);
474
+ let sessionWasStale = false;
345
475
  await em.transactional(async (txEm) => {
346
476
  const storageSession = await txEm.findOne(
347
477
  StorageSession,
@@ -355,6 +485,40 @@ const _DatabaseSessionService = class _DatabaseSessionService extends import_bas
355
485
  if (!storageSession) {
356
486
  throw new Error(`Session ${session.id} not found for appendEvent`);
357
487
  }
488
+ const storageUpdateTime = storageSession.updateTime.getTime();
489
+ const storageUpdateMarker = storageSession.updateTime.toISOString();
490
+ const rev = getStorageRevisionMarker(session);
491
+ const callerMutatedLastUpdateTime = rev !== void 0 && rev.recordedLastUpdateTime !== session.lastUpdateTime;
492
+ let isStale = false;
493
+ if (rev !== void 0 && !callerMutatedLastUpdateTime) {
494
+ if (rev.marker === storageUpdateMarker) {
495
+ session.lastUpdateTime = storageUpdateTime;
496
+ } else if (rev.unverifiedWrite && storageUpdateTime % 1e3 === 0 && Math.abs(storageUpdateTime - rev.recordedLastUpdateTime) < 1e3 && await sessionMatchesStorageRevision(
497
+ txEm,
498
+ session,
499
+ rev.eventsComplete,
500
+ rev.totalEventCount
501
+ )) {
502
+ session.lastUpdateTime = storageUpdateTime;
503
+ } else {
504
+ isStale = true;
505
+ }
506
+ } else if (rev !== void 0) {
507
+ isStale = storageUpdateTime > session.lastUpdateTime;
508
+ } else if (storageUpdateTime > session.lastUpdateTime) {
509
+ if (await sessionMatchesStorageRevision(txEm, session, false)) {
510
+ session.lastUpdateTime = storageUpdateTime;
511
+ } else {
512
+ isStale = true;
513
+ }
514
+ }
515
+ if (isStale) {
516
+ if (this.staleSession === "reject") {
517
+ 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.`;
518
+ throw new import_stale_session_error.StaleSessionError(message);
519
+ }
520
+ sessionWasStale = true;
521
+ }
358
522
  let appStateModel = await txEm.findOne(StorageAppState, {
359
523
  appName: session.appName
360
524
  });
@@ -378,24 +542,6 @@ const _DatabaseSessionService = class _DatabaseSessionService extends import_bas
378
542
  });
379
543
  txEm.persist(userStateModel);
380
544
  }
381
- if (storageSession.updateTime.getTime() > session.lastUpdateTime) {
382
- const events = await txEm.find(
383
- StorageEvent,
384
- {
385
- appName: session.appName,
386
- userId: session.userId,
387
- sessionId: session.id
388
- },
389
- { orderBy: { timestamp: "ASC" } }
390
- );
391
- const mergedState = (0, import_base_session_service.mergeStates)(
392
- appStateModel.state,
393
- userStateModel.state,
394
- storageSession.state
395
- );
396
- session.state = mergedState;
397
- session.events = events.map((e) => e.eventData);
398
- }
399
545
  if (event.actions && event.actions.stateDelta) {
400
546
  const appDelta = {};
401
547
  const userDelta = {};
@@ -448,15 +594,61 @@ const _DatabaseSessionService = class _DatabaseSessionService extends import_bas
448
594
  userStateModel.state,
449
595
  storageSession.state
450
596
  );
451
- session.state = newMergedState;
452
- const index = session.events.findIndex((e) => e.id === event.id);
453
- if (index >= 0) {
454
- session.events[index] = event;
455
- } else {
456
- session.events.push(event);
597
+ for (const source of [session.state, stateDelta]) {
598
+ for (const [key, value] of Object.entries(source)) {
599
+ if (key.startsWith(import_state.State.TEMP_PREFIX)) {
600
+ newMergedState[key] = value;
601
+ }
602
+ }
457
603
  }
604
+ session.state = newMergedState;
605
+ const isNewEvent = !existingStorageEvent;
606
+ (0, import_base_session_service.upsertSessionEvent)(session, event);
458
607
  session.lastUpdateTime = storageSession.updateTime.getTime();
608
+ let nextTotalEventCount;
609
+ if (!callerMutatedLastUpdateTime && !isStale) {
610
+ if ((rev == null ? void 0 : rev.totalEventCount) !== void 0) {
611
+ nextTotalEventCount = rev.totalEventCount + (isNewEvent ? 1 : 0);
612
+ } else if ((rev == null ? void 0 : rev.eventsComplete) === true) {
613
+ nextTotalEventCount = session.events.length;
614
+ }
615
+ }
616
+ setStorageRevisionMarker(session, {
617
+ marker: storageSession.updateTime.toISOString(),
618
+ recordedLastUpdateTime: session.lastUpdateTime,
619
+ unverifiedWrite: true,
620
+ eventsComplete: !callerMutatedLastUpdateTime && (rev == null ? void 0 : rev.eventsComplete) === true && !isStale,
621
+ totalEventCount: nextTotalEventCount
622
+ });
459
623
  });
624
+ if (sessionWasStale) {
625
+ try {
626
+ const storageEvents = await em.find(
627
+ StorageEvent,
628
+ {
629
+ appName: session.appName,
630
+ userId: session.userId,
631
+ sessionId: session.id
632
+ },
633
+ { orderBy: { timestamp: "ASC" } }
634
+ );
635
+ session.events = storageEvents.map((se) => se.eventData);
636
+ (0, import_base_session_service.upsertSessionEvent)(session, event);
637
+ const lastRev = getStorageRevisionMarker(session);
638
+ if (lastRev) {
639
+ setStorageRevisionMarker(session, {
640
+ ...lastRev,
641
+ eventsComplete: true,
642
+ totalEventCount: session.events.length
643
+ });
644
+ }
645
+ } catch (e) {
646
+ const message = e instanceof Error ? e.message : String(e);
647
+ import_logger.logger.warn(
648
+ `Failed to reload events for stale session ${session.id} after appendEvent; the event was persisted but session.events may be missing concurrent appends: ${message}`
649
+ );
650
+ }
651
+ }
460
652
  return event;
461
653
  }
462
654
  };
@@ -465,5 +657,7 @@ let DatabaseSessionService = _DatabaseSessionService;
465
657
  // Annotate the CommonJS export names for ESM import in node:
466
658
  0 && (module.exports = {
467
659
  DatabaseSessionService,
468
- isDatabaseConnectionString
660
+ StaleSessionError,
661
+ isDatabaseConnectionString,
662
+ isStaleSessionError
469
663
  });
@@ -312,8 +312,77 @@ async function getConnectionOptionsFromUri(uri) {
312
312
  }
313
313
  __name(getConnectionOptionsFromUri, "getConnectionOptionsFromUri");
314
314
  async function ensureDatabaseCreated(orm) {
315
+ var _a;
315
316
  await orm.schema.ensureDatabase();
316
- await orm.schema.update({ safe: true });
317
+ const entityMetadata = [...orm.getMetadata().getAll().values()].filter(
318
+ (meta) => !meta.embeddable && !meta.virtual && !meta.view
319
+ );
320
+ if (entityMetadata.length === 0) {
321
+ return;
322
+ }
323
+ const platform = orm.driver.getPlatform();
324
+ const schemaHelper = platform.getSchemaHelper();
325
+ if (typeof (schemaHelper == null ? void 0 : schemaHelper.getAllTables) !== "function") {
326
+ await orm.schema.create();
327
+ return;
328
+ }
329
+ const connection = orm.driver.getConnection();
330
+ const defaultSchema = platform.getDefaultSchemaName();
331
+ const configSchema = orm.config.get("schema");
332
+ const dbName = orm.config.get("dbName");
333
+ const isCurrentSchema = /* @__PURE__ */ __name((schemaName) => !schemaName || schemaName === defaultSchema || defaultSchema === void 0 && schemaName === dbName, "isCurrentSchema");
334
+ const tableKey = /* @__PURE__ */ __name((tableName, schemaName) => {
335
+ const schemaPart = !schemaName || isCurrentSchema(schemaName) ? "" : schemaName;
336
+ return `${schemaPart}.${tableName}`.toLowerCase();
337
+ }, "tableKey");
338
+ const listedTables = await schemaHelper.getAllTables(connection);
339
+ const listedTableKeys = new Set(
340
+ listedTables.map((table) => tableKey(table.table_name, table.schema_name))
341
+ );
342
+ const seenTableKeys = /* @__PURE__ */ new Set();
343
+ const existingTableNames = [];
344
+ let missingCount = 0;
345
+ for (const meta of entityMetadata) {
346
+ const schemaName = (_a = meta.schema) != null ? _a : configSchema;
347
+ const key = tableKey(meta.tableName, schemaName);
348
+ if (seenTableKeys.has(key)) {
349
+ continue;
350
+ }
351
+ seenTableKeys.add(key);
352
+ let exists = listedTableKeys.has(key);
353
+ if (!exists && defaultSchema === void 0 && !isCurrentSchema(schemaName) && typeof schemaHelper.tableExists === "function") {
354
+ exists = await schemaHelper.tableExists(
355
+ connection,
356
+ meta.tableName,
357
+ schemaName
358
+ );
359
+ }
360
+ if (exists) {
361
+ existingTableNames.push(
362
+ schemaName && schemaName !== defaultSchema ? `${schemaName}.${meta.tableName}` : meta.tableName
363
+ );
364
+ } else {
365
+ missingCount++;
366
+ }
367
+ }
368
+ if (missingCount === 0) {
369
+ return;
370
+ }
371
+ if (existingTableNames.length === 0) {
372
+ await orm.schema.create();
373
+ return;
374
+ }
375
+ const schemaGenConfig = orm.config.get("schemaGenerator");
376
+ const previousSkipTables = schemaGenConfig.skipTables;
377
+ schemaGenConfig.skipTables = [
378
+ ...previousSkipTables != null ? previousSkipTables : [],
379
+ ...existingTableNames
380
+ ];
381
+ try {
382
+ await orm.schema.create();
383
+ } finally {
384
+ schemaGenConfig.skipTables = previousSkipTables;
385
+ }
317
386
  }
318
387
  __name(ensureDatabaseCreated, "ensureDatabaseCreated");
319
388
  async function validateDatabaseSchemaVersion(orm) {
@@ -98,6 +98,7 @@ const storageAppStateSchema = new import_core.EntitySchema({
98
98
  state: { type: "json" },
99
99
  updateTime: {
100
100
  type: "datetime",
101
+ length: EVENT_TIMESTAMP_PRECISION,
101
102
  fieldName: "update_time",
102
103
  onCreate: /* @__PURE__ */ __name(() => /* @__PURE__ */ new Date(), "onCreate"),
103
104
  onUpdate: /* @__PURE__ */ __name(() => /* @__PURE__ */ new Date(), "onUpdate")
@@ -121,6 +122,7 @@ const storageUserStateSchema = new import_core.EntitySchema({
121
122
  state: { type: "json" },
122
123
  updateTime: {
123
124
  type: "datetime",
125
+ length: EVENT_TIMESTAMP_PRECISION,
124
126
  fieldName: "update_time",
125
127
  onCreate: /* @__PURE__ */ __name(() => /* @__PURE__ */ new Date(), "onCreate"),
126
128
  onUpdate: /* @__PURE__ */ __name(() => /* @__PURE__ */ new Date(), "onUpdate")
@@ -146,11 +148,13 @@ const storageSessionSchema = new import_core.EntitySchema({
146
148
  state: { type: "json" },
147
149
  createTime: {
148
150
  type: "datetime",
151
+ length: EVENT_TIMESTAMP_PRECISION,
149
152
  fieldName: "create_time",
150
153
  onCreate: /* @__PURE__ */ __name(() => /* @__PURE__ */ new Date(), "onCreate")
151
154
  },
152
155
  updateTime: {
153
156
  type: "datetime",
157
+ length: EVENT_TIMESTAMP_PRECISION,
154
158
  fieldName: "update_time",
155
159
  onCreate: /* @__PURE__ */ __name(() => /* @__PURE__ */ new Date(), "onCreate")
156
160
  }
@@ -30,7 +30,7 @@ __export(in_memory_session_service_exports, {
30
30
  });
31
31
  module.exports = __toCommonJS(in_memory_session_service_exports);
32
32
  var import_lodash_es = require("lodash-es");
33
- var import_env_aware_utils = require("../utils/env_aware_utils.js");
33
+ var import_id_provider = require("../utils/id_provider.js");
34
34
  var import_logger = require("../utils/logger.js");
35
35
  var import_base_session_service = require("./base_session_service.js");
36
36
  var import_session = require("./session.js");
@@ -72,7 +72,7 @@ const _InMemorySessionService = class _InMemorySessionService extends import_bas
72
72
  const session = (0, import_session.createSession)({
73
73
  // Surrounding whitespace is dropped so that a later lookup by the bare
74
74
  // id finds the session, and a blank id gets a generated one.
75
- id: (sessionId == null ? void 0 : sessionId.trim()) || (0, import_env_aware_utils.randomUUID)(),
75
+ id: (sessionId == null ? void 0 : sessionId.trim()) || (0, import_id_provider.newId)(),
76
76
  appName,
77
77
  userId,
78
78
  state: filteredState,
@@ -0,0 +1,59 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2026 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+
7
+ "use strict";
8
+ var __defProp = Object.defineProperty;
9
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
10
+ var __getOwnPropNames = Object.getOwnPropertyNames;
11
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
12
+ var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
13
+ var __export = (target, all) => {
14
+ for (var name in all)
15
+ __defProp(target, name, { get: all[name], enumerable: true });
16
+ };
17
+ var __copyProps = (to, from, except, desc) => {
18
+ if (from && typeof from === "object" || typeof from === "function") {
19
+ for (let key of __getOwnPropNames(from))
20
+ if (!__hasOwnProp.call(to, key) && key !== except)
21
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
22
+ }
23
+ return to;
24
+ };
25
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
26
+ var stale_session_error_exports = {};
27
+ __export(stale_session_error_exports, {
28
+ StaleSessionError: () => StaleSessionError,
29
+ isStaleSessionError: () => isStaleSessionError
30
+ });
31
+ module.exports = __toCommonJS(stale_session_error_exports);
32
+ /**
33
+ * @license
34
+ * Copyright 2026 Google LLC
35
+ * SPDX-License-Identifier: Apache-2.0
36
+ */
37
+ var _a, _b;
38
+ const STALE_SESSION_ERROR_SIGNATURE_SYMBOL = /* @__PURE__ */ Symbol.for(
39
+ "google.adk.staleSessionError"
40
+ );
41
+ const _StaleSessionError = class _StaleSessionError extends (_b = Error, _a = STALE_SESSION_ERROR_SIGNATURE_SYMBOL, _b) {
42
+ constructor(message) {
43
+ super(message);
44
+ this[_a] = true;
45
+ this.name = "StaleSessionError";
46
+ Object.setPrototypeOf(this, _StaleSessionError.prototype);
47
+ }
48
+ };
49
+ __name(_StaleSessionError, "StaleSessionError");
50
+ let StaleSessionError = _StaleSessionError;
51
+ function isStaleSessionError(obj) {
52
+ return typeof obj === "object" && obj !== null && (STALE_SESSION_ERROR_SIGNATURE_SYMBOL in obj || obj instanceof Error && obj.name === "StaleSessionError");
53
+ }
54
+ __name(isStaleSessionError, "isStaleSessionError");
55
+ // Annotate the CommonJS export names for ESM import in node:
56
+ 0 && (module.exports = {
57
+ StaleSessionError,
58
+ isStaleSessionError
59
+ });
@@ -41,6 +41,7 @@ module.exports = __toCommonJS(vertex_ai_session_service_exports);
41
41
  var import_vertexai = require("@google-cloud/vertexai");
42
42
  var import_compacted_event = require("../events/compacted_event.js");
43
43
  var import_experimental = require("../utils/experimental.js");
44
+ var import_error_utils = require("../utils/error_utils.js");
44
45
  var import_logger = require("../utils/logger.js");
45
46
  var import_vertex_ai_utils = require("../utils/vertex_ai_utils.js");
46
47
  var import_partial_copy = require("../utils/partial_copy.js");
@@ -335,9 +336,16 @@ let VertexAiSessionService = class extends import_base_session_service.BaseSessi
335
336
  if (!session) {
336
337
  return;
337
338
  }
338
- await this.sessions.delete({
339
- name: `reasoningEngines/${reasoningEngineId}/sessions/${sessionId}`
340
- });
339
+ try {
340
+ await this.sessions.delete({
341
+ name: `reasoningEngines/${reasoningEngineId}/sessions/${sessionId}`
342
+ });
343
+ } catch (error) {
344
+ import_logger.logger.error(
345
+ `Error deleting session ${sessionId}: ${(0, import_error_utils.formatError)(error)}`
346
+ );
347
+ throw error;
348
+ }
341
349
  }
342
350
  async appendEvent({
343
351
  session,