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