@google/adk 2.2.1 → 2.4.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 (298) hide show
  1. package/dist/cjs/a2a/a2a_remote_agent.js +4 -1
  2. package/dist/cjs/a2a/agent_card.js +102 -26
  3. package/dist/cjs/a2a/agent_to_a2a.js +1 -1
  4. package/dist/cjs/agents/agent_engine_client.js +172 -0
  5. package/dist/cjs/agents/base_agent.js +20 -4
  6. package/dist/cjs/agents/functions.js +227 -25
  7. package/dist/cjs/agents/instructions.js +6 -2
  8. package/dist/cjs/agents/invocation_context.js +26 -4
  9. package/dist/cjs/agents/langgraph_agent.js +152 -0
  10. package/dist/cjs/agents/llm_agent.js +194 -107
  11. package/dist/cjs/agents/processors/basic_llm_request_processor.js +1 -1
  12. package/dist/cjs/agents/processors/code_execution_request_processor.js +18 -6
  13. package/dist/cjs/agents/processors/content_processor_utils.js +38 -10
  14. package/dist/cjs/agents/processors/content_request_processor.js +34 -2
  15. package/dist/cjs/agents/processors/instructions_llm_request_processor.js +1 -1
  16. package/dist/cjs/agents/processors/nl_planning_processor.js +12 -3
  17. package/dist/cjs/artifacts/in_memory_artifact_service.js +14 -0
  18. package/dist/cjs/auth/auth_handler.js +37 -5
  19. package/dist/cjs/auth/auth_schemes.js +9 -0
  20. package/dist/cjs/cli/cli_eval.js +532 -0
  21. package/dist/cjs/cli/utils/envs.js +116 -0
  22. package/dist/cjs/cli/utils/evals.js +137 -0
  23. package/dist/cjs/cli/utils/logs.js +150 -0
  24. package/dist/cjs/code_executors/agent_engine_sandbox_code_executor.js +7 -2
  25. package/dist/cjs/code_executors/code_execution_utils.js +48 -16
  26. package/dist/cjs/code_executors/code_executor_context.js +6 -2
  27. package/dist/cjs/code_executors/container_code_executor.js +27 -16
  28. package/dist/cjs/code_executors/unsafe_local_code_executor.js +6 -1
  29. package/dist/cjs/common.js +61 -0
  30. package/dist/cjs/context/summarizers/llm_summarizer.js +12 -10
  31. package/dist/cjs/context/token_based_context_compactor.js +2 -1
  32. package/dist/cjs/errors/input_validation_error.js +3 -2
  33. package/dist/cjs/events/event.js +4 -2
  34. package/dist/cjs/examples/example_util.js +23 -2
  35. package/dist/cjs/flows/llm_flows/audio_transcriber.js +170 -0
  36. package/dist/cjs/index.js +104 -1
  37. package/dist/cjs/integrations/agent_registry/helpers.js +1 -1
  38. package/dist/cjs/models/gemini_llm_connection.js +16 -8
  39. package/dist/cjs/models/google_llm.js +13 -16
  40. package/dist/cjs/models/llm_response.js +9 -1
  41. package/dist/cjs/models/registry.js +1 -1
  42. package/dist/cjs/models/routed_llm.js +9 -8
  43. package/dist/cjs/planners/plan_re_act_planner.js +1 -1
  44. package/dist/cjs/plugins/base_plugin.js +13 -23
  45. package/dist/cjs/runner/in_memory_runner.js +6 -11
  46. package/dist/cjs/runner/runner.js +105 -33
  47. package/dist/cjs/sessions/base_session_service.js +14 -8
  48. package/dist/cjs/sessions/database_session_service.js +50 -28
  49. package/dist/cjs/sessions/db/operations.js +1 -1
  50. package/dist/cjs/sessions/in_memory_session_service.js +3 -1
  51. package/dist/cjs/sessions/stale_session_error.js +59 -0
  52. package/dist/cjs/sessions/state.js +8 -4
  53. package/dist/cjs/sessions/vertex_ai_session_service.js +34 -15
  54. package/dist/cjs/skills/loader.js +52 -18
  55. package/dist/cjs/telemetry/setup.js +0 -1
  56. package/dist/cjs/telemetry/tracing.js +147 -73
  57. package/dist/cjs/tools/agent_tool.js +44 -0
  58. package/dist/cjs/tools/apihub_tool/apihub_toolset.js +137 -0
  59. package/dist/cjs/tools/apihub_tool/clients/apihub_client.js +272 -0
  60. package/dist/cjs/tools/apihub_tool/clients/secret_client.js +148 -0
  61. package/dist/cjs/tools/apihub_tool/clients/service_account.js +48 -0
  62. package/dist/cjs/tools/application_integration_tool/application_integration_toolset.js +263 -0
  63. package/dist/cjs/tools/application_integration_tool/clients/cloud_request.js +133 -0
  64. package/dist/cjs/tools/application_integration_tool/clients/connections_client.js +671 -0
  65. package/dist/cjs/tools/application_integration_tool/clients/integration_client.js +223 -0
  66. package/dist/cjs/tools/application_integration_tool/integration_connector_tool.js +184 -0
  67. package/dist/cjs/tools/example_tool.js +10 -0
  68. package/dist/cjs/tools/function_tool.js +319 -0
  69. package/dist/cjs/tools/google_api_tool/google_api_tool.js +100 -0
  70. package/dist/cjs/tools/google_api_tool/google_api_toolset.js +173 -0
  71. package/dist/cjs/tools/google_api_tool/google_api_toolsets.js +124 -0
  72. package/dist/cjs/tools/google_api_tool/googleapi_to_openapi_converter.js +440 -0
  73. package/dist/cjs/tools/google_api_tool/index.js +61 -0
  74. package/dist/cjs/tools/load_artifacts_tool.js +12 -6
  75. package/dist/cjs/tools/load_memory_tool.js +12 -10
  76. package/dist/cjs/tools/mcp/index.js +12 -0
  77. package/dist/cjs/tools/mcp/mcp_session_manager.js +25 -0
  78. package/dist/cjs/tools/mcp/mcp_toolset.js +1 -14
  79. package/dist/cjs/tools/openapi_tool/auth/auth_helpers.js +1 -2
  80. package/dist/cjs/tools/openapi_tool/auth/credential_exchangers/auto_auth_credential_exchanger.js +46 -2
  81. package/dist/cjs/tools/openapi_tool/auth/credential_exchangers/oauth2_exchanger.js +4 -3
  82. package/dist/cjs/tools/openapi_tool/auth/credential_exchangers/service_account_exchanger.js +94 -10
  83. package/dist/cjs/tools/openapi_tool/openapi_spec_parser/openapi_spec_parser.js +20 -6
  84. package/dist/cjs/tools/openapi_tool/openapi_spec_parser/operation_parser.js +17 -6
  85. package/dist/cjs/tools/openapi_tool/openapi_spec_parser/tool_auth_handler.js +14 -2
  86. package/dist/cjs/tools/openapi_tool/openapi_toolset.js +7 -13
  87. package/dist/cjs/tools/openapi_tool/rest_api_tool.js +17 -1
  88. package/dist/cjs/tools/retrieval/base_retrieval_tool.js +18 -3
  89. package/dist/cjs/tools/toolbox_toolset.js +174 -0
  90. package/dist/cjs/tools/webmcp/webmcp_toolset.js +1 -14
  91. package/dist/cjs/utils/client_labels.js +19 -2
  92. package/dist/cjs/utils/env_aware_utils.js +6 -8
  93. package/dist/cjs/utils/error_utils.js +11 -11
  94. package/dist/cjs/utils/failover_utils.js +1 -1
  95. package/dist/cjs/utils/file_extension_utils.js +11 -0
  96. package/dist/cjs/utils/file_utils.js +2 -24
  97. package/dist/cjs/utils/gemini_schema_util.js +28 -7
  98. package/dist/cjs/utils/json_utils.js +49 -0
  99. package/dist/cjs/utils/live_connection_utils.js +4 -5
  100. package/dist/cjs/utils/logger_node.js +11 -1
  101. package/dist/cjs/utils/object_notation_utils.js +6 -3
  102. package/dist/cjs/utils/output_schema_utils.js +5 -2
  103. package/dist/cjs/utils/streaming_utils.js +12 -12
  104. package/dist/cjs/utils/task.js +1 -1
  105. package/dist/cjs/version.js +1 -1
  106. package/dist/esm/a2a/a2a_remote_agent.js +4 -1
  107. package/dist/esm/a2a/agent_card.js +103 -27
  108. package/dist/esm/a2a/agent_to_a2a.js +5 -2
  109. package/dist/esm/agents/agent_engine_client.js +144 -0
  110. package/dist/esm/agents/base_agent.js +20 -4
  111. package/dist/esm/agents/functions.js +226 -25
  112. package/dist/esm/agents/instructions.js +6 -2
  113. package/dist/esm/agents/invocation_context.js +24 -4
  114. package/dist/esm/agents/langgraph_agent.js +123 -0
  115. package/dist/esm/agents/llm_agent.js +204 -110
  116. package/dist/esm/agents/processors/basic_llm_request_processor.js +1 -1
  117. package/dist/esm/agents/processors/code_execution_request_processor.js +21 -8
  118. package/dist/esm/agents/processors/content_processor_utils.js +38 -10
  119. package/dist/esm/agents/processors/content_request_processor.js +34 -2
  120. package/dist/esm/agents/processors/instructions_llm_request_processor.js +1 -1
  121. package/dist/esm/agents/processors/nl_planning_processor.js +12 -3
  122. package/dist/esm/artifacts/in_memory_artifact_service.js +14 -0
  123. package/dist/esm/auth/auth_handler.js +37 -5
  124. package/dist/esm/auth/auth_schemes.js +8 -0
  125. package/dist/esm/cli/cli_eval.js +510 -0
  126. package/dist/esm/cli/utils/envs.js +78 -0
  127. package/dist/esm/cli/utils/evals.js +109 -0
  128. package/dist/esm/cli/utils/logs.js +111 -0
  129. package/dist/esm/code_executors/agent_engine_sandbox_code_executor.js +7 -2
  130. package/dist/esm/code_executors/code_execution_utils.js +46 -16
  131. package/dist/esm/code_executors/code_executor_context.js +5 -2
  132. package/dist/esm/code_executors/container_code_executor.js +27 -16
  133. package/dist/esm/code_executors/unsafe_local_code_executor.js +6 -1
  134. package/dist/esm/common.js +65 -4
  135. package/dist/esm/context/summarizers/llm_summarizer.js +12 -10
  136. package/dist/esm/context/token_based_context_compactor.js +2 -1
  137. package/dist/esm/errors/input_validation_error.js +3 -2
  138. package/dist/esm/events/event.js +4 -2
  139. package/dist/esm/examples/example_util.js +21 -1
  140. package/dist/esm/flows/llm_flows/audio_transcriber.js +142 -0
  141. package/dist/esm/index.js +114 -2
  142. package/dist/esm/integrations/agent_registry/helpers.js +1 -1
  143. package/dist/esm/models/gemini_llm_connection.js +16 -8
  144. package/dist/esm/models/google_llm.js +14 -17
  145. package/dist/esm/models/llm_response.js +9 -1
  146. package/dist/esm/models/registry.js +1 -1
  147. package/dist/esm/models/routed_llm.js +9 -8
  148. package/dist/esm/planners/plan_re_act_planner.js +1 -1
  149. package/dist/esm/plugins/base_plugin.js +13 -23
  150. package/dist/esm/runner/in_memory_runner.js +6 -11
  151. package/dist/esm/runner/runner.js +105 -33
  152. package/dist/esm/sessions/base_session_service.js +12 -7
  153. package/dist/esm/sessions/database_session_service.js +49 -28
  154. package/dist/esm/sessions/db/operations.js +1 -1
  155. package/dist/esm/sessions/in_memory_session_service.js +3 -1
  156. package/dist/esm/sessions/stale_session_error.js +31 -0
  157. package/dist/esm/sessions/state.js +8 -4
  158. package/dist/esm/sessions/vertex_ai_session_service.js +34 -15
  159. package/dist/esm/skills/loader.js +51 -17
  160. package/dist/esm/telemetry/setup.js +1 -2
  161. package/dist/esm/telemetry/tracing.js +151 -74
  162. package/dist/esm/tools/agent_tool.js +44 -0
  163. package/dist/esm/tools/apihub_tool/apihub_toolset.js +101 -0
  164. package/dist/esm/tools/apihub_tool/clients/apihub_client.js +244 -0
  165. package/dist/esm/tools/apihub_tool/clients/secret_client.js +132 -0
  166. package/dist/esm/tools/apihub_tool/clients/service_account.js +21 -0
  167. package/dist/esm/tools/application_integration_tool/application_integration_toolset.js +245 -0
  168. package/dist/esm/tools/application_integration_tool/clients/cloud_request.js +103 -0
  169. package/dist/esm/tools/application_integration_tool/clients/connections_client.js +629 -0
  170. package/dist/esm/tools/application_integration_tool/clients/integration_client.js +219 -0
  171. package/dist/esm/tools/application_integration_tool/integration_connector_tool.js +158 -0
  172. package/dist/esm/tools/example_tool.js +13 -1
  173. package/dist/esm/tools/function_tool.js +316 -0
  174. package/dist/esm/tools/google_api_tool/google_api_tool.js +73 -0
  175. package/dist/esm/tools/google_api_tool/google_api_toolset.js +146 -0
  176. package/dist/esm/tools/google_api_tool/google_api_toolsets.js +94 -0
  177. package/dist/esm/tools/google_api_tool/googleapi_to_openapi_converter.js +393 -0
  178. package/dist/esm/tools/google_api_tool/index.js +31 -0
  179. package/dist/esm/tools/load_artifacts_tool.js +10 -5
  180. package/dist/esm/tools/load_memory_tool.js +12 -10
  181. package/dist/esm/tools/mcp/index.js +6 -0
  182. package/dist/esm/tools/mcp/mcp_session_manager.js +25 -0
  183. package/dist/esm/tools/mcp/mcp_toolset.js +1 -14
  184. package/dist/esm/tools/openapi_tool/auth/auth_helpers.js +1 -2
  185. package/dist/esm/tools/openapi_tool/auth/credential_exchangers/auto_auth_credential_exchanger.js +50 -3
  186. package/dist/esm/tools/openapi_tool/auth/credential_exchangers/oauth2_exchanger.js +4 -3
  187. package/dist/esm/tools/openapi_tool/auth/credential_exchangers/service_account_exchanger.js +94 -10
  188. package/dist/esm/tools/openapi_tool/openapi_spec_parser/openapi_spec_parser.js +20 -6
  189. package/dist/esm/tools/openapi_tool/openapi_spec_parser/operation_parser.js +17 -6
  190. package/dist/esm/tools/openapi_tool/openapi_spec_parser/tool_auth_handler.js +15 -2
  191. package/dist/esm/tools/openapi_tool/openapi_toolset.js +6 -12
  192. package/dist/esm/tools/openapi_tool/rest_api_tool.js +17 -1
  193. package/dist/esm/tools/retrieval/base_retrieval_tool.js +16 -2
  194. package/dist/esm/tools/toolbox_toolset.js +148 -0
  195. package/dist/esm/tools/webmcp/webmcp_toolset.js +1 -14
  196. package/dist/esm/utils/client_labels.js +19 -2
  197. package/dist/esm/utils/env_aware_utils.js +6 -8
  198. package/dist/esm/utils/error_utils.js +9 -10
  199. package/dist/esm/utils/failover_utils.js +1 -1
  200. package/dist/esm/utils/file_extension_utils.js +11 -0
  201. package/dist/esm/utils/file_utils.js +2 -23
  202. package/dist/esm/utils/gemini_schema_util.js +27 -7
  203. package/dist/esm/utils/json_utils.js +21 -0
  204. package/dist/esm/utils/live_connection_utils.js +4 -5
  205. package/dist/esm/utils/logger_node.js +11 -1
  206. package/dist/esm/utils/object_notation_utils.js +4 -2
  207. package/dist/esm/utils/output_schema_utils.js +5 -2
  208. package/dist/esm/utils/streaming_utils.js +11 -11
  209. package/dist/esm/utils/task.js +1 -1
  210. package/dist/esm/version.js +1 -1
  211. package/dist/types/a2a/a2a_remote_agent.d.ts +9 -0
  212. package/dist/types/a2a/agent_card.d.ts +44 -1
  213. package/dist/types/a2a/agent_to_a2a.d.ts +9 -0
  214. package/dist/types/a2a/index.d.ts +1 -0
  215. package/dist/types/agents/agent_engine_client.d.ts +37 -0
  216. package/dist/types/agents/base_agent.d.ts +12 -0
  217. package/dist/types/agents/functions.d.ts +33 -1
  218. package/dist/types/agents/invocation_context.d.ts +20 -1
  219. package/dist/types/agents/langgraph_agent.d.ts +153 -0
  220. package/dist/types/agents/llm_agent.d.ts +5 -1
  221. package/dist/types/agents/processors/content_processor_utils.d.ts +4 -2
  222. package/dist/types/agents/processors/nl_planning_processor.d.ts +2 -1
  223. package/dist/types/auth/auth_handler.d.ts +28 -1
  224. package/dist/types/auth/auth_schemes.d.ts +13 -0
  225. package/dist/types/cli/cli_eval.d.ts +173 -0
  226. package/dist/types/cli/utils/envs.d.ts +23 -0
  227. package/dist/types/cli/utils/evals.d.ts +47 -0
  228. package/dist/types/cli/utils/logs.d.ts +38 -0
  229. package/dist/types/code_executors/code_execution_utils.d.ts +39 -0
  230. package/dist/types/code_executors/code_executor_context.d.ts +1 -0
  231. package/dist/types/code_executors/container_code_executor.d.ts +17 -5
  232. package/dist/types/common.d.ts +24 -5
  233. package/dist/types/errors/input_validation_error.d.ts +2 -1
  234. package/dist/types/events/event.d.ts +4 -0
  235. package/dist/types/examples/example_util.d.ts +17 -0
  236. package/dist/types/flows/llm_flows/audio_transcriber.d.ts +85 -0
  237. package/dist/types/index.d.ts +19 -2
  238. package/dist/types/models/gemini_llm_connection.d.ts +6 -7
  239. package/dist/types/models/routed_llm.d.ts +1 -1
  240. package/dist/types/plugins/base_plugin.d.ts +0 -10
  241. package/dist/types/runner/in_memory_runner.d.ts +2 -1
  242. package/dist/types/runner/runner.d.ts +34 -0
  243. package/dist/types/sessions/base_session_service.d.ts +5 -0
  244. package/dist/types/sessions/database_session_service.d.ts +17 -1
  245. package/dist/types/sessions/stale_session_error.d.ts +21 -0
  246. package/dist/types/sessions/state.d.ts +5 -1
  247. package/dist/types/sessions/vertex_ai_session_service.d.ts +8 -0
  248. package/dist/types/skills/loader.d.ts +3 -2
  249. package/dist/types/skills/skill.d.ts +1 -1
  250. package/dist/types/telemetry/tracing.d.ts +20 -4
  251. package/dist/types/tools/apihub_tool/apihub_toolset.d.ts +115 -0
  252. package/dist/types/tools/apihub_tool/clients/apihub_client.d.ts +142 -0
  253. package/dist/types/tools/apihub_tool/clients/secret_client.d.ts +55 -0
  254. package/dist/types/tools/apihub_tool/clients/service_account.d.ts +11 -0
  255. package/dist/types/tools/application_integration_tool/application_integration_toolset.d.ts +109 -0
  256. package/dist/types/tools/application_integration_tool/clients/cloud_request.d.ts +53 -0
  257. package/dist/types/tools/application_integration_tool/clients/connections_client.d.ts +229 -0
  258. package/dist/types/tools/application_integration_tool/clients/integration_client.d.ts +72 -0
  259. package/dist/types/tools/application_integration_tool/integration_connector_tool.d.ts +70 -0
  260. package/dist/types/tools/base_toolset.d.ts +6 -5
  261. package/dist/types/tools/example_tool.d.ts +10 -0
  262. package/dist/types/tools/function_tool.d.ts +32 -0
  263. package/dist/types/tools/google_api_tool/google_api_tool.d.ts +37 -0
  264. package/dist/types/tools/google_api_tool/google_api_toolset.d.ts +55 -0
  265. package/dist/types/tools/google_api_tool/google_api_toolsets.d.ts +48 -0
  266. package/dist/types/tools/google_api_tool/googleapi_to_openapi_converter.d.ts +165 -0
  267. package/dist/types/tools/google_api_tool/index.d.ts +10 -0
  268. package/dist/types/tools/load_artifacts_tool.d.ts +14 -1
  269. package/dist/types/tools/load_memory_tool.d.ts +23 -1
  270. package/dist/types/tools/mcp/index.d.ts +3 -0
  271. package/dist/types/tools/mcp/mcp_session_manager.d.ts +34 -1
  272. package/dist/types/tools/mcp/mcp_toolset.d.ts +15 -0
  273. package/dist/types/tools/openapi_tool/auth/auth_helpers.d.ts +19 -0
  274. package/dist/types/tools/openapi_tool/auth/credential_exchangers/auto_auth_credential_exchanger.d.ts +18 -1
  275. package/dist/types/tools/openapi_tool/openapi_spec_parser/openapi_spec_parser.d.ts +12 -0
  276. package/dist/types/tools/openapi_tool/openapi_spec_parser/operation_parser.d.ts +8 -0
  277. package/dist/types/tools/openapi_tool/openapi_spec_parser/tool_auth_handler.d.ts +2 -1
  278. package/dist/types/tools/openapi_tool/openapi_toolset.d.ts +5 -0
  279. package/dist/types/tools/openapi_tool/rest_api_tool.d.ts +10 -0
  280. package/dist/types/tools/retrieval/base_retrieval_tool.d.ts +15 -0
  281. package/dist/types/tools/toolbox_toolset.d.ts +159 -0
  282. package/dist/types/utils/client_labels.d.ts +2 -1
  283. package/dist/types/utils/env_aware_utils.d.ts +18 -2
  284. package/dist/types/utils/error_utils.d.ts +7 -0
  285. package/dist/types/utils/file_utils.d.ts +6 -1
  286. package/dist/types/utils/gemini_schema_util.d.ts +9 -2
  287. package/dist/types/utils/json_utils.d.ts +11 -0
  288. package/dist/types/utils/object_notation_utils.d.ts +7 -0
  289. package/dist/types/utils/output_schema_utils.d.ts +3 -2
  290. package/dist/types/utils/simple_zod_to_json.d.ts +1 -2
  291. package/dist/types/utils/streaming_utils.d.ts +11 -4
  292. package/dist/types/version.d.ts +1 -1
  293. package/dist/web/index_web.js +117 -110
  294. package/dist/web/index_web.js.map +4 -4
  295. package/package.json +38 -26
  296. package/dist/cjs/models/gemini_continuation.js +0 -232
  297. package/dist/esm/models/gemini_continuation.js +0 -205
  298. package/dist/types/models/gemini_continuation.d.ts +0 -59
@@ -43,6 +43,7 @@ var import_run_config = require("../agents/run_config.js");
43
43
  var import_scoped_artifact_service = require("../artifacts/scoped_artifact_service.js");
44
44
  var import_session_artifact_service = require("../artifacts/session_artifact_service.js");
45
45
  var import_built_in_code_executor = require("../code_executors/built_in_code_executor.js");
46
+ var import_abort_events = require("../events/abort_events.js");
46
47
  var import_event = require("../events/event.js");
47
48
  var import_event_actions = require("../events/event_actions.js");
48
49
  var import_internal_metadata = require("../events/internal_metadata.js");
@@ -73,8 +74,8 @@ const _Runner = class _Runner {
73
74
  */
74
75
  constructor(input) {
75
76
  this[_a] = true;
76
- var _a2, _b, _c, _d, _e, _f, _g, _h, _i;
77
- const appName = (_b = (_a2 = input.app) == null ? void 0 : _a2.name) != null ? _b : input.appName;
77
+ var _a2, _b, _c, _d, _e, _f, _g, _h, _i, _j;
78
+ const appName = (_b = input.appName) != null ? _b : (_a2 = input.app) == null ? void 0 : _a2.name;
78
79
  const agent = (_d = (_c = input.app) == null ? void 0 : _c.rootAgent) != null ? _d : input.agent;
79
80
  if (!agent) {
80
81
  throw new Error(
@@ -91,6 +92,20 @@ const _Runner = class _Runner {
91
92
  this.memoryService = input.memoryService;
92
93
  this.credentialService = input.credentialService;
93
94
  this.resumabilityConfig = (_i = (_h = input.app) == null ? void 0 : _h.resumabilityConfig) != null ? _i : input.resumabilityConfig;
95
+ this.autoCreateSession = (_j = input.autoCreateSession) != null ? _j : false;
96
+ }
97
+ /**
98
+ * Looks the session up, creating it first when `autoCreateSession` is set.
99
+ *
100
+ * A runner with no `appName` cannot address a session, so it falls through to
101
+ * the plain lookup rather than creating one under an undefined app name.
102
+ */
103
+ async resolveSession(userId, sessionId) {
104
+ const key = { appName: this.appName, userId, sessionId };
105
+ if (this.autoCreateSession && this.appName) {
106
+ return this.sessionService.getOrCreateSession(key);
107
+ }
108
+ return this.sessionService.getSession(key);
94
109
  }
95
110
  /**
96
111
  * Runs the agent with a new, ephemeral session.
@@ -151,12 +166,8 @@ const _Runner = class _Runner {
151
166
  ctx,
152
167
  this,
153
168
  async function* () {
154
- var _a2, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k;
155
- const session = await this.sessionService.getSession({
156
- appName: this.appName,
157
- userId,
158
- sessionId
159
- });
169
+ var _a2, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k, _l;
170
+ const session = await this.resolveSession(userId, sessionId);
160
171
  if ((_a2 = params.abortSignal) == null ? void 0 : _a2.aborted) {
161
172
  return;
162
173
  }
@@ -267,35 +278,45 @@ const _Runner = class _Runner {
267
278
  }
268
279
  yield earlyExitEvent;
269
280
  } else {
270
- for await (const event of this.runRoot(invocationContext)) {
271
- if ((_h = params.abortSignal) == null ? void 0 : _h.aborted) {
272
- return;
273
- }
274
- const modifiedEvent = await this.pluginManager.runOnEventCallback({
275
- invocationContext,
276
- event
277
- });
278
- const outputEvent = modifiedEvent ? {
279
- ...withInternalMetadataOf(event, modifiedEvent),
280
- id: event.id,
281
- invocationId: event.invocationId,
282
- timestamp: event.timestamp,
283
- author: modifiedEvent.author || event.author,
284
- branch: (_i = modifiedEvent.branch) != null ? _i : event.branch
285
- } : event;
286
- if (!event.partial) {
287
- await this.sessionService.appendEvent({
288
- session,
289
- event: outputEvent
290
- });
281
+ let abortSealed = false;
282
+ const sealAbortedInvocation = /* @__PURE__ */ __name(() => {
283
+ abortSealed = true;
284
+ return this.synthesizeAbortEvents(invocationContext);
285
+ }, "sealAbortedInvocation");
286
+ try {
287
+ for await (const event of this.runRoot(invocationContext)) {
288
+ if ((_h = params.abortSignal) == null ? void 0 : _h.aborted) {
289
+ break;
290
+ }
291
+ const outputEvent = await this.processAndAppendEvent(
292
+ invocationContext,
293
+ event
294
+ );
295
+ if ((_i = params.abortSignal) == null ? void 0 : _i.aborted) {
296
+ break;
297
+ }
298
+ yield outputEvent;
291
299
  }
292
300
  if ((_j = params.abortSignal) == null ? void 0 : _j.aborted) {
301
+ for (const abortEvent of await sealAbortedInvocation()) {
302
+ yield abortEvent;
303
+ }
293
304
  return;
294
305
  }
295
- yield outputEvent;
306
+ } finally {
307
+ if (((_k = params.abortSignal) == null ? void 0 : _k.aborted) && !abortSealed) {
308
+ try {
309
+ await sealAbortedInvocation();
310
+ } catch (e) {
311
+ import_logger.logger.error(
312
+ `Failed to seal aborted invocation ${invocationContext.invocationId}.`,
313
+ e
314
+ );
315
+ }
316
+ }
296
317
  }
297
318
  await this.pluginManager.runAfterRunCallback({ invocationContext });
298
- if ((_k = params.abortSignal) == null ? void 0 : _k.aborted) {
319
+ if ((_l = params.abortSignal) == null ? void 0 : _l.aborted) {
299
320
  return;
300
321
  }
301
322
  }
@@ -327,6 +348,56 @@ const _Runner = class _Runner {
327
348
  }
328
349
  yield* (0, import_run_node_as_invocation.runNodeAsInvocation)(this.agent, invocationContext);
329
350
  }
351
+ /**
352
+ * Runs the on_event plugin callbacks on an event and appends the result to
353
+ * the session unless it is partial.
354
+ *
355
+ * @returns The event as streamed to the caller.
356
+ */
357
+ async processAndAppendEvent(invocationContext, event) {
358
+ var _a2;
359
+ const modifiedEvent = await this.pluginManager.runOnEventCallback({
360
+ invocationContext,
361
+ event
362
+ });
363
+ const outputEvent = modifiedEvent ? {
364
+ ...withInternalMetadataOf(event, modifiedEvent),
365
+ id: event.id,
366
+ invocationId: event.invocationId,
367
+ timestamp: event.timestamp,
368
+ author: modifiedEvent.author || event.author,
369
+ branch: (_a2 = modifiedEvent.branch) != null ? _a2 : event.branch
370
+ } : event;
371
+ if (!event.partial) {
372
+ await this.sessionService.appendEvent({
373
+ session: invocationContext.session,
374
+ event: outputEvent
375
+ });
376
+ }
377
+ return outputEvent;
378
+ }
379
+ /**
380
+ * Seals an aborted invocation in session history: answers its dangling
381
+ * function calls with error responses, or records a plain abort event when
382
+ * there is nothing to answer.
383
+ *
384
+ * @returns The synthetic events after plugin processing and persistence.
385
+ */
386
+ async synthesizeAbortEvents(invocationContext) {
387
+ const abortEvents = (0, import_abort_events.buildAbortEvents)({
388
+ events: invocationContext.session.events,
389
+ invocationId: invocationContext.invocationId,
390
+ rootAgentName: this.agent.name,
391
+ branch: invocationContext.branch
392
+ });
393
+ const outputEvents = [];
394
+ for (const event of abortEvents) {
395
+ outputEvents.push(
396
+ await this.processAndAppendEvent(invocationContext, event)
397
+ );
398
+ }
399
+ return outputEvents;
400
+ }
330
401
  /**
331
402
  * Saves artifacts from the message parts and replaces the inline data with
332
403
  * a file name placeholder and optional file reference.
@@ -573,7 +644,8 @@ function isLiveModelMediaEventWithInlineData(event) {
573
644
  }
574
645
  __name(isLiveModelMediaEventWithInlineData, "isLiveModelMediaEventWithInlineData");
575
646
  function determineAgentForResumption(session, rootAgent, resumabilityConfig) {
576
- const event = findEventByLastFunctionResponseId(session.events);
647
+ const lastEvent = session.events[session.events.length - 1];
648
+ const event = lastEvent && !(0, import_abort_events.isAbortEvent)(lastEvent) ? findEventByLastFunctionResponseId(session.events) : null;
577
649
  const isResumable = Boolean(resumabilityConfig == null ? void 0 : resumabilityConfig.isResumable);
578
650
  if (event && event.author && isResumable) {
579
651
  const conflictingAuthors = (0, import_functions.getConflictingFunctionResponseAuthors)(
@@ -597,7 +669,7 @@ function determineAgentForResumption(session, rootAgent, resumabilityConfig) {
597
669
  for (let i = session.events.length - 1; i >= 0; i--) {
598
670
  import_logger.logger.debug("event:", (0, import_redact_inline_data.stringifyWithRedactedInlineData)(session.events[i]));
599
671
  const event2 = session.events[i];
600
- if (event2.author === "user" || !event2.author) {
672
+ if (event2.author === "user" || !event2.author || (0, import_abort_events.isAbortEvent)(event2)) {
601
673
  continue;
602
674
  }
603
675
  if (event2.author === rootAgent.name) {
@@ -28,7 +28,8 @@ __export(base_session_service_exports, {
28
28
  BaseSessionService: () => BaseSessionService,
29
29
  mergeStates: () => mergeStates,
30
30
  trimTempDeltaState: () => trimTempDeltaState,
31
- trimTempState: () => trimTempState
31
+ trimTempState: () => trimTempState,
32
+ upsertSessionEvent: () => upsertSessionEvent
32
33
  });
33
34
  module.exports = __toCommonJS(base_session_service_exports);
34
35
  var import_lodash_es = require("lodash-es");
@@ -72,12 +73,7 @@ const _BaseSessionService = class _BaseSessionService {
72
73
  }
73
74
  event = trimTempDeltaState(event);
74
75
  this.updateSessionState({ session, event });
75
- const index = session.events.findIndex((e) => e.id === event.id);
76
- if (index >= 0) {
77
- session.events[index] = event;
78
- } else {
79
- session.events.push(event);
80
- }
76
+ upsertSessionEvent(session, event);
81
77
  return event;
82
78
  }
83
79
  /**
@@ -107,6 +103,15 @@ const _BaseSessionService = class _BaseSessionService {
107
103
  };
108
104
  __name(_BaseSessionService, "BaseSessionService");
109
105
  let BaseSessionService = _BaseSessionService;
106
+ function upsertSessionEvent(session, event) {
107
+ const index = session.events.findIndex((e) => e.id === event.id);
108
+ if (index >= 0) {
109
+ session.events[index] = event;
110
+ } else {
111
+ session.events.push(event);
112
+ }
113
+ }
114
+ __name(upsertSessionEvent, "upsertSessionEvent");
110
115
  function trimTempDeltaState(event) {
111
116
  if (!event.actions || !event.actions.stateDelta) {
112
117
  return event;
@@ -149,5 +154,6 @@ __name(mergeStates, "mergeStates");
149
154
  BaseSessionService,
150
155
  mergeStates,
151
156
  trimTempDeltaState,
152
- trimTempState
157
+ trimTempState,
158
+ upsertSessionEvent
153
159
  });
@@ -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
44
  var import_env_aware_utils = require("../utils/env_aware_utils.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,11 @@ async function importMikroOrm() {
79
84
  } = operations);
80
85
  }
81
86
  __name(importMikroOrm, "importMikroOrm");
87
+ function formatDateTime(dateOrEpochMs) {
88
+ const date = typeof dateOrEpochMs === "number" ? new Date(dateOrEpochMs) : dateOrEpochMs;
89
+ return date.toISOString().replace("T", " ").slice(0, 19);
90
+ }
91
+ __name(formatDateTime, "formatDateTime");
82
92
  function isDatabaseConnectionString(uri) {
83
93
  if (!uri) {
84
94
  return false;
@@ -87,16 +97,20 @@ function isDatabaseConnectionString(uri) {
87
97
  }
88
98
  __name(isDatabaseConnectionString, "isDatabaseConnectionString");
89
99
  const _DatabaseSessionService = class _DatabaseSessionService extends import_base_session_service.BaseSessionService {
90
- constructor(connectionStringOrOptions) {
100
+ constructor(connectionStringOrOptions, options) {
101
+ var _a;
91
102
  super();
92
103
  this.initialized = false;
93
104
  if (typeof connectionStringOrOptions === "string") {
94
105
  this.connectionString = connectionStringOrOptions;
106
+ this.staleSession = (_a = options == null ? void 0 : options.staleSession) != null ? _a : "reject";
95
107
  } else {
96
108
  if (!connectionStringOrOptions.driver) {
97
109
  throw new Error("Driver is required when passing options object.");
98
110
  }
99
- this.options = connectionStringOrOptions;
111
+ const { staleSession, ...mikroOptions } = connectionStringOrOptions;
112
+ this.options = mikroOptions;
113
+ this.staleSession = staleSession != null ? staleSession : "reject";
100
114
  }
101
115
  }
102
116
  async init() {
@@ -342,6 +356,7 @@ const _DatabaseSessionService = class _DatabaseSessionService extends import_bas
342
356
  return event;
343
357
  }
344
358
  const trimmedEvent = (0, import_base_session_service.trimTempDeltaState)(event);
359
+ let sessionWasStale = false;
345
360
  await em.transactional(async (txEm) => {
346
361
  const storageSession = await txEm.findOne(
347
362
  StorageSession,
@@ -355,6 +370,14 @@ const _DatabaseSessionService = class _DatabaseSessionService extends import_bas
355
370
  if (!storageSession) {
356
371
  throw new Error(`Session ${session.id} not found for appendEvent`);
357
372
  }
373
+ if (storageSession.updateTime.getTime() > session.lastUpdateTime) {
374
+ if (this.staleSession === "reject") {
375
+ throw new import_stale_session_error.StaleSessionError(
376
+ `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.`
377
+ );
378
+ }
379
+ sessionWasStale = true;
380
+ }
358
381
  let appStateModel = await txEm.findOne(StorageAppState, {
359
382
  appName: session.appName
360
383
  });
@@ -378,24 +401,6 @@ const _DatabaseSessionService = class _DatabaseSessionService extends import_bas
378
401
  });
379
402
  txEm.persist(userStateModel);
380
403
  }
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
404
  if (event.actions && event.actions.stateDelta) {
400
405
  const appDelta = {};
401
406
  const userDelta = {};
@@ -449,14 +454,29 @@ const _DatabaseSessionService = class _DatabaseSessionService extends import_bas
449
454
  storageSession.state
450
455
  );
451
456
  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);
457
- }
457
+ (0, import_base_session_service.upsertSessionEvent)(session, event);
458
458
  session.lastUpdateTime = storageSession.updateTime.getTime();
459
459
  });
460
+ if (sessionWasStale) {
461
+ try {
462
+ const storageEvents = await em.find(
463
+ StorageEvent,
464
+ {
465
+ appName: session.appName,
466
+ userId: session.userId,
467
+ sessionId: session.id
468
+ },
469
+ { orderBy: { timestamp: "ASC" } }
470
+ );
471
+ session.events = storageEvents.map((se) => se.eventData);
472
+ (0, import_base_session_service.upsertSessionEvent)(session, event);
473
+ } catch (e) {
474
+ const message = e instanceof Error ? e.message : String(e);
475
+ import_logger.logger.warn(
476
+ `Failed to reload events for stale session ${session.id} after appendEvent; the event was persisted but session.events may be missing concurrent appends: ${message}`
477
+ );
478
+ }
479
+ }
460
480
  return event;
461
481
  }
462
482
  };
@@ -465,5 +485,7 @@ let DatabaseSessionService = _DatabaseSessionService;
465
485
  // Annotate the CommonJS export names for ESM import in node:
466
486
  0 && (module.exports = {
467
487
  DatabaseSessionService,
468
- isDatabaseConnectionString
488
+ StaleSessionError,
489
+ isDatabaseConnectionString,
490
+ isStaleSessionError
469
491
  });
@@ -293,7 +293,7 @@ async function getConnectionOptionsFromUri(uri) {
293
293
  );
294
294
  return {
295
295
  entities: import_schema.ENTITIES,
296
- dbName: uri === "sqlite://:memory:" ? ":memory:" : uri.substring("sqlite://".length),
296
+ dbName: uri === "sqlite://:memory:" || uri === "sqlite:///:memory:" ? ":memory:" : uri.substring("sqlite://".length),
297
297
  driver: SqliteDriver
298
298
  };
299
299
  }
@@ -70,7 +70,9 @@ const _InMemorySessionService = class _InMemorySessionService extends import_bas
70
70
  var _a;
71
71
  const filteredState = state ? (0, import_base_session_service.trimTempState)(state) : void 0;
72
72
  const session = (0, import_session.createSession)({
73
- id: sessionId || (0, import_env_aware_utils.randomUUID)(),
73
+ // Surrounding whitespace is dropped so that a later lookup by the bare
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)(),
74
76
  appName,
75
77
  userId,
76
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
+ });
@@ -102,16 +102,19 @@ const _State = class _State {
102
102
  /**
103
103
  * Returns the value of the state dict for the given key.
104
104
  *
105
+ * Only keys the state holds itself are found. Names inherited from
106
+ * `Object.prototype`, such as `toString`, are treated as missing.
107
+ *
105
108
  * @param key The key to get the value for.
106
109
  * @param defaultValue The default value to return if the key is not found.
107
110
  * @return The value of the state for the given key, or the default value if
108
111
  * not found.
109
112
  */
110
113
  get(key, defaultValue) {
111
- if (key in this.delta) {
114
+ if (Object.hasOwn(this.delta, key)) {
112
115
  return this.delta[key];
113
116
  }
114
- if (key in this.value) {
117
+ if (Object.hasOwn(this.value, key)) {
115
118
  return this.value[key];
116
119
  }
117
120
  return defaultValue;
@@ -129,10 +132,11 @@ const _State = class _State {
129
132
  (0, import_state_write_order.recordStateWrite)(this.value, this.delta, key);
130
133
  }
131
134
  /**
132
- * Whether the state has pending delta.
135
+ * Whether the state holds the given key, either as a stored value or as a
136
+ * pending delta. Names inherited from `Object.prototype` are not keys.
133
137
  */
134
138
  has(key) {
135
- return key in this.value || key in this.delta;
139
+ return Object.hasOwn(this.value, key) || Object.hasOwn(this.delta, key);
136
140
  }
137
141
  /**
138
142
  * Whether the state has pending delta.
@@ -65,17 +65,22 @@ function quoteFilterLiteral(value) {
65
65
  return `"${escaped}"`;
66
66
  }
67
67
  __name(quoteFilterLiteral, "quoteFilterLiteral");
68
+ function toStateMap(state) {
69
+ return Object.assign(/* @__PURE__ */ Object.create(null), state);
70
+ }
71
+ __name(toStateMap, "toStateMap");
68
72
  let VertexAiSessionService = class extends import_base_session_service.BaseSessionService {
69
73
  constructor(options) {
70
74
  super();
71
75
  this.agentEngineId = options.agentEngineId;
72
- this.projectId = options.projectId;
73
- this.location = options.location;
74
76
  this.expressModeApiKey = (0, import_vertex_ai_utils.getExpressModeApiKey)(
75
- this.projectId,
76
- this.location,
77
+ options.projectId,
78
+ options.location,
77
79
  options.expressModeApiKey
78
80
  );
81
+ const useEnvironment = !options.expressModeApiKey;
82
+ this.projectId = options.projectId || (useEnvironment ? process.env["GOOGLE_CLOUD_PROJECT"] : void 0);
83
+ this.location = options.location || (useEnvironment ? process.env["GOOGLE_CLOUD_LOCATION"] : void 0);
79
84
  if (options.sessions) {
80
85
  this.sessions = options.sessions;
81
86
  } else {
@@ -161,7 +166,7 @@ let VertexAiSessionService = class extends import_base_session_service.BaseSessi
161
166
  id,
162
167
  appName,
163
168
  userId,
164
- state: getSessionResponse.sessionState,
169
+ state: toStateMap(getSessionResponse.sessionState),
165
170
  events: [],
166
171
  lastUpdateTime: getSessionResponse.updateTime ? Date.parse(getSessionResponse.updateTime) : Date.now()
167
172
  });
@@ -176,13 +181,14 @@ let VertexAiSessionService = class extends import_base_session_service.BaseSessi
176
181
  const sessionResourceName = `reasoningEngines/${reasoningEngineId}/sessions/${sessionId}`;
177
182
  try {
178
183
  let getSessionResponse;
179
- let eventsIterator = [];
184
+ const eventsIterator = [];
185
+ const listConfig = {};
186
+ let pageToken;
180
187
  if (config && config.numRecentEvents === 0) {
181
188
  getSessionResponse = await this.sessions.get({
182
189
  name: sessionResourceName
183
190
  });
184
191
  } else {
185
- const listConfig = {};
186
192
  if (config && config.afterTimestamp) {
187
193
  listConfig.filter = `timestamp>="${new Date(
188
194
  config.afterTimestamp
@@ -196,7 +202,9 @@ let VertexAiSessionService = class extends import_base_session_service.BaseSessi
196
202
  })
197
203
  ]);
198
204
  getSessionResponse = sessionRes;
199
- eventsIterator = eventsRes.sessionEvents || [];
205
+ const firstPage = eventsRes;
206
+ eventsIterator.push(...firstPage.sessionEvents || []);
207
+ pageToken = firstPage.nextPageToken;
200
208
  }
201
209
  const sessionObj = getSessionResponse;
202
210
  if (sessionObj.userId !== userId) {
@@ -204,20 +212,29 @@ let VertexAiSessionService = class extends import_base_session_service.BaseSessi
204
212
  `Session ${sessionId} does not belong to user ${userId}.`
205
213
  );
206
214
  }
215
+ while (pageToken) {
216
+ const eventsRes = await this.sessions.events.listInternal({
217
+ name: sessionResourceName,
218
+ config: {
219
+ ...listConfig,
220
+ pageToken
221
+ }
222
+ });
223
+ eventsIterator.push(...eventsRes.sessionEvents || []);
224
+ pageToken = eventsRes.nextPageToken;
225
+ }
207
226
  const session = (0, import_session.createSession)({
208
227
  id: sessionId,
209
228
  appName,
210
229
  userId,
211
- state: sessionObj.sessionState,
230
+ state: toStateMap(sessionObj.sessionState),
212
231
  events: [],
213
232
  lastUpdateTime: sessionObj.updateTime ? Date.parse(sessionObj.updateTime) : Date.now()
214
233
  });
215
- for (const event of eventsIterator) {
234
+ const recentEvents = config && config.numRecentEvents ? eventsIterator.slice(-config.numRecentEvents) : eventsIterator;
235
+ for (const event of recentEvents) {
216
236
  session.events.push(_fromApiEvent(event));
217
237
  }
218
- if (config && config.numRecentEvents) {
219
- session.events = session.events.slice(-config.numRecentEvents);
220
- }
221
238
  return session;
222
239
  } catch (error) {
223
240
  const err = error;
@@ -256,7 +273,7 @@ let VertexAiSessionService = class extends import_base_session_service.BaseSessi
256
273
  id,
257
274
  appName,
258
275
  userId: sessionObj.userId,
259
- state: sessionObj.sessionState,
276
+ state: toStateMap(sessionObj.sessionState),
260
277
  events: [],
261
278
  lastUpdateTime: sessionObj.updateTime ? new Date(sessionObj.updateTime).getTime() : Date.now()
262
279
  })
@@ -502,7 +519,9 @@ function _fromApiEvent(apiEventObj) {
502
519
  }
503
520
  }
504
521
  const eventActions = {
505
- stateDelta: actions["stateDelta"] || {},
522
+ stateDelta: toStateMap(
523
+ actions["stateDelta"]
524
+ ),
506
525
  artifactDelta: actions["artifactDelta"] || {},
507
526
  requestedAuthConfigs: actions.requestedAuthConfigs || {},
508
527
  requestedToolConfirmations: actions["requestedToolConfirmations"] || {},