Lines 71-111javascript
72`))}catch(e){g.error(Q(e)),process.exit(1)}}var Hc={command:"list",describe:"Lists installed extensions.",builder:n=>n.option("output-format",{alias:"o",type:"string",describe:"The format of the CLI output.",choices:["text","json"],default:"text"}),handler:async n=>{await zm({outputFormat:n["output-format"]}),await X()}};var Wm=n=>`Extension "${n.name}" successfully updated: ${n.originalVersion} \u2192 ${n.updatedVersion}.`;async function qm(n){let e=process.cwd(),t=oe(e).merged,s=new he({workspaceDir:e,requestConsent:Ce,requestSetting:Ie,settings:t}),o=await s.loadExtensions();if(n.name)try{l ...
74No extensions installed.`);return}let c=o.map(p=>`${p.name} (${p.version})`).join(`
75`);B.emitFeedback("error",`Extension "${n.name}" not found.
80Run "gemini extensions list" for details.`);return}if(!r.installMetadata){g.log(`Unable to install extension "${n.name}" due to missing install metadata`);return}let a=await Qa(r,s);if(a!=="update available"){g.log(`Extension "${n.name}" is already up to date.`);return}let l=await rl(r,s,a,()=>{},t.experimental?.extensionReloading);l.originalVersion!==
81`))}catch(r){g.error(Q(r))}}var Bc={command:"update [<name>] [--all]",describe:"Updates all extensions or a named extension to the latest version.",builder:n=>n.positional("name",{describe:"The name of the extension to update.",type:"string"}).option("all",{describe:"Update all extensions.",type:"boolean"}).conflicts("name","all").check(e=>{if(!e.all&&!e.name)throw new Error("Either an extension name or --all must be provided");return!0}),handler:async n=>{await qm({name:n.name,all:n.all}),await X()}};async function Hm(n){let e=process.cwd(),t=new he({workspaceDir:e,requestConsent:Ce,requestSe ...
82`);return}process.stdout.write(bn.default.bold("Discovered Agent Skills:")+`
84`);for(let a of r){let l=a.disabled?bn.default.red("[Disabled]"):bn.default.green("[Enabled]"),c=a.isBuiltin?bn.default.gray(" [Built-in]"):"";process.stdout.write(`${bn.default.bold(a.name)} ${l}${c}
85`),process.stdout.write(` Description: ${a.description}
86`),process.stdout.write(` Location: ${a.location}
88`)}}var id={command:"list [--all]",describe:"Lists discovered agent skills.",builder:n=>n.option("all",{type:"boolean",description:"Show all skills, including built-in ones.",default:!1}),handler:async n=>{await cp({all:n.all}),await X()}};var xi=je(it(),1);async function dp
89Successfully linked skills.`))}catch(e){g.error(Q(e)),await X(1)}}var dd={command:"link <path>",describe:"Links an agent skill from a local path. Updates to the source will be reflected immediately.",builder:n=>n.positional("path",{describe:"The local path of the skill to link.",type:"string",demandOption:!0}).option("scope",{describe:'The scope to link the skill into. Defaults to "user" (global).',choices:["user","workspace"],default:"user"}).option("consent",{describe:"Acknowledge the security risks of linking a skill and skip the confirmation prompt.",type:"boolean",default:!1}).check(e=>{i ...
90Migration complete! Please review the migrated hooks in .gemini/settings.json`)}catch(d){g.error(`Error saving migrated hooks: ${Q(d)}`)}}var md={command:"migrate",describe:"Migrate hooks from Claude Code to Gemini CLI",builder:n=>n.option("from-claude",{describe:"Migrate from Claude Code hooks",type:"boolean",default:!1}),handler:async n=>{n.fromClaude?await xp():g.log(`Usage: gemini hooks migrate --from-claude
92Migrate hooks from Claude Code to Gemini CLI format.`),await X()}};var Ai={command:"hooks <command>",aliases:["hook"],describe:"Manage Gemini CLI hooks.",builder:n=>n.middleware(e=>{nt(),e.isCommand=!0}).command(md).demandCommand(1,"You need at least one command before continuing.").version(!1),handler:()=>{}};var ae=je
93`);if(c>0&&d.length>0){let u=Buffer.allocUnsafe(1),{bytesRead:h}=await s.read(u,0,1,c-1);h===1&&u[0]!==10&&d.shift()}return d.length>0&&d[d.length-1]===""&&d.pop(),d.length===0?"":d.slice(-e).join(`
HighChild Process
Package source references child process execution.
dist/gemini/gemini-QA25TZIT.jsView on unpkg · L91 95`}finally{await s.close()}}function yd(n){return new Promise((e,t)=>{n.once("error",t),n.once("close",s=>e(s??1))})}async function $p(n,e,t){let s=t?["-f","-n",String(e),n]:["-n",String(e),n],o=Np("tail",s,{stdio:"inherit"});if(!t)return yd(o);let r=()=>{o.kill("SIGTERM")};process.once("SIGINT",r);try{return await yd(o)}finally{process.off("SIGINT",r)}}var wd={command:"logs",describe:"View LiteRT-LM server logs",builder:n=>n.option("lines",{alias:"n",type:"number",description:"Show the last N lines and exit (omit to follow live)"}).option("follow",{alias:"f",type:"boolean",description:"Follow ...
96`);let r=await $p(e,o,s);await X(r)}catch(r){r instanceof Error&&"code"in r&&r.code==="ENOENT"?s?(g.error('"tail" command not found. Use --lines N to view recent logs without tail.'),await X(1)):(process.stdout.write(await gd(e,o)),await X(0)):(g.error(`Failed to read log output: ${r instanceof Error?r.message:String(r)}`
97`))}return{workspacePoliciesDir:o,policyUpdateConfirmationRequest:r}}var En=n=>n.length===1&&n[0]===""?[""]:n.flatMap(e=>e.split(",").map(t=>t.trim()).filter(Boolean));function Hp(n){let e=hi(Ms(n)).help(!1).version(!1).option("worktree",{alias:"w",type:"string"}).strict(!1).exitProcess(!1).parseSync();if(e.worktree!==void 0)return typeof e.worktree=="string"?e.worktree.trim():""}function _d(n){if(Ja(n))return Hp(Te.argv)}async function vd(n){let e=Ms(Te.argv),t=[],s=hi(e).locale("en").scriptName("gemini").usage(`Usage: gemini [options] [command]
HighSame File Env Network Execution
A single source file combines environment access, network access, and code or shell execution; review context before blocking.
dist/gemini/gemini-QA25TZIT.jsView on unpkg · L91 99Gemini CLI - Defaults to interactive mode. Use -p/--prompt for non-interactive (headless) mode.`).option("isCommand",{type:"boolean",hidden:!0,description:"Internal flag to indicate if a subcommand is being run"}).option("debug",{alias:"d",type:"boolean",description:"Run in debug mode (open debug console with F12)",default:!1}).middleware(l=>{let p=[yi,bi,_i,Ai,Oi].flatMap(u=>{let h=[],f=u.command;if(f)if(Array.isArray(f))for(let _ of f)h.push(String(_).split(" ")[0]);else h.push(String(f).split(" ")[0]);let x=u.aliases;if(x)if(Array.isArray(x))for(let _ of x)h.push(String(_).split(" ")[0]);el ...
100 Argument: output-format, Given: "${h}", Choices: "text", "json", "stream-json"`:l.worktree&&!n.experimental?.worktrees?"The --worktree flag is only available when experimental.worktrees is enabled in your settings.":!0});s.command(yi),s.command(bi),s.command(_i),s.command(Ai),s.command(Oi),s.command("$0 [query..]","Launch Gemini CLI",l=>l.positional("query",{description:"Initial prompt. Runs in interactive mode by default; use -p/--prompt for non-interactive."}).option("model",{alias:"m",type:"string",nargs:1,description:"Model"}).option("prompt",{alias:"p"
101`);G[2]=se,re=`--user ${b}:${O}`,f.push("--env",`HOME=${dt()}`)}f.push(d),f.push(...G);let L,T;if(P){let b=["run","--rm","--init","--entrypoint","",...re?re.split(" "):[],"--name",$t,"--network",$t,"-p","8877:8877","-v",`${process.cwd()}:${u}`,"--workdir",u,d,...(0,An.parse)(P,process.env).filter(O=>typeof O=="string")];L=sn(a,b,{stdio:["ignore","pipe","pipe"],shell:!1,detached:!0}),r=()=>{g.log("stopping proxy container ...");try{kd(a,["rm","-f",$t],{stdio:"ignore"})}catch{}},process.on("exit",r),process.on("SIGINT",r),process.on("SIGTERM",r),L.stderr?.on("data",O=>{g.debug(`[PROXY STDERR]: $ ...
102`).filter(t=>t.trim()!=="");try{await Di.unlink(ji)}catch{e.push("Warning: Could not delete temporary warnings file.")}return e}catch(n){return n instanceof Error&&"code"in n&&n.code==="ENOENT"?[]:[`Error checking/reading warnings file: ${Q(n)}`]}}import Fi from"node:fs/promises";import{homedir as cf}from"node:os";import Ui from"node:path";import df from"node:process";var uf={id:"home-directory",priority:"low",check:async(n,e)=>{if(e.ui?.showHomeDirectoryWarning===!1)return null;try{let[t,s]=await Promise.all([Fi.realpath(n),Fi.realpath(cf())]);return Ui.resolve(t)===Ui.resolve(s)?Do(e)&&Ft(e) ...
103This warning can be disabled in /settings`:null}catch{return"Could not verify the current directory due to a file system error."}}},mf={id:"root-directory",priority:"high",check:async(n,e)=>{try{let t=await Fi.realpath(n),s="Warning: You are running Gemini CLI in the root directory. Your entire folder structure will be used for context. It is strongly recommended to run in a project-specific directory.";return Ui.dirname(t)===t?s:null}catch
104`):n.type==="warning"?process.stderr.write(`Warning: ${n.text}
105`):n.type==="info"&&process.stdout.write(`${n.text}
106`)),0),clear:()=>{},setDebugMessage:n=>{},loadHistory:n=>{},pendingItem:null,setPendingItem:n=>{},toggleCorgiMode:()=>{},toggleDebugProfiler:()=>{},toggleVimEnabled:async()=>!1,reloadCommands:()=>{},openAgentConfigDialog:()=>{},extensionsUpdateState:new Map,dispatchExtensionStateUpdate:n=>{},addConfirmUpdateExtensionRequest:n=>{},setConfirmationRequest:n=>{},removeComponent:()=>{},toggleBackgroundTasks:()=>{},toggleShortcutsHelp:()=>{},toggleVoiceMode:()=>{}}}var Js=async(n,e,t,s)=>{let o=n.trim();if(!o.startsWith("/"))return;let a=(await Ml.create([new Rl(t),new Nl(t),new kl(t)],e.signal)).ge ...
107`))}writeOnNewLine(e){this.atStartOfLine||this.write(`
108`),this.write(e)}ensureTrailingNewline(){this.atStartOfLine||this.write(`
109`)}};import zd from"node:readline";async function Wd({config:n,settings:e,input:t,prompt_id:s,resumedSessionData:o}){return ls.run(s,async()=>{let r=new Tt({stderr:!0,interactive:!1,debugMode:n.getDebugMode(),onNewMessage:k=>{B.emitConsoleLog(k.type,k.content)}});if(process.env.GEMINI_CLI_ACTIVITY_LOG_TARGET){let{setupInitialActivityLogger:k}=await import("./devtoolsService-BAQVDEG4.js");k(n)}
110`),k.error&&n.getDebugMode()){let z=k.error instanceof Error?k.error.stack||k.error.message:String(k.error);process.stderr.write(`${z}
111`)}},p=Date.now(),d=n.getOutputFormat()==="stream-json"?new wt:null,u=new AbortController,h=!1,f=null,x=!1,_=null,w=()=>{if(!process.stdin.isTTY)return;x=
Long lines were clipped for display.