@google/adk 0.5.0 → 0.6.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (142) hide show
  1. package/README.md +1 -1
  2. package/dist/cjs/a2a/a2a_event.js +53 -26
  3. package/dist/cjs/a2a/a2a_remote_agent.js +179 -0
  4. package/dist/cjs/a2a/a2a_remote_agent_run_processor.js +205 -0
  5. package/dist/cjs/a2a/a2a_remote_agent_utils.js +165 -0
  6. package/dist/cjs/a2a/agent_card.js +380 -0
  7. package/dist/cjs/a2a/agent_executor.js +221 -0
  8. package/dist/cjs/a2a/agent_to_a2a.js +115 -0
  9. package/dist/cjs/a2a/event_processor_utils.js +180 -0
  10. package/dist/cjs/a2a/executor_context.js +1 -1
  11. package/dist/cjs/a2a/metadata_converter_utils.js +1 -0
  12. package/dist/cjs/a2a/part_converter_utils.js +24 -13
  13. package/dist/cjs/agents/llm_agent.js +17 -0
  14. package/dist/cjs/agents/{content_processor_utils.js → processors/content_processor_utils.js} +21 -2
  15. package/dist/cjs/agents/processors/content_request_processor.js +24 -3
  16. package/dist/cjs/agents/processors/context_compactor_request_processor.js +61 -0
  17. package/dist/cjs/agents/processors/instructions_llm_request_processor.js +1 -1
  18. package/dist/cjs/artifacts/file_artifact_service.js +35 -4
  19. package/dist/cjs/common.js +37 -0
  20. package/dist/cjs/context/base_context_compactor.js +27 -0
  21. package/dist/cjs/context/summarizers/base_summarizer.js +27 -0
  22. package/dist/cjs/context/summarizers/llm_summarizer.js +93 -0
  23. package/dist/cjs/context/token_based_context_compactor.js +135 -0
  24. package/dist/cjs/context/truncating_context_compactor.js +58 -0
  25. package/dist/cjs/events/compacted_event.js +53 -0
  26. package/dist/cjs/index.js +38 -14
  27. package/dist/cjs/index.js.map +4 -4
  28. package/dist/cjs/memory/in_memory_memory_service.js +1 -1
  29. package/dist/cjs/runner/runner.js +19 -10
  30. package/dist/cjs/sessions/db/operations.js +4 -14
  31. package/dist/cjs/sessions/state.js +2 -2
  32. package/dist/cjs/tools/agent_tool.js +6 -5
  33. package/dist/cjs/tools/load_artifacts_tool.js +188 -0
  34. package/dist/cjs/tools/load_memory_tool.js +107 -0
  35. package/dist/cjs/tools/preload_memory_tool.js +109 -0
  36. package/dist/cjs/utils/gemini_schema_util.js +54 -12
  37. package/dist/cjs/utils/logger.js +1 -0
  38. package/dist/cjs/version.js +1 -1
  39. package/dist/esm/a2a/a2a_event.js +52 -26
  40. package/dist/esm/a2a/a2a_remote_agent.js +153 -0
  41. package/dist/esm/a2a/a2a_remote_agent_run_processor.js +182 -0
  42. package/dist/esm/a2a/a2a_remote_agent_utils.js +131 -0
  43. package/dist/esm/a2a/agent_card.js +340 -0
  44. package/dist/esm/a2a/agent_executor.js +202 -0
  45. package/dist/esm/a2a/agent_to_a2a.js +80 -0
  46. package/dist/esm/a2a/event_processor_utils.js +159 -0
  47. package/dist/esm/a2a/executor_context.js +1 -1
  48. package/dist/esm/a2a/metadata_converter_utils.js +1 -0
  49. package/dist/esm/a2a/part_converter_utils.js +24 -13
  50. package/dist/esm/agents/llm_agent.js +17 -0
  51. package/dist/esm/agents/{content_processor_utils.js → processors/content_processor_utils.js} +23 -2
  52. package/dist/esm/agents/processors/content_request_processor.js +25 -4
  53. package/dist/esm/agents/processors/context_compactor_request_processor.js +31 -0
  54. package/dist/esm/agents/processors/instructions_llm_request_processor.js +1 -1
  55. package/dist/esm/artifacts/file_artifact_service.js +30 -3
  56. package/dist/esm/common.js +33 -1
  57. package/dist/esm/context/base_context_compactor.js +5 -0
  58. package/dist/esm/context/summarizers/base_summarizer.js +5 -0
  59. package/dist/esm/context/summarizers/llm_summarizer.js +65 -0
  60. package/dist/esm/context/token_based_context_compactor.js +105 -0
  61. package/dist/esm/context/truncating_context_compactor.js +28 -0
  62. package/dist/esm/events/compacted_event.js +22 -0
  63. package/dist/esm/index.js +38 -14
  64. package/dist/esm/index.js.map +4 -4
  65. package/dist/esm/memory/in_memory_memory_service.js +1 -1
  66. package/dist/esm/runner/runner.js +17 -9
  67. package/dist/esm/sessions/db/operations.js +4 -14
  68. package/dist/esm/sessions/state.js +2 -2
  69. package/dist/esm/tools/agent_tool.js +6 -5
  70. package/dist/esm/tools/load_artifacts_tool.js +159 -0
  71. package/dist/esm/tools/load_memory_tool.js +78 -0
  72. package/dist/esm/tools/preload_memory_tool.js +80 -0
  73. package/dist/esm/utils/gemini_schema_util.js +54 -12
  74. package/dist/esm/utils/logger.js +1 -0
  75. package/dist/esm/version.js +1 -1
  76. package/dist/types/a2a/a2a_event.d.ts +23 -6
  77. package/dist/types/a2a/a2a_remote_agent.d.ts +67 -0
  78. package/dist/types/a2a/a2a_remote_agent_run_processor.d.ts +31 -0
  79. package/dist/types/a2a/a2a_remote_agent_utils.d.ts +38 -0
  80. package/dist/types/a2a/agent_card.d.ts +23 -0
  81. package/dist/types/a2a/agent_executor.d.ts +52 -0
  82. package/dist/types/a2a/agent_to_a2a.d.ts +45 -0
  83. package/dist/types/a2a/event_processor_utils.d.ts +24 -0
  84. package/dist/types/a2a/executor_context.d.ts +1 -1
  85. package/dist/types/a2a/metadata_converter_utils.d.ts +2 -1
  86. package/dist/types/agents/llm_agent.d.ts +6 -0
  87. package/dist/types/agents/loop_agent.d.ts +1 -1
  88. package/dist/types/agents/{content_processor_utils.d.ts → processors/content_processor_utils.d.ts} +1 -1
  89. package/dist/types/agents/processors/context_compactor_request_processor.d.ts +22 -0
  90. package/dist/types/artifacts/file_artifact_service.d.ts +4 -0
  91. package/dist/types/common.d.ts +16 -1
  92. package/dist/types/context/base_context_compactor.d.ts +24 -0
  93. package/dist/types/context/summarizers/base_summarizer.d.ts +19 -0
  94. package/dist/types/context/summarizers/llm_summarizer.d.ts +23 -0
  95. package/dist/types/context/token_based_context_compactor.d.ts +33 -0
  96. package/dist/types/context/truncating_context_compactor.d.ts +24 -0
  97. package/dist/types/events/compacted_event.d.ts +33 -0
  98. package/dist/types/index.d.ts +8 -0
  99. package/dist/types/runner/runner.d.ts +13 -0
  100. package/dist/types/sessions/db/operations.d.ts +2 -3
  101. package/dist/types/tools/load_artifacts_tool.d.ts +21 -0
  102. package/dist/types/tools/load_memory_tool.d.ts +22 -0
  103. package/dist/types/tools/preload_memory_tool.d.ts +23 -0
  104. package/dist/types/version.d.ts +1 -1
  105. package/dist/web/a2a/a2a_event.js +52 -26
  106. package/dist/web/a2a/a2a_remote_agent.js +184 -0
  107. package/dist/web/a2a/a2a_remote_agent_run_processor.js +182 -0
  108. package/dist/web/a2a/a2a_remote_agent_utils.js +131 -0
  109. package/dist/web/a2a/agent_card.js +340 -0
  110. package/dist/web/a2a/agent_executor.js +216 -0
  111. package/dist/web/a2a/agent_to_a2a.js +80 -0
  112. package/dist/web/a2a/event_processor_utils.js +168 -0
  113. package/dist/web/a2a/executor_context.js +1 -1
  114. package/dist/web/a2a/metadata_converter_utils.js +1 -0
  115. package/dist/web/a2a/part_converter_utils.js +24 -13
  116. package/dist/web/agents/llm_agent.js +17 -0
  117. package/dist/web/agents/{content_processor_utils.js → processors/content_processor_utils.js} +22 -2
  118. package/dist/web/agents/processors/content_request_processor.js +25 -4
  119. package/dist/web/agents/processors/context_compactor_request_processor.js +49 -0
  120. package/dist/web/agents/processors/instructions_llm_request_processor.js +1 -1
  121. package/dist/web/artifacts/file_artifact_service.js +30 -3
  122. package/dist/web/common.js +33 -1
  123. package/dist/web/context/base_context_compactor.js +5 -0
  124. package/dist/web/context/summarizers/base_summarizer.js +5 -0
  125. package/dist/web/context/summarizers/llm_summarizer.js +74 -0
  126. package/dist/web/context/token_based_context_compactor.js +105 -0
  127. package/dist/web/context/truncating_context_compactor.js +28 -0
  128. package/dist/web/events/compacted_event.js +40 -0
  129. package/dist/web/index.js +1 -1
  130. package/dist/web/index.js.map +4 -4
  131. package/dist/web/memory/in_memory_memory_service.js +1 -1
  132. package/dist/web/runner/runner.js +17 -9
  133. package/dist/web/sessions/db/operations.js +4 -14
  134. package/dist/web/sessions/state.js +2 -2
  135. package/dist/web/tools/agent_tool.js +6 -5
  136. package/dist/web/tools/load_artifacts_tool.js +150 -0
  137. package/dist/web/tools/load_memory_tool.js +77 -0
  138. package/dist/web/tools/preload_memory_tool.js +75 -0
  139. package/dist/web/utils/gemini_schema_util.js +85 -12
  140. package/dist/web/utils/logger.js +1 -0
  141. package/dist/web/version.js +1 -1
  142. package/package.json +7 -5
package/dist/esm/index.js CHANGED
@@ -4,11 +4,11 @@
4
4
  * SPDX-License-Identifier: Apache-2.0
5
5
  */
6
6
 
7
- var Tr=Object.create;var ut=Object.defineProperty;var Pn=Object.getOwnPropertyDescriptor;var Sr=Object.getOwnPropertyNames;var Rr=Object.getPrototypeOf,br=Object.prototype.hasOwnProperty;var Se=(n=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(n,{get:(e,t)=>(typeof require<"u"?require:e)[t]}):n)(function(n){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+n+'" is not supported')});var wr=(n,e,t,o)=>{if(e&&typeof e=="object"||typeof e=="function")for(let r of Sr(e))!br.call(n,r)&&r!==t&&ut(n,r,{get:()=>e[r],enumerable:!(o=Pn(e,r))||o.enumerable});return n};var Re=(n,e,t)=>(t=n!=null?Tr(Rr(n)):{},wr(e||!n||!n.__esModule?ut(t,"default",{value:n,enumerable:!0}):t,n));var x=(n,e,t,o)=>{for(var r=o>1?void 0:o?Pn(e,t):e,i=n.length-1,s;i>=0;i--)(s=n[i])&&(r=(o?s(e,t,r):s(r))||r);return o&&r&&ut(e,t,r),r};import*as S from"fs/promises";import*as y from"path";import{fileURLToPath as On,pathToFileURL as _r}from"url";import*as F from"winston";var Ln=(r=>(r[r.DEBUG=0]="DEBUG",r[r.INFO=1]="INFO",r[r.WARN=2]="WARN",r[r.ERROR=3]="ERROR",r))(Ln||{}),ft=class{constructor(){this.logLevel=1;this.logger=F.createLogger({levels:{debug:0,info:1,warn:2,error:3},format:F.format.combine(F.format.label({label:"ADK"}),F.format(e=>(e.level=e.level.toUpperCase(),e))(),F.format.colorize(),F.format.timestamp(),F.format.printf(e=>`${e.level}: [${e.label}] ${e.timestamp} ${e.message}`)),transports:[new F.transports.Console]})}setLogLevel(e){this.logLevel=e}log(e,...t){this.logLevel>e||this.logger.log(e.toString(),t.join(" "))}debug(...e){this.logLevel>0||this.logger.debug(e.join(" "))}info(...e){this.logLevel>1||this.logger.info(e.join(" "))}warn(...e){this.logLevel>2||this.logger.warn(e.join(" "))}error(...e){this.logLevel>3||this.logger.error(e.join(" "))}},pt=class{setLogLevel(e){}log(e,...t){}debug(...e){}info(...e){}warn(...e){}error(...e){}},J=new ft;function Ir(n){J=n!=null?n:new pt}function Pr(){return J}function Lr(n){m.setLogLevel(n)}var m={setLogLevel(n){J.setLogLevel(n)},log(n,...e){J.log(n,...e)},debug(...n){J.debug(...n)},info(...n){J.info(...n)},warn(...n){J.warn(...n)},error(...n){J.error(...n)}};var Ke="user:",be=class{constructor(e){try{let t=e.startsWith("file://")?On(e):e;this.rootDir=y.resolve(t)}catch(t){throw new Error(`Invalid root directory: ${e}`,{cause:t})}}async saveArtifact({userId:e,sessionId:t,filename:o,artifact:r,customMetadata:i}){if(!r.inlineData&&!r.text)throw new Error("Artifact must have either inlineData or text content.");let s=ne(this.rootDir,e,t,o);await S.mkdir(s,{recursive:!0});let a=await ve(s),c=a.length>0?a[a.length-1]+1:0,l=oe(s),u=y.join(l,c.toString());await S.mkdir(u,{recursive:!0});let f=y.basename(s),p=y.join(u,f),d;if(r.inlineData){let h=r.inlineData.data||"";await S.writeFile(p,Buffer.from(h,"base64")),d=r.inlineData.mimeType||"application/octet-stream"}else r.text!==void 0&&await S.writeFile(p,r.text,"utf-8");let g=await Or(this.rootDir,e,t,o,c),C={fileName:o,mimeType:d,version:c,canonicalUri:g,customMetadata:i};return await Mr(y.join(u,"metadata.json"),C),c}async loadArtifact({userId:e,sessionId:t,filename:o,version:r}){try{let i=ne(this.rootDir,e,t,o);try{await S.access(i)}catch(d){m.warn(`[FileArtifactService] loadArtifact: Artifact ${o} not found`,d);return}let s=await ve(i);if(s.length===0)return;let a;if(r===void 0)a=s[s.length-1];else{if(!s.includes(r)){m.warn(`[FileArtifactService] loadArtifact: Artifact ${o} version ${r} not found`);return}a=r}let c=y.join(oe(i),a.toString()),l=y.join(c,"metadata.json"),u=await ze(l),f=y.basename(i),p=y.join(c,f);if(u.canonicalUri){let d=Nr(u.canonicalUri);if(d)try{await S.access(d),p=d}catch{m.warn(`[FileArtifactService] loadArtifact: Artifact ${o} missing at ${d}, falling back to content path ${p}`)}}if(u.mimeType)try{let d=await S.readFile(p);return{inlineData:{mimeType:u.mimeType,data:d.toString("base64")}}}catch{m.warn(`[FileArtifactService] loadArtifact: Artifact ${o} missing at ${p}`);return}try{return{text:await S.readFile(p,"utf-8")}}catch{m.warn(`[FileArtifactService] loadArtifact: Text artifact ${o} missing at ${p}`);return}}catch(i){m.error(`[FileArtifactService] loadArtifact: Error loading artifact ${o}`,i);return}}async listArtifactKeys({userId:e,sessionId:t}){let o=new Set,r=Mn(this.rootDir,e),i=Bn(r,t);for await(let a of dt(i)){let c=await _n(a);if(c!=null&&c.fileName)o.add(c.fileName);else{let l=y.relative(i,a);o.add(kn(l))}}let s=Nn(r);for await(let a of dt(s)){let c=await _n(a);if(c!=null&&c.fileName)o.add(c.fileName);else{let l=y.relative(s,a);o.add(`${Ke}${kn(l)}`)}}return Array.from(o).sort()}async deleteArtifact({userId:e,sessionId:t,filename:o}){try{let r=ne(this.rootDir,e,t,o);await S.rm(r,{recursive:!0,force:!0})}catch(r){m.warn(`[FileArtifactService] deleteArtifact: Failed to delete artifact ${o}`,r)}}async listVersions({userId:e,sessionId:t,filename:o}){try{let r=ne(this.rootDir,e,t,o);return await ve(r)}catch(r){return m.warn(`[FileArtifactService] listVersions: Failed to list versions for artifact ${o}`,r),[]}}async listArtifactVersions({userId:e,sessionId:t,filename:o}){try{let r=ne(this.rootDir,e,t,o),i=await ve(r),s=[];for(let a of i){let c=y.join(oe(r),a.toString(),"metadata.json");try{let l=await ze(c);s.push(l)}catch(l){m.warn(`[FileArtifactService] listArtifactVersions: Failed to read artifact version ${a} at ${r}`,l)}}return s}catch(r){return m.warn(`[FileArtifactService] listArtifactVersions: Failed to list artifact versions for userId: ${e} sessionId: ${t} filename: ${o}`,r),[]}}async getArtifactVersion({userId:e,sessionId:t,filename:o,version:r}){try{let i=ne(this.rootDir,e,t,o),s=await ve(i);if(s.length===0)return;let a;if(r===void 0)a=s[s.length-1];else{if(!s.includes(r))return;a=r}let c=y.join(oe(i),a.toString(),"metadata.json");return await ze(c)}catch(i){m.warn(`[FileArtifactService] getArtifactVersion: Failed to get artifact version for userId: ${e} sessionId: ${t} filename: ${o} version: ${r}`,i);return}}};function Mn(n,e){return y.join(n,"users",e)}function kr(n,e){return!n||e.startsWith(Ke)}function Nn(n){return y.join(n,"artifacts")}function Bn(n,e){return y.join(n,"sessions",e,"artifacts")}function oe(n){return y.join(n,"versions")}function ne(n,e,t,o){let r=Mn(n,e),i;if(kr(t,o))i=Nn(r);else{if(!t)throw new Error("Session ID must be provided for session-scoped artifacts.");i=Bn(r,t)}let s=o;if(s.startsWith(Ke)&&(s=s.substring(Ke.length)),s=s.trim(),y.isAbsolute(s))throw new Error(`Absolute artifact filename ${o} is not permitted.`);let a=y.resolve(i,s),c=y.relative(i,a);if(c.startsWith("..")||y.isAbsolute(c))throw new Error(`Artifact filename ${o} escapes storage directory.`);return c===""||c==="."?y.join(i,"artifact"):a}async function ve(n){let e=oe(n);try{return(await S.readdir(e,{withFileTypes:!0})).filter(r=>r.isDirectory()).map(r=>parseInt(r.name,10)).filter(r=>!isNaN(r)).sort((r,i)=>r-i)}catch(t){return m.warn(`[FileArtifactService] getArtifactVersionsFromDir: Failed to list artifact versions from ${n}`,t),[]}}async function Or(n,e,t,o,r){let i=await ne(n,e,t,o),s=y.basename(i),a=oe(i),c=y.join(a,r.toString(),s);return _r(c).toString()}async function Mr(n,e){await S.writeFile(n,JSON.stringify(e,null,2),"utf-8")}async function ze(n){let e=await S.readFile(n,"utf-8");return JSON.parse(e)}async function _n(n){let e=await ve(n);if(e.length===0)return;let t=e[e.length-1],o=y.join(oe(n),t.toString(),"metadata.json");try{return await ze(o)}catch(r){m.warn(`[FileArtifactService] getLatestMetadata: Failed to read metadata from ${o}`,r);return}}async function*dt(n){try{let e=await S.readdir(n,{withFileTypes:!0});if(e.some(o=>o.isDirectory()&&o.name==="versions")){yield n;return}for(let o of e)if(o.isDirectory()){let r=y.join(n,o.name);for await(let i of dt(r))yield i}}catch{}}function Nr(n){try{return On(n)}catch(e){m.warn(`[FileArtifactService] fileUriToPath: Failed to convert file URI to path: ${n}`,e);return}}function kn(n){return n.split(y.sep).join("/")}import{Storage as Br}from"@google-cloud/storage";import{createPartFromBase64 as Dr,createPartFromText as Fr}from"@google/genai";var Ie=class{constructor(e){this.bucket=new Br().bucket(e)}async saveArtifact(e){if(!e.artifact.inlineData&&!e.artifact.text)throw new Error("Artifact must have either inlineData or text content.");let t=await this.listVersions(e),o=t.length>0?Math.max(...t)+1:0,r=this.bucket.file(we({...e,version:o})),i=e.customMetadata||{};return e.artifact.inlineData?(await r.save(Buffer.from(e.artifact.inlineData.data||"","base64"),{contentType:e.artifact.inlineData.mimeType,metadata:i}),o):(await r.save(e.artifact.text,{contentType:"text/plain",metadata:i}),o)}async loadArtifact(e){try{let t=e.version;if(t===void 0){let s=await this.listVersions(e);if(s.length===0)return;t=Math.max(...s)}let o=this.bucket.file(we({...e,version:t})),[[r],[i]]=await Promise.all([o.getMetadata(),o.download()]);return r.contentType==="text/plain"?Fr(i.toString("utf-8")):Dr(i.toString("base64"),r.contentType)}catch(t){m.warn(`[GcsArtifactService] loadArtifact: Failed to load artifact ${e.filename}`,t);return}}async listArtifactKeys(e){let t=`${e.appName}/${e.userId}/${e.sessionId}/`,o=`${e.appName}/${e.userId}/user/`,[[r],[i]]=await Promise.all([this.bucket.getFiles({prefix:t}),this.bucket.getFiles({prefix:o})]);return[...Dn(r,t),...Dn(i,o,"user:")].sort((s,a)=>s.localeCompare(a))}async deleteArtifact(e){let t=await this.listVersions(e);await Promise.all(t.map(o=>this.bucket.file(we({...e,version:o})).delete()))}async listVersions(e){let o=we(e)+"/",[r]=await this.bucket.getFiles({prefix:o}),i=[];for(let s of r){let a=s.name.split("/").pop(),c=parseInt(a,10);isNaN(c)||i.push(c)}return i.sort((s,a)=>s-a)}async listArtifactVersions(e){let t=await this.listVersions(e),o=[];for(let r of t){let i=await this.getArtifactVersion({...e,version:r});i&&o.push(i)}return o}async getArtifactVersion(e){try{let t=e.version;if(t===void 0){let i=await this.listVersions(e);if(i.length===0)return;t=Math.max(...i)}let o=this.bucket.file(we({...e,version:t})),[r]=await o.getMetadata();return{version:t,mimeType:r.contentType,customMetadata:r.metadata,canonicalUri:o.publicUrl()}}catch(t){m.warn(`[GcsArtifactService] getArtifactVersion: Failed to get artifact version for userId: ${e.userId} sessionId: ${e.sessionId} filename: ${e.filename} version: ${e.version}`,t);return}}};function we({appName:n,userId:e,sessionId:t,filename:o,version:r}){let i=o.startsWith("user:"),s=i?o.substring(5):o,a=i?`${n}/${e}/user/${s}`:`${n}/${e}/${t}/${s}`;return r!==void 0?`${a}/${r}`:a}function Dn(n,e,t=""){let o=new Set;for(let r of n){if(!r.name.startsWith(e))continue;let i=r.name.substring(e.length),s=$r(i);o.add(`${t}${s}`)}return[...o]}function $r(n){let e=n.split("/");return e.length<2?n:e.slice(0,-1).join("/")}function Fn(n){return n==="memory://"}var re=class{constructor(){this.artifacts={}}saveArtifact({appName:e,userId:t,sessionId:o,filename:r,artifact:i,customMetadata:s}){if(!i.inlineData&&!i.text)return Promise.reject(new Error("Artifact must have either inlineData or text content."));let a=Ce(e,t,o,r);this.artifacts[a]||(this.artifacts[a]=[]);let c=this.artifacts[a].length,l={version:c,customMetadata:s};return this.artifacts[a].push({part:i,metadata:l}),Promise.resolve(c)}loadArtifact({appName:e,userId:t,sessionId:o,filename:r,version:i}){let s=Ce(e,t,o,r),a=this.artifacts[s];return a?(i===void 0&&(i=a.length-1),Promise.resolve(a[i].part)):Promise.resolve(void 0)}listArtifactKeys({appName:e,userId:t,sessionId:o}){let r=`${e}/${t}/${o}/`,i=`${e}/${t}/user/`,s=[];for(let a in this.artifacts)if(a.startsWith(r)){let c=a.replace(r,"");s.push(c)}else if(a.startsWith(i)){let c=a.replace(i,"");s.push(c)}return Promise.resolve(s.sort())}deleteArtifact({appName:e,userId:t,sessionId:o,filename:r}){let i=Ce(e,t,o,r);return this.artifacts[i]&&delete this.artifacts[i],Promise.resolve()}listVersions({appName:e,userId:t,sessionId:o,filename:r}){let i=Ce(e,t,o,r),s=this.artifacts[i];if(!s)return Promise.resolve([]);let a=[];for(let c=0;c<s.length;c++)a.push(c);return Promise.resolve(a)}listArtifactVersions({appName:e,userId:t,sessionId:o,filename:r}){let i=Ce(e,t,o,r),s=this.artifacts[i];return s?Promise.resolve(s.map(a=>a.metadata)):Promise.resolve([])}getArtifactVersion({appName:e,userId:t,sessionId:o,filename:r,version:i}){let s=Ce(e,t,o,r),a=this.artifacts[s];return a?(i===void 0&&(i=a.length-1),a[i]?Promise.resolve(a[i].metadata):Promise.resolve(void 0)):Promise.resolve(void 0)}};function Ce(n,e,t,o){return Gr(o)?`${n}/${e}/user/${o}`:`${n}/${e}/${t}/${o}`}function Gr(n){return n.startsWith("user:")}function qr(n){if(Fn(n))return new re;if(n.startsWith("gs://")){let e=n.split("://")[1];return new Ie(e)}if(n.startsWith("file://")){let e=n.split("://")[1];return new be(e)}throw new Error(`Unsupported artifact service URI: ${n}`)}var mt=class{constructor(e={}){this.task=e.task,this.stream=e.stream}};import{context as to,trace as no}from"@opentelemetry/api";function $n(n,e=[]){return We(n,Ur,"",e)}function Gn(n,e=[]){return We(n,Vr,"",e)}var Ur=n=>n.replace(/_([a-z])/g,(e,t)=>t.toUpperCase()),Vr=n=>n.replace(/[A-Z]/g,e=>"_"+e.toLowerCase());function We(n,e,t="",o=[]){if(Array.isArray(n))return n.map(r=>We(r,e,t,o));if(typeof n=="object"&&n!==null){let r=n,i={};for(let s of Object.keys(r)){let a=e(s),c=t!==""?t+"."+s:s;o.includes(c)?i[a]=r[s]:i[a]=We(r[s],e,c,o)}return i}return n}function U(n={}){return{stateDelta:{},artifactDelta:{},requestedAuthConfigs:{},requestedToolConfirmations:{},...n}}function qn(n,e){let t=U();e&&Object.assign(t,e);for(let o of n)o&&(o.stateDelta&&Object.assign(t.stateDelta,o.stateDelta),o.artifactDelta&&Object.assign(t.artifactDelta,o.artifactDelta),o.requestedAuthConfigs&&Object.assign(t.requestedAuthConfigs,o.requestedAuthConfigs),o.requestedToolConfirmations&&Object.assign(t.requestedToolConfirmations,o.requestedToolConfirmations),o.skipSummarization!==void 0&&(t.skipSummarization=o.skipSummarization),o.transferToAgent!==void 0&&(t.transferToAgent=o.transferToAgent),o.escalate!==void 0&&(t.escalate=o.escalate));return t}function E(n={}){return{...n,id:n.id||gt(),invocationId:n.invocationId||"",author:n.author,actions:n.actions||U(),longRunningToolIds:n.longRunningToolIds||[],branch:n.branch,timestamp:n.timestamp||Date.now()}}function Q(n){return n.actions.skipSummarization||n.longRunningToolIds&&n.longRunningToolIds.length>0?!0:R(n).length===0&&B(n).length===0&&!n.partial&&!Vn(n)}function R(n){let e=[];if(n.content&&n.content.parts)for(let t of n.content.parts)t.functionCall&&e.push(t.functionCall);return e}function B(n){let e=[];if(n.content&&n.content.parts)for(let t of n.content.parts)t.functionResponse&&e.push(t.functionResponse);return e}function Vn(n){var e;return n.content&&((e=n.content.parts)!=null&&e.length)?n.content.parts[n.content.parts.length-1].codeExecutionResult!==void 0:!1}function jr(n){var e;return(e=n.content)!=null&&e.parts?n.content.parts.map(t=>{var o;return(o=t.text)!=null?o:""}).join(""):""}var Un="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";function gt(){let n="";for(let e=0;e<8;e++)n+=Un[Math.floor(Math.random()*Un.length)];return n}var zr=["actions.stateDelta","actions.artifactDelta","actions.requestedAuthConfigs","actions.requestedToolConfirmations","actions.customMetadata","content.parts.functionCall.args","content.parts.functionResponse.response"],Kr=["actions.state_delta","actions.artifact_delta","actions.requested_auth_configs","actions.requested_tool_confirmations","actions.custom_metadata","content.parts.function_call.args","content.parts.function_response.response"];function ht(n){return $n(n,Kr)}function jn(n){return Gn(n,zr)}import{context as vt,trace as ke}from"@opentelemetry/api";var Pe="0.5.0";var Wr="gen_ai.agent.description",Hr="gen_ai.agent.name",Xr="gen_ai.conversation.id",Ct="gen_ai.operation.name",zn="gen_ai.tool.call.id",Kn="gen_ai.tool.description",Wn="gen_ai.tool.name",Yr="gen_ai.tool.type",V=ke.getTracer("gcp.vertex.agent",Pe);function Le(n){try{return JSON.stringify(n)}catch{return"<not serializable>"}}function Hn({agent:n,invocationContext:e}){let t=ke.getActiveSpan();t&&t.setAttributes({[Ct]:"invoke_agent",[Wr]:n.description,[Hr]:n.name,[Xr]:e.session.id})}function Xn({tool:n,args:e,functionResponseEvent:t}){var s,a;let o=ke.getActiveSpan();if(!o)return;o.setAttributes({[Ct]:"execute_tool",[Kn]:n.description||"",[Wn]:n.name,[Yr]:n.constructor.name,"gcp.vertex.agent.llm_request":"{}","gcp.vertex.agent.llm_response":"{}","gcp.vertex.agent.tool_call_args":_e()?Le(e):"{}"});let r="<not specified>",i="<not specified>";if((s=t.content)!=null&&s.parts){let l=(a=t.content.parts[0])==null?void 0:a.functionResponse;l!=null&&l.id&&(r=l.id),l!=null&&l.response&&(i=l.response)}(typeof i!="object"||i===null)&&(i={result:i}),o.setAttributes({[zn]:r,"gcp.vertex.agent.event_id":t.id,"gcp.vertex.agent.tool_response":_e()?Le(i):"{}"})}function Yn({responseEventId:n,functionResponseEvent:e}){let t=ke.getActiveSpan();t&&(t.setAttributes({[Ct]:"execute_tool",[Wn]:"(merged tools)",[Kn]:"(merged tools)",[zn]:n,"gcp.vertex.agent.tool_call_args":"N/A","gcp.vertex.agent.event_id":n,"gcp.vertex.agent.llm_request":"{}","gcp.vertex.agent.llm_response":"{}"}),t.setAttribute("gcp.vertex.agent.tool_response",_e()?Le(e):"{}"))}function Jn({invocationContext:n,eventId:e,llmRequest:t,llmResponse:o}){var i,s,a;let r=ke.getActiveSpan();if(r&&(r.setAttributes({"gen_ai.system":"gcp.vertex.agent","gen_ai.request.model":t.model,"gcp.vertex.agent.invocation_id":n.invocationId,"gcp.vertex.agent.session_id":n.session.id,"gcp.vertex.agent.event_id":e,"gcp.vertex.agent.llm_request":_e()?Le(Jr(t)):"{}"}),(i=t.config)!=null&&i.topP&&r.setAttribute("gen_ai.request.top_p",t.config.topP),((s=t.config)==null?void 0:s.maxOutputTokens)!==void 0&&r.setAttribute("gen_ai.request.max_tokens",t.config.maxOutputTokens),r.setAttribute("gcp.vertex.agent.llm_response",_e()?Le(o):"{}"),o.usageMetadata&&r.setAttribute("gen_ai.usage.input_tokens",o.usageMetadata.promptTokenCount||0),(a=o.usageMetadata)!=null&&a.candidatesTokenCount&&r.setAttribute("gen_ai.usage.output_tokens",o.usageMetadata.candidatesTokenCount),o.finishReason)){let c=typeof o.finishReason=="string"?o.finishReason.toLowerCase():String(o.finishReason).toLowerCase();r.setAttribute("gen_ai.response.finish_reasons",[c])}}function Jr(n){let e={model:n.model,contents:[]};if(n.config){let{responseSchema:t,...o}=n.config;e.config=o}return e.contents=n.contents.map(t=>{var o;return{role:t.role,parts:((o=t.parts)==null?void 0:o.filter(r=>!r.inlineData))||[]}}),e}function Qn(n,e){return{next:vt.bind(n,e.next.bind(e)),return:vt.bind(n,e.return.bind(e)),throw:vt.bind(n,e.throw.bind(e)),[Symbol.asyncIterator](){return Qn(n,e[Symbol.asyncIterator]())}}}function ie(n,e,t){let o=t.call(e);return Qn(n,o)}function _e(){let n=process.env.ADK_CAPTURE_MESSAGE_CONTENT_IN_SPANS||"true";return n==="true"||n==="1"}var Oe=class{constructor(e){this.authConfig=e}getAuthResponse(e){let t="temp:"+this.authConfig.credentialKey;return e.get(t)}generateAuthRequest(){var t,o;let e=this.authConfig.authScheme.type;if(!["oauth2","openIdConnect"].includes(e))return this.authConfig;if((o=(t=this.authConfig.exchangedAuthCredential)==null?void 0:t.oauth2)!=null&&o.authUri)return this.authConfig;if(!this.authConfig.rawAuthCredential)throw new Error(`Auth Scheme ${e} requires authCredential.`);if(!this.authConfig.rawAuthCredential.oauth2)throw new Error(`Auth Scheme ${e} requires oauth2 in authCredential.`);if(this.authConfig.rawAuthCredential.oauth2.authUri)return{credentialKey:this.authConfig.credentialKey,authScheme:this.authConfig.authScheme,rawAuthCredential:this.authConfig.rawAuthCredential,exchangedAuthCredential:this.authConfig.rawAuthCredential};if(!this.authConfig.rawAuthCredential.oauth2.clientId||!this.authConfig.rawAuthCredential.oauth2.clientSecret)throw new Error(`Auth Scheme ${e} requires both clientId and clientSecret in authCredential.oauth2.`);return{credentialKey:this.authConfig.credentialKey,authScheme:this.authConfig.authScheme,rawAuthCredential:this.authConfig.rawAuthCredential,exchangedAuthCredential:this.generateAuthUri()}}generateAuthUri(){return this.authConfig.rawAuthCredential}};var v=class{constructor(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 se=class{constructor({hint:e,confirmed:t,payload:o}){this.hint=e!=null?e:"",this.confirmed=t,this.payload=o}};var P=class{constructor(e){this.invocationContext=e}get userContent(){return this.invocationContext.userContent}get invocationId(){return this.invocationContext.invocationId}get userId(){return this.invocationContext.userId}get sessionId(){return this.invocationContext.session.id}get agentName(){return this.invocationContext.agent.name}get state(){return new v(this.invocationContext.session.state,{})}};var L=class extends P{constructor(e){super(e.invocationContext),this.eventActions=e.eventActions||U(),this._state=new v(e.invocationContext.session.state,this.eventActions.stateDelta),this.functionCallId=e.functionCallId,this.toolConfirmation=e.toolConfirmation}get state(){return this._state}get actions(){return this.eventActions}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 o=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]=o,o}requestCredential(e){if(!this.functionCallId)throw new Error("functionCallId is not set.");let t=new Oe(e);this.eventActions.requestedAuthConfigs[this.functionCallId]=t.generateAuthRequest()}getAuthResponse(e){return new Oe(e).getAuthResponse(this.state)}listArtifacts(){if(!this.invocationContext.artifactService)throw new Error("Artifact service is not initialized.");return this.invocationContext.artifactService.listArtifactKeys({appName:this.invocationContext.session.appName,userId:this.invocationContext.session.userId,sessionId:this.invocationContext.session.id})}searchMemory(e){if(!this.invocationContext.memoryService)throw new Error("Memory service is not initialized.");return this.invocationContext.memoryService.searchMemory({appName:this.invocationContext.session.appName,userId:this.invocationContext.session.userId,query:e})}requestConfirmation({hint:e,payload:t}){if(!this.functionCallId)throw new Error("functionCallId is not set.");this.eventActions.requestedToolConfirmations[this.functionCallId]=new se({hint:e,confirmed:!1,payload:t})}};function $(){return typeof window<"u"}var He="xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx";function Z(){let n="";for(let e=0;e<He.length;e++){let t=Math.random()*16|0;He[e]==="x"?n+=t.toString(16):He[e]==="y"?n+=(t&3|8).toString(16):n+=He[e]}return n}function Zn(n){return $()?window.atob(n):Buffer.from(n,"base64").toString()}function Xe(n){if(!process.env)return!1;let e=(process.env[n]||"").toLowerCase();return["true","1"].includes(e)}var yt=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`)}},K=class{constructor(e){this.invocationCostManager=new yt;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 eo(){return`e-${Z()}`}var At=Symbol.for("google.adk.baseAgent");function Qr(n){return typeof n=="object"&&n!==null&&At in n&&n[At]===!0}var ro;ro=At;var G=class{constructor(e){this[ro]=!0;this.name=Zr(e.name),this.description=e.description,this.parentAgent=e.parentAgent,this.subAgents=e.subAgents||[],this.beforeAgentCallback=oo(e.beforeAgentCallback),this.afterAgentCallback=oo(e.afterAgentCallback),this.setParentAgentForSubAgents()}get rootAgent(){return ti(this)}async*runAsync(e){let t=V.startSpan(`invoke_agent ${this.name}`),o=no.setSpan(to.active(),t);try{yield*ie(o,this,async function*(){let r=this.createInvocationContext(e),i=await this.handleBeforeAgentCallback(r);if(i&&(yield i),r.endInvocation)return;Hn({agent:this,invocationContext:r});for await(let a of this.runAsyncImpl(r))yield a;if(r.endInvocation)return;let s=await this.handleAfterAgentCallback(r);s&&(yield s)})}finally{t.end()}}async*runLive(e){let t=V.startSpan(`invoke_agent ${this.name}`),o=no.setSpan(to.active(),t);try{throw yield*ie(o,this,async function*(){}),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 o=t.findAgent(e);if(o)return o}}createInvocationContext(e){return new K({...e,agent:this})}async handleBeforeAgentCallback(e){if(this.beforeAgentCallback.length===0)return;let t=new L({invocationContext:e});for(let o of this.beforeAgentCallback){let r=await o(t);if(r)return e.endInvocation=!0,E({invocationId:e.invocationId,author:this.name,branch:e.branch,content:r,actions:t.eventActions})}if(t.state.hasDelta())return E({invocationId:e.invocationId,author:this.name,branch:e.branch,actions:t.eventActions})}async handleAfterAgentCallback(e){if(this.afterAgentCallback.length===0)return;let t=new L({invocationContext:e});for(let o of this.afterAgentCallback){let r=await o(t);if(r)return E({invocationId:e.invocationId,author:this.name,branch:e.branch,content:r,actions:t.eventActions})}if(t.state.hasDelta())return E({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 Zr(n){if(!ei(n))throw new Error(`Found invalid agent name: "${n}". 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), underscores, and hyphens.`);if(n==="user")throw new Error("Agent name cannot be 'user'. 'user' is reserved for end-user's input.");return n}function ei(n){return/^[\p{ID_Start}$_][\p{ID_Continue}$_-]*$/u.test(n)}function ti(n){for(;n.parentAgent;)n=n.parentAgent;return n}function oo(n){return n?Array.isArray(n)?n:[n]:[]}import{createUserContent as ni}from"@google/genai";import{isEmpty as io}from"lodash-es";var xt="adk-",Ye="adk_request_credential",ye="adk_request_confirmation",oi={handleFunctionCallList:Je,generateAuthEvent:Tt,generateRequestConfirmationEvent:St};function Et(){return`${xt}${Z()}`}function so(n){let e=R(n);if(e)for(let t of e)t.id||(t.id=Et())}function ao(n){if(n&&n.parts)for(let e of n.parts)e.functionCall&&e.functionCall.id&&e.functionCall.id.startsWith(xt)&&(e.functionCall.id=void 0),e.functionResponse&&e.functionResponse.id&&e.functionResponse.id.startsWith(xt)&&(e.functionResponse.id=void 0)}function co(n,e){let t=new Set;for(let o of n)o.name&&o.name in e&&e[o.name].isLongRunning&&o.id&&t.add(o.id);return t}function Tt(n,e){var r;if(!((r=e.actions)!=null&&r.requestedAuthConfigs)||io(e.actions.requestedAuthConfigs))return;let t=[],o=new Set;for(let[i,s]of Object.entries(e.actions.requestedAuthConfigs)){let a={name:Ye,args:{function_call_id:i,auth_config:s},id:Et()};o.add(a.id),t.push({functionCall:a})}return E({invocationId:n.invocationId,author:n.agent.name,branch:n.branch,content:{parts:t,role:e.content.role},longRunningToolIds:Array.from(o)})}function St({invocationContext:n,functionCallEvent:e,functionResponseEvent:t}){var s,a;if(!((s=t.actions)!=null&&s.requestedToolConfirmations)||io(t.actions.requestedToolConfirmations))return;let o=[],r=new Set,i=R(e);for(let[c,l]of Object.entries(t.actions.requestedToolConfirmations)){let u=(a=i.find(p=>p.id===c))!=null?a:void 0;if(!u)continue;let f={name:ye,args:{originalFunctionCall:u,toolConfirmation:l},id:Et()};r.add(f.id),o.push({functionCall:f})}return E({invocationId:n.invocationId,author:n.agent.name,branch:n.branch,content:{parts:o,role:t.content.role},actions:t.actions,longRunningToolIds:Array.from(r)})}async function ri(n,e,t){return V.startActiveSpan(`execute_tool ${n.name}`,async o=>{try{m.debug(`callToolAsync ${n.name}`);let r=await n.runAsync({args:e,toolContext:t});return Xn({tool:n,args:e,functionResponseEvent:ii(n,r,t,t.invocationContext)}),r}finally{o.end()}})}function ii(n,e,t,o){let r;typeof e!="object"||e==null?r={result:e}:r=e;let s={role:"user",parts:[{functionResponse:{name:n.name,response:r,id:t.functionCallId}}]};return E({invocationId:o.invocationId,author:o.agent.name,content:s,actions:t.actions,branch:o.branch})}async function lo({invocationContext:n,functionCallEvent:e,toolsDict:t,beforeToolCallbacks:o,afterToolCallbacks:r,filters:i,toolConfirmationDict:s}){let a=R(e);return await Je({invocationContext:n,functionCalls:a,toolsDict:t,beforeToolCallbacks:o,afterToolCallbacks:r,filters:i,toolConfirmationDict:s})}async function Je({invocationContext:n,functionCalls:e,toolsDict:t,beforeToolCallbacks:o,afterToolCallbacks:r,filters:i,toolConfirmationDict:s}){var u;let a=[],c=e.filter(f=>!i||f.id&&i.has(f.id));for(let f of c){let p;s&&f.id&&(p=s[f.id]);let{tool:d,toolContext:g}=si({invocationContext:n,functionCall:f,toolsDict:t,toolConfirmation:p});m.debug(`execute_tool ${d.name}`);let C=(u=f.args)!=null?u:{},h=null,T;if(h=await n.pluginManager.runBeforeToolCallback({tool:d,toolArgs:C,toolContext:g}),h==null){for(let Y of o)if(h=await Y({tool:d,args:C,context:g}),h)break}if(h==null)try{h=await ri(d,C,g)}catch(Y){if(Y instanceof Error){let In=await n.pluginManager.runOnToolErrorCallback({tool:d,toolArgs:C,toolContext:g,error:Y});In?h=In:T=Y.message}else T=Y}let M=await n.pluginManager.runAfterToolCallback({tool:d,toolArgs:C,toolContext:g,result:h});if(M==null){for(let Y of r)if(M=await Y({tool:d,args:C,context:g,response:h}),M)break}if(M!=null&&(h=M),d.isLongRunning&&!h)continue;T?h={error:T}:(typeof h!="object"||h==null)&&(h={result:h});let wn=E({invocationId:n.invocationId,author:n.agent.name,content:ni({functionResponse:{id:g.functionCallId,name:d.name,response:h}}),actions:g.actions,branch:n.branch});m.debug("traceToolCall",{tool:d.name,args:C,functionResponseEvent:wn.id}),a.push(wn)}if(!a.length)return null;let l=ai(a);return a.length>1&&V.startActiveSpan("execute_tool (merged)",f=>{try{m.debug("execute_tool (merged)"),m.debug("traceMergedToolCalls",{responseEventId:l.id,functionResponseEvent:l.id}),Yn({responseEventId:l.id,functionResponseEvent:l})}finally{f.end()}}),l}function si({invocationContext:n,functionCall:e,toolsDict:t,toolConfirmation:o}){if(!e.name||!(e.name in t))throw new Error(`Function ${e.name} is not found in the toolsDict.`);let r=new L({invocationContext:n,functionCallId:e.id||void 0,toolConfirmation:o});return{tool:t[e.name],toolContext:r}}function ai(n){if(!n.length)throw new Error("No function response events provided.");if(n.length===1)return n[0];let e=[];for(let i of n)i.content&&i.content.parts&&e.push(...i.content.parts);let t=n[0],o=n.map(i=>i.actions||{}),r=qn(o);return E({author:t.author,branch:t.branch,content:{role:"user",parts:e},actions:r,timestamp:t.timestamp})}var Rt=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(),o=this.queue.shift();t(o)}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{context as ji,trace as zi}from"@opentelemetry/api";var ci="google-adk",li="gl-typescript",ui="remote_reasoning_engine",fi="GOOGLE_CLOUD_AGENT_ENGINE_ID";function pi(){let n=`${ci}/${Pe}`;!$()&&process.env[fi]&&(n=`${n}+${ui}`);let e=`${li}/${$()?window.navigator.userAgent:process.version}`;return[n,e]}function uo(){return pi()}var bt=Symbol.for("google.adk.baseModel");function wt(n){return typeof n=="object"&&n!==null&&bt in n&&n[bt]===!0}var fo;fo=bt;var Ae=class{constructor({model:e}){this[fo]=!0;this.model=e}get trackingHeaders(){let t=uo().join(" ");return{"x-goog-api-client":t,"user-agent":t}}maybeAppendUserContent(e){var t;e.contents.length===0&&e.contents.push({role:"user",parts:[{text:"Handle the requests as specified in the System Instruction."}]}),((t=e.contents[e.contents.length-1])==null?void 0:t.role)!=="user"&&e.contents.push({role:"user",parts:[{text:"Continue processing previous requests as instructed. Exit or provide a summary if no more outputs are needed."}]})}};Ae.supportedModels=[];import{createPartFromText as mo,FinishReason as di,GoogleGenAI as Pt}from"@google/genai";var Qe=(t=>(t.VERTEX_AI="VERTEX_AI",t.GEMINI_API="GEMINI_API",t))(Qe||{});function po(){return Xe("GOOGLE_GENAI_USE_VERTEXAI")?"VERTEX_AI":"GEMINI_API"}var Ze=class{constructor(e){this.geminiSession=e}async sendHistory(e){let t=e.filter(o=>{var r;return o.parts&&((r=o.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(o=>o.functionResponse).filter(o=>!!o);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 It(n){var t;let e=n.usageMetadata;if(n.candidates&&n.candidates.length>0){let o=n.candidates[0];return(t=o.content)!=null&&t.parts&&o.content.parts.length>0?{content:o.content,groundingMetadata:o.groundingMetadata,citationMetadata:o.citationMetadata,usageMetadata:e,finishReason:o.finishReason}:{errorCode:o.finishReason,errorMessage:o.finishMessage,usageMetadata:e,citationMetadata:o.citationMetadata,finishReason:o.finishReason}}return n.promptFeedback?{errorCode:n.promptFeedback.blockReason,errorMessage:n.promptFeedback.blockReasonMessage,usageMetadata:e}:{errorCode:"UNKNOWN_ERROR",errorMessage:"Unknown error.",usageMetadata:e}}var ee=class extends Ae{constructor({model:e,apiKey:t,vertexai:o,project:r,location:i,headers:s}){e||(e="gemini-2.5-flash"),super({model:e});let a=et({model:e,vertexai:o,project:r,location:i,apiKey:t});if(!a.vertexai&&!a.apiKey)throw new Error("API key must be provided via constructor or GOOGLE_GENAI_API_KEY or GEMINI_API_KEY environment variable.");this.project=a.project,this.location=a.location,this.apiKey=a.apiKey,this.headers=s,this.vertexai=!!a.vertexai}async*generateContentAsync(e,t=!1){var o,r,i,s,a,c,l;if(this.preprocessRequest(e),this.maybeAppendUserContent(e),m.info(`Sending out request, model: ${e.model}, backend: ${this.apiBackend}, stream: ${t}`),(o=e.config)!=null&&o.httpOptions&&(e.config.httpOptions.headers={...e.config.httpOptions.headers,...this.trackingHeaders}),t){let u=await this.apiClient.models.generateContentStream({model:(r=e.model)!=null?r:this.model,contents:e.contents,config:e.config}),f="",p="",d,g;for await(let C of u){g=C;let h=It(C);d=h.usageMetadata;let T=(s=(i=h.content)==null?void 0:i.parts)==null?void 0:s[0];if(T!=null&&T.text)"thought"in T&&T.thought?f+=T.text:p+=T.text,h.partial=!0;else if((f||p)&&(!T||!T.inlineData)){let M=[];f&&M.push({text:f,thought:!0}),p&&M.push(mo(p)),yield{content:{role:"model",parts:M},usageMetadata:h.usageMetadata},f="",p=""}yield h}if((p||f)&&((c=(a=g==null?void 0:g.candidates)==null?void 0:a[0])==null?void 0:c.finishReason)===di.STOP){let C=[];f&&C.push({text:f,thought:!0}),p&&C.push({text:p}),yield{content:{role:"model",parts:C},usageMetadata:d}}}else{let u=await this.apiClient.models.generateContent({model:(l=e.model)!=null?l:this.model,contents:e.contents,config:e.config});yield It(u)}}getHttpOptions(){return{headers:{...this.trackingHeaders,...this.headers}}}get apiClient(){return this._apiClient?this._apiClient:(this.vertexai?this._apiClient=new Pt({vertexai:this.vertexai,project:this.project,location:this.location,httpOptions:this.getHttpOptions()}):this._apiClient=new Pt({apiKey:this.apiKey,httpOptions:this.getHttpOptions()}),this._apiClient)}get apiBackend(){return this._apiBackend||(this._apiBackend=this.apiClient.vertexai?"VERTEX_AI":"GEMINI_API"),this._apiBackend}get liveApiVersion(){return this._liveApiVersion||(this._liveApiVersion=this.apiBackend==="VERTEX_AI"?"v1beta1":"v1alpha"),this._liveApiVersion}getLiveHttpOptions(){return{headers:this.trackingHeaders,apiVersion:this.liveApiVersion}}get liveApiClient(){return this._liveApiClient||(this._liveApiClient=new Pt({apiKey:this.apiKey,httpOptions:this.getLiveHttpOptions()})),this._liveApiClient}async connect(e){var o,r,i,s;(o=e.liveConnectConfig)!=null&&o.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:[mo(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 Ze(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 o of t.parts)go(o.inlineData),go(o.fileData)}}};ee.supportedModels=[/gemini-.*/,/projects\/.+\/locations\/.+\/endpoints\/.+/,/projects\/.+\/locations\/.+\/publishers\/google\/models\/gemini.+/];function go(n){n&&n.displayName&&(n.displayName=void 0)}function et({model:n,vertexai:e,project:t,location:o,apiKey:r}){let i={model:n,vertexai:e,project:t,location:o,apiKey:r};if(i.vertexai=!!e,!i.vertexai&&!$()&&(i.vertexai=Xe("GOOGLE_GENAI_USE_VERTEXAI")),i.vertexai){if(!$()&&!i.project&&(i.project=process.env.GOOGLE_CLOUD_PROJECT),!$()&&!i.location&&(i.location=process.env.GOOGLE_CLOUD_LOCATION),!i.project)throw new Error("VertexAI project must be provided via constructor or GOOGLE_CLOUD_PROJECT environment variable.");if(!i.location)throw new Error("VertexAI location must be provided via constructor or GOOGLE_CLOUD_LOCATION environment variable.")}else!i.apiKey&&!$()&&(i.apiKey=process.env.GOOGLE_GENAI_API_KEY||process.env.GEMINI_API_KEY);return i}var ho="APIGEE_PROXY_URL",xe=class extends ee{constructor({model:e,proxyUrl:t,apiKey:o,vertexai:r,location:i,project:s,headers:a}){var c;if(!Co(e))throw new Error(`Model ${e} is not a valid Apigee model, expected apigee/[<provider>/][<version>/]<model_id>`);if(super({...mi({model:e,vertexai:r,project:s,location:i,apiKey:o}),headers:a}),this.proxyUrl=t!=null?t:"",!$()&&!this.proxyUrl&&(this.proxyUrl=(c=process.env[ho])!=null?c:""),!this.proxyUrl)throw new Error(`Proxy URL must be provided via the constructor or ${ho} environment variable.`)}getHttpOptions(){let e=super.getHttpOptions();return e.baseUrl=this.proxyUrl,e}getLiveHttpOptions(){let e=super.getLiveHttpOptions();return e.baseUrl=this.proxyUrl,e}identifyApiVersion(){let t=(this.model.startsWith("apigee/")?this.model.substring(7):this.model).split("/");return t.length===3?t[1]:t.length===2&&t[0]!="vertex_ai"&&t[0]!="gemini"&&t[0].startsWith("v")?t[0]:this.vertexai?"v1beta1":"v1alpha"}get liveApiVersion(){return this._apigeeLiveApiVersion||(this._apigeeLiveApiVersion=this.identifyApiVersion()),this._apigeeLiveApiVersion}async*generateContentAsync(e,t=!1){var r;let o=(r=e.model)!=null?r:this.model;e.model=vo(o),yield*super.generateContentAsync(e,t)}async connect(e){var o;let t=(o=e.model)!=null?o:this.model;return e.model=vo(t),super.connect(e)}};xe.supportedModels=[/apigee\/.*/];function mi({model:n,vertexai:e,project:t,location:o,apiKey:r}){var s;let i=et({model:n,vertexai:e,project:t,location:o,apiKey:r});return i.vertexai=i.vertexai||((s=i.model)==null?void 0:s.startsWith("apigee/vertex_ai/")),i.vertexai||i.apiKey||(m.warn('No API key provided when using a Gemini model, using a fake key "-".'),i.apiKey="-"),i}function vo(n){if(!Co(n))throw new Error(`Model ${n} is not a valid Apigee model, expected apigee/[<provider>/][<version>/]<model_id>`);let e=n.split("/");return e[e.length-1]}function Co(n){let e=["vertex_ai","gemini"];if(!n.startsWith("apigee/"))return!1;let t=n.substring(7);if(t.length===0)return!1;let o=t.split("/",-1);return o[o.length-1].length===0?!1:o.length==1?!0:o.length==2?e.includes(o[0])?!0:o[0].startsWith("v"):o.length==3&&e.includes(o[0])?o[1].startsWith("v"):!1}var Lt=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 o=this.cache.keys().next().value;o!==void 0&&this.cache.delete(o)}this.cache.set(e,t)}},D=class D{static newLlm(e){return new(D.resolve(e))({model:e})}static _register(e,t){D.llmRegistryDict.has(e)&&m.info(`Updating LLM class for ${e} from ${D.llmRegistryDict.get(e)} to ${t}`),D.llmRegistryDict.set(e,t)}static register(e){for(let t of e.supportedModels)D._register(t,e)}static resolve(e){let t=D.resolveCache.get(e);if(t)return t;for(let[o,r]of D.llmRegistryDict.entries())if(new RegExp(`^${o instanceof RegExp?o.source:o}$`,o instanceof RegExp?o.flags:void 0).test(e))return D.resolveCache.set(e,r),r;throw new Error(`Model ${e} not found.`)}};D.llmRegistryDict=new Map,D.resolveCache=new Lt(32);var ae=D;ae.register(ee);ae.register(xe);var _t=Symbol.for("google.adk.baseTool");function kt(n){return typeof n=="object"&&n!==null&&_t in n&&n[_t]===!0}var yo;yo=_t;var N=class{constructor(e){this[yo]=!0;var t;this.name=e.name,this.description=e.description,this.isLongRunning=(t=e.isLongRunning)!=null?t:!1}_getDeclaration(){}async processLlmRequest({llmRequest:e}){let t=this._getDeclaration();if(!t)return;if(this.name in e.toolsDict)throw new Error(`Duplicate tool name: ${this.name}`);e.toolsDict[this.name]=this;let o=gi(e);o?(o.functionDeclarations||(o.functionDeclarations=[]),o.functionDeclarations.push(t)):(e.config=e.config||{},e.config.tools=e.config.tools||[],e.config.tools.push({functionDeclarations:[t]}))}get apiVariant(){return po()}};function gi(n){var e;return(((e=n.config)==null?void 0:e.tools)||[]).find(t=>"functionDeclarations"in t)}import{Type as Ao}from"@google/genai";import{zodToJsonSchema as hi}from"zod-to-json-schema";import{toJSONSchema as vi}from"zod/v4";function Ot(n){return n!==null&&typeof n=="object"&&"parse"in n&&typeof n.parse=="function"&&"safeParse"in n&&typeof n.safeParse=="function"}function Ci(n){return Ot(n)&&!("_zod"in n)}function yi(n){return Ot(n)&&"_zod"in n}function Ai(n){var o,r;let e=n;if((o=e._def)!=null&&o.typeName)return e._def.typeName;let t=(r=e._def)==null?void 0:r.type;if(typeof t=="string"&&t)return"Zod"+t.charAt(0).toUpperCase()+t.slice(1)}function ce(n){return Ot(n)&&Ai(n)==="ZodObject"}function Ee(n){if(!ce(n))throw new Error("Expected a Zod Object");if(yi(n))return vi(n,{target:"openapi-3.0",io:"input",override:e=>{var o;let{jsonSchema:t}=e;t.additionalProperties!==void 0&&delete t.additionalProperties,t.readOnly!==void 0&&delete t.readOnly,t.maxItems!==void 0&&(t.maxItems=t.maxItems.toString()),(t.format==="email"||t.format==="uuid")&&delete t.pattern,t.minItems!==void 0&&(t.minItems=t.minItems.toString()),t.minLength!==void 0&&(t.minLength=t.minLength.toString()),t.maxLength!==void 0&&(t.maxLength=t.maxLength.toString()),((o=t.enum)==null?void 0:o.length)===1&&t.enum[0]===null&&(t.type=Ao.NULL,delete t.enum),t.type!==void 0&&(t.type=t.type.toUpperCase())}});if(Ci(n))return hi(n,{target:"openApi3",emailStrategy:"format:email",postProcess:e=>{var t,o,r,i,s,a,c;if(e)return e.additionalProperties!==void 0&&delete e.additionalProperties,e.maxItems!==void 0&&(e.maxItems=(t=e.maxItems)==null?void 0:t.toString()),e.minItems!==void 0&&(e.minItems=(o=e.minItems)==null?void 0:o.toString()),e.minLength!==void 0&&(e.minLength=(r=e.minLength)==null?void 0:r.toString()),e.maxLength!==void 0&&(e.maxLength=(i=e.maxLength)==null?void 0:i.toString()),((s=e.enum)==null?void 0:s.length)===1&&e.enum[0]==="null"&&(e.type=Ao.NULL,delete e.enum),e.type==="integer"&&e.format!=="int64"&&((a=e.minimum)!=null||(e.minimum=Number.MIN_SAFE_INTEGER),(c=e.maximum)!=null||(e.maximum=Number.MAX_SAFE_INTEGER)),e.type!==void 0&&(e.type=e.type.toUpperCase()),e}});throw new Error("Unsupported Zod schema version.")}import{z as So}from"zod";function le(n,e){n.config||(n.config={});let t=e.join(`
7
+ var qi=Object.create;var zt=Object.defineProperty;var Eo=Object.getOwnPropertyDescriptor;var Vi=Object.getOwnPropertyNames;var ji=Object.getPrototypeOf,zi=Object.prototype.hasOwnProperty;var Be=(n=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(n,{get:(e,t)=>(typeof require<"u"?require:e)[t]}):n)(function(n){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+n+'" is not supported')});var Hi=(n,e,t,o)=>{if(e&&typeof e=="object"||typeof e=="function")for(let r of Vi(e))!zi.call(n,r)&&r!==t&&zt(n,r,{get:()=>e[r],enumerable:!(o=Eo(e,r))||o.enumerable});return n};var Fe=(n,e,t)=>(t=n!=null?qi(ji(n)):{},Hi(e||!n||!n.__esModule?zt(t,"default",{value:n,enumerable:!0}):t,n));var S=(n,e,t,o)=>{for(var r=o>1?void 0:o?Eo(e,t):e,i=n.length-1,s;i>=0;i--)(s=n[i])&&(r=(o?s(e,t,r):s(r))||r);return o&&r&&zt(e,t,r),r};import{AGENT_CARD_PATH as Ma}from"@a2a-js/sdk";import{ClientFactory as Na}from"@a2a-js/sdk/client";import{context as Bo,trace as Fo}from"@opentelemetry/api";function xo(n,e=[]){return pt(n,Wi,"",e)}function yo(n,e=[]){return pt(n,Ki,"",e)}var Wi=n=>n.replace(/_([a-z])/g,(e,t)=>t.toUpperCase()),Ki=n=>n.replace(/[A-Z]/g,e=>"_"+e.toLowerCase());function pt(n,e,t="",o=[]){if(Array.isArray(n))return n.map(r=>pt(r,e,t,o));if(typeof n=="object"&&n!==null){let r=n,i={};for(let s of Object.keys(r)){let a=e(s),c=t!==""?t+"."+s:s;o.includes(c)?i[a]=r[s]:i[a]=pt(r[s],e,c,o)}return i}return n}function F(n={}){return{stateDelta:{},artifactDelta:{},requestedAuthConfigs:{},requestedToolConfirmations:{},...n}}function To(n,e){let t=F();e&&Object.assign(t,e);for(let o of n)o&&(o.stateDelta&&Object.assign(t.stateDelta,o.stateDelta),o.artifactDelta&&Object.assign(t.artifactDelta,o.artifactDelta),o.requestedAuthConfigs&&Object.assign(t.requestedAuthConfigs,o.requestedAuthConfigs),o.requestedToolConfirmations&&Object.assign(t.requestedToolConfirmations,o.requestedToolConfirmations),o.skipSummarization!==void 0&&(t.skipSummarization=o.skipSummarization),o.transferToAgent!==void 0&&(t.transferToAgent=o.transferToAgent),o.escalate!==void 0&&(t.escalate=o.escalate));return t}function A(n={}){return{...n,id:n.id||Ht(),invocationId:n.invocationId||"",author:n.author,actions:n.actions||F(),longRunningToolIds:n.longRunningToolIds||[],branch:n.branch,timestamp:n.timestamp||Date.now()}}function ae(n){return n.actions.skipSummarization||n.longRunningToolIds&&n.longRunningToolIds.length>0?!0:I(n).length===0&&V(n).length===0&&!n.partial&&!Ro(n)}function I(n){let e=[];if(n.content&&n.content.parts)for(let t of n.content.parts)t.functionCall&&e.push(t.functionCall);return e}function V(n){let e=[];if(n.content&&n.content.parts)for(let t of n.content.parts)t.functionResponse&&e.push(t.functionResponse);return e}function Ro(n){var e;return n.content&&((e=n.content.parts)!=null&&e.length)?n.content.parts[n.content.parts.length-1].codeExecutionResult!==void 0:!1}function Ue(n){var e;return(e=n.content)!=null&&e.parts?n.content.parts.map(t=>{var o;return(o=t.text)!=null?o:""}).join(""):""}var So="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";function Ht(){let n="";for(let e=0;e<8;e++)n+=So[Math.floor(Math.random()*So.length)];return n}var Xi=["actions.stateDelta","actions.artifactDelta","actions.requestedAuthConfigs","actions.requestedToolConfirmations","actions.customMetadata","content.parts.functionCall.args","content.parts.functionResponse.response"],Yi=["actions.state_delta","actions.artifact_delta","actions.requested_auth_configs","actions.requested_tool_confirmations","actions.custom_metadata","content.parts.function_call.args","content.parts.function_response.response"];function Wt(n){return xo(n,Yi)}function Io(n){return yo(n,Xi)}import{context as Kt,trace as Ve}from"@opentelemetry/api";var $e="0.6.1";var Ji="gen_ai.agent.description",Qi="gen_ai.agent.name",Zi="gen_ai.conversation.id",Xt="gen_ai.operation.name",wo="gen_ai.tool.call.id",bo="gen_ai.tool.description",ko="gen_ai.tool.name",es="gen_ai.tool.type",Q=Ve.getTracer("gcp.vertex.agent",$e);function Ge(n){try{return JSON.stringify(n)}catch{return"<not serializable>"}}function Po({agent:n,invocationContext:e}){let t=Ve.getActiveSpan();t&&t.setAttributes({[Xt]:"invoke_agent",[Ji]:n.description,[Qi]:n.name,[Zi]:e.session.id})}function _o({tool:n,args:e,functionResponseEvent:t}){var s,a;let o=Ve.getActiveSpan();if(!o)return;o.setAttributes({[Xt]:"execute_tool",[bo]:n.description||"",[ko]:n.name,[es]:n.constructor.name,"gcp.vertex.agent.llm_request":"{}","gcp.vertex.agent.llm_response":"{}","gcp.vertex.agent.tool_call_args":qe()?Ge(e):"{}"});let r="<not specified>",i="<not specified>";if((s=t.content)!=null&&s.parts){let l=(a=t.content.parts[0])==null?void 0:a.functionResponse;l!=null&&l.id&&(r=l.id),l!=null&&l.response&&(i=l.response)}(typeof i!="object"||i===null)&&(i={result:i}),o.setAttributes({[wo]:r,"gcp.vertex.agent.event_id":t.id,"gcp.vertex.agent.tool_response":qe()?Ge(i):"{}"})}function Lo({responseEventId:n,functionResponseEvent:e}){let t=Ve.getActiveSpan();t&&(t.setAttributes({[Xt]:"execute_tool",[ko]:"(merged tools)",[bo]:"(merged tools)",[wo]:n,"gcp.vertex.agent.tool_call_args":"N/A","gcp.vertex.agent.event_id":n,"gcp.vertex.agent.llm_request":"{}","gcp.vertex.agent.llm_response":"{}"}),t.setAttribute("gcp.vertex.agent.tool_response",qe()?Ge(e):"{}"))}function Oo({invocationContext:n,eventId:e,llmRequest:t,llmResponse:o}){var i,s,a;let r=Ve.getActiveSpan();if(r&&(r.setAttributes({"gen_ai.system":"gcp.vertex.agent","gen_ai.request.model":t.model,"gcp.vertex.agent.invocation_id":n.invocationId,"gcp.vertex.agent.session_id":n.session.id,"gcp.vertex.agent.event_id":e,"gcp.vertex.agent.llm_request":qe()?Ge(ts(t)):"{}"}),(i=t.config)!=null&&i.topP&&r.setAttribute("gen_ai.request.top_p",t.config.topP),((s=t.config)==null?void 0:s.maxOutputTokens)!==void 0&&r.setAttribute("gen_ai.request.max_tokens",t.config.maxOutputTokens),r.setAttribute("gcp.vertex.agent.llm_response",qe()?Ge(o):"{}"),o.usageMetadata&&r.setAttribute("gen_ai.usage.input_tokens",o.usageMetadata.promptTokenCount||0),(a=o.usageMetadata)!=null&&a.candidatesTokenCount&&r.setAttribute("gen_ai.usage.output_tokens",o.usageMetadata.candidatesTokenCount),o.finishReason)){let c=typeof o.finishReason=="string"?o.finishReason.toLowerCase():String(o.finishReason).toLowerCase();r.setAttribute("gen_ai.response.finish_reasons",[c])}}function ts(n){let e={model:n.model,contents:[]};if(n.config){let{responseSchema:t,...o}=n.config;e.config=o}return e.contents=n.contents.map(t=>{var o;return{role:t.role,parts:((o=t.parts)==null?void 0:o.filter(r=>!r.inlineData))||[]}}),e}function Mo(n,e){return{next:Kt.bind(n,e.next.bind(e)),return:Kt.bind(n,e.return.bind(e)),throw:Kt.bind(n,e.throw.bind(e)),[Symbol.asyncIterator](){return Mo(n,e[Symbol.asyncIterator]())}}}function pe(n,e,t){let o=t.call(e);return Mo(n,o)}function qe(){let n=process.env.ADK_CAPTURE_MESSAGE_CONTENT_IN_SPANS||"true";return n==="true"||n==="1"}var je=class{constructor(e){this.authConfig=e}getAuthResponse(e){let t="temp:"+this.authConfig.credentialKey;return e.get(t)}generateAuthRequest(){var t,o;let e=this.authConfig.authScheme.type;if(!["oauth2","openIdConnect"].includes(e))return this.authConfig;if((o=(t=this.authConfig.exchangedAuthCredential)==null?void 0:t.oauth2)!=null&&o.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 E=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){Object.assign(this.delta,e),Object.assign(this.value,e)}toRecord(){return{...this.value,...this.delta}}};E.APP_PREFIX="app:",E.USER_PREFIX="user:",E.TEMP_PREFIX="temp:";var me=class{constructor({hint:e,confirmed:t,payload:o}){this.hint=e!=null?e:"",this.confirmed=t,this.payload=o}};var w=class{constructor(e){this.invocationContext=e}get userContent(){return this.invocationContext.userContent}get invocationId(){return this.invocationContext.invocationId}get userId(){return this.invocationContext.userId}get sessionId(){return this.invocationContext.session.id}get agentName(){return this.invocationContext.agent.name}get state(){return new E(this.invocationContext.session.state,{})}};var N=class extends w{constructor(e){super(e.invocationContext),this.eventActions=e.eventActions||F(),this._state=new E(e.invocationContext.session.state,this.eventActions.stateDelta),this.functionCallId=e.functionCallId,this.toolConfirmation=e.toolConfirmation}get state(){return this._state}get actions(){return this.eventActions}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 o=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]=o,o}requestCredential(e){if(!this.functionCallId)throw new Error("functionCallId is not set.");let t=new je(e);this.eventActions.requestedAuthConfigs[this.functionCallId]=t.generateAuthRequest()}getAuthResponse(e){return new je(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 me({hint:e,confirmed:!1,payload:t})}};function W(){return typeof window<"u"}var mt="xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx";function b(){let n="";for(let e=0;e<mt.length;e++){let t=Math.random()*16|0;mt[e]==="x"?n+=t.toString(16):mt[e]==="y"?n+=(t&3|8).toString(16):n+=mt[e]}return n}function No(n){return W()?window.atob(n):Buffer.from(n,"base64").toString()}function gt(n){if(!process.env)return!1;let e=(process.env[n]||"").toLowerCase();return["true","1"].includes(e)}var Yt=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`)}},j=class{constructor(e){this.invocationCostManager=new Yt;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 Do(){return`e-${b()}`}var Jt=Symbol.for("google.adk.baseAgent");function ns(n){return typeof n=="object"&&n!==null&&Jt in n&&n[Jt]===!0}var $o;$o=Jt;var G=class{constructor(e){this[$o]=!0;this.name=os(e.name),this.description=e.description,this.parentAgent=e.parentAgent,this.subAgents=e.subAgents||[],this.beforeAgentCallback=Uo(e.beforeAgentCallback),this.afterAgentCallback=Uo(e.afterAgentCallback),this.setParentAgentForSubAgents()}get rootAgent(){return is(this)}async*runAsync(e){let t=Q.startSpan(`invoke_agent ${this.name}`),o=Fo.setSpan(Bo.active(),t);try{yield*pe(o,this,async function*(){let r=this.createInvocationContext(e),i=await this.handleBeforeAgentCallback(r);if(i&&(yield i),r.endInvocation)return;Po({agent:this,invocationContext:r});for await(let a of this.runAsyncImpl(r))yield a;if(r.endInvocation)return;let s=await this.handleAfterAgentCallback(r);s&&(yield s)})}finally{t.end()}}async*runLive(e){let t=Q.startSpan(`invoke_agent ${this.name}`),o=Fo.setSpan(Bo.active(),t);try{throw yield*pe(o,this,async function*(){}),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 o=t.findAgent(e);if(o)return o}}createInvocationContext(e){return new j({...e,agent:this})}async handleBeforeAgentCallback(e){if(this.beforeAgentCallback.length===0)return;let t=new N({invocationContext:e});for(let o of this.beforeAgentCallback){let r=await o(t);if(r)return e.endInvocation=!0,A({invocationId:e.invocationId,author:this.name,branch:e.branch,content:r,actions:t.eventActions})}if(t.state.hasDelta())return A({invocationId:e.invocationId,author:this.name,branch:e.branch,actions:t.eventActions})}async handleAfterAgentCallback(e){if(this.afterAgentCallback.length===0)return;let t=new N({invocationContext:e});for(let o of this.afterAgentCallback){let r=await o(t);if(r)return A({invocationId:e.invocationId,author:this.name,branch:e.branch,content:r,actions:t.eventActions})}if(t.state.hasDelta())return A({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 os(n){if(!rs(n))throw new Error(`Found invalid agent name: "${n}". 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), underscores, and hyphens.`);if(n==="user")throw new Error("Agent name cannot be 'user'. 'user' is reserved for end-user's input.");return n}function rs(n){return/^[\p{ID_Start}$_][\p{ID_Continue}$_-]*$/u.test(n)}function is(n){for(;n.parentAgent;)n=n.parentAgent;return n}function Uo(n){return n?Array.isArray(n)?n:[n]:[]}import*as K from"winston";var Go=(r=>(r[r.DEBUG=0]="DEBUG",r[r.INFO=1]="INFO",r[r.WARN=2]="WARN",r[r.ERROR=3]="ERROR",r))(Go||{}),Qt=class{constructor(){this.logLevel=1;this.logger=K.createLogger({levels:{debug:0,info:1,warn:2,error:3},level:"error",format:K.format.combine(K.format.label({label:"ADK"}),K.format(e=>(e.level=e.level.toUpperCase(),e))(),K.format.colorize(),K.format.timestamp(),K.format.printf(e=>`${e.level}: [${e.label}] ${e.timestamp} ${e.message}`)),transports:[new K.transports.Console]})}setLogLevel(e){this.logLevel=e}log(e,...t){this.logLevel>e||this.logger.log(e.toString(),t.join(" "))}debug(...e){this.logLevel>0||this.logger.debug(e.join(" "))}info(...e){this.logLevel>1||this.logger.info(e.join(" "))}warn(...e){this.logLevel>2||this.logger.warn(e.join(" "))}error(...e){this.logLevel>3||this.logger.error(e.join(" "))}},Zt=class{setLogLevel(e){}log(e,...t){}debug(...e){}info(...e){}warn(...e){}error(...e){}},ce=new Qt;function ss(n){ce=n!=null?n:new Zt}function en(){return ce}function as(n){g.setLogLevel(n)}var g={setLogLevel(n){ce.setLogLevel(n)},log(n,...e){ce.log(n,...e)},debug(...n){ce.debug(...n)},info(...n){ce.info(...n)},warn(...n){ce.warn(...n)},error(...n){ce.error(...n)}};function le(n){return(n==null?void 0:n.kind)==="status-update"}function ze(n){return(n==null?void 0:n.kind)==="artifact-update"}function tn(n){return(n==null?void 0:n.kind)==="message"}function Z(n){return(n==null?void 0:n.kind)==="task"}function ht(n){return ze(n)?n.artifact.metadata||{}:le(n)||Z(n)||tn(n)?n.metadata||{}:{}}function Ct(n){return(le(n)||Z(n))&&n.status.state==="failed"}function qo(n){return(le(n)||Z(n))&&["completed","failed","canceled","rejected"].includes(n.status.state)}function vt(n){return(le(n)||Z(n))&&n.status.state==="input-required"}function nn(n){var t;if(!Ct(n))return;let e=((t=n.status.message)==null?void 0:t.parts)||[];if(e.length!==0&&e[0].kind==="text")return e[0].text}function Vo({contextId:n,message:e,taskId:t,metadata:o}){return{kind:"task",id:t||b(),contextId:n,history:[e],status:{state:"submitted",timestamp:new Date().toISOString()},metadata:o}}function jo({taskId:n,contextId:e,message:t,metadata:o}){return{kind:"status-update",taskId:n,contextId:e,final:!1,status:{state:"working",message:t,timestamp:new Date().toISOString()},metadata:o}}function zo({taskId:n,contextId:e,metadata:t}){return{kind:"status-update",taskId:n,contextId:e,final:!0,status:{state:"completed",timestamp:new Date().toISOString()},metadata:t}}function Ho({taskId:n,contextId:e,artifactId:t,parts:o=[],metadata:r,append:i,lastChunk:s}){return{kind:"artifact-update",taskId:n,contextId:e,append:i,lastChunk:s,artifact:{artifactId:t||b(),parts:o},metadata:r}}function At({taskId:n,contextId:e,error:t,metadata:o}){return{kind:"status-update",taskId:n,contextId:e,final:!0,status:{state:"failed",message:{kind:"message",messageId:b(),role:"agent",taskId:n,contextId:e,parts:[{kind:"text",text:t.message}]},timestamp:new Date().toISOString()},metadata:o}}function Wo({taskId:n,contextId:e,parts:t,metadata:o}){return{kind:"status-update",taskId:n,contextId:e,final:!0,status:{state:"input-required",message:{kind:"message",messageId:b(),role:"agent",taskId:n,contextId:e,parts:t},timestamp:new Date().toISOString()},metadata:o}}function Ko({taskId:n,contextId:e,parts:t,metadata:o}){return{kind:"status-update",taskId:n,contextId:e,final:!0,status:{state:"input-required",message:{kind:"message",messageId:b(),role:"agent",taskId:n,contextId:e,parts:t},timestamp:new Date().toISOString()},metadata:o}}import{createModelContent as cs}from"@google/genai";var k="adk_",Xo="a2a:",v=(R=>(R.APP_NAME=`${k}app_name`,R.USER_ID=`${k}user_id`,R.SESSION_ID=`${k}session_id`,R.INVOCATION_ID=`${k}invocation_id`,R.AUTHOR=`${k}author`,R.BRANCH=`${k}branch`,R.DATA_PART_TYPE=`${k}type`,R.PARTIAL=`${k}partial`,R.ESCALATE=`${k}escalate`,R.TRANSFER_TO_AGENT=`${k}transfer_to_agent`,R.IS_LONG_RUNNING=`${k}is_long_running`,R.THOUGHT=`${k}thought`,R.ERROR_CODE=`${k}error_code`,R.ERROR_MESSAGE=`${k}error_message`,R.CITATION_METADATA=`${k}citation_metadata`,R.GROUNDING_METADATA=`${k}grounding_metadata`,R.USAGE_METADATA=`${k}usage_metadata`,R.CUSTOM_METADATA=`${k}custom_metadata`,R.VIDEO_METADATA=`${k}video_metadata`,R))(v||{}),He=(t=>(t.TASK_ID=`${Xo}task_id`,t.CONTEXT_ID=`${Xo}context_id`,t))(He||{});function We(n,{appName:e,userId:t,sessionId:o}){return{...Ke(n.actions),...ue({appName:e,userId:t,sessionId:o}),[v.INVOCATION_ID]:n.invocationId,[v.AUTHOR]:n.author,[v.BRANCH]:n.branch,[v.ERROR_CODE]:n.errorMessage,[v.ERROR_MESSAGE]:n.errorMessage,[v.CITATION_METADATA]:n.citationMetadata,[v.GROUNDING_METADATA]:n.groundingMetadata,[v.USAGE_METADATA]:n.usageMetadata,[v.CUSTOM_METADATA]:n.customMetadata,[v.PARTIAL]:n.partial,[v.IS_LONG_RUNNING]:(n.longRunningToolIds||[]).length>0}}function ue({appName:n,userId:e,sessionId:t}){return{[v.APP_NAME]:n,[v.USER_ID]:e,[v.SESSION_ID]:t}}function Ke(n){return{[v.ESCALATE]:n.escalate,[v.TRANSFER_TO_AGENT]:n.transferToAgent}}var Et=class{constructor(e){this.request=e;this.aggregations=new Map;this.aggregationOrder=[]}aggregatePartial(e,t,o){if(ht(t)[v.PARTIAL])return[o];if(le(t)&&t.final){let a=[];for(let c of this.aggregationOrder){let l=this.aggregations.get(c);l&&a.push(this.buildNonPartialAggregation(e,l))}return this.aggregations.clear(),this.aggregationOrder=[],[...a,o]}if(Z(t))return this.aggregations.clear(),this.aggregationOrder=[],[o];if(!ze(t))return[o];let i=t.artifact.artifactId;if(!t.append&&(this.removeAggregation(i),t.lastChunk))return o.partial=!1,[o];let s=this.aggregations.get(i);return s?(this.aggregationOrder=this.aggregationOrder.filter(a=>a!==i),this.aggregationOrder.push(i)):(s={aggregatedText:"",aggregatedThoughts:"",parts:[]},this.aggregations.set(i,s),this.aggregationOrder.push(i)),this.updateAggregation(s,o),t.lastChunk?(this.removeAggregation(i),[o,this.buildNonPartialAggregation(e,s)]):[o]}removeAggregation(e){this.aggregations.delete(e),this.aggregationOrder=this.aggregationOrder.filter(t=>t!==e)}updateAggregation(e,t){var r;let o=((r=t.content)==null?void 0:r.parts)||[];for(let i of o)i.text&&i.text!==""?i.thought?e.aggregatedThoughts+=i.text:e.aggregatedText+=i.text:(this.promoteTextBlocksToParts(e),e.parts.push(i));t.citationMetadata&&(e.citations||(e.citations={citations:[]}),e.citations.citations||(e.citations.citations=[]),e.citations.citations.push(...t.citationMetadata.citations||[])),t.customMetadata&&(e.customMeta||(e.customMeta={}),Object.assign(e.customMeta,t.customMetadata)),t.groundingMetadata&&(e.grounding=t.groundingMetadata),t.usageMetadata&&(e.usage=t.usageMetadata)}buildNonPartialAggregation(e,t){return this.promoteTextBlocksToParts(t),A({author:e.agent.name,invocationId:e.invocationId,content:t.parts.length>0?cs([...t.parts]):void 0,customMetadata:t.customMeta,groundingMetadata:t.grounding,citationMetadata:t.citations,usageMetadata:t.usage,turnComplete:!1,partial:!1})}promoteTextBlocksToParts(e){e.aggregatedThoughts!==""&&(e.parts.push({thought:!0,text:e.aggregatedThoughts}),e.aggregatedThoughts=""),e.aggregatedText!==""&&(e.parts.push({text:e.aggregatedText}),e.aggregatedText="")}updateCustomMetadata(e,t){let o={};if(this.request&&e.turnComplete&&(o.request=this.request),t&&(o.response=t,Z(t)?(t.id&&(o.task_id=t.id),t.contextId&&(o.context_id=t.contextId)):t.taskId&&(o.task_id=t.taskId,t.contextId&&(o.context_id=t.contextId))),Object.keys(o).length!==0){e.customMetadata||(e.customMetadata={});for(let[r,i]of Object.entries(o))i!=null&&(e.customMetadata[`a2a:${r}`]=i)}}};import{createModelContent as ls,createUserContent as us}from"@google/genai";function ne(n=[],e=[]){return n.map(t=>fs(t,e))}function fs(n,e){return n.text!==void 0&&n.text!==null?ds(n):n.inlineData||n.fileData?ps(n):ms(n,e)}function ds(n){let e={kind:"text",text:n.text||""};return n.thought&&(e.metadata={[v.THOUGHT]:!0}),e}function ps(n){let e={};if(n.videoMetadata&&(e[v.VIDEO_METADATA]=n.videoMetadata),n.fileData)return{kind:"file",file:{uri:n.fileData.fileUri||"",mimeType:n.fileData.mimeType},metadata:e};if(n.inlineData)return{kind:"file",file:{bytes:n.inlineData.data||"",mimeType:n.inlineData.mimeType},metadata:e};throw new Error(`Not a file part: ${JSON.stringify(n)}`)}function ms(n,e=[]){let t,o;if(n.functionCall)t="function_call",o=n.functionCall;else if(n.functionResponse)t="function_response",o=n.functionResponse;else if(n.executableCode)t="executable_code",o=n.executableCode;else if(n.codeExecutionResult)t="code_execution_result",o=n.codeExecutionResult;else return{kind:"data",data:{},metadata:{}};let r={[v.DATA_PART_TYPE]:t};return n.functionCall&&n.functionCall.id&&e.includes(n.functionCall.id)&&(r[v.IS_LONG_RUNNING]=!0),n.functionResponse&&n.functionResponse.id&&e.includes(n.functionResponse.id)&&(r[v.IS_LONG_RUNNING]=!0),{kind:"data",data:o,metadata:r}}function Yo(n){let e=ee(n.parts);return n.role==="user"?us(e):ls(e)}function ee(n){return n.map(e=>on(e))}function on(n){if(n.kind==="text")return gs(n);if(n.kind==="file")return hs(n);if(n.kind==="data")return Cs(n);throw new Error(`Unknown part kind: ${JSON.stringify(n)}`)}function gs(n){var e;return{text:n.text,thought:!!((e=n.metadata)!=null&&e[v.THOUGHT])}}function hs(n){var t;let e={};if((t=n.metadata)!=null&&t[v.VIDEO_METADATA]&&(e.videoMetadata=n.metadata[v.VIDEO_METADATA]),"bytes"in n.file)return e.inlineData={data:n.file.bytes,mimeType:n.file.mimeType||""},e;if("uri"in n.file)return e.fileData={fileUri:n.file.uri,mimeType:n.file.mimeType||""},e;throw new Error(`Not a file part: ${JSON.stringify(n)}`)}function Cs(n){var o;if(!n.data)throw new Error(`No data in part: ${JSON.stringify(n)}`);let e=n.data,t=(o=n.metadata)==null?void 0:o[v.DATA_PART_TYPE];return t==="function_call"?{functionCall:e}:t==="function_response"?{functionResponse:e}:t==="executable_code"?{executableCode:e}:t==="code_execution_result"?{codeExecutionResult:e}:{text:JSON.stringify(n.data)}}function Jo(n,e){let t=n.events;if(e<0||e>=t.length)return;let o=t[e];if(o.author!=="user")return;let r=As(o);if(r)for(let i=e-1;i>=0;i--){let s=t[i];if(!vs(s,r))continue;let a=s.customMetadata||{},c=a[He.TASK_ID]||"",l=a[He.CONTEXT_ID]||"";return{response:o,taskId:c,contextId:l}}}function vs(n,e){return!n||!n.content||!n.content.parts?!1:n.content.parts.some(t=>t.functionCall&&t.functionCall.id===e)}function As(n){var t;if(!n||!n.content||!n.content.parts)return;let e=n.content.parts.find(o=>o.functionResponse);return(t=e==null?void 0:e.functionResponse)==null?void 0:t.id}function Qo(n,e){let t=e.events,o,r=-1;for(let s=t.length-1;s>=0;s--){let a=t[s];if(a.author===n.agent.name){r=s,o=(a.customMetadata||{})[He.CONTEXT_ID];break}}let i=[];for(let s=r+1;s<t.length;s++){let a=t[s];if(a.author!=="user"&&a.author!==n.agent.name&&(a=Es(n,a)),!a.content||!a.content.parts||a.content.parts.length===0)continue;let c=ne(a.content.parts,a.longRunningToolIds);i.push(...c)}return{parts:i,contextId:o}}function Es(n,e){let t=A({author:"user",invocationId:n.invocationId});if(!e.content||!e.content.parts)return t;let o=[{text:"For context:"}];for(let r of e.content.parts)if(!r.thought)if(r.text)o.push({text:`[${e.author}] said: ${r.text}`});else if(r.functionCall){let i=r.functionCall;o.push({text:`[${e.author}] called tool ${i.name} with parameters: ${JSON.stringify(i.args)}`})}else if(r.functionResponse){let i=r.functionResponse;o.push({text:`[${e.author}] ${i.name} tool returned result: ${JSON.stringify(i.response)}`})}else o.push(r);return o.length>1&&(t.content={role:"user",parts:o}),t}import{DefaultAgentCardResolver as ga}from"@a2a-js/sdk/client";import*as oi from"fs/promises";import{context as fa,trace as da}from"@opentelemetry/api";var xs="google-adk",ys="gl-typescript",Ts="remote_reasoning_engine",Ss="GOOGLE_CLOUD_AGENT_ENGINE_ID";function Rs(){let n=`${xs}/${$e}`;!W()&&process.env[Ss]&&(n=`${n}+${Ts}`);let e=`${ys}/${W()?window.navigator.userAgent:process.version}`;return[n,e]}function Zo(){return Rs()}var rn=Symbol.for("google.adk.baseModel");function sn(n){return typeof n=="object"&&n!==null&&rn in n&&n[rn]===!0}var er;er=rn;var Ie=class{constructor({model:e}){this[er]=!0;this.model=e}get trackingHeaders(){let t=Zo().join(" ");return{"x-goog-api-client":t,"user-agent":t}}maybeAppendUserContent(e){var t;e.contents.length===0&&e.contents.push({role:"user",parts:[{text:"Handle the requests as specified in the System Instruction."}]}),((t=e.contents[e.contents.length-1])==null?void 0:t.role)!=="user"&&e.contents.push({role:"user",parts:[{text:"Continue processing previous requests as instructed. Exit or provide a summary if no more outputs are needed."}]})}};Ie.supportedModels=[];import{createPartFromText as nr,FinishReason as Is,GoogleGenAI as cn}from"@google/genai";var xt=(t=>(t.VERTEX_AI="VERTEX_AI",t.GEMINI_API="GEMINI_API",t))(xt||{});function tr(){return gt("GOOGLE_GENAI_USE_VERTEXAI")?"VERTEX_AI":"GEMINI_API"}var yt=class{constructor(e){this.geminiSession=e}async sendHistory(e){let t=e.filter(o=>{var r;return o.parts&&((r=o.parts[0])==null?void 0:r.text)});t.length>0?this.geminiSession.sendClientContent({turns:t,turnComplete:t[t.length-1].role==="user"}):g.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(o=>o.functionResponse).filter(o=>!!o);g.debug("Sending LLM function response:",t),this.geminiSession.sendToolResponse({functionResponses:t})}else g.debug("Sending LLM new content",e),this.geminiSession.sendClientContent({turns:[e],turnComplete:!0})}async sendRealtime(e){g.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 an(n){var t;let e=n.usageMetadata;if(n.candidates&&n.candidates.length>0){let o=n.candidates[0];return(t=o.content)!=null&&t.parts&&o.content.parts.length>0?{content:o.content,groundingMetadata:o.groundingMetadata,citationMetadata:o.citationMetadata,usageMetadata:e,finishReason:o.finishReason}:{errorCode:o.finishReason,errorMessage:o.finishMessage,usageMetadata:e,citationMetadata:o.citationMetadata,finishReason:o.finishReason}}return n.promptFeedback?{errorCode:n.promptFeedback.blockReason,errorMessage:n.promptFeedback.blockReasonMessage,usageMetadata:e}:{errorCode:"UNKNOWN_ERROR",errorMessage:"Unknown error.",usageMetadata:e}}var fe=class extends Ie{constructor({model:e,apiKey:t,vertexai:o,project:r,location:i,headers:s}){e||(e="gemini-2.5-flash"),super({model:e});let a=Tt({model:e,vertexai:o,project:r,location:i,apiKey:t});if(!a.vertexai&&!a.apiKey)throw new Error("API key must be provided via constructor or GOOGLE_GENAI_API_KEY or GEMINI_API_KEY environment variable.");this.project=a.project,this.location=a.location,this.apiKey=a.apiKey,this.headers=s,this.vertexai=!!a.vertexai}async*generateContentAsync(e,t=!1){var o,r,i,s,a,c,l;if(this.preprocessRequest(e),this.maybeAppendUserContent(e),g.info(`Sending out request, model: ${e.model}, backend: ${this.apiBackend}, stream: ${t}`),(o=e.config)!=null&&o.httpOptions&&(e.config.httpOptions.headers={...e.config.httpOptions.headers,...this.trackingHeaders}),t){let u=await this.apiClient.models.generateContentStream({model:(r=e.model)!=null?r:this.model,contents:e.contents,config:e.config}),f="",d="",p,m;for await(let h of u){m=h;let C=an(h);p=C.usageMetadata;let T=(s=(i=C.content)==null?void 0:i.parts)==null?void 0:s[0];if(T!=null&&T.text)"thought"in T&&T.thought?f+=T.text:d+=T.text,C.partial=!0;else if((f||d)&&(!T||!T.inlineData)){let $=[];f&&$.push({text:f,thought:!0}),d&&$.push(nr(d)),yield{content:{role:"model",parts:$},usageMetadata:C.usageMetadata},f="",d=""}yield C}if((d||f)&&((c=(a=m==null?void 0:m.candidates)==null?void 0:a[0])==null?void 0:c.finishReason)===Is.STOP){let h=[];f&&h.push({text:f,thought:!0}),d&&h.push({text:d}),yield{content:{role:"model",parts:h},usageMetadata:p}}}else{let u=await this.apiClient.models.generateContent({model:(l=e.model)!=null?l:this.model,contents:e.contents,config:e.config});yield an(u)}}getHttpOptions(){return{headers:{...this.trackingHeaders,...this.headers}}}get apiClient(){return this._apiClient?this._apiClient:(this.vertexai?this._apiClient=new cn({vertexai:this.vertexai,project:this.project,location:this.location,httpOptions:this.getHttpOptions()}):this._apiClient=new cn({apiKey:this.apiKey,httpOptions:this.getHttpOptions()}),this._apiClient)}get apiBackend(){return this._apiBackend||(this._apiBackend=this.apiClient.vertexai?"VERTEX_AI":"GEMINI_API"),this._apiBackend}get liveApiVersion(){return this._liveApiVersion||(this._liveApiVersion=this.apiBackend==="VERTEX_AI"?"v1beta1":"v1alpha"),this._liveApiVersion}getLiveHttpOptions(){return{headers:this.trackingHeaders,apiVersion:this.liveApiVersion}}get liveApiClient(){return this._liveApiClient||(this._liveApiClient=new cn({apiKey:this.apiKey,httpOptions:this.getLiveHttpOptions()})),this._liveApiClient}async connect(e){var o,r,i,s;(o=e.liveConnectConfig)!=null&&o.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:[nr(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 yt(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 o of t.parts)or(o.inlineData),or(o.fileData)}}};fe.supportedModels=[/gemini-.*/,/projects\/.+\/locations\/.+\/endpoints\/.+/,/projects\/.+\/locations\/.+\/publishers\/google\/models\/gemini.+/];function or(n){n&&n.displayName&&(n.displayName=void 0)}function Tt({model:n,vertexai:e,project:t,location:o,apiKey:r}){let i={model:n,vertexai:e,project:t,location:o,apiKey:r};if(i.vertexai=!!e,!i.vertexai&&!W()&&(i.vertexai=gt("GOOGLE_GENAI_USE_VERTEXAI")),i.vertexai){if(!W()&&!i.project&&(i.project=process.env.GOOGLE_CLOUD_PROJECT),!W()&&!i.location&&(i.location=process.env.GOOGLE_CLOUD_LOCATION),!i.project)throw new Error("VertexAI project must be provided via constructor or GOOGLE_CLOUD_PROJECT environment variable.");if(!i.location)throw new Error("VertexAI location must be provided via constructor or GOOGLE_CLOUD_LOCATION environment variable.")}else!i.apiKey&&!W()&&(i.apiKey=process.env.GOOGLE_GENAI_API_KEY||process.env.GEMINI_API_KEY);return i}var rr="APIGEE_PROXY_URL",we=class extends fe{constructor({model:e,proxyUrl:t,apiKey:o,vertexai:r,location:i,project:s,headers:a}){var c;if(!sr(e))throw new Error(`Model ${e} is not a valid Apigee model, expected apigee/[<provider>/][<version>/]<model_id>`);if(super({...ws({model:e,vertexai:r,project:s,location:i,apiKey:o}),headers:a}),this.proxyUrl=t!=null?t:"",!W()&&!this.proxyUrl&&(this.proxyUrl=(c=process.env[rr])!=null?c:""),!this.proxyUrl)throw new Error(`Proxy URL must be provided via the constructor or ${rr} environment variable.`)}getHttpOptions(){let e=super.getHttpOptions();return e.baseUrl=this.proxyUrl,e}getLiveHttpOptions(){let e=super.getLiveHttpOptions();return e.baseUrl=this.proxyUrl,e}identifyApiVersion(){let t=(this.model.startsWith("apigee/")?this.model.substring(7):this.model).split("/");return t.length===3?t[1]:t.length===2&&t[0]!="vertex_ai"&&t[0]!="gemini"&&t[0].startsWith("v")?t[0]:this.vertexai?"v1beta1":"v1alpha"}get liveApiVersion(){return this._apigeeLiveApiVersion||(this._apigeeLiveApiVersion=this.identifyApiVersion()),this._apigeeLiveApiVersion}async*generateContentAsync(e,t=!1){var r;let o=(r=e.model)!=null?r:this.model;e.model=ir(o),yield*super.generateContentAsync(e,t)}async connect(e){var o;let t=(o=e.model)!=null?o:this.model;return e.model=ir(t),super.connect(e)}};we.supportedModels=[/apigee\/.*/];function ws({model:n,vertexai:e,project:t,location:o,apiKey:r}){var s;let i=Tt({model:n,vertexai:e,project:t,location:o,apiKey:r});return i.vertexai=i.vertexai||((s=i.model)==null?void 0:s.startsWith("apigee/vertex_ai/")),i.vertexai||i.apiKey||(g.warn('No API key provided when using a Gemini model, using a fake key "-".'),i.apiKey="-"),i}function ir(n){if(!sr(n))throw new Error(`Model ${n} is not a valid Apigee model, expected apigee/[<provider>/][<version>/]<model_id>`);let e=n.split("/");return e[e.length-1]}function sr(n){let e=["vertex_ai","gemini"];if(!n.startsWith("apigee/"))return!1;let t=n.substring(7);if(t.length===0)return!1;let o=t.split("/",-1);return o[o.length-1].length===0?!1:o.length==1?!0:o.length==2?e.includes(o[0])?!0:o[0].startsWith("v"):o.length==3&&e.includes(o[0])?o[1].startsWith("v"):!1}var ln=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 o=this.cache.keys().next().value;o!==void 0&&this.cache.delete(o)}this.cache.set(e,t)}},z=class z{static newLlm(e){return new(z.resolve(e))({model:e})}static _register(e,t){z.llmRegistryDict.has(e)&&g.info(`Updating LLM class for ${e} from ${z.llmRegistryDict.get(e)} to ${t}`),z.llmRegistryDict.set(e,t)}static register(e){for(let t of e.supportedModels)z._register(t,e)}static resolve(e){let t=z.resolveCache.get(e);if(t)return t;for(let[o,r]of z.llmRegistryDict.entries())if(new RegExp(`^${o instanceof RegExp?o.source:o}$`,o instanceof RegExp?o.flags:void 0).test(e))return z.resolveCache.set(e,r),r;throw new Error(`Model ${e} not found.`)}};z.llmRegistryDict=new Map,z.resolveCache=new ln(32);var ge=z;ge.register(fe);ge.register(we);var un=Symbol.for("google.adk.baseTool");function Xe(n){return typeof n=="object"&&n!==null&&un in n&&n[un]===!0}var ar;ar=un;var P=class{constructor(e){this[ar]=!0;var t;this.name=e.name,this.description=e.description,this.isLongRunning=(t=e.isLongRunning)!=null?t:!1}_getDeclaration(){}async processLlmRequest({llmRequest:e}){let t=this._getDeclaration();if(!t)return;if(this.name in e.toolsDict)throw new Error(`Duplicate tool name: ${this.name}`);e.toolsDict[this.name]=this;let o=bs(e);o?(o.functionDeclarations||(o.functionDeclarations=[]),o.functionDeclarations.push(t)):(e.config=e.config||{},e.config.tools=e.config.tools||[],e.config.tools.push({functionDeclarations:[t]}))}get apiVariant(){return tr()}};function bs(n){var e;return(((e=n.config)==null?void 0:e.tools)||[]).find(t=>"functionDeclarations"in t)}import{Type as cr}from"@google/genai";import{zodToJsonSchema as ks}from"zod-to-json-schema";import{toJSONSchema as Ps}from"zod/v4";function fn(n){return n!==null&&typeof n=="object"&&"parse"in n&&typeof n.parse=="function"&&"safeParse"in n&&typeof n.safeParse=="function"}function _s(n){return fn(n)&&!("_zod"in n)}function Ls(n){return fn(n)&&"_zod"in n}function Os(n){var o,r;let e=n;if((o=e._def)!=null&&o.typeName)return e._def.typeName;let t=(r=e._def)==null?void 0:r.type;if(typeof t=="string"&&t)return"Zod"+t.charAt(0).toUpperCase()+t.slice(1)}function he(n){return fn(n)&&Os(n)==="ZodObject"}function be(n){if(!he(n))throw new Error("Expected a Zod Object");if(Ls(n))return Ps(n,{target:"openapi-3.0",io:"input",override:e=>{var o;let{jsonSchema:t}=e;t.additionalProperties!==void 0&&delete t.additionalProperties,t.readOnly!==void 0&&delete t.readOnly,t.maxItems!==void 0&&(t.maxItems=t.maxItems.toString()),(t.format==="email"||t.format==="uuid")&&delete t.pattern,t.minItems!==void 0&&(t.minItems=t.minItems.toString()),t.minLength!==void 0&&(t.minLength=t.minLength.toString()),t.maxLength!==void 0&&(t.maxLength=t.maxLength.toString()),((o=t.enum)==null?void 0:o.length)===1&&t.enum[0]===null&&(t.type=cr.NULL,delete t.enum),t.type!==void 0&&(t.type=t.type.toUpperCase())}});if(_s(n))return ks(n,{target:"openApi3",emailStrategy:"format:email",postProcess:e=>{var t,o,r,i,s,a,c;if(e)return e.additionalProperties!==void 0&&delete e.additionalProperties,e.maxItems!==void 0&&(e.maxItems=(t=e.maxItems)==null?void 0:t.toString()),e.minItems!==void 0&&(e.minItems=(o=e.minItems)==null?void 0:o.toString()),e.minLength!==void 0&&(e.minLength=(r=e.minLength)==null?void 0:r.toString()),e.maxLength!==void 0&&(e.maxLength=(i=e.maxLength)==null?void 0:i.toString()),((s=e.enum)==null?void 0:s.length)===1&&e.enum[0]==="null"&&(e.type=cr.NULL,delete e.enum),e.type==="integer"&&e.format!=="int64"&&((a=e.minimum)!=null||(e.minimum=Number.MIN_SAFE_INTEGER),(c=e.maximum)!=null||(e.maximum=Number.MAX_SAFE_INTEGER)),e.type!==void 0&&(e.type=e.type.toUpperCase()),e}});throw new Error("Unsupported Zod schema version.")}import{createUserContent as Ms}from"@google/genai";import{isEmpty as lr}from"lodash-es";var dn="adk-",St="adk_request_credential",ke="adk_request_confirmation",Ns={handleFunctionCallList:Rt,generateAuthEvent:mn,generateRequestConfirmationEvent:gn};function pn(){return`${dn}${b()}`}function ur(n){let e=I(n);if(e)for(let t of e)t.id||(t.id=pn())}function fr(n){if(n&&n.parts)for(let e of n.parts)e.functionCall&&e.functionCall.id&&e.functionCall.id.startsWith(dn)&&(e.functionCall.id=void 0),e.functionResponse&&e.functionResponse.id&&e.functionResponse.id.startsWith(dn)&&(e.functionResponse.id=void 0)}function dr(n,e){let t=new Set;for(let o of n)o.name&&o.name in e&&e[o.name].isLongRunning&&o.id&&t.add(o.id);return t}function mn(n,e){var r;if(!((r=e.actions)!=null&&r.requestedAuthConfigs)||lr(e.actions.requestedAuthConfigs))return;let t=[],o=new Set;for(let[i,s]of Object.entries(e.actions.requestedAuthConfigs)){let a={name:St,args:{function_call_id:i,auth_config:s},id:pn()};o.add(a.id),t.push({functionCall:a})}return A({invocationId:n.invocationId,author:n.agent.name,branch:n.branch,content:{parts:t,role:e.content.role},longRunningToolIds:Array.from(o)})}function gn({invocationContext:n,functionCallEvent:e,functionResponseEvent:t}){var s,a;if(!((s=t.actions)!=null&&s.requestedToolConfirmations)||lr(t.actions.requestedToolConfirmations))return;let o=[],r=new Set,i=I(e);for(let[c,l]of Object.entries(t.actions.requestedToolConfirmations)){let u=(a=i.find(d=>d.id===c))!=null?a:void 0;if(!u)continue;let f={name:ke,args:{originalFunctionCall:u,toolConfirmation:l},id:pn()};r.add(f.id),o.push({functionCall:f})}return A({invocationId:n.invocationId,author:n.agent.name,branch:n.branch,content:{parts:o,role:t.content.role},actions:t.actions,longRunningToolIds:Array.from(r)})}async function Ds(n,e,t){return Q.startActiveSpan(`execute_tool ${n.name}`,async o=>{try{g.debug(`callToolAsync ${n.name}`);let r=await n.runAsync({args:e,toolContext:t});return _o({tool:n,args:e,functionResponseEvent:Bs(n,r,t,t.invocationContext)}),r}finally{o.end()}})}function Bs(n,e,t,o){let r;typeof e!="object"||e==null?r={result:e}:r=e;let s={role:"user",parts:[{functionResponse:{name:n.name,response:r,id:t.functionCallId}}]};return A({invocationId:o.invocationId,author:o.agent.name,content:s,actions:t.actions,branch:o.branch})}async function pr({invocationContext:n,functionCallEvent:e,toolsDict:t,beforeToolCallbacks:o,afterToolCallbacks:r,filters:i,toolConfirmationDict:s}){let a=I(e);return await Rt({invocationContext:n,functionCalls:a,toolsDict:t,beforeToolCallbacks:o,afterToolCallbacks:r,filters:i,toolConfirmationDict:s})}async function Rt({invocationContext:n,functionCalls:e,toolsDict:t,beforeToolCallbacks:o,afterToolCallbacks:r,filters:i,toolConfirmationDict:s}){var u;let a=[],c=e.filter(f=>!i||f.id&&i.has(f.id));for(let f of c){let d;s&&f.id&&(d=s[f.id]);let{tool:p,toolContext:m}=Fs({invocationContext:n,functionCall:f,toolsDict:t,toolConfirmation:d});g.debug(`execute_tool ${p.name}`);let h=(u=f.args)!=null?u:{},C=null,T;if(C=await n.pluginManager.runBeforeToolCallback({tool:p,toolArgs:h,toolContext:m}),C==null){for(let se of o)if(C=await se({tool:p,args:h,context:m}),C)break}if(C==null)try{C=await Ds(p,h,m)}catch(se){if(se instanceof Error){let Ao=await n.pluginManager.runOnToolErrorCallback({tool:p,toolArgs:h,toolContext:m,error:se});Ao?C=Ao:T=se.message}else T=se}let $=await n.pluginManager.runAfterToolCallback({tool:p,toolArgs:h,toolContext:m,result:C});if($==null){for(let se of r)if($=await se({tool:p,args:h,context:m,response:C}),$)break}if($!=null&&(C=$),p.isLongRunning&&!C)continue;T?C={error:T}:(typeof C!="object"||C==null)&&(C={result:C});let R=A({invocationId:n.invocationId,author:n.agent.name,content:Ms({functionResponse:{id:m.functionCallId,name:p.name,response:C}}),actions:m.actions,branch:n.branch});g.debug("traceToolCall",{tool:p.name,args:h,functionResponseEvent:R.id}),a.push(R)}if(!a.length)return null;let l=Us(a);return a.length>1&&Q.startActiveSpan("execute_tool (merged)",f=>{try{g.debug("execute_tool (merged)"),g.debug("traceMergedToolCalls",{responseEventId:l.id,functionResponseEvent:l.id}),Lo({responseEventId:l.id,functionResponseEvent:l})}finally{f.end()}}),l}function Fs({invocationContext:n,functionCall:e,toolsDict:t,toolConfirmation:o}){if(!e.name||!(e.name in t))throw new Error(`Function ${e.name} is not found in the toolsDict.`);let r=new N({invocationContext:n,functionCallId:e.id||void 0,toolConfirmation:o});return{tool:t[e.name],toolContext:r}}function Us(n){if(!n.length)throw new Error("No function response events provided.");if(n.length===1)return n[0];let e=[];for(let i of n)i.content&&i.content.parts&&e.push(...i.content.parts);let t=n[0],o=n.map(i=>i.actions||{}),r=To(o);return A({author:t.author,branch:t.branch,content:{role:"user",parts:e},actions:r,timestamp:t.timestamp})}import{z as Cr}from"zod";function q(n,e){n.config||(n.config={});let t=e.join(`
8
8
 
9
9
  `);n.config.systemInstruction?n.config.systemInstruction+=`
10
10
 
11
- `+t:n.config.systemInstruction=t}function xo(n,e){n.config||(n.config={}),n.config.responseSchema=e,n.config.responseMimeType="application/json"}import{Type as xi}from"@google/genai";function Ei(n){return n===void 0?{type:xi.OBJECT,properties:{}}:ce(n)?Ee(n):n}var Mt=Symbol.for("google.adk.functionTool");function Ti(n){return typeof n=="object"&&n!==null&&Mt in n&&n[Mt]===!0}var Eo,To,W=class extends(To=N,Eo=Mt,To){constructor(t){var r;let o=(r=t.name)!=null?r:t.execute.name;if(!o)throw new Error("Tool name cannot be empty. Either name the `execute` function or provide a `name`.");super({name:o,description:t.description,isLongRunning:t.isLongRunning});this[Eo]=!0;this.execute=t.execute,this.parameters=t.parameters}_getDeclaration(){return{name:this.name,description:this.description,parameters:Ei(this.parameters)}}async runAsync(t){try{let o=t.args;return ce(this.parameters)&&(o=this.parameters.parse(t.args)),await this.execute(o,t.toolContext)}catch(o){let r=o instanceof Error?o.message:String(o);throw new Error(`Error in tool '${this.name}': ${r}`)}}};var _=class{},Nt=class{};var Bt=class extends _{constructor(){super(...arguments);this.toolName="transfer_to_agent";this.tool=new W({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:So.object({agentName:So.string().describe("the agent name to transfer to.")}),execute:function(t,o){if(!o)throw new Error("toolContext is required.");return o.actions.transferToAgent=t.agentName,"Transfer queued"}})}async*runAsync(t,o){if(!A(t.agent))return;let r=this.getTransferTargets(t.agent);if(!r.length)return;le(o,[this.buildTargetAgentsInstructions(t.agent,r)]);let i=new L({invocationContext:t});await this.tool.processLlmRequest({toolContext:i,llmRequest:o})}buildTargetAgentsInfo(t){return`
11
+ `+t:n.config.systemInstruction=t}function mr(n,e){n.config||(n.config={}),n.config.responseSchema=e,n.config.responseMimeType="application/json"}import{Type as $s}from"@google/genai";function Gs(n){return n===void 0?{type:$s.OBJECT,properties:{}}:he(n)?be(n):n}var hn=Symbol.for("google.adk.functionTool");function qs(n){return typeof n=="object"&&n!==null&&hn in n&&n[hn]===!0}var gr,hr,oe=class extends(hr=P,gr=hn,hr){constructor(t){var r;let o=(r=t.name)!=null?r:t.execute.name;if(!o)throw new Error("Tool name cannot be empty. Either name the `execute` function or provide a `name`.");super({name:o,description:t.description,isLongRunning:t.isLongRunning});this[gr]=!0;this.execute=t.execute,this.parameters=t.parameters}_getDeclaration(){return{name:this.name,description:this.description,parameters:Gs(this.parameters)}}async runAsync(t){try{let o=t.args;return he(this.parameters)&&(o=this.parameters.parse(t.args)),await this.execute(o,t.toolContext)}catch(o){let r=o instanceof Error?o.message:String(o);throw new Error(`Error in tool '${this.name}': ${r}`)}}};var D=class{},Cn=class{};var vn=class extends D{constructor(){super(...arguments);this.toolName="transfer_to_agent";this.tool=new oe({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:Cr.object({agentName:Cr.string().describe("the agent name to transfer to.")}),execute:function(t,o){if(!o)throw new Error("toolContext is required.");return o.actions.transferToAgent=t.agentName,"Transfer queued"}})}async*runAsync(t,o){if(!y(t.agent))return;let r=this.getTransferTargets(t.agent);if(!r.length)return;q(o,[this.buildTargetAgentsInstructions(t.agent,r)]);let i=new N({invocationContext:t});await this.tool.processLlmRequest({toolContext:i,llmRequest:o})}buildTargetAgentsInfo(t){return`
12
12
  Agent name: ${t.name}
13
13
  Agent description: ${t.description}
14
14
  `}buildTargetAgentsInstructions(t,o){let r=`
@@ -28,13 +28,13 @@ 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 o=[];return o.push(...t.subAgents),!t.parentAgent||!A(t.parentAgent)||(t.disallowTransferToParent||o.push(t.parentAgent),t.disallowTransferToPeers||o.push(...t.parentAgent.subAgents.filter(r=>r.name!==t.name))),o}},Ro=new Bt;var Dt=class extends _{async*runAsync(e,t){var r;let o=e.agent;A(o)&&(t.model=o.canonicalModel.model,t.config={...(r=o.generateContentConfig)!=null?r:{}},o.outputSchema&&xo(t,o.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))}},bo=new Dt;import{cloneDeep as Bo}from"lodash-es";var Ft=Symbol.for("google.adk.baseCodeExecutor");function tt(n){return typeof n=="object"&&n!==null&&Ft in n&&n[Ft]===!0}var wo;wo=Ft;var Me=class{constructor(){this[wo]=!0;this.optimizeDataFile=!1;this.stateful=!1;this.errorRetryAttempts=2;this.codeBlockDelimiters=[["```tool_code\n","\n```"],["```python\n","\n```"]];this.executionResultDelimiters=["```tool_output\n","\n```"]}};var Si="^projects/[^/]+/locations/[^/]+/publishers/[^/]+/models/(.+)$";function $t(n){let e=n.match(Si);return e?e[1]:n}function Io(n){return $t(n).startsWith("gemini-")}function Ri(n){if(!/^\d+(\.\d+)*$/.test(n))return{valid:!1,major:0,minor:0,patch:0};let e=n.split(".").map(t=>parseInt(t,10));return{valid:!0,major:e[0],minor:e.length>1?e[1]:0,patch:e.length>2?e[2]:0}}function Po(n){return $t(n).startsWith("gemini-1")}function Ne(n){if(!n)return!1;let e=$t(n);if(!e.startsWith("gemini-"))return!1;let t=e.slice(7).split("-",1)[0],o=Ri(t);return o.valid&&o.major>=2}var Gt=Symbol.for("google.adk.builtInCodeExecutor");function De(n){return typeof n=="object"&&n!==null&&Gt in n&&n[Gt]===!0}var Lo,_o,Be=class extends(_o=Me,Lo=Gt,_o){constructor(){super(...arguments);this[Lo]=!0}executeCode(t){return Promise.resolve({stdout:"",stderr:"",outputFiles:[]})}processLlmRequest(t){if(t.model&&Ne(t.model)){t.config=t.config||{},t.config.tools=t.config.tools||[],t.config.tools.push({codeExecution:{}});return}throw new Error(`Gemini code execution tool is not supported for model ${t.model}`)}};import{Language as bi,Outcome as ko}from"@google/genai";import{cloneDeep as wi}from"lodash-es";function Oo(n,e){var u;if(!((u=n.parts)!=null&&u.length))return"";for(let f=0;f<n.parts.length;f++){let p=n.parts[f];if(p.executableCode&&(f===n.parts.length-1||!n.parts[f+1].codeExecutionResult))return n.parts=n.parts.slice(0,f+1),p.executableCode.code}let t=n.parts.filter(f=>f.text);if(!t.length)return"";let o=wi(t[0]),r=t.map(f=>f.text).join(`
32
- `),i=e.map(f=>f[0]).join("|"),s=e.map(f=>f[1]).join("|"),a=new RegExp(`?<prefix>.*?)(${i})(?<codeStr>.*?)(${s})(?<suffix>.*?)$`,"s").exec(r),{prefix:c,codeStr:l}=(a==null?void 0:a.groups)||{};return l?(n.parts=[],c&&(o.text=c,n.parts.push(o)),n.parts.push(qt(l)),l):""}function qt(n){return{text:n,executableCode:{code:n,language:bi.PYTHON}}}function Mo(n){if(n.stderr)return{text:n.stderr,codeExecutionResult:{outcome:ko.OUTCOME_FAILED}};let e=[];return(n.stdout||!n.outputFiles)&&e.push(`Code execution result:
31
+ `),r}getTransferTargets(t){let o=[];return o.push(...t.subAgents),!t.parentAgent||!y(t.parentAgent)||(t.disallowTransferToParent||o.push(t.parentAgent),t.disallowTransferToPeers||o.push(...t.parentAgent.subAgents.filter(r=>r.name!==t.name))),o}},vr=new vn;var An=class extends D{async*runAsync(e,t){var r;let o=e.agent;y(o)&&(t.model=o.canonicalModel.model,t.config={...(r=o.generateContentConfig)!=null?r:{}},o.outputSchema&&mr(t,o.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))}},Ar=new An;import{cloneDeep as kr}from"lodash-es";var En=Symbol.for("google.adk.baseCodeExecutor");function It(n){return typeof n=="object"&&n!==null&&En in n&&n[En]===!0}var Er;Er=En;var Ye=class{constructor(){this[Er]=!0;this.optimizeDataFile=!1;this.stateful=!1;this.errorRetryAttempts=2;this.codeBlockDelimiters=[["```tool_code\n","\n```"],["```python\n","\n```"]];this.executionResultDelimiters=["```tool_output\n","\n```"]}};var Vs="^projects/[^/]+/locations/[^/]+/publishers/[^/]+/models/(.+)$";function xn(n){let e=n.match(Vs);return e?e[1]:n}function xr(n){return xn(n).startsWith("gemini-")}function js(n){if(!/^\d+(\.\d+)*$/.test(n))return{valid:!1,major:0,minor:0,patch:0};let e=n.split(".").map(t=>parseInt(t,10));return{valid:!0,major:e[0],minor:e.length>1?e[1]:0,patch:e.length>2?e[2]:0}}function yr(n){return xn(n).startsWith("gemini-1")}function Je(n){if(!n)return!1;let e=xn(n);if(!e.startsWith("gemini-"))return!1;let t=e.slice(7).split("-",1)[0],o=js(t);return o.valid&&o.major>=2}var yn=Symbol.for("google.adk.builtInCodeExecutor");function Ze(n){return typeof n=="object"&&n!==null&&yn in n&&n[yn]===!0}var Tr,Sr,Qe=class extends(Sr=Ye,Tr=yn,Sr){constructor(){super(...arguments);this[Tr]=!0}executeCode(t){return Promise.resolve({stdout:"",stderr:"",outputFiles:[]})}processLlmRequest(t){if(t.model&&Je(t.model)){t.config=t.config||{},t.config.tools=t.config.tools||[],t.config.tools.push({codeExecution:{}});return}throw new Error(`Gemini code execution tool is not supported for model ${t.model}`)}};import{Language as zs,Outcome as Rr}from"@google/genai";import{cloneDeep as Hs}from"lodash-es";function Ir(n,e){var u;if(!((u=n.parts)!=null&&u.length))return"";for(let f=0;f<n.parts.length;f++){let d=n.parts[f];if(d.executableCode&&(f===n.parts.length-1||!n.parts[f+1].codeExecutionResult))return n.parts=n.parts.slice(0,f+1),d.executableCode.code}let t=n.parts.filter(f=>f.text);if(!t.length)return"";let o=Hs(t[0]),r=t.map(f=>f.text).join(`
32
+ `),i=e.map(f=>f[0]).join("|"),s=e.map(f=>f[1]).join("|"),a=new RegExp(`?<prefix>.*?)(${i})(?<codeStr>.*?)(${s})(?<suffix>.*?)$`,"s").exec(r),{prefix:c,codeStr:l}=(a==null?void 0:a.groups)||{};return l?(n.parts=[],c&&(o.text=c,n.parts.push(o)),n.parts.push(Tn(l)),l):""}function Tn(n){return{text:n,executableCode:{code:n,language:zs.PYTHON}}}function wr(n){if(n.stderr)return{text:n.stderr,codeExecutionResult:{outcome:Rr.OUTCOME_FAILED}};let e=[];return(n.stdout||!n.outputFiles)&&e.push(`Code execution result:
33
33
  ${n.stdout}
34
34
  `),n.outputFiles&&e.push(`Saved artifacts:
35
35
  `+n.outputFiles.map(t=>t.name).join(", ")),{text:e.join(`
36
36
 
37
- `),codeExecutionResult:{outcome:ko.OUTCOME_OK}}}function No(n,e,t){var r;if(!((r=n.parts)!=null&&r.length))return;let o=n.parts[n.parts.length-1];o.executableCode?n.parts[n.parts.length-1]={text:e[0]+o.executableCode.code+e[1]}:n.parts.length==1&&o.codeExecutionResult&&(n.parts[n.parts.length-1]={text:t[0]+o.codeExecutionResult.output+t[1]},n.role="user")}import{cloneDeep as Ii}from"lodash-es";var Ut="_code_execution_context",Vt="execution_session_id",ue="processed_input_files",fe="_code_executor_input_files",pe="_code_executor_error_counts",jt="_code_execution_results",Fe=class{constructor(e){this.sessionState=e;var t;this.context=(t=e.get(Ut))!=null?t:{},this.sessionState=e}getStateDelta(){return{[Ut]:Ii(this.context)}}getExecutionId(){if(Vt in this.context)return this.context[Vt]}setExecutionId(e){this.context[Vt]=e}getProcessedFileNames(){return ue in this.context?this.context[ue]:[]}addProcessedFileNames(e){ue in this.context||(this.context[ue]=[]),this.context[ue].push(...e)}getInputFiles(){return fe in this.sessionState?this.sessionState.get(fe):[]}addInputFiles(e){fe in this.sessionState||this.sessionState.set(fe,[]),this.sessionState.get(fe).push(...e)}clearInputFiles(){fe in this.sessionState&&this.sessionState.set(fe,[]),ue in this.context&&(this.context[ue]=[])}getErrorCount(e){return pe in this.sessionState&&this.sessionState.get(pe)[e]||0}incrementErrorCount(e){pe in this.sessionState||this.sessionState.set(pe,{}),this.sessionState.get(pe)[e]=this.getErrorCount(e)+1}resetErrorCount(e){if(!(pe in this.sessionState))return;let t=this.sessionState.get(pe);e in t&&delete t[e]}updateCodeExecutionResult({invocationId:e,code:t,resultStdout:o,resultStderr:r}){jt in this.sessionState||this.sessionState.set(jt,{});let i=this.sessionState.get(jt);e in i||(i[e]=[]),i[e].push({code:t,resultStdout:o,resultStderr:r,timestamp:Date.now()})}getCodeExecutionContext(){return this.sessionState.get(Ut)||{}}};var zt=class extends _{async*runAsync(e,t){if(A(e.agent)&&e.agent.codeExecutor){for await(let o of Li(e,t))yield o;if(tt(e.agent.codeExecutor))for(let o of t.contents){let r=e.agent.codeExecutor.codeBlockDelimiters.length?e.agent.codeExecutor.codeBlockDelimiters[0]:["",""];No(o,r,e.agent.codeExecutor.executionResultDelimiters)}}}},nt={"text/csv":{extension:".csv",loaderCodeTemplate:"pd.read_csv('{filename}')"}},Pi=`
37
+ `),codeExecutionResult:{outcome:Rr.OUTCOME_OK}}}function br(n,e,t){var r;if(!((r=n.parts)!=null&&r.length))return;let o=n.parts[n.parts.length-1];o.executableCode?n.parts[n.parts.length-1]={text:e[0]+o.executableCode.code+e[1]}:n.parts.length==1&&o.codeExecutionResult&&(n.parts[n.parts.length-1]={text:t[0]+o.codeExecutionResult.output+t[1]},n.role="user")}import{cloneDeep as Ws}from"lodash-es";var Sn="_code_execution_context",Rn="execution_session_id",Ce="processed_input_files",ve="_code_executor_input_files",Ae="_code_executor_error_counts",In="_code_execution_results",et=class{constructor(e){this.sessionState=e;var t;this.context=(t=e.get(Sn))!=null?t:{},this.sessionState=e}getStateDelta(){return{[Sn]:Ws(this.context)}}getExecutionId(){if(Rn in this.context)return this.context[Rn]}setExecutionId(e){this.context[Rn]=e}getProcessedFileNames(){return Ce in this.context?this.context[Ce]:[]}addProcessedFileNames(e){Ce in this.context||(this.context[Ce]=[]),this.context[Ce].push(...e)}getInputFiles(){return ve in this.sessionState?this.sessionState.get(ve):[]}addInputFiles(e){ve in this.sessionState||this.sessionState.set(ve,[]),this.sessionState.get(ve).push(...e)}clearInputFiles(){ve in this.sessionState&&this.sessionState.set(ve,[]),Ce in this.context&&(this.context[Ce]=[])}getErrorCount(e){return Ae in this.sessionState&&this.sessionState.get(Ae)[e]||0}incrementErrorCount(e){Ae in this.sessionState||this.sessionState.set(Ae,{}),this.sessionState.get(Ae)[e]=this.getErrorCount(e)+1}resetErrorCount(e){if(!(Ae in this.sessionState))return;let t=this.sessionState.get(Ae);e in t&&delete t[e]}updateCodeExecutionResult({invocationId:e,code:t,resultStdout:o,resultStderr:r}){In in this.sessionState||this.sessionState.set(In,{});let i=this.sessionState.get(In);e in i||(i[e]=[]),i[e].push({code:t,resultStdout:o,resultStderr:r,timestamp:Date.now()})}getCodeExecutionContext(){return this.sessionState.get(Sn)||{}}};var wn=class extends D{async*runAsync(e,t){if(y(e.agent)&&e.agent.codeExecutor){for await(let o of Xs(e,t))yield o;if(It(e.agent.codeExecutor))for(let o of t.contents){let r=e.agent.codeExecutor.codeBlockDelimiters.length?e.agent.codeExecutor.codeBlockDelimiters[0]:["",""];br(o,r,e.agent.codeExecutor.executionResultDelimiters)}}}},wt={"text/csv":{extension:".csv",loaderCodeTemplate:"pd.read_csv('{filename}')"}},Ks=`
38
38
  import pandas as pd
39
39
 
40
40
  def explore_df(df: pd.DataFrame) -> None:
@@ -71,30 +71,54 @@ def explore_df(df: pd.DataFrame) -> None:
71
71
  Total columns: {df.shape[1]}
72
72
 
73
73
  {df_info}""")
74
- `,Kt=class{async*runAsync(e,t){if(!t.partial)for await(let o of _i(e,t))yield o}},Hl=new Kt;async function*Li(n,e){let t=n.agent;if(!A(t))return;let o=t.codeExecutor;if(!o||!tt(o))return;if(De(o)){o.processLlmRequest(e);return}if(!o.optimizeDataFile)return;let r=new Fe(new v(n.session.state));if(r.getErrorCount(n.invocationId)>=o.errorRetryAttempts)return;let i=ki(r,e),s=new Set(r.getProcessedFileNames()),a=i.filter(c=>!s.has(c.name));for(let c of a){let l=Oi(c);if(!l)return;let u={role:"model",parts:[{text:`Processing input file: \`${c.name}\``},qt(l)]};e.contents.push(Bo(u)),yield E({invocationId:n.invocationId,author:t.name,branch:n.branch,content:u});let f=Do(n,r),p=await o.executeCode({invocationContext:n,codeExecutionInput:{code:l,inputFiles:[c],executionId:f}});r.updateCodeExecutionResult({invocationId:n.invocationId,code:l,resultStdout:p.stdout,resultStderr:p.stderr}),r.addProcessedFileNames([c.name]);let d=await Fo(n,r,p);yield d,e.contents.push(Bo(d.content))}}async function*_i(n,e){let t=n.agent;if(!A(t))return;let o=t.codeExecutor;if(!o||!tt(o)||!e||!e.content||De(o))return;let r=new Fe(new v(n.session.state));if(r.getErrorCount(n.invocationId)>=o.errorRetryAttempts)return;let i=e.content,s=Oo(i,o.codeBlockDelimiters);if(!s)return;yield E({invocationId:n.invocationId,author:t.name,branch:n.branch,content:i});let a=Do(n,r),c=await o.executeCode({invocationContext:n,codeExecutionInput:{code:s,inputFiles:r.getInputFiles(),executionId:a}});r.updateCodeExecutionResult({invocationId:n.invocationId,code:s,resultStdout:c.stdout,resultStderr:c.stderr}),yield await Fo(n,r,c),e.content=void 0}function ki(n,e){var r;let t=n.getInputFiles(),o=new Set(t.map(i=>i.name));for(let i=0;i<e.contents.length;i++){let s=e.contents[i];if(!(s.role!=="user"||!s.parts))for(let a=0;a<s.parts.length;a++){let c=s.parts[a],l=(r=c.inlineData)==null?void 0:r.mimeType;if(!l||!c.inlineData||!nt[l])continue;let u=`data_${i+1}_${a+1}${nt[l].extension}`;c.text=`
74
+ `,bn=class{async*runAsync(e,t){if(!t.partial)for await(let o of Ys(e,t))yield o}},bd=new bn;async function*Xs(n,e){let t=n.agent;if(!y(t))return;let o=t.codeExecutor;if(!o||!It(o))return;if(Ze(o)){o.processLlmRequest(e);return}if(!o.optimizeDataFile)return;let r=new et(new E(n.session.state));if(r.getErrorCount(n.invocationId)>=o.errorRetryAttempts)return;let i=Js(r,e),s=new Set(r.getProcessedFileNames()),a=i.filter(c=>!s.has(c.name));for(let c of a){let l=Qs(c);if(!l)return;let u={role:"model",parts:[{text:`Processing input file: \`${c.name}\``},Tn(l)]};e.contents.push(kr(u)),yield A({invocationId:n.invocationId,author:t.name,branch:n.branch,content:u});let f=Pr(n,r),d=await o.executeCode({invocationContext:n,codeExecutionInput:{code:l,inputFiles:[c],executionId:f}});r.updateCodeExecutionResult({invocationId:n.invocationId,code:l,resultStdout:d.stdout,resultStderr:d.stderr}),r.addProcessedFileNames([c.name]);let p=await _r(n,r,d);yield p,e.contents.push(kr(p.content))}}async function*Ys(n,e){let t=n.agent;if(!y(t))return;let o=t.codeExecutor;if(!o||!It(o)||!e||!e.content||Ze(o))return;let r=new et(new E(n.session.state));if(r.getErrorCount(n.invocationId)>=o.errorRetryAttempts)return;let i=e.content,s=Ir(i,o.codeBlockDelimiters);if(!s)return;yield A({invocationId:n.invocationId,author:t.name,branch:n.branch,content:i});let a=Pr(n,r),c=await o.executeCode({invocationContext:n,codeExecutionInput:{code:s,inputFiles:r.getInputFiles(),executionId:a}});r.updateCodeExecutionResult({invocationId:n.invocationId,code:s,resultStdout:c.stdout,resultStderr:c.stderr}),yield await _r(n,r,c),e.content=void 0}function Js(n,e){var r;let t=n.getInputFiles(),o=new Set(t.map(i=>i.name));for(let i=0;i<e.contents.length;i++){let s=e.contents[i];if(!(s.role!=="user"||!s.parts))for(let a=0;a<s.parts.length;a++){let c=s.parts[a],l=(r=c.inlineData)==null?void 0:r.mimeType;if(!l||!c.inlineData||!wt[l])continue;let u=`data_${i+1}_${a+1}${wt[l].extension}`;c.text=`
75
75
  Available file: \`${u}\`
76
- `;let f={name:u,content:Zn(c.inlineData.data),mimeType:l};o.has(u)||(n.addInputFiles([f]),t.push(f))}}return t}function Do(n,e){var r;let t=n.agent;if(!A(t)||!((r=t.codeExecutor)!=null&&r.stateful))return;let o=e.getExecutionId();return o||(o=n.session.id,e.setExecutionId(o)),o}async function Fo(n,e,t){if(!n.artifactService)throw new Error("Artifact service is not initialized.");let o={role:"model",parts:[Mo(t)]},r=U({stateDelta:e.getStateDelta()});t.stderr?e.incrementErrorCount(n.invocationId):e.resetErrorCount(n.invocationId);for(let i of t.outputFiles){let s=await n.artifactService.saveArtifact({appName:n.appName||"",userId:n.userId||"",sessionId:n.session.id,filename:i.name,artifact:{inlineData:{data:i.content,mimeType:i.mimeType}}});r.artifactDelta[i.name]=s}return E({invocationId:n.invocationId,author:n.agent.name,branch:n.branch,content:o,actions:r})}function Oi(n){function e(r){let[i]=r.split("."),s=i.replace(/[^a-zA-Z0-9_]/g,"_");return/^\d/.test(s)&&(s="_"+s),s}if(!nt[n.mimeType])return;let t=e(n.name),o=nt[n.mimeType].loaderCodeTemplate.replace("{filename}",n.name);return`
77
- ${Pi}
76
+ `;let f={name:u,content:No(c.inlineData.data),mimeType:l};o.has(u)||(n.addInputFiles([f]),t.push(f))}}return t}function Pr(n,e){var r;let t=n.agent;if(!y(t)||!((r=t.codeExecutor)!=null&&r.stateful))return;let o=e.getExecutionId();return o||(o=n.session.id,e.setExecutionId(o)),o}async function _r(n,e,t){if(!n.artifactService)throw new Error("Artifact service is not initialized.");let o={role:"model",parts:[wr(t)]},r=F({stateDelta:e.getStateDelta()});t.stderr?e.incrementErrorCount(n.invocationId):e.resetErrorCount(n.invocationId);for(let i of t.outputFiles){let s=await n.artifactService.saveArtifact({appName:n.appName||"",userId:n.userId||"",sessionId:n.session.id,filename:i.name,artifact:{inlineData:{data:i.content,mimeType:i.mimeType}}});r.artifactDelta[i.name]=s}return A({invocationId:n.invocationId,author:n.agent.name,branch:n.branch,content:o,actions:r})}function Qs(n){function e(r){let[i]=r.split("."),s=i.replace(/[^a-zA-Z0-9_]/g,"_");return/^\d/.test(s)&&(s="_"+s),s}if(!wt[n.mimeType])return;let t=e(n.name),o=wt[n.mimeType].loaderCodeTemplate.replace("{filename}",n.name);return`
77
+ ${Ks}
78
78
 
79
79
  # Load the dataframe.
80
80
  ${t} = ${o}
81
81
 
82
82
  # Use \`explore_df\` to guide my analysis.
83
83
  explore_df(${t})
84
- `}var $o=new zt;import{cloneDeep as Mi}from"lodash-es";function Wt(n,e,t){var s,a,c;let o=[];for(let l of n)!((s=l.content)!=null&&s.role)||((c=(a=l.content.parts)==null?void 0:a[0])==null?void 0:c.text)===""||t&&l.branch&&!t.startsWith(l.branch)||Ni(l)||Bi(l)||o.push(Uo(e,l)?Di(l):l);let r=Fi(o);r=$i(r);let i=[];for(let l of r){let u=Mi(l.content);ao(u),i.push(u)}return i}function qo(n,e,t){for(let o=n.length-1;o>=0;o--){let r=n[o];if(r.author==="user"||Uo(e,r))return Wt(n.slice(o),e,t)}return[]}function Ni(n){var e,t,o;if(!((e=n.content)!=null&&e.parts))return!1;for(let r of n.content.parts)if(((t=r.functionCall)==null?void 0:t.name)===Ye||((o=r.functionResponse)==null?void 0:o.name)===Ye)return!0;return!1}function Bi(n){var e,t,o;if(!((e=n.content)!=null&&e.parts))return!1;for(let r of n.content.parts)if(((t=r.functionCall)==null?void 0:t.name)===ye||((o=r.functionResponse)==null?void 0:o.name)===ye)return!0;return!1}function Uo(n,e){return!!n&&e.author!==n&&e.author!=="user"}function Di(n){var t,o,r,i,s,a;if(!((o=(t=n.content)==null?void 0:t.parts)!=null&&o.length))return n;let e={role:"user",parts:[{text:"For context:"}]};for(let c of n.content.parts)if(c.text&&!c.thought)(r=e.parts)==null||r.push({text:`[${n.author}] said: ${c.text}`});else if(c.functionCall){let l=Go(c.functionCall.args);(i=e.parts)==null||i.push({text:`[${n.author}] called tool \`${c.functionCall.name}\` with parameters: ${l}`})}else if(c.functionResponse){let l=Go(c.functionResponse.response);(s=e.parts)==null||s.push({text:`[${n.author}] tool \`${c.functionResponse.name}\` returned result: ${l}`})}else(a=e.parts)==null||a.push(c);return E({invocationId:n.invocationId,author:"user",content:e,branch:n.branch,timestamp:n.timestamp})}function Vo(n){var r;if(n.length===0)throw new Error("Cannot merge an empty list of events.");let e=E(n[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 o={};for(let i=0;i<t.length;i++){let s=t[i];s.functionResponse&&s.functionResponse.id&&(o[s.functionResponse.id]=i)}for(let i of n.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 o?t[o[a]]=s:(t.push(s),o[a]=t.length-1)}else t.push(s)}return e}function Fi(n){if(n.length===0)return n;let e=n[n.length-1],t=B(e);if(!(t!=null&&t.length))return n;let o=new Set(t.filter(c=>!!c.id).map(c=>c.id)),r=n.at(-2);if(r){let c=R(r);if(c){for(let l of c)if(l.id&&o.has(l.id))return n}}let i=-1;for(let c=n.length-2;c>=0;c--){let l=n[c],u=R(l);if(u!=null&&u.length){for(let f of u)if(f.id&&o.has(f.id)){i=c;let p=new Set(u.map(g=>g.id).filter(g=>!!g));if(!Array.from(o).every(g=>p.has(g)))throw new Error(`Last response event should only contain the responses for the function calls in the same function call event. Function call ids found : ${Array.from(p).join(", ")}, function response ids provided: ${Array.from(o).join(", ")}`);o=p;break}}}if(i===-1)throw new Error(`No function call event found for function responses ids: ${Array.from(o).join(", ")}`);let s=[];for(let c=i+1;c<n.length-1;c++){let l=n[c],u=B(l);u&&u.some(f=>f.id&&o.has(f.id))&&s.push(l)}s.push(n[n.length-1]);let a=n.slice(0,i+1);return a.push(Vo(s)),a}function $i(n){let e=new Map;for(let o=0;o<n.length;o++){let r=n[o],i=B(r);if(i!=null&&i.length)for(let s of i)s.id&&e.set(s.id,o)}let t=[];for(let o of n){if(B(o).length>0)continue;let r=R(o);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(o),i.size===0)continue;if(i.size===1){let[s]=[...i];t.push(n[s])}else{let a=Array.from(i).sort((c,l)=>c-l).map(c=>n[c]);t.push(Vo(a))}}else t.push(o)}return t}function Go(n){if(typeof n=="string")return n;try{return JSON.stringify(n)}catch{return String(n)}}var Ht=class{async*runAsync(e,t){let o=e.agent;!o||!A(o)||(o.includeContents==="default"?t.contents=Wt(e.session.events,o.name,e.branch):t.contents=qo(e.session.events,o.name,e.branch))}},jo=new Ht;var Xt=class extends _{async*runAsync(e,t){let o=e.agent,r=[`You are an agent. Your internal name is "${o.name}".`];o.description&&r.push(`The description about you is "${o.description}"`),le(t,r)}},zo=new Xt;async function Yt(n,e){let t=e.invocationContext;async function o(c){let l=c[0].replace(/^\{+/,"").replace(/\}+$/,"").trim(),u=l.endsWith("?");if(u&&(l=l.slice(0,-1)),l.startsWith("artifact.")){let f=l.substring(9);if(t.artifactService===void 0)throw new Error("Artifact service is not initialized.");let p=await t.artifactService.loadArtifact({appName:t.session.appName,userId:t.session.userId,sessionId:t.session.id,filename:f});if(!p)throw new Error(`Artifact ${f} not found.`);return String(p)}if(!Ui(l))return c[0];if(l in t.session.state)return String(t.session.state[l]);if(u)return"";throw new Error(`Context variable not found: \`${l}\`.`)}let r=/\{+[^{}]*}+/g,i=[],s=0,a=n.matchAll(r);for(let c of a){i.push(n.slice(s,c.index));let l=await o(c);i.push(l),s=c.index+c[0].length}return i.push(n.slice(s)),i.join("")}var Gi=/^[a-zA-Z_][a-zA-Z0-9_]*$/;function Ko(n){return n===""||n===void 0?!1:Gi.test(n)}var qi=[v.APP_PREFIX,v.USER_PREFIX,v.TEMP_PREFIX];function Ui(n){let e=n.split(":");return e.length===0||e.length>2?!1:e.length===1?Ko(n):qi.includes(e[0]+":")?Ko(e[1]):!1}var Jt=class extends _{async*runAsync(e,t){let o=e.agent;if(!A(o)||!A(o.rootAgent))return;let r=o.rootAgent;if(A(r)&&r.globalInstruction){let{instruction:i,requireStateInjection:s}=await r.canonicalGlobalInstruction(new P(e)),a=i;s&&(a=await Yt(i,new P(e))),le(t,[a])}if(o.instruction){let{instruction:i,requireStateInjection:s}=await o.canonicalInstruction(new P(e)),a=i;s&&(a=await Yt(i,new P(e))),le(t,[a])}}},Wo=new Jt;var Qt=class extends _{async*runAsync(e){let t=e.agent;if(!A(t))return;let o=e.session.events;if(!o||o.length===0)return;let r={},i=-1;for(let s=o.length-1;s>=0;s--){let a=o[s];if(a.author!=="user")continue;let c=B(a);if(!c)continue;let l=!1;for(let u of c){if(u.name!==ye)continue;l=!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 se({hint:u.response.hint,payload:u.response.payload,confirmed:u.response.confirmed})),u.id&&f&&(r[u.id]=f)}if(l){i=s;break}}if(Object.keys(r).length!==0)for(let s=i-1;s>=0;s--){let a=o[s],c=R(a);if(!c)continue;let l={},u={};for(let g of c){if(!g.id||!(g.id in r))continue;let C=g.args;if(!C||!("originalFunctionCall"in C))continue;let h=C.originalFunctionCall;h.id&&(l[h.id]=r[g.id],u[h.id]=h)}if(Object.keys(l).length===0)continue;for(let g=o.length-1;g>i;g--){let C=o[g],h=B(C);if(h){for(let T of h)T.id&&T.id in l&&(delete l[T.id],delete u[T.id]);if(Object.keys(l).length===0)break}}if(Object.keys(l).length===0)continue;let f=await t.canonicalTools(new P(e)),p=Object.fromEntries(f.map(g=>[g.name,g])),d=await Je({invocationContext:e,functionCalls:Object.values(u),toolsDict:p,beforeToolCallbacks:t.canonicalBeforeToolCallbacks,afterToolCallbacks:t.canonicalAfterToolCallbacks,filters:new Set(Object.keys(l)),toolConfirmationDict:l});d&&(yield d);return}}},Ho=new Qt;var Zt=(o=>(o.NONE="none",o.SSE="sse",o.BIDI="bidi",o))(Zt||{});function Xo(n={}){return{saveInputBlobsAsArtifacts:!1,supportCfc:!1,enableAffectiveDialog:!1,streamingMode:"none",maxLlmCalls:Vi(n.maxLlmCalls||500),pauseOnToolCalls:!1,...n}}function Vi(n){if(n>Number.MAX_SAFE_INTEGER)throw new Error(`maxLlmCalls should be less than ${Number.MAX_SAFE_INTEGER}.`);return n<=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."),n}var Yo="adk_agent_name";async function Jo(n,e){return kt(n)?[n]:await n.getTools(e)}var en=Symbol.for("google.adk.llmAgent");function A(n){return typeof n=="object"&&n!==null&&en in n&&n[en]===!0}var Qo,Zo,tn=class n extends(Zo=G,Qo=en,Zo){constructor(t){var r,i,s,a,c,l,u,f,p;super(t);this[Qo]=!0;if(this.model=t.model,this.instruction=(r=t.instruction)!=null?r:"",this.globalInstruction=(i=t.globalInstruction)!=null?i:"",this.tools=(s=t.tools)!=null?s:[],this.generateContentConfig=t.generateContentConfig,this.disallowTransferToParent=(a=t.disallowTransferToParent)!=null?a:!1,this.disallowTransferToPeers=(c=t.disallowTransferToPeers)!=null?c:!1,this.includeContents=(l=t.includeContents)!=null?l:"default",this.inputSchema=ce(t.inputSchema)?Ee(t.inputSchema):t.inputSchema,this.outputSchema=ce(t.outputSchema)?Ee(t.outputSchema):t.outputSchema,this.outputKey=t.outputKey,this.beforeModelCallback=t.beforeModelCallback,this.afterModelCallback=t.afterModelCallback,this.beforeToolCallback=t.beforeToolCallback,this.afterToolCallback=t.afterToolCallback,this.codeExecutor=t.codeExecutor,this.requestProcessors=(u=t.requestProcessors)!=null?u:[bo,zo,Wo,Ho,jo,$o],this.responseProcessors=(f=t.responseProcessors)!=null?f:[],this.disallowTransferToParent&&this.disallowTransferToPeers&&!((p=this.subAgents)!=null&&p.length)||this.requestProcessors.push(Ro),t.generateContentConfig){if(t.generateContentConfig.tools)throw new Error("All tools must be set via LlmAgent.tools.");if(t.generateContentConfig.systemInstruction)throw new Error("System instruction must be set via LlmAgent.instruction.");if(t.generateContentConfig.responseSchema)throw new Error("Response schema must be set via LlmAgent.output_schema.")}else this.generateContentConfig={};this.outputSchema&&(!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)}get canonicalModel(){if(wt(this.model))return this.model;if(typeof this.model=="string"&&this.model)return ae.newLlm(this.model);let t=this.parentAgent;for(;t;){if(A(t))return t.canonicalModel;t=t.parentAgent}throw new Error(`No model found for ${this.name}.`)}async canonicalInstruction(t){return typeof this.instruction=="string"?{instruction:this.instruction,requireStateInjection:!0}:{instruction:await this.instruction(t),requireStateInjection:!1}}async canonicalGlobalInstruction(t){return typeof this.globalInstruction=="string"?{instruction:this.globalInstruction,requireStateInjection:!0}:{instruction:await this.globalInstruction(t),requireStateInjection:!1}}async canonicalTools(t){let o=[];for(let r of this.tools){let i=await Jo(r,t);o.push(...i)}return o}static normalizeCallbackArray(t){return t?Array.isArray(t)?t:[t]:[]}get canonicalBeforeModelCallbacks(){return n.normalizeCallbackArray(this.beforeModelCallback)}get canonicalAfterModelCallbacks(){return n.normalizeCallbackArray(this.afterModelCallback)}get canonicalBeforeToolCallbacks(){return n.normalizeCallbackArray(this.beforeToolCallback)}get canonicalAfterToolCallbacks(){return n.normalizeCallbackArray(this.afterToolCallback)}maybeSaveOutputToState(t){var i,s;if(t.author!==this.name){m.debug(`Skipping output save for agent ${this.name}: event authored by ${t.author}`);return}if(!this.outputKey){m.debug(`Skipping output save for agent ${this.name}: outputKey is not set`);return}if(!Q(t)){m.debug(`Skipping output save for agent ${this.name}: event is not a final response`);return}if(!((s=(i=t.content)==null?void 0:i.parts)!=null&&s.length)){m.debug(`Skipping output save for agent ${this.name}: event content is empty`);return}let o=t.content.parts.map(a=>a.text?a.text:"").join(""),r=o;if(this.outputSchema){if(!o.trim())return;try{r=JSON.parse(o)}catch(a){m.error(`Error parsing output for agent ${this.name}`,a)}}t.actions.stateDelta[this.outputKey]=r}async*runAsyncImpl(t){for(;;){let o;for await(let r of this.runOneStepAsync(t))o=r,this.maybeSaveOutputToState(r),yield r;if(!o||Q(o))break;if(o.partial){m.warn("The last event is partial, which is not expected.");break}}}async*runLiveImpl(t){for await(let o of this.runLiveFlow(t))this.maybeSaveOutputToState(o),yield o;t.endInvocation}async*runLiveFlow(t){throw await Promise.resolve(),new Error("LlmAgent.runLiveFlow not implemented")}async*runOneStepAsync(t){let o={contents:[],toolsDict:{},liveConnectConfig:{}};for(let a of this.requestProcessors)for await(let c of a.runAsync(t,o))yield c;for(let a of this.tools){let c=new L({invocationContext:t}),l=await Jo(a,new P(t));for(let u of l)await u.processLlmRequest({toolContext:c,llmRequest:o})}if(t.endInvocation)return;let r=E({invocationId:t.invocationId,author:this.name,branch:t.branch}),i=V.startSpan("call_llm"),s=zi.setSpan(ji.active(),i);yield*ie(s,this,async function*(){let a=async function*(){for await(let c of this.callLlmAsync(t,o,r))for await(let l of this.postprocess(t,o,c,r))r.id=gt(),r.timestamp=new Date().getTime(),yield l};yield*this.runAndHandleError(a.call(this),t,o,r)}),i.end()}async*postprocess(t,o,r,i){var f,p;for(let d of this.responseProcessors)for await(let g of d.runAsync(t,r))yield g;if(!r.content&&!r.errorCode&&!r.interrupted)return;let s=E({...i,...r});if(s.content){let d=R(s);d!=null&&d.length&&(so(s),s.longRunningToolIds=Array.from(co(d,o.toolsDict)))}if(yield s,!((f=R(s))!=null&&f.length))return;if((p=t.runConfig)!=null&&p.pauseOnToolCalls){t.endInvocation=!0;return}let a=await lo({invocationContext:t,functionCallEvent:s,toolsDict:o.toolsDict,beforeToolCallbacks:this.canonicalBeforeToolCallbacks,afterToolCallbacks:this.canonicalAfterToolCallbacks});if(!a)return;let c=Tt(t,a);c&&(yield c);let l=St({invocationContext:t,functionCallEvent:s,functionResponseEvent:a});if(l){yield l,t.endInvocation=!0;return}yield a;let u=a.actions.transferToAgent;if(u){let d=this.getAgentByName(t,u);for await(let g of d.runAsync(t))yield g}}getAgentByName(t,o){let i=t.agent.rootAgent.findAgent(o);if(!i)throw new Error(`Agent ${o} not found in the agent tree.`);return i}async*callLlmAsync(t,o,r){var a,c,l,u,f;let i=await this.handleBeforeModelCallback(t,o,r);if(i){yield i;return}(a=o.config)!=null||(o.config={}),(l=(c=o.config).labels)!=null||(c.labels={}),o.config.labels[Yo]||(o.config.labels[Yo]=this.name);let s=this.canonicalModel;if((u=t.runConfig)!=null&&u.supportCfc)throw new Error("CFC is not yet supported in callLlmAsync");{t.incrementLlmCallCount();let p=s.generateContentAsync(o,((f=t.runConfig)==null?void 0:f.streamingMode)==="sse");for await(let d of p){Jn({invocationContext:t,eventId:r.id,llmRequest:o,llmResponse:d});let g=await this.handleAfterModelCallback(t,d,r);yield g!=null?g:d}}}async handleBeforeModelCallback(t,o,r){let i=new L({invocationContext:t,eventActions:r.actions}),s=await t.pluginManager.runBeforeModelCallback({callbackContext:i,llmRequest:o});if(s)return s;for(let a of this.canonicalBeforeModelCallbacks){let c=await a({context:i,request:o});if(c)return c}}async handleAfterModelCallback(t,o,r){let i=new L({invocationContext:t,eventActions:r.actions}),s=await t.pluginManager.runAfterModelCallback({callbackContext:i,llmResponse:o});if(s)return s;for(let a of this.canonicalAfterModelCallbacks){let c=await a({context:i,response:o});if(c)return c}}async*runAndHandleError(t,o,r,i){try{for await(let s of t)yield s}catch(s){let a=new L({invocationContext:o,eventActions:i.actions});if(s instanceof Error){let c=await o.pluginManager.runOnModelErrorCallback({callbackContext:a,llmRequest:r,error:s});if(c)yield c;else{let l="UNKNOWN_ERROR",u=s.message;try{let f=JSON.parse(s.message);f!=null&&f.error&&(l=String(f.error.code||"UNKNOWN_ERROR"),u=f.error.message||u)}catch{}i.actions?yield E({invocationId:o.invocationId,author:this.name,errorCode:l,errorMessage:u}):yield{errorCode:l,errorMessage:u}}}else throw m.error("Unknown error during response generation",s),s}}};var nn=Symbol.for("google.adk.loopAgent");function Ki(n){return typeof n=="object"&&n!==null&&nn in n&&n[nn]===!0}var er,tr,on=class extends(tr=G,er=nn,tr){constructor(t){var o;super(t);this[er]=!0;this.maxIterations=(o=t.maxIterations)!=null?o:Number.MAX_SAFE_INTEGER}async*runAsyncImpl(t){let o=0;for(;o<this.maxIterations;){for(let r of this.subAgents){let i=!1;for await(let s of r.runAsync(t))yield s,s.actions.escalate&&(i=!0);if(i)return}o++}}async*runLiveImpl(t){throw new Error("This is not supported yet for LoopAgent.")}};var rn=Symbol.for("google.adk.parallelAgent");function Wi(n){return typeof n=="object"&&n!==null&&rn in n&&n[rn]===!0}var nr,or,sn=class extends(or=G,nr=rn,or){constructor(){super(...arguments);this[nr]=!0}async*runAsyncImpl(t){let o=this.subAgents.map(r=>r.runAsync(Hi(this,r,t)));for await(let r of Xi(o))yield r}async*runLiveImpl(t){throw new Error("This is not supported yet for ParallelAgent.")}};function Hi(n,e,t){let o=new K(t),r=`${n.name}.${e.name}`;return o.branch=o.branch?`${o.branch}.${r}`:r,o}async function*Xi(n){let e=new Map;for(let[t,o]of n.entries()){let r=o.next().then(i=>({result:i,index:t}));e.set(t,r)}for(;e.size>0;){let{result:t,index:o}=await Promise.race(e.values());if(t.done){e.delete(o);continue}yield t.value;let r=n[o].next().then(i=>({result:i,index:o}));e.set(o,r)}}var an="task_completed",cn=Symbol.for("google.adk.sequentialAgent");function Yi(n){return typeof n=="object"&&n!==null&&cn in n&&n[cn]===!0}var rr,ir,ln=class extends(ir=G,rr=cn,ir){constructor(){super(...arguments);this[rr]=!0}async*runAsyncImpl(t){for(let o of this.subAgents)for await(let r of o.runAsync(t))yield r}async*runLiveImpl(t){for(let o of this.subAgents)A(o)&&((await o.canonicalTools(new P(t))).some(s=>s.name===an)||(o.tools.push(new W({name:an,description:"Signals that the model has successfully completed the user's question or task.",execute:()=>"Task completion signaled."})),o.instruction+=`If you finished the user's request according to its description, call the ${an} 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 o of this.subAgents)for await(let r of o.runLive(t))yield r}};var sr=(i=>(i.API_KEY="apiKey",i.HTTP="http",i.OAUTH2="oauth2",i.OPEN_ID_CONNECT="openIdConnect",i.SERVICE_ACCOUNT="serviceAccount",i))(sr||{});import{isEmpty as $e}from"lodash-es";var ar=(u=>(u.THOUGHT="thought",u.CONTENT="content",u.TOOL_CALL="tool_call",u.TOOL_RESULT="tool_result",u.CALL_CODE="call_code",u.CODE_RESULT="code_result",u.ERROR="error",u.ACTIVITY="activity",u.TOOL_CONFIRMATION="tool_confirmation",u.FINISHED="finished",u))(ar||{});function Ji(n){var t,o;let e=[];if(n.errorCode)return e.push({type:"error",error:new Error(n.errorMessage||n.errorCode)}),e;for(let r of(o=(t=n.content)==null?void 0:t.parts)!=null?o:[])r.functionCall&&!$e(r.functionCall)?e.push({type:"tool_call",call:r.functionCall}):r.functionResponse&&!$e(r.functionResponse)?e.push({type:"tool_result",result:r.functionResponse}):r.executableCode&&!$e(r.executableCode)?e.push({type:"call_code",code:r.executableCode}):r.codeExecutionResult&&!$e(r.codeExecutionResult)?e.push({type:"code_result",result:r.codeExecutionResult}):r.text&&(r.thought?e.push({type:"thought",content:r.text}):e.push({type:"content",content:r.text}));return n.actions.requestedToolConfirmations&&!$e(n.actions.requestedToolConfirmations)&&e.push({type:"tool_confirmation",confirmations:n.actions.requestedToolConfirmations}),Q(n)&&e.push({type:"finished",output:void 0}),e}var un=Symbol.for("google.adk.baseExampleProvider");function Qi(n){return typeof n=="object"&&n!==null&&un in n&&n[un]===!0}var cr;cr=un;var fn=class{constructor(){this[cr]=!0}};var de=class{constructor(){this.memories=[];this.sessionEvents={}}async addSessionToMemory(e){let t=lr(e.appName,e.userId);this.sessionEvents[t]||(this.sessionEvents[t]={}),this.sessionEvents[t][e.id]=e.events.filter(o=>{var r,i,s;return((s=(i=(r=o.content)==null?void 0:r.parts)==null?void 0:i.length)!=null?s:0)>0})}async searchMemory(e){var i,s;let t=lr(e.appName,e.userId);if(!this.sessionEvents[t])return Promise.resolve({memories:[]});let o=e.query.toLowerCase().split(/\s+/),r={memories:[]};for(let a of Object.values(this.sessionEvents[t]))for(let c of a){if(!((s=(i=c.content)==null?void 0:i.parts)!=null&&s.length))continue;let l=c.content.parts.map(p=>p.text).filter(p=>!!p).join(" "),u=Zi(l);if(!u.size)continue;o.some(p=>u.has(p))&&r.memories.push({content:c.content,author:c.author,timestamp:es(c.timestamp)})}return r}};function lr(n,e){return`${n}/${e}`}function Zi(n){return new Set([...n.matchAll(/[A-Za-z]+/)].map(e=>e[0].toLowerCase()))}function es(n){return new Date(n).toISOString()}var me=class{constructor(e){this.name=e}async onUserMessageCallback(e){}async beforeRunCallback(e){}async onEventCallback(e){}async afterRunCallback(e){}async beforeAgentCallback(e){}async afterAgentCallback(e){}async beforeModelCallback(e){}async afterModelCallback(e){}async onModelErrorCallback(e){}async beforeToolCallback(e){}async afterToolCallback(e){}async onToolErrorCallback(e){}};var pn=class extends me{constructor(e="logging_plugin"){super(e)}async onUserMessageCallback({invocationContext:e,userMessage:t}){var o;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: ${(o=e.agent.name)!=null?o:"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({event:e}){this.log("\u{1F4E2} EVENT YIELDED"),this.log(` Event ID: ${e.id}`),this.log(` Author: ${e.author}`),this.log(` Content: ${this.formatContent(e.content)}`),this.log(` Final Response: ${Q(e)}`);let t=R(e);if(t.length>0){let r=t.map(i=>i.name);this.log(` Function Calls: ${r}`)}let o=B(e);if(o.length>0){let r=o.map(i=>i.name);this.log(` Function Responses: ${r}`)}e.longRunningToolIds&&e.longRunningToolIds.length>0&&this.log(` Long Running Tools: ${[...e.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({callbackContext:e}){this.log("\u{1F916} AGENT STARTING"),this.log(` Agent Name: ${e.agentName}`),this.log(` Invocation ID: ${e.invocationId}`),e.invocationContext.branch&&this.log(` Branch: ${e.invocationContext.branch}`)}async afterAgentCallback({callbackContext:e}){this.log("\u{1F916} AGENT COMPLETED"),this.log(` Agent Name: ${e.agentName}`),this.log(` Invocation ID: ${e.invocationId}`)}async beforeModelCallback({callbackContext:e,llmRequest:t}){var o;if(this.log("\u{1F9E0} LLM REQUEST"),this.log(` Model: ${(o=t.model)!=null?o:"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:o}){this.log("\u{1F527} TOOL STARTING"),this.log(` Tool Name: ${e.name}`),this.log(` Agent: ${o.agentName}`),this.log(` Function Call ID: ${o.functionCallId}`),this.log(` Arguments: ${this.formatArgs(t)}`)}async afterToolCallback({tool:e,toolContext:t,result:o}){this.log("\u{1F527} TOOL COMPLETED"),this.log(` Tool Name: ${e.name}`),this.log(` Agent: ${t.agentName}`),this.log(` Function Call ID: ${t.functionCallId}`),this.log(` Result: ${this.formatArgs(o)}`)}async onModelErrorCallback({callbackContext:e,error:t}){this.log("\u{1F9E0} LLM ERROR"),this.log(` Agent: ${e.agentName}`),this.log(` Error: ${t}`)}async onToolErrorCallback({tool:e,toolArgs:t,toolContext:o,error:r}){this.log("\u{1F527} TOOL ERROR"),this.log(` Tool Name: ${e.name}`),this.log(` Agent: ${o.agentName}`),this.log(` Function Call ID: ${o.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 o=[];for(let r of e.parts)if(r.text){let i=r.text.trim();i.length>t&&(i=i.substring(0,t)+"..."),o.push(`text: '${i}'`)}else r.functionCall?o.push(`function_call: ${r.functionCall.name}`):r.functionResponse?o.push(`function_response: ${r.functionResponse.name}`):r.codeExecutionResult?o.push("code_execution_result"):o.push("other_part");return o.join(" | ")}formatArgs(e,t=300){if(!e)return"{}";let o=JSON.stringify(e);return o.length>t&&(o=o.substring(0,t)+"...}"),o}};var Ge=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,o){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 '${o}', exiting early.`),i}catch(i){let s=`Error in plugin '${r.name}' during '${o}' callback: ${i}`;throw m.error(s),new Error(s)}}async runOnUserMessageCallback({userMessage:e,invocationContext:t}){return await this.runCallbacks(this.plugins,o=>o.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,o=>o.onEventCallback({invocationContext:e,event:t}),"onEventCallback")}async runBeforeAgentCallback({agent:e,callbackContext:t}){return await this.runCallbacks(this.plugins,o=>o.beforeAgentCallback({agent:e,callbackContext:t}),"beforeAgentCallback")}async runAfterAgentCallback({agent:e,callbackContext:t}){return await this.runCallbacks(this.plugins,o=>o.afterAgentCallback({agent:e,callbackContext:t}),"afterAgentCallback")}async runBeforeToolCallback({tool:e,toolArgs:t,toolContext:o}){return await this.runCallbacks(this.plugins,r=>r.beforeToolCallback({tool:e,toolArgs:t,toolContext:o}),"beforeToolCallback")}async runAfterToolCallback({tool:e,toolArgs:t,toolContext:o,result:r}){return await this.runCallbacks(this.plugins,i=>i.afterToolCallback({tool:e,toolArgs:t,toolContext:o,result:r}),"afterToolCallback")}async runOnModelErrorCallback({callbackContext:e,llmRequest:t,error:o}){return await this.runCallbacks(this.plugins,r=>r.onModelErrorCallback({callbackContext:e,llmRequest:t,error:o}),"onModelErrorCallback")}async runBeforeModelCallback({callbackContext:e,llmRequest:t}){return await this.runCallbacks(this.plugins,o=>o.beforeModelCallback({callbackContext:e,llmRequest:t}),"beforeModelCallback")}async runAfterModelCallback({callbackContext:e,llmResponse:t}){return await this.runCallbacks(this.plugins,o=>o.afterModelCallback({callbackContext:e,llmResponse:t}),"afterModelCallback")}async runOnToolErrorCallback({tool:e,toolArgs:t,toolContext:o,error:r}){return await this.runCallbacks(this.plugins,i=>i.onToolErrorCallback({tool:e,toolArgs:t,toolContext:o,error:r}),"onToolErrorCallback")}};var fr="adk_request_confirmation",dn="orcas_tool_call_security_check_states",ur="This tool call needs external confirmation before completion.",pr=(o=>(o.DENY="DENY",o.CONFIRM="CONFIRM",o.ALLOW="ALLOW",o))(pr||{}),ot=class{async evaluate(){return Promise.resolve({outcome:"ALLOW",reason:"For prototyping purpose, all tool calls are allowed."})}},mn=class extends me{constructor(e){var t;super("security_plugin"),this.policyEngine=(t=e==null?void 0:e.policyEngine)!=null?t:new ot}async beforeToolCallback({tool:e,toolArgs:t,toolContext:o}){let r=this.getToolCallCheckState(o);if(!r)return this.checkToolCallPolicy({tool:e,toolArgs:t,toolContext:o});if(r==="CONFIRM"){if(!o.toolConfirmation)return{partial:ur};if(this.setToolCallCheckState(o,o.toolConfirmation),!o.toolConfirmation.confirmed)return{error:"Tool call rejected from confirmation flow."};o.toolConfirmation=void 0}}getToolCallCheckState(e){var r;let{functionCallId:t}=e;return t?((r=e.state.get(dn))!=null?r:{})[t]:void 0}setToolCallCheckState(e,t){var i;let{functionCallId:o}=e;if(!o)return;let r=(i=e.state.get(dn))!=null?i:{};r[o]=t,e.state.set(dn,r)}async checkToolCallPolicy({tool:e,toolArgs:t,toolContext:o}){let r=await this.policyEngine.evaluate({tool:e,toolArgs:t});switch(this.setToolCallCheckState(o,r.outcome),r.outcome){case"DENY":return{error:`This tool call is rejected by policy engine. Reason: ${r.reason}`};case"CONFIRM":return o.requestConfirmation({hint:`Policy engine requires confirmation calling tool: ${e.name}. Reason: ${r.reason}`}),{partial:ur};case"ALLOW":return;default:return}}};function ts(n){if(!n.content||!n.content.parts)return[];let e=[];for(let t of n.content.parts)t&&t.functionCall&&t.functionCall.name===fr&&e.push(t.functionCall);return e}import{cloneDeep as dr}from"lodash-es";import{cloneDeep as ns}from"lodash-es";var ge=class{async getOrCreateSession(e){if(!e.sessionId)return this.createSession(e);let t=await this.getSession({appName:e.appName,userId:e.userId,sessionId:e.sessionId});return t||this.createSession(e)}async appendEvent({session:e,event:t}){return t.partial||(t=gn(t),this.updateSessionState({session:e,event:t}),e.events.push(t)),t}updateSessionState({session:e,event:t}){if(!(!t.actions||!t.actions.stateDelta))for(let[o,r]of Object.entries(t.actions.stateDelta))o.startsWith(v.TEMP_PREFIX)||(e.state[o]=r)}};function gn(n){if(!n.actions||!n.actions.stateDelta)return n;let e=n.actions.stateDelta,t={};for(let[o,r]of Object.entries(e))o.startsWith(v.TEMP_PREFIX)||(t[o]=r);return n.actions.stateDelta=t,n}function H(n={},e={},t={}){let o=ns(t);for(let[r,i]of Object.entries(n))o[v.APP_PREFIX+r]=i;for(let[r,i]of Object.entries(e))o[v.USER_PREFIX+r]=i;return o}function te(n){return{id:n.id,appName:n.appName,userId:n.userId||"",state:n.state||{},events:n.events||[],lastUpdateTime:n.lastUpdateTime||0}}function mr(n){return n==="memory://"}var X=class extends ge{constructor(){super(...arguments);this.sessions={};this.userState={};this.appState={}}async createSession({appName:t,userId:o,state:r,sessionId:i}){var c;let s=te({id:i||Z(),appName:t,userId:o,state:r,events:[],lastUpdateTime:Date.now()});this.sessions[t]||(this.sessions[t]={}),this.sessions[t][o]||(this.sessions[t][o]={}),this.sessions[t][o][s.id]=s;let a=dr(s);return a.state=H(this.appState[t],(c=this.userState[t])==null?void 0:c[o],a.state),a}async getSession({appName:t,userId:o,sessionId:r,config:i}){var c;if(!this.sessions[t]||!this.sessions[t][o]||!this.sessions[t][o][r])return Promise.resolve(void 0);let s=this.sessions[t][o][r],a=dr(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 a.state=H(this.appState[t],(c=this.userState[t])==null?void 0:c[o],a.state),a}listSessions({appName:t,userId:o}){if(!this.sessions[t]||!this.sessions[t][o])return Promise.resolve({sessions:[]});let r=[];for(let i of Object.values(this.sessions[t][o]))r.push(te({id:i.id,appName:i.appName,userId:i.userId,state:{},events:[],lastUpdateTime:i.lastUpdateTime}));return Promise.resolve({sessions:r})}async deleteSession({appName:t,userId:o,sessionId:r}){await this.getSession({appName:t,userId:o,sessionId:r})&&delete this.sessions[t][o][r]}async appendEvent({session:t,event:o}){await super.appendEvent({session:t,event:o}),t.lastUpdateTime=o.timestamp;let r=t.appName,i=t.userId,s=t.id,a=l=>{m.warn(`Failed to append event to session ${s}: ${l}`)};if(!this.sessions[r])return a(`appName ${r} not in sessions`),o;if(!this.sessions[r][i])return a(`userId ${i} not in sessions[appName]`),o;if(!this.sessions[r][i][s])return a(`sessionId ${s} not in sessions[appName][userId]`),o;if(o.actions&&o.actions.stateDelta)for(let l of Object.keys(o.actions.stateDelta))l.startsWith(v.APP_PREFIX)&&(this.appState[r]=this.appState[r]||{},this.appState[r][l.replace(v.APP_PREFIX,"")]=o.actions.stateDelta[l]),l.startsWith(v.USER_PREFIX)&&(this.userState[r]=this.userState[r]||{},this.userState[r][i]=this.userState[r][i]||{},this.userState[r][i][l.replace(v.USER_PREFIX,"")]=o.actions.stateDelta[l]);let c=this.sessions[r][i][s];return await super.appendEvent({session:c,event:o}),c.lastUpdateTime=o.timestamp,o}};import{createPartFromText as os}from"@google/genai";import{context as rs,trace as is}from"@opentelemetry/api";var he=class{constructor(e){var t;this.appName=e.appName,this.agent=e.agent,this.pluginManager=new Ge((t=e.plugins)!=null?t:[]),this.artifactService=e.artifactService,this.sessionService=e.sessionService,this.memoryService=e.memoryService,this.credentialService=e.credentialService}async*runEphemeral(e){let o=(await this.sessionService.createSession({appName:this.appName,userId:e.userId})).id;try{yield*this.runAsync({userId:e.userId,sessionId:o,newMessage:e.newMessage,stateDelta:e.stateDelta,runConfig:e.runConfig})}finally{await this.sessionService.deleteSession({appName:this.appName,userId:e.userId,sessionId:o})}}async*runAsync(e){let{userId:t,sessionId:o,stateDelta:r}=e,i=Xo(e.runConfig),s=e.newMessage,a=V.startSpan("invocation"),c=is.setSpan(rs.active(),a);try{yield*ie(c,this,async function*(){var p;let l=await this.sessionService.getSession({appName:this.appName,userId:t,sessionId:o});if(!l)throw this.appName?new Error(`Session not found: ${o}`):new Error("Session lookup failed: appName must be provided in runner constructor");if(i.supportCfc&&A(this.agent)){let d=this.agent.canonicalModel.model;if(!Ne(d))throw new Error(`CFC is not supported for model: ${d} in agent: ${this.agent.name}`);De(this.agent.codeExecutor)||(this.agent.codeExecutor=new Be)}let u=new K({artifactService:this.artifactService,sessionService:this.sessionService,memoryService:this.memoryService,credentialService:this.credentialService,invocationId:eo(),agent:this.agent,session:l,userContent:s,runConfig:i,pluginManager:this.pluginManager}),f=await this.pluginManager.runOnUserMessageCallback({userMessage:s,invocationContext:u});if(f&&(s=f),s){if(!((p=s.parts)!=null&&p.length))throw new Error("No parts in the newMessage.");i.saveInputBlobsAsArtifacts&&await this.saveArtifacts(u.invocationId,l.userId,l.id,s),await this.sessionService.appendEvent({session:l,event:E({invocationId:u.invocationId,author:"user",actions:r?U({stateDelta:r}):void 0,content:s})})}if(u.agent=this.determineAgentForResumption(l,this.agent),s){let d=await this.pluginManager.runBeforeRunCallback({invocationContext:u});if(d){let g=E({invocationId:u.invocationId,author:"model",content:d});await this.sessionService.appendEvent({session:l,event:g}),yield g}else{for await(let g of u.agent.runAsync(u)){g.partial||await this.sessionService.appendEvent({session:l,event:g});let C=await this.pluginManager.runOnEventCallback({invocationContext:u,event:g});C?yield C:yield g}await this.pluginManager.runAfterRunCallback({invocationContext:u})}}})}finally{a.end()}}async saveArtifacts(e,t,o,r){var i;if(!(!this.artifactService||!((i=r.parts)!=null&&i.length)))for(let s=0;s<r.parts.length;s++){let a=r.parts[s];if(!a.inlineData)continue;let c=`artifact_${e}_${s}`;await this.artifactService.saveArtifact({appName:this.appName,userId:t,sessionId:o,filename:c,artifact:a}),r.parts[s]=os(`Uploaded file: ${c}. It is saved into artifacts`)}}determineAgentForResumption(e,t){let o=ss(e.events);if(o&&o.author)return t.findAgent(o.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(!A(t)||t.disallowTransferToParent)return!1;t=t.parentAgent}return!0}};function ss(n){var o,r,i,s;if(!n.length)return null;let t=(s=(i=(r=(o=n[n.length-1].content)==null?void 0:o.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=n.length-2;a>=0;a--){let c=n[a],l=R(c);if(l){for(let u of l)if(u.id===t)return c}}return null}var hn=class extends he{constructor({agent:e,appName:t="InMemoryRunner",plugins:o=[]}){super({appName:t,agent:e,plugins:o,artifactService:new re,sessionService:new X,memoryService:new de})}};import{Type as it}from"@google/genai";var rt=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(){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)}listArtifactVersions(e){if(!this.toolContext.invocationContext.artifactService)throw new Error("Artifact service is not initialized.");return this.toolContext.invocationContext.artifactService.listArtifactVersions(e)}getArtifactVersion(e){if(!this.toolContext.invocationContext.artifactService)throw new Error("Artifact service is not initialized.");return this.toolContext.invocationContext.artifactService.getArtifactVersion(e)}};var vn=Symbol.for("google.adk.agentTool");function as(n){return typeof n=="object"&&n!==null&&vn in n&&n[vn]===!0}var gr,hr,Cn=class extends(hr=N,gr=vn,hr){constructor(t){super({name:t.agent.name,description:t.agent.description||""});this[gr]=!0;this.agent=t.agent,this.skipSummarization=t.skipSummarization||!1}_getDeclaration(){let t;if(A(this.agent)&&this.agent.inputSchema?t={name:this.name,description:this.description,parameters:this.agent.inputSchema}:t={name:this.name,description:this.description,parameters:{type:it.OBJECT,properties:{request:{type:it.STRING}},required:["request"]}},this.apiVariant!=="GEMINI_API"){let o=A(this.agent)&&this.agent.outputSchema;t.response=o?{type:it.OBJECT}:{type:it.STRING}}return t}async runAsync({args:t,toolContext:o}){var f,p;this.skipSummarization&&(o.actions.skipSummarization=!0);let i={role:"user",parts:[{text:A(this.agent)&&this.agent.inputSchema?JSON.stringify(t):t.request}]},s=new he({appName:this.agent.name,agent:this.agent,artifactService:new rt(o),sessionService:new X,memoryService:new de,credentialService:o.invocationContext.credentialService}),a=await s.sessionService.createSession({appName:this.agent.name,userId:"tmp_user",state:o.state.toRecord()}),c;for await(let d of s.runAsync({userId:a.userId,sessionId:a.id,newMessage:i}))d.actions.stateDelta&&o.state.update(d.actions.stateDelta),c=d;if(!((p=(f=c==null?void 0:c.content)==null?void 0:f.parts)!=null&&p.length))return"";let l=A(this.agent)&&this.agent.outputSchema,u=c.content.parts.map(d=>d.text).filter(d=>d).join(`
85
- `);return l?JSON.parse(u):u}};var yn=Symbol.for("google.adk.baseToolset");function cs(n){return typeof n=="object"&&n!==null&&yn in n&&n[yn]===!0}var vr;vr=yn;var qe=class{constructor(e,t){this.toolFilter=e;this.prefix=t;this[vr]=!0}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 st=class extends N{constructor(){super({name:"exit_loop",description:`Exits the loop.
84
+ `}var Lr=new wn;function H(n){return"isCompacted"in n&&n.isCompacted===!0}function Or(n={}){return{...A(n),isCompacted:n.isCompacted||!0,startTime:n.startTime,endTime:n.endTime,compactedContent:n.compactedContent}}import{createUserContent as Zs}from"@google/genai";import{cloneDeep as ea}from"lodash-es";function kn(n,e,t){var s,a,c;let o=[];for(let l of n){if(H(l)){o.push(sa(l));continue}!((s=l.content)!=null&&s.role)||((c=(a=l.content.parts)==null?void 0:a[0])==null?void 0:c.text)===""||t&&l.branch&&!t.startsWith(l.branch)||ta(l)||na(l)||o.push(Dr(e,l)?oa(l):l)}let r=ra(o);r=ia(r);let i=[];for(let l of r){let u=ea(l.content);fr(u),i.push(u)}return i}function Nr(n,e,t){for(let o=n.length-1;o>=0;o--){let r=n[o];if(r.author==="user"||Dr(e,r))return kn(n.slice(o),e,t)}return[]}function ta(n){var e,t,o;if(!((e=n.content)!=null&&e.parts))return!1;for(let r of n.content.parts)if(((t=r.functionCall)==null?void 0:t.name)===St||((o=r.functionResponse)==null?void 0:o.name)===St)return!0;return!1}function na(n){var e,t,o;if(!((e=n.content)!=null&&e.parts))return!1;for(let r of n.content.parts)if(((t=r.functionCall)==null?void 0:t.name)===ke||((o=r.functionResponse)==null?void 0:o.name)===ke)return!0;return!1}function Dr(n,e){return!!n&&e.author!==n&&e.author!=="user"}function oa(n){var t,o,r,i,s,a;if(!((o=(t=n.content)==null?void 0:t.parts)!=null&&o.length))return n;let e={role:"user",parts:[{text:"For context:"}]};for(let c of n.content.parts)if(c.text&&!c.thought)(r=e.parts)==null||r.push({text:`[${n.author}] said: ${c.text}`});else if(c.functionCall){let l=Mr(c.functionCall.args);(i=e.parts)==null||i.push({text:`[${n.author}] called tool \`${c.functionCall.name}\` with parameters: ${l}`})}else if(c.functionResponse){let l=Mr(c.functionResponse.response);(s=e.parts)==null||s.push({text:`[${n.author}] tool \`${c.functionResponse.name}\` returned result: ${l}`})}else(a=e.parts)==null||a.push(c);return A({invocationId:n.invocationId,author:"user",content:e,branch:n.branch,timestamp:n.timestamp})}function Br(n){var r;if(n.length===0)throw new Error("Cannot merge an empty list of events.");let e=A(n[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 o={};for(let i=0;i<t.length;i++){let s=t[i];s.functionResponse&&s.functionResponse.id&&(o[s.functionResponse.id]=i)}for(let i of n.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 o?t[o[a]]=s:(t.push(s),o[a]=t.length-1)}else t.push(s)}return e}function ra(n){if(n.length===0)return n;let e=n[n.length-1],t=V(e);if(!(t!=null&&t.length))return n;let o=new Set(t.filter(c=>!!c.id).map(c=>c.id)),r=n.at(-2);if(r){let c=I(r);if(c){for(let l of c)if(l.id&&o.has(l.id))return n}}let i=-1;for(let c=n.length-2;c>=0;c--){let l=n[c],u=I(l);if(u!=null&&u.length){for(let f of u)if(f.id&&o.has(f.id)){i=c;let d=new Set(u.map(m=>m.id).filter(m=>!!m));if(!Array.from(o).every(m=>d.has(m)))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(o).join(", ")}`);o=d;break}}}if(i===-1)throw new Error(`No function call event found for function responses ids: ${Array.from(o).join(", ")}`);let s=[];for(let c=i+1;c<n.length-1;c++){let l=n[c],u=V(l);u&&u.some(f=>f.id&&o.has(f.id))&&s.push(l)}s.push(n[n.length-1]);let a=n.slice(0,i+1);return a.push(Br(s)),a}function ia(n){let e=new Map;for(let o=0;o<n.length;o++){let r=n[o],i=V(r);if(i!=null&&i.length)for(let s of i)s.id&&e.set(s.id,o)}let t=[];for(let o of n){if(V(o).length>0)continue;let r=I(o);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(o),i.size===0)continue;if(i.size===1){let[s]=[...i];t.push(n[s])}else{let a=Array.from(i).sort((c,l)=>c-l).map(c=>n[c]);t.push(Br(a))}}else t.push(o)}return t}function Mr(n){if(typeof n=="string")return n;try{return JSON.stringify(n)}catch{return String(n)}}function sa(n){let e=Zs(`[Previous Context Summary]:
85
+ ${n.compactedContent}`);return A({invocationId:n.invocationId,author:"user",content:e,branch:n.branch,timestamp:n.timestamp})}var bt=class{async*runAsync(e,t){let o=e.agent;if(!o||!y(o))return;let r=e.session.events,i=r.filter(H),s=i.length>0?i.reduce((a,c)=>c.endTime>a.endTime?c:a):void 0;if(s){let a=r.filter(c=>!(c===s||H(c)||c.timestamp<=s.endTime));r=[s,...a]}o.includeContents==="default"?t.contents=kn(r,o.name,e.branch):t.contents=Nr(r,o.name,e.branch)}},kt=new bt;var Pe=class{constructor(e){this.compactors=e}async*runAsync(e,t){for(let o of this.compactors)if(await Promise.resolve(o.shouldCompact(e))){let i=new Set(e.session.events);await Promise.resolve(o.compact(e));let s=e.session.events.filter(a=>!i.has(a));for(let a of s)yield a;return}}};var Pn=class extends D{async*runAsync(e,t){let o=e.agent,r=[`You are an agent. Your internal name is "${o.name}".`];o.description&&r.push(`The description about you is "${o.description}"`),q(t,r)}},Fr=new Pn;async function _n(n,e){let t=e.invocationContext;async function o(c){let l=c[0].replace(/^\{+/,"").replace(/\}+$/,"").trim(),u=l.endsWith("?");if(u&&(l=l.slice(0,-1)),l.startsWith("artifact.")){let f=l.substring(9);if(t.artifactService===void 0)throw new Error("Artifact service is not initialized.");let d=await t.artifactService.loadArtifact({appName:t.session.appName,userId:t.session.userId,sessionId:t.session.id,filename:f});if(!d)throw new Error(`Artifact ${f} not found.`);return String(d)}if(!la(l))return c[0];if(l in t.session.state)return String(t.session.state[l]);if(u)return"";throw new Error(`Context variable not found: \`${l}\`.`)}let r=/\{+[^{}]*}+/g,i=[],s=0,a=n.matchAll(r);for(let c of a){i.push(n.slice(s,c.index));let l=await o(c);i.push(l),s=c.index+c[0].length}return i.push(n.slice(s)),i.join("")}var aa=/^[a-zA-Z_][a-zA-Z0-9_]*$/;function Ur(n){return n===""||n===void 0?!1:aa.test(n)}var ca=[E.APP_PREFIX,E.USER_PREFIX,E.TEMP_PREFIX];function la(n){let e=n.split(":");return e.length===0||e.length>2?!1:e.length===1?Ur(n):ca.includes(e[0]+":")?Ur(e[1]):!1}var Ln=class extends D{async*runAsync(e,t){let o=e.agent;if(!y(o))return;let r=o.rootAgent;if(y(r)&&r.globalInstruction){let{instruction:i,requireStateInjection:s}=await r.canonicalGlobalInstruction(new w(e)),a=i;s&&(a=await _n(i,new w(e))),q(t,[a])}if(o.instruction){let{instruction:i,requireStateInjection:s}=await o.canonicalInstruction(new w(e)),a=i;s&&(a=await _n(i,new w(e))),q(t,[a])}}},$r=new Ln;var On=class extends D{async*runAsync(e){let t=e.agent;if(!y(t))return;let o=e.session.events;if(!o||o.length===0)return;let r={},i=-1;for(let s=o.length-1;s>=0;s--){let a=o[s];if(a.author!=="user")continue;let c=V(a);if(!c)continue;let l=!1;for(let u of c){if(u.name!==ke)continue;l=!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 me({hint:u.response.hint,payload:u.response.payload,confirmed:u.response.confirmed})),u.id&&f&&(r[u.id]=f)}if(l){i=s;break}}if(Object.keys(r).length!==0)for(let s=i-1;s>=0;s--){let a=o[s],c=I(a);if(!c)continue;let l={},u={};for(let m of c){if(!m.id||!(m.id in r))continue;let h=m.args;if(!h||!("originalFunctionCall"in h))continue;let C=h.originalFunctionCall;C.id&&(l[C.id]=r[m.id],u[C.id]=C)}if(Object.keys(l).length===0)continue;for(let m=o.length-1;m>i;m--){let h=o[m],C=V(h);if(C){for(let T of C)T.id&&T.id in l&&(delete l[T.id],delete u[T.id]);if(Object.keys(l).length===0)break}}if(Object.keys(l).length===0)continue;let f=await t.canonicalTools(new w(e)),d=Object.fromEntries(f.map(m=>[m.name,m])),p=await Rt({invocationContext:e,functionCalls:Object.values(u),toolsDict:d,beforeToolCallbacks:t.canonicalBeforeToolCallbacks,afterToolCallbacks:t.canonicalAfterToolCallbacks,filters:new Set(Object.keys(l)),toolConfirmationDict:l});p&&(yield p);return}}},Gr=new On;var Pt=(o=>(o.NONE="none",o.SSE="sse",o.BIDI="bidi",o))(Pt||{});function qr(n={}){return{saveInputBlobsAsArtifacts:!1,supportCfc:!1,enableAffectiveDialog:!1,streamingMode:"none",maxLlmCalls:ua(n.maxLlmCalls||500),pauseOnToolCalls:!1,...n}}function ua(n){if(n>Number.MAX_SAFE_INTEGER)throw new Error(`maxLlmCalls should be less than ${Number.MAX_SAFE_INTEGER}.`);return n<=0&&g.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."),n}var Vr="adk_agent_name";async function jr(n,e){return Xe(n)?[n]:await n.getTools(e)}var Mn=Symbol.for("google.adk.llmAgent");function y(n){return typeof n=="object"&&n!==null&&Mn in n&&n[Mn]===!0}var zr,Hr,Nn=class n extends(Hr=G,zr=Mn,Hr){constructor(t){var r,i,s,a,c,l,u,f,d;super(t);this[zr]=!0;if(this.model=t.model,this.instruction=(r=t.instruction)!=null?r:"",this.globalInstruction=(i=t.globalInstruction)!=null?i:"",this.tools=(s=t.tools)!=null?s:[],this.generateContentConfig=t.generateContentConfig,this.disallowTransferToParent=(a=t.disallowTransferToParent)!=null?a:!1,this.disallowTransferToPeers=(c=t.disallowTransferToPeers)!=null?c:!1,this.includeContents=(l=t.includeContents)!=null?l:"default",this.inputSchema=he(t.inputSchema)?be(t.inputSchema):t.inputSchema,this.outputSchema=he(t.outputSchema)?be(t.outputSchema):t.outputSchema,this.outputKey=t.outputKey,this.beforeModelCallback=t.beforeModelCallback,this.afterModelCallback=t.afterModelCallback,this.beforeToolCallback=t.beforeToolCallback,this.afterToolCallback=t.afterToolCallback,this.codeExecutor=t.codeExecutor,this.requestProcessors=(u=t.requestProcessors)!=null?u:[Ar,Fr,$r,Gr,kt,Lr],!t.requestProcessors&&t.contextCompactors&&t.contextCompactors.length>0){let p=this.requestProcessors.indexOf(kt);p!==-1?this.requestProcessors.splice(p,0,new Pe(t.contextCompactors)):this.requestProcessors.push(new Pe(t.contextCompactors))}if(this.responseProcessors=(f=t.responseProcessors)!=null?f:[],this.disallowTransferToParent&&this.disallowTransferToPeers&&!((d=this.subAgents)!=null&&d.length)||this.requestProcessors.push(vr),t.generateContentConfig){if(t.generateContentConfig.tools)throw new Error("All tools must be set via LlmAgent.tools.");if(t.generateContentConfig.systemInstruction)throw new Error("System instruction must be set via LlmAgent.instruction.");if(t.generateContentConfig.responseSchema)throw new Error("Response schema must be set via LlmAgent.output_schema.")}else this.generateContentConfig={};this.outputSchema&&(!this.disallowTransferToParent||!this.disallowTransferToPeers)&&(g.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)}get canonicalModel(){if(sn(this.model))return this.model;if(typeof this.model=="string"&&this.model)return ge.newLlm(this.model);let t=this.parentAgent;for(;t;){if(y(t))return t.canonicalModel;t=t.parentAgent}throw new Error(`No model found for ${this.name}.`)}async canonicalInstruction(t){return typeof this.instruction=="string"?{instruction:this.instruction,requireStateInjection:!0}:{instruction:await this.instruction(t),requireStateInjection:!1}}async canonicalGlobalInstruction(t){return typeof this.globalInstruction=="string"?{instruction:this.globalInstruction,requireStateInjection:!0}:{instruction:await this.globalInstruction(t),requireStateInjection:!1}}async canonicalTools(t){let o=[];for(let r of this.tools){let i=await jr(r,t);o.push(...i)}return o}static normalizeCallbackArray(t){return t?Array.isArray(t)?t:[t]:[]}get canonicalBeforeModelCallbacks(){return n.normalizeCallbackArray(this.beforeModelCallback)}get canonicalAfterModelCallbacks(){return n.normalizeCallbackArray(this.afterModelCallback)}get canonicalBeforeToolCallbacks(){return n.normalizeCallbackArray(this.beforeToolCallback)}get canonicalAfterToolCallbacks(){return n.normalizeCallbackArray(this.afterToolCallback)}maybeSaveOutputToState(t){var i,s;if(t.author!==this.name){g.debug(`Skipping output save for agent ${this.name}: event authored by ${t.author}`);return}if(!this.outputKey){g.debug(`Skipping output save for agent ${this.name}: outputKey is not set`);return}if(!ae(t)){g.debug(`Skipping output save for agent ${this.name}: event is not a final response`);return}if(!((s=(i=t.content)==null?void 0:i.parts)!=null&&s.length)){g.debug(`Skipping output save for agent ${this.name}: event content is empty`);return}let o=t.content.parts.map(a=>a.text?a.text:"").join(""),r=o;if(this.outputSchema){if(!o.trim())return;try{r=JSON.parse(o)}catch(a){g.error(`Error parsing output for agent ${this.name}`,a)}}t.actions.stateDelta[this.outputKey]=r}async*runAsyncImpl(t){for(;;){let o;for await(let r of this.runOneStepAsync(t))o=r,this.maybeSaveOutputToState(r),yield r;if(!o||ae(o))break;if(o.partial){g.warn("The last event is partial, which is not expected.");break}}}async*runLiveImpl(t){for await(let o of this.runLiveFlow(t))this.maybeSaveOutputToState(o),yield o;t.endInvocation}async*runLiveFlow(t){throw await Promise.resolve(),new Error("LlmAgent.runLiveFlow not implemented")}async*runOneStepAsync(t){let o={contents:[],toolsDict:{},liveConnectConfig:{}};for(let a of this.requestProcessors)for await(let c of a.runAsync(t,o))yield c;for(let a of this.tools){let c=new N({invocationContext:t}),l=await jr(a,new w(t));for(let u of l)await u.processLlmRequest({toolContext:c,llmRequest:o})}if(t.endInvocation)return;let r=A({invocationId:t.invocationId,author:this.name,branch:t.branch}),i=Q.startSpan("call_llm"),s=da.setSpan(fa.active(),i);yield*pe(s,this,async function*(){let a=async function*(){for await(let c of this.callLlmAsync(t,o,r))for await(let l of this.postprocess(t,o,c,r))r.id=Ht(),r.timestamp=new Date().getTime(),yield l};yield*this.runAndHandleError(a.call(this),t,o,r)}),i.end()}async*postprocess(t,o,r,i){var f,d;for(let p of this.responseProcessors)for await(let m of p.runAsync(t,r))yield m;if(!r.content&&!r.errorCode&&!r.interrupted)return;let s=A({...i,...r});if(s.content){let p=I(s);p!=null&&p.length&&(ur(s),s.longRunningToolIds=Array.from(dr(p,o.toolsDict)))}if(yield s,!((f=I(s))!=null&&f.length))return;if((d=t.runConfig)!=null&&d.pauseOnToolCalls){t.endInvocation=!0;return}let a=await pr({invocationContext:t,functionCallEvent:s,toolsDict:o.toolsDict,beforeToolCallbacks:this.canonicalBeforeToolCallbacks,afterToolCallbacks:this.canonicalAfterToolCallbacks});if(!a)return;let c=mn(t,a);c&&(yield c);let l=gn({invocationContext:t,functionCallEvent:s,functionResponseEvent:a});if(l){yield l,t.endInvocation=!0;return}yield a;let u=a.actions.transferToAgent;if(u){let p=this.getAgentByName(t,u);for await(let m of p.runAsync(t))yield m}}getAgentByName(t,o){let i=t.agent.rootAgent.findAgent(o);if(!i)throw new Error(`Agent ${o} not found in the agent tree.`);return i}async*callLlmAsync(t,o,r){var a,c,l,u,f;let i=await this.handleBeforeModelCallback(t,o,r);if(i){yield i;return}(a=o.config)!=null||(o.config={}),(l=(c=o.config).labels)!=null||(c.labels={}),o.config.labels[Vr]||(o.config.labels[Vr]=this.name);let s=this.canonicalModel;if((u=t.runConfig)!=null&&u.supportCfc)throw new Error("CFC is not yet supported in callLlmAsync");{t.incrementLlmCallCount();let d=s.generateContentAsync(o,((f=t.runConfig)==null?void 0:f.streamingMode)==="sse");for await(let p of d){Oo({invocationContext:t,eventId:r.id,llmRequest:o,llmResponse:p});let m=await this.handleAfterModelCallback(t,p,r);yield m!=null?m:p}}}async handleBeforeModelCallback(t,o,r){let i=new N({invocationContext:t,eventActions:r.actions}),s=await t.pluginManager.runBeforeModelCallback({callbackContext:i,llmRequest:o});if(s)return s;for(let a of this.canonicalBeforeModelCallbacks){let c=await a({context:i,request:o});if(c)return c}}async handleAfterModelCallback(t,o,r){let i=new N({invocationContext:t,eventActions:r.actions}),s=await t.pluginManager.runAfterModelCallback({callbackContext:i,llmResponse:o});if(s)return s;for(let a of this.canonicalAfterModelCallbacks){let c=await a({context:i,response:o});if(c)return c}}async*runAndHandleError(t,o,r,i){try{for await(let s of t)yield s}catch(s){let a=new N({invocationContext:o,eventActions:i.actions});if(s instanceof Error){let c=await o.pluginManager.runOnModelErrorCallback({callbackContext:a,llmRequest:r,error:s});if(c)yield c;else{let l="UNKNOWN_ERROR",u=s.message;try{let f=JSON.parse(s.message);f!=null&&f.error&&(l=String(f.error.code||"UNKNOWN_ERROR"),u=f.error.message||u)}catch{}i.actions?yield A({invocationId:o.invocationId,author:this.name,errorCode:l,errorMessage:u}):yield{errorCode:l,errorMessage:u}}}else throw g.error("Unknown error during response generation",s),s}}};var Dn=Symbol.for("google.adk.loopAgent");function _e(n){return typeof n=="object"&&n!==null&&Dn in n&&n[Dn]===!0}var Wr,Kr,Bn=class extends(Kr=G,Wr=Dn,Kr){constructor(t){var o;super(t);this[Wr]=!0;this.maxIterations=(o=t.maxIterations)!=null?o:Number.MAX_SAFE_INTEGER}async*runAsyncImpl(t){let o=0;for(;o<this.maxIterations;){for(let r of this.subAgents){let i=!1;for await(let s of r.runAsync(t))yield s,s.actions.escalate&&(i=!0);if(i)return}o++}}async*runLiveImpl(t){throw new Error("This is not supported yet for LoopAgent.")}};var Fn=Symbol.for("google.adk.parallelAgent");function Le(n){return typeof n=="object"&&n!==null&&Fn in n&&n[Fn]===!0}var Xr,Yr,Un=class extends(Yr=G,Xr=Fn,Yr){constructor(){super(...arguments);this[Xr]=!0}async*runAsyncImpl(t){let o=this.subAgents.map(r=>r.runAsync(pa(this,r,t)));for await(let r of ma(o))yield r}async*runLiveImpl(t){throw new Error("This is not supported yet for ParallelAgent.")}};function pa(n,e,t){let o=new j(t),r=`${n.name}.${e.name}`;return o.branch=o.branch?`${o.branch}.${r}`:r,o}async function*ma(n){let e=new Map;for(let[t,o]of n.entries()){let r=o.next().then(i=>({result:i,index:t}));e.set(t,r)}for(;e.size>0;){let{result:t,index:o}=await Promise.race(e.values());if(t.done){e.delete(o);continue}yield t.value;let r=n[o].next().then(i=>({result:i,index:o}));e.set(o,r)}}var $n="task_completed",Gn=Symbol.for("google.adk.sequentialAgent");function Oe(n){return typeof n=="object"&&n!==null&&Gn in n&&n[Gn]===!0}var Jr,Qr,qn=class extends(Qr=G,Jr=Gn,Qr){constructor(){super(...arguments);this[Jr]=!0}async*runAsyncImpl(t){for(let o of this.subAgents)for await(let r of o.runAsync(t))yield r}async*runLiveImpl(t){for(let o of this.subAgents)y(o)&&((await o.canonicalTools(new w(t))).some(s=>s.name===$n)||(o.tools.push(new oe({name:$n,description:"Signals that the model has successfully completed the user's question or task.",execute:()=>"Task completion signaled."})),o.instruction+=`If you finished the user's request according to its description, call the ${$n} 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 o of this.subAgents)for await(let r of o.runLive(t))yield r}};var Vn=Symbol.for("google.adk.baseToolset");function jn(n){return typeof n=="object"&&n!==null&&Vn in n&&n[Vn]===!0}var Zr;Zr=Vn;var tt=class{constructor(e,t){this.toolFilter=e;this.prefix=t;this[Zr]=!0}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){}};async function _t(n){if(typeof n=="object")return n;let e=n;if(e.startsWith("http://")||e.startsWith("https://"))return await new ga().resolve(e);try{let t=await oi.readFile(e,"utf-8");return JSON.parse(t)}catch(t){throw new Error(`Failed to read agent card from file ${e}: ${t.message}`)}}async function zn(n,e){return{name:n.name,description:n.description||"",protocolVersion:"0.3.0",version:"1.0.0",skills:await ha(n),url:e[0].url,preferredTransport:e[0].transport,capabilities:{extensions:[],stateTransitionHistory:!1,pushNotifications:!1,streaming:!0},defaultInputModes:["text"],defaultOutputModes:["text"],additionalInterfaces:e}}async function ha(n){let[e,t]=await Promise.all([ri(n),Ca(n)]);return[...e,...t]}async function ri(n){return y(n)?va(n):Aa(n)}async function Ca(n){let e=n.subAgents,t=[];for(let o of e){let r=await ri(o);for(let i of r){let s={id:`${o.name}_${i.id}`,name:`${o.name}: ${i.name}`,description:i.description,tags:[`sub_agent:${o.name}`,...i.tags]};t.push(s)}}return t}async function va(n){let e=[{id:n.name,name:"model",description:await Sa(n),tags:["llm"]}];if(n.tools&&n.tools.length>0){for(let t of n.tools)if(Xe(t))e.push(ei(n.name,t));else if(jn(t)){let o=await t.getTools();for(let r of o)e.push(ei(n.name,r))}}return e}function ei(n,e){let t=e.description;return t||(t=`Tool: ${e.name}`),{id:`${n}-${e.name}`,name:e.name,description:t,tags:["llm","tools"]}}function Aa(n){let e=[{id:n.name,name:Ra(n),description:Ea(n),tags:[ni(n)]}],t=n.subAgents;if(t.length>0){let o=t.map(r=>r.description||"No description");e.push({id:`${n.name}-sub-agents`,name:"sub-agents",description:`Orchestrates: ${o.join("; ")}`,tags:[ni(n),"orchestration"]})}return e}function Ea(n){let e=[];return n.description&&e.push(n.description),n.subAgents.length>0&&(_e(n)?e.push(Ta(n)):Le(n)?e.push(ya(n)):Oe(n)&&e.push(xa(n))),e.length>0?e.join(" "):ii(n)}function xa(n){let e=n.subAgents,t=[];return e.forEach((o,r)=>{let i=o.description;i||(i=`execute the ${o.name} agent`),r===0?t.push(`First, this agent will ${i}.`):r===e.length-1?t.push(`Finally, this agent will ${i}.`):t.push(`Then, this agent will ${i}.`)}),t.join(" ")}function ya(n){let e=n.subAgents,t=[];return e.forEach((o,r)=>{let i=o.description;i||(i=`execute the ${o.name} agent`),r===0?t.push(`This agent will ${i}`):r===e.length-1?t.push(`and ${i}`):t.push(`, ${i}`)}),`${t.join(" ")} simultaneously.`}function Ta(n){let e=n.maxIterations,t="unlimited";typeof e=="number"&&e<Number.MAX_SAFE_INTEGER&&(t=e.toString());let o=n.subAgents,r=[];return o.forEach((i,s)=>{let a=i.description;a||(a=`execute the ${i.name} agent`),s===0?r.push(`This agent will ${a}`):s===o.length-1?r.push(`and ${a}`):r.push(`, ${a}`)}),`${r.join(" ")} in a loop (max ${t} iterations).`}async function Sa(n){let e=[];if(n.description&&e.push(n.description),n.instruction){let o;if(typeof n.instruction=="function"){let r=new w(new j({agent:n}));try{o=await n.instruction(r)}catch(i){g.warn("Failed to resolve dynamic instruction for AgentCard",i),o=""}}else o=n.instruction;o&&e.push(ti(o))}let t=n.rootAgent;if(y(t)&&t.globalInstruction){let o;if(typeof t.globalInstruction=="function"){let r=new w(new j({agent:n}));try{o=await t.globalInstruction(r)}catch(i){g.warn("Failed to resolve dynamic global instruction for AgentCard",i),o=""}}else o=t.globalInstruction;o&&e.push(ti(o))}return e.length>0?e.join(" "):ii(n)}function ti(n){let e=[{original:"you were",target:"I was"},{original:"you are",target:"I am"},{original:"you're",target:"I am"},{original:"you've",target:"I have"},{original:"yours",target:"mine"},{original:"your",target:"my"},{original:"you",target:"I"}],t=n;for(let o of e){let r=new RegExp(`\\b${o.original}\\b`,"gi");t=t.replace(r,o.target)}return t}function ii(n){return _e(n)?"A loop workflow agent":Oe(n)?"A sequential workflow agent":Le(n)?"A parallel workflow agent":y(n)?"An LLM-based agent":"A custom agent"}function ni(n){return _e(n)?"loop_workflow":Oe(n)?"sequential_workflow":Le(n)?"parallel_workflow":y(n)?"llm_agent":"custom_agent"}function Ra(n){return y(n)?"model":Ia(n)?"workflow":"custom"}function Ia(n){return _e(n)||Oe(n)||Le(n)}import{createModelContent as nt,createUserContent as ba}from"@google/genai";function Hn(n,e,t){if(tn(n))return ka(n,e,t);if(Z(n))return Oa(n,e,t);if(ze(n))return Pa(n,e,t);if(le(n))return n.final?_a(n,e,t):La(n,e,t)}function ka(n,e,t,o){let r=ee(n.parts);return{...ot(o||n),invocationId:e,author:n.role==="user"?"user":t,content:n.role==="user"?ba(r):nt(r),turnComplete:!0,partial:!1}}function Pa(n,e,t){var i;let o=((i=n.artifact)==null?void 0:i.parts)||[];if(o.length===0)return;let r=!!ht(n)[v.PARTIAL]||n.append||!n.lastChunk;return{...ot(n),invocationId:e,author:t,content:nt(ee(o)),longRunningToolIds:Lt(o),partial:r}}function _a(n,e,t){var a;let o=((a=n.status.message)==null?void 0:a.parts)||[];if(o.length===0)return;let r=ee(o),i=Ct(n),s=!i&&r.length>0;return{...ot(n),invocationId:e,author:t,errorMessage:i?nn(n):void 0,content:s?nt(r):void 0,longRunningToolIds:Lt(o),turnComplete:!0}}function La(n,e,t){let o=n.status.message;if(!o)return;let r=ee(o.parts);return{...ot(n),invocationId:e,author:t,content:nt(r),turnComplete:!1,partial:!0}}function Oa(n,e,t){var a,c;let o=[],r=[];if(n.artifacts){for(let l of n.artifacts)if(((a=l.parts)==null?void 0:a.length)>0){let u=ee(l.parts);o.push(...u),r.push(...Lt(l.parts))}}if((c=n.status)!=null&&c.message){let l=n.status.message.parts,u=ee(l);o.push(...u),r.push(...Lt(l))}let i=qo(n)||vt(n),s=Ct(n);if(!(o.length===0&&!i))return{...ot(n),invocationId:e,author:t,content:s?void 0:nt(o),errorMessage:s?nn(n):void 0,longRunningToolIds:r,turnComplete:i}}function ot(n){let e=n.metadata||{};return A({branch:e[v.BRANCH],author:e[v.AUTHOR],partial:e[v.PARTIAL],errorCode:e[v.ERROR_CODE],errorMessage:e[v.ERROR_MESSAGE],citationMetadata:e[v.CITATION_METADATA],groundingMetadata:e[v.GROUNDING_METADATA],usageMetadata:e[v.USAGE_METADATA],customMetadata:e[v.CUSTOM_METADATA],actions:F({escalate:!!e[v.ESCALATE],transferToAgent:e[v.TRANSFER_TO_AGENT]})})}function Lt(n){let e=[];for(let t of n)if(t.metadata&&t.metadata[v.IS_LONG_RUNNING]){let o=on(t);o.functionCall&&o.functionCall.id&&e.push(o.functionCall.id)}return e}var Wn=class extends G{constructor(t){super(t);this.a2aConfig=t;this.isInitialized=!1;if(!t.agentCard&&!t.client)throw new Error("Either AgentCard or Client must be provided")}async init(){if(!this.isInitialized){if(this.a2aConfig.client&&(this.client=this.a2aConfig.client),this.a2aConfig.agentCard&&(this.card=await _t(this.a2aConfig.agentCard),!this.client)){let t=this.a2aConfig.clientFactory||new Na;this.client=await t.createFromAgentCard(this.card)}this.isInitialized=!0}}async*runAsyncImpl(t){var o,r;await this.init();try{let i=t.session.events;if(i.length===0)throw new Error("No events in session to send");let s=Jo(t.session,i.length-1),a,c,l;if(s){let m=s.response;a=ne(((o=m.content)==null?void 0:o.parts)||[],m.longRunningToolIds),c=s.taskId,l=s.contextId}else{let m=Qo(t,t.session);a=m.parts,l=m.contextId}let u={kind:"message",messageId:b(),role:"user",parts:a,metadata:ue({appName:t.session.appName,userId:t.session.userId,sessionId:t.session.id})};c&&(u.taskId=c),l&&(u.contextId=l);let f={message:u,configuration:this.a2aConfig.messageSendConfig},d=new Et(f);if(this.a2aConfig.beforeRequestCallbacks)for(let m of this.a2aConfig.beforeRequestCallbacks)await m(t,f);if(this.card?((r=this.card.capabilities)==null?void 0:r.streaming)!==!1:!0)for await(let m of this.client.sendMessageStream(f)){if(this.a2aConfig.afterRequestCallbacks)for(let T of this.a2aConfig.afterRequestCallbacks)await T(t,m);let h=Hn(m,t.invocationId,this.name);if(!h)continue;d.updateCustomMetadata(h,m);let C=d.aggregatePartial(t,m,h);for(let T of C)yield T}else{let m=await this.client.sendMessage(f);if(this.a2aConfig.afterRequestCallbacks)for(let C of this.a2aConfig.afterRequestCallbacks)await C(t,m);let h=Hn(m,t.invocationId,this.name);h&&(d.updateCustomMetadata(h,m),yield h)}}catch(i){let s=i;g.error(`A2ARemoteAgent ${this.name} failed:`,s),yield A({author:this.name,invocationId:t.invocationId,errorMessage:s.message,turnComplete:!0})}}runLiveImpl(t){throw new Error("Live mode is not supported in A2ARemoteAgent yet.")}};import{createPartFromText as Da}from"@google/genai";import{context as Ba,trace as Fa}from"@opentelemetry/api";var rt=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),g.info(`Plugin '${e.name}' registered.`)}getPlugin(e){return Array.from(this.plugins).find(t=>t.name===e)}async runCallbacks(e,t,o){for(let r of e)try{let i=await t(r);if(i!==void 0)return g.debug(`Plugin '${r.name}' returned a value for callback '${o}', exiting early.`),i}catch(i){let s=`Error in plugin '${r.name}' during '${o}' callback: ${i}`;throw g.error(s),new Error(s)}}async runOnUserMessageCallback({userMessage:e,invocationContext:t}){return await this.runCallbacks(this.plugins,o=>o.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,o=>o.onEventCallback({invocationContext:e,event:t}),"onEventCallback")}async runBeforeAgentCallback({agent:e,callbackContext:t}){return await this.runCallbacks(this.plugins,o=>o.beforeAgentCallback({agent:e,callbackContext:t}),"beforeAgentCallback")}async runAfterAgentCallback({agent:e,callbackContext:t}){return await this.runCallbacks(this.plugins,o=>o.afterAgentCallback({agent:e,callbackContext:t}),"afterAgentCallback")}async runBeforeToolCallback({tool:e,toolArgs:t,toolContext:o}){return await this.runCallbacks(this.plugins,r=>r.beforeToolCallback({tool:e,toolArgs:t,toolContext:o}),"beforeToolCallback")}async runAfterToolCallback({tool:e,toolArgs:t,toolContext:o,result:r}){return await this.runCallbacks(this.plugins,i=>i.afterToolCallback({tool:e,toolArgs:t,toolContext:o,result:r}),"afterToolCallback")}async runOnModelErrorCallback({callbackContext:e,llmRequest:t,error:o}){return await this.runCallbacks(this.plugins,r=>r.onModelErrorCallback({callbackContext:e,llmRequest:t,error:o}),"onModelErrorCallback")}async runBeforeModelCallback({callbackContext:e,llmRequest:t}){return await this.runCallbacks(this.plugins,o=>o.beforeModelCallback({callbackContext:e,llmRequest:t}),"beforeModelCallback")}async runAfterModelCallback({callbackContext:e,llmResponse:t}){return await this.runCallbacks(this.plugins,o=>o.afterModelCallback({callbackContext:e,llmResponse:t}),"afterModelCallback")}async runOnToolErrorCallback({tool:e,toolArgs:t,toolContext:o,error:r}){return await this.runCallbacks(this.plugins,i=>i.onToolErrorCallback({tool:e,toolArgs:t,toolContext:o,error:r}),"onToolErrorCallback")}};var Kn=Symbol.for("google.adk.runner");function Xn(n){return typeof n=="object"&&n!==null&&Kn in n&&n[Kn]===!0}var si;si=Kn;var re=class{constructor(e){this[si]=!0;var t;this.appName=e.appName,this.agent=e.agent,this.pluginManager=new rt((t=e.plugins)!=null?t:[]),this.artifactService=e.artifactService,this.sessionService=e.sessionService,this.memoryService=e.memoryService,this.credentialService=e.credentialService}async*runEphemeral(e){let o=(await this.sessionService.createSession({appName:this.appName,userId:e.userId})).id;try{yield*this.runAsync({userId:e.userId,sessionId:o,newMessage:e.newMessage,stateDelta:e.stateDelta,runConfig:e.runConfig})}finally{await this.sessionService.deleteSession({appName:this.appName,userId:e.userId,sessionId:o})}}async*runAsync(e){let{userId:t,sessionId:o,stateDelta:r}=e,i=qr(e.runConfig),s=e.newMessage,a=Q.startSpan("invocation"),c=Fa.setSpan(Ba.active(),a);try{yield*pe(c,this,async function*(){var d;let l=await this.sessionService.getSession({appName:this.appName,userId:t,sessionId:o});if(!l)throw this.appName?new Error(`Session not found: ${o}`):new Error("Session lookup failed: appName must be provided in runner constructor");if(i.supportCfc&&y(this.agent)){let p=this.agent.canonicalModel.model;if(!Je(p))throw new Error(`CFC is not supported for model: ${p} in agent: ${this.agent.name}`);Ze(this.agent.codeExecutor)||(this.agent.codeExecutor=new Qe)}let u=new j({artifactService:this.artifactService,sessionService:this.sessionService,memoryService:this.memoryService,credentialService:this.credentialService,invocationId:Do(),agent:this.agent,session:l,userContent:s,runConfig:i,pluginManager:this.pluginManager}),f=await this.pluginManager.runOnUserMessageCallback({userMessage:s,invocationContext:u});if(f&&(s=f),s){if(!((d=s.parts)!=null&&d.length))throw new Error("No parts in the newMessage.");i.saveInputBlobsAsArtifacts&&await this.saveArtifacts(u.invocationId,l.userId,l.id,s),await this.sessionService.appendEvent({session:l,event:A({invocationId:u.invocationId,author:"user",actions:r?F({stateDelta:r}):void 0,content:s})})}if(u.agent=this.determineAgentForResumption(l,this.agent),s){let p=await this.pluginManager.runBeforeRunCallback({invocationContext:u});if(p){let m=A({invocationId:u.invocationId,author:"model",content:p});await this.sessionService.appendEvent({session:l,event:m}),yield m}else{for await(let m of u.agent.runAsync(u)){m.partial||await this.sessionService.appendEvent({session:l,event:m});let h=await this.pluginManager.runOnEventCallback({invocationContext:u,event:m});h?yield h:yield m}await this.pluginManager.runAfterRunCallback({invocationContext:u})}}})}finally{a.end()}}async saveArtifacts(e,t,o,r){var i;if(!(!this.artifactService||!((i=r.parts)!=null&&i.length)))for(let s=0;s<r.parts.length;s++){let a=r.parts[s];if(!a.inlineData)continue;let c=`artifact_${e}_${s}`;await this.artifactService.saveArtifact({appName:this.appName,userId:t,sessionId:o,filename:c,artifact:a}),r.parts[s]=Da(`Uploaded file: ${c}. It is saved into artifacts`)}}determineAgentForResumption(e,t){let o=Ua(e.events);if(o&&o.author)return t.findAgent(o.author)||t;for(let r=e.events.length-1;r>=0;r--){g.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){g.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(!y(t)||t.disallowTransferToParent)return!1;t=t.parentAgent}return!0}};function Ua(n){var o,r,i,s;if(!n.length)return null;let t=(s=(i=(r=(o=n[n.length-1].content)==null?void 0:o.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=n.length-2;a>=0;a--){let c=n[a],l=I(c);if(l){for(let u of l)if(u.id===t)return c}}return null}function ai(n,e){var r,i;let t=F();for(let s of n){if(s.errorCode||s.errorMessage)return At({taskId:e.requestContext.taskId,contextId:e.requestContext.contextId,error:new Error(s.errorMessage||s.errorCode),metadata:{...We(s,e),...Ke(t)}});t.escalate=t.escalate||((r=s.actions)==null?void 0:r.escalate),(i=s.actions)!=null&&i.transferToAgent&&(t.transferToAgent=s.actions.transferToAgent)}let o=$a(n,e);return o?{...o,metadata:{...o.metadata,...Ke(t)}}:zo({taskId:e.requestContext.taskId,contextId:e.requestContext.contextId,metadata:{...ue(e),...Ke(t)}})}function $a(n,e){var r,i;let t=[],o=new Set;for(let s of n)if((i=(r=s.content)==null?void 0:r.parts)!=null&&i.length)for(let a of s.content.parts){let c=Ga(a,s.longRunningToolIds,t);!c||o.has(c)||(t.push(a),o.add(c))}if(t.length>0)return Wo({taskId:e.requestContext.taskId,contextId:e.requestContext.contextId,parts:ne(t,[...o]),metadata:ue(e)})}function Ga(n,e=[],t=[]){var i,s,a;let o=(i=n.functionCall)==null?void 0:i.id,r=(s=n.functionResponse)==null?void 0:s.id;if(!(!o&&!r)){if(o&&e.includes(o))return o;if(r&&e.includes(r))return r;for(let c of t)if(((a=c.functionCall)==null?void 0:a.id)===r)return r}}function ci(n,e){var r;if(!n||!vt(n)||!n.status.message)return;let t=n.status.message,o=ee(t.parts);for(let i of o){let s=(r=i.functionCall)==null?void 0:r.id;if(!s)continue;if(!((e==null?void 0:e.parts)||[]).some(c=>{var l;return((l=c.functionResponse)==null?void 0:l.id)===s}))return Ko({taskId:n.id,contextId:n.contextId,parts:[...t.parts.filter(c=>{var l;return!((l=c.metadata)!=null&&l.validation_error)}),{kind:"text",text:`No input provided for function call id ${s}`,metadata:{validation_error:!0}}]})}}function li({session:n,userContent:e,requestContext:t}){return{userId:n.userId,sessionId:n.id,appName:n.appName,readonlyState:n.state,events:n.events,userContent:e,requestContext:t}}var it=class{constructor(e){this.config=e;this.agentPartialArtifactIdsMap={}}async execute(e,t){var u,f;let o=e.userMessage;if(!o)throw new Error("message not provided");let r=`A2A_USER_${e.contextId}`,i=e.contextId,s=Yo(o),a=await ui(this.config.runner),c=await qa(r,i,a.sessionService,a.appName),l=li({session:c,userContent:s,requestContext:e});try{if(this.config.beforeExecuteCallback&&await this.config.beforeExecuteCallback(e),e.task){let p=ci(e.task,s);if(p){await this.publishFinalTaskStatus({executorContext:l,eventBus:t,event:p});return}}e.task||t.publish(Vo({taskId:e.taskId,contextId:e.contextId,message:o})),t.publish(jo({taskId:e.taskId,contextId:e.contextId}));let d=[];for await(let p of a.runAsync({userId:r,sessionId:i,newMessage:s,runConfig:this.config.runConfig})){d.push(p);let m=this.convertAdkEventToA2AEvent(p,l);m&&(await((f=(u=this.config).afterEventCallback)==null?void 0:f.call(u,l,p,m)),t.publish(m))}await this.publishFinalTaskStatus({executorContext:l,eventBus:t,event:ai(d,l)})}catch(d){let p=d;await this.publishFinalTaskStatus({executorContext:l,eventBus:t,error:p,event:At({taskId:e.taskId,contextId:e.contextId,error:new Error(`Agent run failed: ${p.message}`),metadata:ue(l)})})}}async cancelTask(e){throw new Error("Task cancellation is not supported yet.")}convertAdkEventToA2AEvent(e,t){var s;let o=ne((s=e.content)==null?void 0:s.parts,e.longRunningToolIds);if(o.length===0)return;let r=this.agentPartialArtifactIdsMap[e.author]||b(),i=Ho({taskId:t.requestContext.taskId,contextId:t.requestContext.contextId,artifactId:r,parts:o,metadata:We(e,t),append:e.partial,lastChunk:!e.partial});return e.partial?this.agentPartialArtifactIdsMap[e.author]=r:delete this.agentPartialArtifactIdsMap[e.author],i}async publishFinalTaskStatus({executorContext:e,eventBus:t,event:o,error:r}){var i,s;try{await((s=(i=this.config).afterExecuteCallback)==null?void 0:s.call(i,e,o,r))}catch(a){g.error("Error in afterExecuteCallback:",a)}t.publish(o)}};async function qa(n,e,t,o){let r=await t.getSession({appName:o,userId:n,sessionId:e});return r||t.createSession({appName:o,userId:n,sessionId:e})}async function ui(n){if(typeof n=="function"){let e=await n();return ui(e)}return Xn(n)?n:new re(n)}import{AGENT_CARD_PATH as ja}from"@a2a-js/sdk";import{DefaultRequestHandler as za,InMemoryTaskStore as Ha}from"@a2a-js/sdk/server";import{agentCardHandler as Wa,jsonRpcHandler as Ka,restHandler as Xa,UserBuilder as pi}from"@a2a-js/sdk/server/express";import Jn from"express";import{cloneDeep as fi}from"lodash-es";import{cloneDeep as Va}from"lodash-es";var Ee=class{async getOrCreateSession(e){if(!e.sessionId)return this.createSession(e);let t=await this.getSession({appName:e.appName,userId:e.userId,sessionId:e.sessionId});return t||this.createSession(e)}async appendEvent({session:e,event:t}){return t.partial||(t=Yn(t),this.updateSessionState({session:e,event:t}),e.events.push(t)),t}updateSessionState({session:e,event:t}){if(!(!t.actions||!t.actions.stateDelta))for(let[o,r]of Object.entries(t.actions.stateDelta))o.startsWith(E.TEMP_PREFIX)||(e.state[o]=r)}};function Yn(n){if(!n.actions||!n.actions.stateDelta)return n;let e=n.actions.stateDelta,t={};for(let[o,r]of Object.entries(e))o.startsWith(E.TEMP_PREFIX)||(t[o]=r);return n.actions.stateDelta=t,n}function ie(n={},e={},t={}){let o=Va(t);for(let[r,i]of Object.entries(n))o[E.APP_PREFIX+r]=i;for(let[r,i]of Object.entries(e))o[E.USER_PREFIX+r]=i;return o}function de(n){return{id:n.id,appName:n.appName,userId:n.userId||"",state:n.state||{},events:n.events||[],lastUpdateTime:n.lastUpdateTime||0}}function di(n){return n==="memory://"}var X=class extends Ee{constructor(){super(...arguments);this.sessions={};this.userState={};this.appState={}}async createSession({appName:t,userId:o,state:r,sessionId:i}){var c;let s=de({id:i||b(),appName:t,userId:o,state:r,events:[],lastUpdateTime:Date.now()});this.sessions[t]||(this.sessions[t]={}),this.sessions[t][o]||(this.sessions[t][o]={}),this.sessions[t][o][s.id]=s;let a=fi(s);return a.state=ie(this.appState[t],(c=this.userState[t])==null?void 0:c[o],a.state),a}async getSession({appName:t,userId:o,sessionId:r,config:i}){var c;if(!this.sessions[t]||!this.sessions[t][o]||!this.sessions[t][o][r])return Promise.resolve(void 0);let s=this.sessions[t][o][r],a=fi(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 a.state=ie(this.appState[t],(c=this.userState[t])==null?void 0:c[o],a.state),a}listSessions({appName:t,userId:o}){if(!this.sessions[t]||!this.sessions[t][o])return Promise.resolve({sessions:[]});let r=[];for(let i of Object.values(this.sessions[t][o]))r.push(de({id:i.id,appName:i.appName,userId:i.userId,state:{},events:[],lastUpdateTime:i.lastUpdateTime}));return Promise.resolve({sessions:r})}async deleteSession({appName:t,userId:o,sessionId:r}){await this.getSession({appName:t,userId:o,sessionId:r})&&delete this.sessions[t][o][r]}async appendEvent({session:t,event:o}){await super.appendEvent({session:t,event:o}),t.lastUpdateTime=o.timestamp;let r=t.appName,i=t.userId,s=t.id,a=l=>{g.warn(`Failed to append event to session ${s}: ${l}`)};if(!this.sessions[r])return a(`appName ${r} not in sessions`),o;if(!this.sessions[r][i])return a(`userId ${i} not in sessions[appName]`),o;if(!this.sessions[r][i][s])return a(`sessionId ${s} not in sessions[appName][userId]`),o;if(o.actions&&o.actions.stateDelta)for(let l of Object.keys(o.actions.stateDelta))l.startsWith(E.APP_PREFIX)&&(this.appState[r]=this.appState[r]||{},this.appState[r][l.replace(E.APP_PREFIX,"")]=o.actions.stateDelta[l]),l.startsWith(E.USER_PREFIX)&&(this.userState[r]=this.userState[r]||{},this.userState[r][i]=this.userState[r][i]||{},this.userState[r][i][l.replace(E.USER_PREFIX,"")]=o.actions.stateDelta[l]);let c=this.sessions[r][i][s];return await super.appendEvent({session:c,event:o}),c.lastUpdateTime=o.timestamp,o}};async function Ya(n,e={}){var f,d,p,m;let t=(f=e.host)!=null?f:"localhost",o=(d=e.port)!=null?d:8e3,r=(p=e.protocol)!=null?p:"http",i=e.basePath||"",s=`${r}://${t}:${o}${i}`,a=e.agentCard?await _t(e.agentCard):await zn(n,[{url:`${s}/jsonrpc`,transport:"JSONRPC"},{url:`${s}/rest`,transport:"HTTP+JSON"}]),c=new it({runner:e.runner||{agent:n,appName:n.name,sessionService:e.sessionService||new X,memoryService:e.memoryService,artifactService:e.artifactService},runConfig:{streamingMode:"sse"}}),l=new za(a,new Ha,c),u=(m=e.app)!=null?m:Jn();return e.app||(u.use(Jn.urlencoded({limit:"50mb",extended:!0})),u.use(Jn.json({limit:"50mb"}))),u.use(`${i}/${ja}`,Wa({agentCardProvider:l})),u.use(`${i}/rest`,Xa({requestHandler:l,userBuilder:pi.noAuthentication})),u.use(`${i}/jsonrpc`,Ka({requestHandler:l,userBuilder:pi.noAuthentication})),u}import*as _ from"fs/promises";import*as x from"path";import{fileURLToPath as hi,pathToFileURL as Ja}from"url";var Mt="user:",st=class{constructor(e){try{let t=e.startsWith("file://")?hi(e):e;this.rootDir=x.resolve(t)}catch(t){throw new Error(`Invalid root directory: ${e}`,{cause:t})}}async saveArtifact({userId:e,sessionId:t,filename:o,artifact:r,customMetadata:i}){if(!r.inlineData&&!r.text)throw new Error("Artifact must have either inlineData or text content.");let s=xe(this.rootDir,e,t,o);await _.mkdir(s,{recursive:!0});let a=await Me(s),c=a.length>0?a[a.length-1]+1:0,l=ye(s),u=x.join(l,c.toString());await _.mkdir(u,{recursive:!0});let f=x.basename(s),d=x.join(u,f),p;if(r.inlineData){let C=r.inlineData.data||"";await _.writeFile(d,Buffer.from(C,"base64")),p=r.inlineData.mimeType||"application/octet-stream"}else r.text!==void 0&&await _.writeFile(d,r.text,"utf-8");let m=await ec(this.rootDir,e,t,o,c),h={fileName:o,mimeType:p,version:c,canonicalUri:m,customMetadata:i};return await tc(x.join(u,"metadata.json"),h),c}async loadArtifact({userId:e,sessionId:t,filename:o,version:r}){try{let i=xe(this.rootDir,e,t,o);try{await _.access(i)}catch(p){g.warn(`[FileArtifactService] loadArtifact: Artifact ${o} not found`,p);return}let s=await Me(i);if(s.length===0)return;let a;if(r===void 0)a=s[s.length-1];else{if(!s.includes(r)){g.warn(`[FileArtifactService] loadArtifact: Artifact ${o} version ${r} not found`);return}a=r}let c=x.join(ye(i),a.toString()),l=x.join(c,"metadata.json"),u=await Ot(l),f=x.basename(i),d=x.join(c,f);if(u.canonicalUri){let p=nc(u.canonicalUri);if(p)try{await _.access(p),d=p}catch{g.warn(`[FileArtifactService] loadArtifact: Artifact ${o} missing at ${p}, falling back to content path ${d}`)}}if(u.mimeType)try{let p=await _.readFile(d);return{inlineData:{mimeType:u.mimeType,data:p.toString("base64")}}}catch{g.warn(`[FileArtifactService] loadArtifact: Artifact ${o} missing at ${d}`);return}try{return{text:await _.readFile(d,"utf-8")}}catch{g.warn(`[FileArtifactService] loadArtifact: Text artifact ${o} missing at ${d}`);return}}catch(i){g.error(`[FileArtifactService] loadArtifact: Error loading artifact ${o}`,i);return}}async listArtifactKeys({userId:e,sessionId:t}){let o=new Set,r=Ai(this.rootDir,e),i=xi(r,t);for await(let a of Qn(i)){let c=await mi(a);if(c!=null&&c.fileName)o.add(c.fileName);else{let l=x.relative(i,a);o.add(gi(l))}}let s=Ei(r);for await(let a of Qn(s)){let c=await mi(a);if(c!=null&&c.fileName)o.add(c.fileName);else{let l=x.relative(s,a);o.add(`${Mt}${gi(l)}`)}}return Array.from(o).sort()}async deleteArtifact({userId:e,sessionId:t,filename:o}){try{let r=xe(this.rootDir,e,t,o);await _.rm(r,{recursive:!0,force:!0})}catch(r){g.warn(`[FileArtifactService] deleteArtifact: Failed to delete artifact ${o}`,r)}}async listVersions({userId:e,sessionId:t,filename:o}){try{let r=xe(this.rootDir,e,t,o);return await Me(r)}catch(r){return g.warn(`[FileArtifactService] listVersions: Failed to list versions for artifact ${o}`,r),[]}}async listArtifactVersions({userId:e,sessionId:t,filename:o}){try{let r=xe(this.rootDir,e,t,o),i=await Me(r),s=[];for(let a of i){let c=x.join(ye(r),a.toString(),"metadata.json");try{let l=await Ot(c);s.push(l)}catch(l){g.warn(`[FileArtifactService] listArtifactVersions: Failed to read artifact version ${a} at ${r}`,l)}}return s}catch(r){return g.warn(`[FileArtifactService] listArtifactVersions: Failed to list artifact versions for userId: ${e} sessionId: ${t} filename: ${o}`,r),[]}}async getArtifactVersion({userId:e,sessionId:t,filename:o,version:r}){try{let i=xe(this.rootDir,e,t,o),s=await Me(i);if(s.length===0)return;let a;if(r===void 0)a=s[s.length-1];else{if(!s.includes(r))return;a=r}let c=x.join(ye(i),a.toString(),"metadata.json");return await Ot(c)}catch(i){g.warn(`[FileArtifactService] getArtifactVersion: Failed to get artifact version for userId: ${e} sessionId: ${t} filename: ${o} version: ${r}`,i);return}}},Qa=/^[a-zA-Z0-9_@-][a-zA-Z0-9_.@-]{0,255}$/;function Ci(n,e){if(!n||!Qa.test(n))throw new Error(`[FileArtifactService] Invalid ${e}: value contains disallowed characters.`)}function vi(n,e,t){let o=x.resolve(e),r=x.resolve(n);if(!r.startsWith(o+x.sep)&&r!==o)throw new Error(`[FileArtifactService] ${t} escapes storage root. Resolved: ${r}, Root: ${o}`)}function Ai(n,e){Ci(e,"userId");let t=x.join(n,"users",e);return vi(t,n,"userRoot"),t}function Za(n,e){return!n||e.startsWith(Mt)}function Ei(n){return x.join(n,"artifacts")}function xi(n,e){Ci(e,"sessionId");let t=x.join(n,"sessions",e,"artifacts");return vi(t,n,"sessionArtifactsDir"),t}function ye(n){return x.join(n,"versions")}function xe(n,e,t,o){let r=Ai(n,e),i;if(Za(t,o))i=Ei(r);else{if(!t)throw new Error("Session ID must be provided for session-scoped artifacts.");i=xi(r,t)}let s=o;if(s.startsWith(Mt)&&(s=s.substring(Mt.length)),s=s.trim(),x.isAbsolute(s))throw new Error(`Absolute artifact filename ${o} is not permitted.`);let a=x.resolve(i,s),c=x.relative(i,a);if(c.startsWith("..")||x.isAbsolute(c))throw new Error(`Artifact filename ${o} escapes storage directory.`);return c===""||c==="."?x.join(i,"artifact"):a}async function Me(n){let e=ye(n);try{return(await _.readdir(e,{withFileTypes:!0})).filter(r=>r.isDirectory()).map(r=>parseInt(r.name,10)).filter(r=>!isNaN(r)).sort((r,i)=>r-i)}catch(t){return g.warn(`[FileArtifactService] getArtifactVersionsFromDir: Failed to list artifact versions from ${n}`,t),[]}}async function ec(n,e,t,o,r){let i=await xe(n,e,t,o),s=x.basename(i),a=ye(i),c=x.join(a,r.toString(),s);return Ja(c).toString()}async function tc(n,e){await _.writeFile(n,JSON.stringify(e,null,2),"utf-8")}async function Ot(n){let e=await _.readFile(n,"utf-8");return JSON.parse(e)}async function mi(n){let e=await Me(n);if(e.length===0)return;let t=e[e.length-1],o=x.join(ye(n),t.toString(),"metadata.json");try{return await Ot(o)}catch(r){g.warn(`[FileArtifactService] getLatestMetadata: Failed to read metadata from ${o}`,r);return}}async function*Qn(n){try{let e=await _.readdir(n,{withFileTypes:!0});if(e.some(o=>o.isDirectory()&&o.name==="versions")){yield n;return}for(let o of e)if(o.isDirectory()){let r=x.join(n,o.name);for await(let i of Qn(r))yield i}}catch{}}function nc(n){try{return hi(n)}catch(e){g.warn(`[FileArtifactService] fileUriToPath: Failed to convert file URI to path: ${n}`,e);return}}function gi(n){return n.split(x.sep).join("/")}import{Storage as oc}from"@google-cloud/storage";import{createPartFromBase64 as rc,createPartFromText as ic}from"@google/genai";var ct=class{constructor(e){this.bucket=new oc().bucket(e)}async saveArtifact(e){if(!e.artifact.inlineData&&!e.artifact.text)throw new Error("Artifact must have either inlineData or text content.");let t=await this.listVersions(e),o=t.length>0?Math.max(...t)+1:0,r=this.bucket.file(at({...e,version:o})),i=e.customMetadata||{};return e.artifact.inlineData?(await r.save(Buffer.from(e.artifact.inlineData.data||"","base64"),{contentType:e.artifact.inlineData.mimeType,metadata:i}),o):(await r.save(e.artifact.text,{contentType:"text/plain",metadata:i}),o)}async loadArtifact(e){try{let t=e.version;if(t===void 0){let s=await this.listVersions(e);if(s.length===0)return;t=Math.max(...s)}let o=this.bucket.file(at({...e,version:t})),[[r],[i]]=await Promise.all([o.getMetadata(),o.download()]);return r.contentType==="text/plain"?ic(i.toString("utf-8")):rc(i.toString("base64"),r.contentType)}catch(t){g.warn(`[GcsArtifactService] loadArtifact: Failed to load artifact ${e.filename}`,t);return}}async listArtifactKeys(e){let t=`${e.appName}/${e.userId}/${e.sessionId}/`,o=`${e.appName}/${e.userId}/user/`,[[r],[i]]=await Promise.all([this.bucket.getFiles({prefix:t}),this.bucket.getFiles({prefix:o})]);return[...yi(r,t),...yi(i,o,"user:")].sort((s,a)=>s.localeCompare(a))}async deleteArtifact(e){let t=await this.listVersions(e);await Promise.all(t.map(o=>this.bucket.file(at({...e,version:o})).delete()))}async listVersions(e){let o=at(e)+"/",[r]=await this.bucket.getFiles({prefix:o}),i=[];for(let s of r){let a=s.name.split("/").pop(),c=parseInt(a,10);isNaN(c)||i.push(c)}return i.sort((s,a)=>s-a)}async listArtifactVersions(e){let t=await this.listVersions(e),o=[];for(let r of t){let i=await this.getArtifactVersion({...e,version:r});i&&o.push(i)}return o}async getArtifactVersion(e){try{let t=e.version;if(t===void 0){let i=await this.listVersions(e);if(i.length===0)return;t=Math.max(...i)}let o=this.bucket.file(at({...e,version:t})),[r]=await o.getMetadata();return{version:t,mimeType:r.contentType,customMetadata:r.metadata,canonicalUri:o.publicUrl()}}catch(t){g.warn(`[GcsArtifactService] getArtifactVersion: Failed to get artifact version for userId: ${e.userId} sessionId: ${e.sessionId} filename: ${e.filename} version: ${e.version}`,t);return}}};function at({appName:n,userId:e,sessionId:t,filename:o,version:r}){let i=o.startsWith("user:"),s=i?o.substring(5):o,a=i?`${n}/${e}/user/${s}`:`${n}/${e}/${t}/${s}`;return r!==void 0?`${a}/${r}`:a}function yi(n,e,t=""){let o=new Set;for(let r of n){if(!r.name.startsWith(e))continue;let i=r.name.substring(e.length),s=sc(i);o.add(`${t}${s}`)}return[...o]}function sc(n){let e=n.split("/");return e.length<2?n:e.slice(0,-1).join("/")}function Ti(n){return n==="memory://"}var Te=class{constructor(){this.artifacts={}}saveArtifact({appName:e,userId:t,sessionId:o,filename:r,artifact:i,customMetadata:s}){if(!i.inlineData&&!i.text)return Promise.reject(new Error("Artifact must have either inlineData or text content."));let a=Ne(e,t,o,r);this.artifacts[a]||(this.artifacts[a]=[]);let c=this.artifacts[a].length,l={version:c,customMetadata:s};return this.artifacts[a].push({part:i,metadata:l}),Promise.resolve(c)}loadArtifact({appName:e,userId:t,sessionId:o,filename:r,version:i}){let s=Ne(e,t,o,r),a=this.artifacts[s];return a?(i===void 0&&(i=a.length-1),Promise.resolve(a[i].part)):Promise.resolve(void 0)}listArtifactKeys({appName:e,userId:t,sessionId:o}){let r=`${e}/${t}/${o}/`,i=`${e}/${t}/user/`,s=[];for(let a in this.artifacts)if(a.startsWith(r)){let c=a.replace(r,"");s.push(c)}else if(a.startsWith(i)){let c=a.replace(i,"");s.push(c)}return Promise.resolve(s.sort())}deleteArtifact({appName:e,userId:t,sessionId:o,filename:r}){let i=Ne(e,t,o,r);return this.artifacts[i]&&delete this.artifacts[i],Promise.resolve()}listVersions({appName:e,userId:t,sessionId:o,filename:r}){let i=Ne(e,t,o,r),s=this.artifacts[i];if(!s)return Promise.resolve([]);let a=[];for(let c=0;c<s.length;c++)a.push(c);return Promise.resolve(a)}listArtifactVersions({appName:e,userId:t,sessionId:o,filename:r}){let i=Ne(e,t,o,r),s=this.artifacts[i];return s?Promise.resolve(s.map(a=>a.metadata)):Promise.resolve([])}getArtifactVersion({appName:e,userId:t,sessionId:o,filename:r,version:i}){let s=Ne(e,t,o,r),a=this.artifacts[s];return a?(i===void 0&&(i=a.length-1),a[i]?Promise.resolve(a[i].metadata):Promise.resolve(void 0)):Promise.resolve(void 0)}};function Ne(n,e,t,o){return ac(o)?`${n}/${e}/user/${o}`:`${n}/${e}/${t}/${o}`}function ac(n){return n.startsWith("user:")}function cc(n){if(Ti(n))return new Te;if(n.startsWith("gs://")){let e=n.split("://")[1];return new ct(e)}if(n.startsWith("file://")){let e=n.split("://")[1];return new st(e)}throw new Error(`Unsupported artifact service URI: ${n}`)}var Zn=class{constructor(e={}){this.task=e.task,this.stream=e.stream}};var eo=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(),o=this.queue.shift();t(o)}let e={close:!0};for(;this.resolveFnFifoQueue.length>0;)this.resolveFnFifoQueue.shift()(e)}sendContent(e){this.send({content:e})}sendRealtime(e){this.send({blob:e})}sendActivityStart(){this.send({activityStart:{}})}sendActivityEnd(){this.send({activityEnd:{}})}async*[Symbol.asyncIterator](){for(;;){let e=await this.get();if(yield e,e.close)break}}};var Si=(i=>(i.API_KEY="apiKey",i.HTTP="http",i.OAUTH2="oauth2",i.OPEN_ID_CONNECT="openIdConnect",i.SERVICE_ACCOUNT="serviceAccount",i))(Si||{});var lc="The following is a conversation history between a user and an AI agent. Please summarize the conversation, focusing on key information and decisions made, as well as any unresolved questions or tasks. The summary should be concise and capture the essence of the interaction.",to=class{constructor(e){this.llm=e.llm,this.prompt=e.prompt||lc}async summarize(e){var u,f,d,p,m,h;if(e.length===0)throw new Error("Cannot summarize an empty list of events.");let t=e[0].timestamp,o=e[e.length-1].timestamp,r="";for(let C=0;C<e.length;C++)r+=`[Event ${C+1} - Author: ${e[C].author}]
86
+ `,r+=`${Ue(e[C])}
86
87
 
87
- Call this function only when you are instructed to do so.`})}_getDeclaration(){return{name:this.name,description:this.description}}async runAsync({toolContext:e}){return e.actions.escalate=!0,e.actions.skipSummarization=!0,""}},ls=new st;var at=class extends N{constructor(){super({name:"google_search",description:"Google Search Tool"})}runAsync(){return Promise.resolve()}async processLlmRequest({llmRequest:e}){if(e.model){if(e.config=e.config||{},e.config.tools=e.config.tools||[],Po(e.model)){if(e.config.tools.length>0)throw new Error("Google search tool can not be used with other tools in Gemini 1.x.");e.config.tools.push({googleSearchRetrieval:{}});return}if(Io(e.model)){e.config.tools.push({googleSearch:{}});return}throw new Error(`Google search tool is not supported for model ${e.model}`)}}},us=new at;var Cr=`
88
+ `;let s={contents:[{role:"user",parts:[{text:`${this.prompt}
88
89
 
89
- NOTE: This is a long-running operation. Do not call this tool again if it has already returned some intermediate or pending status.`,An=class extends W{constructor(e){super({...e,isLongRunning:!0})}_getDeclaration(){let e=super._getDeclaration();return e.description?e.description+=Cr:e.description=Cr.trimStart(),e}};import{LockMode as ps,MikroORM as ds}from"@mikro-orm/core";import{MikroORM as Sn}from"@mikro-orm/core";import{Entity as Ue,JsonType as fs,PrimaryKey as O,Property as q}from"@mikro-orm/core";var En="schema_version",Tn="1",xn=class extends fs{convertToDatabaseValue(e){return JSON.stringify(jn(e))}convertToJSValue(e){return typeof e=="string"?ht(JSON.parse(e)):ht(e)}},j=class{};x([O({type:"string"})],j.prototype,"key",2),x([q({type:"string"})],j.prototype,"value",2),j=x([Ue({tableName:"adk_internal_metadata"})],j);var k=class{constructor(){this.updateTime=new Date}};x([O({type:"string",fieldName:"app_name"})],k.prototype,"appName",2),x([q({type:"json"})],k.prototype,"state",2),x([q({type:"datetime",fieldName:"update_time",onCreate:()=>new Date,onUpdate:()=>new Date})],k.prototype,"updateTime",2),k=x([Ue({tableName:"app_states"})],k);O.name;var I=class{constructor(){this.updateTime=new Date}};x([O({type:"string",fieldName:"app_name"})],I.prototype,"appName",2),x([O({type:"string",fieldName:"user_id"})],I.prototype,"userId",2),x([q({type:"json"})],I.prototype,"state",2),x([q({type:"datetime",fieldName:"update_time",onCreate:()=>new Date,onUpdate:()=>new Date})],I.prototype,"updateTime",2),I=x([Ue({tableName:"user_states"})],I);O.name;var b=class{constructor(){this.createTime=new Date;this.updateTime=new Date}};x([O({type:"string"})],b.prototype,"id",2),x([O({type:"string",fieldName:"app_name"})],b.prototype,"appName",2),x([O({type:"string",fieldName:"user_id"})],b.prototype,"userId",2),x([q({type:"json"})],b.prototype,"state",2),x([q({type:"datetime",fieldName:"create_time",onCreate:()=>new Date})],b.prototype,"createTime",2),x([q({type:"datetime",fieldName:"update_time",onCreate:()=>new Date})],b.prototype,"updateTime",2),b=x([Ue({tableName:"sessions"})],b);O.name;var w=class{};x([O({type:"string"})],w.prototype,"id",2),x([O({type:"string",fieldName:"app_name"})],w.prototype,"appName",2),x([O({type:"string",fieldName:"user_id"})],w.prototype,"userId",2),x([O({type:"string",fieldName:"session_id"})],w.prototype,"sessionId",2),x([q({type:"string",fieldName:"invocation_id"})],w.prototype,"invocationId",2),x([q({type:"datetime"})],w.prototype,"timestamp",2),x([q({type:xn,fieldName:"event_data"})],w.prototype,"eventData",2),w=x([Ue({tableName:"events"})],w);var Ve=[j,k,I,b,w];async function Rn(n){let e;if(n.startsWith("postgres://")||n.startsWith("postgresql://")){let{PostgreSqlDriver:c}=await Promise.resolve().then(()=>Re(Se("@mikro-orm/postgresql"),1));e=c}else if(n.startsWith("mysql://")){let{MySqlDriver:c}=await Promise.resolve().then(()=>Re(Se("@mikro-orm/mysql"),1));e=c}else if(n.startsWith("mariadb://")){let{MariaDbDriver:c}=await Promise.resolve().then(()=>Re(Se("@mikro-orm/mariadb"),1));e=c}else if(n.startsWith("sqlite://")){let{SqliteDriver:c}=await Promise.resolve().then(()=>Re(Se("@mikro-orm/sqlite"),1));e=c}else if(n.startsWith("mssql://")){let{MsSqlDriver:c}=await Promise.resolve().then(()=>Re(Se("@mikro-orm/mssql"),1));e=c}else throw new Error(`Unsupported database URI: ${n}`);if(n==="sqlite://:memory:")return{entities:Ve,dbName:":memory:",driver:e};let{host:t,port:o,username:r,password:i,pathname:s}=new URL(n),a=t.split(":")[0];return{entities:Ve,dbName:s.slice(1),host:a,port:o?parseInt(o):void 0,user:r,password:i,driver:e}}async function yr(n){let e;n instanceof Sn?e=n:typeof n=="string"?e=await Sn.init(await Rn(n)):e=await Sn.init(n),await e.schema.ensureDatabase(),await e.schema.updateSchema()}async function Ar(n){let e=n.em.fork(),t=await e.findOne(j,{key:En});if(t){if(t.value!==Tn)throw new Error(`ADK Database schema version ${t.value} is not compatible.`);return}let o=e.create(j,{key:En,value:Tn});await e.persist(o).flush()}function xr(n){return n?n.startsWith("postgres://")||n.startsWith("postgresql://")||n.startsWith("mysql://")||n.startsWith("mariadb://")||n.startsWith("mssql://")||n.startsWith("sqlite://"):!1}var je=class extends ge{constructor(t){super();this.initialized=!1;if(typeof t=="string")this.connectionString=t;else{if(!t.driver)throw new Error("Driver is required when passing options object.");this.options={...t,entities:Ve}}}async init(){this.initialized||(this.connectionString&&(!this.options||!this.options.driver)&&(this.options=await Rn(this.connectionString)),this.orm=await ds.init(this.options),await yr(this.orm),await Ar(this.orm),this.initialized=!0)}async createSession({appName:t,userId:o,state:r,sessionId:i}){await this.init();let s=this.orm.em.fork(),a=i||Z(),c=new Date;if(await s.findOne(b,{id:a,appName:t,userId:o}))throw new Error(`Session with id ${a} already exists.`);let u=await s.findOne(k,{appName:t});u||(u=s.create(k,{appName:t,state:{},updateTime:c}),s.persist(u));let f=await s.findOne(I,{appName:t,userId:o});f||(f=s.create(I,{appName:t,userId:o,state:{}}),s.persist(f));let p={},d={},g={};if(r)for(let[T,M]of Object.entries(r))T.startsWith(v.APP_PREFIX)?p[T.replace(v.APP_PREFIX,"")]=M:T.startsWith(v.USER_PREFIX)?d[T.replace(v.USER_PREFIX,"")]=M:g[T]=M;Object.keys(p).length>0&&(u.state={...u.state,...p}),Object.keys(d).length>0&&(f.state={...f.state,...d});let C=s.create(b,{id:a,appName:t,userId:o,state:g,createTime:c,updateTime:c});s.persist(C),await s.flush();let h=H(u.state,f.state,g);return te({id:a,appName:t,userId:o,state:h,events:[],lastUpdateTime:C.createTime.getTime()})}async getSession({appName:t,userId:o,sessionId:r,config:i}){await this.init();let s=this.orm.em.fork(),a=await s.findOne(b,{appName:t,userId:o,id:r});if(!a)return;let c={appName:t,userId:o,sessionId:r};i!=null&&i.afterTimestamp&&(c.timestamp={$gt:new Date(i.afterTimestamp)});let l=await s.find(w,c,{orderBy:{timestamp:"DESC"},limit:i==null?void 0:i.numRecentEvents});l.reverse();let u=await s.findOne(k,{appName:t}),f=await s.findOne(I,{appName:t,userId:o}),p=H((u==null?void 0:u.state)||{},(f==null?void 0:f.state)||{},a.state);return te({id:r,appName:t,userId:o,state:p,events:l.map(d=>d.eventData),lastUpdateTime:a.updateTime.getTime()})}async listSessions({appName:t,userId:o}){await this.init();let r=this.orm.em.fork(),i={appName:t};o&&(i.userId=o);let s=await r.find(b,i),a=await r.findOne(k,{appName:t}),c=(a==null?void 0:a.state)||{},l={};if(o){let f=await r.findOne(I,{appName:t,userId:o});f&&(l[o]=f.state)}else{let f=await r.find(I,{appName:t});for(let p of f)l[p.userId]=p.state}return{sessions:s.map(f=>{let p=l[f.userId]||{},d=H(c,p,f.state);return te({id:f.id,appName:f.appName,userId:f.userId,state:d,events:[],lastUpdateTime:f.updateTime.getTime()})})}}async deleteSession({appName:t,userId:o,sessionId:r}){await this.init();let i=this.orm.em.fork();await i.nativeDelete(b,{appName:t,userId:o,id:r}),await i.nativeDelete(w,{appName:t,userId:o,sessionId:r})}async appendEvent({session:t,event:o}){await this.init();let r=this.orm.em.fork();if(o.partial)return o;let i=gn(o);return await r.transactional(async s=>{let a=await s.findOne(b,{appName:t.appName,userId:t.userId,id:t.id},{lockMode:ps.PESSIMISTIC_WRITE});if(!a)throw new Error(`Session ${t.id} not found for appendEvent`);let c=await s.findOne(k,{appName:t.appName});c||(c=s.create(k,{appName:t.appName,state:{},updateTime:new Date}),s.persist(c));let l=await s.findOne(I,{appName:t.appName,userId:t.userId});if(l||(l=s.create(I,{appName:t.appName,userId:t.userId,state:{}}),s.persist(l)),a.updateTime.getTime()>t.lastUpdateTime){let p=await s.find(w,{appName:t.appName,userId:t.userId,sessionId:t.id},{orderBy:{timestamp:"ASC"}}),d=H(c.state,l.state,a.state);t.state=d,t.events=p.map(g=>g.eventData)}if(o.actions&&o.actions.stateDelta){let p={},d={},g={};for(let[C,h]of Object.entries(o.actions.stateDelta))C.startsWith(v.APP_PREFIX)?p[C.replace(v.APP_PREFIX,"")]=h:C.startsWith(v.USER_PREFIX)?d[C.replace(v.USER_PREFIX,"")]=h:g[C]=h;Object.keys(p).length>0&&(c.state={...c.state,...p}),Object.keys(d).length>0&&(l.state={...l.state,...d}),Object.keys(g).length>0&&(a.state={...a.state,...g})}let u=s.create(w,{id:i.id,appName:t.appName,userId:t.userId,sessionId:t.id,invocationId:i.invocationId,timestamp:new Date(i.timestamp),eventData:i});s.persist(u),await s.commit(),a.updateTime=new Date(o.timestamp);let f=H(c.state,l.state,a.state);t.state=f,t.events.push(o),t.lastUpdateTime=a.updateTime.getTime()}),o}};function ms(n){if(mr(n))return new X;if(xr(n))return new je(n);throw new Error(`Unsupported session service URI: ${n}`)}import{MetricExporter as gs}from"@google-cloud/opentelemetry-cloud-monitoring-exporter";import{TraceExporter as hs}from"@google-cloud/opentelemetry-cloud-trace-exporter";import{gcpDetector as vs}from"@opentelemetry/resource-detector-gcp";import{detectResources as Cs}from"@opentelemetry/resources";import{PeriodicExportingMetricReader as ys}from"@opentelemetry/sdk-metrics";import{BatchSpanProcessor as As}from"@opentelemetry/sdk-trace-base";import{GoogleAuth as xs}from"google-auth-library";var Es="Cannot determine GCP Project. OTel GCP Exporters cannot be set up. Please make sure to log into correct GCP Project.";async function Ts(){try{return await new xs().getProjectId()||void 0}catch{return}}async function Em(n={}){let{enableTracing:e=!1,enableMetrics:t=!1}=n,o=await Ts();return o?{spanProcessors:e?[new As(new hs({projectId:o}))]:[],metricReaders:t?[new ys({exporter:new gs({projectId:o}),exportIntervalMillis:5e3})]:[],logRecordProcessors:[]}:(m.warn(Es),{})}function Tm(){return Cs({detectors:[vs]})}import{metrics as Ss,trace as Rs}from"@opentelemetry/api";import{logs as bs}from"@opentelemetry/api-logs";import{OTLPLogExporter as ws}from"@opentelemetry/exporter-logs-otlp-http";import{OTLPMetricExporter as Is}from"@opentelemetry/exporter-metrics-otlp-http";import{OTLPTraceExporter as Ps}from"@opentelemetry/exporter-trace-otlp-http";import{detectResources as Ls}from"@opentelemetry/resources";import{BatchLogRecordProcessor as _s,LoggerProvider as ks}from"@opentelemetry/sdk-logs";import{MeterProvider as Os,PeriodicExportingMetricReader as Ms}from"@opentelemetry/sdk-metrics";import{BatchSpanProcessor as Ns}from"@opentelemetry/sdk-trace-base";import{NodeTracerProvider as Bs}from"@opentelemetry/sdk-trace-node";function $m(n=[],e){let t=e||Ds(),o=[...n,$s()],r=o.flatMap(a=>a.spanProcessors||[]),i=o.flatMap(a=>a.metricReaders||[]),s=o.flatMap(a=>a.logRecordProcessors||[]);if(r.length>0){let a=new Bs({resource:t,spanProcessors:r});a.register(),Rs.setGlobalTracerProvider(a)}if(i.length>0){let a=new Os({readers:i,resource:t});Ss.setGlobalMeterProvider(a)}if(s.length>0){let a=new ks({resource:t,processors:s});bs.setGlobalLoggerProvider(a)}}function Ds(){return Ls({detectors:[]})}function Fs(){return{enableTracing:!!(process.env.OTEL_EXPORTER_OTLP_ENDPOINT||process.env.OTEL_EXPORTER_OTLP_TRACES_ENDPOINT),enableMetrics:!!(process.env.OTEL_EXPORTER_OTLP_ENDPOINT||process.env.OTEL_EXPORTER_OTLP_METRICS_ENDPOINT),enableLogging:!!(process.env.OTEL_EXPORTER_OTLP_ENDPOINT||process.env.OTEL_EXPORTER_OTLP_LOGS_ENDPOINT)}}function $s(n=Fs()){let{enableTracing:e,enableMetrics:t,enableLogging:o}=n;return{spanProcessors:e?[new Ns(new Ps)]:[],metricReaders:t?[new Ms({exporter:new Is})]:[],logRecordProcessors:o?[new _s(new ws)]:[]}}import{Client as Gs}from"@modelcontextprotocol/sdk/client/index.js";import{StdioClientTransport as qs}from"@modelcontextprotocol/sdk/client/stdio.js";import{StreamableHTTPClientTransport as Us}from"@modelcontextprotocol/sdk/client/streamableHttp.js";var ct=class{constructor(e){this.connectionParams=e}async createSession(){var t;let e=new Gs({name:"MCPClient",version:"1.0.0"});switch(this.connectionParams.type){case"StdioConnectionParams":await e.connect(new qs(this.connectionParams.serverParams));break;case"StreamableHTTPConnectionParams":{let o=(t=this.connectionParams.transportOptions)!=null?t:{};!o.requestInit&&this.connectionParams.header!==void 0&&(o.requestInit={headers:this.connectionParams.header}),await e.connect(new Us(new URL(this.connectionParams.url),o));break}default:{let o=this.connectionParams;break}}return e}};import{Type as z}from"@google/genai";import{z as Te}from"zod";var Ym=Te.object({type:Te.literal("object"),properties:Te.record(Te.string(),Te.unknown()).optional(),required:Te.string().array().optional()});function Vs(n){if(!n)return z.TYPE_UNSPECIFIED;switch(n.toLowerCase()){case"text":case"string":return z.STRING;case"number":return z.NUMBER;case"boolean":return z.BOOLEAN;case"integer":return z.INTEGER;case"array":return z.ARRAY;case"object":return z.OBJECT;default:return z.TYPE_UNSPECIFIED}}function bn(n){if(!n)return;function e(t){if(!t.type&&t.anyOf&&Array.isArray(t.anyOf)){let i=t.anyOf.find(s=>{let a=s.type;return a!=="null"&&a!=="NULL"});i&&(t=i)}t.type||(t.properties||t.$ref?t.type="object":t.items&&(t.type="array"));let o=Vs(t.type),r={type:o,description:t.description};if(o===z.OBJECT){if(r.properties={},t.properties)for(let i in t.properties)r.properties[i]=e(t.properties[i]);r.required=t.required}else o===z.ARRAY&&t.items&&(r.items=e(t.items));return r}return e(n)}var lt=class extends N{constructor(e,t){super({name:e.name,description:e.description||""}),this.mcpTool=e,this.mcpSessionManager=t}_getDeclaration(){return{name:this.mcpTool.name,description:this.mcpTool.description,parameters:bn(this.mcpTool.inputSchema),response:bn(this.mcpTool.outputSchema)}}async runAsync(e){let t=await this.mcpSessionManager.createSession(),o={};return o.params={name:this.mcpTool.name,arguments:e.args},await t.callTool(o.params)}};var Er=class extends qe{constructor(e,t=[],o){super(t,o),this.mcpSessionManager=new ct(e)}async getTools(){let t=await(await this.mcpSessionManager.createSession()).listTools();m.debug(`number of tools: ${t.tools.length}`);for(let o of t.tools)m.debug(`tool: ${o.name}`);return t.tools.map(o=>{let r={...o,name:this.prefix?`${this.prefix}_${o.name}`:o.name};return new lt(r,this.mcpSessionManager)})}async close(){}};export{mt as ActiveStreamingTool,Cn as AgentTool,xe as ApigeeLlm,sr as AuthCredentialTypes,G as BaseAgent,Me as BaseCodeExecutor,fn as BaseExampleProvider,Ae as BaseLlm,_ as BaseLlmRequestProcessor,Nt as BaseLlmResponseProcessor,me as BasePlugin,ge as BaseSessionService,N as BaseTool,qe as BaseToolset,Be as BuiltInCodeExecutor,L as Context,je as DatabaseSessionService,ls as EXIT_LOOP,ar as EventType,st as ExitLoopTool,be as FileArtifactService,W as FunctionTool,us as GOOGLE_SEARCH,Ie as GcsArtifactService,ee as Gemini,Qe as GoogleLLMVariant,at as GoogleSearchTool,re as InMemoryArtifactService,de as InMemoryMemoryService,ot as InMemoryPolicyEngine,hn as InMemoryRunner,X as InMemorySessionService,K as InvocationContext,ae as LLMRegistry,Rt as LiveRequestQueue,tn as LlmAgent,Ln as LogLevel,pn as LoggingPlugin,An as LongRunningFunctionTool,on as LoopAgent,ct as MCPSessionManager,lt as MCPTool,Er as MCPToolset,sn as ParallelAgent,Ge as PluginManager,pr as PolicyOutcome,fr as REQUEST_CONFIRMATION_FUNCTION_CALL_NAME,P as ReadonlyContext,he as Runner,mn as SecurityPlugin,ln as SequentialAgent,v as State,Zt as StreamingMode,se as ToolConfirmation,E as createEvent,U as createEventActions,te as createSession,oi as functionsExportedForTestingOnly,et as geminiInitParams,qr as getArtifactServiceFromUri,ts as getAskUserConfirmationFunctionCalls,R as getFunctionCalls,B as getFunctionResponses,Em as getGcpExporters,Tm as getGcpResource,Pr as getLogger,ms as getSessionServiceFromUri,Vn as hasTrailingCodeExecutionResult,as as isAgentTool,Qr as isBaseAgent,Qi as isBaseExampleProvider,wt as isBaseLlm,kt as isBaseTool,cs as isBaseToolset,Q as isFinalResponse,Ti as isFunctionTool,Ne as isGemini2OrAbove,A as isLlmAgent,Ki as isLoopAgent,Wi as isParallelAgent,Yi as isSequentialAgent,$m as maybeSetOtelProviders,H as mergeStates,Lr as setLogLevel,Ir as setLogger,jr as stringifyContent,Ji as toStructuredEvents,gn as trimTempDeltaState,Pe as version,Ee as zodObjectToSchema};
90
+ ${r}`}]}],toolsDict:{},liveConnectConfig:{}},a=this.llm.generateContentAsync(s,!1),c="",l=await a.next();if(l.done||!((d=(f=(u=l.value.content)==null?void 0:u.parts)==null?void 0:f[0])!=null&&d.text))throw new Error("LLM failed to return a valid summary.");c+=l.value.content.parts[0].text;for await(let C of a)(h=(m=(p=C.content)==null?void 0:p.parts)==null?void 0:m[0])!=null&&h.text&&(c+=C.content.parts[0].text);return Or({author:"system",content:{role:"model",parts:[{text:c}]},startTime:t,endTime:o,compactedContent:c})}};var no=class{constructor(e){this.tokenThreshold=e.tokenThreshold,this.eventRetentionSize=e.eventRetentionSize,this.summarizer=e.summarizer}getActiveEvents(e){let t;for(let r=e.length-1;r>=0;r--){let i=e[r];H(i)&&(!t||i.endTime>t.endTime)&&(t=i)}if(!t)return e;let o=e.filter(r=>!H(r)&&r.timestamp>t.endTime);return[t,...o]}shouldCompact(e){let t=e.session.events,o=this.getActiveEvents(t);if(o.filter(s=>!H(s)).length<=this.eventRetentionSize)return!1;let i=0;for(let s of o)i+=uc(s);return i>this.tokenThreshold}async compact(e){let t=e.session.events,o=this.getActiveEvents(t),r=o.filter(u=>!H(u));if(r.length<=this.eventRetentionSize)return;let i=Math.max(0,r.length-this.eventRetentionSize);for(;i>0;){let u=r[i],f=r[i-1];if(dc(u)&&fc(f))i--;else break}if(i===0)return;let s=r.slice(0,i),a=o.find(H),c=a?[a,...s]:s,l=await this.summarizer.summarize(c);l.actions||(l.actions={stateDelta:{},artifactDelta:{},requestedAuthConfigs:[],requestedToolConfirmations:{}}),e.session.events.push(l)}};function uc(n){var t;if(((t=n.usageMetadata)==null?void 0:t.promptTokenCount)!==void 0)return n.usageMetadata.promptTokenCount;let e=Ue(n);return Math.ceil(e.length/4)}function fc(n){var e,t;return!!((t=(e=n.content)==null?void 0:e.parts)!=null&&t.some(o=>o.functionCall!==void 0))}function dc(n){var e,t;return!!((t=(e=n.content)==null?void 0:e.parts)!=null&&t.some(o=>o.functionResponse!==void 0))}var oo=class{constructor(e){var t;this.threshold=e.threshold,this.preserveLeadingEvents=(t=e.preserveLeadingEvents)!=null?t:0}shouldCompact(e){return e.session.events.length>this.threshold+Math.max(0,this.preserveLeadingEvents)}compact(e){let t=e.session.events,o=t.length-this.threshold-Math.max(0,this.preserveLeadingEvents);if(o<=0)return;let r=Math.max(0,this.preserveLeadingEvents);t.splice(r,o)}};import{isEmpty as lt}from"lodash-es";var Ri=(u=>(u.THOUGHT="thought",u.CONTENT="content",u.TOOL_CALL="tool_call",u.TOOL_RESULT="tool_result",u.CALL_CODE="call_code",u.CODE_RESULT="code_result",u.ERROR="error",u.ACTIVITY="activity",u.TOOL_CONFIRMATION="tool_confirmation",u.FINISHED="finished",u))(Ri||{});function pc(n){var t,o;let e=[];if(n.errorCode)return e.push({type:"error",error:new Error(n.errorMessage||n.errorCode)}),e;for(let r of(o=(t=n.content)==null?void 0:t.parts)!=null?o:[])r.functionCall&&!lt(r.functionCall)?e.push({type:"tool_call",call:r.functionCall}):r.functionResponse&&!lt(r.functionResponse)?e.push({type:"tool_result",result:r.functionResponse}):r.executableCode&&!lt(r.executableCode)?e.push({type:"call_code",code:r.executableCode}):r.codeExecutionResult&&!lt(r.codeExecutionResult)?e.push({type:"code_result",result:r.codeExecutionResult}):r.text&&(r.thought?e.push({type:"thought",content:r.text}):e.push({type:"content",content:r.text}));return n.actions.requestedToolConfirmations&&!lt(n.actions.requestedToolConfirmations)&&e.push({type:"tool_confirmation",confirmations:n.actions.requestedToolConfirmations}),ae(n)&&e.push({type:"finished",output:void 0}),e}var ro=Symbol.for("google.adk.baseExampleProvider");function mc(n){return typeof n=="object"&&n!==null&&ro in n&&n[ro]===!0}var Ii;Ii=ro;var io=class{constructor(){this[Ii]=!0}};var Se=class{constructor(){this.memories=[];this.sessionEvents={}}async addSessionToMemory(e){let t=wi(e.appName,e.userId);this.sessionEvents[t]||(this.sessionEvents[t]={}),this.sessionEvents[t][e.id]=e.events.filter(o=>{var r,i,s;return((s=(i=(r=o.content)==null?void 0:r.parts)==null?void 0:i.length)!=null?s:0)>0})}async searchMemory(e){var i,s;let t=wi(e.appName,e.userId);if(!this.sessionEvents[t])return Promise.resolve({memories:[]});let o=e.query.toLowerCase().split(/\s+/),r={memories:[]};for(let a of Object.values(this.sessionEvents[t]))for(let c of a){if(!((s=(i=c.content)==null?void 0:i.parts)!=null&&s.length))continue;let l=c.content.parts.map(d=>d.text).filter(d=>!!d).join(" "),u=gc(l);if(!u.size)continue;o.some(d=>u.has(d))&&r.memories.push({content:c.content,author:c.author,timestamp:hc(c.timestamp)})}return r}};function wi(n,e){return`${n}/${e}`}function gc(n){return new Set([...n.matchAll(/[A-Za-z]+/g)].map(e=>e[0].toLowerCase()))}function hc(n){return new Date(n).toISOString()}var Re=class{constructor(e){this.name=e}async onUserMessageCallback(e){}async beforeRunCallback(e){}async onEventCallback(e){}async afterRunCallback(e){}async beforeAgentCallback(e){}async afterAgentCallback(e){}async beforeModelCallback(e){}async afterModelCallback(e){}async onModelErrorCallback(e){}async beforeToolCallback(e){}async afterToolCallback(e){}async onToolErrorCallback(e){}};var so=class extends Re{constructor(e="logging_plugin"){super(e)}async onUserMessageCallback({invocationContext:e,userMessage:t}){var o;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: ${(o=e.agent.name)!=null?o:"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({event:e}){this.log("\u{1F4E2} EVENT YIELDED"),this.log(` Event ID: ${e.id}`),this.log(` Author: ${e.author}`),this.log(` Content: ${this.formatContent(e.content)}`),this.log(` Final Response: ${ae(e)}`);let t=I(e);if(t.length>0){let r=t.map(i=>i.name);this.log(` Function Calls: ${r}`)}let o=V(e);if(o.length>0){let r=o.map(i=>i.name);this.log(` Function Responses: ${r}`)}e.longRunningToolIds&&e.longRunningToolIds.length>0&&this.log(` Long Running Tools: ${[...e.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({callbackContext:e}){this.log("\u{1F916} AGENT STARTING"),this.log(` Agent Name: ${e.agentName}`),this.log(` Invocation ID: ${e.invocationId}`),e.invocationContext.branch&&this.log(` Branch: ${e.invocationContext.branch}`)}async afterAgentCallback({callbackContext:e}){this.log("\u{1F916} AGENT COMPLETED"),this.log(` Agent Name: ${e.agentName}`),this.log(` Invocation ID: ${e.invocationId}`)}async beforeModelCallback({callbackContext:e,llmRequest:t}){var o;if(this.log("\u{1F9E0} LLM REQUEST"),this.log(` Model: ${(o=t.model)!=null?o:"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:o}){this.log("\u{1F527} TOOL STARTING"),this.log(` Tool Name: ${e.name}`),this.log(` Agent: ${o.agentName}`),this.log(` Function Call ID: ${o.functionCallId}`),this.log(` Arguments: ${this.formatArgs(t)}`)}async afterToolCallback({tool:e,toolContext:t,result:o}){this.log("\u{1F527} TOOL COMPLETED"),this.log(` Tool Name: ${e.name}`),this.log(` Agent: ${t.agentName}`),this.log(` Function Call ID: ${t.functionCallId}`),this.log(` Result: ${this.formatArgs(o)}`)}async onModelErrorCallback({callbackContext:e,error:t}){this.log("\u{1F9E0} LLM ERROR"),this.log(` Agent: ${e.agentName}`),this.log(` Error: ${t}`)}async onToolErrorCallback({tool:e,toolArgs:t,toolContext:o,error:r}){this.log("\u{1F527} TOOL ERROR"),this.log(` Tool Name: ${e.name}`),this.log(` Agent: ${o.agentName}`),this.log(` Function Call ID: ${o.functionCallId}`),this.log(` Arguments: ${this.formatArgs(t)}`),this.log(` Error: ${r}`)}log(e){let t=`\x1B[90m[${this.name}] ${e}\x1B[0m`;g.info(t)}formatContent(e,t=200){if(!e||!e.parts)return"None";let o=[];for(let r of e.parts)if(r.text){let i=r.text.trim();i.length>t&&(i=i.substring(0,t)+"..."),o.push(`text: '${i}'`)}else r.functionCall?o.push(`function_call: ${r.functionCall.name}`):r.functionResponse?o.push(`function_response: ${r.functionResponse.name}`):r.codeExecutionResult?o.push("code_execution_result"):o.push("other_part");return o.join(" | ")}formatArgs(e,t=300){if(!e)return"{}";let o=JSON.stringify(e);return o.length>t&&(o=o.substring(0,t)+"...}"),o}};var ki="adk_request_confirmation",ao="orcas_tool_call_security_check_states",bi="This tool call needs external confirmation before completion.",Pi=(o=>(o.DENY="DENY",o.CONFIRM="CONFIRM",o.ALLOW="ALLOW",o))(Pi||{}),Nt=class{async evaluate(){return Promise.resolve({outcome:"ALLOW",reason:"For prototyping purpose, all tool calls are allowed."})}},co=class extends Re{constructor(e){var t;super("security_plugin"),this.policyEngine=(t=e==null?void 0:e.policyEngine)!=null?t:new Nt}async beforeToolCallback({tool:e,toolArgs:t,toolContext:o}){let r=this.getToolCallCheckState(o);if(!r)return this.checkToolCallPolicy({tool:e,toolArgs:t,toolContext:o});if(r==="CONFIRM"){if(!o.toolConfirmation)return{partial:bi};if(this.setToolCallCheckState(o,o.toolConfirmation),!o.toolConfirmation.confirmed)return{error:"Tool call rejected from confirmation flow."};o.toolConfirmation=void 0}}getToolCallCheckState(e){var r;let{functionCallId:t}=e;return t?((r=e.state.get(ao))!=null?r:{})[t]:void 0}setToolCallCheckState(e,t){var i;let{functionCallId:o}=e;if(!o)return;let r=(i=e.state.get(ao))!=null?i:{};r[o]=t,e.state.set(ao,r)}async checkToolCallPolicy({tool:e,toolArgs:t,toolContext:o}){let r=await this.policyEngine.evaluate({tool:e,toolArgs:t});switch(this.setToolCallCheckState(o,r.outcome),r.outcome){case"DENY":return{error:`This tool call is rejected by policy engine. Reason: ${r.reason}`};case"CONFIRM":return o.requestConfirmation({hint:`Policy engine requires confirmation calling tool: ${e.name}. Reason: ${r.reason}`}),{partial:bi};case"ALLOW":return;default:return}}};function Cc(n){if(!n.content||!n.content.parts)return[];let e=[];for(let t of n.content.parts)t&&t.functionCall&&t.functionCall.name===ki&&e.push(t.functionCall);return e}var lo=class extends re{constructor({agent:e,appName:t="InMemoryRunner",plugins:o=[]}){super({appName:t,agent:e,plugins:o,artifactService:new Te,sessionService:new X,memoryService:new Se})}};import{Type as Bt}from"@google/genai";var Dt=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(){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)}listArtifactVersions(e){if(!this.toolContext.invocationContext.artifactService)throw new Error("Artifact service is not initialized.");return this.toolContext.invocationContext.artifactService.listArtifactVersions(e)}getArtifactVersion(e){if(!this.toolContext.invocationContext.artifactService)throw new Error("Artifact service is not initialized.");return this.toolContext.invocationContext.artifactService.getArtifactVersion(e)}};var uo=Symbol.for("google.adk.agentTool");function vc(n){return typeof n=="object"&&n!==null&&uo in n&&n[uo]===!0}var _i,Li,fo=class extends(Li=P,_i=uo,Li){constructor(t){super({name:t.agent.name,description:t.agent.description||""});this[_i]=!0;this.agent=t.agent,this.skipSummarization=t.skipSummarization||!1}_getDeclaration(){let t;if(y(this.agent)&&this.agent.inputSchema?t={name:this.name,description:this.description,parameters:this.agent.inputSchema}:t={name:this.name,description:this.description,parameters:{type:Bt.OBJECT,properties:{request:{type:Bt.STRING}},required:["request"]}},this.apiVariant!=="GEMINI_API"){let o=y(this.agent)&&this.agent.outputSchema;t.response=o?{type:Bt.OBJECT}:{type:Bt.STRING}}return t}async runAsync({args:t,toolContext:o}){var f,d,p,m;this.skipSummarization&&(o.actions.skipSummarization=!0);let i={role:"user",parts:[{text:y(this.agent)&&this.agent.inputSchema?JSON.stringify(t):t.request}]},s=new re({appName:this.agent.name,agent:this.agent,artifactService:new Dt(o),sessionService:(f=o.invocationContext.sessionService)!=null?f:new X,memoryService:(d=o.invocationContext.memoryService)!=null?d:new Se,credentialService:o.invocationContext.credentialService}),a=await s.sessionService.createSession({appName:this.agent.name,userId:o.invocationContext.userId,sessionId:o.invocationContext.session.id,state:o.state.toRecord()}),c;for await(let h of s.runAsync({userId:a.userId,sessionId:a.id,newMessage:i}))h.actions.stateDelta&&o.state.update(h.actions.stateDelta),c=h;if(!((m=(p=c==null?void 0:c.content)==null?void 0:p.parts)!=null&&m.length))return"";let l=y(this.agent)&&this.agent.outputSchema,u=c.content.parts.map(h=>h.text).filter(h=>h).join(`
91
+ `);return l?JSON.parse(u):u}};var Ft=class extends P{constructor(){super({name:"exit_loop",description:`Exits the loop.
92
+
93
+ Call this function only when you are instructed to do so.`})}_getDeclaration(){return{name:this.name,description:this.description}}async runAsync({toolContext:e}){return e.actions.escalate=!0,e.actions.skipSummarization=!0,""}},Ac=new Ft;var Ut=class extends P{constructor(){super({name:"google_search",description:"Google Search Tool"})}runAsync(){return Promise.resolve()}async processLlmRequest({llmRequest:e}){if(e.model){if(e.config=e.config||{},e.config.tools=e.config.tools||[],yr(e.model)){if(e.config.tools.length>0)throw new Error("Google search tool can not be used with other tools in Gemini 1.x.");e.config.tools.push({googleSearchRetrieval:{}});return}if(xr(e.model)){e.config.tools.push({googleSearch:{}});return}throw new Error(`Google search tool is not supported for model ${e.model}`)}}},Ec=new Ut;import{Type as po}from"@google/genai";var xc=en(),yc=["image/","audio/","video/"],Tc=new Set(["application/pdf"]),Sc=new Set(["application/csv","application/json","application/xml"]);function Oi(n){if(n)return n.split(";")[0].trim()}function Rc(n){let e=Oi(n);return e?yc.some(t=>e.startsWith(t))||Tc.has(e):!1}function Ic(n,e){let t=n.inlineData;if(!t||Rc(t.mimeType))return n;let o=Oi(t.mimeType)||"application/octet-stream",r=t.data;if(!r)return{text:`[Artifact: ${e}, type: ${o}. No inline data was provided.]`};let i=o.startsWith("text/")||Sc.has(o),s=Buffer.from(r,"base64");if(i)try{return{text:s.toString("utf8")}}catch{}let a=s.length/1024;return{text:`[Binary artifact: ${e}, type: ${o}, size: ${a.toFixed(1)} KB. Content cannot be displayed inline.]`}}var $t=class extends P{constructor(){super({name:"load_artifacts",description:`Loads artifacts into the session for this request.
94
+
95
+ NOTE: Call when you need access to artifacts (for example, uploads saved by the web UI).`})}_getDeclaration(){return{name:this.name,description:this.description,parameters:{type:po.OBJECT,properties:{artifact_names:{type:po.ARRAY,items:{type:po.STRING},description:"The names of the artifacts to load."}}}}}async runAsync({args:e}){return{artifact_names:e.artifact_names||[],status:"artifact contents temporarily inserted and removed. to access these artifacts, call load_artifacts tool again."}}async processLlmRequest(e){await super.processLlmRequest(e),await this.appendArtifactsToLlmRequest(e.toolContext,e.llmRequest)}async appendArtifactsToLlmRequest(e,t){if(!e.invocationContext.artifactService)return;let o=await e.listArtifacts();if(!o||o.length===0)return;q(t,[`You have a list of artifacts:
96
+ ${JSON.stringify(o)}
97
+
98
+ When the user asks questions about any of the artifacts, you should call the
99
+ \`load_artifacts\` function to load the artifact. Always call load_artifacts
100
+ before answering questions related to the artifacts, regardless of whether the
101
+ artifacts have been loaded before. Do not depend on prior answers about the
102
+ artifacts.`]);let r=t.contents;if(r&&r.length>0){let i=r[r.length-1];if(i.role==="user"&&i.parts&&i.parts.length>0){let a=i.parts[0].functionResponse;if(a&&a.name==="load_artifacts"){let l=(a.response||{}).artifact_names||[];for(let u of l){let f=await e.loadArtifact(u);if(!f&&!u.startsWith("user:")){let p=`user:${u}`;f=await e.loadArtifact(p)}if(!f){xc.warn(`Artifact "${u}" not found, skipping`);continue}let d=Ic(f,u);t.contents.push({role:"user",parts:[{text:`Artifact ${u} is:`},d]})}}}}}},wc=new $t;import{Type as Mi}from"@google/genai";var Gt=class extends P{constructor(){super({name:"load_memory",description:`Loads the memory for the current user.
103
+
104
+ NOTE: Currently this tool only uses text part from the memory.`})}_getDeclaration(){return{name:this.name,description:this.description,parameters:{type:Mi.OBJECT,properties:{query:{type:Mi.STRING,description:"The query to load the memory for."}},required:["query"]}}}async runAsync({args:e,toolContext:t}){try{let o=e.query;if(!t.invocationContext.memoryService)throw new Error("Memory service is not initialized.");return{memories:(await t.searchMemory(o)).memories.map(i=>{var s,a;return{content:(a=(s=i.content.parts)==null?void 0:s.map(c=>{var l;return(l=c.text)!=null?l:""}).join(" "))!=null?a:"",author:i.author,timestamp:i.timestamp}})}}catch(o){throw console.error("ERROR in LoadMemoryTool runAsync:",o),o}}async processLlmRequest(e){await super.processLlmRequest(e),e.toolContext.invocationContext.memoryService&&q(e.llmRequest,[`You have memory. You can use it to answer questions. If any questions need
105
+ you to look up the memory, you should call load_memory function with a query.`])}},bc=new Gt;var Ni=`
106
+
107
+ NOTE: This is a long-running operation. Do not call this tool again if it has already returned some intermediate or pending status.`,mo=class extends oe{constructor(e){super({...e,isLongRunning:!0})}_getDeclaration(){let e=super._getDeclaration();return e.description?e.description+=Ni:e.description=Ni.trimStart(),e}};var qt=class extends P{constructor(){super({name:"preload_memory",description:"preload_memory"})}async runAsync({args:e,toolContext:t}){throw new Error("PreloadMemoryTool should not be called by model")}async processLlmRequest(e){var c,l,u;await super.processLlmRequest(e);let t=e.toolContext.userContent;if(!t||!t.parts||!((c=t.parts[0])!=null&&c.text))return;let o=t.parts[0].text,r;try{if(!e.toolContext.invocationContext.memoryService)return;r=await e.toolContext.searchMemory(o)}catch{g.warn(`Failed to preload memory for query: ${o}`);return}if(!r.memories||r.memories.length===0)return;let i=[];for(let f of r.memories){let d=f.timestamp?`Time: ${f.timestamp}`:"";d&&i.push(d);let p=(u=(l=f.content.parts)==null?void 0:l.map(m=>{var h;return(h=m.text)!=null?h:""}).join(" "))!=null?u:"";p&&i.push(f.author?`${f.author}: ${p}`:p)}if(i.length===0)return;let a=`The following content is from your previous conversations with the user.
108
+ They may be useful for answering the user's current query.
109
+ <PAST_CONVERSATIONS>
110
+ ${i.join(`
111
+ `)}
112
+ </PAST_CONVERSATIONS>
113
+ `;q(e.llmRequest,[a])}},kc=new qt;import{LockMode as _c,MikroORM as Lc}from"@mikro-orm/core";import{Entity as ut,JsonType as Pc,PrimaryKey as U,Property as Y}from"@mikro-orm/core";var ho="schema_version",Co="1",go=class extends Pc{convertToDatabaseValue(e){return JSON.stringify(Io(e))}convertToJSValue(e){return typeof e=="string"?Wt(JSON.parse(e)):Wt(e)}},te=class{};S([U({type:"string"})],te.prototype,"key",2),S([Y({type:"string"})],te.prototype,"value",2),te=S([ut({tableName:"adk_internal_metadata"})],te);var B=class{constructor(){this.updateTime=new Date}};S([U({type:"string",fieldName:"app_name"})],B.prototype,"appName",2),S([Y({type:"json"})],B.prototype,"state",2),S([Y({type:"datetime",fieldName:"update_time",onCreate:()=>new Date,onUpdate:()=>new Date})],B.prototype,"updateTime",2),B=S([ut({tableName:"app_states"})],B);U.name;var M=class{constructor(){this.updateTime=new Date}};S([U({type:"string",fieldName:"app_name"})],M.prototype,"appName",2),S([U({type:"string",fieldName:"user_id"})],M.prototype,"userId",2),S([Y({type:"json"})],M.prototype,"state",2),S([Y({type:"datetime",fieldName:"update_time",onCreate:()=>new Date,onUpdate:()=>new Date})],M.prototype,"updateTime",2),M=S([ut({tableName:"user_states"})],M);U.name;var L=class{constructor(){this.createTime=new Date;this.updateTime=new Date}};S([U({type:"string"})],L.prototype,"id",2),S([U({type:"string",fieldName:"app_name"})],L.prototype,"appName",2),S([U({type:"string",fieldName:"user_id"})],L.prototype,"userId",2),S([Y({type:"json"})],L.prototype,"state",2),S([Y({type:"datetime",fieldName:"create_time",onCreate:()=>new Date})],L.prototype,"createTime",2),S([Y({type:"datetime",fieldName:"update_time",onCreate:()=>new Date})],L.prototype,"updateTime",2),L=S([ut({tableName:"sessions"})],L);U.name;var O=class{};S([U({type:"string"})],O.prototype,"id",2),S([U({type:"string",fieldName:"app_name"})],O.prototype,"appName",2),S([U({type:"string",fieldName:"user_id"})],O.prototype,"userId",2),S([U({type:"string",fieldName:"session_id"})],O.prototype,"sessionId",2),S([Y({type:"string",fieldName:"invocation_id"})],O.prototype,"invocationId",2),S([Y({type:"datetime"})],O.prototype,"timestamp",2),S([Y({type:go,fieldName:"event_data"})],O.prototype,"eventData",2),O=S([ut({tableName:"events"})],O);var ft=[te,B,M,L,O];async function Di(n){let e;if(n.startsWith("postgres://")||n.startsWith("postgresql://")){let{PostgreSqlDriver:l}=await Promise.resolve().then(()=>Fe(Be("@mikro-orm/postgresql"),1));e=l}else if(n.startsWith("mysql://")){let{MySqlDriver:l}=await Promise.resolve().then(()=>Fe(Be("@mikro-orm/mysql"),1));e=l}else if(n.startsWith("mariadb://")){let{MariaDbDriver:l}=await Promise.resolve().then(()=>Fe(Be("@mikro-orm/mariadb"),1));e=l}else if(n.startsWith("sqlite://")){let{SqliteDriver:l}=await Promise.resolve().then(()=>Fe(Be("@mikro-orm/sqlite"),1));e=l}else if(n.startsWith("mssql://")){let{MsSqlDriver:l}=await Promise.resolve().then(()=>Fe(Be("@mikro-orm/mssql"),1));e=l}else throw new Error(`Unsupported database URI: ${n}`);if(n==="sqlite://:memory:")return{entities:ft,dbName:":memory:",driver:e};let{host:t,port:o,username:r,password:i,pathname:s}=new URL(n),a=t.split(":")[0],c=n.startsWith("sqlite://")?n.substring(9):s.slice(1);return{entities:ft,dbName:c,host:a,port:o?parseInt(o):void 0,user:r,password:i,driver:e}}async function Bi(n){await n.schema.ensureDatabase(),await n.schema.updateSchema({safe:!0})}async function Fi(n){let e=n.em.fork(),t=await e.findOne(te,{key:ho});if(t){if(t.value!==Co)throw new Error(`ADK Database schema version ${t.value} is not compatible.`);return}let o=e.create(te,{key:ho,value:Co});await e.persist(o).flush()}function Ui(n){return n?n.startsWith("postgres://")||n.startsWith("postgresql://")||n.startsWith("mysql://")||n.startsWith("mariadb://")||n.startsWith("mssql://")||n.startsWith("sqlite://"):!1}var dt=class extends Ee{constructor(t){super();this.initialized=!1;if(typeof t=="string")this.connectionString=t;else{if(!t.driver)throw new Error("Driver is required when passing options object.");this.options={...t,entities:ft}}}async init(){this.initialized||(this.connectionString&&(!this.options||!this.options.driver)&&(this.options=await Di(this.connectionString)),this.orm=await Lc.init(this.options),await Bi(this.orm),await Fi(this.orm),this.initialized=!0)}async createSession({appName:t,userId:o,state:r,sessionId:i}){await this.init();let s=this.orm.em.fork(),a=i||b(),c=new Date;if(await s.findOne(L,{id:a,appName:t,userId:o}))throw new Error(`Session with id ${a} already exists.`);let u=await s.findOne(B,{appName:t});u||(u=s.create(B,{appName:t,state:{},updateTime:c}),s.persist(u));let f=await s.findOne(M,{appName:t,userId:o});f||(f=s.create(M,{appName:t,userId:o,state:{}}),s.persist(f));let d={},p={},m={};if(r)for(let[T,$]of Object.entries(r))T.startsWith(E.APP_PREFIX)?d[T.replace(E.APP_PREFIX,"")]=$:T.startsWith(E.USER_PREFIX)?p[T.replace(E.USER_PREFIX,"")]=$:m[T]=$;Object.keys(d).length>0&&(u.state={...u.state,...d}),Object.keys(p).length>0&&(f.state={...f.state,...p});let h=s.create(L,{id:a,appName:t,userId:o,state:m,createTime:c,updateTime:c});s.persist(h),await s.flush();let C=ie(u.state,f.state,m);return de({id:a,appName:t,userId:o,state:C,events:[],lastUpdateTime:h.createTime.getTime()})}async getSession({appName:t,userId:o,sessionId:r,config:i}){await this.init();let s=this.orm.em.fork(),a=await s.findOne(L,{appName:t,userId:o,id:r});if(!a)return;let c={appName:t,userId:o,sessionId:r};i!=null&&i.afterTimestamp&&(c.timestamp={$gt:new Date(i.afterTimestamp)});let l=await s.find(O,c,{orderBy:{timestamp:"DESC"},limit:i==null?void 0:i.numRecentEvents});l.reverse();let u=await s.findOne(B,{appName:t}),f=await s.findOne(M,{appName:t,userId:o}),d=ie((u==null?void 0:u.state)||{},(f==null?void 0:f.state)||{},a.state);return de({id:r,appName:t,userId:o,state:d,events:l.map(p=>p.eventData),lastUpdateTime:a.updateTime.getTime()})}async listSessions({appName:t,userId:o}){await this.init();let r=this.orm.em.fork(),i={appName:t};o&&(i.userId=o);let s=await r.find(L,i),a=await r.findOne(B,{appName:t}),c=(a==null?void 0:a.state)||{},l={};if(o){let f=await r.findOne(M,{appName:t,userId:o});f&&(l[o]=f.state)}else{let f=await r.find(M,{appName:t});for(let d of f)l[d.userId]=d.state}return{sessions:s.map(f=>{let d=l[f.userId]||{},p=ie(c,d,f.state);return de({id:f.id,appName:f.appName,userId:f.userId,state:p,events:[],lastUpdateTime:f.updateTime.getTime()})})}}async deleteSession({appName:t,userId:o,sessionId:r}){await this.init();let i=this.orm.em.fork();await i.nativeDelete(L,{appName:t,userId:o,id:r}),await i.nativeDelete(O,{appName:t,userId:o,sessionId:r})}async appendEvent({session:t,event:o}){await this.init();let r=this.orm.em.fork();if(o.partial)return o;let i=Yn(o);return await r.transactional(async s=>{let a=await s.findOne(L,{appName:t.appName,userId:t.userId,id:t.id},{lockMode:_c.PESSIMISTIC_WRITE});if(!a)throw new Error(`Session ${t.id} not found for appendEvent`);let c=await s.findOne(B,{appName:t.appName});c||(c=s.create(B,{appName:t.appName,state:{},updateTime:new Date}),s.persist(c));let l=await s.findOne(M,{appName:t.appName,userId:t.userId});if(l||(l=s.create(M,{appName:t.appName,userId:t.userId,state:{}}),s.persist(l)),a.updateTime.getTime()>t.lastUpdateTime){let d=await s.find(O,{appName:t.appName,userId:t.userId,sessionId:t.id},{orderBy:{timestamp:"ASC"}}),p=ie(c.state,l.state,a.state);t.state=p,t.events=d.map(m=>m.eventData)}if(o.actions&&o.actions.stateDelta){let d={},p={},m={};for(let[h,C]of Object.entries(o.actions.stateDelta))h.startsWith(E.APP_PREFIX)?d[h.replace(E.APP_PREFIX,"")]=C:h.startsWith(E.USER_PREFIX)?p[h.replace(E.USER_PREFIX,"")]=C:m[h]=C;Object.keys(d).length>0&&(c.state={...c.state,...d}),Object.keys(p).length>0&&(l.state={...l.state,...p}),Object.keys(m).length>0&&(a.state={...a.state,...m})}let u=s.create(O,{id:i.id,appName:t.appName,userId:t.userId,sessionId:t.id,invocationId:i.invocationId,timestamp:new Date(i.timestamp),eventData:i});s.persist(u),await s.commit(),a.updateTime=new Date(o.timestamp);let f=ie(c.state,l.state,a.state);t.state=f,t.events.push(o),t.lastUpdateTime=a.updateTime.getTime()}),o}};function Oc(n){if(di(n))return new X;if(Ui(n))return new dt(n);throw new Error(`Unsupported session service URI: ${n}`)}import{MetricExporter as Mc}from"@google-cloud/opentelemetry-cloud-monitoring-exporter";import{TraceExporter as Nc}from"@google-cloud/opentelemetry-cloud-trace-exporter";import{gcpDetector as Dc}from"@opentelemetry/resource-detector-gcp";import{detectResources as Bc}from"@opentelemetry/resources";import{PeriodicExportingMetricReader as Fc}from"@opentelemetry/sdk-metrics";import{BatchSpanProcessor as Uc}from"@opentelemetry/sdk-trace-base";import{GoogleAuth as $c}from"google-auth-library";var Gc="Cannot determine GCP Project. OTel GCP Exporters cannot be set up. Please make sure to log into correct GCP Project.";async function qc(){try{return await new $c().getProjectId()||void 0}catch{return}}async function GA(n={}){let{enableTracing:e=!1,enableMetrics:t=!1}=n,o=await qc();return o?{spanProcessors:e?[new Uc(new Nc({projectId:o}))]:[],metricReaders:t?[new Fc({exporter:new Mc({projectId:o}),exportIntervalMillis:5e3})]:[],logRecordProcessors:[]}:(g.warn(Gc),{})}function qA(){return Bc({detectors:[Dc]})}import{metrics as Vc,trace as jc}from"@opentelemetry/api";import{logs as zc}from"@opentelemetry/api-logs";import{OTLPLogExporter as Hc}from"@opentelemetry/exporter-logs-otlp-http";import{OTLPMetricExporter as Wc}from"@opentelemetry/exporter-metrics-otlp-http";import{OTLPTraceExporter as Kc}from"@opentelemetry/exporter-trace-otlp-http";import{detectResources as Xc}from"@opentelemetry/resources";import{BatchLogRecordProcessor as Yc,LoggerProvider as Jc}from"@opentelemetry/sdk-logs";import{MeterProvider as Qc,PeriodicExportingMetricReader as Zc}from"@opentelemetry/sdk-metrics";import{BatchSpanProcessor as el}from"@opentelemetry/sdk-trace-base";import{NodeTracerProvider as tl}from"@opentelemetry/sdk-trace-node";function rE(n=[],e){let t=e||nl(),o=[...n,rl()],r=o.flatMap(a=>a.spanProcessors||[]),i=o.flatMap(a=>a.metricReaders||[]),s=o.flatMap(a=>a.logRecordProcessors||[]);if(r.length>0){let a=new tl({resource:t,spanProcessors:r});a.register(),jc.setGlobalTracerProvider(a)}if(i.length>0){let a=new Qc({readers:i,resource:t});Vc.setGlobalMeterProvider(a)}if(s.length>0){let a=new Jc({resource:t,processors:s});zc.setGlobalLoggerProvider(a)}}function nl(){return Xc({detectors:[]})}function ol(){return{enableTracing:!!(process.env.OTEL_EXPORTER_OTLP_ENDPOINT||process.env.OTEL_EXPORTER_OTLP_TRACES_ENDPOINT),enableMetrics:!!(process.env.OTEL_EXPORTER_OTLP_ENDPOINT||process.env.OTEL_EXPORTER_OTLP_METRICS_ENDPOINT),enableLogging:!!(process.env.OTEL_EXPORTER_OTLP_ENDPOINT||process.env.OTEL_EXPORTER_OTLP_LOGS_ENDPOINT)}}function rl(n=ol()){let{enableTracing:e,enableMetrics:t,enableLogging:o}=n;return{spanProcessors:e?[new el(new Kc)]:[],metricReaders:t?[new Zc({exporter:new Wc})]:[],logRecordProcessors:o?[new Yc(new Hc)]:[]}}import{Client as il}from"@modelcontextprotocol/sdk/client/index.js";import{StdioClientTransport as sl}from"@modelcontextprotocol/sdk/client/stdio.js";import{StreamableHTTPClientTransport as al}from"@modelcontextprotocol/sdk/client/streamableHttp.js";var Vt=class{constructor(e){this.connectionParams=e}async createSession(){var t;let e=new il({name:"MCPClient",version:"1.0.0"});switch(this.connectionParams.type){case"StdioConnectionParams":await e.connect(new sl(this.connectionParams.serverParams));break;case"StreamableHTTPConnectionParams":{let o=(t=this.connectionParams.transportOptions)!=null?t:{};!o.requestInit&&this.connectionParams.header!==void 0&&(o.requestInit={headers:this.connectionParams.header}),await e.connect(new al(new URL(this.connectionParams.url),o));break}default:{let o=this.connectionParams;break}}return e}};import{Type as J}from"@google/genai";import{z as De}from"zod";var gE=De.object({type:De.literal("object"),properties:De.record(De.string(),De.unknown()).optional(),required:De.string().array().optional()});function cl(n){if(!n)return J.TYPE_UNSPECIFIED;switch(n.toLowerCase()){case"text":case"string":return J.STRING;case"number":return J.NUMBER;case"boolean":return J.BOOLEAN;case"integer":return J.INTEGER;case"array":return J.ARRAY;case"object":return J.OBJECT;case"null":return J.NULL;default:return J.TYPE_UNSPECIFIED}}var $i=n=>{var e,t;return typeof n=="string"?n.toLowerCase():(t=(e=n==null?void 0:n.type)==null?void 0:e.toLowerCase)==null?void 0:t.call(e)};function vo(n){if(!n)return;function e(t){var c;let o=(c=t.anyOf)!=null?c:t.type,r=!1,i;if(Array.isArray(o)){if(i=o.filter(l=>$i(l)!=="null"),r=o.some(l=>$i(l)==="null"),i.length===1){let l=i[0];if(typeof l=="object")t=l;else{let{type:u,anyOf:f,...d}=t;t={...d,type:l}}}else if(i.length===0&&r){let{type:l,anyOf:u,...f}=t;t={...f,type:"null"}}else if(typeof t.anyOf>"u"){let l=t.type.map(d=>({type:d})),{type:u,...f}=t;t={...f,anyOf:l}}}t.type||(t.properties||t.$ref?t.type="object":t.items?t.type="array":r&&(t.type="null"));let s=cl(t.type),a={};if(t.anyOf?a.anyOf=t.anyOf.map(l=>e(l)):a.type=s,t.description&&(a.description=t.description),r&&t.type!=="null"&&(a.nullable=!0),s===J.OBJECT){if(a.properties={},t.properties)for(let l in t.properties)a.properties[l]=e(t.properties[l]);t.required&&(a.required=t.required)}else s===J.ARRAY&&t.items&&(a.items=e(t.items));return a}return e(n)}var jt=class extends P{constructor(e,t){super({name:e.name,description:e.description||""}),this.mcpTool=e,this.mcpSessionManager=t}_getDeclaration(){return{name:this.mcpTool.name,description:this.mcpTool.description,parameters:vo(this.mcpTool.inputSchema),response:vo(this.mcpTool.outputSchema)}}async runAsync(e){let t=await this.mcpSessionManager.createSession(),o={};return o.params={name:this.mcpTool.name,arguments:e.args},await t.callTool(o.params)}};var Gi=class extends tt{constructor(e,t=[],o){super(t,o),this.mcpSessionManager=new Vt(e)}async getTools(){let t=await(await this.mcpSessionManager.createSession()).listTools();g.debug(`number of tools: ${t.tools.length}`);for(let o of t.tools)g.debug(`tool: ${o.name}`);return t.tools.map(o=>{let r={...o,name:this.prefix?`${this.prefix}_${o.name}`:o.name};return new jt(r,this.mcpSessionManager)})}async close(){}};export{it as A2AAgentExecutor,Ma as AGENT_CARD_PATH,Zn as ActiveStreamingTool,fo as AgentTool,we as ApigeeLlm,Si as AuthCredentialTypes,G as BaseAgent,Ye as BaseCodeExecutor,io as BaseExampleProvider,Ie as BaseLlm,D as BaseLlmRequestProcessor,Cn as BaseLlmResponseProcessor,Re as BasePlugin,Ee as BaseSessionService,P as BaseTool,tt as BaseToolset,Qe as BuiltInCodeExecutor,kt as CONTENT_REQUEST_PROCESSOR,bt as ContentRequestProcessor,N as Context,Pe as ContextCompactorRequestProcessor,dt as DatabaseSessionService,Ac as EXIT_LOOP,Ri as EventType,Ft as ExitLoopTool,st as FileArtifactService,oe as FunctionTool,Ec as GOOGLE_SEARCH,ct as GcsArtifactService,fe as Gemini,xt as GoogleLLMVariant,Ut as GoogleSearchTool,Te as InMemoryArtifactService,Se as InMemoryMemoryService,Nt as InMemoryPolicyEngine,lo as InMemoryRunner,X as InMemorySessionService,j as InvocationContext,ge as LLMRegistry,wc as LOAD_ARTIFACTS,bc as LOAD_MEMORY,eo as LiveRequestQueue,Nn as LlmAgent,to as LlmSummarizer,$t as LoadArtifactsTool,Gt as LoadMemoryTool,Go as LogLevel,so as LoggingPlugin,mo as LongRunningFunctionTool,Bn as LoopAgent,Vt as MCPSessionManager,jt as MCPTool,Gi as MCPToolset,kc as PRELOAD_MEMORY,Un as ParallelAgent,rt as PluginManager,Pi as PolicyOutcome,qt as PreloadMemoryTool,ki as REQUEST_CONFIRMATION_FUNCTION_CALL_NAME,w as ReadonlyContext,Wn as RemoteA2AAgent,re as Runner,co as SecurityPlugin,qn as SequentialAgent,E as State,Pt as StreamingMode,no as TokenBasedContextCompactor,me as ToolConfirmation,oo as TruncatingContextCompactor,A as createEvent,F as createEventActions,de as createSession,Ns as functionsExportedForTestingOnly,Tt as geminiInitParams,zn as getA2AAgentCard,cc as getArtifactServiceFromUri,Cc as getAskUserConfirmationFunctionCalls,I as getFunctionCalls,V as getFunctionResponses,GA as getGcpExporters,qA as getGcpResource,en as getLogger,Oc as getSessionServiceFromUri,Ro as hasTrailingCodeExecutionResult,vc as isAgentTool,ns as isBaseAgent,mc as isBaseExampleProvider,sn as isBaseLlm,Xe as isBaseTool,jn as isBaseToolset,H as isCompactedEvent,ae as isFinalResponse,qs as isFunctionTool,Je as isGemini2OrAbove,y as isLlmAgent,_e as isLoopAgent,Le as isParallelAgent,Xn as isRunner,Oe as isSequentialAgent,rE as maybeSetOtelProviders,ie as mergeStates,as as setLogLevel,ss as setLogger,Ue as stringifyContent,Ya as toA2a,pc as toStructuredEvents,Yn as trimTempDeltaState,$e as version,be as zodObjectToSchema};
90
114
  /**
91
115
  * @license
92
- * Copyright 2025 Google LLC
116
+ * Copyright 2026 Google LLC
93
117
  * SPDX-License-Identifier: Apache-2.0
94
118
  */
95
119
  /**
96
120
  * @license
97
- * Copyright 2026 Google LLC
121
+ * Copyright 2025 Google LLC
98
122
  * SPDX-License-Identifier: Apache-2.0
99
123
  */
100
124
  //# sourceMappingURL=index.js.map