@google/adk 0.3.0 → 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (183) hide show
  1. package/dist/cjs/a2a/part_converter_utils.js +210 -0
  2. package/dist/cjs/agents/active_streaming_tool.js +1 -1
  3. package/dist/cjs/agents/base_agent.js +3 -3
  4. package/dist/cjs/agents/base_llm_processor.js +1 -1
  5. package/dist/cjs/agents/callback_context.js +1 -1
  6. package/dist/cjs/agents/content_processor_utils.js +1 -1
  7. package/dist/cjs/agents/functions.js +2 -1
  8. package/dist/cjs/agents/instructions.js +1 -1
  9. package/dist/cjs/agents/invocation_context.js +1 -1
  10. package/dist/cjs/agents/live_request_queue.js +1 -1
  11. package/dist/cjs/agents/llm_agent.js +58 -40
  12. package/dist/cjs/agents/loop_agent.js +1 -1
  13. package/dist/cjs/agents/parallel_agent.js +1 -1
  14. package/dist/cjs/agents/readonly_context.js +13 -1
  15. package/dist/cjs/agents/run_config.js +2 -1
  16. package/dist/cjs/agents/sequential_agent.js +1 -1
  17. package/dist/cjs/agents/transcription_entry.js +1 -1
  18. package/dist/cjs/artifacts/base_artifact_service.js +1 -1
  19. package/dist/cjs/artifacts/file_artifact_service.js +491 -0
  20. package/dist/cjs/artifacts/gcs_artifact_service.js +127 -48
  21. package/dist/cjs/artifacts/in_memory_artifact_service.js +54 -6
  22. package/dist/cjs/artifacts/registry.js +55 -0
  23. package/dist/cjs/auth/auth_credential.js +1 -1
  24. package/dist/cjs/auth/auth_handler.js +1 -1
  25. package/dist/cjs/auth/auth_schemes.js +1 -1
  26. package/dist/cjs/auth/auth_tool.js +1 -1
  27. package/dist/cjs/auth/credential_service/base_credential_service.js +1 -1
  28. package/dist/cjs/auth/credential_service/in_memory_credential_service.js +1 -1
  29. package/dist/cjs/auth/exchanger/base_credential_exchanger.js +1 -1
  30. package/dist/cjs/auth/exchanger/credential_exchanger_registry.js +1 -1
  31. package/dist/cjs/code_executors/base_code_executor.js +1 -1
  32. package/dist/cjs/code_executors/built_in_code_executor.js +1 -1
  33. package/dist/cjs/code_executors/code_execution_utils.js +1 -1
  34. package/dist/cjs/code_executors/code_executor_context.js +1 -1
  35. package/dist/cjs/common.js +14 -1
  36. package/dist/cjs/events/event.js +33 -4
  37. package/dist/cjs/events/event_actions.js +2 -2
  38. package/dist/cjs/events/structured_events.js +105 -0
  39. package/dist/cjs/examples/base_example_provider.js +1 -1
  40. package/dist/cjs/examples/example.js +1 -1
  41. package/dist/cjs/examples/example_util.js +1 -1
  42. package/dist/cjs/index.js +54 -83
  43. package/dist/cjs/index_web.js +1 -1
  44. package/dist/cjs/memory/base_memory_service.js +1 -1
  45. package/dist/cjs/memory/in_memory_memory_service.js +1 -1
  46. package/dist/cjs/memory/memory_entry.js +1 -1
  47. package/dist/cjs/models/apigee_llm.js +182 -0
  48. package/dist/cjs/models/base_llm.js +1 -1
  49. package/dist/cjs/models/base_llm_connection.js +1 -1
  50. package/dist/cjs/models/gemini_llm_connection.js +1 -1
  51. package/dist/cjs/models/google_llm.js +70 -51
  52. package/dist/cjs/models/llm_request.js +1 -1
  53. package/dist/cjs/models/llm_response.js +1 -1
  54. package/dist/cjs/models/registry.js +3 -1
  55. package/dist/cjs/plugins/base_plugin.js +1 -1
  56. package/dist/cjs/plugins/logging_plugin.js +1 -1
  57. package/dist/cjs/plugins/plugin_manager.js +1 -1
  58. package/dist/cjs/plugins/security_plugin.js +1 -1
  59. package/dist/cjs/runner/in_memory_runner.js +1 -1
  60. package/dist/cjs/runner/runner.js +32 -1
  61. package/dist/cjs/sessions/base_session_service.js +53 -3
  62. package/dist/cjs/sessions/database_session_service.js +364 -0
  63. package/dist/cjs/sessions/db/operations.js +114 -0
  64. package/dist/cjs/sessions/db/schema.js +204 -0
  65. package/dist/cjs/sessions/in_memory_session_service.js +24 -22
  66. package/dist/cjs/sessions/registry.js +49 -0
  67. package/dist/cjs/sessions/session.js +1 -1
  68. package/dist/cjs/sessions/state.js +1 -1
  69. package/dist/cjs/telemetry/google_cloud.js +1 -1
  70. package/dist/cjs/telemetry/setup.js +1 -1
  71. package/dist/cjs/telemetry/tracing.js +1 -1
  72. package/dist/cjs/tools/agent_tool.js +1 -1
  73. package/dist/cjs/tools/base_tool.js +1 -1
  74. package/dist/cjs/tools/base_toolset.js +1 -1
  75. package/dist/cjs/tools/forwarding_artifact_service.js +17 -1
  76. package/dist/cjs/tools/function_tool.js +1 -1
  77. package/dist/cjs/tools/google_search_tool.js +1 -1
  78. package/dist/cjs/tools/long_running_tool.js +1 -1
  79. package/dist/cjs/tools/mcp/mcp_session_manager.js +1 -1
  80. package/dist/cjs/tools/mcp/mcp_tool.js +1 -1
  81. package/dist/cjs/tools/mcp/mcp_toolset.js +1 -1
  82. package/dist/cjs/tools/tool_confirmation.js +1 -1
  83. package/dist/cjs/tools/tool_context.js +1 -1
  84. package/dist/cjs/utils/client_labels.js +1 -1
  85. package/dist/cjs/utils/env_aware_utils.js +10 -1
  86. package/dist/cjs/utils/gemini_schema_util.js +1 -1
  87. package/dist/cjs/utils/logger.js +1 -1
  88. package/dist/cjs/utils/model_name.js +1 -1
  89. package/dist/cjs/utils/object_notation_utils.js +78 -0
  90. package/dist/cjs/utils/simple_zod_to_json.js +1 -1
  91. package/dist/cjs/utils/variant_utils.js +3 -9
  92. package/dist/cjs/version.js +2 -2
  93. package/dist/esm/a2a/part_converter_utils.js +171 -0
  94. package/dist/esm/agents/base_agent.js +2 -2
  95. package/dist/esm/agents/functions.js +1 -0
  96. package/dist/esm/agents/llm_agent.js +58 -40
  97. package/dist/esm/agents/readonly_context.js +12 -0
  98. package/dist/esm/agents/run_config.js +1 -0
  99. package/dist/esm/artifacts/file_artifact_service.js +451 -0
  100. package/dist/esm/artifacts/gcs_artifact_service.js +126 -47
  101. package/dist/esm/artifacts/in_memory_artifact_service.js +51 -4
  102. package/dist/esm/artifacts/registry.js +28 -0
  103. package/dist/esm/common.js +9 -1
  104. package/dist/esm/events/event.js +29 -2
  105. package/dist/esm/events/event_actions.js +1 -1
  106. package/dist/esm/events/structured_events.js +74 -0
  107. package/dist/esm/index.js +18 -88
  108. package/dist/esm/models/apigee_llm.js +152 -0
  109. package/dist/esm/models/google_llm.js +67 -49
  110. package/dist/esm/models/registry.js +2 -0
  111. package/dist/esm/runner/runner.js +31 -0
  112. package/dist/esm/sessions/base_session_service.js +49 -1
  113. package/dist/esm/sessions/database_session_service.js +350 -0
  114. package/dist/esm/sessions/db/operations.js +87 -0
  115. package/dist/esm/sessions/db/schema.js +172 -0
  116. package/dist/esm/sessions/in_memory_session_service.js +23 -21
  117. package/dist/esm/sessions/registry.js +25 -0
  118. package/dist/esm/tools/forwarding_artifact_service.js +16 -0
  119. package/dist/esm/utils/env_aware_utils.js +8 -0
  120. package/dist/esm/utils/object_notation_utils.js +47 -0
  121. package/dist/esm/utils/variant_utils.js +1 -7
  122. package/dist/esm/version.js +1 -1
  123. package/dist/types/a2a/part_converter_utils.d.ts +47 -0
  124. package/dist/types/agents/llm_agent.d.ts +11 -11
  125. package/dist/types/agents/readonly_context.d.ts +8 -0
  126. package/dist/types/agents/run_config.d.ts +6 -0
  127. package/dist/types/artifacts/base_artifact_service.d.ts +31 -0
  128. package/dist/types/artifacts/file_artifact_service.d.ts +43 -0
  129. package/dist/types/artifacts/gcs_artifact_service.d.ts +3 -1
  130. package/dist/types/artifacts/in_memory_artifact_service.d.ts +5 -2
  131. package/dist/types/artifacts/registry.d.ts +7 -0
  132. package/dist/types/common.d.ts +11 -2
  133. package/dist/types/events/event.d.ts +15 -1
  134. package/dist/types/events/event_actions.d.ts +1 -1
  135. package/dist/types/events/structured_events.d.ts +106 -0
  136. package/dist/types/index.d.ts +5 -1
  137. package/dist/types/models/apigee_llm.d.ts +59 -0
  138. package/dist/types/models/google_llm.d.ts +5 -2
  139. package/dist/types/runner/runner.d.ts +15 -0
  140. package/dist/types/sessions/base_session_service.d.ts +20 -0
  141. package/dist/types/sessions/database_session_service.d.ts +31 -0
  142. package/dist/types/sessions/db/operations.d.ts +29 -0
  143. package/dist/types/sessions/db/schema.d.ts +45 -0
  144. package/dist/types/sessions/in_memory_session_service.d.ts +4 -1
  145. package/dist/types/sessions/registry.d.ts +7 -0
  146. package/dist/types/tools/forwarding_artifact_service.d.ts +3 -1
  147. package/dist/types/utils/env_aware_utils.d.ts +7 -0
  148. package/dist/types/utils/object_notation_utils.d.ts +21 -0
  149. package/dist/types/version.d.ts +1 -1
  150. package/dist/web/a2a/part_converter_utils.js +171 -0
  151. package/dist/web/agents/base_agent.js +2 -2
  152. package/dist/web/agents/functions.js +1 -0
  153. package/dist/web/agents/llm_agent.js +79 -59
  154. package/dist/web/agents/readonly_context.js +12 -0
  155. package/dist/web/agents/run_config.js +2 -1
  156. package/dist/web/artifacts/file_artifact_service.js +506 -0
  157. package/dist/web/artifacts/gcs_artifact_service.js +123 -46
  158. package/dist/web/artifacts/in_memory_artifact_service.js +51 -4
  159. package/dist/web/artifacts/registry.js +28 -0
  160. package/dist/web/common.js +9 -1
  161. package/dist/web/events/event.js +29 -2
  162. package/dist/web/events/event_actions.js +1 -1
  163. package/dist/web/events/structured_events.js +74 -0
  164. package/dist/web/index.js +18 -8
  165. package/dist/web/models/apigee_llm.js +219 -0
  166. package/dist/web/models/google_llm.js +67 -46
  167. package/dist/web/models/registry.js +2 -0
  168. package/dist/web/runner/runner.js +33 -0
  169. package/dist/web/sessions/base_session_service.js +49 -1
  170. package/dist/web/sessions/database_session_service.js +368 -0
  171. package/dist/web/sessions/db/operations.js +87 -0
  172. package/dist/web/sessions/db/schema.js +172 -0
  173. package/dist/web/sessions/in_memory_session_service.js +23 -21
  174. package/dist/web/sessions/registry.js +25 -0
  175. package/dist/web/tools/forwarding_artifact_service.js +16 -0
  176. package/dist/web/utils/env_aware_utils.js +8 -0
  177. package/dist/web/utils/object_notation_utils.js +47 -0
  178. package/dist/web/utils/variant_utils.js +1 -7
  179. package/dist/web/version.js +1 -1
  180. package/package.json +13 -4
  181. package/dist/cjs/index.js.map +0 -7
  182. package/dist/esm/index.js.map +0 -7
  183. package/dist/web/index.js.map +0 -7
@@ -0,0 +1,364 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2026 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+
7
+ "use strict";
8
+ var __defProp = Object.defineProperty;
9
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
10
+ var __getOwnPropNames = Object.getOwnPropertyNames;
11
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
12
+ var __export = (target, all) => {
13
+ for (var name in all)
14
+ __defProp(target, name, { get: all[name], enumerable: true });
15
+ };
16
+ var __copyProps = (to, from, except, desc) => {
17
+ if (from && typeof from === "object" || typeof from === "function") {
18
+ for (let key of __getOwnPropNames(from))
19
+ if (!__hasOwnProp.call(to, key) && key !== except)
20
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
21
+ }
22
+ return to;
23
+ };
24
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
25
+ var database_session_service_exports = {};
26
+ __export(database_session_service_exports, {
27
+ DatabaseSessionService: () => DatabaseSessionService,
28
+ isDatabaseConnectionString: () => isDatabaseConnectionString
29
+ });
30
+ module.exports = __toCommonJS(database_session_service_exports);
31
+ var import_core = require("@mikro-orm/core");
32
+ var import_env_aware_utils = require("../utils/env_aware_utils.js");
33
+ var import_base_session_service = require("./base_session_service.js");
34
+ var import_operations = require("./db/operations.js");
35
+ var import_schema = require("./db/schema.js");
36
+ var import_session = require("./session.js");
37
+ var import_state = require("./state.js");
38
+ /**
39
+ * @license
40
+ * Copyright 2026 Google LLC
41
+ * SPDX-License-Identifier: Apache-2.0
42
+ */
43
+ function isDatabaseConnectionString(uri) {
44
+ if (!uri) {
45
+ return false;
46
+ }
47
+ return uri.startsWith("postgres://") || uri.startsWith("postgresql://") || uri.startsWith("mysql://") || uri.startsWith("mariadb://") || uri.startsWith("mssql://") || uri.startsWith("sqlite://");
48
+ }
49
+ class DatabaseSessionService extends import_base_session_service.BaseSessionService {
50
+ constructor(connectionStringOrOptions) {
51
+ super();
52
+ this.initialized = false;
53
+ if (typeof connectionStringOrOptions === "string") {
54
+ this.options = (0, import_operations.getConnectionOptionsFromUri)(connectionStringOrOptions);
55
+ } else {
56
+ if (!connectionStringOrOptions.driver) {
57
+ throw new Error("Driver is required when passing options object.");
58
+ }
59
+ this.options = {
60
+ ...connectionStringOrOptions,
61
+ entities: import_schema.ENTITIES
62
+ };
63
+ }
64
+ }
65
+ async init() {
66
+ if (this.initialized) {
67
+ return;
68
+ }
69
+ this.orm = await import_core.MikroORM.init(this.options);
70
+ await (0, import_operations.ensureDatabaseCreated)(this.orm);
71
+ await (0, import_operations.validateDatabaseSchemaVersion)(this.orm);
72
+ this.initialized = true;
73
+ }
74
+ async createSession({
75
+ appName,
76
+ userId,
77
+ state,
78
+ sessionId
79
+ }) {
80
+ await this.init();
81
+ const em = this.orm.em.fork();
82
+ const id = sessionId || (0, import_env_aware_utils.randomUUID)();
83
+ const now = /* @__PURE__ */ new Date();
84
+ const existing = await em.findOne(import_schema.StorageSession, {
85
+ id,
86
+ appName,
87
+ userId
88
+ });
89
+ if (existing) {
90
+ throw new Error(`Session with id ${id} already exists.`);
91
+ }
92
+ let appStateModel = await em.findOne(import_schema.StorageAppState, { appName });
93
+ if (!appStateModel) {
94
+ appStateModel = em.create(import_schema.StorageAppState, {
95
+ appName,
96
+ state: {},
97
+ updateTime: now
98
+ });
99
+ em.persist(appStateModel);
100
+ }
101
+ let userStateModel = await em.findOne(import_schema.StorageUserState, { appName, userId });
102
+ if (!userStateModel) {
103
+ userStateModel = em.create(import_schema.StorageUserState, {
104
+ appName,
105
+ userId,
106
+ state: {}
107
+ });
108
+ em.persist(userStateModel);
109
+ }
110
+ const appStateDelta = {};
111
+ const userStateDelta = {};
112
+ const sessionState = {};
113
+ if (state) {
114
+ for (const [key, value] of Object.entries(state)) {
115
+ if (key.startsWith(import_state.State.APP_PREFIX)) {
116
+ appStateDelta[key.replace(import_state.State.APP_PREFIX, "")] = value;
117
+ } else if (key.startsWith(import_state.State.USER_PREFIX)) {
118
+ userStateDelta[key.replace(import_state.State.USER_PREFIX, "")] = value;
119
+ } else {
120
+ sessionState[key] = value;
121
+ }
122
+ }
123
+ }
124
+ if (Object.keys(appStateDelta).length > 0) {
125
+ appStateModel.state = { ...appStateModel.state, ...appStateDelta };
126
+ }
127
+ if (Object.keys(userStateDelta).length > 0) {
128
+ userStateModel.state = { ...userStateModel.state, ...userStateDelta };
129
+ }
130
+ const storageSession = em.create(import_schema.StorageSession, {
131
+ id,
132
+ appName,
133
+ userId,
134
+ state: sessionState,
135
+ createTime: now,
136
+ updateTime: now
137
+ });
138
+ em.persist(storageSession);
139
+ await em.flush();
140
+ const mergedState = (0, import_base_session_service.mergeStates)(
141
+ appStateModel.state,
142
+ userStateModel.state,
143
+ sessionState
144
+ );
145
+ return (0, import_session.createSession)({
146
+ id,
147
+ appName,
148
+ userId,
149
+ state: mergedState,
150
+ events: [],
151
+ lastUpdateTime: storageSession.createTime.getTime()
152
+ });
153
+ }
154
+ async getSession({
155
+ appName,
156
+ userId,
157
+ sessionId,
158
+ config
159
+ }) {
160
+ await this.init();
161
+ const em = this.orm.em.fork();
162
+ const storageSession = await em.findOne(import_schema.StorageSession, {
163
+ appName,
164
+ userId,
165
+ id: sessionId
166
+ });
167
+ if (!storageSession) {
168
+ return void 0;
169
+ }
170
+ const eventWhere = {
171
+ appName,
172
+ userId,
173
+ sessionId
174
+ };
175
+ if (config == null ? void 0 : config.afterTimestamp) {
176
+ eventWhere.timestamp = { $gt: new Date(config.afterTimestamp) };
177
+ }
178
+ const storageEvents = await em.find(import_schema.StorageEvent, eventWhere, {
179
+ orderBy: { timestamp: "DESC" },
180
+ limit: config == null ? void 0 : config.numRecentEvents
181
+ });
182
+ storageEvents.reverse();
183
+ const appStateModel = await em.findOne(import_schema.StorageAppState, { appName });
184
+ const userStateModel = await em.findOne(import_schema.StorageUserState, {
185
+ appName,
186
+ userId
187
+ });
188
+ const mergedState = (0, import_base_session_service.mergeStates)(
189
+ (appStateModel == null ? void 0 : appStateModel.state) || {},
190
+ (userStateModel == null ? void 0 : userStateModel.state) || {},
191
+ storageSession.state
192
+ );
193
+ return (0, import_session.createSession)({
194
+ id: sessionId,
195
+ appName,
196
+ userId,
197
+ state: mergedState,
198
+ events: storageEvents.map((se) => se.eventData),
199
+ lastUpdateTime: storageSession.updateTime.getTime()
200
+ });
201
+ }
202
+ async listSessions({
203
+ appName,
204
+ userId
205
+ }) {
206
+ await this.init();
207
+ const em = this.orm.em.fork();
208
+ const where = { appName };
209
+ if (userId) {
210
+ where.userId = userId;
211
+ }
212
+ const storageSessions = await em.find(import_schema.StorageSession, where);
213
+ const appStateModel = await em.findOne(import_schema.StorageAppState, { appName });
214
+ const appState = (appStateModel == null ? void 0 : appStateModel.state) || {};
215
+ const userStateMap = {};
216
+ if (userId) {
217
+ const u = await em.findOne(import_schema.StorageUserState, { appName, userId });
218
+ if (u) userStateMap[userId] = u.state;
219
+ } else {
220
+ const allUserStates = await em.find(import_schema.StorageUserState, { appName });
221
+ for (const u of allUserStates) {
222
+ userStateMap[u.userId] = u.state;
223
+ }
224
+ }
225
+ const sessions = storageSessions.map((ss) => {
226
+ const uState = userStateMap[ss.userId] || {};
227
+ const merged = (0, import_base_session_service.mergeStates)(appState, uState, ss.state);
228
+ return (0, import_session.createSession)({
229
+ id: ss.id,
230
+ appName: ss.appName,
231
+ userId: ss.userId,
232
+ state: merged,
233
+ events: [],
234
+ lastUpdateTime: ss.updateTime.getTime()
235
+ });
236
+ });
237
+ return { sessions };
238
+ }
239
+ async deleteSession({
240
+ appName,
241
+ userId,
242
+ sessionId
243
+ }) {
244
+ await this.init();
245
+ const em = this.orm.em.fork();
246
+ await em.nativeDelete(import_schema.StorageSession, { appName, userId, id: sessionId });
247
+ await em.nativeDelete(import_schema.StorageEvent, { appName, userId, sessionId });
248
+ }
249
+ async appendEvent({
250
+ session,
251
+ event
252
+ }) {
253
+ await this.init();
254
+ const em = this.orm.em.fork();
255
+ if (event.partial) {
256
+ return event;
257
+ }
258
+ const trimmedEvent = (0, import_base_session_service.trimTempDeltaState)(event);
259
+ await em.transactional(async (txEm) => {
260
+ const storageSession = await txEm.findOne(
261
+ import_schema.StorageSession,
262
+ {
263
+ appName: session.appName,
264
+ userId: session.userId,
265
+ id: session.id
266
+ },
267
+ { lockMode: import_core.LockMode.PESSIMISTIC_WRITE }
268
+ );
269
+ if (!storageSession) {
270
+ throw new Error(`Session ${session.id} not found for appendEvent`);
271
+ }
272
+ let appStateModel = await txEm.findOne(import_schema.StorageAppState, {
273
+ appName: session.appName
274
+ });
275
+ if (!appStateModel) {
276
+ appStateModel = txEm.create(import_schema.StorageAppState, {
277
+ appName: session.appName,
278
+ state: {},
279
+ updateTime: /* @__PURE__ */ new Date()
280
+ });
281
+ txEm.persist(appStateModel);
282
+ }
283
+ let userStateModel = await txEm.findOne(import_schema.StorageUserState, {
284
+ appName: session.appName,
285
+ userId: session.userId
286
+ });
287
+ if (!userStateModel) {
288
+ userStateModel = txEm.create(import_schema.StorageUserState, {
289
+ appName: session.appName,
290
+ userId: session.userId,
291
+ state: {}
292
+ });
293
+ txEm.persist(userStateModel);
294
+ }
295
+ if (storageSession.updateTime.getTime() > session.lastUpdateTime) {
296
+ const events = await txEm.find(
297
+ import_schema.StorageEvent,
298
+ {
299
+ appName: session.appName,
300
+ userId: session.userId,
301
+ sessionId: session.id
302
+ },
303
+ { orderBy: { timestamp: "ASC" } }
304
+ );
305
+ const mergedState = (0, import_base_session_service.mergeStates)(
306
+ appStateModel.state,
307
+ userStateModel.state,
308
+ storageSession.state
309
+ );
310
+ session.state = mergedState;
311
+ session.events = events.map((e) => e.eventData);
312
+ }
313
+ if (event.actions && event.actions.stateDelta) {
314
+ const appDelta = {};
315
+ const userDelta = {};
316
+ const sessionDelta = {};
317
+ for (const [key, value] of Object.entries(event.actions.stateDelta)) {
318
+ if (key.startsWith(import_state.State.APP_PREFIX)) {
319
+ appDelta[key.replace(import_state.State.APP_PREFIX, "")] = value;
320
+ } else if (key.startsWith(import_state.State.USER_PREFIX)) {
321
+ userDelta[key.replace(import_state.State.USER_PREFIX, "")] = value;
322
+ } else {
323
+ sessionDelta[key] = value;
324
+ }
325
+ }
326
+ if (Object.keys(appDelta).length > 0) {
327
+ appStateModel.state = { ...appStateModel.state, ...appDelta };
328
+ }
329
+ if (Object.keys(userDelta).length > 0) {
330
+ userStateModel.state = { ...userStateModel.state, ...userDelta };
331
+ }
332
+ if (Object.keys(sessionDelta).length > 0) {
333
+ storageSession.state = { ...storageSession.state, ...sessionDelta };
334
+ }
335
+ }
336
+ const newStorageEvent = txEm.create(import_schema.StorageEvent, {
337
+ id: trimmedEvent.id,
338
+ appName: session.appName,
339
+ userId: session.userId,
340
+ sessionId: session.id,
341
+ invocationId: trimmedEvent.invocationId,
342
+ timestamp: new Date(trimmedEvent.timestamp),
343
+ eventData: trimmedEvent
344
+ });
345
+ txEm.persist(newStorageEvent);
346
+ await txEm.commit();
347
+ storageSession.updateTime = new Date(event.timestamp);
348
+ const newMergedState = (0, import_base_session_service.mergeStates)(
349
+ appStateModel.state,
350
+ userStateModel.state,
351
+ storageSession.state
352
+ );
353
+ session.state = newMergedState;
354
+ session.events.push(event);
355
+ session.lastUpdateTime = storageSession.updateTime.getTime();
356
+ });
357
+ return event;
358
+ }
359
+ }
360
+ // Annotate the CommonJS export names for ESM import in node:
361
+ 0 && (module.exports = {
362
+ DatabaseSessionService,
363
+ isDatabaseConnectionString
364
+ });
@@ -0,0 +1,114 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2026 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+
7
+ "use strict";
8
+ var __defProp = Object.defineProperty;
9
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
10
+ var __getOwnPropNames = Object.getOwnPropertyNames;
11
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
12
+ var __export = (target, all) => {
13
+ for (var name in all)
14
+ __defProp(target, name, { get: all[name], enumerable: true });
15
+ };
16
+ var __copyProps = (to, from, except, desc) => {
17
+ if (from && typeof from === "object" || typeof from === "function") {
18
+ for (let key of __getOwnPropNames(from))
19
+ if (!__hasOwnProp.call(to, key) && key !== except)
20
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
21
+ }
22
+ return to;
23
+ };
24
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
25
+ var operations_exports = {};
26
+ __export(operations_exports, {
27
+ ensureDatabaseCreated: () => ensureDatabaseCreated,
28
+ getConnectionOptionsFromUri: () => getConnectionOptionsFromUri,
29
+ validateDatabaseSchemaVersion: () => validateDatabaseSchemaVersion
30
+ });
31
+ module.exports = __toCommonJS(operations_exports);
32
+ var import_core = require("@mikro-orm/core");
33
+ var import_mariadb = require("@mikro-orm/mariadb");
34
+ var import_mssql = require("@mikro-orm/mssql");
35
+ var import_mysql = require("@mikro-orm/mysql");
36
+ var import_postgresql = require("@mikro-orm/postgresql");
37
+ var import_sqlite = require("@mikro-orm/sqlite");
38
+ var import_schema = require("./schema.js");
39
+ /**
40
+ * @license
41
+ * Copyright 2026 Google LLC
42
+ * SPDX-License-Identifier: Apache-2.0
43
+ */
44
+ function getConnectionOptionsFromUri(uri) {
45
+ let driver;
46
+ if (uri.startsWith("postgres://") || uri.startsWith("postgresql://")) {
47
+ driver = import_postgresql.PostgreSqlDriver;
48
+ } else if (uri.startsWith("mysql://")) {
49
+ driver = import_mysql.MySqlDriver;
50
+ } else if (uri.startsWith("mariadb://")) {
51
+ driver = import_mariadb.MariaDbDriver;
52
+ } else if (uri.startsWith("sqlite://")) {
53
+ driver = import_sqlite.SqliteDriver;
54
+ } else if (uri.startsWith("mssql://")) {
55
+ driver = import_mssql.MsSqlDriver;
56
+ } else {
57
+ throw new Error(`Unsupported database URI: ${uri}`);
58
+ }
59
+ if (uri === "sqlite://:memory:") {
60
+ return {
61
+ entities: import_schema.ENTITIES,
62
+ dbName: ":memory:",
63
+ driver
64
+ };
65
+ }
66
+ const { host, port, username, password, pathname } = new URL(uri);
67
+ const hostName = host.split(":")[0];
68
+ return {
69
+ entities: import_schema.ENTITIES,
70
+ dbName: pathname.slice(1),
71
+ host: hostName,
72
+ port: port ? parseInt(port) : void 0,
73
+ user: username,
74
+ password,
75
+ driver
76
+ };
77
+ }
78
+ async function ensureDatabaseCreated(ormOrUrlOrOptions) {
79
+ let orm;
80
+ if (ormOrUrlOrOptions instanceof import_core.MikroORM) {
81
+ orm = ormOrUrlOrOptions;
82
+ } else if (typeof ormOrUrlOrOptions === "string") {
83
+ orm = await import_core.MikroORM.init(getConnectionOptionsFromUri(ormOrUrlOrOptions));
84
+ } else {
85
+ orm = await import_core.MikroORM.init(ormOrUrlOrOptions);
86
+ }
87
+ await orm.schema.ensureDatabase();
88
+ await orm.schema.updateSchema();
89
+ }
90
+ async function validateDatabaseSchemaVersion(orm) {
91
+ const em = orm.em.fork();
92
+ const existing = await em.findOne(import_schema.StorageMetadata, {
93
+ key: import_schema.SCHEMA_VERSION_KEY
94
+ });
95
+ if (existing) {
96
+ if (existing.value !== import_schema.SCHEMA_VERSION_1_JSON) {
97
+ throw new Error(
98
+ `ADK Database schema version ${existing.value} is not compatible.`
99
+ );
100
+ }
101
+ return;
102
+ }
103
+ const newVersion = em.create(import_schema.StorageMetadata, {
104
+ key: import_schema.SCHEMA_VERSION_KEY,
105
+ value: import_schema.SCHEMA_VERSION_1_JSON
106
+ });
107
+ await em.persist(newVersion).flush();
108
+ }
109
+ // Annotate the CommonJS export names for ESM import in node:
110
+ 0 && (module.exports = {
111
+ ensureDatabaseCreated,
112
+ getConnectionOptionsFromUri,
113
+ validateDatabaseSchemaVersion
114
+ });
@@ -0,0 +1,204 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2026 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+
7
+ "use strict";
8
+ var __defProp = Object.defineProperty;
9
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
10
+ var __getOwnPropNames = Object.getOwnPropertyNames;
11
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
12
+ var __export = (target, all) => {
13
+ for (var name in all)
14
+ __defProp(target, name, { get: all[name], enumerable: true });
15
+ };
16
+ var __copyProps = (to, from, except, desc) => {
17
+ if (from && typeof from === "object" || typeof from === "function") {
18
+ for (let key of __getOwnPropNames(from))
19
+ if (!__hasOwnProp.call(to, key) && key !== except)
20
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
21
+ }
22
+ return to;
23
+ };
24
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
25
+ var __decorateClass = (decorators, target, key, kind) => {
26
+ var result = kind > 1 ? void 0 : kind ? __getOwnPropDesc(target, key) : target;
27
+ for (var i = decorators.length - 1, decorator; i >= 0; i--)
28
+ if (decorator = decorators[i])
29
+ result = (kind ? decorator(target, key, result) : decorator(result)) || result;
30
+ if (kind && result) __defProp(target, key, result);
31
+ return result;
32
+ };
33
+ var schema_exports = {};
34
+ __export(schema_exports, {
35
+ ENTITIES: () => ENTITIES,
36
+ SCHEMA_VERSION_1_JSON: () => SCHEMA_VERSION_1_JSON,
37
+ SCHEMA_VERSION_KEY: () => SCHEMA_VERSION_KEY,
38
+ StorageAppState: () => StorageAppState,
39
+ StorageEvent: () => StorageEvent,
40
+ StorageMetadata: () => StorageMetadata,
41
+ StorageSession: () => StorageSession,
42
+ StorageUserState: () => StorageUserState
43
+ });
44
+ module.exports = __toCommonJS(schema_exports);
45
+ var import_core = require("@mikro-orm/core");
46
+ var import_event = require("../../events/event.js");
47
+ /**
48
+ * @license
49
+ * Copyright 2026 Google LLC
50
+ * SPDX-License-Identifier: Apache-2.0
51
+ */
52
+ const SCHEMA_VERSION_KEY = "schema_version";
53
+ const SCHEMA_VERSION_1_JSON = "1";
54
+ class CamelCaseToSnakeCaseJsonType extends import_core.JsonType {
55
+ convertToDatabaseValue(value) {
56
+ return JSON.stringify((0, import_event.transformToSnakeCaseEvent)(value));
57
+ }
58
+ convertToJSValue(value) {
59
+ if (typeof value === "string") {
60
+ return (0, import_event.transformToCamelCaseEvent)(JSON.parse(value));
61
+ }
62
+ return (0, import_event.transformToCamelCaseEvent)(value);
63
+ }
64
+ }
65
+ let StorageMetadata = class {
66
+ };
67
+ __decorateClass([
68
+ (0, import_core.PrimaryKey)({ type: "string" })
69
+ ], StorageMetadata.prototype, "key", 2);
70
+ __decorateClass([
71
+ (0, import_core.Property)({ type: "string" })
72
+ ], StorageMetadata.prototype, "value", 2);
73
+ StorageMetadata = __decorateClass([
74
+ (0, import_core.Entity)({ tableName: "adk_internal_metadata" })
75
+ ], StorageMetadata);
76
+ let StorageAppState = class {
77
+ constructor() {
78
+ this.updateTime = /* @__PURE__ */ new Date();
79
+ }
80
+ };
81
+ __decorateClass([
82
+ (0, import_core.PrimaryKey)({ type: "string", fieldName: "app_name" })
83
+ ], StorageAppState.prototype, "appName", 2);
84
+ __decorateClass([
85
+ (0, import_core.Property)({ type: "json" })
86
+ ], StorageAppState.prototype, "state", 2);
87
+ __decorateClass([
88
+ (0, import_core.Property)({
89
+ type: "datetime",
90
+ fieldName: "update_time",
91
+ onCreate: () => /* @__PURE__ */ new Date(),
92
+ onUpdate: () => /* @__PURE__ */ new Date()
93
+ })
94
+ ], StorageAppState.prototype, "updateTime", 2);
95
+ StorageAppState = __decorateClass([
96
+ (0, import_core.Entity)({ tableName: "app_states" })
97
+ ], StorageAppState);
98
+ import_core.PrimaryKey.name;
99
+ let StorageUserState = class {
100
+ constructor() {
101
+ this.updateTime = /* @__PURE__ */ new Date();
102
+ }
103
+ };
104
+ __decorateClass([
105
+ (0, import_core.PrimaryKey)({ type: "string", fieldName: "app_name" })
106
+ ], StorageUserState.prototype, "appName", 2);
107
+ __decorateClass([
108
+ (0, import_core.PrimaryKey)({ type: "string", fieldName: "user_id" })
109
+ ], StorageUserState.prototype, "userId", 2);
110
+ __decorateClass([
111
+ (0, import_core.Property)({ type: "json" })
112
+ ], StorageUserState.prototype, "state", 2);
113
+ __decorateClass([
114
+ (0, import_core.Property)({
115
+ type: "datetime",
116
+ fieldName: "update_time",
117
+ onCreate: () => /* @__PURE__ */ new Date(),
118
+ onUpdate: () => /* @__PURE__ */ new Date()
119
+ })
120
+ ], StorageUserState.prototype, "updateTime", 2);
121
+ StorageUserState = __decorateClass([
122
+ (0, import_core.Entity)({ tableName: "user_states" })
123
+ ], StorageUserState);
124
+ import_core.PrimaryKey.name;
125
+ let StorageSession = class {
126
+ constructor() {
127
+ this.createTime = /* @__PURE__ */ new Date();
128
+ this.updateTime = /* @__PURE__ */ new Date();
129
+ }
130
+ };
131
+ __decorateClass([
132
+ (0, import_core.PrimaryKey)({ type: "string" })
133
+ ], StorageSession.prototype, "id", 2);
134
+ __decorateClass([
135
+ (0, import_core.PrimaryKey)({ type: "string", fieldName: "app_name" })
136
+ ], StorageSession.prototype, "appName", 2);
137
+ __decorateClass([
138
+ (0, import_core.PrimaryKey)({ type: "string", fieldName: "user_id" })
139
+ ], StorageSession.prototype, "userId", 2);
140
+ __decorateClass([
141
+ (0, import_core.Property)({ type: "json" })
142
+ ], StorageSession.prototype, "state", 2);
143
+ __decorateClass([
144
+ (0, import_core.Property)({
145
+ type: "datetime",
146
+ fieldName: "create_time",
147
+ onCreate: () => /* @__PURE__ */ new Date()
148
+ })
149
+ ], StorageSession.prototype, "createTime", 2);
150
+ __decorateClass([
151
+ (0, import_core.Property)({
152
+ type: "datetime",
153
+ fieldName: "update_time",
154
+ onCreate: () => /* @__PURE__ */ new Date()
155
+ })
156
+ ], StorageSession.prototype, "updateTime", 2);
157
+ StorageSession = __decorateClass([
158
+ (0, import_core.Entity)({ tableName: "sessions" })
159
+ ], StorageSession);
160
+ import_core.PrimaryKey.name;
161
+ let StorageEvent = class {
162
+ };
163
+ __decorateClass([
164
+ (0, import_core.PrimaryKey)({ type: "string" })
165
+ ], StorageEvent.prototype, "id", 2);
166
+ __decorateClass([
167
+ (0, import_core.PrimaryKey)({ type: "string", fieldName: "app_name" })
168
+ ], StorageEvent.prototype, "appName", 2);
169
+ __decorateClass([
170
+ (0, import_core.PrimaryKey)({ type: "string", fieldName: "user_id" })
171
+ ], StorageEvent.prototype, "userId", 2);
172
+ __decorateClass([
173
+ (0, import_core.PrimaryKey)({ type: "string", fieldName: "session_id" })
174
+ ], StorageEvent.prototype, "sessionId", 2);
175
+ __decorateClass([
176
+ (0, import_core.Property)({ type: "string", fieldName: "invocation_id" })
177
+ ], StorageEvent.prototype, "invocationId", 2);
178
+ __decorateClass([
179
+ (0, import_core.Property)({ type: "datetime" })
180
+ ], StorageEvent.prototype, "timestamp", 2);
181
+ __decorateClass([
182
+ (0, import_core.Property)({ type: CamelCaseToSnakeCaseJsonType, fieldName: "event_data" })
183
+ ], StorageEvent.prototype, "eventData", 2);
184
+ StorageEvent = __decorateClass([
185
+ (0, import_core.Entity)({ tableName: "events" })
186
+ ], StorageEvent);
187
+ const ENTITIES = [
188
+ StorageMetadata,
189
+ StorageAppState,
190
+ StorageUserState,
191
+ StorageSession,
192
+ StorageEvent
193
+ ];
194
+ // Annotate the CommonJS export names for ESM import in node:
195
+ 0 && (module.exports = {
196
+ ENTITIES,
197
+ SCHEMA_VERSION_1_JSON,
198
+ SCHEMA_VERSION_KEY,
199
+ StorageAppState,
200
+ StorageEvent,
201
+ StorageMetadata,
202
+ StorageSession,
203
+ StorageUserState
204
+ });