@google/adk 2.4.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 (326) 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 +282 -55
  7. package/dist/cjs/agents/base_agent.js +111 -68
  8. package/dist/cjs/agents/functions.js +62 -85
  9. package/dist/cjs/agents/instructions.js +7 -6
  10. package/dist/cjs/agents/invocation_context.js +2 -2
  11. package/dist/cjs/agents/llm_agent.js +105 -95
  12. package/dist/cjs/agents/processors/content_processor_utils.js +42 -15
  13. package/dist/cjs/agents/processors/content_request_processor.js +28 -11
  14. package/dist/cjs/agents/processors/context_compactor_request_processor.js +5 -1
  15. package/dist/cjs/agents/processors/instructions_llm_request_processor.js +1 -1
  16. package/dist/cjs/agents/processors/nl_planning_processor.js +2 -1
  17. package/dist/cjs/artifacts/file_artifact_service.js +1 -1
  18. package/dist/cjs/cli/cli_eval.js +884 -17
  19. package/dist/cjs/cli/utils/cleanup.js +84 -0
  20. package/dist/cjs/cli/utils/envs.js +33 -2
  21. package/dist/cjs/cli/utils/evals.js +75 -8
  22. package/dist/cjs/cli/utils/logs.js +128 -9
  23. package/dist/cjs/cli/utils/path_validation.js +83 -0
  24. package/dist/cjs/code_executors/container_code_executor.js +158 -36
  25. package/dist/cjs/common.js +50 -12
  26. package/dist/cjs/context/compaction_utils.js +19 -0
  27. package/dist/cjs/events/event.js +7 -3
  28. package/dist/cjs/features/feature_registry.js +5 -0
  29. package/dist/cjs/index.js +29 -14
  30. package/dist/cjs/models/google_llm.js +33 -2
  31. package/dist/cjs/models/interactions_utils.js +3 -0
  32. package/dist/cjs/plugins/base_plugin.js +45 -21
  33. package/dist/cjs/plugins/plugin_manager.js +27 -0
  34. package/dist/cjs/runner/runner.js +306 -189
  35. package/dist/cjs/sessions/base_session_service.js +1 -4
  36. package/dist/cjs/sessions/database_session_service.js +191 -19
  37. package/dist/cjs/sessions/db/operations.js +70 -1
  38. package/dist/cjs/sessions/db/schema.js +4 -0
  39. package/dist/cjs/sessions/in_memory_session_service.js +2 -2
  40. package/dist/cjs/sessions/vertex_ai_session_service.js +11 -3
  41. package/dist/cjs/skills/loader.js +29 -28
  42. package/dist/cjs/telemetry/api/instrumentation.js +632 -0
  43. package/dist/cjs/telemetry/api/internal/common/accumulators.js +169 -0
  44. package/dist/cjs/telemetry/api/internal/common/attributes.js +131 -0
  45. package/dist/cjs/telemetry/api/internal/common/config.js +159 -0
  46. package/dist/cjs/telemetry/api/internal/common/error.js +98 -0
  47. package/dist/cjs/telemetry/api/internal/common/finish_reason.js +63 -0
  48. package/dist/cjs/telemetry/api/internal/common/genai_messages.js +217 -0
  49. package/dist/cjs/telemetry/api/internal/common/http_exchange.js +169 -0
  50. package/dist/cjs/telemetry/api/internal/common/provider_name.js +87 -0
  51. package/dist/cjs/telemetry/api/internal/common/redaction.js +148 -0
  52. package/dist/cjs/telemetry/api/internal/common/serialization.js +58 -0
  53. package/dist/cjs/telemetry/api/internal/common/token_usage.js +118 -0
  54. package/dist/cjs/telemetry/api/internal/logs/inference.js +50 -0
  55. package/dist/cjs/telemetry/api/internal/logs/logger.js +46 -0
  56. package/dist/cjs/telemetry/api/internal/logs/mcp.js +141 -0
  57. package/dist/cjs/telemetry/api/internal/metrics/agent.js +128 -0
  58. package/dist/cjs/telemetry/api/internal/metrics/inference_start_hook.js +56 -0
  59. package/dist/cjs/telemetry/api/internal/metrics/meters.js +189 -0
  60. package/dist/cjs/telemetry/api/internal/metrics/tool.js +147 -0
  61. package/dist/cjs/telemetry/api/internal/metrics/workflow.js +132 -0
  62. package/dist/cjs/telemetry/api/internal/trace/agent.js +52 -0
  63. package/dist/cjs/telemetry/api/internal/trace/compaction.js +78 -0
  64. package/dist/cjs/telemetry/api/internal/trace/inference.js +132 -0
  65. package/dist/cjs/telemetry/api/internal/trace/live.js +52 -0
  66. package/dist/cjs/telemetry/api/internal/trace/node.js +73 -0
  67. package/dist/cjs/telemetry/api/internal/trace/propagation.js +67 -0
  68. package/dist/cjs/telemetry/api/internal/trace/tool.js +122 -0
  69. package/dist/cjs/telemetry/api/internal/trace/tracer.js +77 -0
  70. package/dist/cjs/telemetry/api/internal/trace/workflow.js +77 -0
  71. package/dist/cjs/telemetry/export/agent_engine.js +90 -0
  72. package/dist/cjs/telemetry/export/agent_runtime.js +73 -0
  73. package/dist/cjs/telemetry/export/google_cloud.js +763 -0
  74. package/dist/cjs/telemetry/export/request_driven_metric_reader.js +303 -0
  75. package/dist/cjs/telemetry/{setup.js → export/setup.js} +72 -5
  76. package/dist/cjs/tools/agent_tool.js +9 -1
  77. package/dist/cjs/tools/application_integration_tool/application_integration_toolset.js +22 -34
  78. package/dist/cjs/tools/application_integration_tool/clients/connections_client.js +60 -20
  79. package/dist/cjs/tools/application_integration_tool/clients/integration_client.js +26 -10
  80. package/dist/cjs/tools/application_integration_tool/integration_connector_tool.js +14 -23
  81. package/dist/cjs/tools/base_toolset.js +1 -1
  82. package/dist/cjs/tools/computer_use/base_computer.js +125 -0
  83. package/dist/cjs/tools/computer_use/computer_use_actions.js +502 -0
  84. package/dist/cjs/tools/computer_use/computer_use_tool.js +244 -0
  85. package/dist/cjs/tools/computer_use/computer_use_toolset.js +360 -0
  86. package/dist/cjs/tools/function_tool.js +15 -5
  87. package/dist/cjs/tools/google_api_tool/google_api_toolset.js +3 -2
  88. package/dist/cjs/tools/google_api_tool/googleapi_to_openapi_converter.js +3 -1
  89. package/dist/cjs/tools/load_artifacts_tool.js +15 -5
  90. package/dist/cjs/tools/load_memory_tool.js +2 -5
  91. package/dist/cjs/tools/mcp/mcp_session_manager.js +23 -3
  92. package/dist/cjs/tools/mcp/mcp_tool.js +7 -3
  93. package/dist/cjs/tools/mcp/mcp_toolset.js +18 -6
  94. package/dist/cjs/tools/openapi_tool/auth/auth_helpers.js +30 -29
  95. package/dist/cjs/tools/openapi_tool/auth/credential_exchangers/oauth2_exchanger.js +2 -2
  96. package/dist/cjs/tools/openapi_tool/rest_api_tool.js +45 -14
  97. package/dist/cjs/tools/skill/load_skill_resource_tool.js +7 -0
  98. package/dist/cjs/tools/skill/load_skill_tool.js +3 -0
  99. package/dist/cjs/tools/skill/run_skill_script_tool.js +12 -2
  100. package/dist/cjs/tools/toolbox_toolset.js +47 -28
  101. package/dist/cjs/utils/async_queue.js +37 -3
  102. package/dist/cjs/utils/client_labels.js +9 -11
  103. package/dist/cjs/utils/env_aware_utils.js +13 -7
  104. package/dist/cjs/utils/error_utils.js +40 -2
  105. package/dist/cjs/utils/failover_utils.js +10 -9
  106. package/dist/cjs/utils/gemini_schema_util.js +125 -12
  107. package/dist/cjs/utils/id_provider.js +63 -0
  108. package/dist/cjs/utils/model_name.js +15 -0
  109. package/dist/cjs/utils/simple_zod_to_json.js +13 -31
  110. package/dist/cjs/utils/ssrf_guard.js +46 -16
  111. package/dist/cjs/version.js +1 -1
  112. package/dist/cjs/workflow/index.js +2 -0
  113. package/dist/cjs/workflow/node_runner.js +24 -80
  114. package/dist/cjs/workflow/nodes/parallel_worker.js +18 -7
  115. package/dist/cjs/workflow/run_llm_agent_as_node.js +19 -14
  116. package/dist/cjs/workflow/utils/retry_utils.js +2 -2
  117. package/dist/cjs/workflow/workflow.js +12 -12
  118. package/dist/esm/a2a/a2a_remote_agent.js +23 -3
  119. package/dist/esm/a2a/a2a_remote_agent_utils.js +8 -4
  120. package/dist/esm/a2a/agent_card.js +5 -83
  121. package/dist/esm/a2a/agent_to_a2a.js +7 -0
  122. package/dist/esm/a2a/event_converter_utils.js +10 -3
  123. package/dist/esm/agents/agent_engine_client.js +293 -55
  124. package/dist/esm/agents/base_agent.js +111 -72
  125. package/dist/esm/agents/functions.js +67 -89
  126. package/dist/esm/agents/instructions.js +7 -6
  127. package/dist/esm/agents/invocation_context.js +2 -2
  128. package/dist/esm/agents/llm_agent.js +111 -100
  129. package/dist/esm/agents/processors/content_processor_utils.js +42 -15
  130. package/dist/esm/agents/processors/content_request_processor.js +28 -11
  131. package/dist/esm/agents/processors/context_compactor_request_processor.js +5 -1
  132. package/dist/esm/agents/processors/instructions_llm_request_processor.js +1 -1
  133. package/dist/esm/agents/processors/nl_planning_processor.js +2 -1
  134. package/dist/esm/artifacts/file_artifact_service.js +1 -1
  135. package/dist/esm/cli/cli_eval.js +880 -17
  136. package/dist/esm/cli/utils/cleanup.js +56 -0
  137. package/dist/esm/cli/utils/envs.js +33 -2
  138. package/dist/esm/cli/utils/evals.js +74 -8
  139. package/dist/esm/cli/utils/logs.js +128 -9
  140. package/dist/esm/cli/utils/path_validation.js +45 -0
  141. package/dist/esm/code_executors/container_code_executor.js +158 -36
  142. package/dist/esm/common.js +49 -6
  143. package/dist/esm/context/compaction_utils.js +19 -0
  144. package/dist/esm/events/event.js +7 -3
  145. package/dist/esm/features/feature_registry.js +5 -0
  146. package/dist/esm/index.js +27 -15
  147. package/dist/esm/models/google_llm.js +33 -2
  148. package/dist/esm/models/interactions_utils.js +3 -0
  149. package/dist/esm/plugins/base_plugin.js +45 -21
  150. package/dist/esm/plugins/plugin_manager.js +27 -0
  151. package/dist/esm/runner/runner.js +310 -192
  152. package/dist/esm/sessions/base_session_service.js +1 -4
  153. package/dist/esm/sessions/database_session_service.js +191 -19
  154. package/dist/esm/sessions/db/operations.js +70 -1
  155. package/dist/esm/sessions/db/schema.js +4 -0
  156. package/dist/esm/sessions/in_memory_session_service.js +2 -2
  157. package/dist/esm/sessions/vertex_ai_session_service.js +11 -3
  158. package/dist/esm/skills/loader.js +29 -28
  159. package/dist/esm/telemetry/api/instrumentation.js +655 -0
  160. package/dist/esm/telemetry/api/internal/common/accumulators.js +139 -0
  161. package/dist/esm/telemetry/api/internal/common/attributes.js +94 -0
  162. package/dist/esm/telemetry/api/internal/common/config.js +128 -0
  163. package/dist/esm/telemetry/api/internal/common/error.js +69 -0
  164. package/dist/esm/telemetry/api/internal/common/finish_reason.js +35 -0
  165. package/dist/esm/telemetry/api/internal/common/genai_messages.js +188 -0
  166. package/dist/esm/telemetry/api/internal/common/http_exchange.js +142 -0
  167. package/dist/esm/telemetry/api/internal/common/provider_name.js +59 -0
  168. package/dist/esm/telemetry/api/internal/common/redaction.js +121 -0
  169. package/dist/esm/telemetry/api/internal/common/serialization.js +30 -0
  170. package/dist/esm/telemetry/api/internal/common/token_usage.js +85 -0
  171. package/dist/esm/telemetry/api/internal/logs/inference.js +23 -0
  172. package/dist/esm/telemetry/api/internal/logs/logger.js +19 -0
  173. package/dist/esm/telemetry/api/internal/logs/mcp.js +113 -0
  174. package/dist/esm/telemetry/api/internal/metrics/agent.js +107 -0
  175. package/dist/esm/telemetry/api/internal/metrics/inference_start_hook.js +29 -0
  176. package/dist/esm/telemetry/api/internal/metrics/meters.js +165 -0
  177. package/dist/esm/telemetry/api/internal/metrics/tool.js +119 -0
  178. package/dist/esm/telemetry/api/internal/metrics/workflow.js +112 -0
  179. package/dist/esm/telemetry/api/internal/trace/agent.js +25 -0
  180. package/dist/esm/telemetry/api/internal/trace/compaction.js +50 -0
  181. package/dist/esm/telemetry/api/internal/trace/inference.js +107 -0
  182. package/dist/esm/telemetry/api/internal/trace/live.js +28 -0
  183. package/dist/esm/telemetry/api/internal/trace/node.js +44 -0
  184. package/dist/esm/telemetry/api/internal/trace/propagation.js +39 -0
  185. package/dist/esm/telemetry/api/internal/trace/tool.js +96 -0
  186. package/dist/esm/telemetry/api/internal/trace/tracer.js +52 -0
  187. package/dist/esm/telemetry/api/internal/trace/workflow.js +54 -0
  188. package/dist/esm/telemetry/export/agent_engine.js +67 -0
  189. package/dist/esm/telemetry/export/agent_runtime.js +46 -0
  190. package/dist/esm/telemetry/export/google_cloud.js +733 -0
  191. package/dist/esm/telemetry/export/request_driven_metric_reader.js +276 -0
  192. package/dist/esm/telemetry/export/setup.js +160 -0
  193. package/dist/esm/tools/agent_tool.js +9 -1
  194. package/dist/esm/tools/application_integration_tool/application_integration_toolset.js +23 -35
  195. package/dist/esm/tools/application_integration_tool/clients/connections_client.js +64 -21
  196. package/dist/esm/tools/application_integration_tool/clients/integration_client.js +26 -10
  197. package/dist/esm/tools/application_integration_tool/integration_connector_tool.js +14 -23
  198. package/dist/esm/tools/base_toolset.js +1 -1
  199. package/dist/esm/tools/computer_use/base_computer.js +99 -0
  200. package/dist/esm/tools/computer_use/computer_use_actions.js +477 -0
  201. package/dist/esm/tools/computer_use/computer_use_tool.js +217 -0
  202. package/dist/esm/tools/computer_use/computer_use_toolset.js +344 -0
  203. package/dist/esm/tools/function_tool.js +15 -5
  204. package/dist/esm/tools/google_api_tool/google_api_toolset.js +3 -2
  205. package/dist/esm/tools/google_api_tool/googleapi_to_openapi_converter.js +3 -1
  206. package/dist/esm/tools/load_artifacts_tool.js +15 -5
  207. package/dist/esm/tools/load_memory_tool.js +2 -5
  208. package/dist/esm/tools/mcp/mcp_session_manager.js +23 -3
  209. package/dist/esm/tools/mcp/mcp_tool.js +7 -3
  210. package/dist/esm/tools/mcp/mcp_toolset.js +18 -6
  211. package/dist/esm/tools/openapi_tool/auth/auth_helpers.js +27 -26
  212. package/dist/esm/tools/openapi_tool/auth/credential_exchangers/oauth2_exchanger.js +2 -2
  213. package/dist/esm/tools/openapi_tool/rest_api_tool.js +45 -14
  214. package/dist/esm/tools/skill/load_skill_resource_tool.js +7 -0
  215. package/dist/esm/tools/skill/load_skill_tool.js +3 -0
  216. package/dist/esm/tools/skill/run_skill_script_tool.js +12 -2
  217. package/dist/esm/tools/toolbox_toolset.js +47 -28
  218. package/dist/esm/utils/async_queue.js +37 -3
  219. package/dist/esm/utils/client_labels.js +9 -11
  220. package/dist/esm/utils/env_aware_utils.js +12 -7
  221. package/dist/esm/utils/error_utils.js +37 -1
  222. package/dist/esm/utils/failover_utils.js +10 -9
  223. package/dist/esm/utils/gemini_schema_util.js +124 -11
  224. package/dist/esm/utils/id_provider.js +33 -0
  225. package/dist/esm/utils/model_name.js +14 -0
  226. package/dist/esm/utils/simple_zod_to_json.js +13 -31
  227. package/dist/esm/utils/ssrf_guard.js +55 -15
  228. package/dist/esm/version.js +1 -1
  229. package/dist/esm/workflow/index.js +2 -1
  230. package/dist/esm/workflow/node_runner.js +26 -80
  231. package/dist/esm/workflow/nodes/parallel_worker.js +16 -6
  232. package/dist/esm/workflow/run_llm_agent_as_node.js +19 -14
  233. package/dist/esm/workflow/utils/retry_utils.js +2 -2
  234. package/dist/esm/workflow/workflow.js +12 -12
  235. package/dist/types/a2a/a2a_remote_agent.d.ts +6 -0
  236. package/dist/types/a2a/a2a_remote_agent_utils.d.ts +3 -2
  237. package/dist/types/agents/agent_engine_client.d.ts +121 -3
  238. package/dist/types/agents/base_agent.d.ts +2 -0
  239. package/dist/types/agents/processors/content_processor_utils.d.ts +9 -9
  240. package/dist/types/agents/run_config.d.ts +14 -0
  241. package/dist/types/cli/cli_eval.d.ts +172 -9
  242. package/dist/types/cli/utils/cleanup.d.ts +18 -0
  243. package/dist/types/cli/utils/envs.d.ts +13 -3
  244. package/dist/types/cli/utils/evals.d.ts +64 -1
  245. package/dist/types/cli/utils/logs.d.ts +19 -2
  246. package/dist/types/cli/utils/path_validation.d.ts +30 -0
  247. package/dist/types/code_executors/container_code_executor.d.ts +49 -8
  248. package/dist/types/common.d.ts +16 -9
  249. package/dist/types/context/compaction_utils.d.ts +13 -1
  250. package/dist/types/events/event.d.ts +3 -0
  251. package/dist/types/features/feature_registry.d.ts +1 -0
  252. package/dist/types/index.d.ts +9 -6
  253. package/dist/types/plugins/base_plugin.d.ts +50 -21
  254. package/dist/types/plugins/plugin_manager.d.ts +13 -0
  255. package/dist/types/runner/runner.d.ts +11 -0
  256. package/dist/types/sessions/base_session_service.d.ts +0 -2
  257. package/dist/types/sessions/db/operations.d.ts +2 -1
  258. package/dist/types/sessions/db/schema.d.ts +5 -3
  259. package/dist/types/telemetry/api/instrumentation.d.ts +259 -0
  260. package/dist/types/telemetry/api/internal/common/accumulators.d.ts +91 -0
  261. package/dist/types/telemetry/api/internal/common/attributes.d.ts +90 -0
  262. package/dist/types/telemetry/api/internal/common/config.d.ts +61 -0
  263. package/dist/types/telemetry/api/internal/common/error.d.ts +29 -0
  264. package/dist/types/telemetry/api/internal/common/finish_reason.d.ts +18 -0
  265. package/dist/types/telemetry/api/internal/common/genai_messages.d.ts +26 -0
  266. package/dist/types/telemetry/api/internal/common/http_exchange.d.ts +50 -0
  267. package/dist/types/telemetry/api/internal/common/provider_name.d.ts +16 -0
  268. package/dist/types/telemetry/api/internal/common/redaction.d.ts +14 -0
  269. package/dist/types/telemetry/api/internal/common/serialization.d.ts +18 -0
  270. package/dist/types/telemetry/api/internal/common/token_usage.d.ts +47 -0
  271. package/dist/types/telemetry/api/internal/logs/inference.d.ts +15 -0
  272. package/dist/types/telemetry/api/internal/logs/logger.d.ts +13 -0
  273. package/dist/types/telemetry/api/internal/logs/mcp.d.ts +31 -0
  274. package/dist/types/telemetry/api/internal/metrics/agent.d.ts +28 -0
  275. package/dist/types/telemetry/api/internal/metrics/inference_start_hook.d.ts +12 -0
  276. package/dist/types/telemetry/api/internal/metrics/meters.d.ts +57 -0
  277. package/dist/types/telemetry/api/internal/metrics/tool.d.ts +44 -0
  278. package/dist/types/telemetry/api/internal/metrics/workflow.d.ts +32 -0
  279. package/dist/types/telemetry/api/internal/trace/agent.d.ts +14 -0
  280. package/dist/types/telemetry/api/internal/trace/compaction.d.ts +20 -0
  281. package/dist/types/telemetry/api/internal/trace/inference.d.ts +31 -0
  282. package/dist/types/telemetry/api/internal/trace/live.d.ts +21 -0
  283. package/dist/types/telemetry/api/internal/trace/node.d.ts +22 -0
  284. package/dist/types/telemetry/api/internal/trace/propagation.d.ts +22 -0
  285. package/dist/types/telemetry/api/internal/trace/tool.d.ts +57 -0
  286. package/dist/types/telemetry/api/internal/trace/tracer.d.ts +31 -0
  287. package/dist/types/telemetry/api/internal/trace/workflow.d.ts +21 -0
  288. package/dist/types/telemetry/export/agent_engine.d.ts +23 -0
  289. package/dist/types/telemetry/export/agent_runtime.d.ts +40 -0
  290. package/dist/types/telemetry/export/google_cloud.d.ts +189 -0
  291. package/dist/types/telemetry/export/request_driven_metric_reader.d.ts +144 -0
  292. package/dist/types/telemetry/{setup.d.ts → export/setup.d.ts} +3 -0
  293. package/dist/types/tools/agent_tool.d.ts +1 -1
  294. package/dist/types/tools/application_integration_tool/clients/connections_client.d.ts +13 -4
  295. package/dist/types/tools/base_toolset.d.ts +1 -1
  296. package/dist/types/tools/computer_use/base_computer.d.ts +281 -0
  297. package/dist/types/tools/computer_use/computer_use_actions.d.ts +53 -0
  298. package/dist/types/tools/computer_use/computer_use_tool.d.ts +108 -0
  299. package/dist/types/tools/computer_use/computer_use_toolset.d.ts +132 -0
  300. package/dist/types/tools/google_api_tool/google_api_toolset.d.ts +2 -0
  301. package/dist/types/tools/load_artifacts_tool.d.ts +5 -1
  302. package/dist/types/tools/load_memory_tool.d.ts +13 -7
  303. package/dist/types/tools/mcp/mcp_session_manager.d.ts +16 -0
  304. package/dist/types/tools/openapi_tool/auth/auth_helpers.d.ts +8 -8
  305. package/dist/types/tools/openapi_tool/openapi_spec_parser/operation_parser.d.ts +7 -3
  306. package/dist/types/tools/toolbox_toolset.d.ts +15 -20
  307. package/dist/types/utils/async_queue.d.ts +14 -0
  308. package/dist/types/utils/env_aware_utils.d.ts +11 -0
  309. package/dist/types/utils/error_utils.d.ts +4 -0
  310. package/dist/types/utils/gemini_schema_util.d.ts +27 -6
  311. package/dist/types/utils/id_provider.d.ts +43 -0
  312. package/dist/types/utils/model_name.d.ts +8 -0
  313. package/dist/types/utils/ssrf_guard.d.ts +2 -0
  314. package/dist/types/version.d.ts +1 -1
  315. package/dist/types/workflow/index.d.ts +1 -1
  316. package/dist/types/workflow/nodes/parallel_worker.d.ts +8 -1
  317. package/dist/web/index_web.js +86 -88
  318. package/dist/web/index_web.js.map +4 -4
  319. package/package.json +13 -15
  320. package/dist/cjs/telemetry/google_cloud.js +0 -116
  321. package/dist/cjs/telemetry/tracing.js +0 -393
  322. package/dist/esm/telemetry/google_cloud.js +0 -99
  323. package/dist/esm/telemetry/setup.js +0 -88
  324. package/dist/esm/telemetry/tracing.js +0 -361
  325. package/dist/types/telemetry/google_cloud.d.ts +0 -9
  326. package/dist/types/telemetry/tracing.d.ts +0 -143
@@ -41,7 +41,7 @@ __export(database_session_service_exports, {
41
41
  isStaleSessionError: () => import_stale_session_error2.isStaleSessionError
42
42
  });
43
43
  module.exports = __toCommonJS(database_session_service_exports);
44
- var import_env_aware_utils = require("../utils/env_aware_utils.js");
44
+ var import_id_provider = require("../utils/id_provider.js");
45
45
  var import_logger = require("../utils/logger.js");
46
46
  var import_base_session_service = require("./base_session_service.js");
47
47
  var import_session = require("./session.js");
@@ -84,9 +84,82 @@ async function importMikroOrm() {
84
84
  } = operations);
85
85
  }
86
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");
87
160
  function formatDateTime(dateOrEpochMs) {
88
161
  const date = typeof dateOrEpochMs === "number" ? new Date(dateOrEpochMs) : dateOrEpochMs;
89
- return date.toISOString().replace("T", " ").slice(0, 19);
162
+ return date.toISOString().replace("T", " ").replace("Z", "");
90
163
  }
91
164
  __name(formatDateTime, "formatDateTime");
92
165
  function isDatabaseConnectionString(uri) {
@@ -103,14 +176,25 @@ const _DatabaseSessionService = class _DatabaseSessionService extends import_bas
103
176
  this.initialized = false;
104
177
  if (typeof connectionStringOrOptions === "string") {
105
178
  this.connectionString = connectionStringOrOptions;
106
- this.staleSession = (_a = options == null ? void 0 : options.staleSession) != null ? _a : "reject";
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
+ }
107
186
  } else {
108
- 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) {
109
194
  throw new Error("Driver is required when passing options object.");
110
195
  }
111
- const { staleSession, ...mikroOptions } = connectionStringOrOptions;
112
- this.options = mikroOptions;
113
- this.staleSession = staleSession != null ? staleSession : "reject";
196
+ this.options = mergedMikroOptions;
197
+ this.staleSession = (_a = secondStaleSession != null ? secondStaleSession : firstStaleSession) != null ? _a : "reject";
114
198
  }
115
199
  }
116
200
  async init() {
@@ -118,7 +202,11 @@ const _DatabaseSessionService = class _DatabaseSessionService extends import_bas
118
202
  return;
119
203
  }
120
204
  await loadMikroOrm();
121
- 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 };
122
210
  this.options = options;
123
211
  this.orm = await MikroORM.init(options);
124
212
  await ensureDatabaseCreated(this.orm);
@@ -133,7 +221,7 @@ const _DatabaseSessionService = class _DatabaseSessionService extends import_bas
133
221
  }) {
134
222
  await this.init();
135
223
  const em = this.orm.em.fork();
136
- const id = sessionId || (0, import_env_aware_utils.randomUUID)();
224
+ const id = sessionId || (0, import_id_provider.newId)();
137
225
  const now = /* @__PURE__ */ new Date();
138
226
  const existing = await em.findOne(StorageSession, {
139
227
  id,
@@ -196,14 +284,22 @@ const _DatabaseSessionService = class _DatabaseSessionService extends import_bas
196
284
  userStateModel.state,
197
285
  sessionState
198
286
  );
199
- return (0, import_session.createSession)({
287
+ const session = (0, import_session.createSession)({
200
288
  id,
201
289
  appName,
202
290
  userId,
203
291
  state: mergedState,
204
292
  events: [],
205
- 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
206
301
  });
302
+ return session;
207
303
  }
208
304
  async getSession({
209
305
  appName,
@@ -244,7 +340,7 @@ const _DatabaseSessionService = class _DatabaseSessionService extends import_bas
244
340
  (userStateModel == null ? void 0 : userStateModel.state) || {},
245
341
  storageSession.state
246
342
  );
247
- return (0, import_session.createSession)({
343
+ const session = (0, import_session.createSession)({
248
344
  id: sessionId,
249
345
  appName,
250
346
  userId,
@@ -252,6 +348,16 @@ const _DatabaseSessionService = class _DatabaseSessionService extends import_bas
252
348
  events: storageEvents.map((se) => se.eventData),
253
349
  lastUpdateTime: storageSession.updateTime.getTime()
254
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;
255
361
  }
256
362
  async listSessions({
257
363
  appName,
@@ -264,7 +370,7 @@ const _DatabaseSessionService = class _DatabaseSessionService extends import_bas
264
370
  await this.init();
265
371
  const em = this.orm.em.fork();
266
372
  const where = { appName };
267
- if (userId) {
373
+ if (userId !== void 0) {
268
374
  where.userId = userId;
269
375
  }
270
376
  const orderBy = order === "asc" ? { updateTime: "ASC", id: "ASC" } : order === "desc" ? { updateTime: "DESC", id: "ASC" } : void 0;
@@ -313,7 +419,7 @@ const _DatabaseSessionService = class _DatabaseSessionService extends import_bas
313
419
  const appStateModel = await em.findOne(StorageAppState, { appName });
314
420
  const appState = (appStateModel == null ? void 0 : appStateModel.state) || {};
315
421
  const userStateMap = {};
316
- if (userId) {
422
+ if (userId !== void 0) {
317
423
  const u = await em.findOne(StorageUserState, { appName, userId });
318
424
  if (u) userStateMap[userId] = u.state;
319
425
  } else {
@@ -325,7 +431,7 @@ const _DatabaseSessionService = class _DatabaseSessionService extends import_bas
325
431
  const sessions = storageSessions.map((ss) => {
326
432
  const uState = userStateMap[ss.userId] || {};
327
433
  const merged = (0, import_base_session_service.mergeStates)(appState, uState, ss.state);
328
- return (0, import_session.createSession)({
434
+ const session = (0, import_session.createSession)({
329
435
  id: ss.id,
330
436
  appName: ss.appName,
331
437
  userId: ss.userId,
@@ -333,6 +439,13 @@ const _DatabaseSessionService = class _DatabaseSessionService extends import_bas
333
439
  events: [],
334
440
  lastUpdateTime: ss.updateTime.getTime()
335
441
  });
442
+ setStorageRevisionMarker(session, {
443
+ marker: ss.updateTime.toISOString(),
444
+ recordedLastUpdateTime: session.lastUpdateTime,
445
+ unverifiedWrite: false,
446
+ eventsComplete: false
447
+ });
448
+ return session;
336
449
  });
337
450
  return { sessions, ...paginationMeta };
338
451
  }
@@ -350,11 +463,13 @@ const _DatabaseSessionService = class _DatabaseSessionService extends import_bas
350
463
  session,
351
464
  event
352
465
  }) {
466
+ var _a, _b;
353
467
  await this.init();
354
468
  const em = this.orm.em.fork();
355
469
  if (event.partial) {
356
470
  return event;
357
471
  }
472
+ const stateDelta = (_b = (_a = event.actions) == null ? void 0 : _a.stateDelta) != null ? _b : {};
358
473
  const trimmedEvent = (0, import_base_session_service.trimTempDeltaState)(event);
359
474
  let sessionWasStale = false;
360
475
  await em.transactional(async (txEm) => {
@@ -370,11 +485,37 @@ const _DatabaseSessionService = class _DatabaseSessionService extends import_bas
370
485
  if (!storageSession) {
371
486
  throw new Error(`Session ${session.id} not found for appendEvent`);
372
487
  }
373
- if (storageSession.updateTime.getTime() > session.lastUpdateTime) {
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) {
374
516
  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
- );
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);
378
519
  }
379
520
  sessionWasStale = true;
380
521
  }
@@ -453,9 +594,32 @@ const _DatabaseSessionService = class _DatabaseSessionService extends import_bas
453
594
  userStateModel.state,
454
595
  storageSession.state
455
596
  );
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
+ }
603
+ }
456
604
  session.state = newMergedState;
605
+ const isNewEvent = !existingStorageEvent;
457
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
  });
460
624
  if (sessionWasStale) {
461
625
  try {
@@ -470,6 +634,14 @@ const _DatabaseSessionService = class _DatabaseSessionService extends import_bas
470
634
  );
471
635
  session.events = storageEvents.map((se) => se.eventData);
472
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
+ }
473
645
  } catch (e) {
474
646
  const message = e instanceof Error ? e.message : String(e);
475
647
  import_logger.logger.warn(
@@ -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,
@@ -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,
@@ -105,7 +105,7 @@ async function loadDir(directoryPath) {
105
105
  }
106
106
  await walk(fullPath);
107
107
  } else if (entry.isFile()) {
108
- const relativePath = path.relative(directoryPath, fullPath);
108
+ const relativePath = path.relative(directoryPath, fullPath).split(path.sep).join("/");
109
109
  if (IGNORED_EXTENSIONS.has(path.extname(entry.name))) {
110
110
  continue;
111
111
  }
@@ -133,7 +133,7 @@ const FRONTMATTER_PATTERN = /^---[ \t]*\r?\n(?:([\s\S]*?)\r?\n)??---[ \t]*(?:\r?
133
133
  function parseFrontmatterYaml(content) {
134
134
  var _a;
135
135
  const text = content.startsWith(FRONTMATTER_BOM) ? content.slice(FRONTMATTER_BOM.length) : content;
136
- if (!text.startsWith("---")) {
136
+ if (!/^---[ \t]*(?:\r?\n|$)/.test(text)) {
137
137
  throw new import_input_validation_error.InputValidationError(
138
138
  "SKILL.md must start with YAML frontmatter (---)"
139
139
  );
@@ -146,20 +146,27 @@ function parseFrontmatterYaml(content) {
146
146
  }
147
147
  const frontmatterStr = (_a = match[1]) != null ? _a : "";
148
148
  const body = text.slice(match[0].length).trim();
149
- try {
150
- const parsed = yaml.load(frontmatterStr);
151
- if (typeof parsed !== "object" || parsed === null || Array.isArray(parsed)) {
149
+ const hasYamlContent = frontmatterStr.split(/\r?\n/).some((line) => {
150
+ const trimmed = line.trim();
151
+ return trimmed.length > 0 && !trimmed.startsWith("#");
152
+ });
153
+ let parsed = null;
154
+ if (hasYamlContent) {
155
+ try {
156
+ parsed = yaml.load(frontmatterStr);
157
+ } catch (e) {
152
158
  throw new import_input_validation_error.InputValidationError(
153
- "SKILL.md frontmatter must be a YAML mapping"
159
+ `Invalid YAML in frontmatter: ${e.message}`,
160
+ { cause: e }
154
161
  );
155
162
  }
156
- return { raw: parsed, body };
157
- } catch (e) {
163
+ }
164
+ if (typeof parsed !== "object" || parsed === null || Array.isArray(parsed)) {
158
165
  throw new import_input_validation_error.InputValidationError(
159
- `Invalid YAML in frontmatter: ${e.message}`,
160
- { cause: e }
166
+ "Invalid YAML in frontmatter: SKILL.md frontmatter must be a YAML mapping"
161
167
  );
162
168
  }
169
+ return { raw: parsed, body };
163
170
  }
164
171
  __name(parseFrontmatterYaml, "parseFrontmatterYaml");
165
172
  function validateFrontmatter(raw) {
@@ -234,22 +241,16 @@ async function validateSkillDir(skillDir) {
234
241
  } catch (e) {
235
242
  return [e.message];
236
243
  }
237
- try {
238
- const keys = Object.keys(skill.frontmatter);
239
- const unknown = keys.filter((k) => !ALLOWED_FRONTMATTER_KEYS.has(k));
240
- if (unknown.length > 0) {
241
- problems.push(
242
- `Unknown frontmatter fields: [${unknown.sort().join(", ")}]`
243
- );
244
- }
245
- const dirName = path.basename(resolvedDir);
246
- if (dirName !== skill.frontmatter.name) {
247
- problems.push(
248
- `Skill name '${skill.frontmatter.name}' does not match directory name '${dirName}'.`
249
- );
250
- }
251
- } catch (e) {
252
- problems.push(e.message);
244
+ const keys = Object.keys(skill.frontmatter);
245
+ const unknown = keys.filter((k) => !ALLOWED_FRONTMATTER_KEYS.has(k));
246
+ if (unknown.length > 0) {
247
+ problems.push(`Unknown frontmatter fields: [${unknown.sort().join(", ")}]`);
248
+ }
249
+ const dirName = path.basename(resolvedDir);
250
+ if (dirName !== skill.frontmatter.name) {
251
+ problems.push(
252
+ `Skill name '${skill.frontmatter.name}' does not match directory name '${dirName}'.`
253
+ );
253
254
  }
254
255
  return problems;
255
256
  }
@@ -352,7 +353,7 @@ function loadSkillFromZipBuffer(zipBuffer) {
352
353
  );
353
354
  }
354
355
  }
355
- let skillMdContent = "";
356
+ let skillMdContent;
356
357
  for (const entry of entries) {
357
358
  if (entry.isDirectory) continue;
358
359
  if (entry.entryName.toLowerCase() === "skill.md") {
@@ -360,7 +361,7 @@ function loadSkillFromZipBuffer(zipBuffer) {
360
361
  break;
361
362
  }
362
363
  }
363
- if (!skillMdContent) {
364
+ if (skillMdContent === void 0) {
364
365
  throw new import_not_found_error.NotFoundError("SKILL.md not found in zipped filesystem.");
365
366
  }
366
367
  const { raw, body } = parseFrontmatterYaml(skillMdContent);