makecoder 2.0.87 → 2.0.89
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cc.mjs +4503 -4078
- package/dist/coder.js +11 -11
- package/dist/gemini/{chunk-A57O7UVO.js → chunk-27LZDLAX.js} +4 -4
- package/dist/gemini/{chunk-FEX45IWO.js → chunk-FMLNMYSS.js} +4 -4
- package/dist/gemini/{chunk-YE6OXWU4.js → chunk-NQYDZB3F.js} +4 -4
- package/dist/gemini/{chunk-6V5V2R7S.js → chunk-UNZWUZT5.js} +4 -4
- package/dist/gemini/{core-AFD3OUDK.js → core-U4UJ5U3G.js} +1 -1
- package/dist/gemini/{devtoolsService-DJTNWRMQ.js → devtoolsService-BBOQUUGQ.js} +2 -2
- package/dist/gemini/{devtoolsService-GYMIUIIB.js → devtoolsService-PN4R3RGP.js} +2 -2
- package/dist/gemini/{dist-NPRLGLEW.js → dist-6PSWV5BS.js} +1 -1
- package/dist/gemini/gemini.js +5 -5
- package/dist/gemini/{interactiveCli-7QLLCKC2.js → interactiveCli-6WSVWOAC.js} +3 -3
- package/dist/gemini/{interactiveCli-NM7PITEU.js → interactiveCli-EQRMKGTD.js} +3 -3
- package/dist/gemini/node_modules/@google/gemini-cli-devtools/package.json +1 -1
- package/dist/gemini/{oauth2-provider-DLXP22T7.js → oauth2-provider-2QJJEEM6.js} +1 -1
- package/dist/gemini/{oauth2-provider-UJ5SOZ4D.js → oauth2-provider-4HGPOCXM.js} +1 -1
- package/package.json +4 -4
- /package/dist/gemini/{tree-sitter-SPJ4FOC6.js → tree-sitter-NXEUY244.js} +0 -0
- /package/dist/gemini/{tree-sitter-bash-NLKDXHN2.js → tree-sitter-bash-CUUXV34I.js} +0 -0
|
@@ -814,7 +814,7 @@ ${s}
|
|
|
814
814
|
|
|
815
815
|
... [${u.toLocaleString()} characters omitted] ...
|
|
816
816
|
|
|
817
|
-
${c}`}var wvr="tool-outputs";async function _S(t,e,r,n,o){let s=wu(e).toLowerCase(),c=wu(r.toString()).toLowerCase(),u=c.startsWith(s)?`${c}.txt`:`${s}_${c}.txt`,d=Cu.join(n,wvr);if(o){let a=wu(o);d=Cu.join(d,`session-${a}`)}let l=Cu.join(d,u);return await Xw.mkdir(d,{recursive:!0}),await Xw.writeFile(l,t),{outputFile:l}}async function EZe(t,e){await Ga();let r=[t,...e].join(" "),n=xu(r),o=vA(n).filter(s=>s!=="shopt"&&s!=="set");return o.length>0?o[0]:yq.basename(t)}function tx(t){return typeof t=="string"?t:"pattern"in t?t.pattern:"op"in t?t.op:("comment"in t,"")}var rh=["run_shell_command","ShellTool"];async function vZe(t){if(yq.isAbsolute(t))try{return await gq.promises.access(t,gq.constants.X_OK),t}catch{return}let e=(process.env.PATH||"").split(yq.delimiter),r=mZe.platform()==="win32"?[".exe",".cmd",".bat",""]:[""];for(let n of e)for(let o of r){let s=yq.join(n,t+o);try{return await gq.promises.access(s,gq.constants.X_OK),s}catch{continue}}}var vS=null,mq=null,ex=null,Aq=class extends Error{constructor(e){super(`Failed to initialize bash parser: ${e.message}`,{cause:e}),this.name="ShellParserInitializationError"}};function Ovr(t){return t instanceof Error?t:typeof t=="string"?new Error(t):new Error("Unknown tree-sitter initialization error",{cause:t})}async function Ivr(){try{ex=null;let[t,e]=await Promise.all([ome(()=>import("./tree-sitter-
|
|
817
|
+
${c}`}var wvr="tool-outputs";async function _S(t,e,r,n,o){let s=wu(e).toLowerCase(),c=wu(r.toString()).toLowerCase(),u=c.startsWith(s)?`${c}.txt`:`${s}_${c}.txt`,d=Cu.join(n,wvr);if(o){let a=wu(o);d=Cu.join(d,`session-${a}`)}let l=Cu.join(d,u);return await Xw.mkdir(d,{recursive:!0}),await Xw.writeFile(l,t),{outputFile:l}}async function EZe(t,e){await Ga();let r=[t,...e].join(" "),n=xu(r),o=vA(n).filter(s=>s!=="shopt"&&s!=="set");return o.length>0?o[0]:yq.basename(t)}function tx(t){return typeof t=="string"?t:"pattern"in t?t.pattern:"op"in t?t.op:("comment"in t,"")}var rh=["run_shell_command","ShellTool"];async function vZe(t){if(yq.isAbsolute(t))try{return await gq.promises.access(t,gq.constants.X_OK),t}catch{return}let e=(process.env.PATH||"").split(yq.delimiter),r=mZe.platform()==="win32"?[".exe",".cmd",".bat",""]:[""];for(let n of e)for(let o of r){let s=yq.join(n,t+o);try{return await gq.promises.access(s,gq.constants.X_OK),s}catch{continue}}}var vS=null,mq=null,ex=null,Aq=class extends Error{constructor(e){super(`Failed to initialize bash parser: ${e.message}`,{cause:e}),this.name="ShellParserInitializationError"}};function Ovr(t){return t instanceof Error?t:typeof t=="string"?new Error(t):new Error("Unknown tree-sitter initialization error",{cause:t})}async function Ivr(){try{ex=null;let[t,e]=await Promise.all([ome(()=>import("./tree-sitter-NXEUY244.js"),"web-tree-sitter/tree-sitter.wasm"),ome(()=>import("./tree-sitter-bash-CUUXV34I.js"),"tree-sitter-bash/tree-sitter-bash.wasm")]);await tme.init({wasmBinary:t}),vS=await eme.load(e)}catch(t){vS=null;let e=Ovr(t),r=e instanceof Aq?e:new Aq(e);throw ex=r,r}}async function Ga(){mq||(mq=Ivr().catch(t=>{mq=null,U.debug("Failed to initialize shell parsers:",t)})),await mq}var bZe="__GCLI_POWERSHELL_COMMAND__",Rvr=1e3*1e3,Pvr=Buffer.from(`
|
|
818
818
|
$ErrorActionPreference = 'Stop'
|
|
819
819
|
$commandText = $env:${bZe}
|
|
820
820
|
if ([string]::IsNullOrEmpty($commandText)) {
|
|
@@ -1058,7 +1058,7 @@ Please try running again with NO_BROWSER=true set.`}),new aa(`Failed to open bro
|
|
|
1058
1058
|
`);let s=await new Promise((c,u)=>{let d=P6r.createInterface({input:process.stdin,output:vV().stdout,terminal:!0}),l=setTimeout(()=>{d.close(),u(new aa("Authorization timed out after 5 minutes."))},3e5);d.question("Enter the authorization code: ",a=>{clearTimeout(l),d.close(),c(a.trim())})});if(!s)return LS(`Authorization code is required.
|
|
1059
1059
|
`),U.error("Authorization code is required."),!1;try{let{tokens:c}=await t.getToken({code:s,codeVerifier:r.codeVerifier,redirect_uri:e});t.setCredentials(c)}catch(c){return LS("Failed to authenticate with authorization code:"+be(c)+`
|
|
1060
1060
|
`),U.error("Failed to authenticate with authorization code:",be(c)),!1}return!0}catch(e){if(e instanceof pS)throw e;return LS("Failed to authenticate with user code:"+be(e)+`
|
|
1061
|
-
`),U.error("Failed to authenticate with user code:",be(e)),!1}}async function L6r(t){let e=await M6r(),r=process.env.OAUTH_CALLBACK_HOST||"127.0.0.1",n=`http://127.0.0.1:${e}/oauth2callback`,o=kdt.randomBytes(32).toString("hex"),s=t.generateAuthUrl({redirect_uri:n,access_type:"offline",scope:nEe,state:o}),c=new Promise((u,d)=>{let l=Pdt.createServer(async(a,p)=>{try{if(a.url.indexOf("/oauth2callback")===-1){p.writeHead(TV,{Location:rEe}),p.end(),d(new aa("OAuth callback not received. Unexpected request: "+a.url));return}let f=new O6r.URL(a.url,"http://127.0.0.1:3000").searchParams;if(f.get("error")){p.writeHead(TV,{Location:rEe}),p.end();let g=f.get("error"),y=f.get("error_description")||"No additional details provided";d(new aa(`Google OAuth error: ${g}. ${y}`))}else if(f.get("state")!==o)p.end("State mismatch. Possible CSRF attack"),d(new aa("OAuth state mismatch. Possible CSRF attack or browser session issue."));else if(f.get("code"))try{let{tokens:g}=await t.getToken({code:f.get("code"),redirect_uri:n});t.setCredentials(g);try{await CV(t)}catch(y){U.warn("Failed to retrieve Google Account ID during authentication:",be(y))}p.writeHead(TV,{Location:k6r}),p.end(),u()}catch(g){p.writeHead(TV,{Location:rEe}),p.end(),d(new aa(`Failed to exchange authorization code for tokens: ${be(g)}`))}else d(new aa("No authorization code received from Google OAuth. Please try authenticating again."))}catch(f){f instanceof aa?d(f):d(new aa(`Unexpected error during OAuth authentication: ${be(f)}`))}finally{l.close()}});l.listen(e,r,()=>{}),l.on("error",a=>{d(new aa(`OAuth callback server error: ${be(a)}`))})});return{authUrl:s,loginCompletePromise:c}}function M6r(){return new Promise((t,e)=>{let r=0;try{let n=process.env.OAUTH_CALLBACK_PORT;if(n)return r=parseInt(n,10),isNaN(r)||r<=0||r>65535?e(new Error(`Invalid value for OAUTH_CALLBACK_PORT: "${n}"`)):t(r);let o=Ndt.createServer();o.listen(0,()=>{let s=o.address();s&&typeof s=="object"&&(r=s.port)}),o.on("listening",()=>{o.close(),o.unref()}),o.on("error",s=>e(s)),o.on("close",()=>t(r))}catch(n){e(n)}})}async function B6r(){if(iEe())return Yx.loadCredentials();let e=[er.getOAuthCredsPath(),process.env.GOOGLE_APPLICATION_CREDENTIALS].filter(r=>!!r);for(let r of e)try{let n=await JL.readFile(r,"utf-8");return JSON.parse(n)}catch(n){U.debug(`Failed to load credentials from ${r}:`,be(n))}return null}function U6r(){KL.clear()}async function GBi(){try{iEe()?await Yx.clearCredentials():await JL.rm(er.getOAuthCredsPath(),{force:!0}),await xV.clearCachedGoogleAccount(),U6r()}catch(t){U.warn("Failed to clear cached credentials:",t)}}async function CV(t){try{let{token:e}=await t.getAccessToken();if(!e)return;let r=await fetch("https://www.googleapis.com/oauth2/v2/userinfo",{headers:{Authorization:`Bearer ${e}`}});if(!r.ok){U.log("Failed to fetch user info:",r.status,r.statusText);return}let n=await r.json();await xV.cacheGoogleAccount(n.email)}catch(e){U.log("Error retrieving user info:",e)}}function VBi(){KL.clear()}async function F6r(t){let e=er.getOAuthCredsPath();await JL.mkdir(R6r.dirname(e),{recursive:!0});let r=JSON.stringify(t,null,2);await JL.writeFile(e,r,{mode:384});try{await JL.chmod(e,384)}catch{}}var Bdt=(l=>(l.DASHER_USER="DASHER_USER",l.INELIGIBLE_ACCOUNT="INELIGIBLE_ACCOUNT",l.NON_USER_ACCOUNT="NON_USER_ACCOUNT",l.RESTRICTED_AGE="RESTRICTED_AGE",l.RESTRICTED_NETWORK="RESTRICTED_NETWORK",l.UNKNOWN="UNKNOWN",l.UNKNOWN_LOCATION="UNKNOWN_LOCATION",l.UNSUPPORTED_LOCATION="UNSUPPORTED_LOCATION",l.VALIDATION_REQUIRED="VALIDATION_REQUIRED",l))(Bdt||{}),ty={FREE:"free-tier",LEGACY:"legacy-tier",STANDARD:"standard-tier"},j6r=(o=>(o.Default="DEFAULT",o.Notice="NOTICE",o.Warning="WARNING",o.Error="ERROR",o))(j6r||{}),Udt=(a=>(a[a.UNKNOWN=0]="UNKNOWN",a[a.THUMBSUP=1]="THUMBSUP",a[a.THUMBSDOWN=2]="THUMBSDOWN",a[a.COPY=3]="COPY",a[a.INSERT=4]="INSERT",a[a.ACCEPT_CODE_BLOCK=5]="ACCEPT_CODE_BLOCK",a[a.ACCEPT_ALL=6]="ACCEPT_ALL",a[a.ACCEPT_FILE=7]="ACCEPT_FILE",a[a.DIFF=8]="DIFF",a[a.ACCEPT_RANGE=9]="ACCEPT_RANGE",a))(Udt||{}),Fdt=(s=>(s[s.ACTION_STATUS_UNSPECIFIED=0]="ACTION_STATUS_UNSPECIFIED",s[s.ACTION_STATUS_NO_ERROR=1]="ACTION_STATUS_NO_ERROR",s[s.ACTION_STATUS_ERROR_UNKNOWN=2]="ACTION_STATUS_ERROR_UNKNOWN",s[s.ACTION_STATUS_CANCELLED=3]="ACTION_STATUS_CANCELLED",s[s.ACTION_STATUS_EMPTY=4]="ACTION_STATUS_EMPTY",s))(Fdt||{}),jdt=(o=>(o[o.INITIATION_METHOD_UNSPECIFIED=0]="INITIATION_METHOD_UNSPECIFIED",o[o.TAB=1]="TAB",o[o.COMMAND=2]="COMMAND",o[o.AGENT=3]="AGENT",o))(jdt||{}),Q6r=Y.object({extensionsEnabled:Y.boolean().optional()}),Qdt=Y.object({extensionsSetting:Q6r.optional(),unmanagedCapabilitiesEnabled:Y.boolean().optional()}),q6r=Y.object({url:Y.string().optional(),type:Y.enum(["sse","http"]).optional(),trust:Y.boolean().optional(),includeTools:Y.array(Y.string()).optional(),excludeTools:Y.array(Y.string()).optional()}),G6r=Y.object({scopes:Y.array(Y.string()).optional(),clientId:Y.string().optional(),clientSecret:Y.string().optional()}),qdt=Y.object({url:Y.string(),type:Y.enum(["sse","http"]),authProviderType:Y.nativeEnum(OV).optional(),oauth:G6r.optional(),targetAudience:Y.string().optional(),targetServiceAccount:Y.string().optional(),headers:Y.record(Y.string()).optional(),trust:Y.boolean().optional(),timeout:Y.number().optional(),description:Y.string().optional(),includeTools:Y.array(Y.string()).optional(),excludeTools:Y.array(Y.string()).optional()}),oEe=Y.object({mcpServers:Y.record(q6r).optional(),requiredMcpServers:Y.record(qdt).optional()}),V6r=Y.object({mcpEnabled:Y.boolean().optional(),mcpConfigJson:Y.string().optional()}),WBi=Y.object({strictModeDisabled:Y.boolean().optional(),mcpSetting:Y.object({mcpEnabled:Y.boolean().optional(),mcpConfig:oEe.optional(),requiredMcpConfig:Y.record(qdt).optional()}).optional(),cliFeatureSetting:Qdt.optional()}),Gdt=Y.object({secureModeEnabled:Y.boolean().optional(),strictModeDisabled:Y.boolean().optional(),mcpSetting:V6r.optional(),cliFeatureSetting:Qdt.optional(),adminControlsApplicable:Y.boolean().optional()});import*as UWt from"node:readline";import{Readable as C$n}from"node:stream";var MS="GOOGLE_ONE_AI",H6r=new Set([Jf,Gw,qa]);function Vdt(t){return H6r.has(t)}var $6r="https://one.google.com/ai",z6r="https://accounts.google.com/AccountChooser",W6r="gemini_cli",Y6r="web";function J6r(t,e){let r=new URLSearchParams({Email:t,continue:e});return`${z6r}?${r.toString()}`}var KBi={MANAGE_ACTIVITY:"hydrogen_cli_settings_ai_credits_activity_page",MANAGE_ADD_CREDITS:"hydrogen_cli_settings_add_credits",EMPTY_WALLET_ADD_CREDITS:"hydrogen_cli_insufficient_credits_add_credits"};function XBi(t,e,r){let n=`${$6r}/${t}`,o=new URLSearchParams({utm_source:W6r,utm_medium:Y6r,utm_campaign:r}),s=`${n}?${o.toString()}`;return J6r(e,s)}function Hdt(t){if(!t?.availableCredits)return null;let e=t.availableCredits.filter(r=>r.creditType===MS);return e.length===0?null:e.reduce((r,n)=>{let o=parseInt(n.creditAmount??"0",10);return r+(isNaN(o)?0:o)},0)}var sEe=50;function $dt(t,e){return t==="always"&&e!=null&&e>=sEe}function ZBi(t,e){return t==="ask"&&e!=null&&e>=sEe}function e5i(t,e){return t!=="never"&&e!=null&&e<sEe}var qt=Me(fh(),1);Fe();var aMt=Me(PTe(),1),lMt=Me(NTe(),1),cMt=Me(FTe(),1),uMt=Me(QTe(),1),dMt=Me(GTe(),1),pMt=Me(SM(),1);Tp();var fMt=Me(TCt(),1);za();var hMt=Me(my(),1),cre=Me(cJ(),1),ure=Me(DY(),1),nv=Me(jp(),1),gMt=Me(zCt(),1);var N2t=Me(Vxt(),1),D2t=Me(VJe(),1);import{createHash as vcn}from"node:crypto";import*as aI from"node:os";var DOe=Me(t2t(),1),LOe=Me(l2t(),1),I2t=Me(f2t(),1),Kp=Me(A2t(),1);var MOe=Me(v2t(),1);var X1=Me(kOe(),1);var mcn=Me(w2t(),1),ycn=Me(O2t(),1);var FVi=DOe.default.MinFibonacciHeap,jVi=DOe.default.MaxFibonacciHeap,QVi=LOe.default.MinHeap,qVi=LOe.default.MaxHeap,GVi=I2t.default.GeneralizedSuffixArray,VVi=Kp.default.Uint8Vector,HVi=Kp.default.Uint8ClampedVector,$Vi=Kp.default.Int8Vector,zVi=Kp.default.Uint16Vector,WVi=Kp.default.Int16Vector,YVi=Kp.default.Uint32Vector,JVi=Kp.default.Int32Vector,KVi=Kp.default.Float32Vector,XVi=Kp.default.Float64Vector,ZVi=Kp.default.PointerVector;var R2t="0dace6f",P2t="0.37.1";var Rr={devin:{name:"devin",displayName:"Devin"},replit:{name:"replit",displayName:"Replit"},cursor:{name:"cursor",displayName:"Cursor"},cloudshell:{name:"cloudshell",displayName:"Cloud Shell"},codespaces:{name:"codespaces",displayName:"GitHub Codespaces"},firebasestudio:{name:"firebasestudio",displayName:"Firebase Studio"},trae:{name:"trae",displayName:"Trae"},vscode:{name:"vscode",displayName:"VS Code"},vscodefork:{name:"vscodefork",displayName:"IDE"},positron:{name:"positron",displayName:"Positron"},antigravity:{name:"antigravity",displayName:"Antigravity"},sublimetext:{name:"sublimetext",displayName:"Sublime Text"},jetbrains:{name:"jetbrains",displayName:"JetBrains IDE"},intellijidea:{name:"intellijidea",displayName:"IntelliJ IDEA"},webstorm:{name:"webstorm",displayName:"WebStorm"},pycharm:{name:"pycharm",displayName:"PyCharm"},goland:{name:"goland",displayName:"GoLand"},androidstudio:{name:"androidstudio",displayName:"Android Studio"},clion:{name:"clion",displayName:"CLion"},rustrover:{name:"rustrover",displayName:"RustRover"},datagrip:{name:"datagrip",displayName:"DataGrip"},phpstorm:{name:"phpstorm",displayName:"PhpStorm"},zed:{name:"zed",displayName:"Zed"},xcode:{name:"xcode",displayName:"XCode"}};function oI(){return!!(process.env.EDITOR_IN_CLOUD_SHELL||process.env.CLOUD_SHELL)}function BOe(){return!!process.env.TERMINAL_EMULATOR?.toLowerCase().includes("jetbrains")}function sI(){return process.env.ANTIGRAVITY_CLI_ALIAS?Rr.antigravity:process.env.__COG_BASHRC_SOURCED?Rr.devin:process.env.REPLIT_USER?Rr.replit:process.env.CURSOR_TRACE_ID?Rr.cursor:process.env.CODESPACES?Rr.codespaces:oI()?Rr.cloudshell:process.env.TERM_PRODUCT==="Trae"?Rr.trae:process.env.MONOSPACE_ENV?Rr.firebasestudio:process.env.POSITRON==="1"?Rr.positron:process.env.TERM_PROGRAM==="sublime"?Rr.sublimetext:process.env.ZED_SESSION_ID||process.env.TERM_PROGRAM==="Zed"?Rr.zed:process.env.XCODE_VERSION_ACTUAL?Rr.xcode:BOe()?Rr.jetbrains:Rr.vscode}function Acn(t,e){return t.name!==Rr.vscode.name?t:!e.command||e.command.toLowerCase().includes("code")?Rr.vscode:Rr.vscodefork}function Ecn(t,e){if(t.name!==Rr.jetbrains.name||!e.command)return t;let r=e.command.toLowerCase(),n=[["idea",Rr.intellijidea],["webstorm",Rr.webstorm],["pycharm",Rr.pycharm],["goland",Rr.goland],["studio",Rr.androidstudio],["clion",Rr.clion],["rustrover",Rr.rustrover],["datagrip",Rr.datagrip],["phpstorm",Rr.phpstorm]];for(let[o,s]of n)if(r.includes(o))return s;return t}function k2t(t,e){if(e?.name&&e.displayName)return{name:e.name,displayName:e.displayName};if(process.env.TERM_PROGRAM!=="vscode"&&process.env.TERM_PROGRAM!=="sublime"&&process.env.TERM_PROGRAM!=="Zed"&&!process.env.ZED_SESSION_ID&&!process.env.XCODE_VERSION_ACTUAL&&!BOe())return;let r=sI();return BOe()?Ecn(r,t):Acn(r,t)}function bcn(){return process.env.SURFACE?process.env.SURFACE:oI()?Rr.cloudshell.name:process.env.GITHUB_SHA?"GitHub":process.env.TERM_PROGRAM==="vscode"?sI().name||Rr.vscode.name:"SURFACE_NOT_SET"}function Scn(){return process.env.GH_WORKFLOW_NAME}function Tcn(){return process.env.GITHUB_REPOSITORY}function Ccn(){return process.env.GITHUB_EVENT_NAME}function wcn(){return process.env.GH_PR_NUMBER}function xcn(){return process.env.GH_ISSUE_NUMBER}function Ocn(){return process.env.GH_CUSTOM_TRACKING_ID}var Icn="https://play.googleapis.com/log?format=json&hasfast=true",Rcn=1e3*60,XX=1e3,ZX=100,L2t="NA",Z6;async function Pcn(){try{let t=await N2t.default.graphics();t.controllers&&t.controllers.length>0?Z6=t.controllers.map(e=>e.model).join(", "):Z6=L2t}catch(t){Z6="FAILED",U.error("Failed to get GPU information for telemetry",be(t))}}async function kcn(){return Z6||await Pcn(),Z6??L2t}var Ct=class t{static instance;config;sessionData=[];promptId="";installationManager;userAccountManager;hashedGHRepositoryName;events;lastFlushTime=Date.now();flushing=!1;pendingFlush=!1;constructor(e){this.config=e,this.events=new MOe.default(Array,XX),this.promptId=e?.getSessionId()??"",this.installationManager=new jA,this.userAccountManager=new UA;let r=Tcn();r&&(this.hashedGHRepositoryName=vcn("sha256").update(r).digest("hex"))}static getInstance(e){if(!(e===void 0||!e?.getUsageStatisticsEnabled()))return t.instance||(t.instance=new t(e)),t.instance}static clearInstance(){t.instance=void 0}enqueueHelper(e,r){let n=this.events.size>=XX;n&&this.events.shift();let o={event_time_ms:Date.now(),source_extension_json:Sr(e)};r!==void 0&&(o.exp={gws_experiment:r}),this.events.push([o]),n&&this.config?.getDebugMode()&&U.debug(`ClearcutLogger: Dropped old event to prevent memory leak (queue size: ${this.events.size})`)}enqueueLogEvent(e){try{this.enqueueHelper(e)}catch(r){this.config?.getDebugMode()&&U.warn("ClearcutLogger: Failed to enqueue log event.",r)}}async enqueueLogEventAfterExperimentsLoadAsync(e){try{this.config?.getExperimentsAsync().then(r=>{if(r){let n=[{gemini_cli_key:131,value:r.experimentIds.toString()??"NA"}];e.event_metadata=[[...e.event_metadata[0],...n]]}this.enqueueHelper(e,r?.experimentIds)})}catch(r){U.warn("ClearcutLogger: Failed to enqueue log event.",r)}}createBasicLogEvent(e,r=[]){let n=this.userAccountManager.getCachedGoogleAccount(),o=bcn(),s=Scn(),c=Ccn(),u=wcn(),d=xcn(),l=Ocn(),a=[...r,{gemini_cli_key:39,value:o},{gemini_cli_key:54,value:P2t},{gemini_cli_key:55,value:R2t},{gemini_cli_key:82,value:process.platform}];s&&a.push({gemini_cli_key:130,value:s}),this.hashedGHRepositoryName&&a.push({gemini_cli_key:132,value:this.hashedGHRepositoryName}),c&&a.push({gemini_cli_key:176,value:c}),u&&a.push({gemini_cli_key:177,value:u}),d&&a.push({gemini_cli_key:178,value:d}),l&&a.push({gemini_cli_key:179,value:l});let p={console_type:"GEMINI_CLI",application:102,event_name:e,event_metadata:[a]};return n?p.client_email=n:p.client_install_id=this.installationManager.getInstallationId(),p}createLogEvent(e,r=[]){e!=="start_session"&&r.push(...this.sessionData);let n=this.userAccountManager.getLifetimeGoogleAccounts();return r=this.addDefaultFields(r,n),this.createBasicLogEvent(e,r)}flushIfNeeded(){Date.now()-this.lastFlushTime<Rcn||this.flushToClearcut().catch(e=>{U.debug("Error flushing to Clearcut:",e)})}async flushToClearcut(){if(this.flushing)return this.config?.getDebugMode()&&U.debug("ClearcutLogger: Flush already in progress, marking pending flush."),this.pendingFlush=!0,Promise.resolve({});this.flushing=!0,this.config?.getDebugMode()&&U.log("Flushing log events to Clearcut.");let e=this.events.toArray();this.events.clear();let r=[{log_source_name:"CONCORD",request_time_ms:Date.now(),log_event:e}],n={};try{let o=await fetch(Icn,{method:"POST",body:Sr(r),headers:{"Content-Type":"application/json"}}),s=await o.text();if(o.status>=200&&o.status<300){this.lastFlushTime=Date.now();let c=Number(JSON.parse(s)[0]);n={...n,nextRequestWaitMs:c}}else this.config?.getDebugMode()&&U.warn(`Error flushing log events: HTTP ${o.status}: ${o.statusText}`),this.requeueFailedEvents(e)}catch(o){this.config?.getDebugMode()&&U.warn("Error flushing log events:",o),this.requeueFailedEvents(e)}return this.flushing=!1,this.pendingFlush&&(this.pendingFlush=!1,this.flushToClearcut().catch(o=>{this.config?.getDebugMode()&&U.debug("Error in pending flush to Clearcut:",o)})),n}async logStartSessionEvent(e){let r=[{gemini_cli_key:1,value:e.model},{gemini_cli_key:2,value:e.embedding_model},{gemini_cli_key:3,value:e.sandbox_enabled.toString()},{gemini_cli_key:4,value:e.core_tools_enabled},{gemini_cli_key:5,value:e.approval_mode},{gemini_cli_key:6,value:e.api_key_enabled.toString()},{gemini_cli_key:7,value:e.vertex_ai_enabled.toString()},{gemini_cli_key:8,value:e.debug_enabled.toString()},{gemini_cli_key:7,value:e.vertex_ai_enabled.toString()},{gemini_cli_key:9,value:e.mcp_servers},{gemini_cli_key:7,value:e.vertex_ai_enabled.toString()},{gemini_cli_key:10,value:e.telemetry_enabled.toString()},{gemini_cli_key:11,value:e.telemetry_log_user_prompts_enabled.toString()},{gemini_cli_key:63,value:e.mcp_servers_count?e.mcp_servers_count.toString():""},{gemini_cli_key:64,value:e.mcp_tools_count?.toString()??""},{gemini_cli_key:65,value:e.mcp_tools?e.mcp_tools:""},{gemini_cli_key:119,value:e.extensions_count.toString()},{gemini_cli_key:120,value:e.extension_ids.toString()},{gemini_cli_key:191,value:e.worktree_active.toString()}],n=aI.cpus();n&&n.length>0&&r.push({gemini_cli_key:137,value:n[0].model}),r.push({gemini_cli_key:138,value:aI.availableParallelism().toString()},{gemini_cli_key:140,value:(aI.totalmem()/1024**3).toFixed(2).toString()});let o=await kcn();r.push({gemini_cli_key:139,value:o}),this.sessionData=r,this.enqueueLogEventAfterExperimentsLoadAsync(this.createLogEvent("start_session",r)).then(()=>{this.flushToClearcut().catch(s=>{U.debug("Error flushing to Clearcut:",s)})})}logNewPromptEvent(e){this.promptId=e.prompt_id;let r=[{gemini_cli_key:13,value:JSON.stringify(e.prompt_length)}];this.enqueueLogEvent(this.createLogEvent("new_prompt",r)),this.flushIfNeeded()}logToolCallEvent(e){let r=[{gemini_cli_key:14,value:JSON.stringify(e.function_name)},{gemini_cli_key:15,value:JSON.stringify(e.decision)},{gemini_cli_key:16,value:JSON.stringify(e.success)},{gemini_cli_key:17,value:JSON.stringify(e.duration_ms)},{gemini_cli_key:19,value:JSON.stringify(e.error_type)},{gemini_cli_key:62,value:JSON.stringify(e.tool_type)},{gemini_cli_key:93,value:JSON.stringify(e.content_length)},{gemini_cli_key:95,value:JSON.stringify(e.mcp_server_name)}];if(e.metadata){let o={model_added_lines:47,model_removed_lines:48,model_added_chars:103,model_removed_chars:104,user_added_lines:49,user_removed_lines:50,user_added_chars:105,user_removed_chars:106};if(e.function_name===xo&&e.metadata.ask_user){let s=e.metadata.ask_user,c={question_types:152,dismissed:153,empty_submission:154,answer_count:155};for(let[u,d]of Object.entries(c))s[u]!==void 0&&r.push({gemini_cli_key:d,value:JSON.stringify(s[u])})}for(let[s,c]of Object.entries(o))e.metadata[s]!==void 0&&r.push({gemini_cli_key:c,value:JSON.stringify(e.metadata[s])})}e.extension_id&&r.push({gemini_cli_key:121,value:e.extension_id});let n=this.createLogEvent("tool_call",r);this.enqueueLogEvent(n),this.flushIfNeeded()}logFileOperationEvent(e){let r=[{gemini_cli_key:14,value:JSON.stringify(e.tool_name)},{gemini_cli_key:57,value:JSON.stringify(e.operation)},{gemini_cli_key:72,value:JSON.stringify(e.lines)},{gemini_cli_key:73,value:JSON.stringify(e.mimetype)},{gemini_cli_key:74,value:JSON.stringify(e.extension)}];e.programming_language&&r.push({gemini_cli_key:56,value:e.programming_language});let n=this.createLogEvent("file_operation",r);this.enqueueLogEvent(n),this.flushIfNeeded()}logApiRequestEvent(e){let r=[{gemini_cli_key:20,value:JSON.stringify(e.model)}];this.enqueueLogEvent(this.createLogEvent("api_request",r)),this.flushIfNeeded()}logApiResponseEvent(e){let r=[{gemini_cli_key:21,value:JSON.stringify(e.model)},{gemini_cli_key:22,value:JSON.stringify(e.status_code)},{gemini_cli_key:23,value:JSON.stringify(e.duration_ms)},{gemini_cli_key:25,value:JSON.stringify(e.usage.input_token_count)},{gemini_cli_key:26,value:JSON.stringify(e.usage.output_token_count)},{gemini_cli_key:27,value:JSON.stringify(e.usage.cached_content_token_count)},{gemini_cli_key:28,value:JSON.stringify(e.usage.thoughts_token_count)},{gemini_cli_key:29,value:JSON.stringify(e.usage.tool_token_count)},{gemini_cli_key:167,value:JSON.stringify(e.usage.context_breakdown?.system_instructions??0)},{gemini_cli_key:168,value:JSON.stringify(e.usage.context_breakdown?.tool_definitions??0)},{gemini_cli_key:169,value:JSON.stringify(e.usage.context_breakdown?.history??0)},{gemini_cli_key:170,value:JSON.stringify(e.usage.context_breakdown?.tool_calls??{})},{gemini_cli_key:171,value:JSON.stringify(e.usage.context_breakdown?.mcp_servers??0)}];this.enqueueLogEvent(this.createLogEvent("api_response",r)),this.flushIfNeeded()}logApiErrorEvent(e){let r=[{gemini_cli_key:30,value:JSON.stringify(e.model)},{gemini_cli_key:31,value:JSON.stringify(e.error_type)},{gemini_cli_key:32,value:JSON.stringify(e.status_code)},{gemini_cli_key:33,value:JSON.stringify(e.duration_ms)}];this.enqueueLogEvent(this.createLogEvent("api_error",r)),this.flushIfNeeded()}logChatCompressionEvent(e){let r=[{gemini_cli_key:60,value:`${e.tokens_before}`},{gemini_cli_key:61,value:`${e.tokens_after}`}];this.enqueueLogEvent(this.createLogEvent("chat_compression",r))}logFlashFallbackEvent(){this.enqueueLogEvent(this.createLogEvent("flash_fallback",[])),this.flushToClearcut().catch(e=>{U.debug("Error flushing to Clearcut:",e)})}logRipgrepFallbackEvent(){this.enqueueLogEvent(this.createLogEvent("ripgrep_fallback",[])),this.flushToClearcut().catch(e=>{U.debug("Error flushing to Clearcut:",e)})}logLoopDetectedEvent(e){let r=[{gemini_cli_key:38,value:JSON.stringify(e.loop_type)}];e.confirmed_by_model&&r.push({gemini_cli_key:129,value:e.confirmed_by_model}),this.enqueueLogEvent(this.createLogEvent("loop_detected",r)),this.flushIfNeeded()}logLoopDetectionDisabledEvent(){let e=[];this.enqueueLogEvent(this.createLogEvent("loop_detection_disabled",e)),this.flushIfNeeded()}logNextSpeakerCheck(e){let r=[{gemini_cli_key:43,value:JSON.stringify(e.finish_reason)},{gemini_cli_key:44,value:JSON.stringify(e.result)}];this.enqueueLogEvent(this.createLogEvent("next_speaker_check",r)),this.flushIfNeeded()}logSlashCommandEvent(e){let r=[{gemini_cli_key:41,value:JSON.stringify(e.command)}];e.subcommand&&r.push({gemini_cli_key:42,value:JSON.stringify(e.subcommand)}),e.status&&r.push({gemini_cli_key:51,value:JSON.stringify(e.status)}),e.extension_id&&r.push({gemini_cli_key:121,value:e.extension_id}),this.enqueueLogEvent(this.createLogEvent("slash_command",r)),this.flushIfNeeded()}logRewindEvent(e){let r=[{gemini_cli_key:144,value:e.outcome}];this.enqueueLogEvent(this.createLogEvent("rewind",r)),this.flushIfNeeded()}logMalformedJsonResponseEvent(e){let r=[{gemini_cli_key:45,value:JSON.stringify(e.model)}];this.enqueueLogEvent(this.createLogEvent("malformed_json_response",r)),this.flushIfNeeded()}logIdeConnectionEvent(e){let r=[{gemini_cli_key:46,value:JSON.stringify(e.connection_type)}];this.enqueueLogEventAfterExperimentsLoadAsync(this.createLogEvent("start_session",r)).then(()=>{this.flushToClearcut().catch(n=>{U.debug("Error flushing to Clearcut:",n)})})}logConversationFinishedEvent(e){let r=[{gemini_cli_key:40,value:this.config?.getSessionId()??""},{gemini_cli_key:59,value:JSON.stringify(e.turnCount)},{gemini_cli_key:58,value:e.approvalMode}];this.enqueueLogEvent(this.createLogEvent("conversation_finished",r)),this.flushIfNeeded()}logEndSessionEvent(){this.enqueueLogEvent(this.createLogEvent("end_session",[])),this.flushToClearcut().catch(e=>{U.debug("Error flushing to Clearcut:",e)})}logInvalidChunkEvent(e){let r=[];e.error_message&&r.push({gemini_cli_key:75,value:e.error_message}),this.enqueueLogEvent(this.createLogEvent("invalid_chunk",r)),this.flushIfNeeded()}logContentRetryEvent(e){let r=[{gemini_cli_key:76,value:String(e.attempt_number)},{gemini_cli_key:77,value:e.error_type},{gemini_cli_key:78,value:String(e.retry_delay_ms)},{gemini_cli_key:20,value:e.model}];this.enqueueLogEvent(this.createLogEvent("content_retry",r)),this.flushIfNeeded()}logContentRetryFailureEvent(e){let r=[{gemini_cli_key:79,value:String(e.total_attempts)},{gemini_cli_key:80,value:e.final_error_type},{gemini_cli_key:20,value:e.model}];e.total_duration_ms&&r.push({gemini_cli_key:81,value:String(e.total_duration_ms)}),this.enqueueLogEvent(this.createLogEvent("content_retry_failure",r)),this.flushIfNeeded()}logNetworkRetryAttemptEvent(e){let r=[{gemini_cli_key:180,value:String(e.attempt)},{gemini_cli_key:181,value:String(e.delay_ms)},{gemini_cli_key:182,value:e.error_type},{gemini_cli_key:20,value:e.model}];this.enqueueLogEvent(this.createLogEvent("retry_attempt",r)),this.flushIfNeeded()}async logExtensionInstallEvent(e){let r=[{gemini_cli_key:85,value:e.hashed_extension_name},{gemini_cli_key:121,value:e.extension_id},{gemini_cli_key:86,value:e.extension_version},{gemini_cli_key:87,value:e.extension_source},{gemini_cli_key:88,value:e.status}];this.enqueueLogEvent(this.createBasicLogEvent("extension_install",r)),await this.flushToClearcut().catch(n=>{U.debug("Error flushing to Clearcut:",n)})}async logExtensionUninstallEvent(e){let r=[{gemini_cli_key:85,value:e.hashed_extension_name},{gemini_cli_key:121,value:e.extension_id},{gemini_cli_key:96,value:e.status}];this.enqueueLogEvent(this.createBasicLogEvent("extension_uninstall",r)),await this.flushToClearcut().catch(n=>{U.debug("Error flushing to Clearcut:",n)})}async logExtensionUpdateEvent(e){let r=[{gemini_cli_key:85,value:e.hashed_extension_name},{gemini_cli_key:121,value:e.extension_id},{gemini_cli_key:86,value:e.extension_version},{gemini_cli_key:117,value:e.extension_previous_version},{gemini_cli_key:87,value:e.extension_source},{gemini_cli_key:118,value:e.status}];this.enqueueLogEvent(this.createBasicLogEvent("extension_update",r)),await this.flushToClearcut().catch(n=>{U.debug("Error flushing to Clearcut:",n)})}logToolOutputTruncatedEvent(e){let r=[{gemini_cli_key:14,value:JSON.stringify(e.tool_name)},{gemini_cli_key:89,value:JSON.stringify(e.original_content_length)},{gemini_cli_key:90,value:JSON.stringify(e.truncated_content_length)},{gemini_cli_key:91,value:JSON.stringify(e.threshold)}],n=this.createLogEvent("tool_output_truncated",r);this.enqueueLogEvent(n),this.flushIfNeeded()}logToolOutputMaskingEvent(e){let r=[{gemini_cli_key:148,value:e.tokens_before.toString()},{gemini_cli_key:149,value:e.tokens_after.toString()},{gemini_cli_key:150,value:e.masked_count.toString()},{gemini_cli_key:151,value:e.total_prunable_tokens.toString()}];this.enqueueLogEvent(this.createLogEvent("tool_output_masking",r)),this.flushIfNeeded()}logModelRoutingEvent(e){let r=[{gemini_cli_key:97,value:e.decision_model},{gemini_cli_key:101,value:e.decision_source},{gemini_cli_key:99,value:e.routing_latency_ms.toString()},{gemini_cli_key:98,value:e.failed.toString()}];e.error_message&&r.push({gemini_cli_key:100,value:e.error_message}),e.reasoning&&this.config?.getTelemetryLogPromptsEnabled()&&r.push({gemini_cli_key:145,value:e.reasoning}),e.enable_numerical_routing!==void 0&&r.push({gemini_cli_key:146,value:e.enable_numerical_routing.toString()}),e.classifier_threshold&&r.push({gemini_cli_key:147,value:e.classifier_threshold}),this.enqueueLogEvent(this.createLogEvent("model_routing",r)),this.flushIfNeeded()}async logExtensionEnableEvent(e){let r=[{gemini_cli_key:85,value:e.hashed_extension_name},{gemini_cli_key:121,value:e.extension_id},{gemini_cli_key:102,value:e.setting_scope}];this.enqueueLogEvent(this.createBasicLogEvent("extension_enable",r)),await this.flushToClearcut().catch(n=>{U.debug("Error flushing to Clearcut:",n)})}logModelSlashCommandEvent(e){let r=[{gemini_cli_key:108,value:e.model_name}];this.enqueueLogEvent(this.createLogEvent("model_slash_command",r)),this.flushIfNeeded()}async logExtensionDisableEvent(e){let r=[{gemini_cli_key:85,value:e.hashed_extension_name},{gemini_cli_key:121,value:e.extension_id},{gemini_cli_key:107,value:e.setting_scope}];this.enqueueLogEvent(this.createBasicLogEvent("extension_disable",r)),await this.flushToClearcut().catch(n=>{U.debug("Error flushing to Clearcut:",n)})}logEditStrategyEvent(e){let r=[{gemini_cli_key:109,value:e.strategy}];this.enqueueLogEvent(this.createLogEvent("edit_strategy",r)),this.flushIfNeeded()}logEditCorrectionEvent(e){let r=[{gemini_cli_key:110,value:e.correction}];this.enqueueLogEvent(this.createLogEvent("edit_correction",r)),this.flushIfNeeded()}logAgentStartEvent(e){let r=[{gemini_cli_key:112,value:e.agent_id},{gemini_cli_key:111,value:e.agent_name}];this.enqueueLogEvent(this.createLogEvent("agent_start",r)),this.flushIfNeeded()}logAgentFinishEvent(e){let r=[{gemini_cli_key:112,value:e.agent_id},{gemini_cli_key:111,value:e.agent_name},{gemini_cli_key:113,value:e.duration_ms.toString()},{gemini_cli_key:114,value:e.turn_count.toString()},{gemini_cli_key:115,value:e.terminate_reason}];this.enqueueLogEvent(this.createLogEvent("agent_finish",r)),this.flushIfNeeded()}logRecoveryAttemptEvent(e){let r=[{gemini_cli_key:112,value:e.agent_id},{gemini_cli_key:111,value:e.agent_name},{gemini_cli_key:122,value:e.reason},{gemini_cli_key:123,value:e.duration_ms.toString()},{gemini_cli_key:124,value:e.success.toString()},{gemini_cli_key:114,value:e.turn_count.toString()}];this.enqueueLogEvent(this.createLogEvent("recovery_attempt",r)),this.flushIfNeeded()}logWebFetchFallbackAttemptEvent(e){let r=[{gemini_cli_key:116,value:e.reason}];this.enqueueLogEvent(this.createLogEvent("web_fetch_fallback_attempt",r)),this.flushIfNeeded()}logLlmLoopCheckEvent(e){let r=[{gemini_cli_key:35,value:e.prompt_id},{gemini_cli_key:126,value:e.flash_confidence.toString()},{gemini_cli_key:127,value:e.main_model},{gemini_cli_key:128,value:e.main_model_confidence.toString()}];this.enqueueLogEvent(this.createLogEvent("llm_loop_check",r)),this.flushIfNeeded()}logHookCallEvent(e){let r=[{gemini_cli_key:133,value:e.hook_event_name},{gemini_cli_key:134,value:e.duration_ms.toString()},{gemini_cli_key:135,value:e.success.toString()}];e.exit_code!==void 0&&r.push({gemini_cli_key:136,value:e.exit_code.toString()}),this.enqueueLogEvent(this.createLogEvent("hook_call",r)),this.flushIfNeeded()}logApprovalModeSwitchEvent(e){let r=[{gemini_cli_key:141,value:e.from_mode},{gemini_cli_key:142,value:e.to_mode}];this.enqueueLogEvent(this.createLogEvent("approval_mode_switch",r)),this.flushIfNeeded()}logApprovalModeDurationEvent(e){let r=[{gemini_cli_key:141,value:e.mode},{gemini_cli_key:143,value:e.duration_ms.toString()}];this.enqueueLogEvent(this.createLogEvent("approval_mode_duration",r)),this.flushIfNeeded()}logPlanExecutionEvent(e){let r=[{gemini_cli_key:58,value:e.approval_mode}];this.enqueueLogEvent(this.createLogEvent("plan_execution",r)),this.flushIfNeeded()}logKeychainAvailabilityEvent(e){let r=[{gemini_cli_key:156,value:JSON.stringify(e.available)}];this.enqueueLogEvent(this.createLogEvent("keychain_availability",r)),this.flushIfNeeded()}logTokenStorageInitializationEvent(e){let r=[{gemini_cli_key:157,value:e.type},{gemini_cli_key:158,value:JSON.stringify(e.forced)}];this.enqueueLogEvent(this.createLogEvent("token_storage_initialization",r)),this.flushIfNeeded()}logOnboardingStartEvent(e){let r=[{gemini_cli_key:192,value:"true"}];this.enqueueLogEvent(this.createLogEvent("onboarding_start",r)),this.flushIfNeeded()}logOnboardingSuccessEvent(e){let r=[];e.userTier&&r.push({gemini_cli_key:193,value:e.userTier}),e.duration_ms!==void 0&&r.push({gemini_cli_key:194,value:e.duration_ms.toString()}),this.enqueueLogEvent(this.createLogEvent("onboarding_success",r)),this.flushIfNeeded()}logStartupStatsEvent(e){let r=[{gemini_cli_key:172,value:JSON.stringify(e.phases)},{gemini_cli_key:173,value:e.os_platform},{gemini_cli_key:174,value:e.os_release},{gemini_cli_key:175,value:JSON.stringify(e.is_docker)}];this.enqueueLogEvent(this.createLogEvent("startup_stats",r)),this.flushIfNeeded()}logCreditsUsedEvent(e){let r=[{gemini_cli_key:185,value:JSON.stringify(e.model)},{gemini_cli_key:186,value:JSON.stringify(e.credits_consumed)},{gemini_cli_key:187,value:JSON.stringify(e.credits_remaining)}];this.enqueueLogEvent(this.createLogEvent("credits_used",r)),this.flushIfNeeded()}logOverageOptionSelectedEvent(e){let r=[{gemini_cli_key:185,value:JSON.stringify(e.model)},{gemini_cli_key:188,value:JSON.stringify(e.selected_option)},{gemini_cli_key:189,value:JSON.stringify(e.credit_balance)}];this.enqueueLogEvent(this.createLogEvent("overage_option_selected",r)),this.flushIfNeeded()}logEmptyWalletMenuShownEvent(e){let r=[{gemini_cli_key:185,value:JSON.stringify(e.model)}];this.enqueueLogEvent(this.createLogEvent("empty_wallet_menu_shown",r)),this.flushIfNeeded()}logCreditPurchaseClickEvent(e){let r=[{gemini_cli_key:185,value:JSON.stringify(e.model)},{gemini_cli_key:190,value:JSON.stringify(e.source)}];this.enqueueLogEvent(this.createLogEvent("credit_purchase_click",r)),this.flushIfNeeded()}addDefaultFields(e,r){let n=[{gemini_cli_key:40,value:this.config?.getSessionId()??""},{gemini_cli_key:36,value:JSON.stringify(this.config?.getContentGeneratorConfig()?.authType)},{gemini_cli_key:37,value:`${r}`},{gemini_cli_key:35,value:this.promptId},{gemini_cli_key:83,value:process.versions.node},{gemini_cli_key:84,value:this.getConfigJson()},{gemini_cli_key:125,value:this.config?.isInteractive().toString()??"false"},{gemini_cli_key:141,value:typeof this.config?.getPolicyEngine=="function"&&typeof this.config.getPolicyEngine()?.getApprovalMode=="function"?this.config.getPolicyEngine().getApprovalMode():""}];return this.config?.getExperiments()&&n.push({gemini_cli_key:131,value:this.config?.getExperiments()?.experimentIds.toString()??"NA"}),[...e,...n]}getProxyAgent(){let e=this.config?.getProxy();if(e){if(e.startsWith("http"))return new D2t.HttpsProxyAgent(e);throw new Error("Unsupported proxy type")}}getConfigJson(){return EKe(this.config)}shutdown(){this.logEndSessionEvent()}requeueFailedEvents(e){let r=e.slice(-ZX);e.length>ZX&&this.config?.getDebugMode()&&U.warn(`ClearcutLogger: Dropping ${e.length-ZX} events due to retry queue limit. Total events: ${e.length}, keeping: ${ZX}`);let n=XX-this.events.size,o=Math.min(r.length,n);if(o===0){this.config?.getDebugMode()&&U.debug(`ClearcutLogger: No events re-queued (queue size: ${this.events.size})`);return}let s=r.slice(r.length-o);for(let c=s.length-1;c>=0;c--)this.events.unshift(s[c]);for(;this.events.size>XX;)this.events.pop();this.config?.getDebugMode()&&U.debug(`ClearcutLogger: Re-queued ${o} events for retry (queue size: ${this.events.size})`)}};var Z1=Me(xt(),1),B2t=Me(jp(),1);import*as M2t from"node:fs";var e4=class{writeStream;constructor(e){this.writeStream=M2t.createWriteStream(e,{flags:"a"})}serialize(e){return Sr(e,2)+`
|
|
1061
|
+
`),U.error("Failed to authenticate with user code:",be(e)),!1}}async function L6r(t){let e=await M6r(),r=process.env.OAUTH_CALLBACK_HOST||"127.0.0.1",n=`http://127.0.0.1:${e}/oauth2callback`,o=kdt.randomBytes(32).toString("hex"),s=t.generateAuthUrl({redirect_uri:n,access_type:"offline",scope:nEe,state:o}),c=new Promise((u,d)=>{let l=Pdt.createServer(async(a,p)=>{try{if(a.url.indexOf("/oauth2callback")===-1){p.writeHead(TV,{Location:rEe}),p.end(),d(new aa("OAuth callback not received. Unexpected request: "+a.url));return}let f=new O6r.URL(a.url,"http://127.0.0.1:3000").searchParams;if(f.get("error")){p.writeHead(TV,{Location:rEe}),p.end();let g=f.get("error"),y=f.get("error_description")||"No additional details provided";d(new aa(`Google OAuth error: ${g}. ${y}`))}else if(f.get("state")!==o)p.end("State mismatch. Possible CSRF attack"),d(new aa("OAuth state mismatch. Possible CSRF attack or browser session issue."));else if(f.get("code"))try{let{tokens:g}=await t.getToken({code:f.get("code"),redirect_uri:n});t.setCredentials(g);try{await CV(t)}catch(y){U.warn("Failed to retrieve Google Account ID during authentication:",be(y))}p.writeHead(TV,{Location:k6r}),p.end(),u()}catch(g){p.writeHead(TV,{Location:rEe}),p.end(),d(new aa(`Failed to exchange authorization code for tokens: ${be(g)}`))}else d(new aa("No authorization code received from Google OAuth. Please try authenticating again."))}catch(f){f instanceof aa?d(f):d(new aa(`Unexpected error during OAuth authentication: ${be(f)}`))}finally{l.close()}});l.listen(e,r,()=>{}),l.on("error",a=>{d(new aa(`OAuth callback server error: ${be(a)}`))})});return{authUrl:s,loginCompletePromise:c}}function M6r(){return new Promise((t,e)=>{let r=0;try{let n=process.env.OAUTH_CALLBACK_PORT;if(n)return r=parseInt(n,10),isNaN(r)||r<=0||r>65535?e(new Error(`Invalid value for OAUTH_CALLBACK_PORT: "${n}"`)):t(r);let o=Ndt.createServer();o.listen(0,()=>{let s=o.address();s&&typeof s=="object"&&(r=s.port)}),o.on("listening",()=>{o.close(),o.unref()}),o.on("error",s=>e(s)),o.on("close",()=>t(r))}catch(n){e(n)}})}async function B6r(){if(iEe())return Yx.loadCredentials();let e=[er.getOAuthCredsPath(),process.env.GOOGLE_APPLICATION_CREDENTIALS].filter(r=>!!r);for(let r of e)try{let n=await JL.readFile(r,"utf-8");return JSON.parse(n)}catch(n){U.debug(`Failed to load credentials from ${r}:`,be(n))}return null}function U6r(){KL.clear()}async function GBi(){try{iEe()?await Yx.clearCredentials():await JL.rm(er.getOAuthCredsPath(),{force:!0}),await xV.clearCachedGoogleAccount(),U6r()}catch(t){U.warn("Failed to clear cached credentials:",t)}}async function CV(t){try{let{token:e}=await t.getAccessToken();if(!e)return;let r=await fetch("https://www.googleapis.com/oauth2/v2/userinfo",{headers:{Authorization:`Bearer ${e}`}});if(!r.ok){U.log("Failed to fetch user info:",r.status,r.statusText);return}let n=await r.json();await xV.cacheGoogleAccount(n.email)}catch(e){U.log("Error retrieving user info:",e)}}function VBi(){KL.clear()}async function F6r(t){let e=er.getOAuthCredsPath();await JL.mkdir(R6r.dirname(e),{recursive:!0});let r=JSON.stringify(t,null,2);await JL.writeFile(e,r,{mode:384});try{await JL.chmod(e,384)}catch{}}var Bdt=(l=>(l.DASHER_USER="DASHER_USER",l.INELIGIBLE_ACCOUNT="INELIGIBLE_ACCOUNT",l.NON_USER_ACCOUNT="NON_USER_ACCOUNT",l.RESTRICTED_AGE="RESTRICTED_AGE",l.RESTRICTED_NETWORK="RESTRICTED_NETWORK",l.UNKNOWN="UNKNOWN",l.UNKNOWN_LOCATION="UNKNOWN_LOCATION",l.UNSUPPORTED_LOCATION="UNSUPPORTED_LOCATION",l.VALIDATION_REQUIRED="VALIDATION_REQUIRED",l))(Bdt||{}),ty={FREE:"free-tier",LEGACY:"legacy-tier",STANDARD:"standard-tier"},j6r=(o=>(o.Default="DEFAULT",o.Notice="NOTICE",o.Warning="WARNING",o.Error="ERROR",o))(j6r||{}),Udt=(a=>(a[a.UNKNOWN=0]="UNKNOWN",a[a.THUMBSUP=1]="THUMBSUP",a[a.THUMBSDOWN=2]="THUMBSDOWN",a[a.COPY=3]="COPY",a[a.INSERT=4]="INSERT",a[a.ACCEPT_CODE_BLOCK=5]="ACCEPT_CODE_BLOCK",a[a.ACCEPT_ALL=6]="ACCEPT_ALL",a[a.ACCEPT_FILE=7]="ACCEPT_FILE",a[a.DIFF=8]="DIFF",a[a.ACCEPT_RANGE=9]="ACCEPT_RANGE",a))(Udt||{}),Fdt=(s=>(s[s.ACTION_STATUS_UNSPECIFIED=0]="ACTION_STATUS_UNSPECIFIED",s[s.ACTION_STATUS_NO_ERROR=1]="ACTION_STATUS_NO_ERROR",s[s.ACTION_STATUS_ERROR_UNKNOWN=2]="ACTION_STATUS_ERROR_UNKNOWN",s[s.ACTION_STATUS_CANCELLED=3]="ACTION_STATUS_CANCELLED",s[s.ACTION_STATUS_EMPTY=4]="ACTION_STATUS_EMPTY",s))(Fdt||{}),jdt=(o=>(o[o.INITIATION_METHOD_UNSPECIFIED=0]="INITIATION_METHOD_UNSPECIFIED",o[o.TAB=1]="TAB",o[o.COMMAND=2]="COMMAND",o[o.AGENT=3]="AGENT",o))(jdt||{}),Q6r=Y.object({extensionsEnabled:Y.boolean().optional()}),Qdt=Y.object({extensionsSetting:Q6r.optional(),unmanagedCapabilitiesEnabled:Y.boolean().optional()}),q6r=Y.object({url:Y.string().optional(),type:Y.enum(["sse","http"]).optional(),trust:Y.boolean().optional(),includeTools:Y.array(Y.string()).optional(),excludeTools:Y.array(Y.string()).optional()}),G6r=Y.object({scopes:Y.array(Y.string()).optional(),clientId:Y.string().optional(),clientSecret:Y.string().optional()}),qdt=Y.object({url:Y.string(),type:Y.enum(["sse","http"]),authProviderType:Y.nativeEnum(OV).optional(),oauth:G6r.optional(),targetAudience:Y.string().optional(),targetServiceAccount:Y.string().optional(),headers:Y.record(Y.string()).optional(),trust:Y.boolean().optional(),timeout:Y.number().optional(),description:Y.string().optional(),includeTools:Y.array(Y.string()).optional(),excludeTools:Y.array(Y.string()).optional()}),oEe=Y.object({mcpServers:Y.record(q6r).optional(),requiredMcpServers:Y.record(qdt).optional()}),V6r=Y.object({mcpEnabled:Y.boolean().optional(),mcpConfigJson:Y.string().optional()}),WBi=Y.object({strictModeDisabled:Y.boolean().optional(),mcpSetting:Y.object({mcpEnabled:Y.boolean().optional(),mcpConfig:oEe.optional(),requiredMcpConfig:Y.record(qdt).optional()}).optional(),cliFeatureSetting:Qdt.optional()}),Gdt=Y.object({secureModeEnabled:Y.boolean().optional(),strictModeDisabled:Y.boolean().optional(),mcpSetting:V6r.optional(),cliFeatureSetting:Qdt.optional(),adminControlsApplicable:Y.boolean().optional()});import*as UWt from"node:readline";import{Readable as C$n}from"node:stream";var MS="GOOGLE_ONE_AI",H6r=new Set([Jf,Gw,qa]);function Vdt(t){return H6r.has(t)}var $6r="https://one.google.com/ai",z6r="https://accounts.google.com/AccountChooser",W6r="gemini_cli",Y6r="web";function J6r(t,e){let r=new URLSearchParams({Email:t,continue:e});return`${z6r}?${r.toString()}`}var KBi={MANAGE_ACTIVITY:"hydrogen_cli_settings_ai_credits_activity_page",MANAGE_ADD_CREDITS:"hydrogen_cli_settings_add_credits",EMPTY_WALLET_ADD_CREDITS:"hydrogen_cli_insufficient_credits_add_credits"};function XBi(t,e,r){let n=`${$6r}/${t}`,o=new URLSearchParams({utm_source:W6r,utm_medium:Y6r,utm_campaign:r}),s=`${n}?${o.toString()}`;return J6r(e,s)}function Hdt(t){if(!t?.availableCredits)return null;let e=t.availableCredits.filter(r=>r.creditType===MS);return e.length===0?null:e.reduce((r,n)=>{let o=parseInt(n.creditAmount??"0",10);return r+(isNaN(o)?0:o)},0)}var sEe=50;function $dt(t,e){return t==="always"&&e!=null&&e>=sEe}function ZBi(t,e){return t==="ask"&&e!=null&&e>=sEe}function e5i(t,e){return t!=="never"&&e!=null&&e<sEe}var qt=Me(fh(),1);Fe();var aMt=Me(PTe(),1),lMt=Me(NTe(),1),cMt=Me(FTe(),1),uMt=Me(QTe(),1),dMt=Me(GTe(),1),pMt=Me(SM(),1);Tp();var fMt=Me(TCt(),1);za();var hMt=Me(my(),1),cre=Me(cJ(),1),ure=Me(DY(),1),nv=Me(jp(),1),gMt=Me(zCt(),1);var N2t=Me(Vxt(),1),D2t=Me(VJe(),1);import{createHash as vcn}from"node:crypto";import*as aI from"node:os";var DOe=Me(t2t(),1),LOe=Me(l2t(),1),I2t=Me(f2t(),1),Kp=Me(A2t(),1);var MOe=Me(v2t(),1);var X1=Me(kOe(),1);var mcn=Me(w2t(),1),ycn=Me(O2t(),1);var FVi=DOe.default.MinFibonacciHeap,jVi=DOe.default.MaxFibonacciHeap,QVi=LOe.default.MinHeap,qVi=LOe.default.MaxHeap,GVi=I2t.default.GeneralizedSuffixArray,VVi=Kp.default.Uint8Vector,HVi=Kp.default.Uint8ClampedVector,$Vi=Kp.default.Int8Vector,zVi=Kp.default.Uint16Vector,WVi=Kp.default.Int16Vector,YVi=Kp.default.Uint32Vector,JVi=Kp.default.Int32Vector,KVi=Kp.default.Float32Vector,XVi=Kp.default.Float64Vector,ZVi=Kp.default.PointerVector;var R2t="2e3887d",P2t="0.37.2";var Rr={devin:{name:"devin",displayName:"Devin"},replit:{name:"replit",displayName:"Replit"},cursor:{name:"cursor",displayName:"Cursor"},cloudshell:{name:"cloudshell",displayName:"Cloud Shell"},codespaces:{name:"codespaces",displayName:"GitHub Codespaces"},firebasestudio:{name:"firebasestudio",displayName:"Firebase Studio"},trae:{name:"trae",displayName:"Trae"},vscode:{name:"vscode",displayName:"VS Code"},vscodefork:{name:"vscodefork",displayName:"IDE"},positron:{name:"positron",displayName:"Positron"},antigravity:{name:"antigravity",displayName:"Antigravity"},sublimetext:{name:"sublimetext",displayName:"Sublime Text"},jetbrains:{name:"jetbrains",displayName:"JetBrains IDE"},intellijidea:{name:"intellijidea",displayName:"IntelliJ IDEA"},webstorm:{name:"webstorm",displayName:"WebStorm"},pycharm:{name:"pycharm",displayName:"PyCharm"},goland:{name:"goland",displayName:"GoLand"},androidstudio:{name:"androidstudio",displayName:"Android Studio"},clion:{name:"clion",displayName:"CLion"},rustrover:{name:"rustrover",displayName:"RustRover"},datagrip:{name:"datagrip",displayName:"DataGrip"},phpstorm:{name:"phpstorm",displayName:"PhpStorm"},zed:{name:"zed",displayName:"Zed"},xcode:{name:"xcode",displayName:"XCode"}};function oI(){return!!(process.env.EDITOR_IN_CLOUD_SHELL||process.env.CLOUD_SHELL)}function BOe(){return!!process.env.TERMINAL_EMULATOR?.toLowerCase().includes("jetbrains")}function sI(){return process.env.ANTIGRAVITY_CLI_ALIAS?Rr.antigravity:process.env.__COG_BASHRC_SOURCED?Rr.devin:process.env.REPLIT_USER?Rr.replit:process.env.CURSOR_TRACE_ID?Rr.cursor:process.env.CODESPACES?Rr.codespaces:oI()?Rr.cloudshell:process.env.TERM_PRODUCT==="Trae"?Rr.trae:process.env.MONOSPACE_ENV?Rr.firebasestudio:process.env.POSITRON==="1"?Rr.positron:process.env.TERM_PROGRAM==="sublime"?Rr.sublimetext:process.env.ZED_SESSION_ID||process.env.TERM_PROGRAM==="Zed"?Rr.zed:process.env.XCODE_VERSION_ACTUAL?Rr.xcode:BOe()?Rr.jetbrains:Rr.vscode}function Acn(t,e){return t.name!==Rr.vscode.name?t:!e.command||e.command.toLowerCase().includes("code")?Rr.vscode:Rr.vscodefork}function Ecn(t,e){if(t.name!==Rr.jetbrains.name||!e.command)return t;let r=e.command.toLowerCase(),n=[["idea",Rr.intellijidea],["webstorm",Rr.webstorm],["pycharm",Rr.pycharm],["goland",Rr.goland],["studio",Rr.androidstudio],["clion",Rr.clion],["rustrover",Rr.rustrover],["datagrip",Rr.datagrip],["phpstorm",Rr.phpstorm]];for(let[o,s]of n)if(r.includes(o))return s;return t}function k2t(t,e){if(e?.name&&e.displayName)return{name:e.name,displayName:e.displayName};if(process.env.TERM_PROGRAM!=="vscode"&&process.env.TERM_PROGRAM!=="sublime"&&process.env.TERM_PROGRAM!=="Zed"&&!process.env.ZED_SESSION_ID&&!process.env.XCODE_VERSION_ACTUAL&&!BOe())return;let r=sI();return BOe()?Ecn(r,t):Acn(r,t)}function bcn(){return process.env.SURFACE?process.env.SURFACE:oI()?Rr.cloudshell.name:process.env.GITHUB_SHA?"GitHub":process.env.TERM_PROGRAM==="vscode"?sI().name||Rr.vscode.name:"SURFACE_NOT_SET"}function Scn(){return process.env.GH_WORKFLOW_NAME}function Tcn(){return process.env.GITHUB_REPOSITORY}function Ccn(){return process.env.GITHUB_EVENT_NAME}function wcn(){return process.env.GH_PR_NUMBER}function xcn(){return process.env.GH_ISSUE_NUMBER}function Ocn(){return process.env.GH_CUSTOM_TRACKING_ID}var Icn="https://play.googleapis.com/log?format=json&hasfast=true",Rcn=1e3*60,XX=1e3,ZX=100,L2t="NA",Z6;async function Pcn(){try{let t=await N2t.default.graphics();t.controllers&&t.controllers.length>0?Z6=t.controllers.map(e=>e.model).join(", "):Z6=L2t}catch(t){Z6="FAILED",U.error("Failed to get GPU information for telemetry",be(t))}}async function kcn(){return Z6||await Pcn(),Z6??L2t}var Ct=class t{static instance;config;sessionData=[];promptId="";installationManager;userAccountManager;hashedGHRepositoryName;events;lastFlushTime=Date.now();flushing=!1;pendingFlush=!1;constructor(e){this.config=e,this.events=new MOe.default(Array,XX),this.promptId=e?.getSessionId()??"",this.installationManager=new jA,this.userAccountManager=new UA;let r=Tcn();r&&(this.hashedGHRepositoryName=vcn("sha256").update(r).digest("hex"))}static getInstance(e){if(!(e===void 0||!e?.getUsageStatisticsEnabled()))return t.instance||(t.instance=new t(e)),t.instance}static clearInstance(){t.instance=void 0}enqueueHelper(e,r){let n=this.events.size>=XX;n&&this.events.shift();let o={event_time_ms:Date.now(),source_extension_json:Sr(e)};r!==void 0&&(o.exp={gws_experiment:r}),this.events.push([o]),n&&this.config?.getDebugMode()&&U.debug(`ClearcutLogger: Dropped old event to prevent memory leak (queue size: ${this.events.size})`)}enqueueLogEvent(e){try{this.enqueueHelper(e)}catch(r){this.config?.getDebugMode()&&U.warn("ClearcutLogger: Failed to enqueue log event.",r)}}async enqueueLogEventAfterExperimentsLoadAsync(e){try{this.config?.getExperimentsAsync().then(r=>{if(r){let n=[{gemini_cli_key:131,value:r.experimentIds.toString()??"NA"}];e.event_metadata=[[...e.event_metadata[0],...n]]}this.enqueueHelper(e,r?.experimentIds)})}catch(r){U.warn("ClearcutLogger: Failed to enqueue log event.",r)}}createBasicLogEvent(e,r=[]){let n=this.userAccountManager.getCachedGoogleAccount(),o=bcn(),s=Scn(),c=Ccn(),u=wcn(),d=xcn(),l=Ocn(),a=[...r,{gemini_cli_key:39,value:o},{gemini_cli_key:54,value:P2t},{gemini_cli_key:55,value:R2t},{gemini_cli_key:82,value:process.platform}];s&&a.push({gemini_cli_key:130,value:s}),this.hashedGHRepositoryName&&a.push({gemini_cli_key:132,value:this.hashedGHRepositoryName}),c&&a.push({gemini_cli_key:176,value:c}),u&&a.push({gemini_cli_key:177,value:u}),d&&a.push({gemini_cli_key:178,value:d}),l&&a.push({gemini_cli_key:179,value:l});let p={console_type:"GEMINI_CLI",application:102,event_name:e,event_metadata:[a]};return n?p.client_email=n:p.client_install_id=this.installationManager.getInstallationId(),p}createLogEvent(e,r=[]){e!=="start_session"&&r.push(...this.sessionData);let n=this.userAccountManager.getLifetimeGoogleAccounts();return r=this.addDefaultFields(r,n),this.createBasicLogEvent(e,r)}flushIfNeeded(){Date.now()-this.lastFlushTime<Rcn||this.flushToClearcut().catch(e=>{U.debug("Error flushing to Clearcut:",e)})}async flushToClearcut(){if(this.flushing)return this.config?.getDebugMode()&&U.debug("ClearcutLogger: Flush already in progress, marking pending flush."),this.pendingFlush=!0,Promise.resolve({});this.flushing=!0,this.config?.getDebugMode()&&U.log("Flushing log events to Clearcut.");let e=this.events.toArray();this.events.clear();let r=[{log_source_name:"CONCORD",request_time_ms:Date.now(),log_event:e}],n={};try{let o=await fetch(Icn,{method:"POST",body:Sr(r),headers:{"Content-Type":"application/json"}}),s=await o.text();if(o.status>=200&&o.status<300){this.lastFlushTime=Date.now();let c=Number(JSON.parse(s)[0]);n={...n,nextRequestWaitMs:c}}else this.config?.getDebugMode()&&U.warn(`Error flushing log events: HTTP ${o.status}: ${o.statusText}`),this.requeueFailedEvents(e)}catch(o){this.config?.getDebugMode()&&U.warn("Error flushing log events:",o),this.requeueFailedEvents(e)}return this.flushing=!1,this.pendingFlush&&(this.pendingFlush=!1,this.flushToClearcut().catch(o=>{this.config?.getDebugMode()&&U.debug("Error in pending flush to Clearcut:",o)})),n}async logStartSessionEvent(e){let r=[{gemini_cli_key:1,value:e.model},{gemini_cli_key:2,value:e.embedding_model},{gemini_cli_key:3,value:e.sandbox_enabled.toString()},{gemini_cli_key:4,value:e.core_tools_enabled},{gemini_cli_key:5,value:e.approval_mode},{gemini_cli_key:6,value:e.api_key_enabled.toString()},{gemini_cli_key:7,value:e.vertex_ai_enabled.toString()},{gemini_cli_key:8,value:e.debug_enabled.toString()},{gemini_cli_key:7,value:e.vertex_ai_enabled.toString()},{gemini_cli_key:9,value:e.mcp_servers},{gemini_cli_key:7,value:e.vertex_ai_enabled.toString()},{gemini_cli_key:10,value:e.telemetry_enabled.toString()},{gemini_cli_key:11,value:e.telemetry_log_user_prompts_enabled.toString()},{gemini_cli_key:63,value:e.mcp_servers_count?e.mcp_servers_count.toString():""},{gemini_cli_key:64,value:e.mcp_tools_count?.toString()??""},{gemini_cli_key:65,value:e.mcp_tools?e.mcp_tools:""},{gemini_cli_key:119,value:e.extensions_count.toString()},{gemini_cli_key:120,value:e.extension_ids.toString()},{gemini_cli_key:191,value:e.worktree_active.toString()}],n=aI.cpus();n&&n.length>0&&r.push({gemini_cli_key:137,value:n[0].model}),r.push({gemini_cli_key:138,value:aI.availableParallelism().toString()},{gemini_cli_key:140,value:(aI.totalmem()/1024**3).toFixed(2).toString()});let o=await kcn();r.push({gemini_cli_key:139,value:o}),this.sessionData=r,this.enqueueLogEventAfterExperimentsLoadAsync(this.createLogEvent("start_session",r)).then(()=>{this.flushToClearcut().catch(s=>{U.debug("Error flushing to Clearcut:",s)})})}logNewPromptEvent(e){this.promptId=e.prompt_id;let r=[{gemini_cli_key:13,value:JSON.stringify(e.prompt_length)}];this.enqueueLogEvent(this.createLogEvent("new_prompt",r)),this.flushIfNeeded()}logToolCallEvent(e){let r=[{gemini_cli_key:14,value:JSON.stringify(e.function_name)},{gemini_cli_key:15,value:JSON.stringify(e.decision)},{gemini_cli_key:16,value:JSON.stringify(e.success)},{gemini_cli_key:17,value:JSON.stringify(e.duration_ms)},{gemini_cli_key:19,value:JSON.stringify(e.error_type)},{gemini_cli_key:62,value:JSON.stringify(e.tool_type)},{gemini_cli_key:93,value:JSON.stringify(e.content_length)},{gemini_cli_key:95,value:JSON.stringify(e.mcp_server_name)}];if(e.metadata){let o={model_added_lines:47,model_removed_lines:48,model_added_chars:103,model_removed_chars:104,user_added_lines:49,user_removed_lines:50,user_added_chars:105,user_removed_chars:106};if(e.function_name===xo&&e.metadata.ask_user){let s=e.metadata.ask_user,c={question_types:152,dismissed:153,empty_submission:154,answer_count:155};for(let[u,d]of Object.entries(c))s[u]!==void 0&&r.push({gemini_cli_key:d,value:JSON.stringify(s[u])})}for(let[s,c]of Object.entries(o))e.metadata[s]!==void 0&&r.push({gemini_cli_key:c,value:JSON.stringify(e.metadata[s])})}e.extension_id&&r.push({gemini_cli_key:121,value:e.extension_id});let n=this.createLogEvent("tool_call",r);this.enqueueLogEvent(n),this.flushIfNeeded()}logFileOperationEvent(e){let r=[{gemini_cli_key:14,value:JSON.stringify(e.tool_name)},{gemini_cli_key:57,value:JSON.stringify(e.operation)},{gemini_cli_key:72,value:JSON.stringify(e.lines)},{gemini_cli_key:73,value:JSON.stringify(e.mimetype)},{gemini_cli_key:74,value:JSON.stringify(e.extension)}];e.programming_language&&r.push({gemini_cli_key:56,value:e.programming_language});let n=this.createLogEvent("file_operation",r);this.enqueueLogEvent(n),this.flushIfNeeded()}logApiRequestEvent(e){let r=[{gemini_cli_key:20,value:JSON.stringify(e.model)}];this.enqueueLogEvent(this.createLogEvent("api_request",r)),this.flushIfNeeded()}logApiResponseEvent(e){let r=[{gemini_cli_key:21,value:JSON.stringify(e.model)},{gemini_cli_key:22,value:JSON.stringify(e.status_code)},{gemini_cli_key:23,value:JSON.stringify(e.duration_ms)},{gemini_cli_key:25,value:JSON.stringify(e.usage.input_token_count)},{gemini_cli_key:26,value:JSON.stringify(e.usage.output_token_count)},{gemini_cli_key:27,value:JSON.stringify(e.usage.cached_content_token_count)},{gemini_cli_key:28,value:JSON.stringify(e.usage.thoughts_token_count)},{gemini_cli_key:29,value:JSON.stringify(e.usage.tool_token_count)},{gemini_cli_key:167,value:JSON.stringify(e.usage.context_breakdown?.system_instructions??0)},{gemini_cli_key:168,value:JSON.stringify(e.usage.context_breakdown?.tool_definitions??0)},{gemini_cli_key:169,value:JSON.stringify(e.usage.context_breakdown?.history??0)},{gemini_cli_key:170,value:JSON.stringify(e.usage.context_breakdown?.tool_calls??{})},{gemini_cli_key:171,value:JSON.stringify(e.usage.context_breakdown?.mcp_servers??0)}];this.enqueueLogEvent(this.createLogEvent("api_response",r)),this.flushIfNeeded()}logApiErrorEvent(e){let r=[{gemini_cli_key:30,value:JSON.stringify(e.model)},{gemini_cli_key:31,value:JSON.stringify(e.error_type)},{gemini_cli_key:32,value:JSON.stringify(e.status_code)},{gemini_cli_key:33,value:JSON.stringify(e.duration_ms)}];this.enqueueLogEvent(this.createLogEvent("api_error",r)),this.flushIfNeeded()}logChatCompressionEvent(e){let r=[{gemini_cli_key:60,value:`${e.tokens_before}`},{gemini_cli_key:61,value:`${e.tokens_after}`}];this.enqueueLogEvent(this.createLogEvent("chat_compression",r))}logFlashFallbackEvent(){this.enqueueLogEvent(this.createLogEvent("flash_fallback",[])),this.flushToClearcut().catch(e=>{U.debug("Error flushing to Clearcut:",e)})}logRipgrepFallbackEvent(){this.enqueueLogEvent(this.createLogEvent("ripgrep_fallback",[])),this.flushToClearcut().catch(e=>{U.debug("Error flushing to Clearcut:",e)})}logLoopDetectedEvent(e){let r=[{gemini_cli_key:38,value:JSON.stringify(e.loop_type)}];e.confirmed_by_model&&r.push({gemini_cli_key:129,value:e.confirmed_by_model}),this.enqueueLogEvent(this.createLogEvent("loop_detected",r)),this.flushIfNeeded()}logLoopDetectionDisabledEvent(){let e=[];this.enqueueLogEvent(this.createLogEvent("loop_detection_disabled",e)),this.flushIfNeeded()}logNextSpeakerCheck(e){let r=[{gemini_cli_key:43,value:JSON.stringify(e.finish_reason)},{gemini_cli_key:44,value:JSON.stringify(e.result)}];this.enqueueLogEvent(this.createLogEvent("next_speaker_check",r)),this.flushIfNeeded()}logSlashCommandEvent(e){let r=[{gemini_cli_key:41,value:JSON.stringify(e.command)}];e.subcommand&&r.push({gemini_cli_key:42,value:JSON.stringify(e.subcommand)}),e.status&&r.push({gemini_cli_key:51,value:JSON.stringify(e.status)}),e.extension_id&&r.push({gemini_cli_key:121,value:e.extension_id}),this.enqueueLogEvent(this.createLogEvent("slash_command",r)),this.flushIfNeeded()}logRewindEvent(e){let r=[{gemini_cli_key:144,value:e.outcome}];this.enqueueLogEvent(this.createLogEvent("rewind",r)),this.flushIfNeeded()}logMalformedJsonResponseEvent(e){let r=[{gemini_cli_key:45,value:JSON.stringify(e.model)}];this.enqueueLogEvent(this.createLogEvent("malformed_json_response",r)),this.flushIfNeeded()}logIdeConnectionEvent(e){let r=[{gemini_cli_key:46,value:JSON.stringify(e.connection_type)}];this.enqueueLogEventAfterExperimentsLoadAsync(this.createLogEvent("start_session",r)).then(()=>{this.flushToClearcut().catch(n=>{U.debug("Error flushing to Clearcut:",n)})})}logConversationFinishedEvent(e){let r=[{gemini_cli_key:40,value:this.config?.getSessionId()??""},{gemini_cli_key:59,value:JSON.stringify(e.turnCount)},{gemini_cli_key:58,value:e.approvalMode}];this.enqueueLogEvent(this.createLogEvent("conversation_finished",r)),this.flushIfNeeded()}logEndSessionEvent(){this.enqueueLogEvent(this.createLogEvent("end_session",[])),this.flushToClearcut().catch(e=>{U.debug("Error flushing to Clearcut:",e)})}logInvalidChunkEvent(e){let r=[];e.error_message&&r.push({gemini_cli_key:75,value:e.error_message}),this.enqueueLogEvent(this.createLogEvent("invalid_chunk",r)),this.flushIfNeeded()}logContentRetryEvent(e){let r=[{gemini_cli_key:76,value:String(e.attempt_number)},{gemini_cli_key:77,value:e.error_type},{gemini_cli_key:78,value:String(e.retry_delay_ms)},{gemini_cli_key:20,value:e.model}];this.enqueueLogEvent(this.createLogEvent("content_retry",r)),this.flushIfNeeded()}logContentRetryFailureEvent(e){let r=[{gemini_cli_key:79,value:String(e.total_attempts)},{gemini_cli_key:80,value:e.final_error_type},{gemini_cli_key:20,value:e.model}];e.total_duration_ms&&r.push({gemini_cli_key:81,value:String(e.total_duration_ms)}),this.enqueueLogEvent(this.createLogEvent("content_retry_failure",r)),this.flushIfNeeded()}logNetworkRetryAttemptEvent(e){let r=[{gemini_cli_key:180,value:String(e.attempt)},{gemini_cli_key:181,value:String(e.delay_ms)},{gemini_cli_key:182,value:e.error_type},{gemini_cli_key:20,value:e.model}];this.enqueueLogEvent(this.createLogEvent("retry_attempt",r)),this.flushIfNeeded()}async logExtensionInstallEvent(e){let r=[{gemini_cli_key:85,value:e.hashed_extension_name},{gemini_cli_key:121,value:e.extension_id},{gemini_cli_key:86,value:e.extension_version},{gemini_cli_key:87,value:e.extension_source},{gemini_cli_key:88,value:e.status}];this.enqueueLogEvent(this.createBasicLogEvent("extension_install",r)),await this.flushToClearcut().catch(n=>{U.debug("Error flushing to Clearcut:",n)})}async logExtensionUninstallEvent(e){let r=[{gemini_cli_key:85,value:e.hashed_extension_name},{gemini_cli_key:121,value:e.extension_id},{gemini_cli_key:96,value:e.status}];this.enqueueLogEvent(this.createBasicLogEvent("extension_uninstall",r)),await this.flushToClearcut().catch(n=>{U.debug("Error flushing to Clearcut:",n)})}async logExtensionUpdateEvent(e){let r=[{gemini_cli_key:85,value:e.hashed_extension_name},{gemini_cli_key:121,value:e.extension_id},{gemini_cli_key:86,value:e.extension_version},{gemini_cli_key:117,value:e.extension_previous_version},{gemini_cli_key:87,value:e.extension_source},{gemini_cli_key:118,value:e.status}];this.enqueueLogEvent(this.createBasicLogEvent("extension_update",r)),await this.flushToClearcut().catch(n=>{U.debug("Error flushing to Clearcut:",n)})}logToolOutputTruncatedEvent(e){let r=[{gemini_cli_key:14,value:JSON.stringify(e.tool_name)},{gemini_cli_key:89,value:JSON.stringify(e.original_content_length)},{gemini_cli_key:90,value:JSON.stringify(e.truncated_content_length)},{gemini_cli_key:91,value:JSON.stringify(e.threshold)}],n=this.createLogEvent("tool_output_truncated",r);this.enqueueLogEvent(n),this.flushIfNeeded()}logToolOutputMaskingEvent(e){let r=[{gemini_cli_key:148,value:e.tokens_before.toString()},{gemini_cli_key:149,value:e.tokens_after.toString()},{gemini_cli_key:150,value:e.masked_count.toString()},{gemini_cli_key:151,value:e.total_prunable_tokens.toString()}];this.enqueueLogEvent(this.createLogEvent("tool_output_masking",r)),this.flushIfNeeded()}logModelRoutingEvent(e){let r=[{gemini_cli_key:97,value:e.decision_model},{gemini_cli_key:101,value:e.decision_source},{gemini_cli_key:99,value:e.routing_latency_ms.toString()},{gemini_cli_key:98,value:e.failed.toString()}];e.error_message&&r.push({gemini_cli_key:100,value:e.error_message}),e.reasoning&&this.config?.getTelemetryLogPromptsEnabled()&&r.push({gemini_cli_key:145,value:e.reasoning}),e.enable_numerical_routing!==void 0&&r.push({gemini_cli_key:146,value:e.enable_numerical_routing.toString()}),e.classifier_threshold&&r.push({gemini_cli_key:147,value:e.classifier_threshold}),this.enqueueLogEvent(this.createLogEvent("model_routing",r)),this.flushIfNeeded()}async logExtensionEnableEvent(e){let r=[{gemini_cli_key:85,value:e.hashed_extension_name},{gemini_cli_key:121,value:e.extension_id},{gemini_cli_key:102,value:e.setting_scope}];this.enqueueLogEvent(this.createBasicLogEvent("extension_enable",r)),await this.flushToClearcut().catch(n=>{U.debug("Error flushing to Clearcut:",n)})}logModelSlashCommandEvent(e){let r=[{gemini_cli_key:108,value:e.model_name}];this.enqueueLogEvent(this.createLogEvent("model_slash_command",r)),this.flushIfNeeded()}async logExtensionDisableEvent(e){let r=[{gemini_cli_key:85,value:e.hashed_extension_name},{gemini_cli_key:121,value:e.extension_id},{gemini_cli_key:107,value:e.setting_scope}];this.enqueueLogEvent(this.createBasicLogEvent("extension_disable",r)),await this.flushToClearcut().catch(n=>{U.debug("Error flushing to Clearcut:",n)})}logEditStrategyEvent(e){let r=[{gemini_cli_key:109,value:e.strategy}];this.enqueueLogEvent(this.createLogEvent("edit_strategy",r)),this.flushIfNeeded()}logEditCorrectionEvent(e){let r=[{gemini_cli_key:110,value:e.correction}];this.enqueueLogEvent(this.createLogEvent("edit_correction",r)),this.flushIfNeeded()}logAgentStartEvent(e){let r=[{gemini_cli_key:112,value:e.agent_id},{gemini_cli_key:111,value:e.agent_name}];this.enqueueLogEvent(this.createLogEvent("agent_start",r)),this.flushIfNeeded()}logAgentFinishEvent(e){let r=[{gemini_cli_key:112,value:e.agent_id},{gemini_cli_key:111,value:e.agent_name},{gemini_cli_key:113,value:e.duration_ms.toString()},{gemini_cli_key:114,value:e.turn_count.toString()},{gemini_cli_key:115,value:e.terminate_reason}];this.enqueueLogEvent(this.createLogEvent("agent_finish",r)),this.flushIfNeeded()}logRecoveryAttemptEvent(e){let r=[{gemini_cli_key:112,value:e.agent_id},{gemini_cli_key:111,value:e.agent_name},{gemini_cli_key:122,value:e.reason},{gemini_cli_key:123,value:e.duration_ms.toString()},{gemini_cli_key:124,value:e.success.toString()},{gemini_cli_key:114,value:e.turn_count.toString()}];this.enqueueLogEvent(this.createLogEvent("recovery_attempt",r)),this.flushIfNeeded()}logWebFetchFallbackAttemptEvent(e){let r=[{gemini_cli_key:116,value:e.reason}];this.enqueueLogEvent(this.createLogEvent("web_fetch_fallback_attempt",r)),this.flushIfNeeded()}logLlmLoopCheckEvent(e){let r=[{gemini_cli_key:35,value:e.prompt_id},{gemini_cli_key:126,value:e.flash_confidence.toString()},{gemini_cli_key:127,value:e.main_model},{gemini_cli_key:128,value:e.main_model_confidence.toString()}];this.enqueueLogEvent(this.createLogEvent("llm_loop_check",r)),this.flushIfNeeded()}logHookCallEvent(e){let r=[{gemini_cli_key:133,value:e.hook_event_name},{gemini_cli_key:134,value:e.duration_ms.toString()},{gemini_cli_key:135,value:e.success.toString()}];e.exit_code!==void 0&&r.push({gemini_cli_key:136,value:e.exit_code.toString()}),this.enqueueLogEvent(this.createLogEvent("hook_call",r)),this.flushIfNeeded()}logApprovalModeSwitchEvent(e){let r=[{gemini_cli_key:141,value:e.from_mode},{gemini_cli_key:142,value:e.to_mode}];this.enqueueLogEvent(this.createLogEvent("approval_mode_switch",r)),this.flushIfNeeded()}logApprovalModeDurationEvent(e){let r=[{gemini_cli_key:141,value:e.mode},{gemini_cli_key:143,value:e.duration_ms.toString()}];this.enqueueLogEvent(this.createLogEvent("approval_mode_duration",r)),this.flushIfNeeded()}logPlanExecutionEvent(e){let r=[{gemini_cli_key:58,value:e.approval_mode}];this.enqueueLogEvent(this.createLogEvent("plan_execution",r)),this.flushIfNeeded()}logKeychainAvailabilityEvent(e){let r=[{gemini_cli_key:156,value:JSON.stringify(e.available)}];this.enqueueLogEvent(this.createLogEvent("keychain_availability",r)),this.flushIfNeeded()}logTokenStorageInitializationEvent(e){let r=[{gemini_cli_key:157,value:e.type},{gemini_cli_key:158,value:JSON.stringify(e.forced)}];this.enqueueLogEvent(this.createLogEvent("token_storage_initialization",r)),this.flushIfNeeded()}logOnboardingStartEvent(e){let r=[{gemini_cli_key:192,value:"true"}];this.enqueueLogEvent(this.createLogEvent("onboarding_start",r)),this.flushIfNeeded()}logOnboardingSuccessEvent(e){let r=[];e.userTier&&r.push({gemini_cli_key:193,value:e.userTier}),e.duration_ms!==void 0&&r.push({gemini_cli_key:194,value:e.duration_ms.toString()}),this.enqueueLogEvent(this.createLogEvent("onboarding_success",r)),this.flushIfNeeded()}logStartupStatsEvent(e){let r=[{gemini_cli_key:172,value:JSON.stringify(e.phases)},{gemini_cli_key:173,value:e.os_platform},{gemini_cli_key:174,value:e.os_release},{gemini_cli_key:175,value:JSON.stringify(e.is_docker)}];this.enqueueLogEvent(this.createLogEvent("startup_stats",r)),this.flushIfNeeded()}logCreditsUsedEvent(e){let r=[{gemini_cli_key:185,value:JSON.stringify(e.model)},{gemini_cli_key:186,value:JSON.stringify(e.credits_consumed)},{gemini_cli_key:187,value:JSON.stringify(e.credits_remaining)}];this.enqueueLogEvent(this.createLogEvent("credits_used",r)),this.flushIfNeeded()}logOverageOptionSelectedEvent(e){let r=[{gemini_cli_key:185,value:JSON.stringify(e.model)},{gemini_cli_key:188,value:JSON.stringify(e.selected_option)},{gemini_cli_key:189,value:JSON.stringify(e.credit_balance)}];this.enqueueLogEvent(this.createLogEvent("overage_option_selected",r)),this.flushIfNeeded()}logEmptyWalletMenuShownEvent(e){let r=[{gemini_cli_key:185,value:JSON.stringify(e.model)}];this.enqueueLogEvent(this.createLogEvent("empty_wallet_menu_shown",r)),this.flushIfNeeded()}logCreditPurchaseClickEvent(e){let r=[{gemini_cli_key:185,value:JSON.stringify(e.model)},{gemini_cli_key:190,value:JSON.stringify(e.source)}];this.enqueueLogEvent(this.createLogEvent("credit_purchase_click",r)),this.flushIfNeeded()}addDefaultFields(e,r){let n=[{gemini_cli_key:40,value:this.config?.getSessionId()??""},{gemini_cli_key:36,value:JSON.stringify(this.config?.getContentGeneratorConfig()?.authType)},{gemini_cli_key:37,value:`${r}`},{gemini_cli_key:35,value:this.promptId},{gemini_cli_key:83,value:process.versions.node},{gemini_cli_key:84,value:this.getConfigJson()},{gemini_cli_key:125,value:this.config?.isInteractive().toString()??"false"},{gemini_cli_key:141,value:typeof this.config?.getPolicyEngine=="function"&&typeof this.config.getPolicyEngine()?.getApprovalMode=="function"?this.config.getPolicyEngine().getApprovalMode():""}];return this.config?.getExperiments()&&n.push({gemini_cli_key:131,value:this.config?.getExperiments()?.experimentIds.toString()??"NA"}),[...e,...n]}getProxyAgent(){let e=this.config?.getProxy();if(e){if(e.startsWith("http"))return new D2t.HttpsProxyAgent(e);throw new Error("Unsupported proxy type")}}getConfigJson(){return EKe(this.config)}shutdown(){this.logEndSessionEvent()}requeueFailedEvents(e){let r=e.slice(-ZX);e.length>ZX&&this.config?.getDebugMode()&&U.warn(`ClearcutLogger: Dropping ${e.length-ZX} events due to retry queue limit. Total events: ${e.length}, keeping: ${ZX}`);let n=XX-this.events.size,o=Math.min(r.length,n);if(o===0){this.config?.getDebugMode()&&U.debug(`ClearcutLogger: No events re-queued (queue size: ${this.events.size})`);return}let s=r.slice(r.length-o);for(let c=s.length-1;c>=0;c--)this.events.unshift(s[c]);for(;this.events.size>XX;)this.events.pop();this.config?.getDebugMode()&&U.debug(`ClearcutLogger: Re-queued ${o} events for retry (queue size: ${this.events.size})`)}};var Z1=Me(xt(),1),B2t=Me(jp(),1);import*as M2t from"node:fs";var e4=class{writeStream;constructor(e){this.writeStream=M2t.createWriteStream(e,{flags:"a"})}serialize(e){return Sr(e,2)+`
|
|
1062
1062
|
`}shutdown(){return new Promise(e=>{this.writeStream.end(e)})}},eZ=class extends e4{export(e,r){let n=e.map(o=>this.serialize(o)).join("");this.writeStream.write(n,o=>{r({code:o?Z1.ExportResultCode.FAILED:Z1.ExportResultCode.SUCCESS,error:o||void 0})})}},tZ=class extends e4{export(e,r){let n=e.map(o=>this.serialize(o)).join("");this.writeStream.write(n,o=>{r({code:o?Z1.ExportResultCode.FAILED:Z1.ExportResultCode.SUCCESS,error:o||void 0})})}},rZ=class extends e4{export(e,r){let n=this.serialize(e);this.writeStream.write(n,o=>{r({code:o?Z1.ExportResultCode.FAILED:Z1.ExportResultCode.SUCCESS,error:o||void 0})})}getPreferredAggregationTemporality(){return B2t.AggregationTemporality.CUMULATIVE}async forceFlush(){return Promise.resolve()}};var hJi=Me(Jo(),1),G3t=Me(xOt(),1),V3t=Me(bPt(),1),H3t=Me(q3t(),1),rR=Me(xt(),1);var wB=class extends G3t.TraceExporter{constructor(e,r){super({projectId:e,credentials:r,resourceFilter:/^gcp\./})}},xB=class extends V3t.MetricExporter{constructor(e,r){super({projectId:e,credentials:r,prefix:"custom.googleapis.com/gemini_cli"})}},OB=class{logging;log;pendingWrites=[];constructor(e,r){this.logging=new H3t.Logging({projectId:e,credentials:r}),this.log=this.logging.log("gemini_cli")}export(e,r){try{let n=e.map(s=>this.log.entry({severity:this.mapSeverityToCloudLogging(s.severityNumber),timestamp:new Date((0,rR.hrTimeToMilliseconds)(s.hrTime)),resource:{type:"global",labels:{project_id:this.logging.projectId}}},{...s.attributes,...s.resource?.attributes,message:s.body})),o=this.log.write(n).then(()=>{r({code:rR.ExportResultCode.SUCCESS})}).catch(s=>{r({code:rR.ExportResultCode.FAILED,error:s})}).finally(()=>{let s=this.pendingWrites.indexOf(o);s>-1&&this.pendingWrites.splice(s,1)});this.pendingWrites.push(o)}catch(n){r({code:rR.ExportResultCode.FAILED,error:n})}}async forceFlush(){this.pendingWrites.length>0&&await Promise.all(this.pendingWrites)}async shutdown(){await this.forceFlush(),this.pendingWrites=[]}mapSeverityToCloudLogging(e){return e?e>=21?"CRITICAL":e>=17?"ERROR":e>=13?"WARNING":e>=9?"INFO":e>=5?"DEBUG":"DEFAULT":"DEFAULT"}};function IB(t){if(t!==void 0)return t==="true"||t==="1"}function $3t(t){if(t!==void 0){if(t==="local"||t==="local")return"local";if(t==="gcp"||t==="gcp")return"gcp"}}async function d1n(t){let e=t.argv??{},r=t.env??{},n=t.settings??{},o=e.telemetry??IB(r.GEMINI_TELEMETRY_ENABLED)??n.enabled,s=e.telemetryTarget??r.GEMINI_TELEMETRY_TARGET??n.target,c=$3t(s);if(s!==void 0&&c===void 0)throw new Dge(`Invalid telemetry target: ${String(s)}. Valid values are: local, gcp`);let u=e.telemetryOtlpEndpoint??r.GEMINI_TELEMETRY_OTLP_ENDPOINT??r.OTEL_EXPORTER_OTLP_ENDPOINT??n.otlpEndpoint,d=e.telemetryOtlpProtocol??r.GEMINI_TELEMETRY_OTLP_PROTOCOL??n.otlpProtocol,l=["grpc","http"].find(g=>g===d);if(d!==void 0&&l===void 0)throw new Dge(`Invalid telemetry OTLP protocol: ${String(d)}. Valid values are: grpc, http`);let a=e.telemetryLogPrompts??IB(r.GEMINI_TELEMETRY_LOG_PROMPTS)??n.logPrompts,p=e.telemetryOutfile??r.GEMINI_TELEMETRY_OUTFILE??n.outfile,f=IB(r.GEMINI_TELEMETRY_USE_COLLECTOR)??n.useCollector;return{enabled:o,target:c,otlpEndpoint:u,otlpProtocol:l,logPrompts:a,outfile:p,useCollector:f,useCliAuth:IB(r.GEMINI_TELEMETRY_USE_CLI_AUTH)??n.useCliAuth}}var Jke=Me(fh(),1);function Kke(t,e){U.debug("Conseca Policy Generation Event:",e);let r=Ct.getInstance(t);if(r){let s=[{gemini_cli_key:165,value:Sr(e.user_prompt)},{gemini_cli_key:164,value:Sr(e.trusted_content)},{gemini_cli_key:161,value:Sr(e.policy)}];e.error&&s.push({gemini_cli_key:166,value:e.error}),r.enqueueLogEvent(r.createLogEvent("conseca_policy_generation",s))}if(!zte())return;let n=Jke.logs.getLogger(Et),o={body:e.toLogBody(),attributes:e.toOpenTelemetryAttributes(t)};n.emit(o)}function Xke(t,e){U.debug("Conseca Verdict Event:",e);let r=Ct.getInstance(t);if(r){let s=[{gemini_cli_key:165,value:Sr(e.user_prompt)},{gemini_cli_key:161,value:Sr(e.policy)},{gemini_cli_key:14,value:Sr(e.tool_call)},{gemini_cli_key:162,value:Sr(e.verdict)},{gemini_cli_key:163,value:e.verdict_rationale}];e.error&&s.push({gemini_cli_key:166,value:e.error}),r.enqueueLogEvent(r.createLogEvent("conseca_verdict",s))}if(!zte())return;let n=Jke.logs.getLogger(Et),o={body:e.toLogBody(),attributes:e.toOpenTelemetryAttributes(t)};n.emit(o)}Fe();za();import{EventEmitter as g1n}from"node:events";var Zke="**",z3t="**";function Wte(t){let e=t.indexOf(Zke);if(e===-1)return{subject:"",description:t.trim()};let r=t.indexOf(z3t,e+Zke.length);if(r===-1)return{subject:"",description:t.trim()};let n=t.substring(e+Zke.length,r).trim(),o=(t.substring(0,e)+t.substring(r+z3t.length)).trim();return{subject:n,description:o}}import nR from"node:path";import ev from"node:fs";import*as My from"node:fs/promises";import Z_ from"node:path";var p1n="logs",f1n="tool-outputs";function W3t(t){if(!t||t==="."||t==="..")throw new Error(`Invalid sessionId: ${t}`);let e=wu(t);if(!e)throw new Error(`Invalid sessionId after sanitization: ${t}`);return e}async function eNe(t,e){try{let r=W3t(t),n=Z_.join(e,p1n),o=Z_.join(n,`session-${r}.jsonl`);await My.unlink(o).catch(d=>{if(d.code!=="ENOENT")throw d});let s=Z_.join(e,f1n),c=Z_.join(s,`session-${r}`);await My.rm(c,{recursive:!0,force:!0}).catch(d=>{if(d.code!=="ENOENT")throw d});let u=Z_.join(e,r);await My.rm(u,{recursive:!0,force:!0}).catch(d=>{if(d.code!=="ENOENT")throw d})}catch(r){U.error(`Error deleting session artifacts for ${t}:`,r)}}async function Y3t(t,e,r){let n=W3t(t),o=Z_.join(e,n);if(!o.startsWith(e+Z_.sep))throw new Error(`Dangerous subagent directory path: ${o}`);try{let s=await My.readdir(o,{withFileTypes:!0}).catch(c=>{if(c.code==="ENOENT")return[];throw c});for(let c of s)if(c.isFile()&&c.name.endsWith(".json")){let u=Z_.basename(c.name,".json");await eNe(u,r)}await My.rm(o,{recursive:!0,force:!0}).catch(c=>{if(c.code!=="ENOENT")throw c})}catch(s){U.error(`Error cleaning up subagents for parent ${t}:`,s),await My.rm(o,{recursive:!0,force:!0}).catch(()=>{})}}import{randomUUID as h1n}from"node:crypto";var RB="session-",J3t="Chat recording disabled: No space left on device. The conversation will continue but will not be saved to disk. Free up disk space and restart to enable recording.",Yte=class{conversationFile=null;cachedLastConvData=null;cachedConversation=null;sessionId;projectHash;kind;queuedThoughts=[];queuedTokens=null;context;constructor(e){this.context=e,this.sessionId=e.promptId,this.projectHash=KJe(e.config.getProjectRoot())}initialize(e,r){try{if(this.kind=r,e)this.conversationFile=e.filePath,this.sessionId=e.conversation.sessionId,this.kind=e.conversation.kind,this.updateConversation(n=>{n.sessionId=this.sessionId}),this.cachedLastConvData=null,this.cachedConversation=null;else{this.sessionId=this.context.promptId;let n=nR.join(this.context.config.storage.getProjectTempDir(),"chats");if(this.kind==="subagent"&&this.context.parentSessionId){let d=wu(this.context.parentSessionId);if(!d)throw new Error(`Invalid parentSessionId after sanitization: ${this.context.parentSessionId}`);n=nR.join(n,d)}ev.mkdirSync(n,{recursive:!0});let o=new Date().toISOString().slice(0,16).replace(/:/g,"-"),s=wu(this.sessionId);if(!s)throw new Error(`Invalid sessionId after sanitization: ${this.sessionId}`);let c;this.kind==="subagent"?c=`${s}.json`:c=`${RB}${o}-${s.slice(0,8)}.json`,this.conversationFile=nR.join(n,c);let u=this.kind==="subagent"?[...this.context.config.getWorkspaceContext()?.getDirectories()??[]]:void 0;this.writeConversation({sessionId:this.sessionId,projectHash:this.projectHash,startTime:new Date().toISOString(),lastUpdated:new Date().toISOString(),messages:[],directories:u,kind:this.kind})}this.queuedThoughts=[],this.queuedTokens=null}catch(n){if(n instanceof Error&&"code"in n&&n.code==="ENOSPC"){this.conversationFile=null,U.warn(J3t);return}throw U.error("Error initializing chat recording service:",n),n}}getLastMessage(e){return e.messages.at(-1)}newMessage(e,r,n){return{id:h1n(),timestamp:new Date().toISOString(),type:e,content:r,displayContent:n}}recordMessage(e){if(this.conversationFile)try{this.updateConversation(r=>{let n=this.newMessage(e.type,e.content,e.displayContent);n.type==="gemini"?(r.messages.push({...n,thoughts:this.queuedThoughts,tokens:this.queuedTokens,model:e.model}),this.queuedThoughts=[],this.queuedTokens=null):r.messages.push(n)})}catch(r){throw U.error("Error saving message to chat history.",r),r}}recordThought(e){if(this.conversationFile)try{this.queuedThoughts.push({...e,timestamp:new Date().toISOString()})}catch(r){throw U.error("Error saving thought to chat history.",r),r}}recordMessageTokens(e){if(this.conversationFile)try{let r={input:e.promptTokenCount??0,output:e.candidatesTokenCount??0,cached:e.cachedContentTokenCount??0,thoughts:e.thoughtsTokenCount??0,tool:e.toolUsePromptTokenCount??0,total:e.totalTokenCount??0},n=this.readConversation(),o=this.getLastMessage(n);o&&o.type==="gemini"&&!o.tokens?(o.tokens=r,this.queuedTokens=null,this.writeConversation(n)):this.queuedTokens=r}catch(r){throw U.error("Error updating message tokens in chat history.",r),r}}recordToolCalls(e,r){if(!this.conversationFile)return;let n=this.context.toolRegistry,o=r.map(s=>{let c=n.getTool(s.name);return{...s,displayName:c?.displayName||s.name,description:s.description?.trim()||c?.description||"",renderOutputAsMarkdown:c?.isOutputMarkdown||!1}});try{this.updateConversation(s=>{let c=this.getLastMessage(s);if(!c||c.type!=="gemini"||this.queuedThoughts.length>0){let u={...this.newMessage("gemini",""),type:"gemini",toolCalls:o,thoughts:this.queuedThoughts,model:e};this.queuedThoughts.length>0&&(u.thoughts=this.queuedThoughts,this.queuedThoughts=[]),this.queuedTokens&&(u.tokens=this.queuedTokens,this.queuedTokens=null),s.messages.push(u)}else{c.toolCalls||(c.toolCalls=[]),c.toolCalls=c.toolCalls.map(u=>{let d=r.find(l=>l.id===u.id);return d?{...u,...d}:u});for(let u of o)c.toolCalls.find(l=>l.id===u.id)||c.toolCalls.push(u)}})}catch(s){throw U.error("Error adding tool call to message in chat history.",s),s}}readConversation(){if(this.cachedConversation)return this.cachedConversation;try{return this.cachedLastConvData=ev.readFileSync(this.conversationFile,"utf8"),this.cachedConversation=JSON.parse(this.cachedLastConvData),this.cachedConversation||(this.cachedConversation={sessionId:this.sessionId,projectHash:this.projectHash,startTime:new Date().toISOString(),lastUpdated:new Date().toISOString(),messages:[],kind:this.kind}),this.cachedConversation}catch(e){if(e.code!=="ENOENT")throw U.error("Error reading conversation file.",e),e;return this.cachedConversation={sessionId:this.sessionId,projectHash:this.projectHash,startTime:new Date().toISOString(),lastUpdated:new Date().toISOString(),messages:[],kind:this.kind},this.cachedConversation}}writeConversation(e,{allowEmpty:r=!1}={}){try{if(!this.conversationFile||(this.cachedConversation=e,e.messages.length===0&&!r))return;let n=JSON.stringify(e,null,2);if(this.cachedLastConvData===n)return;e.lastUpdated=new Date().toISOString();let o=JSON.stringify(e,null,2);this.cachedLastConvData=o,ev.mkdirSync(nR.dirname(this.conversationFile),{recursive:!0}),ev.writeFileSync(this.conversationFile,o)}catch(n){if(n instanceof Error&&"code"in n&&n.code==="ENOSPC"){this.conversationFile=null,this.cachedConversation=null,U.warn(J3t);return}throw U.error("Error writing conversation file.",n),n}}updateConversation(e){let r=this.readConversation();e(r),this.writeConversation(r)}saveSummary(e){if(this.conversationFile)try{this.updateConversation(r=>{r.summary=e})}catch(r){U.error("Error saving summary to chat history.",r)}}recordDirectories(e){if(this.conversationFile)try{this.updateConversation(r=>{r.directories=[...e]})}catch(r){U.error("Error saving directories to chat history.",r)}}getConversation(){if(!this.conversationFile)return null;try{return this.readConversation()}catch(e){return U.error("Error reading conversation for summary.",e),null}}getConversationFilePath(){return this.conversationFile}async deleteSession(e){try{let r=this.context.config.storage.getProjectTempDir(),n=nR.join(r,"chats"),o=this.deriveShortId(e);if(!await ev.promises.stat(n).catch(()=>null))return;let s=this.getMatchingSessionFiles(n,o);for(let c of s)await this.deleteSessionAndArtifacts(n,c,r)}catch(r){throw U.error("Error deleting session file.",r),r}}deriveShortId(e){let r=e;if(e.startsWith(RB)){let o=e.replace(".json","").split("-");r=o[o.length-1]}else if(e.length>=8)r=e.slice(0,8);else throw new Error("Invalid sessionId or basename provided for deletion");if(r.length!==8)throw new Error("Derived shortId must be exactly 8 characters");return r}getMatchingSessionFiles(e,r){return ev.readdirSync(e).filter(o=>o.startsWith(RB)&&o.endsWith(`-${r}.json`))}async deleteSessionAndArtifacts(e,r,n){let o=nR.join(e,r);try{let s=await ev.promises.readFile(o,"utf8"),c=JSON.parse(s),u;if(c&&typeof c=="object"&&"sessionId"in c){let d=c.sessionId;typeof d=="string"&&(u=d)}await ev.promises.unlink(o),u&&(await eNe(u,n),await Y3t(u,e,n))}catch(s){U.error(`Error deleting associated file ${r}:`,s)}}rewindTo(e){if(!this.conversationFile)return null;let r=this.readConversation(),n=r.messages.findIndex(o=>o.id===e);return n===-1?(U.error("Message to rewind to not found in conversation history"),r):(r.messages=r.messages.slice(0,n),this.writeConversation(r,{allowEmpty:!0}),r)}updateMessagesFromHistory(e){if(this.conversationFile)try{this.updateConversation(r=>{let n=new Map;for(let o of e)if(o.role==="user"&&o.parts){let s=o.parts.map(u=>u.functionResponse?.id).filter(u=>!!u);if(s.length===0)continue;let c=s[0];for(let u of o.parts)u.functionResponse?.id&&(c=u.functionResponse.id),n.has(c)||n.set(c,[]),n.get(c).push(u)}for(let o of r.messages)if(o.type==="gemini"&&o.toolCalls)for(let s of o.toolCalls){let c=n.get(s.id);c!==void 0&&(s.result=c)}})}catch(r){throw U.error("Error updating conversation history from memory.",r),r}}};var K3t=()=>({totalRequests:0,totalErrors:0,totalLatencyMs:0,tokens:{input:0,prompt:0,candidates:0,total:0,cached:0,thoughts:0,tool:0}}),m1n=()=>({api:{totalRequests:0,totalErrors:0,totalLatencyMs:0},tokens:{input:0,prompt:0,candidates:0,total:0,cached:0,thoughts:0,tool:0},roles:{}}),X3t=()=>({models:{},tools:{totalCalls:0,totalSuccess:0,totalFail:0,totalDurationMs:0,totalDecisions:{accept:0,reject:0,modify:0,auto_accept:0},byName:{}},files:{totalLinesAdded:0,totalLinesRemoved:0}}),tNe=class extends g1n{#e=X3t();#t=0;addEvent(e){switch(e["event.name"]){case HL:this.processApiResponse(e);break;case VL:this.processApiError(e);break;case GL:this.processToolCall(e);break;default:return}this.emit("update",{metrics:this.#e,lastPromptTokenCount:this.#t})}getMetrics(){return this.#e}getLastPromptTokenCount(){return this.#t}setLastPromptTokenCount(e){this.#t=e,this.emit("update",{metrics:this.#e,lastPromptTokenCount:this.#t})}clear(e){this.#e=X3t(),this.#t=0,this.emit("clear",e),this.emit("update",{metrics:this.#e,lastPromptTokenCount:this.#t})}hydrate(e){this.clear(e.sessionId);let r=0;for(let n of e.messages)if(n.type==="gemini"){let o=n.model||"unknown",s=this.getOrCreateModelMetrics(o);if(s.api.totalRequests++,n.tokens&&(s.tokens.prompt+=n.tokens.input,s.tokens.candidates+=n.tokens.output,s.tokens.total+=n.tokens.total,s.tokens.cached+=n.tokens.cached,s.tokens.thoughts+=n.tokens.thoughts||0,s.tokens.tool+=n.tokens.tool||0,s.tokens.input=Math.max(0,s.tokens.prompt-s.tokens.cached),r=n.tokens.total),n.toolCalls)for(let c of n.toolCalls){this.#e.tools.totalCalls++,c.status==="success"?this.#e.tools.totalSuccess++:c.status==="error"&&this.#e.tools.totalFail++,this.#e.tools.byName[c.name]||(this.#e.tools.byName[c.name]={count:0,success:0,fail:0,durationMs:0,decisions:{accept:0,reject:0,modify:0,auto_accept:0}});let u=this.#e.tools.byName[c.name];u.count++,c.status==="success"?u.success++:c.status==="error"&&u.fail++}}this.#t=r,this.emit("update",{metrics:this.#e,lastPromptTokenCount:this.#t})}getOrCreateModelMetrics(e){return this.#e.models[e]||(this.#e.models[e]=m1n()),this.#e.models[e]}processApiResponse(e){let r=this.getOrCreateModelMetrics(e.model);if(r.api.totalRequests++,r.api.totalLatencyMs+=e.duration_ms,r.tokens.prompt+=e.usage.input_token_count,r.tokens.candidates+=e.usage.output_token_count,r.tokens.total+=e.usage.total_token_count,r.tokens.cached+=e.usage.cached_content_token_count,r.tokens.thoughts+=e.usage.thoughts_token_count,r.tokens.tool+=e.usage.tool_token_count,r.tokens.input=Math.max(0,r.tokens.prompt-r.tokens.cached),e.role){r.roles[e.role]||(r.roles[e.role]=K3t());let n=r.roles[e.role];n.totalRequests++,n.totalLatencyMs+=e.duration_ms,n.tokens.prompt+=e.usage.input_token_count,n.tokens.candidates+=e.usage.output_token_count,n.tokens.total+=e.usage.total_token_count,n.tokens.cached+=e.usage.cached_content_token_count,n.tokens.thoughts+=e.usage.thoughts_token_count,n.tokens.tool+=e.usage.tool_token_count,n.tokens.input=Math.max(0,n.tokens.prompt-n.tokens.cached)}}processApiError(e){let r=this.getOrCreateModelMetrics(e.model);if(r.api.totalRequests++,r.api.totalErrors++,r.api.totalLatencyMs+=e.duration_ms,e.role){r.roles[e.role]||(r.roles[e.role]=K3t());let n=r.roles[e.role];n.totalRequests++,n.totalErrors++,n.totalLatencyMs+=e.duration_ms}}processToolCall(e){let{tools:r,files:n}=this.#e;r.totalCalls++,r.totalDurationMs+=e.duration_ms,e.success?r.totalSuccess++:r.totalFail++,r.byName[e.function_name]||(r.byName[e.function_name]={count:0,success:0,fail:0,durationMs:0,decisions:{accept:0,reject:0,modify:0,auto_accept:0}});let o=r.byName[e.function_name];o.count++,o.durationMs+=e.duration_ms,e.success?o.success++:o.fail++,e.decision&&(r.totalDecisions[e.decision]++,o.decisions[e.decision]++),e.metadata&&(e.metadata.model_added_lines!==void 0&&(n.totalLinesAdded+=e.metadata.model_added_lines),e.metadata.model_removed_lines!==void 0&&(n.totalLinesRemoved+=e.metadata.model_removed_lines))}},By=new tNe;var y1n="gemini_cli.overage_menu_shown",Z3t=class{"event.name";"event.timestamp";model;credit_balance;overage_strategy;constructor(e,r,n){this["event.name"]="overage_menu_shown",this["event.timestamp"]=new Date().toISOString(),this.model=e,this.credit_balance=r,this.overage_strategy=n}toOpenTelemetryAttributes(e){return{...ft(e),"event.name":y1n,"event.timestamp":this["event.timestamp"],model:this.model,credit_balance:this.credit_balance,overage_strategy:this.overage_strategy}}toLogBody(){return`Overage menu shown for model ${this.model} with ${this.credit_balance} credits available.`}},A1n="gemini_cli.overage_option_selected",Jte=class{"event.name";"event.timestamp";model;selected_option;credit_balance;constructor(e,r,n){this["event.name"]="overage_option_selected",this["event.timestamp"]=new Date().toISOString(),this.model=e,this.selected_option=r,this.credit_balance=n}toOpenTelemetryAttributes(e){return{...ft(e),"event.name":A1n,"event.timestamp":this["event.timestamp"],model:this.model,selected_option:this.selected_option,credit_balance:this.credit_balance}}toLogBody(){return`Overage option '${this.selected_option}' selected for model ${this.model}.`}},E1n="gemini_cli.empty_wallet_menu_shown",Kte=class{"event.name";"event.timestamp";model;constructor(e){this["event.name"]="empty_wallet_menu_shown",this["event.timestamp"]=new Date().toISOString(),this.model=e}toOpenTelemetryAttributes(e){return{...ft(e),"event.name":E1n,"event.timestamp":this["event.timestamp"],model:this.model}}toLogBody(){return`Empty wallet menu shown for model ${this.model}.`}},_1n="gemini_cli.credit_purchase_click",Xte=class{"event.name";"event.timestamp";source;model;constructor(e,r){this["event.name"]="credit_purchase_click",this["event.timestamp"]=new Date().toISOString(),this.source=e,this.model=r}toOpenTelemetryAttributes(e){return{...ft(e),"event.name":_1n,"event.timestamp":this["event.timestamp"],source:this.source,model:this.model}}toLogBody(){return`Credit purchase clicked from ${this.source} for model ${this.model}.`}},v1n="gemini_cli.credits_used",iR=class{"event.name";"event.timestamp";model;credits_consumed;credits_remaining;constructor(e,r,n){this["event.name"]="credits_used",this["event.timestamp"]=new Date().toISOString(),this.model=e,this.credits_consumed=r,this.credits_remaining=n}toOpenTelemetryAttributes(e){return{...ft(e),"event.name":v1n,"event.timestamp":this["event.timestamp"],model:this.model,credits_consumed:this.credits_consumed,credits_remaining:this.credits_remaining}}toLogBody(){return`${this.credits_consumed} credits consumed for model ${this.model}. ${this.credits_remaining} remaining.`}},b1n="gemini_cli.api_key_updated",eMt=class{"event.name";"event.timestamp";previous_auth_type;new_auth_type;constructor(e,r){this["event.name"]="api_key_updated",this["event.timestamp"]=new Date().toISOString(),this.previous_auth_type=e,this.new_auth_type=r}toOpenTelemetryAttributes(e){return{...ft(e),"event.name":b1n,"event.timestamp":this["event.timestamp"],previous_auth_type:this.previous_auth_type,new_auth_type:this.new_auth_type}}toLogBody(){return`Auth type changed from ${this.previous_auth_type} to ${this.new_auth_type}.`}};import NB from"node:v8";import oR from"node:process";var tv=t=>t/1048576,tMt=t=>{let e=t/1073741824;return t<1048576?`${(t/1024).toFixed(1)} KB`:t<1073741824?`${tv(t).toFixed(1)} MB`:`${e.toFixed(2)} GB`};var Zte=class{lastActivityTime=Date.now();idleThresholdMs;constructor(e=3e4){this.idleThresholdMs=e}recordActivity(){this.lastActivityTime=Date.now()}isUserActive(){return Date.now()-this.lastActivityTime<this.idleThresholdMs}getTimeSinceLastActivity(){return Date.now()-this.lastActivityTime}getLastActivityTime(){return this.lastActivityTime}},rNe=new Zte;function S1n(){return rNe}function T1n(){rNe.recordActivity()}function nNe(){return rNe.isUserActive()}var PB=class{waterMarks=new Map;lastUpdateTimes=new Map;growthThresholdPercent;constructor(e=5){if(e<0)throw new Error("growthThresholdPercent must be non-negative.");this.growthThresholdPercent=e}shouldRecordMetric(e,r){let n=Date.now();this.lastUpdateTimes.set(e,n);let o=this.waterMarks.get(e)||0;if(o===0)return this.waterMarks.set(e,r),this.lastUpdateTimes.set(e,n),!0;let s=o*(1+this.growthThresholdPercent/100);return r>s?(this.waterMarks.set(e,r),this.lastUpdateTimes.set(e,n),!0):!1}getHighWaterMark(e){return this.waterMarks.get(e)||0}getAllHighWaterMarks(){return Object.fromEntries(this.waterMarks)}resetHighWaterMark(e){this.waterMarks.delete(e),this.lastUpdateTimes.delete(e)}resetAllHighWaterMarks(){this.waterMarks.clear(),this.lastUpdateTimes.clear()}cleanup(e=36e5){let r=Date.now()-e;for(let[n,o]of this.lastUpdateTimes.entries())o<r&&(this.lastUpdateTimes.delete(n),this.waterMarks.delete(n))}};var kB=class t{lastRecordTimes=new Map;minIntervalMs;static HIGH_PRIORITY_DIVISOR=2;constructor(e=6e4){if(e<0)throw new Error("minIntervalMs must be non-negative.");this.minIntervalMs=e}shouldRecord(e,r=!1){let n=Date.now(),o=this.lastRecordTimes.get(e)||0,s=r?Math.round(this.minIntervalMs/t.HIGH_PRIORITY_DIVISOR):this.minIntervalMs;return n-o>=s?(this.lastRecordTimes.set(e,n),!0):!1}forceRecord(e){this.lastRecordTimes.set(e,Date.now())}getTimeUntilNextAllowed(e,r=!1){let n=Date.now(),o=this.lastRecordTimes.get(e)||0,s=r?Math.round(this.minIntervalMs/t.HIGH_PRIORITY_DIVISOR):this.minIntervalMs,c=o+s;return Math.max(0,c-n)}getStats(){let e=Array.from(this.lastRecordTimes.values());if(e.length===0)return{totalMetrics:0,oldestRecord:0,newestRecord:0,averageInterval:0};let r=Math.min(...e),n=Math.max(...e),o=n-r,s=e.length>1?o/(e.length-1):0;return{totalMetrics:e.length,oldestRecord:r,newestRecord:n,averageInterval:s}}reset(){this.lastRecordTimes.clear()}cleanup(e=36e5){let r=Date.now()-e;for(let[n,o]of this.lastRecordTimes.entries())o<r&&this.lastRecordTimes.delete(n)}};var ere=class t{intervalId=null;isRunning=!1;lastSnapshot=null;monitoringInterval=1e4;highWaterMarkTracker;rateLimiter;useEnhancedMonitoring=!0;lastCleanupTimestamp=Date.now();static STATE_CLEANUP_INTERVAL_MS=15*60*1e3;static STATE_CLEANUP_MAX_AGE_MS=60*60*1e3;constructor(){this.highWaterMarkTracker=new PB(5),this.rateLimiter=new kB(6e4)}start(e,r=1e4){!Gx()||this.isRunning||(this.monitoringInterval=r,this.isRunning=!0,this.takeSnapshot("monitoring_start",e),this.intervalId=setInterval(()=>{this.checkAndRecordIfNeeded(e)},this.monitoringInterval).unref())}checkAndRecordIfNeeded(e){if(this.performPeriodicCleanup(),!this.useEnhancedMonitoring){this.takeSnapshot("periodic",e);return}if(!nNe())return;let r=this.getCurrentMemoryUsage(),n=this.highWaterMarkTracker.shouldRecordMetric("rss",r.rss),o=this.highWaterMarkTracker.shouldRecordMetric("heap_used",r.heapUsed),s=this.rateLimiter.shouldRecord("periodic_memory"),c=this.rateLimiter.shouldRecord("high_water_memory",!0);if((n||o)&&c){let u=n?"rss_growth":"heap_growth";this.takeSnapshot(u,e)}else s&&this.takeSnapshotWithoutRecording("periodic_check",e)}performPeriodicCleanup(){let e=Date.now();e-this.lastCleanupTimestamp<t.STATE_CLEANUP_INTERVAL_MS||(this.lastCleanupTimestamp=e,this.highWaterMarkTracker.cleanup(t.STATE_CLEANUP_MAX_AGE_MS),this.rateLimiter.cleanup(t.STATE_CLEANUP_MAX_AGE_MS))}stop(e){this.isRunning&&(this.intervalId&&(clearInterval(this.intervalId),this.intervalId=null),e&&this.takeSnapshot("monitoring_stop",e),this.isRunning=!1)}takeSnapshot(e,r){let n=oR.memoryUsage(),o=NB.getHeapStatistics(),s={timestamp:Date.now(),heapUsed:n.heapUsed,heapTotal:n.heapTotal,external:n.external,rss:n.rss,arrayBuffers:n.arrayBuffers,heapSizeLimit:o.heap_size_limit};return Gx()&&(qx(r,s.heapUsed,{memory_type:"heap_used",component:e}),qx(r,s.heapTotal,{memory_type:"heap_total",component:e}),qx(r,s.external,{memory_type:"external",component:e}),qx(r,s.rss,{memory_type:"rss",component:e})),this.lastSnapshot=s,s}takeSnapshotWithoutRecording(e,r){let n=oR.memoryUsage(),o=NB.getHeapStatistics(),s={timestamp:Date.now(),heapUsed:n.heapUsed,heapTotal:n.heapTotal,external:n.external,rss:n.rss,arrayBuffers:n.arrayBuffers,heapSizeLimit:o.heap_size_limit};return this.highWaterMarkTracker.shouldRecordMetric("rss",s.rss),this.highWaterMarkTracker.shouldRecordMetric("heap_used",s.heapUsed),this.lastSnapshot=s,s}getCurrentMemoryUsage(){let e=oR.memoryUsage(),r=NB.getHeapStatistics();return{timestamp:Date.now(),heapUsed:e.heapUsed,heapTotal:e.heapTotal,external:e.external,rss:e.rss,arrayBuffers:e.arrayBuffers,heapSizeLimit:r.heap_size_limit}}getMemoryGrowth(){if(!this.lastSnapshot)return null;let e=this.getCurrentMemoryUsage();return{heapUsed:e.heapUsed-this.lastSnapshot.heapUsed,heapTotal:e.heapTotal-this.lastSnapshot.heapTotal,external:e.external-this.lastSnapshot.external,rss:e.rss-this.lastSnapshot.rss,arrayBuffers:e.arrayBuffers-this.lastSnapshot.arrayBuffers}}getHeapStatistics(){return NB.getHeapStatistics()}getHeapSpaceStatistics(){return NB.getHeapSpaceStatistics()}getProcessMetrics(){return{cpuUsage:oR.cpuUsage(),memoryUsage:oR.memoryUsage(),uptime:oR.uptime()}}recordComponentMemoryUsage(e,r,n){return this.takeSnapshot(n?`${r}_${n}`:r,e)}checkMemoryThreshold(e){let r=this.getCurrentMemoryUsage();return tv(r.heapUsed)>e}getMemoryUsageSummary(){let e=this.getCurrentMemoryUsage();return{heapUsedMB:Math.round(tv(e.heapUsed)*100)/100,heapTotalMB:Math.round(tv(e.heapTotal)*100)/100,externalMB:Math.round(tv(e.external)*100)/100,rssMB:Math.round(tv(e.rss)*100)/100,heapSizeLimitMB:Math.round(tv(e.heapSizeLimit)*100)/100}}setEnhancedMonitoring(e){this.useEnhancedMonitoring=e}getHighWaterMarkStats(){return this.highWaterMarkTracker.getAllHighWaterMarks()}getRateLimitingStats(){return this.rateLimiter.getStats()}forceRecordMemory(e,r="forced"){return this.rateLimiter.forceRecord("forced_memory"),this.takeSnapshot(r,e)}resetHighWaterMarks(){this.highWaterMarkTracker.resetAllHighWaterMarks()}destroy(){this.stop(),this.rateLimiter.reset(),this.highWaterMarkTracker.resetAllHighWaterMarks()}},sR=null;function iNe(){return sR||(sR=new ere),sR}function oNe(){return sR}function C1n(t,e){return iNe().takeSnapshot(e,t)}function w1n(t,e=1e4){iNe().start(t,e)}function x1n(t){sR&&sR.stop(t)}var sNe=(l=>(l.USER_INPUT_START="user_input_start",l.USER_INPUT_END="user_input_end",l.MESSAGE_ADDED="message_added",l.TOOL_CALL_SCHEDULED="tool_call_scheduled",l.TOOL_CALL_COMPLETED="tool_call_completed",l.STREAM_START="stream_start",l.STREAM_END="stream_end",l.HISTORY_UPDATED="history_updated",l.MANUAL_TRIGGER="manual_trigger",l))(sNe||{});var O1n={enabled:!0,snapshotThrottleMs:1e3,maxEventBuffer:100,triggerActivities:["user_input_start","message_added","tool_call_scheduled","stream_start"]},tre=class{listeners=new Set;eventBuffer=[];lastSnapshotTime=0;config;isActive=!1;memoryMonitoringListener=null;constructor(e=O1n){this.config={...e}}start(e){!Gx()||this.isActive||(this.isActive=!0,this.memoryMonitoringListener=r=>{this.handleMemoryMonitoringActivity(r,e)},this.addListener(this.memoryMonitoringListener),this.recordActivity("manual_trigger","activity_monitoring_start"))}stop(){this.isActive&&(this.isActive=!1,this.memoryMonitoringListener&&(this.removeListener(this.memoryMonitoringListener),this.memoryMonitoringListener=null),this.eventBuffer=[])}addListener(e){this.listeners.add(e)}removeListener(e){this.listeners.delete(e)}recordActivity(e,r,n){if(!this.isActive||!this.config.enabled)return;let o={type:e,timestamp:Date.now(),context:r,metadata:n};this.eventBuffer.push(o),this.eventBuffer.length>this.config.maxEventBuffer&&this.eventBuffer.shift(),this.listeners.forEach(s=>{try{s(o)}catch(c){U.debug("ActivityMonitor listener error:",c)}})}getRecentActivity(e){let r=[...this.eventBuffer];return e?r.slice(-e):r}getActivityStats(){let e={},r=Number.MAX_SAFE_INTEGER,n=0;for(let o of this.eventBuffer)e[o.type]=(e[o.type]||0)+1,r=Math.min(r,o.timestamp),n=Math.max(n,o.timestamp);return{totalEvents:this.eventBuffer.length,eventTypes:e,timeRange:this.eventBuffer.length>0?{start:r,end:n}:null}}updateConfig(e){this.config={...this.config,...e}}handleMemoryMonitoringActivity(e,r){if(!this.config.triggerActivities.includes(e.type))return;let n=Date.now();if(n-this.lastSnapshotTime<this.config.snapshotThrottleMs)return;this.lastSnapshotTime=n;let o=oNe();if(o){let s=e.context?`activity_${e.type}_${e.context}`:`activity_${e.type}`;o.takeSnapshot(s,r)}}isMonitoringActive(){return this.isActive&&this.config.enabled}},aR=null;function rMt(t){return aR||(aR=new tre(t)),aR}function I1n(){return aR}function R1n(t,e){rMt(e).start(t)}function P1n(){aR&&aR.stop()}Fe();import{randomUUID as nMt}from"node:crypto";var aNe=nMt();function k1n(){return nMt()}var N1n="gemini-cli",D1n="v1";function lNe(t,e=1e4){if(typeof t=="string")return Ml(t,e,`...[TRUNCATED: original length ${t.length}]`);if(typeof t=="object"&&t!==null){let r=Sr(t);return Ml(r,e,`...[TRUNCATED: original length ${r.length}]`)}if(typeof t=="number"||typeof t=="boolean")return t}function L1n(t){return typeof t=="object"&&t!==null&&Symbol.asyncIterator in t}async function rf(t,e){let{operation:r,logPrompts:n,...o}=t;return tq.getTracer(N1n,D1n).startActiveSpan(r,o,async c=>{let u={name:r,attributes:{[cnt]:r,[jG]:Et,[QG]:lnt,[gnt]:aNe}},d=()=>{try{if(n!==!1){if(u.input!==void 0){let a=lNe(u.input);a!==void 0&&c.setAttribute(unt,a)}if(u.output!==void 0){let a=lNe(u.output);a!==void 0&&c.setAttribute(dnt,a)}}for(let[a,p]of Object.entries(u.attributes)){let f=lNe(p);f!==void 0&&c.setAttribute(a,f)}u.error?(c.setStatus({code:qD.ERROR,message:iMt(u.error)}),u.error instanceof Error&&c.recordException(u.error)):c.setStatus({code:qD.OK})}catch(a){cn.error("Error setting span attributes in endSpan",a),c.setStatus({code:qD.ERROR,message:`Error in endSpan: ${iMt(a)}`})}finally{c.end()}},l=!1;try{let a=await e({metadata:u});if(L1n(a)){l=!0;let p=async function*(){try{yield*a}catch(f){throw u.error=f,f}finally{d()}}();return Object.assign(p,a)}return a}catch(a){throw u.error=a,a}finally{l||d()}})}function iMt(t){return t instanceof Error?t.message:typeof t=="string"?t:Sr(t)}import{performance as Tg}from"node:perf_hooks";import*as rv from"node:os";import*as cNe from"node:fs";var rre=class t{phases=new Map;static instance;constructor(){}static getInstance(){return t.instance||(t.instance=new t),t.instance}getStartMarkName(e){return`startup:${e}:start`}getEndMarkName(e){return`startup:${e}:end`}start(e,r){let n=this.phases.get(e);if(n&&!n.ended){U.warn(`[STARTUP] Cannot start phase '${e}': phase is already active. Call end() before starting again.`);return}let o=this.getStartMarkName(e);Tg.mark(o,{detail:r});let s={name:e,startCpuUsage:process.cpuUsage(),details:r,ended:!1};return this.phases.set(e,s),{end:c=>{this._end(s,c)}}}_end(e,r){if(e.ended){U.warn(`[STARTUP] Cannot end phase '${e.name}': phase was already ended.`);return}let n=this.getStartMarkName(e.name),o=this.getEndMarkName(e.name);if(Tg.getEntriesByName(n).length===0){U.warn(`[STARTUP] Cannot measure phase '${e.name}': start mark '${n}' not found (likely cleared by reset).`),e.ended=!0;return}Tg.mark(o,{detail:r}),Tg.measure(e.name,n,o),e.cpuUsage=process.cpuUsage(e.startCpuUsage),e.ended=!0,r&&(e.details={...e.details,...r})}flush(e){U.debug("[STARTUP] StartupProfiler.flush() called with",this.phases.size,"phases");let r={os_platform:rv.platform(),os_arch:rv.arch(),os_release:rv.release(),is_docker:cNe.existsSync("/.dockerenv")},n=Tg.getEntriesByType("measure");for(let s of this.phases.values()){if(!s.ended){U.warn(`[STARTUP] Phase '${s.name}' was started but never ended. Skipping metrics.`);continue}let c=n.find(u=>u.name===s.name);if(c&&s.cpuUsage){let u={...r,cpu_usage_user:s.cpuUsage.user,cpu_usage_system:s.cpuUsage.system,...s.details};U.debug("[STARTUP] Recording metric for phase:",s.name,"duration:",c.duration),RAe(e,c.duration,{phase:s.name,details:u})}else U.debug("[STARTUP] Skipping phase without measure:",s.name)}let o=[];for(let s of this.phases.values()){if(!s.ended)continue;let c=n.find(u=>u.name===s.name);c&&s.cpuUsage&&o.push({name:s.name,duration_ms:Math.round(c.duration),cpu_usage_user_usec:s.cpuUsage.user,cpu_usage_system_usec:s.cpuUsage.system,start_time_usec:Math.round((Tg.timeOrigin+c.startTime)*1e3),end_time_usec:Math.round((Tg.timeOrigin+c.startTime+c.duration)*1e3)})}o.length>0&&oMt(e,new aV(o,rv.platform(),rv.release(),cNe.existsSync("/.dockerenv")));for(let s of this.phases.keys()){let c=this.getStartMarkName(s),u=this.getEndMarkName(s);Tg.clearMarks(c),Tg.clearMarks(u),Tg.clearMeasures(s)}this.phases.clear()}},uNe=rre.getInstance();var Yke=(r=>(r.GCP="gcp",r.LOCAL="local",r))(Yke||{}),dNe="local",pNe="http://localhost:4317";var _Ne=class{error(e,...r){U.error(e,...r)}warn(e,...r){U.warn(e,...r)}info(e,...r){U.log(e,...r)}debug(e,...r){U.debug(e,...r)}verbose(e,...r){U.debug(e,...r)}};cn.setLogger(new _Ne,BKe.INFO);var LB,are,lre,iv=!1,vNe=!1,MB,cR,uR,bNe=[],DB;function zte(){return iv}function Vt(t){iv?t():bNe.push(t)}async function H1n(){if(iv)for(;bNe.length>0;){let t=bNe.shift();if(t)try{await t()}catch(e){U.error("Error executing buffered telemetry event",e)}}}function $1n(t,e){if(!t)return;let r=t.replace(/^["']|["']$/g,"");try{let n=new URL(r);return e==="grpc"?n.origin:n.href}catch(n){cn.error("Invalid OTLP endpoint URL provided:",r,n);return}}async function nre(t,e){if(!t.getTelemetryEnabled())return;if(iv){if(e?.client_email&&DB&&e.client_email!==DB){let E=`Telemetry credentials have changed (from ${DB} to ${e.client_email}), but telemetry cannot be re-initialized in this process. Please restart the CLI to use the new account for telemetry.`;U.error(E)}return}if(t.getTelemetryUseCollector()&&t.getTelemetryUseCliAuth()){U.error('Telemetry configuration error: "useCollector" and "useCliAuth" cannot both be true. CLI authentication is only supported with in-process exporters. Disabling telemetry.');return}if(t.getTelemetryUseCliAuth()&&!e){vNe||(vNe=!0,MB=async E=>{t.getTelemetryEnabled()&&t.getTelemetryUseCliAuth()&&(U.log("Telemetry reinit with credentials."),await nre(t,E))},wV.on("post_auth",MB)),U.log("CLI auth is requested but no credentials, deferring telemetry initialization.");return}let r=(0,hMt.resourceFromAttributes)({[HG.SERVICE_NAME]:Et,[HG.SERVICE_VERSION]:process.version,"session.id":t.getSessionId()});cR||(cR=E=>{mMt(t,E)},Ee.on("telemetry-keychain-availability",cR)),uR||(uR=E=>{yMt(t,E)},Ee.on("telemetry-token-storage-type",uR));let n=t.getTelemetryOtlpEndpoint(),o=t.getTelemetryOtlpProtocol(),s=t.getTelemetryTarget(),c=t.getTelemetryUseCollector(),u=$1n(n,o),d=t.getTelemetryOutfile(),l=!!u&&!d,a=process.env.OTLP_GOOGLE_CLOUD_PROJECT||process.env.GOOGLE_CLOUD_PROJECT,p=s==="gcp"&&!c,f,g,y;if(p)U.log("Creating GCP exporters with projectId:",a,"using",e?"provided credentials":"ADC"),f=new wB(a,e),g=new OB(a,e),y=new nv.PeriodicExportingMetricReader({exporter:new xB(a,e),exportIntervalMillis:3e4});else if(l)if(o==="http"){let E=_=>{let v=new URL(u);return v.pathname=[v.pathname.replace(/\/$/,""),_].join("/"),v.href};f=new uMt.OTLPTraceExporter({url:E("v1/traces")}),g=new dMt.OTLPLogExporter({url:E("v1/logs")}),y=new nv.PeriodicExportingMetricReader({exporter:new pMt.OTLPMetricExporter({url:E("v1/metrics")}),exportIntervalMillis:1e4})}else f=new aMt.OTLPTraceExporter({url:u,compression:KA.GZIP}),g=new lMt.OTLPLogExporter({url:u,compression:KA.GZIP}),y=new nv.PeriodicExportingMetricReader({exporter:new cMt.OTLPMetricExporter({url:u,compression:KA.GZIP}),exportIntervalMillis:1e4});else d?(f=new eZ(d),g=new tZ(d),y=new nv.PeriodicExportingMetricReader({exporter:new rZ(d),exportIntervalMillis:1e4})):(f=new cre.ConsoleSpanExporter,g=new ure.ConsoleLogRecordExporter,y=new nv.PeriodicExportingMetricReader({exporter:new nv.ConsoleMetricExporter,exportIntervalMillis:1e4}));are=new cre.BatchSpanProcessor(f),lre=new ure.BatchLogRecordProcessor(g),LB=new fMt.NodeSDK({resource:r,spanProcessors:[are],logRecordProcessors:[lre],metricReader:y,instrumentations:[new gMt.HttpInstrumentation]});try{LB.start(),t.getDebugMode()&&U.log("OpenTelemetry SDK started successfully."),DB=e?.client_email,Cnt(t),iv=!0,H1n()}catch(E){U.error("Error starting OpenTelemetry SDK:",E)}process.on("SIGTERM",()=>{fNe(t)}),process.on("SIGINT",()=>{fNe(t)})}async function M1n(t){if(!(!iv||!are||!lre))try{await Promise.all([are.forceFlush(),lre.forceFlush()]),t.getDebugMode()&&U.log("OpenTelemetry SDK flushed successfully.")}catch(e){U.error("Error flushing SDK:",e)}}async function fNe(t,e=!0){if(!(!iv||!LB))try{Ct.getInstance()?.shutdown(),await LB.shutdown(),t.getDebugMode()&&e&&U.log("OpenTelemetry SDK shut down successfully.")}catch(r){U.error("Error shutting down SDK:",r)}finally{iv=!1,LB=void 0,tq.disable(),UKe.disable(),eq.disable(),FKe.disable(),cn.disable(),MB&&(wV.off("post_auth",MB),MB=void 0),cR&&(Ee.off("telemetry-keychain-availability",cR),cR=void 0),uR&&(Ee.off("telemetry-token-storage-type",uR),uR=void 0),vNe=!1,DB=void 0}}function B1n(t,e){Ct.getInstance(t)?.logStartSessionEvent(e),Vt(()=>{t.getExperimentsAsync().then(()=>{let r=qt.logs.getLogger(Et),n={body:e.toLogBody(),attributes:e.toOpenTelemetryAttributes(t)};r.emit(n)}).catch(r=>{U.error("Failed to log telemetry event",r)})})}function U1n(t,e){Ct.getInstance(t)?.logNewPromptEvent(e),Vt(()=>{let r=qt.logs.getLogger(Et),n={body:e.toLogBody(),attributes:e.toOpenTelemetryAttributes(t)};r.emit(n)})}function ire(t,e){let r={...e,"event.name":GL,"event.timestamp":new Date().toISOString()};By.addEvent(r),Ct.getInstance(t)?.logToolCallEvent(e),Vt(()=>{let n=qt.logs.getLogger(Et),o={body:e.toLogBody(),attributes:e.toOpenTelemetryAttributes(t)};if(n.emit(o),vAe(t,e.duration_ms,{function_name:e.function_name,success:e.success,decision:e.decision,tool_type:e.tool_type}),e.metadata){let s=e.metadata.model_added_lines;typeof s=="number"&&s>0&&TAe(t,s,"added",{function_name:e.function_name});let c=e.metadata.model_removed_lines;typeof c=="number"&&c>0&&TAe(t,c,"removed",{function_name:e.function_name})}})}function lR(t,e){Ct.getInstance(t)?.logToolOutputTruncatedEvent(e),Vt(()=>{let r=qt.logs.getLogger(Et),n={body:e.toLogBody(),attributes:e.toOpenTelemetryAttributes(t)};r.emit(n)})}function AMt(t,e){Ct.getInstance(t)?.logToolOutputMaskingEvent(e),Vt(()=>{let r=qt.logs.getLogger(Et),n={body:e.toLogBody(),attributes:e.toOpenTelemetryAttributes(t)};r.emit(n)})}function dR(t,e){Ct.getInstance(t)?.logFileOperationEvent(e),Vt(()=>{let r=qt.logs.getLogger(Et),n={body:e.toLogBody(),attributes:e.toOpenTelemetryAttributes(t)};r.emit(n),SAe(t,{operation:e.operation,lines:e.lines,mimetype:e.mimetype,extension:e.extension,programming_language:e.programming_language})})}function hNe(t,e){Ct.getInstance(t)?.logApiRequestEvent(e),Vt(()=>{let r=qt.logs.getLogger(Et);r.emit(e.toLogRecord(t)),r.emit(e.toSemanticLogRecord(t))})}function gNe(t,e){Ct.getInstance(t)?.logFlashFallbackEvent(),Vt(()=>{let r=qt.logs.getLogger(Et),n={body:e.toLogBody(),attributes:e.toOpenTelemetryAttributes(t)};r.emit(n)})}function EMt(t,e){Ct.getInstance(t)?.logRipgrepFallbackEvent(),Vt(()=>{let r=qt.logs.getLogger(Et),n={body:e.toLogBody(),attributes:e.toOpenTelemetryAttributes(t)};r.emit(n)})}function mNe(t,e){let r={...e,"event.name":VL,"event.timestamp":new Date().toISOString()};By.addEvent(r),Ct.getInstance(t)?.logApiErrorEvent(e),Vt(()=>{let n=qt.logs.getLogger(Et);n.emit(e.toLogRecord(t)),n.emit(e.toSemanticLogRecord(t)),bAe(t,e.duration_ms,{model:e.model,status_code:e.status_code,error_type:e.error_type}),VG(t,e.duration_ms,{model:e.model,status_code:e.status_code,genAiAttributes:{...qA(e),"error.type":e.error_type||"unknown"}})})}function yNe(t,e){let r={...e,"event.name":HL,"event.timestamp":new Date().toISOString()};By.addEvent(r),Ct.getInstance(t)?.logApiResponseEvent(e),Vt(()=>{let n=qt.logs.getLogger(Et);n.emit(e.toLogRecord(t)),n.emit(e.toSemanticLogRecord(t));let o=qA(e);VG(t,e.duration_ms,{model:e.model,status_code:e.status_code,genAiAttributes:o});let s=[{count:e.usage.input_token_count,type:"input"},{count:e.usage.output_token_count,type:"output"},{count:e.usage.cached_content_token_count,type:"cache"},{count:e.usage.thoughts_token_count,type:"thought"},{count:e.usage.tool_token_count,type:"tool"}];for(let{count:c,type:u}of s)PAe(t,c,{model:e.model,type:u,genAiAttributes:o})})}function SNe(t,e){Ct.getInstance(t)?.logLoopDetectedEvent(e),Vt(()=>{let r=qt.logs.getLogger(Et),n={body:e.toLogBody(),attributes:e.toOpenTelemetryAttributes(t)};r.emit(n)})}function _Mt(t,e){Ct.getInstance(t)?.logLoopDetectionDisabledEvent(),Vt(()=>{let r=qt.logs.getLogger(Et),n={body:e.toLogBody(),attributes:e.toOpenTelemetryAttributes(t)};r.emit(n)})}function vMt(t,e){Ct.getInstance(t)?.logNextSpeakerCheck(e),Vt(()=>{let r=qt.logs.getLogger(Et),n={body:e.toLogBody(),attributes:e.toOpenTelemetryAttributes(t)};r.emit(n)})}function F1n(t,e){Ct.getInstance(t)?.logSlashCommandEvent(e),Vt(()=>{let r=qt.logs.getLogger(Et),n={body:e.toLogBody(),attributes:e.toOpenTelemetryAttributes(t)};r.emit(n)})}function j1n(t,e){let r={...e,"event.name":KAe,"event.timestamp":new Date().toISOString()};By.addEvent(r),Ct.getInstance(t)?.logRewindEvent(e),Vt(()=>{let n=qt.logs.getLogger(Et),o={body:e.toLogBody(),attributes:e.toOpenTelemetryAttributes(t)};n.emit(o)})}function z1n(t,e){Ct.getInstance(t)?.logIdeConnectionEvent(e),Vt(()=>{let r=qt.logs.getLogger(Et),n={body:e.toLogBody(),attributes:e.toOpenTelemetryAttributes(t)};r.emit(n)})}function Q1n(t,e){Ct.getInstance(t)?.logConversationFinishedEvent(e),Vt(()=>{let r=qt.logs.getLogger(Et),n={body:e.toLogBody(),attributes:e.toOpenTelemetryAttributes(t)};r.emit(n)})}function ore(t,e){Ct.getInstance(t)?.logChatCompressionEvent(e);let r=qt.logs.getLogger(Et),n={body:e.toLogBody(),attributes:e.toOpenTelemetryAttributes(t)};r.emit(n),wnt(t,{tokens_before:e.tokens_before,tokens_after:e.tokens_after})}function bMt(t,e){Ct.getInstance(t)?.logMalformedJsonResponseEvent(e),Vt(()=>{let r=qt.logs.getLogger(Et),n={body:e.toLogBody(),attributes:e.toOpenTelemetryAttributes(t)};r.emit(n)})}function SMt(t,e){Ct.getInstance(t)?.logInvalidChunkEvent(e),Vt(()=>{let r=qt.logs.getLogger(Et),n={body:e.toLogBody(),attributes:e.toOpenTelemetryAttributes(t)};r.emit(n),CAe(t)})}function CT(t,e){Ct.getInstance(t)?.logNetworkRetryAttemptEvent(e),Vt(()=>{let r=qt.logs.getLogger(Et),n={body:e.toLogBody(),attributes:e.toOpenTelemetryAttributes(t)};r.emit(n),wAe(t,{model:e.model,attempt:e.attempt})})}function TMt(t,e){Ct.getInstance(t)?.logContentRetryEvent(e),Vt(()=>{let r=qt.logs.getLogger(Et),n={body:e.toLogBody(),attributes:e.toOpenTelemetryAttributes(t)};r.emit(n),xAe(t)})}function dre(t,e){Ct.getInstance(t)?.logContentRetryFailureEvent(e),Vt(()=>{let r=qt.logs.getLogger(Et),n={body:e.toLogBody(),attributes:e.toOpenTelemetryAttributes(t)};r.emit(n),OAe(t)})}function CMt(t,e){Ct.getInstance(t)?.logModelRoutingEvent(e),Vt(()=>{let r=qt.logs.getLogger(Et),n={body:e.toLogBody(),attributes:e.toOpenTelemetryAttributes(t)};r.emit(n),IAe(t,e)})}function W1n(t,e){Ct.getInstance(t)?.logModelSlashCommandEvent(e),Vt(()=>{let r=qt.logs.getLogger(Et),n={body:e.toLogBody(),attributes:e.toOpenTelemetryAttributes(t)};r.emit(n),knt(t,e)})}async function q1n(t,e){await Ct.getInstance(t)?.logExtensionInstallEvent(e),Vt(()=>{let r=qt.logs.getLogger(Et),n={body:e.toLogBody(),attributes:e.toOpenTelemetryAttributes(t)};r.emit(n)})}async function G1n(t,e){await Ct.getInstance(t)?.logExtensionUninstallEvent(e),Vt(()=>{let r=qt.logs.getLogger(Et),n={body:e.toLogBody(),attributes:e.toOpenTelemetryAttributes(t)};r.emit(n)})}async function V1n(t,e){await Ct.getInstance(t)?.logExtensionUpdateEvent(e),Vt(()=>{let r=qt.logs.getLogger(Et),n={body:e.toLogBody(),attributes:e.toOpenTelemetryAttributes(t)};r.emit(n)})}async function sMt(t,e){await Ct.getInstance(t)?.logExtensionEnableEvent(e),Vt(()=>{let r=qt.logs.getLogger(Et),n={body:e.toLogBody(),attributes:e.toOpenTelemetryAttributes(t)};r.emit(n)})}async function Y1n(t,e){await Ct.getInstance(t)?.logExtensionDisableEvent(e),Vt(()=>{let r=qt.logs.getLogger(Et),n={body:e.toLogBody(),attributes:e.toOpenTelemetryAttributes(t)};r.emit(n)})}function BB(t,e){Ct.getInstance(t)?.logEditStrategyEvent(e),Vt(()=>{let r=qt.logs.getLogger(Et),n={body:e.toLogBody(),attributes:e.toOpenTelemetryAttributes(t)};r.emit(n)})}function TNe(t,e){Ct.getInstance(t)?.logEditCorrectionEvent(e),Vt(()=>{let r=qt.logs.getLogger(Et),n={body:e.toLogBody(),attributes:e.toOpenTelemetryAttributes(t)};r.emit(n)})}function wMt(t,e){Ct.getInstance(t)?.logAgentStartEvent(e),Vt(()=>{let r=qt.logs.getLogger(Et),n={body:e.toLogBody(),attributes:e.toOpenTelemetryAttributes(t)};r.emit(n)})}function xMt(t,e){Ct.getInstance(t)?.logAgentFinishEvent(e),Vt(()=>{let r=qt.logs.getLogger(Et),n={body:e.toLogBody(),attributes:e.toOpenTelemetryAttributes(t)};r.emit(n),Nnt(t,e)})}function OMt(t,e){Ct.getInstance(t)?.logRecoveryAttemptEvent(e),Vt(()=>{let r=qt.logs.getLogger(Et),n={body:e.toLogBody(),attributes:e.toOpenTelemetryAttributes(t)};r.emit(n),Dnt(t,e)})}function sre(t,e){Ct.getInstance(t)?.logWebFetchFallbackAttemptEvent(e),Vt(()=>{let r=qt.logs.getLogger(Et),n={body:e.toLogBody(),attributes:e.toOpenTelemetryAttributes(t)};r.emit(n)})}function CNe(t,e){Ct.getInstance(t)?.logLlmLoopCheckEvent(e),Vt(()=>{let r=qt.logs.getLogger(Et),n={body:e.toLogBody(),attributes:e.toOpenTelemetryAttributes(t)};r.emit(n)})}function IMt(t,e){Ct.getInstance(t)?.logApprovalModeSwitchEvent(e),Vt(()=>{qt.logs.getLogger(Et).emit({body:e.toLogBody(),attributes:e.toOpenTelemetryAttributes(t)})})}function RMt(t,e){Ct.getInstance(t)?.logApprovalModeDurationEvent(e),Vt(()=>{qt.logs.getLogger(Et).emit({body:e.toLogBody(),attributes:e.toOpenTelemetryAttributes(t)})})}function PMt(t,e){Ct.getInstance(t)?.logPlanExecutionEvent(e),Vt(()=>{qt.logs.getLogger(Et).emit({body:e.toLogBody(),attributes:e.toOpenTelemetryAttributes(t)}),Pnt(t,{approval_mode:e.approval_mode})})}function kMt(t,e){Ct.getInstance(t)?.logHookCallEvent(e),Vt(()=>{let r=qt.logs.getLogger(Et),n={body:e.toLogBody(),attributes:e.toOpenTelemetryAttributes(t)};r.emit(n),Bnt(t,e.hook_event_name,e.hook_name,e.duration_ms,e.success)})}function oMt(t,e){Ct.getInstance(t)?.logStartupStatsEvent(e),Vt(()=>{t.getExperimentsAsync().then(()=>{let r=qt.logs.getLogger(Et),n={body:e.toLogBody(),attributes:e.toOpenTelemetryAttributes(t)};r.emit(n)}).catch(r=>{U.error("Failed to log telemetry event",r)})})}function mMt(t,e){Ct.getInstance(t)?.logKeychainAvailabilityEvent(e),Vt(()=>{let r=qt.logs.getLogger(Et),n={body:e.toLogBody(),attributes:e.toOpenTelemetryAttributes(t)};r.emit(n),Unt(t,e)})}function yMt(t,e){Ct.getInstance(t)?.logTokenStorageInitializationEvent(e),Vt(()=>{let r=qt.logs.getLogger(Et),n={body:e.toLogBody(),attributes:e.toOpenTelemetryAttributes(t)};r.emit(n),Fnt(t,e)})}function ANe(t,e){Ct.getInstance(t)?.logOnboardingStartEvent(e),Vt(()=>{let r=qt.logs.getLogger(Et),n={body:e.toLogBody(),attributes:e.toOpenTelemetryAttributes(t)};r.emit(n),Int(t)})}function ENe(t,e){Ct.getInstance(t)?.logOnboardingSuccessEvent(e),Vt(()=>{let r=qt.logs.getLogger(Et),n={body:e.toLogBody(),attributes:e.toOpenTelemetryAttributes(t)};r.emit(n),Rnt(t,e.userTier,e.duration_ms)})}function wNe(t,e){Vt(()=>{let n=qt.logs.getLogger(Et),o={body:e.toLogBody(),attributes:e.toOpenTelemetryAttributes(t)};n.emit(o)});let r=Ct.getInstance(t);r&&(e instanceof iR?r.logCreditsUsedEvent(e):e instanceof Jte?r.logOverageOptionSelectedEvent(e):e instanceof Kte?r.logEmptyWalletMenuShownEvent(e):e instanceof Xte&&r.logCreditPurchaseClickEvent(e))}function NMt(t){return{request:{model:"models/"+t.model,contents:wT(t.contents)}}}function DMt(t){return t.totalTokens===void 0&&U.warn("Warning: Code Assist API did not return totalTokens. Defaulting to 0."),{totalTokens:t.totalTokens??0}}function ONe(t,e,r,n,o){return{model:t.model,project:r,user_prompt_id:e,request:J1n(t,n),enabled_credit_types:o}}function INe(t){let e=new LD;e.responseId=t.traceId;let r=t.response;return r?(e.candidates=r.candidates??[],e.automaticFunctionCallingHistory=r.automaticFunctionCallingHistory,e.promptFeedback=r.promptFeedback,e.usageMetadata=r.usageMetadata,e.modelVersion=r.modelVersion,e):(e.candidates=[],e)}function J1n(t,e){return{contents:wT(t.contents),systemInstruction:K1n(t.config?.systemInstruction),cachedContent:t.config?.cachedContent,tools:t.config?.tools,toolConfig:t.config?.toolConfig,labels:t.config?.labels,safetySettings:t.config?.safetySettings,generationConfig:Z1n(t.config),session_id:e}}function wT(t){return Array.isArray(t)?t.map(xNe):[xNe(t)]}function K1n(t){if(t)return xNe(t)}function X1n(t){return typeof t=="object"&&t!==null&&!Array.isArray(t)&&!("parts"in t)&&!("role"in t)}function xNe(t){return Array.isArray(t)?{role:"user",parts:pre(t)}:typeof t=="string"?{role:"user",parts:[{text:t}]}:X1n(t)?{role:"user",parts:[LMt(t)]}:{...t,parts:t.parts?pre(t.parts.filter(e=>e!=null)):[]}}function pre(t){return t.map(LMt)}function LMt(t){if(typeof t=="string")return{text:t};if("thought"in t&&t.thought){let e=`[Thought: ${t.thought}]`,r={...t};if(delete r.thought,"functionCall"in r||"functionResponse"in r||"inlineData"in r||"fileData"in r)return r;let o=r.text,s=o?String(o):"",c=s?`${s}
|
|
1063
1063
|
${e}`:e;return{...r,text:c}}return t}function Z1n(t){if(t)return{temperature:t.temperature,topP:t.topP,topK:t.topK,candidateCount:t.candidateCount,maxOutputTokens:t.maxOutputTokens,stopSequences:t.stopSequences,responseLogprobs:t.responseLogprobs,logprobs:t.logprobs,presencePenalty:t.presencePenalty,frequencyPenalty:t.frequencyPenalty,seed:t.seed,responseMimeType:t.responseMimeType,responseSchema:t.responseSchema,responseJsonSchema:t.responseJsonSchema,routingConfig:t.routingConfig,modelSelectionConfig:t.modelSelectionConfig,responseModalities:t.responseModalities,mediaResolution:t.mediaResolution,speechConfig:t.speechConfig,audioTimestamp:t.audioTimestamp,thinkingConfig:t.thinkingConfig}}function xT(t,e){if(!t)return"";if(typeof t=="string")return t;if(Array.isArray(t))return t.map(n=>xT(n,e)).join("");let r=t;if(e?.verbose){if(r.videoMetadata!==void 0)return"[Video Metadata]";if(r.thought!==void 0)return`[Thought: ${r.thought}]`;if(r.codeExecutionResult!==void 0)return"[Code Execution Result]";if(r.executableCode!==void 0)return"[Executable Code]";if(r.fileData!==void 0)return"[File Data]";if(r.functionCall!==void 0)return`[Function Call: ${r.functionCall.name}]`;if(r.functionResponse!==void 0)return`[Function Response: ${r.functionResponse.name}]`;if(r.inlineData!==void 0){let n=r.inlineData.mimeType??"unknown",o=r.inlineData.data??"",c=(Math.ceil(o.length*3/4)/1024).toFixed(1);return`[${n.startsWith("audio/")?"Audio":n.startsWith("video/")?"Video":n.startsWith("image/")?"Image":"Media"}: ${n}, ${c} KB]`}}return r.text??""}function sn(t){if(t.candidates&&t.candidates.length>0){let e=t.candidates[0];if(e.content&&e.content.parts&&e.content.parts.length>0)return e.content.parts.filter(r=>r.text&&!r.thought).map(r=>r.text).join("")}return null}async function bXi(t,e){let r=[],n=Array.isArray(t)?t:typeof t=="string"?[{text:t}]:[t];for(let o of n){let s;if(typeof o=="string"?s=o:"text"in o&&(s=o.text),s!==void 0){let c=await e(s);r.push(...c)}else r.push(o)}return r}function SXi(t,e,r=`
|
|
1064
1064
|
|
|
@@ -1212,7 +1212,7 @@ ${N}`);let k=Zw(this.resolvedPath),L=pR(this.resolvedPath),M=zv.extname(this.res
|
|
|
1212
1212
|
`,e-1);return{line:r===-1?0:t.slice(0,r+1).match(/\n/g).length,column:e-r-1}}function BFe(t,e,{oneBased:r=!1}={}){if(typeof t!="string")throw new TypeError("Text parameter should be a string");if(!Number.isInteger(e))throw new TypeError("Index parameter should be an integer");if(e<0||e>t.length)throw new RangeError("Index out of bounds");let n=BVn(t,e);return r?{line:n.line+1,column:n.column+1}:n}var UVn=t=>`\\u{${t.codePointAt(0).toString(16)}}`,UFe=class t extends Error{name="JSONError";fileName;#e;#t;#r;#n;#o;constructor(e){if(typeof e=="string")super(),this.#r=e;else{let{jsonParseError:r,fileName:n,input:o}=e;super(void 0,{cause:r}),this.#e=o,this.#t=r,this.fileName=n}Error.captureStackTrace?.(this,t)}get message(){this.#r??=`${jVn(this.#t.message)}${this.#e===""?" while parsing empty string":""}`;let{codeFrame:e}=this;return`${this.#r}${this.fileName?` in ${this.fileName}`:""}${e?`
|
|
1213
1213
|
|
|
1214
1214
|
${e}
|
|
1215
|
-
`:""}`}set message(e){this.#r=e}#i(e){if(!this.#t)return;let r=this.#e,n=FVn(r,this.#t.message);if(n)return(0,Ezt.codeFrameColumns)(r,{start:n},{highlightCode:e})}get codeFrame(){return this.#n??=this.#i(!0),this.#n}get rawCodeFrame(){return this.#o??=this.#i(!1),this.#o}},FVn=(t,e)=>{let r=e.match(/in JSON at position (?<index>\d+)(?: \(line (?<line>\d+) column (?<column>\d+)\))?$/);if(!r)return;let{index:n,line:o,column:s}=r.groups;return o&&s?{line:Number(o),column:Number(s)}:BFe(t,Number(n),{oneBased:!0})},jVn=t=>t.replace(/(?<=^Unexpected token )(?<quote>')?(.)\k<quote>/,(e,r,n)=>`"${n}"(${UVn(n)})`);function FFe(t,e,r){typeof e=="string"&&(r=e,e=void 0);try{return JSON.parse(t,e)}catch(n){throw new UFe({jsonParseError:n,fileName:r,input:t})}}var LWt=Me(NWt(),1);import{fileURLToPath as c$n}from"node:url";function DWt(t){return t instanceof URL?c$n(t):t}var p$n=t=>d$n.resolve(DWt(t)??".","package.json"),f$n=(t,e)=>{let r=typeof t=="string"?FFe(t):t;return e&&(0,LWt.default)(r),r};async function MWt({cwd:t,normalize:e=!0}={}){let r=await u$n.readFile(p$n(t),"utf8");return f$n(r,e)}async function BWt(t){let e=await W$t("package.json",t);if(e)return{packageJson:await MWt({...t,cwd:h$n.dirname(e)}),path:e}}async function Mse(t){try{let e=await BWt({cwd:t,normalize:!1});return e?e.packageJson:void 0}catch(e){U.error("Error occurred while reading package.json",e);return}}var g$n=(n=>(n.NIGHTLY="nightly",n.PREVIEW="preview",n.STABLE="stable",n))(g$n||{}),Bse=new Map;function tuo(){Bse.clear()}async function WU(t){if(Bse.has(t))return Bse.get(t);let r=(await Mse(t))?.version??"",n;return r.includes("nightly")||r===""?n="nightly":r.includes("preview")?n="preview":n="stable",Bse.set(t,n),n}async function ruo(t){return await WU(t)==="nightly"}async function nuo(t){return await WU(t)==="preview"}async function iuo(t){return await WU(t)==="stable"}import{fileURLToPath as _$n}from"node:url";import v$n from"node:path";import{fileURLToPath as m$n}from"node:url";import y$n from"node:path";var A$n=m$n(import.meta.url),E$n=y$n.dirname(A$n),YU;function XP(){return YU||(YU=(async()=>{let t=await Mse(E$n);return"0.37.
|
|
1215
|
+
`:""}`}set message(e){this.#r=e}#i(e){if(!this.#t)return;let r=this.#e,n=FVn(r,this.#t.message);if(n)return(0,Ezt.codeFrameColumns)(r,{start:n},{highlightCode:e})}get codeFrame(){return this.#n??=this.#i(!0),this.#n}get rawCodeFrame(){return this.#o??=this.#i(!1),this.#o}},FVn=(t,e)=>{let r=e.match(/in JSON at position (?<index>\d+)(?: \(line (?<line>\d+) column (?<column>\d+)\))?$/);if(!r)return;let{index:n,line:o,column:s}=r.groups;return o&&s?{line:Number(o),column:Number(s)}:BFe(t,Number(n),{oneBased:!0})},jVn=t=>t.replace(/(?<=^Unexpected token )(?<quote>')?(.)\k<quote>/,(e,r,n)=>`"${n}"(${UVn(n)})`);function FFe(t,e,r){typeof e=="string"&&(r=e,e=void 0);try{return JSON.parse(t,e)}catch(n){throw new UFe({jsonParseError:n,fileName:r,input:t})}}var LWt=Me(NWt(),1);import{fileURLToPath as c$n}from"node:url";function DWt(t){return t instanceof URL?c$n(t):t}var p$n=t=>d$n.resolve(DWt(t)??".","package.json"),f$n=(t,e)=>{let r=typeof t=="string"?FFe(t):t;return e&&(0,LWt.default)(r),r};async function MWt({cwd:t,normalize:e=!0}={}){let r=await u$n.readFile(p$n(t),"utf8");return f$n(r,e)}async function BWt(t){let e=await W$t("package.json",t);if(e)return{packageJson:await MWt({...t,cwd:h$n.dirname(e)}),path:e}}async function Mse(t){try{let e=await BWt({cwd:t,normalize:!1});return e?e.packageJson:void 0}catch(e){U.error("Error occurred while reading package.json",e);return}}var g$n=(n=>(n.NIGHTLY="nightly",n.PREVIEW="preview",n.STABLE="stable",n))(g$n||{}),Bse=new Map;function tuo(){Bse.clear()}async function WU(t){if(Bse.has(t))return Bse.get(t);let r=(await Mse(t))?.version??"",n;return r.includes("nightly")||r===""?n="nightly":r.includes("preview")?n="preview":n="stable",Bse.set(t,n),n}async function ruo(t){return await WU(t)==="nightly"}async function nuo(t){return await WU(t)==="preview"}async function iuo(t){return await WU(t)==="stable"}import{fileURLToPath as _$n}from"node:url";import v$n from"node:path";import{fileURLToPath as m$n}from"node:url";import y$n from"node:path";var A$n=m$n(import.meta.url),E$n=y$n.dirname(A$n),YU;function XP(){return YU||(YU=(async()=>{let t=await Mse(E$n);return"0.37.2"})(),YU)}function cuo(){YU=void 0}var b$n=_$n(import.meta.url),S$n=v$n.dirname(b$n),a9e;function T$n(){let t=process.platform,e=process.arch;return t==="darwin"&&e==="x64"?"DARWIN_AMD64":t==="darwin"&&e==="arm64"?"DARWIN_ARM64":t==="linux"&&e==="x64"?"LINUX_AMD64":t==="linux"&&e==="arm64"?"LINUX_ARM64":t==="win32"&&e==="x64"?"WINDOWS_AMD64":"PLATFORM_UNSPECIFIED"}async function JU(){return a9e||(a9e=(async()=>({ideName:"IDE_UNSPECIFIED",pluginType:"GEMINI",ideVersion:await XP(),platform:T$n(),updateChannel:await WU(S$n)}))()),a9e}var w$n="https://cloudcode-pa.googleapis.com",x$n="v1internal",O$n=1e3,y0=class{constructor(e,r,n={},o,s,c,u,d){this.client=e;this.projectId=r;this.httpOptions=n;this.sessionId=o;this.userTier=s;this.userTierName=c;this.paidTier=u;this.config=d}async generateContentStream(e,r,n){let o=this.config?$dt(this.config.getBillingSettings().overageStrategy,Hdt(this.paidTier)):!1,c=Vdt(e.model)&&o;c&&!this.config?.getCreditsNotificationShown()&&(this.config?.setCreditsNotificationShown(!0),Ee.emitFeedback("info","Using AI Credits for this request."));let u=c?[MS]:void 0,d=await this.requestStreamingPost("streamGenerateContent",ONe(e,r,this.projectId,this.sessionId,u),e.config?.abortSignal),l={},a=Date.now(),p=!0;return async function*(f){let g=0,y=0;for await(let E of d){p&&(l.firstMessageLatency=bse(Date.now()-a),p=!1),l.totalLatency=bse(Date.now()-a);let _=INe(E);if(await RFe(f,E.traceId,_,l,e.config?.abortSignal,f.sessionId),E.consumedCredits)for(let v of E.consumedCredits)v.creditType===MS&&v.creditAmount&&(g+=parseInt(v.creditAmount,10)||0);E.remainingCredits&&(y=E.remainingCredits.reduce((v,b)=>b.creditType===MS&&b.creditAmount?v+(parseInt(b.creditAmount,10)||0):v,0),f.updateCredits(E.remainingCredits)),yield _}g>0&&f.config&&wNe(f.config,new iR(e.model??"unknown",g,y))}(this)}async generateContent(e,r,n){let o=Date.now(),s=await this.requestPost("generateContent",ONe(e,r,this.projectId,this.sessionId,void 0),e.config?.abortSignal,O$n),c=bse(Date.now()-o),u={totalLatency:c,firstMessageLatency:c},d=INe(s);return await RFe(this,s.traceId,d,u,e.config?.abortSignal,this.sessionId),s.remainingCredits&&this.updateCredits(s.remainingCredits),d}updateCredits(e){if(!this.paidTier)return;let r=(this.paidTier.availableCredits??[]).filter(o=>o.creditType!==MS),n=e.filter(o=>o.creditType===MS);this.paidTier.availableCredits=[...r,...n]}async onboardUser(e){return this.requestPost("onboardUser",e)}async getOperation(e){return this.requestGetOperation(e)}async loadCodeAssist(e){try{return await this.requestPost("loadCodeAssist",e)}catch(r){if(R$n(r))return{currentTier:{id:ty.STANDARD}};throw r}}async refreshAvailableCredits(){if(!this.paidTier)return;let e=await this.loadCodeAssist({cloudaicompanionProject:this.projectId,metadata:{ideType:"IDE_UNSPECIFIED",platform:"PLATFORM_UNSPECIFIED",pluginType:"GEMINI",duetProject:this.projectId},mode:"HEALTH_CHECK"});e.paidTier?.availableCredits&&(this.paidTier.availableCredits=e.paidTier.availableCredits)}async fetchAdminControls(e){return this.requestPost("fetchAdminControls",e)}async getCodeAssistGlobalUserSetting(){return this.requestGet("getCodeAssistGlobalUserSetting")}async setCodeAssistGlobalUserSetting(e){return this.requestPost("setCodeAssistGlobalUserSetting",e)}async countTokens(e){let r=await this.requestPost("countTokens",NMt(e));return DMt(r)}async embedContent(e){throw Error()}async listExperiments(e){if(!this.projectId)throw new Error("projectId is not defined for CodeAssistServer.");let r=this.projectId,n={project:r,metadata:{...e,duetProject:r}};return this.requestPost("listExperiments",n)}async retrieveUserQuota(e){return this.requestPost("retrieveUserQuota",e)}async recordConversationOffered(e){this.projectId&&await this.recordCodeAssistMetrics({project:this.projectId,metadata:await JU(),metrics:[{conversationOffered:e,timestamp:new Date().toISOString()}]})}async recordConversationInteraction(e){this.projectId&&await this.recordCodeAssistMetrics({project:this.projectId,metadata:await JU(),metrics:[{conversationInteraction:e,timestamp:new Date().toISOString()}]})}async recordCodeAssistMetrics(e){return this.requestPost("recordCodeAssistMetrics",e)}async requestPost(e,r,n,o=100){return(await this.client.request({url:this.getMethodUrl(e),method:"POST",headers:{"Content-Type":"application/json",...this.httpOptions.headers},responseType:"json",body:JSON.stringify(r),signal:n,retryConfig:{retryDelay:o,retry:3,noResponseRetries:3,statusCodesToRetry:[[429,429],[499,499],[500,599]]}})).data}async makeGetRequest(e,r){return(await this.client.request({url:e,method:"GET",headers:{"Content-Type":"application/json",...this.httpOptions.headers},responseType:"json",signal:r})).data}async requestGet(e,r){return this.makeGetRequest(this.getMethodUrl(e),r)}async requestGetOperation(e,r){return this.makeGetRequest(this.getOperationUrl(e),r)}async requestStreamingPost(e,r,n){let o=await this.client.request({url:this.getMethodUrl(e),method:"POST",params:{alt:"sse"},headers:{"Content-Type":"application/json",...this.httpOptions.headers},responseType:"stream",body:JSON.stringify(r),signal:n,retry:!1});return async function*(s){let c=UWt.createInterface({input:C$n.from(o.data),crlfDelay:1/0}),u=[];for await(let d of c)if(d.startsWith("data: "))u.push(d.slice(6).trim());else if(d===""){if(u.length===0)continue;let l=u.join(`
|
|
1216
1216
|
`);try{yield JSON.parse(l)}catch{s.config&&SMt(s.config,new nV("Malformed JSON chunk"))}u=[]}}(this)}getBaseUrl(){let e=process.env.CODE_ASSIST_ENDPOINT??w$n,r=process.env.CODE_ASSIST_API_VERSION||x$n;return`${e}/${r}`}getMethodUrl(e){return`${this.getBaseUrl()}:${e}`}getOperationUrl(e){return`${this.getBaseUrl()}/${e}`}};function I$n(t){return!!t&&typeof t=="object"&&"response"in t&&!!t.response&&typeof t.response=="object"&&"data"in t.response&&!!t.response.data&&typeof t.response.data=="object"&&"error"in t.response.data&&!!t.response.data.error&&typeof t.response.data.error=="object"&&"details"in t.response.data.error&&Array.isArray(t.response.data.error.details)}function R$n(t){return I$n(t)?t.response.data.error.details.some(e=>e&&typeof e=="object"&&"reason"in e&&e.reason==="SECURITY_POLICY_VIOLATED"):!1}var l9e=class{storage;defaultTtl;deleteOnPromiseFailure;constructor(e={}){this.storage=e.storage==="weakmap"?new WeakMap:new Map,this.defaultTtl=e.defaultTtl,this.deleteOnPromiseFailure=e.deleteOnPromiseFailure??!0}get(e){let r=this.storage.get(e);if(!r)return;let n=r.ttl??this.defaultTtl;if(n!==void 0&&Date.now()-r.timestamp>n){this.delete(e);return}return r.value}set(e,r,n){let o={value:r,timestamp:Date.now(),ttl:n};this.storage.set(e,o),this.deleteOnPromiseFailure&&r instanceof Promise&&r.catch(()=>{this.storage.get(e)===o&&this.delete(e)})}getOrCreate(e,r,n){let o=this.get(e);return o===void 0&&(o=r(),this.set(e,o,n)),o}delete(e){this.storage instanceof Map?this.storage.delete(e):this.storage.delete(e)}clear(){if(this.storage instanceof Map)this.storage.clear();else throw new Error("clear() is not supported on WeakMap storage")}};function ZP(t={}){return new l9e(t)}var c9e=class extends Error{constructor(){super("This account requires setting the GOOGLE_CLOUD_PROJECT or GOOGLE_CLOUD_PROJECT_ID env var. See https://goo.gle/gemini-cli-auth-docs#workspace-gca"),this.name="ProjectIdRequiredError"}},u9e=class extends Error{constructor(){super("User cancelled account validation"),this.name="ValidationCancelledError"}},d9e=class extends Error{ineligibleTiers;constructor(e){let r=e.map(n=>n.reasonMessage).join(", ");super(r),this.name="IneligibleTierError",this.ineligibleTiers=e}},jWt=ZP({storage:"weakmap"});function Luo(){jWt=ZP({storage:"weakmap"})}async function QWt(t,e,r={}){let n=process.env.GOOGLE_CLOUD_PROJECT||process.env.GOOGLE_CLOUD_PROJECT_ID||void 0;return jWt.getOrCreate(t,()=>ZP({storage:"map",defaultTtl:3e4})).getOrCreate(n,()=>P$n(t,n,e,r))}async function P$n(t,e,r,n={}){let o=new y0(t,e,n,"",void 0,void 0),s={ideType:"IDE_UNSPECIFIED",platform:"PLATFORM_UNSPECIFIED",pluginType:"GEMINI"},c=r.getValidationHandler(),u;for(;;){u=await o.loadCodeAssist({cloudaicompanionProject:e,metadata:{...s,duetProject:e}});try{N$n(u);break}catch(f){if(f instanceof Hv&&c){let g=await c(f.validationLink,f.validationDescription);if(g==="verify")continue;throw g==="change_auth"?new LKe:new u9e}throw f}}if(u.currentTier){if(!u.paidTier?.id&&!u.currentTier.id&&U.warn("Warning: Code Assist API did not return a user tier ID. Defaulting to STANDARD tier."),!u.cloudaicompanionProject){if(e)return{projectId:e,userTier:u.paidTier?.id??u.currentTier.id??ty.STANDARD,userTierName:u.paidTier?.name??u.currentTier.name,paidTier:u.paidTier??void 0,hasOnboardedPreviously:u.currentTier.hasOnboardedPreviously??!0};FWt(u)}return{projectId:u.cloudaicompanionProject,userTier:u.paidTier?.id??u.currentTier.id??ty.STANDARD,userTierName:u.paidTier?.name??u.currentTier.name,paidTier:u.paidTier??void 0,hasOnboardedPreviously:u.currentTier.hasOnboardedPreviously??!0}}let d=k$n(u);d.id||U.warn("Warning: Code Assist API did not return an onboarding tier ID. Defaulting to STANDARD tier.");let l;d.id===ty.FREE?l={tierId:d.id,cloudaicompanionProject:void 0,metadata:s}:l={tierId:d.id,cloudaicompanionProject:e,metadata:{...s,duetProject:e}},ANe(r,new QL);let a=Date.now(),p=await o.onboardUser(l);if(!p.done&&p.name){let f=p.name;for(;!p.done;)await new Promise(g=>setTimeout(g,5e3)),p=await o.getOperation(f)}if(ENe(r,new qL(d.name,Date.now()-a)),!p.response?.cloudaicompanionProject?.id){if(e)return{projectId:e,userTier:d.id??ty.STANDARD,userTierName:d.name,hasOnboardedPreviously:d.hasOnboardedPreviously??!1};FWt(u)}return{projectId:p.response.cloudaicompanionProject.id,userTier:d.id??ty.STANDARD,userTierName:d.name,hasOnboardedPreviously:d.hasOnboardedPreviously??!1}}function FWt(t){throw t.ineligibleTiers&&t.ineligibleTiers.length>0?new d9e(t.ineligibleTiers):new c9e}function k$n(t){for(let e of t.allowedTiers||[])if(e.isDefault)return e;return{name:"",description:"",id:ty.LEGACY,userDefinedCloudaicompanionProject:!0}}function N$n(t){if(!t)throw new Error("LoadCodeAssist returned empty response");if(!t.currentTier&&t.ineligibleTiers&&t.ineligibleTiers.length>0){let e=t.ineligibleTiers.find(n=>n.validationUrl&&n.reasonCode==="VALIDATION_REQUIRED"),r=e?.validationUrl;if(e&&r)throw new Hv(`Account validation required: ${e.reasonMessage}`,void 0,r,e.reasonMessage)}}function p9e(t){return typeof t=="object"&&t!==null&&"error"in t&&typeof t.error=="object"&&"message"in t.error}function Use(t){return typeof t=="object"&&t!==null&&"message"in t&&typeof t.message=="string"}var f9e=.25,h9e=1.3,D$n=3e3,L$n=25800,M$n=1e5,B$n=3;function U$n(t){if(t.length>M$n)return t.length/4;let e=0;for(let r=0;r<t.length;r++)t.charCodeAt(r)<=127?e+=f9e:e+=h9e;return e}function F$n(t){let e="inlineData"in t?t.inlineData:void 0,r="fileData"in t?t.fileData:void 0,n=e?.mimeType||r?.mimeType;if(n?.startsWith("image/"))return D$n;if(n?.startsWith("application/pdf"))return L$n}function j$n(t,e){let r=t.functionResponse;if(!r)return 0;let n=(r.name?.length??0)/4,o=r.response;typeof o=="string"?n+=o.length/4:o!=null&&(n+=JSON.stringify(o).length/4);let s=r.parts;return s&&s.length>0&&(n+=$n(s,e+1)),n}function $n(t,e=0){if(e>B$n)return 0;let r=0;for(let n of t)if(typeof n.text=="string")r+=U$n(n.text);else if(n.functionResponse)r+=j$n(n,e);else{let o=F$n(n);o!==void 0?r+=o:r+=JSON.stringify(n).length/4}return Math.floor(r)}async function Fse(t,e,r){let n=Array.isArray(t)?t.map(s=>typeof s=="string"?{text:s}:s):typeof t=="string"?[{text:t}]:[t];if(n.some(s=>"inlineData"in s||"fileData"in s))try{return(await e.countTokens({model:r,contents:[{role:"user",parts:n}]})).totalTokens??0}catch(s){return U.debug("countTokens API failed:",s),$n(n)}return $n(n)}function g9e(t){return Math.floor(JSON.stringify(t).length/4)}function Q$n(t,e){let r=0,n=0,o=0,s=0,c={};if(e?.systemInstruction&&(r+=g9e(e.systemInstruction)),e?.tools)for(let u of e.tools){let d=g9e(u);if(u&&typeof u=="object"&&"functionDeclarations"in u&&u.functionDeclarations){let l=0;for(let a of u.functionDeclarations)a.name&&Gm(a.name)&&(l+=g9e(a));s+=l,n+=d-l}else n+=d}for(let u of t)for(let d of u.parts||[])if(d.functionCall){let l=d.functionCall.name||"unknown",a=$n([d]);Gm(l)?s+=a:c[l]=(c[l]||0)+a}else if(d.functionResponse){let l=d.functionResponse.name||"unknown",a=$n([d]);Gm(l)?s+=a:c[l]=(c[l]||0)+a}else o+=$n([d]);return{system_instructions:r,tool_definitions:n,history:o,tool_calls:c,mcp_servers:s}}var Kv=class{constructor(e,r){this.wrapped=e;this.config=r}getWrapped(){return this.wrapped}get userTier(){return this.wrapped.userTier}get userTierName(){return this.wrapped.userTierName}get paidTier(){return this.wrapped.paidTier}logApiRequest(e,r,n,o,s,c){let u=JSON.stringify(e);hNe(this.config,new PL(r,{prompt_id:n,contents:e,generate_content_config:s,server:c},u,o))}_getEndpointUrl(e,r){if(this.wrapped instanceof y0){let o=new URL(this.wrapped.getMethodUrl(r)),s=o.port?parseInt(o.port,10):o.protocol==="https:"?443:80;return{address:o.hostname,port:s}}if(this.config.getContentGeneratorConfig()?.vertexai){let o=process.env.GOOGLE_CLOUD_LOCATION;return o?{address:`${o}-aiplatform.googleapis.com`,port:443}:{address:"unknown",port:0}}return{address:"generativelanguage.googleapis.com",port:443}}_logApiResponse(e,r,n,o,s,c,u,d,l,a,p){let f=new NL(n,r,{prompt_id:o,contents:e,generate_content_config:a,server:p},{candidates:u,response_id:c},this.config.getContentGeneratorConfig()?.authType,d,l,s);u?.some(y=>y.content?.parts?.some(E=>E.functionCall))||(f.usage.context_breakdown=Q$n(e,a)),yNe(this.config,f)}_fixGaxiosErrorData(e){if(typeof e=="object"&&e!==null&&"response"in e&&typeof e.response=="object"&&e.response!==null&&"data"in e.response){let r=e.response,n=r.data;if(typeof n=="string"&&n.includes(","))try{let o=n.split(",").map(Number);o.every(s=>!isNaN(s))&&(r.data=String.fromCharCode(...o))}catch{}}}_logApiError(e,r,n,o,s,c,u,d){if(Vm(r))return;let l=r instanceof Error?r.message:String(r),a=DKe(r);mNe(this.config,new kL(n,l,e,{prompt_id:o,contents:s,generate_content_config:u,server:d},this.config.getContentGeneratorConfig()?.authType,a,Use(r)?r.status:void 0,c))}async generateContent(e,r,n){return rf({operation:"llm_call",logPrompts:this.config.getTelemetryLogPromptsEnabled(),attributes:{[qG]:e.model,[T0e]:r,[x0e]:Sr(e.config?.systemInstruction??[]),[O0e]:Sr(e.config?.tools??[])}},async({metadata:o})=>{o.input=e.contents;let s=Date.now(),c=wT(e.contents),u=this._getEndpointUrl(e,"generateContent");this.logApiRequest(c,e.model,r,n,e.config,u);try{let d=await this.wrapped.generateContent(e,r,n);o.output=d.candidates?.[0]?.content??null,o.attributes[C0e]=d.usageMetadata?.promptTokenCount??0,o.attributes[w0e]=d.usageMetadata?.candidatesTokenCount??0;let l=Date.now()-s;return this._logApiResponse(c,l,d.modelVersion||e.model,r,n,d.responseId,d.candidates,d.usageMetadata,JSON.stringify({candidates:d.candidates,usageMetadata:d.usageMetadata,responseId:d.responseId,modelVersion:d.modelVersion,promptFeedback:d.promptFeedback}),e.config,u),this.config.refreshUserQuotaIfStale().catch(a=>U.debug("quota refresh failed",a)),d}catch(d){o.error=d;let l=Date.now()-s;throw this._fixGaxiosErrorData(d),this._logApiError(l,d,e.model,r,c,n,e.config,u),d}})}async generateContentStream(e,r,n){return rf({operation:"llm_call",logPrompts:this.config.getTelemetryLogPromptsEnabled(),attributes:{[qG]:e.model,[T0e]:r,[x0e]:Sr(e.config?.systemInstruction??[]),[O0e]:Sr(e.config?.tools??[])}},async({metadata:o})=>{o.input=e.contents;let s=Date.now(),c=this._getEndpointUrl(e,"generateContentStream");/########\d+$/.test(r)&&this.config.setLatestApiRequest(e),this.logApiRequest(wT(e.contents),e.model,r,n,e.config,c);let u;try{u=await this.wrapped.generateContentStream(e,r,n)}catch(d){let l=Date.now()-s;throw this._fixGaxiosErrorData(d),this._logApiError(l,d,e.model,r,wT(e.contents),n,e.config,c),d}return this.loggingStreamWrapper(e,u,s,r,n,o)})}async*loggingStreamWrapper(e,r,n,o,s,c){let u=[],d,l=this._getEndpointUrl(e,"generateContentStream"),a=wT(e.contents);try{for await(let f of r)u.push(f),f.usageMetadata&&(d=f.usageMetadata),yield f;let p=Date.now()-n;this._logApiResponse(a,p,u[0]?.modelVersion||e.model,o,s,u[0]?.responseId,u.flatMap(f=>f.candidates||[]),d,JSON.stringify(u.map(f=>({candidates:f.candidates,usageMetadata:f.usageMetadata,responseId:f.responseId,modelVersion:f.modelVersion,promptFeedback:f.promptFeedback}))),e.config,l),this.config.refreshUserQuotaIfStale().catch(f=>U.debug("quota refresh failed",f)),c.output=u.map(f=>f.candidates?.[0]?.content??null),d&&(c.attributes[C0e]=d.promptTokenCount??0,c.attributes[w0e]=d.candidatesTokenCount??0)}catch(p){c.error=p;let f=Date.now()-n;throw this._logApiError(f,p,u[0]?.modelVersion||e.model,o,a,s,e.config,l),p}}async countTokens(e){return this.wrapped.countTokens(e)}async embedContent(e){return rf({operation:"llm_call",logPrompts:this.config.getTelemetryLogPromptsEnabled(),attributes:{[qG]:e.model}},async({metadata:r})=>{r.input=e.contents;let n=await this.wrapped.embedContent(e);return r.output=n,n})}};async function qWt(t,e,r,n){if(e==="oauth-personal"||e==="compute-default-credentials"){let o=await Mdt(e,r),s=await QWt(o,r,t);return new y0(o,s.projectId,t,n,s.userTier,s.userTierName,s.paidTier,r)}throw new Error(`Unsupported authType: ${e}`)}function mf(t){let e=t.getContentGenerator();if(e instanceof Kv&&(e=e.getWrapped()),e instanceof y0)return e}var q$n="gemini-cli-api-key",MC="default-api-key",jse=new WA(q$n),Qse=ZP({storage:"map",defaultTtl:3e4});function ldo(){Qse.clear()}async function GWt(){return Qse.getOrCreate(MC,async()=>{try{let t=await jse.getCredentials(MC);return t?.token?.accessToken?t.token.accessToken:null}catch(t){return U.error("Failed to load API key from storage:",t),null}})}async function cdo(t){if(Qse.delete(MC),!t||t.trim()===""){try{await jse.deleteCredentials(MC)}catch(r){U.warn("Failed to delete API key from storage:",r)}return}let e={serverName:MC,token:{accessToken:t,tokenType:"ApiKey"},updatedAt:Date.now()};await jse.setCredentials(e)}async function udo(){Qse.delete(MC);try{await jse.deleteCredentials(MC)}catch(t){U.error("Failed to clear API key from storage:",t)}}import{promises as G$n}from"node:fs";var qse=class t{constructor(e){this.responses=e}callCounter=0;userTier;userTierName;paidTier;static async fromFile(e){let n=(await G$n.readFile(e,"utf-8")).split(`
|
|
1217
1217
|
`).filter(o=>o.trim()!=="").map(o=>JSON.parse(o));return new t(n)}getNextResponse(e,r){let n=this.responses[this.callCounter++];if(!n)throw new Error(`No more mock responses for ${e}, got request:
|
|
1218
1218
|
`+Sr(r));if(n.method!==e)throw new Error(`Unexpected response type, next response was for ${n.method} but expected ${e}`);return n.response}async generateContent(e,r,n){return Object.setPrototypeOf(this.getNextResponse("generateContent",e),LD.prototype)}async generateContentStream(e,r,n){let o=this.getNextResponse("generateContentStream",e);async function*s(){for(let c of o)yield Object.setPrototypeOf(c,LD.prototype)}return s()}async countTokens(e){return this.getNextResponse("countTokens",e)}async embedContent(e){return Object.setPrototypeOf(this.getNextResponse("embedContent",e),$Je.prototype)}};function VWt(t){let e={};if(!t)return e;for(let r of t.split(/,(?=\s*[^,:]+:)/)){let n=r.trim();if(!n)continue;let o=n.indexOf(":");if(o===-1)continue;let s=n.slice(0,o).trim(),c=n.slice(o+1).trim();s&&(e[s]=c)}return e}var V$n="terminal";function HWt(){let t=process.env.GEMINI_CLI_SURFACE||process.env.SURFACE;if(t)return t;let e=sI();return e.name!=="vscode"||process.env.TERM_PROGRAM==="vscode"||process.env.VSCODE_PID?e.name:process.env.GITHUB_SHA?"GitHub":V$n}import{appendFileSync as Gse}from"node:fs";var Vse=class{constructor(e,r){this.realGenerator=e;this.filePath=r}get userTier(){return this.realGenerator.userTier}get userTierName(){return this.realGenerator.userTierName}async generateContent(e,r,n){let o=await this.realGenerator.generateContent(e,r,n),s={method:"generateContent",response:{candidates:o.candidates,usageMetadata:o.usageMetadata}};return Gse(this.filePath,`${Sr(s)}
|
|
@@ -2895,7 +2895,7 @@ When adding a memory, route it to the right store:
|
|
|
2895
2895
|
# Insufficient context
|
|
2896
2896
|
If you find that you have insufficient context to read or modify the memories as described,
|
|
2897
2897
|
reply with what you need, and exit. Do not search the codebase for the missing context.
|
|
2898
|
-
`.trim();return{kind:"local",name:"save_memory",displayName:"Memory Manager",description:"Writes and reads memory, preferences or facts across ALL future sessions. Use this for recurring instructions like coding styles or tool aliases.",inputConfig:{inputSchema:{type:"object",properties:{request:{type:"string",description:'The memory operation to perform. Examples: "Remember that I prefer tabs over spaces", "Clean up stale memories", "De-duplicate my memories", "Organize my memories".'}},required:["request"]}},outputConfig:{outputName:"result",description:"A summary of the memory operations performed.",schema:E_i},modelConfig:{model:Vw},toolConfig:{tools:[ci,Pl,Rl,Hw,Il,bi,xo]},get promptConfig(){return{systemPrompt:n(),query:`${r()}\${request}`}},runConfig:{maxTimeMinutes:5,maxTurns:10}}};var Lf=class t{static MAX_AUTH_RETRIES=2;authRetryCount=0;async shouldRetryWithHeaders(e,r){if(r.status===401||r.status===403)return this.authRetryCount>=t.MAX_AUTH_RETRIES?void 0:(this.authRetryCount++,this.headers());this.authRetryCount=0}async initialize(){}};var Kpr=6e4;async function Ib(t){if(t.startsWith("$$")||t.startsWith("!!"))return t.slice(1);if(t.startsWith("$")){let e=t.slice(1),r=process.env[e];if(r===void 0||r==="")throw new Error(`Environment variable '${e}' is not set or is empty. Please set it before using this agent.`);return U.debug(`[AuthValueResolver] Resolved env var: ${e}`),r}if(t.startsWith("!")){let e=t.slice(1).trim();if(!e)throw new Error("Empty command in auth value. Expected format: !command");U.debug("[AuthValueResolver] Executing command for auth value");let r=EA();try{let{stdout:n}=await Dl(r.executable,[...r.argsPrefix,e],{signal:AbortSignal.timeout(Kpr),windowsHide:!0}),o=n.trim();if(!o)throw new Error(`Command '${e}' returned empty output`);return o}catch(n){throw n instanceof Error&&n.name==="AbortError"?new Error(`Command '${e}' timed out after ${Kpr/1e3} seconds`):n}}return t}function Xpr(t){return t.startsWith("$")||t.startsWith("!")}var __i="X-API-Key",Mde=class extends Lf{constructor(r){super();this.config=r;this.headerName=r.name??__i}type="apiKey";resolvedKey;headerName;async initialize(){Xpr(this.config.key)?(this.resolvedKey=await Ib(this.config.key),U.debug(`[ApiKeyAuthProvider] Resolved API key from: ${this.config.key.startsWith("$")?"env var":"command"}`)):this.resolvedKey=this.config.key}async headers(){if(!this.resolvedKey)throw new Error("ApiKeyAuthProvider not initialized. Call initialize() first.");return{[this.headerName]:this.resolvedKey}}async shouldRetryWithHeaders(r,n){if(n.status!==401&&n.status!==403){this.authRetryCount=0;return}if(!(!this.config.key.startsWith("!")||this.config.key.startsWith("!!"))&&!(this.authRetryCount>=Lf.MAX_AUTH_RETRIES))return this.authRetryCount++,U.debug("[ApiKeyAuthProvider] Re-resolving API key after auth failure"),this.resolvedKey=await Ib(this.config.key),this.headers()}};var Bde=class extends Lf{constructor(r){super();this.config=r}type="http";resolvedToken;resolvedUsername;resolvedPassword;resolvedValue;async initialize(){let r=this.config;"token"in r?this.resolvedToken=await Ib(r.token):"username"in r?(this.resolvedUsername=await Ib(r.username),this.resolvedPassword=await Ib(r.password)):this.resolvedValue=await Ib(r.value),U.debug(`[HttpAuthProvider] Initialized with scheme: ${this.config.scheme}`)}async headers(){let r=this.config;if("token"in r){if(!this.resolvedToken)throw new Error("HttpAuthProvider not initialized");return{Authorization:`Bearer ${this.resolvedToken}`}}if("username"in r){if(!this.resolvedUsername||!this.resolvedPassword)throw new Error("HttpAuthProvider not initialized");return{Authorization:`Basic ${Buffer.from(`${this.resolvedUsername}:${this.resolvedPassword}`).toString("base64")}`}}if(!this.resolvedValue)throw new Error("HttpAuthProvider not initialized");return{Authorization:`${r.scheme} ${this.resolvedValue}`}}async shouldRetryWithHeaders(r,n){if(n.status===401||n.status===403){if(this.authRetryCount>=Lf.MAX_AUTH_RETRIES)return;U.debug("[HttpAuthProvider] Re-resolving values after auth failure"),await this.initialize()}return super.shouldRetryWithHeaders(r,n)}};var Zpr=Me(Jo(),1);var Aw=class extends Error{constructor(e){super(e),this.name="ResourceMismatchError"}},MN=5*60*1e3,_s=class{static buildWellKnownUrls(e,r=!1){let n=new URL(e),o=`${n.protocol}//${n.host}`,s=r?"":n.pathname.replace(/\/$/,"");return{protectedResource:new URL(`/.well-known/oauth-protected-resource${s}`,o).toString(),authorizationServer:new URL(`/.well-known/oauth-authorization-server${s}`,o).toString()}}static async fetchProtectedResourceMetadata(e){try{let r=await fetch(e);return r.ok?await r.json():null}catch(r){return U.debug(`Failed to fetch protected resource metadata from ${e}: ${be(r)}`),null}}static async fetchAuthorizationServerMetadata(e){try{let r=await fetch(e);return r.ok?await r.json():null}catch(r){return U.debug(`Failed to fetch authorization server metadata from ${e}: ${be(r)}`),null}}static metadataToOAuthConfig(e){return{authorizationUrl:e.authorization_endpoint,issuer:e.issuer,tokenUrl:e.token_endpoint,scopes:e.scopes_supported||[],registrationUrl:e.registration_endpoint}}static async discoverAuthorizationServerMetadata(e){let r=new URL(e),n=`${r.protocol}//${r.host}`,o=[];r.pathname!=="/"&&(o.push(new URL(`/.well-known/oauth-authorization-server${r.pathname}`,n).toString()),o.push(new URL(`/.well-known/openid-configuration${r.pathname}`,n).toString()),o.push(new URL(`${r.pathname}/.well-known/openid-configuration`,n).toString())),o.push(new URL("/.well-known/oauth-authorization-server",n).toString()),o.push(new URL("/.well-known/openid-configuration",n).toString());for(let s of o){let c=await this.fetchAuthorizationServerMetadata(s);if(c)return c}return U.debug(`Metadata discovery failed for authorization server ${e}`),null}static async discoverOAuthConfig(e){try{let r=this.buildWellKnownUrls(e),n=await this.fetchProtectedResourceMetadata(r.protectedResource);if(!n){let s=new URL(e);if(s.pathname&&s.pathname!=="/"){let c=this.buildWellKnownUrls(e,!0);n=await this.fetchProtectedResourceMetadata(c.protectedResource)}}if(n){let s=this.buildResourceParameter(e);if(!this.isEquivalentResourceIdentifier(n.resource,s))throw new Aw(`Protected resource ${n.resource} does not match expected ${s}`)}if(n?.authorization_servers?.length){let s=n.authorization_servers[0],c=await this.discoverAuthorizationServerMetadata(s);if(c){let u=this.metadataToOAuthConfig(c);return c.registration_endpoint&&U.log("Dynamic client registration is supported at:",c.registration_endpoint),u}}U.debug(`Trying OAuth discovery fallback at ${e}`);let o=await this.discoverAuthorizationServerMetadata(e);if(o){let s=this.metadataToOAuthConfig(o);return o.registration_endpoint&&U.log("Dynamic client registration is supported at:",o.registration_endpoint),s}return null}catch(r){if(r instanceof Aw)throw r;return U.debug(`Failed to discover OAuth configuration: ${be(r)}`),null}}static parseWWWAuthenticateHeader(e){let r=e.match(/resource_metadata="([^"]+)"/);return r?r[1]:null}static async discoverOAuthFromWWWAuthenticate(e,r){let n=this.parseWWWAuthenticateHeader(e);if(!n)return null;let o=await this.fetchProtectedResourceMetadata(n);if(o&&r){let u=this.buildResourceParameter(r);if(!this.isEquivalentResourceIdentifier(o.resource,u))throw new Aw(`Protected resource ${o.resource} does not match expected ${u}`)}if(!o?.authorization_servers?.length)return null;let s=o.authorization_servers[0],c=await this.discoverAuthorizationServerMetadata(s);return c?this.metadataToOAuthConfig(c):null}static extractBaseUrl(e){let r=new URL(e);return`${r.protocol}//${r.host}`}static isSSEEndpoint(e){return e.includes("/sse")||!e.includes("/mcp")}static buildResourceParameter(e){let r=new URL(e);return`${r.protocol}//${r.host}${r.pathname}`}static isEquivalentResourceIdentifier(e,r){let n=o=>{try{return this.buildResourceParameter(o)}catch{return o}};return n(e)===n(r)}static parseTokenExpiry(e){try{let r=JSON.parse(Buffer.from(e.split(".")[1],"base64").toString());if(r&&typeof r.exp=="number")return r.exp*1e3}catch(r){U.error("Failed to parse ID token for expiry time with error:",r)}}};var efr=/^(.*\.)?run\.app$/,v_i=[/^.+\.googleapis\.com$/,efr],Ude=class extends Lf{constructor(r,n){super();this.config=r;if(!n)throw new Error("targetUrl must be provided to GoogleCredentialsAuthProvider to determine token audience.");let o=new URL(n).hostname;if(efr.test(o)&&(this.useIdToken=!0),this.audience=o,!this.useIdToken&&!v_i.some(u=>u.test(o)))throw new Error(`Host "${o}" is not an allowed host for Google Credential provider.`);let c=this.config.scopes&&this.config.scopes.length>0?this.config.scopes:["https://www.googleapis.com/auth/cloud-platform"];this.auth=new Zpr.GoogleAuth({scopes:c})}type="google-credentials";auth;useIdToken=!1;audience;cachedToken;tokenExpiryTime;async initialize(){}async headers(){if(this.cachedToken&&this.tokenExpiryTime&&Date.now()<this.tokenExpiryTime-MN)return{Authorization:`Bearer ${this.cachedToken}`};if(this.cachedToken=void 0,this.tokenExpiryTime=void 0,this.useIdToken)try{let n=await(await this.auth.getIdTokenClient(this.audience)).idTokenProvider.fetchIdToken(this.audience),o=_s.parseTokenExpiry(n);return o&&(this.tokenExpiryTime=o,this.cachedToken=n),{Authorization:`Bearer ${n}`}}catch(r){let n=`Failed to get ADC ID token: ${r instanceof Error?r.message:String(r)}`;throw U.error(n,r),new Error(n)}try{let r=await this.auth.getClient(),n=await r.getAccessToken();if(n.token){this.cachedToken=n.token;let o=r.credentials;return o.expiry_date&&(this.tokenExpiryTime=o.expiry_date),{Authorization:`Bearer ${n.token}`}}throw new Error("Failed to retrieve ADC access token.")}catch(r){let n=`Failed to get ADC access token: ${r instanceof Error?r.message:String(r)}`;throw U.error(n,r),new Error(n)}}async shouldRetryWithHeaders(r,n){if(n.status!==401&&n.status!==403){this.authRetryCount=0;return}if(!(this.authRetryCount>=Lf.MAX_AUTH_RETRIES))return this.authRetryCount++,U.debug("[GoogleCredentialsAuthProvider] Re-fetching token after auth failure"),this.cachedToken=void 0,this.tokenExpiryTime=void 0,this.headers()}};var Rb=class t{static async create(e){let{agentName:r,authConfig:n,agentCard:o}=e;if(!n)return o?.securitySchemes&&Object.keys(o.securitySchemes).length>0,void 0;switch(n.type){case"google-credentials":{let s=new Ude(n,e.targetUrl);return await s.initialize(),s}case"apiKey":{let s=new Mde(n);return await s.initialize(),s}case"http":{let s=new Bde(n);return await s.initialize(),s}case"oauth2":{let{OAuth2AuthProvider:s}=await import("./oauth2-provider-DLXP22T7.js"),c=new s(n,e.agentName??"unknown",o,e.agentCardUrl);return await c.initialize(),c}case"openIdConnect":throw new Error("openIdConnect auth provider not yet implemented");default:{let s=n;throw new Error(`Unknown auth type: ${s.type}`)}}}static async createFromConfig(e,r){return await t.create({authConfig:e,agentName:r})}static validateAuthConfig(e,r){if(!r||Object.keys(r).length===0)return{valid:!0};let n=Object.keys(r);if(!e)return{valid:!1,diff:{requiredSchemes:n,configuredType:void 0,missingConfig:["Authentication is required but not configured"]}};let o=t.findMatchingScheme(e,r);return o.matched?{valid:!0}:{valid:!1,diff:{requiredSchemes:n,configuredType:e.type,missingConfig:o.missingConfig}}}static findMatchingScheme(e,r){let n=[];for(let[o,s]of Object.entries(r))switch(s.type){case"apiKey":if(e.type==="apiKey")return{matched:!0,missingConfig:[]};n.push(`Scheme '${o}' requires apiKey authentication`);break;case"http":if(e.type==="http"){if(e.scheme.toLowerCase()===s.scheme.toLowerCase())return{matched:!0,missingConfig:[]};n.push(`Scheme '${o}' requires HTTP ${s.scheme} authentication, but ${e.scheme} was configured`)}else{if(e.type==="google-credentials"&&s.scheme.toLowerCase()==="bearer")return{matched:!0,missingConfig:[]};n.push(`Scheme '${o}' requires HTTP ${s.scheme} authentication`)}break;case"oauth2":if(e.type==="oauth2")return{matched:!0,missingConfig:[]};n.push(`Scheme '${o}' requires OAuth 2.0 authentication`);break;case"openIdConnect":if(e.type==="openIdConnect")return{matched:!0,missingConfig:[]};n.push(`Scheme '${o}' requires OpenID Connect authentication`);break;case"mutualTLS":n.push(`Scheme '${o}' requires mTLS authentication (not yet supported)`);break;default:{let c=s;n.push(`Unknown security scheme type: ${c.type}`)}}return{matched:!1,missingConfig:n}}static describeRequiredAuth(e){let r=[];for(let[n,o]of Object.entries(e))switch(o.type){case"apiKey":r.push(`API Key (${n}): Send ${o.name} in ${o.in}`);break;case"http":r.push(`HTTP ${o.scheme} (${n})`);break;case"oauth2":r.push(`OAuth 2.0 (${n})`);break;case"openIdConnect":r.push(`OpenID Connect (${n})`);break;case"mutualTLS":r.push(`Mutual TLS (${n})`);break;default:{let s=o;r.push(`Unknown (${n}): ${s.type}`)}}return r.join(" OR ")}};var _m=class extends Error{userMessage;agentName;constructor(e,r,n,o){super(r,o),this.name="A2AAgentError",this.agentName=e,this.userMessage=n}},pHe=class extends _m{constructor(e,r){let n=`Agent card not found at ${r} (HTTP 404)`,o=`Agent card not found (404) at ${r}. Verify the agent_card_url in your agent definition.`;super(e,n,o),this.name="AgentCardNotFoundError"}},Fde=class extends _m{statusCode;constructor(e,r,n){let o=n===401?"Unauthorized":"Forbidden",s=`Agent card request returned ${n} ${o} for ${r}`,c=`Authentication failed (${n} ${o}) at ${r}. Check the "auth" configuration in your agent definition.`;super(e,s,c),this.name="AgentCardAuthError",this.statusCode=n}},jde=class extends _m{requiredAuth;missingFields;constructor(e,r,n){let o=`Agent "${e}" requires authentication but none is configured`,s=`Agent requires ${r} but no auth is configured. Missing: ${n.join(", ")}`;super(e,o,s),this.name="AgentAuthConfigMissingError",this.requiredAuth=r,this.missingFields=n}},Qde=class extends _m{constructor(e,r,n){let o=n instanceof Error?n.message:String(n),s=`Failed to connect to agent "${e}" at ${r}: ${o}`,c=`Connection failed for ${r}: ${o}`;super(e,s,c,{cause:n}),this.name="AgentConnectionError"}};function b_i(t){return typeof t=="object"&&t!==null}function S_i(t){let e=[],r=t,n=0,o=10;for(;r&&n<o;){if(b_i(r)){let s=r;r instanceof Error?e.push(r.message):typeof s.message=="string"&&e.push(s.message),typeof s.code=="string"&&e.push(s.code),typeof s.status=="number"?e.push(String(s.status)):typeof s.statusCode=="number"&&e.push(String(s.statusCode)),r=s.cause}else if(typeof r=="string"){e.push(r);break}else{e.push(String(r));break}n++}return e.join(" ")}function tfr(t,e,r){let n=S_i(r);return/\b(ECONNREFUSED|ENOTFOUND|EHOSTUNREACH|ETIMEDOUT)\b/i.test(n)?new Qde(t,e,r):/\b404\b|\bnot[\s_-]?found\b/i.test(n)?new pHe(t,e):/\b401\b|unauthorized/i.test(n)?new Fde(t,e,401):/\b403\b|forbidden/i.test(n)?new Fde(t,e,403):new Qde(t,e,r)}function fHe(t){return`${t.name}-config`}var qde=class{constructor(e){this.config=e}agents=new Map;allDefinitions=new Map;builtInAgents=new Set;async initialize(){Ee.on("model-changed",this.onModelChanged),await this.loadAgents()}isBuiltIn(e){return this.builtInAgents.has(e)}onModelChanged=()=>{this.refreshAgents("local").catch(e=>{U.error("[AgentRegistry] Failed to refresh agents on model change:",e)})};async reload(){this.config.getA2AClientManager()?.clearCache(),await this.config.reloadAgents(),this.agents.clear(),this.allDefinitions.clear(),await this.loadAgents(),Ee.emitAgentsRefreshed()}async acknowledgeAgent(e){let r=this.config.getAcknowledgedAgentsService(),n=this.config.getProjectRoot();e.metadata?.hash&&(await r.acknowledge(n,e.name,e.metadata.hash),await this.registerAgent(e),Ee.emitAgentsRefreshed())}dispose(){Ee.off("model-changed",this.onModelChanged)}async loadAgents(){if(this.agents.clear(),this.allDefinitions.clear(),this.loadBuiltInAgents(),!this.config.isAgentsEnabled())return;let e=er.getUserAgentsDir(),r=await lHe(e);for(let s of r.errors)U.warn(`[AgentRegistry] Error loading user agent: ${s.message}`),Ee.emitFeedback("error",`Agent loading error: ${s.message}`);await Promise.allSettled(r.agents.map(async s=>{try{await this.registerAgent(s)}catch(c){U.warn(`[AgentRegistry] Error registering user agent "${s.name}":`,c),Ee.emitFeedback("error",`Error registering user agent "${s.name}": ${c instanceof Error?c.message:String(c)}`)}}));let n=this.config.getFolderTrust(),o=this.config.isTrustedFolder();if(!n||o){let s=this.config.storage.getProjectAgentsDir(),c=await lHe(s);for(let p of c.errors)Ee.emitFeedback("error",`Agent loading error: ${p.message}`);let u=this.config.getAcknowledgedAgentsService(),d=this.config.getProjectRoot(),l=[],a=[];for(let p of c.agents){if(p.kind==="remote"&&(p.metadata||(p.metadata={}),p.metadata.hash=p.agentCardUrl??(p.agentCardJson?rfr.createHash("sha256").update(p.agentCardJson).digest("hex"):void 0)),!p.metadata?.hash){a.push(p);continue}await u.isAcknowledged(d,p.name,p.metadata.hash)?a.push(p):l.push(p)}l.length>0&&Ee.emitAgentsDiscovered(l),await Promise.allSettled(a.map(async p=>{try{await this.registerAgent(p)}catch(f){U.warn(`[AgentRegistry] Error registering project agent "${p.name}":`,f),Ee.emitFeedback("error",`Error registering project agent "${p.name}": ${f instanceof Error?f.message:String(f)}`)}}))}else Ee.emitFeedback("info","Skipping project agents due to untrusted folder. To enable, ensure that the project root is trusted.");for(let s of this.config.getExtensions())s.isActive&&s.agents&&await Promise.allSettled(s.agents.map(async c=>{try{await this.registerAgent(c)}catch(u){U.warn(`[AgentRegistry] Error registering extension agent "${c.name}":`,u),Ee.emitFeedback("error",`Error registering extension agent "${c.name}": ${u instanceof Error?u.message:String(u)}`)}}));this.config.getDebugMode()&&U.log(`[AgentRegistry] Loaded with ${this.agents.size} agents.`)}loadBuiltInAgents(){let e=oue(this.config);this.builtInAgents.add(e.name),this.registerLocalAgent(e);let r=$pr(this.config);this.builtInAgents.add(r.name),this.registerLocalAgent(r);let n=zpr(this.config);this.builtInAgents.add(n.name),this.registerLocalAgent(n);let o=this.config.getBrowserAgentConfig();if(o.enabled){let s=process.env.SANDBOX,c=!!s&&s!=="sandbox-exec"&&s!=="sandbox:none",u=o.customConfig.sessionMode??"persistent";if(c&&u!=="existing")Ee.emitFeedback("info",'Browser agent disabled in container sandbox. To use it, set sessionMode to "existing" in settings and start Chrome with --remote-debugging-port=9222 on the host.');else{let d=Lde(this.config);this.builtInAgents.add(d.name),this.registerLocalAgent(d)}}if(this.config.isMemoryManagerEnabled()){this.registerLocalAgent(Jpr(this.config));try{let s=er.getGlobalGeminiDir();this.config.getWorkspaceContext().addDirectory(s)}catch(s){U.warn("[AgentRegistry] Could not add global .gemini directory to workspace:",s)}}}async refreshAgents(e="all"){this.loadBuiltInAgents(),await Promise.allSettled(Array.from(this.agents.values()).map(async r=>{(e==="all"||r.kind===e)&&await this.registerAgent(r)}))}async registerAgent(e){e.kind==="local"?this.registerLocalAgent(e):e.kind==="remote"&&await this.registerRemoteAgent(e)}registerLocalAgent(e){if(e.kind!=="local")return;if(!e.name||!e.description){U.warn("[AgentRegistry] Skipping invalid agent definition. Missing name or description.");return}this.allDefinitions.set(e.name,e);let r=this.config.getAgentsSettings().overrides?.[e.name];if(!this.isAgentEnabled(e,r)){this.config.getDebugMode()&&U.log(`[AgentRegistry] Skipping disabled agent '${e.name}'`);return}this.agents.has(e.name)&&this.config.getDebugMode()&&U.log(`[AgentRegistry] Overriding agent '${e.name}'`);let n=this.applyOverrides(e,r);this.agents.set(n.name,n),this.registerModelConfigs(n),this.addAgentPolicy(n)}addAgentPolicy(e){let r=this.config.getPolicyEngine();if(r){if(r.hasRuleForTool(e.name,!0)){this.config.getDebugMode()&&U.log(`[AgentRegistry] User policy exists for '${e.name}', skipping dynamic registration.`);return}r.removeRulesForTool(e.name,"AgentRegistry (Dynamic)"),r.addRule({toolName:e.name,decision:e.kind==="local"?"allow":"ask_user",priority:CQ,source:"AgentRegistry (Dynamic)"})}}isAgentEnabled(e,r){let o=!(e.experimental===!0);return r&&r.enabled!==void 0&&(o=r.enabled),o}async registerRemoteAgent(e){if(e.kind!=="remote")return;if(!e.name){U.warn("[AgentRegistry] Skipping invalid agent definition. Missing name.");return}this.allDefinitions.set(e.name,e);let r=this.config.getAgentsSettings().overrides?.[e.name];if(!this.isAgentEnabled(e,r)){this.config.getDebugMode()&&U.log(`[AgentRegistry] Skipping disabled remote agent '${e.name}'`);return}this.agents.has(e.name)&&this.config.getDebugMode()&&U.log(`[AgentRegistry] Overriding agent '${e.name}'`);let n=e;n.originalDescription===void 0&&(n.originalDescription=n.description);try{let o=this.config.getA2AClientManager();if(!o){U.warn(`[AgentRegistry] Skipping remote agent '${e.name}': A2AClientManager is not available.`);return}let s=Cde(n),c;if(e.auth){let p=await Rb.create({authConfig:e.auth,agentName:e.name,targetUrl:s,agentCardUrl:n.agentCardUrl});if(!p)throw new Error(`Failed to create auth provider for agent '${e.name}'`);c=p}let u=await o.loadAgent(n.name,Tde(n),c);if(u.securitySchemes){let p=Rb.validateAuthConfig(e.auth,u.securitySchemes);if(!p.valid&&p.diff){let f=Rb.describeRequiredAuth(u.securitySchemes),g=new jde(e.name,f,p.diff.missingConfig);Ee.emitFeedback("warning",`[${e.name}] Agent requires authentication: ${f}`),U.warn(`[AgentRegistry] ${g.message}`)}}let d=n.originalDescription,l=u.description,a=[];if(d?.trim()&&a.push(`User Description: ${d.trim()}`),l?.trim()&&a.push(`Agent Description: ${l.trim()}`),u.skills&&u.skills.length>0){let p=u.skills.map(f=>`${f.name}: ${f.description||"No description provided"}`).join(`
|
|
2898
|
+
`.trim();return{kind:"local",name:"save_memory",displayName:"Memory Manager",description:"Writes and reads memory, preferences or facts across ALL future sessions. Use this for recurring instructions like coding styles or tool aliases.",inputConfig:{inputSchema:{type:"object",properties:{request:{type:"string",description:'The memory operation to perform. Examples: "Remember that I prefer tabs over spaces", "Clean up stale memories", "De-duplicate my memories", "Organize my memories".'}},required:["request"]}},outputConfig:{outputName:"result",description:"A summary of the memory operations performed.",schema:E_i},modelConfig:{model:Vw},toolConfig:{tools:[ci,Pl,Rl,Hw,Il,bi,xo]},get promptConfig(){return{systemPrompt:n(),query:`${r()}\${request}`}},runConfig:{maxTimeMinutes:5,maxTurns:10}}};var Lf=class t{static MAX_AUTH_RETRIES=2;authRetryCount=0;async shouldRetryWithHeaders(e,r){if(r.status===401||r.status===403)return this.authRetryCount>=t.MAX_AUTH_RETRIES?void 0:(this.authRetryCount++,this.headers());this.authRetryCount=0}async initialize(){}};var Kpr=6e4;async function Ib(t){if(t.startsWith("$$")||t.startsWith("!!"))return t.slice(1);if(t.startsWith("$")){let e=t.slice(1),r=process.env[e];if(r===void 0||r==="")throw new Error(`Environment variable '${e}' is not set or is empty. Please set it before using this agent.`);return U.debug(`[AuthValueResolver] Resolved env var: ${e}`),r}if(t.startsWith("!")){let e=t.slice(1).trim();if(!e)throw new Error("Empty command in auth value. Expected format: !command");U.debug("[AuthValueResolver] Executing command for auth value");let r=EA();try{let{stdout:n}=await Dl(r.executable,[...r.argsPrefix,e],{signal:AbortSignal.timeout(Kpr),windowsHide:!0}),o=n.trim();if(!o)throw new Error(`Command '${e}' returned empty output`);return o}catch(n){throw n instanceof Error&&n.name==="AbortError"?new Error(`Command '${e}' timed out after ${Kpr/1e3} seconds`):n}}return t}function Xpr(t){return t.startsWith("$")||t.startsWith("!")}var __i="X-API-Key",Mde=class extends Lf{constructor(r){super();this.config=r;this.headerName=r.name??__i}type="apiKey";resolvedKey;headerName;async initialize(){Xpr(this.config.key)?(this.resolvedKey=await Ib(this.config.key),U.debug(`[ApiKeyAuthProvider] Resolved API key from: ${this.config.key.startsWith("$")?"env var":"command"}`)):this.resolvedKey=this.config.key}async headers(){if(!this.resolvedKey)throw new Error("ApiKeyAuthProvider not initialized. Call initialize() first.");return{[this.headerName]:this.resolvedKey}}async shouldRetryWithHeaders(r,n){if(n.status!==401&&n.status!==403){this.authRetryCount=0;return}if(!(!this.config.key.startsWith("!")||this.config.key.startsWith("!!"))&&!(this.authRetryCount>=Lf.MAX_AUTH_RETRIES))return this.authRetryCount++,U.debug("[ApiKeyAuthProvider] Re-resolving API key after auth failure"),this.resolvedKey=await Ib(this.config.key),this.headers()}};var Bde=class extends Lf{constructor(r){super();this.config=r}type="http";resolvedToken;resolvedUsername;resolvedPassword;resolvedValue;async initialize(){let r=this.config;"token"in r?this.resolvedToken=await Ib(r.token):"username"in r?(this.resolvedUsername=await Ib(r.username),this.resolvedPassword=await Ib(r.password)):this.resolvedValue=await Ib(r.value),U.debug(`[HttpAuthProvider] Initialized with scheme: ${this.config.scheme}`)}async headers(){let r=this.config;if("token"in r){if(!this.resolvedToken)throw new Error("HttpAuthProvider not initialized");return{Authorization:`Bearer ${this.resolvedToken}`}}if("username"in r){if(!this.resolvedUsername||!this.resolvedPassword)throw new Error("HttpAuthProvider not initialized");return{Authorization:`Basic ${Buffer.from(`${this.resolvedUsername}:${this.resolvedPassword}`).toString("base64")}`}}if(!this.resolvedValue)throw new Error("HttpAuthProvider not initialized");return{Authorization:`${r.scheme} ${this.resolvedValue}`}}async shouldRetryWithHeaders(r,n){if(n.status===401||n.status===403){if(this.authRetryCount>=Lf.MAX_AUTH_RETRIES)return;U.debug("[HttpAuthProvider] Re-resolving values after auth failure"),await this.initialize()}return super.shouldRetryWithHeaders(r,n)}};var Zpr=Me(Jo(),1);var Aw=class extends Error{constructor(e){super(e),this.name="ResourceMismatchError"}},MN=5*60*1e3,_s=class{static buildWellKnownUrls(e,r=!1){let n=new URL(e),o=`${n.protocol}//${n.host}`,s=r?"":n.pathname.replace(/\/$/,"");return{protectedResource:new URL(`/.well-known/oauth-protected-resource${s}`,o).toString(),authorizationServer:new URL(`/.well-known/oauth-authorization-server${s}`,o).toString()}}static async fetchProtectedResourceMetadata(e){try{let r=await fetch(e);return r.ok?await r.json():null}catch(r){return U.debug(`Failed to fetch protected resource metadata from ${e}: ${be(r)}`),null}}static async fetchAuthorizationServerMetadata(e){try{let r=await fetch(e);return r.ok?await r.json():null}catch(r){return U.debug(`Failed to fetch authorization server metadata from ${e}: ${be(r)}`),null}}static metadataToOAuthConfig(e){return{authorizationUrl:e.authorization_endpoint,issuer:e.issuer,tokenUrl:e.token_endpoint,scopes:e.scopes_supported||[],registrationUrl:e.registration_endpoint}}static async discoverAuthorizationServerMetadata(e){let r=new URL(e),n=`${r.protocol}//${r.host}`,o=[];r.pathname!=="/"&&(o.push(new URL(`/.well-known/oauth-authorization-server${r.pathname}`,n).toString()),o.push(new URL(`/.well-known/openid-configuration${r.pathname}`,n).toString()),o.push(new URL(`${r.pathname}/.well-known/openid-configuration`,n).toString())),o.push(new URL("/.well-known/oauth-authorization-server",n).toString()),o.push(new URL("/.well-known/openid-configuration",n).toString());for(let s of o){let c=await this.fetchAuthorizationServerMetadata(s);if(c)return c}return U.debug(`Metadata discovery failed for authorization server ${e}`),null}static async discoverOAuthConfig(e){try{let r=this.buildWellKnownUrls(e),n=await this.fetchProtectedResourceMetadata(r.protectedResource);if(!n){let s=new URL(e);if(s.pathname&&s.pathname!=="/"){let c=this.buildWellKnownUrls(e,!0);n=await this.fetchProtectedResourceMetadata(c.protectedResource)}}if(n){let s=this.buildResourceParameter(e);if(!this.isEquivalentResourceIdentifier(n.resource,s))throw new Aw(`Protected resource ${n.resource} does not match expected ${s}`)}if(n?.authorization_servers?.length){let s=n.authorization_servers[0],c=await this.discoverAuthorizationServerMetadata(s);if(c){let u=this.metadataToOAuthConfig(c);return c.registration_endpoint&&U.log("Dynamic client registration is supported at:",c.registration_endpoint),u}}U.debug(`Trying OAuth discovery fallback at ${e}`);let o=await this.discoverAuthorizationServerMetadata(e);if(o){let s=this.metadataToOAuthConfig(o);return o.registration_endpoint&&U.log("Dynamic client registration is supported at:",o.registration_endpoint),s}return null}catch(r){if(r instanceof Aw)throw r;return U.debug(`Failed to discover OAuth configuration: ${be(r)}`),null}}static parseWWWAuthenticateHeader(e){let r=e.match(/resource_metadata="([^"]+)"/);return r?r[1]:null}static async discoverOAuthFromWWWAuthenticate(e,r){let n=this.parseWWWAuthenticateHeader(e);if(!n)return null;let o=await this.fetchProtectedResourceMetadata(n);if(o&&r){let u=this.buildResourceParameter(r);if(!this.isEquivalentResourceIdentifier(o.resource,u))throw new Aw(`Protected resource ${o.resource} does not match expected ${u}`)}if(!o?.authorization_servers?.length)return null;let s=o.authorization_servers[0],c=await this.discoverAuthorizationServerMetadata(s);return c?this.metadataToOAuthConfig(c):null}static extractBaseUrl(e){let r=new URL(e);return`${r.protocol}//${r.host}`}static isSSEEndpoint(e){return e.includes("/sse")||!e.includes("/mcp")}static buildResourceParameter(e){let r=new URL(e);return`${r.protocol}//${r.host}${r.pathname}`}static isEquivalentResourceIdentifier(e,r){let n=o=>{try{return this.buildResourceParameter(o)}catch{return o}};return n(e)===n(r)}static parseTokenExpiry(e){try{let r=JSON.parse(Buffer.from(e.split(".")[1],"base64").toString());if(r&&typeof r.exp=="number")return r.exp*1e3}catch(r){U.error("Failed to parse ID token for expiry time with error:",r)}}};var efr=/^(.*\.)?run\.app$/,v_i=[/^.+\.googleapis\.com$/,efr],Ude=class extends Lf{constructor(r,n){super();this.config=r;if(!n)throw new Error("targetUrl must be provided to GoogleCredentialsAuthProvider to determine token audience.");let o=new URL(n).hostname;if(efr.test(o)&&(this.useIdToken=!0),this.audience=o,!this.useIdToken&&!v_i.some(u=>u.test(o)))throw new Error(`Host "${o}" is not an allowed host for Google Credential provider.`);let c=this.config.scopes&&this.config.scopes.length>0?this.config.scopes:["https://www.googleapis.com/auth/cloud-platform"];this.auth=new Zpr.GoogleAuth({scopes:c})}type="google-credentials";auth;useIdToken=!1;audience;cachedToken;tokenExpiryTime;async initialize(){}async headers(){if(this.cachedToken&&this.tokenExpiryTime&&Date.now()<this.tokenExpiryTime-MN)return{Authorization:`Bearer ${this.cachedToken}`};if(this.cachedToken=void 0,this.tokenExpiryTime=void 0,this.useIdToken)try{let n=await(await this.auth.getIdTokenClient(this.audience)).idTokenProvider.fetchIdToken(this.audience),o=_s.parseTokenExpiry(n);return o&&(this.tokenExpiryTime=o,this.cachedToken=n),{Authorization:`Bearer ${n}`}}catch(r){let n=`Failed to get ADC ID token: ${r instanceof Error?r.message:String(r)}`;throw U.error(n,r),new Error(n)}try{let r=await this.auth.getClient(),n=await r.getAccessToken();if(n.token){this.cachedToken=n.token;let o=r.credentials;return o.expiry_date&&(this.tokenExpiryTime=o.expiry_date),{Authorization:`Bearer ${n.token}`}}throw new Error("Failed to retrieve ADC access token.")}catch(r){let n=`Failed to get ADC access token: ${r instanceof Error?r.message:String(r)}`;throw U.error(n,r),new Error(n)}}async shouldRetryWithHeaders(r,n){if(n.status!==401&&n.status!==403){this.authRetryCount=0;return}if(!(this.authRetryCount>=Lf.MAX_AUTH_RETRIES))return this.authRetryCount++,U.debug("[GoogleCredentialsAuthProvider] Re-fetching token after auth failure"),this.cachedToken=void 0,this.tokenExpiryTime=void 0,this.headers()}};var Rb=class t{static async create(e){let{agentName:r,authConfig:n,agentCard:o}=e;if(!n)return o?.securitySchemes&&Object.keys(o.securitySchemes).length>0,void 0;switch(n.type){case"google-credentials":{let s=new Ude(n,e.targetUrl);return await s.initialize(),s}case"apiKey":{let s=new Mde(n);return await s.initialize(),s}case"http":{let s=new Bde(n);return await s.initialize(),s}case"oauth2":{let{OAuth2AuthProvider:s}=await import("./oauth2-provider-2QJJEEM6.js"),c=new s(n,e.agentName??"unknown",o,e.agentCardUrl);return await c.initialize(),c}case"openIdConnect":throw new Error("openIdConnect auth provider not yet implemented");default:{let s=n;throw new Error(`Unknown auth type: ${s.type}`)}}}static async createFromConfig(e,r){return await t.create({authConfig:e,agentName:r})}static validateAuthConfig(e,r){if(!r||Object.keys(r).length===0)return{valid:!0};let n=Object.keys(r);if(!e)return{valid:!1,diff:{requiredSchemes:n,configuredType:void 0,missingConfig:["Authentication is required but not configured"]}};let o=t.findMatchingScheme(e,r);return o.matched?{valid:!0}:{valid:!1,diff:{requiredSchemes:n,configuredType:e.type,missingConfig:o.missingConfig}}}static findMatchingScheme(e,r){let n=[];for(let[o,s]of Object.entries(r))switch(s.type){case"apiKey":if(e.type==="apiKey")return{matched:!0,missingConfig:[]};n.push(`Scheme '${o}' requires apiKey authentication`);break;case"http":if(e.type==="http"){if(e.scheme.toLowerCase()===s.scheme.toLowerCase())return{matched:!0,missingConfig:[]};n.push(`Scheme '${o}' requires HTTP ${s.scheme} authentication, but ${e.scheme} was configured`)}else{if(e.type==="google-credentials"&&s.scheme.toLowerCase()==="bearer")return{matched:!0,missingConfig:[]};n.push(`Scheme '${o}' requires HTTP ${s.scheme} authentication`)}break;case"oauth2":if(e.type==="oauth2")return{matched:!0,missingConfig:[]};n.push(`Scheme '${o}' requires OAuth 2.0 authentication`);break;case"openIdConnect":if(e.type==="openIdConnect")return{matched:!0,missingConfig:[]};n.push(`Scheme '${o}' requires OpenID Connect authentication`);break;case"mutualTLS":n.push(`Scheme '${o}' requires mTLS authentication (not yet supported)`);break;default:{let c=s;n.push(`Unknown security scheme type: ${c.type}`)}}return{matched:!1,missingConfig:n}}static describeRequiredAuth(e){let r=[];for(let[n,o]of Object.entries(e))switch(o.type){case"apiKey":r.push(`API Key (${n}): Send ${o.name} in ${o.in}`);break;case"http":r.push(`HTTP ${o.scheme} (${n})`);break;case"oauth2":r.push(`OAuth 2.0 (${n})`);break;case"openIdConnect":r.push(`OpenID Connect (${n})`);break;case"mutualTLS":r.push(`Mutual TLS (${n})`);break;default:{let s=o;r.push(`Unknown (${n}): ${s.type}`)}}return r.join(" OR ")}};var _m=class extends Error{userMessage;agentName;constructor(e,r,n,o){super(r,o),this.name="A2AAgentError",this.agentName=e,this.userMessage=n}},pHe=class extends _m{constructor(e,r){let n=`Agent card not found at ${r} (HTTP 404)`,o=`Agent card not found (404) at ${r}. Verify the agent_card_url in your agent definition.`;super(e,n,o),this.name="AgentCardNotFoundError"}},Fde=class extends _m{statusCode;constructor(e,r,n){let o=n===401?"Unauthorized":"Forbidden",s=`Agent card request returned ${n} ${o} for ${r}`,c=`Authentication failed (${n} ${o}) at ${r}. Check the "auth" configuration in your agent definition.`;super(e,s,c),this.name="AgentCardAuthError",this.statusCode=n}},jde=class extends _m{requiredAuth;missingFields;constructor(e,r,n){let o=`Agent "${e}" requires authentication but none is configured`,s=`Agent requires ${r} but no auth is configured. Missing: ${n.join(", ")}`;super(e,o,s),this.name="AgentAuthConfigMissingError",this.requiredAuth=r,this.missingFields=n}},Qde=class extends _m{constructor(e,r,n){let o=n instanceof Error?n.message:String(n),s=`Failed to connect to agent "${e}" at ${r}: ${o}`,c=`Connection failed for ${r}: ${o}`;super(e,s,c,{cause:n}),this.name="AgentConnectionError"}};function b_i(t){return typeof t=="object"&&t!==null}function S_i(t){let e=[],r=t,n=0,o=10;for(;r&&n<o;){if(b_i(r)){let s=r;r instanceof Error?e.push(r.message):typeof s.message=="string"&&e.push(s.message),typeof s.code=="string"&&e.push(s.code),typeof s.status=="number"?e.push(String(s.status)):typeof s.statusCode=="number"&&e.push(String(s.statusCode)),r=s.cause}else if(typeof r=="string"){e.push(r);break}else{e.push(String(r));break}n++}return e.join(" ")}function tfr(t,e,r){let n=S_i(r);return/\b(ECONNREFUSED|ENOTFOUND|EHOSTUNREACH|ETIMEDOUT)\b/i.test(n)?new Qde(t,e,r):/\b404\b|\bnot[\s_-]?found\b/i.test(n)?new pHe(t,e):/\b401\b|unauthorized/i.test(n)?new Fde(t,e,401):/\b403\b|forbidden/i.test(n)?new Fde(t,e,403):new Qde(t,e,r)}function fHe(t){return`${t.name}-config`}var qde=class{constructor(e){this.config=e}agents=new Map;allDefinitions=new Map;builtInAgents=new Set;async initialize(){Ee.on("model-changed",this.onModelChanged),await this.loadAgents()}isBuiltIn(e){return this.builtInAgents.has(e)}onModelChanged=()=>{this.refreshAgents("local").catch(e=>{U.error("[AgentRegistry] Failed to refresh agents on model change:",e)})};async reload(){this.config.getA2AClientManager()?.clearCache(),await this.config.reloadAgents(),this.agents.clear(),this.allDefinitions.clear(),await this.loadAgents(),Ee.emitAgentsRefreshed()}async acknowledgeAgent(e){let r=this.config.getAcknowledgedAgentsService(),n=this.config.getProjectRoot();e.metadata?.hash&&(await r.acknowledge(n,e.name,e.metadata.hash),await this.registerAgent(e),Ee.emitAgentsRefreshed())}dispose(){Ee.off("model-changed",this.onModelChanged)}async loadAgents(){if(this.agents.clear(),this.allDefinitions.clear(),this.loadBuiltInAgents(),!this.config.isAgentsEnabled())return;let e=er.getUserAgentsDir(),r=await lHe(e);for(let s of r.errors)U.warn(`[AgentRegistry] Error loading user agent: ${s.message}`),Ee.emitFeedback("error",`Agent loading error: ${s.message}`);await Promise.allSettled(r.agents.map(async s=>{try{await this.registerAgent(s)}catch(c){U.warn(`[AgentRegistry] Error registering user agent "${s.name}":`,c),Ee.emitFeedback("error",`Error registering user agent "${s.name}": ${c instanceof Error?c.message:String(c)}`)}}));let n=this.config.getFolderTrust(),o=this.config.isTrustedFolder();if(!n||o){let s=this.config.storage.getProjectAgentsDir(),c=await lHe(s);for(let p of c.errors)Ee.emitFeedback("error",`Agent loading error: ${p.message}`);let u=this.config.getAcknowledgedAgentsService(),d=this.config.getProjectRoot(),l=[],a=[];for(let p of c.agents){if(p.kind==="remote"&&(p.metadata||(p.metadata={}),p.metadata.hash=p.agentCardUrl??(p.agentCardJson?rfr.createHash("sha256").update(p.agentCardJson).digest("hex"):void 0)),!p.metadata?.hash){a.push(p);continue}await u.isAcknowledged(d,p.name,p.metadata.hash)?a.push(p):l.push(p)}l.length>0&&Ee.emitAgentsDiscovered(l),await Promise.allSettled(a.map(async p=>{try{await this.registerAgent(p)}catch(f){U.warn(`[AgentRegistry] Error registering project agent "${p.name}":`,f),Ee.emitFeedback("error",`Error registering project agent "${p.name}": ${f instanceof Error?f.message:String(f)}`)}}))}else Ee.emitFeedback("info","Skipping project agents due to untrusted folder. To enable, ensure that the project root is trusted.");for(let s of this.config.getExtensions())s.isActive&&s.agents&&await Promise.allSettled(s.agents.map(async c=>{try{await this.registerAgent(c)}catch(u){U.warn(`[AgentRegistry] Error registering extension agent "${c.name}":`,u),Ee.emitFeedback("error",`Error registering extension agent "${c.name}": ${u instanceof Error?u.message:String(u)}`)}}));this.config.getDebugMode()&&U.log(`[AgentRegistry] Loaded with ${this.agents.size} agents.`)}loadBuiltInAgents(){let e=oue(this.config);this.builtInAgents.add(e.name),this.registerLocalAgent(e);let r=$pr(this.config);this.builtInAgents.add(r.name),this.registerLocalAgent(r);let n=zpr(this.config);this.builtInAgents.add(n.name),this.registerLocalAgent(n);let o=this.config.getBrowserAgentConfig();if(o.enabled){let s=process.env.SANDBOX,c=!!s&&s!=="sandbox-exec"&&s!=="sandbox:none",u=o.customConfig.sessionMode??"persistent";if(c&&u!=="existing")Ee.emitFeedback("info",'Browser agent disabled in container sandbox. To use it, set sessionMode to "existing" in settings and start Chrome with --remote-debugging-port=9222 on the host.');else{let d=Lde(this.config);this.builtInAgents.add(d.name),this.registerLocalAgent(d)}}if(this.config.isMemoryManagerEnabled()){this.registerLocalAgent(Jpr(this.config));try{let s=er.getGlobalGeminiDir();this.config.getWorkspaceContext().addDirectory(s)}catch(s){U.warn("[AgentRegistry] Could not add global .gemini directory to workspace:",s)}}}async refreshAgents(e="all"){this.loadBuiltInAgents(),await Promise.allSettled(Array.from(this.agents.values()).map(async r=>{(e==="all"||r.kind===e)&&await this.registerAgent(r)}))}async registerAgent(e){e.kind==="local"?this.registerLocalAgent(e):e.kind==="remote"&&await this.registerRemoteAgent(e)}registerLocalAgent(e){if(e.kind!=="local")return;if(!e.name||!e.description){U.warn("[AgentRegistry] Skipping invalid agent definition. Missing name or description.");return}this.allDefinitions.set(e.name,e);let r=this.config.getAgentsSettings().overrides?.[e.name];if(!this.isAgentEnabled(e,r)){this.config.getDebugMode()&&U.log(`[AgentRegistry] Skipping disabled agent '${e.name}'`);return}this.agents.has(e.name)&&this.config.getDebugMode()&&U.log(`[AgentRegistry] Overriding agent '${e.name}'`);let n=this.applyOverrides(e,r);this.agents.set(n.name,n),this.registerModelConfigs(n),this.addAgentPolicy(n)}addAgentPolicy(e){let r=this.config.getPolicyEngine();if(r){if(r.hasRuleForTool(e.name,!0)){this.config.getDebugMode()&&U.log(`[AgentRegistry] User policy exists for '${e.name}', skipping dynamic registration.`);return}r.removeRulesForTool(e.name,"AgentRegistry (Dynamic)"),r.addRule({toolName:e.name,decision:e.kind==="local"?"allow":"ask_user",priority:CQ,source:"AgentRegistry (Dynamic)"})}}isAgentEnabled(e,r){let o=!(e.experimental===!0);return r&&r.enabled!==void 0&&(o=r.enabled),o}async registerRemoteAgent(e){if(e.kind!=="remote")return;if(!e.name){U.warn("[AgentRegistry] Skipping invalid agent definition. Missing name.");return}this.allDefinitions.set(e.name,e);let r=this.config.getAgentsSettings().overrides?.[e.name];if(!this.isAgentEnabled(e,r)){this.config.getDebugMode()&&U.log(`[AgentRegistry] Skipping disabled remote agent '${e.name}'`);return}this.agents.has(e.name)&&this.config.getDebugMode()&&U.log(`[AgentRegistry] Overriding agent '${e.name}'`);let n=e;n.originalDescription===void 0&&(n.originalDescription=n.description);try{let o=this.config.getA2AClientManager();if(!o){U.warn(`[AgentRegistry] Skipping remote agent '${e.name}': A2AClientManager is not available.`);return}let s=Cde(n),c;if(e.auth){let p=await Rb.create({authConfig:e.auth,agentName:e.name,targetUrl:s,agentCardUrl:n.agentCardUrl});if(!p)throw new Error(`Failed to create auth provider for agent '${e.name}'`);c=p}let u=await o.loadAgent(n.name,Tde(n),c);if(u.securitySchemes){let p=Rb.validateAuthConfig(e.auth,u.securitySchemes);if(!p.valid&&p.diff){let f=Rb.describeRequiredAuth(u.securitySchemes),g=new jde(e.name,f,p.diff.missingConfig);Ee.emitFeedback("warning",`[${e.name}] Agent requires authentication: ${f}`),U.warn(`[AgentRegistry] ${g.message}`)}}let d=n.originalDescription,l=u.description,a=[];if(d?.trim()&&a.push(`User Description: ${d.trim()}`),l?.trim()&&a.push(`Agent Description: ${l.trim()}`),u.skills&&u.skills.length>0){let p=u.skills.map(f=>`${f.name}: ${f.description||"No description provided"}`).join(`
|
|
2899
2899
|
`);a.push(`Skills:
|
|
2900
2900
|
${p}`)}a.length>0&&(e.description=a.join(`
|
|
2901
2901
|
`)),this.config.getDebugMode()&&U.log(`[AgentRegistry] Registered remote agent '${e.name}' with card: ${e.agentCardUrl??"inline JSON"}`),this.agents.set(e.name,e),this.addAgentPolicy(e)}catch(o){o instanceof _m?Ee.emitFeedback("error",`[${e.name}] ${o.userMessage}`):Ee.emitFeedback("error",`[${e.name}] Failed to load remote agent: ${o instanceof Error?o.message:String(o)}`),U.warn(`[AgentRegistry] Error loading A2A agent "${e.name}":`,o)}}applyOverrides(e,r){if(e.kind!=="local"||!r)return e;let n={get kind(){return e.kind},get name(){return e.name},get displayName(){return e.displayName},get description(){return e.description},get experimental(){return e.experimental},get metadata(){return e.metadata},get inputConfig(){return e.inputConfig},get outputConfig(){return e.outputConfig},get promptConfig(){return e.promptConfig},get toolConfig(){return e.toolConfig},get processOutput(){return e.processOutput},get runConfig(){return r.runConfig?{...e.runConfig,...r.runConfig}:e.runConfig},get modelConfig(){return r.modelConfig?wN.merge(e.modelConfig,r.modelConfig):e.modelConfig}};return r.tools&&(n.toolConfig={tools:r.tools}),r.mcpServers&&(n.mcpServers={...e.mcpServers,...r.mcpServers}),n}registerModelConfigs(e){let r=e.modelConfig,n=r.model;n==="inherit"&&(n=this.config.getModel());let o={...r,model:n};this.config.modelConfigService.registerRuntimeModelConfig(fHe(e),{modelConfig:o}),o.model&&xs(o.model)&&this.config.modelConfigService.registerRuntimeModelOverride({match:{overrideScope:e.name},modelConfig:{generateContentConfig:o.generateContentConfig}})}getDefinition(e){return this.agents.get(e)}getAllDefinitions(){return Array.from(this.agents.values())}getAllAgentNames(){return Array.from(this.agents.keys())}getAllDiscoveredAgentNames(){return Array.from(this.allDefinitions.keys())}getDiscoveredDefinition(e){return this.allDefinitions.get(e)}};import*as BN from"node:fs/promises";import*as nfr from"node:path";var Gde=class{acknowledgedAgents={};loaded=!1;async load(){if(this.loaded)return;let e=er.getAcknowledgedAgentsPath();try{let r=await BN.readFile(e,"utf-8");this.acknowledgedAgents=JSON.parse(r)}catch(r){(!Lt(r)||r.code!=="ENOENT")&&U.error("Failed to load acknowledged agents:",be(r)),this.acknowledgedAgents={}}this.loaded=!0}async save(){let e=er.getAcknowledgedAgentsPath();try{let r=nfr.dirname(e);await BN.mkdir(r,{recursive:!0}),await BN.writeFile(e,JSON.stringify(this.acknowledgedAgents,null,2),"utf-8")}catch(r){U.error("Failed to save acknowledged agents:",be(r))}}async isAcknowledged(e,r,n){await this.load();let o=this.acknowledgedAgents[e];return o?o[r]===n:!1}async acknowledge(e,r,n){await this.load(),this.acknowledgedAgents[e]||(this.acknowledgedAgents[e]={}),this.acknowledgedAgents[e][r]=n,await this.save()}};function Vde(t,e){let r=/\$\{(\w+)\}/g,n=new Set(Array.from(t.matchAll(r),c=>c[1])),o=new Set(Object.keys(e)),s=Array.from(n).filter(c=>!o.has(c));if(s.length>0)throw new Error(`Template validation failed: Missing required input parameters: ${s.join(", ")}. Available inputs: ${Object.keys(e).join(", ")}`);return t.replace(r,(c,u)=>String(e[u]))}import{AsyncLocalStorage as T_i}from"node:async_hooks";var ifr=new T_i;function hHe(t,e){return ifr.run(t,e)}function Hde(){return ifr.getStore()}var ofr=Me(mse(),1);function K7(t){return typeof t=="object"&&t!==null&&"callId"in t&&"responseParts"in t}function nBo(t){let{displayName:e,status:r,approvalMode:n,hasResultDisplay:o,parentCallId:s}=t;if(s)return!0;switch(e){case QD:switch(r){case"scheduled":case"validating":case"executing":case"awaiting_approval":return!0;case"error":return!o;default:return!1}case YQ:case JQ:return n==="plan";default:return!1}}function X7(t,e,r=3){let n=e.map(c=>({name:c,distance:ofr.default.get(t,c)}));n.sort((c,u)=>c.distance-u.distance);let o=n.slice(0,r);if(o.length===0)return"";let s=o.map(c=>`"${c.name}"`).join(", ");return o.length>1?` Did you mean one of: ${s}?`:` Did you mean ${s}?`}function iBo(t,e,r){let n;xQ(t)?n=[t.name,t.constructor.name]:n=[t],n.some(o=>rh.includes(o))&&(n=[...new Set([...n,...rh])]);for(let o of r){let s=o.indexOf("(");if(s===-1){if(n.includes(o))return!0;continue}let c=o.substring(0,s);if(!n.includes(c)||!o.endsWith(")"))continue;let u=o.substring(s+1,o.length-1),d;if(typeof e=="string")d=e;else{if(!("command"in e.params))continue;d=String(e.params.command)}if(n.some(l=>rh.includes(l))&&(d===u||d.startsWith(u+" ")))return!0}return!1}var $de=class{constructor(e,r=snt,n){this.messageBus=e;this.schedulerId=r;this.onTerminalCall=n}activeCalls=new Map;queue=[];_completedBatch=[];addToolCalls(e){this.enqueue(e)}getToolCall(e){return this.activeCalls.get(e)||this.queue.find(r=>r.request.callId===e)||this._completedBatch.find(r=>r.request.callId===e)}enqueue(e){this.queue.push(...e),this.emitUpdate()}dequeue(){let e=this.queue.shift();return e&&(this.activeCalls.set(e.request.callId,e),this.emitUpdate()),e}peekQueue(){return this.queue[0]}get isActive(){return this.activeCalls.size>0}get allActiveCalls(){return Array.from(this.activeCalls.values())}get activeCallCount(){return this.activeCalls.size}get queueLength(){return this.queue.length}get firstActiveCall(){return this.activeCalls.values().next().value}updateStatus(e,r,n){let o=this.activeCalls.get(e);if(!o)return;let s=this.transitionCall(o,r,n);this.activeCalls.set(e,s),this.emitUpdate()}finalizeCall(e){let r=this.activeCalls.get(e);r&&this.isTerminalCall(r)&&(this._completedBatch.push(r),this.activeCalls.delete(e),this.onTerminalCall?.(r),this.emitUpdate())}updateArgs(e,r,n){let o=this.activeCalls.get(e);!o||o.status==="error"||(this.activeCalls.set(e,this.patchCall(o,{request:{...o.request,args:r},invocation:n})),this.emitUpdate())}setOutcome(e,r){let n=this.activeCalls.get(e);n&&(this.activeCalls.set(e,this.patchCall(n,{outcome:r})),this.emitUpdate())}replaceActiveCallWithTailCall(e,r){this.activeCalls.has(e)&&(this.activeCalls.delete(e),this.queue.unshift(r),this.emitUpdate())}cancelAllQueued(e){if(this.queue.length!==0){for(;this.queue.length>0;){let r=this.queue.shift();if(r.status==="error"){this._completedBatch.push(r),this.onTerminalCall?.(r);continue}let n=this.toCancelled(r,e);this._completedBatch.push(n),this.onTerminalCall?.(n)}this.emitUpdate()}}getSnapshot(){return[...this._completedBatch,...Array.from(this.activeCalls.values()),...this.queue]}clearBatch(){this._completedBatch.length!==0&&(this._completedBatch=[],this.emitUpdate())}get completedBatch(){return[...this._completedBatch]}emitUpdate(){let e=this.getSnapshot();this.messageBus.publish({type:"tool-calls-update",toolCalls:e,schedulerId:this.schedulerId})}isTerminalCall(e){let{status:r}=e;return r==="success"||r==="error"||r==="cancelled"}transitionCall(e,r,n){switch(r){case"success":{if(!K7(n))throw new Error(`Invalid data for 'success' transition (callId: ${e.request.callId})`);return this.toSuccess(e,n)}case"error":{if(!K7(n))throw new Error(`Invalid data for 'error' transition (callId: ${e.request.callId})`);return this.toError(e,n)}case"awaiting_approval":{if(!n)throw new Error(`Missing data for 'awaiting_approval' transition (callId: ${e.request.callId})`);return this.toAwaitingApproval(e,n)}case"scheduled":return this.toScheduled(e);case"cancelled":{if(typeof n!="string"&&!K7(n))throw new Error(`Invalid reason (string) or response for 'cancelled' transition (callId: ${e.request.callId})`);return this.toCancelled(e,n)}case"validating":return this.toValidating(e);case"executing":{if(n!==void 0&&!this.isExecutingToolCallPatch(n))throw new Error(`Invalid patch for 'executing' transition (callId: ${e.request.callId})`);return this.toExecuting(e,n)}default:return r}}isExecutingToolCallPatch(e){return typeof e=="object"&&e!==null}validateHasToolAndInvocation(e,r){if(!("tool"in e&&e.tool&&"invocation"in e&&e.invocation))throw new Error(`Invalid state transition: cannot transition to ${r} without tool/invocation (callId: ${e.request.callId})`)}toSuccess(e,r){this.validateHasToolAndInvocation(e,"success");let n="startTime"in e?e.startTime:void 0;return{request:e.request,tool:e.tool,invocation:e.invocation,status:"success",response:r,durationMs:n?Date.now()-n:void 0,outcome:e.outcome,schedulerId:e.schedulerId,approvalMode:e.approvalMode}}toError(e,r){let n="startTime"in e?e.startTime:void 0;return{request:e.request,status:"error",tool:"tool"in e?e.tool:void 0,response:r,durationMs:n?Date.now()-n:void 0,outcome:e.outcome,schedulerId:e.schedulerId,approvalMode:e.approvalMode}}toAwaitingApproval(e,r){this.validateHasToolAndInvocation(e,"awaiting_approval");let n,o;return this.isEventDrivenApprovalData(r)?(o=r.correlationId,n=r.confirmationDetails):n=r,{request:e.request,tool:e.tool,status:"awaiting_approval",correlationId:o,confirmationDetails:n,startTime:"startTime"in e?e.startTime:void 0,outcome:e.outcome,invocation:e.invocation,schedulerId:e.schedulerId,approvalMode:e.approvalMode}}isEventDrivenApprovalData(e){return typeof e=="object"&&e!==null&&"correlationId"in e&&"confirmationDetails"in e}toScheduled(e){return this.validateHasToolAndInvocation(e,"scheduled"),{request:e.request,tool:e.tool,status:"scheduled",startTime:"startTime"in e?e.startTime:void 0,outcome:e.outcome,invocation:e.invocation,schedulerId:e.schedulerId,approvalMode:e.approvalMode}}toCancelled(e,r){this.validateHasToolAndInvocation(e,"cancelled");let n="startTime"in e?e.startTime:void 0,o;if(this.isWaitingToolCall(e)){let u=e.confirmationDetails;u.type==="edit"&&"fileDiff"in u&&"fileName"in u&&"filePath"in u&&"originalContent"in u&&"newContent"in u&&(o={fileDiff:u.fileDiff,fileName:u.fileName,filePath:u.filePath,originalContent:u.originalContent,newContent:u.newContent,diffStat:u.diffStat??ZJe(u.fileDiff)})}let s;if(e.status==="executing"&&e.liveOutput&&(s=e.liveOutput),K7(r)){let u={...r};return u.resultDisplay||(u.resultDisplay=o??s),{request:e.request,tool:e.tool,invocation:e.invocation,status:"cancelled",response:u,durationMs:n?Date.now()-n:void 0,outcome:e.outcome,schedulerId:e.schedulerId,approvalMode:e.approvalMode}}let c=`[Operation Cancelled] Reason: ${r}`;return{request:e.request,tool:e.tool,invocation:e.invocation,status:"cancelled",response:{callId:e.request.callId,responseParts:[{functionResponse:{id:e.request.callId,name:e.request.originalRequestName??e.request.name,response:{error:c}}}],resultDisplay:o??s,error:void 0,errorType:void 0,contentLength:c.length},durationMs:n?Date.now()-n:void 0,outcome:e.outcome,schedulerId:e.schedulerId,approvalMode:e.approvalMode}}isWaitingToolCall(e){return e.status==="awaiting_approval"}patchCall(e,r){return{...e,...r}}toValidating(e){return this.validateHasToolAndInvocation(e,"validating"),{request:e.request,tool:e.tool,status:"validating",startTime:"startTime"in e?e.startTime:void 0,outcome:e.outcome,invocation:e.invocation,schedulerId:e.schedulerId,approvalMode:e.approvalMode}}toExecuting(e,r){this.validateHasToolAndInvocation(e,"executing");let n=r,o=n?.liveOutput??("liveOutput"in e?e.liveOutput:void 0),s=n?.pid??("pid"in e?e.pid:void 0),c=n?.progressMessage??("progressMessage"in e?e.progressMessage:void 0),u=n?.progressPercent??("progressPercent"in e?e.progressPercent:void 0),d=n?.progress??("progress"in e?e.progress:void 0),l=n?.progressTotal??("progressTotal"in e?e.progressTotal:void 0);return{request:e.request,tool:e.tool,status:"executing",startTime:"startTime"in e?e.startTime:void 0,outcome:e.outcome,invocation:e.invocation,liveOutput:o,pid:s,progressMessage:c,progressPercent:u,progress:d,progressTotal:l,schedulerId:e.schedulerId,approvalMode:e.approvalMode}}};import{on as C_i}from"node:events";import{randomUUID as w_i}from"node:crypto";async function x_i(t,e,r){if(r.aborted)throw new Error("Operation cancelled");try{for await(let[n]of C_i(t,"tool-confirmation-response",{signal:r})){let o=n;if(o.correlationId===e)return{outcome:o.outcome??(o.confirmed?"proceed_once":"cancel"),payload:o.payload}}}catch(n){throw r.aborted||n.name==="AbortError"?new Error("Operation cancelled"):n}throw new Error("Operation cancelled")}async function gHe(t,e,r){let{state:n,onWaitingForConfirmation:o}=r,s=t.request.callId,c="modify_with_editor",u;for(;c==="modify_with_editor";){if(e.aborted)throw new Error("Operation cancelled by user");let d=n.getToolCall(s);if(!d||!("invocation"in d))throw new Error(`Tool call ${s} lost during confirmation loop`);let a=await d.invocation.shouldConfirmExecute(e,r.forcedDecision);if(!a){c="proceed_once";break}r.systemMessage&&(a.systemMessage=r.systemMessage),await O_i(r,a);let p=w_i(),f=a;u=f;let g="ideConfirmation"in a?a.ideConfirmation:void 0;n.updateStatus(s,"awaiting_approval",{confirmationDetails:f,correlationId:p}),o?.(!0);let y=await P_i(r.messageBus,p,e,g);if(o?.(!1),c=y.outcome,"onConfirm"in a&&typeof a.onConfirm=="function"&&await a.onConfirm(c,y.payload),c==="modify_with_editor"){let E=await I_i(r,t,e);E.error&&Ee.emitFeedback("error",E.error)}else y.payload&&"newContent"in y.payload&&(await R_i(r,t,y.payload,e),c="proceed_once")}return{outcome:c,lastDetails:u}}async function O_i(t,e){t.config.getHookSystem()&&await t.config.getHookSystem()?.fireToolNotificationEvent({...e,onConfirm:async()=>{}})}async function I_i(t,e,r){let{state:n,modifier:o,getPreferredEditor:s}=t,c=s(),u=await WMt(c,r);if(!u)return{error:GMt};let d=await o.handleModifyWithEditor(n.firstActiveCall,u,r);if(d){let l=e.tool.build(d.updatedParams);n.updateArgs(e.request.callId,d.updatedParams,l)}return{}}async function R_i(t,e,r,n){let{state:o,modifier:s}=t,c=await s.applyInlineModify(o.firstActiveCall,r,n);if(c){let u=e.tool.build(c.updatedParams);o.updateArgs(e.request.callId,c.updatedParams,u)}}async function P_i(t,e,r,n){let o=new AbortController,s=o.signal,c=()=>o.abort();r.aborted?o.abort():r.addEventListener("abort",c);try{let u=x_i(t,e,s);if(!n)return await u;let d=n.then(l=>({outcome:l.status==="accepted"?"proceed_once":"cancel",payload:l.content?{newContent:l.content}:void 0})).catch(l=>(U.warn("Error waiting for confirmation via IDE",l),new Promise(()=>{})));return await Promise.race([u,d])}finally{r.removeEventListener("abort",c),o.abort()}}function sfr(t,e){return{errorMessage:`Tool execution denied by policy.${e?.denyMessage?` ${e.denyMessage}`:""}`,errorType:"policy_violation"}}async function afr(t,e,r){let n=t.tool instanceof Jn?t.tool.serverName:void 0,o=t.tool.toolAnnotations,s=await e.getPolicyEngine().check({name:t.request.name,args:t.request.args},n,o,r),{decision:c}=s;if(c==="ask_user"&&t.request.isClientInitiated&&!t.request.args?.additional_permissions)return{decision:"allow",rule:s.rule};if(c==="ask_user"&&!e.isInteractive())throw new Error(`Tool execution for "${t.tool.displayName||t.tool.name}" requires user confirmation, which is not supported in non-interactive mode.`);return{decision:c,rule:s.rule}}async function lfr(t,e,r,n,o,s){if(k_i(t,e)){n.config.setApprovalMode("autoEdit");return}let c,u,d=n.config.getApprovalMode();if(e==="proceed_always"||e==="proceed_always_tool"||e==="proceed_always_server"||e==="proceed_always_and_save"){let l=Age.indexOf(d);l!==-1&&(u=Age.slice(l))}if(e==="proceed_always_and_save"&&(n.config&&n.config.isTrustedFolder()&&n.config.getWorkspacePoliciesDir()!==void 0?c="workspace":c="user"),r?.type==="mcp"){await D_i(t,e,r,o,c,u);return}await N_i(t,e,r,o,c,s,n.config,u)}function k_i(t,e){return e==="proceed_always"&&jD.has(t.name)}async function N_i(t,e,r,n,o,s,c,u){if(e==="proceed_always"||e==="proceed_always_and_save"){let d=s?.getPolicyUpdateOptions?.(e)||{};if(!d.commandPrefix&&r?.type==="exec")d.commandPrefix=r.rootCommands;else if(!d.argsPattern&&r?.type==="edit"){let l=c?wo(r.filePath,c.getTargetDir()):r.filePath;d.argsPattern=ov(l)}await n.publish({type:"update-policy",toolName:t.name,persist:e==="proceed_always_and_save",persistScope:o,modes:u,...d})}}async function D_i(t,e,r,n,o,s){if(!(e==="proceed_always"||e==="proceed_always_tool"||e==="proceed_always_server"||e==="proceed_always_and_save"))return;let u=t.name,d=e==="proceed_always_and_save";e==="proceed_always_server"&&(u=dS(r.serverName,"*")),await n.publish({type:"update-policy",toolName:u,mcpName:r.serverName,persist:d,persistScope:o,modes:s})}function mHe(t,e){if(!(t instanceof _Ke))return;let n=(e.getMcpClientManager()?.getMcpServers()??e.getMcpServers()??{})[t.serverName];if(n)return{server_name:t.serverName,tool_name:t.serverToolName,command:n.command,args:n.args,cwd:n.cwd,url:n.url??n.httpUrl,tcp:n.tcp}}async function cfr(t,e,r,n,o,s,c,u,d){let l=t.params||{},a=!1,p=[],f=c?mHe(t,c):void 0,g=c?.getHookSystem();if(g&&!d){let E=await g.fireBeforeToolEvent(e,l,f,u);if(E?.shouldStopExecution()){let v=E.getEffectiveReason();return{llmContent:`Agent execution stopped by hook: ${v}`,returnDisplay:`Agent execution stopped by hook: ${v}`,error:{type:"stop_execution",message:v}}}let _=E?.getBlockingError();if(_?.blocked)return{llmContent:`Tool execution blocked: ${_.reason}`,returnDisplay:`Tool execution blocked: ${_.reason}`,error:{type:"execution_failed",message:_.reason}};if(E instanceof Q0){let v=E.getModifiedToolInput();if(v){Object.assign(t.params,v),U.debug(`Tool input modified by hook for ${e}`),a=!0,p=Object.keys(v);try{t=n.build(t.params)}catch(b){return{llmContent:`Tool parameter modification by hook failed validation: ${b instanceof Error?b.message:String(b)}`,returnDisplay:"Tool parameter modification by hook failed validation.",error:{type:"invalid_tool_params",message:String(b)}}}}}}let y=await t.execute(r,o,s);if(a){let E=`
|