@paean-ai/adk 0.2.6 → 0.2.8

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.
package/dist/cjs/index.js CHANGED
@@ -4,17 +4,17 @@
4
4
  * SPDX-License-Identifier: Apache-2.0
5
5
  */
6
6
 
7
- "use strict";var ze=Object.defineProperty;var Un=Object.getOwnPropertyDescriptor;var jn=Object.getOwnPropertyNames;var Kn=Object.prototype.hasOwnProperty;var Vn=(o,e)=>{for(var t in e)ze(o,t,{get:e[t],enumerable:!0})},Zn=(o,e,t,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let r of jn(e))!Kn.call(o,r)&&r!==t&&ze(o,r,{get:()=>e[r],enumerable:!(n=Un(e,r))||n.enumerable});return o};var zn=o=>Zn(ze({},"__esModule",{value:!0}),o);var Xo={};Vn(Xo,{AgentTool:()=>$e,BaseAgent:()=>k,BaseLlm:()=>J,BasePlugin:()=>V,BaseSessionService:()=>ge,BaseTool:()=>R,BaseToolset:()=>ae,BuiltInCodeExecutor:()=>Y,CallbackContext:()=>w,FunctionTool:()=>N,GOOGLE_SEARCH:()=>An,GcsArtifactService:()=>It,Gemini:()=>ee,InMemoryArtifactService:()=>ie,InMemoryMemoryService:()=>K,InMemoryPolicyEngine:()=>me,InMemoryRunner:()=>De,InMemorySessionService:()=>Z,InvocationContext:()=>O,LLMRegistry:()=>te,LiveRequestQueue:()=>Se,LlmAgent:()=>v,LogLevel:()=>Je,LoggingPlugin:()=>Be,LongRunningFunctionTool:()=>qe,LoopAgent:()=>_e,MCPSessionManager:()=>ve,MCPTool:()=>ye,MCPToolset:()=>Rt,ParallelAgent:()=>Me,PluginManager:()=>se,PolicyOutcome:()=>bt,REQUEST_CONFIRMATION_FUNCTION_CALL_NAME:()=>At,Runner:()=>z,SecurityPlugin:()=>Fe,SequentialAgent:()=>Oe,State:()=>g,StreamingMode:()=>ke,ToolConfirmation:()=>U,ToolContext:()=>F,createEvent:()=>y,createEventActions:()=>M,createSession:()=>he,functionsExportedForTestingOnly:()=>Dt,getAskUserConfirmationFunctionCalls:()=>yn,getFunctionCalls:()=>b,getFunctionResponses:()=>I,getGcpExporters:()=>Yo,getGcpResource:()=>Qo,hasTrailingCodeExecutionResult:()=>We,isBaseLlm:()=>Pe,isFinalResponse:()=>W,maybeSetOtelProviders:()=>jo,setLogLevel:()=>Bt,stringifyContent:()=>_t,version:()=>Ie,zodObjectToSchema:()=>pe});module.exports=zn(Xo);var Xe=require("@opentelemetry/api");function M(o={}){return{stateDelta:{},artifactDelta:{},requestedAuthConfigs:{},requestedToolConfirmations:{},...o}}function kt(o,e){let t=M();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 y(o={}){return{...o,id:o.id||Ye(),invocationId:o.invocationId||"",author:o.author,actions:o.actions||M(),longRunningToolIds:o.longRunningToolIds||[],branch:o.branch,timestamp:o.timestamp||Date.now()}}function W(o){return o.actions.skipSummarization||o.longRunningToolIds&&o.longRunningToolIds.length>0?!0:b(o).length===0&&I(o).length===0&&!o.partial&&!We(o)}function b(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 We(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 _t(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 Lt="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";function Ye(){let o="";for(let e=0;e<8;e++)o+=Lt[Math.floor(Math.random()*Lt.length)];return o}var g=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}}};g.APP_PREFIX="app:",g.USER_PREFIX="user:",g.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 g(this.invocationContext.session.state,{})}};var w=class extends P{constructor({invocationContext:e,eventActions:t}){super(e),this.eventActions=t||M(),this._state=new g(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 Ee(){return typeof window<"u"}var xe="xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx";function ne(){let o="";for(let e=0;e<xe.length;e++){let t=Math.random()*16|0;xe[e]==="x"?o+=t.toString(16):xe[e]==="y"?o+=(t&3|8).toString(16):o+=xe[e]}return o}function Mt(o){return Ee()?window.atob(o):Buffer.from(o,"base64").toString()}var Qe=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`)}},O=class{constructor(e){this.invocationCostManager=new Qe;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 Ot(){return`e-${ne()}`}var k=class{constructor(e){this.name=Wn(e.name),this.description=e.description,this.parentAgent=e.parentAgent,this.subAgents=e.subAgents||[],this.rootAgent=Qn(this),this.beforeAgentCallback=Nt(e.beforeAgentCallback),this.afterAgentCallback=Nt(e.afterAgentCallback),this.setParentAgentForSubAgents()}async*runAsync(e){let t=Xe.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=Xe.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 O({...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,y({invocationId:e.invocationId,author:this.name,branch:e.branch,content:r,actions:t.eventActions})}if(t.state.hasDelta())return y({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 y({invocationId:e.invocationId,author:this.name,branch:e.branch,content:r,actions:t.eventActions})}if(t.state.hasDelta())return y({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 Wn(o){if(!Yn(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 Yn(o){return/^[\p{ID_Start}$_][\p{ID_Continue}$_]*$/u.test(o)}function Qn(o){for(;o.parentAgent;)o=o.parentAgent;return o}function Nt(o){return o?Array.isArray(o)?o:[o]:[]}var Ft=require("@google/genai");var le=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 U=class{constructor({hint:e,confirmed:t,payload:n}){this.hint=e!=null?e:"",this.confirmed=t,this.payload=n}};var F=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 le(e);this.eventActions.requestedAuthConfigs[this.functionCallId]=t.generateAuthRequest()}getAuthResponse(e){return new le(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 U({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||{}),oe=1;function Bt(o){oe=o}var He=class{log(e,...t){if(!(e<oe))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){oe>0||console.debug(Ae(0),...e)}info(...e){oe>1||console.info(Ae(1),...e)}warn(...e){oe>2||console.warn(Ae(2),...e)}error(...e){oe>3||console.error(Ae(3),...e)}},Xn={0:"DEBUG",1:"INFO",2:"WARN",3:"ERROR"},Hn={0:"\x1B[34m",1:"\x1B[32m",2:"\x1B[33m",3:"\x1B[31m"},Jn="\x1B[0m";function Ae(o){return`${Hn[o]}[ADK ${Xn[o]}]:${Jn}`}var p=new He;var et="adk-",be="adk_request_credential",re="adk_request_confirmation",Dt={handleFunctionCallList:Te};function tt(){return`${et}${ne()}`}function Gt(o){let e=b(o);if(e)for(let t of e)t.id||(t.id=tt())}function $t(o){if(o&&o.parts)for(let e of o.parts)e.functionCall&&e.functionCall.id&&e.functionCall.id.startsWith(et)&&(e.functionCall.id=void 0),e.functionResponse&&e.functionResponse.id&&e.functionResponse.id.startsWith(et)&&(e.functionResponse.id=void 0)}function qt(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 Ut(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 c={name:be,args:{function_call_id:i,auth_config:s},id:tt()};n.add(c.id),t.push({functionCall:c})}return y({invocationId:o.invocationId,author:o.agent.name,branch:o.branch,content:{parts:t,role:e.content.role},longRunningToolIds:Array.from(n)})}function jt({invocationContext:o,functionCallEvent:e,functionResponseEvent:t}){var s,c;if(!((s=t.actions)!=null&&s.requestedToolConfirmations))return;let n=[],r=new Set,i=b(e);for(let[a,l]of Object.entries(t.actions.requestedToolConfirmations)){let f=(c=i.find(d=>d.id===a))!=null?c:void 0;if(!f)continue;let u={name:re,args:{originalFunctionCall:f,toolConfirmation:l},id:tt()};r.add(u.id),n.push({functionCall:u})}return y({invocationId:o.invocationId,author:o.agent.name,branch:o.branch,content:{parts:n,role:t.content.role},longRunningToolIds:Array.from(r)})}async function eo(o,e,t){return p.debug(`callToolAsync ${o.name}`),await o.runAsync({args:e,toolContext:t})}async function Kt({invocationContext:o,functionCallEvent:e,toolsDict:t,beforeToolCallbacks:n,afterToolCallbacks:r,filters:i,toolConfirmationDict:s}){let c=b(e);return await Te({invocationContext:o,functionCalls:c,toolsDict:t,beforeToolCallbacks:n,afterToolCallbacks:r,filters:i,toolConfirmationDict:s})}async function Te({invocationContext:o,functionCalls:e,toolsDict:t,beforeToolCallbacks:n,afterToolCallbacks:r,filters:i,toolConfirmationDict:s}){var f;let c=[],a=e.filter(u=>!i||u.id&&i.has(u.id));for(let u of a){let d;s&&u.id&&(d=s[u.id]);let{tool:h,toolContext:x}=to({invocationContext:o,functionCall:u,toolsDict:t,toolConfirmation:d});p.debug(`execute_tool ${h.name}`);let C=(f=u.args)!=null?f:{},m=null,E;if(m=await o.pluginManager.runBeforeToolCallback({tool:h,toolArgs:C,toolContext:x}),m==null){for(let q of n)if(m=await q({tool:h,args:C,context:x}),m)break}if(m==null)try{m=await eo(h,C,x)}catch(q){if(q instanceof Error){let wt=await o.pluginManager.runOnToolErrorCallback({tool:h,toolArgs:C,toolContext:x,error:q});wt?m=wt:E=q.message}else E=q}let S=await o.pluginManager.runAfterToolCallback({tool:h,toolArgs:C,toolContext:x,result:m});if(S==null){for(let q of r)if(S=await q({tool:h,args:C,context:x,response:m}),S)break}if(S!=null&&(m=S),h.isLongRunning&&!m)continue;E?m={error:E}:(typeof m!="object"||m==null)&&(m={result:m});let Pt=y({invocationId:o.invocationId,author:o.agent.name,content:(0,Ft.createUserContent)({functionResponse:{id:x.functionCallId,name:h.name,response:m}}),actions:x.actions,branch:o.branch});p.debug("traceToolCall",{tool:h.name,args:C,functionResponseEvent:Pt.id}),c.push(Pt)}if(!c.length)return null;let l=no(c);return c.length>1&&(p.debug("execute_tool (merged)"),p.debug("traceMergedToolCalls",{responseEventId:l.id,functionResponseEvent:l.id})),l}function to({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 F({invocationContext:o,functionCallId:e.id||void 0,toolConfirmation:n});return{tool:t[e.name],toolContext:r}}function no(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=kt(n);return y({author:t.author,branch:t.branch,content:{role:"user",parts:e},actions:r,timestamp:t.timestamp})}var Se=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 ft=require("zod");var j=class{constructor(){this.optimizeDataFile=!1;this.stateful=!1;this.errorRetryAttempts=2;this.codeBlockDelimiters=[["```tool_code\n","\n```"],["```python\n","\n```"]];this.executionResultDelimiters=["```tool_output\n","\n```"]}};var oo="^projects/[^/]+/locations/[^/]+/publishers/[^/]+/models/(.+)$";function Re(o){let e=o.match(oo);return e?e[1]:o}function Vt(o){return Re(o).startsWith("gemini-")}function Zt(o){return Re(o).startsWith("gemini-1")}function zt(o){return Re(o).startsWith("gemini-2")}function Wt(o){let e=Re(o);return e.startsWith("gemini-3")&&e.includes("preview")}var Y=class extends j{executeCode(e){return Promise.resolve({stdout:"",stderr:"",outputFiles:[]})}processLlmRequest(e){if(e.model&&zt(e.model)){e.config=e.config||{},e.config.tools=e.config.tools||[],e.config.tools.push({codeExecution:{}});return}throw new Error(`Gemini code execution tool is not supported for model ${e.model}`)}};var ue=require("@google/genai");function L(o){if(o!==void 0)return JSON.parse(JSON.stringify(o))}function Yt(o,e){var f;if(!((f=o.parts)!=null&&f.length))return"";for(let u=0;u<o.parts.length;u++){let d=o.parts[u];if(d.executableCode&&(u===o.parts.length-1||!o.parts[u+1].codeExecutionResult))return o.parts=o.parts.slice(0,u+1),d.executableCode.code}let t=o.parts.filter(u=>u.text);if(!t.length)return"";let n=L(t[0]),r=t.map(u=>u.text).join(`
8
- `),i=e.map(u=>u[0]).join("|"),s=e.map(u=>u[1]).join("|"),c=new RegExp(`?<prefix>.*?)(${i})(?<codeStr>.*?)(${s})(?<suffix>.*?)$`,"s").exec(r),{prefix:a,codeStr:l}=(c==null?void 0:c.groups)||{};return l?(o.parts=[],a&&(n.text=a,o.parts.push(n)),o.parts.push(nt(l)),l):""}function nt(o){return{text:o,executableCode:{code:o,language:ue.Language.PYTHON}}}function Qt(o){if(o.stderr)return{text:o.stderr,codeExecutionResult:{outcome:ue.Outcome.OUTCOME_FAILED}};let e=[];return(o.stdout||!o.outputFiles)&&e.push(`Code execution result:
7
+ "use strict";var Xe=Object.defineProperty;var Vn=Object.getOwnPropertyDescriptor;var Zn=Object.getOwnPropertyNames;var zn=Object.prototype.hasOwnProperty;var Wn=(o,e)=>{for(var t in e)Xe(o,t,{get:e[t],enumerable:!0})},Yn=(o,e,t,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let r of Zn(e))!zn.call(o,r)&&r!==t&&Xe(o,r,{get:()=>e[r],enumerable:!(n=Vn(e,r))||n.enumerable});return o};var Qn=o=>Yn(Xe({},"__esModule",{value:!0}),o);var er={};Wn(er,{AgentTool:()=>Ke,BaseAgent:()=>M,BaseLlm:()=>oe,BasePlugin:()=>W,BaseSessionService:()=>ye,BaseTool:()=>I,BaseToolset:()=>fe,BuiltInCodeExecutor:()=>J,CallbackContext:()=>L,FunctionTool:()=>D,GOOGLE_SEARCH:()=>Sn,GcsArtifactService:()=>Lt,Gemini:()=>re,InMemoryArtifactService:()=>le,InMemoryMemoryService:()=>z,InMemoryPolicyEngine:()=>ve,InMemoryRunner:()=>Ue,InMemorySessionService:()=>Y,InvocationContext:()=>F,LLMRegistry:()=>ie,LiveRequestQueue:()=>we,LlmAgent:()=>y,LogLevel:()=>ot,LoggingPlugin:()=>$e,LongRunningFunctionTool:()=>Ve,LoopAgent:()=>Be,MCPSessionManager:()=>Ae,MCPTool:()=>be,MCPToolset:()=>kt,ParallelAgent:()=>Fe,PluginManager:()=>ue,PolicyOutcome:()=>It,REQUEST_CONFIRMATION_FUNCTION_CALL_NAME:()=>Rt,Runner:()=>Q,SecurityPlugin:()=>qe,SequentialAgent:()=>De,State:()=>C,StreamingMode:()=>Oe,ToolConfirmation:()=>V,ToolContext:()=>q,createEvent:()=>x,createEventActions:()=>B,createSession:()=>xe,functionsExportedForTestingOnly:()=>qt,getAskUserConfirmationFunctionCalls:()=>An,getFunctionCalls:()=>b,getFunctionResponses:()=>w,getGcpExporters:()=>Ho,getGcpResource:()=>Jo,hasTrailingCodeExecutionResult:()=>He,isBaseLlm:()=>_e,isFinalResponse:()=>H,maybeSetOtelProviders:()=>Zo,setLogLevel:()=>Gt,stringifyContent:()=>Nt,version:()=>Le,zodObjectToSchema:()=>Ce});module.exports=Qn(er);var tt=require("@opentelemetry/api");function B(o={}){return{stateDelta:{},artifactDelta:{},requestedAuthConfigs:{},requestedToolConfirmations:{},...o}}function Mt(o,e){let t=B();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||Je(),invocationId:o.invocationId||"",author:o.author,actions:o.actions||B(),longRunningToolIds:o.longRunningToolIds||[],branch:o.branch,timestamp:o.timestamp||Date.now()}}function H(o){return o.actions.skipSummarization||o.longRunningToolIds&&o.longRunningToolIds.length>0?!0:b(o).length===0&&w(o).length===0&&!o.partial&&!He(o)}function b(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 w(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 He(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 Nt(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 Ot="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";function Je(){let o="";for(let e=0;e<8;e++)o+=Ot[Math.floor(Math.random()*Ot.length)];return o}var C=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}}};C.APP_PREFIX="app:",C.USER_PREFIX="user:",C.TEMP_PREFIX="temp:";var k=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 C(this.invocationContext.session.state,{})}};var L=class extends k{constructor({invocationContext:e,eventActions:t}){super(e),this.eventActions=t||B(),this._state=new C(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 Se(){return typeof window<"u"}var Te="xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx";function se(){let o="";for(let e=0;e<Te.length;e++){let t=Math.random()*16|0;Te[e]==="x"?o+=t.toString(16):Te[e]==="y"?o+=(t&3|8).toString(16):o+=Te[e]}return o}function Bt(o){return Se()?window.atob(o):Buffer.from(o,"base64").toString()}var et=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`)}},F=class{constructor(e){this.invocationCostManager=new et;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 Ft(){return`e-${se()}`}var M=class{constructor(e){this.name=Xn(e.name),this.description=e.description,this.parentAgent=e.parentAgent,this.subAgents=e.subAgents||[],this.rootAgent=Jn(this),this.beforeAgentCallback=Dt(e.beforeAgentCallback),this.afterAgentCallback=Dt(e.afterAgentCallback),this.setParentAgentForSubAgents()}async*runAsync(e){let t=tt.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=tt.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 F({...e,agent:this})}async handleBeforeAgentCallback(e){if(this.beforeAgentCallback.length===0)return;let t=new L({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 L({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 Xn(o){if(!Hn(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 Hn(o){return/^[\p{ID_Start}$_][\p{ID_Continue}$_]*$/u.test(o)}function Jn(o){for(;o.parentAgent;)o=o.parentAgent;return o}function Dt(o){return o?Array.isArray(o)?o:[o]:[]}var $t=require("@google/genai");var pe=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 V=class{constructor({hint:e,confirmed:t,payload:n}){this.hint=e!=null?e:"",this.confirmed=t,this.payload=n}};var q=class extends L{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 pe(e);this.eventActions.requestedAuthConfigs[this.functionCallId]=t.generateAuthRequest()}getAuthResponse(e){return new pe(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 V({hint:e,confirmed:!1,payload:t})}};var ot=(r=>(r[r.DEBUG=0]="DEBUG",r[r.INFO=1]="INFO",r[r.WARN=2]="WARN",r[r.ERROR=3]="ERROR",r))(ot||{}),ae=1;function Gt(o){ae=o}var nt=class{log(e,...t){if(!(e<ae))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){ae>0||console.debug(Re(0),...e)}info(...e){ae>1||console.info(Re(1),...e)}warn(...e){ae>2||console.warn(Re(2),...e)}error(...e){ae>3||console.error(Re(3),...e)}},eo={0:"DEBUG",1:"INFO",2:"WARN",3:"ERROR"},to={0:"\x1B[34m",1:"\x1B[32m",2:"\x1B[33m",3:"\x1B[31m"},no="\x1B[0m";function Re(o){return`${to[o]}[ADK ${eo[o]}]:${no}`}var p=new nt;var rt="adk-",Ie="adk_request_credential",ce="adk_request_confirmation",qt={handleFunctionCallList:Pe};function it(){return`${rt}${se()}`}function Ut(o){let e=b(o);if(e)for(let t of e)t.id||(t.id=it())}function jt(o){if(o&&o.parts)for(let e of o.parts)e.functionCall&&e.functionCall.id&&e.functionCall.id.startsWith(rt)&&(e.functionCall.id=void 0),e.functionResponse&&e.functionResponse.id&&e.functionResponse.id.startsWith(rt)&&(e.functionResponse.id=void 0)}function Kt(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 Vt(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 c={name:Ie,args:{function_call_id:i,auth_config:s},id:it()};n.add(c.id),t.push({functionCall:c})}return x({invocationId:o.invocationId,author:o.agent.name,branch:o.branch,content:{parts:t,role:e.content.role},longRunningToolIds:Array.from(n)})}function Zt({invocationContext:o,functionCallEvent:e,functionResponseEvent:t}){var s,c;if(!((s=t.actions)!=null&&s.requestedToolConfirmations))return;let n=[],r=new Set,i=b(e);for(let[a,l]of Object.entries(t.actions.requestedToolConfirmations)){let f=(c=i.find(d=>d.id===a))!=null?c:void 0;if(!f)continue;let u={name:ce,args:{originalFunctionCall:f,toolConfirmation:l},id:it()};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 oo(o,e,t){return p.debug(`callToolAsync ${o.name}`),await o.runAsync({args:e,toolContext:t})}async function zt({invocationContext:o,functionCallEvent:e,toolsDict:t,beforeToolCallbacks:n,afterToolCallbacks:r,filters:i,toolConfirmationDict:s}){let c=b(e);return await Pe({invocationContext:o,functionCalls:c,toolsDict:t,beforeToolCallbacks:n,afterToolCallbacks:r,filters:i,toolConfirmationDict:s})}async function Pe({invocationContext:o,functionCalls:e,toolsDict:t,beforeToolCallbacks:n,afterToolCallbacks:r,filters:i,toolConfirmationDict:s}){var f;let c=[],a=e.filter(u=>!i||u.id&&i.has(u.id));for(let u of a){let d;s&&u.id&&(d=s[u.id]);let{tool:v,toolContext:A}=ro({invocationContext:o,functionCall:u,toolsDict:t,toolConfirmation:d});p.debug(`execute_tool ${v.name}`);let g=(f=u.args)!=null?f:{},m=null,h;if(m=await o.pluginManager.runBeforeToolCallback({tool:v,toolArgs:g,toolContext:A}),m==null){for(let S of n)if(m=await S({tool:v,args:g,context:A}),m)break}if(m==null)try{m=await oo(v,g,A)}catch(S){if(S instanceof Error){let R=await o.pluginManager.runOnToolErrorCallback({tool:v,toolArgs:g,toolContext:A,error:S});R?m=R:h=S.message}else h=S}let P=await o.pluginManager.runAfterToolCallback({tool:v,toolArgs:g,toolContext:A,result:m});if(P==null){for(let S of r)if(P=await S({tool:v,args:g,context:A,response:m}),P)break}if(P!=null&&(m=P),v.isLongRunning&&!m)continue;h?m={error:h}:(typeof m!="object"||m==null)&&(m={result:m});let X=x({invocationId:o.invocationId,author:o.agent.name,content:(0,$t.createUserContent)({functionResponse:{id:A.functionCallId,name:v.name,response:m}}),actions:A.actions,branch:o.branch});p.debug("traceToolCall",{tool:v.name,args:g,functionResponseEvent:X.id}),c.push(X)}if(!c.length)return null;let l=io(c);return c.length>1&&(p.debug("execute_tool (merged)"),p.debug("traceMergedToolCalls",{responseEventId:l.id,functionResponseEvent:l.id})),l}function ro({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 q({invocationContext:o,functionCallId:e.id||void 0,toolConfirmation:n});return{tool:t[e.name],toolContext:r}}function io(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 x({author:t.author,branch:t.branch,content:{role:"user",parts:e},actions:r,timestamp:t.timestamp})}var we=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 gt=require("zod");var Z=class{constructor(){this.optimizeDataFile=!1;this.stateful=!1;this.errorRetryAttempts=2;this.codeBlockDelimiters=[["```tool_code\n","\n```"],["```python\n","\n```"]];this.executionResultDelimiters=["```tool_output\n","\n```"]}};var so="^projects/[^/]+/locations/[^/]+/publishers/[^/]+/models/(.+)$";function ke(o){let e=o.match(so);return e?e[1]:o}function Wt(o){return ke(o).startsWith("gemini-")}function Yt(o){return ke(o).startsWith("gemini-1")}function Qt(o){return ke(o).startsWith("gemini-2")}function Xt(o){let e=ke(o);return e.startsWith("gemini-3")&&e.includes("preview")}var J=class extends Z{executeCode(e){return Promise.resolve({stdout:"",stderr:"",outputFiles:[]})}processLlmRequest(e){if(e.model&&Qt(e.model)){e.config=e.config||{},e.config.tools=e.config.tools||[],e.config.tools.push({codeExecution:{}});return}throw new Error(`Gemini code execution tool is not supported for model ${e.model}`)}};var me=require("@google/genai");function O(o){if(o!==void 0)return JSON.parse(JSON.stringify(o))}function Ht(o,e){var f;if(!((f=o.parts)!=null&&f.length))return"";for(let u=0;u<o.parts.length;u++){let d=o.parts[u];if(d.executableCode&&(u===o.parts.length-1||!o.parts[u+1].codeExecutionResult))return o.parts=o.parts.slice(0,u+1),d.executableCode.code}let t=o.parts.filter(u=>u.text);if(!t.length)return"";let n=O(t[0]),r=t.map(u=>u.text).join(`
8
+ `),i=e.map(u=>u[0]).join("|"),s=e.map(u=>u[1]).join("|"),c=new RegExp(`?<prefix>.*?)(${i})(?<codeStr>.*?)(${s})(?<suffix>.*?)$`,"s").exec(r),{prefix:a,codeStr:l}=(c==null?void 0:c.groups)||{};return l?(o.parts=[],a&&(n.text=a,o.parts.push(n)),o.parts.push(st(l)),l):""}function st(o){return{text:o,executableCode:{code:o,language:me.Language.PYTHON}}}function Jt(o){if(o.stderr)return{text:o.stderr,codeExecutionResult:{outcome:me.Outcome.OUTCOME_FAILED}};let e=[];return(o.stdout||!o.outputFiles)&&e.push(`Code execution result:
9
9
  ${o.stdout}
10
10
  `),o.outputFiles&&e.push(`Saved artifacts:
11
11
  `+o.outputFiles.map(t=>t.name).join(", ")),{text:e.join(`
12
12
 
13
- `),codeExecutionResult:{outcome:ue.Outcome.OUTCOME_OK}}}function Xt(o,e,t){var r;if(!((r=o.parts)!=null&&r.length))return;let n=o.parts[o.parts.length-1];n.executableCode?o.parts[o.parts.length-1]={text:e[0]+n.executableCode.code+e[1]}:o.parts.length==1&&n.codeExecutionResult&&(o.parts[o.parts.length-1]={text:t[0]+n.codeExecutionResult.output+t[1]},o.role="user")}var ot="_code_execution_context",rt="execution_session_id",Q="processed_input_files",X="_code_executor_input_files",H="_code_executor_error_counts",it="_code_execution_results",fe=class{constructor(e){this.sessionState=e;var t;this.context=(t=e.get(ot))!=null?t:{},this.sessionState=e}getStateDelta(){return{[ot]:L(this.context)}}getExecutionId(){if(rt in this.context)return this.context[rt]}setExecutionId(e){this.context[rt]=e}getProcessedFileNames(){return Q in this.context?this.context[Q]:[]}addProcessedFileNames(e){Q in this.context||(this.context[Q]=[]),this.context[Q].push(...e)}getInputFiles(){return X in this.sessionState?this.sessionState.get(X):[]}addInputFiles(e){X in this.sessionState||this.sessionState.set(X,[]),this.sessionState.get(X).push(...e)}clearInputFiles(){X in this.sessionState&&this.sessionState.set(X,[]),Q in this.context&&(this.context[Q]=[])}getErrorCount(e){return H in this.sessionState&&this.sessionState.get(H)[e]||0}incrementErrorCount(e){H in this.sessionState||this.sessionState.set(H,{}),this.sessionState.get(H)[e]=this.getErrorCount(e)+1}resetErrorCount(e){if(!(H in this.sessionState))return;let t=this.sessionState.get(H);e in t&&delete t[e]}updateCodeExecutionResult({invocationId:e,code:t,resultStdout:n,resultStderr:r}){it in this.sessionState||this.sessionState.set(it,{});let i=this.sessionState.get(it);e in i||(i[e]=[]),i[e].push({code:t,resultStdout:n,resultStderr:r,timestamp:Date.now()})}getCodeExecutionContext(e){return this.sessionState.get(ot)||{}}};var Ie="0.2.4";var ro="google-adk",io="gl-typescript",so="remote_reasoning_engine",ao="GOOGLE_CLOUD_AGENT_ENGINE_ID";function co(){let o=`${ro}/${Ie}`;!Ee()&&process.env[ao]&&(o=`${o}+${so}`);let e=`${io}/${Ee()?window.navigator.userAgent:process.version}`;return[o,e]}function Ht(){return co()}var st=Symbol("baseModel");function Pe(o){return typeof o=="object"&&o!==null&&st in o&&o[st]===!0}var Jt;Jt=st;var J=class{constructor({model:e}){this[Jt]=!0;this.model=e}get trackingHeaders(){let t=Ht().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."}]})}};J.supportedModels=[];function de(o,e){o.config||(o.config={});let t=e.join(`
13
+ `),codeExecutionResult:{outcome:me.Outcome.OUTCOME_OK}}}function en(o,e,t){var r;if(!((r=o.parts)!=null&&r.length))return;let n=o.parts[o.parts.length-1];n.executableCode?o.parts[o.parts.length-1]={text:e[0]+n.executableCode.code+e[1]}:o.parts.length==1&&n.codeExecutionResult&&(o.parts[o.parts.length-1]={text:t[0]+n.codeExecutionResult.output+t[1]},o.role="user")}var at="_code_execution_context",ct="execution_session_id",ee="processed_input_files",te="_code_executor_input_files",ne="_code_executor_error_counts",lt="_code_execution_results",ge=class{constructor(e){this.sessionState=e;var t;this.context=(t=e.get(at))!=null?t:{},this.sessionState=e}getStateDelta(){return{[at]:O(this.context)}}getExecutionId(){if(ct in this.context)return this.context[ct]}setExecutionId(e){this.context[ct]=e}getProcessedFileNames(){return ee in this.context?this.context[ee]:[]}addProcessedFileNames(e){ee in this.context||(this.context[ee]=[]),this.context[ee].push(...e)}getInputFiles(){return te in this.sessionState?this.sessionState.get(te):[]}addInputFiles(e){te in this.sessionState||this.sessionState.set(te,[]),this.sessionState.get(te).push(...e)}clearInputFiles(){te in this.sessionState&&this.sessionState.set(te,[]),ee in this.context&&(this.context[ee]=[])}getErrorCount(e){return ne in this.sessionState&&this.sessionState.get(ne)[e]||0}incrementErrorCount(e){ne in this.sessionState||this.sessionState.set(ne,{}),this.sessionState.get(ne)[e]=this.getErrorCount(e)+1}resetErrorCount(e){if(!(ne in this.sessionState))return;let t=this.sessionState.get(ne);e in t&&delete t[e]}updateCodeExecutionResult({invocationId:e,code:t,resultStdout:n,resultStderr:r}){lt in this.sessionState||this.sessionState.set(lt,{});let i=this.sessionState.get(lt);e in i||(i[e]=[]),i[e].push({code:t,resultStdout:n,resultStderr:r,timestamp:Date.now()})}getCodeExecutionContext(e){return this.sessionState.get(at)||{}}};var Le="0.2.4";var ao="google-adk",co="gl-typescript",lo="remote_reasoning_engine",uo="GOOGLE_CLOUD_AGENT_ENGINE_ID";function fo(){let o=`${ao}/${Le}`;!Se()&&process.env[uo]&&(o=`${o}+${lo}`);let e=`${co}/${Se()?window.navigator.userAgent:process.version}`;return[o,e]}function tn(){return fo()}var ut=Symbol("baseModel");function _e(o){return typeof o=="object"&&o!==null&&ut in o&&o[ut]===!0}var nn;nn=ut;var oe=class{constructor({model:e}){this[nn]=!0;this.model=e}get trackingHeaders(){let t=tn().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."}]})}};oe.supportedModels=[];function he(o,e){o.config||(o.config={});let t=e.join(`
14
14
 
15
15
  `);o.config.systemInstruction?o.config.systemInstruction+=`
16
16
 
17
- `+t:o.config.systemInstruction=t}function en(o,e){o.config||(o.config={}),o.config.responseSchema=e,o.config.responseMimeType="application/json"}var D=require("@google/genai");function tn(){return lo("GOOGLE_GENAI_USE_VERTEXAI")?"VERTEX_AI":"GEMINI_API"}function lo(o){if(!process.env)return!1;let e=(process.env[o]||"").toLowerCase();return["true","1"].includes(o.toLowerCase())}var we=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"}):p.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);p.debug("Sending LLM function response:",t),this.geminiSession.sendToolResponse({functionResponses:t})}else p.debug("Sending LLM new content",e),this.geminiSession.sendClientContent({turns:[e],turnComplete:!0})}async sendRealtime(e){p.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 at(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 fo="https://aiplatform.googleapis.com/v1/publishers/google",ee=class extends J{constructor({model:e,apiKey:t,vertexai:n,project:r,location:i,headers:s,apiEndpoint:c}){e||(e="gemini-2.5-flash"),super({model:e}),this.project=r,this.location=i,this.apiKey=t,this.headers=s,this.isGemini3Preview=Wt(e);let a=typeof process=="object";this.apiEndpoint=c,!this.apiEndpoint&&a&&(this.apiEndpoint=process.env.GEMINI_API_ENDPOINT),!this.apiEndpoint&&this.isGemini3Preview&&(this.apiEndpoint=fo,p.info(`Using Gemini 3 preview endpoint: ${this.apiEndpoint}`));let l=!!n;if(!l&&a){let f=process.env.GOOGLE_GENAI_USE_VERTEXAI;f&&(l=f.toLowerCase()==="true"||f==="1")}if(this.isGemini3Preview&&l){let f=t||(a?process.env.GOOGLE_GENAI_API_KEY||process.env.GEMINI_API_KEY:void 0);f?(p.info("Gemini 3 preview detected with Vertex AI mode. Switching to API key mode for correct endpoint handling."),l=!1,this.apiKey=f):p.warn("Gemini 3 preview requires API key authentication for correct endpoint handling. Set GEMINI_API_KEY or GOOGLE_GENAI_API_KEY environment variable for best compatibility.")}if(this.vertexai=l,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,c,a,l;if(this.preprocessRequest(e),this.maybeAppendUserContent(e),p.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,x;for await(let C of f){x=C;let m=at(C);h=m.usageMetadata;let E=(s=(i=m.content)==null?void 0:i.parts)==null?void 0:s[0];if(E!=null&&E.text)"thought"in E&&E.thought?u+=E.text:d+=E.text,m.partial=!0;else if((u||d)&&(!E||!E.inlineData)){let S=[];u&&S.push({text:u,thought:!0}),d&&S.push((0,D.createPartFromText)(d)),yield{content:{role:"model",parts:S},usageMetadata:m.usageMetadata},u="",d=""}yield m}if((d||u)&&((a=(c=x==null?void 0:x.candidates)==null?void 0:c[0])==null?void 0:a.finishReason)===D.FinishReason.STOP){let C=[];u&&C.push({text:u,thought:!0}),d&&C.push({text:d}),yield{content:{role:"model",parts:C},usageMetadata:h}}}else{let f=await this.apiClient.models.generateContent({model:(l=e.model)!=null?l:this.model,contents:e.contents,config:e.config});yield at(f)}}get apiClient(){if(this._apiClient)return this._apiClient;let e={...this.trackingHeaders,...this.headers};if(this.vertexai)this._apiClient=new D.GoogleGenAI({vertexai:this.vertexai,project:this.project,location:this.location,httpOptions:{headers:e}});else{let t={headers:e};this.apiEndpoint&&(t.baseUrl=this.apiEndpoint,p.debug(`Using custom API endpoint: ${this.apiEndpoint}`),this.isGemini3Preview&&(t.apiVersion="",p.info("Gemini 3 preview mode: using direct API path without version prefix"))),this._apiClient=new D.GoogleGenAI({apiKey:this.apiKey,vertexai:!1,httpOptions:t})}return 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(){if(!this._liveApiClient){let e={headers:this.trackingHeaders,apiVersion:this.liveApiVersion};this.apiEndpoint&&(e.baseUrl=this.apiEndpoint,this.isGemini3Preview&&(e.apiVersion="")),this._liveApiClient=new D.GoogleGenAI({apiKey:this.apiKey,httpOptions:e})}return 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.isGemini3Preview?"":this.liveApiVersion),(r=e.config)!=null&&r.systemInstruction&&(e.liveConnectConfig.systemInstruction={role:"system",parts:[(0,D.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 we(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)nn(n.inlineData),nn(n.fileData)}}};ee.supportedModels=[/gemini-.*/,/projects\/.+\/locations\/.+\/endpoints\/.+/,/projects\/.+\/locations\/.+\/publishers\/google\/models\/gemini.+/];function nn(o){o&&o.displayName&&(o.displayName=void 0)}var ct=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)}},_=class _{static newLlm(e){return new(_.resolve(e))({model:e})}static _register(e,t){_.llmRegistryDict.has(e)&&p.info(`Updating LLM class for ${e} from ${_.llmRegistryDict.get(e)} to ${t}`),_.llmRegistryDict.set(e,t)}static register(e){for(let t of e.supportedModels)_._register(t,e)}static resolve(e){let t=_.resolveCache.get(e);if(t)return t;for(let[n,r]of _.llmRegistryDict.entries())if(new RegExp(`^${n instanceof RegExp?n.source:n}$`,n instanceof RegExp?n.flags:void 0).test(e))return _.resolveCache.set(e,r),r;throw new Error(`Model ${e} not found.`)}};_.llmRegistryDict=new Map,_.resolveCache=new ct(32);var te=_;te.register(ee);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=po(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 tn()}};function po(o){var e;return(((e=o.config)==null?void 0:e.tools)||[]).find(t=>"functionDeclarations"in t)}var rn=require("@google/genai"),sn=require("zod");var T=require("@google/genai"),A=require("zod");function on(o){var e;return o!==null&&typeof o=="object"&&((e=o._def)==null?void 0:e.typeName)==="ZodObject"}function G(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=T.Type.STRING;for(let a of e.checks||[])a.kind==="min"?n.minLength=a.value.toString():a.kind==="max"?n.maxLength=a.value.toString():a.kind==="email"?n.format="email":a.kind==="uuid"?n.format="uuid":a.kind==="url"?n.format="uri":a.kind==="regex"&&(n.pattern=a.regex.source);return r(n);case A.z.ZodFirstPartyTypeKind.ZodNumber:n.type=T.Type.NUMBER;for(let a of e.checks||[])a.kind==="min"?n.minimum=a.value:a.kind==="max"?n.maximum=a.value:a.kind==="int"&&(n.type=T.Type.INTEGER);return r(n);case A.z.ZodFirstPartyTypeKind.ZodBoolean:return n.type=T.Type.BOOLEAN,r(n);case A.z.ZodFirstPartyTypeKind.ZodArray:return n.type=T.Type.ARRAY,n.items=G(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 pe(o);case A.z.ZodFirstPartyTypeKind.ZodLiteral:let i=typeof e.value;if(n.enum=[e.value.toString()],i==="string")n.type=T.Type.STRING;else if(i==="number")n.type=T.Type.NUMBER;else if(i==="boolean")n.type=T.Type.BOOLEAN;else if(e.value===null)n.type=T.Type.NULL;else throw new Error(`Unsupported ZodLiteral value type: ${i}`);return r(n);case A.z.ZodFirstPartyTypeKind.ZodEnum:return n.type=T.Type.STRING,n.enum=e.values,r(n);case A.z.ZodFirstPartyTypeKind.ZodNativeEnum:return n.type=T.Type.STRING,n.enum=Object.values(e.values),r(n);case A.z.ZodFirstPartyTypeKind.ZodUnion:return n.anyOf=e.options.map(G),r(n);case A.z.ZodFirstPartyTypeKind.ZodOptional:return G(e.innerType);case A.z.ZodFirstPartyTypeKind.ZodNullable:let s=G(e.innerType);return r(s?{anyOf:[s,{type:T.Type.NULL}],...t&&{description:t}}:{type:T.Type.NULL,...t&&{description:t}});case A.z.ZodFirstPartyTypeKind.ZodDefault:let c=G(e.innerType);return c&&(c.default=e.defaultValue()),c;case A.z.ZodFirstPartyTypeKind.ZodBranded:return G(e.type);case A.z.ZodFirstPartyTypeKind.ZodReadonly:return G(e.innerType);case A.z.ZodFirstPartyTypeKind.ZodNull:return n.type=T.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 pe(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 c=e[s],a=G(c);a&&(t[s]=a);let l=c,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=G(r)||!0:i=o._def.unknownKeys==="passthrough",{type:T.Type.OBJECT,properties:t,required:n.length>0?n:[],...o._def.description?{description:o._def.description}:{}}}function mo(o){return o===void 0?{type:rn.Type.OBJECT,properties:{}}:on(o)?pe(o):o}var N=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:mo(this.parameters)}}async runAsync(e){try{let t=e.args;return this.parameters instanceof sn.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 $=class{};function lt(o,e,t){var s,c;let n=[];for(let a of o)!((s=a.content)!=null&&s.role)||!((c=a.content.parts)!=null&&c.length)||t&&a.branch&&!t.startsWith(a.branch)||go(a)||ho(a)||n.push(ln(e,a)?Co(a):a);let r=vo(n);r=yo(r);let i=[];for(let a of r){let l=L(a.content);$t(l),i.push(l)}return i}function cn(o,e,t){for(let n=o.length-1;n>=0;n--){let r=o[n];if(r.author==="user"||ln(e,r))return lt(o.slice(n),e,t)}return[]}function go(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)===be||((n=r.functionResponse)==null?void 0:n.name)===be)return!0;return!1}function ho(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)===re||((n=r.functionResponse)==null?void 0:n.name)===re)return!0;return!1}function ln(o,e){return!!o&&e.author!==o&&e.author!=="user"}function Co(o){var t,n,r,i,s,c;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 a of o.content.parts)if(a.text&&!a.thought)(r=e.parts)==null||r.push({text:`[${o.author}] said: ${a.text}`});else if(a.functionCall){let l=an(a.functionCall.args);(i=e.parts)==null||i.push({text:`[${o.author}] called tool \`${a.functionCall.name}\` with parameters: ${l}`})}else if(a.functionResponse){let l=an(a.functionResponse.response);(s=e.parts)==null||s.push({text:`[${o.author}] tool \`${a.functionResponse.name}\` returned result: ${l}`})}else(c=e.parts)==null||c.push(a);return y({invocationId:o.invocationId,author:"user",content:e,branch:o.branch,timestamp:o.timestamp})}function un(o){var r;if(o.length===0)throw new Error("Cannot merge an empty list of events.");let e=y(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 c=s.functionResponse.id;c in n?t[n[c]]=s:(t.push(s),n[c]=t.length-1)}else t.push(s)}return e}function vo(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(a=>!!a.id).map(a=>a.id)),r=o.at(-2);if(r){let a=b(r);if(a){for(let l of a)if(l.id&&n.has(l.id))return o}}let i=-1;for(let a=o.length-2;a>=0;a--){let l=o[a],f=b(l);if(f!=null&&f.length){for(let u of f)if(u.id&&n.has(u.id)){i=a;let d=new Set(f.map(x=>x.id).filter(x=>!!x));if(!Array.from(n).every(x=>d.has(x)))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 a=i+1;a<o.length-1;a++){let l=o[a],f=I(l);f&&f.some(u=>u.id&&n.has(u.id))&&s.push(l)}s.push(o[o.length-1]);let c=o.slice(0,i+1);return c.push(un(s)),c}function yo(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=b(n);if(r!=null&&r.length){let i=new Set;for(let s of r){let c=s.id;c&&e.has(c)&&i.add(e.get(c))}if(t.push(n),i.size===0)continue;if(i.size===1){let[s]=[...i];t.push(o[s])}else{let c=Array.from(i).sort((a,l)=>a-l).map(a=>o[a]);t.push(un(c))}}else t.push(n)}return t}function an(o){if(typeof o=="string")return o;try{return JSON.stringify(o)}catch{return String(o)}}async function ut(o,e){let t=e.invocationContext;async function n(a){let l=a[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(!Ao(l))return a[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,c=o.matchAll(r);for(let a of c){i.push(o.slice(s,a.index));let l=await n(a);i.push(l),s=a.index+a[0].length}return i.push(o.slice(s)),i.join("")}var xo=/^[a-zA-Z_][a-zA-Z0-9_]*$/;function fn(o){return o===""||o===void 0?!1:xo.test(o)}var Eo=[g.APP_PREFIX,g.USER_PREFIX,g.TEMP_PREFIX];function Ao(o){let e=o.split(":");return e.length===0||e.length>2?!1:e.length===1?fn(o):Eo.includes(e[0]+":")?fn(e[1]):!1}var ke=(n=>(n.NONE="none",n.SSE="sse",n.BIDI="bidi",n))(ke||{});function dn(o={}){return{saveInputBlobsAsArtifacts:!1,supportCfc:!1,enableAffectiveDialog:!1,streamingMode:"none",maxLlmCalls:bo(o.maxLlmCalls||500),...o}}function bo(o){if(o>Number.MAX_SAFE_INTEGER)throw new Error(`maxLlmCalls should be less than ${Number.MAX_SAFE_INTEGER}.`);return o<=0&&p.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 pn="adk_agent_name";async function mn(o,e){return o instanceof R?[o]:await o.getTools(e)}var dt=class extends ${async*runAsync(e,t){var r;let n=e.agent;n instanceof v&&(t.model=n.canonicalModel.model,t.config={...(r=n.generateContentConfig)!=null?r:{}},n.outputSchema&&en(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))}},To=new dt,pt=class extends ${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}"`),de(t,r)}},So=new pt,mt=class extends ${async*runAsync(e,t){let n=e.agent;if(!(n instanceof v)||!(n.rootAgent instanceof v))return;let r=n.rootAgent;if(r instanceof v&&r.globalInstruction){let{instruction:i,requireStateInjection:s}=await r.canonicalGlobalInstruction(new P(e)),c=i;s&&(c=await ut(i,new P(e))),de(t,[c])}if(n.instruction){let{instruction:i,requireStateInjection:s}=await n.canonicalInstruction(new P(e)),c=i;s&&(c=await ut(i,new P(e))),de(t,[c])}}},Ro=new mt,gt=class{async*runAsync(e,t){let n=e.agent;!n||!(n instanceof v)||(n.includeContents==="default"?t.contents=lt(e.session.events,n.name,e.branch):t.contents=cn(e.session.events,n.name,e.branch))}},Io=new gt,ht=class extends ${constructor(){super(...arguments);this.toolName="transfer_to_agent";this.tool=new N({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:ft.z.object({agentName:ft.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 v))return;let r=this.getTransferTargets(t.agent);if(!r.length)return;de(n,[this.buildTargetAgentsInstructions(t.agent,r)]);let i=new F({invocationContext:t});await this.tool.processLlmRequest({toolContext:i,llmRequest:n})}buildTargetAgentsInfo(t){return`
17
+ `+t:o.config.systemInstruction=t}function on(o,e){o.config||(o.config={}),o.config.responseSchema=e,o.config.responseMimeType="application/json"}var U=require("@google/genai");function rn(){return po("GOOGLE_GENAI_USE_VERTEXAI")?"VERTEX_AI":"GEMINI_API"}function po(o){if(!process.env)return!1;let e=(process.env[o]||"").toLowerCase();return["true","1"].includes(o.toLowerCase())}var Me=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"}):p.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);p.debug("Sending LLM function response:",t),this.geminiSession.sendToolResponse({functionResponses:t})}else p.debug("Sending LLM new content",e),this.geminiSession.sendClientContent({turns:[e],turnComplete:!0})}async sendRealtime(e){p.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 ft(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 go="https://aiplatform.googleapis.com/v1/publishers/google",re=class extends oe{constructor({model:e,apiKey:t,vertexai:n,project:r,location:i,headers:s,apiEndpoint:c}){e||(e="gemini-2.5-flash"),super({model:e}),this.project=r,this.location=i,this.apiKey=t,this.headers=s,this.isGemini3Preview=Xt(e);let a=typeof process=="object";this.apiEndpoint=c,!this.apiEndpoint&&a&&(this.apiEndpoint=process.env.GEMINI_API_ENDPOINT),!this.apiEndpoint&&this.isGemini3Preview&&(this.apiEndpoint=go,p.info(`Using Gemini 3 preview endpoint: ${this.apiEndpoint}`));let l=!!n;if(!l&&a){let f=process.env.GOOGLE_GENAI_USE_VERTEXAI;f&&(l=f.toLowerCase()==="true"||f==="1")}if(this.isGemini3Preview&&l){let f=t||(a?process.env.GOOGLE_GENAI_API_KEY||process.env.GEMINI_API_KEY:void 0);f?(p.info("Gemini 3 preview detected with Vertex AI mode. Switching to API key mode for correct endpoint handling."),l=!1,this.apiKey=f):p.warn("Gemini 3 preview requires API key authentication for correct endpoint handling. Set GEMINI_API_KEY or GOOGLE_GENAI_API_KEY environment variable for best compatibility.")}if(this.vertexai=l,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,c,a,l,f,u,d,v;if(this.preprocessRequest(e),this.maybeAppendUserContent(e),p.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 A=await this.apiClient.models.generateContentStream({model:(r=e.model)!=null?r:this.model,contents:e.contents,config:e.config}),g="",m,h="",P,X;for await(let S of A){X=S;let R=ft(S);P=R.usageMetadata;let _=(s=(i=R.content)==null?void 0:i.parts)==null?void 0:s[0];if(_!=null&&_.text)"thought"in _&&_.thought?(g+=_.text,"thoughtSignature"in _&&_.thoughtSignature&&(m=_.thoughtSignature)):h+=_.text,R.partial=!0;else if((g||h)&&(!_||!_.inlineData)){let $=[];if(g){let _t={text:g,thought:!0};m&&(_t.thoughtSignature=m),$.push(_t)}h&&$.push((0,U.createPartFromText)(h)),yield{content:{role:"model",parts:$},usageMetadata:R.usageMetadata},g="",h=""}if(this.isGemini3Preview&&m&&((c=R.content)!=null&&c.parts))for(let $ of R.content.parts)$.functionCall&&!$.thoughtSignature&&($.thoughtSignature=m);yield R,(l=(a=R.content)==null?void 0:a.parts)!=null&&l.some($=>$.functionCall)&&(m=void 0)}if((h||g)&&((u=(f=X==null?void 0:X.candidates)==null?void 0:f[0])==null?void 0:u.finishReason)===U.FinishReason.STOP){let S=[];if(g){let R={text:g,thought:!0};m&&(R.thoughtSignature=m),S.push(R)}h&&S.push({text:h}),yield{content:{role:"model",parts:S},usageMetadata:P}}}else{let A=await this.apiClient.models.generateContent({model:(d=e.model)!=null?d:this.model,contents:e.contents,config:e.config}),g=ft(A);if(this.isGemini3Preview&&((v=g.content)!=null&&v.parts)){let m;for(let h of g.content.parts)if(h.thought&&h.thoughtSignature){m=h.thoughtSignature;break}if(m)for(let h of g.content.parts)h.functionCall&&!h.thoughtSignature&&(h.thoughtSignature=m)}yield g}}get apiClient(){if(this._apiClient)return this._apiClient;let e={...this.trackingHeaders,...this.headers};if(this.vertexai)this._apiClient=new U.GoogleGenAI({vertexai:this.vertexai,project:this.project,location:this.location,httpOptions:{headers:e}});else{let t={headers:e};this.apiEndpoint&&(t.baseUrl=this.apiEndpoint,p.debug(`Using custom API endpoint: ${this.apiEndpoint}`),this.isGemini3Preview&&(t.apiVersion="",p.info("Gemini 3 preview mode: using direct API path without version prefix"))),this._apiClient=new U.GoogleGenAI({apiKey:this.apiKey,vertexai:!1,httpOptions:t})}return 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(){if(!this._liveApiClient){let e={headers:this.trackingHeaders,apiVersion:this.liveApiVersion};this.apiEndpoint&&(e.baseUrl=this.apiEndpoint,this.isGemini3Preview&&(e.apiVersion="")),this._liveApiClient=new U.GoogleGenAI({apiKey:this.apiKey,httpOptions:e})}return 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.isGemini3Preview?"":this.liveApiVersion),(r=e.config)!=null&&r.systemInstruction&&(e.liveConnectConfig.systemInstruction={role:"system",parts:[(0,U.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 Me(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)sn(n.inlineData),sn(n.fileData)}}};re.supportedModels=[/gemini-.*/,/projects\/.+\/locations\/.+\/endpoints\/.+/,/projects\/.+\/locations\/.+\/publishers\/google\/models\/gemini.+/];function sn(o){o&&o.displayName&&(o.displayName=void 0)}var dt=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)}},N=class N{static newLlm(e){return new(N.resolve(e))({model:e})}static _register(e,t){N.llmRegistryDict.has(e)&&p.info(`Updating LLM class for ${e} from ${N.llmRegistryDict.get(e)} to ${t}`),N.llmRegistryDict.set(e,t)}static register(e){for(let t of e.supportedModels)N._register(t,e)}static resolve(e){let t=N.resolveCache.get(e);if(t)return t;for(let[n,r]of N.llmRegistryDict.entries())if(new RegExp(`^${n instanceof RegExp?n.source:n}$`,n instanceof RegExp?n.flags:void 0).test(e))return N.resolveCache.set(e,r),r;throw new Error(`Model ${e} not found.`)}};N.llmRegistryDict=new Map,N.resolveCache=new dt(32);var ie=N;ie.register(re);var I=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=ho(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 rn()}};function ho(o){var e;return(((e=o.config)==null?void 0:e.tools)||[]).find(t=>"functionDeclarations"in t)}var cn=require("@google/genai"),ln=require("zod");var T=require("@google/genai"),E=require("zod");function an(o){var e;return o!==null&&typeof o=="object"&&((e=o._def)==null?void 0:e.typeName)==="ZodObject"}function j(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 E.z.ZodFirstPartyTypeKind.ZodString:n.type=T.Type.STRING;for(let a of e.checks||[])a.kind==="min"?n.minLength=a.value.toString():a.kind==="max"?n.maxLength=a.value.toString():a.kind==="email"?n.format="email":a.kind==="uuid"?n.format="uuid":a.kind==="url"?n.format="uri":a.kind==="regex"&&(n.pattern=a.regex.source);return r(n);case E.z.ZodFirstPartyTypeKind.ZodNumber:n.type=T.Type.NUMBER;for(let a of e.checks||[])a.kind==="min"?n.minimum=a.value:a.kind==="max"?n.maximum=a.value:a.kind==="int"&&(n.type=T.Type.INTEGER);return r(n);case E.z.ZodFirstPartyTypeKind.ZodBoolean:return n.type=T.Type.BOOLEAN,r(n);case E.z.ZodFirstPartyTypeKind.ZodArray:return n.type=T.Type.ARRAY,n.items=j(e.type),e.minLength&&(n.minItems=e.minLength.value.toString()),e.maxLength&&(n.maxItems=e.maxLength.value.toString()),r(n);case E.z.ZodFirstPartyTypeKind.ZodObject:return Ce(o);case E.z.ZodFirstPartyTypeKind.ZodLiteral:let i=typeof e.value;if(n.enum=[e.value.toString()],i==="string")n.type=T.Type.STRING;else if(i==="number")n.type=T.Type.NUMBER;else if(i==="boolean")n.type=T.Type.BOOLEAN;else if(e.value===null)n.type=T.Type.NULL;else throw new Error(`Unsupported ZodLiteral value type: ${i}`);return r(n);case E.z.ZodFirstPartyTypeKind.ZodEnum:return n.type=T.Type.STRING,n.enum=e.values,r(n);case E.z.ZodFirstPartyTypeKind.ZodNativeEnum:return n.type=T.Type.STRING,n.enum=Object.values(e.values),r(n);case E.z.ZodFirstPartyTypeKind.ZodUnion:return n.anyOf=e.options.map(j),r(n);case E.z.ZodFirstPartyTypeKind.ZodOptional:return j(e.innerType);case E.z.ZodFirstPartyTypeKind.ZodNullable:let s=j(e.innerType);return r(s?{anyOf:[s,{type:T.Type.NULL}],...t&&{description:t}}:{type:T.Type.NULL,...t&&{description:t}});case E.z.ZodFirstPartyTypeKind.ZodDefault:let c=j(e.innerType);return c&&(c.default=e.defaultValue()),c;case E.z.ZodFirstPartyTypeKind.ZodBranded:return j(e.type);case E.z.ZodFirstPartyTypeKind.ZodReadonly:return j(e.innerType);case E.z.ZodFirstPartyTypeKind.ZodNull:return n.type=T.Type.NULL,r(n);case E.z.ZodFirstPartyTypeKind.ZodAny:case E.z.ZodFirstPartyTypeKind.ZodUnknown:return r({...t&&{description:t}});default:throw new Error(`Unsupported Zod type: ${e.typeName}`)}}function Ce(o){if(o._def.typeName!==E.z.ZodFirstPartyTypeKind.ZodObject)throw new Error("Expected a ZodObject");let e=o.shape,t={},n=[];for(let s in e){let c=e[s],a=j(c);a&&(t[s]=a);let l=c,f=!1;for(;l._def.typeName===E.z.ZodFirstPartyTypeKind.ZodOptional||l._def.typeName===E.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!==E.z.ZodFirstPartyTypeKind.ZodNever?i=j(r)||!0:i=o._def.unknownKeys==="passthrough",{type:T.Type.OBJECT,properties:t,required:n.length>0?n:[],...o._def.description?{description:o._def.description}:{}}}function Co(o){return o===void 0?{type:cn.Type.OBJECT,properties:{}}:an(o)?Ce(o):o}var D=class extends I{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:Co(this.parameters)}}async runAsync(e){try{let t=e.args;return this.parameters instanceof ln.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 K=class{};function pt(o,e,t){var s,c;let n=[];for(let a of o)!((s=a.content)!=null&&s.role)||!((c=a.content.parts)!=null&&c.length)||t&&a.branch&&!t.startsWith(a.branch)||vo(a)||yo(a)||n.push(dn(e,a)?xo(a):a);let r=Eo(n);r=Ao(r);let i=[];for(let a of r){let l=O(a.content);jt(l),i.push(l)}return i}function fn(o,e,t){for(let n=o.length-1;n>=0;n--){let r=o[n];if(r.author==="user"||dn(e,r))return pt(o.slice(n),e,t)}return[]}function vo(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)===Ie||((n=r.functionResponse)==null?void 0:n.name)===Ie)return!0;return!1}function yo(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)===ce||((n=r.functionResponse)==null?void 0:n.name)===ce)return!0;return!1}function dn(o,e){return!!o&&e.author!==o&&e.author!=="user"}function xo(o){var t,n,r,i,s,c;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 a of o.content.parts)if(a.text&&!a.thought)(r=e.parts)==null||r.push({text:`[${o.author}] said: ${a.text}`});else if(a.functionCall){let l=un(a.functionCall.args);(i=e.parts)==null||i.push({text:`[${o.author}] called tool \`${a.functionCall.name}\` with parameters: ${l}`})}else if(a.functionResponse){let l=un(a.functionResponse.response);(s=e.parts)==null||s.push({text:`[${o.author}] tool \`${a.functionResponse.name}\` returned result: ${l}`})}else(c=e.parts)==null||c.push(a);return x({invocationId:o.invocationId,author:"user",content:e,branch:o.branch,timestamp:o.timestamp})}function pn(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 c=s.functionResponse.id;c in n?t[n[c]]=s:(t.push(s),n[c]=t.length-1)}else t.push(s)}return e}function Eo(o){if(o.length===0)return o;let e=o[o.length-1],t=w(e);if(!(t!=null&&t.length))return o;let n=new Set(t.filter(a=>!!a.id).map(a=>a.id)),r=o.at(-2);if(r){let a=b(r);if(a){for(let l of a)if(l.id&&n.has(l.id))return o}}let i=-1;for(let a=o.length-2;a>=0;a--){let l=o[a],f=b(l);if(f!=null&&f.length){for(let u of f)if(u.id&&n.has(u.id)){i=a;let d=new Set(f.map(A=>A.id).filter(A=>!!A));if(!Array.from(n).every(A=>d.has(A)))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 a=i+1;a<o.length-1;a++){let l=o[a],f=w(l);f&&f.some(u=>u.id&&n.has(u.id))&&s.push(l)}s.push(o[o.length-1]);let c=o.slice(0,i+1);return c.push(pn(s)),c}function Ao(o){let e=new Map;for(let n=0;n<o.length;n++){let r=o[n],i=w(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(w(n).length>0)continue;let r=b(n);if(r!=null&&r.length){let i=new Set;for(let s of r){let c=s.id;c&&e.has(c)&&i.add(e.get(c))}if(t.push(n),i.size===0)continue;if(i.size===1){let[s]=[...i];t.push(o[s])}else{let c=Array.from(i).sort((a,l)=>a-l).map(a=>o[a]);t.push(pn(c))}}else t.push(n)}return t}function un(o){if(typeof o=="string")return o;try{return JSON.stringify(o)}catch{return String(o)}}async function mt(o,e){let t=e.invocationContext;async function n(a){let l=a[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(!So(l))return a[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,c=o.matchAll(r);for(let a of c){i.push(o.slice(s,a.index));let l=await n(a);i.push(l),s=a.index+a[0].length}return i.push(o.slice(s)),i.join("")}var bo=/^[a-zA-Z_][a-zA-Z0-9_]*$/;function mn(o){return o===""||o===void 0?!1:bo.test(o)}var To=[C.APP_PREFIX,C.USER_PREFIX,C.TEMP_PREFIX];function So(o){let e=o.split(":");return e.length===0||e.length>2?!1:e.length===1?mn(o):To.includes(e[0]+":")?mn(e[1]):!1}var Oe=(n=>(n.NONE="none",n.SSE="sse",n.BIDI="bidi",n))(Oe||{});function gn(o={}){return{saveInputBlobsAsArtifacts:!1,supportCfc:!1,enableAffectiveDialog:!1,streamingMode:"none",maxLlmCalls:Ro(o.maxLlmCalls||500),...o}}function Ro(o){if(o>Number.MAX_SAFE_INTEGER)throw new Error(`maxLlmCalls should be less than ${Number.MAX_SAFE_INTEGER}.`);return o<=0&&p.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 hn="adk_agent_name";async function Cn(o,e){return o instanceof I?[o]:await o.getTools(e)}var ht=class extends K{async*runAsync(e,t){var r;let n=e.agent;n instanceof y&&(t.model=n.canonicalModel.model,t.config={...(r=n.generateContentConfig)!=null?r:{}},n.outputSchema&&on(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))}},Io=new ht,Ct=class extends K{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}"`),he(t,r)}},Po=new Ct,vt=class extends K{async*runAsync(e,t){let n=e.agent;if(!(n instanceof y)||!(n.rootAgent instanceof y))return;let r=n.rootAgent;if(r instanceof y&&r.globalInstruction){let{instruction:i,requireStateInjection:s}=await r.canonicalGlobalInstruction(new k(e)),c=i;s&&(c=await mt(i,new k(e))),he(t,[c])}if(n.instruction){let{instruction:i,requireStateInjection:s}=await n.canonicalInstruction(new k(e)),c=i;s&&(c=await mt(i,new k(e))),he(t,[c])}}},wo=new vt,yt=class{async*runAsync(e,t){let n=e.agent;!n||!(n instanceof y)||(n.includeContents==="default"?t.contents=pt(e.session.events,n.name,e.branch):t.contents=fn(e.session.events,n.name,e.branch))}},ko=new yt,xt=class extends K{constructor(){super(...arguments);this.toolName="transfer_to_agent";this.tool=new D({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:gt.z.object({agentName:gt.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 y))return;let r=this.getTransferTargets(t.agent);if(!r.length)return;he(n,[this.buildTargetAgentsInstructions(t.agent,r)]);let i=new q({invocationContext:t});await this.tool.processLlmRequest({toolContext:i,llmRequest:n})}buildTargetAgentsInfo(t){return`
18
18
  Agent name: ${t.name}
19
19
  Agent description: ${t.description}
20
20
  `}buildTargetAgentsInstructions(t,n){let r=`
@@ -34,7 +34,7 @@ the function call.
34
34
  Your parent agent is ${t.parentAgent.name}. If neither the other agents nor
35
35
  you are best for answering the question according to the descriptions, transfer
36
36
  to your parent agent.
37
- `),r}getTransferTargets(t){let n=[];return n.push(...t.subAgents),!t.parentAgent||!(t.parentAgent instanceof v)||(t.disallowTransferToParent||n.push(t.parentAgent),t.disallowTransferToPeers||n.push(...t.parentAgent.subAgents.filter(r=>r.name!==t.name))),n}},Po=new ht,Ct=class extends ${async*runAsync(e,t){let n=e.agent;if(!(n instanceof v))return;let r=e.session.events;if(!r||r.length===0)return;let i={},s=-1;for(let c=r.length-1;c>=0;c--){let a=r[c];if(a.author!=="user")continue;let l=I(a);if(!l)continue;let f=!1;for(let u of l){if(u.name!==re)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 U({hint:u.response.hint,payload:u.response.payload,confirmed:u.response.confirmed})),u.id&&d&&(i[u.id]=d)}if(f){s=c;break}}if(Object.keys(i).length!==0)for(let c=s-1;c>=0;c--){let a=r[c],l=b(a);if(!l)continue;let f={},u={};for(let C of l){if(!C.id||!(C.id in i))continue;let m=C.args;if(!m||!("originalFunctionCall"in m))continue;let E=m.originalFunctionCall;E.id&&(f[E.id]=i[C.id],u[E.id]=E)}if(Object.keys(f).length===0)continue;for(let C=r.length-1;C>s;C--){let m=r[C],E=I(m);if(E){for(let S of E)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 P(e)),h=Object.fromEntries(d.map(C=>[C.name,C])),x=await Te({invocationContext:e,functionCalls:Object.values(u),toolsDict:h,beforeToolCallbacks:n.canonicalBeforeToolCallbacks,afterToolCallbacks:n.canonicalAfterToolCallbacks,filters:new Set(Object.keys(f)),toolConfirmationDict:f});x&&(yield x);return}}},wo=new Ct,vt=class extends ${async*runAsync(e,t){if(e.agent instanceof v&&e.agent.codeExecutor){for await(let n of Lo(e,t))yield n;if(e.agent.codeExecutor instanceof j)for(let n of t.contents){let r=e.agent.codeExecutor.codeBlockDelimiters.length?e.agent.codeExecutor.codeBlockDelimiters[0]:["",""],i=Xt(n,r,e.agent.codeExecutor.executionResultDelimiters)}}}},Le={"text/csv":{extension:".csv",loaderCodeTemplate:"pd.read_csv('{filename}')"}},ko=`
37
+ `),r}getTransferTargets(t){let n=[];return n.push(...t.subAgents),!t.parentAgent||!(t.parentAgent instanceof y)||(t.disallowTransferToParent||n.push(t.parentAgent),t.disallowTransferToPeers||n.push(...t.parentAgent.subAgents.filter(r=>r.name!==t.name))),n}},Lo=new xt,Et=class extends K{async*runAsync(e,t){let n=e.agent;if(!(n instanceof y))return;let r=e.session.events;if(!r||r.length===0)return;let i={},s=-1;for(let c=r.length-1;c>=0;c--){let a=r[c];if(a.author!=="user")continue;let l=w(a);if(!l)continue;let f=!1;for(let u of l){if(u.name!==ce)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 V({hint:u.response.hint,payload:u.response.payload,confirmed:u.response.confirmed})),u.id&&d&&(i[u.id]=d)}if(f){s=c;break}}if(Object.keys(i).length!==0)for(let c=s-1;c>=0;c--){let a=r[c],l=b(a);if(!l)continue;let f={},u={};for(let g of l){if(!g.id||!(g.id in i))continue;let m=g.args;if(!m||!("originalFunctionCall"in m))continue;let h=m.originalFunctionCall;h.id&&(f[h.id]=i[g.id],u[h.id]=h)}if(Object.keys(f).length===0)continue;for(let g=r.length-1;g>s;g--){let m=r[g],h=w(m);if(h){for(let P of h)P.id&&P.id in f&&(delete f[P.id],delete u[P.id]);if(Object.keys(f).length===0)break}}if(Object.keys(f).length===0)continue;let d=await n.canonicalTools(new k(e)),v=Object.fromEntries(d.map(g=>[g.name,g])),A=await Pe({invocationContext:e,functionCalls:Object.values(u),toolsDict:v,beforeToolCallbacks:n.canonicalBeforeToolCallbacks,afterToolCallbacks:n.canonicalAfterToolCallbacks,filters:new Set(Object.keys(f)),toolConfirmationDict:f});A&&(yield A);return}}},_o=new Et,At=class extends K{async*runAsync(e,t){if(e.agent instanceof y&&e.agent.codeExecutor){for await(let n of Oo(e,t))yield n;if(e.agent.codeExecutor instanceof Z)for(let n of t.contents){let r=e.agent.codeExecutor.codeBlockDelimiters.length?e.agent.codeExecutor.codeBlockDelimiters[0]:["",""],i=en(n,r,e.agent.codeExecutor.executionResultDelimiters)}}}},Ne={"text/csv":{extension:".csv",loaderCodeTemplate:"pd.read_csv('{filename}')"}},Mo=`
38
38
  import pandas as pd
39
39
 
40
40
  def explore_df(df: pd.DataFrame) -> None:
@@ -71,20 +71,20 @@ def explore_df(df: pd.DataFrame) -> None:
71
71
  Total columns: {df.shape[1]}
72
72
 
73
73
  {df_info}""")
74
- `,yt=class{async*runAsync(e,t){if(!t.partial)for await(let n of _o(e,t))yield n}},Rs=new yt;async function*Lo(o,e){let t=o.agent;if(!(t instanceof v))return;let n=t.codeExecutor;if(!n||!(n instanceof j))return;if(n instanceof Y){n.processLlmRequest(e);return}if(!n.optimizeDataFile)return;let r=new fe(new g(o.session.state));if(r.getErrorCount(o.invocationId)>=n.errorRetryAttempts)return;let i=Mo(r,e),s=new Set(r.getProcessedFileNames()),c=i.filter(a=>!s.has(a.name));for(let a of c){let l=Oo(a);if(!l)return;let f={role:"model",parts:[{text:`Processing input file: \`${a.name}\``},nt(l)]};e.contents.push(L(f)),yield y({invocationId:o.invocationId,author:t.name,branch:o.branch,content:f});let u=gn(o,r),d=await n.executeCode({invocationContext:o,codeExecutionInput:{code:l,inputFiles:[a],executionId:u}});r.updateCodeExecutionResult({invocationId:o.invocationId,code:l,resultStdout:d.stdout,resultStderr:d.stderr}),r.addProcessedFileNames([a.name]);let h=await hn(o,r,d);yield h,e.contents.push(L(h.content))}}async function*_o(o,e){let t=o.agent;if(!(t instanceof v))return;let n=t.codeExecutor;if(!n||!(n instanceof j)||!e||!e.content||n instanceof Y)return;let r=new fe(new g(o.session.state));if(r.getErrorCount(o.invocationId)>=n.errorRetryAttempts)return;let i=e.content,s=Yt(i,n.codeBlockDelimiters);if(!s)return;yield y({invocationId:o.invocationId,author:t.name,branch:o.branch,content:i});let c=gn(o,r),a=await n.executeCode({invocationContext:o,codeExecutionInput:{code:s,inputFiles:r.getInputFiles(),executionId:c}});r.updateCodeExecutionResult({invocationId:o.invocationId,code:s,resultStdout:a.stdout,resultStderr:a.stderr}),yield await hn(o,r,a),e.content=null}function Mo(o,e){var r;let t=o.getInputFiles(),n=new Set(t.map(i=>i.name));for(let i=0;i<e.contents.length;i++){let s=e.contents[i];if(!(s.role!=="user"||!s.parts))for(let c=0;c<s.parts.length;c++){let a=s.parts[c],l=(r=a.inlineData)==null?void 0:r.mimeType;if(!l||!a.inlineData||!Le[l])continue;let f=`data_${i+1}_${c+1}${Le[l].extension}`;a.text=`
74
+ `,bt=class{async*runAsync(e,t){if(!t.partial)for await(let n of No(e,t))yield n}},ws=new bt;async function*Oo(o,e){let t=o.agent;if(!(t instanceof y))return;let n=t.codeExecutor;if(!n||!(n instanceof Z))return;if(n instanceof J){n.processLlmRequest(e);return}if(!n.optimizeDataFile)return;let r=new ge(new C(o.session.state));if(r.getErrorCount(o.invocationId)>=n.errorRetryAttempts)return;let i=Bo(r,e),s=new Set(r.getProcessedFileNames()),c=i.filter(a=>!s.has(a.name));for(let a of c){let l=Fo(a);if(!l)return;let f={role:"model",parts:[{text:`Processing input file: \`${a.name}\``},st(l)]};e.contents.push(O(f)),yield x({invocationId:o.invocationId,author:t.name,branch:o.branch,content:f});let u=vn(o,r),d=await n.executeCode({invocationContext:o,codeExecutionInput:{code:l,inputFiles:[a],executionId:u}});r.updateCodeExecutionResult({invocationId:o.invocationId,code:l,resultStdout:d.stdout,resultStderr:d.stderr}),r.addProcessedFileNames([a.name]);let v=await yn(o,r,d);yield v,e.contents.push(O(v.content))}}async function*No(o,e){let t=o.agent;if(!(t instanceof y))return;let n=t.codeExecutor;if(!n||!(n instanceof Z)||!e||!e.content||n instanceof J)return;let r=new ge(new C(o.session.state));if(r.getErrorCount(o.invocationId)>=n.errorRetryAttempts)return;let i=e.content,s=Ht(i,n.codeBlockDelimiters);if(!s)return;yield x({invocationId:o.invocationId,author:t.name,branch:o.branch,content:i});let c=vn(o,r),a=await n.executeCode({invocationContext:o,codeExecutionInput:{code:s,inputFiles:r.getInputFiles(),executionId:c}});r.updateCodeExecutionResult({invocationId:o.invocationId,code:s,resultStdout:a.stdout,resultStderr:a.stderr}),yield await yn(o,r,a),e.content=null}function Bo(o,e){var r;let t=o.getInputFiles(),n=new Set(t.map(i=>i.name));for(let i=0;i<e.contents.length;i++){let s=e.contents[i];if(!(s.role!=="user"||!s.parts))for(let c=0;c<s.parts.length;c++){let a=s.parts[c],l=(r=a.inlineData)==null?void 0:r.mimeType;if(!l||!a.inlineData||!Ne[l])continue;let f=`data_${i+1}_${c+1}${Ne[l].extension}`;a.text=`
75
75
  Available file: \`${f}\`
76
- `;let u={name:f,content:Mt(a.inlineData.data),mimeType:l};n.has(f)||(o.addInputFiles([u]),t.push(u))}}return t}function gn(o,e){var r;let t=o.agent;if(!(t instanceof v)||!((r=t.codeExecutor)!=null&&r.stateful))return;let n=e.getExecutionId();return n||(n=o.session.id,e.setExecutionId(n)),n}async function hn(o,e,t){if(!o.artifactService)throw new Error("Artifact service is not initialized.");let n={role:"model",parts:[Qt(t)]},r=M({stateDelta:e.getStateDelta()});t.stderr?e.incrementErrorCount(o.invocationId):e.resetErrorCount(o.invocationId);for(let i of t.outputFiles){let s=await o.artifactService.saveArtifact({appName:o.appName||"",userId:o.userId||"",sessionId:o.session.id,filename:i.name,artifact:{inlineData:{data:i.content,mimeType:i.mimeType}}});r.artifactDelta[i.name]=s}return y({invocationId:o.invocationId,author:o.agent.name,branch:o.branch,content:n,actions:r})}function Oo(o){function e(r){let[i]=r.split("."),s=i.replace(/[^a-zA-Z0-9_]/g,"_");return/^\d/.test(s)&&(s="_"+s),s}if(!Le[o.mimeType])return;let t=e(o.name),n=Le[o.mimeType].loaderCodeTemplate.replace("{filename}",o.name);return`
77
- ${ko}
76
+ `;let u={name:f,content:Bt(a.inlineData.data),mimeType:l};n.has(f)||(o.addInputFiles([u]),t.push(u))}}return t}function vn(o,e){var r;let t=o.agent;if(!(t instanceof y)||!((r=t.codeExecutor)!=null&&r.stateful))return;let n=e.getExecutionId();return n||(n=o.session.id,e.setExecutionId(n)),n}async function yn(o,e,t){if(!o.artifactService)throw new Error("Artifact service is not initialized.");let n={role:"model",parts:[Jt(t)]},r=B({stateDelta:e.getStateDelta()});t.stderr?e.incrementErrorCount(o.invocationId):e.resetErrorCount(o.invocationId);for(let i of t.outputFiles){let s=await o.artifactService.saveArtifact({appName:o.appName||"",userId:o.userId||"",sessionId:o.session.id,filename:i.name,artifact:{inlineData:{data:i.content,mimeType:i.mimeType}}});r.artifactDelta[i.name]=s}return x({invocationId:o.invocationId,author:o.agent.name,branch:o.branch,content:n,actions:r})}function Fo(o){function e(r){let[i]=r.split("."),s=i.replace(/[^a-zA-Z0-9_]/g,"_");return/^\d/.test(s)&&(s="_"+s),s}if(!Ne[o.mimeType])return;let t=e(o.name),n=Ne[o.mimeType].loaderCodeTemplate.replace("{filename}",o.name);return`
77
+ ${Mo}
78
78
 
79
79
  # Load the dataframe.
80
80
  ${t} = ${n}
81
81
 
82
82
  # Use \`explore_df\` to guide my analysis.
83
83
  explore_df(${t})
84
- `}var No=new vt,v=class o extends k{constructor(e){var n,r,i,s,c,a,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=(c=e.disallowTransferToPeers)!=null?c:!1,this.includeContents=(a=e.includeContents)!=null?a:"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.codeExecutor=e.codeExecutor,this.requestProcessors=(l=e.requestProcessors)!=null?l:[To,So,Ro,wo,Io,No],this.responseProcessors=(f=e.responseProcessors)!=null?f:[],this.disallowTransferToParent&&this.disallowTransferToPeers&&!((u=this.subAgents)!=null&&u.length)||this.requestProcessors.push(Po),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)&&(p.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(Pe(this.model))return this.model;if(typeof this.model=="string"&&this.model)return te.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 mn(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){p.debug(`Skipping output save for agent ${this.name}: event authored by ${e.author}`);return}if(!this.outputKey){p.debug(`Skipping output save for agent ${this.name}: outputKey is not set`);return}if(!W(e)){p.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)){p.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){p.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||W(t))break;if(t.partial){p.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 F({invocationContext:e}),s=await mn(r,new P(e));for(let c of s)await c.processLlmRequest({toolContext:i,llmRequest:t})}if(e.endInvocation)return;let n=y({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=Ye(),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=y({...r,...n});if(i.content){let u=b(i);u!=null&&u.length&&(Gt(i),i.longRunningToolIds=Array.from(qt(u,t.toolsDict)))}if(yield i,!((f=b(i))!=null&&f.length))return;let s=await Kt({invocationContext:e,functionCallEvent:i,toolsDict:t.toolsDict,beforeToolCallbacks:this.canonicalBeforeToolCallbacks,afterToolCallbacks:this.canonicalAfterToolCallbacks});if(!s)return;let c=Ut(e,s);c&&(yield c);let a=jt({invocationContext:e,functionCallEvent:i,functionResponseEvent:s});a&&(yield a),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,c,a,l,f;let r=await this.handleBeforeModelCallback(e,t,n);if(r){yield r;return}(s=t.config)!=null||(t.config={}),(a=(c=t.config).labels)!=null||(c.labels={}),t.config.labels[pn]||(t.config.labels[pn]=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 h=await this.handleAfterModelCallback(e,d,n);yield h!=null?h: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 c=await s({context:r,request:t});if(c)return c}}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 c=await s({context:r,response:t});if(c)return c}}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 c=await t.pluginManager.runOnModelErrorCallback({callbackContext:s,llmRequest:n,error:i});if(c)yield c;else{let a=JSON.parse(i.message);yield{errorCode:String(a.error.code),errorMessage:a.error.message}}}else throw p.error("Unknown error during response generation",i),i}}};var _e=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 Me=class extends k{async*runAsyncImpl(e){let t=this.subAgents.map(n=>n.runAsync(Bo(this,n,e)));for await(let n of Fo(t))yield n}async*runLiveImpl(e){throw new Error("This is not supported yet for ParallelAgent.")}};function Bo(o,e,t){let n=new O(t),r=`${o.name}.${e.name}`;return n.branch=n.branch?`${n.branch}.${r}`:r,n}async function*Fo(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 xt="task_completed",Oe=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 v&&((await t.canonicalTools(new P(e))).some(i=>i.name===xt)||(t.tools.push(new N({name:xt,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 ${xt} 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 ie=class{constructor(){this.artifacts={}}saveArtifact({appName:e,userId:t,sessionId:n,filename:r,artifact:i}){let s=Ne(e,t,n,r);this.artifacts[s]||(this.artifacts[s]=[]);let c=this.artifacts[s].length;return this.artifacts[s].push(i),Promise.resolve(c)}loadArtifact({appName:e,userId:t,sessionId:n,filename:r,version:i}){let s=Ne(e,t,n,r),c=this.artifacts[s];return c?(i===void 0&&(i=c.length-1),Promise.resolve(c[i])):Promise.resolve(void 0)}listArtifactKeys({appName:e,userId:t,sessionId:n}){let r=`${e}/${t}/${n}/`,i=`${e}/${t}/user/`,s=[];for(let c in this.artifacts)if(c.startsWith(r)){let a=c.replace(r,"");s.push(a)}else if(c.startsWith(i)){let a=c.replace(i,"");s.push(a)}return Promise.resolve(s.sort())}deleteArtifact({appName:e,userId:t,sessionId:n,filename:r}){let i=Ne(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=Ne(e,t,n,r),s=this.artifacts[i];if(!s)return Promise.resolve([]);let c=[];for(let a=0;a<s.length;a++)c.push(a);return Promise.resolve(c)}};function Ne(o,e,t,n){return Do(n)?`${o}/${e}/user/${n}`:`${o}/${e}/${t}/${n}`}function Do(o){return o.startsWith("user:")}var K=class{constructor(){this.memories=[];this.sessionEvents={}}async addSessionToMemory(e){let t=Cn(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=Cn(e.appName,e.userId);if(!this.sessionEvents[t])return Promise.resolve({memories:[]});let n=e.query.toLowerCase().split(/\s+/),r={memories:[]};for(let c of Object.values(this.sessionEvents[t]))for(let a of c){if(!((s=(i=a.content)==null?void 0:i.parts)!=null&&s.length))continue;let l=a.content.parts.map(d=>d.text).filter(d=>!!d).join(" "),f=Go(l);if(!f.size)continue;n.some(d=>f.has(d))&&r.memories.push({content:a.content,author:a.author,timestamp:$o(a.timestamp)})}return r}};function Cn(o,e){return`${o}/${e}`}function Go(o){return new Set([...o.matchAll(/[A-Za-z]+/)].map(e=>e[0].toLowerCase()))}function $o(o){return new Date(o).toISOString()}var V=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 Be=class extends V{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: ${W(t)}`);let n=b(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`;p.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 se=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),p.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 p.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 p.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 At="adk_request_confirmation",Et="orcas_tool_call_security_check_states",vn="This tool call needs external confirmation before completion.",bt=(n=>(n.DENY="DENY",n.CONFIRM="CONFIRM",n.ALLOW="ALLOW",n))(bt||{}),me=class{async evaluate(e){return Promise.resolve({outcome:"ALLOW",reason:"For prototyping purpose, all tool calls are allowed."})}},Fe=class extends V{constructor(e){var t;super("security_plugin"),this.policyEngine=(t=e==null?void 0:e.policyEngine)!=null?t:new me}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:vn};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:vn};case"ALLOW":return;default:return}}};function yn(o){if(!o.content||!o.content.parts)return[];let e=[];for(let t of o.content.parts)t&&t.functionCall&&t.functionCall.name===At&&e.push(t.functionCall);return e}var ge=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(g.TEMP_PREFIX)||(e.state[n]=r)}};function he(o){return{id:o.id,appName:o.appName,userId:o.userId||"",state:o.state||{},events:o.events||[],lastUpdateTime:o.lastUpdateTime||0}}var Z=class extends ge{constructor(){super(...arguments);this.sessions={};this.userState={};this.appState={}}createSession({appName:t,userId:n,state:r,sessionId:i}){let s=he({id:i||ne(),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,L(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],c=L(s);if(i&&(i.numRecentEvents&&(c.events=c.events.slice(-i.numRecentEvents)),i.afterTimestamp)){let a=c.events.length-1;for(;a>=0&&!(c.events[a].timestamp<i.afterTimestamp);)a--;a>=0&&(c.events=c.events.slice(a+1))}return Promise.resolve(this.mergeState(t,n,c))}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(he({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,c=l=>{p.warn(`Failed to append event to session ${s}: ${l}`)};if(!this.sessions[r])return c(`appName ${r} not in sessions`),n;if(!this.sessions[r][i])return c(`userId ${i} not in sessions[appName]`),n;if(!this.sessions[r][i][s])return c(`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(g.APP_PREFIX)&&(this.appState[r]=this.appState[r]||{},this.appState[r][l.replace(g.APP_PREFIX,"")]=n.actions.stateDelta[l]),l.startsWith(g.USER_PREFIX)&&(this.userState[r]=this.userState[r]||{},this.userState[r][i]=this.userState[r][i]||{},this.userState[r][i][l.replace(g.USER_PREFIX,"")]=n.actions.stateDelta[l]);let a=this.sessions[r][i][s];return await super.appendEvent({session:a,event:n}),a.lastUpdateTime=n.timestamp,n}mergeState(t,n,r){if(this.appState[t])for(let i of Object.keys(this.appState[t]))r.state[g.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[g.USER_PREFIX+i]=this.userState[t][n][i];return r}};var xn=require("@google/genai"),En=require("@opentelemetry/api");var z=class{constructor(e){var t;this.appName=e.appName,this.agent=e.agent,this.pluginManager=new se((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 c;i=dn(i);let s=En.trace.getTracer("gcp.vertex.agent").startSpan("invocation");try{let a=await this.sessionService.getSession({appName:this.appName,userId:e,sessionId:t});if(!a)throw new Error(`Session not found: ${t}`);if(i.supportCfc&&this.agent instanceof v){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 O({artifactService:this.artifactService,sessionService:this.sessionService,memoryService:this.memoryService,credentialService:this.credentialService,invocationId:Ot(),agent:this.agent,session:a,userContent:n,runConfig:i,pluginManager:this.pluginManager}),f=await this.pluginManager.runOnUserMessageCallback({userMessage:n,invocationContext:l});if(f&&(n=f),n){if(!((c=n.parts)!=null&&c.length))throw new Error("No parts in the newMessage.");i.saveInputBlobsAsArtifacts&&await this.saveArtifacts(l.invocationId,a.userId,a.id,n),await this.sessionService.appendEvent({session:a,event:y({invocationId:l.invocationId,author:"user",actions:r?M({stateDelta:r}):void 0,content:n})})}l.agent=this.determineAgentForResumption(a,this.agent);let u=await this.pluginManager.runBeforeRunCallback({invocationContext:l});if(u){let d=y({invocationId:l.invocationId,author:"model",content:u});await this.sessionService.appendEvent({session:a,event:d}),yield d}else for await(let d of l.agent.runAsync(l)){d.partial||await this.sessionService.appendEvent({session:a,event:d});let h=await this.pluginManager.runOnEventCallback({invocationContext:l,event:d});h?yield h: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 c=r.parts[s];if(!c.inlineData)continue;let a=`artifact_${e}_${s}`;await this.artifactService.saveArtifact({appName:this.appName,userId:t,sessionId:n,filename:a,artifact:c}),r.parts[s]=(0,xn.createPartFromText)(`Uploaded file: ${a}. It is saved into artifacts`)}}determineAgentForResumption(e,t){let n=qo(e.events);if(n&&n.author)return t.findAgent(n.author)||t;for(let r=e.events.length-1;r>=0;r--){p.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){p.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 v)||t.disallowTransferToParent)return!1;t=t.parentAgent}return!0}};function qo(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(c=>c.functionResponse))==null?void 0:i.functionResponse)==null?void 0:s.id;if(!t)return null;for(let c=o.length-2;c>=0;c--){let a=o[c],l=b(a);if(l){for(let f of l)if(f.id===t)return a}}return null}var De=class extends z{constructor({agent:e,appName:t="InMemoryRunner",plugins:n=[]}){super({appName:t,agent:e,plugins:n,artifactService:new ie,sessionService:new Z,memoryService:new K})}};var Ce=require("@google/genai");var Ge=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 $e=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 v&&this.agent.inputSchema?e={name:this.name,description:this.description,parameters:this.agent.inputSchema}:e={name:this.name,description:this.description,parameters:{type:Ce.Type.OBJECT,properties:{request:{type:Ce.Type.STRING}},required:["request"]}},this.apiVariant!=="GEMINI_API"){let t=this.agent instanceof v&&this.agent.outputSchema;e.response=t?{type:Ce.Type.OBJECT}:{type:Ce.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 v&&this.agent.inputSchema?JSON.stringify(e):e.request}]},i=new z({appName:this.agent.name,agent:this.agent,artifactService:new Ge(t),sessionService:new Z,memoryService:new K,credentialService:t.invocationContext.credentialService}),s=await i.sessionService.createSession({appName:this.agent.name,userId:"tmp_user",state:t.state.toRecord()}),c;for await(let d of i.runAsync({userId:s.userId,sessionId:s.id,newMessage:r}))d.actions.stateDelta&&t.state.update(d.actions.stateDelta),c=d;if(!((u=(f=c==null?void 0:c.content)==null?void 0:f.parts)!=null&&u.length))return"";let a=this.agent instanceof v&&this.agent.outputSchema,l=c.content.parts.map(d=>d.text).filter(d=>d).join(`
85
- `);return a?JSON.parse(l):l}};var ae=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 Tt=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||[],Zt(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(Vt(t.model)){t.config.tools.push({googleSearch:{}});return}throw new Error(`Google search tool is not supported for model ${t.model}`)}}},An=new Tt;var bn=`
84
+ `}var Do=new At,y=class o extends M{constructor(e){var n,r,i,s,c,a,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=(c=e.disallowTransferToPeers)!=null?c:!1,this.includeContents=(a=e.includeContents)!=null?a:"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.codeExecutor=e.codeExecutor,this.requestProcessors=(l=e.requestProcessors)!=null?l:[Io,Po,wo,_o,ko,Do],this.responseProcessors=(f=e.responseProcessors)!=null?f:[],this.disallowTransferToParent&&this.disallowTransferToPeers&&!((u=this.subAgents)!=null&&u.length)||this.requestProcessors.push(Lo),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)&&(p.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(_e(this.model))return this.model;if(typeof this.model=="string"&&this.model)return ie.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 Cn(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){p.debug(`Skipping output save for agent ${this.name}: event authored by ${e.author}`);return}if(!this.outputKey){p.debug(`Skipping output save for agent ${this.name}: outputKey is not set`);return}if(!H(e)){p.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)){p.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){p.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||H(t))break;if(t.partial){p.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 q({invocationContext:e}),s=await Cn(r,new k(e));for(let c of s)await c.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=Je(),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=b(i);u!=null&&u.length&&(Ut(i),i.longRunningToolIds=Array.from(Kt(u,t.toolsDict)))}if(yield i,!((f=b(i))!=null&&f.length))return;let s=await zt({invocationContext:e,functionCallEvent:i,toolsDict:t.toolsDict,beforeToolCallbacks:this.canonicalBeforeToolCallbacks,afterToolCallbacks:this.canonicalAfterToolCallbacks});if(!s)return;let c=Vt(e,s);c&&(yield c);let a=Zt({invocationContext:e,functionCallEvent:i,functionResponseEvent:s});a&&(yield a),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,c,a,l,f;let r=await this.handleBeforeModelCallback(e,t,n);if(r){yield r;return}(s=t.config)!=null||(t.config={}),(a=(c=t.config).labels)!=null||(c.labels={}),t.config.labels[hn]||(t.config.labels[hn]=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 v=await this.handleAfterModelCallback(e,d,n);yield v!=null?v:d}}}async handleBeforeModelCallback(e,t,n){let r=new L({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 c=await s({context:r,request:t});if(c)return c}}async handleAfterModelCallback(e,t,n){let r=new L({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 c=await s({context:r,response:t});if(c)return c}}async*runAndHandleError(e,t,n,r){try{for await(let i of e)yield i}catch(i){let s=new L({invocationContext:t,eventActions:r.actions});if(i instanceof Error){let c=await t.pluginManager.runOnModelErrorCallback({callbackContext:s,llmRequest:n,error:i});if(c)yield c;else{let a=JSON.parse(i.message);yield{errorCode:String(a.error.code),errorMessage:a.error.message}}}else throw p.error("Unknown error during response generation",i),i}}};var Be=class extends M{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 Fe=class extends M{async*runAsyncImpl(e){let t=this.subAgents.map(n=>n.runAsync(Go(this,n,e)));for await(let n of $o(t))yield n}async*runLiveImpl(e){throw new Error("This is not supported yet for ParallelAgent.")}};function Go(o,e,t){let n=new F(t),r=`${o.name}.${e.name}`;return n.branch=n.branch?`${n.branch}.${r}`:r,n}async function*$o(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 Tt="task_completed",De=class extends M{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 y&&((await t.canonicalTools(new k(e))).some(i=>i.name===Tt)||(t.tools.push(new D({name:Tt,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 ${Tt} 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 le=class{constructor(){this.artifacts={}}saveArtifact({appName:e,userId:t,sessionId:n,filename:r,artifact:i}){let s=Ge(e,t,n,r);this.artifacts[s]||(this.artifacts[s]=[]);let c=this.artifacts[s].length;return this.artifacts[s].push(i),Promise.resolve(c)}loadArtifact({appName:e,userId:t,sessionId:n,filename:r,version:i}){let s=Ge(e,t,n,r),c=this.artifacts[s];return c?(i===void 0&&(i=c.length-1),Promise.resolve(c[i])):Promise.resolve(void 0)}listArtifactKeys({appName:e,userId:t,sessionId:n}){let r=`${e}/${t}/${n}/`,i=`${e}/${t}/user/`,s=[];for(let c in this.artifacts)if(c.startsWith(r)){let a=c.replace(r,"");s.push(a)}else if(c.startsWith(i)){let a=c.replace(i,"");s.push(a)}return Promise.resolve(s.sort())}deleteArtifact({appName:e,userId:t,sessionId:n,filename:r}){let i=Ge(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=Ge(e,t,n,r),s=this.artifacts[i];if(!s)return Promise.resolve([]);let c=[];for(let a=0;a<s.length;a++)c.push(a);return Promise.resolve(c)}};function Ge(o,e,t,n){return qo(n)?`${o}/${e}/user/${n}`:`${o}/${e}/${t}/${n}`}function qo(o){return o.startsWith("user:")}var z=class{constructor(){this.memories=[];this.sessionEvents={}}async addSessionToMemory(e){let t=xn(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=xn(e.appName,e.userId);if(!this.sessionEvents[t])return Promise.resolve({memories:[]});let n=e.query.toLowerCase().split(/\s+/),r={memories:[]};for(let c of Object.values(this.sessionEvents[t]))for(let a of c){if(!((s=(i=a.content)==null?void 0:i.parts)!=null&&s.length))continue;let l=a.content.parts.map(d=>d.text).filter(d=>!!d).join(" "),f=Uo(l);if(!f.size)continue;n.some(d=>f.has(d))&&r.memories.push({content:a.content,author:a.author,timestamp:jo(a.timestamp)})}return r}};function xn(o,e){return`${o}/${e}`}function Uo(o){return new Set([...o.matchAll(/[A-Za-z]+/)].map(e=>e[0].toLowerCase()))}function jo(o){return new Date(o).toISOString()}var W=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 $e=class extends W{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: ${H(t)}`);let n=b(t);if(n.length>0){let i=n.map(s=>s.name);this.log(` Function Calls: ${i}`)}let r=w(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`;p.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 ue=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),p.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 p.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 p.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 Rt="adk_request_confirmation",St="orcas_tool_call_security_check_states",En="This tool call needs external confirmation before completion.",It=(n=>(n.DENY="DENY",n.CONFIRM="CONFIRM",n.ALLOW="ALLOW",n))(It||{}),ve=class{async evaluate(e){return Promise.resolve({outcome:"ALLOW",reason:"For prototyping purpose, all tool calls are allowed."})}},qe=class extends W{constructor(e){var t;super("security_plugin"),this.policyEngine=(t=e==null?void 0:e.policyEngine)!=null?t:new ve}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:En};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(St))!=null?r:{})[t]:void 0}setToolCallCheckState(e,t){var i;let{functionCallId:n}=e;if(!n)return;let r=(i=e.state.get(St))!=null?i:{};r[n]=t,e.state.set(St,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:En};case"ALLOW":return;default:return}}};function An(o){if(!o.content||!o.content.parts)return[];let e=[];for(let t of o.content.parts)t&&t.functionCall&&t.functionCall.name===Rt&&e.push(t.functionCall);return e}var ye=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(C.TEMP_PREFIX)||(e.state[n]=r)}};function xe(o){return{id:o.id,appName:o.appName,userId:o.userId||"",state:o.state||{},events:o.events||[],lastUpdateTime:o.lastUpdateTime||0}}var Y=class extends ye{constructor(){super(...arguments);this.sessions={};this.userState={};this.appState={}}createSession({appName:t,userId:n,state:r,sessionId:i}){let s=xe({id:i||se(),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,O(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],c=O(s);if(i&&(i.numRecentEvents&&(c.events=c.events.slice(-i.numRecentEvents)),i.afterTimestamp)){let a=c.events.length-1;for(;a>=0&&!(c.events[a].timestamp<i.afterTimestamp);)a--;a>=0&&(c.events=c.events.slice(a+1))}return Promise.resolve(this.mergeState(t,n,c))}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(xe({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,c=l=>{p.warn(`Failed to append event to session ${s}: ${l}`)};if(!this.sessions[r])return c(`appName ${r} not in sessions`),n;if(!this.sessions[r][i])return c(`userId ${i} not in sessions[appName]`),n;if(!this.sessions[r][i][s])return c(`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(C.APP_PREFIX)&&(this.appState[r]=this.appState[r]||{},this.appState[r][l.replace(C.APP_PREFIX,"")]=n.actions.stateDelta[l]),l.startsWith(C.USER_PREFIX)&&(this.userState[r]=this.userState[r]||{},this.userState[r][i]=this.userState[r][i]||{},this.userState[r][i][l.replace(C.USER_PREFIX,"")]=n.actions.stateDelta[l]);let a=this.sessions[r][i][s];return await super.appendEvent({session:a,event:n}),a.lastUpdateTime=n.timestamp,n}mergeState(t,n,r){if(this.appState[t])for(let i of Object.keys(this.appState[t]))r.state[C.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[C.USER_PREFIX+i]=this.userState[t][n][i];return r}};var bn=require("@google/genai"),Tn=require("@opentelemetry/api");var Q=class{constructor(e){var t;this.appName=e.appName,this.agent=e.agent,this.pluginManager=new ue((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 c;i=gn(i);let s=Tn.trace.getTracer("gcp.vertex.agent").startSpan("invocation");try{let a=await this.sessionService.getSession({appName:this.appName,userId:e,sessionId:t});if(!a)throw new Error(`Session not found: ${t}`);if(i.supportCfc&&this.agent instanceof y){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 F({artifactService:this.artifactService,sessionService:this.sessionService,memoryService:this.memoryService,credentialService:this.credentialService,invocationId:Ft(),agent:this.agent,session:a,userContent:n,runConfig:i,pluginManager:this.pluginManager}),f=await this.pluginManager.runOnUserMessageCallback({userMessage:n,invocationContext:l});if(f&&(n=f),n){if(!((c=n.parts)!=null&&c.length))throw new Error("No parts in the newMessage.");i.saveInputBlobsAsArtifacts&&await this.saveArtifacts(l.invocationId,a.userId,a.id,n),await this.sessionService.appendEvent({session:a,event:x({invocationId:l.invocationId,author:"user",actions:r?B({stateDelta:r}):void 0,content:n})})}l.agent=this.determineAgentForResumption(a,this.agent);let u=await this.pluginManager.runBeforeRunCallback({invocationContext:l});if(u){let d=x({invocationId:l.invocationId,author:"model",content:u});await this.sessionService.appendEvent({session:a,event:d}),yield d}else for await(let d of l.agent.runAsync(l)){d.partial||await this.sessionService.appendEvent({session:a,event:d});let v=await this.pluginManager.runOnEventCallback({invocationContext:l,event:d});v?yield v: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 c=r.parts[s];if(!c.inlineData)continue;let a=`artifact_${e}_${s}`;await this.artifactService.saveArtifact({appName:this.appName,userId:t,sessionId:n,filename:a,artifact:c}),r.parts[s]=(0,bn.createPartFromText)(`Uploaded file: ${a}. It is saved into artifacts`)}}determineAgentForResumption(e,t){let n=Ko(e.events);if(n&&n.author)return t.findAgent(n.author)||t;for(let r=e.events.length-1;r>=0;r--){p.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){p.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 y)||t.disallowTransferToParent)return!1;t=t.parentAgent}return!0}};function Ko(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(c=>c.functionResponse))==null?void 0:i.functionResponse)==null?void 0:s.id;if(!t)return null;for(let c=o.length-2;c>=0;c--){let a=o[c],l=b(a);if(l){for(let f of l)if(f.id===t)return a}}return null}var Ue=class extends Q{constructor({agent:e,appName:t="InMemoryRunner",plugins:n=[]}){super({appName:t,agent:e,plugins:n,artifactService:new le,sessionService:new Y,memoryService:new z})}};var Ee=require("@google/genai");var je=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 Ke=class extends I{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 y&&this.agent.inputSchema?e={name:this.name,description:this.description,parameters:this.agent.inputSchema}:e={name:this.name,description:this.description,parameters:{type:Ee.Type.OBJECT,properties:{request:{type:Ee.Type.STRING}},required:["request"]}},this.apiVariant!=="GEMINI_API"){let t=this.agent instanceof y&&this.agent.outputSchema;e.response=t?{type:Ee.Type.OBJECT}:{type:Ee.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 y&&this.agent.inputSchema?JSON.stringify(e):e.request}]},i=new Q({appName:this.agent.name,agent:this.agent,artifactService:new je(t),sessionService:new Y,memoryService:new z,credentialService:t.invocationContext.credentialService}),s=await i.sessionService.createSession({appName:this.agent.name,userId:"tmp_user",state:t.state.toRecord()}),c;for await(let d of i.runAsync({userId:s.userId,sessionId:s.id,newMessage:r}))d.actions.stateDelta&&t.state.update(d.actions.stateDelta),c=d;if(!((u=(f=c==null?void 0:c.content)==null?void 0:f.parts)!=null&&u.length))return"";let a=this.agent instanceof y&&this.agent.outputSchema,l=c.content.parts.map(d=>d.text).filter(d=>d).join(`
85
+ `);return a?JSON.parse(l):l}};var fe=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 Pt=class extends I{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||[],Yt(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}`)}}},Sn=new Pt;var Rn=`
86
86
 
87
- NOTE: This is a long-running operation. Do not call this tool again if it has already returned some intermediate or pending status.`,qe=class extends N{constructor(e){super({...e,isLongRunning:!0})}_getDeclaration(){let e=super._getDeclaration();return e.description?e.description+=bn:e.description=bn.trimStart(),e}};var Tn=require("@modelcontextprotocol/sdk/client/index.js"),Sn=require("@modelcontextprotocol/sdk/client/stdio.js"),Rn=require("@modelcontextprotocol/sdk/client/streamableHttp.js");var ve=class{constructor(e){this.connectionParams=e}async createSession(){let e=new Tn.Client({name:"MCPClient",version:"1.0.0"});switch(this.connectionParams.type){case"StdioConnectionParams":await e.connect(new Sn.StdioClientTransport(this.connectionParams.serverParams));break;case"StreamableHTTPConnectionParams":await e.connect(new Rn.StreamableHTTPClientTransport(new URL(this.connectionParams.url)));break;default:let t=this.connectionParams;break}return e}};var B=require("@google/genai"),ce=require("zod");var Vc=ce.z.object({type:ce.z.literal("object"),properties:ce.z.record(ce.z.unknown()).optional(),required:ce.z.string().array().optional()});function Uo(o){switch(o.toLowerCase()){case"text":case"string":return B.Type.STRING;case"number":return B.Type.NUMBER;case"boolean":return B.Type.BOOLEAN;case"integer":return B.Type.INTEGER;case"array":return B.Type.ARRAY;case"object":return B.Type.OBJECT;default:return B.Type.TYPE_UNSPECIFIED}}function St(o){if(!o)return;function e(t){let n=Uo(t.type),r={type:n,description:t.description};if(n===B.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===B.Type.ARRAY&&t.items&&(r.items=e(t.items));return r}return e(o)}var ye=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:St(this.mcpTool.inputSchema),response:St(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 Rt=class extends ae{constructor(e,t=[]){super(t),this.mcpSessionManager=new ve(e)}async getTools(e){let n=await(await this.mcpSessionManager.createSession()).listTools();p.debug(`number of tools: ${n.tools.length}`);for(let r of n.tools)p.debug(`tool: ${r.name}`);return n.tools.map(r=>new ye(r,this.mcpSessionManager))}async close(){}};var In=require("@google-cloud/storage"),je=require("@google/genai");var It=class{constructor(e){this.bucket=new In.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(Ue({...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(Ue({...e,version:t})),[[r],[i]]=await Promise.all([n.getMetadata(),n.download()]);return r.contentType==="text/plain"?(0,je.createPartFromText)(i.toString("utf-8")):(0,je.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 c of i)t.push(c.name.split("/").pop());for(let c of s)t.push(c.name.split("/").pop());return t.sort((c,a)=>c.localeCompare(a))}async deleteArtifact(e){let t=await this.listVersions(e);await Promise.all(t.map(n=>this.bucket.file(Ue({...e,version:n})).delete()))}async listVersions(e){let t=Ue(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 Ue({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 Ke=require("@opentelemetry/api"),Pn=require("@opentelemetry/api-logs"),Ve=require("@opentelemetry/sdk-logs"),Ze=require("@opentelemetry/sdk-metrics"),wn=require("@opentelemetry/resources"),kn=require("@opentelemetry/sdk-trace-base"),Ln=require("@opentelemetry/sdk-trace-node"),_n=require("@opentelemetry/exporter-trace-otlp-http"),Mn=require("@opentelemetry/exporter-metrics-otlp-http"),On=require("@opentelemetry/exporter-logs-otlp-http");function jo(o=[],e){let t=e||Ko(),n=[...o,Zo()],r=n.flatMap(c=>c.spanProcessors||[]),i=n.flatMap(c=>c.metricReaders||[]),s=n.flatMap(c=>c.logRecordProcessors||[]);if(r.length>0){let c=new Ln.NodeTracerProvider({resource:t,spanProcessors:r});c.register(),Ke.trace.setGlobalTracerProvider(c)}if(i.length>0){let c=new Ze.MeterProvider({readers:i,resource:t});Ke.metrics.setGlobalMeterProvider(c)}if(s.length>0){let c=new Ve.LoggerProvider({resource:t,processors:s});Pn.logs.setGlobalLoggerProvider(c)}}function Ko(){return(0,wn.detectResources)({detectors:[]})}function Vo(){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 Zo(o=Vo()){let{enableTracing:e,enableMetrics:t,enableLogging:n}=o;return{spanProcessors:e?[new kn.BatchSpanProcessor(new _n.OTLPTraceExporter)]:[],metricReaders:t?[new Ze.PeriodicExportingMetricReader({exporter:new Mn.OTLPMetricExporter})]:[],logRecordProcessors:n?[new Ve.BatchLogRecordProcessor(new On.OTLPLogExporter)]:[]}}var Nn=require("google-auth-library"),Bn=require("@opentelemetry/sdk-metrics"),Fn=require("@opentelemetry/resources"),Dn=require("@opentelemetry/resource-detector-gcp"),Gn=require("@google-cloud/opentelemetry-cloud-trace-exporter"),$n=require("@opentelemetry/sdk-trace-base"),qn=require("@google-cloud/opentelemetry-cloud-monitoring-exporter");var zo="Cannot determine GCP Project. OTel GCP Exporters cannot be set up. Please make sure to log into correct GCP Project.";async function Wo(){try{return await new Nn.GoogleAuth().getProjectId()||void 0}catch{return}}async function Yo(o={}){let{enableTracing:e=!1,enableMetrics:t=!1}=o,n=await Wo();return n?{spanProcessors:e?[new $n.BatchSpanProcessor(new Gn.TraceExporter({projectId:n}))]:[],metricReaders:t?[new Bn.PeriodicExportingMetricReader({exporter:new qn.MetricExporter({projectId:n}),exportIntervalMillis:5e3})]:[],logRecordProcessors:[]}:(p.warn(zo),{})}function Qo(){return(0,Fn.detectResources)({detectors:[Dn.gcpDetector]})}0&&(module.exports={AgentTool,BaseAgent,BaseLlm,BasePlugin,BaseSessionService,BaseTool,BaseToolset,BuiltInCodeExecutor,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,isBaseLlm,isFinalResponse,maybeSetOtelProviders,setLogLevel,stringifyContent,version,zodObjectToSchema});
87
+ NOTE: This is a long-running operation. Do not call this tool again if it has already returned some intermediate or pending status.`,Ve=class extends D{constructor(e){super({...e,isLongRunning:!0})}_getDeclaration(){let e=super._getDeclaration();return e.description?e.description+=Rn:e.description=Rn.trimStart(),e}};var In=require("@modelcontextprotocol/sdk/client/index.js"),Pn=require("@modelcontextprotocol/sdk/client/stdio.js"),wn=require("@modelcontextprotocol/sdk/client/streamableHttp.js");var Ae=class{constructor(e){this.connectionParams=e}async createSession(){let e=new In.Client({name:"MCPClient",version:"1.0.0"});switch(this.connectionParams.type){case"StdioConnectionParams":await e.connect(new Pn.StdioClientTransport(this.connectionParams.serverParams));break;case"StreamableHTTPConnectionParams":await e.connect(new wn.StreamableHTTPClientTransport(new URL(this.connectionParams.url)));break;default:let t=this.connectionParams;break}return e}};var G=require("@google/genai"),de=require("zod");var Wc=de.z.object({type:de.z.literal("object"),properties:de.z.record(de.z.unknown()).optional(),required:de.z.string().array().optional()});function Vo(o){switch(o.toLowerCase()){case"text":case"string":return G.Type.STRING;case"number":return G.Type.NUMBER;case"boolean":return G.Type.BOOLEAN;case"integer":return G.Type.INTEGER;case"array":return G.Type.ARRAY;case"object":return G.Type.OBJECT;default:return G.Type.TYPE_UNSPECIFIED}}function wt(o){if(!o)return;function e(t){let n=Vo(t.type),r={type:n,description:t.description};if(n===G.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===G.Type.ARRAY&&t.items&&(r.items=e(t.items));return r}return e(o)}var be=class extends I{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:wt(this.mcpTool.inputSchema),response:wt(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 kt=class extends fe{constructor(e,t=[]){super(t),this.mcpSessionManager=new Ae(e)}async getTools(e){let n=await(await this.mcpSessionManager.createSession()).listTools();p.debug(`number of tools: ${n.tools.length}`);for(let r of n.tools)p.debug(`tool: ${r.name}`);return n.tools.map(r=>new be(r,this.mcpSessionManager))}async close(){}};var kn=require("@google-cloud/storage"),ze=require("@google/genai");var Lt=class{constructor(e){this.bucket=new kn.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(Ze({...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(Ze({...e,version:t})),[[r],[i]]=await Promise.all([n.getMetadata(),n.download()]);return r.contentType==="text/plain"?(0,ze.createPartFromText)(i.toString("utf-8")):(0,ze.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 c of i)t.push(c.name.split("/").pop());for(let c of s)t.push(c.name.split("/").pop());return t.sort((c,a)=>c.localeCompare(a))}async deleteArtifact(e){let t=await this.listVersions(e);await Promise.all(t.map(n=>this.bucket.file(Ze({...e,version:n})).delete()))}async listVersions(e){let t=Ze(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 Ze({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 We=require("@opentelemetry/api"),Ln=require("@opentelemetry/api-logs"),Ye=require("@opentelemetry/sdk-logs"),Qe=require("@opentelemetry/sdk-metrics"),_n=require("@opentelemetry/resources"),Mn=require("@opentelemetry/sdk-trace-base"),On=require("@opentelemetry/sdk-trace-node"),Nn=require("@opentelemetry/exporter-trace-otlp-http"),Bn=require("@opentelemetry/exporter-metrics-otlp-http"),Fn=require("@opentelemetry/exporter-logs-otlp-http");function Zo(o=[],e){let t=e||zo(),n=[...o,Yo()],r=n.flatMap(c=>c.spanProcessors||[]),i=n.flatMap(c=>c.metricReaders||[]),s=n.flatMap(c=>c.logRecordProcessors||[]);if(r.length>0){let c=new On.NodeTracerProvider({resource:t,spanProcessors:r});c.register(),We.trace.setGlobalTracerProvider(c)}if(i.length>0){let c=new Qe.MeterProvider({readers:i,resource:t});We.metrics.setGlobalMeterProvider(c)}if(s.length>0){let c=new Ye.LoggerProvider({resource:t,processors:s});Ln.logs.setGlobalLoggerProvider(c)}}function zo(){return(0,_n.detectResources)({detectors:[]})}function Wo(){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 Yo(o=Wo()){let{enableTracing:e,enableMetrics:t,enableLogging:n}=o;return{spanProcessors:e?[new Mn.BatchSpanProcessor(new Nn.OTLPTraceExporter)]:[],metricReaders:t?[new Qe.PeriodicExportingMetricReader({exporter:new Bn.OTLPMetricExporter})]:[],logRecordProcessors:n?[new Ye.BatchLogRecordProcessor(new Fn.OTLPLogExporter)]:[]}}var Dn=require("google-auth-library"),Gn=require("@opentelemetry/sdk-metrics"),$n=require("@opentelemetry/resources"),qn=require("@opentelemetry/resource-detector-gcp"),Un=require("@google-cloud/opentelemetry-cloud-trace-exporter"),jn=require("@opentelemetry/sdk-trace-base"),Kn=require("@google-cloud/opentelemetry-cloud-monitoring-exporter");var Qo="Cannot determine GCP Project. OTel GCP Exporters cannot be set up. Please make sure to log into correct GCP Project.";async function Xo(){try{return await new Dn.GoogleAuth().getProjectId()||void 0}catch{return}}async function Ho(o={}){let{enableTracing:e=!1,enableMetrics:t=!1}=o,n=await Xo();return n?{spanProcessors:e?[new jn.BatchSpanProcessor(new Un.TraceExporter({projectId:n}))]:[],metricReaders:t?[new Gn.PeriodicExportingMetricReader({exporter:new Kn.MetricExporter({projectId:n}),exportIntervalMillis:5e3})]:[],logRecordProcessors:[]}:(p.warn(Qo),{})}function Jo(){return(0,$n.detectResources)({detectors:[qn.gcpDetector]})}0&&(module.exports={AgentTool,BaseAgent,BaseLlm,BasePlugin,BaseSessionService,BaseTool,BaseToolset,BuiltInCodeExecutor,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,isBaseLlm,isFinalResponse,maybeSetOtelProviders,setLogLevel,stringifyContent,version,zodObjectToSchema});
88
88
  /**
89
89
  * @license
90
90
  * Copyright 2025 Google LLC