@google/adk 0.2.4 → 0.2.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (92) hide show
  1. package/dist/cjs/agents/base_agent.js +9 -3
  2. package/dist/cjs/agents/invocation_context.js +3 -1
  3. package/dist/cjs/agents/llm_agent.js +129 -75
  4. package/dist/cjs/agents/loop_agent.js +16 -5
  5. package/dist/cjs/agents/parallel_agent.js +17 -3
  6. package/dist/cjs/agents/readonly_context.js +4 -1
  7. package/dist/cjs/agents/sequential_agent.js +34 -12
  8. package/dist/cjs/code_executors/base_code_executor.js +12 -2
  9. package/dist/cjs/code_executors/built_in_code_executor.js +15 -3
  10. package/dist/cjs/common.js +41 -0
  11. package/dist/cjs/examples/base_example_provider.js +18 -2
  12. package/dist/cjs/examples/example_util.js +1 -1
  13. package/dist/cjs/index.js +11 -11
  14. package/dist/cjs/index.js.map +4 -4
  15. package/dist/cjs/plugins/base_plugin.js +59 -49
  16. package/dist/cjs/plugins/security_plugin.js +4 -1
  17. package/dist/cjs/runner/runner.js +34 -24
  18. package/dist/cjs/tools/agent_tool.js +18 -9
  19. package/dist/cjs/tools/base_tool.js +16 -6
  20. package/dist/cjs/tools/function_tool.js +14 -5
  21. package/dist/cjs/tools/google_search_tool.js +8 -3
  22. package/dist/cjs/tools/tool_context.js +4 -9
  23. package/dist/cjs/utils/gemini_schema_util.js +1 -0
  24. package/dist/cjs/version.js +1 -1
  25. package/dist/esm/agents/base_agent.js +9 -3
  26. package/dist/esm/agents/invocation_context.js +3 -1
  27. package/dist/esm/agents/llm_agent.js +165 -83
  28. package/dist/esm/agents/loop_agent.js +14 -4
  29. package/dist/esm/agents/parallel_agent.js +15 -2
  30. package/dist/esm/agents/readonly_context.js +4 -1
  31. package/dist/esm/agents/sequential_agent.js +33 -12
  32. package/dist/esm/code_executors/base_code_executor.js +10 -1
  33. package/dist/esm/code_executors/built_in_code_executor.js +13 -2
  34. package/dist/esm/common.js +53 -10
  35. package/dist/esm/examples/base_example_provider.js +16 -1
  36. package/dist/esm/examples/example_util.js +4 -2
  37. package/dist/esm/index.js +11 -11
  38. package/dist/esm/index.js.map +4 -4
  39. package/dist/esm/plugins/base_plugin.js +59 -49
  40. package/dist/esm/plugins/security_plugin.js +4 -1
  41. package/dist/esm/runner/runner.js +43 -27
  42. package/dist/esm/tools/agent_tool.js +17 -9
  43. package/dist/esm/tools/base_tool.js +14 -5
  44. package/dist/esm/tools/function_tool.js +13 -7
  45. package/dist/esm/tools/google_search_tool.js +9 -3
  46. package/dist/esm/tools/tool_context.js +4 -9
  47. package/dist/esm/utils/gemini_schema_util.js +1 -0
  48. package/dist/esm/version.js +1 -1
  49. package/dist/types/agents/base_agent.d.ts +14 -3
  50. package/dist/types/agents/invocation_context.d.ts +4 -2
  51. package/dist/types/agents/llm_agent.d.ts +42 -30
  52. package/dist/types/agents/loop_agent.d.ts +16 -0
  53. package/dist/types/agents/parallel_agent.d.ts +16 -0
  54. package/dist/types/agents/sequential_agent.d.ts +17 -1
  55. package/dist/types/auth/auth_schemes.d.ts +5 -2
  56. package/dist/types/code_executors/base_code_executor.d.ts +14 -0
  57. package/dist/types/code_executors/built_in_code_executor.d.ts +19 -0
  58. package/dist/types/common.d.ts +38 -14
  59. package/dist/types/examples/base_example_provider.d.ts +16 -0
  60. package/dist/types/plugins/base_plugin.d.ts +50 -40
  61. package/dist/types/runner/runner.d.ts +17 -9
  62. package/dist/types/tools/agent_tool.d.ts +14 -0
  63. package/dist/types/tools/base_tool.d.ts +14 -0
  64. package/dist/types/tools/function_tool.d.ts +14 -1
  65. package/dist/types/tools/google_search_tool.d.ts +3 -4
  66. package/dist/types/tools/tool_context.d.ts +1 -1
  67. package/dist/types/version.d.ts +1 -1
  68. package/dist/web/agents/base_agent.js +9 -3
  69. package/dist/web/agents/invocation_context.js +3 -1
  70. package/dist/web/agents/llm_agent.js +165 -83
  71. package/dist/web/agents/loop_agent.js +14 -4
  72. package/dist/web/agents/parallel_agent.js +15 -2
  73. package/dist/web/agents/readonly_context.js +4 -1
  74. package/dist/web/agents/sequential_agent.js +33 -12
  75. package/dist/web/code_executors/base_code_executor.js +10 -1
  76. package/dist/web/code_executors/built_in_code_executor.js +13 -2
  77. package/dist/web/common.js +53 -10
  78. package/dist/web/examples/base_example_provider.js +16 -1
  79. package/dist/web/examples/example_util.js +4 -2
  80. package/dist/web/index.js +1 -1
  81. package/dist/web/index.js.map +4 -4
  82. package/dist/web/plugins/base_plugin.js +59 -49
  83. package/dist/web/plugins/security_plugin.js +4 -1
  84. package/dist/web/runner/runner.js +44 -28
  85. package/dist/web/tools/agent_tool.js +17 -9
  86. package/dist/web/tools/base_tool.js +14 -5
  87. package/dist/web/tools/function_tool.js +13 -7
  88. package/dist/web/tools/google_search_tool.js +9 -3
  89. package/dist/web/tools/tool_context.js +4 -9
  90. package/dist/web/utils/gemini_schema_util.js +1 -0
  91. package/dist/web/version.js +1 -1
  92. package/package.json +2 -2
package/dist/esm/index.js CHANGED
@@ -4,17 +4,17 @@
4
4
  * SPDX-License-Identifier: Apache-2.0
5
5
  */
6
6
 
7
- import{trace as Tt}from"@opentelemetry/api";function _(o={}){return{stateDelta:{},artifactDelta:{},requestedAuthConfigs:{},requestedToolConfirmations:{},...o}}function yt(o,e){let t=_();e&&Object.assign(t,e);for(let n of o)n&&(n.stateDelta&&Object.assign(t.stateDelta,n.stateDelta),n.artifactDelta&&Object.assign(t.artifactDelta,n.artifactDelta),n.requestedAuthConfigs&&Object.assign(t.requestedAuthConfigs,n.requestedAuthConfigs),n.requestedToolConfirmations&&Object.assign(t.requestedToolConfirmations,n.requestedToolConfirmations),n.skipSummarization!==void 0&&(t.skipSummarization=n.skipSummarization),n.transferToAgent!==void 0&&(t.transferToAgent=n.transferToAgent),n.escalate!==void 0&&(t.escalate=n.escalate));return t}function y(o={}){return{...o,id:o.id||Pe(),invocationId:o.invocationId||"",author:o.author,actions:o.actions||_(),longRunningToolIds:o.longRunningToolIds||[],branch:o.branch,timestamp:o.timestamp||Date.now()}}function X(o){return o.actions.skipSummarization||o.longRunningToolIds&&o.longRunningToolIds.length>0?!0:b(o).length===0&&P(o).length===0&&!o.partial&&!At(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 P(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 At(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 pn(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 xt="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";function Pe(){let o="";for(let e=0;e<8;e++)o+=xt[Math.floor(Math.random()*xt.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 R=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 w=class extends R{constructor({invocationContext:e,eventActions:t}){super(e),this.eventActions=t||_(),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 de(){return typeof window<"u"}var fe="xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx";function Y(){let o="";for(let e=0;e<fe.length;e++){let t=Math.random()*16|0;fe[e]==="x"?o+=t.toString(16):fe[e]==="y"?o+=(t&3|8).toString(16):o+=fe[e]}return o}function Et(o){return de()?window.atob(o):Buffer.from(o,"base64").toString()}var we=class{constructor(){this.numberOfLlmCalls=0}incrementAndEnforceLlmCallsLimit(e){if(this.numberOfLlmCalls++,e&&e.maxLlmCalls>0&&this.numberOfLlmCalls>e.maxLlmCalls)throw new Error(`Max number of llm calls limit of ${e.maxLlmCalls} exceeded`)}},M=class{constructor(e){this.invocationCostManager=new we;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 bt(){return`e-${Y()}`}var ke=Symbol.for("google.adk.baseAgent");function mn(o){return typeof o=="object"&&o!==null&&ke in o&&o[ke]===!0}var Rt;Rt=ke;var L=class{constructor(e){this[Rt]=!0;this.name=gn(e.name),this.description=e.description,this.parentAgent=e.parentAgent,this.subAgents=e.subAgents||[],this.rootAgent=Cn(this),this.beforeAgentCallback=St(e.beforeAgentCallback),this.afterAgentCallback=St(e.afterAgentCallback),this.setParentAgentForSubAgents()}async*runAsync(e){let t=Tt.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.getTracer("gcp.vertex.agent").startSpan(`agent_run [${this.name}]`);try{throw new Error("Live mode is not implemented yet.")}finally{t.end()}}findAgent(e){return this.name===e?this:this.findSubAgent(e)}findSubAgent(e){for(let t of this.subAgents){let n=t.findAgent(e);if(n)return n}}createInvocationContext(e){return new M({...e,agent:this})}async handleBeforeAgentCallback(e){if(this.beforeAgentCallback.length===0)return;let t=new w({invocationContext:e});for(let n of this.beforeAgentCallback){let r=await n(t);if(r)return e.endInvocation=!0,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 gn(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 Cn(o){for(;o.parentAgent;)o=o.parentAgent;return o}function St(o){return o?Array.isArray(o)?o:[o]:[]}import{createUserContent as En}from"@google/genai";import{isEmpty as Pt}from"lodash-es";var oe=class{constructor(e){this.authConfig=e}getAuthResponse(e){let t="temp:"+this.authConfig.credentialKey;return e.get(t)}generateAuthRequest(){var t,n;let e=this.authConfig.authScheme.type;if(!["oauth2","openIdConnect"].includes(e))return this.authConfig;if((n=(t=this.authConfig.exchangedAuthCredential)==null?void 0:t.oauth2)!=null&&n.authUri)return this.authConfig;if(!this.authConfig.rawAuthCredential)throw new Error(`Auth Scheme ${e} requires authCredential.`);if(!this.authConfig.rawAuthCredential.oauth2)throw new Error(`Auth Scheme ${e} requires oauth2 in authCredential.`);if(this.authConfig.rawAuthCredential.oauth2.authUri)return{credentialKey:this.authConfig.credentialKey,authScheme:this.authConfig.authScheme,rawAuthCredential:this.authConfig.rawAuthCredential,exchangedAuthCredential:this.authConfig.rawAuthCredential};if(!this.authConfig.rawAuthCredential.oauth2.clientId||!this.authConfig.rawAuthCredential.oauth2.clientSecret)throw new Error(`Auth Scheme ${e} requires both clientId and clientSecret in authCredential.oauth2.`);return{credentialKey:this.authConfig.credentialKey,authScheme:this.authConfig.authScheme,rawAuthCredential:this.authConfig.rawAuthCredential,exchangedAuthCredential:this.generateAuthUri()}}generateAuthUri(){return this.authConfig.rawAuthCredential}};var U=class{constructor({hint:e,confirmed:t,payload:n}){this.hint=e!=null?e:"",this.confirmed=t,this.payload=n}};var G=class extends w{constructor({invocationContext:e,eventActions:t,functionCallId:n,toolConfirmation:r}){super({invocationContext:e,eventActions:t}),this.functionCallId=n,this.toolConfirmation=r}get actions(){return this.eventActions}requestCredential(e){if(!this.functionCallId)throw new Error("functionCallId is not set.");let t=new oe(e);this.eventActions.requestedAuthConfigs[this.functionCallId]=t.generateAuthRequest()}getAuthResponse(e){return new oe(e).getAuthResponse(this.state)}listArtifacts(){if(!this.invocationContext.artifactService)throw new Error("Artifact service is not initialized.");return this.invocationContext.artifactService.listArtifactKeys({appName:this.invocationContext.session.appName,userId:this.invocationContext.session.userId,sessionId:this.invocationContext.session.id})}searchMemory(e){if(!this.invocationContext.memoryService)throw new Error("Memory service is not initialized.");return this.invocationContext.memoryService.searchMemory({appName:this.invocationContext.session.appName,userId:this.invocationContext.session.userId,query:e})}requestConfirmation({hint:e,payload:t}){if(!this.functionCallId)throw new Error("functionCallId is not set.");this.eventActions.requestedToolConfirmations[this.functionCallId]=new U({hint:e,confirmed:!1,payload:t})}};var It=(r=>(r[r.DEBUG=0]="DEBUG",r[r.INFO=1]="INFO",r[r.WARN=2]="WARN",r[r.ERROR=3]="ERROR",r))(It||{}),H=1;function vn(o){H=o}var Le=class{log(e,...t){if(!(e<H))switch(e){case 0:this.debug(...t);break;case 1:this.info(...t);break;case 2:this.warn(...t);break;case 3:this.error(...t);break;default:throw new Error(`Unsupported log level: ${e}`)}}debug(...e){H>0||console.debug(pe(0),...e)}info(...e){H>1||console.info(pe(1),...e)}warn(...e){H>2||console.warn(pe(2),...e)}error(...e){H>3||console.error(pe(3),...e)}},yn={0:"DEBUG",1:"INFO",2:"WARN",3:"ERROR"},xn={0:"\x1B[34m",1:"\x1B[32m",2:"\x1B[33m",3:"\x1B[31m"},An="\x1B[0m";function pe(o){return`${xn[o]}[ADK ${yn[o]}]:${An}`}var p=new Le;var _e="adk-",me="adk_request_credential",J="adk_request_confirmation",bn={handleFunctionCallList:ge,generateAuthEvent:Oe,generateRequestConfirmationEvent:Be};function Me(){return`${_e}${Y()}`}function wt(o){let e=b(o);if(e)for(let t of e)t.id||(t.id=Me())}function kt(o){if(o&&o.parts)for(let e of o.parts)e.functionCall&&e.functionCall.id&&e.functionCall.id.startsWith(_e)&&(e.functionCall.id=void 0),e.functionResponse&&e.functionResponse.id&&e.functionResponse.id.startsWith(_e)&&(e.functionResponse.id=void 0)}function Lt(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 Oe(o,e){var r;if(!((r=e.actions)!=null&&r.requestedAuthConfigs)||Pt(e.actions.requestedAuthConfigs))return;let t=[],n=new Set;for(let[i,s]of Object.entries(e.actions.requestedAuthConfigs)){let a={name:me,args:{function_call_id:i,auth_config:s},id:Me()};n.add(a.id),t.push({functionCall:a})}return y({invocationId:o.invocationId,author:o.agent.name,branch:o.branch,content:{parts:t,role:e.content.role},longRunningToolIds:Array.from(n)})}function Be({invocationContext:o,functionCallEvent:e,functionResponseEvent:t}){var s,a;if(!((s=t.actions)!=null&&s.requestedToolConfirmations)||Pt(t.actions.requestedToolConfirmations))return;let n=[],r=new Set,i=b(e);for(let[c,l]of Object.entries(t.actions.requestedToolConfirmations)){let f=(a=i.find(d=>d.id===c))!=null?a:void 0;if(!f)continue;let u={name:J,args:{originalFunctionCall:f,toolConfirmation:l},id:Me()};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 Tn(o,e,t){return p.debug(`callToolAsync ${o.name}`),await o.runAsync({args:e,toolContext:t})}async function _t({invocationContext:o,functionCallEvent:e,toolsDict:t,beforeToolCallbacks:n,afterToolCallbacks:r,filters:i,toolConfirmationDict:s}){let a=b(e);return await ge({invocationContext:o,functionCalls:a,toolsDict:t,beforeToolCallbacks:n,afterToolCallbacks:r,filters:i,toolConfirmationDict:s})}async function ge({invocationContext:o,functionCalls:e,toolsDict:t,beforeToolCallbacks:n,afterToolCallbacks:r,filters:i,toolConfirmationDict:s}){var f;let a=[],c=e.filter(u=>!i||u.id&&i.has(u.id));for(let u of c){let d;s&&u.id&&(d=s[u.id]);let{tool:g,toolContext:x}=Sn({invocationContext:o,functionCall:u,toolsDict:t,toolConfirmation:d});p.debug(`execute_tool ${g.name}`);let h=(f=u.args)!=null?f:{},m=null,A;if(m=await o.pluginManager.runBeforeToolCallback({tool:g,toolArgs:h,toolContext:x}),m==null){for(let $ of n)if(m=await $({tool:g,args:h,context:x}),m)break}if(m==null)try{m=await Tn(g,h,x)}catch($){if($ instanceof Error){let vt=await o.pluginManager.runOnToolErrorCallback({tool:g,toolArgs:h,toolContext:x,error:$});vt?m=vt:A=$.message}else A=$}let S=await o.pluginManager.runAfterToolCallback({tool:g,toolArgs:h,toolContext:x,result:m});if(S==null){for(let $ of r)if(S=await $({tool:g,args:h,context:x,response:m}),S)break}if(S!=null&&(m=S),g.isLongRunning&&!m)continue;A?m={error:A}:(typeof m!="object"||m==null)&&(m={result:m});let Ct=y({invocationId:o.invocationId,author:o.agent.name,content:En({functionResponse:{id:x.functionCallId,name:g.name,response:m}}),actions:x.actions,branch:o.branch});p.debug("traceToolCall",{tool:g.name,args:h,functionResponseEvent:Ct.id}),a.push(Ct)}if(!a.length)return null;let l=Rn(a);return a.length>1&&(p.debug("execute_tool (merged)"),p.debug("traceMergedToolCalls",{responseEventId:l.id,functionResponseEvent:l.id})),l}function Sn({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 G({invocationContext:o,functionCallId:e.id||void 0,toolConfirmation:n});return{tool:t[e.name],toolContext:r}}function Rn(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=yt(n);return y({author:t.author,branch:t.branch,content:{role:"user",parts:e},actions:r,timestamp:t.timestamp})}var Ne=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}}};import{cloneDeep as Ht}from"lodash-es";import{z as Jt}from"zod";var q=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 In="^projects/[^/]+/locations/[^/]+/publishers/[^/]+/models/(.+)$";function Fe(o){let e=o.match(In);return e?e[1]:o}function Mt(o){return Fe(o).startsWith("gemini-")}function Pn(o){if(!/^\d+(\.\d+)*$/.test(o))return{valid:!1,major:0,minor:0,patch:0};let e=o.split(".").map(t=>parseInt(t,10));return{valid:!0,major:e[0],minor:e.length>1?e[1]:0,patch:e.length>2?e[2]:0}}function Ot(o){return Fe(o).startsWith("gemini-1")}function re(o){if(!o)return!1;let e=Fe(o);if(!e.startsWith("gemini-"))return!1;let t=e.slice(7).split("-",1)[0],n=Pn(t);return n.valid&&n.major>=2}var O=class extends q{executeCode(e){return Promise.resolve({stdout:"",stderr:"",outputFiles:[]})}processLlmRequest(e){if(e.model&&re(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}`)}};import{Language as wn,Outcome as Bt}from"@google/genai";import{cloneDeep as kn}from"lodash-es";function Nt(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=kn(t[0]),r=t.map(u=>u.text).join(`
8
- `),i=e.map(u=>u[0]).join("|"),s=e.map(u=>u[1]).join("|"),a=new RegExp(`?<prefix>.*?)(${i})(?<codeStr>.*?)(${s})(?<suffix>.*?)$`,"s").exec(r),{prefix:c,codeStr:l}=(a==null?void 0:a.groups)||{};return l?(o.parts=[],c&&(n.text=c,o.parts.push(n)),o.parts.push(De(l)),l):""}function De(o){return{text:o,executableCode:{code:o,language:wn.PYTHON}}}function Ft(o){if(o.stderr)return{text:o.stderr,codeExecutionResult:{outcome:Bt.OUTCOME_FAILED}};let e=[];return(o.stdout||!o.outputFiles)&&e.push(`Code execution result:
7
+ var Oe=class{constructor(e={}){this.task=e.task,this.stream=e.stream}};import{trace as qt}from"@opentelemetry/api";function _(o={}){return{stateDelta:{},artifactDelta:{},requestedAuthConfigs:{},requestedToolConfirmations:{},...o}}function Nt(o,e){let t=_();e&&Object.assign(t,e);for(let n of o)n&&(n.stateDelta&&Object.assign(t.stateDelta,n.stateDelta),n.artifactDelta&&Object.assign(t.artifactDelta,n.artifactDelta),n.requestedAuthConfigs&&Object.assign(t.requestedAuthConfigs,n.requestedAuthConfigs),n.requestedToolConfirmations&&Object.assign(t.requestedToolConfirmations,n.requestedToolConfirmations),n.skipSummarization!==void 0&&(t.skipSummarization=n.skipSummarization),n.transferToAgent!==void 0&&(t.transferToAgent=n.transferToAgent),n.escalate!==void 0&&(t.escalate=n.escalate));return t}function y(o={}){return{...o,id:o.id||Me(),invocationId:o.invocationId||"",author:o.author,actions:o.actions||_(),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:T(o).length===0&&P(o).length===0&&!o.partial&&!Dt(o)}function T(o){let e=[];if(o.content&&o.content.parts)for(let t of o.content.parts)t.functionCall&&e.push(t.functionCall);return e}function P(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 Dt(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 Yn(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 Ft="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";function Me(){let o="";for(let e=0;e<8;e++)o+=Ft[Math.floor(Math.random()*Ft.length)];return o}var v=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}}};v.APP_PREFIX="app:",v.USER_PREFIX="user:",v.TEMP_PREFIX="temp:";var R=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 v(this.invocationContext.session.state,{})}};var w=class extends R{constructor({invocationContext:e,eventActions:t}){super(e),this.eventActions=t||_(),this._state=new v(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 me(){return typeof window<"u"}var pe="xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx";function Q(){let o="";for(let e=0;e<pe.length;e++){let t=Math.random()*16|0;pe[e]==="x"?o+=t.toString(16):pe[e]==="y"?o+=(t&3|8).toString(16):o+=pe[e]}return o}function Gt(o){return me()?window.atob(o):Buffer.from(o,"base64").toString()}var Be=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`)}},B=class{constructor(e){this.invocationCostManager=new Be;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 $t(){return`e-${Q()}`}var Ne=Symbol.for("google.adk.baseAgent");function Hn(o){return typeof o=="object"&&o!==null&&Ne in o&&o[Ne]===!0}var jt;jt=Ne;var L=class{constructor(e){this[jt]=!0;this.name=Qn(e.name),this.description=e.description,this.parentAgent=e.parentAgent,this.subAgents=e.subAgents||[],this.rootAgent=Wn(this),this.beforeAgentCallback=Ut(e.beforeAgentCallback),this.afterAgentCallback=Ut(e.afterAgentCallback),this.setParentAgentForSubAgents()}async*runAsync(e){let t=qt.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=qt.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 B({...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 Qn(o){if(!Xn(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 Xn(o){return/^[\p{ID_Start}$_][\p{ID_Continue}$_]*$/u.test(o)}function Wn(o){for(;o.parentAgent;)o=o.parentAgent;return o}function Ut(o){return o?Array.isArray(o)?o:[o]:[]}var O=class{},Fe=class{};import{createUserContent as oo}from"@google/genai";import{isEmpty as Vt}from"lodash-es";var ne=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 $=class{constructor({hint:e,confirmed:t,payload:n}){this.hint=e!=null?e:"",this.confirmed=t,this.payload=n}};var G=class extends w{constructor(e){super(e),this.functionCallId=e.functionCallId,this.toolConfirmation=e.toolConfirmation}get actions(){return this.eventActions}requestCredential(e){if(!this.functionCallId)throw new Error("functionCallId is not set.");let t=new ne(e);this.eventActions.requestedAuthConfigs[this.functionCallId]=t.generateAuthRequest()}getAuthResponse(e){return new ne(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 $({hint:e,confirmed:!1,payload:t})}};var Kt=(r=>(r[r.DEBUG=0]="DEBUG",r[r.INFO=1]="INFO",r[r.WARN=2]="WARN",r[r.ERROR=3]="ERROR",r))(Kt||{}),X=1;function Jn(o){X=o}var De=class{log(e,...t){if(!(e<X))switch(e){case 0:this.debug(...t);break;case 1:this.info(...t);break;case 2:this.warn(...t);break;case 3:this.error(...t);break;default:throw new Error(`Unsupported log level: ${e}`)}}debug(...e){X>0||console.debug(ge(0),...e)}info(...e){X>1||console.info(ge(1),...e)}warn(...e){X>2||console.warn(ge(2),...e)}error(...e){X>3||console.error(ge(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 ge(o){return`${to[o]}[ADK ${eo[o]}]:${no}`}var m=new De;var Ge="adk-",he="adk_request_credential",W="adk_request_confirmation",ro={handleFunctionCallList:Ce,generateAuthEvent:qe,generateRequestConfirmationEvent:Ue};function $e(){return`${Ge}${Q()}`}function Zt(o){let e=T(o);if(e)for(let t of e)t.id||(t.id=$e())}function zt(o){if(o&&o.parts)for(let e of o.parts)e.functionCall&&e.functionCall.id&&e.functionCall.id.startsWith(Ge)&&(e.functionCall.id=void 0),e.functionResponse&&e.functionResponse.id&&e.functionResponse.id.startsWith(Ge)&&(e.functionResponse.id=void 0)}function Yt(o,e){let t=new Set;for(let n of o)n.name&&n.name in e&&e[n.name].isLongRunning&&n.id&&t.add(n.id);return t}function qe(o,e){var r;if(!((r=e.actions)!=null&&r.requestedAuthConfigs)||Vt(e.actions.requestedAuthConfigs))return;let t=[],n=new Set;for(let[i,s]of Object.entries(e.actions.requestedAuthConfigs)){let a={name:he,args:{function_call_id:i,auth_config:s},id:$e()};n.add(a.id),t.push({functionCall:a})}return y({invocationId:o.invocationId,author:o.agent.name,branch:o.branch,content:{parts:t,role:e.content.role},longRunningToolIds:Array.from(n)})}function Ue({invocationContext:o,functionCallEvent:e,functionResponseEvent:t}){var s,a;if(!((s=t.actions)!=null&&s.requestedToolConfirmations)||Vt(t.actions.requestedToolConfirmations))return;let n=[],r=new Set,i=T(e);for(let[c,l]of Object.entries(t.actions.requestedToolConfirmations)){let f=(a=i.find(d=>d.id===c))!=null?a:void 0;if(!f)continue;let u={name:W,args:{originalFunctionCall:f,toolConfirmation:l},id:$e()};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 io(o,e,t){return m.debug(`callToolAsync ${o.name}`),await o.runAsync({args:e,toolContext:t})}async function Ht({invocationContext:o,functionCallEvent:e,toolsDict:t,beforeToolCallbacks:n,afterToolCallbacks:r,filters:i,toolConfirmationDict:s}){let a=T(e);return await Ce({invocationContext:o,functionCalls:a,toolsDict:t,beforeToolCallbacks:n,afterToolCallbacks:r,filters:i,toolConfirmationDict:s})}async function Ce({invocationContext:o,functionCalls:e,toolsDict:t,beforeToolCallbacks:n,afterToolCallbacks:r,filters:i,toolConfirmationDict:s}){var f;let a=[],c=e.filter(u=>!i||u.id&&i.has(u.id));for(let u of c){let d;s&&u.id&&(d=s[u.id]);let{tool:p,toolContext:g}=so({invocationContext:o,functionCall:u,toolsDict:t,toolConfirmation:d});m.debug(`execute_tool ${p.name}`);let C=(f=u.args)!=null?f:{},h=null,x;if(h=await o.pluginManager.runBeforeToolCallback({tool:p,toolArgs:C,toolContext:g}),h==null){for(let D of n)if(h=await D({tool:p,args:C,context:g}),h)break}if(h==null)try{h=await io(p,C,g)}catch(D){if(D instanceof Error){let Bt=await o.pluginManager.runOnToolErrorCallback({tool:p,toolArgs:C,toolContext:g,error:D});Bt?h=Bt:x=D.message}else x=D}let S=await o.pluginManager.runAfterToolCallback({tool:p,toolArgs:C,toolContext:g,result:h});if(S==null){for(let D of r)if(S=await D({tool:p,args:C,context:g,response:h}),S)break}if(S!=null&&(h=S),p.isLongRunning&&!h)continue;x?h={error:x}:(typeof h!="object"||h==null)&&(h={result:h});let Mt=y({invocationId:o.invocationId,author:o.agent.name,content:oo({functionResponse:{id:g.functionCallId,name:p.name,response:h}}),actions:g.actions,branch:o.branch});m.debug("traceToolCall",{tool:p.name,args:C,functionResponseEvent:Mt.id}),a.push(Mt)}if(!a.length)return null;let l=ao(a);return a.length>1&&(m.debug("execute_tool (merged)"),m.debug("traceMergedToolCalls",{responseEventId:l.id,functionResponseEvent:l.id})),l}function so({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 G({invocationContext:o,functionCallId:e.id||void 0,toolConfirmation:n});return{tool:t[e.name],toolContext:r}}function ao(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=Nt(n);return y({author:t.author,branch:t.branch,content:{role:"user",parts:e},actions:r,timestamp:t.timestamp})}var je=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}}};import{cloneDeep as En}from"lodash-es";import{z as Tn}from"zod";var Ke=Symbol.for("google.adk.baseCodeExecutor");function ve(o){return typeof o=="object"&&o!==null&&Ke in o&&o[Ke]===!0}var Qt;Qt=Ke;var oe=class{constructor(){this[Qt]=!0;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 co="^projects/[^/]+/locations/[^/]+/publishers/[^/]+/models/(.+)$";function Ve(o){let e=o.match(co);return e?e[1]:o}function Xt(o){return Ve(o).startsWith("gemini-")}function lo(o){if(!/^\d+(\.\d+)*$/.test(o))return{valid:!1,major:0,minor:0,patch:0};let e=o.split(".").map(t=>parseInt(t,10));return{valid:!0,major:e[0],minor:e.length>1?e[1]:0,patch:e.length>2?e[2]:0}}function Wt(o){return Ve(o).startsWith("gemini-1")}function re(o){if(!o)return!1;let e=Ve(o);if(!e.startsWith("gemini-"))return!1;let t=e.slice(7).split("-",1)[0],n=lo(t);return n.valid&&n.major>=2}var Ze=Symbol.for("google.adk.builtInCodeExecutor");function se(o){return typeof o=="object"&&o!==null&&Ze in o&&o[Ze]===!0}var Jt,en,ie=class extends(en=oe,Jt=Ze,en){constructor(){super(...arguments);this[Jt]=!0}executeCode(t){return Promise.resolve({stdout:"",stderr:"",outputFiles:[]})}processLlmRequest(t){if(t.model&&re(t.model)){t.config=t.config||{},t.config.tools=t.config.tools||[],t.config.tools.push({codeExecution:{}});return}throw new Error(`Gemini code execution tool is not supported for model ${t.model}`)}};import{Language as uo,Outcome as tn}from"@google/genai";import{cloneDeep as fo}from"lodash-es";function nn(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=fo(t[0]),r=t.map(u=>u.text).join(`
8
+ `),i=e.map(u=>u[0]).join("|"),s=e.map(u=>u[1]).join("|"),a=new RegExp(`?<prefix>.*?)(${i})(?<codeStr>.*?)(${s})(?<suffix>.*?)$`,"s").exec(r),{prefix:c,codeStr:l}=(a==null?void 0:a.groups)||{};return l?(o.parts=[],c&&(n.text=c,o.parts.push(n)),o.parts.push(ze(l)),l):""}function ze(o){return{text:o,executableCode:{code:o,language:uo.PYTHON}}}function on(o){if(o.stderr)return{text:o.stderr,codeExecutionResult:{outcome:tn.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:Bt.OUTCOME_OK}}}function Dt(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")}import{cloneDeep as Ln}from"lodash-es";var $e="_code_execution_context",Ge="execution_session_id",j="processed_input_files",K="_code_executor_input_files",V="_code_executor_error_counts",qe="_code_execution_results",ie=class{constructor(e){this.sessionState=e;var t;this.context=(t=e.get($e))!=null?t:{},this.sessionState=e}getStateDelta(){return{[$e]:Ln(this.context)}}getExecutionId(){if(Ge in this.context)return this.context[Ge]}setExecutionId(e){this.context[Ge]=e}getProcessedFileNames(){return j in this.context?this.context[j]:[]}addProcessedFileNames(e){j in this.context||(this.context[j]=[]),this.context[j].push(...e)}getInputFiles(){return K in this.sessionState?this.sessionState.get(K):[]}addInputFiles(e){K in this.sessionState||this.sessionState.set(K,[]),this.sessionState.get(K).push(...e)}clearInputFiles(){K in this.sessionState&&this.sessionState.set(K,[]),j in this.context&&(this.context[j]=[])}getErrorCount(e){return V in this.sessionState&&this.sessionState.get(V)[e]||0}incrementErrorCount(e){V in this.sessionState||this.sessionState.set(V,{}),this.sessionState.get(V)[e]=this.getErrorCount(e)+1}resetErrorCount(e){if(!(V in this.sessionState))return;let t=this.sessionState.get(V);e in t&&delete t[e]}updateCodeExecutionResult({invocationId:e,code:t,resultStdout:n,resultStderr:r}){qe in this.sessionState||this.sessionState.set(qe,{});let i=this.sessionState.get(qe);e in i||(i[e]=[]),i[e].push({code:t,resultStdout:n,resultStderr:r,timestamp:Date.now()})}getCodeExecutionContext(e){return this.sessionState.get($e)||{}}};var Ue="0.2.4";var _n="google-adk",Mn="gl-typescript",On="remote_reasoning_engine",Bn="GOOGLE_CLOUD_AGENT_ENGINE_ID";function Nn(){let o=`${_n}/${Ue}`;!de()&&process.env[Bn]&&(o=`${o}+${On}`);let e=`${Mn}/${de()?window.navigator.userAgent:process.version}`;return[o,e]}function $t(){return Nn()}var je=Symbol.for("google.adk.baseModel");function Ke(o){return typeof o=="object"&&o!==null&&je in o&&o[je]===!0}var Gt;Gt=je;var ee=class{constructor({model:e}){this[Gt]=!0;this.model=e}get trackingHeaders(){let t=$t().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."}]})}};ee.supportedModels=[];function se(o,e){o.config||(o.config={});let t=e.join(`
13
+ `),codeExecutionResult:{outcome:tn.OUTCOME_OK}}}function rn(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")}import{cloneDeep as po}from"lodash-es";var Ye="_code_execution_context",He="execution_session_id",q="processed_input_files",U="_code_executor_input_files",j="_code_executor_error_counts",Qe="_code_execution_results",ae=class{constructor(e){this.sessionState=e;var t;this.context=(t=e.get(Ye))!=null?t:{},this.sessionState=e}getStateDelta(){return{[Ye]:po(this.context)}}getExecutionId(){if(He in this.context)return this.context[He]}setExecutionId(e){this.context[He]=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 U in this.sessionState?this.sessionState.get(U):[]}addInputFiles(e){U in this.sessionState||this.sessionState.set(U,[]),this.sessionState.get(U).push(...e)}clearInputFiles(){U in this.sessionState&&this.sessionState.set(U,[]),q in this.context&&(this.context[q]=[])}getErrorCount(e){return j in this.sessionState&&this.sessionState.get(j)[e]||0}incrementErrorCount(e){j in this.sessionState||this.sessionState.set(j,{}),this.sessionState.get(j)[e]=this.getErrorCount(e)+1}resetErrorCount(e){if(!(j in this.sessionState))return;let t=this.sessionState.get(j);e in t&&delete t[e]}updateCodeExecutionResult({invocationId:e,code:t,resultStdout:n,resultStderr:r}){Qe in this.sessionState||this.sessionState.set(Qe,{});let i=this.sessionState.get(Qe);e in i||(i[e]=[]),i[e].push({code:t,resultStdout:n,resultStderr:r,timestamp:Date.now()})}getCodeExecutionContext(e){return this.sessionState.get(Ye)||{}}};var Xe="0.2.5";var mo="google-adk",go="gl-typescript",ho="remote_reasoning_engine",Co="GOOGLE_CLOUD_AGENT_ENGINE_ID";function vo(){let o=`${mo}/${Xe}`;!me()&&process.env[Co]&&(o=`${o}+${ho}`);let e=`${go}/${me()?window.navigator.userAgent:process.version}`;return[o,e]}function sn(){return vo()}var We=Symbol.for("google.adk.baseModel");function Je(o){return typeof o=="object"&&o!==null&&We in o&&o[We]===!0}var an;an=We;var J=class{constructor({model:e}){this[an]=!0;this.model=e}get trackingHeaders(){let t=sn().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 ce(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 qt(o,e){o.config||(o.config={}),o.config.responseSchema=e,o.config.responseMimeType="application/json"}import{createPartFromText as jt,FinishReason as $n,GoogleGenAI as Ze}from"@google/genai";function Ut(){return Fn("GOOGLE_GENAI_USE_VERTEXAI")?"VERTEX_AI":"GEMINI_API"}function Fn(o){if(!process.env)return!1;let e=(process.env[o]||"").toLowerCase();return["true","1"].includes(o.toLowerCase())}var he=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 Ve(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 te=class extends ee{constructor({model:e,apiKey:t,vertexai:n,project:r,location:i,headers:s}){e||(e="gemini-2.5-flash"),super({model:e}),this.project=r,this.location=i,this.apiKey=t,this.headers=s;let a=typeof process=="object";if(this.vertexai=!!n,!this.vertexai&&a){let c=process.env.GOOGLE_GENAI_USE_VERTEXAI;c&&(this.vertexai=c.toLowerCase()==="true"||c==="1")}if(this.vertexai){if(a&&!this.project&&(this.project=process.env.GOOGLE_CLOUD_PROJECT),a&&!this.location&&(this.location=process.env.GOOGLE_CLOUD_LOCATION),!this.project)throw new Error("VertexAI project must be provided via constructor or GOOGLE_CLOUD_PROJECT environment variable.");if(!this.location)throw new Error("VertexAI location must be provided via constructor or GOOGLE_CLOUD_LOCATION environment variable.")}else if(!this.apiKey&&a&&(this.apiKey=process.env.GOOGLE_GENAI_API_KEY||process.env.GEMINI_API_KEY),!this.apiKey)throw new Error("API key must be provided via constructor or GOOGLE_GENAI_API_KEY or GEMINI_API_KEY environment variable.")}async*generateContentAsync(e,t=!1){var n,r,i,s,a,c,l;if(this.preprocessRequest(e),this.maybeAppendUserContent(e),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="",g,x;for await(let h of f){x=h;let m=Ve(h);g=m.usageMetadata;let A=(s=(i=m.content)==null?void 0:i.parts)==null?void 0:s[0];if(A!=null&&A.text)"thought"in A&&A.thought?u+=A.text:d+=A.text,m.partial=!0;else if((u||d)&&(!A||!A.inlineData)){let S=[];u&&S.push({text:u,thought:!0}),d&&S.push(jt(d)),yield{content:{role:"model",parts:S},usageMetadata:m.usageMetadata},u="",d=""}yield m}if((d||u)&&((c=(a=x==null?void 0:x.candidates)==null?void 0:a[0])==null?void 0:c.finishReason)===$n.STOP){let h=[];u&&h.push({text:u,thought:!0}),d&&h.push({text:d}),yield{content:{role:"model",parts:h},usageMetadata:g}}}else{let f=await this.apiClient.models.generateContent({model:(l=e.model)!=null?l:this.model,contents:e.contents,config:e.config});yield Ve(f)}}get apiClient(){if(this._apiClient)return this._apiClient;let e={...this.trackingHeaders,...this.headers};return this.vertexai?this._apiClient=new Ze({vertexai:this.vertexai,project:this.project,location:this.location,httpOptions:{headers:e}}):this._apiClient=new Ze({apiKey:this.apiKey,httpOptions:{headers:e}}),this._apiClient}get apiBackend(){return this._apiBackend||(this._apiBackend=this.apiClient.vertexai?"VERTEX_AI":"GEMINI_API"),this._apiBackend}get liveApiVersion(){return this._liveApiVersion||(this._liveApiVersion=this.apiBackend==="VERTEX_AI"?"v1beta1":"v1alpha"),this._liveApiVersion}get liveApiClient(){return this._liveApiClient||(this._liveApiClient=new Ze({apiKey:this.apiKey,httpOptions:{headers:this.trackingHeaders,apiVersion:this.liveApiVersion}})),this._liveApiClient}async connect(e){var n,r,i,s;(n=e.liveConnectConfig)!=null&&n.httpOptions&&(e.liveConnectConfig.httpOptions.headers||(e.liveConnectConfig.httpOptions.headers={}),Object.assign(e.liveConnectConfig.httpOptions.headers,this.trackingHeaders),e.liveConnectConfig.httpOptions.apiVersion=this.liveApiVersion),(r=e.config)!=null&&r.systemInstruction&&(e.liveConnectConfig.systemInstruction={role:"system",parts:[jt(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 he(t)}preprocessRequest(e){if(this.apiBackend==="GEMINI_API"&&(e.config&&(e.config.labels=void 0),e.contents)){for(let t of e.contents)if(t.parts)for(let n of t.parts)Kt(n.inlineData),Kt(n.fileData)}}};te.supportedModels=[/gemini-.*/,/projects\/.+\/locations\/.+\/endpoints\/.+/,/projects\/.+\/locations\/.+\/publishers\/google\/models\/gemini.+/];function Kt(o){o&&o.displayName&&(o.displayName=void 0)}var ze=class{constructor(e){this.maxSize=e,this.cache=new Map}get(e){let t=this.cache.get(e);return t&&(this.cache.delete(e),this.cache.set(e,t)),t}set(e,t){if(this.cache.size>=this.maxSize&&!this.cache.has(e)){let n=this.cache.keys().next().value;n!==void 0&&this.cache.delete(n)}this.cache.set(e,t)}},k=class k{static newLlm(e){return new(k.resolve(e))({model:e})}static _register(e,t){k.llmRegistryDict.has(e)&&p.info(`Updating LLM class for ${e} from ${k.llmRegistryDict.get(e)} to ${t}`),k.llmRegistryDict.set(e,t)}static register(e){for(let t of e.supportedModels)k._register(t,e)}static resolve(e){let t=k.resolveCache.get(e);if(t)return t;for(let[n,r]of k.llmRegistryDict.entries())if(new RegExp(`^${n instanceof RegExp?n.source:n}$`,n instanceof RegExp?n.flags:void 0).test(e))return k.resolveCache.set(e,r),r;throw new Error(`Model ${e} not found.`)}};k.llmRegistryDict=new Map,k.resolveCache=new ze(32);var ne=k;ne.register(te);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=Gn(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 Ut()}};function Gn(o){var e;return(((e=o.config)==null?void 0:e.tools)||[]).find(t=>"functionDeclarations"in t)}import{Type as qn}from"@google/genai";import{ZodObject as Un}from"zod";import{Type as T}from"@google/genai";import{z as E}from"zod";function Vt(o){var e;return o!==null&&typeof o=="object"&&((e=o._def)==null?void 0:e.typeName)==="ZodObject"}function B(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.ZodFirstPartyTypeKind.ZodString:n.type=T.STRING;for(let c of e.checks||[])c.kind==="min"?n.minLength=c.value.toString():c.kind==="max"?n.maxLength=c.value.toString():c.kind==="email"?n.format="email":c.kind==="uuid"?n.format="uuid":c.kind==="url"?n.format="uri":c.kind==="regex"&&(n.pattern=c.regex.source);return r(n);case E.ZodFirstPartyTypeKind.ZodNumber:n.type=T.NUMBER;for(let c of e.checks||[])c.kind==="min"?n.minimum=c.value:c.kind==="max"?n.maximum=c.value:c.kind==="int"&&(n.type=T.INTEGER);return r(n);case E.ZodFirstPartyTypeKind.ZodBoolean:return n.type=T.BOOLEAN,r(n);case E.ZodFirstPartyTypeKind.ZodArray:return n.type=T.ARRAY,n.items=B(e.type),e.minLength&&(n.minItems=e.minLength.value.toString()),e.maxLength&&(n.maxItems=e.maxLength.value.toString()),r(n);case E.ZodFirstPartyTypeKind.ZodObject:return Ce(o);case E.ZodFirstPartyTypeKind.ZodLiteral:let i=typeof e.value;if(n.enum=[e.value.toString()],i==="string")n.type=T.STRING;else if(i==="number")n.type=T.NUMBER;else if(i==="boolean")n.type=T.BOOLEAN;else if(e.value===null)n.type=T.NULL;else throw new Error(`Unsupported ZodLiteral value type: ${i}`);return r(n);case E.ZodFirstPartyTypeKind.ZodEnum:return n.type=T.STRING,n.enum=e.values,r(n);case E.ZodFirstPartyTypeKind.ZodNativeEnum:return n.type=T.STRING,n.enum=Object.values(e.values),r(n);case E.ZodFirstPartyTypeKind.ZodUnion:return n.anyOf=e.options.map(B),r(n);case E.ZodFirstPartyTypeKind.ZodOptional:return B(e.innerType);case E.ZodFirstPartyTypeKind.ZodNullable:let s=B(e.innerType);return r(s?{anyOf:[s,{type:T.NULL}],...t&&{description:t}}:{type:T.NULL,...t&&{description:t}});case E.ZodFirstPartyTypeKind.ZodDefault:let a=B(e.innerType);return a&&(a.default=e.defaultValue()),a;case E.ZodFirstPartyTypeKind.ZodBranded:return B(e.type);case E.ZodFirstPartyTypeKind.ZodReadonly:return B(e.innerType);case E.ZodFirstPartyTypeKind.ZodNull:return n.type=T.NULL,r(n);case E.ZodFirstPartyTypeKind.ZodAny:case E.ZodFirstPartyTypeKind.ZodUnknown:return r({...t&&{description:t}});default:throw new Error(`Unsupported Zod type: ${e.typeName}`)}}function Ce(o){if(o._def.typeName!==E.ZodFirstPartyTypeKind.ZodObject)throw new Error("Expected a ZodObject");let e=o.shape,t={},n=[];for(let s in e){let a=e[s],c=B(a);c&&(t[s]=c);let l=a,f=!1;for(;l._def.typeName===E.ZodFirstPartyTypeKind.ZodOptional||l._def.typeName===E.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.ZodFirstPartyTypeKind.ZodNever?i=B(r)||!0:i=o._def.unknownKeys==="passthrough",{type:T.OBJECT,properties:t,required:n.length>0?n:[],...o._def.description?{description:o._def.description}:{}}}function jn(o){return o===void 0?{type:qn.OBJECT,properties:{}}:Vt(o)?Ce(o):o}var N=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:jn(this.parameters)}}async runAsync(e){try{let t=e.args;return this.parameters instanceof Un&&(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 F=class{};import{cloneDeep as Kn}from"lodash-es";function We(o,e,t){var s,a,c;let n=[];for(let l of o)!((s=l.content)!=null&&s.role)||((c=(a=l.content.parts)==null?void 0:a[0])==null?void 0:c.text)===""||t&&l.branch&&!t.startsWith(l.branch)||Vn(l)||Zn(l)||n.push(Wt(e,l)?zn(l):l);let r=Wn(n);r=Qn(r);let i=[];for(let l of r){let f=Kn(l.content);kt(f),i.push(f)}return i}function zt(o,e,t){for(let n=o.length-1;n>=0;n--){let r=o[n];if(r.author==="user"||Wt(e,r))return We(o.slice(n),e,t)}return[]}function Vn(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)===me||((n=r.functionResponse)==null?void 0:n.name)===me)return!0;return!1}function Zn(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)===J||((n=r.functionResponse)==null?void 0:n.name)===J)return!0;return!1}function Wt(o,e){return!!o&&e.author!==o&&e.author!=="user"}function zn(o){var t,n,r,i,s,a;if(!((n=(t=o.content)==null?void 0:t.parts)!=null&&n.length))return o;let e={role:"user",parts:[{text:"For context:"}]};for(let c of o.content.parts)if(c.text&&!c.thought)(r=e.parts)==null||r.push({text:`[${o.author}] said: ${c.text}`});else if(c.functionCall){let l=Zt(c.functionCall.args);(i=e.parts)==null||i.push({text:`[${o.author}] called tool \`${c.functionCall.name}\` with parameters: ${l}`})}else if(c.functionResponse){let l=Zt(c.functionResponse.response);(s=e.parts)==null||s.push({text:`[${o.author}] tool \`${c.functionResponse.name}\` returned result: ${l}`})}else(a=e.parts)==null||a.push(c);return y({invocationId:o.invocationId,author:"user",content:e,branch:o.branch,timestamp:o.timestamp})}function Qt(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 a=s.functionResponse.id;a in n?t[n[a]]=s:(t.push(s),n[a]=t.length-1)}else t.push(s)}return e}function Wn(o){if(o.length===0)return o;let e=o[o.length-1],t=P(e);if(!(t!=null&&t.length))return o;let n=new Set(t.filter(c=>!!c.id).map(c=>c.id)),r=o.at(-2);if(r){let c=b(r);if(c){for(let l of c)if(l.id&&n.has(l.id))return o}}let i=-1;for(let c=o.length-2;c>=0;c--){let l=o[c],f=b(l);if(f!=null&&f.length){for(let u of f)if(u.id&&n.has(u.id)){i=c;let d=new Set(f.map(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 c=i+1;c<o.length-1;c++){let l=o[c],f=P(l);f&&f.some(u=>u.id&&n.has(u.id))&&s.push(l)}s.push(o[o.length-1]);let a=o.slice(0,i+1);return a.push(Qt(s)),a}function Qn(o){let e=new Map;for(let n=0;n<o.length;n++){let r=o[n],i=P(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(P(n).length>0)continue;let r=b(n);if(r!=null&&r.length){let i=new Set;for(let s of r){let a=s.id;a&&e.has(a)&&i.add(e.get(a))}if(t.push(n),i.size===0)continue;if(i.size===1){let[s]=[...i];t.push(o[s])}else{let a=Array.from(i).sort((c,l)=>c-l).map(c=>o[c]);t.push(Qt(a))}}else t.push(n)}return t}function Zt(o){if(typeof o=="string")return o;try{return JSON.stringify(o)}catch{return String(o)}}async function Qe(o,e){let t=e.invocationContext;async function n(c){let l=c[0].replace(/^\{+/,"").replace(/\}+$/,"").trim(),f=l.endsWith("?");if(f&&(l=l.slice(0,-1)),l.startsWith("artifact.")){let u=l.substring(9);if(t.artifactService===void 0)throw new Error("Artifact service is not initialized.");let d=await t.artifactService.loadArtifact({appName:t.session.appName,userId:t.session.userId,sessionId:t.session.id,filename:u});if(!d)throw new Error(`Artifact ${u} not found.`);return String(d)}if(!Hn(l))return c[0];if(l in t.session.state)return String(t.session.state[l]);if(f)return"";throw new Error(`Context variable not found: \`${l}\`.`)}let r=/\{+[^{}]*}+/g,i=[],s=0,a=o.matchAll(r);for(let c of a){i.push(o.slice(s,c.index));let l=await n(c);i.push(l),s=c.index+c[0].length}return i.push(o.slice(s)),i.join("")}var Xn=/^[a-zA-Z_][a-zA-Z0-9_]*$/;function Xt(o){return o===""||o===void 0?!1:Xn.test(o)}var Yn=[C.APP_PREFIX,C.USER_PREFIX,C.TEMP_PREFIX];function Hn(o){let e=o.split(":");return e.length===0||e.length>2?!1:e.length===1?Xt(o):Yn.includes(e[0]+":")?Xt(e[1]):!1}var Xe=(n=>(n.NONE="none",n.SSE="sse",n.BIDI="bidi",n))(Xe||{});function Yt(o={}){return{saveInputBlobsAsArtifacts:!1,supportCfc:!1,enableAffectiveDialog:!1,streamingMode:"none",maxLlmCalls:Jn(o.maxLlmCalls||500),...o}}function Jn(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 en="adk_agent_name";async function tn(o,e){return o instanceof I?[o]:await o.getTools(e)}var Ye=class extends F{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&&qt(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))}},eo=new Ye,He=class extends F{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}"`),se(t,r)}},to=new He,Je=class extends F{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 R(e)),a=i;s&&(a=await Qe(i,new R(e))),se(t,[a])}if(n.instruction){let{instruction:i,requireStateInjection:s}=await n.canonicalInstruction(new R(e)),a=i;s&&(a=await Qe(i,new R(e))),se(t,[a])}}},no=new Je,et=class{async*runAsync(e,t){let n=e.agent;!n||!(n instanceof v)||(n.includeContents==="default"?t.contents=We(e.session.events,n.name,e.branch):t.contents=zt(e.session.events,n.name,e.branch))}},oo=new et,tt=class extends F{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:Jt.object({agentName:Jt.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;se(n,[this.buildTargetAgentsInstructions(t.agent,r)]);let i=new G({invocationContext:t});await this.tool.processLlmRequest({toolContext:i,llmRequest:n})}buildTargetAgentsInfo(t){return`
17
+ `+t:o.config.systemInstruction=t}function cn(o,e){o.config||(o.config={}),o.config.responseSchema=e,o.config.responseMimeType="application/json"}import{createPartFromText as un,FinishReason as xo,GoogleGenAI as tt}from"@google/genai";var ye=(t=>(t.VERTEX_AI="VERTEX_AI",t.GEMINI_API="GEMINI_API",t))(ye||{});function ln(){return yo("GOOGLE_GENAI_USE_VERTEXAI")?"VERTEX_AI":"GEMINI_API"}function yo(o){if(!process.env)return!1;let e=(process.env[o]||"").toLowerCase();return["true","1"].includes(o.toLowerCase())}var xe=class{constructor(e){this.geminiSession=e}async sendHistory(e){let t=e.filter(n=>{var r;return n.parts&&((r=n.parts[0])==null?void 0:r.text)});t.length>0?this.geminiSession.sendClientContent({turns:t,turnComplete:t[t.length-1].role==="user"}):m.info("no content is sent")}async sendContent(e){if(!e.parts)throw new Error("Content must have parts.");if(e.parts[0].functionResponse){let t=e.parts.map(n=>n.functionResponse).filter(n=>!!n);m.debug("Sending LLM function response:",t),this.geminiSession.sendToolResponse({functionResponses:t})}else m.debug("Sending LLM new content",e),this.geminiSession.sendClientContent({turns:[e],turnComplete:!0})}async sendRealtime(e){m.debug("Sending LLM Blob:",e),this.geminiSession.sendRealtimeInput({media:e})}buildFullTextResponse(e){return{content:{role:"model",parts:[{text:e}]}}}async*receive(){throw new Error("Not Implemented.")}async close(){this.geminiSession.close()}};function et(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 ee=class extends J{constructor({model:e,apiKey:t,vertexai:n,project:r,location:i,headers:s}){e||(e="gemini-2.5-flash"),super({model:e}),this.project=r,this.location=i,this.apiKey=t,this.headers=s;let a=typeof process=="object";if(this.vertexai=!!n,!this.vertexai&&a){let c=process.env.GOOGLE_GENAI_USE_VERTEXAI;c&&(this.vertexai=c.toLowerCase()==="true"||c==="1")}if(this.vertexai){if(a&&!this.project&&(this.project=process.env.GOOGLE_CLOUD_PROJECT),a&&!this.location&&(this.location=process.env.GOOGLE_CLOUD_LOCATION),!this.project)throw new Error("VertexAI project must be provided via constructor or GOOGLE_CLOUD_PROJECT environment variable.");if(!this.location)throw new Error("VertexAI location must be provided via constructor or GOOGLE_CLOUD_LOCATION environment variable.")}else if(!this.apiKey&&a&&(this.apiKey=process.env.GOOGLE_GENAI_API_KEY||process.env.GEMINI_API_KEY),!this.apiKey)throw new Error("API key must be provided via constructor or GOOGLE_GENAI_API_KEY or GEMINI_API_KEY environment variable.")}async*generateContentAsync(e,t=!1){var n,r,i,s,a,c,l;if(this.preprocessRequest(e),this.maybeAppendUserContent(e),m.info(`Sending out request, model: ${e.model}, backend: ${this.apiBackend}, stream: ${t}`),(n=e.config)!=null&&n.httpOptions&&(e.config.httpOptions.headers={...e.config.httpOptions.headers,...this.trackingHeaders}),t){let f=await this.apiClient.models.generateContentStream({model:(r=e.model)!=null?r:this.model,contents:e.contents,config:e.config}),u="",d="",p,g;for await(let C of f){g=C;let h=et(C);p=h.usageMetadata;let x=(s=(i=h.content)==null?void 0:i.parts)==null?void 0:s[0];if(x!=null&&x.text)"thought"in x&&x.thought?u+=x.text:d+=x.text,h.partial=!0;else if((u||d)&&(!x||!x.inlineData)){let S=[];u&&S.push({text:u,thought:!0}),d&&S.push(un(d)),yield{content:{role:"model",parts:S},usageMetadata:h.usageMetadata},u="",d=""}yield h}if((d||u)&&((c=(a=g==null?void 0:g.candidates)==null?void 0:a[0])==null?void 0:c.finishReason)===xo.STOP){let C=[];u&&C.push({text:u,thought:!0}),d&&C.push({text:d}),yield{content:{role:"model",parts:C},usageMetadata:p}}}else{let f=await this.apiClient.models.generateContent({model:(l=e.model)!=null?l:this.model,contents:e.contents,config:e.config});yield et(f)}}get apiClient(){if(this._apiClient)return this._apiClient;let e={...this.trackingHeaders,...this.headers};return this.vertexai?this._apiClient=new tt({vertexai:this.vertexai,project:this.project,location:this.location,httpOptions:{headers:e}}):this._apiClient=new tt({apiKey:this.apiKey,httpOptions:{headers:e}}),this._apiClient}get apiBackend(){return this._apiBackend||(this._apiBackend=this.apiClient.vertexai?"VERTEX_AI":"GEMINI_API"),this._apiBackend}get liveApiVersion(){return this._liveApiVersion||(this._liveApiVersion=this.apiBackend==="VERTEX_AI"?"v1beta1":"v1alpha"),this._liveApiVersion}get liveApiClient(){return this._liveApiClient||(this._liveApiClient=new tt({apiKey:this.apiKey,httpOptions:{headers:this.trackingHeaders,apiVersion:this.liveApiVersion}})),this._liveApiClient}async connect(e){var n,r,i,s;(n=e.liveConnectConfig)!=null&&n.httpOptions&&(e.liveConnectConfig.httpOptions.headers||(e.liveConnectConfig.httpOptions.headers={}),Object.assign(e.liveConnectConfig.httpOptions.headers,this.trackingHeaders),e.liveConnectConfig.httpOptions.apiVersion=this.liveApiVersion),(r=e.config)!=null&&r.systemInstruction&&(e.liveConnectConfig.systemInstruction={role:"system",parts:[un(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 xe(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)fn(n.inlineData),fn(n.fileData)}}};ee.supportedModels=[/gemini-.*/,/projects\/.+\/locations\/.+\/endpoints\/.+/,/projects\/.+\/locations\/.+\/publishers\/google\/models\/gemini.+/];function fn(o){o&&o.displayName&&(o.displayName=void 0)}var nt=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)}},k=class k{static newLlm(e){return new(k.resolve(e))({model:e})}static _register(e,t){k.llmRegistryDict.has(e)&&m.info(`Updating LLM class for ${e} from ${k.llmRegistryDict.get(e)} to ${t}`),k.llmRegistryDict.set(e,t)}static register(e){for(let t of e.supportedModels)k._register(t,e)}static resolve(e){let t=k.resolveCache.get(e);if(t)return t;for(let[n,r]of k.llmRegistryDict.entries())if(new RegExp(`^${n instanceof RegExp?n.source:n}$`,n instanceof RegExp?n.flags:void 0).test(e))return k.resolveCache.set(e,r),r;throw new Error(`Model ${e} not found.`)}};k.llmRegistryDict=new Map,k.resolveCache=new nt(32);var te=k;te.register(ee);var ot=Symbol.for("google.adk.baseTool");function Ao(o){return typeof o=="object"&&o!==null&&ot in o&&o[ot]===!0}var dn;dn=ot;var I=class{constructor(e){this[dn]=!0;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=Eo(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 ln()}};function Eo(o){var e;return(((e=o.config)==null?void 0:e.tools)||[]).find(t=>"functionDeclarations"in t)}import{Type as To}from"@google/genai";import{ZodObject as bo}from"zod";import{Type as b}from"@google/genai";import{z as A}from"zod";function pn(o){var e;return o!==null&&typeof o=="object"&&((e=o._def)==null?void 0:e.typeName)==="ZodObject"}function N(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.ZodFirstPartyTypeKind.ZodString:n.type=b.STRING;for(let c of e.checks||[])c.kind==="min"?n.minLength=c.value.toString():c.kind==="max"?n.maxLength=c.value.toString():c.kind==="email"?n.format="email":c.kind==="uuid"?n.format="uuid":c.kind==="url"?n.format="uri":c.kind==="regex"&&(n.pattern=c.regex.source);return r(n);case A.ZodFirstPartyTypeKind.ZodNumber:n.type=b.NUMBER;for(let c of e.checks||[])c.kind==="min"?n.minimum=c.value:c.kind==="max"?n.maximum=c.value:c.kind==="int"&&(n.type=b.INTEGER);return r(n);case A.ZodFirstPartyTypeKind.ZodBoolean:return n.type=b.BOOLEAN,r(n);case A.ZodFirstPartyTypeKind.ZodArray:return n.type=b.ARRAY,n.items=N(e.type),e.minLength&&(n.minItems=e.minLength.value.toString()),e.maxLength&&(n.maxItems=e.maxLength.value.toString()),r(n);case A.ZodFirstPartyTypeKind.ZodObject:return Ae(o);case A.ZodFirstPartyTypeKind.ZodLiteral:let i=typeof e.value;if(n.enum=[e.value.toString()],i==="string")n.type=b.STRING;else if(i==="number")n.type=b.NUMBER;else if(i==="boolean")n.type=b.BOOLEAN;else if(e.value===null)n.type=b.NULL;else throw new Error(`Unsupported ZodLiteral value type: ${i}`);return r(n);case A.ZodFirstPartyTypeKind.ZodEnum:return n.type=b.STRING,n.enum=e.values,r(n);case A.ZodFirstPartyTypeKind.ZodNativeEnum:return n.type=b.STRING,n.enum=Object.values(e.values),r(n);case A.ZodFirstPartyTypeKind.ZodUnion:return n.anyOf=e.options.map(N),r(n);case A.ZodFirstPartyTypeKind.ZodOptional:return N(e.innerType);case A.ZodFirstPartyTypeKind.ZodNullable:let s=N(e.innerType);return r(s?{anyOf:[s,{type:b.NULL}],...t&&{description:t}}:{type:b.NULL,...t&&{description:t}});case A.ZodFirstPartyTypeKind.ZodDefault:let a=N(e.innerType);return a&&(a.default=e.defaultValue()),a;case A.ZodFirstPartyTypeKind.ZodBranded:return N(e.type);case A.ZodFirstPartyTypeKind.ZodReadonly:return N(e.innerType);case A.ZodFirstPartyTypeKind.ZodNull:return n.type=b.NULL,r(n);case A.ZodFirstPartyTypeKind.ZodAny:case A.ZodFirstPartyTypeKind.ZodUnknown:return r({...t&&{description:t}});default:throw new Error(`Unsupported Zod type: ${e.typeName}`)}}function Ae(o){if(o._def.typeName!==A.ZodFirstPartyTypeKind.ZodObject)throw new Error("Expected a ZodObject");let e=o.shape,t={},n=[];for(let s in e){let a=e[s],c=N(a);c&&(t[s]=c);let l=a,f=!1;for(;l._def.typeName===A.ZodFirstPartyTypeKind.ZodOptional||l._def.typeName===A.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.ZodFirstPartyTypeKind.ZodNever?i=N(r)||!0:i=o._def.unknownKeys==="passthrough",{type:b.OBJECT,properties:t,required:n.length>0?n:[],...o._def.description?{description:o._def.description}:{}}}function So(o){return o===void 0?{type:To.OBJECT,properties:{}}:pn(o)?Ae(o):o}var rt=Symbol.for("google.adk.functionTool");function Ro(o){return typeof o=="object"&&o!==null&&rt in o&&o[rt]===!0}var mn,gn,F=class extends(gn=I,mn=rt,gn){constructor(t){var r;let n=(r=t.name)!=null?r:t.execute.name;if(!n)throw new Error("Tool name cannot be empty. Either name the `execute` function or provide a `name`.");super({name:n,description:t.description,isLongRunning:t.isLongRunning});this[mn]=!0;this.execute=t.execute,this.parameters=t.parameters}_getDeclaration(){return{name:this.name,description:this.description,parameters:So(this.parameters)}}async runAsync(t){try{let n=t.args;return this.parameters instanceof bo&&(n=this.parameters.parse(t.args)),await this.execute(n,t.toolContext)}catch(n){let r=n instanceof Error?n.message:String(n);throw new Error(`Error in tool '${this.name}': ${r}`)}}};import{cloneDeep as Io}from"lodash-es";function it(o,e,t){var s,a,c;let n=[];for(let l of o)!((s=l.content)!=null&&s.role)||((c=(a=l.content.parts)==null?void 0:a[0])==null?void 0:c.text)===""||t&&l.branch&&!t.startsWith(l.branch)||Po(l)||wo(l)||n.push(vn(e,l)?ko(l):l);let r=Lo(n);r=_o(r);let i=[];for(let l of r){let f=Io(l.content);zt(f),i.push(f)}return i}function Cn(o,e,t){for(let n=o.length-1;n>=0;n--){let r=o[n];if(r.author==="user"||vn(e,r))return it(o.slice(n),e,t)}return[]}function Po(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)===he||((n=r.functionResponse)==null?void 0:n.name)===he)return!0;return!1}function wo(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)===W||((n=r.functionResponse)==null?void 0:n.name)===W)return!0;return!1}function vn(o,e){return!!o&&e.author!==o&&e.author!=="user"}function ko(o){var t,n,r,i,s,a;if(!((n=(t=o.content)==null?void 0:t.parts)!=null&&n.length))return o;let e={role:"user",parts:[{text:"For context:"}]};for(let c of o.content.parts)if(c.text&&!c.thought)(r=e.parts)==null||r.push({text:`[${o.author}] said: ${c.text}`});else if(c.functionCall){let l=hn(c.functionCall.args);(i=e.parts)==null||i.push({text:`[${o.author}] called tool \`${c.functionCall.name}\` with parameters: ${l}`})}else if(c.functionResponse){let l=hn(c.functionResponse.response);(s=e.parts)==null||s.push({text:`[${o.author}] tool \`${c.functionResponse.name}\` returned result: ${l}`})}else(a=e.parts)==null||a.push(c);return y({invocationId:o.invocationId,author:"user",content:e,branch:o.branch,timestamp:o.timestamp})}function yn(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 a=s.functionResponse.id;a in n?t[n[a]]=s:(t.push(s),n[a]=t.length-1)}else t.push(s)}return e}function Lo(o){if(o.length===0)return o;let e=o[o.length-1],t=P(e);if(!(t!=null&&t.length))return o;let n=new Set(t.filter(c=>!!c.id).map(c=>c.id)),r=o.at(-2);if(r){let c=T(r);if(c){for(let l of c)if(l.id&&n.has(l.id))return o}}let i=-1;for(let c=o.length-2;c>=0;c--){let l=o[c],f=T(l);if(f!=null&&f.length){for(let u of f)if(u.id&&n.has(u.id)){i=c;let d=new Set(f.map(g=>g.id).filter(g=>!!g));if(!Array.from(n).every(g=>d.has(g)))throw new Error(`Last response event should only contain the responses for the function calls in the same function call event. Function call ids found : ${Array.from(d).join(", ")}, function response ids provided: ${Array.from(n).join(", ")}`);n=d;break}}}if(i===-1)throw new Error(`No function call event found for function responses ids: ${Array.from(n).join(", ")}`);let s=[];for(let c=i+1;c<o.length-1;c++){let l=o[c],f=P(l);f&&f.some(u=>u.id&&n.has(u.id))&&s.push(l)}s.push(o[o.length-1]);let a=o.slice(0,i+1);return a.push(yn(s)),a}function _o(o){let e=new Map;for(let n=0;n<o.length;n++){let r=o[n],i=P(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(P(n).length>0)continue;let r=T(n);if(r!=null&&r.length){let i=new Set;for(let s of r){let a=s.id;a&&e.has(a)&&i.add(e.get(a))}if(t.push(n),i.size===0)continue;if(i.size===1){let[s]=[...i];t.push(o[s])}else{let a=Array.from(i).sort((c,l)=>c-l).map(c=>o[c]);t.push(yn(a))}}else t.push(n)}return t}function hn(o){if(typeof o=="string")return o;try{return JSON.stringify(o)}catch{return String(o)}}async function st(o,e){let t=e.invocationContext;async function n(c){let l=c[0].replace(/^\{+/,"").replace(/\}+$/,"").trim(),f=l.endsWith("?");if(f&&(l=l.slice(0,-1)),l.startsWith("artifact.")){let u=l.substring(9);if(t.artifactService===void 0)throw new Error("Artifact service is not initialized.");let d=await t.artifactService.loadArtifact({appName:t.session.appName,userId:t.session.userId,sessionId:t.session.id,filename:u});if(!d)throw new Error(`Artifact ${u} not found.`);return String(d)}if(!Bo(l))return c[0];if(l in t.session.state)return String(t.session.state[l]);if(f)return"";throw new Error(`Context variable not found: \`${l}\`.`)}let r=/\{+[^{}]*}+/g,i=[],s=0,a=o.matchAll(r);for(let c of a){i.push(o.slice(s,c.index));let l=await n(c);i.push(l),s=c.index+c[0].length}return i.push(o.slice(s)),i.join("")}var Oo=/^[a-zA-Z_][a-zA-Z0-9_]*$/;function xn(o){return o===""||o===void 0?!1:Oo.test(o)}var Mo=[v.APP_PREFIX,v.USER_PREFIX,v.TEMP_PREFIX];function Bo(o){let e=o.split(":");return e.length===0||e.length>2?!1:e.length===1?xn(o):Mo.includes(e[0]+":")?xn(e[1]):!1}var at=(n=>(n.NONE="none",n.SSE="sse",n.BIDI="bidi",n))(at||{});function An(o={}){return{saveInputBlobsAsArtifacts:!1,supportCfc:!1,enableAffectiveDialog:!1,streamingMode:"none",maxLlmCalls:No(o.maxLlmCalls||500),...o}}function No(o){if(o>Number.MAX_SAFE_INTEGER)throw new Error(`maxLlmCalls should be less than ${Number.MAX_SAFE_INTEGER}.`);return o<=0&&m.warn("maxLlmCalls is less than or equal to 0. This will result in no enforcement on total number of llm calls that will be made for a run. This may not be ideal, as this could result in a never ending communication between the model and the agent in certain cases."),o}var bn="adk_agent_name";async function Sn(o,e){return o instanceof I?[o]:await o.getTools(e)}var ct=class extends O{async*runAsync(e,t){var r;let n=e.agent;E(n)&&(t.model=n.canonicalModel.model,t.config={...(r=n.generateContentConfig)!=null?r:{}},n.outputSchema&&cn(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))}},Fo=new ct,lt=class extends O{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}"`),ce(t,r)}},Do=new lt,ut=class extends O{async*runAsync(e,t){let n=e.agent;if(!(n instanceof K)||!(n.rootAgent instanceof K))return;let r=n.rootAgent;if(E(r)&&r.globalInstruction){let{instruction:i,requireStateInjection:s}=await r.canonicalGlobalInstruction(new R(e)),a=i;s&&(a=await st(i,new R(e))),ce(t,[a])}if(n.instruction){let{instruction:i,requireStateInjection:s}=await n.canonicalInstruction(new R(e)),a=i;s&&(a=await st(i,new R(e))),ce(t,[a])}}},Go=new ut,ft=class{async*runAsync(e,t){let n=e.agent;!n||!E(n)||(n.includeContents==="default"?t.contents=it(e.session.events,n.name,e.branch):t.contents=Cn(e.session.events,n.name,e.branch))}},$o=new ft,dt=class extends O{constructor(){super(...arguments);this.toolName="transfer_to_agent";this.tool=new F({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:Tn.object({agentName:Tn.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 K))return;let r=this.getTransferTargets(t.agent);if(!r.length)return;ce(n,[this.buildTargetAgentsInstructions(t.agent,r)]);let i=new G({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}},ro=new tt,nt=class extends F{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 a=r.length-1;a>=0;a--){let c=r[a];if(c.author!=="user")continue;let l=P(c);if(!l)continue;let f=!1;for(let u of l){if(u.name!==J)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=a;break}}if(Object.keys(i).length!==0)for(let a=s-1;a>=0;a--){let c=r[a],l=b(c);if(!l)continue;let f={},u={};for(let h of l){if(!h.id||!(h.id in i))continue;let m=h.args;if(!m||!("originalFunctionCall"in m))continue;let A=m.originalFunctionCall;A.id&&(f[A.id]=i[h.id],u[A.id]=A)}if(Object.keys(f).length===0)continue;for(let h=r.length-1;h>s;h--){let m=r[h],A=P(m);if(A){for(let S of A)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 R(e)),g=Object.fromEntries(d.map(h=>[h.name,h])),x=await ge({invocationContext:e,functionCalls:Object.values(u),toolsDict:g,beforeToolCallbacks:n.canonicalBeforeToolCallbacks,afterToolCallbacks:n.canonicalAfterToolCallbacks,filters:new Set(Object.keys(f)),toolConfirmationDict:f});x&&(yield x);return}}},io=new nt,ot=class extends F{async*runAsync(e,t){if(e.agent instanceof v&&e.agent.codeExecutor){for await(let n of ao(e,t))yield n;if(e.agent.codeExecutor instanceof q)for(let n of t.contents){let r=e.agent.codeExecutor.codeBlockDelimiters.length?e.agent.codeExecutor.codeBlockDelimiters[0]:["",""],i=Dt(n,r,e.agent.codeExecutor.executionResultDelimiters)}}}},ve={"text/csv":{extension:".csv",loaderCodeTemplate:"pd.read_csv('{filename}')"}},so=`
37
+ `),r}getTransferTargets(t){let n=[];return n.push(...t.subAgents),!t.parentAgent||!E(t.parentAgent)||(t.disallowTransferToParent||n.push(t.parentAgent),t.disallowTransferToPeers||n.push(...t.parentAgent.subAgents.filter(r=>r.name!==t.name))),n}},qo=new dt,pt=class extends O{async*runAsync(e,t){let n=e.agent;if(!E(n))return;let r=e.session.events;if(!r||r.length===0)return;let i={},s=-1;for(let a=r.length-1;a>=0;a--){let c=r[a];if(c.author!=="user")continue;let l=P(c);if(!l)continue;let f=!1;for(let u of l){if(u.name!==W)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 $({hint:u.response.hint,payload:u.response.payload,confirmed:u.response.confirmed})),u.id&&d&&(i[u.id]=d)}if(f){s=a;break}}if(Object.keys(i).length!==0)for(let a=s-1;a>=0;a--){let c=r[a],l=T(c);if(!l)continue;let f={},u={};for(let C of l){if(!C.id||!(C.id in i))continue;let h=C.args;if(!h||!("originalFunctionCall"in h))continue;let x=h.originalFunctionCall;x.id&&(f[x.id]=i[C.id],u[x.id]=x)}if(Object.keys(f).length===0)continue;for(let C=r.length-1;C>s;C--){let h=r[C],x=P(h);if(x){for(let S of x)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 R(e)),p=Object.fromEntries(d.map(C=>[C.name,C])),g=await Ce({invocationContext:e,functionCalls:Object.values(u),toolsDict:p,beforeToolCallbacks:n.canonicalBeforeToolCallbacks,afterToolCallbacks:n.canonicalAfterToolCallbacks,filters:new Set(Object.keys(f)),toolConfirmationDict:f});g&&(yield g);return}}},Uo=new pt,mt=class extends O{async*runAsync(e,t){if(e.agent instanceof K&&e.agent.codeExecutor){for await(let n of Ko(e,t))yield n;if(ve(e.agent.codeExecutor))for(let n of t.contents){let r=e.agent.codeExecutor.codeBlockDelimiters.length?e.agent.codeExecutor.codeBlockDelimiters[0]:["",""],i=rn(n,r,e.agent.codeExecutor.executionResultDelimiters)}}}},Ee={"text/csv":{extension:".csv",loaderCodeTemplate:"pd.read_csv('{filename}')"}},jo=`
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
- `,rt=class{async*runAsync(e,t){if(!t.partial)for await(let n of co(e,t))yield n}},Ns=new rt;async function*ao(o,e){let t=o.agent;if(!(t instanceof v))return;let n=t.codeExecutor;if(!n||!(n instanceof q))return;if(n instanceof O){n.processLlmRequest(e);return}if(!n.optimizeDataFile)return;let r=new ie(new C(o.session.state));if(r.getErrorCount(o.invocationId)>=n.errorRetryAttempts)return;let i=lo(r,e),s=new Set(r.getProcessedFileNames()),a=i.filter(c=>!s.has(c.name));for(let c of a){let l=uo(c);if(!l)return;let f={role:"model",parts:[{text:`Processing input file: \`${c.name}\``},De(l)]};e.contents.push(Ht(f)),yield y({invocationId:o.invocationId,author:t.name,branch:o.branch,content:f});let u=nn(o,r),d=await n.executeCode({invocationContext:o,codeExecutionInput:{code:l,inputFiles:[c],executionId:u}});r.updateCodeExecutionResult({invocationId:o.invocationId,code:l,resultStdout:d.stdout,resultStderr:d.stderr}),r.addProcessedFileNames([c.name]);let g=await on(o,r,d);yield g,e.contents.push(Ht(g.content))}}async function*co(o,e){let t=o.agent;if(!(t instanceof v))return;let n=t.codeExecutor;if(!n||!(n instanceof q)||!e||!e.content||n instanceof O)return;let r=new ie(new C(o.session.state));if(r.getErrorCount(o.invocationId)>=n.errorRetryAttempts)return;let i=e.content,s=Nt(i,n.codeBlockDelimiters);if(!s)return;yield y({invocationId:o.invocationId,author:t.name,branch:o.branch,content:i});let a=nn(o,r),c=await n.executeCode({invocationContext:o,codeExecutionInput:{code:s,inputFiles:r.getInputFiles(),executionId:a}});r.updateCodeExecutionResult({invocationId:o.invocationId,code:s,resultStdout:c.stdout,resultStderr:c.stderr}),yield await on(o,r,c),e.content=null}function lo(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 a=0;a<s.parts.length;a++){let c=s.parts[a],l=(r=c.inlineData)==null?void 0:r.mimeType;if(!l||!c.inlineData||!ve[l])continue;let f=`data_${i+1}_${a+1}${ve[l].extension}`;c.text=`
74
+ `,gt=class{async*runAsync(e,t){if(!t.partial)for await(let n of Vo(e,t))yield n}},ba=new gt;async function*Ko(o,e){let t=o.agent;if(!E(t))return;let n=t.codeExecutor;if(!n||!ve(n))return;if(se(n)){n.processLlmRequest(e);return}if(!n.optimizeDataFile)return;let r=new ae(new v(o.session.state));if(r.getErrorCount(o.invocationId)>=n.errorRetryAttempts)return;let i=Zo(r,e),s=new Set(r.getProcessedFileNames()),a=i.filter(c=>!s.has(c.name));for(let c of a){let l=zo(c);if(!l)return;let f={role:"model",parts:[{text:`Processing input file: \`${c.name}\``},ze(l)]};e.contents.push(En(f)),yield y({invocationId:o.invocationId,author:t.name,branch:o.branch,content:f});let u=Pn(o,r),d=await n.executeCode({invocationContext:o,codeExecutionInput:{code:l,inputFiles:[c],executionId:u}});r.updateCodeExecutionResult({invocationId:o.invocationId,code:l,resultStdout:d.stdout,resultStderr:d.stderr}),r.addProcessedFileNames([c.name]);let p=await wn(o,r,d);yield p,e.contents.push(En(p.content))}}async function*Vo(o,e){let t=o.agent;if(!E(t))return;let n=t.codeExecutor;if(!n||!ve(n)||!e||!e.content||se(n))return;let r=new ae(new v(o.session.state));if(r.getErrorCount(o.invocationId)>=n.errorRetryAttempts)return;let i=e.content,s=nn(i,n.codeBlockDelimiters);if(!s)return;yield y({invocationId:o.invocationId,author:t.name,branch:o.branch,content:i});let a=Pn(o,r),c=await n.executeCode({invocationContext:o,codeExecutionInput:{code:s,inputFiles:r.getInputFiles(),executionId:a}});r.updateCodeExecutionResult({invocationId:o.invocationId,code:s,resultStdout:c.stdout,resultStderr:c.stderr}),yield await wn(o,r,c),e.content=null}function Zo(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 a=0;a<s.parts.length;a++){let c=s.parts[a],l=(r=c.inlineData)==null?void 0:r.mimeType;if(!l||!c.inlineData||!Ee[l])continue;let f=`data_${i+1}_${a+1}${Ee[l].extension}`;c.text=`
75
75
  Available file: \`${f}\`
76
- `;let u={name:f,content:Et(c.inlineData.data),mimeType:l};n.has(f)||(o.addInputFiles([u]),t.push(u))}}return t}function nn(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 on(o,e,t){if(!o.artifactService)throw new Error("Artifact service is not initialized.");let n={role:"model",parts:[Ft(t)]},r=_({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 uo(o){function e(r){let[i]=r.split("."),s=i.replace(/[^a-zA-Z0-9_]/g,"_");return/^\d/.test(s)&&(s="_"+s),s}if(!ve[o.mimeType])return;let t=e(o.name),n=ve[o.mimeType].loaderCodeTemplate.replace("{filename}",o.name);return`
77
- ${so}
76
+ `;let u={name:f,content:Gt(c.inlineData.data),mimeType:l};n.has(f)||(o.addInputFiles([u]),t.push(u))}}return t}function Pn(o,e){var r;let t=o.agent;if(!E(t)||!((r=t.codeExecutor)!=null&&r.stateful))return;let n=e.getExecutionId();return n||(n=o.session.id,e.setExecutionId(n)),n}async function wn(o,e,t){if(!o.artifactService)throw new Error("Artifact service is not initialized.");let n={role:"model",parts:[on(t)]},r=_({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 zo(o){function e(r){let[i]=r.split("."),s=i.replace(/[^a-zA-Z0-9_]/g,"_");return/^\d/.test(s)&&(s="_"+s),s}if(!Ee[o.mimeType])return;let t=e(o.name),n=Ee[o.mimeType].loaderCodeTemplate.replace("{filename}",o.name);return`
77
+ ${jo}
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 fo=new ot,v=class o extends L{constructor(e){var n,r,i,s,a,c,l,f,u;if(super(e),this.model=e.model,this.instruction=(n=e.instruction)!=null?n:"",this.globalInstruction=(r=e.globalInstruction)!=null?r:"",this.tools=(i=e.tools)!=null?i:[],this.generateContentConfig=e.generateContentConfig,this.disallowTransferToParent=(s=e.disallowTransferToParent)!=null?s:!1,this.disallowTransferToPeers=(a=e.disallowTransferToPeers)!=null?a:!1,this.includeContents=(c=e.includeContents)!=null?c:"default",this.inputSchema=e.inputSchema,this.outputSchema=e.outputSchema,this.outputKey=e.outputKey,this.beforeModelCallback=e.beforeModelCallback,this.afterModelCallback=e.afterModelCallback,this.beforeToolCallback=e.beforeToolCallback,this.afterToolCallback=e.afterToolCallback,this.codeExecutor=e.codeExecutor,this.requestProcessors=(l=e.requestProcessors)!=null?l:[eo,to,no,io,oo,fo],this.responseProcessors=(f=e.responseProcessors)!=null?f:[],this.disallowTransferToParent&&this.disallowTransferToPeers&&!((u=this.subAgents)!=null&&u.length)||this.requestProcessors.push(ro),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(Ke(this.model))return this.model;if(typeof this.model=="string"&&this.model)return ne.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 tn(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(!X(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||X(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 G({invocationContext:e}),s=await tn(r,new R(e));for(let a of s)await a.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=Pe(),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&&(wt(i),i.longRunningToolIds=Array.from(Lt(u,t.toolsDict)))}if(yield i,!((f=b(i))!=null&&f.length))return;let s=await _t({invocationContext:e,functionCallEvent:i,toolsDict:t.toolsDict,beforeToolCallbacks:this.canonicalBeforeToolCallbacks,afterToolCallbacks:this.canonicalAfterToolCallbacks});if(!s)return;let a=Oe(e,s);a&&(yield a);let c=Be({invocationContext:e,functionCallEvent:i,functionResponseEvent:s});c&&(yield c),yield s;let l=s.actions.transferToAgent;if(l){let u=this.getAgentByName(e,l);for await(let d of u.runAsync(e))yield d}}getAgentByName(e,t){let r=e.agent.rootAgent.findAgent(t);if(!r)throw new Error(`Agent ${t} not found in the agent tree.`);return r}async*callLlmAsync(e,t,n){var s,a,c,l,f;let r=await this.handleBeforeModelCallback(e,t,n);if(r){yield r;return}(s=t.config)!=null||(t.config={}),(c=(a=t.config).labels)!=null||(a.labels={}),t.config.labels[en]||(t.config.labels[en]=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 g=await this.handleAfterModelCallback(e,d,n);yield g!=null?g:d}}}async handleBeforeModelCallback(e,t,n){let r=new w({invocationContext:e,eventActions:n.actions}),i=await e.pluginManager.runBeforeModelCallback({callbackContext:r,llmRequest:t});if(i)return i;for(let s of this.canonicalBeforeModelCallbacks){let a=await s({context:r,request:t});if(a)return a}}async handleAfterModelCallback(e,t,n){let r=new w({invocationContext:e,eventActions:n.actions}),i=await e.pluginManager.runAfterModelCallback({callbackContext:r,llmResponse:t});if(i)return i;for(let s of this.canonicalAfterModelCallbacks){let a=await s({context:r,response:t});if(a)return a}}async*runAndHandleError(e,t,n,r){try{for await(let i of e)yield i}catch(i){let s=new w({invocationContext:t,eventActions:r.actions});if(i instanceof Error){let a=await t.pluginManager.runOnModelErrorCallback({callbackContext:s,llmRequest:n,error:i});if(a)yield a;else{let c=JSON.parse(i.message);yield{errorCode:String(c.error.code),errorMessage:c.error.message}}}else throw p.error("Unknown error during response generation",i),i}}};var it=class extends L{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 st=class extends L{async*runAsyncImpl(e){let t=this.subAgents.map(n=>n.runAsync(po(this,n,e)));for await(let n of mo(t))yield n}async*runLiveImpl(e){throw new Error("This is not supported yet for ParallelAgent.")}};function po(o,e,t){let n=new M(t),r=`${o.name}.${e.name}`;return n.branch=n.branch?`${n.branch}.${r}`:r,n}async function*mo(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 at="task_completed",ct=class extends L{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 R(e))).some(i=>i.name===at)||(t.tools.push(new N({name:at,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 ${at} 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 ae=class{constructor(){this.artifacts={}}saveArtifact({appName:e,userId:t,sessionId:n,filename:r,artifact:i}){let s=ye(e,t,n,r);this.artifacts[s]||(this.artifacts[s]=[]);let a=this.artifacts[s].length;return this.artifacts[s].push(i),Promise.resolve(a)}loadArtifact({appName:e,userId:t,sessionId:n,filename:r,version:i}){let s=ye(e,t,n,r),a=this.artifacts[s];return a?(i===void 0&&(i=a.length-1),Promise.resolve(a[i])):Promise.resolve(void 0)}listArtifactKeys({appName:e,userId:t,sessionId:n}){let r=`${e}/${t}/${n}/`,i=`${e}/${t}/user/`,s=[];for(let a in this.artifacts)if(a.startsWith(r)){let c=a.replace(r,"");s.push(c)}else if(a.startsWith(i)){let c=a.replace(i,"");s.push(c)}return Promise.resolve(s.sort())}deleteArtifact({appName:e,userId:t,sessionId:n,filename:r}){let i=ye(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=ye(e,t,n,r),s=this.artifacts[i];if(!s)return Promise.resolve([]);let a=[];for(let c=0;c<s.length;c++)a.push(c);return Promise.resolve(a)}};function ye(o,e,t,n){return go(n)?`${o}/${e}/user/${n}`:`${o}/${e}/${t}/${n}`}function go(o){return o.startsWith("user:")}var Z=class{constructor(){this.memories=[];this.sessionEvents={}}async addSessionToMemory(e){let t=rn(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=rn(e.appName,e.userId);if(!this.sessionEvents[t])return Promise.resolve({memories:[]});let n=e.query.toLowerCase().split(/\s+/),r={memories:[]};for(let a of Object.values(this.sessionEvents[t]))for(let c of a){if(!((s=(i=c.content)==null?void 0:i.parts)!=null&&s.length))continue;let l=c.content.parts.map(d=>d.text).filter(d=>!!d).join(" "),f=ho(l);if(!f.size)continue;n.some(d=>f.has(d))&&r.memories.push({content:c.content,author:c.author,timestamp:Co(c.timestamp)})}return r}};function rn(o,e){return`${o}/${e}`}function ho(o){return new Set([...o.matchAll(/[A-Za-z]+/)].map(e=>e[0].toLowerCase()))}function Co(o){return new Date(o).toISOString()}var z=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 lt=class extends z{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: ${X(t)}`);let n=b(t);if(n.length>0){let i=n.map(s=>s.name);this.log(` Function Calls: ${i}`)}let r=P(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 ce=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 an="adk_request_confirmation",ut="orcas_tool_call_security_check_states",sn="This tool call needs external confirmation before completion.",cn=(n=>(n.DENY="DENY",n.CONFIRM="CONFIRM",n.ALLOW="ALLOW",n))(cn||{}),xe=class{async evaluate(e){return Promise.resolve({outcome:"ALLOW",reason:"For prototyping purpose, all tool calls are allowed."})}},ft=class extends z{constructor(e){var t;super("security_plugin"),this.policyEngine=(t=e==null?void 0:e.policyEngine)!=null?t:new xe}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:sn};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(ut))!=null?r:{})[t]:void 0}setToolCallCheckState(e,t){var i;let{functionCallId:n}=e;if(!n)return;let r=(i=e.state.get(ut))!=null?i:{};r[n]=t,e.state.set(ut,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:sn};case"ALLOW":return;default:return}}};function vo(o){if(!o.content||!o.content.parts)return[];let e=[];for(let t of o.content.parts)t&&t.functionCall&&t.functionCall.name===an&&e.push(t.functionCall);return e}import{cloneDeep as ln}from"lodash-es";var Ae=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 Ee(o){return{id:o.id,appName:o.appName,userId:o.userId||"",state:o.state||{},events:o.events||[],lastUpdateTime:o.lastUpdateTime||0}}var W=class extends Ae{constructor(){super(...arguments);this.sessions={};this.userState={};this.appState={}}createSession({appName:t,userId:n,state:r,sessionId:i}){let s=Ee({id:i||Y(),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,ln(s)))}getSession({appName:t,userId:n,sessionId:r,config:i}){if(!this.sessions[t]||!this.sessions[t][n]||!this.sessions[t][n][r])return Promise.resolve(void 0);let s=this.sessions[t][n][r],a=ln(s);if(i&&(i.numRecentEvents&&(a.events=a.events.slice(-i.numRecentEvents)),i.afterTimestamp)){let c=a.events.length-1;for(;c>=0&&!(a.events[c].timestamp<i.afterTimestamp);)c--;c>=0&&(a.events=a.events.slice(c+1))}return Promise.resolve(this.mergeState(t,n,a))}listSessions({appName:t,userId:n}){if(!this.sessions[t]||!this.sessions[t][n])return Promise.resolve({sessions:[]});let r=[];for(let i of Object.values(this.sessions[t][n]))r.push(Ee({id:i.id,appName:i.appName,userId:i.userId,state:{},events:[],lastUpdateTime:i.lastUpdateTime}));return Promise.resolve({sessions:r})}async deleteSession({appName:t,userId:n,sessionId:r}){await this.getSession({appName:t,userId:n,sessionId:r})&&delete this.sessions[t][n][r]}async appendEvent({session:t,event:n}){await super.appendEvent({session:t,event:n}),t.lastUpdateTime=n.timestamp;let r=t.appName,i=t.userId,s=t.id,a=l=>{p.warn(`Failed to append event to session ${s}: ${l}`)};if(!this.sessions[r])return a(`appName ${r} not in sessions`),n;if(!this.sessions[r][i])return a(`userId ${i} not in sessions[appName]`),n;if(!this.sessions[r][i][s])return a(`sessionId ${s} not in sessions[appName][userId]`),n;if(n.actions&&n.actions.stateDelta)for(let l of Object.keys(n.actions.stateDelta))l.startsWith(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 c=this.sessions[r][i][s];return await super.appendEvent({session:c,event:n}),c.lastUpdateTime=n.timestamp,n}mergeState(t,n,r){if(this.appState[t])for(let i of Object.keys(this.appState[t]))r.state[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}};import{createPartFromText as yo}from"@google/genai";import{trace as xo}from"@opentelemetry/api";var Q=class{constructor(e){var t;this.appName=e.appName,this.agent=e.agent,this.pluginManager=new ce((t=e.plugins)!=null?t:[]),this.artifactService=e.artifactService,this.sessionService=e.sessionService,this.memoryService=e.memoryService,this.credentialService=e.credentialService}async*runAsync({userId:e,sessionId:t,newMessage:n,stateDelta:r,runConfig:i}){var a;i=Yt(i);let s=xo.getTracer("gcp.vertex.agent").startSpan("invocation");try{let c=await this.sessionService.getSession({appName:this.appName,userId:e,sessionId:t});if(!c)throw this.appName?new Error(`Session not found: ${t}`):new Error("Session lookup failed: appName must be provided in runner constructor");if(i.supportCfc&&this.agent instanceof v){let d=this.agent.canonicalModel.model;if(!re(d))throw new Error(`CFC is not supported for model: ${d} in agent: ${this.agent.name}`);this.agent.codeExecutor instanceof O||(this.agent.codeExecutor=new O)}let l=new M({artifactService:this.artifactService,sessionService:this.sessionService,memoryService:this.memoryService,credentialService:this.credentialService,invocationId:bt(),agent:this.agent,session:c,userContent:n,runConfig:i,pluginManager:this.pluginManager}),f=await this.pluginManager.runOnUserMessageCallback({userMessage:n,invocationContext:l});if(f&&(n=f),n){if(!((a=n.parts)!=null&&a.length))throw new Error("No parts in the newMessage.");i.saveInputBlobsAsArtifacts&&await this.saveArtifacts(l.invocationId,c.userId,c.id,n),await this.sessionService.appendEvent({session:c,event:y({invocationId:l.invocationId,author:"user",actions:r?_({stateDelta:r}):void 0,content:n})})}l.agent=this.determineAgentForResumption(c,this.agent);let u=await this.pluginManager.runBeforeRunCallback({invocationContext:l});if(u){let d=y({invocationId:l.invocationId,author:"model",content:u});await this.sessionService.appendEvent({session:c,event:d}),yield d}else for await(let d of l.agent.runAsync(l)){d.partial||await this.sessionService.appendEvent({session:c,event:d});let g=await this.pluginManager.runOnEventCallback({invocationContext:l,event:d});g?yield g:yield d}await this.pluginManager.runAfterRunCallback({invocationContext:l})}finally{s.end()}}async saveArtifacts(e,t,n,r){var i;if(!(!this.artifactService||!((i=r.parts)!=null&&i.length)))for(let s=0;s<r.parts.length;s++){let a=r.parts[s];if(!a.inlineData)continue;let c=`artifact_${e}_${s}`;await this.artifactService.saveArtifact({appName:this.appName,userId:t,sessionId:n,filename:c,artifact:a}),r.parts[s]=yo(`Uploaded file: ${c}. It is saved into artifacts`)}}determineAgentForResumption(e,t){let n=Ao(e.events);if(n&&n.author)return t.findAgent(n.author)||t;for(let r=e.events.length-1;r>=0;r--){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 Ao(o){var n,r,i,s;if(!o.length)return null;let t=(s=(i=(r=(n=o[o.length-1].content)==null?void 0:n.parts)==null?void 0:r.find(a=>a.functionResponse))==null?void 0:i.functionResponse)==null?void 0:s.id;if(!t)return null;for(let a=o.length-2;a>=0;a--){let c=o[a],l=b(c);if(l){for(let f of l)if(f.id===t)return c}}return null}var dt=class extends Q{constructor({agent:e,appName:t="InMemoryRunner",plugins:n=[]}){super({appName:t,agent:e,plugins:n,artifactService:new ae,sessionService:new W,memoryService:new Z})}};import{Type as Te}from"@google/genai";var be=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 pt=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 v&&this.agent.inputSchema?e={name:this.name,description:this.description,parameters:this.agent.inputSchema}:e={name:this.name,description:this.description,parameters:{type:Te.OBJECT,properties:{request:{type:Te.STRING}},required:["request"]}},this.apiVariant!=="GEMINI_API"){let t=this.agent instanceof v&&this.agent.outputSchema;e.response=t?{type:Te.OBJECT}:{type:Te.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 Q({appName:this.agent.name,agent:this.agent,artifactService:new be(t),sessionService:new W,memoryService:new Z,credentialService:t.invocationContext.credentialService}),s=await i.sessionService.createSession({appName:this.agent.name,userId:"tmp_user",state:t.state.toRecord()}),a;for await(let d of i.runAsync({userId:s.userId,sessionId:s.id,newMessage:r}))d.actions.stateDelta&&t.state.update(d.actions.stateDelta),a=d;if(!((u=(f=a==null?void 0:a.content)==null?void 0:f.parts)!=null&&u.length))return"";let c=this.agent instanceof v&&this.agent.outputSchema,l=a.content.parts.map(d=>d.text).filter(d=>d).join(`
85
- `);return c?JSON.parse(l):l}};var le=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 mt=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||[],Ot(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(Mt(t.model)){t.config.tools.push({googleSearch:{}});return}throw new Error(`Google search tool is not supported for model ${t.model}`)}}},Eo=new mt;var un=`
84
+ `}var Yo=new mt,ht=Symbol.for("google.adk.llmAgent");function E(o){return typeof o=="object"&&o!==null&&ht in o&&o[ht]===!0}var Rn,In,K=class o extends(In=L,Rn=ht,In){constructor(t){var r,i,s,a,c,l,f,u,d;super(t);this[Rn]=!0;if(this.model=t.model,this.instruction=(r=t.instruction)!=null?r:"",this.globalInstruction=(i=t.globalInstruction)!=null?i:"",this.tools=(s=t.tools)!=null?s:[],this.generateContentConfig=t.generateContentConfig,this.disallowTransferToParent=(a=t.disallowTransferToParent)!=null?a:!1,this.disallowTransferToPeers=(c=t.disallowTransferToPeers)!=null?c:!1,this.includeContents=(l=t.includeContents)!=null?l:"default",this.inputSchema=t.inputSchema,this.outputSchema=t.outputSchema,this.outputKey=t.outputKey,this.beforeModelCallback=t.beforeModelCallback,this.afterModelCallback=t.afterModelCallback,this.beforeToolCallback=t.beforeToolCallback,this.afterToolCallback=t.afterToolCallback,this.codeExecutor=t.codeExecutor,this.requestProcessors=(f=t.requestProcessors)!=null?f:[Fo,Do,Go,Uo,$o,Yo],this.responseProcessors=(u=t.responseProcessors)!=null?u:[],this.disallowTransferToParent&&this.disallowTransferToPeers&&!((d=this.subAgents)!=null&&d.length)||this.requestProcessors.push(qo),t.generateContentConfig){if(t.generateContentConfig.tools)throw new Error("All tools must be set via LlmAgent.tools.");if(t.generateContentConfig.systemInstruction)throw new Error("System instruction must be set via LlmAgent.instruction.");if(t.generateContentConfig.responseSchema)throw new Error("Response schema must be set via LlmAgent.output_schema.")}else this.generateContentConfig={};if(this.outputSchema){if((!this.disallowTransferToParent||!this.disallowTransferToPeers)&&(m.warn(`Invalid config for agent ${this.name}: outputSchema cannot co-exist with agent transfer configurations. Setting disallowTransferToParent=true, disallowTransferToPeers=true`),this.disallowTransferToParent=!0,this.disallowTransferToPeers=!0),this.subAgents&&this.subAgents.length>0)throw new Error(`Invalid config for agent ${this.name}: if outputSchema is set, subAgents must be empty to disable agent transfer.`);if(this.tools&&this.tools.length>0)throw new Error(`Invalid config for agent ${this.name}: if outputSchema is set, tools must be empty`)}}get canonicalModel(){if(Je(this.model))return this.model;if(typeof this.model=="string"&&this.model)return te.newLlm(this.model);let t=this.parentAgent;for(;t;){if(E(t))return t.canonicalModel;t=t.parentAgent}throw new Error(`No model found for ${this.name}.`)}async canonicalInstruction(t){return typeof this.instruction=="string"?{instruction:this.instruction,requireStateInjection:!0}:{instruction:await this.instruction(t),requireStateInjection:!1}}async canonicalGlobalInstruction(t){return typeof this.globalInstruction=="string"?{instruction:this.globalInstruction,requireStateInjection:!0}:{instruction:await this.globalInstruction(t),requireStateInjection:!1}}async canonicalTools(t){let n=[];for(let r of this.tools){let i=await Sn(r,t);n.push(...i)}return n}static normalizeCallbackArray(t){return t?Array.isArray(t)?t:[t]:[]}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(t){var i,s;if(t.author!==this.name){m.debug(`Skipping output save for agent ${this.name}: event authored by ${t.author}`);return}if(!this.outputKey){m.debug(`Skipping output save for agent ${this.name}: outputKey is not set`);return}if(!H(t)){m.debug(`Skipping output save for agent ${this.name}: event is not a final response`);return}if(!((s=(i=t.content)==null?void 0:i.parts)!=null&&s.length)){m.debug(`Skipping output save for agent ${this.name}: event content is empty`);return}let n=t.content.parts.map(a=>a.text?a.text:"").join(""),r=n;if(this.outputSchema){if(!n.trim())return;try{r=JSON.parse(n)}catch(a){m.error(`Error parsing output for agent ${this.name}`,a)}}t.actions.stateDelta[this.outputKey]=r}async*runAsyncImpl(t){for(;;){let n;for await(let r of this.runOneStepAsync(t))n=r,this.maybeSaveOutputToState(r),yield r;if(!n||H(n))break;if(n.partial){m.warn("The last event is partial, which is not expected.");break}}}async*runLiveImpl(t){for await(let n of this.runLiveFlow(t))this.maybeSaveOutputToState(n),yield n;t.endInvocation}async*runLiveFlow(t){throw await Promise.resolve(),new Error("LlmAgent.runLiveFlow not implemented")}async*runOneStepAsync(t){let n={contents:[],toolsDict:{},liveConnectConfig:{}};for(let i of this.requestProcessors)for await(let s of i.runAsync(t,n))yield s;for(let i of this.tools){let s=new G({invocationContext:t}),a=await Sn(i,new R(t));for(let c of a)await c.processLlmRequest({toolContext:s,llmRequest:n})}if(t.endInvocation)return;let r=y({invocationId:t.invocationId,author:this.name,branch:t.branch});for await(let i of this.callLlmAsync(t,n,r))for await(let s of this.postprocess(t,n,i,r))r.id=Me(),r.timestamp=new Date().getTime(),yield s}async*postprocess(t,n,r,i){var u;for(let d of this.responseProcessors)for await(let p of d.runAsync(t,r))yield p;if(!r.content&&!r.errorCode&&!r.interrupted)return;let s=y({...i,...r});if(s.content){let d=T(s);d!=null&&d.length&&(Zt(s),s.longRunningToolIds=Array.from(Yt(d,n.toolsDict)))}if(yield s,!((u=T(s))!=null&&u.length))return;let a=await Ht({invocationContext:t,functionCallEvent:s,toolsDict:n.toolsDict,beforeToolCallbacks:this.canonicalBeforeToolCallbacks,afterToolCallbacks:this.canonicalAfterToolCallbacks});if(!a)return;let c=qe(t,a);c&&(yield c);let l=Ue({invocationContext:t,functionCallEvent:s,functionResponseEvent:a});l&&(yield l),yield a;let f=a.actions.transferToAgent;if(f){let d=this.getAgentByName(t,f);for await(let p of d.runAsync(t))yield p}}getAgentByName(t,n){let i=t.agent.rootAgent.findAgent(n);if(!i)throw new Error(`Agent ${n} not found in the agent tree.`);return i}async*callLlmAsync(t,n,r){var a,c,l,f,u;let i=await this.handleBeforeModelCallback(t,n,r);if(i){yield i;return}(a=n.config)!=null||(n.config={}),(l=(c=n.config).labels)!=null||(c.labels={}),n.config.labels[bn]||(n.config.labels[bn]=this.name);let s=this.canonicalModel;if((f=t.runConfig)!=null&&f.supportCfc)throw new Error("CFC is not yet supported in callLlmAsync");{t.incrementLlmCallCount();let d=s.generateContentAsync(n,((u=t.runConfig)==null?void 0:u.streamingMode)==="sse");for await(let p of this.runAndHandleError(d,t,n,r)){let g=await this.handleAfterModelCallback(t,p,r);yield g!=null?g:p}}}async handleBeforeModelCallback(t,n,r){let i=new w({invocationContext:t,eventActions:r.actions}),s=await t.pluginManager.runBeforeModelCallback({callbackContext:i,llmRequest:n});if(s)return s;for(let a of this.canonicalBeforeModelCallbacks){let c=await a({context:i,request:n});if(c)return c}}async handleAfterModelCallback(t,n,r){let i=new w({invocationContext:t,eventActions:r.actions}),s=await t.pluginManager.runAfterModelCallback({callbackContext:i,llmResponse:n});if(s)return s;for(let a of this.canonicalAfterModelCallbacks){let c=await a({context:i,response:n});if(c)return c}}async*runAndHandleError(t,n,r,i){try{for await(let s of t)yield s}catch(s){let a=new w({invocationContext:n,eventActions:i.actions});if(s instanceof Error){let c=await n.pluginManager.runOnModelErrorCallback({callbackContext:a,llmRequest:r,error:s});if(c)yield c;else{let l=JSON.parse(s.message);yield{errorCode:String(l.error.code),errorMessage:l.error.message}}}else throw m.error("Unknown error during response generation",s),s}}};var Ct=Symbol.for("google.adk.loopAgent");function Ho(o){return typeof o=="object"&&o!==null&&Ct in o&&o[Ct]===!0}var kn,Ln,vt=class extends(Ln=L,kn=Ct,Ln){constructor(t){var n;super(t);this[kn]=!0;this.maxIterations=(n=t.maxIterations)!=null?n:Number.MAX_SAFE_INTEGER}async*runAsyncImpl(t){let n=0;for(;n<this.maxIterations;){for(let r of this.subAgents){let i=!1;for await(let s of r.runAsync(t))yield s,s.actions.escalate&&(i=!0);if(i)return}n++}}async*runLiveImpl(t){throw new Error("This is not supported yet for LoopAgent.")}};var yt=Symbol.for("google.adk.parallelAgent");function Qo(o){return typeof o=="object"&&o!==null&&yt in o&&o[yt]===!0}var _n,On,xt=class extends(On=L,_n=yt,On){constructor(){super(...arguments);this[_n]=!0}async*runAsyncImpl(t){let n=this.subAgents.map(r=>r.runAsync(Xo(this,r,t)));for await(let r of Wo(n))yield r}async*runLiveImpl(t){throw new Error("This is not supported yet for ParallelAgent.")}};function Xo(o,e,t){let n=new B(t),r=`${o.name}.${e.name}`;return n.branch=n.branch?`${n.branch}.${r}`:r,n}async function*Wo(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 At="task_completed",Et=Symbol.for("google.adk.sequentialAgent");function Jo(o){return typeof o=="object"&&o!==null&&Et in o&&o[Et]===!0}var Mn,Bn,Tt=class extends(Bn=L,Mn=Et,Bn){constructor(){super(...arguments);this[Mn]=!0}async*runAsyncImpl(t){for(let n of this.subAgents)for await(let r of n.runAsync(t))yield r}async*runLiveImpl(t){for(let n of this.subAgents)E(n)&&((await n.canonicalTools(new R(t))).some(s=>s.name===At)||(n.tools.push(new F({name:At,description:"Signals that the model has successfully completed the user's question or task.",execute:()=>"Task completion signaled."})),n.instruction+=`If you finished the user's request according to its description, call the ${At} 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 n of this.subAgents)for await(let r of n.runLive(t))yield r}};var le=class{constructor(){this.artifacts={}}saveArtifact({appName:e,userId:t,sessionId:n,filename:r,artifact:i}){let s=Te(e,t,n,r);this.artifacts[s]||(this.artifacts[s]=[]);let a=this.artifacts[s].length;return this.artifacts[s].push(i),Promise.resolve(a)}loadArtifact({appName:e,userId:t,sessionId:n,filename:r,version:i}){let s=Te(e,t,n,r),a=this.artifacts[s];return a?(i===void 0&&(i=a.length-1),Promise.resolve(a[i])):Promise.resolve(void 0)}listArtifactKeys({appName:e,userId:t,sessionId:n}){let r=`${e}/${t}/${n}/`,i=`${e}/${t}/user/`,s=[];for(let a in this.artifacts)if(a.startsWith(r)){let c=a.replace(r,"");s.push(c)}else if(a.startsWith(i)){let c=a.replace(i,"");s.push(c)}return Promise.resolve(s.sort())}deleteArtifact({appName:e,userId:t,sessionId:n,filename:r}){let i=Te(e,t,n,r);return this.artifacts[i]&&delete this.artifacts[i],Promise.resolve()}listVersions({appName:e,userId:t,sessionId:n,filename:r}){let i=Te(e,t,n,r),s=this.artifacts[i];if(!s)return Promise.resolve([]);let a=[];for(let c=0;c<s.length;c++)a.push(c);return Promise.resolve(a)}};function Te(o,e,t,n){return er(n)?`${o}/${e}/user/${n}`:`${o}/${e}/${t}/${n}`}function er(o){return o.startsWith("user:")}var Nn=(i=>(i.API_KEY="apiKey",i.HTTP="http",i.OAUTH2="oauth2",i.OPEN_ID_CONNECT="openIdConnect",i.SERVICE_ACCOUNT="serviceAccount",i))(Nn||{});var bt=Symbol.for("google.adk.baseExampleProvider");function tr(o){return typeof o=="object"&&o!==null&&bt in o&&o[bt]===!0}var Fn;Fn=bt;var St=class{constructor(){this[Fn]=!0}};var V=class{constructor(){this.memories=[];this.sessionEvents={}}async addSessionToMemory(e){let t=Dn(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=Dn(e.appName,e.userId);if(!this.sessionEvents[t])return Promise.resolve({memories:[]});let n=e.query.toLowerCase().split(/\s+/),r={memories:[]};for(let a of Object.values(this.sessionEvents[t]))for(let c of a){if(!((s=(i=c.content)==null?void 0:i.parts)!=null&&s.length))continue;let l=c.content.parts.map(d=>d.text).filter(d=>!!d).join(" "),f=nr(l);if(!f.size)continue;n.some(d=>f.has(d))&&r.memories.push({content:c.content,author:c.author,timestamp:or(c.timestamp)})}return r}};function Dn(o,e){return`${o}/${e}`}function nr(o){return new Set([...o.matchAll(/[A-Za-z]+/)].map(e=>e[0].toLowerCase()))}function or(o){return new Date(o).toISOString()}var Z=class{constructor(e){this.name=e}async onUserMessageCallback(e){}async beforeRunCallback(e){}async onEventCallback(e){}async afterRunCallback(e){}async beforeAgentCallback(e){}async afterAgentCallback(e){}async beforeModelCallback(e){}async afterModelCallback(e){}async onModelErrorCallback(e){}async beforeToolCallback(e){}async afterToolCallback(e){}async onToolErrorCallback(e){}};var Rt=class extends Z{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=T(t);if(n.length>0){let i=n.map(s=>s.name);this.log(` Function Calls: ${i}`)}let r=P(t);if(r.length>0){let i=r.map(s=>s.name);this.log(` Function Responses: ${i}`)}t.longRunningToolIds&&t.longRunningToolIds.length>0&&this.log(` Long Running Tools: ${[...t.longRunningToolIds]}`)}async afterRunCallback({invocationContext:e}){var t;this.log("\u2705 INVOCATION COMPLETED"),this.log(` Invocation ID: ${e.invocationId}`),this.log(` Final Agent: ${(t=e.agent.name)!=null?t:"Unknown"}`)}async beforeAgentCallback({agent:e,callbackContext:t}){this.log("\u{1F916} AGENT STARTING"),this.log(` Agent Name: ${t.agentName}`),this.log(` Invocation ID: ${t.invocationId}`),t.invocationContext.branch&&this.log(` Branch: ${t.invocationContext.branch}`)}async afterAgentCallback({agent:e,callbackContext:t}){this.log("\u{1F916} AGENT COMPLETED"),this.log(` Agent Name: ${t.agentName}`),this.log(` Invocation ID: ${t.invocationId}`)}async beforeModelCallback({callbackContext:e,llmRequest:t}){var n;if(this.log("\u{1F9E0} LLM REQUEST"),this.log(` Model: ${(n=t.model)!=null?n:"default"}`),this.log(` Agent: ${e.agentName}`),t.config&&t.config.systemInstruction){let r=t.config.systemInstruction;r.length>200&&(r=r.substring(0,200)+"..."),this.log(` System Instruction: '${r}'`)}if(t.toolsDict){let r=Object.keys(t.toolsDict);this.log(` Available Tools: ${r}`)}}async afterModelCallback({callbackContext:e,llmResponse:t}){this.log("\u{1F9E0} LLM RESPONSE"),this.log(` Agent: ${e.agentName}`),t.errorCode?(this.log(` \u274C ERROR - Code: ${t.errorCode}`),this.log(` Error Message: ${t.errorMessage}`)):(this.log(` Content: ${this.formatContent(t.content)}`),t.partial&&this.log(` Partial: ${t.partial}`),t.turnComplete!==void 0&&this.log(` Turn Complete: ${t.turnComplete}`)),t.usageMetadata&&this.log(` Token Usage - Input: ${t.usageMetadata.promptTokenCount}, Output: ${t.usageMetadata.candidatesTokenCount}`)}async beforeToolCallback({tool:e,toolArgs:t,toolContext:n}){this.log("\u{1F527} TOOL STARTING"),this.log(` Tool Name: ${e.name}`),this.log(` Agent: ${n.agentName}`),this.log(` Function Call ID: ${n.functionCallId}`),this.log(` Arguments: ${this.formatArgs(t)}`)}async afterToolCallback({tool:e,toolArgs:t,toolContext:n,result:r}){this.log("\u{1F527} TOOL COMPLETED"),this.log(` Tool Name: ${e.name}`),this.log(` Agent: ${n.agentName}`),this.log(` Function Call ID: ${n.functionCallId}`),this.log(` Result: ${this.formatArgs(r)}`)}async onModelErrorCallback({callbackContext:e,llmRequest:t,error:n}){this.log("\u{1F9E0} LLM ERROR"),this.log(` Agent: ${e.agentName}`),this.log(` Error: ${n}`)}async onToolErrorCallback({tool:e,toolArgs:t,toolContext:n,error:r}){this.log("\u{1F527} TOOL ERROR"),this.log(` Tool Name: ${e.name}`),this.log(` Agent: ${n.agentName}`),this.log(` Function Call ID: ${n.functionCallId}`),this.log(` Arguments: ${this.formatArgs(t)}`),this.log(` Error: ${r}`)}log(e){let t=`\x1B[90m[${this.name}] ${e}\x1B[0m`;m.info(t)}formatContent(e,t=200){if(!e||!e.parts)return"None";let n=[];for(let r of e.parts)if(r.text){let i=r.text.trim();i.length>t&&(i=i.substring(0,t)+"..."),n.push(`text: '${i}'`)}else r.functionCall?n.push(`function_call: ${r.functionCall.name}`):r.functionResponse?n.push(`function_response: ${r.functionResponse.name}`):r.codeExecutionResult?n.push("code_execution_result"):n.push("other_part");return n.join(" | ")}formatArgs(e,t=300){if(!e)return"{}";let n=JSON.stringify(e);return n.length>t&&(n=n.substring(0,t)+"...}"),n}};var 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),m.info(`Plugin '${e.name}' registered.`)}getPlugin(e){return Array.from(this.plugins).find(t=>t.name===e)}async runCallbacks(e,t,n){for(let r of e)try{let i=await t(r);if(i!==void 0)return m.debug(`Plugin '${r.name}' returned a value for callback '${n}', exiting early.`),i}catch(i){let s=`Error in plugin '${r.name}' during '${n}' callback: ${i}`;throw m.error(s),new Error(s)}}async runOnUserMessageCallback({userMessage:e,invocationContext:t}){return await this.runCallbacks(this.plugins,n=>n.onUserMessageCallback({userMessage:e,invocationContext:t}),"onUserMessageCallback")}async runBeforeRunCallback({invocationContext:e}){return await this.runCallbacks(this.plugins,t=>t.beforeRunCallback({invocationContext:e}),"beforeRunCallback")}async runAfterRunCallback({invocationContext:e}){await this.runCallbacks(this.plugins,t=>t.afterRunCallback({invocationContext:e}),"afterRunCallback")}async runOnEventCallback({invocationContext:e,event:t}){return await this.runCallbacks(this.plugins,n=>n.onEventCallback({invocationContext:e,event:t}),"onEventCallback")}async runBeforeAgentCallback({agent:e,callbackContext:t}){return await this.runCallbacks(this.plugins,n=>n.beforeAgentCallback({agent:e,callbackContext:t}),"beforeAgentCallback")}async runAfterAgentCallback({agent:e,callbackContext:t}){return await this.runCallbacks(this.plugins,n=>n.afterAgentCallback({agent:e,callbackContext:t}),"afterAgentCallback")}async runBeforeToolCallback({tool:e,toolArgs:t,toolContext:n}){return await this.runCallbacks(this.plugins,r=>r.beforeToolCallback({tool:e,toolArgs:t,toolContext:n}),"beforeToolCallback")}async runAfterToolCallback({tool:e,toolArgs:t,toolContext:n,result:r}){return await this.runCallbacks(this.plugins,i=>i.afterToolCallback({tool:e,toolArgs:t,toolContext:n,result:r}),"afterToolCallback")}async runOnModelErrorCallback({callbackContext:e,llmRequest:t,error:n}){return await this.runCallbacks(this.plugins,r=>r.onModelErrorCallback({callbackContext:e,llmRequest:t,error:n}),"onModelErrorCallback")}async runBeforeModelCallback({callbackContext:e,llmRequest:t}){return await this.runCallbacks(this.plugins,n=>n.beforeModelCallback({callbackContext:e,llmRequest:t}),"beforeModelCallback")}async runAfterModelCallback({callbackContext:e,llmResponse:t}){return await this.runCallbacks(this.plugins,n=>n.afterModelCallback({callbackContext:e,llmResponse:t}),"afterModelCallback")}async runOnToolErrorCallback({tool:e,toolArgs:t,toolContext:n,error:r}){return await this.runCallbacks(this.plugins,i=>i.onToolErrorCallback({tool:e,toolArgs:t,toolContext:n,error:r}),"onToolErrorCallback")}};var $n="adk_request_confirmation",It="orcas_tool_call_security_check_states",Gn="This tool call needs external confirmation before completion.",qn=(n=>(n.DENY="DENY",n.CONFIRM="CONFIRM",n.ALLOW="ALLOW",n))(qn||{}),be=class{async evaluate(e){return Promise.resolve({outcome:"ALLOW",reason:"For prototyping purpose, all tool calls are allowed."})}},Pt=class extends Z{constructor(e){var t;super("security_plugin"),this.policyEngine=(t=e==null?void 0:e.policyEngine)!=null?t:new be}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:Gn};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(It))!=null?r:{})[t]:void 0}setToolCallCheckState(e,t){var i;let{functionCallId:n}=e;if(!n)return;let r=(i=e.state.get(It))!=null?i:{};r[n]=t,e.state.set(It,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:Gn};case"ALLOW":return;default:return}}};function rr(o){if(!o.content||!o.content.parts)return[];let e=[];for(let t of o.content.parts)t&&t.functionCall&&t.functionCall.name===$n&&e.push(t.functionCall);return e}import{cloneDeep as Un}from"lodash-es";var Se=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(v.TEMP_PREFIX)||(e.state[n]=r)}};function Re(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 Se{constructor(){super(...arguments);this.sessions={};this.userState={};this.appState={}}createSession({appName:t,userId:n,state:r,sessionId:i}){let s=Re({id:i||Q(),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,Un(s)))}getSession({appName:t,userId:n,sessionId:r,config:i}){if(!this.sessions[t]||!this.sessions[t][n]||!this.sessions[t][n][r])return Promise.resolve(void 0);let s=this.sessions[t][n][r],a=Un(s);if(i&&(i.numRecentEvents&&(a.events=a.events.slice(-i.numRecentEvents)),i.afterTimestamp)){let c=a.events.length-1;for(;c>=0&&!(a.events[c].timestamp<i.afterTimestamp);)c--;c>=0&&(a.events=a.events.slice(c+1))}return Promise.resolve(this.mergeState(t,n,a))}listSessions({appName:t,userId:n}){if(!this.sessions[t]||!this.sessions[t][n])return Promise.resolve({sessions:[]});let r=[];for(let i of Object.values(this.sessions[t][n]))r.push(Re({id:i.id,appName:i.appName,userId:i.userId,state:{},events:[],lastUpdateTime:i.lastUpdateTime}));return Promise.resolve({sessions:r})}async deleteSession({appName:t,userId:n,sessionId:r}){await this.getSession({appName:t,userId:n,sessionId:r})&&delete this.sessions[t][n][r]}async appendEvent({session:t,event:n}){await super.appendEvent({session:t,event:n}),t.lastUpdateTime=n.timestamp;let r=t.appName,i=t.userId,s=t.id,a=l=>{m.warn(`Failed to append event to session ${s}: ${l}`)};if(!this.sessions[r])return a(`appName ${r} not in sessions`),n;if(!this.sessions[r][i])return a(`userId ${i} not in sessions[appName]`),n;if(!this.sessions[r][i][s])return a(`sessionId ${s} not in sessions[appName][userId]`),n;if(n.actions&&n.actions.stateDelta)for(let l of Object.keys(n.actions.stateDelta))l.startsWith(v.APP_PREFIX)&&(this.appState[r]=this.appState[r]||{},this.appState[r][l.replace(v.APP_PREFIX,"")]=n.actions.stateDelta[l]),l.startsWith(v.USER_PREFIX)&&(this.userState[r]=this.userState[r]||{},this.userState[r][i]=this.userState[r][i]||{},this.userState[r][i][l.replace(v.USER_PREFIX,"")]=n.actions.stateDelta[l]);let c=this.sessions[r][i][s];return await super.appendEvent({session:c,event:n}),c.lastUpdateTime=n.timestamp,n}mergeState(t,n,r){if(this.appState[t])for(let i of Object.keys(this.appState[t]))r.state[v.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[v.USER_PREFIX+i]=this.userState[t][n][i];return r}};import{createPartFromText as ir}from"@google/genai";import{trace as sr}from"@opentelemetry/api";var Y=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(e){var c;let{userId:t,sessionId:n,stateDelta:r}=e,i=An(e.runConfig),s=e.newMessage,a=sr.getTracer("gcp.vertex.agent").startSpan("invocation");try{let l=await this.sessionService.getSession({appName:this.appName,userId:t,sessionId:n});if(!l)throw this.appName?new Error(`Session not found: ${n}`):new Error("Session lookup failed: appName must be provided in runner constructor");if(i.supportCfc&&E(this.agent)){let p=this.agent.canonicalModel.model;if(!re(p))throw new Error(`CFC is not supported for model: ${p} in agent: ${this.agent.name}`);se(this.agent.codeExecutor)||(this.agent.codeExecutor=new ie)}let f=new B({artifactService:this.artifactService,sessionService:this.sessionService,memoryService:this.memoryService,credentialService:this.credentialService,invocationId:$t(),agent:this.agent,session:l,userContent:s,runConfig:i,pluginManager:this.pluginManager}),u=await this.pluginManager.runOnUserMessageCallback({userMessage:s,invocationContext:f});if(u&&(s=u),s){if(!((c=s.parts)!=null&&c.length))throw new Error("No parts in the newMessage.");i.saveInputBlobsAsArtifacts&&await this.saveArtifacts(f.invocationId,l.userId,l.id,s),await this.sessionService.appendEvent({session:l,event:y({invocationId:f.invocationId,author:"user",actions:r?_({stateDelta:r}):void 0,content:s})})}f.agent=this.determineAgentForResumption(l,this.agent);let d=await this.pluginManager.runBeforeRunCallback({invocationContext:f});if(d){let p=y({invocationId:f.invocationId,author:"model",content:d});await this.sessionService.appendEvent({session:l,event:p}),yield p}else for await(let p of f.agent.runAsync(f)){p.partial||await this.sessionService.appendEvent({session:l,event:p});let g=await this.pluginManager.runOnEventCallback({invocationContext:f,event:p});g?yield g:yield p}await this.pluginManager.runAfterRunCallback({invocationContext:f})}finally{a.end()}}async saveArtifacts(e,t,n,r){var i;if(!(!this.artifactService||!((i=r.parts)!=null&&i.length)))for(let s=0;s<r.parts.length;s++){let a=r.parts[s];if(!a.inlineData)continue;let c=`artifact_${e}_${s}`;await this.artifactService.saveArtifact({appName:this.appName,userId:t,sessionId:n,filename:c,artifact:a}),r.parts[s]=ir(`Uploaded file: ${c}. It is saved into artifacts`)}}determineAgentForResumption(e,t){let n=ar(e.events);if(n&&n.author)return t.findAgent(n.author)||t;for(let r=e.events.length-1;r>=0;r--){m.info("event: ",JSON.stringify(e.events[r]));let i=e.events[r];if(i.author==="user"||!i.author)continue;if(i.author===t.name)return t;let s=t.findSubAgent(i.author);if(!s){m.warn(`Event from an unknown agent: ${i.author}, event id: ${i.id}`);continue}if(this.isRoutableLlmAgent(s))return s}return t}isRoutableLlmAgent(e){let t=e;for(;t;){if(!E(t)||t.disallowTransferToParent)return!1;t=t.parentAgent}return!0}};function ar(o){var n,r,i,s;if(!o.length)return null;let t=(s=(i=(r=(n=o[o.length-1].content)==null?void 0:n.parts)==null?void 0:r.find(a=>a.functionResponse))==null?void 0:i.functionResponse)==null?void 0:s.id;if(!t)return null;for(let a=o.length-2;a>=0;a--){let c=o[a],l=T(c);if(l){for(let f of l)if(f.id===t)return c}}return null}var wt=class extends Y{constructor({agent:e,appName:t="InMemoryRunner",plugins:n=[]}){super({appName:t,agent:e,plugins:n,artifactService:new le,sessionService:new z,memoryService:new V})}};import{Type as Pe}from"@google/genai";var Ie=class{constructor(e){this.toolContext=e;this.invocationContext=e.invocationContext}async saveArtifact(e){return this.toolContext.saveArtifact(e.filename,e.artifact)}async loadArtifact(e){return this.toolContext.loadArtifact(e.filename,e.version)}async listArtifactKeys(e){return this.toolContext.listArtifacts()}async deleteArtifact(e){if(!this.toolContext.invocationContext.artifactService)throw new Error("Artifact service is not initialized.");return this.toolContext.invocationContext.artifactService.deleteArtifact(e)}async listVersions(e){if(!this.toolContext.invocationContext.artifactService)throw new Error("Artifact service is not initialized.");return this.toolContext.invocationContext.artifactService.listVersions(e)}};var kt=Symbol.for("google.adk.agentTool");function cr(o){return typeof o=="object"&&o!==null&&kt in o&&o[kt]===!0}var jn,Kn,Lt=class extends(Kn=I,jn=kt,Kn){constructor(t){super({name:t.agent.name,description:t.agent.description||""});this[jn]=!0;this.agent=t.agent,this.skipSummarization=t.skipSummarization||!1}_getDeclaration(){let t;if(E(this.agent)&&this.agent.inputSchema?t={name:this.name,description:this.description,parameters:this.agent.inputSchema}:t={name:this.name,description:this.description,parameters:{type:Pe.OBJECT,properties:{request:{type:Pe.STRING}},required:["request"]}},this.apiVariant!=="GEMINI_API"){let n=E(this.agent)&&this.agent.outputSchema;t.response=n?{type:Pe.OBJECT}:{type:Pe.STRING}}return t}async runAsync({args:t,toolContext:n}){var u,d;this.skipSummarization&&(n.actions.skipSummarization=!0);let i={role:"user",parts:[{text:E(this.agent)&&this.agent.inputSchema?JSON.stringify(t):t.request}]},s=new Y({appName:this.agent.name,agent:this.agent,artifactService:new Ie(n),sessionService:new z,memoryService:new V,credentialService:n.invocationContext.credentialService}),a=await s.sessionService.createSession({appName:this.agent.name,userId:"tmp_user",state:n.state.toRecord()}),c;for await(let p of s.runAsync({userId:a.userId,sessionId:a.id,newMessage:i}))p.actions.stateDelta&&n.state.update(p.actions.stateDelta),c=p;if(!((d=(u=c==null?void 0:c.content)==null?void 0:u.parts)!=null&&d.length))return"";let l=E(this.agent)&&this.agent.outputSchema,f=c.content.parts.map(p=>p.text).filter(p=>p).join(`
85
+ `);return l?JSON.parse(f):f}};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 we=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||[],Wt(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(Xt(t.model)){t.config.tools.push({googleSearch:{}});return}throw new Error(`Google search tool is not supported for model ${t.model}`)}}},lr=new we;var Vn=`
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.`,gt=class extends N{constructor(e){super({...e,isLongRunning:!0})}_getDeclaration(){let e=super._getDeclaration();return e.description?e.description+=un:e.description=un.trimStart(),e}};import{Client as bo}from"@modelcontextprotocol/sdk/client/index.js";import{StdioClientTransport as To}from"@modelcontextprotocol/sdk/client/stdio.js";import{StreamableHTTPClientTransport as So}from"@modelcontextprotocol/sdk/client/streamableHttp.js";var Se=class{constructor(e){this.connectionParams=e}async createSession(){let e=new bo({name:"MCPClient",version:"1.0.0"});switch(this.connectionParams.type){case"StdioConnectionParams":await e.connect(new To(this.connectionParams.serverParams));break;case"StreamableHTTPConnectionParams":let t=this.connectionParams.header?{requestInit:{headers:this.connectionParams.header}}:void 0;await e.connect(new So(new URL(this.connectionParams.url),t));break;default:let n=this.connectionParams;break}return e}};import{Type as D}from"@google/genai";import{z as ue}from"zod";var dl=ue.object({type:ue.literal("object"),properties:ue.record(ue.unknown()).optional(),required:ue.string().array().optional()});function Ro(o){switch(o.toLowerCase()){case"text":case"string":return D.STRING;case"number":return D.NUMBER;case"boolean":return D.BOOLEAN;case"integer":return D.INTEGER;case"array":return D.ARRAY;case"object":return D.OBJECT;default:return D.TYPE_UNSPECIFIED}}function ht(o){if(!o)return;function e(t){if(!t.type&&t.anyOf&&Array.isArray(t.anyOf)){let i=t.anyOf.find(s=>{let a=s.type;return a!=="null"&&a!=="NULL"});i&&(t=i)}t.type||(t.properties||t.$ref?t.type="object":t.items&&(t.type="array"));let n=Ro(t.type),r={type:n,description:t.description};if(n===D.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===D.ARRAY&&t.items&&(r.items=e(t.items));return r}return e(o)}var Re=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:ht(this.mcpTool.inputSchema),response:ht(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 fn=class extends le{constructor(e,t=[]){super(t),this.mcpSessionManager=new Se(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 Re(r,this.mcpSessionManager))}async close(){}};import{Storage as Io}from"@google-cloud/storage";import{createPartFromBase64 as Po,createPartFromText as wo}from"@google/genai";var dn=class{constructor(e){this.bucket=new Io().bucket(e)}async saveArtifact(e){let t=await this.listVersions(e),n=t.length>0?Math.max(...t)+1:0,r=this.bucket.file(Ie({...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(Ie({...e,version:t})),[[r],[i]]=await Promise.all([n.getMetadata(),n.download()]);return r.contentType==="text/plain"?wo(i.toString("utf-8")):Po(i.toString("base64"),r.contentType)}async listArtifactKeys(e){let t=[],n=`${e.appName}/${e.userId}/${e.sessionId}/`,r=`${e.appName}/${e.userId}/user/`,[[i],[s]]=await Promise.all([this.bucket.getFiles({prefix:n}),this.bucket.getFiles({prefix:r})]);for(let a of i)t.push(a.name.split("/").pop());for(let a of s)t.push(a.name.split("/").pop());return t.sort((a,c)=>a.localeCompare(c))}async deleteArtifact(e){let t=await this.listVersions(e);await Promise.all(t.map(n=>this.bucket.file(Ie({...e,version:n})).delete()))}async listVersions(e){let t=Ie(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 Ie({appName:o,userId:e,sessionId:t,filename:n,version:r}){return n.startsWith("user:")?`${o}/${e}/user/${n}/${r}`:`${o}/${e}/${t}/${n}/${r}`}import{trace as ko,metrics as Lo}from"@opentelemetry/api";import{logs as _o}from"@opentelemetry/api-logs";import{LoggerProvider as Mo,BatchLogRecordProcessor as Oo}from"@opentelemetry/sdk-logs";import{MeterProvider as Bo,PeriodicExportingMetricReader as No}from"@opentelemetry/sdk-metrics";import{detectResources as Fo}from"@opentelemetry/resources";import{BatchSpanProcessor as Do}from"@opentelemetry/sdk-trace-base";import{NodeTracerProvider as $o}from"@opentelemetry/sdk-trace-node";import{OTLPTraceExporter as Go}from"@opentelemetry/exporter-trace-otlp-http";import{OTLPMetricExporter as qo}from"@opentelemetry/exporter-metrics-otlp-http";import{OTLPLogExporter as Uo}from"@opentelemetry/exporter-logs-otlp-http";function Kl(o=[],e){let t=e||jo(),n=[...o,Vo()],r=n.flatMap(a=>a.spanProcessors||[]),i=n.flatMap(a=>a.metricReaders||[]),s=n.flatMap(a=>a.logRecordProcessors||[]);if(r.length>0){let a=new $o({resource:t,spanProcessors:r});a.register(),ko.setGlobalTracerProvider(a)}if(i.length>0){let a=new Bo({readers:i,resource:t});Lo.setGlobalMeterProvider(a)}if(s.length>0){let a=new Mo({resource:t,processors:s});_o.setGlobalLoggerProvider(a)}}function jo(){return Fo({detectors:[]})}function Ko(){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 Vo(o=Ko()){let{enableTracing:e,enableMetrics:t,enableLogging:n}=o;return{spanProcessors:e?[new Do(new Go)]:[],metricReaders:t?[new No({exporter:new qo})]:[],logRecordProcessors:n?[new Oo(new Uo)]:[]}}import{GoogleAuth as Zo}from"google-auth-library";import{PeriodicExportingMetricReader as zo}from"@opentelemetry/sdk-metrics";import{detectResources as Wo}from"@opentelemetry/resources";import{gcpDetector as Qo}from"@opentelemetry/resource-detector-gcp";import{TraceExporter as Xo}from"@google-cloud/opentelemetry-cloud-trace-exporter";import{BatchSpanProcessor as Yo}from"@opentelemetry/sdk-trace-base";import{MetricExporter as Ho}from"@google-cloud/opentelemetry-cloud-monitoring-exporter";var Jo="Cannot determine GCP Project. OTel GCP Exporters cannot be set up. Please make sure to log into correct GCP Project.";async function er(){try{return await new Zo().getProjectId()||void 0}catch{return}}async function tu(o={}){let{enableTracing:e=!1,enableMetrics:t=!1}=o,n=await er();return n?{spanProcessors:e?[new Yo(new Xo({projectId:n}))]:[],metricReaders:t?[new zo({exporter:new Ho({projectId:n}),exportIntervalMillis:5e3})]:[],logRecordProcessors:[]}:(p.warn(Jo),{})}function nu(){return Wo({detectors:[Qo]})}export{pt as AgentTool,L as BaseAgent,ee as BaseLlm,z as BasePlugin,Ae as BaseSessionService,I as BaseTool,le as BaseToolset,O as BuiltInCodeExecutor,w as CallbackContext,N as FunctionTool,Eo as GOOGLE_SEARCH,dn as GcsArtifactService,te as Gemini,ae as InMemoryArtifactService,Z as InMemoryMemoryService,xe as InMemoryPolicyEngine,dt as InMemoryRunner,W as InMemorySessionService,M as InvocationContext,ne as LLMRegistry,Ne as LiveRequestQueue,v as LlmAgent,It as LogLevel,lt as LoggingPlugin,gt as LongRunningFunctionTool,it as LoopAgent,Se as MCPSessionManager,Re as MCPTool,fn as MCPToolset,st as ParallelAgent,ce as PluginManager,cn as PolicyOutcome,an as REQUEST_CONFIRMATION_FUNCTION_CALL_NAME,Q as Runner,ft as SecurityPlugin,ct as SequentialAgent,C as State,Xe as StreamingMode,U as ToolConfirmation,G as ToolContext,y as createEvent,_ as createEventActions,Ee as createSession,bn as functionsExportedForTestingOnly,vo as getAskUserConfirmationFunctionCalls,b as getFunctionCalls,P as getFunctionResponses,tu as getGcpExporters,nu as getGcpResource,At as hasTrailingCodeExecutionResult,mn as isBaseAgent,Ke as isBaseLlm,X as isFinalResponse,re as isGemini2OrAbove,Kl as maybeSetOtelProviders,vn as setLogLevel,pn as stringifyContent,Ue as version,Ce as 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.`,_t=class extends F{constructor(e){super({...e,isLongRunning:!0})}_getDeclaration(){let e=super._getDeclaration();return e.description?e.description+=Vn:e.description=Vn.trimStart(),e}};import{Client as ur}from"@modelcontextprotocol/sdk/client/index.js";import{StdioClientTransport as fr}from"@modelcontextprotocol/sdk/client/stdio.js";import{StreamableHTTPClientTransport as dr}from"@modelcontextprotocol/sdk/client/streamableHttp.js";var ke=class{constructor(e){this.connectionParams=e}async createSession(){let e=new ur({name:"MCPClient",version:"1.0.0"});switch(this.connectionParams.type){case"StdioConnectionParams":await e.connect(new fr(this.connectionParams.serverParams));break;case"StreamableHTTPConnectionParams":let t=this.connectionParams.header?{requestInit:{headers:this.connectionParams.header}}:void 0;await e.connect(new dr(new URL(this.connectionParams.url),t));break;default:let n=this.connectionParams;break}return e}};import{Type as M}from"@google/genai";import{z as de}from"zod";var lu=de.object({type:de.literal("object"),properties:de.record(de.unknown()).optional(),required:de.string().array().optional()});function pr(o){if(!o)return M.TYPE_UNSPECIFIED;switch(o.toLowerCase()){case"text":case"string":return M.STRING;case"number":return M.NUMBER;case"boolean":return M.BOOLEAN;case"integer":return M.INTEGER;case"array":return M.ARRAY;case"object":return M.OBJECT;default:return M.TYPE_UNSPECIFIED}}function Ot(o){if(!o)return;function e(t){if(!t.type&&t.anyOf&&Array.isArray(t.anyOf)){let i=t.anyOf.find(s=>{let a=s.type;return a!=="null"&&a!=="NULL"});i&&(t=i)}t.type||(t.properties||t.$ref?t.type="object":t.items&&(t.type="array"));let n=pr(t.type),r={type:n,description:t.description};if(n===M.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===M.ARRAY&&t.items&&(r.items=e(t.items));return r}return e(o)}var Le=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:Ot(this.mcpTool.inputSchema),response:Ot(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 Zn=class extends fe{constructor(e,t=[]){super(t),this.mcpSessionManager=new ke(e)}async getTools(e){let n=await(await this.mcpSessionManager.createSession()).listTools();m.debug(`number of tools: ${n.tools.length}`);for(let r of n.tools)m.debug(`tool: ${r.name}`);return n.tools.map(r=>new Le(r,this.mcpSessionManager))}async close(){}};import{Storage as mr}from"@google-cloud/storage";import{createPartFromBase64 as gr,createPartFromText as hr}from"@google/genai";var zn=class{constructor(e){this.bucket=new mr().bucket(e)}async saveArtifact(e){let t=await this.listVersions(e),n=t.length>0?Math.max(...t)+1:0,r=this.bucket.file(_e({...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(_e({...e,version:t})),[[r],[i]]=await Promise.all([n.getMetadata(),n.download()]);return r.contentType==="text/plain"?hr(i.toString("utf-8")):gr(i.toString("base64"),r.contentType)}async listArtifactKeys(e){let t=[],n=`${e.appName}/${e.userId}/${e.sessionId}/`,r=`${e.appName}/${e.userId}/user/`,[[i],[s]]=await Promise.all([this.bucket.getFiles({prefix:n}),this.bucket.getFiles({prefix:r})]);for(let a of i)t.push(a.name.split("/").pop());for(let a of s)t.push(a.name.split("/").pop());return t.sort((a,c)=>a.localeCompare(c))}async deleteArtifact(e){let t=await this.listVersions(e);await Promise.all(t.map(n=>this.bucket.file(_e({...e,version:n})).delete()))}async listVersions(e){let t=_e(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 _e({appName:o,userId:e,sessionId:t,filename:n,version:r}){return n.startsWith("user:")?`${o}/${e}/user/${n}/${r}`:`${o}/${e}/${t}/${n}/${r}`}import{trace as Cr,metrics as vr}from"@opentelemetry/api";import{logs as yr}from"@opentelemetry/api-logs";import{LoggerProvider as xr,BatchLogRecordProcessor as Ar}from"@opentelemetry/sdk-logs";import{MeterProvider as Er,PeriodicExportingMetricReader as Tr}from"@opentelemetry/sdk-metrics";import{detectResources as br}from"@opentelemetry/resources";import{BatchSpanProcessor as Sr}from"@opentelemetry/sdk-trace-base";import{NodeTracerProvider as Rr}from"@opentelemetry/sdk-trace-node";import{OTLPTraceExporter as Ir}from"@opentelemetry/exporter-trace-otlp-http";import{OTLPMetricExporter as Pr}from"@opentelemetry/exporter-metrics-otlp-http";import{OTLPLogExporter as wr}from"@opentelemetry/exporter-logs-otlp-http";function qu(o=[],e){let t=e||kr(),n=[...o,_r()],r=n.flatMap(a=>a.spanProcessors||[]),i=n.flatMap(a=>a.metricReaders||[]),s=n.flatMap(a=>a.logRecordProcessors||[]);if(r.length>0){let a=new Rr({resource:t,spanProcessors:r});a.register(),Cr.setGlobalTracerProvider(a)}if(i.length>0){let a=new Er({readers:i,resource:t});vr.setGlobalMeterProvider(a)}if(s.length>0){let a=new xr({resource:t,processors:s});yr.setGlobalLoggerProvider(a)}}function kr(){return br({detectors:[]})}function Lr(){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 _r(o=Lr()){let{enableTracing:e,enableMetrics:t,enableLogging:n}=o;return{spanProcessors:e?[new Sr(new Ir)]:[],metricReaders:t?[new Tr({exporter:new Pr})]:[],logRecordProcessors:n?[new Ar(new wr)]:[]}}import{GoogleAuth as Or}from"google-auth-library";import{PeriodicExportingMetricReader as Mr}from"@opentelemetry/sdk-metrics";import{detectResources as Br}from"@opentelemetry/resources";import{gcpDetector as Nr}from"@opentelemetry/resource-detector-gcp";import{TraceExporter as Fr}from"@google-cloud/opentelemetry-cloud-trace-exporter";import{BatchSpanProcessor as Dr}from"@opentelemetry/sdk-trace-base";import{MetricExporter as Gr}from"@google-cloud/opentelemetry-cloud-monitoring-exporter";var $r="Cannot determine GCP Project. OTel GCP Exporters cannot be set up. Please make sure to log into correct GCP Project.";async function qr(){try{return await new Or().getProjectId()||void 0}catch{return}}async function Wu(o={}){let{enableTracing:e=!1,enableMetrics:t=!1}=o,n=await qr();return n?{spanProcessors:e?[new Dr(new Fr({projectId:n}))]:[],metricReaders:t?[new Mr({exporter:new Gr({projectId:n}),exportIntervalMillis:5e3})]:[],logRecordProcessors:[]}:(m.warn($r),{})}function Ju(){return Br({detectors:[Nr]})}export{Oe as ActiveStreamingTool,Lt as AgentTool,Nn as AuthCredentialTypes,L as BaseAgent,oe as BaseCodeExecutor,St as BaseExampleProvider,J as BaseLlm,O as BaseLlmRequestProcessor,Fe as BaseLlmResponseProcessor,Z as BasePlugin,Se as BaseSessionService,I as BaseTool,fe as BaseToolset,ie as BuiltInCodeExecutor,w as CallbackContext,F as FunctionTool,lr as GOOGLE_SEARCH,zn as GcsArtifactService,ee as Gemini,ye as GoogleLLMVariant,we as GoogleSearchTool,le as InMemoryArtifactService,V as InMemoryMemoryService,be as InMemoryPolicyEngine,wt as InMemoryRunner,z as InMemorySessionService,B as InvocationContext,te as LLMRegistry,je as LiveRequestQueue,K as LlmAgent,Kt as LogLevel,Rt as LoggingPlugin,_t as LongRunningFunctionTool,vt as LoopAgent,ke as MCPSessionManager,Le as MCPTool,Zn as MCPToolset,xt as ParallelAgent,ue as PluginManager,qn as PolicyOutcome,$n as REQUEST_CONFIRMATION_FUNCTION_CALL_NAME,R as ReadonlyContext,Y as Runner,Pt as SecurityPlugin,Tt as SequentialAgent,v as State,at as StreamingMode,$ as ToolConfirmation,G as ToolContext,y as createEvent,_ as createEventActions,Re as createSession,ro as functionsExportedForTestingOnly,rr as getAskUserConfirmationFunctionCalls,T as getFunctionCalls,P as getFunctionResponses,Wu as getGcpExporters,Ju as getGcpResource,Dt as hasTrailingCodeExecutionResult,cr as isAgentTool,Hn as isBaseAgent,tr as isBaseExampleProvider,Je as isBaseLlm,Ao as isBaseTool,H as isFinalResponse,Ro as isFunctionTool,re as isGemini2OrAbove,E as isLlmAgent,Ho as isLoopAgent,Qo as isParallelAgent,Jo as isSequentialAgent,qu as maybeSetOtelProviders,Jn as setLogLevel,Yn as stringifyContent,Xe as version,Ae as zodObjectToSchema};
88
88
  /**
89
89
  * @license
90
90
  * Copyright 2025 Google LLC