@google/adk 0.6.1 → 1.1.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 (415) hide show
  1. package/dist/cjs/agents/base_agent.js +11 -2
  2. package/dist/cjs/agents/context.js +1 -0
  3. package/dist/cjs/agents/functions.js +1 -0
  4. package/dist/cjs/agents/invocation_context.js +1 -0
  5. package/dist/cjs/agents/llm_agent.js +70 -13
  6. package/dist/cjs/agents/loop_agent.js +4 -0
  7. package/dist/cjs/agents/parallel_agent.js +4 -0
  8. package/dist/cjs/agents/processors/code_execution_request_processor.js +2 -0
  9. package/dist/cjs/agents/processors/context_compactor_request_processor.js +9 -0
  10. package/dist/cjs/agents/processors/tool_filter_request_processor.js +73 -0
  11. package/dist/cjs/agents/routed_agent.js +97 -0
  12. package/dist/cjs/auth/auth_handler.js +66 -1
  13. package/dist/cjs/auth/auth_preprocessor.js +178 -0
  14. package/dist/cjs/auth/auth_provider_registry.js +61 -0
  15. package/dist/cjs/auth/base_auth_provider.js +27 -0
  16. package/dist/cjs/auth/credential_service/session_state_credential_service.js +51 -0
  17. package/dist/cjs/auth/oauth2/oauth2_credential_exchanger.js +198 -0
  18. package/dist/cjs/auth/oauth2/oauth2_credential_refresher.js +109 -0
  19. package/dist/cjs/auth/oauth2/oauth2_discovery.js +186 -0
  20. package/dist/cjs/auth/oauth2/oauth2_utils.js +119 -0
  21. package/dist/cjs/auth/refresher/base_credential_refresher.js +44 -0
  22. package/dist/cjs/auth/refresher/credential_refresher_registry.js +68 -0
  23. package/dist/cjs/code_executors/base_code_executor.js +9 -5
  24. package/dist/cjs/code_executors/code_execution_utils.js +19 -0
  25. package/dist/cjs/code_executors/unsafe_local_code_executor.js +241 -0
  26. package/dist/cjs/common.js +69 -0
  27. package/dist/cjs/features/feature_registry.js +141 -0
  28. package/dist/cjs/index.js +83 -113
  29. package/dist/cjs/models/apigee_llm.js +2 -2
  30. package/dist/cjs/models/google_llm.js +18 -53
  31. package/dist/cjs/models/routed_llm.js +99 -0
  32. package/dist/cjs/plugins/base_plugin.js +39 -2
  33. package/dist/cjs/plugins/plugin_manager.js +39 -0
  34. package/dist/cjs/runner/runner.js +31 -3
  35. package/dist/cjs/sessions/db/operations.js +3 -10
  36. package/dist/cjs/skills/loader.js +283 -0
  37. package/dist/cjs/skills/prompt.js +58 -0
  38. package/dist/cjs/skills/skill.js +78 -0
  39. package/dist/cjs/tools/agent_tool.js +11 -4
  40. package/dist/cjs/tools/mcp/mcp_tool.js +7 -3
  41. package/dist/cjs/tools/mcp/mcp_toolset.js +1 -1
  42. package/dist/cjs/tools/skill/list_skills_tool.js +76 -0
  43. package/dist/cjs/tools/skill/load_skill_resource_tool.js +225 -0
  44. package/dist/cjs/tools/skill/load_skill_tool.js +108 -0
  45. package/dist/cjs/tools/skill/run_skill_inline_script_tool.js +146 -0
  46. package/dist/cjs/tools/skill/run_skill_script_tool.js +224 -0
  47. package/dist/cjs/tools/skill/skill_toolset.js +163 -0
  48. package/dist/cjs/tools/url_context_tool.js +73 -0
  49. package/dist/cjs/tools/vertex_ai_search_tool.js +127 -0
  50. package/dist/cjs/utils/experimental.js +74 -0
  51. package/dist/cjs/utils/failover_utils.js +93 -0
  52. package/dist/cjs/utils/file_extension_utils.js +77 -0
  53. package/dist/cjs/utils/file_utils.js +94 -0
  54. package/dist/cjs/utils/model_name.js +8 -2
  55. package/dist/cjs/utils/streaming_utils.js +333 -0
  56. package/dist/cjs/version.js +1 -1
  57. package/dist/esm/a2a/a2a_event.js +2 -0
  58. package/dist/esm/a2a/a2a_remote_agent.js +2 -0
  59. package/dist/esm/a2a/a2a_remote_agent_run_processor.js +2 -0
  60. package/dist/esm/a2a/a2a_remote_agent_utils.js +2 -0
  61. package/dist/esm/a2a/agent_card.js +2 -0
  62. package/dist/esm/a2a/agent_executor.js +2 -0
  63. package/dist/esm/a2a/agent_to_a2a.js +2 -0
  64. package/dist/esm/a2a/event_converter_utils.js +2 -0
  65. package/dist/esm/a2a/event_processor_utils.js +2 -0
  66. package/dist/esm/a2a/executor_context.js +2 -0
  67. package/dist/esm/a2a/metadata_converter_utils.js +2 -0
  68. package/dist/esm/a2a/part_converter_utils.js +2 -0
  69. package/dist/esm/agents/active_streaming_tool.js +2 -0
  70. package/dist/esm/agents/base_agent.js +13 -2
  71. package/dist/esm/agents/context.js +3 -0
  72. package/dist/esm/agents/functions.js +3 -0
  73. package/dist/esm/agents/instructions.js +2 -0
  74. package/dist/esm/agents/invocation_context.js +3 -0
  75. package/dist/esm/agents/live_request_queue.js +2 -0
  76. package/dist/esm/agents/llm_agent.js +72 -13
  77. package/dist/esm/agents/loop_agent.js +6 -0
  78. package/dist/esm/agents/parallel_agent.js +6 -0
  79. package/dist/esm/agents/processors/agent_transfer_llm_request_processor.js +2 -0
  80. package/dist/esm/agents/processors/base_llm_processor.js +2 -0
  81. package/dist/esm/agents/processors/basic_llm_request_processor.js +2 -0
  82. package/dist/esm/agents/processors/code_execution_request_processor.js +5 -0
  83. package/dist/esm/agents/processors/content_processor_utils.js +2 -0
  84. package/dist/esm/agents/processors/content_request_processor.js +2 -0
  85. package/dist/esm/agents/processors/context_compactor_request_processor.js +11 -0
  86. package/dist/esm/agents/processors/identity_llm_request_processor.js +2 -0
  87. package/dist/esm/agents/processors/instructions_llm_request_processor.js +2 -0
  88. package/dist/esm/agents/processors/request_confirmation_llm_request_processor.js +2 -0
  89. package/dist/esm/agents/processors/tool_filter_request_processor.js +44 -0
  90. package/dist/esm/agents/readonly_context.js +2 -0
  91. package/dist/esm/agents/routed_agent.js +70 -0
  92. package/dist/esm/agents/run_config.js +2 -0
  93. package/dist/esm/agents/sequential_agent.js +2 -0
  94. package/dist/esm/agents/transcription_entry.js +2 -0
  95. package/dist/esm/artifacts/base_artifact_service.js +2 -0
  96. package/dist/esm/artifacts/file_artifact_service.js +2 -0
  97. package/dist/esm/artifacts/gcs_artifact_service.js +2 -0
  98. package/dist/esm/artifacts/in_memory_artifact_service.js +2 -0
  99. package/dist/esm/artifacts/registry.js +2 -0
  100. package/dist/esm/auth/auth_credential.js +2 -0
  101. package/dist/esm/auth/auth_handler.js +68 -1
  102. package/dist/esm/auth/auth_preprocessor.js +155 -0
  103. package/dist/esm/auth/auth_provider_registry.js +33 -0
  104. package/dist/esm/auth/auth_schemes.js +2 -0
  105. package/dist/esm/auth/auth_tool.js +2 -0
  106. package/dist/esm/auth/base_auth_provider.js +7 -0
  107. package/dist/esm/auth/credential_service/base_credential_service.js +2 -0
  108. package/dist/esm/auth/credential_service/in_memory_credential_service.js +2 -0
  109. package/dist/esm/auth/credential_service/session_state_credential_service.js +23 -0
  110. package/dist/esm/auth/exchanger/base_credential_exchanger.js +2 -0
  111. package/dist/esm/auth/exchanger/credential_exchanger_registry.js +2 -0
  112. package/dist/esm/auth/oauth2/oauth2_credential_exchanger.js +177 -0
  113. package/dist/esm/auth/oauth2/oauth2_credential_refresher.js +85 -0
  114. package/dist/esm/auth/oauth2/oauth2_discovery.js +156 -0
  115. package/dist/esm/auth/oauth2/oauth2_utils.js +87 -0
  116. package/dist/esm/auth/refresher/base_credential_refresher.js +16 -0
  117. package/dist/esm/auth/refresher/credential_refresher_registry.js +40 -0
  118. package/dist/esm/code_executors/base_code_executor.js +11 -5
  119. package/dist/esm/code_executors/built_in_code_executor.js +2 -0
  120. package/dist/esm/code_executors/code_execution_utils.js +19 -0
  121. package/dist/esm/code_executors/code_executor_context.js +2 -0
  122. package/dist/esm/code_executors/unsafe_local_code_executor.js +205 -0
  123. package/dist/esm/common.js +52 -3
  124. package/dist/esm/context/base_context_compactor.js +2 -0
  125. package/dist/esm/context/summarizers/base_summarizer.js +2 -0
  126. package/dist/esm/context/summarizers/llm_summarizer.js +2 -0
  127. package/dist/esm/context/token_based_context_compactor.js +2 -0
  128. package/dist/esm/context/truncating_context_compactor.js +2 -0
  129. package/dist/esm/events/compacted_event.js +2 -0
  130. package/dist/esm/events/event.js +2 -0
  131. package/dist/esm/events/event_actions.js +2 -0
  132. package/dist/esm/events/structured_events.js +2 -0
  133. package/dist/esm/examples/base_example_provider.js +2 -0
  134. package/dist/esm/examples/example.js +2 -0
  135. package/dist/esm/examples/example_util.js +2 -0
  136. package/dist/esm/features/feature_registry.js +107 -0
  137. package/dist/esm/index.js +45 -119
  138. package/dist/esm/index_web.js +2 -0
  139. package/dist/esm/memory/base_memory_service.js +2 -0
  140. package/dist/esm/memory/in_memory_memory_service.js +2 -0
  141. package/dist/esm/memory/memory_entry.js +2 -0
  142. package/dist/esm/models/apigee_llm.js +4 -2
  143. package/dist/esm/models/base_llm.js +2 -0
  144. package/dist/esm/models/base_llm_connection.js +2 -0
  145. package/dist/esm/models/gemini_llm_connection.js +2 -0
  146. package/dist/esm/models/google_llm.js +20 -54
  147. package/dist/esm/models/llm_request.js +2 -0
  148. package/dist/esm/models/llm_response.js +2 -0
  149. package/dist/esm/models/registry.js +2 -0
  150. package/dist/esm/models/routed_llm.js +73 -0
  151. package/dist/esm/plugins/base_plugin.js +41 -1
  152. package/dist/esm/plugins/logging_plugin.js +2 -0
  153. package/dist/esm/plugins/plugin_manager.js +41 -0
  154. package/dist/esm/plugins/security_plugin.js +2 -0
  155. package/dist/esm/runner/in_memory_runner.js +2 -0
  156. package/dist/esm/runner/runner.js +33 -3
  157. package/dist/esm/sessions/base_session_service.js +2 -0
  158. package/dist/esm/sessions/database_session_service.js +2 -0
  159. package/dist/esm/sessions/db/operations.js +5 -10
  160. package/dist/esm/sessions/db/schema.js +2 -0
  161. package/dist/esm/sessions/in_memory_session_service.js +2 -0
  162. package/dist/esm/sessions/registry.js +2 -0
  163. package/dist/esm/sessions/session.js +2 -0
  164. package/dist/esm/sessions/state.js +2 -0
  165. package/dist/esm/skills/loader.js +244 -0
  166. package/dist/esm/skills/prompt.js +30 -0
  167. package/dist/esm/skills/skill.js +49 -0
  168. package/dist/esm/telemetry/google_cloud.js +2 -0
  169. package/dist/esm/telemetry/setup.js +2 -0
  170. package/dist/esm/telemetry/tracing.js +2 -0
  171. package/dist/esm/tools/agent_tool.js +13 -4
  172. package/dist/esm/tools/base_tool.js +2 -0
  173. package/dist/esm/tools/base_toolset.js +2 -0
  174. package/dist/esm/tools/exit_loop_tool.js +2 -0
  175. package/dist/esm/tools/forwarding_artifact_service.js +2 -0
  176. package/dist/esm/tools/function_tool.js +2 -0
  177. package/dist/esm/tools/google_search_tool.js +2 -0
  178. package/dist/esm/tools/load_artifacts_tool.js +2 -0
  179. package/dist/esm/tools/load_memory_tool.js +2 -0
  180. package/dist/esm/tools/long_running_tool.js +2 -0
  181. package/dist/esm/tools/mcp/mcp_session_manager.js +2 -0
  182. package/dist/esm/tools/mcp/mcp_tool.js +9 -3
  183. package/dist/esm/tools/mcp/mcp_toolset.js +3 -1
  184. package/dist/esm/tools/preload_memory_tool.js +2 -0
  185. package/dist/esm/tools/skill/list_skills_tool.js +50 -0
  186. package/dist/esm/tools/skill/load_skill_resource_tool.js +191 -0
  187. package/dist/esm/tools/skill/load_skill_tool.js +82 -0
  188. package/dist/esm/tools/skill/run_skill_inline_script_tool.js +120 -0
  189. package/dist/esm/tools/skill/run_skill_script_tool.js +192 -0
  190. package/dist/esm/tools/skill/skill_toolset.js +137 -0
  191. package/dist/esm/tools/tool_confirmation.js +2 -0
  192. package/dist/esm/tools/url_context_tool.js +44 -0
  193. package/dist/esm/tools/vertex_ai_search_tool.js +103 -0
  194. package/dist/esm/utils/client_labels.js +2 -0
  195. package/dist/esm/utils/env_aware_utils.js +2 -0
  196. package/dist/esm/utils/experimental.js +46 -0
  197. package/dist/esm/utils/failover_utils.js +65 -0
  198. package/dist/esm/utils/file_extension_utils.js +51 -0
  199. package/dist/esm/utils/file_utils.js +56 -0
  200. package/dist/esm/utils/gemini_schema_util.js +2 -0
  201. package/dist/esm/utils/logger.js +2 -0
  202. package/dist/esm/utils/model_name.js +8 -1
  203. package/dist/esm/utils/object_notation_utils.js +2 -0
  204. package/dist/esm/utils/simple_zod_to_json.js +2 -0
  205. package/dist/esm/utils/streaming_utils.js +307 -0
  206. package/dist/esm/utils/variant_utils.js +2 -0
  207. package/dist/esm/version.js +3 -1
  208. package/dist/types/agents/context.d.ts +1 -0
  209. package/dist/types/agents/invocation_context.d.ts +5 -0
  210. package/dist/types/agents/processors/tool_filter_request_processor.d.ts +14 -0
  211. package/dist/types/agents/routed_agent.d.ts +59 -0
  212. package/dist/types/auth/auth_credential.d.ts +17 -0
  213. package/dist/types/auth/auth_handler.d.ts +1 -0
  214. package/dist/types/auth/auth_preprocessor.d.ts +12 -0
  215. package/dist/types/auth/auth_provider_registry.d.ts +27 -0
  216. package/dist/types/auth/base_auth_provider.d.ts +20 -0
  217. package/dist/types/auth/credential_service/session_state_credential_service.d.ts +20 -0
  218. package/dist/types/auth/exchanger/base_credential_exchanger.d.ts +12 -5
  219. package/dist/types/auth/oauth2/oauth2_credential_exchanger.d.ts +26 -0
  220. package/dist/types/auth/oauth2/oauth2_credential_refresher.d.ts +29 -0
  221. package/dist/types/auth/oauth2/oauth2_discovery.d.ts +38 -0
  222. package/dist/types/auth/oauth2/oauth2_utils.d.ts +56 -0
  223. package/dist/types/auth/refresher/base_credential_refresher.d.ts +38 -0
  224. package/dist/types/auth/refresher/credential_refresher_registry.d.ts +27 -0
  225. package/dist/types/code_executors/base_code_executor.d.ts +4 -4
  226. package/dist/types/code_executors/code_execution_utils.d.ts +29 -1
  227. package/dist/types/code_executors/unsafe_local_code_executor.d.ts +48 -0
  228. package/dist/types/common.d.ts +29 -3
  229. package/dist/types/features/feature_registry.d.ts +66 -0
  230. package/dist/types/index.d.ts +4 -0
  231. package/dist/types/memory/base_memory_service.d.ts +6 -0
  232. package/dist/types/memory/memory_entry.d.ts +11 -5
  233. package/dist/types/models/apigee_llm.d.ts +1 -1
  234. package/dist/types/models/base_llm.d.ts +1 -1
  235. package/dist/types/models/google_llm.d.ts +1 -1
  236. package/dist/types/models/llm_request.d.ts +4 -0
  237. package/dist/types/models/routed_llm.d.ts +38 -0
  238. package/dist/types/plugins/base_plugin.d.ts +49 -0
  239. package/dist/types/plugins/plugin_manager.d.ts +22 -1
  240. package/dist/types/runner/runner.d.ts +1 -0
  241. package/dist/types/skills/loader.d.ts +38 -0
  242. package/dist/types/skills/prompt.d.ts +13 -0
  243. package/dist/types/skills/skill.d.ts +48 -0
  244. package/dist/types/tools/mcp/mcp_tool.d.ts +7 -1
  245. package/dist/types/tools/mcp/mcp_toolset.d.ts +5 -0
  246. package/dist/types/tools/skill/list_skills_tool.d.ts +14 -0
  247. package/dist/types/tools/skill/load_skill_resource_tool.d.ts +15 -0
  248. package/dist/types/tools/skill/load_skill_tool.d.ts +14 -0
  249. package/dist/types/tools/skill/run_skill_inline_script_tool.d.ts +14 -0
  250. package/dist/types/tools/skill/run_skill_script_tool.d.ts +17 -0
  251. package/dist/types/tools/skill/skill_toolset.d.ts +28 -0
  252. package/dist/types/tools/url_context_tool.d.ts +17 -0
  253. package/dist/types/tools/vertex_ai_search_tool.d.ts +55 -0
  254. package/dist/types/utils/experimental.d.ts +11 -0
  255. package/dist/types/utils/failover_utils.d.ts +17 -0
  256. package/dist/types/utils/file_extension_utils.d.ts +21 -0
  257. package/dist/types/utils/file_utils.d.ts +11 -0
  258. package/dist/types/utils/model_name.d.ts +4 -0
  259. package/dist/types/utils/streaming_utils.d.ts +40 -0
  260. package/dist/types/version.d.ts +1 -1
  261. package/dist/web/a2a/a2a_event.js +2 -0
  262. package/dist/web/a2a/a2a_remote_agent.js +2 -0
  263. package/dist/web/a2a/a2a_remote_agent_run_processor.js +2 -0
  264. package/dist/web/a2a/a2a_remote_agent_utils.js +2 -0
  265. package/dist/web/a2a/agent_card.js +2 -0
  266. package/dist/web/a2a/agent_executor.js +2 -0
  267. package/dist/web/a2a/agent_to_a2a.js +2 -0
  268. package/dist/web/a2a/event_converter_utils.js +2 -0
  269. package/dist/web/a2a/event_processor_utils.js +2 -0
  270. package/dist/web/a2a/executor_context.js +2 -0
  271. package/dist/web/a2a/metadata_converter_utils.js +2 -0
  272. package/dist/web/a2a/part_converter_utils.js +2 -0
  273. package/dist/web/agents/active_streaming_tool.js +2 -0
  274. package/dist/web/agents/base_agent.js +13 -2
  275. package/dist/web/agents/context.js +3 -0
  276. package/dist/web/agents/functions.js +3 -0
  277. package/dist/web/agents/instructions.js +2 -0
  278. package/dist/web/agents/invocation_context.js +3 -0
  279. package/dist/web/agents/live_request_queue.js +2 -0
  280. package/dist/web/agents/llm_agent.js +72 -13
  281. package/dist/web/agents/loop_agent.js +6 -0
  282. package/dist/web/agents/parallel_agent.js +6 -0
  283. package/dist/web/agents/processors/agent_transfer_llm_request_processor.js +2 -0
  284. package/dist/web/agents/processors/base_llm_processor.js +2 -0
  285. package/dist/web/agents/processors/basic_llm_request_processor.js +2 -0
  286. package/dist/web/agents/processors/code_execution_request_processor.js +5 -0
  287. package/dist/web/agents/processors/content_processor_utils.js +2 -0
  288. package/dist/web/agents/processors/content_request_processor.js +2 -0
  289. package/dist/web/agents/processors/context_compactor_request_processor.js +11 -0
  290. package/dist/web/agents/processors/identity_llm_request_processor.js +2 -0
  291. package/dist/web/agents/processors/instructions_llm_request_processor.js +2 -0
  292. package/dist/web/agents/processors/request_confirmation_llm_request_processor.js +2 -0
  293. package/dist/web/agents/processors/tool_filter_request_processor.js +62 -0
  294. package/dist/web/agents/readonly_context.js +2 -0
  295. package/dist/web/agents/routed_agent.js +138 -0
  296. package/dist/web/agents/run_config.js +2 -0
  297. package/dist/web/agents/sequential_agent.js +2 -0
  298. package/dist/web/agents/transcription_entry.js +2 -0
  299. package/dist/web/artifacts/base_artifact_service.js +2 -0
  300. package/dist/web/artifacts/file_artifact_service.js +2 -0
  301. package/dist/web/artifacts/gcs_artifact_service.js +2 -0
  302. package/dist/web/artifacts/in_memory_artifact_service.js +2 -0
  303. package/dist/web/artifacts/registry.js +2 -0
  304. package/dist/web/auth/auth_credential.js +2 -0
  305. package/dist/web/auth/auth_handler.js +85 -1
  306. package/dist/web/auth/auth_preprocessor.js +173 -0
  307. package/dist/web/auth/auth_provider_registry.js +33 -0
  308. package/dist/web/auth/auth_schemes.js +2 -0
  309. package/dist/web/auth/auth_tool.js +2 -0
  310. package/dist/web/auth/base_auth_provider.js +7 -0
  311. package/dist/web/auth/credential_service/base_credential_service.js +2 -0
  312. package/dist/web/auth/credential_service/in_memory_credential_service.js +2 -0
  313. package/dist/web/auth/credential_service/session_state_credential_service.js +23 -0
  314. package/dist/web/auth/exchanger/base_credential_exchanger.js +2 -0
  315. package/dist/web/auth/exchanger/credential_exchanger_registry.js +2 -0
  316. package/dist/web/auth/oauth2/oauth2_credential_exchanger.js +188 -0
  317. package/dist/web/auth/oauth2/oauth2_credential_refresher.js +102 -0
  318. package/dist/web/auth/oauth2/oauth2_discovery.js +156 -0
  319. package/dist/web/auth/oauth2/oauth2_utils.js +87 -0
  320. package/dist/web/auth/refresher/base_credential_refresher.js +16 -0
  321. package/dist/web/auth/refresher/credential_refresher_registry.js +40 -0
  322. package/dist/web/code_executors/base_code_executor.js +11 -5
  323. package/dist/web/code_executors/built_in_code_executor.js +2 -0
  324. package/dist/web/code_executors/code_execution_utils.js +19 -0
  325. package/dist/web/code_executors/code_executor_context.js +2 -0
  326. package/dist/web/code_executors/unsafe_local_code_executor.js +203 -0
  327. package/dist/web/common.js +52 -3
  328. package/dist/web/context/base_context_compactor.js +2 -0
  329. package/dist/web/context/summarizers/base_summarizer.js +2 -0
  330. package/dist/web/context/summarizers/llm_summarizer.js +2 -0
  331. package/dist/web/context/token_based_context_compactor.js +2 -0
  332. package/dist/web/context/truncating_context_compactor.js +2 -0
  333. package/dist/web/events/compacted_event.js +2 -0
  334. package/dist/web/events/event.js +2 -0
  335. package/dist/web/events/event_actions.js +2 -0
  336. package/dist/web/events/structured_events.js +2 -0
  337. package/dist/web/examples/base_example_provider.js +2 -0
  338. package/dist/web/examples/example.js +2 -0
  339. package/dist/web/examples/example_util.js +2 -0
  340. package/dist/web/features/feature_registry.js +107 -0
  341. package/dist/web/index.js +45 -13
  342. package/dist/web/index_web.js +2 -0
  343. package/dist/web/memory/base_memory_service.js +2 -0
  344. package/dist/web/memory/in_memory_memory_service.js +2 -0
  345. package/dist/web/memory/memory_entry.js +2 -0
  346. package/dist/web/models/apigee_llm.js +4 -2
  347. package/dist/web/models/base_llm.js +2 -0
  348. package/dist/web/models/base_llm_connection.js +2 -0
  349. package/dist/web/models/gemini_llm_connection.js +2 -0
  350. package/dist/web/models/google_llm.js +37 -59
  351. package/dist/web/models/llm_request.js +2 -0
  352. package/dist/web/models/llm_response.js +2 -0
  353. package/dist/web/models/registry.js +2 -0
  354. package/dist/web/models/routed_llm.js +122 -0
  355. package/dist/web/plugins/base_plugin.js +41 -1
  356. package/dist/web/plugins/logging_plugin.js +2 -0
  357. package/dist/web/plugins/plugin_manager.js +41 -0
  358. package/dist/web/plugins/security_plugin.js +2 -0
  359. package/dist/web/runner/in_memory_runner.js +2 -0
  360. package/dist/web/runner/runner.js +33 -3
  361. package/dist/web/sessions/base_session_service.js +2 -0
  362. package/dist/web/sessions/database_session_service.js +2 -0
  363. package/dist/web/sessions/db/operations.js +5 -10
  364. package/dist/web/sessions/db/schema.js +2 -0
  365. package/dist/web/sessions/in_memory_session_service.js +2 -0
  366. package/dist/web/sessions/registry.js +2 -0
  367. package/dist/web/sessions/session.js +2 -0
  368. package/dist/web/sessions/state.js +2 -0
  369. package/dist/web/skills/loader.js +262 -0
  370. package/dist/web/skills/prompt.js +30 -0
  371. package/dist/web/skills/skill.js +67 -0
  372. package/dist/web/telemetry/google_cloud.js +2 -0
  373. package/dist/web/telemetry/setup.js +2 -0
  374. package/dist/web/telemetry/tracing.js +2 -0
  375. package/dist/web/tools/agent_tool.js +13 -4
  376. package/dist/web/tools/base_tool.js +2 -0
  377. package/dist/web/tools/base_toolset.js +2 -0
  378. package/dist/web/tools/exit_loop_tool.js +2 -0
  379. package/dist/web/tools/forwarding_artifact_service.js +2 -0
  380. package/dist/web/tools/function_tool.js +2 -0
  381. package/dist/web/tools/google_search_tool.js +2 -0
  382. package/dist/web/tools/load_artifacts_tool.js +2 -0
  383. package/dist/web/tools/load_memory_tool.js +2 -0
  384. package/dist/web/tools/long_running_tool.js +2 -0
  385. package/dist/web/tools/mcp/mcp_session_manager.js +2 -0
  386. package/dist/web/tools/mcp/mcp_tool.js +9 -3
  387. package/dist/web/tools/mcp/mcp_toolset.js +3 -1
  388. package/dist/web/tools/preload_memory_tool.js +2 -0
  389. package/dist/web/tools/skill/list_skills_tool.js +50 -0
  390. package/dist/web/tools/skill/load_skill_resource_tool.js +191 -0
  391. package/dist/web/tools/skill/load_skill_tool.js +82 -0
  392. package/dist/web/tools/skill/run_skill_inline_script_tool.js +120 -0
  393. package/dist/web/tools/skill/run_skill_script_tool.js +190 -0
  394. package/dist/web/tools/skill/skill_toolset.js +123 -0
  395. package/dist/web/tools/tool_confirmation.js +2 -0
  396. package/dist/web/tools/url_context_tool.js +44 -0
  397. package/dist/web/tools/vertex_ai_search_tool.js +103 -0
  398. package/dist/web/utils/client_labels.js +2 -0
  399. package/dist/web/utils/env_aware_utils.js +2 -0
  400. package/dist/web/utils/experimental.js +46 -0
  401. package/dist/web/utils/failover_utils.js +96 -0
  402. package/dist/web/utils/file_extension_utils.js +51 -0
  403. package/dist/web/utils/file_utils.js +74 -0
  404. package/dist/web/utils/gemini_schema_util.js +2 -0
  405. package/dist/web/utils/logger.js +2 -0
  406. package/dist/web/utils/model_name.js +8 -1
  407. package/dist/web/utils/object_notation_utils.js +2 -0
  408. package/dist/web/utils/simple_zod_to_json.js +2 -0
  409. package/dist/web/utils/streaming_utils.js +325 -0
  410. package/dist/web/utils/variant_utils.js +2 -0
  411. package/dist/web/version.js +3 -1
  412. package/package.json +20 -18
  413. package/dist/cjs/index.js.map +0 -7
  414. package/dist/esm/index.js.map +0 -7
  415. package/dist/web/index.js.map +0 -7
@@ -0,0 +1,156 @@
1
+ import {createRequire as topLevelCreateRequire} from 'module';
2
+ const require = topLevelCreateRequire(import.meta.url);
3
+ /**
4
+ * @license
5
+ * Copyright 2026 Google LLC
6
+ * SPDX-License-Identifier: Apache-2.0
7
+ */
8
+ import { z } from "zod";
9
+ import { logger } from "../../utils/logger.js";
10
+ const AuthorizationServerMetadataSchema = z.object({
11
+ issuer: z.string(),
12
+ authorization_endpoint: z.string(),
13
+ token_endpoint: z.string(),
14
+ scopes_supported: z.array(z.string()).optional(),
15
+ registration_endpoint: z.string().optional()
16
+ });
17
+ const ProtectedResourceMetadataSchema = z.object({
18
+ resource: z.string(),
19
+ authorization_servers: z.array(z.string()).default([])
20
+ });
21
+ class OAuth2DiscoveryManager {
22
+ /**
23
+ * Discovers the OAuth2 authorization server metadata.
24
+ */
25
+ async discoverAuthServerMetadata(issuerUrl) {
26
+ if (!validateDiscoveryUrl(issuerUrl)) {
27
+ return void 0;
28
+ }
29
+ let baseUrl;
30
+ let path;
31
+ try {
32
+ const url = new URL(issuerUrl);
33
+ baseUrl = `${url.protocol}//${url.host}`;
34
+ path = url.pathname;
35
+ } catch (e) {
36
+ logger.warn(`Failed to parse issuerUrl ${issuerUrl}: ${e}`);
37
+ return void 0;
38
+ }
39
+ const endpointsToTry = [];
40
+ if (path && path !== "/") {
41
+ endpointsToTry.push(
42
+ `${baseUrl}/.well-known/oauth-authorization-server${path}`,
43
+ `${baseUrl}/.well-known/openid-configuration${path}`,
44
+ `${baseUrl}${path}/.well-known/openid-configuration`
45
+ );
46
+ } else {
47
+ endpointsToTry.push(
48
+ `${baseUrl}/.well-known/oauth-authorization-server`,
49
+ `${baseUrl}/.well-known/openid-configuration`
50
+ );
51
+ }
52
+ for (const endpoint of endpointsToTry) {
53
+ try {
54
+ const response = await fetch(endpoint, {
55
+ method: "GET",
56
+ headers: {
57
+ Accept: "application/json"
58
+ }
59
+ });
60
+ if (!response.ok) {
61
+ continue;
62
+ }
63
+ const data = await response.json();
64
+ const metadata = AuthorizationServerMetadataSchema.parse(data);
65
+ if (metadata.issuer.replace(/\/$/, "") === issuerUrl.replace(/\/$/, "")) {
66
+ return metadata;
67
+ } else {
68
+ logger.warn(
69
+ `Issuer in metadata ${metadata.issuer} does not match issuerUrl ${issuerUrl}`
70
+ );
71
+ }
72
+ } catch (e) {
73
+ logger.debug(`Failed to fetch metadata from ${endpoint}: ${e}`);
74
+ }
75
+ }
76
+ return void 0;
77
+ }
78
+ /**
79
+ * Discovers the OAuth2 protected resource metadata.
80
+ */
81
+ async discoverResourceMetadata(resourceUrl) {
82
+ if (!validateDiscoveryUrl(resourceUrl)) {
83
+ return void 0;
84
+ }
85
+ let baseUrl;
86
+ let path;
87
+ try {
88
+ const url = new URL(resourceUrl);
89
+ baseUrl = `${url.protocol}//${url.host}`;
90
+ path = url.pathname;
91
+ } catch (e) {
92
+ logger.warn(`Failed to parse resourceUrl ${resourceUrl}: ${e}`);
93
+ return void 0;
94
+ }
95
+ let wellKnownEndpoint;
96
+ if (path && path !== "/") {
97
+ wellKnownEndpoint = `${baseUrl}/.well-known/oauth-protected-resource${path}`;
98
+ } else {
99
+ wellKnownEndpoint = `${baseUrl}/.well-known/oauth-protected-resource`;
100
+ }
101
+ try {
102
+ const response = await fetch(wellKnownEndpoint, {
103
+ method: "GET",
104
+ headers: {
105
+ Accept: "application/json"
106
+ }
107
+ });
108
+ if (!response.ok) {
109
+ return void 0;
110
+ }
111
+ const data = await response.json();
112
+ const metadata = ProtectedResourceMetadataSchema.parse(data);
113
+ if (metadata.resource.replace(/\/$/, "") === resourceUrl.replace(/\/$/, "")) {
114
+ return metadata;
115
+ } else {
116
+ logger.warn(
117
+ `Resource in metadata ${metadata.resource} does not match resourceUrl ${resourceUrl}`
118
+ );
119
+ }
120
+ } catch (e) {
121
+ logger.debug(`Failed to fetch metadata from ${wellKnownEndpoint}: ${e}`);
122
+ }
123
+ return void 0;
124
+ }
125
+ }
126
+ function validateDiscoveryUrl(urlStr) {
127
+ try {
128
+ const url = new URL(urlStr);
129
+ if (url.protocol !== "https:") {
130
+ logger.warn(`Unsafe protocol for discovery URL: ${url.protocol}`);
131
+ return false;
132
+ }
133
+ const host = url.hostname.toLowerCase();
134
+ if (host === "localhost" || host === "127.0.0.1" || host === "[::1]" || host.startsWith("10.") || host.startsWith("192.168.") || host.startsWith("169.254.")) {
135
+ logger.warn(`Unsafe host for discovery URL: ${host}`);
136
+ return false;
137
+ }
138
+ const match = host.match(/^172\.(\d+)\./);
139
+ if (match) {
140
+ const secondOctet = parseInt(match[1], 10);
141
+ if (secondOctet >= 16 && secondOctet <= 31) {
142
+ logger.warn(`Unsafe host for discovery URL: ${host}`);
143
+ return false;
144
+ }
145
+ }
146
+ return true;
147
+ } catch (e) {
148
+ logger.warn(`Failed to parse URL for validation ${urlStr}: ${e}`);
149
+ return false;
150
+ }
151
+ }
152
+ export {
153
+ AuthorizationServerMetadataSchema,
154
+ OAuth2DiscoveryManager,
155
+ ProtectedResourceMetadataSchema
156
+ };
@@ -0,0 +1,87 @@
1
+ import {createRequire as topLevelCreateRequire} from 'module';
2
+ const require = topLevelCreateRequire(import.meta.url);
3
+ /**
4
+ * @license
5
+ * Copyright 2026 Google LLC
6
+ * SPDX-License-Identifier: Apache-2.0
7
+ */
8
+ import { logger } from "../../utils/logger.js";
9
+ function getTokenEndpoint(authScheme) {
10
+ if (authScheme.type === "openIdConnect" && authScheme.tokenEndpoint) {
11
+ return authScheme.tokenEndpoint;
12
+ }
13
+ if (authScheme.type === "oauth2" && authScheme.flows) {
14
+ const flows = authScheme.flows;
15
+ const flow = flows.authorizationCode || flows.clientCredentials || flows.password || flows.implicit;
16
+ if (flow && "tokenUrl" in flow) {
17
+ return flow.tokenUrl;
18
+ }
19
+ }
20
+ return void 0;
21
+ }
22
+ async function fetchOAuth2Tokens(endpoint, body) {
23
+ try {
24
+ const response = await fetch(endpoint, {
25
+ method: "POST",
26
+ headers: {
27
+ "Content-Type": "application/x-www-form-urlencoded"
28
+ },
29
+ body: body.toString()
30
+ });
31
+ if (!response.ok) {
32
+ throw new Error(`Token request failed with status ${response.status}`);
33
+ }
34
+ const data = await response.json();
35
+ return {
36
+ accessToken: data.access_token,
37
+ refreshToken: data.refresh_token,
38
+ idToken: data.id_token,
39
+ expiresIn: data.expires_in,
40
+ expiresAt: data.expires_in ? Date.now() + data.expires_in * 1e3 : void 0
41
+ };
42
+ } catch (e) {
43
+ logger.error(`Failed to fetch OAuth2 tokens: ${e}`);
44
+ throw e;
45
+ }
46
+ }
47
+ function parseAuthorizationCode(uri) {
48
+ try {
49
+ const url = new URL(uri);
50
+ return url.searchParams.get("code") || void 0;
51
+ } catch (e) {
52
+ logger.warn(`Failed to parse authorization URI ${uri}: ${e}`);
53
+ return void 0;
54
+ }
55
+ }
56
+ function createOAuth2TokenRequestBody(params) {
57
+ const body = new URLSearchParams();
58
+ body.set("grant_type", params.grantType);
59
+ body.set("client_id", params.clientId);
60
+ body.set("client_secret", params.clientSecret);
61
+ if (params.grantType === "authorization_code") {
62
+ body.set("code", params.code);
63
+ if (params.redirectUri) {
64
+ body.set("redirect_uri", params.redirectUri);
65
+ }
66
+ if (params.codeVerifier) {
67
+ body.set("code_verifier", params.codeVerifier);
68
+ }
69
+ } else if (params.grantType === "refresh_token") {
70
+ body.set("refresh_token", params.refreshToken);
71
+ }
72
+ return body;
73
+ }
74
+ function isTokenExpired(token, leeway = 60) {
75
+ if (typeof token.expiresAt !== "number") {
76
+ return false;
77
+ }
78
+ const expirationThreshold = token.expiresAt - leeway * 1e3;
79
+ return expirationThreshold < Date.now();
80
+ }
81
+ export {
82
+ createOAuth2TokenRequestBody,
83
+ fetchOAuth2Tokens,
84
+ getTokenEndpoint,
85
+ isTokenExpired,
86
+ parseAuthorizationCode
87
+ };
@@ -0,0 +1,16 @@
1
+ import {createRequire as topLevelCreateRequire} from 'module';
2
+ const require = topLevelCreateRequire(import.meta.url);
3
+ /**
4
+ * @license
5
+ * Copyright 2026 Google LLC
6
+ * SPDX-License-Identifier: Apache-2.0
7
+ */
8
+ class CredentialRefresherError extends Error {
9
+ constructor(message) {
10
+ super(message);
11
+ this.name = "CredentialRefresherError";
12
+ }
13
+ }
14
+ export {
15
+ CredentialRefresherError
16
+ };
@@ -0,0 +1,40 @@
1
+ import {createRequire as topLevelCreateRequire} from 'module';
2
+ const require = topLevelCreateRequire(import.meta.url);
3
+ /**
4
+ * @license
5
+ * Copyright 2026 Google LLC
6
+ * SPDX-License-Identifier: Apache-2.0
7
+ */
8
+ import { AuthCredentialTypes } from "../auth_credential.js";
9
+ class CredentialRefresherRegistry {
10
+ constructor() {
11
+ this.refreshers = {
12
+ [AuthCredentialTypes.API_KEY]: void 0,
13
+ [AuthCredentialTypes.HTTP]: void 0,
14
+ [AuthCredentialTypes.OAUTH2]: void 0,
15
+ [AuthCredentialTypes.OPEN_ID_CONNECT]: void 0,
16
+ [AuthCredentialTypes.SERVICE_ACCOUNT]: void 0
17
+ };
18
+ }
19
+ /**
20
+ * Register a refresher instance for a credential type.
21
+ *
22
+ * @param credentialType The credential type to register for.
23
+ * @param refresherInstance The refresher instance to register.
24
+ */
25
+ register(credentialType, refresherInstance) {
26
+ this.refreshers[credentialType] = refresherInstance;
27
+ }
28
+ /**
29
+ * Get the refresher instance for a credential type.
30
+ *
31
+ * @param credentialType The credential type to get refresher for.
32
+ * @returns The refresher instance if registered, undefined otherwise.
33
+ */
34
+ getRefresher(credentialType) {
35
+ return this.refreshers[credentialType];
36
+ }
37
+ }
38
+ export {
39
+ CredentialRefresherRegistry
40
+ };
@@ -1,3 +1,5 @@
1
+ import {createRequire as topLevelCreateRequire} from 'module';
2
+ const require = topLevelCreateRequire(import.meta.url);
1
3
  /**
2
4
  * @license
3
5
  * Copyright 2025 Google LLC
@@ -34,16 +36,20 @@ class BaseCodeExecutor {
34
36
  this.errorRetryAttempts = 2;
35
37
  /**
36
38
  * The list of the enclosing delimiters to identify the code blocks.
37
- * For example, the delimiter('```python\\n', '\\n```') can be used to
38
- * identify code blocks with the following format::
39
+ * For example, the delimiter('```javascript\\n', '\\n```') can be used to
40
+ * identify code blocks with the following format:
39
41
  *
40
- * ```python
41
- * print("hello")
42
+ * ```javascript
43
+ * console.log("hello")
42
44
  * ```
43
45
  */
44
46
  this.codeBlockDelimiters = [
45
47
  ["```tool_code\n", "\n```"],
46
- ["```python\n", "\n```"]
48
+ ["```python\n", "\n```"],
49
+ ["```javascript\n", "\n```"],
50
+ ["```typescript\n", "\n```"],
51
+ ["```bash\n", "\n```"],
52
+ ["```sh\n", "\n```"]
47
53
  ];
48
54
  /**
49
55
  * The delimiters to format the code execution result.
@@ -1,3 +1,5 @@
1
+ import {createRequire as topLevelCreateRequire} from 'module';
2
+ const require = topLevelCreateRequire(import.meta.url);
1
3
  /**
2
4
  * @license
3
5
  * Copyright 2025 Google LLC
@@ -1,3 +1,5 @@
1
+ import {createRequire as topLevelCreateRequire} from 'module';
2
+ const require = topLevelCreateRequire(import.meta.url);
1
3
  /**
2
4
  * @license
3
5
  * Copyright 2025 Google LLC
@@ -6,6 +8,21 @@
6
8
  import { Language, Outcome } from "@google/genai";
7
9
  import { cloneDeep } from "lodash-es";
8
10
  import { base64Encode, isBase64Encoded } from "../utils/env_aware_utils.js";
11
+ var FileContentEncoding = /* @__PURE__ */ ((FileContentEncoding2) => {
12
+ FileContentEncoding2["UTF8"] = "utf-8";
13
+ FileContentEncoding2["BASE64"] = "base64";
14
+ return FileContentEncoding2;
15
+ })(FileContentEncoding || {});
16
+ var CodeExecutionLanguage = /* @__PURE__ */ ((CodeExecutionLanguage2) => {
17
+ CodeExecutionLanguage2["UNSPECIFIED"] = "unspecified";
18
+ CodeExecutionLanguage2["PYTHON"] = "python";
19
+ CodeExecutionLanguage2["JAVASCRIPT"] = "javascript";
20
+ CodeExecutionLanguage2["TYPESCRIPT"] = "typescript";
21
+ CodeExecutionLanguage2["SHELL"] = "shell";
22
+ CodeExecutionLanguage2["POWERSHELL"] = "powershell";
23
+ CodeExecutionLanguage2["WINDOWS_CMD"] = "cmd";
24
+ return CodeExecutionLanguage2;
25
+ })(CodeExecutionLanguage || {});
9
26
  function getEncodedFileContent(data) {
10
27
  return isBase64Encoded(data) ? data : base64Encode(data);
11
28
  }
@@ -100,6 +117,8 @@ function convertCodeExecutionParts(content, codeBlockDelimiter, executionResultD
100
117
  }
101
118
  }
102
119
  export {
120
+ CodeExecutionLanguage,
121
+ FileContentEncoding,
103
122
  buildCodeExecutionResultPart,
104
123
  buildExecutableCodePart,
105
124
  convertCodeExecutionParts,
@@ -1,3 +1,5 @@
1
+ import {createRequire as topLevelCreateRequire} from 'module';
2
+ const require = topLevelCreateRequire(import.meta.url);
1
3
  /**
2
4
  * @license
3
5
  * Copyright 2025 Google LLC
@@ -0,0 +1,205 @@
1
+ import {createRequire as topLevelCreateRequire} from 'module';
2
+ const require = topLevelCreateRequire(import.meta.url);
3
+ /**
4
+ * @license
5
+ * Copyright 2026 Google LLC
6
+ * SPDX-License-Identifier: Apache-2.0
7
+ */
8
+ import { spawn } from "child_process";
9
+ import * as fs from "node:fs/promises";
10
+ import * as os from "node:os";
11
+ import * as path from "node:path";
12
+ import { getMimeTypeAndEncoding } from "../utils/file_extension_utils.js";
13
+ import { materializeFiles } from "../utils/file_utils.js";
14
+ import { logger } from "../utils/logger.js";
15
+ import { BaseCodeExecutor } from "./base_code_executor.js";
16
+ import {
17
+ CodeExecutionLanguage
18
+ } from "./code_execution_utils.js";
19
+ const IS_WINDOWS = os.platform() === "win32";
20
+ async function createTempScriptFile(code, language, shellCommandPath) {
21
+ const tempDir = path.join(
22
+ os.tmpdir(),
23
+ "adk_js_unsafe_code_executor",
24
+ Date.now().toString() + "_" + Math.random().toString(36).slice(2)
25
+ );
26
+ await fs.mkdir(tempDir, { recursive: true });
27
+ const ext = getExtensionForLanguage(language, shellCommandPath) || ".js";
28
+ const filePath = path.join(tempDir, `script${ext}`);
29
+ await fs.writeFile(filePath, code);
30
+ return { filePath, tempDir };
31
+ }
32
+ function getExtensionForLanguage(language, shellCommandPath) {
33
+ if (language === CodeExecutionLanguage.JAVASCRIPT) {
34
+ return ".js";
35
+ }
36
+ if (language === CodeExecutionLanguage.PYTHON) {
37
+ return ".py";
38
+ }
39
+ if (language === CodeExecutionLanguage.POWERSHELL) {
40
+ return ".ps1";
41
+ }
42
+ if (language === CodeExecutionLanguage.WINDOWS_CMD) {
43
+ return ".bat";
44
+ }
45
+ if (language === CodeExecutionLanguage.SHELL) {
46
+ if (IS_WINDOWS) {
47
+ if (shellCommandPath && shellCommandPath.toLowerCase().includes("cmd")) {
48
+ return ".bat";
49
+ }
50
+ return ".ps1";
51
+ }
52
+ return ".sh";
53
+ }
54
+ return void 0;
55
+ }
56
+ class UnsafeLocalCodeExecutor extends BaseCodeExecutor {
57
+ constructor(options = {}) {
58
+ var _a, _b, _c, _d;
59
+ super();
60
+ this.timeoutSeconds = (_a = options.timeoutSeconds) != null ? _a : 30;
61
+ this.nodeCommandPath = (_b = options.commandPath) != null ? _b : process.execPath;
62
+ this.pythonCommandPath = (_c = options.pythonCommandPath) != null ? _c : IS_WINDOWS ? "python" : "python3";
63
+ this.shellCommandPath = (_d = options.shellCommandPath) != null ? _d : IS_WINDOWS ? "powershell" : "bash";
64
+ this.stateful = false;
65
+ this.optimizeDataFile = false;
66
+ }
67
+ async executeCode(params) {
68
+ var _a;
69
+ const { code, language } = params.codeExecutionInput;
70
+ if (![
71
+ CodeExecutionLanguage.JAVASCRIPT,
72
+ CodeExecutionLanguage.PYTHON,
73
+ CodeExecutionLanguage.SHELL,
74
+ CodeExecutionLanguage.WINDOWS_CMD,
75
+ CodeExecutionLanguage.POWERSHELL
76
+ ].includes(language)) {
77
+ return {
78
+ stdout: "",
79
+ stderr: `Unsupported language: ${language}`,
80
+ outputFiles: []
81
+ };
82
+ }
83
+ logger.warn(
84
+ "\n====================================================================================\n\u26A0\uFE0F DANGER: UnsafeLocalCodeExecutor is executing code locally on this host machine!\nThis component provides NO sandboxing or container isolation. Arbitrary shell/script\ncommands generated by AI or untrusted sources could lead to serious security risks.\n====================================================================================\n"
85
+ );
86
+ let tempDir;
87
+ try {
88
+ const res = await createTempScriptFile(
89
+ code,
90
+ language,
91
+ this.shellCommandPath
92
+ );
93
+ const filePath = res.filePath;
94
+ tempDir = res.tempDir;
95
+ if (params.codeExecutionInput.inputFiles) {
96
+ await materializeFiles(params.codeExecutionInput.inputFiles, tempDir);
97
+ }
98
+ let command = this.nodeCommandPath;
99
+ let args = [filePath];
100
+ if (language === CodeExecutionLanguage.PYTHON) {
101
+ command = this.pythonCommandPath;
102
+ } else if (language === CodeExecutionLanguage.SHELL) {
103
+ command = this.shellCommandPath;
104
+ if (this.shellCommandPath.toLowerCase().includes("powershell")) {
105
+ args = ["-NoLogo", "-ExecutionPolicy", "Bypass", "-File", filePath];
106
+ } else if (this.shellCommandPath.toLowerCase().includes("cmd")) {
107
+ args = ["/c", filePath];
108
+ }
109
+ } else if (language === CodeExecutionLanguage.POWERSHELL) {
110
+ command = IS_WINDOWS ? "powershell" : "pwsh";
111
+ args = ["-NoLogo", "-ExecutionPolicy", "Bypass", "-File", filePath];
112
+ } else if (language === CodeExecutionLanguage.WINDOWS_CMD) {
113
+ command = "cmd.exe";
114
+ args = ["/c", filePath];
115
+ }
116
+ if (params.codeExecutionInput.args) {
117
+ if (Array.isArray(params.codeExecutionInput.args)) {
118
+ args.push(...params.codeExecutionInput.args);
119
+ } else {
120
+ for (const [k, v] of Object.entries(params.codeExecutionInput.args)) {
121
+ args.push(`--${k}`, String(v));
122
+ }
123
+ }
124
+ }
125
+ const executionResult = await new Promise((resolve) => {
126
+ const child = spawn(command, args, {
127
+ timeout: this.timeoutSeconds * 1e3,
128
+ killSignal: "SIGKILL",
129
+ cwd: tempDir
130
+ });
131
+ let stdout = "";
132
+ let stderr = "";
133
+ if (child.stdout) {
134
+ child.stdout.on("data", (data) => {
135
+ stdout += data.toString();
136
+ });
137
+ }
138
+ if (child.stderr) {
139
+ child.stderr.on("data", (data) => {
140
+ stderr += data.toString();
141
+ });
142
+ }
143
+ child.on("error", (err) => {
144
+ stderr += `Process error: ${err.message}
145
+ `;
146
+ });
147
+ child.on("close", (exitCode, signal) => {
148
+ if (signal === "SIGKILL" || signal === "SIGTERM") {
149
+ stderr += `
150
+ Code execution timed out after ${this.timeoutSeconds} seconds.`;
151
+ } else if (exitCode !== 0 && exitCode !== null) {
152
+ if (!stderr) {
153
+ stderr = `Exit code ${exitCode}`;
154
+ }
155
+ }
156
+ resolve({ stdout, stderr, exitCode });
157
+ });
158
+ });
159
+ const outputFiles = [];
160
+ try {
161
+ const allFiles = await fs.readdir(tempDir, { recursive: true });
162
+ for (const relativeFilePath of allFiles) {
163
+ const fullPath = path.join(tempDir, relativeFilePath);
164
+ const stat = await fs.lstat(fullPath);
165
+ if (!stat.isFile()) {
166
+ continue;
167
+ }
168
+ if (relativeFilePath === path.basename(filePath)) {
169
+ continue;
170
+ }
171
+ const isInputFile = (_a = params.codeExecutionInput.inputFiles) == null ? void 0 : _a.some(
172
+ (f) => f.name === relativeFilePath
173
+ );
174
+ if (isInputFile) {
175
+ continue;
176
+ }
177
+ const fileContent = await fs.readFile(fullPath);
178
+ const { mimeType, encoding } = getMimeTypeAndEncoding(
179
+ path.extname(relativeFilePath)
180
+ );
181
+ outputFiles.push({
182
+ name: relativeFilePath,
183
+ content: fileContent.toString(encoding),
184
+ contentEncoding: encoding,
185
+ mimeType
186
+ });
187
+ }
188
+ } catch (e) {
189
+ logger.error(`Error scanning output files: ${e}`);
190
+ }
191
+ return {
192
+ stdout: executionResult.stdout,
193
+ stderr: executionResult.stderr,
194
+ outputFiles
195
+ };
196
+ } finally {
197
+ if (tempDir) {
198
+ await fs.rm(tempDir, { recursive: true, force: true });
199
+ }
200
+ }
201
+ }
202
+ }
203
+ export {
204
+ UnsafeLocalCodeExecutor
205
+ };