@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
@@ -0,0 +1,371 @@
1
+ var __defProp = Object.defineProperty;
2
+ var __defProps = Object.defineProperties;
3
+ var __getOwnPropDescs = Object.getOwnPropertyDescriptors;
4
+ var __getOwnPropSymbols = Object.getOwnPropertySymbols;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __propIsEnum = Object.prototype.propertyIsEnumerable;
7
+ var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
8
+ var __spreadValues = (a, b) => {
9
+ for (var prop in b || (b = {}))
10
+ if (__hasOwnProp.call(b, prop))
11
+ __defNormalProp(a, prop, b[prop]);
12
+ if (__getOwnPropSymbols)
13
+ for (var prop of __getOwnPropSymbols(b)) {
14
+ if (__propIsEnum.call(b, prop))
15
+ __defNormalProp(a, prop, b[prop]);
16
+ }
17
+ return a;
18
+ };
19
+ var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
20
+ /**
21
+ * @license
22
+ * Copyright 2026 Google LLC
23
+ * SPDX-License-Identifier: Apache-2.0
24
+ */
25
+ import {
26
+ LockMode,
27
+ MikroORM
28
+ } from "@mikro-orm/core";
29
+ import { randomUUID } from "../utils/env_aware_utils.js";
30
+ import {
31
+ BaseSessionService,
32
+ mergeStates,
33
+ trimTempDeltaState
34
+ } from "./base_session_service.js";
35
+ import {
36
+ ensureDatabaseCreated,
37
+ getConnectionOptionsFromUri,
38
+ validateDatabaseSchemaVersion
39
+ } from "./db/operations.js";
40
+ import {
41
+ ENTITIES,
42
+ StorageAppState,
43
+ StorageEvent,
44
+ StorageSession,
45
+ StorageUserState
46
+ } from "./db/schema.js";
47
+ import { createSession } from "./session.js";
48
+ import { State } from "./state.js";
49
+ function isDatabaseConnectionString(uri) {
50
+ if (!uri) {
51
+ return false;
52
+ }
53
+ return uri.startsWith("postgres://") || uri.startsWith("postgresql://") || uri.startsWith("mysql://") || uri.startsWith("mariadb://") || uri.startsWith("mssql://") || uri.startsWith("sqlite://");
54
+ }
55
+ class DatabaseSessionService extends BaseSessionService {
56
+ constructor(connectionStringOrOptions) {
57
+ super();
58
+ this.initialized = false;
59
+ if (typeof connectionStringOrOptions === "string") {
60
+ this.connectionString = connectionStringOrOptions;
61
+ } else {
62
+ if (!connectionStringOrOptions.driver) {
63
+ throw new Error("Driver is required when passing options object.");
64
+ }
65
+ this.options = __spreadProps(__spreadValues({}, connectionStringOrOptions), {
66
+ entities: ENTITIES
67
+ });
68
+ }
69
+ }
70
+ async init() {
71
+ if (this.initialized) {
72
+ return;
73
+ }
74
+ if (this.connectionString && (!this.options || !this.options.driver)) {
75
+ this.options = await getConnectionOptionsFromUri(this.connectionString);
76
+ }
77
+ this.orm = await MikroORM.init(this.options);
78
+ await ensureDatabaseCreated(this.orm);
79
+ await validateDatabaseSchemaVersion(this.orm);
80
+ this.initialized = true;
81
+ }
82
+ async createSession({
83
+ appName,
84
+ userId,
85
+ state,
86
+ sessionId
87
+ }) {
88
+ await this.init();
89
+ const em = this.orm.em.fork();
90
+ const id = sessionId || randomUUID();
91
+ const now = /* @__PURE__ */ new Date();
92
+ const existing = await em.findOne(StorageSession, {
93
+ id,
94
+ appName,
95
+ userId
96
+ });
97
+ if (existing) {
98
+ throw new Error("Session with id ".concat(id, " already exists."));
99
+ }
100
+ let appStateModel = await em.findOne(StorageAppState, { appName });
101
+ if (!appStateModel) {
102
+ appStateModel = em.create(StorageAppState, {
103
+ appName,
104
+ state: {},
105
+ updateTime: now
106
+ });
107
+ em.persist(appStateModel);
108
+ }
109
+ let userStateModel = await em.findOne(StorageUserState, { appName, userId });
110
+ if (!userStateModel) {
111
+ userStateModel = em.create(StorageUserState, {
112
+ appName,
113
+ userId,
114
+ state: {}
115
+ });
116
+ em.persist(userStateModel);
117
+ }
118
+ const appStateDelta = {};
119
+ const userStateDelta = {};
120
+ const sessionState = {};
121
+ if (state) {
122
+ for (const [key, value] of Object.entries(state)) {
123
+ if (key.startsWith(State.APP_PREFIX)) {
124
+ appStateDelta[key.replace(State.APP_PREFIX, "")] = value;
125
+ } else if (key.startsWith(State.USER_PREFIX)) {
126
+ userStateDelta[key.replace(State.USER_PREFIX, "")] = value;
127
+ } else {
128
+ sessionState[key] = value;
129
+ }
130
+ }
131
+ }
132
+ if (Object.keys(appStateDelta).length > 0) {
133
+ appStateModel.state = __spreadValues(__spreadValues({}, appStateModel.state), appStateDelta);
134
+ }
135
+ if (Object.keys(userStateDelta).length > 0) {
136
+ userStateModel.state = __spreadValues(__spreadValues({}, userStateModel.state), userStateDelta);
137
+ }
138
+ const storageSession = em.create(StorageSession, {
139
+ id,
140
+ appName,
141
+ userId,
142
+ state: sessionState,
143
+ createTime: now,
144
+ updateTime: now
145
+ });
146
+ em.persist(storageSession);
147
+ await em.flush();
148
+ const mergedState = mergeStates(
149
+ appStateModel.state,
150
+ userStateModel.state,
151
+ sessionState
152
+ );
153
+ return createSession({
154
+ id,
155
+ appName,
156
+ userId,
157
+ state: mergedState,
158
+ events: [],
159
+ lastUpdateTime: storageSession.createTime.getTime()
160
+ });
161
+ }
162
+ async getSession({
163
+ appName,
164
+ userId,
165
+ sessionId,
166
+ config
167
+ }) {
168
+ await this.init();
169
+ const em = this.orm.em.fork();
170
+ const storageSession = await em.findOne(StorageSession, {
171
+ appName,
172
+ userId,
173
+ id: sessionId
174
+ });
175
+ if (!storageSession) {
176
+ return void 0;
177
+ }
178
+ const eventWhere = {
179
+ appName,
180
+ userId,
181
+ sessionId
182
+ };
183
+ if (config == null ? void 0 : config.afterTimestamp) {
184
+ eventWhere.timestamp = { $gt: new Date(config.afterTimestamp) };
185
+ }
186
+ const storageEvents = await em.find(StorageEvent, eventWhere, {
187
+ orderBy: { timestamp: "DESC" },
188
+ limit: config == null ? void 0 : config.numRecentEvents
189
+ });
190
+ storageEvents.reverse();
191
+ const appStateModel = await em.findOne(StorageAppState, { appName });
192
+ const userStateModel = await em.findOne(StorageUserState, {
193
+ appName,
194
+ userId
195
+ });
196
+ const mergedState = mergeStates(
197
+ (appStateModel == null ? void 0 : appStateModel.state) || {},
198
+ (userStateModel == null ? void 0 : userStateModel.state) || {},
199
+ storageSession.state
200
+ );
201
+ return createSession({
202
+ id: sessionId,
203
+ appName,
204
+ userId,
205
+ state: mergedState,
206
+ events: storageEvents.map((se) => se.eventData),
207
+ lastUpdateTime: storageSession.updateTime.getTime()
208
+ });
209
+ }
210
+ async listSessions({
211
+ appName,
212
+ userId
213
+ }) {
214
+ await this.init();
215
+ const em = this.orm.em.fork();
216
+ const where = { appName };
217
+ if (userId) {
218
+ where.userId = userId;
219
+ }
220
+ const storageSessions = await em.find(StorageSession, where);
221
+ const appStateModel = await em.findOne(StorageAppState, { appName });
222
+ const appState = (appStateModel == null ? void 0 : appStateModel.state) || {};
223
+ const userStateMap = {};
224
+ if (userId) {
225
+ const u = await em.findOne(StorageUserState, { appName, userId });
226
+ if (u) userStateMap[userId] = u.state;
227
+ } else {
228
+ const allUserStates = await em.find(StorageUserState, { appName });
229
+ for (const u of allUserStates) {
230
+ userStateMap[u.userId] = u.state;
231
+ }
232
+ }
233
+ const sessions = storageSessions.map((ss) => {
234
+ const uState = userStateMap[ss.userId] || {};
235
+ const merged = mergeStates(appState, uState, ss.state);
236
+ return createSession({
237
+ id: ss.id,
238
+ appName: ss.appName,
239
+ userId: ss.userId,
240
+ state: merged,
241
+ events: [],
242
+ lastUpdateTime: ss.updateTime.getTime()
243
+ });
244
+ });
245
+ return { sessions };
246
+ }
247
+ async deleteSession({
248
+ appName,
249
+ userId,
250
+ sessionId
251
+ }) {
252
+ await this.init();
253
+ const em = this.orm.em.fork();
254
+ await em.nativeDelete(StorageSession, { appName, userId, id: sessionId });
255
+ await em.nativeDelete(StorageEvent, { appName, userId, sessionId });
256
+ }
257
+ async appendEvent({
258
+ session,
259
+ event
260
+ }) {
261
+ await this.init();
262
+ const em = this.orm.em.fork();
263
+ if (event.partial) {
264
+ return event;
265
+ }
266
+ const trimmedEvent = trimTempDeltaState(event);
267
+ await em.transactional(async (txEm) => {
268
+ const storageSession = await txEm.findOne(
269
+ StorageSession,
270
+ {
271
+ appName: session.appName,
272
+ userId: session.userId,
273
+ id: session.id
274
+ },
275
+ { lockMode: LockMode.PESSIMISTIC_WRITE }
276
+ );
277
+ if (!storageSession) {
278
+ throw new Error("Session ".concat(session.id, " not found for appendEvent"));
279
+ }
280
+ let appStateModel = await txEm.findOne(StorageAppState, {
281
+ appName: session.appName
282
+ });
283
+ if (!appStateModel) {
284
+ appStateModel = txEm.create(StorageAppState, {
285
+ appName: session.appName,
286
+ state: {},
287
+ updateTime: /* @__PURE__ */ new Date()
288
+ });
289
+ txEm.persist(appStateModel);
290
+ }
291
+ let userStateModel = await txEm.findOne(StorageUserState, {
292
+ appName: session.appName,
293
+ userId: session.userId
294
+ });
295
+ if (!userStateModel) {
296
+ userStateModel = txEm.create(StorageUserState, {
297
+ appName: session.appName,
298
+ userId: session.userId,
299
+ state: {}
300
+ });
301
+ txEm.persist(userStateModel);
302
+ }
303
+ if (storageSession.updateTime.getTime() > session.lastUpdateTime) {
304
+ const events = await txEm.find(
305
+ StorageEvent,
306
+ {
307
+ appName: session.appName,
308
+ userId: session.userId,
309
+ sessionId: session.id
310
+ },
311
+ { orderBy: { timestamp: "ASC" } }
312
+ );
313
+ const mergedState = mergeStates(
314
+ appStateModel.state,
315
+ userStateModel.state,
316
+ storageSession.state
317
+ );
318
+ session.state = mergedState;
319
+ session.events = events.map((e) => e.eventData);
320
+ }
321
+ if (event.actions && event.actions.stateDelta) {
322
+ const appDelta = {};
323
+ const userDelta = {};
324
+ const sessionDelta = {};
325
+ for (const [key, value] of Object.entries(event.actions.stateDelta)) {
326
+ if (key.startsWith(State.APP_PREFIX)) {
327
+ appDelta[key.replace(State.APP_PREFIX, "")] = value;
328
+ } else if (key.startsWith(State.USER_PREFIX)) {
329
+ userDelta[key.replace(State.USER_PREFIX, "")] = value;
330
+ } else {
331
+ sessionDelta[key] = value;
332
+ }
333
+ }
334
+ if (Object.keys(appDelta).length > 0) {
335
+ appStateModel.state = __spreadValues(__spreadValues({}, appStateModel.state), appDelta);
336
+ }
337
+ if (Object.keys(userDelta).length > 0) {
338
+ userStateModel.state = __spreadValues(__spreadValues({}, userStateModel.state), userDelta);
339
+ }
340
+ if (Object.keys(sessionDelta).length > 0) {
341
+ storageSession.state = __spreadValues(__spreadValues({}, storageSession.state), sessionDelta);
342
+ }
343
+ }
344
+ const newStorageEvent = txEm.create(StorageEvent, {
345
+ id: trimmedEvent.id,
346
+ appName: session.appName,
347
+ userId: session.userId,
348
+ sessionId: session.id,
349
+ invocationId: trimmedEvent.invocationId,
350
+ timestamp: new Date(trimmedEvent.timestamp),
351
+ eventData: trimmedEvent
352
+ });
353
+ txEm.persist(newStorageEvent);
354
+ await txEm.commit();
355
+ storageSession.updateTime = new Date(event.timestamp);
356
+ const newMergedState = mergeStates(
357
+ appStateModel.state,
358
+ userStateModel.state,
359
+ storageSession.state
360
+ );
361
+ session.state = newMergedState;
362
+ session.events.push(event);
363
+ session.lastUpdateTime = storageSession.updateTime.getTime();
364
+ });
365
+ return event;
366
+ }
367
+ }
368
+ export {
369
+ DatabaseSessionService,
370
+ isDatabaseConnectionString
371
+ };
@@ -0,0 +1,111 @@
1
+ var __create = Object.create;
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __getProtoOf = Object.getPrototypeOf;
6
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
7
+ var __copyProps = (to, from, except, desc) => {
8
+ if (from && typeof from === "object" || typeof from === "function") {
9
+ for (let key of __getOwnPropNames(from))
10
+ if (!__hasOwnProp.call(to, key) && key !== except)
11
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
12
+ }
13
+ return to;
14
+ };
15
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
16
+ // If the importer is in node compatibility mode or this is not an ESM
17
+ // file that has been converted to a CommonJS file using a Babel-
18
+ // compatible transform (i.e. "__esModule" has not been set), then set
19
+ // "default" to the CommonJS "module.exports" for node compatibility.
20
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
21
+ mod
22
+ ));
23
+ /**
24
+ * @license
25
+ * Copyright 2026 Google LLC
26
+ * SPDX-License-Identifier: Apache-2.0
27
+ */
28
+ import { MikroORM } from "@mikro-orm/core";
29
+ import {
30
+ ENTITIES,
31
+ SCHEMA_VERSION_1_JSON,
32
+ SCHEMA_VERSION_KEY,
33
+ StorageMetadata
34
+ } from "./schema.js";
35
+ async function getConnectionOptionsFromUri(uri) {
36
+ let driver;
37
+ if (uri.startsWith("postgres://") || uri.startsWith("postgresql://")) {
38
+ const { PostgreSqlDriver } = await Promise.resolve().then(() => __toESM(require("@mikro-orm/postgresql"), 1));
39
+ driver = PostgreSqlDriver;
40
+ } else if (uri.startsWith("mysql://")) {
41
+ const { MySqlDriver } = await Promise.resolve().then(() => __toESM(require("@mikro-orm/mysql"), 1));
42
+ driver = MySqlDriver;
43
+ } else if (uri.startsWith("mariadb://")) {
44
+ const { MariaDbDriver } = await Promise.resolve().then(() => __toESM(require("@mikro-orm/mariadb"), 1));
45
+ driver = MariaDbDriver;
46
+ } else if (uri.startsWith("sqlite://")) {
47
+ const { SqliteDriver } = await Promise.resolve().then(() => __toESM(require("@mikro-orm/sqlite"), 1));
48
+ driver = SqliteDriver;
49
+ } else if (uri.startsWith("mssql://")) {
50
+ const { MsSqlDriver } = await Promise.resolve().then(() => __toESM(require("@mikro-orm/mssql"), 1));
51
+ driver = MsSqlDriver;
52
+ } else {
53
+ throw new Error("Unsupported database URI: ".concat(uri));
54
+ }
55
+ if (uri === "sqlite://:memory:") {
56
+ return {
57
+ entities: ENTITIES,
58
+ dbName: ":memory:",
59
+ driver
60
+ };
61
+ }
62
+ const { host, port, username, password, pathname } = new URL(uri);
63
+ const hostName = host.split(":")[0];
64
+ return {
65
+ entities: ENTITIES,
66
+ dbName: pathname.slice(1),
67
+ host: hostName,
68
+ port: port ? parseInt(port) : void 0,
69
+ user: username,
70
+ password,
71
+ driver
72
+ };
73
+ }
74
+ async function ensureDatabaseCreated(ormOrUrlOrOptions) {
75
+ let orm;
76
+ if (ormOrUrlOrOptions instanceof MikroORM) {
77
+ orm = ormOrUrlOrOptions;
78
+ } else if (typeof ormOrUrlOrOptions === "string") {
79
+ orm = await MikroORM.init(
80
+ await getConnectionOptionsFromUri(ormOrUrlOrOptions)
81
+ );
82
+ } else {
83
+ orm = await MikroORM.init(ormOrUrlOrOptions);
84
+ }
85
+ await orm.schema.ensureDatabase();
86
+ await orm.schema.updateSchema();
87
+ }
88
+ async function validateDatabaseSchemaVersion(orm) {
89
+ const em = orm.em.fork();
90
+ const existing = await em.findOne(StorageMetadata, {
91
+ key: SCHEMA_VERSION_KEY
92
+ });
93
+ if (existing) {
94
+ if (existing.value !== SCHEMA_VERSION_1_JSON) {
95
+ throw new Error(
96
+ "ADK Database schema version ".concat(existing.value, " is not compatible.")
97
+ );
98
+ }
99
+ return;
100
+ }
101
+ const newVersion = em.create(StorageMetadata, {
102
+ key: SCHEMA_VERSION_KEY,
103
+ value: SCHEMA_VERSION_1_JSON
104
+ });
105
+ await em.persist(newVersion).flush();
106
+ }
107
+ export {
108
+ ensureDatabaseCreated,
109
+ getConnectionOptionsFromUri,
110
+ validateDatabaseSchemaVersion
111
+ };
@@ -0,0 +1,172 @@
1
+ var __defProp = Object.defineProperty;
2
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
3
+ var __decorateClass = (decorators, target, key, kind) => {
4
+ var result = kind > 1 ? void 0 : kind ? __getOwnPropDesc(target, key) : target;
5
+ for (var i = decorators.length - 1, decorator; i >= 0; i--)
6
+ if (decorator = decorators[i])
7
+ result = (kind ? decorator(target, key, result) : decorator(result)) || result;
8
+ if (kind && result) __defProp(target, key, result);
9
+ return result;
10
+ };
11
+ /**
12
+ * @license
13
+ * Copyright 2026 Google LLC
14
+ * SPDX-License-Identifier: Apache-2.0
15
+ */
16
+ import { Entity, JsonType, PrimaryKey, Property } from "@mikro-orm/core";
17
+ import {
18
+ transformToCamelCaseEvent,
19
+ transformToSnakeCaseEvent
20
+ } from "../../events/event.js";
21
+ const SCHEMA_VERSION_KEY = "schema_version";
22
+ const SCHEMA_VERSION_1_JSON = "1";
23
+ class CamelCaseToSnakeCaseJsonType extends JsonType {
24
+ convertToDatabaseValue(value) {
25
+ return JSON.stringify(transformToSnakeCaseEvent(value));
26
+ }
27
+ convertToJSValue(value) {
28
+ if (typeof value === "string") {
29
+ return transformToCamelCaseEvent(JSON.parse(value));
30
+ }
31
+ return transformToCamelCaseEvent(value);
32
+ }
33
+ }
34
+ let StorageMetadata = class {
35
+ };
36
+ __decorateClass([
37
+ PrimaryKey({ type: "string" })
38
+ ], StorageMetadata.prototype, "key", 2);
39
+ __decorateClass([
40
+ Property({ type: "string" })
41
+ ], StorageMetadata.prototype, "value", 2);
42
+ StorageMetadata = __decorateClass([
43
+ Entity({ tableName: "adk_internal_metadata" })
44
+ ], StorageMetadata);
45
+ let StorageAppState = class {
46
+ constructor() {
47
+ this.updateTime = /* @__PURE__ */ new Date();
48
+ }
49
+ };
50
+ __decorateClass([
51
+ PrimaryKey({ type: "string", fieldName: "app_name" })
52
+ ], StorageAppState.prototype, "appName", 2);
53
+ __decorateClass([
54
+ Property({ type: "json" })
55
+ ], StorageAppState.prototype, "state", 2);
56
+ __decorateClass([
57
+ Property({
58
+ type: "datetime",
59
+ fieldName: "update_time",
60
+ onCreate: () => /* @__PURE__ */ new Date(),
61
+ onUpdate: () => /* @__PURE__ */ new Date()
62
+ })
63
+ ], StorageAppState.prototype, "updateTime", 2);
64
+ StorageAppState = __decorateClass([
65
+ Entity({ tableName: "app_states" })
66
+ ], StorageAppState);
67
+ PrimaryKey.name;
68
+ let StorageUserState = class {
69
+ constructor() {
70
+ this.updateTime = /* @__PURE__ */ new Date();
71
+ }
72
+ };
73
+ __decorateClass([
74
+ PrimaryKey({ type: "string", fieldName: "app_name" })
75
+ ], StorageUserState.prototype, "appName", 2);
76
+ __decorateClass([
77
+ PrimaryKey({ type: "string", fieldName: "user_id" })
78
+ ], StorageUserState.prototype, "userId", 2);
79
+ __decorateClass([
80
+ Property({ type: "json" })
81
+ ], StorageUserState.prototype, "state", 2);
82
+ __decorateClass([
83
+ Property({
84
+ type: "datetime",
85
+ fieldName: "update_time",
86
+ onCreate: () => /* @__PURE__ */ new Date(),
87
+ onUpdate: () => /* @__PURE__ */ new Date()
88
+ })
89
+ ], StorageUserState.prototype, "updateTime", 2);
90
+ StorageUserState = __decorateClass([
91
+ Entity({ tableName: "user_states" })
92
+ ], StorageUserState);
93
+ PrimaryKey.name;
94
+ let StorageSession = class {
95
+ constructor() {
96
+ this.createTime = /* @__PURE__ */ new Date();
97
+ this.updateTime = /* @__PURE__ */ new Date();
98
+ }
99
+ };
100
+ __decorateClass([
101
+ PrimaryKey({ type: "string" })
102
+ ], StorageSession.prototype, "id", 2);
103
+ __decorateClass([
104
+ PrimaryKey({ type: "string", fieldName: "app_name" })
105
+ ], StorageSession.prototype, "appName", 2);
106
+ __decorateClass([
107
+ PrimaryKey({ type: "string", fieldName: "user_id" })
108
+ ], StorageSession.prototype, "userId", 2);
109
+ __decorateClass([
110
+ Property({ type: "json" })
111
+ ], StorageSession.prototype, "state", 2);
112
+ __decorateClass([
113
+ Property({
114
+ type: "datetime",
115
+ fieldName: "create_time",
116
+ onCreate: () => /* @__PURE__ */ new Date()
117
+ })
118
+ ], StorageSession.prototype, "createTime", 2);
119
+ __decorateClass([
120
+ Property({
121
+ type: "datetime",
122
+ fieldName: "update_time",
123
+ onCreate: () => /* @__PURE__ */ new Date()
124
+ })
125
+ ], StorageSession.prototype, "updateTime", 2);
126
+ StorageSession = __decorateClass([
127
+ Entity({ tableName: "sessions" })
128
+ ], StorageSession);
129
+ PrimaryKey.name;
130
+ let StorageEvent = class {
131
+ };
132
+ __decorateClass([
133
+ PrimaryKey({ type: "string" })
134
+ ], StorageEvent.prototype, "id", 2);
135
+ __decorateClass([
136
+ PrimaryKey({ type: "string", fieldName: "app_name" })
137
+ ], StorageEvent.prototype, "appName", 2);
138
+ __decorateClass([
139
+ PrimaryKey({ type: "string", fieldName: "user_id" })
140
+ ], StorageEvent.prototype, "userId", 2);
141
+ __decorateClass([
142
+ PrimaryKey({ type: "string", fieldName: "session_id" })
143
+ ], StorageEvent.prototype, "sessionId", 2);
144
+ __decorateClass([
145
+ Property({ type: "string", fieldName: "invocation_id" })
146
+ ], StorageEvent.prototype, "invocationId", 2);
147
+ __decorateClass([
148
+ Property({ type: "datetime" })
149
+ ], StorageEvent.prototype, "timestamp", 2);
150
+ __decorateClass([
151
+ Property({ type: CamelCaseToSnakeCaseJsonType, fieldName: "event_data" })
152
+ ], StorageEvent.prototype, "eventData", 2);
153
+ StorageEvent = __decorateClass([
154
+ Entity({ tableName: "events" })
155
+ ], StorageEvent);
156
+ const ENTITIES = [
157
+ StorageMetadata,
158
+ StorageAppState,
159
+ StorageUserState,
160
+ StorageSession,
161
+ StorageEvent
162
+ ];
163
+ export {
164
+ ENTITIES,
165
+ SCHEMA_VERSION_1_JSON,
166
+ SCHEMA_VERSION_KEY,
167
+ StorageAppState,
168
+ StorageEvent,
169
+ StorageMetadata,
170
+ StorageSession,
171
+ StorageUserState
172
+ };