@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
@@ -0,0 +1,733 @@
1
+ import {createRequire as topLevelCreateRequire} from 'module';
2
+ const require = topLevelCreateRequire(import.meta.url);
3
+ var __defProp = Object.defineProperty;
4
+ var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
5
+ /**
6
+ * @license
7
+ * Copyright 2025 Google LLC
8
+ * SPDX-License-Identifier: Apache-2.0
9
+ */
10
+ import { metrics } from "@opentelemetry/api";
11
+ import { OTLPLogExporter } from "@opentelemetry/exporter-logs-otlp-http";
12
+ import { OTLPMetricExporter } from "@opentelemetry/exporter-metrics-otlp-http";
13
+ import { OTLPTraceExporter } from "@opentelemetry/exporter-trace-otlp-http";
14
+ import { gcpDetector } from "@opentelemetry/resource-detector-gcp";
15
+ import {
16
+ defaultResource,
17
+ detectResources,
18
+ emptyResource,
19
+ envDetector,
20
+ resourceFromAttributes
21
+ } from "@opentelemetry/resources";
22
+ import {
23
+ BatchLogRecordProcessor
24
+ } from "@opentelemetry/sdk-logs";
25
+ import {
26
+ MeterProvider,
27
+ PeriodicExportingMetricReader
28
+ } from "@opentelemetry/sdk-metrics";
29
+ import {
30
+ BatchSpanProcessor
31
+ } from "@opentelemetry/sdk-trace-base";
32
+ import { GoogleAuth } from "google-auth-library";
33
+ import { randomUUID } from "node:crypto";
34
+ import * as fs from "node:fs";
35
+ import { logger } from "../../utils/logger.js";
36
+ import { version } from "../../version.js";
37
+ import {
38
+ agentRuntimeRequestHooks
39
+ } from "./agent_runtime.js";
40
+ import {
41
+ MIN_EXPORT_INTERVAL_MS,
42
+ RequestDrivenMetricReader
43
+ } from "./request_driven_metric_reader.js";
44
+ const CLOUD_PLATFORM_SCOPE = "https://www.googleapis.com/auth/cloud-platform";
45
+ const DEFAULT_TELEMETRY_TRACES_ENDPOINT = "https://telemetry.googleapis.com/v1/traces";
46
+ const DEFAULT_MTLS_TELEMETRY_TRACES_ENDPOINT = "https://telemetry.mtls.googleapis.com/v1/traces";
47
+ const DEFAULT_TELEMETRY_METRICS_ENDPOINT = "https://telemetry.googleapis.com/v1/metrics";
48
+ const DEFAULT_MTLS_TELEMETRY_METRICS_ENDPOINT = "https://telemetry.mtls.googleapis.com/v1/metrics";
49
+ const DEFAULT_TELEMETRY_LOGS_ENDPOINT = "https://telemetry.googleapis.com/v1/logs";
50
+ const DEFAULT_MTLS_TELEMETRY_LOGS_ENDPOINT = "https://telemetry.mtls.googleapis.com/v1/logs";
51
+ const GCP_PROJECT_ERROR_MESSAGE = "Cannot determine GCP Project. OTel GCP Exporters cannot be set up. Please make sure to log into correct GCP Project.";
52
+ const GCP_DEFAULT_LOG_NAME = "GCP_DEFAULT_LOG_NAME";
53
+ const ADK_OTEL = "adk-otel";
54
+ const DEFAULT_AGENT_ENGINE_LOG_NAME = "aiplatform.googleapis.com/reasoning_engine_stdout";
55
+ const GCP_LOG_NAME = "gcp.log_name";
56
+ const EVENT_NAME = "event.name";
57
+ const GCP_RESOURCE_TYPE = "gcp.resource_type";
58
+ const LOCATION = "location";
59
+ const REASONING_ENGINE_ID = "reasoning_engine_id";
60
+ const RESOURCE_CONTAINER = "resource_container";
61
+ const SERVICE_VERSION = "service.version";
62
+ const POD_NAME_HASHES = /-[a-z0-9]+-[a-z0-9]{5}$/;
63
+ const K8S_NAMESPACE_PATH = "/var/run/secrets/kubernetes.io/serviceaccount/namespace";
64
+ const PROJECT_CACHE_SIZE = 32;
65
+ const projectCache = /* @__PURE__ */ new Map();
66
+ function clearProjectCache() {
67
+ projectCache.clear();
68
+ }
69
+ __name(clearProjectCache, "clearProjectCache");
70
+ function normalizeHeaders(headers) {
71
+ if (!headers) {
72
+ return {};
73
+ }
74
+ if (typeof headers.forEach === "function") {
75
+ const result = {};
76
+ headers.forEach((value, key) => {
77
+ result[key] = value;
78
+ });
79
+ return result;
80
+ }
81
+ return { ...headers };
82
+ }
83
+ __name(normalizeHeaders, "normalizeHeaders");
84
+ function useClientCertEffective() {
85
+ var _a;
86
+ const useClientCertStr = ((_a = process.env.GOOGLE_API_USE_CLIENT_CERTIFICATE) != null ? _a : "false").toLowerCase();
87
+ if (useClientCertStr !== "true" && useClientCertStr !== "false") {
88
+ logger.warn(
89
+ "Environment variable `GOOGLE_API_USE_CLIENT_CERTIFICATE` must be either `true` or `false`"
90
+ );
91
+ }
92
+ return useClientCertStr === "true";
93
+ }
94
+ __name(useClientCertEffective, "useClientCertEffective");
95
+ function getTelemetryEndpoint(defaultEndpoint, mtlsEndpoint) {
96
+ var _a;
97
+ const useMtlsEndpointStr = ((_a = process.env.GOOGLE_API_USE_MTLS_ENDPOINT) != null ? _a : "auto").toLowerCase();
98
+ let useMtlsEndpoint = "auto";
99
+ if (useMtlsEndpointStr === "auto" || useMtlsEndpointStr === "always" || useMtlsEndpointStr === "never") {
100
+ useMtlsEndpoint = useMtlsEndpointStr;
101
+ } else {
102
+ logger.warn(
103
+ 'Environment variable `GOOGLE_API_USE_MTLS_ENDPOINT` must be one of ["auto", "always", "never"]. Defaulting to auto.'
104
+ );
105
+ useMtlsEndpoint = "auto";
106
+ }
107
+ if (useMtlsEndpoint === "always") {
108
+ return mtlsEndpoint;
109
+ }
110
+ if (useMtlsEndpoint === "never") {
111
+ return defaultEndpoint;
112
+ }
113
+ if (useClientCertEffective()) {
114
+ return mtlsEndpoint;
115
+ }
116
+ return defaultEndpoint;
117
+ }
118
+ __name(getTelemetryEndpoint, "getTelemetryEndpoint");
119
+ function getAgentEngineUserAgentHeader() {
120
+ if (!process.env.GOOGLE_CLOUD_AGENT_ENGINE_ENABLE_TELEMETRY) {
121
+ return {};
122
+ }
123
+ return {
124
+ "User-Agent": `Vertex-Agent-Engine/${version}`
125
+ };
126
+ }
127
+ __name(getAgentEngineUserAgentHeader, "getAgentEngineUserAgentHeader");
128
+ const _AuthenticatedTraceExporter = class _AuthenticatedTraceExporter {
129
+ constructor(auth, endpoint, userAgentHeaders = {}) {
130
+ this.currentHeaders = {};
131
+ this.warnedAuthFailure = false;
132
+ this.auth = auth;
133
+ this.endpoint = endpoint;
134
+ this.userAgentHeaders = userAgentHeaders;
135
+ this.delegate = new OTLPTraceExporter({
136
+ url: endpoint,
137
+ headers: /* @__PURE__ */ __name(async () => this.currentHeaders, "headers")
138
+ });
139
+ }
140
+ /**
141
+ * Exports spans to Google Cloud.
142
+ *
143
+ * @param spans Spans to export.
144
+ * @param resultCallback Callback called with the export result.
145
+ */
146
+ export(spans, resultCallback) {
147
+ void this.exportAsync(spans, resultCallback);
148
+ }
149
+ async exportAsync(spans, resultCallback) {
150
+ try {
151
+ const authHeaders = await this.auth.getRequestHeaders(this.endpoint);
152
+ this.currentHeaders = {
153
+ ...normalizeHeaders(authHeaders),
154
+ ...this.userAgentHeaders
155
+ };
156
+ } catch (error) {
157
+ if (!this.warnedAuthFailure) {
158
+ this.warnedAuthFailure = true;
159
+ logger.warn(
160
+ "Failed to obtain Google Cloud credentials for telemetry export.",
161
+ { error }
162
+ );
163
+ }
164
+ resultCallback({
165
+ code: 1,
166
+ error: error instanceof Error ? error : new Error(String(error))
167
+ });
168
+ return;
169
+ }
170
+ this.delegate.export(spans, resultCallback);
171
+ }
172
+ /**
173
+ * Shuts down the trace exporter.
174
+ */
175
+ shutdown() {
176
+ return this.delegate.shutdown();
177
+ }
178
+ /**
179
+ * Flushes pending traces.
180
+ */
181
+ forceFlush() {
182
+ return this.delegate.forceFlush();
183
+ }
184
+ };
185
+ __name(_AuthenticatedTraceExporter, "AuthenticatedTraceExporter");
186
+ let AuthenticatedTraceExporter = _AuthenticatedTraceExporter;
187
+ const _AuthenticatedMetricExporter = class _AuthenticatedMetricExporter {
188
+ constructor(auth, endpoint, userAgentHeaders = {}) {
189
+ this.currentHeaders = {};
190
+ this.warnedAuthFailure = false;
191
+ this.auth = auth;
192
+ this.endpoint = endpoint;
193
+ this.userAgentHeaders = userAgentHeaders;
194
+ this.delegate = new OTLPMetricExporter({
195
+ url: endpoint,
196
+ headers: /* @__PURE__ */ __name(async () => this.currentHeaders, "headers")
197
+ });
198
+ }
199
+ /**
200
+ * Exports metrics to Google Cloud.
201
+ *
202
+ * @param metrics Metrics to export.
203
+ * @param resultCallback Callback called with the export result.
204
+ */
205
+ export(metrics2, resultCallback) {
206
+ void this.exportAsync(metrics2, resultCallback);
207
+ }
208
+ async exportAsync(metrics2, resultCallback) {
209
+ try {
210
+ const authHeaders = await this.auth.getRequestHeaders(this.endpoint);
211
+ this.currentHeaders = {
212
+ ...normalizeHeaders(authHeaders),
213
+ ...this.userAgentHeaders
214
+ };
215
+ } catch (error) {
216
+ if (!this.warnedAuthFailure) {
217
+ this.warnedAuthFailure = true;
218
+ logger.warn(
219
+ "Failed to obtain Google Cloud credentials for telemetry export.",
220
+ { error }
221
+ );
222
+ }
223
+ resultCallback({
224
+ code: 1,
225
+ error: error instanceof Error ? error : new Error(String(error))
226
+ });
227
+ return;
228
+ }
229
+ this.delegate.export(metrics2, resultCallback);
230
+ }
231
+ /**
232
+ * Shuts down the metric exporter.
233
+ */
234
+ shutdown() {
235
+ return this.delegate.shutdown();
236
+ }
237
+ /**
238
+ * Flushes pending metrics.
239
+ */
240
+ forceFlush() {
241
+ return this.delegate.forceFlush();
242
+ }
243
+ /**
244
+ * Selects aggregation temporality for instrument type.
245
+ *
246
+ * @param instrumentType Instrument type.
247
+ */
248
+ selectAggregationTemporality(instrumentType) {
249
+ return this.delegate.selectAggregationTemporality(instrumentType);
250
+ }
251
+ };
252
+ __name(_AuthenticatedMetricExporter, "AuthenticatedMetricExporter");
253
+ let AuthenticatedMetricExporter = _AuthenticatedMetricExporter;
254
+ const _AuthenticatedLogExporter = class _AuthenticatedLogExporter {
255
+ constructor(auth, endpoint, userAgentHeaders = {}) {
256
+ this.currentHeaders = {};
257
+ this.warnedAuthFailure = false;
258
+ this.auth = auth;
259
+ this.endpoint = endpoint;
260
+ this.userAgentHeaders = userAgentHeaders;
261
+ this.delegate = new OTLPLogExporter({
262
+ url: endpoint,
263
+ headers: /* @__PURE__ */ __name(async () => this.currentHeaders, "headers")
264
+ });
265
+ }
266
+ /**
267
+ * Exports log records to Google Cloud.
268
+ *
269
+ * @param logs Log records to export.
270
+ * @param resultCallback Callback called with the export result.
271
+ */
272
+ export(logs, resultCallback) {
273
+ void this.exportAsync(logs, resultCallback);
274
+ }
275
+ async exportAsync(logs, resultCallback) {
276
+ try {
277
+ const authHeaders = await this.auth.getRequestHeaders(this.endpoint);
278
+ this.currentHeaders = {
279
+ ...normalizeHeaders(authHeaders),
280
+ ...this.userAgentHeaders
281
+ };
282
+ } catch (error) {
283
+ if (!this.warnedAuthFailure) {
284
+ this.warnedAuthFailure = true;
285
+ logger.warn(
286
+ "Failed to obtain Google Cloud credentials for telemetry export.",
287
+ { error }
288
+ );
289
+ }
290
+ resultCallback({
291
+ code: 1,
292
+ error: error instanceof Error ? error : new Error(String(error))
293
+ });
294
+ return;
295
+ }
296
+ this.delegate.export(logs, resultCallback);
297
+ }
298
+ /**
299
+ * Shuts down the log exporter.
300
+ */
301
+ shutdown() {
302
+ return this.delegate.shutdown();
303
+ }
304
+ /**
305
+ * Flushes pending log records.
306
+ */
307
+ forceFlush() {
308
+ return this.delegate.forceFlush();
309
+ }
310
+ };
311
+ __name(_AuthenticatedLogExporter, "AuthenticatedLogExporter");
312
+ let AuthenticatedLogExporter = _AuthenticatedLogExporter;
313
+ function agentEngineLogResource(projectId) {
314
+ const agentEngineId = process.env.GOOGLE_CLOUD_AGENT_ENGINE_ID;
315
+ if (!agentEngineId) {
316
+ return emptyResource();
317
+ }
318
+ const location = process.env.GOOGLE_CLOUD_AGENT_ENGINE_LOCATION || process.env.GOOGLE_CLOUD_LOCATION || "";
319
+ return resourceFromAttributes({
320
+ [GCP_RESOURCE_TYPE]: "aiplatform.googleapis.com/ReasoningEngine",
321
+ [LOCATION]: location,
322
+ [REASONING_ENGINE_ID]: agentEngineId,
323
+ [RESOURCE_CONTAINER]: `projects/${projectId}`
324
+ });
325
+ }
326
+ __name(agentEngineLogResource, "agentEngineLogResource");
327
+ const _GCPBatchLogRecordProcessor = class _GCPBatchLogRecordProcessor extends BatchLogRecordProcessor {
328
+ constructor(exporterOrOptions, projectId) {
329
+ var _a, _b;
330
+ const options = "export" in exporterOrOptions ? { exporter: exporterOrOptions } : exporterOrOptions;
331
+ super(options);
332
+ const effectiveProjectId = (_a = projectId != null ? projectId : "projectId" in exporterOrOptions ? exporterOrOptions.projectId : void 0) != null ? _a : "";
333
+ this.logResource = agentEngineLogResource(effectiveProjectId);
334
+ const defaultLogNameEnv = (_b = process.env[GCP_DEFAULT_LOG_NAME]) == null ? void 0 : _b.trim();
335
+ this.defaultLogName = defaultLogNameEnv && defaultLogNameEnv.length > 0 ? defaultLogNameEnv : process.env.GOOGLE_CLOUD_AGENT_ENGINE_ID ? DEFAULT_AGENT_ENGINE_LOG_NAME : ADK_OTEL;
336
+ }
337
+ onEmit(logRecord) {
338
+ var _a, _b, _c, _d;
339
+ const attributes = { ...logRecord.attributes };
340
+ if (logRecord.eventName) {
341
+ attributes[EVENT_NAME] = (_a = attributes[EVENT_NAME]) != null ? _a : logRecord.eventName;
342
+ }
343
+ attributes[GCP_LOG_NAME] = (_b = attributes[GCP_LOG_NAME]) != null ? _b : this.defaultLogName;
344
+ const baseResource = (_c = logRecord.resource) != null ? _c : emptyResource();
345
+ const mergedResource = baseResource.merge(this.logResource);
346
+ const serviceVersion = mergedResource.attributes[SERVICE_VERSION];
347
+ if (serviceVersion !== void 0) {
348
+ attributes[SERVICE_VERSION] = (_d = attributes[SERVICE_VERSION]) != null ? _d : serviceVersion;
349
+ }
350
+ const emitted = Object.create(
351
+ Object.getPrototypeOf(logRecord),
352
+ {
353
+ ...Object.getOwnPropertyDescriptors(logRecord),
354
+ resource: {
355
+ value: mergedResource,
356
+ writable: true,
357
+ enumerable: true,
358
+ configurable: true
359
+ },
360
+ attributes: {
361
+ value: attributes,
362
+ writable: true,
363
+ enumerable: true,
364
+ configurable: true
365
+ },
366
+ ...process.env.GOOGLE_CLOUD_AGENT_ENGINE_ID && logRecord.eventName ? {
367
+ eventName: {
368
+ value: void 0,
369
+ writable: true,
370
+ enumerable: true,
371
+ configurable: true
372
+ },
373
+ _eventName: {
374
+ value: void 0,
375
+ writable: true,
376
+ enumerable: false,
377
+ configurable: true
378
+ }
379
+ } : {}
380
+ }
381
+ );
382
+ super.onEmit(emitted);
383
+ }
384
+ };
385
+ __name(_GCPBatchLogRecordProcessor, "GCPBatchLogRecordProcessor");
386
+ let GCPBatchLogRecordProcessor = _GCPBatchLogRecordProcessor;
387
+ async function fetchProject(project, auth) {
388
+ var _a;
389
+ if (!project) {
390
+ return { id: "", number: "" };
391
+ }
392
+ const cached = projectCache.get(project);
393
+ if (cached) {
394
+ return cached;
395
+ }
396
+ const isDigits = /^\d+$/.test(project);
397
+ const known = {
398
+ id: isDigits ? "" : project,
399
+ number: ""
400
+ };
401
+ try {
402
+ const authClient = auth != null ? auth : new GoogleAuth({
403
+ scopes: [CLOUD_PLATFORM_SCOPE]
404
+ });
405
+ const url = `https://cloudresourcemanager.googleapis.com/v3/projects/${encodeURIComponent(project)}`;
406
+ const response = await authClient.request({
407
+ url
408
+ });
409
+ const data = response.data;
410
+ const projectNumber = (data == null ? void 0 : data.name) ? data.name.replace(/^projects\//, "") : "";
411
+ const projectId = (_a = data == null ? void 0 : data.projectId) != null ? _a : isDigits ? "" : project;
412
+ const resolved = {
413
+ id: projectId,
414
+ number: projectNumber
415
+ };
416
+ if (projectCache.size >= PROJECT_CACHE_SIZE) {
417
+ const firstKey = projectCache.keys().next().value;
418
+ if (firstKey !== void 0) {
419
+ projectCache.delete(firstKey);
420
+ }
421
+ }
422
+ projectCache.set(project, resolved);
423
+ return resolved;
424
+ } catch (error) {
425
+ logger.warn(
426
+ "Failed to look up the project's other identifier. Your traces and logs may not be associated, and the agent URN may be incomplete. To fix this, ensure the Cloud Resource Manager API is enabled with the 'resourcemanager.projects.get' permission.",
427
+ { error }
428
+ );
429
+ return known;
430
+ }
431
+ }
432
+ __name(fetchProject, "fetchProject");
433
+ async function getGcpProjectId(auth) {
434
+ if (process.env.GOOGLE_CLOUD_PROJECT) {
435
+ return process.env.GOOGLE_CLOUD_PROJECT;
436
+ }
437
+ try {
438
+ const authClient = auth != null ? auth : new GoogleAuth({
439
+ scopes: [CLOUD_PLATFORM_SCOPE]
440
+ });
441
+ const projectId = await authClient.getProjectId();
442
+ return projectId || void 0;
443
+ } catch {
444
+ return void 0;
445
+ }
446
+ }
447
+ __name(getGcpProjectId, "getGcpProjectId");
448
+ function k8sNamespace() {
449
+ try {
450
+ return fs.readFileSync(K8S_NAMESPACE_PATH, "utf8").trim();
451
+ } catch {
452
+ return "";
453
+ }
454
+ }
455
+ __name(k8sNamespace, "k8sNamespace");
456
+ function k8sDeployment() {
457
+ var _a;
458
+ const hostname = (_a = process.env.HOSTNAME) != null ? _a : "";
459
+ if (POD_NAME_HASHES.test(hostname)) {
460
+ return hostname.replace(POD_NAME_HASHES, "");
461
+ }
462
+ return "";
463
+ }
464
+ __name(k8sDeployment, "k8sDeployment");
465
+ function urnAgentRuntimeSegment() {
466
+ const agentEngineId = process.env.GOOGLE_CLOUD_AGENT_ENGINE_ID;
467
+ if (!agentEngineId) {
468
+ logger.warn(
469
+ "The Agent Runtime instance ID is unknown, so no agent URN is set."
470
+ );
471
+ return "";
472
+ }
473
+ return `aiplatform:reasoningEngines:${agentEngineId}`;
474
+ }
475
+ __name(urnAgentRuntimeSegment, "urnAgentRuntimeSegment");
476
+ function urnGkeSegment(attributes) {
477
+ const cluster = attributes["k8s.cluster.name"] || "";
478
+ const namespace = attributes["k8s.namespace.name"] || k8sNamespace();
479
+ const deployment = attributes["k8s.deployment.name"] || k8sDeployment();
480
+ if (!cluster) {
481
+ logger.warn(
482
+ "The GKE cluster is unknown, so no agent URN is set. Set k8s.cluster.name in OTEL_RESOURCE_ATTRIBUTES to state it."
483
+ );
484
+ }
485
+ if (!namespace) {
486
+ logger.warn(
487
+ "The GKE namespace is unknown, so no agent URN is set. Set k8s.namespace.name in OTEL_RESOURCE_ATTRIBUTES to state it."
488
+ );
489
+ }
490
+ if (!deployment) {
491
+ logger.warn(
492
+ "The GKE Deployment is unknown, so no agent URN is set. Set k8s.deployment.name in OTEL_RESOURCE_ATTRIBUTES to state it."
493
+ );
494
+ }
495
+ if (!cluster || !namespace || !deployment) {
496
+ return "";
497
+ }
498
+ return `container:clusters:${cluster}:k8s:namespaces:${namespace}:apps:deployments:${deployment}`;
499
+ }
500
+ __name(urnGkeSegment, "urnGkeSegment");
501
+ function urnCloudRunSegment(attributes) {
502
+ const service = attributes["faas.name"] || "";
503
+ if (!service) {
504
+ logger.warn(
505
+ "The Cloud Run service name is unknown, so no agent URN is set."
506
+ );
507
+ return "";
508
+ }
509
+ return `run:services:${service}`;
510
+ }
511
+ __name(urnCloudRunSegment, "urnCloudRunSegment");
512
+ function urnWorkloadSegment(attributes) {
513
+ const platform = attributes["cloud.platform"];
514
+ if (platform === "gcp.agent_engine") {
515
+ return urnAgentRuntimeSegment();
516
+ }
517
+ if (platform === "gcp_kubernetes_engine") {
518
+ return urnGkeSegment(attributes);
519
+ }
520
+ if (platform === "gcp_cloud_run") {
521
+ return urnCloudRunSegment(attributes);
522
+ }
523
+ return null;
524
+ }
525
+ __name(urnWorkloadSegment, "urnWorkloadSegment");
526
+ function urnLocationSegment(attributes) {
527
+ const zone = attributes["cloud.availability_zone"];
528
+ if (zone) {
529
+ return `zones:${zone}`;
530
+ }
531
+ const region = attributes["cloud.region"];
532
+ if (region) {
533
+ return `locations:${region}`;
534
+ }
535
+ return "";
536
+ }
537
+ __name(urnLocationSegment, "urnLocationSegment");
538
+ async function getUrnEnrichedResource(resource, fallbackProjectId) {
539
+ const attributes = resource.attributes;
540
+ if (attributes["gen_ai.main_agent.id"]) {
541
+ return emptyResource();
542
+ }
543
+ const workload = urnWorkloadSegment(attributes);
544
+ if (!workload) {
545
+ return emptyResource();
546
+ }
547
+ const projectId = attributes["cloud.account.id"] || fallbackProjectId;
548
+ if (!projectId) {
549
+ logger.warn("The project ID is unknown, so no agent URN is set.");
550
+ return emptyResource();
551
+ }
552
+ const projectInfo = await fetchProject(projectId);
553
+ if (!projectInfo.number) {
554
+ logger.warn(
555
+ `The number of project '${projectId}' is unknown, so no agent URN is set.`
556
+ );
557
+ return emptyResource();
558
+ }
559
+ const location = urnLocationSegment(attributes);
560
+ if (!location) {
561
+ logger.warn(
562
+ "Neither a zone nor a region could be detected, so no agent URN is set."
563
+ );
564
+ return emptyResource();
565
+ }
566
+ const urn = [
567
+ "urn:agent",
568
+ `projects-${projectInfo.number}`,
569
+ `projects:${projectInfo.number}`,
570
+ location,
571
+ workload
572
+ ].join(":");
573
+ return resourceFromAttributes({ "gen_ai.main_agent.id": urn });
574
+ }
575
+ __name(getUrnEnrichedResource, "getUrnEnrichedResource");
576
+ async function getGcpResource(projectId) {
577
+ var _a, _b;
578
+ let resolvedProjectId = projectId;
579
+ if (!resolvedProjectId) {
580
+ resolvedProjectId = await getGcpProjectId();
581
+ }
582
+ const instanceId = `${randomUUID().replace(/-/g, "")}-${process.pid}`;
583
+ const commonAttributes = {
584
+ "service.instance.id": instanceId
585
+ };
586
+ if (resolvedProjectId) {
587
+ commonAttributes["gcp.project_id"] = resolvedProjectId;
588
+ commonAttributes["cloud.account.id"] = resolvedProjectId;
589
+ } else {
590
+ logger.warn(
591
+ "No project could be determined, so telemetry will not name one. Set GOOGLE_CLOUD_PROJECT, or pass a project explicitly, if it should."
592
+ );
593
+ }
594
+ let resource = resourceFromAttributes(commonAttributes);
595
+ const agentEngineId = process.env.GOOGLE_CLOUD_AGENT_ENGINE_ID;
596
+ if (agentEngineId) {
597
+ const location = process.env.GOOGLE_CLOUD_AGENT_ENGINE_LOCATION || process.env.GOOGLE_CLOUD_LOCATION || "";
598
+ if (!location) {
599
+ logger.warn(
600
+ "On Agent Runtime with no location set, so this deployment cannot be named. Set GOOGLE_CLOUD_AGENT_ENGINE_LOCATION or GOOGLE_CLOUD_LOCATION."
601
+ );
602
+ }
603
+ const aeAttributes = {
604
+ "cloud.provider": "gcp",
605
+ "cloud.platform": "gcp.agent_engine",
606
+ "service.name": agentEngineId,
607
+ "service.version": (_a = process.env.GOOGLE_CLOUD_AGENT_ENGINE_RUNTIME_REVISION_ID) != null ? _a : "",
608
+ "cloud.region": location
609
+ };
610
+ if (resolvedProjectId && location) {
611
+ aeAttributes["cloud.resource_id"] = `//aiplatform.googleapis.com/projects/${resolvedProjectId}/locations/${location}/reasoningEngines/${agentEngineId}`;
612
+ }
613
+ resource = resource.merge(
614
+ defaultResource().merge(resourceFromAttributes(aeAttributes))
615
+ );
616
+ }
617
+ const otelDetected = detectResources({ detectors: [envDetector] });
618
+ resource = resource.merge(otelDetected);
619
+ if (!agentEngineId) {
620
+ try {
621
+ const gcpDetected = detectResources({ detectors: [gcpDetector] });
622
+ if (gcpDetected.asyncAttributesPending) {
623
+ await ((_b = gcpDetected.waitForAsyncAttributes) == null ? void 0 : _b.call(gcpDetected));
624
+ }
625
+ resource = resource.merge(gcpDetected);
626
+ } catch (error) {
627
+ logger.warn(
628
+ "Could not detect GCP resource attributes. GCE, GKE or CloudRun related resource attributes may be missing.",
629
+ { error }
630
+ );
631
+ }
632
+ }
633
+ const urnResource = await getUrnEnrichedResource(resource, resolvedProjectId);
634
+ resource = resource.merge(urnResource);
635
+ return resource;
636
+ }
637
+ __name(getGcpResource, "getGcpResource");
638
+ function createMetricReader(exporter) {
639
+ if (process.env.GOOGLE_CLOUD_AGENT_ENGINE_ID) {
640
+ if (!(metrics.getMeterProvider() instanceof MeterProvider)) {
641
+ return new RequestDrivenMetricReader({ exporter });
642
+ }
643
+ logger.warn(
644
+ "A MeterProvider is already installed; skipping request-driven metric export. On Agent Runtime metrics may be dropped between requests."
645
+ );
646
+ }
647
+ return new PeriodicExportingMetricReader({
648
+ exporter,
649
+ exportIntervalMillis: MIN_EXPORT_INTERVAL_MS
650
+ });
651
+ }
652
+ __name(createMetricReader, "createMetricReader");
653
+ async function getGcpExporters(config = {}) {
654
+ const {
655
+ enableTracing = false,
656
+ enableMetrics = false,
657
+ enableLogging = false,
658
+ auth: providedAuth
659
+ } = config;
660
+ const auth = providedAuth != null ? providedAuth : new GoogleAuth({
661
+ scopes: [CLOUD_PLATFORM_SCOPE]
662
+ });
663
+ let projectId = config.projectId;
664
+ if (!projectId) {
665
+ projectId = await getGcpProjectId(auth);
666
+ }
667
+ if (process.env.GOOGLE_CLOUD_AGENT_ENGINE_ID && projectId) {
668
+ const projectInfo = await fetchProject(projectId, auth);
669
+ projectId = projectInfo.id || projectId;
670
+ }
671
+ if (!projectId) {
672
+ logger.warn(GCP_PROJECT_ERROR_MESSAGE);
673
+ return {};
674
+ }
675
+ const userAgentHeaders = getAgentEngineUserAgentHeader();
676
+ const spanProcessors = enableTracing ? [
677
+ new BatchSpanProcessor(
678
+ new AuthenticatedTraceExporter(
679
+ auth,
680
+ getTelemetryEndpoint(
681
+ DEFAULT_TELEMETRY_TRACES_ENDPOINT,
682
+ DEFAULT_MTLS_TELEMETRY_TRACES_ENDPOINT
683
+ ),
684
+ userAgentHeaders
685
+ )
686
+ )
687
+ ] : [];
688
+ const metricReaders = enableMetrics ? [
689
+ createMetricReader(
690
+ new AuthenticatedMetricExporter(
691
+ auth,
692
+ getTelemetryEndpoint(
693
+ DEFAULT_TELEMETRY_METRICS_ENDPOINT,
694
+ DEFAULT_MTLS_TELEMETRY_METRICS_ENDPOINT
695
+ ),
696
+ userAgentHeaders
697
+ )
698
+ )
699
+ ] : [];
700
+ const logRecordProcessors = enableLogging ? [
701
+ new GCPBatchLogRecordProcessor(
702
+ new AuthenticatedLogExporter(
703
+ auth,
704
+ getTelemetryEndpoint(
705
+ DEFAULT_TELEMETRY_LOGS_ENDPOINT,
706
+ DEFAULT_MTLS_TELEMETRY_LOGS_ENDPOINT
707
+ ),
708
+ userAgentHeaders
709
+ ),
710
+ projectId
711
+ )
712
+ ] : [];
713
+ return {
714
+ spanProcessors,
715
+ metricReaders,
716
+ logRecordProcessors
717
+ };
718
+ }
719
+ __name(getGcpExporters, "getGcpExporters");
720
+ export {
721
+ AuthenticatedLogExporter,
722
+ AuthenticatedMetricExporter,
723
+ AuthenticatedTraceExporter,
724
+ GCPBatchLogRecordProcessor,
725
+ agentRuntimeRequestHooks,
726
+ clearProjectCache,
727
+ fetchProject,
728
+ getAgentEngineUserAgentHeader,
729
+ getGcpExporters,
730
+ getGcpProjectId,
731
+ getGcpResource,
732
+ getTelemetryEndpoint
733
+ };