@google/adk 0.1.3 → 0.2.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 (54) hide show
  1. package/README.md +1 -7
  2. package/dist/cjs/agents/content_processor_utils.js +20 -8
  3. package/dist/cjs/agents/llm_agent.js +1 -0
  4. package/dist/cjs/common.js +9 -0
  5. package/dist/cjs/index.js +5 -5
  6. package/dist/cjs/index.js.map +4 -4
  7. package/dist/cjs/models/base_llm.js +12 -3
  8. package/dist/cjs/models/google_llm.js +6 -20
  9. package/dist/cjs/models/registry.js +1 -1
  10. package/dist/cjs/telemetry/google_cloud.js +85 -0
  11. package/dist/cjs/telemetry/setup.js +97 -0
  12. package/dist/cjs/telemetry/tracing.js +231 -0
  13. package/dist/cjs/utils/client_labels.js +56 -0
  14. package/dist/cjs/version.js +1 -1
  15. package/dist/esm/agents/content_processor_utils.js +20 -8
  16. package/dist/esm/agents/llm_agent.js +1 -0
  17. package/dist/esm/common.js +6 -0
  18. package/dist/esm/index.js +5 -5
  19. package/dist/esm/index.js.map +4 -4
  20. package/dist/esm/models/base_llm.js +12 -3
  21. package/dist/esm/models/google_llm.js +6 -20
  22. package/dist/esm/models/registry.js +1 -1
  23. package/dist/esm/telemetry/google_cloud.js +54 -0
  24. package/dist/esm/telemetry/setup.js +67 -0
  25. package/dist/esm/telemetry/tracing.js +195 -0
  26. package/dist/esm/utils/client_labels.js +26 -0
  27. package/dist/esm/version.js +1 -1
  28. package/dist/types/common.d.ts +2 -0
  29. package/dist/types/index.d.ts +2 -0
  30. package/dist/types/models/base_llm.d.ts +1 -0
  31. package/dist/types/models/google_llm.d.ts +0 -1
  32. package/dist/types/telemetry/google_cloud.d.ts +9 -0
  33. package/dist/types/telemetry/setup.d.ts +48 -0
  34. package/dist/types/telemetry/tracing.d.ts +111 -0
  35. package/dist/types/utils/client_labels.d.ts +9 -0
  36. package/dist/types/version.d.ts +1 -1
  37. package/dist/web/agents/content_processor_utils.js +20 -8
  38. package/dist/web/agents/llm_agent.js +1 -0
  39. package/dist/web/common.js +6 -0
  40. package/dist/web/index.js +1 -1
  41. package/dist/web/index.js.map +4 -4
  42. package/dist/web/models/base_llm.js +12 -3
  43. package/dist/web/models/google_llm.js +6 -20
  44. package/dist/web/models/registry.js +1 -1
  45. package/dist/web/telemetry/google_cloud.js +54 -0
  46. package/dist/web/telemetry/setup.js +67 -0
  47. package/dist/web/telemetry/tracing.js +210 -0
  48. package/dist/web/utils/client_labels.js +26 -0
  49. package/dist/web/version.js +1 -1
  50. package/package.json +19 -4
  51. package/dist/cjs/sessions/database_session_service.js +0 -52
  52. package/dist/esm/sessions/database_session_service.js +0 -22
  53. package/dist/types/sessions/database_session_service.d.ts +0 -10
  54. package/dist/web/sessions/database_session_service.js +0 -22
package/README.md CHANGED
@@ -1,9 +1,3 @@
1
1
  # @google/adk
2
2
 
3
- > [!CAUTION]
4
- > **API Stability:** Mostly stable, but expect potential breaking changes
5
- > before 1.0.
6
- > **Production Use:** Not recommended yet. Use at your own risk.
7
- > **Collaboration:** General contributions are closed (issues/PRs). We are,
8
- > however, accepting organized teams that can follow our coding standards and
9
- > planning. Please contact us if you are interested.
3
+ Please see README for adk-js at https://github.com/google/adk-js
@@ -103,8 +103,8 @@ function isEventFromAnotherAgent(agentName, event) {
103
103
  return !!agentName && event.author !== agentName && event.author !== "user";
104
104
  }
105
105
  function convertForeignEvent(event) {
106
- var _a, _b, _c, _d, _e;
107
- if (!((_a = event.content) == null ? void 0 : _a.parts)) {
106
+ var _a, _b, _c, _d, _e, _f;
107
+ if (!((_b = (_a = event.content) == null ? void 0 : _a.parts) == null ? void 0 : _b.length)) {
108
108
  return event;
109
109
  }
110
110
  const content = {
@@ -115,19 +115,21 @@ function convertForeignEvent(event) {
115
115
  };
116
116
  for (const part of event.content.parts) {
117
117
  if (part.text && !part.thought) {
118
- (_b = content.parts) == null ? void 0 : _b.push({
118
+ (_c = content.parts) == null ? void 0 : _c.push({
119
119
  text: `[${event.author}] said: ${part.text}`
120
120
  });
121
121
  } else if (part.functionCall) {
122
- (_c = content.parts) == null ? void 0 : _c.push({
123
- text: `[${event.author}] called tool \`${part.functionCall.name}\` with parameters: ${part.functionCall.args}`
122
+ const argsText = safeStringify(part.functionCall.args);
123
+ (_d = content.parts) == null ? void 0 : _d.push({
124
+ text: `[${event.author}] called tool \`${part.functionCall.name}\` with parameters: ${argsText}`
124
125
  });
125
126
  } else if (part.functionResponse) {
126
- (_d = content.parts) == null ? void 0 : _d.push({
127
- text: `[${event.author}] tool \`${part.functionResponse.name}\` returned result: ${part.functionResponse.response}`
127
+ const responseText = safeStringify(part.functionResponse.response);
128
+ (_e = content.parts) == null ? void 0 : _e.push({
129
+ text: `[${event.author}] tool \`${part.functionResponse.name}\` returned result: ${responseText}`
128
130
  });
129
131
  } else {
130
- (_e = content.parts) == null ? void 0 : _e.push(part);
132
+ (_f = content.parts) == null ? void 0 : _f.push(part);
131
133
  }
132
134
  }
133
135
  return (0, import_event.createEvent)({
@@ -292,6 +294,16 @@ function rearrangeEventsForAsyncFunctionResponsesInHistory(events) {
292
294
  }
293
295
  return resultEvents;
294
296
  }
297
+ function safeStringify(obj) {
298
+ if (typeof obj === "string") {
299
+ return obj;
300
+ }
301
+ try {
302
+ return JSON.stringify(obj);
303
+ } catch (e) {
304
+ return String(obj);
305
+ }
306
+ }
295
307
  // Annotate the CommonJS export names for ESM import in node:
296
308
  0 && (module.exports = {
297
309
  getContents,
@@ -170,6 +170,7 @@ class AgentTransferLlmRequestProcessor extends import_base_llm_processor.BaseLlm
170
170
  throw new Error("toolContext is required.");
171
171
  }
172
172
  toolContext.actions.transferToAgent = args.agentName;
173
+ return "Transfer queued";
173
174
  }
174
175
  });
175
176
  }
@@ -41,6 +41,7 @@ __export(common_exports, {
41
41
  InMemoryRunner: () => import_in_memory_runner.InMemoryRunner,
42
42
  InMemorySessionService: () => import_in_memory_session_service.InMemorySessionService,
43
43
  InvocationContext: () => import_invocation_context.InvocationContext,
44
+ LLMRegistry: () => import_registry.LLMRegistry,
44
45
  LiveRequestQueue: () => import_live_request_queue.LiveRequestQueue,
45
46
  LlmAgent: () => import_llm_agent.LlmAgent,
46
47
  LogLevel: () => import_logger.LogLevel,
@@ -54,6 +55,7 @@ __export(common_exports, {
54
55
  Runner: () => import_runner.Runner,
55
56
  SecurityPlugin: () => import_security_plugin.SecurityPlugin,
56
57
  SequentialAgent: () => import_sequential_agent.SequentialAgent,
58
+ State: () => import_state.State,
57
59
  StreamingMode: () => import_run_config.StreamingMode,
58
60
  ToolConfirmation: () => import_tool_confirmation.ToolConfirmation,
59
61
  ToolContext: () => import_tool_context.ToolContext,
@@ -68,6 +70,7 @@ __export(common_exports, {
68
70
  isFinalResponse: () => import_event.isFinalResponse,
69
71
  setLogLevel: () => import_logger.setLogLevel,
70
72
  stringifyContent: () => import_event.stringifyContent,
73
+ version: () => import_version.version,
71
74
  zodObjectToSchema: () => import_simple_zod_to_json.zodObjectToSchema
72
75
  });
73
76
  module.exports = __toCommonJS(common_exports);
@@ -87,6 +90,7 @@ var import_event_actions = require("./events/event_actions.js");
87
90
  var import_in_memory_memory_service = require("./memory/in_memory_memory_service.js");
88
91
  var import_base_llm = require("./models/base_llm.js");
89
92
  var import_google_llm = require("./models/google_llm.js");
93
+ var import_registry = require("./models/registry.js");
90
94
  var import_base_plugin = require("./plugins/base_plugin.js");
91
95
  var import_logging_plugin = require("./plugins/logging_plugin.js");
92
96
  var import_plugin_manager = require("./plugins/plugin_manager.js");
@@ -95,6 +99,7 @@ var import_in_memory_runner = require("./runner/in_memory_runner.js");
95
99
  var import_runner = require("./runner/runner.js");
96
100
  var import_in_memory_session_service = require("./sessions/in_memory_session_service.js");
97
101
  var import_session = require("./sessions/session.js");
102
+ var import_state = require("./sessions/state.js");
98
103
  var import_agent_tool = require("./tools/agent_tool.js");
99
104
  var import_base_tool = require("./tools/base_tool.js");
100
105
  var import_base_toolset = require("./tools/base_toolset.js");
@@ -105,6 +110,7 @@ var import_tool_confirmation = require("./tools/tool_confirmation.js");
105
110
  var import_tool_context = require("./tools/tool_context.js");
106
111
  var import_logger = require("./utils/logger.js");
107
112
  var import_simple_zod_to_json = require("./utils/simple_zod_to_json.js");
113
+ var import_version = require("./version.js");
108
114
  __reExport(common_exports, require("./artifacts/base_artifact_service.js"), module.exports);
109
115
  __reExport(common_exports, require("./memory/base_memory_service.js"), module.exports);
110
116
  __reExport(common_exports, require("./sessions/base_session_service.js"), module.exports);
@@ -132,6 +138,7 @@ __reExport(common_exports, require("./tools/base_tool.js"), module.exports);
132
138
  InMemoryRunner,
133
139
  InMemorySessionService,
134
140
  InvocationContext,
141
+ LLMRegistry,
135
142
  LiveRequestQueue,
136
143
  LlmAgent,
137
144
  LogLevel,
@@ -145,6 +152,7 @@ __reExport(common_exports, require("./tools/base_tool.js"), module.exports);
145
152
  Runner,
146
153
  SecurityPlugin,
147
154
  SequentialAgent,
155
+ State,
148
156
  StreamingMode,
149
157
  ToolConfirmation,
150
158
  ToolContext,
@@ -159,6 +167,7 @@ __reExport(common_exports, require("./tools/base_tool.js"), module.exports);
159
167
  isFinalResponse,
160
168
  setLogLevel,
161
169
  stringifyContent,
170
+ version,
162
171
  zodObjectToSchema,
163
172
  ...require("./artifacts/base_artifact_service.js"),
164
173
  ...require("./memory/base_memory_service.js"),
package/dist/cjs/index.js CHANGED
@@ -4,11 +4,11 @@
4
4
  * SPDX-License-Identifier: Apache-2.0
5
5
  */
6
6
 
7
- "use strict";var Me=Object.defineProperty;var Xt=Object.getOwnPropertyDescriptor;var Yt=Object.getOwnPropertyNames;var Jt=Object.prototype.hasOwnProperty;var en=(o,e)=>{for(var t in e)Me(o,t,{get:e[t],enumerable:!0})},tn=(o,e,t,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let r of Yt(e))!Jt.call(o,r)&&r!==t&&Me(o,r,{get:()=>e[r],enumerable:!(n=Xt(e,r))||n.enumerable});return o};var nn=o=>tn(Me({},"__esModule",{value:!0}),o);var Un={};en(Un,{AgentTool:()=>we,BaseAgent:()=>P,BaseLlm:()=>F,BasePlugin:()=>K,BaseSessionService:()=>le,BaseTool:()=>R,BaseToolset:()=>te,CallbackContext:()=>k,FunctionTool:()=>B,GOOGLE_SEARCH:()=>Vt,GcsArtifactService:()=>st,Gemini:()=>W,InMemoryArtifactService:()=>J,InMemoryMemoryService:()=>j,InMemoryPolicyEngine:()=>ae,InMemoryRunner:()=>Re,InMemorySessionService:()=>V,InvocationContext:()=>M,LLMRegistry:()=>Q,LiveRequestQueue:()=>Ce,LlmAgent:()=>b,LogLevel:()=>De,LoggingPlugin:()=>Ee,LongRunningFunctionTool:()=>ke,LoopAgent:()=>Ae,MCPSessionManager:()=>fe,MCPTool:()=>de,MCPToolset:()=>it,ParallelAgent:()=>be,PluginManager:()=>ee,PolicyOutcome:()=>nt,REQUEST_CONFIRMATION_FUNCTION_CALL_NAME:()=>tt,Runner:()=>Z,SecurityPlugin:()=>Se,SequentialAgent:()=>xe,StreamingMode:()=>ye,ToolConfirmation:()=>q,ToolContext:()=>O,createEvent:()=>x,createEventActions:()=>_,createSession:()=>ce,functionsExportedForTestingOnly:()=>ht,getAskUserConfirmationFunctionCalls:()=>Dt,getFunctionCalls:()=>T,getFunctionResponses:()=>I,hasTrailingCodeExecutionResult:()=>Be,isFinalResponse:()=>z,setLogLevel:()=>pt,stringifyContent:()=>ft,zodObjectToSchema:()=>ie});module.exports=nn(Un);var Fe=require("@opentelemetry/api");function _(o={}){return{stateDelta:{},artifactDelta:{},requestedAuthConfigs:{},requestedToolConfirmations:{},...o}}function ct(o,e){let t=_();e&&Object.assign(t,e);for(let n of o)n&&(n.stateDelta&&Object.assign(t.stateDelta,n.stateDelta),n.artifactDelta&&Object.assign(t.artifactDelta,n.artifactDelta),n.requestedAuthConfigs&&Object.assign(t.requestedAuthConfigs,n.requestedAuthConfigs),n.requestedToolConfirmations&&Object.assign(t.requestedToolConfirmations,n.requestedToolConfirmations),n.skipSummarization!==void 0&&(t.skipSummarization=n.skipSummarization),n.transferToAgent!==void 0&&(t.transferToAgent=n.transferToAgent),n.escalate!==void 0&&(t.escalate=n.escalate));return t}function x(o={}){return{...o,id:o.id||Ne(),invocationId:o.invocationId||"",author:o.author,actions:o.actions||_(),longRunningToolIds:o.longRunningToolIds||[],branch:o.branch,timestamp:o.timestamp||Date.now()}}function z(o){return o.actions.skipSummarization||o.longRunningToolIds&&o.longRunningToolIds.length>0?!0:T(o).length===0&&I(o).length===0&&!o.partial&&!Be(o)}function T(o){let e=[];if(o.content&&o.content.parts)for(let t of o.content.parts)t.functionCall&&e.push(t.functionCall);return e}function I(o){let e=[];if(o.content&&o.content.parts)for(let t of o.content.parts)t.functionResponse&&e.push(t.functionResponse);return e}function Be(o){var e;return o.content&&((e=o.content.parts)!=null&&e.length)?o.content.parts[o.content.parts.length-1].codeExecutionResult!==void 0:!1}function ft(o){var e;return(e=o.content)!=null&&e.parts?o.content.parts.map(t=>{var n;return(n=t.text)!=null?n:""}).join(""):""}var ut="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";function Ne(){let o="";for(let e=0;e<8;e++)o+=ut[Math.floor(Math.random()*ut.length)];return o}var y=class{constructor(e,t){this.value=e;this.delta=t}get(e,t){return e in this.delta?this.delta[e]:e in this.value?this.value[e]:t}set(e,t){this.value[e]=t,this.delta[e]=t}has(e){return e in this.value||e in this.delta}hasDelta(){return Object.keys(this.delta).length>0}update(e){this.delta={...this.delta,...e},this.value={...this.value,...e}}toRecord(){return{...this.value,...this.delta}}};y.APP_PREFIX="app:",y.USER_PREFIX="user:",y.TEMP_PREFIX="temp:";var w=class{constructor(e){this.invocationContext=e}get userContent(){return this.invocationContext.userContent}get invocationId(){return this.invocationContext.invocationId}get agentName(){return this.invocationContext.agent.name}get state(){return new y(this.invocationContext.session.state,{})}};var k=class extends w{constructor({invocationContext:e,eventActions:t}){super(e),this.eventActions=t||_(),this._state=new y(e.session.state,this.eventActions.stateDelta)}get state(){return this._state}loadArtifact(e,t){if(!this.invocationContext.artifactService)throw new Error("Artifact service is not initialized.");return this.invocationContext.artifactService.loadArtifact({appName:this.invocationContext.appName,userId:this.invocationContext.userId,sessionId:this.invocationContext.session.id,filename:e,version:t})}async saveArtifact(e,t){if(!this.invocationContext.artifactService)throw new Error("Artifact service is not initialized.");let n=await this.invocationContext.artifactService.saveArtifact({appName:this.invocationContext.appName,userId:this.invocationContext.userId,sessionId:this.invocationContext.session.id,filename:e,artifact:t});return this.eventActions.artifactDelta[e]=n,n}};function _e(){return typeof window<"u"}var me="xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx";function H(){let o="";for(let e=0;e<me.length;e++){let t=Math.random()*16|0;me[e]==="x"?o+=t.toString(16):me[e]==="y"?o+=(t&3|8).toString(16):o+=me[e]}return o}var Oe=class{constructor(){this.numberOfLlmCalls=0}incrementAndEnforceLlmCallsLimit(e){if(this.numberOfLlmCalls++,e&&e.maxLlmCalls>0&&this.numberOfLlmCalls>e.maxLlmCalls)throw new Error(`Max number of llm calls limit of ${e.maxLlmCalls} exceeded`)}},M=class{constructor(e){this.invocationCostManager=new Oe;this.artifactService=e.artifactService,this.sessionService=e.sessionService,this.memoryService=e.memoryService,this.invocationId=e.invocationId,this.branch=e.branch,this.agent=e.agent,this.userContent=e.userContent,this.session=e.session,this.endInvocation=e.endInvocation||!1,this.transcriptionCache=e.transcriptionCache,this.runConfig=e.runConfig,this.liveRequestQueue=e.liveRequestQueue,this.activeStreamingTools=e.activeStreamingTools,this.pluginManager=e.pluginManager}get appName(){return this.session.appName}get userId(){return this.session.userId}incrementLlmCallCount(){this.invocationCostManager.incrementAndEnforceLlmCallsLimit(this.runConfig)}};function dt(){return`e-${H()}`}var P=class{constructor(e){this.name=on(e.name),this.description=e.description,this.parentAgent=e.parentAgent,this.subAgents=e.subAgents||[],this.rootAgent=sn(this),this.beforeAgentCallback=mt(e.beforeAgentCallback),this.afterAgentCallback=mt(e.afterAgentCallback),this.setParentAgentForSubAgents()}async*runAsync(e){let t=Fe.trace.getTracer("gcp.vertex.agent").startSpan(`agent_run [${this.name}]`);try{let n=this.createInvocationContext(e),r=await this.handleBeforeAgentCallback(n);if(r&&(yield r),n.endInvocation)return;for await(let s of this.runAsyncImpl(n))yield s;if(n.endInvocation)return;let i=await this.handleAfterAgentCallback(n);i&&(yield i)}finally{t.end()}}async*runLive(e){let t=Fe.trace.getTracer("gcp.vertex.agent").startSpan(`agent_run [${this.name}]`);try{throw new Error("Live mode is not implemented yet.")}finally{t.end()}}findAgent(e){return this.name===e?this:this.findSubAgent(e)}findSubAgent(e){for(let t of this.subAgents){let n=t.findAgent(e);if(n)return n}}createInvocationContext(e){return new M({...e,agent:this})}async handleBeforeAgentCallback(e){if(this.beforeAgentCallback.length===0)return;let t=new k({invocationContext:e});for(let n of this.beforeAgentCallback){let r=await n(t);if(r)return e.endInvocation=!0,x({invocationId:e.invocationId,author:this.name,branch:e.branch,content:r,actions:t.eventActions})}if(t.state.hasDelta())return x({invocationId:e.invocationId,author:this.name,branch:e.branch,actions:t.eventActions})}async handleAfterAgentCallback(e){if(this.afterAgentCallback.length===0)return;let t=new k({invocationContext:e});for(let n of this.afterAgentCallback){let r=await n(t);if(r)return x({invocationId:e.invocationId,author:this.name,branch:e.branch,content:r,actions:t.eventActions})}if(t.state.hasDelta())return x({invocationId:e.invocationId,author:this.name,branch:e.branch,actions:t.eventActions})}setParentAgentForSubAgents(){for(let e of this.subAgents){if(e.parentAgent)throw new Error(`Agent "${e.name}" already has a parent agent, current parent: "${e.parentAgent.name}", trying to add: "${this.name}"`);e.parentAgent=this}}};function on(o){if(!rn(o))throw new Error(`Found invalid agent name: "${o}". Agent name must be a valid identifier. It should start with a letter (a-z, A-Z) or an underscore (_), and can only contain letters, digits (0-9), and underscores.`);if(o==="user")throw new Error("Agent name cannot be 'user'. 'user' is reserved for end-user's input.");return o}function rn(o){return/^[\p{ID_Start}$_][\p{ID_Continue}$_]*$/u.test(o)}function sn(o){for(;o.parentAgent;)o=o.parentAgent;return o}function mt(o){return o?Array.isArray(o)?o:[o]:[]}var gt=require("@google/genai");var oe=class{constructor(e){this.authConfig=e}getAuthResponse(e){let t="temp:"+this.authConfig.credentialKey;return e.get(t)}generateAuthRequest(){var t,n;let e=this.authConfig.authScheme.type;if(!["oauth2","openIdConnect"].includes(e))return this.authConfig;if((n=(t=this.authConfig.exchangedAuthCredential)==null?void 0:t.oauth2)!=null&&n.authUri)return this.authConfig;if(!this.authConfig.rawAuthCredential)throw new Error(`Auth Scheme ${e} requires authCredential.`);if(!this.authConfig.rawAuthCredential.oauth2)throw new Error(`Auth Scheme ${e} requires oauth2 in authCredential.`);if(this.authConfig.rawAuthCredential.oauth2.authUri)return{credentialKey:this.authConfig.credentialKey,authScheme:this.authConfig.authScheme,rawAuthCredential:this.authConfig.rawAuthCredential,exchangedAuthCredential:this.authConfig.rawAuthCredential};if(!this.authConfig.rawAuthCredential.oauth2.clientId||!this.authConfig.rawAuthCredential.oauth2.clientSecret)throw new Error(`Auth Scheme ${e} requires both clientId and clientSecret in authCredential.oauth2.`);return{credentialKey:this.authConfig.credentialKey,authScheme:this.authConfig.authScheme,rawAuthCredential:this.authConfig.rawAuthCredential,exchangedAuthCredential:this.generateAuthUri()}}generateAuthUri(){return this.authConfig.rawAuthCredential}};var q=class{constructor({hint:e,confirmed:t,payload:n}){this.hint=e!=null?e:"",this.confirmed=t,this.payload=n}};var O=class extends k{constructor({invocationContext:e,eventActions:t,functionCallId:n,toolConfirmation:r}){super({invocationContext:e,eventActions:t}),this.functionCallId=n,this.toolConfirmation=r}get actions(){return this.eventActions}requestCredential(e){if(!this.functionCallId)throw new Error("functionCallId is not set.");let t=new oe(e);this.eventActions.requestedAuthConfigs[this.functionCallId]=t.generateAuthRequest()}getAuthResponse(e){return new oe(e).getAuthResponse(this.state)}listArtifacts(){if(!this.invocationContext.artifactService)throw new Error("Artifact service is not initialized.");return this.invocationContext.artifactService.listArtifactKeys({appName:this.invocationContext.session.appName,userId:this.invocationContext.session.userId,sessionId:this.invocationContext.session.id})}searchMemory(e){if(!this.invocationContext.memoryService)throw new Error("Memory service is not initialized.");return this.invocationContext.memoryService.searchMemory({appName:this.invocationContext.session.appName,userId:this.invocationContext.session.userId,query:e})}requestConfirmation({hint:e,payload:t}){if(!this.functionCallId)throw new Error("functionCallId is not set.");this.eventActions.requestedToolConfirmations[this.functionCallId]=new q({hint:e,confirmed:!1,payload:t})}};var De=(r=>(r[r.DEBUG=0]="DEBUG",r[r.INFO=1]="INFO",r[r.WARN=2]="WARN",r[r.ERROR=3]="ERROR",r))(De||{}),X=1;function pt(o){X=o}var $e=class{log(e,...t){if(!(e<X))switch(e){case 0:this.debug(...t);break;case 1:this.info(...t);break;case 2:this.warn(...t);break;case 3:this.error(...t);break;default:throw new Error(`Unsupported log level: ${e}`)}}debug(...e){X>0||console.debug(pe(0),...e)}info(...e){X>1||console.info(pe(1),...e)}warn(...e){X>2||console.warn(pe(2),...e)}error(...e){X>3||console.error(pe(3),...e)}},an={0:"DEBUG",1:"INFO",2:"WARN",3:"ERROR"},ln={0:"\x1B[34m",1:"\x1B[32m",2:"\x1B[33m",3:"\x1B[31m"},cn="\x1B[0m";function pe(o){return`${ln[o]}[ADK ${an[o]}]:${cn}`}var m=new $e;var Ge="adk-",ge="adk_request_credential",Y="adk_request_confirmation",ht={handleFunctionCallList:he};function qe(){return`${Ge}${H()}`}function Ct(o){let e=T(o);if(e)for(let t of e)t.id||(t.id=qe())}function vt(o){if(o&&o.parts)for(let e of o.parts)e.functionCall&&e.functionCall.id&&e.functionCall.id.startsWith(Ge)&&(e.functionCall.id=void 0),e.functionResponse&&e.functionResponse.id&&e.functionResponse.id.startsWith(Ge)&&(e.functionResponse.id=void 0)}function yt(o,e){let t=new Set;for(let n of o)n.name&&n.name in e&&e[n.name].isLongRunning&&n.id&&t.add(n.id);return t}function At(o,e){var r;if(!((r=e.actions)!=null&&r.requestedAuthConfigs))return;let t=[],n=new Set;for(let[i,s]of Object.entries(e.actions.requestedAuthConfigs)){let a={name:ge,args:{function_call_id:i,auth_config:s},id:qe()};n.add(a.id),t.push({functionCall:a})}return x({invocationId:o.invocationId,author:o.agent.name,branch:o.branch,content:{parts:t,role:e.content.role},longRunningToolIds:Array.from(n)})}function bt({invocationContext:o,functionCallEvent:e,functionResponseEvent:t}){var s,a;if(!((s=t.actions)!=null&&s.requestedToolConfirmations))return;let n=[],r=new Set,i=T(e);for(let[l,c]of Object.entries(t.actions.requestedToolConfirmations)){let f=(a=i.find(d=>d.id===l))!=null?a:void 0;if(!f)continue;let u={name:Y,args:{originalFunctionCall:f,toolConfirmation:c},id:qe()};r.add(u.id),n.push({functionCall:u})}return x({invocationId:o.invocationId,author:o.agent.name,branch:o.branch,content:{parts:n,role:t.content.role},longRunningToolIds:Array.from(r)})}async function un(o,e,t){return m.debug(`callToolAsync ${o.name}`),await o.runAsync({args:e,toolContext:t})}async function xt({invocationContext:o,functionCallEvent:e,toolsDict:t,beforeToolCallbacks:n,afterToolCallbacks:r,filters:i,toolConfirmationDict:s}){let a=T(e);return await he({invocationContext:o,functionCalls:a,toolsDict:t,beforeToolCallbacks:n,afterToolCallbacks:r,filters:i,toolConfirmationDict:s})}async function he({invocationContext:o,functionCalls:e,toolsDict:t,beforeToolCallbacks:n,afterToolCallbacks:r,filters:i,toolConfirmationDict:s}){var f;let a=[],l=e.filter(u=>!i||u.id&&i.has(u.id));for(let u of l){let d;s&&u.id&&(d=s[u.id]);let{tool:h,toolContext:C}=fn({invocationContext:o,functionCall:u,toolsDict:t,toolConfirmation:d});m.debug(`execute_tool ${h.name}`);let g=(f=u.args)!=null?f:{},p=null,v;if(p=await o.pluginManager.runBeforeToolCallback({tool:h,toolArgs:g,toolContext:C}),p==null){for(let G of n)if(p=await G({tool:h,args:g,context:C}),p)break}if(p==null)try{p=await un(h,g,C)}catch(G){if(G instanceof Error){let lt=await o.pluginManager.runOnToolErrorCallback({tool:h,toolArgs:g,toolContext:C,error:G});lt?p=lt:v=G.message}else v=G}let S=await o.pluginManager.runAfterToolCallback({tool:h,toolArgs:g,toolContext:C,result:p});if(S==null){for(let G of r)if(S=await G({tool:h,args:g,context:C,response:p}),S)break}if(S!=null&&(p=S),h.isLongRunning&&!p)continue;v?p={error:v}:(typeof p!="object"||p==null)&&(p={result:p});let at=x({invocationId:o.invocationId,author:o.agent.name,content:(0,gt.createUserContent)({functionResponse:{id:C.functionCallId,name:h.name,response:p}}),actions:C.actions,branch:o.branch});m.debug("traceToolCall",{tool:h.name,args:g,functionResponseEvent:at.id}),a.push(at)}if(!a.length)return null;let c=dn(a);return a.length>1&&(m.debug("execute_tool (merged)"),m.debug("traceMergedToolCalls",{responseEventId:c.id,functionResponseEvent:c.id})),c}function fn({invocationContext:o,functionCall:e,toolsDict:t,toolConfirmation:n}){if(!e.name||!(e.name in t))throw new Error(`Function ${e.name} is not found in the toolsDict.`);let r=new O({invocationContext:o,functionCallId:e.id||void 0,toolConfirmation:n});return{tool:t[e.name],toolContext:r}}function dn(o){if(!o.length)throw new Error("No function response events provided.");if(o.length===1)return o[0];let e=[];for(let i of o)i.content&&i.content.parts&&e.push(...i.content.parts);let t=o[0],n=o.map(i=>i.actions||{}),r=ct(n);return x({author:t.author,branch:t.branch,content:{role:"user",parts:e},actions:r,timestamp:t.timestamp})}var Ce=class{constructor(){this.queue=[];this.resolveFnFifoQueue=[];this.isClosed=!1}send(e){if(this.isClosed)throw new Error("Cannot send to a closed queue.");this.resolveFnFifoQueue.length>0?this.resolveFnFifoQueue.shift()(e):this.queue.push(e)}async get(){return this.queue.length>0?this.queue.shift():this.isClosed?{close:!0}:new Promise(e=>{this.resolveFnFifoQueue.push(e)})}close(){if(this.isClosed)return;for(this.isClosed=!0;this.resolveFnFifoQueue.length>0&&this.queue.length>0;){let t=this.resolveFnFifoQueue.shift(),n=this.queue.shift();t(n)}let e={close:!0};for(;this.resolveFnFifoQueue.length>0;)this.resolveFnFifoQueue.shift()(e)}sendContent(e){this.send({content:e})}sendRealtime(e){this.send({blob:e})}sendActivityStart(){this.send({activityStart:{}})}sendActivityEnd(){this.send({activityEnd:{}})}async*[Symbol.asyncIterator](){for(;;){let e=await this.get();if(yield e,e.close)break}}};var Ze=require("zod");var F=class{constructor({model:e}){this.model=e}maybeAppendUserContent(e){var t;e.contents.length===0&&e.contents.push({role:"user",parts:[{text:"Handle the requests as specified in the System Instruction."}]}),((t=e.contents[e.contents.length-1])==null?void 0:t.role)!=="user"&&e.contents.push({role:"user",parts:[{text:"Continue processing previous requests as instructed. Exit or provide a summary if no more outputs are needed."}]})}};F.supportedModels=[];function re(o,e){o.config||(o.config={});let t=e.join(`
7
+ "use strict";var Ne=Object.defineProperty;var Cn=Object.getOwnPropertyDescriptor;var vn=Object.getOwnPropertyNames;var yn=Object.prototype.hasOwnProperty;var An=(o,e)=>{for(var t in e)Ne(o,t,{get:e[t],enumerable:!0})},bn=(o,e,t,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let r of vn(e))!yn.call(o,r)&&r!==t&&Ne(o,r,{get:()=>e[r],enumerable:!(n=Cn(e,r))||n.enumerable});return o};var Tn=o=>bn(Ne({},"__esModule",{value:!0}),o);var yo={};An(yo,{AgentTool:()=>we,BaseAgent:()=>k,BaseLlm:()=>F,BasePlugin:()=>K,BaseSessionService:()=>ce,BaseTool:()=>S,BaseToolset:()=>te,CallbackContext:()=>w,FunctionTool:()=>B,GOOGLE_SEARCH:()=>Xt,GcsArtifactService:()=>ut,Gemini:()=>W,InMemoryArtifactService:()=>J,InMemoryMemoryService:()=>j,InMemoryPolicyEngine:()=>ae,InMemoryRunner:()=>Ie,InMemorySessionService:()=>V,InvocationContext:()=>M,LLMRegistry:()=>Q,LiveRequestQueue:()=>Ce,LlmAgent:()=>b,LogLevel:()=>je,LoggingPlugin:()=>Re,LongRunningFunctionTool:()=>ke,LoopAgent:()=>be,MCPSessionManager:()=>fe,MCPTool:()=>de,MCPToolset:()=>lt,ParallelAgent:()=>Te,PluginManager:()=>ee,PolicyOutcome:()=>st,REQUEST_CONFIRMATION_FUNCTION_CALL_NAME:()=>it,Runner:()=>Z,SecurityPlugin:()=>Se,SequentialAgent:()=>xe,State:()=>h,StreamingMode:()=>Ae,ToolConfirmation:()=>q,ToolContext:()=>N,createEvent:()=>T,createEventActions:()=>_,createSession:()=>le,functionsExportedForTestingOnly:()=>At,getAskUserConfirmationFunctionCalls:()=>Kt,getFunctionCalls:()=>x,getFunctionResponses:()=>I,getGcpExporters:()=>Co,getGcpResource:()=>vo,hasTrailingCodeExecutionResult:()=>Fe,isFinalResponse:()=>z,maybeSetOtelProviders:()=>uo,setLogLevel:()=>vt,stringifyContent:()=>gt,version:()=>ve,zodObjectToSchema:()=>ie});module.exports=Tn(yo);var qe=require("@opentelemetry/api");function _(o={}){return{stateDelta:{},artifactDelta:{},requestedAuthConfigs:{},requestedToolConfirmations:{},...o}}function mt(o,e){let t=_();e&&Object.assign(t,e);for(let n of o)n&&(n.stateDelta&&Object.assign(t.stateDelta,n.stateDelta),n.artifactDelta&&Object.assign(t.artifactDelta,n.artifactDelta),n.requestedAuthConfigs&&Object.assign(t.requestedAuthConfigs,n.requestedAuthConfigs),n.requestedToolConfirmations&&Object.assign(t.requestedToolConfirmations,n.requestedToolConfirmations),n.skipSummarization!==void 0&&(t.skipSummarization=n.skipSummarization),n.transferToAgent!==void 0&&(t.transferToAgent=n.transferToAgent),n.escalate!==void 0&&(t.escalate=n.escalate));return t}function T(o={}){return{...o,id:o.id||$e(),invocationId:o.invocationId||"",author:o.author,actions:o.actions||_(),longRunningToolIds:o.longRunningToolIds||[],branch:o.branch,timestamp:o.timestamp||Date.now()}}function z(o){return o.actions.skipSummarization||o.longRunningToolIds&&o.longRunningToolIds.length>0?!0:x(o).length===0&&I(o).length===0&&!o.partial&&!Fe(o)}function x(o){let e=[];if(o.content&&o.content.parts)for(let t of o.content.parts)t.functionCall&&e.push(t.functionCall);return e}function I(o){let e=[];if(o.content&&o.content.parts)for(let t of o.content.parts)t.functionResponse&&e.push(t.functionResponse);return e}function Fe(o){var e;return o.content&&((e=o.content.parts)!=null&&e.length)?o.content.parts[o.content.parts.length-1].codeExecutionResult!==void 0:!1}function gt(o){var e;return(e=o.content)!=null&&e.parts?o.content.parts.map(t=>{var n;return(n=t.text)!=null?n:""}).join(""):""}var pt="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";function $e(){let o="";for(let e=0;e<8;e++)o+=pt[Math.floor(Math.random()*pt.length)];return o}var h=class{constructor(e,t){this.value=e;this.delta=t}get(e,t){return e in this.delta?this.delta[e]:e in this.value?this.value[e]:t}set(e,t){this.value[e]=t,this.delta[e]=t}has(e){return e in this.value||e in this.delta}hasDelta(){return Object.keys(this.delta).length>0}update(e){this.delta={...this.delta,...e},this.value={...this.value,...e}}toRecord(){return{...this.value,...this.delta}}};h.APP_PREFIX="app:",h.USER_PREFIX="user:",h.TEMP_PREFIX="temp:";var P=class{constructor(e){this.invocationContext=e}get userContent(){return this.invocationContext.userContent}get invocationId(){return this.invocationContext.invocationId}get agentName(){return this.invocationContext.agent.name}get state(){return new h(this.invocationContext.session.state,{})}};var w=class extends P{constructor({invocationContext:e,eventActions:t}){super(e),this.eventActions=t||_(),this._state=new h(e.session.state,this.eventActions.stateDelta)}get state(){return this._state}loadArtifact(e,t){if(!this.invocationContext.artifactService)throw new Error("Artifact service is not initialized.");return this.invocationContext.artifactService.loadArtifact({appName:this.invocationContext.appName,userId:this.invocationContext.userId,sessionId:this.invocationContext.session.id,filename:e,version:t})}async saveArtifact(e,t){if(!this.invocationContext.artifactService)throw new Error("Artifact service is not initialized.");let n=await this.invocationContext.artifactService.saveArtifact({appName:this.invocationContext.appName,userId:this.invocationContext.userId,sessionId:this.invocationContext.session.id,filename:e,artifact:t});return this.eventActions.artifactDelta[e]=n,n}};function De(){return typeof window<"u"}var me="xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx";function X(){let o="";for(let e=0;e<me.length;e++){let t=Math.random()*16|0;me[e]==="x"?o+=t.toString(16):me[e]==="y"?o+=(t&3|8).toString(16):o+=me[e]}return o}var Ge=class{constructor(){this.numberOfLlmCalls=0}incrementAndEnforceLlmCallsLimit(e){if(this.numberOfLlmCalls++,e&&e.maxLlmCalls>0&&this.numberOfLlmCalls>e.maxLlmCalls)throw new Error(`Max number of llm calls limit of ${e.maxLlmCalls} exceeded`)}},M=class{constructor(e){this.invocationCostManager=new Ge;this.artifactService=e.artifactService,this.sessionService=e.sessionService,this.memoryService=e.memoryService,this.invocationId=e.invocationId,this.branch=e.branch,this.agent=e.agent,this.userContent=e.userContent,this.session=e.session,this.endInvocation=e.endInvocation||!1,this.transcriptionCache=e.transcriptionCache,this.runConfig=e.runConfig,this.liveRequestQueue=e.liveRequestQueue,this.activeStreamingTools=e.activeStreamingTools,this.pluginManager=e.pluginManager}get appName(){return this.session.appName}get userId(){return this.session.userId}incrementLlmCallCount(){this.invocationCostManager.incrementAndEnforceLlmCallsLimit(this.runConfig)}};function ht(){return`e-${X()}`}var k=class{constructor(e){this.name=xn(e.name),this.description=e.description,this.parentAgent=e.parentAgent,this.subAgents=e.subAgents||[],this.rootAgent=Rn(this),this.beforeAgentCallback=Ct(e.beforeAgentCallback),this.afterAgentCallback=Ct(e.afterAgentCallback),this.setParentAgentForSubAgents()}async*runAsync(e){let t=qe.trace.getTracer("gcp.vertex.agent").startSpan(`agent_run [${this.name}]`);try{let n=this.createInvocationContext(e),r=await this.handleBeforeAgentCallback(n);if(r&&(yield r),n.endInvocation)return;for await(let s of this.runAsyncImpl(n))yield s;if(n.endInvocation)return;let i=await this.handleAfterAgentCallback(n);i&&(yield i)}finally{t.end()}}async*runLive(e){let t=qe.trace.getTracer("gcp.vertex.agent").startSpan(`agent_run [${this.name}]`);try{throw new Error("Live mode is not implemented yet.")}finally{t.end()}}findAgent(e){return this.name===e?this:this.findSubAgent(e)}findSubAgent(e){for(let t of this.subAgents){let n=t.findAgent(e);if(n)return n}}createInvocationContext(e){return new M({...e,agent:this})}async handleBeforeAgentCallback(e){if(this.beforeAgentCallback.length===0)return;let t=new w({invocationContext:e});for(let n of this.beforeAgentCallback){let r=await n(t);if(r)return e.endInvocation=!0,T({invocationId:e.invocationId,author:this.name,branch:e.branch,content:r,actions:t.eventActions})}if(t.state.hasDelta())return T({invocationId:e.invocationId,author:this.name,branch:e.branch,actions:t.eventActions})}async handleAfterAgentCallback(e){if(this.afterAgentCallback.length===0)return;let t=new w({invocationContext:e});for(let n of this.afterAgentCallback){let r=await n(t);if(r)return T({invocationId:e.invocationId,author:this.name,branch:e.branch,content:r,actions:t.eventActions})}if(t.state.hasDelta())return T({invocationId:e.invocationId,author:this.name,branch:e.branch,actions:t.eventActions})}setParentAgentForSubAgents(){for(let e of this.subAgents){if(e.parentAgent)throw new Error(`Agent "${e.name}" already has a parent agent, current parent: "${e.parentAgent.name}", trying to add: "${this.name}"`);e.parentAgent=this}}};function xn(o){if(!En(o))throw new Error(`Found invalid agent name: "${o}". Agent name must be a valid identifier. It should start with a letter (a-z, A-Z) or an underscore (_), and can only contain letters, digits (0-9), and underscores.`);if(o==="user")throw new Error("Agent name cannot be 'user'. 'user' is reserved for end-user's input.");return o}function En(o){return/^[\p{ID_Start}$_][\p{ID_Continue}$_]*$/u.test(o)}function Rn(o){for(;o.parentAgent;)o=o.parentAgent;return o}function Ct(o){return o?Array.isArray(o)?o:[o]:[]}var yt=require("@google/genai");var oe=class{constructor(e){this.authConfig=e}getAuthResponse(e){let t="temp:"+this.authConfig.credentialKey;return e.get(t)}generateAuthRequest(){var t,n;let e=this.authConfig.authScheme.type;if(!["oauth2","openIdConnect"].includes(e))return this.authConfig;if((n=(t=this.authConfig.exchangedAuthCredential)==null?void 0:t.oauth2)!=null&&n.authUri)return this.authConfig;if(!this.authConfig.rawAuthCredential)throw new Error(`Auth Scheme ${e} requires authCredential.`);if(!this.authConfig.rawAuthCredential.oauth2)throw new Error(`Auth Scheme ${e} requires oauth2 in authCredential.`);if(this.authConfig.rawAuthCredential.oauth2.authUri)return{credentialKey:this.authConfig.credentialKey,authScheme:this.authConfig.authScheme,rawAuthCredential:this.authConfig.rawAuthCredential,exchangedAuthCredential:this.authConfig.rawAuthCredential};if(!this.authConfig.rawAuthCredential.oauth2.clientId||!this.authConfig.rawAuthCredential.oauth2.clientSecret)throw new Error(`Auth Scheme ${e} requires both clientId and clientSecret in authCredential.oauth2.`);return{credentialKey:this.authConfig.credentialKey,authScheme:this.authConfig.authScheme,rawAuthCredential:this.authConfig.rawAuthCredential,exchangedAuthCredential:this.generateAuthUri()}}generateAuthUri(){return this.authConfig.rawAuthCredential}};var q=class{constructor({hint:e,confirmed:t,payload:n}){this.hint=e!=null?e:"",this.confirmed=t,this.payload=n}};var N=class extends w{constructor({invocationContext:e,eventActions:t,functionCallId:n,toolConfirmation:r}){super({invocationContext:e,eventActions:t}),this.functionCallId=n,this.toolConfirmation=r}get actions(){return this.eventActions}requestCredential(e){if(!this.functionCallId)throw new Error("functionCallId is not set.");let t=new oe(e);this.eventActions.requestedAuthConfigs[this.functionCallId]=t.generateAuthRequest()}getAuthResponse(e){return new oe(e).getAuthResponse(this.state)}listArtifacts(){if(!this.invocationContext.artifactService)throw new Error("Artifact service is not initialized.");return this.invocationContext.artifactService.listArtifactKeys({appName:this.invocationContext.session.appName,userId:this.invocationContext.session.userId,sessionId:this.invocationContext.session.id})}searchMemory(e){if(!this.invocationContext.memoryService)throw new Error("Memory service is not initialized.");return this.invocationContext.memoryService.searchMemory({appName:this.invocationContext.session.appName,userId:this.invocationContext.session.userId,query:e})}requestConfirmation({hint:e,payload:t}){if(!this.functionCallId)throw new Error("functionCallId is not set.");this.eventActions.requestedToolConfirmations[this.functionCallId]=new q({hint:e,confirmed:!1,payload:t})}};var je=(r=>(r[r.DEBUG=0]="DEBUG",r[r.INFO=1]="INFO",r[r.WARN=2]="WARN",r[r.ERROR=3]="ERROR",r))(je||{}),H=1;function vt(o){H=o}var Ue=class{log(e,...t){if(!(e<H))switch(e){case 0:this.debug(...t);break;case 1:this.info(...t);break;case 2:this.warn(...t);break;case 3:this.error(...t);break;default:throw new Error(`Unsupported log level: ${e}`)}}debug(...e){H>0||console.debug(pe(0),...e)}info(...e){H>1||console.info(pe(1),...e)}warn(...e){H>2||console.warn(pe(2),...e)}error(...e){H>3||console.error(pe(3),...e)}},Sn={0:"DEBUG",1:"INFO",2:"WARN",3:"ERROR"},In={0:"\x1B[34m",1:"\x1B[32m",2:"\x1B[33m",3:"\x1B[31m"},Pn="\x1B[0m";function pe(o){return`${In[o]}[ADK ${Sn[o]}]:${Pn}`}var m=new Ue;var Ke="adk-",ge="adk_request_credential",Y="adk_request_confirmation",At={handleFunctionCallList:he};function Ve(){return`${Ke}${X()}`}function bt(o){let e=x(o);if(e)for(let t of e)t.id||(t.id=Ve())}function Tt(o){if(o&&o.parts)for(let e of o.parts)e.functionCall&&e.functionCall.id&&e.functionCall.id.startsWith(Ke)&&(e.functionCall.id=void 0),e.functionResponse&&e.functionResponse.id&&e.functionResponse.id.startsWith(Ke)&&(e.functionResponse.id=void 0)}function xt(o,e){let t=new Set;for(let n of o)n.name&&n.name in e&&e[n.name].isLongRunning&&n.id&&t.add(n.id);return t}function Et(o,e){var r;if(!((r=e.actions)!=null&&r.requestedAuthConfigs))return;let t=[],n=new Set;for(let[i,s]of Object.entries(e.actions.requestedAuthConfigs)){let a={name:ge,args:{function_call_id:i,auth_config:s},id:Ve()};n.add(a.id),t.push({functionCall:a})}return T({invocationId:o.invocationId,author:o.agent.name,branch:o.branch,content:{parts:t,role:e.content.role},longRunningToolIds:Array.from(n)})}function Rt({invocationContext:o,functionCallEvent:e,functionResponseEvent:t}){var s,a;if(!((s=t.actions)!=null&&s.requestedToolConfirmations))return;let n=[],r=new Set,i=x(e);for(let[c,l]of Object.entries(t.actions.requestedToolConfirmations)){let f=(a=i.find(d=>d.id===c))!=null?a:void 0;if(!f)continue;let u={name:Y,args:{originalFunctionCall:f,toolConfirmation:l},id:Ve()};r.add(u.id),n.push({functionCall:u})}return T({invocationId:o.invocationId,author:o.agent.name,branch:o.branch,content:{parts:n,role:t.content.role},longRunningToolIds:Array.from(r)})}async function wn(o,e,t){return m.debug(`callToolAsync ${o.name}`),await o.runAsync({args:e,toolContext:t})}async function St({invocationContext:o,functionCallEvent:e,toolsDict:t,beforeToolCallbacks:n,afterToolCallbacks:r,filters:i,toolConfirmationDict:s}){let a=x(e);return await he({invocationContext:o,functionCalls:a,toolsDict:t,beforeToolCallbacks:n,afterToolCallbacks:r,filters:i,toolConfirmationDict:s})}async function he({invocationContext:o,functionCalls:e,toolsDict:t,beforeToolCallbacks:n,afterToolCallbacks:r,filters:i,toolConfirmationDict:s}){var f;let a=[],c=e.filter(u=>!i||u.id&&i.has(u.id));for(let u of c){let d;s&&u.id&&(d=s[u.id]);let{tool:C,toolContext:v}=kn({invocationContext:o,functionCall:u,toolsDict:t,toolConfirmation:d});m.debug(`execute_tool ${C.name}`);let g=(f=u.args)!=null?f:{},p=null,y;if(p=await o.pluginManager.runBeforeToolCallback({tool:C,toolArgs:g,toolContext:v}),p==null){for(let G of n)if(p=await G({tool:C,args:g,context:v}),p)break}if(p==null)try{p=await wn(C,g,v)}catch(G){if(G instanceof Error){let dt=await o.pluginManager.runOnToolErrorCallback({tool:C,toolArgs:g,toolContext:v,error:G});dt?p=dt:y=G.message}else y=G}let R=await o.pluginManager.runAfterToolCallback({tool:C,toolArgs:g,toolContext:v,result:p});if(R==null){for(let G of r)if(R=await G({tool:C,args:g,context:v,response:p}),R)break}if(R!=null&&(p=R),C.isLongRunning&&!p)continue;y?p={error:y}:(typeof p!="object"||p==null)&&(p={result:p});let ft=T({invocationId:o.invocationId,author:o.agent.name,content:(0,yt.createUserContent)({functionResponse:{id:v.functionCallId,name:C.name,response:p}}),actions:v.actions,branch:o.branch});m.debug("traceToolCall",{tool:C.name,args:g,functionResponseEvent:ft.id}),a.push(ft)}if(!a.length)return null;let l=Ln(a);return a.length>1&&(m.debug("execute_tool (merged)"),m.debug("traceMergedToolCalls",{responseEventId:l.id,functionResponseEvent:l.id})),l}function kn({invocationContext:o,functionCall:e,toolsDict:t,toolConfirmation:n}){if(!e.name||!(e.name in t))throw new Error(`Function ${e.name} is not found in the toolsDict.`);let r=new N({invocationContext:o,functionCallId:e.id||void 0,toolConfirmation:n});return{tool:t[e.name],toolContext:r}}function Ln(o){if(!o.length)throw new Error("No function response events provided.");if(o.length===1)return o[0];let e=[];for(let i of o)i.content&&i.content.parts&&e.push(...i.content.parts);let t=o[0],n=o.map(i=>i.actions||{}),r=mt(n);return T({author:t.author,branch:t.branch,content:{role:"user",parts:e},actions:r,timestamp:t.timestamp})}var Ce=class{constructor(){this.queue=[];this.resolveFnFifoQueue=[];this.isClosed=!1}send(e){if(this.isClosed)throw new Error("Cannot send to a closed queue.");this.resolveFnFifoQueue.length>0?this.resolveFnFifoQueue.shift()(e):this.queue.push(e)}async get(){return this.queue.length>0?this.queue.shift():this.isClosed?{close:!0}:new Promise(e=>{this.resolveFnFifoQueue.push(e)})}close(){if(this.isClosed)return;for(this.isClosed=!0;this.resolveFnFifoQueue.length>0&&this.queue.length>0;){let t=this.resolveFnFifoQueue.shift(),n=this.queue.shift();t(n)}let e={close:!0};for(;this.resolveFnFifoQueue.length>0;)this.resolveFnFifoQueue.shift()(e)}sendContent(e){this.send({content:e})}sendRealtime(e){this.send({blob:e})}sendActivityStart(){this.send({activityStart:{}})}sendActivityEnd(){this.send({activityEnd:{}})}async*[Symbol.asyncIterator](){for(;;){let e=await this.get();if(yield e,e.close)break}}};var Xe=require("zod");var ve="0.2.1";var Mn="google-adk",Bn="gl-typescript",On="remote_reasoning_engine",_n="GOOGLE_CLOUD_AGENT_ENGINE_ID";function Nn(){let o=`${Mn}/${ve}`;!De()&&process.env[_n]&&(o=`${o}+${On}`);let e=`${Bn}/${De()?window.navigator.userAgent:process.version}`;return[o,e]}function It(){return Nn()}var F=class{constructor({model:e}){this.model=e}get trackingHeaders(){let t=It().join(" ");return{"x-goog-api-client":t,"user-agent":t}}maybeAppendUserContent(e){var t;e.contents.length===0&&e.contents.push({role:"user",parts:[{text:"Handle the requests as specified in the System Instruction."}]}),((t=e.contents[e.contents.length-1])==null?void 0:t.role)!=="user"&&e.contents.push({role:"user",parts:[{text:"Continue processing previous requests as instructed. Exit or provide a summary if no more outputs are needed."}]})}};F.supportedModels=[];function re(o,e){o.config||(o.config={});let t=e.join(`
8
8
 
9
9
  `);o.config.systemInstruction?o.config.systemInstruction+=`
10
10
 
11
- `+t:o.config.systemInstruction=t}function Tt(o,e){o.config||(o.config={}),o.config.responseSchema=e,o.config.responseMimeType="application/json"}var $=require("@google/genai");function Et(){return mn("GOOGLE_GENAI_USE_VERTEXAI")?"VERTEX_AI":"GEMINI_API"}function mn(o){if(!process.env)return!1;let e=(process.env[o]||"").toLowerCase();return["true","1"].includes(o.toLowerCase())}var St="0.1.0";var ve=class{constructor(e){this.geminiSession=e}async sendHistory(e){let t=e.filter(n=>{var r;return n.parts&&((r=n.parts[0])==null?void 0:r.text)});t.length>0?this.geminiSession.sendClientContent({turns:t,turnComplete:t[t.length-1].role==="user"}):m.info("no content is sent")}async sendContent(e){if(!e.parts)throw new Error("Content must have parts.");if(e.parts[0].functionResponse){let t=e.parts.map(n=>n.functionResponse).filter(n=>!!n);m.debug("Sending LLM function response:",t),this.geminiSession.sendToolResponse({functionResponses:t})}else m.debug("Sending LLM new content",e),this.geminiSession.sendClientContent({turns:[e],turnComplete:!0})}async sendRealtime(e){m.debug("Sending LLM Blob:",e),this.geminiSession.sendRealtimeInput({media:e})}buildFullTextResponse(e){return{content:{role:"model",parts:[{text:e}]}}}async*receive(){throw new Error("Not Implemented.")}async close(){this.geminiSession.close()}};function Ue(o){var t;let e=o.usageMetadata;if(o.candidates&&o.candidates.length>0){let n=o.candidates[0];return(t=n.content)!=null&&t.parts&&n.content.parts.length>0?{content:n.content,groundingMetadata:n.groundingMetadata,usageMetadata:e,finishReason:n.finishReason}:{errorCode:n.finishReason,errorMessage:n.finishMessage,usageMetadata:e,finishReason:n.finishReason}}return o.promptFeedback?{errorCode:o.promptFeedback.blockReason,errorMessage:o.promptFeedback.blockReasonMessage,usageMetadata:e}:{errorCode:"UNKNOWN_ERROR",errorMessage:"Unknown error.",usageMetadata:e}}var gn="remote_reasoning_engine",hn="GOOGLE_CLOUD_AGENT_ENGINE_ID",W=class extends F{constructor({model:e,apiKey:t,vertexai:n,project:r,location:i,headers:s}){e||(e="gemini-2.5-flash"),super({model:e}),this.project=r,this.location=i,this.apiKey=t,this.headers=s;let a=typeof process=="object";if(this.vertexai=!!n,!this.vertexai&&a){let l=process.env.GOOGLE_GENAI_USE_VERTEXAI;l&&(this.vertexai=l.toLowerCase()==="true"||l==="1")}if(this.vertexai){if(a&&!this.project&&(this.project=process.env.GOOGLE_CLOUD_PROJECT),a&&!this.location&&(this.location=process.env.GOOGLE_CLOUD_LOCATION),!this.project)throw new Error("VertexAI project must be provided via constructor or GOOGLE_CLOUD_PROJECT environment variable.");if(!this.location)throw new Error("VertexAI location must be provided via constructor or GOOGLE_CLOUD_LOCATION environment variable.")}else if(!this.apiKey&&a&&(this.apiKey=process.env.GOOGLE_GENAI_API_KEY||process.env.GEMINI_API_KEY),!this.apiKey)throw new Error("API key must be provided via constructor or GOOGLE_GENAI_API_KEY or GEMINI_API_KEY environment variable.")}async*generateContentAsync(e,t=!1){var n,r,i,s,a,l,c;if(this.preprocessRequest(e),this.maybeAppendUserContent(e),m.info(`Sending out request, model: ${e.model}, backend: ${this.apiBackend}, stream: ${t}`),(n=e.config)!=null&&n.httpOptions&&(e.config.httpOptions.headers={...e.config.httpOptions.headers,...this.trackingHeaders}),t){let f=await this.apiClient.models.generateContentStream({model:(r=e.model)!=null?r:this.model,contents:e.contents,config:e.config}),u="",d="",h,C;for await(let g of f){C=g;let p=Ue(g);h=p.usageMetadata;let v=(s=(i=p.content)==null?void 0:i.parts)==null?void 0:s[0];if(v!=null&&v.text)"thought"in v&&v.thought?u+=v.text:d+=v.text,p.partial=!0;else if((u||d)&&(!v||!v.inlineData)){let S=[];u&&S.push({text:u,thought:!0}),d&&S.push((0,$.createPartFromText)(d)),yield{content:{role:"model",parts:S},usageMetadata:p.usageMetadata},u="",d=""}yield p}if((d||u)&&((l=(a=C==null?void 0:C.candidates)==null?void 0:a[0])==null?void 0:l.finishReason)===$.FinishReason.STOP){let g=[];u&&g.push({text:u,thought:!0}),d&&g.push({text:d}),yield{content:{role:"model",parts:g},usageMetadata:h}}}else{let f=await this.apiClient.models.generateContent({model:(c=e.model)!=null?c:this.model,contents:e.contents,config:e.config});yield Ue(f)}}get apiClient(){if(this._apiClient)return this._apiClient;let e={...this.trackingHeaders,...this.headers};return this.vertexai?this._apiClient=new $.GoogleGenAI({vertexai:this.vertexai,project:this.project,location:this.location,httpOptions:{headers:e}}):this._apiClient=new $.GoogleGenAI({apiKey:this.apiKey,httpOptions:{headers:e}}),this._apiClient}get apiBackend(){return this._apiBackend||(this._apiBackend=this.apiClient.vertexai?"VERTEX_AI":"GEMINI_API"),this._apiBackend}get trackingHeaders(){if(!this._trackingHeaders){let e=`google-adk/${St}`;!_e()&&process.env[hn]&&(e=`${e}+${gn}`);let t=`gl-typescript/${_e()?window.navigator.userAgent:process.version}`,n=`${e} ${t}`;this._trackingHeaders={"x-goog-api-client":n,"user-agent":n}}return this._trackingHeaders}get liveApiVersion(){return this._liveApiVersion||(this._liveApiVersion=this.apiBackend==="VERTEX_AI"?"v1beta1":"v1alpha"),this._liveApiVersion}get liveApiClient(){return this._liveApiClient||(this._liveApiClient=new $.GoogleGenAI({apiKey:this.apiKey,httpOptions:{headers:this.trackingHeaders,apiVersion:this.liveApiVersion}})),this._liveApiClient}async connect(e){var n,r,i,s;(n=e.liveConnectConfig)!=null&&n.httpOptions&&(e.liveConnectConfig.httpOptions.headers||(e.liveConnectConfig.httpOptions.headers={}),Object.assign(e.liveConnectConfig.httpOptions.headers,this.trackingHeaders),e.liveConnectConfig.httpOptions.apiVersion=this.liveApiVersion),(r=e.config)!=null&&r.systemInstruction&&(e.liveConnectConfig.systemInstruction={role:"system",parts:[(0,$.createPartFromText)(e.config.systemInstruction)]}),e.liveConnectConfig.tools=(i=e.config)==null?void 0:i.tools;let t=await this.liveApiClient.live.connect({model:(s=e.model)!=null?s:this.model,config:e.liveConnectConfig,callbacks:{onmessage:()=>{}}});return new ve(t)}preprocessRequest(e){if(this.apiBackend==="GEMINI_API"&&(e.config&&(e.config.labels=void 0),e.contents)){for(let t of e.contents)if(t.parts)for(let n of t.parts)Rt(n.inlineData),Rt(n.fileData)}}};W.supportedModels=[/gemini-.*/,/projects\/.+\/locations\/.+\/endpoints\/.+/,/projects\/.+\/locations\/.+\/publishers\/google\/models\/gemini.+/];function Rt(o){o&&o.displayName&&(o.displayName=void 0)}var je=class{constructor(e){this.maxSize=e,this.cache=new Map}get(e){let t=this.cache.get(e);return t&&(this.cache.delete(e),this.cache.set(e,t)),t}set(e,t){if(this.cache.size>=this.maxSize&&!this.cache.has(e)){let n=this.cache.keys().next().value;n!==void 0&&this.cache.delete(n)}this.cache.set(e,t)}},L=class L{static newLlm(e){return new(L.resolve(e))({model:e})}static _register(e,t){L.llmRegistryDict.has(e)&&m.info(`Updating LLM class for ${e} from ${L.llmRegistryDict.get(e)} to ${t}`),L.llmRegistryDict.set(e,t)}static register(e){for(let t of e.supportedModels)L._register(t,e)}static resolve(e){let t=L.resolveCache.get(e);if(t)return t;for(let[n,r]of L.llmRegistryDict.entries())if(new RegExp(`^${n instanceof RegExp?n.source:n}$`,n instanceof RegExp?n.flags:void 0).test(e))return L.resolveCache.set(e,r),r;throw new Error(`Model ${e} not found.`)}};L.llmRegistryDict=new Map,L.resolveCache=new je(32);var Q=L;Q.register(W);var R=class{constructor(e){var t;this.name=e.name,this.description=e.description,this.isLongRunning=(t=e.isLongRunning)!=null?t:!1}_getDeclaration(){}async processLlmRequest({toolContext:e,llmRequest:t}){let n=this._getDeclaration();if(!n)return;t.toolsDict[this.name]=this;let r=Cn(t);r?(r.functionDeclarations||(r.functionDeclarations=[]),r.functionDeclarations.push(n)):(t.config=t.config||{},t.config.tools=t.config.tools||[],t.config.tools.push({functionDeclarations:[n]}))}get apiVariant(){return Et()}};function Cn(o){var e;return(((e=o.config)==null?void 0:e.tools)||[]).find(t=>"functionDeclarations"in t)}var wt=require("@google/genai"),kt=require("zod");var E=require("@google/genai"),A=require("zod");function It(o){var e;return o!==null&&typeof o=="object"&&((e=o._def)==null?void 0:e.typeName)==="ZodObject"}function D(o){let e=o._def;if(!e)return{};let t=e.description,n={};t&&(n.description=t);let r=i=>(i.description===void 0&&delete i.description,i);switch(e.typeName){case A.z.ZodFirstPartyTypeKind.ZodString:n.type=E.Type.STRING;for(let l of e.checks||[])l.kind==="min"?n.minLength=l.value.toString():l.kind==="max"?n.maxLength=l.value.toString():l.kind==="email"?n.format="email":l.kind==="uuid"?n.format="uuid":l.kind==="url"?n.format="uri":l.kind==="regex"&&(n.pattern=l.regex.source);return r(n);case A.z.ZodFirstPartyTypeKind.ZodNumber:n.type=E.Type.NUMBER;for(let l of e.checks||[])l.kind==="min"?n.minimum=l.value:l.kind==="max"?n.maximum=l.value:l.kind==="int"&&(n.type=E.Type.INTEGER);return r(n);case A.z.ZodFirstPartyTypeKind.ZodBoolean:return n.type=E.Type.BOOLEAN,r(n);case A.z.ZodFirstPartyTypeKind.ZodArray:return n.type=E.Type.ARRAY,n.items=D(e.type),e.minLength&&(n.minItems=e.minLength.value.toString()),e.maxLength&&(n.maxItems=e.maxLength.value.toString()),r(n);case A.z.ZodFirstPartyTypeKind.ZodObject:return ie(o);case A.z.ZodFirstPartyTypeKind.ZodLiteral:let i=typeof e.value;if(n.enum=[e.value.toString()],i==="string")n.type=E.Type.STRING;else if(i==="number")n.type=E.Type.NUMBER;else if(i==="boolean")n.type=E.Type.BOOLEAN;else if(e.value===null)n.type=E.Type.NULL;else throw new Error(`Unsupported ZodLiteral value type: ${i}`);return r(n);case A.z.ZodFirstPartyTypeKind.ZodEnum:return n.type=E.Type.STRING,n.enum=e.values,r(n);case A.z.ZodFirstPartyTypeKind.ZodNativeEnum:return n.type=E.Type.STRING,n.enum=Object.values(e.values),r(n);case A.z.ZodFirstPartyTypeKind.ZodUnion:return n.anyOf=e.options.map(D),r(n);case A.z.ZodFirstPartyTypeKind.ZodOptional:return D(e.innerType);case A.z.ZodFirstPartyTypeKind.ZodNullable:let s=D(e.innerType);return r(s?{anyOf:[s,{type:E.Type.NULL}],...t&&{description:t}}:{type:E.Type.NULL,...t&&{description:t}});case A.z.ZodFirstPartyTypeKind.ZodDefault:let a=D(e.innerType);return a&&(a.default=e.defaultValue()),a;case A.z.ZodFirstPartyTypeKind.ZodBranded:return D(e.type);case A.z.ZodFirstPartyTypeKind.ZodReadonly:return D(e.innerType);case A.z.ZodFirstPartyTypeKind.ZodNull:return n.type=E.Type.NULL,r(n);case A.z.ZodFirstPartyTypeKind.ZodAny:case A.z.ZodFirstPartyTypeKind.ZodUnknown:return r({...t&&{description:t}});default:throw new Error(`Unsupported Zod type: ${e.typeName}`)}}function ie(o){if(o._def.typeName!==A.z.ZodFirstPartyTypeKind.ZodObject)throw new Error("Expected a ZodObject");let e=o.shape,t={},n=[];for(let s in e){let a=e[s],l=D(a);l&&(t[s]=l);let c=a,f=!1;for(;c._def.typeName===A.z.ZodFirstPartyTypeKind.ZodOptional||c._def.typeName===A.z.ZodFirstPartyTypeKind.ZodDefault;)f=!0,c=c._def.innerType;f||n.push(s)}let r=o._def.catchall,i=!1;return r&&r._def.typeName!==A.z.ZodFirstPartyTypeKind.ZodNever?i=D(r)||!0:i=o._def.unknownKeys==="passthrough",{type:E.Type.OBJECT,properties:t,required:n.length>0?n:[],...o._def.description?{description:o._def.description}:{}}}function vn(o){return o===void 0?{type:wt.Type.OBJECT,properties:{}}:It(o)?ie(o):o}var B=class extends R{constructor(e){var n;let t=(n=e.name)!=null?n:e.execute.name;if(!t)throw new Error("Tool name cannot be empty. Either name the `execute` function or provide a `name`.");super({name:t,description:e.description,isLongRunning:e.isLongRunning}),this.execute=e.execute,this.parameters=e.parameters}_getDeclaration(){return{name:this.name,description:this.description,parameters:vn(this.parameters)}}async runAsync(e){try{let t=e.args;return this.parameters instanceof kt.ZodObject&&(t=this.parameters.parse(e.args)),await this.execute(t,e.toolContext)}catch(t){let n=t instanceof Error?t.message:String(t);throw new Error(`Error in tool '${this.name}': ${n}`)}}};var U=class{};function se(o){if(o!==void 0)return JSON.parse(JSON.stringify(o))}function Ke(o,e,t){var s,a,l;let n=[];for(let c of o)!((s=c.content)!=null&&s.role)||((l=(a=c.content.parts)==null?void 0:a[0])==null?void 0:l.text)===""||t&&c.branch&&!t.startsWith(c.branch)||yn(c)||An(c)||n.push(Lt(e,c)?bn(c):c);let r=xn(n);r=Tn(r);let i=[];for(let c of r){let f=se(c.content);vt(f),i.push(f)}return i}function Pt(o,e,t){for(let n=o.length-1;n>=0;n--){let r=o[n];if(r.author==="user"||Lt(e,r))return Ke(o.slice(n),e,t)}return[]}function yn(o){var e,t,n;if(!((e=o.content)!=null&&e.parts))return!1;for(let r of o.content.parts)if(((t=r.functionCall)==null?void 0:t.name)===ge||((n=r.functionResponse)==null?void 0:n.name)===ge)return!0;return!1}function An(o){var e,t,n;if(!((e=o.content)!=null&&e.parts))return!1;for(let r of o.content.parts)if(((t=r.functionCall)==null?void 0:t.name)===Y||((n=r.functionResponse)==null?void 0:n.name)===Y)return!0;return!1}function Lt(o,e){return!!o&&e.author!==o&&e.author!=="user"}function bn(o){var t,n,r,i,s;if(!((t=o.content)!=null&&t.parts))return o;let e={role:"user",parts:[{text:"For context:"}]};for(let a of o.content.parts)a.text&&!a.thought?(n=e.parts)==null||n.push({text:`[${o.author}] said: ${a.text}`}):a.functionCall?(r=e.parts)==null||r.push({text:`[${o.author}] called tool \`${a.functionCall.name}\` with parameters: ${a.functionCall.args}`}):a.functionResponse?(i=e.parts)==null||i.push({text:`[${o.author}] tool \`${a.functionResponse.name}\` returned result: ${a.functionResponse.response}`}):(s=e.parts)==null||s.push(a);return x({invocationId:o.invocationId,author:"user",content:e,branch:o.branch,timestamp:o.timestamp})}function Mt(o){var r;if(o.length===0)throw new Error("Cannot merge an empty list of events.");let e=x(o[0]),t=((r=e.content)==null?void 0:r.parts)||[];if(t.length===0)throw new Error("There should be at least one function_response part.");let n={};for(let i=0;i<t.length;i++){let s=t[i];s.functionResponse&&s.functionResponse.id&&(n[s.functionResponse.id]=i)}for(let i of o.slice(1)){if(!i.content||!i.content.parts)throw new Error("There should be at least one function_response part.");for(let s of i.content.parts)if(s.functionResponse&&s.functionResponse.id){let a=s.functionResponse.id;a in n?t[n[a]]=s:(t.push(s),n[a]=t.length-1)}else t.push(s)}return e}function xn(o){if(o.length===0)return o;let e=o[o.length-1],t=I(e);if(!(t!=null&&t.length))return o;let n=new Set(t.filter(l=>!!l.id).map(l=>l.id)),r=o.at(-2);if(r){let l=T(r);if(l){for(let c of l)if(c.id&&n.has(c.id))return o}}let i=-1;for(let l=o.length-2;l>=0;l--){let c=o[l],f=T(c);if(f!=null&&f.length){for(let u of f)if(u.id&&n.has(u.id)){i=l;let d=new Set(f.map(C=>C.id).filter(C=>!!C));if(!Array.from(n).every(C=>d.has(C)))throw new Error(`Last response event should only contain the responses for the function calls in the same function call event. Function call ids found : ${Array.from(d).join(", ")}, function response ids provided: ${Array.from(n).join(", ")}`);n=d;break}}}if(i===-1)throw new Error(`No function call event found for function responses ids: ${Array.from(n).join(", ")}`);let s=[];for(let l=i+1;l<o.length-1;l++){let c=o[l],f=I(c);f&&f.some(u=>u.id&&n.has(u.id))&&s.push(c)}s.push(o[o.length-1]);let a=o.slice(0,i+1);return a.push(Mt(s)),a}function Tn(o){let e=new Map;for(let n=0;n<o.length;n++){let r=o[n],i=I(r);if(i!=null&&i.length)for(let s of i)s.id&&e.set(s.id,n)}let t=[];for(let n of o){if(I(n).length>0)continue;let r=T(n);if(r!=null&&r.length){let i=new Set;for(let s of r){let a=s.id;a&&e.has(a)&&i.add(e.get(a))}if(t.push(n),i.size===0)continue;if(i.size===1){let[s]=[...i];t.push(o[s])}else{let a=Array.from(i).sort((l,c)=>l-c).map(l=>o[l]);t.push(Mt(a))}}else t.push(n)}return t}async function Ve(o,e){let t=e.invocationContext;async function n(l){let c=l[0].replace(/^\{+/,"").replace(/\}+$/,"").trim(),f=c.endsWith("?");if(f&&(c=c.slice(0,-1)),c.startsWith("artifact.")){let u=c.substring(9);if(t.artifactService===void 0)throw new Error("Artifact service is not initialized.");let d=await t.artifactService.loadArtifact({appName:t.session.appName,userId:t.session.userId,sessionId:t.session.id,filename:u});if(!d)throw new Error(`Artifact ${u} not found.`);return String(d)}if(!Rn(c))return l[0];if(c in t.session.state)return String(t.session.state[c]);if(f)return"";throw new Error(`Context variable not found: \`${c}\`.`)}let r=/\{+[^{}]*}+/g,i=[],s=0,a=o.matchAll(r);for(let l of a){i.push(o.slice(s,l.index));let c=await n(l);i.push(c),s=l.index+l[0].length}return i.push(o.slice(s)),i.join("")}var En=/^[a-zA-Z_][a-zA-Z0-9_]*$/;function Bt(o){return o===""||o===void 0?!1:En.test(o)}var Sn=[y.APP_PREFIX,y.USER_PREFIX,y.TEMP_PREFIX];function Rn(o){let e=o.split(":");return e.length===0||e.length>2?!1:e.length===1?Bt(o):Sn.includes(e[0]+":")?Bt(e[1]):!1}var ye=(n=>(n.NONE="none",n.SSE="sse",n.BIDI="bidi",n))(ye||{});function Nt(o={}){return{saveInputBlobsAsArtifacts:!1,supportCfc:!1,enableAffectiveDialog:!1,streamingMode:"none",maxLlmCalls:In(o.maxLlmCalls||500),...o}}function In(o){if(o>Number.MAX_SAFE_INTEGER)throw new Error(`maxLlmCalls should be less than ${Number.MAX_SAFE_INTEGER}.`);return o<=0&&m.warn("maxLlmCalls is less than or equal to 0. This will result in no enforcement on total number of llm calls that will be made for a run. This may not be ideal, as this could result in a never ending communication between the model and the agent in certain cases."),o}var _t="adk_agent_name";async function Ot(o,e){return o instanceof R?[o]:await o.getTools(e)}var ze=class extends U{async*runAsync(e,t){var r;let n=e.agent;n instanceof b&&(t.model=n.canonicalModel.model,t.config={...(r=n.generateContentConfig)!=null?r:{}},n.outputSchema&&Tt(t,n.outputSchema),e.runConfig&&(t.liveConnectConfig.responseModalities=e.runConfig.responseModalities,t.liveConnectConfig.speechConfig=e.runConfig.speechConfig,t.liveConnectConfig.outputAudioTranscription=e.runConfig.outputAudioTranscription,t.liveConnectConfig.inputAudioTranscription=e.runConfig.inputAudioTranscription,t.liveConnectConfig.realtimeInputConfig=e.runConfig.realtimeInputConfig,t.liveConnectConfig.enableAffectiveDialog=e.runConfig.enableAffectiveDialog,t.liveConnectConfig.proactivity=e.runConfig.proactivity))}},wn=new ze,We=class extends U{async*runAsync(e,t){let n=e.agent,r=[`You are an agent. Your internal name is "${n.name}".`];n.description&&r.push(`The description about you is "${n.description}"`),re(t,r)}},kn=new We,Qe=class extends U{async*runAsync(e,t){let n=e.agent;if(!(n instanceof b)||!(n.rootAgent instanceof b))return;let r=n.rootAgent;if(r instanceof b&&r.globalInstruction){let{instruction:i,requireStateInjection:s}=await r.canonicalGlobalInstruction(new w(e)),a=i;s&&(a=await Ve(i,new w(e))),re(t,[a])}if(n.instruction){let{instruction:i,requireStateInjection:s}=await n.canonicalInstruction(new w(e)),a=i;s&&(a=await Ve(i,new w(e))),re(t,[a])}}},Pn=new Qe,He=class{async*runAsync(e,t){let n=e.agent;!n||!(n instanceof b)||(n.includeContents==="default"?t.contents=Ke(e.session.events,n.name,e.branch):t.contents=Pt(e.session.events,n.name,e.branch))}},Ln=new He,Xe=class extends U{constructor(){super(...arguments);this.toolName="transfer_to_agent";this.tool=new B({name:this.toolName,description:"Transfer the question to another agent. This tool hands off control to another agent when it is more suitable to answer the user question according to the agent description.",parameters:Ze.z.object({agentName:Ze.z.string().describe("the agent name to transfer to.")}),execute:function(t,n){if(!n)throw new Error("toolContext is required.");n.actions.transferToAgent=t.agentName}})}async*runAsync(t,n){if(!(t.agent instanceof b))return;let r=this.getTransferTargets(t.agent);if(!r.length)return;re(n,[this.buildTargetAgentsInstructions(t.agent,r)]);let i=new O({invocationContext:t});await this.tool.processLlmRequest({toolContext:i,llmRequest:n})}buildTargetAgentsInfo(t){return`
11
+ `+t:o.config.systemInstruction=t}function Pt(o,e){o.config||(o.config={}),o.config.responseSchema=e,o.config.responseMimeType="application/json"}var $=require("@google/genai");function wt(){return Fn("GOOGLE_GENAI_USE_VERTEXAI")?"VERTEX_AI":"GEMINI_API"}function Fn(o){if(!process.env)return!1;let e=(process.env[o]||"").toLowerCase();return["true","1"].includes(o.toLowerCase())}var ye=class{constructor(e){this.geminiSession=e}async sendHistory(e){let t=e.filter(n=>{var r;return n.parts&&((r=n.parts[0])==null?void 0:r.text)});t.length>0?this.geminiSession.sendClientContent({turns:t,turnComplete:t[t.length-1].role==="user"}):m.info("no content is sent")}async sendContent(e){if(!e.parts)throw new Error("Content must have parts.");if(e.parts[0].functionResponse){let t=e.parts.map(n=>n.functionResponse).filter(n=>!!n);m.debug("Sending LLM function response:",t),this.geminiSession.sendToolResponse({functionResponses:t})}else m.debug("Sending LLM new content",e),this.geminiSession.sendClientContent({turns:[e],turnComplete:!0})}async sendRealtime(e){m.debug("Sending LLM Blob:",e),this.geminiSession.sendRealtimeInput({media:e})}buildFullTextResponse(e){return{content:{role:"model",parts:[{text:e}]}}}async*receive(){throw new Error("Not Implemented.")}async close(){this.geminiSession.close()}};function Ze(o){var t;let e=o.usageMetadata;if(o.candidates&&o.candidates.length>0){let n=o.candidates[0];return(t=n.content)!=null&&t.parts&&n.content.parts.length>0?{content:n.content,groundingMetadata:n.groundingMetadata,usageMetadata:e,finishReason:n.finishReason}:{errorCode:n.finishReason,errorMessage:n.finishMessage,usageMetadata:e,finishReason:n.finishReason}}return o.promptFeedback?{errorCode:o.promptFeedback.blockReason,errorMessage:o.promptFeedback.blockReasonMessage,usageMetadata:e}:{errorCode:"UNKNOWN_ERROR",errorMessage:"Unknown error.",usageMetadata:e}}var W=class extends F{constructor({model:e,apiKey:t,vertexai:n,project:r,location:i,headers:s}){e||(e="gemini-2.5-flash"),super({model:e}),this.project=r,this.location=i,this.apiKey=t,this.headers=s;let a=typeof process=="object";if(this.vertexai=!!n,!this.vertexai&&a){let c=process.env.GOOGLE_GENAI_USE_VERTEXAI;c&&(this.vertexai=c.toLowerCase()==="true"||c==="1")}if(this.vertexai){if(a&&!this.project&&(this.project=process.env.GOOGLE_CLOUD_PROJECT),a&&!this.location&&(this.location=process.env.GOOGLE_CLOUD_LOCATION),!this.project)throw new Error("VertexAI project must be provided via constructor or GOOGLE_CLOUD_PROJECT environment variable.");if(!this.location)throw new Error("VertexAI location must be provided via constructor or GOOGLE_CLOUD_LOCATION environment variable.")}else if(!this.apiKey&&a&&(this.apiKey=process.env.GOOGLE_GENAI_API_KEY||process.env.GEMINI_API_KEY),!this.apiKey)throw new Error("API key must be provided via constructor or GOOGLE_GENAI_API_KEY or GEMINI_API_KEY environment variable.")}async*generateContentAsync(e,t=!1){var n,r,i,s,a,c,l;if(this.preprocessRequest(e),this.maybeAppendUserContent(e),m.info(`Sending out request, model: ${e.model}, backend: ${this.apiBackend}, stream: ${t}`),(n=e.config)!=null&&n.httpOptions&&(e.config.httpOptions.headers={...e.config.httpOptions.headers,...this.trackingHeaders}),t){let f=await this.apiClient.models.generateContentStream({model:(r=e.model)!=null?r:this.model,contents:e.contents,config:e.config}),u="",d="",C,v;for await(let g of f){v=g;let p=Ze(g);C=p.usageMetadata;let y=(s=(i=p.content)==null?void 0:i.parts)==null?void 0:s[0];if(y!=null&&y.text)"thought"in y&&y.thought?u+=y.text:d+=y.text,p.partial=!0;else if((u||d)&&(!y||!y.inlineData)){let R=[];u&&R.push({text:u,thought:!0}),d&&R.push((0,$.createPartFromText)(d)),yield{content:{role:"model",parts:R},usageMetadata:p.usageMetadata},u="",d=""}yield p}if((d||u)&&((c=(a=v==null?void 0:v.candidates)==null?void 0:a[0])==null?void 0:c.finishReason)===$.FinishReason.STOP){let g=[];u&&g.push({text:u,thought:!0}),d&&g.push({text:d}),yield{content:{role:"model",parts:g},usageMetadata:C}}}else{let f=await this.apiClient.models.generateContent({model:(l=e.model)!=null?l:this.model,contents:e.contents,config:e.config});yield Ze(f)}}get apiClient(){if(this._apiClient)return this._apiClient;let e={...this.trackingHeaders,...this.headers};return this.vertexai?this._apiClient=new $.GoogleGenAI({vertexai:this.vertexai,project:this.project,location:this.location,httpOptions:{headers:e}}):this._apiClient=new $.GoogleGenAI({apiKey:this.apiKey,httpOptions:{headers:e}}),this._apiClient}get apiBackend(){return this._apiBackend||(this._apiBackend=this.apiClient.vertexai?"VERTEX_AI":"GEMINI_API"),this._apiBackend}get liveApiVersion(){return this._liveApiVersion||(this._liveApiVersion=this.apiBackend==="VERTEX_AI"?"v1beta1":"v1alpha"),this._liveApiVersion}get liveApiClient(){return this._liveApiClient||(this._liveApiClient=new $.GoogleGenAI({apiKey:this.apiKey,httpOptions:{headers:this.trackingHeaders,apiVersion:this.liveApiVersion}})),this._liveApiClient}async connect(e){var n,r,i,s;(n=e.liveConnectConfig)!=null&&n.httpOptions&&(e.liveConnectConfig.httpOptions.headers||(e.liveConnectConfig.httpOptions.headers={}),Object.assign(e.liveConnectConfig.httpOptions.headers,this.trackingHeaders),e.liveConnectConfig.httpOptions.apiVersion=this.liveApiVersion),(r=e.config)!=null&&r.systemInstruction&&(e.liveConnectConfig.systemInstruction={role:"system",parts:[(0,$.createPartFromText)(e.config.systemInstruction)]}),e.liveConnectConfig.tools=(i=e.config)==null?void 0:i.tools;let t=await this.liveApiClient.live.connect({model:(s=e.model)!=null?s:this.model,config:e.liveConnectConfig,callbacks:{onmessage:()=>{}}});return new ye(t)}preprocessRequest(e){if(this.apiBackend==="GEMINI_API"&&(e.config&&(e.config.labels=void 0),e.contents)){for(let t of e.contents)if(t.parts)for(let n of t.parts)kt(n.inlineData),kt(n.fileData)}}};W.supportedModels=[/gemini-.*/,/projects\/.+\/locations\/.+\/endpoints\/.+/,/projects\/.+\/locations\/.+\/publishers\/google\/models\/gemini.+/];function kt(o){o&&o.displayName&&(o.displayName=void 0)}var ze=class{constructor(e){this.maxSize=e,this.cache=new Map}get(e){let t=this.cache.get(e);return t&&(this.cache.delete(e),this.cache.set(e,t)),t}set(e,t){if(this.cache.size>=this.maxSize&&!this.cache.has(e)){let n=this.cache.keys().next().value;n!==void 0&&this.cache.delete(n)}this.cache.set(e,t)}},L=class L{static newLlm(e){return new(L.resolve(e))({model:e})}static _register(e,t){L.llmRegistryDict.has(e)&&m.info(`Updating LLM class for ${e} from ${L.llmRegistryDict.get(e)} to ${t}`),L.llmRegistryDict.set(e,t)}static register(e){for(let t of e.supportedModels)L._register(t,e)}static resolve(e){let t=L.resolveCache.get(e);if(t)return t;for(let[n,r]of L.llmRegistryDict.entries())if(new RegExp(`^${n instanceof RegExp?n.source:n}$`,n instanceof RegExp?n.flags:void 0).test(e))return L.resolveCache.set(e,r),r;throw new Error(`Model ${e} not found.`)}};L.llmRegistryDict=new Map,L.resolveCache=new ze(32);var Q=L;Q.register(W);var S=class{constructor(e){var t;this.name=e.name,this.description=e.description,this.isLongRunning=(t=e.isLongRunning)!=null?t:!1}_getDeclaration(){}async processLlmRequest({toolContext:e,llmRequest:t}){let n=this._getDeclaration();if(!n)return;t.toolsDict[this.name]=this;let r=Dn(t);r?(r.functionDeclarations||(r.functionDeclarations=[]),r.functionDeclarations.push(n)):(t.config=t.config||{},t.config.tools=t.config.tools||[],t.config.tools.push({functionDeclarations:[n]}))}get apiVariant(){return wt()}};function Dn(o){var e;return(((e=o.config)==null?void 0:e.tools)||[]).find(t=>"functionDeclarations"in t)}var Mt=require("@google/genai"),Bt=require("zod");var E=require("@google/genai"),A=require("zod");function Lt(o){var e;return o!==null&&typeof o=="object"&&((e=o._def)==null?void 0:e.typeName)==="ZodObject"}function D(o){let e=o._def;if(!e)return{};let t=e.description,n={};t&&(n.description=t);let r=i=>(i.description===void 0&&delete i.description,i);switch(e.typeName){case A.z.ZodFirstPartyTypeKind.ZodString:n.type=E.Type.STRING;for(let c of e.checks||[])c.kind==="min"?n.minLength=c.value.toString():c.kind==="max"?n.maxLength=c.value.toString():c.kind==="email"?n.format="email":c.kind==="uuid"?n.format="uuid":c.kind==="url"?n.format="uri":c.kind==="regex"&&(n.pattern=c.regex.source);return r(n);case A.z.ZodFirstPartyTypeKind.ZodNumber:n.type=E.Type.NUMBER;for(let c of e.checks||[])c.kind==="min"?n.minimum=c.value:c.kind==="max"?n.maximum=c.value:c.kind==="int"&&(n.type=E.Type.INTEGER);return r(n);case A.z.ZodFirstPartyTypeKind.ZodBoolean:return n.type=E.Type.BOOLEAN,r(n);case A.z.ZodFirstPartyTypeKind.ZodArray:return n.type=E.Type.ARRAY,n.items=D(e.type),e.minLength&&(n.minItems=e.minLength.value.toString()),e.maxLength&&(n.maxItems=e.maxLength.value.toString()),r(n);case A.z.ZodFirstPartyTypeKind.ZodObject:return ie(o);case A.z.ZodFirstPartyTypeKind.ZodLiteral:let i=typeof e.value;if(n.enum=[e.value.toString()],i==="string")n.type=E.Type.STRING;else if(i==="number")n.type=E.Type.NUMBER;else if(i==="boolean")n.type=E.Type.BOOLEAN;else if(e.value===null)n.type=E.Type.NULL;else throw new Error(`Unsupported ZodLiteral value type: ${i}`);return r(n);case A.z.ZodFirstPartyTypeKind.ZodEnum:return n.type=E.Type.STRING,n.enum=e.values,r(n);case A.z.ZodFirstPartyTypeKind.ZodNativeEnum:return n.type=E.Type.STRING,n.enum=Object.values(e.values),r(n);case A.z.ZodFirstPartyTypeKind.ZodUnion:return n.anyOf=e.options.map(D),r(n);case A.z.ZodFirstPartyTypeKind.ZodOptional:return D(e.innerType);case A.z.ZodFirstPartyTypeKind.ZodNullable:let s=D(e.innerType);return r(s?{anyOf:[s,{type:E.Type.NULL}],...t&&{description:t}}:{type:E.Type.NULL,...t&&{description:t}});case A.z.ZodFirstPartyTypeKind.ZodDefault:let a=D(e.innerType);return a&&(a.default=e.defaultValue()),a;case A.z.ZodFirstPartyTypeKind.ZodBranded:return D(e.type);case A.z.ZodFirstPartyTypeKind.ZodReadonly:return D(e.innerType);case A.z.ZodFirstPartyTypeKind.ZodNull:return n.type=E.Type.NULL,r(n);case A.z.ZodFirstPartyTypeKind.ZodAny:case A.z.ZodFirstPartyTypeKind.ZodUnknown:return r({...t&&{description:t}});default:throw new Error(`Unsupported Zod type: ${e.typeName}`)}}function ie(o){if(o._def.typeName!==A.z.ZodFirstPartyTypeKind.ZodObject)throw new Error("Expected a ZodObject");let e=o.shape,t={},n=[];for(let s in e){let a=e[s],c=D(a);c&&(t[s]=c);let l=a,f=!1;for(;l._def.typeName===A.z.ZodFirstPartyTypeKind.ZodOptional||l._def.typeName===A.z.ZodFirstPartyTypeKind.ZodDefault;)f=!0,l=l._def.innerType;f||n.push(s)}let r=o._def.catchall,i=!1;return r&&r._def.typeName!==A.z.ZodFirstPartyTypeKind.ZodNever?i=D(r)||!0:i=o._def.unknownKeys==="passthrough",{type:E.Type.OBJECT,properties:t,required:n.length>0?n:[],...o._def.description?{description:o._def.description}:{}}}function Gn(o){return o===void 0?{type:Mt.Type.OBJECT,properties:{}}:Lt(o)?ie(o):o}var B=class extends S{constructor(e){var n;let t=(n=e.name)!=null?n:e.execute.name;if(!t)throw new Error("Tool name cannot be empty. Either name the `execute` function or provide a `name`.");super({name:t,description:e.description,isLongRunning:e.isLongRunning}),this.execute=e.execute,this.parameters=e.parameters}_getDeclaration(){return{name:this.name,description:this.description,parameters:Gn(this.parameters)}}async runAsync(e){try{let t=e.args;return this.parameters instanceof Bt.ZodObject&&(t=this.parameters.parse(e.args)),await this.execute(t,e.toolContext)}catch(t){let n=t instanceof Error?t.message:String(t);throw new Error(`Error in tool '${this.name}': ${n}`)}}};var U=class{};function se(o){if(o!==void 0)return JSON.parse(JSON.stringify(o))}function We(o,e,t){var s,a,c;let n=[];for(let l of o)!((s=l.content)!=null&&s.role)||((c=(a=l.content.parts)==null?void 0:a[0])==null?void 0:c.text)===""||t&&l.branch&&!t.startsWith(l.branch)||qn(l)||Un(l)||n.push(Nt(e,l)?jn(l):l);let r=Kn(n);r=Vn(r);let i=[];for(let l of r){let f=se(l.content);Tt(f),i.push(f)}return i}function _t(o,e,t){for(let n=o.length-1;n>=0;n--){let r=o[n];if(r.author==="user"||Nt(e,r))return We(o.slice(n),e,t)}return[]}function qn(o){var e,t,n;if(!((e=o.content)!=null&&e.parts))return!1;for(let r of o.content.parts)if(((t=r.functionCall)==null?void 0:t.name)===ge||((n=r.functionResponse)==null?void 0:n.name)===ge)return!0;return!1}function Un(o){var e,t,n;if(!((e=o.content)!=null&&e.parts))return!1;for(let r of o.content.parts)if(((t=r.functionCall)==null?void 0:t.name)===Y||((n=r.functionResponse)==null?void 0:n.name)===Y)return!0;return!1}function Nt(o,e){return!!o&&e.author!==o&&e.author!=="user"}function jn(o){var t,n,r,i,s,a;if(!((n=(t=o.content)==null?void 0:t.parts)!=null&&n.length))return o;let e={role:"user",parts:[{text:"For context:"}]};for(let c of o.content.parts)if(c.text&&!c.thought)(r=e.parts)==null||r.push({text:`[${o.author}] said: ${c.text}`});else if(c.functionCall){let l=Ot(c.functionCall.args);(i=e.parts)==null||i.push({text:`[${o.author}] called tool \`${c.functionCall.name}\` with parameters: ${l}`})}else if(c.functionResponse){let l=Ot(c.functionResponse.response);(s=e.parts)==null||s.push({text:`[${o.author}] tool \`${c.functionResponse.name}\` returned result: ${l}`})}else(a=e.parts)==null||a.push(c);return T({invocationId:o.invocationId,author:"user",content:e,branch:o.branch,timestamp:o.timestamp})}function Ft(o){var r;if(o.length===0)throw new Error("Cannot merge an empty list of events.");let e=T(o[0]),t=((r=e.content)==null?void 0:r.parts)||[];if(t.length===0)throw new Error("There should be at least one function_response part.");let n={};for(let i=0;i<t.length;i++){let s=t[i];s.functionResponse&&s.functionResponse.id&&(n[s.functionResponse.id]=i)}for(let i of o.slice(1)){if(!i.content||!i.content.parts)throw new Error("There should be at least one function_response part.");for(let s of i.content.parts)if(s.functionResponse&&s.functionResponse.id){let a=s.functionResponse.id;a in n?t[n[a]]=s:(t.push(s),n[a]=t.length-1)}else t.push(s)}return e}function Kn(o){if(o.length===0)return o;let e=o[o.length-1],t=I(e);if(!(t!=null&&t.length))return o;let n=new Set(t.filter(c=>!!c.id).map(c=>c.id)),r=o.at(-2);if(r){let c=x(r);if(c){for(let l of c)if(l.id&&n.has(l.id))return o}}let i=-1;for(let c=o.length-2;c>=0;c--){let l=o[c],f=x(l);if(f!=null&&f.length){for(let u of f)if(u.id&&n.has(u.id)){i=c;let d=new Set(f.map(v=>v.id).filter(v=>!!v));if(!Array.from(n).every(v=>d.has(v)))throw new Error(`Last response event should only contain the responses for the function calls in the same function call event. Function call ids found : ${Array.from(d).join(", ")}, function response ids provided: ${Array.from(n).join(", ")}`);n=d;break}}}if(i===-1)throw new Error(`No function call event found for function responses ids: ${Array.from(n).join(", ")}`);let s=[];for(let c=i+1;c<o.length-1;c++){let l=o[c],f=I(l);f&&f.some(u=>u.id&&n.has(u.id))&&s.push(l)}s.push(o[o.length-1]);let a=o.slice(0,i+1);return a.push(Ft(s)),a}function Vn(o){let e=new Map;for(let n=0;n<o.length;n++){let r=o[n],i=I(r);if(i!=null&&i.length)for(let s of i)s.id&&e.set(s.id,n)}let t=[];for(let n of o){if(I(n).length>0)continue;let r=x(n);if(r!=null&&r.length){let i=new Set;for(let s of r){let a=s.id;a&&e.has(a)&&i.add(e.get(a))}if(t.push(n),i.size===0)continue;if(i.size===1){let[s]=[...i];t.push(o[s])}else{let a=Array.from(i).sort((c,l)=>c-l).map(c=>o[c]);t.push(Ft(a))}}else t.push(n)}return t}function Ot(o){if(typeof o=="string")return o;try{return JSON.stringify(o)}catch{return String(o)}}async function Qe(o,e){let t=e.invocationContext;async function n(c){let l=c[0].replace(/^\{+/,"").replace(/\}+$/,"").trim(),f=l.endsWith("?");if(f&&(l=l.slice(0,-1)),l.startsWith("artifact.")){let u=l.substring(9);if(t.artifactService===void 0)throw new Error("Artifact service is not initialized.");let d=await t.artifactService.loadArtifact({appName:t.session.appName,userId:t.session.userId,sessionId:t.session.id,filename:u});if(!d)throw new Error(`Artifact ${u} not found.`);return String(d)}if(!Wn(l))return c[0];if(l in t.session.state)return String(t.session.state[l]);if(f)return"";throw new Error(`Context variable not found: \`${l}\`.`)}let r=/\{+[^{}]*}+/g,i=[],s=0,a=o.matchAll(r);for(let c of a){i.push(o.slice(s,c.index));let l=await n(c);i.push(l),s=c.index+c[0].length}return i.push(o.slice(s)),i.join("")}var Zn=/^[a-zA-Z_][a-zA-Z0-9_]*$/;function $t(o){return o===""||o===void 0?!1:Zn.test(o)}var zn=[h.APP_PREFIX,h.USER_PREFIX,h.TEMP_PREFIX];function Wn(o){let e=o.split(":");return e.length===0||e.length>2?!1:e.length===1?$t(o):zn.includes(e[0]+":")?$t(e[1]):!1}var Ae=(n=>(n.NONE="none",n.SSE="sse",n.BIDI="bidi",n))(Ae||{});function Dt(o={}){return{saveInputBlobsAsArtifacts:!1,supportCfc:!1,enableAffectiveDialog:!1,streamingMode:"none",maxLlmCalls:Qn(o.maxLlmCalls||500),...o}}function Qn(o){if(o>Number.MAX_SAFE_INTEGER)throw new Error(`maxLlmCalls should be less than ${Number.MAX_SAFE_INTEGER}.`);return o<=0&&m.warn("maxLlmCalls is less than or equal to 0. This will result in no enforcement on total number of llm calls that will be made for a run. This may not be ideal, as this could result in a never ending communication between the model and the agent in certain cases."),o}var Gt="adk_agent_name";async function qt(o,e){return o instanceof S?[o]:await o.getTools(e)}var He=class extends U{async*runAsync(e,t){var r;let n=e.agent;n instanceof b&&(t.model=n.canonicalModel.model,t.config={...(r=n.generateContentConfig)!=null?r:{}},n.outputSchema&&Pt(t,n.outputSchema),e.runConfig&&(t.liveConnectConfig.responseModalities=e.runConfig.responseModalities,t.liveConnectConfig.speechConfig=e.runConfig.speechConfig,t.liveConnectConfig.outputAudioTranscription=e.runConfig.outputAudioTranscription,t.liveConnectConfig.inputAudioTranscription=e.runConfig.inputAudioTranscription,t.liveConnectConfig.realtimeInputConfig=e.runConfig.realtimeInputConfig,t.liveConnectConfig.enableAffectiveDialog=e.runConfig.enableAffectiveDialog,t.liveConnectConfig.proactivity=e.runConfig.proactivity))}},Xn=new He,Ye=class extends U{async*runAsync(e,t){let n=e.agent,r=[`You are an agent. Your internal name is "${n.name}".`];n.description&&r.push(`The description about you is "${n.description}"`),re(t,r)}},Hn=new Ye,Je=class extends U{async*runAsync(e,t){let n=e.agent;if(!(n instanceof b)||!(n.rootAgent instanceof b))return;let r=n.rootAgent;if(r instanceof b&&r.globalInstruction){let{instruction:i,requireStateInjection:s}=await r.canonicalGlobalInstruction(new P(e)),a=i;s&&(a=await Qe(i,new P(e))),re(t,[a])}if(n.instruction){let{instruction:i,requireStateInjection:s}=await n.canonicalInstruction(new P(e)),a=i;s&&(a=await Qe(i,new P(e))),re(t,[a])}}},Yn=new Je,et=class{async*runAsync(e,t){let n=e.agent;!n||!(n instanceof b)||(n.includeContents==="default"?t.contents=We(e.session.events,n.name,e.branch):t.contents=_t(e.session.events,n.name,e.branch))}},Jn=new et,tt=class extends U{constructor(){super(...arguments);this.toolName="transfer_to_agent";this.tool=new B({name:this.toolName,description:"Transfer the question to another agent. This tool hands off control to another agent when it is more suitable to answer the user question according to the agent description.",parameters:Xe.z.object({agentName:Xe.z.string().describe("the agent name to transfer to.")}),execute:function(t,n){if(!n)throw new Error("toolContext is required.");return n.actions.transferToAgent=t.agentName,"Transfer queued"}})}async*runAsync(t,n){if(!(t.agent instanceof b))return;let r=this.getTransferTargets(t.agent);if(!r.length)return;re(n,[this.buildTargetAgentsInstructions(t.agent,r)]);let i=new N({invocationContext:t});await this.tool.processLlmRequest({toolContext:i,llmRequest:n})}buildTargetAgentsInfo(t){return`
12
12
  Agent name: ${t.name}
13
13
  Agent description: ${t.description}
14
14
  `}buildTargetAgentsInstructions(t,n){let r=`
@@ -28,10 +28,10 @@ the function call.
28
28
  Your parent agent is ${t.parentAgent.name}. If neither the other agents nor
29
29
  you are best for answering the question according to the descriptions, transfer
30
30
  to your parent agent.
31
- `),r}getTransferTargets(t){let n=[];return n.push(...t.subAgents),!t.parentAgent||!(t.parentAgent instanceof b)||(t.disallowTransferToParent||n.push(t.parentAgent),t.disallowTransferToPeers||n.push(...t.parentAgent.subAgents.filter(r=>r.name!==t.name))),n}},Mn=new Xe,Ye=class extends U{async*runAsync(e,t){let n=e.agent;if(!(n instanceof b))return;let r=e.session.events;if(!r||r.length===0)return;let i={},s=-1;for(let a=r.length-1;a>=0;a--){let l=r[a];if(l.author!=="user")continue;let c=I(l);if(!c)continue;let f=!1;for(let u of c){if(u.name!==Y)continue;f=!0;let d=null;u.response&&Object.keys(u.response).length===1&&"response"in u.response?d=JSON.parse(u.response.response):u.response&&(d=new q({hint:u.response.hint,payload:u.response.payload,confirmed:u.response.confirmed})),u.id&&d&&(i[u.id]=d)}if(f){s=a;break}}if(Object.keys(i).length!==0)for(let a=s-1;a>=0;a--){let l=r[a],c=T(l);if(!c)continue;let f={},u={};for(let g of c){if(!g.id||!(g.id in i))continue;let p=g.args;if(!p||!("originalFunctionCall"in p))continue;let v=p.originalFunctionCall;v.id&&(f[v.id]=i[g.id],u[v.id]=v)}if(Object.keys(f).length===0)continue;for(let g=r.length-1;g>s;g--){let p=r[g],v=I(p);if(v){for(let S of v)S.id&&S.id in f&&(delete f[S.id],delete u[S.id]);if(Object.keys(f).length===0)break}}if(Object.keys(f).length===0)continue;let d=await n.canonicalTools(new w(e)),h=Object.fromEntries(d.map(g=>[g.name,g])),C=await he({invocationContext:e,functionCalls:Object.values(u),toolsDict:h,beforeToolCallbacks:n.canonicalBeforeToolCallbacks,afterToolCallbacks:n.canonicalAfterToolCallbacks,filters:new Set(Object.keys(f)),toolConfirmationDict:f});C&&(yield C);return}}},Bn=new Ye,b=class o extends P{constructor(e){var n,r,i,s,a,l,c,f,u;if(super(e),this.model=e.model,this.instruction=(n=e.instruction)!=null?n:"",this.globalInstruction=(r=e.globalInstruction)!=null?r:"",this.tools=(i=e.tools)!=null?i:[],this.generateContentConfig=e.generateContentConfig,this.disallowTransferToParent=(s=e.disallowTransferToParent)!=null?s:!1,this.disallowTransferToPeers=(a=e.disallowTransferToPeers)!=null?a:!1,this.includeContents=(l=e.includeContents)!=null?l:"default",this.inputSchema=e.inputSchema,this.outputSchema=e.outputSchema,this.outputKey=e.outputKey,this.beforeModelCallback=e.beforeModelCallback,this.afterModelCallback=e.afterModelCallback,this.beforeToolCallback=e.beforeToolCallback,this.afterToolCallback=e.afterToolCallback,this.requestProcessors=(c=e.requestProcessors)!=null?c:[wn,kn,Pn,Bn,Ln],this.responseProcessors=(f=e.responseProcessors)!=null?f:[],this.disallowTransferToParent&&this.disallowTransferToPeers&&!((u=this.subAgents)!=null&&u.length)||this.requestProcessors.push(Mn),e.generateContentConfig){if(e.generateContentConfig.tools)throw new Error("All tools must be set via LlmAgent.tools.");if(e.generateContentConfig.systemInstruction)throw new Error("System instruction must be set via LlmAgent.instruction.");if(e.generateContentConfig.responseSchema)throw new Error("Response schema must be set via LlmAgent.output_schema.")}else this.generateContentConfig={};if(this.outputSchema){if((!this.disallowTransferToParent||!this.disallowTransferToPeers)&&(m.warn(`Invalid config for agent ${this.name}: outputSchema cannot co-exist with agent transfer configurations. Setting disallowTransferToParent=true, disallowTransferToPeers=true`),this.disallowTransferToParent=!0,this.disallowTransferToPeers=!0),this.subAgents&&this.subAgents.length>0)throw new Error(`Invalid config for agent ${this.name}: if outputSchema is set, subAgents must be empty to disable agent transfer.`);if(this.tools&&this.tools.length>0)throw new Error(`Invalid config for agent ${this.name}: if outputSchema is set, tools must be empty`)}}get canonicalModel(){if(this.model instanceof F)return this.model;if(typeof this.model=="string"&&this.model)return Q.newLlm(this.model);let e=this.parentAgent;for(;e;){if(e instanceof o)return e.canonicalModel;e=e.parentAgent}throw new Error(`No model found for ${this.name}.`)}async canonicalInstruction(e){return typeof this.instruction=="string"?{instruction:this.instruction,requireStateInjection:!0}:{instruction:await this.instruction(e),requireStateInjection:!1}}async canonicalGlobalInstruction(e){return typeof this.globalInstruction=="string"?{instruction:this.globalInstruction,requireStateInjection:!0}:{instruction:await this.globalInstruction(e),requireStateInjection:!1}}async canonicalTools(e){let t=[];for(let n of this.tools){let r=await Ot(n,e);t.push(...r)}return t}static normalizeCallbackArray(e){return e?Array.isArray(e)?e:[e]:[]}get canonicalBeforeModelCallbacks(){return o.normalizeCallbackArray(this.beforeModelCallback)}get canonicalAfterModelCallbacks(){return o.normalizeCallbackArray(this.afterModelCallback)}get canonicalBeforeToolCallbacks(){return o.normalizeCallbackArray(this.beforeToolCallback)}get canonicalAfterToolCallbacks(){return o.normalizeCallbackArray(this.afterToolCallback)}maybeSaveOutputToState(e){var r,i;if(e.author!==this.name){m.debug(`Skipping output save for agent ${this.name}: event authored by ${e.author}`);return}if(!this.outputKey){m.debug(`Skipping output save for agent ${this.name}: outputKey is not set`);return}if(!z(e)){m.debug(`Skipping output save for agent ${this.name}: event is not a final response`);return}if(!((i=(r=e.content)==null?void 0:r.parts)!=null&&i.length)){m.debug(`Skipping output save for agent ${this.name}: event content is empty`);return}let t=e.content.parts.map(s=>s.text?s.text:"").join(""),n=t;if(this.outputSchema){if(!t.trim())return;try{n=JSON.parse(t)}catch(s){m.error(`Error parsing output for agent ${this.name}`,s)}}e.actions.stateDelta[this.outputKey]=n}async*runAsyncImpl(e){for(;;){let t;for await(let n of this.runOneStepAsync(e))t=n,this.maybeSaveOutputToState(n),yield n;if(!t||z(t))break;if(t.partial){m.warn("The last event is partial, which is not expected.");break}}}async*runLiveImpl(e){for await(let t of this.runLiveFlow(e))this.maybeSaveOutputToState(t),yield t;e.endInvocation}async*runLiveFlow(e){throw await Promise.resolve(),new Error("LlmAgent.runLiveFlow not implemented")}async*runOneStepAsync(e){let t={contents:[],toolsDict:{},liveConnectConfig:{}};for(let r of this.requestProcessors)for await(let i of r.runAsync(e,t))yield i;for(let r of this.tools){let i=new O({invocationContext:e}),s=await Ot(r,new w(e));for(let a of s)await a.processLlmRequest({toolContext:i,llmRequest:t})}if(e.endInvocation)return;let n=x({invocationId:e.invocationId,author:this.name,branch:e.branch});for await(let r of this.callLlmAsync(e,t,n))for await(let i of this.postprocess(e,t,r,n))n.id=Ne(),n.timestamp=new Date().getTime(),yield i}async*postprocess(e,t,n,r){var f;for(let u of this.responseProcessors)for await(let d of u.runAsync(e,n))yield d;if(!n.content&&!n.errorCode&&!n.interrupted)return;let i=x({...r,...n});if(i.content){let u=T(i);u!=null&&u.length&&(Ct(i),i.longRunningToolIds=Array.from(yt(u,t.toolsDict)))}if(yield i,!((f=T(i))!=null&&f.length))return;let s=await xt({invocationContext:e,functionCallEvent:i,toolsDict:t.toolsDict,beforeToolCallbacks:this.canonicalBeforeToolCallbacks,afterToolCallbacks:this.canonicalAfterToolCallbacks});if(!s)return;let a=At(e,s);a&&(yield a);let l=bt({invocationContext:e,functionCallEvent:i,functionResponseEvent:s});l&&(yield l),yield s;let c=s.actions.transferToAgent;if(c){let u=this.getAgentByName(e,c);for await(let d of u.runAsync(e))yield d}}getAgentByName(e,t){let r=e.agent.rootAgent.findAgent(t);if(!r)throw new Error(`Agent ${t} not found in the agent tree.`);return r}async*callLlmAsync(e,t,n){var s,a,l,c,f;let r=await this.handleBeforeModelCallback(e,t,n);if(r){yield r;return}(s=t.config)!=null||(t.config={}),(l=(a=t.config).labels)!=null||(a.labels={}),t.config.labels[_t]||(t.config.labels[_t]=this.name);let i=this.canonicalModel;if((c=e.runConfig)!=null&&c.supportCfc)throw new Error("CFC is not yet supported in callLlmAsync");{e.incrementLlmCallCount();let u=i.generateContentAsync(t,((f=e.runConfig)==null?void 0:f.streamingMode)==="sse");for await(let d of this.runAndHandleError(u,e,t,n)){let h=await this.handleAfterModelCallback(e,d,n);yield h!=null?h:d}}}async handleBeforeModelCallback(e,t,n){let r=new k({invocationContext:e,eventActions:n.actions}),i=await e.pluginManager.runBeforeModelCallback({callbackContext:r,llmRequest:t});if(i)return i;for(let s of this.canonicalBeforeModelCallbacks){let a=await s({context:r,request:t});if(a)return a}}async handleAfterModelCallback(e,t,n){let r=new k({invocationContext:e,eventActions:n.actions}),i=await e.pluginManager.runAfterModelCallback({callbackContext:r,llmResponse:t});if(i)return i;for(let s of this.canonicalAfterModelCallbacks){let a=await s({context:r,response:t});if(a)return a}}async*runAndHandleError(e,t,n,r){try{for await(let i of e)yield i}catch(i){let s=new k({invocationContext:t,eventActions:r.actions});if(i instanceof Error){let a=await t.pluginManager.runOnModelErrorCallback({callbackContext:s,llmRequest:n,error:i});if(a)yield a;else{let l=JSON.parse(i.message);yield{errorCode:String(l.error.code),errorMessage:l.error.message}}}else throw m.error("Unknown error during response generation",i),i}}};var Ae=class extends P{constructor(e){var t;super(e),this.maxIterations=(t=e.maxIterations)!=null?t:Number.MAX_SAFE_INTEGER}async*runAsyncImpl(e){let t=0;for(;t<this.maxIterations;){for(let n of this.subAgents){let r=!1;for await(let i of n.runAsync(e))yield i,i.actions.escalate&&(r=!0);if(r)return}t++}}async*runLiveImpl(e){throw new Error("This is not supported yet for LoopAgent.")}};var be=class extends P{async*runAsyncImpl(e){let t=this.subAgents.map(n=>n.runAsync(Nn(this,n,e)));for await(let n of _n(t))yield n}async*runLiveImpl(e){throw new Error("This is not supported yet for ParallelAgent.")}};function Nn(o,e,t){let n=new M(t),r=`${o.name}.${e.name}`;return n.branch=n.branch?`${n.branch}.${r}`:r,n}async function*_n(o){let e=new Map;for(let[t,n]of o.entries()){let r=n.next().then(i=>({result:i,index:t}));e.set(t,r)}for(;e.size>0;){let{result:t,index:n}=await Promise.race(e.values());if(t.done){e.delete(n);continue}yield t.value;let r=o[n].next().then(i=>({result:i,index:n}));e.set(n,r)}}var Je="task_completed",xe=class extends P{async*runAsyncImpl(e){for(let t of this.subAgents)for await(let n of t.runAsync(e))yield n}async*runLiveImpl(e){for(let t of this.subAgents)t instanceof b&&((await t.canonicalTools(new w(e))).some(i=>i.name===Je)||(t.tools.push(new B({name:Je,description:"Signals that the model has successfully completed the user's question or task.",execute:()=>"Task completion signaled."})),t.instruction+=`If you finished the user's request according to its description, call the ${Je} function to exit so the next agents can take over. When calling this function, do not generate any text other than the function call.`));for(let t of this.subAgents)for await(let n of t.runLive(e))yield n}};var J=class{constructor(){this.artifacts={}}saveArtifact({appName:e,userId:t,sessionId:n,filename:r,artifact:i}){let s=Te(e,t,n,r);this.artifacts[s]||(this.artifacts[s]=[]);let a=this.artifacts[s].length;return this.artifacts[s].push(i),Promise.resolve(a)}loadArtifact({appName:e,userId:t,sessionId:n,filename:r,version:i}){let s=Te(e,t,n,r),a=this.artifacts[s];return a?(i===void 0&&(i=a.length-1),Promise.resolve(a[i])):Promise.resolve(void 0)}listArtifactKeys({appName:e,userId:t,sessionId:n}){let r=`${e}/${t}/${n}/`,i=`${e}/${t}/user/`,s=[];for(let a in this.artifacts)if(a.startsWith(r)){let l=a.replace(r,"");s.push(l)}else if(a.startsWith(i)){let l=a.replace(i,"");s.push(l)}return Promise.resolve(s.sort())}deleteArtifact({appName:e,userId:t,sessionId:n,filename:r}){let i=Te(e,t,n,r);return this.artifacts[i]&&delete this.artifacts[i],Promise.resolve()}listVersions({appName:e,userId:t,sessionId:n,filename:r}){let i=Te(e,t,n,r),s=this.artifacts[i];if(!s)return Promise.resolve([]);let a=[];for(let l=0;l<s.length;l++)a.push(l);return Promise.resolve(a)}};function Te(o,e,t,n){return On(n)?`${o}/${e}/user/${n}`:`${o}/${e}/${t}/${n}`}function On(o){return o.startsWith("user:")}var j=class{constructor(){this.memories=[];this.sessionEvents={}}async addSessionToMemory(e){let t=Ft(e.appName,e.userId);this.sessionEvents[t]||(this.sessionEvents[t]={}),this.sessionEvents[t][e.id]=e.events.filter(n=>{var r,i,s;return((s=(i=(r=n.content)==null?void 0:r.parts)==null?void 0:i.length)!=null?s:0)>0})}async searchMemory(e){var i,s;let t=Ft(e.appName,e.userId);if(!this.sessionEvents[t])return Promise.resolve({memories:[]});let n=e.query.toLowerCase().split(/\s+/),r={memories:[]};for(let a of Object.values(this.sessionEvents[t]))for(let l of a){if(!((s=(i=l.content)==null?void 0:i.parts)!=null&&s.length))continue;let c=l.content.parts.map(d=>d.text).filter(d=>!!d).join(" "),f=Fn(c);if(!f.size)continue;n.some(d=>f.has(d))&&r.memories.push({content:l.content,author:l.author,timestamp:$n(l.timestamp)})}return r}};function Ft(o,e){return`${o}/${e}`}function Fn(o){return new Set([...o.matchAll(/[A-Za-z]+/)].map(e=>e[0].toLowerCase()))}function $n(o){return new Date(o).toISOString()}var K=class{constructor(e){this.name=e}async onUserMessageCallback({invocationContext:e,userMessage:t}){}async beforeRunCallback({invocationContext:e}){}async onEventCallback({invocationContext:e,event:t}){}async afterRunCallback({invocationContext:e}){}async beforeAgentCallback({agent:e,callbackContext:t}){}async afterAgentCallback({agent:e,callbackContext:t}){}async beforeModelCallback({callbackContext:e,llmRequest:t}){}async afterModelCallback({callbackContext:e,llmResponse:t}){}async onModelErrorCallback({callbackContext:e,llmRequest:t,error:n}){}async beforeToolCallback({tool:e,toolArgs:t,toolContext:n}){}async afterToolCallback({tool:e,toolArgs:t,toolContext:n,result:r}){}async onToolErrorCallback({tool:e,toolArgs:t,toolContext:n,error:r}){}};var Ee=class extends K{constructor(e="logging_plugin"){super(e)}async onUserMessageCallback({invocationContext:e,userMessage:t}){var n;this.log("\u{1F680} USER MESSAGE RECEIVED"),this.log(` Invocation ID: ${e.invocationId}`),this.log(` Session ID: ${e.session.id}`),this.log(` User ID: ${e.userId}`),this.log(` App Name: ${e.appName}`),this.log(` Root Agent: ${(n=e.agent.name)!=null?n:"Unknown"}`),this.log(` User Content: ${this.formatContent(t)}`),e.branch&&this.log(` Branch: ${e.branch}`)}async beforeRunCallback({invocationContext:e}){var t;this.log("\u{1F3C3} INVOCATION STARTING"),this.log(` Invocation ID: ${e.invocationId}`),this.log(` Starting Agent: ${(t=e.agent.name)!=null?t:"Unknown"}`)}async onEventCallback({invocationContext:e,event:t}){this.log("\u{1F4E2} EVENT YIELDED"),this.log(` Event ID: ${t.id}`),this.log(` Author: ${t.author}`),this.log(` Content: ${this.formatContent(t.content)}`),this.log(` Final Response: ${z(t)}`);let n=T(t);if(n.length>0){let i=n.map(s=>s.name);this.log(` Function Calls: ${i}`)}let r=I(t);if(r.length>0){let i=r.map(s=>s.name);this.log(` Function Responses: ${i}`)}t.longRunningToolIds&&t.longRunningToolIds.length>0&&this.log(` Long Running Tools: ${[...t.longRunningToolIds]}`)}async afterRunCallback({invocationContext:e}){var t;this.log("\u2705 INVOCATION COMPLETED"),this.log(` Invocation ID: ${e.invocationId}`),this.log(` Final Agent: ${(t=e.agent.name)!=null?t:"Unknown"}`)}async beforeAgentCallback({agent:e,callbackContext:t}){this.log("\u{1F916} AGENT STARTING"),this.log(` Agent Name: ${t.agentName}`),this.log(` Invocation ID: ${t.invocationId}`),t.invocationContext.branch&&this.log(` Branch: ${t.invocationContext.branch}`)}async afterAgentCallback({agent:e,callbackContext:t}){this.log("\u{1F916} AGENT COMPLETED"),this.log(` Agent Name: ${t.agentName}`),this.log(` Invocation ID: ${t.invocationId}`)}async beforeModelCallback({callbackContext:e,llmRequest:t}){var n;if(this.log("\u{1F9E0} LLM REQUEST"),this.log(` Model: ${(n=t.model)!=null?n:"default"}`),this.log(` Agent: ${e.agentName}`),t.config&&t.config.systemInstruction){let r=t.config.systemInstruction;r.length>200&&(r=r.substring(0,200)+"..."),this.log(` System Instruction: '${r}'`)}if(t.toolsDict){let r=Object.keys(t.toolsDict);this.log(` Available Tools: ${r}`)}}async afterModelCallback({callbackContext:e,llmResponse:t}){this.log("\u{1F9E0} LLM RESPONSE"),this.log(` Agent: ${e.agentName}`),t.errorCode?(this.log(` \u274C ERROR - Code: ${t.errorCode}`),this.log(` Error Message: ${t.errorMessage}`)):(this.log(` Content: ${this.formatContent(t.content)}`),t.partial&&this.log(` Partial: ${t.partial}`),t.turnComplete!==void 0&&this.log(` Turn Complete: ${t.turnComplete}`)),t.usageMetadata&&this.log(` Token Usage - Input: ${t.usageMetadata.promptTokenCount}, Output: ${t.usageMetadata.candidatesTokenCount}`)}async beforeToolCallback({tool:e,toolArgs:t,toolContext:n}){this.log("\u{1F527} TOOL STARTING"),this.log(` Tool Name: ${e.name}`),this.log(` Agent: ${n.agentName}`),this.log(` Function Call ID: ${n.functionCallId}`),this.log(` Arguments: ${this.formatArgs(t)}`)}async afterToolCallback({tool:e,toolArgs:t,toolContext:n,result:r}){this.log("\u{1F527} TOOL COMPLETED"),this.log(` Tool Name: ${e.name}`),this.log(` Agent: ${n.agentName}`),this.log(` Function Call ID: ${n.functionCallId}`),this.log(` Result: ${this.formatArgs(r)}`)}async onModelErrorCallback({callbackContext:e,llmRequest:t,error:n}){this.log("\u{1F9E0} LLM ERROR"),this.log(` Agent: ${e.agentName}`),this.log(` Error: ${n}`)}async onToolErrorCallback({tool:e,toolArgs:t,toolContext:n,error:r}){this.log("\u{1F527} TOOL ERROR"),this.log(` Tool Name: ${e.name}`),this.log(` Agent: ${n.agentName}`),this.log(` Function Call ID: ${n.functionCallId}`),this.log(` Arguments: ${this.formatArgs(t)}`),this.log(` Error: ${r}`)}log(e){let t=`\x1B[90m[${this.name}] ${e}\x1B[0m`;m.info(t)}formatContent(e,t=200){if(!e||!e.parts)return"None";let n=[];for(let r of e.parts)if(r.text){let i=r.text.trim();i.length>t&&(i=i.substring(0,t)+"..."),n.push(`text: '${i}'`)}else r.functionCall?n.push(`function_call: ${r.functionCall.name}`):r.functionResponse?n.push(`function_response: ${r.functionResponse.name}`):r.codeExecutionResult?n.push("code_execution_result"):n.push("other_part");return n.join(" | ")}formatArgs(e,t=300){if(!e)return"{}";let n=JSON.stringify(e);return n.length>t&&(n=n.substring(0,t)+"...}"),n}};var ee=class{constructor(e){this.plugins=new Set;if(e)for(let t of e)this.registerPlugin(t)}registerPlugin(e){if(this.plugins.has(e))throw new Error(`Plugin '${e.name}' already registered.`);if(Array.from(this.plugins).some(t=>t.name===e.name))throw new Error(`Plugin with name '${e.name}' already registered.`);this.plugins.add(e),m.info(`Plugin '${e.name}' registered.`)}getPlugin(e){return Array.from(this.plugins).find(t=>t.name===e)}async runCallbacks(e,t,n){for(let r of e)try{let i=await t(r);if(i!==void 0)return m.debug(`Plugin '${r.name}' returned a value for callback '${n}', exiting early.`),i}catch(i){let s=`Error in plugin '${r.name}' during '${n}' callback: ${i}`;throw m.error(s),new Error(s)}}async runOnUserMessageCallback({userMessage:e,invocationContext:t}){return await this.runCallbacks(this.plugins,n=>n.onUserMessageCallback({userMessage:e,invocationContext:t}),"onUserMessageCallback")}async runBeforeRunCallback({invocationContext:e}){return await this.runCallbacks(this.plugins,t=>t.beforeRunCallback({invocationContext:e}),"beforeRunCallback")}async runAfterRunCallback({invocationContext:e}){await this.runCallbacks(this.plugins,t=>t.afterRunCallback({invocationContext:e}),"afterRunCallback")}async runOnEventCallback({invocationContext:e,event:t}){return await this.runCallbacks(this.plugins,n=>n.onEventCallback({invocationContext:e,event:t}),"onEventCallback")}async runBeforeAgentCallback({agent:e,callbackContext:t}){return await this.runCallbacks(this.plugins,n=>n.beforeAgentCallback({agent:e,callbackContext:t}),"beforeAgentCallback")}async runAfterAgentCallback({agent:e,callbackContext:t}){return await this.runCallbacks(this.plugins,n=>n.afterAgentCallback({agent:e,callbackContext:t}),"afterAgentCallback")}async runBeforeToolCallback({tool:e,toolArgs:t,toolContext:n}){return await this.runCallbacks(this.plugins,r=>r.beforeToolCallback({tool:e,toolArgs:t,toolContext:n}),"beforeToolCallback")}async runAfterToolCallback({tool:e,toolArgs:t,toolContext:n,result:r}){return await this.runCallbacks(this.plugins,i=>i.afterToolCallback({tool:e,toolArgs:t,toolContext:n,result:r}),"afterToolCallback")}async runOnModelErrorCallback({callbackContext:e,llmRequest:t,error:n}){return await this.runCallbacks(this.plugins,r=>r.onModelErrorCallback({callbackContext:e,llmRequest:t,error:n}),"onModelErrorCallback")}async runBeforeModelCallback({callbackContext:e,llmRequest:t}){return await this.runCallbacks(this.plugins,n=>n.beforeModelCallback({callbackContext:e,llmRequest:t}),"beforeModelCallback")}async runAfterModelCallback({callbackContext:e,llmResponse:t}){return await this.runCallbacks(this.plugins,n=>n.afterModelCallback({callbackContext:e,llmResponse:t}),"afterModelCallback")}async runOnToolErrorCallback({tool:e,toolArgs:t,toolContext:n,error:r}){return await this.runCallbacks(this.plugins,i=>i.onToolErrorCallback({tool:e,toolArgs:t,toolContext:n,error:r}),"onToolErrorCallback")}};var tt="adk_request_confirmation",et="orcas_tool_call_security_check_states",$t="This tool call needs external confirmation before completion.",nt=(n=>(n.DENY="DENY",n.CONFIRM="CONFIRM",n.ALLOW="ALLOW",n))(nt||{}),ae=class{async evaluate(e){return Promise.resolve({outcome:"ALLOW",reason:"For prototyping purpose, all tool calls are allowed."})}},Se=class extends K{constructor(e){var t;super("security_plugin"),this.policyEngine=(t=e==null?void 0:e.policyEngine)!=null?t:new ae}async beforeToolCallback({tool:e,toolArgs:t,toolContext:n}){let r=this.getToolCallCheckState(n);if(!r)return this.checkToolCallPolicy({tool:e,toolArgs:t,toolContext:n});if(r==="CONFIRM"){if(!n.toolConfirmation)return{partial:$t};if(this.setToolCallCheckState(n,n.toolConfirmation),!n.toolConfirmation.confirmed)return{error:"Tool call rejected from confirmation flow."};n.toolConfirmation=void 0}}getToolCallCheckState(e){var r;let{functionCallId:t}=e;return t?((r=e.state.get(et))!=null?r:{})[t]:void 0}setToolCallCheckState(e,t){var i;let{functionCallId:n}=e;if(!n)return;let r=(i=e.state.get(et))!=null?i:{};r[n]=t,e.state.set(et,r)}async checkToolCallPolicy({tool:e,toolArgs:t,toolContext:n}){let r=await this.policyEngine.evaluate({tool:e,toolArgs:t});switch(this.setToolCallCheckState(n,r.outcome),r.outcome){case"DENY":return{error:`This tool call is rejected by policy engine. Reason: ${r.reason}`};case"CONFIRM":return n.requestConfirmation({hint:`Policy engine requires confirmation calling tool: ${e.name}. Reason: ${r.reason}`}),{partial:$t};case"ALLOW":return;default:return}}};function Dt(o){if(!o.content||!o.content.parts)return[];let e=[];for(let t of o.content.parts)t&&t.functionCall&&t.functionCall.name===tt&&e.push(t.functionCall);return e}var le=class{async appendEvent({session:e,event:t}){return t.partial||(this.updateSessionState({session:e,event:t}),e.events.push(t)),t}updateSessionState({session:e,event:t}){if(!(!t.actions||!t.actions.stateDelta))for(let[n,r]of Object.entries(t.actions.stateDelta))n.startsWith(y.TEMP_PREFIX)||(e.state[n]=r)}};function ce(o){return{id:o.id,appName:o.appName,userId:o.userId||"",state:o.state||{},events:o.events||[],lastUpdateTime:o.lastUpdateTime||0}}var V=class extends le{constructor(){super(...arguments);this.sessions={};this.userState={};this.appState={}}createSession({appName:t,userId:n,state:r,sessionId:i}){let s=ce({id:i||H(),appName:t,userId:n,state:r,events:[],lastUpdateTime:Date.now()});return this.sessions[t]||(this.sessions[t]={}),this.sessions[t][n]||(this.sessions[t][n]={}),this.sessions[t][n][s.id]=s,Promise.resolve(this.mergeState(t,n,se(s)))}getSession({appName:t,userId:n,sessionId:r,config:i}){if(!this.sessions[t]||!this.sessions[t][n]||!this.sessions[t][n][r])return Promise.resolve(void 0);let s=this.sessions[t][n][r],a=se(s);if(i&&(i.numRecentEvents&&(a.events=a.events.slice(-i.numRecentEvents)),i.afterTimestamp)){let l=a.events.length-1;for(;l>=0&&!(a.events[l].timestamp<i.afterTimestamp);)l--;l>=0&&(a.events=a.events.slice(l+1))}return Promise.resolve(this.mergeState(t,n,a))}listSessions({appName:t,userId:n}){if(!this.sessions[t]||!this.sessions[t][n])return Promise.resolve({sessions:[]});let r=[];for(let i of Object.values(this.sessions[t][n]))r.push(ce({id:i.id,appName:i.appName,userId:i.userId,state:{},events:[],lastUpdateTime:i.lastUpdateTime}));return Promise.resolve({sessions:r})}async deleteSession({appName:t,userId:n,sessionId:r}){await this.getSession({appName:t,userId:n,sessionId:r})&&delete this.sessions[t][n][r]}async appendEvent({session:t,event:n}){await super.appendEvent({session:t,event:n}),t.lastUpdateTime=n.timestamp;let r=t.appName,i=t.userId,s=t.id,a=c=>{m.warn(`Failed to append event to session ${s}: ${c}`)};if(!this.sessions[r])return a(`appName ${r} not in sessions`),n;if(!this.sessions[r][i])return a(`userId ${i} not in sessions[appName]`),n;if(!this.sessions[r][i][s])return a(`sessionId ${s} not in sessions[appName][userId]`),n;if(n.actions&&n.actions.stateDelta)for(let c of Object.keys(n.actions.stateDelta))c.startsWith(y.APP_PREFIX)&&(this.appState[r]=this.appState[r]||{},this.appState[r][c.replace(y.APP_PREFIX,"")]=n.actions.stateDelta[c]),c.startsWith(y.USER_PREFIX)&&(this.userState[r]=this.userState[r]||{},this.userState[r][i]=this.userState[r][i]||{},this.userState[r][i][c.replace(y.USER_PREFIX,"")]=n.actions.stateDelta[c]);let l=this.sessions[r][i][s];return await super.appendEvent({session:l,event:n}),l.lastUpdateTime=n.timestamp,n}mergeState(t,n,r){if(this.appState[t])for(let i of Object.keys(this.appState[t]))r.state[y.APP_PREFIX+i]=this.appState[t][i];if(!this.userState[t]||!this.userState[t][n])return r;for(let i of Object.keys(this.userState[t][n]))r.state[y.USER_PREFIX+i]=this.userState[t][n][i];return r}};var Gt=require("@google/genai"),qt=require("@opentelemetry/api");var Z=class{constructor(e){var t;this.appName=e.appName,this.agent=e.agent,this.pluginManager=new ee((t=e.plugins)!=null?t:[]),this.artifactService=e.artifactService,this.sessionService=e.sessionService,this.memoryService=e.memoryService,this.credentialService=e.credentialService}async*runAsync({userId:e,sessionId:t,newMessage:n,stateDelta:r,runConfig:i}){var a;i=Nt(i);let s=qt.trace.getTracer("gcp.vertex.agent").startSpan("invocation");try{let l=await this.sessionService.getSession({appName:this.appName,userId:e,sessionId:t});if(!l)throw new Error(`Session not found: ${t}`);if(i.supportCfc&&this.agent instanceof b){let d=this.agent.canonicalModel.model;if(!d.startsWith("gemini-2"))throw new Error(`CFC is not supported for model: ${d} in agent: ${this.agent.name}`)}let c=new M({artifactService:this.artifactService,sessionService:this.sessionService,memoryService:this.memoryService,credentialService:this.credentialService,invocationId:dt(),agent:this.agent,session:l,userContent:n,runConfig:i,pluginManager:this.pluginManager}),f=await this.pluginManager.runOnUserMessageCallback({userMessage:n,invocationContext:c});if(f&&(n=f),n){if(!((a=n.parts)!=null&&a.length))throw new Error("No parts in the new_message.");i.saveInputBlobsAsArtifacts&&await this.saveArtifacts(c.invocationId,l.userId,l.id,n),await this.sessionService.appendEvent({session:l,event:x({invocationId:c.invocationId,author:"user",actions:r?_({stateDelta:r}):void 0,content:n})})}c.agent=this.determineAgentForResumption(l,this.agent);let u=await this.pluginManager.runBeforeRunCallback({invocationContext:c});if(u){let d=x({invocationId:c.invocationId,author:"model",content:u});await this.sessionService.appendEvent({session:l,event:d}),yield d}else for await(let d of c.agent.runAsync(c)){d.partial||await this.sessionService.appendEvent({session:l,event:d});let h=await this.pluginManager.runOnEventCallback({invocationContext:c,event:d});h?yield h:yield d}await this.pluginManager.runAfterRunCallback({invocationContext:c})}finally{s.end()}}async saveArtifacts(e,t,n,r){var i;if(!(!this.artifactService||!((i=r.parts)!=null&&i.length)))for(let s=0;s<r.parts.length;s++){let a=r.parts[s];if(!a.inlineData)continue;let l=`artifact_${e}_${s}`;await this.artifactService.saveArtifact({appName:this.appName,userId:t,sessionId:n,filename:l,artifact:a}),r.parts[s]=(0,Gt.createPartFromText)(`Uploaded file: ${l}. It is saved into artifacts`)}}determineAgentForResumption(e,t){let n=Dn(e.events);if(n&&n.author)return t.findAgent(n.author)||t;for(let r=e.events.length-1;r>=0;r--){m.info("event: ",JSON.stringify(e.events[r]));let i=e.events[r];if(i.author==="user"||!i.author)continue;if(i.author===t.name)return t;let s=t.findSubAgent(i.author);if(!s){m.warn(`Event from an unknown agent: ${i.author}, event id: ${i.id}`);continue}if(this.isRoutableLlmAgent(s))return s}return t}isRoutableLlmAgent(e){let t=e;for(;t;){if(!(t instanceof b)||t.disallowTransferToParent)return!1;t=t.parentAgent}return!0}};function Dn(o){var n,r,i,s;if(!o.length)return null;let t=(s=(i=(r=(n=o[o.length-1].content)==null?void 0:n.parts)==null?void 0:r.find(a=>a.functionResponse))==null?void 0:i.functionResponse)==null?void 0:s.id;if(!t)return null;for(let a=o.length-2;a>=0;a--){let l=o[a],c=T(l);if(c){for(let f of c)if(f.id===t)return l}}return null}var Re=class extends Z{constructor({agent:e,appName:t="InMemoryRunner",plugins:n=[]}){super({appName:t,agent:e,plugins:n,artifactService:new J,sessionService:new V,memoryService:new j})}};var ue=require("@google/genai");var Ie=class{constructor(e){this.toolContext=e;this.invocationContext=e.invocationContext}async saveArtifact(e){return this.toolContext.saveArtifact(e.filename,e.artifact)}async loadArtifact(e){return this.toolContext.loadArtifact(e.filename,e.version)}async listArtifactKeys(e){return this.toolContext.listArtifacts()}async deleteArtifact(e){if(!this.toolContext.invocationContext.artifactService)throw new Error("Artifact service is not initialized.");return this.toolContext.invocationContext.artifactService.deleteArtifact(e)}async listVersions(e){if(!this.toolContext.invocationContext.artifactService)throw new Error("Artifact service is not initialized.");return this.toolContext.invocationContext.artifactService.listVersions(e)}};var we=class extends R{constructor(e){super({name:e.agent.name,description:e.agent.description||""}),this.agent=e.agent,this.skipSummarization=e.skipSummarization||!1}_getDeclaration(){let e;if(this.agent instanceof b&&this.agent.inputSchema?e={name:this.name,description:this.description,parameters:this.agent.inputSchema}:e={name:this.name,description:this.description,parameters:{type:ue.Type.OBJECT,properties:{request:{type:ue.Type.STRING}},required:["request"]}},this.apiVariant!=="GEMINI_API"){let t=this.agent instanceof b&&this.agent.outputSchema;e.response=t?{type:ue.Type.OBJECT}:{type:ue.Type.STRING}}return e}async runAsync({args:e,toolContext:t}){var f,u;this.skipSummarization&&(t.actions.skipSummarization=!0);let r={role:"user",parts:[{text:this.agent instanceof b&&this.agent.inputSchema?JSON.stringify(e):e.request}]},i=new Z({appName:this.agent.name,agent:this.agent,artifactService:new Ie(t),sessionService:new V,memoryService:new j,credentialService:t.invocationContext.credentialService}),s=await i.sessionService.createSession({appName:this.agent.name,userId:"tmp_user",state:t.state.toRecord()}),a;for await(let d of i.runAsync({userId:s.userId,sessionId:s.id,newMessage:r}))d.actions.stateDelta&&t.state.update(d.actions.stateDelta),a=d;if(!((u=(f=a==null?void 0:a.content)==null?void 0:f.parts)!=null&&u.length))return"";let l=this.agent instanceof b&&this.agent.outputSchema,c=a.content.parts.map(d=>d.text).filter(d=>d).join(`
32
- `);return l?JSON.parse(c):c}};var te=class{constructor(e){this.toolFilter=e}isToolSelected(e,t){return this.toolFilter?typeof this.toolFilter=="function"?this.toolFilter(e,t):Array.isArray(this.toolFilter)?this.toolFilter.includes(e.name):!1:!0}async processLlmRequest(e,t){}};var Gn="^projects/[^/]+/locations/[^/]+/publishers/[^/]+/models/(.+)$";function Ut(o){let e=o.match(Gn);return e?e[1]:o}function jt(o){return Ut(o).startsWith("gemini-")}function Kt(o){return Ut(o).startsWith("gemini-1")}var ot=class extends R{constructor(){super({name:"google_search",description:"Google Search Tool"})}runAsync(e){return Promise.resolve()}async processLlmRequest({toolContext:e,llmRequest:t}){if(t.model){if(t.config=t.config||{},t.config.tools=t.config.tools||[],Kt(t.model)){if(t.config.tools.length>0)throw new Error("Google search tool can not be used with other tools in Gemini 1.x.");t.config.tools.push({googleSearchRetrieval:{}});return}if(jt(t.model)){t.config.tools.push({googleSearch:{}});return}throw new Error(`Google search tool is not supported for model ${t.model}`)}}},Vt=new ot;var Zt=`
31
+ `),r}getTransferTargets(t){let n=[];return n.push(...t.subAgents),!t.parentAgent||!(t.parentAgent instanceof b)||(t.disallowTransferToParent||n.push(t.parentAgent),t.disallowTransferToPeers||n.push(...t.parentAgent.subAgents.filter(r=>r.name!==t.name))),n}},eo=new tt,nt=class extends U{async*runAsync(e,t){let n=e.agent;if(!(n instanceof b))return;let r=e.session.events;if(!r||r.length===0)return;let i={},s=-1;for(let a=r.length-1;a>=0;a--){let c=r[a];if(c.author!=="user")continue;let l=I(c);if(!l)continue;let f=!1;for(let u of l){if(u.name!==Y)continue;f=!0;let d=null;u.response&&Object.keys(u.response).length===1&&"response"in u.response?d=JSON.parse(u.response.response):u.response&&(d=new q({hint:u.response.hint,payload:u.response.payload,confirmed:u.response.confirmed})),u.id&&d&&(i[u.id]=d)}if(f){s=a;break}}if(Object.keys(i).length!==0)for(let a=s-1;a>=0;a--){let c=r[a],l=x(c);if(!l)continue;let f={},u={};for(let g of l){if(!g.id||!(g.id in i))continue;let p=g.args;if(!p||!("originalFunctionCall"in p))continue;let y=p.originalFunctionCall;y.id&&(f[y.id]=i[g.id],u[y.id]=y)}if(Object.keys(f).length===0)continue;for(let g=r.length-1;g>s;g--){let p=r[g],y=I(p);if(y){for(let R of y)R.id&&R.id in f&&(delete f[R.id],delete u[R.id]);if(Object.keys(f).length===0)break}}if(Object.keys(f).length===0)continue;let d=await n.canonicalTools(new P(e)),C=Object.fromEntries(d.map(g=>[g.name,g])),v=await he({invocationContext:e,functionCalls:Object.values(u),toolsDict:C,beforeToolCallbacks:n.canonicalBeforeToolCallbacks,afterToolCallbacks:n.canonicalAfterToolCallbacks,filters:new Set(Object.keys(f)),toolConfirmationDict:f});v&&(yield v);return}}},to=new nt,b=class o extends k{constructor(e){var n,r,i,s,a,c,l,f,u;if(super(e),this.model=e.model,this.instruction=(n=e.instruction)!=null?n:"",this.globalInstruction=(r=e.globalInstruction)!=null?r:"",this.tools=(i=e.tools)!=null?i:[],this.generateContentConfig=e.generateContentConfig,this.disallowTransferToParent=(s=e.disallowTransferToParent)!=null?s:!1,this.disallowTransferToPeers=(a=e.disallowTransferToPeers)!=null?a:!1,this.includeContents=(c=e.includeContents)!=null?c:"default",this.inputSchema=e.inputSchema,this.outputSchema=e.outputSchema,this.outputKey=e.outputKey,this.beforeModelCallback=e.beforeModelCallback,this.afterModelCallback=e.afterModelCallback,this.beforeToolCallback=e.beforeToolCallback,this.afterToolCallback=e.afterToolCallback,this.requestProcessors=(l=e.requestProcessors)!=null?l:[Xn,Hn,Yn,to,Jn],this.responseProcessors=(f=e.responseProcessors)!=null?f:[],this.disallowTransferToParent&&this.disallowTransferToPeers&&!((u=this.subAgents)!=null&&u.length)||this.requestProcessors.push(eo),e.generateContentConfig){if(e.generateContentConfig.tools)throw new Error("All tools must be set via LlmAgent.tools.");if(e.generateContentConfig.systemInstruction)throw new Error("System instruction must be set via LlmAgent.instruction.");if(e.generateContentConfig.responseSchema)throw new Error("Response schema must be set via LlmAgent.output_schema.")}else this.generateContentConfig={};if(this.outputSchema){if((!this.disallowTransferToParent||!this.disallowTransferToPeers)&&(m.warn(`Invalid config for agent ${this.name}: outputSchema cannot co-exist with agent transfer configurations. Setting disallowTransferToParent=true, disallowTransferToPeers=true`),this.disallowTransferToParent=!0,this.disallowTransferToPeers=!0),this.subAgents&&this.subAgents.length>0)throw new Error(`Invalid config for agent ${this.name}: if outputSchema is set, subAgents must be empty to disable agent transfer.`);if(this.tools&&this.tools.length>0)throw new Error(`Invalid config for agent ${this.name}: if outputSchema is set, tools must be empty`)}}get canonicalModel(){if(this.model instanceof F)return this.model;if(typeof this.model=="string"&&this.model)return Q.newLlm(this.model);let e=this.parentAgent;for(;e;){if(e instanceof o)return e.canonicalModel;e=e.parentAgent}throw new Error(`No model found for ${this.name}.`)}async canonicalInstruction(e){return typeof this.instruction=="string"?{instruction:this.instruction,requireStateInjection:!0}:{instruction:await this.instruction(e),requireStateInjection:!1}}async canonicalGlobalInstruction(e){return typeof this.globalInstruction=="string"?{instruction:this.globalInstruction,requireStateInjection:!0}:{instruction:await this.globalInstruction(e),requireStateInjection:!1}}async canonicalTools(e){let t=[];for(let n of this.tools){let r=await qt(n,e);t.push(...r)}return t}static normalizeCallbackArray(e){return e?Array.isArray(e)?e:[e]:[]}get canonicalBeforeModelCallbacks(){return o.normalizeCallbackArray(this.beforeModelCallback)}get canonicalAfterModelCallbacks(){return o.normalizeCallbackArray(this.afterModelCallback)}get canonicalBeforeToolCallbacks(){return o.normalizeCallbackArray(this.beforeToolCallback)}get canonicalAfterToolCallbacks(){return o.normalizeCallbackArray(this.afterToolCallback)}maybeSaveOutputToState(e){var r,i;if(e.author!==this.name){m.debug(`Skipping output save for agent ${this.name}: event authored by ${e.author}`);return}if(!this.outputKey){m.debug(`Skipping output save for agent ${this.name}: outputKey is not set`);return}if(!z(e)){m.debug(`Skipping output save for agent ${this.name}: event is not a final response`);return}if(!((i=(r=e.content)==null?void 0:r.parts)!=null&&i.length)){m.debug(`Skipping output save for agent ${this.name}: event content is empty`);return}let t=e.content.parts.map(s=>s.text?s.text:"").join(""),n=t;if(this.outputSchema){if(!t.trim())return;try{n=JSON.parse(t)}catch(s){m.error(`Error parsing output for agent ${this.name}`,s)}}e.actions.stateDelta[this.outputKey]=n}async*runAsyncImpl(e){for(;;){let t;for await(let n of this.runOneStepAsync(e))t=n,this.maybeSaveOutputToState(n),yield n;if(!t||z(t))break;if(t.partial){m.warn("The last event is partial, which is not expected.");break}}}async*runLiveImpl(e){for await(let t of this.runLiveFlow(e))this.maybeSaveOutputToState(t),yield t;e.endInvocation}async*runLiveFlow(e){throw await Promise.resolve(),new Error("LlmAgent.runLiveFlow not implemented")}async*runOneStepAsync(e){let t={contents:[],toolsDict:{},liveConnectConfig:{}};for(let r of this.requestProcessors)for await(let i of r.runAsync(e,t))yield i;for(let r of this.tools){let i=new N({invocationContext:e}),s=await qt(r,new P(e));for(let a of s)await a.processLlmRequest({toolContext:i,llmRequest:t})}if(e.endInvocation)return;let n=T({invocationId:e.invocationId,author:this.name,branch:e.branch});for await(let r of this.callLlmAsync(e,t,n))for await(let i of this.postprocess(e,t,r,n))n.id=$e(),n.timestamp=new Date().getTime(),yield i}async*postprocess(e,t,n,r){var f;for(let u of this.responseProcessors)for await(let d of u.runAsync(e,n))yield d;if(!n.content&&!n.errorCode&&!n.interrupted)return;let i=T({...r,...n});if(i.content){let u=x(i);u!=null&&u.length&&(bt(i),i.longRunningToolIds=Array.from(xt(u,t.toolsDict)))}if(yield i,!((f=x(i))!=null&&f.length))return;let s=await St({invocationContext:e,functionCallEvent:i,toolsDict:t.toolsDict,beforeToolCallbacks:this.canonicalBeforeToolCallbacks,afterToolCallbacks:this.canonicalAfterToolCallbacks});if(!s)return;let a=Et(e,s);a&&(yield a);let c=Rt({invocationContext:e,functionCallEvent:i,functionResponseEvent:s});c&&(yield c),yield s;let l=s.actions.transferToAgent;if(l){let u=this.getAgentByName(e,l);for await(let d of u.runAsync(e))yield d}}getAgentByName(e,t){let r=e.agent.rootAgent.findAgent(t);if(!r)throw new Error(`Agent ${t} not found in the agent tree.`);return r}async*callLlmAsync(e,t,n){var s,a,c,l,f;let r=await this.handleBeforeModelCallback(e,t,n);if(r){yield r;return}(s=t.config)!=null||(t.config={}),(c=(a=t.config).labels)!=null||(a.labels={}),t.config.labels[Gt]||(t.config.labels[Gt]=this.name);let i=this.canonicalModel;if((l=e.runConfig)!=null&&l.supportCfc)throw new Error("CFC is not yet supported in callLlmAsync");{e.incrementLlmCallCount();let u=i.generateContentAsync(t,((f=e.runConfig)==null?void 0:f.streamingMode)==="sse");for await(let d of this.runAndHandleError(u,e,t,n)){let C=await this.handleAfterModelCallback(e,d,n);yield C!=null?C:d}}}async handleBeforeModelCallback(e,t,n){let r=new w({invocationContext:e,eventActions:n.actions}),i=await e.pluginManager.runBeforeModelCallback({callbackContext:r,llmRequest:t});if(i)return i;for(let s of this.canonicalBeforeModelCallbacks){let a=await s({context:r,request:t});if(a)return a}}async handleAfterModelCallback(e,t,n){let r=new w({invocationContext:e,eventActions:n.actions}),i=await e.pluginManager.runAfterModelCallback({callbackContext:r,llmResponse:t});if(i)return i;for(let s of this.canonicalAfterModelCallbacks){let a=await s({context:r,response:t});if(a)return a}}async*runAndHandleError(e,t,n,r){try{for await(let i of e)yield i}catch(i){let s=new w({invocationContext:t,eventActions:r.actions});if(i instanceof Error){let a=await t.pluginManager.runOnModelErrorCallback({callbackContext:s,llmRequest:n,error:i});if(a)yield a;else{let c=JSON.parse(i.message);yield{errorCode:String(c.error.code),errorMessage:c.error.message}}}else throw m.error("Unknown error during response generation",i),i}}};var be=class extends k{constructor(e){var t;super(e),this.maxIterations=(t=e.maxIterations)!=null?t:Number.MAX_SAFE_INTEGER}async*runAsyncImpl(e){let t=0;for(;t<this.maxIterations;){for(let n of this.subAgents){let r=!1;for await(let i of n.runAsync(e))yield i,i.actions.escalate&&(r=!0);if(r)return}t++}}async*runLiveImpl(e){throw new Error("This is not supported yet for LoopAgent.")}};var Te=class extends k{async*runAsyncImpl(e){let t=this.subAgents.map(n=>n.runAsync(no(this,n,e)));for await(let n of oo(t))yield n}async*runLiveImpl(e){throw new Error("This is not supported yet for ParallelAgent.")}};function no(o,e,t){let n=new M(t),r=`${o.name}.${e.name}`;return n.branch=n.branch?`${n.branch}.${r}`:r,n}async function*oo(o){let e=new Map;for(let[t,n]of o.entries()){let r=n.next().then(i=>({result:i,index:t}));e.set(t,r)}for(;e.size>0;){let{result:t,index:n}=await Promise.race(e.values());if(t.done){e.delete(n);continue}yield t.value;let r=o[n].next().then(i=>({result:i,index:n}));e.set(n,r)}}var ot="task_completed",xe=class extends k{async*runAsyncImpl(e){for(let t of this.subAgents)for await(let n of t.runAsync(e))yield n}async*runLiveImpl(e){for(let t of this.subAgents)t instanceof b&&((await t.canonicalTools(new P(e))).some(i=>i.name===ot)||(t.tools.push(new B({name:ot,description:"Signals that the model has successfully completed the user's question or task.",execute:()=>"Task completion signaled."})),t.instruction+=`If you finished the user's request according to its description, call the ${ot} function to exit so the next agents can take over. When calling this function, do not generate any text other than the function call.`));for(let t of this.subAgents)for await(let n of t.runLive(e))yield n}};var J=class{constructor(){this.artifacts={}}saveArtifact({appName:e,userId:t,sessionId:n,filename:r,artifact:i}){let s=Ee(e,t,n,r);this.artifacts[s]||(this.artifacts[s]=[]);let a=this.artifacts[s].length;return this.artifacts[s].push(i),Promise.resolve(a)}loadArtifact({appName:e,userId:t,sessionId:n,filename:r,version:i}){let s=Ee(e,t,n,r),a=this.artifacts[s];return a?(i===void 0&&(i=a.length-1),Promise.resolve(a[i])):Promise.resolve(void 0)}listArtifactKeys({appName:e,userId:t,sessionId:n}){let r=`${e}/${t}/${n}/`,i=`${e}/${t}/user/`,s=[];for(let a in this.artifacts)if(a.startsWith(r)){let c=a.replace(r,"");s.push(c)}else if(a.startsWith(i)){let c=a.replace(i,"");s.push(c)}return Promise.resolve(s.sort())}deleteArtifact({appName:e,userId:t,sessionId:n,filename:r}){let i=Ee(e,t,n,r);return this.artifacts[i]&&delete this.artifacts[i],Promise.resolve()}listVersions({appName:e,userId:t,sessionId:n,filename:r}){let i=Ee(e,t,n,r),s=this.artifacts[i];if(!s)return Promise.resolve([]);let a=[];for(let c=0;c<s.length;c++)a.push(c);return Promise.resolve(a)}};function Ee(o,e,t,n){return ro(n)?`${o}/${e}/user/${n}`:`${o}/${e}/${t}/${n}`}function ro(o){return o.startsWith("user:")}var j=class{constructor(){this.memories=[];this.sessionEvents={}}async addSessionToMemory(e){let t=Ut(e.appName,e.userId);this.sessionEvents[t]||(this.sessionEvents[t]={}),this.sessionEvents[t][e.id]=e.events.filter(n=>{var r,i,s;return((s=(i=(r=n.content)==null?void 0:r.parts)==null?void 0:i.length)!=null?s:0)>0})}async searchMemory(e){var i,s;let t=Ut(e.appName,e.userId);if(!this.sessionEvents[t])return Promise.resolve({memories:[]});let n=e.query.toLowerCase().split(/\s+/),r={memories:[]};for(let a of Object.values(this.sessionEvents[t]))for(let c of a){if(!((s=(i=c.content)==null?void 0:i.parts)!=null&&s.length))continue;let l=c.content.parts.map(d=>d.text).filter(d=>!!d).join(" "),f=io(l);if(!f.size)continue;n.some(d=>f.has(d))&&r.memories.push({content:c.content,author:c.author,timestamp:so(c.timestamp)})}return r}};function Ut(o,e){return`${o}/${e}`}function io(o){return new Set([...o.matchAll(/[A-Za-z]+/)].map(e=>e[0].toLowerCase()))}function so(o){return new Date(o).toISOString()}var K=class{constructor(e){this.name=e}async onUserMessageCallback({invocationContext:e,userMessage:t}){}async beforeRunCallback({invocationContext:e}){}async onEventCallback({invocationContext:e,event:t}){}async afterRunCallback({invocationContext:e}){}async beforeAgentCallback({agent:e,callbackContext:t}){}async afterAgentCallback({agent:e,callbackContext:t}){}async beforeModelCallback({callbackContext:e,llmRequest:t}){}async afterModelCallback({callbackContext:e,llmResponse:t}){}async onModelErrorCallback({callbackContext:e,llmRequest:t,error:n}){}async beforeToolCallback({tool:e,toolArgs:t,toolContext:n}){}async afterToolCallback({tool:e,toolArgs:t,toolContext:n,result:r}){}async onToolErrorCallback({tool:e,toolArgs:t,toolContext:n,error:r}){}};var Re=class extends K{constructor(e="logging_plugin"){super(e)}async onUserMessageCallback({invocationContext:e,userMessage:t}){var n;this.log("\u{1F680} USER MESSAGE RECEIVED"),this.log(` Invocation ID: ${e.invocationId}`),this.log(` Session ID: ${e.session.id}`),this.log(` User ID: ${e.userId}`),this.log(` App Name: ${e.appName}`),this.log(` Root Agent: ${(n=e.agent.name)!=null?n:"Unknown"}`),this.log(` User Content: ${this.formatContent(t)}`),e.branch&&this.log(` Branch: ${e.branch}`)}async beforeRunCallback({invocationContext:e}){var t;this.log("\u{1F3C3} INVOCATION STARTING"),this.log(` Invocation ID: ${e.invocationId}`),this.log(` Starting Agent: ${(t=e.agent.name)!=null?t:"Unknown"}`)}async onEventCallback({invocationContext:e,event:t}){this.log("\u{1F4E2} EVENT YIELDED"),this.log(` Event ID: ${t.id}`),this.log(` Author: ${t.author}`),this.log(` Content: ${this.formatContent(t.content)}`),this.log(` Final Response: ${z(t)}`);let n=x(t);if(n.length>0){let i=n.map(s=>s.name);this.log(` Function Calls: ${i}`)}let r=I(t);if(r.length>0){let i=r.map(s=>s.name);this.log(` Function Responses: ${i}`)}t.longRunningToolIds&&t.longRunningToolIds.length>0&&this.log(` Long Running Tools: ${[...t.longRunningToolIds]}`)}async afterRunCallback({invocationContext:e}){var t;this.log("\u2705 INVOCATION COMPLETED"),this.log(` Invocation ID: ${e.invocationId}`),this.log(` Final Agent: ${(t=e.agent.name)!=null?t:"Unknown"}`)}async beforeAgentCallback({agent:e,callbackContext:t}){this.log("\u{1F916} AGENT STARTING"),this.log(` Agent Name: ${t.agentName}`),this.log(` Invocation ID: ${t.invocationId}`),t.invocationContext.branch&&this.log(` Branch: ${t.invocationContext.branch}`)}async afterAgentCallback({agent:e,callbackContext:t}){this.log("\u{1F916} AGENT COMPLETED"),this.log(` Agent Name: ${t.agentName}`),this.log(` Invocation ID: ${t.invocationId}`)}async beforeModelCallback({callbackContext:e,llmRequest:t}){var n;if(this.log("\u{1F9E0} LLM REQUEST"),this.log(` Model: ${(n=t.model)!=null?n:"default"}`),this.log(` Agent: ${e.agentName}`),t.config&&t.config.systemInstruction){let r=t.config.systemInstruction;r.length>200&&(r=r.substring(0,200)+"..."),this.log(` System Instruction: '${r}'`)}if(t.toolsDict){let r=Object.keys(t.toolsDict);this.log(` Available Tools: ${r}`)}}async afterModelCallback({callbackContext:e,llmResponse:t}){this.log("\u{1F9E0} LLM RESPONSE"),this.log(` Agent: ${e.agentName}`),t.errorCode?(this.log(` \u274C ERROR - Code: ${t.errorCode}`),this.log(` Error Message: ${t.errorMessage}`)):(this.log(` Content: ${this.formatContent(t.content)}`),t.partial&&this.log(` Partial: ${t.partial}`),t.turnComplete!==void 0&&this.log(` Turn Complete: ${t.turnComplete}`)),t.usageMetadata&&this.log(` Token Usage - Input: ${t.usageMetadata.promptTokenCount}, Output: ${t.usageMetadata.candidatesTokenCount}`)}async beforeToolCallback({tool:e,toolArgs:t,toolContext:n}){this.log("\u{1F527} TOOL STARTING"),this.log(` Tool Name: ${e.name}`),this.log(` Agent: ${n.agentName}`),this.log(` Function Call ID: ${n.functionCallId}`),this.log(` Arguments: ${this.formatArgs(t)}`)}async afterToolCallback({tool:e,toolArgs:t,toolContext:n,result:r}){this.log("\u{1F527} TOOL COMPLETED"),this.log(` Tool Name: ${e.name}`),this.log(` Agent: ${n.agentName}`),this.log(` Function Call ID: ${n.functionCallId}`),this.log(` Result: ${this.formatArgs(r)}`)}async onModelErrorCallback({callbackContext:e,llmRequest:t,error:n}){this.log("\u{1F9E0} LLM ERROR"),this.log(` Agent: ${e.agentName}`),this.log(` Error: ${n}`)}async onToolErrorCallback({tool:e,toolArgs:t,toolContext:n,error:r}){this.log("\u{1F527} TOOL ERROR"),this.log(` Tool Name: ${e.name}`),this.log(` Agent: ${n.agentName}`),this.log(` Function Call ID: ${n.functionCallId}`),this.log(` Arguments: ${this.formatArgs(t)}`),this.log(` Error: ${r}`)}log(e){let t=`\x1B[90m[${this.name}] ${e}\x1B[0m`;m.info(t)}formatContent(e,t=200){if(!e||!e.parts)return"None";let n=[];for(let r of e.parts)if(r.text){let i=r.text.trim();i.length>t&&(i=i.substring(0,t)+"..."),n.push(`text: '${i}'`)}else r.functionCall?n.push(`function_call: ${r.functionCall.name}`):r.functionResponse?n.push(`function_response: ${r.functionResponse.name}`):r.codeExecutionResult?n.push("code_execution_result"):n.push("other_part");return n.join(" | ")}formatArgs(e,t=300){if(!e)return"{}";let n=JSON.stringify(e);return n.length>t&&(n=n.substring(0,t)+"...}"),n}};var ee=class{constructor(e){this.plugins=new Set;if(e)for(let t of e)this.registerPlugin(t)}registerPlugin(e){if(this.plugins.has(e))throw new Error(`Plugin '${e.name}' already registered.`);if(Array.from(this.plugins).some(t=>t.name===e.name))throw new Error(`Plugin with name '${e.name}' already registered.`);this.plugins.add(e),m.info(`Plugin '${e.name}' registered.`)}getPlugin(e){return Array.from(this.plugins).find(t=>t.name===e)}async runCallbacks(e,t,n){for(let r of e)try{let i=await t(r);if(i!==void 0)return m.debug(`Plugin '${r.name}' returned a value for callback '${n}', exiting early.`),i}catch(i){let s=`Error in plugin '${r.name}' during '${n}' callback: ${i}`;throw m.error(s),new Error(s)}}async runOnUserMessageCallback({userMessage:e,invocationContext:t}){return await this.runCallbacks(this.plugins,n=>n.onUserMessageCallback({userMessage:e,invocationContext:t}),"onUserMessageCallback")}async runBeforeRunCallback({invocationContext:e}){return await this.runCallbacks(this.plugins,t=>t.beforeRunCallback({invocationContext:e}),"beforeRunCallback")}async runAfterRunCallback({invocationContext:e}){await this.runCallbacks(this.plugins,t=>t.afterRunCallback({invocationContext:e}),"afterRunCallback")}async runOnEventCallback({invocationContext:e,event:t}){return await this.runCallbacks(this.plugins,n=>n.onEventCallback({invocationContext:e,event:t}),"onEventCallback")}async runBeforeAgentCallback({agent:e,callbackContext:t}){return await this.runCallbacks(this.plugins,n=>n.beforeAgentCallback({agent:e,callbackContext:t}),"beforeAgentCallback")}async runAfterAgentCallback({agent:e,callbackContext:t}){return await this.runCallbacks(this.plugins,n=>n.afterAgentCallback({agent:e,callbackContext:t}),"afterAgentCallback")}async runBeforeToolCallback({tool:e,toolArgs:t,toolContext:n}){return await this.runCallbacks(this.plugins,r=>r.beforeToolCallback({tool:e,toolArgs:t,toolContext:n}),"beforeToolCallback")}async runAfterToolCallback({tool:e,toolArgs:t,toolContext:n,result:r}){return await this.runCallbacks(this.plugins,i=>i.afterToolCallback({tool:e,toolArgs:t,toolContext:n,result:r}),"afterToolCallback")}async runOnModelErrorCallback({callbackContext:e,llmRequest:t,error:n}){return await this.runCallbacks(this.plugins,r=>r.onModelErrorCallback({callbackContext:e,llmRequest:t,error:n}),"onModelErrorCallback")}async runBeforeModelCallback({callbackContext:e,llmRequest:t}){return await this.runCallbacks(this.plugins,n=>n.beforeModelCallback({callbackContext:e,llmRequest:t}),"beforeModelCallback")}async runAfterModelCallback({callbackContext:e,llmResponse:t}){return await this.runCallbacks(this.plugins,n=>n.afterModelCallback({callbackContext:e,llmResponse:t}),"afterModelCallback")}async runOnToolErrorCallback({tool:e,toolArgs:t,toolContext:n,error:r}){return await this.runCallbacks(this.plugins,i=>i.onToolErrorCallback({tool:e,toolArgs:t,toolContext:n,error:r}),"onToolErrorCallback")}};var it="adk_request_confirmation",rt="orcas_tool_call_security_check_states",jt="This tool call needs external confirmation before completion.",st=(n=>(n.DENY="DENY",n.CONFIRM="CONFIRM",n.ALLOW="ALLOW",n))(st||{}),ae=class{async evaluate(e){return Promise.resolve({outcome:"ALLOW",reason:"For prototyping purpose, all tool calls are allowed."})}},Se=class extends K{constructor(e){var t;super("security_plugin"),this.policyEngine=(t=e==null?void 0:e.policyEngine)!=null?t:new ae}async beforeToolCallback({tool:e,toolArgs:t,toolContext:n}){let r=this.getToolCallCheckState(n);if(!r)return this.checkToolCallPolicy({tool:e,toolArgs:t,toolContext:n});if(r==="CONFIRM"){if(!n.toolConfirmation)return{partial:jt};if(this.setToolCallCheckState(n,n.toolConfirmation),!n.toolConfirmation.confirmed)return{error:"Tool call rejected from confirmation flow."};n.toolConfirmation=void 0}}getToolCallCheckState(e){var r;let{functionCallId:t}=e;return t?((r=e.state.get(rt))!=null?r:{})[t]:void 0}setToolCallCheckState(e,t){var i;let{functionCallId:n}=e;if(!n)return;let r=(i=e.state.get(rt))!=null?i:{};r[n]=t,e.state.set(rt,r)}async checkToolCallPolicy({tool:e,toolArgs:t,toolContext:n}){let r=await this.policyEngine.evaluate({tool:e,toolArgs:t});switch(this.setToolCallCheckState(n,r.outcome),r.outcome){case"DENY":return{error:`This tool call is rejected by policy engine. Reason: ${r.reason}`};case"CONFIRM":return n.requestConfirmation({hint:`Policy engine requires confirmation calling tool: ${e.name}. Reason: ${r.reason}`}),{partial:jt};case"ALLOW":return;default:return}}};function Kt(o){if(!o.content||!o.content.parts)return[];let e=[];for(let t of o.content.parts)t&&t.functionCall&&t.functionCall.name===it&&e.push(t.functionCall);return e}var ce=class{async appendEvent({session:e,event:t}){return t.partial||(this.updateSessionState({session:e,event:t}),e.events.push(t)),t}updateSessionState({session:e,event:t}){if(!(!t.actions||!t.actions.stateDelta))for(let[n,r]of Object.entries(t.actions.stateDelta))n.startsWith(h.TEMP_PREFIX)||(e.state[n]=r)}};function le(o){return{id:o.id,appName:o.appName,userId:o.userId||"",state:o.state||{},events:o.events||[],lastUpdateTime:o.lastUpdateTime||0}}var V=class extends ce{constructor(){super(...arguments);this.sessions={};this.userState={};this.appState={}}createSession({appName:t,userId:n,state:r,sessionId:i}){let s=le({id:i||X(),appName:t,userId:n,state:r,events:[],lastUpdateTime:Date.now()});return this.sessions[t]||(this.sessions[t]={}),this.sessions[t][n]||(this.sessions[t][n]={}),this.sessions[t][n][s.id]=s,Promise.resolve(this.mergeState(t,n,se(s)))}getSession({appName:t,userId:n,sessionId:r,config:i}){if(!this.sessions[t]||!this.sessions[t][n]||!this.sessions[t][n][r])return Promise.resolve(void 0);let s=this.sessions[t][n][r],a=se(s);if(i&&(i.numRecentEvents&&(a.events=a.events.slice(-i.numRecentEvents)),i.afterTimestamp)){let c=a.events.length-1;for(;c>=0&&!(a.events[c].timestamp<i.afterTimestamp);)c--;c>=0&&(a.events=a.events.slice(c+1))}return Promise.resolve(this.mergeState(t,n,a))}listSessions({appName:t,userId:n}){if(!this.sessions[t]||!this.sessions[t][n])return Promise.resolve({sessions:[]});let r=[];for(let i of Object.values(this.sessions[t][n]))r.push(le({id:i.id,appName:i.appName,userId:i.userId,state:{},events:[],lastUpdateTime:i.lastUpdateTime}));return Promise.resolve({sessions:r})}async deleteSession({appName:t,userId:n,sessionId:r}){await this.getSession({appName:t,userId:n,sessionId:r})&&delete this.sessions[t][n][r]}async appendEvent({session:t,event:n}){await super.appendEvent({session:t,event:n}),t.lastUpdateTime=n.timestamp;let r=t.appName,i=t.userId,s=t.id,a=l=>{m.warn(`Failed to append event to session ${s}: ${l}`)};if(!this.sessions[r])return a(`appName ${r} not in sessions`),n;if(!this.sessions[r][i])return a(`userId ${i} not in sessions[appName]`),n;if(!this.sessions[r][i][s])return a(`sessionId ${s} not in sessions[appName][userId]`),n;if(n.actions&&n.actions.stateDelta)for(let l of Object.keys(n.actions.stateDelta))l.startsWith(h.APP_PREFIX)&&(this.appState[r]=this.appState[r]||{},this.appState[r][l.replace(h.APP_PREFIX,"")]=n.actions.stateDelta[l]),l.startsWith(h.USER_PREFIX)&&(this.userState[r]=this.userState[r]||{},this.userState[r][i]=this.userState[r][i]||{},this.userState[r][i][l.replace(h.USER_PREFIX,"")]=n.actions.stateDelta[l]);let c=this.sessions[r][i][s];return await super.appendEvent({session:c,event:n}),c.lastUpdateTime=n.timestamp,n}mergeState(t,n,r){if(this.appState[t])for(let i of Object.keys(this.appState[t]))r.state[h.APP_PREFIX+i]=this.appState[t][i];if(!this.userState[t]||!this.userState[t][n])return r;for(let i of Object.keys(this.userState[t][n]))r.state[h.USER_PREFIX+i]=this.userState[t][n][i];return r}};var Vt=require("@google/genai"),Zt=require("@opentelemetry/api");var Z=class{constructor(e){var t;this.appName=e.appName,this.agent=e.agent,this.pluginManager=new ee((t=e.plugins)!=null?t:[]),this.artifactService=e.artifactService,this.sessionService=e.sessionService,this.memoryService=e.memoryService,this.credentialService=e.credentialService}async*runAsync({userId:e,sessionId:t,newMessage:n,stateDelta:r,runConfig:i}){var a;i=Dt(i);let s=Zt.trace.getTracer("gcp.vertex.agent").startSpan("invocation");try{let c=await this.sessionService.getSession({appName:this.appName,userId:e,sessionId:t});if(!c)throw new Error(`Session not found: ${t}`);if(i.supportCfc&&this.agent instanceof b){let d=this.agent.canonicalModel.model;if(!d.startsWith("gemini-2"))throw new Error(`CFC is not supported for model: ${d} in agent: ${this.agent.name}`)}let l=new M({artifactService:this.artifactService,sessionService:this.sessionService,memoryService:this.memoryService,credentialService:this.credentialService,invocationId:ht(),agent:this.agent,session:c,userContent:n,runConfig:i,pluginManager:this.pluginManager}),f=await this.pluginManager.runOnUserMessageCallback({userMessage:n,invocationContext:l});if(f&&(n=f),n){if(!((a=n.parts)!=null&&a.length))throw new Error("No parts in the new_message.");i.saveInputBlobsAsArtifacts&&await this.saveArtifacts(l.invocationId,c.userId,c.id,n),await this.sessionService.appendEvent({session:c,event:T({invocationId:l.invocationId,author:"user",actions:r?_({stateDelta:r}):void 0,content:n})})}l.agent=this.determineAgentForResumption(c,this.agent);let u=await this.pluginManager.runBeforeRunCallback({invocationContext:l});if(u){let d=T({invocationId:l.invocationId,author:"model",content:u});await this.sessionService.appendEvent({session:c,event:d}),yield d}else for await(let d of l.agent.runAsync(l)){d.partial||await this.sessionService.appendEvent({session:c,event:d});let C=await this.pluginManager.runOnEventCallback({invocationContext:l,event:d});C?yield C:yield d}await this.pluginManager.runAfterRunCallback({invocationContext:l})}finally{s.end()}}async saveArtifacts(e,t,n,r){var i;if(!(!this.artifactService||!((i=r.parts)!=null&&i.length)))for(let s=0;s<r.parts.length;s++){let a=r.parts[s];if(!a.inlineData)continue;let c=`artifact_${e}_${s}`;await this.artifactService.saveArtifact({appName:this.appName,userId:t,sessionId:n,filename:c,artifact:a}),r.parts[s]=(0,Vt.createPartFromText)(`Uploaded file: ${c}. It is saved into artifacts`)}}determineAgentForResumption(e,t){let n=ao(e.events);if(n&&n.author)return t.findAgent(n.author)||t;for(let r=e.events.length-1;r>=0;r--){m.info("event: ",JSON.stringify(e.events[r]));let i=e.events[r];if(i.author==="user"||!i.author)continue;if(i.author===t.name)return t;let s=t.findSubAgent(i.author);if(!s){m.warn(`Event from an unknown agent: ${i.author}, event id: ${i.id}`);continue}if(this.isRoutableLlmAgent(s))return s}return t}isRoutableLlmAgent(e){let t=e;for(;t;){if(!(t instanceof b)||t.disallowTransferToParent)return!1;t=t.parentAgent}return!0}};function ao(o){var n,r,i,s;if(!o.length)return null;let t=(s=(i=(r=(n=o[o.length-1].content)==null?void 0:n.parts)==null?void 0:r.find(a=>a.functionResponse))==null?void 0:i.functionResponse)==null?void 0:s.id;if(!t)return null;for(let a=o.length-2;a>=0;a--){let c=o[a],l=x(c);if(l){for(let f of l)if(f.id===t)return c}}return null}var Ie=class extends Z{constructor({agent:e,appName:t="InMemoryRunner",plugins:n=[]}){super({appName:t,agent:e,plugins:n,artifactService:new J,sessionService:new V,memoryService:new j})}};var ue=require("@google/genai");var Pe=class{constructor(e){this.toolContext=e;this.invocationContext=e.invocationContext}async saveArtifact(e){return this.toolContext.saveArtifact(e.filename,e.artifact)}async loadArtifact(e){return this.toolContext.loadArtifact(e.filename,e.version)}async listArtifactKeys(e){return this.toolContext.listArtifacts()}async deleteArtifact(e){if(!this.toolContext.invocationContext.artifactService)throw new Error("Artifact service is not initialized.");return this.toolContext.invocationContext.artifactService.deleteArtifact(e)}async listVersions(e){if(!this.toolContext.invocationContext.artifactService)throw new Error("Artifact service is not initialized.");return this.toolContext.invocationContext.artifactService.listVersions(e)}};var we=class extends S{constructor(e){super({name:e.agent.name,description:e.agent.description||""}),this.agent=e.agent,this.skipSummarization=e.skipSummarization||!1}_getDeclaration(){let e;if(this.agent instanceof b&&this.agent.inputSchema?e={name:this.name,description:this.description,parameters:this.agent.inputSchema}:e={name:this.name,description:this.description,parameters:{type:ue.Type.OBJECT,properties:{request:{type:ue.Type.STRING}},required:["request"]}},this.apiVariant!=="GEMINI_API"){let t=this.agent instanceof b&&this.agent.outputSchema;e.response=t?{type:ue.Type.OBJECT}:{type:ue.Type.STRING}}return e}async runAsync({args:e,toolContext:t}){var f,u;this.skipSummarization&&(t.actions.skipSummarization=!0);let r={role:"user",parts:[{text:this.agent instanceof b&&this.agent.inputSchema?JSON.stringify(e):e.request}]},i=new Z({appName:this.agent.name,agent:this.agent,artifactService:new Pe(t),sessionService:new V,memoryService:new j,credentialService:t.invocationContext.credentialService}),s=await i.sessionService.createSession({appName:this.agent.name,userId:"tmp_user",state:t.state.toRecord()}),a;for await(let d of i.runAsync({userId:s.userId,sessionId:s.id,newMessage:r}))d.actions.stateDelta&&t.state.update(d.actions.stateDelta),a=d;if(!((u=(f=a==null?void 0:a.content)==null?void 0:f.parts)!=null&&u.length))return"";let c=this.agent instanceof b&&this.agent.outputSchema,l=a.content.parts.map(d=>d.text).filter(d=>d).join(`
32
+ `);return c?JSON.parse(l):l}};var te=class{constructor(e){this.toolFilter=e}isToolSelected(e,t){return this.toolFilter?typeof this.toolFilter=="function"?this.toolFilter(e,t):Array.isArray(this.toolFilter)?this.toolFilter.includes(e.name):!1:!0}async processLlmRequest(e,t){}};var co="^projects/[^/]+/locations/[^/]+/publishers/[^/]+/models/(.+)$";function zt(o){let e=o.match(co);return e?e[1]:o}function Wt(o){return zt(o).startsWith("gemini-")}function Qt(o){return zt(o).startsWith("gemini-1")}var at=class extends S{constructor(){super({name:"google_search",description:"Google Search Tool"})}runAsync(e){return Promise.resolve()}async processLlmRequest({toolContext:e,llmRequest:t}){if(t.model){if(t.config=t.config||{},t.config.tools=t.config.tools||[],Qt(t.model)){if(t.config.tools.length>0)throw new Error("Google search tool can not be used with other tools in Gemini 1.x.");t.config.tools.push({googleSearchRetrieval:{}});return}if(Wt(t.model)){t.config.tools.push({googleSearch:{}});return}throw new Error(`Google search tool is not supported for model ${t.model}`)}}},Xt=new at;var Ht=`
33
33
 
34
- NOTE: This is a long-running operation. Do not call this tool again if it has already returned some intermediate or pending status.`,ke=class extends B{constructor(e){super({...e,isLongRunning:!0})}_getDeclaration(){let e=super._getDeclaration();return e.description?e.description+=Zt:e.description=Zt.trimStart(),e}};var zt=require("@modelcontextprotocol/sdk/client/index.js"),Wt=require("@modelcontextprotocol/sdk/client/stdio.js"),Qt=require("@modelcontextprotocol/sdk/client/streamableHttp.js");var fe=class{constructor(e){this.connectionParams=e}async createSession(){let e=new zt.Client({name:"MCPClient",version:"1.0.0"});switch(this.connectionParams.type){case"StdioConnectionParams":await e.connect(new Wt.StdioClientTransport(this.connectionParams.serverParams));break;case"StreamableHTTPConnectionParams":await e.connect(new Qt.StreamableHTTPClientTransport(new URL(this.connectionParams.url)));break;default:let t=this.connectionParams;break}return e}};var N=require("@google/genai"),ne=require("zod");var ra=ne.z.object({type:ne.z.literal("object"),properties:ne.z.record(ne.z.unknown()).optional(),required:ne.z.string().array().optional()});function qn(o){switch(o.toLowerCase()){case"text":case"string":return N.Type.STRING;case"number":return N.Type.NUMBER;case"boolean":return N.Type.BOOLEAN;case"integer":return N.Type.INTEGER;case"array":return N.Type.ARRAY;case"object":return N.Type.OBJECT;default:return N.Type.TYPE_UNSPECIFIED}}function rt(o){if(!o)return;function e(t){let n=qn(t.type),r={type:n,description:t.description};if(n===N.Type.OBJECT){if(r.properties={},t.properties)for(let i in t.properties)r.properties[i]=e(t.properties[i]);r.required=t.required}else n===N.Type.ARRAY&&t.items&&(r.items=e(t.items));return r}return e(o)}var de=class extends R{constructor(e,t){super({name:e.name,description:e.description||""}),this.mcpTool=e,this.mcpSessionManager=t}_getDeclaration(){let e;return e={name:this.mcpTool.name,description:this.mcpTool.description,parameters:rt(this.mcpTool.inputSchema),response:rt(this.mcpTool.outputSchema)},e}async runAsync(e){let t=await this.mcpSessionManager.createSession(),n={};return n.params={name:this.mcpTool.name,arguments:e.args},await t.callTool(n.params)}};var it=class extends te{constructor(e,t=[]){super(t),this.mcpSessionManager=new fe(e)}async getTools(e){let n=await(await this.mcpSessionManager.createSession()).listTools();m.debug(`number of tools: ${n.tools.length}`);for(let r of n.tools)m.debug(`tool: ${r.name}`);return n.tools.map(r=>new de(r,this.mcpSessionManager))}async close(){}};var Ht=require("@google-cloud/storage"),Le=require("@google/genai");var st=class{constructor(e){this.bucket=new Ht.Storage().bucket(e)}async saveArtifact(e){let t=await this.listVersions(e),n=t.length>0?Math.max(...t)+1:0,r=this.bucket.file(Pe({...e,version:n}));if(e.artifact.inlineData)return await r.save(JSON.stringify(e.artifact.inlineData.data),{contentType:e.artifact.inlineData.mimeType}),n;if(e.artifact.text)return await r.save(e.artifact.text,{contentType:"text/plain"}),n;throw new Error("Artifact must have either inlineData or text.")}async loadArtifact(e){let t=e.version;if(t===void 0){let s=await this.listVersions(e);if(s.length===0)return;t=Math.max(...s)}let n=this.bucket.file(Pe({...e,version:t})),[[r],[i]]=await Promise.all([n.getMetadata(),n.download()]);return r.contentType==="text/plain"?(0,Le.createPartFromText)(i.toString("utf-8")):(0,Le.createPartFromBase64)(i.toString("base64"),r.contentType)}async listArtifactKeys(e){let t=[],n=`${e.appName}/${e.userId}/${e.sessionId}/`,r=`${e.appName}/${e.userId}/user/`,[[i],[s]]=await Promise.all([this.bucket.getFiles({prefix:n}),this.bucket.getFiles({prefix:r})]);for(let a of i)t.push(a.name.split("/").pop());for(let a of s)t.push(a.name.split("/").pop());return t.sort((a,l)=>a.localeCompare(l))}async deleteArtifact(e){let t=await this.listVersions(e);await Promise.all(t.map(n=>this.bucket.file(Pe({...e,version:n})).delete()))}async listVersions(e){let t=Pe(e),[n]=await this.bucket.getFiles({prefix:t}),r=[];for(let i of n){let s=i.name.split("/").pop();r.push(parseInt(s,10))}return r}};function Pe({appName:o,userId:e,sessionId:t,filename:n,version:r}){return n.startsWith("user:")?`${o}/${e}/user/${n}/${r}`:`${o}/${e}/${t}/${n}/${r}`}0&&(module.exports={AgentTool,BaseAgent,BaseLlm,BasePlugin,BaseSessionService,BaseTool,BaseToolset,CallbackContext,FunctionTool,GOOGLE_SEARCH,GcsArtifactService,Gemini,InMemoryArtifactService,InMemoryMemoryService,InMemoryPolicyEngine,InMemoryRunner,InMemorySessionService,InvocationContext,LLMRegistry,LiveRequestQueue,LlmAgent,LogLevel,LoggingPlugin,LongRunningFunctionTool,LoopAgent,MCPSessionManager,MCPTool,MCPToolset,ParallelAgent,PluginManager,PolicyOutcome,REQUEST_CONFIRMATION_FUNCTION_CALL_NAME,Runner,SecurityPlugin,SequentialAgent,StreamingMode,ToolConfirmation,ToolContext,createEvent,createEventActions,createSession,functionsExportedForTestingOnly,getAskUserConfirmationFunctionCalls,getFunctionCalls,getFunctionResponses,hasTrailingCodeExecutionResult,isFinalResponse,setLogLevel,stringifyContent,zodObjectToSchema});
34
+ NOTE: This is a long-running operation. Do not call this tool again if it has already returned some intermediate or pending status.`,ke=class extends B{constructor(e){super({...e,isLongRunning:!0})}_getDeclaration(){let e=super._getDeclaration();return e.description?e.description+=Ht:e.description=Ht.trimStart(),e}};var Yt=require("@modelcontextprotocol/sdk/client/index.js"),Jt=require("@modelcontextprotocol/sdk/client/stdio.js"),en=require("@modelcontextprotocol/sdk/client/streamableHttp.js");var fe=class{constructor(e){this.connectionParams=e}async createSession(){let e=new Yt.Client({name:"MCPClient",version:"1.0.0"});switch(this.connectionParams.type){case"StdioConnectionParams":await e.connect(new Jt.StdioClientTransport(this.connectionParams.serverParams));break;case"StreamableHTTPConnectionParams":await e.connect(new en.StreamableHTTPClientTransport(new URL(this.connectionParams.url)));break;default:let t=this.connectionParams;break}return e}};var O=require("@google/genai"),ne=require("zod");var $a=ne.z.object({type:ne.z.literal("object"),properties:ne.z.record(ne.z.unknown()).optional(),required:ne.z.string().array().optional()});function lo(o){switch(o.toLowerCase()){case"text":case"string":return O.Type.STRING;case"number":return O.Type.NUMBER;case"boolean":return O.Type.BOOLEAN;case"integer":return O.Type.INTEGER;case"array":return O.Type.ARRAY;case"object":return O.Type.OBJECT;default:return O.Type.TYPE_UNSPECIFIED}}function ct(o){if(!o)return;function e(t){let n=lo(t.type),r={type:n,description:t.description};if(n===O.Type.OBJECT){if(r.properties={},t.properties)for(let i in t.properties)r.properties[i]=e(t.properties[i]);r.required=t.required}else n===O.Type.ARRAY&&t.items&&(r.items=e(t.items));return r}return e(o)}var de=class extends S{constructor(e,t){super({name:e.name,description:e.description||""}),this.mcpTool=e,this.mcpSessionManager=t}_getDeclaration(){let e;return e={name:this.mcpTool.name,description:this.mcpTool.description,parameters:ct(this.mcpTool.inputSchema),response:ct(this.mcpTool.outputSchema)},e}async runAsync(e){let t=await this.mcpSessionManager.createSession(),n={};return n.params={name:this.mcpTool.name,arguments:e.args},await t.callTool(n.params)}};var lt=class extends te{constructor(e,t=[]){super(t),this.mcpSessionManager=new fe(e)}async getTools(e){let n=await(await this.mcpSessionManager.createSession()).listTools();m.debug(`number of tools: ${n.tools.length}`);for(let r of n.tools)m.debug(`tool: ${r.name}`);return n.tools.map(r=>new de(r,this.mcpSessionManager))}async close(){}};var tn=require("@google-cloud/storage"),Me=require("@google/genai");var ut=class{constructor(e){this.bucket=new tn.Storage().bucket(e)}async saveArtifact(e){let t=await this.listVersions(e),n=t.length>0?Math.max(...t)+1:0,r=this.bucket.file(Le({...e,version:n}));if(e.artifact.inlineData)return await r.save(JSON.stringify(e.artifact.inlineData.data),{contentType:e.artifact.inlineData.mimeType}),n;if(e.artifact.text)return await r.save(e.artifact.text,{contentType:"text/plain"}),n;throw new Error("Artifact must have either inlineData or text.")}async loadArtifact(e){let t=e.version;if(t===void 0){let s=await this.listVersions(e);if(s.length===0)return;t=Math.max(...s)}let n=this.bucket.file(Le({...e,version:t})),[[r],[i]]=await Promise.all([n.getMetadata(),n.download()]);return r.contentType==="text/plain"?(0,Me.createPartFromText)(i.toString("utf-8")):(0,Me.createPartFromBase64)(i.toString("base64"),r.contentType)}async listArtifactKeys(e){let t=[],n=`${e.appName}/${e.userId}/${e.sessionId}/`,r=`${e.appName}/${e.userId}/user/`,[[i],[s]]=await Promise.all([this.bucket.getFiles({prefix:n}),this.bucket.getFiles({prefix:r})]);for(let a of i)t.push(a.name.split("/").pop());for(let a of s)t.push(a.name.split("/").pop());return t.sort((a,c)=>a.localeCompare(c))}async deleteArtifact(e){let t=await this.listVersions(e);await Promise.all(t.map(n=>this.bucket.file(Le({...e,version:n})).delete()))}async listVersions(e){let t=Le(e),[n]=await this.bucket.getFiles({prefix:t}),r=[];for(let i of n){let s=i.name.split("/").pop();r.push(parseInt(s,10))}return r}};function Le({appName:o,userId:e,sessionId:t,filename:n,version:r}){return n.startsWith("user:")?`${o}/${e}/user/${n}/${r}`:`${o}/${e}/${t}/${n}/${r}`}var Be=require("@opentelemetry/api"),nn=require("@opentelemetry/api-logs"),Oe=require("@opentelemetry/sdk-logs"),_e=require("@opentelemetry/sdk-metrics"),on=require("@opentelemetry/resources"),rn=require("@opentelemetry/sdk-trace-base"),sn=require("@opentelemetry/sdk-trace-node"),an=require("@opentelemetry/exporter-trace-otlp-http"),cn=require("@opentelemetry/exporter-metrics-otlp-http"),ln=require("@opentelemetry/exporter-logs-otlp-http");function uo(o=[],e){let t=e||fo(),n=[...o,po()],r=n.flatMap(a=>a.spanProcessors||[]),i=n.flatMap(a=>a.metricReaders||[]),s=n.flatMap(a=>a.logRecordProcessors||[]);if(r.length>0){let a=new sn.NodeTracerProvider({resource:t,spanProcessors:r});a.register(),Be.trace.setGlobalTracerProvider(a)}if(i.length>0){let a=new _e.MeterProvider({readers:i,resource:t});Be.metrics.setGlobalMeterProvider(a)}if(s.length>0){let a=new Oe.LoggerProvider({resource:t,processors:s});nn.logs.setGlobalLoggerProvider(a)}}function fo(){return(0,on.detectResources)({detectors:[]})}function mo(){return{enableTracing:!!(process.env.OTEL_EXPORTER_OTLP_ENDPOINT||process.env.OTEL_EXPORTER_OTLP_TRACES_ENDPOINT),enableMetrics:!!(process.env.OTEL_EXPORTER_OTLP_ENDPOINT||process.env.OTEL_EXPORTER_OTLP_METRICS_ENDPOINT),enableLogging:!!(process.env.OTEL_EXPORTER_OTLP_ENDPOINT||process.env.OTEL_EXPORTER_OTLP_LOGS_ENDPOINT)}}function po(o=mo()){let{enableTracing:e,enableMetrics:t,enableLogging:n}=o;return{spanProcessors:e?[new rn.BatchSpanProcessor(new an.OTLPTraceExporter)]:[],metricReaders:t?[new _e.PeriodicExportingMetricReader({exporter:new cn.OTLPMetricExporter})]:[],logRecordProcessors:n?[new Oe.BatchLogRecordProcessor(new ln.OTLPLogExporter)]:[]}}var un=require("google-auth-library"),fn=require("@opentelemetry/sdk-metrics"),dn=require("@opentelemetry/resources"),mn=require("@opentelemetry/resource-detector-gcp"),pn=require("@google-cloud/opentelemetry-cloud-trace-exporter"),gn=require("@opentelemetry/sdk-trace-base"),hn=require("@google-cloud/opentelemetry-cloud-monitoring-exporter");var go="Cannot determine GCP Project. OTel GCP Exporters cannot be set up. Please make sure to log into correct GCP Project.";async function ho(){try{return await new un.GoogleAuth().getProjectId()||void 0}catch{return}}async function Co(o={}){let{enableTracing:e=!1,enableMetrics:t=!1}=o,n=await ho();return n?{spanProcessors:e?[new gn.BatchSpanProcessor(new pn.TraceExporter({projectId:n}))]:[],metricReaders:t?[new fn.PeriodicExportingMetricReader({exporter:new hn.MetricExporter({projectId:n}),exportIntervalMillis:5e3})]:[],logRecordProcessors:[]}:(m.warn(go),{})}function vo(){return(0,dn.detectResources)({detectors:[mn.gcpDetector]})}0&&(module.exports={AgentTool,BaseAgent,BaseLlm,BasePlugin,BaseSessionService,BaseTool,BaseToolset,CallbackContext,FunctionTool,GOOGLE_SEARCH,GcsArtifactService,Gemini,InMemoryArtifactService,InMemoryMemoryService,InMemoryPolicyEngine,InMemoryRunner,InMemorySessionService,InvocationContext,LLMRegistry,LiveRequestQueue,LlmAgent,LogLevel,LoggingPlugin,LongRunningFunctionTool,LoopAgent,MCPSessionManager,MCPTool,MCPToolset,ParallelAgent,PluginManager,PolicyOutcome,REQUEST_CONFIRMATION_FUNCTION_CALL_NAME,Runner,SecurityPlugin,SequentialAgent,State,StreamingMode,ToolConfirmation,ToolContext,createEvent,createEventActions,createSession,functionsExportedForTestingOnly,getAskUserConfirmationFunctionCalls,getFunctionCalls,getFunctionResponses,getGcpExporters,getGcpResource,hasTrailingCodeExecutionResult,isFinalResponse,maybeSetOtelProviders,setLogLevel,stringifyContent,version,zodObjectToSchema});
35
35
  /**
36
36
  * @license
37
37
  * Copyright 2025 Google LLC