@google/adk 0.1.1 → 0.1.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/agents/invocation_context.js +1 -3
- package/dist/cjs/agents/llm_agent.js +7 -2
- package/dist/cjs/agents/run_config.js +13 -17
- package/dist/cjs/common.js +0 -2
- package/dist/cjs/index.js +5 -5
- package/dist/cjs/index.js.map +4 -4
- package/dist/cjs/runner/runner.js +2 -1
- package/dist/esm/agents/invocation_context.js +1 -3
- package/dist/esm/agents/llm_agent.js +7 -2
- package/dist/esm/agents/run_config.js +11 -15
- package/dist/esm/common.js +1 -2
- package/dist/esm/index.js +5 -5
- package/dist/esm/index.js.map +4 -4
- package/dist/esm/runner/runner.js +3 -2
- package/dist/types/agents/run_config.d.ts +19 -7
- package/dist/types/common.d.ts +2 -1
- package/dist/types/models/base_llm.d.ts +2 -1
- package/dist/web/agents/invocation_context.js +1 -3
- package/dist/web/agents/llm_agent.js +7 -2
- package/dist/web/agents/run_config.js +26 -15
- package/dist/web/common.js +1 -2
- package/dist/web/index.js +1 -1
- package/dist/web/index.js.map +4 -4
- package/dist/web/runner/runner.js +3 -2
- package/package.json +1 -1
|
@@ -69,9 +69,10 @@ class Runner {
|
|
|
69
69
|
sessionId,
|
|
70
70
|
newMessage,
|
|
71
71
|
stateDelta,
|
|
72
|
-
runConfig
|
|
72
|
+
runConfig
|
|
73
73
|
}) {
|
|
74
74
|
var _a;
|
|
75
|
+
runConfig = (0, import_run_config.createRunConfig)(runConfig);
|
|
75
76
|
const span = import_api.trace.getTracer("gcp.vertex.agent").startSpan("invocation");
|
|
76
77
|
try {
|
|
77
78
|
const session = await this.sessionService.getSession({ appName: this.appName, userId, sessionId });
|
|
@@ -17,9 +17,7 @@ class InvocationCostManager {
|
|
|
17
17
|
incrementAndEnforceLlmCallsLimit(runConfig) {
|
|
18
18
|
this.numberOfLlmCalls++;
|
|
19
19
|
if (runConfig && runConfig.maxLlmCalls > 0 && this.numberOfLlmCalls > runConfig.maxLlmCalls) {
|
|
20
|
-
throw new Error(
|
|
21
|
-
`Max number of llm calls limit of ${runConfig.maxLlmCalls} exceeded`
|
|
22
|
-
);
|
|
20
|
+
throw new Error(`Max number of llm calls limit of ${runConfig.maxLlmCalls} exceeded`);
|
|
23
21
|
}
|
|
24
22
|
}
|
|
25
23
|
}
|
|
@@ -20,6 +20,7 @@ import { getContents, getCurrentTurnContents } from "./content_processor_utils.j
|
|
|
20
20
|
import { generateAuthEvent, generateRequestConfirmationEvent, getLongRunningFunctionCalls, handleFunctionCallList, handleFunctionCallsAsync, populateClientFunctionCallId, REQUEST_CONFIRMATION_FUNCTION_CALL_NAME } from "./functions.js";
|
|
21
21
|
import { injectSessionState } from "./instructions.js";
|
|
22
22
|
import { ReadonlyContext } from "./readonly_context.js";
|
|
23
|
+
import { StreamingMode } from "./run_config.js";
|
|
23
24
|
const ADK_AGENT_NAME_LABEL_KEY = "adk_agent_name";
|
|
24
25
|
async function convertToolUnionToTools(toolUnion, context) {
|
|
25
26
|
if (toolUnion instanceof BaseTool) {
|
|
@@ -713,7 +714,7 @@ class LlmAgent extends BaseAgent {
|
|
|
713
714
|
return agentToRun;
|
|
714
715
|
}
|
|
715
716
|
async *callLlmAsync(invocationContext, llmRequest, modelResponseEvent) {
|
|
716
|
-
var _a, _b, _c, _d;
|
|
717
|
+
var _a, _b, _c, _d, _e;
|
|
717
718
|
const beforeModelResponse = await this.handleBeforeModelCallback(
|
|
718
719
|
invocationContext,
|
|
719
720
|
llmRequest,
|
|
@@ -733,7 +734,11 @@ class LlmAgent extends BaseAgent {
|
|
|
733
734
|
throw new Error("CFC is not yet supported in callLlmAsync");
|
|
734
735
|
} else {
|
|
735
736
|
invocationContext.incrementLlmCallCount();
|
|
736
|
-
const responsesGenerator = llm.generateContentAsync(
|
|
737
|
+
const responsesGenerator = llm.generateContentAsync(
|
|
738
|
+
llmRequest,
|
|
739
|
+
/* stream= */
|
|
740
|
+
((_e = invocationContext.runConfig) == null ? void 0 : _e.streamingMode) === StreamingMode.SSE
|
|
741
|
+
);
|
|
737
742
|
for await (const llmResponse of this.runAndHandleError(
|
|
738
743
|
responsesGenerator,
|
|
739
744
|
invocationContext,
|
|
@@ -10,19 +10,15 @@ var StreamingMode = /* @__PURE__ */ ((StreamingMode2) => {
|
|
|
10
10
|
StreamingMode2["BIDI"] = "bidi";
|
|
11
11
|
return StreamingMode2;
|
|
12
12
|
})(StreamingMode || {});
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
this.enableAffectiveDialog = params.enableAffectiveDialog || false;
|
|
23
|
-
this.realtimeInputConfig = params.realtimeInputConfig;
|
|
24
|
-
this.maxLlmCalls = validateMaxLlmCalls(params.maxLlmCalls || 500);
|
|
25
|
-
}
|
|
13
|
+
function createRunConfig(params = {}) {
|
|
14
|
+
return {
|
|
15
|
+
saveInputBlobsAsArtifacts: false,
|
|
16
|
+
supportCfc: false,
|
|
17
|
+
enableAffectiveDialog: false,
|
|
18
|
+
streamingMode: "none" /* NONE */,
|
|
19
|
+
maxLlmCalls: validateMaxLlmCalls(params.maxLlmCalls || 500),
|
|
20
|
+
...params
|
|
21
|
+
};
|
|
26
22
|
}
|
|
27
23
|
function validateMaxLlmCalls(value) {
|
|
28
24
|
if (value > Number.MAX_SAFE_INTEGER) {
|
|
@@ -38,6 +34,6 @@ function validateMaxLlmCalls(value) {
|
|
|
38
34
|
return value;
|
|
39
35
|
}
|
|
40
36
|
export {
|
|
41
|
-
|
|
42
|
-
|
|
37
|
+
StreamingMode,
|
|
38
|
+
createRunConfig
|
|
43
39
|
};
|
package/dist/esm/common.js
CHANGED
|
@@ -11,7 +11,7 @@ import { LiveRequestQueue } from "./agents/live_request_queue.js";
|
|
|
11
11
|
import { LlmAgent } from "./agents/llm_agent.js";
|
|
12
12
|
import { LoopAgent } from "./agents/loop_agent.js";
|
|
13
13
|
import { ParallelAgent } from "./agents/parallel_agent.js";
|
|
14
|
-
import {
|
|
14
|
+
import { StreamingMode } from "./agents/run_config.js";
|
|
15
15
|
import { SequentialAgent } from "./agents/sequential_agent.js";
|
|
16
16
|
import { InMemoryArtifactService } from "./artifacts/in_memory_artifact_service.js";
|
|
17
17
|
import { createEvent, getFunctionCalls, getFunctionResponses, hasTrailingCodeExecutionResult, isFinalResponse, stringifyContent } from "./events/event.js";
|
|
@@ -67,7 +67,6 @@ export {
|
|
|
67
67
|
PluginManager,
|
|
68
68
|
PolicyOutcome,
|
|
69
69
|
REQUEST_CONFIRMATION_FUNCTION_CALL_NAME,
|
|
70
|
-
RunConfig,
|
|
71
70
|
Runner,
|
|
72
71
|
SecurityPlugin,
|
|
73
72
|
SequentialAgent,
|
package/dist/esm/index.js
CHANGED
|
@@ -4,11 +4,11 @@
|
|
|
4
4
|
* SPDX-License-Identifier: Apache-2.0
|
|
5
5
|
*/
|
|
6
6
|
|
|
7
|
-
import{trace as tt}from"@opentelemetry/api";function q(o={}){return{stateDelta:{},artifactDelta:{},requestedAuthConfigs:{},requestedToolConfirmations:{},...o}}function Xe(o,e){let t=q();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 b(o={}){return{...o,id:o.id||Ae(),invocationId:o.invocationId||"",author:o.author,actions:o.actions||q(),longRunningToolIds:o.longRunningToolIds||[],branch:o.branch,timestamp:o.timestamp||Date.now()}}function V(o){return o.actions.skipSummarization||o.longRunningToolIds&&o.longRunningToolIds.length>0?!0:x(o).length===0&&I(o).length===0&&!o.partial&&!Je(o)}function x(o){let e=[];if(o.content&&o.content.parts)for(let t of o.content.parts)t.functionCall&&e.push(t.functionCall);return e}function I(o){let e=[];if(o.content&&o.content.parts)for(let t of o.content.parts)t.functionResponse&&e.push(t.functionResponse);return e}function Je(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 Bt(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 Ye="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";function Ae(){let o="";for(let e=0;e<8;e++)o+=Ye[Math.floor(Math.random()*Ye.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 S=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 S{constructor({invocationContext:e,eventActions:t}){super(e),this.eventActions=t||q(),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 be(){return typeof window<"u"}var se="xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx";function z(){let o="";for(let e=0;e<se.length;e++){let t=Math.random()*16|0;se[e]==="x"?o+=t.toString(16):se[e]==="y"?o+=(t&3|8).toString(16):o+=se[e]}return o}var Te=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 Te;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 et(){return`e-${z()}`}var L=class{constructor(e){this.name=_t(e.name),this.description=e.description,this.parentAgent=e.parentAgent,this.subAgents=e.subAgents||[],this.rootAgent=Ot(this),this.beforeAgentCallback=nt(e.beforeAgentCallback),this.afterAgentCallback=nt(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,b({invocationId:e.invocationId,author:this.name,branch:e.branch,content:r,actions:t.eventActions})}if(t.state.hasDelta())return b({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 b({invocationId:e.invocationId,author:this.name,branch:e.branch,content:r,actions:t.eventActions})}if(t.state.hasDelta())return b({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 _t(o){if(!Nt(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 Nt(o){return/^[\p{ID_Start}$_][\p{ID_Continue}$_]*$/u.test(o)}function Ot(o){for(;o.parentAgent;)o=o.parentAgent;return o}function nt(o){return o?Array.isArray(o)?o:[o]:[]}var X=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 G=class{constructor({hint:e,confirmed:t,payload:n}){this.hint=e!=null?e:"",this.confirmed=t,this.payload=n}};var F=class extends w{constructor({invocationContext:e,eventActions:t,functionCallId:n,toolConfirmation:r}){super({invocationContext:e,eventActions:t}),this.functionCallId=n,this.toolConfirmation=r}get actions(){return this.eventActions}requestCredential(e){if(!this.functionCallId)throw new Error("functionCallId is not set.");let t=new X(e);this.eventActions.requestedAuthConfigs[this.functionCallId]=t.generateAuthRequest()}getAuthResponse(e){return new X(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 G({hint:e,confirmed:!1,payload:t})}};var ot=(r=>(r[r.DEBUG=0]="DEBUG",r[r.INFO=1]="INFO",r[r.WARN=2]="WARN",r[r.ERROR=3]="ERROR",r))(ot||{}),W=1;function Ft(o){W=o}var xe=class{log(e,...t){if(!(e<W))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){W>0||console.debug(ae(0),...e)}info(...e){W>1||console.info(ae(1),...e)}warn(...e){W>2||console.warn(ae(2),...e)}error(...e){W>3||console.error(ae(3),...e)}},$t={0:"DEBUG",1:"INFO",2:"WARN",3:"ERROR"},Dt={0:"\x1B[34m",1:"\x1B[32m",2:"\x1B[33m",3:"\x1B[31m"},qt="\x1B[0m";function ae(o){return`${Dt[o]}[ADK ${$t[o]}]:${qt}`}var m=new xe;var Ee="adk-",le="adk_request_credential",Q="adk_request_confirmation",Gt={handleFunctionCallList:ce};function Se(){return`${Ee}${z()}`}function rt(o){let e=x(o);if(e)for(let t of e)t.id||(t.id=Se())}function it(o){if(o&&o.parts)for(let e of o.parts)e.functionCall&&e.functionCall.id&&e.functionCall.id.startsWith(Ee)&&(e.functionCall.id=void 0),e.functionResponse&&e.functionResponse.id&&e.functionResponse.id.startsWith(Ee)&&(e.functionResponse.id=void 0)}function st(o,e){let t=new Set;for(let n of o)n.name&&n.name in e&&e[n.name].isLongRunning&&n.id&&t.add(n.id);return t}function at(o,e){var r;if(!((r=e.actions)!=null&&r.requestedAuthConfigs))return;let t=[],n=new Set;for(let[i,s]of Object.entries(e.actions.requestedAuthConfigs)){let a={name:le,args:{function_call_id:i,auth_config:s},id:Se()};n.add(a.id),t.push({functionCall:a})}return b({invocationId:o.invocationId,author:o.agent.name,branch:o.branch,content:{parts:t,role:e.content.role},longRunningToolIds:Array.from(n)})}function lt({invocationContext:o,functionCallEvent:e,functionResponseEvent:t}){var s,a;if(!((s=t.actions)!=null&&s.requestedToolConfirmations))return;let n=[],r=new Set,i=x(e);for(let[l,c]of Object.entries(t.actions.requestedToolConfirmations)){let d=(a=i.find(f=>f.id===l))!=null?a:void 0;if(!d)continue;let u={name:Q,args:{originalFunctionCall:d,toolConfirmation:c},id:Se()};r.add(u.id),n.push({functionCall:u})}return b({invocationId:o.invocationId,author:o.agent.name,branch:o.branch,content:{parts:n,role:t.content.role},longRunningToolIds:Array.from(r)})}async function Ut(o,e,t){return m.debug(`callToolAsync ${o.name}`),await o.runAsync({args:e,toolContext:t})}function jt(o,e,t,n){let r=e;(typeof e!="object"||e==null)&&(r={result:e});let s={role:"user",parts:[{functionResponse:{name:o.name,response:r,id:t.functionCallId}}]};return b({invocationId:n.invocationId,author:n.agent.name,content:s,actions:t.actions,branch:n.branch})}async function ct({invocationContext:o,functionCallEvent:e,toolsDict:t,beforeToolCallbacks:n,afterToolCallbacks:r,filters:i,toolConfirmationDict:s}){let a=x(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 d;let a=[],l=e.filter(u=>!i||u.id&&i.has(u.id));for(let u of l){let f;s&&u.id&&(f=s[u.id]);let{tool:T,toolContext:v}=Kt({invocationContext:o,functionCall:u,toolsDict:t,toolConfirmation:f});m.debug(`execute_tool ${T.name}`);let p=(d=u.args)!=null?d:{},g=null;if(g=await o.pluginManager.runBeforeToolCallback({tool:T,toolArgs:p,toolContext:v}),g==null){for(let O of n)if(g=await O({tool:T,args:p,context:v}),g)break}if(g==null)try{g=await Ut(T,p,v)}catch(O){if(O instanceof Error){let He=await o.pluginManager.runOnToolErrorCallback({tool:T,toolArgs:p,toolContext:v,error:O});He&&(g=He)}else throw m.error("Unknown error on tool execution type",O),O}let h=await o.pluginManager.runAfterToolCallback({tool:T,toolArgs:p,toolContext:v,result:g});if(h==null){for(let O of r)if(h=await O({tool:T,args:p,context:v,response:g}),h)break}if(h!=null&&(g=h),T.isLongRunning&&!g)continue;let P=jt(T,g,v,o);m.debug("traceToolCall",{tool:T.name,args:p,functionResponseEvent:P.id}),a.push(P)}if(!a.length)return null;let c=Zt(a);return a.length>1&&(m.debug("execute_tool (merged)"),m.debug("traceMergedToolCalls",{responseEventId:c.id,functionResponseEvent:c.id})),c}function Kt({invocationContext:o,functionCall:e,toolsDict:t,toolConfirmation:n}){if(!e.name||!(e.name in t))throw new Error(`Function ${e.name} is not found in the toolsDict.`);let r=new F({invocationContext:o,functionCallId:e.id||void 0,toolConfirmation:n});return{tool:t[e.name],toolContext:r}}function Zt(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=Xe(n);return b({author:t.author,branch:t.branch,content:{role:"user",parts:e},actions:r,timestamp:t.timestamp})}var Re=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{z as At}from"zod";var $=class{constructor(e){this.model=e}maybeAppendUserContent(e){var t;e.contents.length===0&&e.contents.push({role:"user",parts:[{text:"Handle the requests as specified in the System Instruction."}]}),((t=e.contents[e.contents.length-1])==null?void 0:t.role)!=="user"&&e.contents.push({role:"user",parts:[{text:"Continue processing previous requests as instructed. Exit or provide a summary if no more outputs are needed."}]})}};$.supportedModels=[];function Y(o,e){o.config||(o.config={});let t=e.join(`
|
|
7
|
+
import{trace as tt}from"@opentelemetry/api";function q(o={}){return{stateDelta:{},artifactDelta:{},requestedAuthConfigs:{},requestedToolConfirmations:{},...o}}function Xe(o,e){let t=q();e&&Object.assign(t,e);for(let n of o)n&&(n.stateDelta&&Object.assign(t.stateDelta,n.stateDelta),n.artifactDelta&&Object.assign(t.artifactDelta,n.artifactDelta),n.requestedAuthConfigs&&Object.assign(t.requestedAuthConfigs,n.requestedAuthConfigs),n.requestedToolConfirmations&&Object.assign(t.requestedToolConfirmations,n.requestedToolConfirmations),n.skipSummarization!==void 0&&(t.skipSummarization=n.skipSummarization),n.transferToAgent!==void 0&&(t.transferToAgent=n.transferToAgent),n.escalate!==void 0&&(t.escalate=n.escalate));return t}function T(o={}){return{...o,id:o.id||ye(),invocationId:o.invocationId||"",author:o.author,actions:o.actions||q(),longRunningToolIds:o.longRunningToolIds||[],branch:o.branch,timestamp:o.timestamp||Date.now()}}function V(o){return o.actions.skipSummarization||o.longRunningToolIds&&o.longRunningToolIds.length>0?!0:x(o).length===0&&I(o).length===0&&!o.partial&&!Je(o)}function x(o){let e=[];if(o.content&&o.content.parts)for(let t of o.content.parts)t.functionCall&&e.push(t.functionCall);return e}function I(o){let e=[];if(o.content&&o.content.parts)for(let t of o.content.parts)t.functionResponse&&e.push(t.functionResponse);return e}function Je(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 Bt(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 Ye="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";function ye(){let o="";for(let e=0;e<8;e++)o+=Ye[Math.floor(Math.random()*Ye.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 S=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 S{constructor({invocationContext:e,eventActions:t}){super(e),this.eventActions=t||q(),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 Ae(){return typeof window<"u"}var ie="xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx";function z(){let o="";for(let e=0;e<ie.length;e++){let t=Math.random()*16|0;ie[e]==="x"?o+=t.toString(16):ie[e]==="y"?o+=(t&3|8).toString(16):o+=ie[e]}return o}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`)}},M=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 et(){return`e-${z()}`}var L=class{constructor(e){this.name=_t(e.name),this.description=e.description,this.parentAgent=e.parentAgent,this.subAgents=e.subAgents||[],this.rootAgent=Ot(this),this.beforeAgentCallback=nt(e.beforeAgentCallback),this.afterAgentCallback=nt(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,T({invocationId:e.invocationId,author:this.name,branch:e.branch,content:r,actions:t.eventActions})}if(t.state.hasDelta())return T({invocationId:e.invocationId,author:this.name,branch:e.branch,actions:t.eventActions})}async handleAfterAgentCallback(e){if(this.afterAgentCallback.length===0)return;let t=new w({invocationContext:e});for(let n of this.afterAgentCallback){let r=await n(t);if(r)return T({invocationId:e.invocationId,author:this.name,branch:e.branch,content:r,actions:t.eventActions})}if(t.state.hasDelta())return T({invocationId:e.invocationId,author:this.name,branch:e.branch,actions:t.eventActions})}setParentAgentForSubAgents(){for(let e of this.subAgents){if(e.parentAgent)throw new Error(`Agent "${e.name}" already has a parent agent, current parent: "${e.parentAgent.name}", trying to add: "${this.name}"`);e.parentAgent=this}}};function _t(o){if(!Nt(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 Nt(o){return/^[\p{ID_Start}$_][\p{ID_Continue}$_]*$/u.test(o)}function Ot(o){for(;o.parentAgent;)o=o.parentAgent;return o}function nt(o){return o?Array.isArray(o)?o:[o]:[]}var X=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 G=class{constructor({hint:e,confirmed:t,payload:n}){this.hint=e!=null?e:"",this.confirmed=t,this.payload=n}};var F=class extends w{constructor({invocationContext:e,eventActions:t,functionCallId:n,toolConfirmation:r}){super({invocationContext:e,eventActions:t}),this.functionCallId=n,this.toolConfirmation=r}get actions(){return this.eventActions}requestCredential(e){if(!this.functionCallId)throw new Error("functionCallId is not set.");let t=new X(e);this.eventActions.requestedAuthConfigs[this.functionCallId]=t.generateAuthRequest()}getAuthResponse(e){return new X(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 G({hint:e,confirmed:!1,payload:t})}};var ot=(r=>(r[r.DEBUG=0]="DEBUG",r[r.INFO=1]="INFO",r[r.WARN=2]="WARN",r[r.ERROR=3]="ERROR",r))(ot||{}),W=1;function Ft(o){W=o}var Te=class{log(e,...t){if(!(e<W))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){W>0||console.debug(se(0),...e)}info(...e){W>1||console.info(se(1),...e)}warn(...e){W>2||console.warn(se(2),...e)}error(...e){W>3||console.error(se(3),...e)}},$t={0:"DEBUG",1:"INFO",2:"WARN",3:"ERROR"},Dt={0:"\x1B[34m",1:"\x1B[32m",2:"\x1B[33m",3:"\x1B[31m"},qt="\x1B[0m";function se(o){return`${Dt[o]}[ADK ${$t[o]}]:${qt}`}var m=new Te;var xe="adk-",ae="adk_request_credential",Q="adk_request_confirmation",Gt={handleFunctionCallList:le};function Ee(){return`${xe}${z()}`}function rt(o){let e=x(o);if(e)for(let t of e)t.id||(t.id=Ee())}function it(o){if(o&&o.parts)for(let e of o.parts)e.functionCall&&e.functionCall.id&&e.functionCall.id.startsWith(xe)&&(e.functionCall.id=void 0),e.functionResponse&&e.functionResponse.id&&e.functionResponse.id.startsWith(xe)&&(e.functionResponse.id=void 0)}function st(o,e){let t=new Set;for(let n of o)n.name&&n.name in e&&e[n.name].isLongRunning&&n.id&&t.add(n.id);return t}function at(o,e){var r;if(!((r=e.actions)!=null&&r.requestedAuthConfigs))return;let t=[],n=new Set;for(let[i,s]of Object.entries(e.actions.requestedAuthConfigs)){let a={name:ae,args:{function_call_id:i,auth_config:s},id:Ee()};n.add(a.id),t.push({functionCall:a})}return T({invocationId:o.invocationId,author:o.agent.name,branch:o.branch,content:{parts:t,role:e.content.role},longRunningToolIds:Array.from(n)})}function lt({invocationContext:o,functionCallEvent:e,functionResponseEvent:t}){var s,a;if(!((s=t.actions)!=null&&s.requestedToolConfirmations))return;let n=[],r=new Set,i=x(e);for(let[l,c]of Object.entries(t.actions.requestedToolConfirmations)){let f=(a=i.find(d=>d.id===l))!=null?a:void 0;if(!f)continue;let u={name:Q,args:{originalFunctionCall:f,toolConfirmation:c},id:Ee()};r.add(u.id),n.push({functionCall:u})}return T({invocationId:o.invocationId,author:o.agent.name,branch:o.branch,content:{parts:n,role:t.content.role},longRunningToolIds:Array.from(r)})}async function Ut(o,e,t){return m.debug(`callToolAsync ${o.name}`),await o.runAsync({args:e,toolContext:t})}function jt(o,e,t,n){let r=e;(typeof e!="object"||e==null)&&(r={result:e});let s={role:"user",parts:[{functionResponse:{name:o.name,response:r,id:t.functionCallId}}]};return T({invocationId:n.invocationId,author:n.agent.name,content:s,actions:t.actions,branch:n.branch})}async function ct({invocationContext:o,functionCallEvent:e,toolsDict:t,beforeToolCallbacks:n,afterToolCallbacks:r,filters:i,toolConfirmationDict:s}){let a=x(e);return await le({invocationContext:o,functionCalls:a,toolsDict:t,beforeToolCallbacks:n,afterToolCallbacks:r,filters:i,toolConfirmationDict:s})}async function le({invocationContext:o,functionCalls:e,toolsDict:t,beforeToolCallbacks:n,afterToolCallbacks:r,filters:i,toolConfirmationDict:s}){var f;let a=[],l=e.filter(u=>!i||u.id&&i.has(u.id));for(let u of l){let d;s&&u.id&&(d=s[u.id]);let{tool:h,toolContext:y}=Kt({invocationContext:o,functionCall:u,toolsDict:t,toolConfirmation:d});m.debug(`execute_tool ${h.name}`);let p=(f=u.args)!=null?f:{},g=null;if(g=await o.pluginManager.runBeforeToolCallback({tool:h,toolArgs:p,toolContext:y}),g==null){for(let O of n)if(g=await O({tool:h,args:p,context:y}),g)break}if(g==null)try{g=await Ut(h,p,y)}catch(O){if(O instanceof Error){let He=await o.pluginManager.runOnToolErrorCallback({tool:h,toolArgs:p,toolContext:y,error:O});He&&(g=He)}else throw m.error("Unknown error on tool execution type",O),O}let C=await o.pluginManager.runAfterToolCallback({tool:h,toolArgs:p,toolContext:y,result:g});if(C==null){for(let O of r)if(C=await O({tool:h,args:p,context:y,response:g}),C)break}if(C!=null&&(g=C),h.isLongRunning&&!g)continue;let P=jt(h,g,y,o);m.debug("traceToolCall",{tool:h.name,args:p,functionResponseEvent:P.id}),a.push(P)}if(!a.length)return null;let c=Zt(a);return a.length>1&&(m.debug("execute_tool (merged)"),m.debug("traceMergedToolCalls",{responseEventId:c.id,functionResponseEvent:c.id})),c}function Kt({invocationContext:o,functionCall:e,toolsDict:t,toolConfirmation:n}){if(!e.name||!(e.name in t))throw new Error(`Function ${e.name} is not found in the toolsDict.`);let r=new F({invocationContext:o,functionCallId:e.id||void 0,toolConfirmation:n});return{tool:t[e.name],toolContext:r}}function Zt(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=Xe(n);return T({author:t.author,branch:t.branch,content:{role:"user",parts:e},actions:r,timestamp:t.timestamp})}var Se=class{constructor(){this.queue=[];this.resolveFnFifoQueue=[];this.isClosed=!1}send(e){if(this.isClosed)throw new Error("Cannot send to a closed queue.");this.resolveFnFifoQueue.length>0?this.resolveFnFifoQueue.shift()(e):this.queue.push(e)}async get(){return this.queue.length>0?this.queue.shift():this.isClosed?{close:!0}:new Promise(e=>{this.resolveFnFifoQueue.push(e)})}close(){if(this.isClosed)return;for(this.isClosed=!0;this.resolveFnFifoQueue.length>0&&this.queue.length>0;){let t=this.resolveFnFifoQueue.shift(),n=this.queue.shift();t(n)}let e={close:!0};for(;this.resolveFnFifoQueue.length>0;)this.resolveFnFifoQueue.shift()(e)}sendContent(e){this.send({content:e})}sendRealtime(e){this.send({blob:e})}sendActivityStart(){this.send({activityStart:{}})}sendActivityEnd(){this.send({activityEnd:{}})}async*[Symbol.asyncIterator](){for(;;){let e=await this.get();if(yield e,e.close)break}}};import{z as bt}from"zod";var $=class{constructor(e){this.model=e}maybeAppendUserContent(e){var t;e.contents.length===0&&e.contents.push({role:"user",parts:[{text:"Handle the requests as specified in the System Instruction."}]}),((t=e.contents[e.contents.length-1])==null?void 0:t.role)!=="user"&&e.contents.push({role:"user",parts:[{text:"Continue processing previous requests as instructed. Exit or provide a summary if no more outputs are needed."}]})}};$.supportedModels=[];function Y(o,e){o.config||(o.config={});let t=e.join(`
|
|
8
8
|
|
|
9
9
|
`);o.config.systemInstruction?o.config.systemInstruction+=`
|
|
10
10
|
|
|
11
|
-
`+t:o.config.systemInstruction=t}function ut(o,e){o.config||(o.config={}),o.config.responseSchema=e,o.config.responseMimeType="application/json"}import{createPartFromText as mt,FinishReason as Wt,GoogleGenAI as we}from"@google/genai";function ft(){return Vt("GOOGLE_GENAI_USE_VERTEXAI")?"VERTEX_AI":"GEMINI_API"}function Vt(o){if(!process.env)return!1;let e=(process.env[o]||"").toLowerCase();return["true","1"].includes(o.toLowerCase())}var dt="0.1.0";var ue=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 Ie(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 Qt="remote_reasoning_engine",Ht="GOOGLE_CLOUD_AGENT_ENGINE_ID",H=class extends ${constructor({model:e="gemini-2.5-flash",apiKey:t,vertexai:n,project:r,location:i,headers:s}={}){super(e),this.project=r,this.location=i,this.apiKey=t,this.headers=s;let a=typeof process=="object";if(this.vertexai=!!n,!this.vertexai&&a){let l=process.env.GOOGLE_GENAI_USE_VERTEXAI;l&&(this.vertexai=l.toLowerCase()==="true"||l==="1")}if(this.vertexai){if(a&&!this.project&&(this.project=process.env.GOOGLE_CLOUD_PROJECT),a&&!this.location&&(this.location=process.env.GOOGLE_CLOUD_LOCATION),!this.project)throw new Error("VertexAI project must be provided via constructor or GOOGLE_CLOUD_PROJECT environment variable.");if(!this.location)throw new Error("VertexAI location must be provided via constructor or GOOGLE_CLOUD_LOCATION environment variable.")}else if(!this.apiKey&&a&&(this.apiKey=process.env.GOOGLE_GENAI_API_KEY||process.env.GEMINI_API_KEY),!this.apiKey)throw new Error("API key must be provided via constructor or GOOGLE_GENAI_API_KEY or GEMINI_API_KEY environment variable.")}async*generateContentAsync(e,t=!1){var n,r,i,s,a,l,c;if(this.preprocessRequest(e),this.maybeAppendUserContent(e),m.info(`Sending out request, model: ${e.model}, backend: ${this.apiBackend}, stream: ${t}`),(n=e.config)!=null&&n.httpOptions&&(e.config.httpOptions.headers={...e.config.httpOptions.headers,...this.trackingHeaders}),t){let d=await this.apiClient.models.generateContentStream({model:(r=e.model)!=null?r:this.model,contents:e.contents,config:e.config}),u="",f="",T,v;for await(let p of d){v=p;let g=Ie(p);T=g.usageMetadata;let h=(s=(i=g.content)==null?void 0:i.parts)==null?void 0:s[0];if(h!=null&&h.text)"thought"in h&&h.thought?u+=h.text:f+=h.text,g.partial=!0;else if((u||f)&&(!h||!h.inlineData)){let P=[];u&&P.push({text:u,thought:!0}),f&&P.push(mt(f)),yield{content:{role:"model",parts:P},usageMetadata:g.usageMetadata},u="",f=""}yield g}if((f||u)&&((l=(a=v==null?void 0:v.candidates)==null?void 0:a[0])==null?void 0:l.finishReason)===Wt.STOP){let p=[];u&&p.push({text:u,thought:!0}),f&&p.push({text:f}),yield{content:{role:"model",parts:p},usageMetadata:T}}}else{let d=await this.apiClient.models.generateContent({model:(c=e.model)!=null?c:this.model,contents:e.contents,config:e.config});yield Ie(d)}}get apiClient(){if(this._apiClient)return this._apiClient;let e={...this.trackingHeaders,...this.headers};return this.vertexai?this._apiClient=new we({vertexai:this.vertexai,project:this.project,location:this.location,httpOptions:{headers:e}}):this._apiClient=new we({apiKey:this.apiKey,httpOptions:{headers:e}}),this._apiClient}get apiBackend(){return this._apiBackend||(this._apiBackend=this.apiClient.vertexai?"VERTEX_AI":"GEMINI_API"),this._apiBackend}get trackingHeaders(){if(!this._trackingHeaders){let e=`google-adk/${dt}`;!be()&&process.env[Ht]&&(e=`${e}+${Qt}`);let t=`gl-typescript/${be()?window.navigator.userAgent:process.version}`,n=`${e} ${t}`;this._trackingHeaders={"x-goog-api-client":n,"user-agent":n}}return this._trackingHeaders}get liveApiVersion(){return this._liveApiVersion||(this._liveApiVersion=this.apiBackend==="VERTEX_AI"?"v1beta1":"v1alpha"),this._liveApiVersion}get liveApiClient(){return this._liveApiClient||(this._liveApiClient=new we({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:[mt(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 ue(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)pt(n.inlineData),pt(n.fileData)}}};H.supportedModels=[/gemini-.*/,/projects\/.+\/locations\/.+\/endpoints\/.+/,/projects\/.+\/locations\/.+\/publishers\/google\/models\/gemini.+/];function pt(o){o&&o.displayName&&(o.displayName=void 0)}var ke=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))(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 ke(32);var J=k;J.register(H);var R=class{constructor(e){var t;this.name=e.name,this.description=e.description,this.isLongRunning=(t=e.isLongRunning)!=null?t:!1}_getDeclaration(){}async processLlmRequest({toolContext:e,llmRequest:t}){let n=this._getDeclaration();if(!n)return;t.toolsDict[this.name]=this;let r=Xt(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 ft()}};function Xt(o){var e;return(((e=o.config)==null?void 0:e.tools)||[]).find(t=>"functionDeclarations"in t)}import{Type as Yt}from"@google/genai";import{ZodObject as Jt}from"zod";import{Type as E}from"@google/genai";import{z as y}from"zod";function gt(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 y.ZodFirstPartyTypeKind.ZodString:n.type=E.STRING;for(let l of e.checks||[])l.kind==="min"?n.minLength=l.value.toString():l.kind==="max"?n.maxLength=l.value.toString():l.kind==="email"?n.format="email":l.kind==="uuid"?n.format="uuid":l.kind==="url"?n.format="uri":l.kind==="regex"&&(n.pattern=l.regex.source);return r(n);case y.ZodFirstPartyTypeKind.ZodNumber:n.type=E.NUMBER;for(let l of e.checks||[])l.kind==="min"?n.minimum=l.value:l.kind==="max"?n.maximum=l.value:l.kind==="int"&&(n.type=E.INTEGER);return r(n);case y.ZodFirstPartyTypeKind.ZodBoolean:return n.type=E.BOOLEAN,r(n);case y.ZodFirstPartyTypeKind.ZodArray:return n.type=E.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 y.ZodFirstPartyTypeKind.ZodObject:return fe(o);case y.ZodFirstPartyTypeKind.ZodLiteral:let i=typeof e.value;if(n.enum=[e.value.toString()],i==="string")n.type=E.STRING;else if(i==="number")n.type=E.NUMBER;else if(i==="boolean")n.type=E.BOOLEAN;else if(e.value===null)n.type=E.NULL;else throw new Error(`Unsupported ZodLiteral value type: ${i}`);return r(n);case y.ZodFirstPartyTypeKind.ZodEnum:return n.type=E.STRING,n.enum=e.values,r(n);case y.ZodFirstPartyTypeKind.ZodNativeEnum:return n.type=E.STRING,n.enum=Object.values(e.values),r(n);case y.ZodFirstPartyTypeKind.ZodUnion:return n.anyOf=e.options.map(B),r(n);case y.ZodFirstPartyTypeKind.ZodOptional:return B(e.innerType);case y.ZodFirstPartyTypeKind.ZodNullable:let s=B(e.innerType);return r(s?{anyOf:[s,{type:E.NULL}],...t&&{description:t}}:{type:E.NULL,...t&&{description:t}});case y.ZodFirstPartyTypeKind.ZodDefault:let a=B(e.innerType);return a&&(a.default=e.defaultValue()),a;case y.ZodFirstPartyTypeKind.ZodBranded:return B(e.type);case y.ZodFirstPartyTypeKind.ZodReadonly:return B(e.innerType);case y.ZodFirstPartyTypeKind.ZodNull:return n.type=E.NULL,r(n);case y.ZodFirstPartyTypeKind.ZodAny:case y.ZodFirstPartyTypeKind.ZodUnknown:return r({...t&&{description:t}});default:throw new Error(`Unsupported Zod type: ${e.typeName}`)}}function fe(o){if(o._def.typeName!==y.ZodFirstPartyTypeKind.ZodObject)throw new Error("Expected a ZodObject");let e=o.shape,t={},n=[];for(let s in e){let a=e[s],l=B(a);l&&(t[s]=l);let c=a,d=!1;for(;c._def.typeName===y.ZodFirstPartyTypeKind.ZodOptional||c._def.typeName===y.ZodFirstPartyTypeKind.ZodDefault;)d=!0,c=c._def.innerType;d||n.push(s)}let r=o._def.catchall,i=!1;return r&&r._def.typeName!==y.ZodFirstPartyTypeKind.ZodNever?i=B(r)||!0:i=o._def.unknownKeys==="passthrough",{type:E.OBJECT,properties:t,required:n.length>0?n:[],...o._def.description?{description:o._def.description}:{}}}function en(o){return o===void 0?{type:Yt.OBJECT,properties:{}}:gt(o)?fe(o):o}var _=class extends R{constructor(e){var n;let t=(n=e.name)!=null?n:e.execute.name;if(!t)throw new Error("Tool name cannot be empty. Either name the `execute` function or provide a `name`.");super({name:t,description:e.description,isLongRunning:e.isLongRunning}),this.execute=e.execute,this.parameters=e.parameters}_getDeclaration(){return{name:this.name,description:this.description,parameters:en(this.parameters)}}async runAsync(e){try{let t=e.args;return this.parameters instanceof Jt&&(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 D=class{};function ee(o){if(o!==void 0)return JSON.parse(JSON.stringify(o))}function Pe(o,e,t){var s,a,l;let n=[];for(let c of o)!((s=c.content)!=null&&s.role)||((l=(a=c.content.parts)==null?void 0:a[0])==null?void 0:l.text)===""||t&&c.branch&&!t.startsWith(c.branch)||tn(c)||nn(c)||n.push(Ct(e,c)?on(c):c);let r=rn(n);r=sn(r);let i=[];for(let c of r){let d=ee(c.content);it(d),i.push(d)}return i}function ht(o,e,t){for(let n=o.length-1;n>=0;n--){let r=o[n];if(r.author==="user"||Ct(e,r))return Pe(o.slice(n),e,t)}return[]}function tn(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)===le||((n=r.functionResponse)==null?void 0:n.name)===le)return!0;return!1}function nn(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)===Q||((n=r.functionResponse)==null?void 0:n.name)===Q)return!0;return!1}function Ct(o,e){return!!o&&e.author!==o&&e.author!=="user"}function on(o){var t,n,r,i,s;if(!((t=o.content)!=null&&t.parts))return o;let e={role:"user",parts:[{text:"For context:"}]};for(let a of o.content.parts)a.text&&!a.thought?(n=e.parts)==null||n.push({text:`[${o.author}] said: ${a.text}`}):a.functionCall?(r=e.parts)==null||r.push({text:`[${o.author}] called tool \`${a.functionCall.name}\` with parameters: ${a.functionCall.args}`}):a.functionResponse?(i=e.parts)==null||i.push({text:`[${o.author}] tool \`${a.functionResponse.name}\` returned result: ${a.functionResponse.response}`}):(s=e.parts)==null||s.push(a);return b({invocationId:o.invocationId,author:"user",content:e,branch:o.branch,timestamp:o.timestamp})}function vt(o){var r;if(o.length===0)throw new Error("Cannot merge an empty list of events.");let e=b(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 rn(o){if(o.length===0)return o;let e=o[o.length-1],t=I(e);if(!(t!=null&&t.length))return o;let n=new Set(t.filter(l=>!!l.id).map(l=>l.id)),r=o.at(-2);if(r){let l=x(r);if(l){for(let c of l)if(c.id&&n.has(c.id))return o}}let i=-1;for(let l=o.length-2;l>=0;l--){let c=o[l],d=x(c);if(d!=null&&d.length){for(let u of d)if(u.id&&n.has(u.id)){i=l;let f=new Set(d.map(v=>v.id).filter(v=>!!v));if(!Array.from(n).every(v=>f.has(v)))throw new Error(`Last response event should only contain the responses for the function calls in the same function call event. Function call ids found : ${Array.from(f).join(", ")}, function response ids provided: ${Array.from(n).join(", ")}`);n=f;break}}}if(i===-1)throw new Error(`No function call event found for function responses ids: ${Array.from(n).join(", ")}`);let s=[];for(let l=i+1;l<o.length-1;l++){let c=o[l],d=I(c);d&&d.some(u=>u.id&&n.has(u.id))&&s.push(c)}s.push(o[o.length-1]);let a=o.slice(0,i+1);return a.push(vt(s)),a}function sn(o){let e=new Map;for(let n=0;n<o.length;n++){let r=o[n],i=I(r);if(i!=null&&i.length)for(let s of i)s.id&&e.set(s.id,n)}let t=[];for(let n of o){if(I(n).length>0)continue;let r=x(n);if(r!=null&&r.length){let i=new Set;for(let s of r){let a=s.id;a&&e.has(a)&&i.add(e.get(a))}if(t.push(n),i.size===0)continue;if(i.size===1){let[s]=[...i];t.push(o[s])}else{let a=Array.from(i).sort((l,c)=>l-c).map(l=>o[l]);t.push(vt(a))}}else t.push(n)}return t}async function Le(o,e){let t=e.invocationContext;async function n(l){let c=l[0].replace(/^\{+/,"").replace(/\}+$/,"").trim(),d=c.endsWith("?");if(d&&(c=c.slice(0,-1)),c.startsWith("artifact.")){let u=c.substring(9);if(t.artifactService===void 0)throw new Error("Artifact service is not initialized.");let f=await t.artifactService.loadArtifact({appName:t.session.appName,userId:t.session.userId,sessionId:t.session.id,filename:u});if(!f)throw new Error(`Artifact ${u} not found.`);return String(f)}if(!cn(c))return l[0];if(c in t.session.state)return String(t.session.state[c]);if(d)return"";throw new Error(`Context variable not found: \`${c}\`.`)}let r=/\{+[^{}]*}+/g,i=[],s=0,a=o.matchAll(r);for(let l of a){i.push(o.slice(s,l.index));let c=await n(l);i.push(c),s=l.index+l[0].length}return i.push(o.slice(s)),i.join("")}var an=/^[a-zA-Z_][a-zA-Z0-9_]*$/;function yt(o){return o===""||o===void 0?!1:an.test(o)}var ln=[C.APP_PREFIX,C.USER_PREFIX,C.TEMP_PREFIX];function cn(o){let e=o.split(":");return e.length===0||e.length>2?!1:e.length===1?yt(o):ln.includes(e[0]+":")?yt(e[1]):!1}var bt="adk_agent_name";async function Tt(o,e){return o instanceof R?[o]:await o.getTools(e)}var Me=class extends D{async*runAsync(e,t){var r;let n=e.agent;n instanceof A&&(t.model=n.canonicalModel.model,t.config={...(r=n.generateContentConfig)!=null?r:{}},n.outputSchema&&ut(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))}},un=new Me,Be=class extends D{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}"`),Y(t,r)}},fn=new Be,_e=class extends D{async*runAsync(e,t){let n=e.agent;if(!(n instanceof A)||!(n.rootAgent instanceof A))return;let r=n.rootAgent;if(r instanceof A&&r.globalInstruction){let{instruction:i,requireStateInjection:s}=await r.canonicalGlobalInstruction(new S(e)),a=i;s&&(a=await Le(i,new S(e))),Y(t,[a])}if(n.instruction){let{instruction:i,requireStateInjection:s}=await n.canonicalInstruction(new S(e)),a=i;s&&(a=await Le(i,new S(e))),Y(t,[a])}}},dn=new _e,Ne=class{async*runAsync(e,t){let n=e.agent;!n||!(n instanceof A)||(n.includeContents==="default"?t.contents=Pe(e.session.events,n.name,e.branch):t.contents=ht(e.session.events,n.name,e.branch))}},mn=new Ne,Oe=class extends D{constructor(){super(...arguments);this.toolName="transfer_to_agent";this.tool=new _({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:At.object({agentName:At.string().describe("the agent name to transfer to.")}),execute:function(t,n){if(!n)throw new Error("toolContext is required.");n.actions.transferToAgent=t.agentName}})}async*runAsync(t,n){if(!(t.agent instanceof A))return;let r=this.getTransferTargets(t.agent);if(!r.length)return;Y(n,[this.buildTargetAgentsInstructions(t.agent,r)]);let i=new F({invocationContext:t});await this.tool.processLlmRequest({toolContext:i,llmRequest:n})}buildTargetAgentsInfo(t){return`
|
|
11
|
+
`+t:o.config.systemInstruction=t}function ut(o,e){o.config||(o.config={}),o.config.responseSchema=e,o.config.responseMimeType="application/json"}import{createPartFromText as mt,FinishReason as Wt,GoogleGenAI as Ie}from"@google/genai";function ft(){return Vt("GOOGLE_GENAI_USE_VERTEXAI")?"VERTEX_AI":"GEMINI_API"}function Vt(o){if(!process.env)return!1;let e=(process.env[o]||"").toLowerCase();return["true","1"].includes(o.toLowerCase())}var dt="0.1.0";var ce=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 Re(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 Qt="remote_reasoning_engine",Ht="GOOGLE_CLOUD_AGENT_ENGINE_ID",H=class extends ${constructor({model:e="gemini-2.5-flash",apiKey:t,vertexai:n,project:r,location:i,headers:s}={}){super(e),this.project=r,this.location=i,this.apiKey=t,this.headers=s;let a=typeof process=="object";if(this.vertexai=!!n,!this.vertexai&&a){let l=process.env.GOOGLE_GENAI_USE_VERTEXAI;l&&(this.vertexai=l.toLowerCase()==="true"||l==="1")}if(this.vertexai){if(a&&!this.project&&(this.project=process.env.GOOGLE_CLOUD_PROJECT),a&&!this.location&&(this.location=process.env.GOOGLE_CLOUD_LOCATION),!this.project)throw new Error("VertexAI project must be provided via constructor or GOOGLE_CLOUD_PROJECT environment variable.");if(!this.location)throw new Error("VertexAI location must be provided via constructor or GOOGLE_CLOUD_LOCATION environment variable.")}else if(!this.apiKey&&a&&(this.apiKey=process.env.GOOGLE_GENAI_API_KEY||process.env.GEMINI_API_KEY),!this.apiKey)throw new Error("API key must be provided via constructor or GOOGLE_GENAI_API_KEY or GEMINI_API_KEY environment variable.")}async*generateContentAsync(e,t=!1){var n,r,i,s,a,l,c;if(this.preprocessRequest(e),this.maybeAppendUserContent(e),m.info(`Sending out request, model: ${e.model}, backend: ${this.apiBackend}, stream: ${t}`),(n=e.config)!=null&&n.httpOptions&&(e.config.httpOptions.headers={...e.config.httpOptions.headers,...this.trackingHeaders}),t){let f=await this.apiClient.models.generateContentStream({model:(r=e.model)!=null?r:this.model,contents:e.contents,config:e.config}),u="",d="",h,y;for await(let p of f){y=p;let g=Re(p);h=g.usageMetadata;let C=(s=(i=g.content)==null?void 0:i.parts)==null?void 0:s[0];if(C!=null&&C.text)"thought"in C&&C.thought?u+=C.text:d+=C.text,g.partial=!0;else if((u||d)&&(!C||!C.inlineData)){let P=[];u&&P.push({text:u,thought:!0}),d&&P.push(mt(d)),yield{content:{role:"model",parts:P},usageMetadata:g.usageMetadata},u="",d=""}yield g}if((d||u)&&((l=(a=y==null?void 0:y.candidates)==null?void 0:a[0])==null?void 0:l.finishReason)===Wt.STOP){let p=[];u&&p.push({text:u,thought:!0}),d&&p.push({text:d}),yield{content:{role:"model",parts:p},usageMetadata:h}}}else{let f=await this.apiClient.models.generateContent({model:(c=e.model)!=null?c:this.model,contents:e.contents,config:e.config});yield Re(f)}}get apiClient(){if(this._apiClient)return this._apiClient;let e={...this.trackingHeaders,...this.headers};return this.vertexai?this._apiClient=new Ie({vertexai:this.vertexai,project:this.project,location:this.location,httpOptions:{headers:e}}):this._apiClient=new Ie({apiKey:this.apiKey,httpOptions:{headers:e}}),this._apiClient}get apiBackend(){return this._apiBackend||(this._apiBackend=this.apiClient.vertexai?"VERTEX_AI":"GEMINI_API"),this._apiBackend}get trackingHeaders(){if(!this._trackingHeaders){let e=`google-adk/${dt}`;!Ae()&&process.env[Ht]&&(e=`${e}+${Qt}`);let t=`gl-typescript/${Ae()?window.navigator.userAgent:process.version}`,n=`${e} ${t}`;this._trackingHeaders={"x-goog-api-client":n,"user-agent":n}}return this._trackingHeaders}get liveApiVersion(){return this._liveApiVersion||(this._liveApiVersion=this.apiBackend==="VERTEX_AI"?"v1beta1":"v1alpha"),this._liveApiVersion}get liveApiClient(){return this._liveApiClient||(this._liveApiClient=new Ie({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:[mt(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 ce(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)pt(n.inlineData),pt(n.fileData)}}};H.supportedModels=[/gemini-.*/,/projects\/.+\/locations\/.+\/endpoints\/.+/,/projects\/.+\/locations\/.+\/publishers\/google\/models\/gemini.+/];function pt(o){o&&o.displayName&&(o.displayName=void 0)}var we=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))(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 we(32);var J=k;J.register(H);var R=class{constructor(e){var t;this.name=e.name,this.description=e.description,this.isLongRunning=(t=e.isLongRunning)!=null?t:!1}_getDeclaration(){}async processLlmRequest({toolContext:e,llmRequest:t}){let n=this._getDeclaration();if(!n)return;t.toolsDict[this.name]=this;let r=Xt(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 ft()}};function Xt(o){var e;return(((e=o.config)==null?void 0:e.tools)||[]).find(t=>"functionDeclarations"in t)}import{Type as Yt}from"@google/genai";import{ZodObject as Jt}from"zod";import{Type as E}from"@google/genai";import{z as A}from"zod";function gt(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 A.ZodFirstPartyTypeKind.ZodString:n.type=E.STRING;for(let l of e.checks||[])l.kind==="min"?n.minLength=l.value.toString():l.kind==="max"?n.maxLength=l.value.toString():l.kind==="email"?n.format="email":l.kind==="uuid"?n.format="uuid":l.kind==="url"?n.format="uri":l.kind==="regex"&&(n.pattern=l.regex.source);return r(n);case A.ZodFirstPartyTypeKind.ZodNumber:n.type=E.NUMBER;for(let l of e.checks||[])l.kind==="min"?n.minimum=l.value:l.kind==="max"?n.maximum=l.value:l.kind==="int"&&(n.type=E.INTEGER);return r(n);case A.ZodFirstPartyTypeKind.ZodBoolean:return n.type=E.BOOLEAN,r(n);case A.ZodFirstPartyTypeKind.ZodArray:return n.type=E.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 A.ZodFirstPartyTypeKind.ZodObject:return ue(o);case A.ZodFirstPartyTypeKind.ZodLiteral:let i=typeof e.value;if(n.enum=[e.value.toString()],i==="string")n.type=E.STRING;else if(i==="number")n.type=E.NUMBER;else if(i==="boolean")n.type=E.BOOLEAN;else if(e.value===null)n.type=E.NULL;else throw new Error(`Unsupported ZodLiteral value type: ${i}`);return r(n);case A.ZodFirstPartyTypeKind.ZodEnum:return n.type=E.STRING,n.enum=e.values,r(n);case A.ZodFirstPartyTypeKind.ZodNativeEnum:return n.type=E.STRING,n.enum=Object.values(e.values),r(n);case A.ZodFirstPartyTypeKind.ZodUnion:return n.anyOf=e.options.map(B),r(n);case A.ZodFirstPartyTypeKind.ZodOptional:return B(e.innerType);case A.ZodFirstPartyTypeKind.ZodNullable:let s=B(e.innerType);return r(s?{anyOf:[s,{type:E.NULL}],...t&&{description:t}}:{type:E.NULL,...t&&{description:t}});case A.ZodFirstPartyTypeKind.ZodDefault:let a=B(e.innerType);return a&&(a.default=e.defaultValue()),a;case A.ZodFirstPartyTypeKind.ZodBranded:return B(e.type);case A.ZodFirstPartyTypeKind.ZodReadonly:return B(e.innerType);case A.ZodFirstPartyTypeKind.ZodNull:return n.type=E.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 ue(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],l=B(a);l&&(t[s]=l);let c=a,f=!1;for(;c._def.typeName===A.ZodFirstPartyTypeKind.ZodOptional||c._def.typeName===A.ZodFirstPartyTypeKind.ZodDefault;)f=!0,c=c._def.innerType;f||n.push(s)}let r=o._def.catchall,i=!1;return r&&r._def.typeName!==A.ZodFirstPartyTypeKind.ZodNever?i=B(r)||!0:i=o._def.unknownKeys==="passthrough",{type:E.OBJECT,properties:t,required:n.length>0?n:[],...o._def.description?{description:o._def.description}:{}}}function en(o){return o===void 0?{type:Yt.OBJECT,properties:{}}:gt(o)?ue(o):o}var _=class extends R{constructor(e){var n;let t=(n=e.name)!=null?n:e.execute.name;if(!t)throw new Error("Tool name cannot be empty. Either name the `execute` function or provide a `name`.");super({name:t,description:e.description,isLongRunning:e.isLongRunning}),this.execute=e.execute,this.parameters=e.parameters}_getDeclaration(){return{name:this.name,description:this.description,parameters:en(this.parameters)}}async runAsync(e){try{let t=e.args;return this.parameters instanceof Jt&&(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 D=class{};function ee(o){if(o!==void 0)return JSON.parse(JSON.stringify(o))}function ke(o,e,t){var s,a,l;let n=[];for(let c of o)!((s=c.content)!=null&&s.role)||((l=(a=c.content.parts)==null?void 0:a[0])==null?void 0:l.text)===""||t&&c.branch&&!t.startsWith(c.branch)||tn(c)||nn(c)||n.push(Ct(e,c)?on(c):c);let r=rn(n);r=sn(r);let i=[];for(let c of r){let f=ee(c.content);it(f),i.push(f)}return i}function ht(o,e,t){for(let n=o.length-1;n>=0;n--){let r=o[n];if(r.author==="user"||Ct(e,r))return ke(o.slice(n),e,t)}return[]}function tn(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)===ae||((n=r.functionResponse)==null?void 0:n.name)===ae)return!0;return!1}function nn(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)===Q||((n=r.functionResponse)==null?void 0:n.name)===Q)return!0;return!1}function Ct(o,e){return!!o&&e.author!==o&&e.author!=="user"}function on(o){var t,n,r,i,s;if(!((t=o.content)!=null&&t.parts))return o;let e={role:"user",parts:[{text:"For context:"}]};for(let a of o.content.parts)a.text&&!a.thought?(n=e.parts)==null||n.push({text:`[${o.author}] said: ${a.text}`}):a.functionCall?(r=e.parts)==null||r.push({text:`[${o.author}] called tool \`${a.functionCall.name}\` with parameters: ${a.functionCall.args}`}):a.functionResponse?(i=e.parts)==null||i.push({text:`[${o.author}] tool \`${a.functionResponse.name}\` returned result: ${a.functionResponse.response}`}):(s=e.parts)==null||s.push(a);return T({invocationId:o.invocationId,author:"user",content:e,branch:o.branch,timestamp:o.timestamp})}function vt(o){var r;if(o.length===0)throw new Error("Cannot merge an empty list of events.");let e=T(o[0]),t=((r=e.content)==null?void 0:r.parts)||[];if(t.length===0)throw new Error("There should be at least one function_response part.");let n={};for(let i=0;i<t.length;i++){let s=t[i];s.functionResponse&&s.functionResponse.id&&(n[s.functionResponse.id]=i)}for(let i of o.slice(1)){if(!i.content||!i.content.parts)throw new Error("There should be at least one function_response part.");for(let s of i.content.parts)if(s.functionResponse&&s.functionResponse.id){let a=s.functionResponse.id;a in n?t[n[a]]=s:(t.push(s),n[a]=t.length-1)}else t.push(s)}return e}function rn(o){if(o.length===0)return o;let e=o[o.length-1],t=I(e);if(!(t!=null&&t.length))return o;let n=new Set(t.filter(l=>!!l.id).map(l=>l.id)),r=o.at(-2);if(r){let l=x(r);if(l){for(let c of l)if(c.id&&n.has(c.id))return o}}let i=-1;for(let l=o.length-2;l>=0;l--){let c=o[l],f=x(c);if(f!=null&&f.length){for(let u of f)if(u.id&&n.has(u.id)){i=l;let d=new Set(f.map(y=>y.id).filter(y=>!!y));if(!Array.from(n).every(y=>d.has(y)))throw new Error(`Last response event should only contain the responses for the function calls in the same function call event. Function call ids found : ${Array.from(d).join(", ")}, function response ids provided: ${Array.from(n).join(", ")}`);n=d;break}}}if(i===-1)throw new Error(`No function call event found for function responses ids: ${Array.from(n).join(", ")}`);let s=[];for(let l=i+1;l<o.length-1;l++){let c=o[l],f=I(c);f&&f.some(u=>u.id&&n.has(u.id))&&s.push(c)}s.push(o[o.length-1]);let a=o.slice(0,i+1);return a.push(vt(s)),a}function sn(o){let e=new Map;for(let n=0;n<o.length;n++){let r=o[n],i=I(r);if(i!=null&&i.length)for(let s of i)s.id&&e.set(s.id,n)}let t=[];for(let n of o){if(I(n).length>0)continue;let r=x(n);if(r!=null&&r.length){let i=new Set;for(let s of r){let a=s.id;a&&e.has(a)&&i.add(e.get(a))}if(t.push(n),i.size===0)continue;if(i.size===1){let[s]=[...i];t.push(o[s])}else{let a=Array.from(i).sort((l,c)=>l-c).map(l=>o[l]);t.push(vt(a))}}else t.push(n)}return t}async function Pe(o,e){let t=e.invocationContext;async function n(l){let c=l[0].replace(/^\{+/,"").replace(/\}+$/,"").trim(),f=c.endsWith("?");if(f&&(c=c.slice(0,-1)),c.startsWith("artifact.")){let u=c.substring(9);if(t.artifactService===void 0)throw new Error("Artifact service is not initialized.");let d=await t.artifactService.loadArtifact({appName:t.session.appName,userId:t.session.userId,sessionId:t.session.id,filename:u});if(!d)throw new Error(`Artifact ${u} not found.`);return String(d)}if(!cn(c))return l[0];if(c in t.session.state)return String(t.session.state[c]);if(f)return"";throw new Error(`Context variable not found: \`${c}\`.`)}let r=/\{+[^{}]*}+/g,i=[],s=0,a=o.matchAll(r);for(let l of a){i.push(o.slice(s,l.index));let c=await n(l);i.push(c),s=l.index+l[0].length}return i.push(o.slice(s)),i.join("")}var an=/^[a-zA-Z_][a-zA-Z0-9_]*$/;function yt(o){return o===""||o===void 0?!1:an.test(o)}var ln=[v.APP_PREFIX,v.USER_PREFIX,v.TEMP_PREFIX];function cn(o){let e=o.split(":");return e.length===0||e.length>2?!1:e.length===1?yt(o):ln.includes(e[0]+":")?yt(e[1]):!1}var Le=(n=>(n.NONE="none",n.SSE="sse",n.BIDI="bidi",n))(Le||{});function At(o={}){return{saveInputBlobsAsArtifacts:!1,supportCfc:!1,enableAffectiveDialog:!1,streamingMode:"none",maxLlmCalls:un(o.maxLlmCalls||500),...o}}function un(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 Tt="adk_agent_name";async function xt(o,e){return o instanceof R?[o]:await o.getTools(e)}var Me=class extends D{async*runAsync(e,t){var r;let n=e.agent;n instanceof b&&(t.model=n.canonicalModel.model,t.config={...(r=n.generateContentConfig)!=null?r:{}},n.outputSchema&&ut(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))}},fn=new Me,Be=class extends D{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}"`),Y(t,r)}},dn=new Be,_e=class extends D{async*runAsync(e,t){let n=e.agent;if(!(n instanceof b)||!(n.rootAgent instanceof b))return;let r=n.rootAgent;if(r instanceof b&&r.globalInstruction){let{instruction:i,requireStateInjection:s}=await r.canonicalGlobalInstruction(new S(e)),a=i;s&&(a=await Pe(i,new S(e))),Y(t,[a])}if(n.instruction){let{instruction:i,requireStateInjection:s}=await n.canonicalInstruction(new S(e)),a=i;s&&(a=await Pe(i,new S(e))),Y(t,[a])}}},mn=new _e,Ne=class{async*runAsync(e,t){let n=e.agent;!n||!(n instanceof b)||(n.includeContents==="default"?t.contents=ke(e.session.events,n.name,e.branch):t.contents=ht(e.session.events,n.name,e.branch))}},pn=new Ne,Oe=class extends D{constructor(){super(...arguments);this.toolName="transfer_to_agent";this.tool=new _({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:bt.object({agentName:bt.string().describe("the agent name to transfer to.")}),execute:function(t,n){if(!n)throw new Error("toolContext is required.");n.actions.transferToAgent=t.agentName}})}async*runAsync(t,n){if(!(t.agent instanceof b))return;let r=this.getTransferTargets(t.agent);if(!r.length)return;Y(n,[this.buildTargetAgentsInstructions(t.agent,r)]);let i=new F({invocationContext:t});await this.tool.processLlmRequest({toolContext:i,llmRequest:n})}buildTargetAgentsInfo(t){return`
|
|
12
12
|
Agent name: ${t.name}
|
|
13
13
|
Agent description: ${t.description}
|
|
14
14
|
`}buildTargetAgentsInstructions(t,n){let r=`
|
|
@@ -28,10 +28,10 @@ the function call.
|
|
|
28
28
|
Your parent agent is ${t.parentAgent.name}. If neither the other agents nor
|
|
29
29
|
you are best for answering the question according to the descriptions, transfer
|
|
30
30
|
to your parent agent.
|
|
31
|
-
`),r}getTransferTargets(t){let n=[];return n.push(...t.subAgents),!t.parentAgent||!(t.parentAgent instanceof A)||(t.disallowTransferToParent||n.push(t.parentAgent),t.disallowTransferToPeers||n.push(...t.parentAgent.subAgents.filter(r=>r.name!==t.name))),n}},pn=new Oe,Fe=class extends D{async*runAsync(e,t){let n=e.agent;if(!(n instanceof A))return;let r=e.session.events;if(!r||r.length===0)return;let i={},s=-1;for(let a=r.length-1;a>=0;a--){let l=r[a];if(l.author!=="user")continue;let c=I(l);if(!c)continue;let d=!1;for(let u of c){if(u.name!==Q)continue;d=!0;let f=null;u.response&&Object.keys(u.response).length===1&&"response"in u.response?f=JSON.parse(u.response.response):u.response&&(f=new G({hint:u.response.hint,payload:u.response.payload,confirmed:u.response.confirmed})),u.id&&f&&(i[u.id]=f)}if(d){s=a;break}}if(Object.keys(i).length!==0)for(let a=s-1;a>=0;a--){let l=r[a],c=x(l);if(!c)continue;let d={},u={};for(let p of c){if(!p.id||!(p.id in i))continue;let g=p.args;if(!g||!("originalFunctionCall"in g))continue;let h=g.originalFunctionCall;h.id&&(d[h.id]=i[p.id],u[h.id]=h)}if(Object.keys(d).length===0)continue;for(let p=r.length-1;p>s;p--){let g=r[p],h=I(g);if(h){for(let P of h)P.id&&P.id in d&&(delete d[P.id],delete u[P.id]);if(Object.keys(d).length===0)break}}if(Object.keys(d).length===0)continue;let f=await n.canonicalTools(new S(e)),T=Object.fromEntries(f.map(p=>[p.name,p])),v=await ce({invocationContext:e,functionCalls:Object.values(u),toolsDict:T,beforeToolCallbacks:n.canonicalBeforeToolCallbacks,afterToolCallbacks:n.canonicalAfterToolCallbacks,filters:new Set(Object.keys(d)),toolConfirmationDict:d});v&&(yield v);return}}},gn=new Fe,A=class o extends L{constructor(e){var n,r,i,s,a,l,c,d,u;if(super(e),this.model=e.model,this.instruction=(n=e.instruction)!=null?n:"",this.globalInstruction=(r=e.globalInstruction)!=null?r:"",this.tools=(i=e.tools)!=null?i:[],this.generateContentConfig=e.generateContentConfig,this.disallowTransferToParent=(s=e.disallowTransferToParent)!=null?s:!1,this.disallowTransferToPeers=(a=e.disallowTransferToPeers)!=null?a:!1,this.includeContents=(l=e.includeContents)!=null?l:"default",this.inputSchema=e.inputSchema,this.outputSchema=e.outputSchema,this.outputKey=e.outputKey,this.beforeModelCallback=e.beforeModelCallback,this.afterModelCallback=e.afterModelCallback,this.beforeToolCallback=e.beforeToolCallback,this.afterToolCallback=e.afterToolCallback,this.requestProcessors=(c=e.requestProcessors)!=null?c:[un,fn,dn,gn,mn],this.responseProcessors=(d=e.responseProcessors)!=null?d:[],this.disallowTransferToParent&&this.disallowTransferToPeers&&!((u=this.subAgents)!=null&&u.length)||this.requestProcessors.push(pn),e.generateContentConfig){if(e.generateContentConfig.tools)throw new Error("All tools must be set via LlmAgent.tools.");if(e.generateContentConfig.systemInstruction)throw new Error("System instruction must be set via LlmAgent.instruction.");if(e.generateContentConfig.responseSchema)throw new Error("Response schema must be set via LlmAgent.output_schema.")}else this.generateContentConfig={};if(this.outputSchema){if((!this.disallowTransferToParent||!this.disallowTransferToPeers)&&(m.warn(`Invalid config for agent ${this.name}: outputSchema cannot co-exist with agent transfer configurations. Setting disallowTransferToParent=true, disallowTransferToPeers=true`),this.disallowTransferToParent=!0,this.disallowTransferToPeers=!0),this.subAgents&&this.subAgents.length>0)throw new Error(`Invalid config for agent ${this.name}: if outputSchema is set, subAgents must be empty to disable agent transfer.`);if(this.tools&&this.tools.length>0)throw new Error(`Invalid config for agent ${this.name}: if outputSchema is set, tools must be empty`)}}get canonicalModel(){if(this.model instanceof $)return this.model;if(typeof this.model=="string"&&this.model)return J.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 Tt(n,e);t.push(...r)}return t}static normalizeCallbackArray(e){return e?Array.isArray(e)?e:[e]:[]}get canonicalBeforeModelCallbacks(){return o.normalizeCallbackArray(this.beforeModelCallback)}get canonicalAfterModelCallbacks(){return o.normalizeCallbackArray(this.afterModelCallback)}get canonicalBeforeToolCallbacks(){return o.normalizeCallbackArray(this.beforeToolCallback)}get canonicalAfterToolCallbacks(){return o.normalizeCallbackArray(this.afterToolCallback)}maybeSaveOutputToState(e){var r,i;if(e.author!==this.name){m.debug(`Skipping output save for agent ${this.name}: event authored by ${e.author}`);return}if(!this.outputKey){m.debug(`Skipping output save for agent ${this.name}: outputKey is not set`);return}if(!V(e)){m.debug(`Skipping output save for agent ${this.name}: event is not a final response`);return}if(!((i=(r=e.content)==null?void 0:r.parts)!=null&&i.length)){m.debug(`Skipping output save for agent ${this.name}: event content is empty`);return}let t=e.content.parts.map(s=>s.text?s.text:"").join(""),n=t;if(this.outputSchema){if(!t.trim())return;try{n=JSON.parse(t)}catch(s){m.error(`Error parsing output for agent ${this.name}`,s)}}e.actions.stateDelta[this.outputKey]=n}async*runAsyncImpl(e){for(;;){let t;for await(let n of this.runOneStepAsync(e))t=n,this.maybeSaveOutputToState(n),yield n;if(!t||V(t))break;if(t.partial){m.warn("The last event is partial, which is not expected.");break}}}async*runLiveImpl(e){for await(let t of this.runLiveFlow(e))this.maybeSaveOutputToState(t),yield t;e.endInvocation}async*runLiveFlow(e){throw await Promise.resolve(),new Error("LlmAgent.runLiveFlow not implemented")}async*runOneStepAsync(e){let t={contents:[],toolsDict:{},liveConnectConfig:{}};for(let r of this.requestProcessors)for await(let i of r.runAsync(e,t))yield i;for(let r of this.tools){let i=new F({invocationContext:e}),s=await Tt(r,new S(e));for(let a of s)await a.processLlmRequest({toolContext:i,llmRequest:t})}if(e.endInvocation)return;let n=b({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=Ae(),n.timestamp=new Date().getTime(),yield i}async*postprocess(e,t,n,r){var d;for(let u of this.responseProcessors)for await(let f of u.runAsync(e,n))yield f;if(!n.content&&!n.errorCode&&!n.interrupted)return;let i=b({...r,...n});if(i.content){let u=x(i);u!=null&&u.length&&(rt(i),i.longRunningToolIds=Array.from(st(u,t.toolsDict)))}if(yield i,!((d=x(i))!=null&&d.length))return;let s=await ct({invocationContext:e,functionCallEvent:i,toolsDict:t.toolsDict,beforeToolCallbacks:this.canonicalBeforeToolCallbacks,afterToolCallbacks:this.canonicalAfterToolCallbacks});if(!s)return;let a=at(e,s);a&&(yield a);let l=lt({invocationContext:e,functionCallEvent:i,functionResponseEvent:s});l&&(yield l),yield s;let c=s.actions.transferToAgent;if(c){let u=this.getAgentByName(e,c);for await(let f of u.runAsync(e))yield f}}getAgentByName(e,t){let r=e.agent.rootAgent.findAgent(t);if(!r)throw new Error(`Agent ${t} not found in the agent tree.`);return r}async*callLlmAsync(e,t,n){var s,a,l,c;let r=await this.handleBeforeModelCallback(e,t,n);if(r){yield r;return}(s=t.config)!=null||(t.config={}),(l=(a=t.config).labels)!=null||(a.labels={}),t.config.labels[bt]||(t.config.labels[bt]=this.name);let i=this.canonicalModel;if((c=e.runConfig)!=null&&c.supportCfc)throw new Error("CFC is not yet supported in callLlmAsync");{e.incrementLlmCallCount();let d=i.generateContentAsync(t);for await(let u of this.runAndHandleError(d,e,t,n)){let f=await this.handleAfterModelCallback(e,u,n);yield f!=null?f:u}}}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 l=JSON.parse(i.message);yield{errorCode:String(l.error.code),errorMessage:l.error.message}}}else throw m.error("Unknown error during response generation",i),i}}};var $e=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 De=class extends L{async*runAsyncImpl(e){let t=this.subAgents.map(n=>n.runAsync(hn(this,n,e)));for await(let n of Cn(t))yield n}async*runLiveImpl(e){throw new Error("This is not supported yet for ParallelAgent.")}};function hn(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*Cn(o){let e=new Map;for(let[t,n]of o.entries()){let r=n.next().then(i=>({result:i,index:t}));e.set(t,r)}for(;e.size>0;){let{result:t,index:n}=await Promise.race(e.values());if(t.done){e.delete(n);continue}yield t.value;let r=o[n].next().then(i=>({result:i,index:n}));e.set(n,r)}}var xt=(n=>(n.NONE="none",n.SSE="sse",n.BIDI="bidi",n))(xt||{}),te=class{constructor(e={}){this.speechConfig=e.speechConfig,this.responseModalities=e.responseModalities,this.saveInputBlobsAsArtifacts=e.saveInputBlobsAsArtifacts||!1,this.supportCfc=e.supportCfc||!1,this.streamingMode=e.streamingMode||"none",this.outputAudioTranscription=e.outputAudioTranscription,this.inputAudioTranscription=e.inputAudioTranscription,this.enableAffectiveDialog=e.enableAffectiveDialog||!1,this.realtimeInputConfig=e.realtimeInputConfig,this.maxLlmCalls=vn(e.maxLlmCalls||500)}};function vn(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 qe="task_completed",Ge=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 A&&((await t.canonicalTools(new S(e))).some(i=>i.name===qe)||(t.tools.push(new _({name:qe,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 ${qe} 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 ne=class{constructor(){this.artifacts={}}saveArtifact({appName:e,userId:t,sessionId:n,filename:r,artifact:i}){let s=de(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=de(e,t,n,r),a=this.artifacts[s];return a?(i===void 0&&(i=a.length-1),Promise.resolve(a[i])):Promise.resolve(void 0)}listArtifactKeys({appName:e,userId:t,sessionId:n}){let r=`${e}/${t}/${n}/`,i=`${e}/${t}/user/`,s=[];for(let a in this.artifacts)if(a.startsWith(r)){let l=a.replace(r,"");s.push(l)}else if(a.startsWith(i)){let l=a.replace(i,"");s.push(l)}return Promise.resolve(s.sort())}deleteArtifact({appName:e,userId:t,sessionId:n,filename:r}){let i=de(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=de(e,t,n,r),s=this.artifacts[i];if(!s)return Promise.resolve([]);let a=[];for(let l=0;l<s.length;l++)a.push(l);return Promise.resolve(a)}};function de(o,e,t,n){return yn(n)?`${o}/${e}/user/${n}`:`${o}/${e}/${t}/${n}`}function yn(o){return o.startsWith("user:")}var U=class{constructor(){this.memories=[];this.sessionEvents={}}async addSessionToMemory(e){let t=Et(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=Et(e.appName,e.userId);if(!this.sessionEvents[t])return Promise.resolve({memories:[]});let n=e.query.toLowerCase().split(/\s+/),r={memories:[]};for(let a of Object.values(this.sessionEvents[t]))for(let l of a){if(!((s=(i=l.content)==null?void 0:i.parts)!=null&&s.length))continue;let c=l.content.parts.map(f=>f.text).filter(f=>!!f).join(" "),d=An(c);if(!d.size)continue;n.some(f=>d.has(f))&&r.memories.push({content:l.content,author:l.author,timestamp:bn(l.timestamp)})}return r}};function Et(o,e){return`${o}/${e}`}function An(o){return new Set([...o.matchAll(/[A-Za-z]+/)].map(e=>e[0].toLowerCase()))}function bn(o){return new Date(o).toISOString()}var j=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 Ue=class extends j{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: ${V(t)}`);let n=x(t);if(n.length>0){let i=n.map(s=>s.name);this.log(` Function Calls: ${i}`)}let r=I(t);if(r.length>0){let i=r.map(s=>s.name);this.log(` Function Responses: ${i}`)}t.longRunningToolIds&&t.longRunningToolIds.length>0&&this.log(` Long Running Tools: ${[...t.longRunningToolIds]}`)}async afterRunCallback({invocationContext:e}){var t;this.log("\u2705 INVOCATION COMPLETED"),this.log(` Invocation ID: ${e.invocationId}`),this.log(` Final Agent: ${(t=e.agent.name)!=null?t:"Unknown"}`)}async beforeAgentCallback({agent:e,callbackContext:t}){this.log("\u{1F916} AGENT STARTING"),this.log(` Agent Name: ${t.agentName}`),this.log(` Invocation ID: ${t.invocationId}`),t.invocationContext.branch&&this.log(` Branch: ${t.invocationContext.branch}`)}async afterAgentCallback({agent:e,callbackContext:t}){this.log("\u{1F916} AGENT COMPLETED"),this.log(` Agent Name: ${t.agentName}`),this.log(` Invocation ID: ${t.invocationId}`)}async beforeModelCallback({callbackContext:e,llmRequest:t}){var n;if(this.log("\u{1F9E0} LLM REQUEST"),this.log(` Model: ${(n=t.model)!=null?n:"default"}`),this.log(` Agent: ${e.agentName}`),t.config&&t.config.systemInstruction){let r=t.config.systemInstruction;r.length>200&&(r=r.substring(0,200)+"..."),this.log(` System Instruction: '${r}'`)}if(t.toolsDict){let r=Object.keys(t.toolsDict);this.log(` Available Tools: ${r}`)}}async afterModelCallback({callbackContext:e,llmResponse:t}){this.log("\u{1F9E0} LLM RESPONSE"),this.log(` Agent: ${e.agentName}`),t.errorCode?(this.log(` \u274C ERROR - Code: ${t.errorCode}`),this.log(` Error Message: ${t.errorMessage}`)):(this.log(` Content: ${this.formatContent(t.content)}`),t.partial&&this.log(` Partial: ${t.partial}`),t.turnComplete!==void 0&&this.log(` Turn Complete: ${t.turnComplete}`)),t.usageMetadata&&this.log(` Token Usage - Input: ${t.usageMetadata.promptTokenCount}, Output: ${t.usageMetadata.candidatesTokenCount}`)}async beforeToolCallback({tool:e,toolArgs:t,toolContext:n}){this.log("\u{1F527} TOOL STARTING"),this.log(` Tool Name: ${e.name}`),this.log(` Agent: ${n.agentName}`),this.log(` Function Call ID: ${n.functionCallId}`),this.log(` Arguments: ${this.formatArgs(t)}`)}async afterToolCallback({tool:e,toolArgs:t,toolContext:n,result:r}){this.log("\u{1F527} TOOL COMPLETED"),this.log(` Tool Name: ${e.name}`),this.log(` Agent: ${n.agentName}`),this.log(` Function Call ID: ${n.functionCallId}`),this.log(` Result: ${this.formatArgs(r)}`)}async onModelErrorCallback({callbackContext:e,llmRequest:t,error:n}){this.log("\u{1F9E0} LLM ERROR"),this.log(` Agent: ${e.agentName}`),this.log(` Error: ${n}`)}async onToolErrorCallback({tool:e,toolArgs:t,toolContext:n,error:r}){this.log("\u{1F527} TOOL ERROR"),this.log(` Tool Name: ${e.name}`),this.log(` Agent: ${n.agentName}`),this.log(` Function Call ID: ${n.functionCallId}`),this.log(` Arguments: ${this.formatArgs(t)}`),this.log(` Error: ${r}`)}log(e){let t=`\x1B[90m[${this.name}] ${e}\x1B[0m`;m.info(t)}formatContent(e,t=200){if(!e||!e.parts)return"None";let n=[];for(let r of e.parts)if(r.text){let i=r.text.trim();i.length>t&&(i=i.substring(0,t)+"..."),n.push(`text: '${i}'`)}else r.functionCall?n.push(`function_call: ${r.functionCall.name}`):r.functionResponse?n.push(`function_response: ${r.functionResponse.name}`):r.codeExecutionResult?n.push("code_execution_result"):n.push("other_part");return n.join(" | ")}formatArgs(e,t=300){if(!e)return"{}";let n=JSON.stringify(e);return n.length>t&&(n=n.substring(0,t)+"...}"),n}};var oe=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 Rt="adk_request_confirmation",je="orcas_tool_call_security_check_states",St="This tool call needs external confirmation before completion.",It=(n=>(n.DENY="DENY",n.CONFIRM="CONFIRM",n.ALLOW="ALLOW",n))(It||{}),me=class{async evaluate(e){return Promise.resolve({outcome:"ALLOW",reason:"For prototyping purpose, all tool calls are allowed."})}},Ke=class extends j{constructor(e){var t;super("security_plugin"),this.policyEngine=(t=e==null?void 0:e.policyEngine)!=null?t:new me}async beforeToolCallback({tool:e,toolArgs:t,toolContext:n}){let r=this.getToolCallCheckState(n);if(!r)return this.checkToolCallPolicy({tool:e,toolArgs:t,toolContext:n});if(r==="CONFIRM"){if(!n.toolConfirmation)return{partial:St};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(je))!=null?r:{})[t]:void 0}setToolCallCheckState(e,t){var i;let{functionCallId:n}=e;if(!n)return;let r=(i=e.state.get(je))!=null?i:{};r[n]=t,e.state.set(je,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:St};case"ALLOW":return;default:return}}};function Tn(o){if(!o.content||!o.content.parts)return[];let e=[];for(let t of o.content.parts)t&&t.functionCall&&t.functionCall.name===Rt&&e.push(t.functionCall);return e}var pe=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 ge(o){return{id:o.id,appName:o.appName,userId:o.userId||"",state:o.state||{},events:o.events||[],lastUpdateTime:o.lastUpdateTime||0}}var K=class extends pe{constructor(){super(...arguments);this.sessions={};this.userState={};this.appState={}}createSession({appName:t,userId:n,state:r,sessionId:i}){let s=ge({id:i||z(),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,ee(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=ee(s);if(i&&(i.numRecentEvents&&(a.events=a.events.slice(-i.numRecentEvents)),i.afterTimestamp)){let l=a.events.length-1;for(;l>=0&&!(a.events[l].timestamp<i.afterTimestamp);)l--;l>=0&&(a.events=a.events.slice(l+1))}return Promise.resolve(this.mergeState(t,n,a))}listSessions({appName:t,userId:n}){if(!this.sessions[t]||!this.sessions[t][n])return Promise.resolve({sessions:[]});let r=[];for(let i of Object.values(this.sessions[t][n]))r.push(ge({id:i.id,appName:i.appName,userId:i.userId,state:{},events:[],lastUpdateTime:i.lastUpdateTime}));return Promise.resolve({sessions:r})}async deleteSession({appName:t,userId:n,sessionId:r}){await this.getSession({appName:t,userId:n,sessionId:r})&&delete this.sessions[t][n][r]}async appendEvent({session:t,event:n}){await super.appendEvent({session:t,event:n}),t.lastUpdateTime=n.timestamp;let r=t.appName,i=t.userId,s=t.id,a=c=>{m.warn(`Failed to append event to session ${s}: ${c}`)};if(!this.sessions[r])return a(`appName ${r} not in sessions`),n;if(!this.sessions[r][i])return a(`userId ${i} not in sessions[appName]`),n;if(!this.sessions[r][i][s])return a(`sessionId ${s} not in sessions[appName][userId]`),n;if(n.actions&&n.actions.stateDelta)for(let c of Object.keys(n.actions.stateDelta))c.startsWith(C.APP_PREFIX)&&(this.appState[r]=this.appState[r]||{},this.appState[r][c.replace(C.APP_PREFIX,"")]=n.actions.stateDelta[c]),c.startsWith(C.USER_PREFIX)&&(this.userState[r]=this.userState[r]||{},this.userState[r][i]=this.userState[r][i]||{},this.userState[r][i][c.replace(C.USER_PREFIX,"")]=n.actions.stateDelta[c]);let l=this.sessions[r][i][s];return await super.appendEvent({session:l,event:n}),l.lastUpdateTime=n.timestamp,n}mergeState(t,n,r){if(this.appState[t])for(let i of Object.keys(this.appState[t]))r.state[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 xn}from"@google/genai";import{trace as En}from"@opentelemetry/api";var Z=class{constructor(e){var t;this.appName=e.appName,this.agent=e.agent,this.pluginManager=new oe((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=new te}){var a;let s=En.getTracer("gcp.vertex.agent").startSpan("invocation");try{let l=await this.sessionService.getSession({appName:this.appName,userId:e,sessionId:t});if(!l)throw new Error(`Session not found: ${t}`);if(i.supportCfc&&this.agent instanceof A){let f=this.agent.canonicalModel.model;if(!f.startsWith("gemini-2"))throw new Error(`CFC is not supported for model: ${f} in agent: ${this.agent.name}`)}let c=new M({artifactService:this.artifactService,sessionService:this.sessionService,memoryService:this.memoryService,credentialService:this.credentialService,invocationId:et(),agent:this.agent,session:l,userContent:n,runConfig:i,pluginManager:this.pluginManager}),d=await this.pluginManager.runOnUserMessageCallback({userMessage:n,invocationContext:c});if(d&&(n=d),n){if(!((a=n.parts)!=null&&a.length))throw new Error("No parts in the new_message.");i.saveInputBlobsAsArtifacts&&await this.saveArtifacts(c.invocationId,l.userId,l.id,n),await this.sessionService.appendEvent({session:l,event:b({invocationId:c.invocationId,author:"user",actions:r?q({stateDelta:r}):void 0,content:n})})}c.agent=this.determineAgentForResumption(l,this.agent);let u=await this.pluginManager.runBeforeRunCallback({invocationContext:c});if(u){let f=b({invocationId:c.invocationId,author:"model",content:u});await this.sessionService.appendEvent({session:l,event:f}),yield f}else for await(let f of c.agent.runAsync(c)){f.partial||await this.sessionService.appendEvent({session:l,event:f});let T=await this.pluginManager.runOnEventCallback({invocationContext:c,event:f});T?yield T:yield f}await this.pluginManager.runAfterRunCallback({invocationContext:c})}finally{s.end()}}async saveArtifacts(e,t,n,r){var i;if(!(!this.artifactService||!((i=r.parts)!=null&&i.length)))for(let s=0;s<r.parts.length;s++){let a=r.parts[s];if(!a.inlineData)continue;let l=`artifact_${e}_${s}`;await this.artifactService.saveArtifact({appName:this.appName,userId:t,sessionId:n,filename:l,artifact:a}),r.parts[s]=xn(`Uploaded file: ${l}. It is saved into artifacts`)}}determineAgentForResumption(e,t){let n=Sn(e.events);if(n&&n.author)return t.findAgent(n.author)||t;for(let r=e.events.length-1;r>=0;r--){m.info("event: ",JSON.stringify(e.events[r]));let i=e.events[r];if(i.author==="user"||!i.author)continue;if(i.author===t.name)return t;let s=t.findSubAgent(i.author);if(!s){m.warn(`Event from an unknown agent: ${i.author}, event id: ${i.id}`);continue}if(this.isRoutableLlmAgent(s))return s}return t}isRoutableLlmAgent(e){let t=e;for(;t;){if(!(t instanceof A)||t.disallowTransferToParent)return!1;t=t.parentAgent}return!0}};function Sn(o){var n,r,i,s;if(!o.length)return null;let t=(s=(i=(r=(n=o[o.length-1].content)==null?void 0:n.parts)==null?void 0:r.find(a=>a.functionResponse))==null?void 0:i.functionResponse)==null?void 0:s.id;if(!t)return null;for(let a=o.length-2;a>=0;a--){let l=o[a],c=x(l);if(c){for(let d of c)if(d.id===t)return l}}return null}var Ze=class extends Z{constructor({agent:e,appName:t="InMemoryRunner",plugins:n=[]}){super({appName:t,agent:e,plugins:n,artifactService:new ne,sessionService:new K,memoryService:new U})}};import{Type as Ce}from"@google/genai";var he=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 Ve=class extends R{constructor(e){super({name:e.agent.name,description:e.agent.description||""}),this.agent=e.agent,this.skipSummarization=e.skipSummarization||!1}_getDeclaration(){let e;if(this.agent instanceof A&&this.agent.inputSchema?e={name:this.name,description:this.description,parameters:this.agent.inputSchema}:e={name:this.name,description:this.description,parameters:{type:Ce.OBJECT,properties:{request:{type:Ce.STRING}},required:["request"]}},this.apiVariant!=="GEMINI_API"){let t=this.agent instanceof A&&this.agent.outputSchema;e.response=t?{type:Ce.OBJECT}:{type:Ce.STRING}}return e}async runAsync({args:e,toolContext:t}){var d,u;this.skipSummarization&&(t.actions.skipSummarization=!0);let r={role:"user",parts:[{text:this.agent instanceof A&&this.agent.inputSchema?JSON.stringify(e):e.request}]},i=new Z({appName:this.agent.name,agent:this.agent,artifactService:new he(t),sessionService:new K,memoryService:new U,credentialService:t.invocationContext.credentialService}),s=await i.sessionService.createSession({appName:this.agent.name,userId:"tmp_user",state:t.state.toRecord()}),a;for await(let f of i.runAsync({userId:s.userId,sessionId:s.id,newMessage:r}))f.actions.stateDelta&&t.state.update(f.actions.stateDelta),a=f;if(!((u=(d=a==null?void 0:a.content)==null?void 0:d.parts)!=null&&u.length))return"";let l=this.agent instanceof A&&this.agent.outputSchema,c=a.content.parts.map(f=>f.text).filter(f=>f).join(`
|
|
32
|
-
`);return l?JSON.parse(c):c}};var
|
|
31
|
+
`),r}getTransferTargets(t){let n=[];return n.push(...t.subAgents),!t.parentAgent||!(t.parentAgent instanceof b)||(t.disallowTransferToParent||n.push(t.parentAgent),t.disallowTransferToPeers||n.push(...t.parentAgent.subAgents.filter(r=>r.name!==t.name))),n}},gn=new Oe,Fe=class extends D{async*runAsync(e,t){let n=e.agent;if(!(n instanceof b))return;let r=e.session.events;if(!r||r.length===0)return;let i={},s=-1;for(let a=r.length-1;a>=0;a--){let l=r[a];if(l.author!=="user")continue;let c=I(l);if(!c)continue;let f=!1;for(let u of c){if(u.name!==Q)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 G({hint:u.response.hint,payload:u.response.payload,confirmed:u.response.confirmed})),u.id&&d&&(i[u.id]=d)}if(f){s=a;break}}if(Object.keys(i).length!==0)for(let a=s-1;a>=0;a--){let l=r[a],c=x(l);if(!c)continue;let f={},u={};for(let p of c){if(!p.id||!(p.id in i))continue;let g=p.args;if(!g||!("originalFunctionCall"in g))continue;let C=g.originalFunctionCall;C.id&&(f[C.id]=i[p.id],u[C.id]=C)}if(Object.keys(f).length===0)continue;for(let p=r.length-1;p>s;p--){let g=r[p],C=I(g);if(C){for(let P of C)P.id&&P.id in f&&(delete f[P.id],delete u[P.id]);if(Object.keys(f).length===0)break}}if(Object.keys(f).length===0)continue;let d=await n.canonicalTools(new S(e)),h=Object.fromEntries(d.map(p=>[p.name,p])),y=await le({invocationContext:e,functionCalls:Object.values(u),toolsDict:h,beforeToolCallbacks:n.canonicalBeforeToolCallbacks,afterToolCallbacks:n.canonicalAfterToolCallbacks,filters:new Set(Object.keys(f)),toolConfirmationDict:f});y&&(yield y);return}}},hn=new Fe,b=class o extends L{constructor(e){var n,r,i,s,a,l,c,f,u;if(super(e),this.model=e.model,this.instruction=(n=e.instruction)!=null?n:"",this.globalInstruction=(r=e.globalInstruction)!=null?r:"",this.tools=(i=e.tools)!=null?i:[],this.generateContentConfig=e.generateContentConfig,this.disallowTransferToParent=(s=e.disallowTransferToParent)!=null?s:!1,this.disallowTransferToPeers=(a=e.disallowTransferToPeers)!=null?a:!1,this.includeContents=(l=e.includeContents)!=null?l:"default",this.inputSchema=e.inputSchema,this.outputSchema=e.outputSchema,this.outputKey=e.outputKey,this.beforeModelCallback=e.beforeModelCallback,this.afterModelCallback=e.afterModelCallback,this.beforeToolCallback=e.beforeToolCallback,this.afterToolCallback=e.afterToolCallback,this.requestProcessors=(c=e.requestProcessors)!=null?c:[fn,dn,mn,hn,pn],this.responseProcessors=(f=e.responseProcessors)!=null?f:[],this.disallowTransferToParent&&this.disallowTransferToPeers&&!((u=this.subAgents)!=null&&u.length)||this.requestProcessors.push(gn),e.generateContentConfig){if(e.generateContentConfig.tools)throw new Error("All tools must be set via LlmAgent.tools.");if(e.generateContentConfig.systemInstruction)throw new Error("System instruction must be set via LlmAgent.instruction.");if(e.generateContentConfig.responseSchema)throw new Error("Response schema must be set via LlmAgent.output_schema.")}else this.generateContentConfig={};if(this.outputSchema){if((!this.disallowTransferToParent||!this.disallowTransferToPeers)&&(m.warn(`Invalid config for agent ${this.name}: outputSchema cannot co-exist with agent transfer configurations. Setting disallowTransferToParent=true, disallowTransferToPeers=true`),this.disallowTransferToParent=!0,this.disallowTransferToPeers=!0),this.subAgents&&this.subAgents.length>0)throw new Error(`Invalid config for agent ${this.name}: if outputSchema is set, subAgents must be empty to disable agent transfer.`);if(this.tools&&this.tools.length>0)throw new Error(`Invalid config for agent ${this.name}: if outputSchema is set, tools must be empty`)}}get canonicalModel(){if(this.model instanceof $)return this.model;if(typeof this.model=="string"&&this.model)return J.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 xt(n,e);t.push(...r)}return t}static normalizeCallbackArray(e){return e?Array.isArray(e)?e:[e]:[]}get canonicalBeforeModelCallbacks(){return o.normalizeCallbackArray(this.beforeModelCallback)}get canonicalAfterModelCallbacks(){return o.normalizeCallbackArray(this.afterModelCallback)}get canonicalBeforeToolCallbacks(){return o.normalizeCallbackArray(this.beforeToolCallback)}get canonicalAfterToolCallbacks(){return o.normalizeCallbackArray(this.afterToolCallback)}maybeSaveOutputToState(e){var r,i;if(e.author!==this.name){m.debug(`Skipping output save for agent ${this.name}: event authored by ${e.author}`);return}if(!this.outputKey){m.debug(`Skipping output save for agent ${this.name}: outputKey is not set`);return}if(!V(e)){m.debug(`Skipping output save for agent ${this.name}: event is not a final response`);return}if(!((i=(r=e.content)==null?void 0:r.parts)!=null&&i.length)){m.debug(`Skipping output save for agent ${this.name}: event content is empty`);return}let t=e.content.parts.map(s=>s.text?s.text:"").join(""),n=t;if(this.outputSchema){if(!t.trim())return;try{n=JSON.parse(t)}catch(s){m.error(`Error parsing output for agent ${this.name}`,s)}}e.actions.stateDelta[this.outputKey]=n}async*runAsyncImpl(e){for(;;){let t;for await(let n of this.runOneStepAsync(e))t=n,this.maybeSaveOutputToState(n),yield n;if(!t||V(t))break;if(t.partial){m.warn("The last event is partial, which is not expected.");break}}}async*runLiveImpl(e){for await(let t of this.runLiveFlow(e))this.maybeSaveOutputToState(t),yield t;e.endInvocation}async*runLiveFlow(e){throw await Promise.resolve(),new Error("LlmAgent.runLiveFlow not implemented")}async*runOneStepAsync(e){let t={contents:[],toolsDict:{},liveConnectConfig:{}};for(let r of this.requestProcessors)for await(let i of r.runAsync(e,t))yield i;for(let r of this.tools){let i=new F({invocationContext:e}),s=await xt(r,new S(e));for(let a of s)await a.processLlmRequest({toolContext:i,llmRequest:t})}if(e.endInvocation)return;let n=T({invocationId:e.invocationId,author:this.name,branch:e.branch});for await(let r of this.callLlmAsync(e,t,n))for await(let i of this.postprocess(e,t,r,n))n.id=ye(),n.timestamp=new Date().getTime(),yield i}async*postprocess(e,t,n,r){var f;for(let u of this.responseProcessors)for await(let d of u.runAsync(e,n))yield d;if(!n.content&&!n.errorCode&&!n.interrupted)return;let i=T({...r,...n});if(i.content){let u=x(i);u!=null&&u.length&&(rt(i),i.longRunningToolIds=Array.from(st(u,t.toolsDict)))}if(yield i,!((f=x(i))!=null&&f.length))return;let s=await ct({invocationContext:e,functionCallEvent:i,toolsDict:t.toolsDict,beforeToolCallbacks:this.canonicalBeforeToolCallbacks,afterToolCallbacks:this.canonicalAfterToolCallbacks});if(!s)return;let a=at(e,s);a&&(yield a);let l=lt({invocationContext:e,functionCallEvent:i,functionResponseEvent:s});l&&(yield l),yield s;let c=s.actions.transferToAgent;if(c){let u=this.getAgentByName(e,c);for await(let d of u.runAsync(e))yield d}}getAgentByName(e,t){let r=e.agent.rootAgent.findAgent(t);if(!r)throw new Error(`Agent ${t} not found in the agent tree.`);return r}async*callLlmAsync(e,t,n){var s,a,l,c,f;let r=await this.handleBeforeModelCallback(e,t,n);if(r){yield r;return}(s=t.config)!=null||(t.config={}),(l=(a=t.config).labels)!=null||(a.labels={}),t.config.labels[Tt]||(t.config.labels[Tt]=this.name);let i=this.canonicalModel;if((c=e.runConfig)!=null&&c.supportCfc)throw new Error("CFC is not yet supported in callLlmAsync");{e.incrementLlmCallCount();let u=i.generateContentAsync(t,((f=e.runConfig)==null?void 0:f.streamingMode)==="sse");for await(let d of this.runAndHandleError(u,e,t,n)){let h=await this.handleAfterModelCallback(e,d,n);yield h!=null?h:d}}}async handleBeforeModelCallback(e,t,n){let r=new 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 l=JSON.parse(i.message);yield{errorCode:String(l.error.code),errorMessage:l.error.message}}}else throw m.error("Unknown error during response generation",i),i}}};var $e=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 De=class extends L{async*runAsyncImpl(e){let t=this.subAgents.map(n=>n.runAsync(Cn(this,n,e)));for await(let n of vn(t))yield n}async*runLiveImpl(e){throw new Error("This is not supported yet for ParallelAgent.")}};function Cn(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*vn(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 qe="task_completed",Ge=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 b&&((await t.canonicalTools(new S(e))).some(i=>i.name===qe)||(t.tools.push(new _({name:qe,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 ${qe} 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 te=class{constructor(){this.artifacts={}}saveArtifact({appName:e,userId:t,sessionId:n,filename:r,artifact:i}){let s=fe(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=fe(e,t,n,r),a=this.artifacts[s];return a?(i===void 0&&(i=a.length-1),Promise.resolve(a[i])):Promise.resolve(void 0)}listArtifactKeys({appName:e,userId:t,sessionId:n}){let r=`${e}/${t}/${n}/`,i=`${e}/${t}/user/`,s=[];for(let a in this.artifacts)if(a.startsWith(r)){let l=a.replace(r,"");s.push(l)}else if(a.startsWith(i)){let l=a.replace(i,"");s.push(l)}return Promise.resolve(s.sort())}deleteArtifact({appName:e,userId:t,sessionId:n,filename:r}){let i=fe(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=fe(e,t,n,r),s=this.artifacts[i];if(!s)return Promise.resolve([]);let a=[];for(let l=0;l<s.length;l++)a.push(l);return Promise.resolve(a)}};function fe(o,e,t,n){return yn(n)?`${o}/${e}/user/${n}`:`${o}/${e}/${t}/${n}`}function yn(o){return o.startsWith("user:")}var U=class{constructor(){this.memories=[];this.sessionEvents={}}async addSessionToMemory(e){let t=Et(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=Et(e.appName,e.userId);if(!this.sessionEvents[t])return Promise.resolve({memories:[]});let n=e.query.toLowerCase().split(/\s+/),r={memories:[]};for(let a of Object.values(this.sessionEvents[t]))for(let l of a){if(!((s=(i=l.content)==null?void 0:i.parts)!=null&&s.length))continue;let c=l.content.parts.map(d=>d.text).filter(d=>!!d).join(" "),f=An(c);if(!f.size)continue;n.some(d=>f.has(d))&&r.memories.push({content:l.content,author:l.author,timestamp:bn(l.timestamp)})}return r}};function Et(o,e){return`${o}/${e}`}function An(o){return new Set([...o.matchAll(/[A-Za-z]+/)].map(e=>e[0].toLowerCase()))}function bn(o){return new Date(o).toISOString()}var j=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 Ue=class extends j{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: ${V(t)}`);let n=x(t);if(n.length>0){let i=n.map(s=>s.name);this.log(` Function Calls: ${i}`)}let r=I(t);if(r.length>0){let i=r.map(s=>s.name);this.log(` Function Responses: ${i}`)}t.longRunningToolIds&&t.longRunningToolIds.length>0&&this.log(` Long Running Tools: ${[...t.longRunningToolIds]}`)}async afterRunCallback({invocationContext:e}){var t;this.log("\u2705 INVOCATION COMPLETED"),this.log(` Invocation ID: ${e.invocationId}`),this.log(` Final Agent: ${(t=e.agent.name)!=null?t:"Unknown"}`)}async beforeAgentCallback({agent:e,callbackContext:t}){this.log("\u{1F916} AGENT STARTING"),this.log(` Agent Name: ${t.agentName}`),this.log(` Invocation ID: ${t.invocationId}`),t.invocationContext.branch&&this.log(` Branch: ${t.invocationContext.branch}`)}async afterAgentCallback({agent:e,callbackContext:t}){this.log("\u{1F916} AGENT COMPLETED"),this.log(` Agent Name: ${t.agentName}`),this.log(` Invocation ID: ${t.invocationId}`)}async beforeModelCallback({callbackContext:e,llmRequest:t}){var n;if(this.log("\u{1F9E0} LLM REQUEST"),this.log(` Model: ${(n=t.model)!=null?n:"default"}`),this.log(` Agent: ${e.agentName}`),t.config&&t.config.systemInstruction){let r=t.config.systemInstruction;r.length>200&&(r=r.substring(0,200)+"..."),this.log(` System Instruction: '${r}'`)}if(t.toolsDict){let r=Object.keys(t.toolsDict);this.log(` Available Tools: ${r}`)}}async afterModelCallback({callbackContext:e,llmResponse:t}){this.log("\u{1F9E0} LLM RESPONSE"),this.log(` Agent: ${e.agentName}`),t.errorCode?(this.log(` \u274C ERROR - Code: ${t.errorCode}`),this.log(` Error Message: ${t.errorMessage}`)):(this.log(` Content: ${this.formatContent(t.content)}`),t.partial&&this.log(` Partial: ${t.partial}`),t.turnComplete!==void 0&&this.log(` Turn Complete: ${t.turnComplete}`)),t.usageMetadata&&this.log(` Token Usage - Input: ${t.usageMetadata.promptTokenCount}, Output: ${t.usageMetadata.candidatesTokenCount}`)}async beforeToolCallback({tool:e,toolArgs:t,toolContext:n}){this.log("\u{1F527} TOOL STARTING"),this.log(` Tool Name: ${e.name}`),this.log(` Agent: ${n.agentName}`),this.log(` Function Call ID: ${n.functionCallId}`),this.log(` Arguments: ${this.formatArgs(t)}`)}async afterToolCallback({tool:e,toolArgs:t,toolContext:n,result:r}){this.log("\u{1F527} TOOL COMPLETED"),this.log(` Tool Name: ${e.name}`),this.log(` Agent: ${n.agentName}`),this.log(` Function Call ID: ${n.functionCallId}`),this.log(` Result: ${this.formatArgs(r)}`)}async onModelErrorCallback({callbackContext:e,llmRequest:t,error:n}){this.log("\u{1F9E0} LLM ERROR"),this.log(` Agent: ${e.agentName}`),this.log(` Error: ${n}`)}async onToolErrorCallback({tool:e,toolArgs:t,toolContext:n,error:r}){this.log("\u{1F527} TOOL ERROR"),this.log(` Tool Name: ${e.name}`),this.log(` Agent: ${n.agentName}`),this.log(` Function Call ID: ${n.functionCallId}`),this.log(` Arguments: ${this.formatArgs(t)}`),this.log(` Error: ${r}`)}log(e){let t=`\x1B[90m[${this.name}] ${e}\x1B[0m`;m.info(t)}formatContent(e,t=200){if(!e||!e.parts)return"None";let n=[];for(let r of e.parts)if(r.text){let i=r.text.trim();i.length>t&&(i=i.substring(0,t)+"..."),n.push(`text: '${i}'`)}else r.functionCall?n.push(`function_call: ${r.functionCall.name}`):r.functionResponse?n.push(`function_response: ${r.functionResponse.name}`):r.codeExecutionResult?n.push("code_execution_result"):n.push("other_part");return n.join(" | ")}formatArgs(e,t=300){if(!e)return"{}";let n=JSON.stringify(e);return n.length>t&&(n=n.substring(0,t)+"...}"),n}};var ne=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 Rt="adk_request_confirmation",je="orcas_tool_call_security_check_states",St="This tool call needs external confirmation before completion.",It=(n=>(n.DENY="DENY",n.CONFIRM="CONFIRM",n.ALLOW="ALLOW",n))(It||{}),de=class{async evaluate(e){return Promise.resolve({outcome:"ALLOW",reason:"For prototyping purpose, all tool calls are allowed."})}},Ke=class extends j{constructor(e){var t;super("security_plugin"),this.policyEngine=(t=e==null?void 0:e.policyEngine)!=null?t:new de}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:St};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(je))!=null?r:{})[t]:void 0}setToolCallCheckState(e,t){var i;let{functionCallId:n}=e;if(!n)return;let r=(i=e.state.get(je))!=null?i:{};r[n]=t,e.state.set(je,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:St};case"ALLOW":return;default:return}}};function Tn(o){if(!o.content||!o.content.parts)return[];let e=[];for(let t of o.content.parts)t&&t.functionCall&&t.functionCall.name===Rt&&e.push(t.functionCall);return e}var me=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 pe(o){return{id:o.id,appName:o.appName,userId:o.userId||"",state:o.state||{},events:o.events||[],lastUpdateTime:o.lastUpdateTime||0}}var K=class extends me{constructor(){super(...arguments);this.sessions={};this.userState={};this.appState={}}createSession({appName:t,userId:n,state:r,sessionId:i}){let s=pe({id:i||z(),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,ee(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=ee(s);if(i&&(i.numRecentEvents&&(a.events=a.events.slice(-i.numRecentEvents)),i.afterTimestamp)){let l=a.events.length-1;for(;l>=0&&!(a.events[l].timestamp<i.afterTimestamp);)l--;l>=0&&(a.events=a.events.slice(l+1))}return Promise.resolve(this.mergeState(t,n,a))}listSessions({appName:t,userId:n}){if(!this.sessions[t]||!this.sessions[t][n])return Promise.resolve({sessions:[]});let r=[];for(let i of Object.values(this.sessions[t][n]))r.push(pe({id:i.id,appName:i.appName,userId:i.userId,state:{},events:[],lastUpdateTime:i.lastUpdateTime}));return Promise.resolve({sessions:r})}async deleteSession({appName:t,userId:n,sessionId:r}){await this.getSession({appName:t,userId:n,sessionId:r})&&delete this.sessions[t][n][r]}async appendEvent({session:t,event:n}){await super.appendEvent({session:t,event:n}),t.lastUpdateTime=n.timestamp;let r=t.appName,i=t.userId,s=t.id,a=c=>{m.warn(`Failed to append event to session ${s}: ${c}`)};if(!this.sessions[r])return a(`appName ${r} not in sessions`),n;if(!this.sessions[r][i])return a(`userId ${i} not in sessions[appName]`),n;if(!this.sessions[r][i][s])return a(`sessionId ${s} not in sessions[appName][userId]`),n;if(n.actions&&n.actions.stateDelta)for(let c of Object.keys(n.actions.stateDelta))c.startsWith(v.APP_PREFIX)&&(this.appState[r]=this.appState[r]||{},this.appState[r][c.replace(v.APP_PREFIX,"")]=n.actions.stateDelta[c]),c.startsWith(v.USER_PREFIX)&&(this.userState[r]=this.userState[r]||{},this.userState[r][i]=this.userState[r][i]||{},this.userState[r][i][c.replace(v.USER_PREFIX,"")]=n.actions.stateDelta[c]);let l=this.sessions[r][i][s];return await super.appendEvent({session:l,event:n}),l.lastUpdateTime=n.timestamp,n}mergeState(t,n,r){if(this.appState[t])for(let i of Object.keys(this.appState[t]))r.state[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 xn}from"@google/genai";import{trace as En}from"@opentelemetry/api";var Z=class{constructor(e){var t;this.appName=e.appName,this.agent=e.agent,this.pluginManager=new ne((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=At(i);let s=En.getTracer("gcp.vertex.agent").startSpan("invocation");try{let l=await this.sessionService.getSession({appName:this.appName,userId:e,sessionId:t});if(!l)throw new Error(`Session not found: ${t}`);if(i.supportCfc&&this.agent instanceof b){let d=this.agent.canonicalModel.model;if(!d.startsWith("gemini-2"))throw new Error(`CFC is not supported for model: ${d} in agent: ${this.agent.name}`)}let c=new M({artifactService:this.artifactService,sessionService:this.sessionService,memoryService:this.memoryService,credentialService:this.credentialService,invocationId:et(),agent:this.agent,session:l,userContent:n,runConfig:i,pluginManager:this.pluginManager}),f=await this.pluginManager.runOnUserMessageCallback({userMessage:n,invocationContext:c});if(f&&(n=f),n){if(!((a=n.parts)!=null&&a.length))throw new Error("No parts in the new_message.");i.saveInputBlobsAsArtifacts&&await this.saveArtifacts(c.invocationId,l.userId,l.id,n),await this.sessionService.appendEvent({session:l,event:T({invocationId:c.invocationId,author:"user",actions:r?q({stateDelta:r}):void 0,content:n})})}c.agent=this.determineAgentForResumption(l,this.agent);let u=await this.pluginManager.runBeforeRunCallback({invocationContext:c});if(u){let d=T({invocationId:c.invocationId,author:"model",content:u});await this.sessionService.appendEvent({session:l,event:d}),yield d}else for await(let d of c.agent.runAsync(c)){d.partial||await this.sessionService.appendEvent({session:l,event:d});let h=await this.pluginManager.runOnEventCallback({invocationContext:c,event:d});h?yield h:yield d}await this.pluginManager.runAfterRunCallback({invocationContext:c})}finally{s.end()}}async saveArtifacts(e,t,n,r){var i;if(!(!this.artifactService||!((i=r.parts)!=null&&i.length)))for(let s=0;s<r.parts.length;s++){let a=r.parts[s];if(!a.inlineData)continue;let l=`artifact_${e}_${s}`;await this.artifactService.saveArtifact({appName:this.appName,userId:t,sessionId:n,filename:l,artifact:a}),r.parts[s]=xn(`Uploaded file: ${l}. It is saved into artifacts`)}}determineAgentForResumption(e,t){let n=Sn(e.events);if(n&&n.author)return t.findAgent(n.author)||t;for(let r=e.events.length-1;r>=0;r--){m.info("event: ",JSON.stringify(e.events[r]));let i=e.events[r];if(i.author==="user"||!i.author)continue;if(i.author===t.name)return t;let s=t.findSubAgent(i.author);if(!s){m.warn(`Event from an unknown agent: ${i.author}, event id: ${i.id}`);continue}if(this.isRoutableLlmAgent(s))return s}return t}isRoutableLlmAgent(e){let t=e;for(;t;){if(!(t instanceof b)||t.disallowTransferToParent)return!1;t=t.parentAgent}return!0}};function Sn(o){var n,r,i,s;if(!o.length)return null;let t=(s=(i=(r=(n=o[o.length-1].content)==null?void 0:n.parts)==null?void 0:r.find(a=>a.functionResponse))==null?void 0:i.functionResponse)==null?void 0:s.id;if(!t)return null;for(let a=o.length-2;a>=0;a--){let l=o[a],c=x(l);if(c){for(let f of c)if(f.id===t)return l}}return null}var Ze=class extends Z{constructor({agent:e,appName:t="InMemoryRunner",plugins:n=[]}){super({appName:t,agent:e,plugins:n,artifactService:new te,sessionService:new K,memoryService:new U})}};import{Type as he}from"@google/genai";var ge=class{constructor(e){this.toolContext=e;this.invocationContext=e.invocationContext}async saveArtifact(e){return this.toolContext.saveArtifact(e.filename,e.artifact)}async loadArtifact(e){return this.toolContext.loadArtifact(e.filename,e.version)}async listArtifactKeys(e){return this.toolContext.listArtifacts()}async deleteArtifact(e){if(!this.toolContext.invocationContext.artifactService)throw new Error("Artifact service is not initialized.");return this.toolContext.invocationContext.artifactService.deleteArtifact(e)}async listVersions(e){if(!this.toolContext.invocationContext.artifactService)throw new Error("Artifact service is not initialized.");return this.toolContext.invocationContext.artifactService.listVersions(e)}};var Ve=class extends R{constructor(e){super({name:e.agent.name,description:e.agent.description||""}),this.agent=e.agent,this.skipSummarization=e.skipSummarization||!1}_getDeclaration(){let e;if(this.agent instanceof b&&this.agent.inputSchema?e={name:this.name,description:this.description,parameters:this.agent.inputSchema}:e={name:this.name,description:this.description,parameters:{type:he.OBJECT,properties:{request:{type:he.STRING}},required:["request"]}},this.apiVariant!=="GEMINI_API"){let t=this.agent instanceof b&&this.agent.outputSchema;e.response=t?{type:he.OBJECT}:{type:he.STRING}}return e}async runAsync({args:e,toolContext:t}){var f,u;this.skipSummarization&&(t.actions.skipSummarization=!0);let r={role:"user",parts:[{text:this.agent instanceof b&&this.agent.inputSchema?JSON.stringify(e):e.request}]},i=new Z({appName:this.agent.name,agent:this.agent,artifactService:new ge(t),sessionService:new K,memoryService:new U,credentialService:t.invocationContext.credentialService}),s=await i.sessionService.createSession({appName:this.agent.name,userId:"tmp_user",state:t.state.toRecord()}),a;for await(let d of i.runAsync({userId:s.userId,sessionId:s.id,newMessage:r}))d.actions.stateDelta&&t.state.update(d.actions.stateDelta),a=d;if(!((u=(f=a==null?void 0:a.content)==null?void 0:f.parts)!=null&&u.length))return"";let l=this.agent instanceof b&&this.agent.outputSchema,c=a.content.parts.map(d=>d.text).filter(d=>d).join(`
|
|
32
|
+
`);return l?JSON.parse(c):c}};var oe=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 Rn="^projects/[^/]+/locations/[^/]+/publishers/[^/]+/models/(.+)$";function wt(o){let e=o.match(Rn);return e?e[1]:o}function kt(o){return wt(o).startsWith("gemini-")}function Pt(o){return wt(o).startsWith("gemini-1")}var ze=class extends R{constructor(){super({name:"google_search",description:"Google Search Tool"})}runAsync(e){return Promise.resolve()}async processLlmRequest({toolContext:e,llmRequest:t}){if(t.model){if(t.config=t.config||{},t.config.tools=t.config.tools||[],Pt(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(kt(t.model)){t.config.tools.push({googleSearch:{}});return}throw new Error(`Google search tool is not supported for model ${t.model}`)}}},In=new ze;var Lt=`
|
|
33
33
|
|
|
34
|
-
NOTE: This is a long-running operation. Do not call this tool again if it has already returned some intermediate or pending status.`,We=class extends _{constructor(e){super({...e,isLongRunning:!0})}_getDeclaration(){let e=super._getDeclaration();return e.description?e.description+=Lt:e.description=Lt.trimStart(),e}};import{Client as wn}from"@modelcontextprotocol/sdk/client/index.js";import{StdioClientTransport as kn}from"@modelcontextprotocol/sdk/client/stdio.js";import{StreamableHTTPClientTransport as Pn}from"@modelcontextprotocol/sdk/client/streamableHttp.js";var
|
|
34
|
+
NOTE: This is a long-running operation. Do not call this tool again if it has already returned some intermediate or pending status.`,We=class extends _{constructor(e){super({...e,isLongRunning:!0})}_getDeclaration(){let e=super._getDeclaration();return e.description?e.description+=Lt:e.description=Lt.trimStart(),e}};import{Client as wn}from"@modelcontextprotocol/sdk/client/index.js";import{StdioClientTransport as kn}from"@modelcontextprotocol/sdk/client/stdio.js";import{StreamableHTTPClientTransport as Pn}from"@modelcontextprotocol/sdk/client/streamableHttp.js";var Ce=class{constructor(e){this.connectionParams=e}async createSession(){let e=new wn({name:"MCPClient",version:"1.0.0"});switch(this.connectionParams.type){case"StdioConnectionParams":await e.connect(new kn(this.connectionParams.serverParams));break;case"StreamableHTTPConnectionParams":await e.connect(new Pn(new URL(this.connectionParams.url)));break;default:let t=this.connectionParams;break}return e}};import{Type as N}from"@google/genai";import{z as re}from"zod";var na=re.object({type:re.literal("object"),properties:re.record(re.unknown()).optional(),required:re.string().array().optional()});function Ln(o){switch(o.toLowerCase()){case"text":case"string":return N.STRING;case"number":return N.NUMBER;case"boolean":return N.BOOLEAN;case"integer":return N.INTEGER;case"array":return N.ARRAY;case"object":return N.OBJECT;default:return N.TYPE_UNSPECIFIED}}function Qe(o){if(!o)return;function e(t){let n=Ln(t.type),r={type:n,description:t.description};if(n===N.OBJECT){if(r.properties={},t.properties)for(let i in t.properties)r.properties[i]=e(t.properties[i]);r.required=t.required}else n===N.ARRAY&&t.items&&(r.items=e(t.items));return r}return e(o)}var ve=class extends R{constructor(e,t){super({name:e.name,description:e.description||""}),this.mcpTool=e,this.mcpSessionManager=t}_getDeclaration(){let e;return e={name:this.mcpTool.name,description:this.mcpTool.description,parameters:Qe(this.mcpTool.inputSchema),response:Qe(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 Mt=class extends oe{constructor(e,t=[]){super(t),this.mcpSessionManager=new Ce(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 ve(r,this.mcpSessionManager))}async close(){}};export{Ve as AgentTool,L as BaseAgent,$ as BaseLlm,j as BasePlugin,me as BaseSessionService,R as BaseTool,oe as BaseToolset,w as CallbackContext,_ as FunctionTool,In as GOOGLE_SEARCH,H as Gemini,te as InMemoryArtifactService,U as InMemoryMemoryService,de as InMemoryPolicyEngine,Ze as InMemoryRunner,K as InMemorySessionService,M as InvocationContext,Se as LiveRequestQueue,b as LlmAgent,ot as LogLevel,Ue as LoggingPlugin,We as LongRunningFunctionTool,$e as LoopAgent,Ce as MCPSessionManager,ve as MCPTool,Mt as MCPToolset,De as ParallelAgent,ne as PluginManager,It as PolicyOutcome,Rt as REQUEST_CONFIRMATION_FUNCTION_CALL_NAME,Z as Runner,Ke as SecurityPlugin,Ge as SequentialAgent,Le as StreamingMode,G as ToolConfirmation,F as ToolContext,T as createEvent,pe as createSession,Gt as functionsExportedForTestingOnly,Tn as getAskUserConfirmationFunctionCalls,x as getFunctionCalls,I as getFunctionResponses,Je as hasTrailingCodeExecutionResult,V as isFinalResponse,Ft as setLogLevel,Bt as stringifyContent,ue as zodObjectToSchema};
|
|
35
35
|
/**
|
|
36
36
|
* @license
|
|
37
37
|
* Copyright 2025 Google LLC
|