@google/adk 0.5.0 → 0.6.1

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 (142) hide show
  1. package/README.md +1 -1
  2. package/dist/cjs/a2a/a2a_event.js +53 -26
  3. package/dist/cjs/a2a/a2a_remote_agent.js +179 -0
  4. package/dist/cjs/a2a/a2a_remote_agent_run_processor.js +205 -0
  5. package/dist/cjs/a2a/a2a_remote_agent_utils.js +165 -0
  6. package/dist/cjs/a2a/agent_card.js +380 -0
  7. package/dist/cjs/a2a/agent_executor.js +221 -0
  8. package/dist/cjs/a2a/agent_to_a2a.js +115 -0
  9. package/dist/cjs/a2a/event_processor_utils.js +180 -0
  10. package/dist/cjs/a2a/executor_context.js +1 -1
  11. package/dist/cjs/a2a/metadata_converter_utils.js +1 -0
  12. package/dist/cjs/a2a/part_converter_utils.js +24 -13
  13. package/dist/cjs/agents/llm_agent.js +17 -0
  14. package/dist/cjs/agents/{content_processor_utils.js → processors/content_processor_utils.js} +21 -2
  15. package/dist/cjs/agents/processors/content_request_processor.js +24 -3
  16. package/dist/cjs/agents/processors/context_compactor_request_processor.js +61 -0
  17. package/dist/cjs/agents/processors/instructions_llm_request_processor.js +1 -1
  18. package/dist/cjs/artifacts/file_artifact_service.js +35 -4
  19. package/dist/cjs/common.js +37 -0
  20. package/dist/cjs/context/base_context_compactor.js +27 -0
  21. package/dist/cjs/context/summarizers/base_summarizer.js +27 -0
  22. package/dist/cjs/context/summarizers/llm_summarizer.js +93 -0
  23. package/dist/cjs/context/token_based_context_compactor.js +135 -0
  24. package/dist/cjs/context/truncating_context_compactor.js +58 -0
  25. package/dist/cjs/events/compacted_event.js +53 -0
  26. package/dist/cjs/index.js +38 -14
  27. package/dist/cjs/index.js.map +4 -4
  28. package/dist/cjs/memory/in_memory_memory_service.js +1 -1
  29. package/dist/cjs/runner/runner.js +19 -10
  30. package/dist/cjs/sessions/db/operations.js +4 -14
  31. package/dist/cjs/sessions/state.js +2 -2
  32. package/dist/cjs/tools/agent_tool.js +6 -5
  33. package/dist/cjs/tools/load_artifacts_tool.js +188 -0
  34. package/dist/cjs/tools/load_memory_tool.js +107 -0
  35. package/dist/cjs/tools/preload_memory_tool.js +109 -0
  36. package/dist/cjs/utils/gemini_schema_util.js +54 -12
  37. package/dist/cjs/utils/logger.js +1 -0
  38. package/dist/cjs/version.js +1 -1
  39. package/dist/esm/a2a/a2a_event.js +52 -26
  40. package/dist/esm/a2a/a2a_remote_agent.js +153 -0
  41. package/dist/esm/a2a/a2a_remote_agent_run_processor.js +182 -0
  42. package/dist/esm/a2a/a2a_remote_agent_utils.js +131 -0
  43. package/dist/esm/a2a/agent_card.js +340 -0
  44. package/dist/esm/a2a/agent_executor.js +202 -0
  45. package/dist/esm/a2a/agent_to_a2a.js +80 -0
  46. package/dist/esm/a2a/event_processor_utils.js +159 -0
  47. package/dist/esm/a2a/executor_context.js +1 -1
  48. package/dist/esm/a2a/metadata_converter_utils.js +1 -0
  49. package/dist/esm/a2a/part_converter_utils.js +24 -13
  50. package/dist/esm/agents/llm_agent.js +17 -0
  51. package/dist/esm/agents/{content_processor_utils.js → processors/content_processor_utils.js} +23 -2
  52. package/dist/esm/agents/processors/content_request_processor.js +25 -4
  53. package/dist/esm/agents/processors/context_compactor_request_processor.js +31 -0
  54. package/dist/esm/agents/processors/instructions_llm_request_processor.js +1 -1
  55. package/dist/esm/artifacts/file_artifact_service.js +30 -3
  56. package/dist/esm/common.js +33 -1
  57. package/dist/esm/context/base_context_compactor.js +5 -0
  58. package/dist/esm/context/summarizers/base_summarizer.js +5 -0
  59. package/dist/esm/context/summarizers/llm_summarizer.js +65 -0
  60. package/dist/esm/context/token_based_context_compactor.js +105 -0
  61. package/dist/esm/context/truncating_context_compactor.js +28 -0
  62. package/dist/esm/events/compacted_event.js +22 -0
  63. package/dist/esm/index.js +38 -14
  64. package/dist/esm/index.js.map +4 -4
  65. package/dist/esm/memory/in_memory_memory_service.js +1 -1
  66. package/dist/esm/runner/runner.js +17 -9
  67. package/dist/esm/sessions/db/operations.js +4 -14
  68. package/dist/esm/sessions/state.js +2 -2
  69. package/dist/esm/tools/agent_tool.js +6 -5
  70. package/dist/esm/tools/load_artifacts_tool.js +159 -0
  71. package/dist/esm/tools/load_memory_tool.js +78 -0
  72. package/dist/esm/tools/preload_memory_tool.js +80 -0
  73. package/dist/esm/utils/gemini_schema_util.js +54 -12
  74. package/dist/esm/utils/logger.js +1 -0
  75. package/dist/esm/version.js +1 -1
  76. package/dist/types/a2a/a2a_event.d.ts +23 -6
  77. package/dist/types/a2a/a2a_remote_agent.d.ts +67 -0
  78. package/dist/types/a2a/a2a_remote_agent_run_processor.d.ts +31 -0
  79. package/dist/types/a2a/a2a_remote_agent_utils.d.ts +38 -0
  80. package/dist/types/a2a/agent_card.d.ts +23 -0
  81. package/dist/types/a2a/agent_executor.d.ts +52 -0
  82. package/dist/types/a2a/agent_to_a2a.d.ts +45 -0
  83. package/dist/types/a2a/event_processor_utils.d.ts +24 -0
  84. package/dist/types/a2a/executor_context.d.ts +1 -1
  85. package/dist/types/a2a/metadata_converter_utils.d.ts +2 -1
  86. package/dist/types/agents/llm_agent.d.ts +6 -0
  87. package/dist/types/agents/loop_agent.d.ts +1 -1
  88. package/dist/types/agents/{content_processor_utils.d.ts → processors/content_processor_utils.d.ts} +1 -1
  89. package/dist/types/agents/processors/context_compactor_request_processor.d.ts +22 -0
  90. package/dist/types/artifacts/file_artifact_service.d.ts +4 -0
  91. package/dist/types/common.d.ts +16 -1
  92. package/dist/types/context/base_context_compactor.d.ts +24 -0
  93. package/dist/types/context/summarizers/base_summarizer.d.ts +19 -0
  94. package/dist/types/context/summarizers/llm_summarizer.d.ts +23 -0
  95. package/dist/types/context/token_based_context_compactor.d.ts +33 -0
  96. package/dist/types/context/truncating_context_compactor.d.ts +24 -0
  97. package/dist/types/events/compacted_event.d.ts +33 -0
  98. package/dist/types/index.d.ts +8 -0
  99. package/dist/types/runner/runner.d.ts +13 -0
  100. package/dist/types/sessions/db/operations.d.ts +2 -3
  101. package/dist/types/tools/load_artifacts_tool.d.ts +21 -0
  102. package/dist/types/tools/load_memory_tool.d.ts +22 -0
  103. package/dist/types/tools/preload_memory_tool.d.ts +23 -0
  104. package/dist/types/version.d.ts +1 -1
  105. package/dist/web/a2a/a2a_event.js +52 -26
  106. package/dist/web/a2a/a2a_remote_agent.js +184 -0
  107. package/dist/web/a2a/a2a_remote_agent_run_processor.js +182 -0
  108. package/dist/web/a2a/a2a_remote_agent_utils.js +131 -0
  109. package/dist/web/a2a/agent_card.js +340 -0
  110. package/dist/web/a2a/agent_executor.js +216 -0
  111. package/dist/web/a2a/agent_to_a2a.js +80 -0
  112. package/dist/web/a2a/event_processor_utils.js +168 -0
  113. package/dist/web/a2a/executor_context.js +1 -1
  114. package/dist/web/a2a/metadata_converter_utils.js +1 -0
  115. package/dist/web/a2a/part_converter_utils.js +24 -13
  116. package/dist/web/agents/llm_agent.js +17 -0
  117. package/dist/web/agents/{content_processor_utils.js → processors/content_processor_utils.js} +22 -2
  118. package/dist/web/agents/processors/content_request_processor.js +25 -4
  119. package/dist/web/agents/processors/context_compactor_request_processor.js +49 -0
  120. package/dist/web/agents/processors/instructions_llm_request_processor.js +1 -1
  121. package/dist/web/artifacts/file_artifact_service.js +30 -3
  122. package/dist/web/common.js +33 -1
  123. package/dist/web/context/base_context_compactor.js +5 -0
  124. package/dist/web/context/summarizers/base_summarizer.js +5 -0
  125. package/dist/web/context/summarizers/llm_summarizer.js +74 -0
  126. package/dist/web/context/token_based_context_compactor.js +105 -0
  127. package/dist/web/context/truncating_context_compactor.js +28 -0
  128. package/dist/web/events/compacted_event.js +40 -0
  129. package/dist/web/index.js +1 -1
  130. package/dist/web/index.js.map +4 -4
  131. package/dist/web/memory/in_memory_memory_service.js +1 -1
  132. package/dist/web/runner/runner.js +17 -9
  133. package/dist/web/sessions/db/operations.js +4 -14
  134. package/dist/web/sessions/state.js +2 -2
  135. package/dist/web/tools/agent_tool.js +6 -5
  136. package/dist/web/tools/load_artifacts_tool.js +150 -0
  137. package/dist/web/tools/load_memory_tool.js +77 -0
  138. package/dist/web/tools/preload_memory_tool.js +75 -0
  139. package/dist/web/utils/gemini_schema_util.js +85 -12
  140. package/dist/web/utils/logger.js +1 -0
  141. package/dist/web/version.js +1 -1
  142. package/package.json +7 -5
@@ -28,8 +28,9 @@ __export(content_request_processor_exports, {
28
28
  ContentRequestProcessor: () => ContentRequestProcessor
29
29
  });
30
30
  module.exports = __toCommonJS(content_request_processor_exports);
31
- var import_content_processor_utils = require("../content_processor_utils.js");
31
+ var import_compacted_event = require("../../events/compacted_event.js");
32
32
  var import_llm_agent = require("../llm_agent.js");
33
+ var import_content_processor_utils = require("./content_processor_utils.js");
33
34
  /**
34
35
  * @license
35
36
  * Copyright 2025 Google LLC
@@ -42,15 +43,35 @@ class ContentRequestProcessor {
42
43
  if (!agent || !(0, import_llm_agent.isLlmAgent)(agent)) {
43
44
  return;
44
45
  }
46
+ let events = invocationContext.session.events;
47
+ const compactedEvents = events.filter(import_compacted_event.isCompactedEvent);
48
+ const latestCompactedEvent = compactedEvents.length > 0 ? compactedEvents.reduce(
49
+ (latest, current) => current.endTime > latest.endTime ? current : latest
50
+ ) : void 0;
51
+ if (latestCompactedEvent) {
52
+ const remainingEvents = events.filter((event) => {
53
+ if (event === latestCompactedEvent) {
54
+ return false;
55
+ }
56
+ if ((0, import_compacted_event.isCompactedEvent)(event)) {
57
+ return false;
58
+ }
59
+ if (event.timestamp <= latestCompactedEvent.endTime) {
60
+ return false;
61
+ }
62
+ return true;
63
+ });
64
+ events = [latestCompactedEvent, ...remainingEvents];
65
+ }
45
66
  if (agent.includeContents === "default") {
46
67
  llmRequest.contents = (0, import_content_processor_utils.getContents)(
47
- invocationContext.session.events,
68
+ events,
48
69
  agent.name,
49
70
  invocationContext.branch
50
71
  );
51
72
  } else {
52
73
  llmRequest.contents = (0, import_content_processor_utils.getCurrentTurnContents)(
53
- invocationContext.session.events,
74
+ events,
54
75
  agent.name,
55
76
  invocationContext.branch
56
77
  );
@@ -0,0 +1,61 @@
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 context_compactor_request_processor_exports = {};
26
+ __export(context_compactor_request_processor_exports, {
27
+ ContextCompactorRequestProcessor: () => ContextCompactorRequestProcessor
28
+ });
29
+ module.exports = __toCommonJS(context_compactor_request_processor_exports);
30
+ /**
31
+ * @license
32
+ * Copyright 2026 Google LLC
33
+ * SPDX-License-Identifier: Apache-2.0
34
+ */
35
+ class ContextCompactorRequestProcessor {
36
+ constructor(compactors) {
37
+ this.compactors = compactors;
38
+ }
39
+ async *runAsync(invocationContext, _llmRequest) {
40
+ for (const compactor of this.compactors) {
41
+ const shouldCompact = await Promise.resolve(
42
+ compactor.shouldCompact(invocationContext)
43
+ );
44
+ if (shouldCompact) {
45
+ const oldEvents = new Set(invocationContext.session.events);
46
+ await Promise.resolve(compactor.compact(invocationContext));
47
+ const newEvents = invocationContext.session.events.filter(
48
+ (e) => !oldEvents.has(e)
49
+ );
50
+ for (const e of newEvents) {
51
+ yield e;
52
+ }
53
+ return;
54
+ }
55
+ }
56
+ }
57
+ }
58
+ // Annotate the CommonJS export names for ESM import in node:
59
+ 0 && (module.exports = {
60
+ ContextCompactorRequestProcessor
61
+ });
@@ -45,7 +45,7 @@ class InstructionsLlmRequestProcessor extends import_base_llm_processor.BaseLlmR
45
45
  // eslint-disable-next-line require-yield
46
46
  async *runAsync(invocationContext, llmRequest) {
47
47
  const agent = invocationContext.agent;
48
- if (!(0, import_llm_agent.isLlmAgent)(agent) || !(0, import_llm_agent.isLlmAgent)(agent.rootAgent)) {
48
+ if (!(0, import_llm_agent.isLlmAgent)(agent)) {
49
49
  return;
50
50
  }
51
51
  const rootAgent = agent.rootAgent;
@@ -34,7 +34,11 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
34
34
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
35
35
  var file_artifact_service_exports = {};
36
36
  __export(file_artifact_service_exports, {
37
- FileArtifactService: () => FileArtifactService
37
+ FileArtifactService: () => FileArtifactService,
38
+ assertInsideRoot: () => assertInsideRoot,
39
+ assertSafeSegment: () => assertSafeSegment,
40
+ getSessionArtifactsDir: () => getSessionArtifactsDir,
41
+ getUserRoot: () => getUserRoot
38
42
  });
39
43
  module.exports = __toCommonJS(file_artifact_service_exports);
40
44
  var fs = __toESM(require("fs/promises"), 1);
@@ -346,8 +350,28 @@ class FileArtifactService {
346
350
  }
347
351
  }
348
352
  }
353
+ const SAFE_SEGMENT_RE = /^[a-zA-Z0-9_@-][a-zA-Z0-9_.@-]{0,255}$/;
354
+ function assertSafeSegment(value, label) {
355
+ if (!value || !SAFE_SEGMENT_RE.test(value)) {
356
+ throw new Error(
357
+ `[FileArtifactService] Invalid ${label}: value contains disallowed characters.`
358
+ );
359
+ }
360
+ }
361
+ function assertInsideRoot(resolvedPath, rootDir, label) {
362
+ const root = path.resolve(rootDir);
363
+ const resolved = path.resolve(resolvedPath);
364
+ if (!resolved.startsWith(root + path.sep) && resolved !== root) {
365
+ throw new Error(
366
+ `[FileArtifactService] ${label} escapes storage root. Resolved: ${resolved}, Root: ${root}`
367
+ );
368
+ }
369
+ }
349
370
  function getUserRoot(rootDir, userId) {
350
- return path.join(rootDir, "users", userId);
371
+ assertSafeSegment(userId, "userId");
372
+ const result = path.join(rootDir, "users", userId);
373
+ assertInsideRoot(result, rootDir, "userRoot");
374
+ return result;
351
375
  }
352
376
  function isUserScoped(sessionId, filename) {
353
377
  return !sessionId || filename.startsWith(USER_NAMESPACE_PREFIX);
@@ -356,7 +380,10 @@ function getUserArtifactsDir(userRoot) {
356
380
  return path.join(userRoot, "artifacts");
357
381
  }
358
382
  function getSessionArtifactsDir(baseRoot, sessionId) {
359
- return path.join(baseRoot, "sessions", sessionId, "artifacts");
383
+ assertSafeSegment(sessionId, "sessionId");
384
+ const result = path.join(baseRoot, "sessions", sessionId, "artifacts");
385
+ assertInsideRoot(result, baseRoot, "sessionArtifactsDir");
386
+ return result;
360
387
  }
361
388
  function getVersionsDir(artifactDir) {
362
389
  return path.join(artifactDir, "versions");
@@ -487,5 +514,9 @@ function asPosixPath(p) {
487
514
  }
488
515
  // Annotate the CommonJS export names for ESM import in node:
489
516
  0 && (module.exports = {
490
- FileArtifactService
517
+ FileArtifactService,
518
+ assertInsideRoot,
519
+ assertSafeSegment,
520
+ getSessionArtifactsDir,
521
+ getUserRoot
491
522
  });
@@ -40,7 +40,10 @@ __export(common_exports, {
40
40
  BaseTool: () => import_base_tool.BaseTool,
41
41
  BaseToolset: () => import_base_toolset.BaseToolset,
42
42
  BuiltInCodeExecutor: () => import_built_in_code_executor.BuiltInCodeExecutor,
43
+ CONTENT_REQUEST_PROCESSOR: () => import_content_request_processor.CONTENT_REQUEST_PROCESSOR,
44
+ ContentRequestProcessor: () => import_content_request_processor.ContentRequestProcessor,
43
45
  Context: () => import_context.Context,
46
+ ContextCompactorRequestProcessor: () => import_context_compactor_request_processor.ContextCompactorRequestProcessor,
44
47
  EXIT_LOOP: () => import_exit_loop_tool.EXIT_LOOP,
45
48
  EventType: () => import_structured_events.EventType,
46
49
  ExitLoopTool: () => import_exit_loop_tool.ExitLoopTool,
@@ -56,15 +59,22 @@ __export(common_exports, {
56
59
  InMemorySessionService: () => import_in_memory_session_service.InMemorySessionService,
57
60
  InvocationContext: () => import_invocation_context.InvocationContext,
58
61
  LLMRegistry: () => import_registry.LLMRegistry,
62
+ LOAD_ARTIFACTS: () => import_load_artifacts_tool.LOAD_ARTIFACTS,
63
+ LOAD_MEMORY: () => import_load_memory_tool.LOAD_MEMORY,
59
64
  LiveRequestQueue: () => import_live_request_queue.LiveRequestQueue,
60
65
  LlmAgent: () => import_llm_agent.LlmAgent,
66
+ LlmSummarizer: () => import_llm_summarizer.LlmSummarizer,
67
+ LoadArtifactsTool: () => import_load_artifacts_tool.LoadArtifactsTool,
68
+ LoadMemoryTool: () => import_load_memory_tool.LoadMemoryTool,
61
69
  LogLevel: () => import_logger.LogLevel,
62
70
  LoggingPlugin: () => import_logging_plugin.LoggingPlugin,
63
71
  LongRunningFunctionTool: () => import_long_running_tool.LongRunningFunctionTool,
64
72
  LoopAgent: () => import_loop_agent.LoopAgent,
73
+ PRELOAD_MEMORY: () => import_preload_memory_tool.PRELOAD_MEMORY,
65
74
  ParallelAgent: () => import_parallel_agent.ParallelAgent,
66
75
  PluginManager: () => import_plugin_manager.PluginManager,
67
76
  PolicyOutcome: () => import_security_plugin.PolicyOutcome,
77
+ PreloadMemoryTool: () => import_preload_memory_tool.PreloadMemoryTool,
68
78
  REQUEST_CONFIRMATION_FUNCTION_CALL_NAME: () => import_security_plugin.REQUEST_CONFIRMATION_FUNCTION_CALL_NAME,
69
79
  ReadonlyContext: () => import_readonly_context.ReadonlyContext,
70
80
  Runner: () => import_runner.Runner,
@@ -72,7 +82,9 @@ __export(common_exports, {
72
82
  SequentialAgent: () => import_sequential_agent.SequentialAgent,
73
83
  State: () => import_state.State,
74
84
  StreamingMode: () => import_run_config.StreamingMode,
85
+ TokenBasedContextCompactor: () => import_token_based_context_compactor.TokenBasedContextCompactor,
75
86
  ToolConfirmation: () => import_tool_confirmation.ToolConfirmation,
87
+ TruncatingContextCompactor: () => import_truncating_context_compactor.TruncatingContextCompactor,
76
88
  createEvent: () => import_event.createEvent,
77
89
  createEventActions: () => import_event_actions.createEventActions,
78
90
  createSession: () => import_session.createSession,
@@ -89,12 +101,14 @@ __export(common_exports, {
89
101
  isBaseLlm: () => import_base_llm.isBaseLlm,
90
102
  isBaseTool: () => import_base_tool.isBaseTool,
91
103
  isBaseToolset: () => import_base_toolset.isBaseToolset,
104
+ isCompactedEvent: () => import_compacted_event.isCompactedEvent,
92
105
  isFinalResponse: () => import_event.isFinalResponse,
93
106
  isFunctionTool: () => import_function_tool.isFunctionTool,
94
107
  isGemini2OrAbove: () => import_model_name.isGemini2OrAbove,
95
108
  isLlmAgent: () => import_llm_agent.isLlmAgent,
96
109
  isLoopAgent: () => import_loop_agent.isLoopAgent,
97
110
  isParallelAgent: () => import_parallel_agent.isParallelAgent,
111
+ isRunner: () => import_runner.isRunner,
98
112
  isSequentialAgent: () => import_sequential_agent.isSequentialAgent,
99
113
  setLogLevel: () => import_logger.setLogLevel,
100
114
  setLogger: () => import_logger.setLogger,
@@ -114,6 +128,8 @@ var import_llm_agent = require("./agents/llm_agent.js");
114
128
  var import_loop_agent = require("./agents/loop_agent.js");
115
129
  var import_parallel_agent = require("./agents/parallel_agent.js");
116
130
  var import_base_llm_processor = require("./agents/processors/base_llm_processor.js");
131
+ var import_content_request_processor = require("./agents/processors/content_request_processor.js");
132
+ var import_context_compactor_request_processor = require("./agents/processors/context_compactor_request_processor.js");
117
133
  var import_readonly_context = require("./agents/readonly_context.js");
118
134
  var import_run_config = require("./agents/run_config.js");
119
135
  var import_sequential_agent = require("./agents/sequential_agent.js");
@@ -121,6 +137,10 @@ var import_in_memory_artifact_service = require("./artifacts/in_memory_artifact_
121
137
  var import_auth_credential = require("./auth/auth_credential.js");
122
138
  var import_base_code_executor = require("./code_executors/base_code_executor.js");
123
139
  var import_built_in_code_executor = require("./code_executors/built_in_code_executor.js");
140
+ var import_llm_summarizer = require("./context/summarizers/llm_summarizer.js");
141
+ var import_token_based_context_compactor = require("./context/token_based_context_compactor.js");
142
+ var import_truncating_context_compactor = require("./context/truncating_context_compactor.js");
143
+ var import_compacted_event = require("./events/compacted_event.js");
124
144
  var import_event = require("./events/event.js");
125
145
  var import_event_actions = require("./events/event_actions.js");
126
146
  var import_structured_events = require("./events/structured_events.js");
@@ -146,7 +166,10 @@ var import_base_toolset = require("./tools/base_toolset.js");
146
166
  var import_exit_loop_tool = require("./tools/exit_loop_tool.js");
147
167
  var import_function_tool = require("./tools/function_tool.js");
148
168
  var import_google_search_tool = require("./tools/google_search_tool.js");
169
+ var import_load_artifacts_tool = require("./tools/load_artifacts_tool.js");
170
+ var import_load_memory_tool = require("./tools/load_memory_tool.js");
149
171
  var import_long_running_tool = require("./tools/long_running_tool.js");
172
+ var import_preload_memory_tool = require("./tools/preload_memory_tool.js");
150
173
  var import_tool_confirmation = require("./tools/tool_confirmation.js");
151
174
  var import_logger = require("./utils/logger.js");
152
175
  var import_model_name = require("./utils/model_name.js");
@@ -179,7 +202,10 @@ __reExport(common_exports, require("./tools/base_tool.js"), module.exports);
179
202
  BaseTool,
180
203
  BaseToolset,
181
204
  BuiltInCodeExecutor,
205
+ CONTENT_REQUEST_PROCESSOR,
206
+ ContentRequestProcessor,
182
207
  Context,
208
+ ContextCompactorRequestProcessor,
183
209
  EXIT_LOOP,
184
210
  EventType,
185
211
  ExitLoopTool,
@@ -195,15 +221,22 @@ __reExport(common_exports, require("./tools/base_tool.js"), module.exports);
195
221
  InMemorySessionService,
196
222
  InvocationContext,
197
223
  LLMRegistry,
224
+ LOAD_ARTIFACTS,
225
+ LOAD_MEMORY,
198
226
  LiveRequestQueue,
199
227
  LlmAgent,
228
+ LlmSummarizer,
229
+ LoadArtifactsTool,
230
+ LoadMemoryTool,
200
231
  LogLevel,
201
232
  LoggingPlugin,
202
233
  LongRunningFunctionTool,
203
234
  LoopAgent,
235
+ PRELOAD_MEMORY,
204
236
  ParallelAgent,
205
237
  PluginManager,
206
238
  PolicyOutcome,
239
+ PreloadMemoryTool,
207
240
  REQUEST_CONFIRMATION_FUNCTION_CALL_NAME,
208
241
  ReadonlyContext,
209
242
  Runner,
@@ -211,7 +244,9 @@ __reExport(common_exports, require("./tools/base_tool.js"), module.exports);
211
244
  SequentialAgent,
212
245
  State,
213
246
  StreamingMode,
247
+ TokenBasedContextCompactor,
214
248
  ToolConfirmation,
249
+ TruncatingContextCompactor,
215
250
  createEvent,
216
251
  createEventActions,
217
252
  createSession,
@@ -228,12 +263,14 @@ __reExport(common_exports, require("./tools/base_tool.js"), module.exports);
228
263
  isBaseLlm,
229
264
  isBaseTool,
230
265
  isBaseToolset,
266
+ isCompactedEvent,
231
267
  isFinalResponse,
232
268
  isFunctionTool,
233
269
  isGemini2OrAbove,
234
270
  isLlmAgent,
235
271
  isLoopAgent,
236
272
  isParallelAgent,
273
+ isRunner,
237
274
  isSequentialAgent,
238
275
  setLogLevel,
239
276
  setLogger,
@@ -0,0 +1,27 @@
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 __copyProps = (to, from, except, desc) => {
13
+ if (from && typeof from === "object" || typeof from === "function") {
14
+ for (let key of __getOwnPropNames(from))
15
+ if (!__hasOwnProp.call(to, key) && key !== except)
16
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
17
+ }
18
+ return to;
19
+ };
20
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
21
+ var base_context_compactor_exports = {};
22
+ module.exports = __toCommonJS(base_context_compactor_exports);
23
+ /**
24
+ * @license
25
+ * Copyright 2026 Google LLC
26
+ * SPDX-License-Identifier: Apache-2.0
27
+ */
@@ -0,0 +1,27 @@
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 __copyProps = (to, from, except, desc) => {
13
+ if (from && typeof from === "object" || typeof from === "function") {
14
+ for (let key of __getOwnPropNames(from))
15
+ if (!__hasOwnProp.call(to, key) && key !== except)
16
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
17
+ }
18
+ return to;
19
+ };
20
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
21
+ var base_summarizer_exports = {};
22
+ module.exports = __toCommonJS(base_summarizer_exports);
23
+ /**
24
+ * @license
25
+ * Copyright 2026 Google LLC
26
+ * SPDX-License-Identifier: Apache-2.0
27
+ */
@@ -0,0 +1,93 @@
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 llm_summarizer_exports = {};
26
+ __export(llm_summarizer_exports, {
27
+ LlmSummarizer: () => LlmSummarizer
28
+ });
29
+ module.exports = __toCommonJS(llm_summarizer_exports);
30
+ var import_compacted_event = require("../../events/compacted_event.js");
31
+ var import_event = require("../../events/event.js");
32
+ /**
33
+ * @license
34
+ * Copyright 2026 Google LLC
35
+ * SPDX-License-Identifier: Apache-2.0
36
+ */
37
+ const DEFAULT_PROMPT = "The following is a conversation history between a user and an AI agent. Please summarize the conversation, focusing on key information and decisions made, as well as any unresolved questions or tasks. The summary should be concise and capture the essence of the interaction.";
38
+ class LlmSummarizer {
39
+ constructor(options) {
40
+ this.llm = options.llm;
41
+ this.prompt = options.prompt || DEFAULT_PROMPT;
42
+ }
43
+ async summarize(events) {
44
+ var _a, _b, _c, _d, _e, _f;
45
+ if (events.length === 0) {
46
+ throw new Error("Cannot summarize an empty list of events.");
47
+ }
48
+ const startTime = events[0].timestamp;
49
+ const endTime = events[events.length - 1].timestamp;
50
+ let formattedEvents = "";
51
+ for (let i = 0; i < events.length; i++) {
52
+ formattedEvents += `[Event ${i + 1} - Author: ${events[i].author}]
53
+ `;
54
+ formattedEvents += `${(0, import_event.stringifyContent)(events[i])}
55
+
56
+ `;
57
+ }
58
+ const fullPrompt = `${this.prompt}
59
+
60
+ ${formattedEvents}`;
61
+ const request = {
62
+ contents: [{ role: "user", parts: [{ text: fullPrompt }] }],
63
+ toolsDict: {},
64
+ liveConnectConfig: {}
65
+ };
66
+ const responseGen = this.llm.generateContentAsync(request, false);
67
+ let compactedContent = "";
68
+ const firstResponse = await responseGen.next();
69
+ if (firstResponse.done || !((_c = (_b = (_a = firstResponse.value.content) == null ? void 0 : _a.parts) == null ? void 0 : _b[0]) == null ? void 0 : _c.text)) {
70
+ throw new Error("LLM failed to return a valid summary.");
71
+ }
72
+ compactedContent += firstResponse.value.content.parts[0].text;
73
+ for await (const chunk of responseGen) {
74
+ if ((_f = (_e = (_d = chunk.content) == null ? void 0 : _d.parts) == null ? void 0 : _e[0]) == null ? void 0 : _f.text) {
75
+ compactedContent += chunk.content.parts[0].text;
76
+ }
77
+ }
78
+ return (0, import_compacted_event.createCompactedEvent)({
79
+ author: "system",
80
+ content: {
81
+ role: "model",
82
+ parts: [{ text: compactedContent }]
83
+ },
84
+ startTime,
85
+ endTime,
86
+ compactedContent
87
+ });
88
+ }
89
+ }
90
+ // Annotate the CommonJS export names for ESM import in node:
91
+ 0 && (module.exports = {
92
+ LlmSummarizer
93
+ });
@@ -0,0 +1,135 @@
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 token_based_context_compactor_exports = {};
26
+ __export(token_based_context_compactor_exports, {
27
+ TokenBasedContextCompactor: () => TokenBasedContextCompactor
28
+ });
29
+ module.exports = __toCommonJS(token_based_context_compactor_exports);
30
+ var import_compacted_event = require("../events/compacted_event.js");
31
+ var import_event = require("../events/event.js");
32
+ /**
33
+ * @license
34
+ * Copyright 2026 Google LLC
35
+ * SPDX-License-Identifier: Apache-2.0
36
+ */
37
+ class TokenBasedContextCompactor {
38
+ constructor(options) {
39
+ this.tokenThreshold = options.tokenThreshold;
40
+ this.eventRetentionSize = options.eventRetentionSize;
41
+ this.summarizer = options.summarizer;
42
+ }
43
+ getActiveEvents(events) {
44
+ let latestCompactedEvent = void 0;
45
+ for (let i = events.length - 1; i >= 0; i--) {
46
+ const e = events[i];
47
+ if ((0, import_compacted_event.isCompactedEvent)(e)) {
48
+ if (!latestCompactedEvent || e.endTime > latestCompactedEvent.endTime) {
49
+ latestCompactedEvent = e;
50
+ }
51
+ }
52
+ }
53
+ if (!latestCompactedEvent) {
54
+ return events;
55
+ }
56
+ const activeRawEvents = events.filter(
57
+ (e) => !(0, import_compacted_event.isCompactedEvent)(e) && e.timestamp > latestCompactedEvent.endTime
58
+ );
59
+ return [latestCompactedEvent, ...activeRawEvents];
60
+ }
61
+ shouldCompact(invocationContext) {
62
+ const events = invocationContext.session.events;
63
+ const activeEvents = this.getActiveEvents(events);
64
+ const rawEvents = activeEvents.filter((e) => !(0, import_compacted_event.isCompactedEvent)(e));
65
+ if (rawEvents.length <= this.eventRetentionSize) {
66
+ return false;
67
+ }
68
+ let totalTokens = 0;
69
+ for (const event of activeEvents) {
70
+ totalTokens += getEventTokens(event);
71
+ }
72
+ return totalTokens > this.tokenThreshold;
73
+ }
74
+ async compact(invocationContext) {
75
+ const events = invocationContext.session.events;
76
+ const activeEvents = this.getActiveEvents(events);
77
+ const rawEvents = activeEvents.filter((e) => !(0, import_compacted_event.isCompactedEvent)(e));
78
+ if (rawEvents.length <= this.eventRetentionSize) {
79
+ return;
80
+ }
81
+ let retainStartIndex = Math.max(
82
+ 0,
83
+ rawEvents.length - this.eventRetentionSize
84
+ );
85
+ while (retainStartIndex > 0) {
86
+ const eventToRetain = rawEvents[retainStartIndex];
87
+ const previousEvent = rawEvents[retainStartIndex - 1];
88
+ if (hasFunctionResponse(eventToRetain) && hasFunctionCall(previousEvent)) {
89
+ retainStartIndex--;
90
+ } else {
91
+ break;
92
+ }
93
+ }
94
+ if (retainStartIndex === 0) {
95
+ return;
96
+ }
97
+ const rawEventsToCompact = rawEvents.slice(0, retainStartIndex);
98
+ const compactedEventPresent = activeEvents.find(import_compacted_event.isCompactedEvent);
99
+ const eventsToCompact = compactedEventPresent ? [compactedEventPresent, ...rawEventsToCompact] : rawEventsToCompact;
100
+ const compactedEvent = await this.summarizer.summarize(eventsToCompact);
101
+ if (!compactedEvent.actions) {
102
+ compactedEvent.actions = {
103
+ stateDelta: {},
104
+ artifactDelta: {},
105
+ requestedAuthConfigs: [],
106
+ requestedToolConfirmations: {}
107
+ };
108
+ }
109
+ invocationContext.session.events.push(compactedEvent);
110
+ }
111
+ }
112
+ function getEventTokens(event) {
113
+ var _a;
114
+ if (((_a = event.usageMetadata) == null ? void 0 : _a.promptTokenCount) !== void 0) {
115
+ return event.usageMetadata.promptTokenCount;
116
+ }
117
+ const contentStr = (0, import_event.stringifyContent)(event);
118
+ return Math.ceil(contentStr.length / 4);
119
+ }
120
+ function hasFunctionCall(event) {
121
+ var _a, _b;
122
+ return !!((_b = (_a = event.content) == null ? void 0 : _a.parts) == null ? void 0 : _b.some(
123
+ (part) => part.functionCall !== void 0
124
+ ));
125
+ }
126
+ function hasFunctionResponse(event) {
127
+ var _a, _b;
128
+ return !!((_b = (_a = event.content) == null ? void 0 : _a.parts) == null ? void 0 : _b.some(
129
+ (part) => part.functionResponse !== void 0
130
+ ));
131
+ }
132
+ // Annotate the CommonJS export names for ESM import in node:
133
+ 0 && (module.exports = {
134
+ TokenBasedContextCompactor
135
+ });
@@ -0,0 +1,58 @@
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 truncating_context_compactor_exports = {};
26
+ __export(truncating_context_compactor_exports, {
27
+ TruncatingContextCompactor: () => TruncatingContextCompactor
28
+ });
29
+ module.exports = __toCommonJS(truncating_context_compactor_exports);
30
+ /**
31
+ * @license
32
+ * Copyright 2026 Google LLC
33
+ * SPDX-License-Identifier: Apache-2.0
34
+ */
35
+ class TruncatingContextCompactor {
36
+ constructor(options) {
37
+ var _a;
38
+ this.threshold = options.threshold;
39
+ this.preserveLeadingEvents = (_a = options.preserveLeadingEvents) != null ? _a : 0;
40
+ }
41
+ shouldCompact(invocationContext) {
42
+ const eventsLength = invocationContext.session.events.length;
43
+ return eventsLength > this.threshold + Math.max(0, this.preserveLeadingEvents);
44
+ }
45
+ compact(invocationContext) {
46
+ const events = invocationContext.session.events;
47
+ const excess = events.length - this.threshold - Math.max(0, this.preserveLeadingEvents);
48
+ if (excess <= 0) {
49
+ return;
50
+ }
51
+ const startIndexToRemove = Math.max(0, this.preserveLeadingEvents);
52
+ events.splice(startIndexToRemove, excess);
53
+ }
54
+ }
55
+ // Annotate the CommonJS export names for ESM import in node:
56
+ 0 && (module.exports = {
57
+ TruncatingContextCompactor
58
+ });