@google/adk 0.3.0 → 0.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 (265) hide show
  1. package/dist/cjs/a2a/a2a_event.js +290 -0
  2. package/dist/cjs/a2a/event_converter_utils.js +201 -0
  3. package/dist/cjs/a2a/executor_context.js +53 -0
  4. package/dist/cjs/a2a/metadata_converter_utils.js +125 -0
  5. package/dist/cjs/a2a/part_converter_utils.js +212 -0
  6. package/dist/cjs/agents/active_streaming_tool.js +1 -1
  7. package/dist/cjs/agents/base_agent.js +6 -6
  8. package/dist/cjs/agents/content_processor_utils.js +1 -1
  9. package/dist/cjs/{tools/tool_context.js → agents/context.js} +71 -16
  10. package/dist/cjs/agents/functions.js +4 -3
  11. package/dist/cjs/agents/instructions.js +1 -1
  12. package/dist/cjs/agents/invocation_context.js +1 -1
  13. package/dist/cjs/agents/live_request_queue.js +1 -1
  14. package/dist/cjs/agents/llm_agent.js +76 -711
  15. package/dist/cjs/agents/loop_agent.js +1 -1
  16. package/dist/cjs/agents/parallel_agent.js +1 -1
  17. package/dist/cjs/agents/processors/agent_transfer_llm_request_processor.js +132 -0
  18. package/dist/cjs/agents/{base_llm_processor.js → processors/base_llm_processor.js} +1 -1
  19. package/dist/cjs/agents/processors/basic_llm_request_processor.js +68 -0
  20. package/dist/cjs/agents/processors/code_execution_request_processor.js +389 -0
  21. package/dist/cjs/agents/processors/content_request_processor.js +66 -0
  22. package/dist/cjs/agents/processors/identity_llm_request_processor.js +54 -0
  23. package/dist/cjs/agents/processors/instructions_llm_request_processor.js +85 -0
  24. package/dist/cjs/agents/processors/request_confirmation_llm_request_processor.js +165 -0
  25. package/dist/cjs/agents/readonly_context.js +13 -1
  26. package/dist/cjs/agents/run_config.js +2 -1
  27. package/dist/cjs/agents/sequential_agent.js +1 -1
  28. package/dist/cjs/agents/transcription_entry.js +1 -1
  29. package/dist/cjs/artifacts/base_artifact_service.js +1 -1
  30. package/dist/cjs/artifacts/file_artifact_service.js +491 -0
  31. package/dist/cjs/artifacts/gcs_artifact_service.js +127 -48
  32. package/dist/cjs/artifacts/in_memory_artifact_service.js +54 -6
  33. package/dist/cjs/artifacts/registry.js +55 -0
  34. package/dist/cjs/auth/auth_credential.js +1 -1
  35. package/dist/cjs/auth/auth_handler.js +1 -1
  36. package/dist/cjs/auth/auth_schemes.js +1 -1
  37. package/dist/cjs/auth/auth_tool.js +1 -1
  38. package/dist/cjs/auth/credential_service/base_credential_service.js +1 -1
  39. package/dist/cjs/auth/credential_service/in_memory_credential_service.js +1 -1
  40. package/dist/cjs/auth/exchanger/base_credential_exchanger.js +1 -1
  41. package/dist/cjs/auth/exchanger/credential_exchanger_registry.js +1 -1
  42. package/dist/cjs/code_executors/base_code_executor.js +1 -1
  43. package/dist/cjs/code_executors/built_in_code_executor.js +1 -1
  44. package/dist/cjs/code_executors/code_execution_utils.js +1 -1
  45. package/dist/cjs/code_executors/code_executor_context.js +1 -1
  46. package/dist/cjs/common.js +25 -8
  47. package/dist/cjs/events/event.js +33 -4
  48. package/dist/cjs/events/event_actions.js +2 -2
  49. package/dist/cjs/events/structured_events.js +105 -0
  50. package/dist/cjs/examples/base_example_provider.js +1 -1
  51. package/dist/cjs/examples/example.js +1 -1
  52. package/dist/cjs/examples/example_util.js +1 -1
  53. package/dist/cjs/index.js +24 -17
  54. package/dist/cjs/index.js.map +4 -4
  55. package/dist/cjs/index_web.js +1 -1
  56. package/dist/cjs/memory/base_memory_service.js +1 -1
  57. package/dist/cjs/memory/in_memory_memory_service.js +1 -1
  58. package/dist/cjs/memory/memory_entry.js +1 -1
  59. package/dist/cjs/models/apigee_llm.js +182 -0
  60. package/dist/cjs/models/base_llm.js +1 -1
  61. package/dist/cjs/models/base_llm_connection.js +1 -1
  62. package/dist/cjs/models/gemini_llm_connection.js +1 -1
  63. package/dist/cjs/models/google_llm.js +70 -51
  64. package/dist/cjs/models/llm_request.js +1 -1
  65. package/dist/cjs/models/llm_response.js +3 -1
  66. package/dist/cjs/models/registry.js +3 -1
  67. package/dist/cjs/plugins/base_plugin.js +2 -2
  68. package/dist/cjs/plugins/logging_plugin.js +1 -1
  69. package/dist/cjs/plugins/plugin_manager.js +1 -1
  70. package/dist/cjs/plugins/security_plugin.js +1 -1
  71. package/dist/cjs/runner/in_memory_runner.js +1 -1
  72. package/dist/cjs/runner/runner.js +33 -2
  73. package/dist/cjs/sessions/base_session_service.js +53 -3
  74. package/dist/cjs/sessions/database_session_service.js +367 -0
  75. package/dist/cjs/sessions/db/operations.js +126 -0
  76. package/dist/cjs/sessions/db/schema.js +204 -0
  77. package/dist/cjs/sessions/in_memory_session_service.js +24 -22
  78. package/dist/cjs/sessions/registry.js +49 -0
  79. package/dist/cjs/sessions/session.js +1 -1
  80. package/dist/cjs/sessions/state.js +1 -1
  81. package/dist/cjs/telemetry/google_cloud.js +1 -1
  82. package/dist/cjs/telemetry/setup.js +1 -1
  83. package/dist/cjs/telemetry/tracing.js +1 -1
  84. package/dist/cjs/tools/agent_tool.js +1 -1
  85. package/dist/cjs/tools/base_tool.js +4 -1
  86. package/dist/cjs/tools/base_toolset.js +14 -4
  87. package/dist/cjs/tools/exit_loop_tool.js +63 -0
  88. package/dist/cjs/tools/forwarding_artifact_service.js +17 -1
  89. package/dist/cjs/tools/function_tool.js +1 -1
  90. package/dist/cjs/tools/google_search_tool.js +1 -1
  91. package/dist/cjs/tools/long_running_tool.js +1 -1
  92. package/dist/cjs/tools/mcp/mcp_session_manager.js +1 -1
  93. package/dist/cjs/tools/mcp/mcp_tool.js +1 -1
  94. package/dist/cjs/tools/mcp/mcp_toolset.js +10 -6
  95. package/dist/cjs/tools/tool_confirmation.js +1 -1
  96. package/dist/cjs/utils/client_labels.js +1 -1
  97. package/dist/cjs/utils/env_aware_utils.js +10 -1
  98. package/dist/cjs/utils/gemini_schema_util.js +1 -1
  99. package/dist/cjs/utils/logger.js +62 -55
  100. package/dist/cjs/utils/model_name.js +1 -1
  101. package/dist/cjs/utils/object_notation_utils.js +78 -0
  102. package/dist/cjs/utils/simple_zod_to_json.js +1 -1
  103. package/dist/cjs/utils/variant_utils.js +3 -9
  104. package/dist/cjs/version.js +2 -2
  105. package/dist/esm/a2a/a2a_event.js +243 -0
  106. package/dist/esm/a2a/event_converter_utils.js +187 -0
  107. package/dist/esm/a2a/executor_context.js +23 -0
  108. package/dist/esm/a2a/metadata_converter_utils.js +90 -0
  109. package/dist/esm/a2a/part_converter_utils.js +175 -0
  110. package/dist/esm/agents/base_agent.js +5 -5
  111. package/dist/esm/{tools/tool_context.js → agents/context.js} +66 -11
  112. package/dist/esm/agents/functions.js +3 -2
  113. package/dist/esm/agents/llm_agent.js +69 -720
  114. package/dist/esm/agents/processors/agent_transfer_llm_request_processor.js +101 -0
  115. package/dist/esm/agents/processors/basic_llm_request_processor.js +37 -0
  116. package/dist/esm/agents/processors/code_execution_request_processor.js +363 -0
  117. package/dist/esm/agents/processors/content_request_processor.js +38 -0
  118. package/dist/esm/agents/processors/identity_llm_request_processor.js +23 -0
  119. package/dist/esm/agents/processors/instructions_llm_request_processor.js +54 -0
  120. package/dist/esm/agents/processors/request_confirmation_llm_request_processor.js +140 -0
  121. package/dist/esm/agents/readonly_context.js +12 -0
  122. package/dist/esm/agents/run_config.js +1 -0
  123. package/dist/esm/artifacts/file_artifact_service.js +451 -0
  124. package/dist/esm/artifacts/gcs_artifact_service.js +126 -47
  125. package/dist/esm/artifacts/in_memory_artifact_service.js +51 -4
  126. package/dist/esm/artifacts/registry.js +28 -0
  127. package/dist/esm/common.js +20 -10
  128. package/dist/esm/events/event.js +29 -2
  129. package/dist/esm/events/event_actions.js +1 -1
  130. package/dist/esm/events/structured_events.js +74 -0
  131. package/dist/esm/index.js +24 -17
  132. package/dist/esm/index.js.map +4 -4
  133. package/dist/esm/models/apigee_llm.js +152 -0
  134. package/dist/esm/models/google_llm.js +67 -49
  135. package/dist/esm/models/llm_response.js +2 -0
  136. package/dist/esm/models/registry.js +2 -0
  137. package/dist/esm/plugins/base_plugin.js +1 -1
  138. package/dist/esm/runner/runner.js +32 -1
  139. package/dist/esm/sessions/base_session_service.js +49 -1
  140. package/dist/esm/sessions/database_session_service.js +353 -0
  141. package/dist/esm/sessions/db/operations.js +111 -0
  142. package/dist/esm/sessions/db/schema.js +172 -0
  143. package/dist/esm/sessions/in_memory_session_service.js +23 -21
  144. package/dist/esm/sessions/registry.js +25 -0
  145. package/dist/esm/tools/base_tool.js +3 -0
  146. package/dist/esm/tools/base_toolset.js +11 -2
  147. package/dist/esm/tools/exit_loop_tool.js +32 -0
  148. package/dist/esm/tools/forwarding_artifact_service.js +16 -0
  149. package/dist/esm/tools/mcp/mcp_toolset.js +9 -5
  150. package/dist/esm/utils/env_aware_utils.js +8 -0
  151. package/dist/esm/utils/logger.js +51 -54
  152. package/dist/esm/utils/object_notation_utils.js +47 -0
  153. package/dist/esm/utils/variant_utils.js +1 -7
  154. package/dist/esm/version.js +1 -1
  155. package/dist/types/a2a/a2a_event.d.ts +122 -0
  156. package/dist/types/a2a/event_converter_utils.d.ts +20 -0
  157. package/dist/types/a2a/executor_context.d.ts +33 -0
  158. package/dist/types/a2a/metadata_converter_utils.d.ts +62 -0
  159. package/dist/types/a2a/part_converter_utils.d.ts +48 -0
  160. package/dist/types/agents/base_agent.d.ts +2 -2
  161. package/dist/types/{tools/tool_context.d.ts → agents/context.d.ts} +43 -8
  162. package/dist/types/agents/llm_agent.d.ts +19 -42
  163. package/dist/types/agents/processors/agent_transfer_llm_request_processor.d.ts +18 -0
  164. package/dist/types/agents/{base_llm_processor.d.ts → processors/base_llm_processor.d.ts} +4 -4
  165. package/dist/types/agents/processors/basic_llm_request_processor.d.ts +13 -0
  166. package/dist/types/agents/processors/code_execution_request_processor.d.ts +34 -0
  167. package/dist/types/agents/processors/content_request_processor.d.ts +13 -0
  168. package/dist/types/agents/processors/identity_llm_request_processor.d.ts +13 -0
  169. package/dist/types/agents/processors/instructions_llm_request_processor.d.ts +16 -0
  170. package/dist/types/agents/processors/request_confirmation_llm_request_processor.d.ts +13 -0
  171. package/dist/types/agents/readonly_context.d.ts +8 -0
  172. package/dist/types/agents/run_config.d.ts +6 -0
  173. package/dist/types/artifacts/base_artifact_service.d.ts +31 -0
  174. package/dist/types/artifacts/file_artifact_service.d.ts +43 -0
  175. package/dist/types/artifacts/gcs_artifact_service.d.ts +3 -1
  176. package/dist/types/artifacts/in_memory_artifact_service.d.ts +5 -2
  177. package/dist/types/artifacts/registry.d.ts +7 -0
  178. package/dist/types/auth/credential_service/base_credential_service.d.ts +3 -3
  179. package/dist/types/auth/credential_service/in_memory_credential_service.d.ts +3 -3
  180. package/dist/types/common.d.ts +15 -6
  181. package/dist/types/events/event.d.ts +15 -1
  182. package/dist/types/events/event_actions.d.ts +1 -1
  183. package/dist/types/events/structured_events.d.ts +106 -0
  184. package/dist/types/index.d.ts +5 -1
  185. package/dist/types/models/apigee_llm.d.ts +59 -0
  186. package/dist/types/models/google_llm.d.ts +5 -2
  187. package/dist/types/models/llm_response.d.ts +5 -1
  188. package/dist/types/plugins/base_plugin.d.ts +12 -13
  189. package/dist/types/plugins/logging_plugin.d.ts +9 -10
  190. package/dist/types/plugins/plugin_manager.d.ts +9 -10
  191. package/dist/types/plugins/security_plugin.d.ts +2 -2
  192. package/dist/types/runner/runner.d.ts +15 -0
  193. package/dist/types/sessions/base_session_service.d.ts +20 -0
  194. package/dist/types/sessions/database_session_service.d.ts +32 -0
  195. package/dist/types/sessions/db/operations.d.ts +29 -0
  196. package/dist/types/sessions/db/schema.d.ts +45 -0
  197. package/dist/types/sessions/in_memory_session_service.d.ts +4 -1
  198. package/dist/types/sessions/registry.d.ts +7 -0
  199. package/dist/types/tools/base_tool.d.ts +3 -3
  200. package/dist/types/tools/base_toolset.d.ts +12 -3
  201. package/dist/types/tools/exit_loop_tool.d.ts +24 -0
  202. package/dist/types/tools/forwarding_artifact_service.d.ts +5 -3
  203. package/dist/types/tools/function_tool.d.ts +2 -2
  204. package/dist/types/tools/mcp/mcp_toolset.d.ts +1 -1
  205. package/dist/types/utils/env_aware_utils.d.ts +7 -0
  206. package/dist/types/utils/logger.d.ts +5 -9
  207. package/dist/types/utils/object_notation_utils.d.ts +21 -0
  208. package/dist/types/version.d.ts +1 -1
  209. package/dist/web/a2a/a2a_event.js +243 -0
  210. package/dist/web/a2a/event_converter_utils.js +201 -0
  211. package/dist/web/a2a/executor_context.js +23 -0
  212. package/dist/web/a2a/metadata_converter_utils.js +107 -0
  213. package/dist/web/a2a/part_converter_utils.js +175 -0
  214. package/dist/web/agents/base_agent.js +5 -5
  215. package/dist/web/{tools/tool_context.js → agents/context.js} +66 -11
  216. package/dist/web/agents/functions.js +3 -2
  217. package/dist/web/agents/llm_agent.js +90 -717
  218. package/dist/web/agents/processors/agent_transfer_llm_request_processor.js +100 -0
  219. package/dist/web/agents/processors/basic_llm_request_processor.js +71 -0
  220. package/dist/web/agents/processors/code_execution_request_processor.js +365 -0
  221. package/dist/web/agents/processors/content_request_processor.js +56 -0
  222. package/dist/web/agents/processors/identity_llm_request_processor.js +41 -0
  223. package/dist/web/agents/processors/instructions_llm_request_processor.js +72 -0
  224. package/dist/web/agents/processors/request_confirmation_llm_request_processor.js +158 -0
  225. package/dist/web/agents/readonly_context.js +12 -0
  226. package/dist/web/agents/run_config.js +2 -1
  227. package/dist/web/artifacts/file_artifact_service.js +506 -0
  228. package/dist/web/artifacts/gcs_artifact_service.js +123 -46
  229. package/dist/web/artifacts/in_memory_artifact_service.js +51 -4
  230. package/dist/web/artifacts/registry.js +28 -0
  231. package/dist/web/common.js +20 -10
  232. package/dist/web/events/event.js +29 -2
  233. package/dist/web/events/event_actions.js +1 -1
  234. package/dist/web/events/structured_events.js +74 -0
  235. package/dist/web/index.js +7 -2
  236. package/dist/web/index.js.map +4 -4
  237. package/dist/web/models/apigee_llm.js +219 -0
  238. package/dist/web/models/google_llm.js +67 -46
  239. package/dist/web/models/llm_response.js +2 -0
  240. package/dist/web/models/registry.js +2 -0
  241. package/dist/web/plugins/base_plugin.js +1 -1
  242. package/dist/web/runner/runner.js +34 -1
  243. package/dist/web/sessions/base_session_service.js +49 -1
  244. package/dist/web/sessions/database_session_service.js +371 -0
  245. package/dist/web/sessions/db/operations.js +111 -0
  246. package/dist/web/sessions/db/schema.js +172 -0
  247. package/dist/web/sessions/in_memory_session_service.js +23 -21
  248. package/dist/web/sessions/registry.js +25 -0
  249. package/dist/web/tools/base_tool.js +3 -0
  250. package/dist/web/tools/base_toolset.js +11 -2
  251. package/dist/web/tools/exit_loop_tool.js +32 -0
  252. package/dist/web/tools/forwarding_artifact_service.js +16 -0
  253. package/dist/web/tools/mcp/mcp_toolset.js +27 -5
  254. package/dist/web/utils/env_aware_utils.js +8 -0
  255. package/dist/web/utils/logger.js +51 -54
  256. package/dist/web/utils/object_notation_utils.js +47 -0
  257. package/dist/web/utils/variant_utils.js +1 -7
  258. package/dist/web/version.js +1 -1
  259. package/package.json +13 -3
  260. package/dist/cjs/agents/callback_context.js +0 -101
  261. package/dist/esm/agents/callback_context.js +0 -71
  262. package/dist/types/agents/callback_context.d.ts +0 -42
  263. package/dist/web/agents/callback_context.js +0 -71
  264. /package/dist/esm/agents/{base_llm_processor.js → processors/base_llm_processor.js} +0 -0
  265. /package/dist/web/agents/{base_llm_processor.js → processors/base_llm_processor.js} +0 -0
@@ -5,11 +5,15 @@
5
5
  */
6
6
  import { Storage } from "@google-cloud/storage";
7
7
  import { createPartFromBase64, createPartFromText } from "@google/genai";
8
+ import { logger } from "../utils/logger.js";
8
9
  class GcsArtifactService {
9
10
  constructor(bucket) {
10
11
  this.bucket = new Storage().bucket(bucket);
11
12
  }
12
13
  async saveArtifact(request) {
14
+ if (!request.artifact.inlineData && !request.artifact.text) {
15
+ throw new Error("Artifact must have either inlineData or text content.");
16
+ }
13
17
  const versions = await this.listVersions(request);
14
18
  const version = versions.length > 0 ? Math.max(...versions) + 1 : 0;
15
19
  const file = this.bucket.file(
@@ -18,62 +22,69 @@ class GcsArtifactService {
18
22
  version
19
23
  })
20
24
  );
25
+ const metadata = request.customMetadata || {};
21
26
  if (request.artifact.inlineData) {
22
- await file.save(JSON.stringify(request.artifact.inlineData.data), {
23
- contentType: request.artifact.inlineData.mimeType
24
- });
25
- return version;
26
- }
27
- if (request.artifact.text) {
28
- await file.save(request.artifact.text, {
29
- contentType: "text/plain"
30
- });
27
+ await file.save(
28
+ Buffer.from(request.artifact.inlineData.data || "", "base64"),
29
+ {
30
+ contentType: request.artifact.inlineData.mimeType,
31
+ metadata
32
+ }
33
+ );
31
34
  return version;
32
35
  }
33
- throw new Error("Artifact must have either inlineData or text.");
36
+ await file.save(request.artifact.text, {
37
+ contentType: "text/plain",
38
+ metadata
39
+ });
40
+ return version;
34
41
  }
35
42
  async loadArtifact(request) {
36
- let version = request.version;
37
- if (version === void 0) {
38
- const versions = await this.listVersions(request);
39
- if (versions.length === 0) {
40
- return void 0;
43
+ try {
44
+ let version = request.version;
45
+ if (version === void 0) {
46
+ const versions = await this.listVersions(request);
47
+ if (versions.length === 0) {
48
+ return void 0;
49
+ }
50
+ version = Math.max(...versions);
41
51
  }
42
- version = Math.max(...versions);
43
- }
44
- const file = this.bucket.file(
45
- getFileName({
46
- ...request,
47
- version
48
- })
49
- );
50
- const [[metadata], [rawDataBuffer]] = await Promise.all([
51
- file.getMetadata(),
52
- file.download()
53
- ]);
54
- if (metadata.contentType === "text/plain") {
55
- return createPartFromText(rawDataBuffer.toString("utf-8"));
52
+ const file = this.bucket.file(
53
+ getFileName({
54
+ ...request,
55
+ version
56
+ })
57
+ );
58
+ const [[metadata], [rawDataBuffer]] = await Promise.all([
59
+ file.getMetadata(),
60
+ file.download()
61
+ ]);
62
+ if (metadata.contentType === "text/plain") {
63
+ return createPartFromText(rawDataBuffer.toString("utf-8"));
64
+ }
65
+ return createPartFromBase64(
66
+ rawDataBuffer.toString("base64"),
67
+ metadata.contentType
68
+ );
69
+ } catch (e) {
70
+ logger.warn(
71
+ `[GcsArtifactService] loadArtifact: Failed to load artifact ${request.filename}`,
72
+ e
73
+ );
74
+ return void 0;
56
75
  }
57
- return createPartFromBase64(
58
- rawDataBuffer.toString("base64"),
59
- metadata.contentType
60
- );
61
76
  }
62
77
  async listArtifactKeys(request) {
63
- const fileNames = [];
64
78
  const sessionPrefix = `${request.appName}/${request.userId}/${request.sessionId}/`;
65
79
  const usernamePrefix = `${request.appName}/${request.userId}/user/`;
66
80
  const [[sessionFiles], [userSessionFiles]] = await Promise.all([
67
81
  this.bucket.getFiles({ prefix: sessionPrefix }),
68
82
  this.bucket.getFiles({ prefix: usernamePrefix })
69
83
  ]);
70
- for (const file of sessionFiles) {
71
- fileNames.push(file.name.split("/").pop());
72
- }
73
- for (const file of userSessionFiles) {
74
- fileNames.push(file.name.split("/").pop());
75
- }
76
- return fileNames.sort((a, b) => a.localeCompare(b));
84
+ return [
85
+ ...extractArtifactKeys(sessionFiles, sessionPrefix),
86
+ ...extractArtifactKeys(userSessionFiles, usernamePrefix, "user:")
87
+ ].sort((a, b) => a.localeCompare(b));
77
88
  }
78
89
  async deleteArtifact(request) {
79
90
  const versions = await this.listVersions(request);
@@ -92,13 +103,62 @@ class GcsArtifactService {
92
103
  }
93
104
  async listVersions(request) {
94
105
  const prefix = getFileName(request);
95
- const [files] = await this.bucket.getFiles({ prefix });
106
+ const searchPrefix = prefix + "/";
107
+ const [files] = await this.bucket.getFiles({ prefix: searchPrefix });
96
108
  const versions = [];
97
109
  for (const file of files) {
98
110
  const version = file.name.split("/").pop();
99
- versions.push(parseInt(version, 10));
111
+ const v = parseInt(version, 10);
112
+ if (!isNaN(v)) {
113
+ versions.push(v);
114
+ }
115
+ }
116
+ return versions.sort((a, b) => a - b);
117
+ }
118
+ async listArtifactVersions(request) {
119
+ const versions = await this.listVersions(request);
120
+ const artifactVersions = [];
121
+ for (const version of versions) {
122
+ const artifactVersion = await this.getArtifactVersion({
123
+ ...request,
124
+ version
125
+ });
126
+ if (artifactVersion) {
127
+ artifactVersions.push(artifactVersion);
128
+ }
129
+ }
130
+ return artifactVersions;
131
+ }
132
+ async getArtifactVersion(request) {
133
+ try {
134
+ let version = request.version;
135
+ if (version === void 0) {
136
+ const versions = await this.listVersions(request);
137
+ if (versions.length === 0) {
138
+ return void 0;
139
+ }
140
+ version = Math.max(...versions);
141
+ }
142
+ const file = this.bucket.file(
143
+ getFileName({
144
+ ...request,
145
+ version
146
+ })
147
+ );
148
+ const [metadata] = await file.getMetadata();
149
+ return {
150
+ version,
151
+ mimeType: metadata.contentType,
152
+ customMetadata: metadata.metadata,
153
+ canonicalUri: file.publicUrl()
154
+ };
155
+ } catch (e) {
156
+ logger.warn(
157
+ `[GcsArtifactService] getArtifactVersion: Failed to get artifact version for userId: ${request.userId} sessionId: ${request.sessionId} filename: ${request.filename} version: ${request.version}`,
158
+ e
159
+ );
160
+ return void 0;
100
161
  }
101
- return versions;
102
162
  }
103
163
  }
104
164
  function getFileName({
@@ -108,10 +168,29 @@ function getFileName({
108
168
  filename,
109
169
  version
110
170
  }) {
111
- if (filename.startsWith("user:")) {
112
- return `${appName}/${userId}/user/${filename}/${version}`;
171
+ const isUser = filename.startsWith("user:");
172
+ const cleanFilename = isUser ? filename.substring(5) : filename;
173
+ const prefix = isUser ? `${appName}/${userId}/user/${cleanFilename}` : `${appName}/${userId}/${sessionId}/${cleanFilename}`;
174
+ return version !== void 0 ? `${prefix}/${version}` : prefix;
175
+ }
176
+ function extractArtifactKeys(files, fileNamePrefix, keyPrefix = "") {
177
+ const keys = /* @__PURE__ */ new Set();
178
+ for (const file of files) {
179
+ if (!file.name.startsWith(fileNamePrefix)) {
180
+ continue;
181
+ }
182
+ const relative = file.name.substring(fileNamePrefix.length);
183
+ const name = getFileNameFromPath(relative);
184
+ keys.add(`${keyPrefix}${name}`);
185
+ }
186
+ return [...keys];
187
+ }
188
+ function getFileNameFromPath(filePath) {
189
+ const parts = filePath.split("/");
190
+ if (parts.length < 2) {
191
+ return filePath;
113
192
  }
114
- return `${appName}/${userId}/${sessionId}/${filename}/${version}`;
193
+ return parts.slice(0, -1).join("/");
115
194
  }
116
195
  export {
117
196
  GcsArtifactService
@@ -3,6 +3,9 @@
3
3
  * Copyright 2025 Google LLC
4
4
  * SPDX-License-Identifier: Apache-2.0
5
5
  */
6
+ function isInMemoryConnectionString(uri) {
7
+ return uri === "memory://";
8
+ }
6
9
  class InMemoryArtifactService {
7
10
  constructor() {
8
11
  this.artifacts = {};
@@ -12,14 +15,24 @@ class InMemoryArtifactService {
12
15
  userId,
13
16
  sessionId,
14
17
  filename,
15
- artifact
18
+ artifact,
19
+ customMetadata
16
20
  }) {
21
+ if (!artifact.inlineData && !artifact.text) {
22
+ return Promise.reject(
23
+ new Error("Artifact must have either inlineData or text content.")
24
+ );
25
+ }
17
26
  const path = artifactPath(appName, userId, sessionId, filename);
18
27
  if (!this.artifacts[path]) {
19
28
  this.artifacts[path] = [];
20
29
  }
21
30
  const version = this.artifacts[path].length;
22
- this.artifacts[path].push(artifact);
31
+ const metadata = {
32
+ version,
33
+ customMetadata
34
+ };
35
+ this.artifacts[path].push({ part: artifact, metadata });
23
36
  return Promise.resolve(version);
24
37
  }
25
38
  loadArtifact({
@@ -37,7 +50,7 @@ class InMemoryArtifactService {
37
50
  if (version === void 0) {
38
51
  version = versions.length - 1;
39
52
  }
40
- return Promise.resolve(versions[version]);
53
+ return Promise.resolve(versions[version].part);
41
54
  }
42
55
  listArtifactKeys({
43
56
  appName,
@@ -88,6 +101,39 @@ class InMemoryArtifactService {
88
101
  }
89
102
  return Promise.resolve(versions);
90
103
  }
104
+ listArtifactVersions({
105
+ appName,
106
+ userId,
107
+ sessionId,
108
+ filename
109
+ }) {
110
+ const path = artifactPath(appName, userId, sessionId, filename);
111
+ const artifacts = this.artifacts[path];
112
+ if (!artifacts) {
113
+ return Promise.resolve([]);
114
+ }
115
+ return Promise.resolve(artifacts.map((a) => a.metadata));
116
+ }
117
+ getArtifactVersion({
118
+ appName,
119
+ userId,
120
+ sessionId,
121
+ filename,
122
+ version
123
+ }) {
124
+ const path = artifactPath(appName, userId, sessionId, filename);
125
+ const versions = this.artifacts[path];
126
+ if (!versions) {
127
+ return Promise.resolve(void 0);
128
+ }
129
+ if (version === void 0) {
130
+ version = versions.length - 1;
131
+ }
132
+ if (versions[version]) {
133
+ return Promise.resolve(versions[version].metadata);
134
+ }
135
+ return Promise.resolve(void 0);
136
+ }
91
137
  }
92
138
  function artifactPath(appName, userId, sessionId, filename) {
93
139
  if (fileHasUserNamespace(filename)) {
@@ -99,5 +145,6 @@ function fileHasUserNamespace(filename) {
99
145
  return filename.startsWith("user:");
100
146
  }
101
147
  export {
102
- InMemoryArtifactService
148
+ InMemoryArtifactService,
149
+ isInMemoryConnectionString
103
150
  };
@@ -0,0 +1,28 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2026 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ import { FileArtifactService } from "./file_artifact_service.js";
7
+ import { GcsArtifactService } from "./gcs_artifact_service.js";
8
+ import {
9
+ InMemoryArtifactService,
10
+ isInMemoryConnectionString
11
+ } from "./in_memory_artifact_service.js";
12
+ function getArtifactServiceFromUri(uri) {
13
+ if (isInMemoryConnectionString(uri)) {
14
+ return new InMemoryArtifactService();
15
+ }
16
+ if (uri.startsWith("gs://")) {
17
+ const bucket = uri.split("://")[1];
18
+ return new GcsArtifactService(bucket);
19
+ }
20
+ if (uri.startsWith("file://")) {
21
+ const rootDir = uri.split("://")[1];
22
+ return new FileArtifactService(rootDir);
23
+ }
24
+ throw new Error(`Unsupported artifact service URI: ${uri}`);
25
+ }
26
+ export {
27
+ getArtifactServiceFromUri
28
+ };
@@ -5,17 +5,17 @@
5
5
  */
6
6
  import { ActiveStreamingTool } from "./agents/active_streaming_tool.js";
7
7
  import { BaseAgent, isBaseAgent } from "./agents/base_agent.js";
8
- import {
9
- BaseLlmRequestProcessor,
10
- BaseLlmResponseProcessor
11
- } from "./agents/base_llm_processor.js";
12
- import { CallbackContext } from "./agents/callback_context.js";
8
+ import { Context } from "./agents/context.js";
13
9
  import { functionsExportedForTestingOnly } from "./agents/functions.js";
14
10
  import { InvocationContext } from "./agents/invocation_context.js";
15
11
  import { LiveRequestQueue } from "./agents/live_request_queue.js";
16
12
  import { LlmAgent, isLlmAgent } from "./agents/llm_agent.js";
17
13
  import { LoopAgent, isLoopAgent } from "./agents/loop_agent.js";
18
14
  import { ParallelAgent, isParallelAgent } from "./agents/parallel_agent.js";
15
+ import {
16
+ BaseLlmRequestProcessor,
17
+ BaseLlmResponseProcessor
18
+ } from "./agents/processors/base_llm_processor.js";
19
19
  import { ReadonlyContext } from "./agents/readonly_context.js";
20
20
  import { StreamingMode } from "./agents/run_config.js";
21
21
  import { SequentialAgent, isSequentialAgent } from "./agents/sequential_agent.js";
@@ -32,13 +32,15 @@ import {
32
32
  stringifyContent
33
33
  } from "./events/event.js";
34
34
  import { createEventActions } from "./events/event_actions.js";
35
+ import { EventType, toStructuredEvents } from "./events/structured_events.js";
35
36
  import {
36
37
  BaseExampleProvider,
37
38
  isBaseExampleProvider
38
39
  } from "./examples/base_example_provider.js";
39
40
  import { InMemoryMemoryService } from "./memory/in_memory_memory_service.js";
41
+ import { ApigeeLlm } from "./models/apigee_llm.js";
40
42
  import { BaseLlm, isBaseLlm } from "./models/base_llm.js";
41
- import { Gemini } from "./models/google_llm.js";
43
+ import { Gemini, geminiInitParams } from "./models/google_llm.js";
42
44
  import { LLMRegistry } from "./models/registry.js";
43
45
  import { BasePlugin } from "./plugins/base_plugin.js";
44
46
  import { LoggingPlugin } from "./plugins/logging_plugin.js";
@@ -52,17 +54,18 @@ import {
52
54
  } from "./plugins/security_plugin.js";
53
55
  import { InMemoryRunner } from "./runner/in_memory_runner.js";
54
56
  import { Runner } from "./runner/runner.js";
57
+ import { BaseSessionService } from "./sessions/base_session_service.js";
55
58
  import { InMemorySessionService } from "./sessions/in_memory_session_service.js";
56
59
  import { createSession } from "./sessions/session.js";
57
60
  import { State } from "./sessions/state.js";
58
61
  import { AgentTool, isAgentTool } from "./tools/agent_tool.js";
59
62
  import { BaseTool, isBaseTool } from "./tools/base_tool.js";
60
- import { BaseToolset } from "./tools/base_toolset.js";
63
+ import { BaseToolset, isBaseToolset } from "./tools/base_toolset.js";
64
+ import { EXIT_LOOP, ExitLoopTool } from "./tools/exit_loop_tool.js";
61
65
  import { FunctionTool, isFunctionTool } from "./tools/function_tool.js";
62
66
  import { GOOGLE_SEARCH, GoogleSearchTool } from "./tools/google_search_tool.js";
63
67
  import { LongRunningFunctionTool } from "./tools/long_running_tool.js";
64
68
  import { ToolConfirmation } from "./tools/tool_confirmation.js";
65
- import { ToolContext } from "./tools/tool_context.js";
66
69
  import { LogLevel, getLogger, setLogLevel, setLogger } from "./utils/logger.js";
67
70
  import { isGemini2OrAbove } from "./utils/model_name.js";
68
71
  import { zodObjectToSchema } from "./utils/simple_zod_to_json.js";
@@ -75,6 +78,7 @@ export * from "./tools/base_tool.js";
75
78
  export {
76
79
  ActiveStreamingTool,
77
80
  AgentTool,
81
+ ApigeeLlm,
78
82
  AuthCredentialTypes,
79
83
  BaseAgent,
80
84
  BaseCodeExecutor,
@@ -83,10 +87,14 @@ export {
83
87
  BaseLlmRequestProcessor,
84
88
  BaseLlmResponseProcessor,
85
89
  BasePlugin,
90
+ BaseSessionService,
86
91
  BaseTool,
87
92
  BaseToolset,
88
93
  BuiltInCodeExecutor,
89
- CallbackContext,
94
+ Context,
95
+ EXIT_LOOP,
96
+ EventType,
97
+ ExitLoopTool,
90
98
  FunctionTool,
91
99
  GOOGLE_SEARCH,
92
100
  Gemini,
@@ -116,11 +124,11 @@ export {
116
124
  State,
117
125
  StreamingMode,
118
126
  ToolConfirmation,
119
- ToolContext,
120
127
  createEvent,
121
128
  createEventActions,
122
129
  createSession,
123
130
  functionsExportedForTestingOnly,
131
+ geminiInitParams,
124
132
  getAskUserConfirmationFunctionCalls,
125
133
  getFunctionCalls,
126
134
  getFunctionResponses,
@@ -131,6 +139,7 @@ export {
131
139
  isBaseExampleProvider,
132
140
  isBaseLlm,
133
141
  isBaseTool,
142
+ isBaseToolset,
134
143
  isFinalResponse,
135
144
  isFunctionTool,
136
145
  isGemini2OrAbove,
@@ -141,6 +150,7 @@ export {
141
150
  setLogLevel,
142
151
  setLogger,
143
152
  stringifyContent,
153
+ toStructuredEvents,
144
154
  version,
145
155
  zodObjectToSchema
146
156
  };
@@ -1,8 +1,9 @@
1
1
  /**
2
2
  * @license
3
- * Copyright 2025 Google LLC
3
+ * Copyright 2026 Google LLC
4
4
  * SPDX-License-Identifier: Apache-2.0
5
5
  */
6
+ import { toCamelCase, toSnakeCase } from "../utils/object_notation_utils.js";
6
7
  import { createEventActions } from "./event_actions.js";
7
8
  function createEvent(params = {}) {
8
9
  return {
@@ -70,6 +71,30 @@ function createNewEventId() {
70
71
  }
71
72
  return id;
72
73
  }
74
+ const PRESERVE_KEYS_CAMEL_CASE = [
75
+ "actions.stateDelta",
76
+ "actions.artifactDelta",
77
+ "actions.requestedAuthConfigs",
78
+ "actions.requestedToolConfirmations",
79
+ "actions.customMetadata",
80
+ "content.parts.functionCall.args",
81
+ "content.parts.functionResponse.response"
82
+ ];
83
+ const PRESERVE_KEYS_SNAKE_CASE = [
84
+ "actions.state_delta",
85
+ "actions.artifact_delta",
86
+ "actions.requested_auth_configs",
87
+ "actions.requested_tool_confirmations",
88
+ "actions.custom_metadata",
89
+ "content.parts.function_call.args",
90
+ "content.parts.function_response.response"
91
+ ];
92
+ function transformToCamelCaseEvent(event) {
93
+ return toCamelCase(event, PRESERVE_KEYS_SNAKE_CASE);
94
+ }
95
+ function transformToSnakeCaseEvent(event) {
96
+ return toSnakeCase(event, PRESERVE_KEYS_CAMEL_CASE);
97
+ }
73
98
  export {
74
99
  createEvent,
75
100
  createNewEventId,
@@ -77,5 +102,7 @@ export {
77
102
  getFunctionResponses,
78
103
  hasTrailingCodeExecutionResult,
79
104
  isFinalResponse,
80
- stringifyContent
105
+ stringifyContent,
106
+ transformToCamelCaseEvent,
107
+ transformToSnakeCaseEvent
81
108
  };
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * @license
3
- * Copyright 2025 Google LLC
3
+ * Copyright 2026 Google LLC
4
4
  * SPDX-License-Identifier: Apache-2.0
5
5
  */
6
6
  function createEventActions(state = {}) {
@@ -0,0 +1,74 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2026 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ import { isEmpty } from "lodash-es";
7
+ import { isFinalResponse } from "./event.js";
8
+ var EventType = /* @__PURE__ */ ((EventType2) => {
9
+ EventType2["THOUGHT"] = "thought";
10
+ EventType2["CONTENT"] = "content";
11
+ EventType2["TOOL_CALL"] = "tool_call";
12
+ EventType2["TOOL_RESULT"] = "tool_result";
13
+ EventType2["CALL_CODE"] = "call_code";
14
+ EventType2["CODE_RESULT"] = "code_result";
15
+ EventType2["ERROR"] = "error";
16
+ EventType2["ACTIVITY"] = "activity";
17
+ EventType2["TOOL_CONFIRMATION"] = "tool_confirmation";
18
+ EventType2["FINISHED"] = "finished";
19
+ return EventType2;
20
+ })(EventType || {});
21
+ function toStructuredEvents(event) {
22
+ var _a, _b;
23
+ const structuredEvents = [];
24
+ if (event.errorCode) {
25
+ structuredEvents.push({
26
+ type: "error" /* ERROR */,
27
+ error: new Error(event.errorMessage || event.errorCode)
28
+ });
29
+ return structuredEvents;
30
+ }
31
+ for (const part of (_b = (_a = event.content) == null ? void 0 : _a.parts) != null ? _b : []) {
32
+ if (part.functionCall && !isEmpty(part.functionCall)) {
33
+ structuredEvents.push({
34
+ type: "tool_call" /* TOOL_CALL */,
35
+ call: part.functionCall
36
+ });
37
+ } else if (part.functionResponse && !isEmpty(part.functionResponse)) {
38
+ structuredEvents.push({
39
+ type: "tool_result" /* TOOL_RESULT */,
40
+ result: part.functionResponse
41
+ });
42
+ } else if (part.executableCode && !isEmpty(part.executableCode)) {
43
+ structuredEvents.push({
44
+ type: "call_code" /* CALL_CODE */,
45
+ code: part.executableCode
46
+ });
47
+ } else if (part.codeExecutionResult && !isEmpty(part.codeExecutionResult)) {
48
+ structuredEvents.push({
49
+ type: "code_result" /* CODE_RESULT */,
50
+ result: part.codeExecutionResult
51
+ });
52
+ } else if (part.text) {
53
+ if (part.thought) {
54
+ structuredEvents.push({ type: "thought" /* THOUGHT */, content: part.text });
55
+ } else {
56
+ structuredEvents.push({ type: "content" /* CONTENT */, content: part.text });
57
+ }
58
+ }
59
+ }
60
+ if (event.actions.requestedToolConfirmations && !isEmpty(event.actions.requestedToolConfirmations)) {
61
+ structuredEvents.push({
62
+ type: "tool_confirmation" /* TOOL_CONFIRMATION */,
63
+ confirmations: event.actions.requestedToolConfirmations
64
+ });
65
+ }
66
+ if (isFinalResponse(event)) {
67
+ structuredEvents.push({ type: "finished" /* FINISHED */, output: void 0 });
68
+ }
69
+ return structuredEvents;
70
+ }
71
+ export {
72
+ EventType,
73
+ toStructuredEvents
74
+ };