@sourcegraph/amp 0.0.1759694482-g906de2 → 0.0.1759723320-g18aba8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (2) hide show
  1. package/dist/main.js +7 -7
  2. package/package.json +1 -1
package/dist/main.js CHANGED
@@ -5802,7 +5802,7 @@ See https://ampcode.com/manual#toolboxes`);return Q[0]||yO}function O76(J,Q){let
5802
5802
  `);J.command("use").argument("<tool-name>","The tool to invoke").summary("Invoke a tool with arguments or JSON input from stdin").description(Z).option("--only <field>","Extract only the specified field from the result").allowUnknownOption(!0).allowExcessArguments(!0).action(async function(X,Y,K){let q=K.optsWithGlobals(),G=await Q(K,q),z=0;await G.mcpService.initialized;let U=K.args.slice(1),W;if(L76()){let F=[];for await(let H of process.stdin)F.push(H);W=Buffer.concat(F).toString("utf-8").trim()}await V76({toolName:X,rawArgs:U,stdinInput:W,only:Y.only,threadDeps:G,stdout:process.stdout,stderr:process.stderr,exit:(F)=>{z=F}}),await G.asyncDispose(),G.cleanupTerminal(),process.exit(z)})}F0();Ew();O2();import{homedir as C49}from"node:os";import zu from"node:path";Iw();Y7();zN();u2();G3();n6();k0();function j76(J){let Q=J.trim();if(Q==="quit"||Q==="exit")return"/quit";return J}F0();zN();import Xe8 from"node:fs";import R76 from"node:path";function w76(J){let Q=J.trim().replace(/^["']|["']$/g,"");if(Q=Q.replace(/\\(.)/g,"$1"),!/\.(png|jpe?g|gif|webp)$/i.test(Q))return null;if(!R76.isAbsolute(Q))return null;return l.debug("Extracted image path",{original:J,extracted:Q}),Q}function I76(J){try{let Q=R76.extname(J).toLowerCase(),Z=Bs1(Q);if(!Z)return l.warn("Unsupported image file extension",{ext:Q}),null;try{let X=Xe8.readFileSync(J);return Ye8(X,Z)}catch(X){l.error(`Failed to read image file ${J}:`,X)}}catch(Q){l.error("Error handling image file path",{imagePath:J,error:Q})}return null}function Ye8(J,Q){if(J.length>tj)return l.warn(`Image file too large: ${J.length} bytes (max: ${tj})`),null;return{type:"image",source:{type:"base64",data:J.toString("base64"),mediaType:Q}}}import{execSync as m76}from"node:child_process";import{rmdir as ce8}from"node:fs/promises";import{tmpdir as le8}from"node:os";import u76 from"node:path";sj();F0();import{spawn as Ke8}from"node:child_process";import{promises as qe8}from"node:fs";function E76(J){return J.kind==="executable"}function $76(J){return J.kind==="markdown"}var XH=50000,P76=300000;async function Nb1(J,Q,Z,X={}){let{timeoutMs:Y=P76,signal:K}=X;try{let q=await Z.getCommand(J);if(!q)return{success:!1,output:"",error:`Command '${J}' not found`};if(!await Z.isCommandAvailable(J))return{success:!1,output:"",error:`Command '${J}' is not available for execution`};if(l.debug("Executing command",{commandName:J,filePath:q.filePath,args:Q}),$76(q))return await Ge8(q,Q);else if(E76(q))return await ze8(q,Q,Y,K);else return{success:!1,output:"",error:"Unsupported command type"}}catch(q){return l.error("Failed to execute command",{commandName:J,error:q}),{success:!1,output:"",error:q instanceof Error?q.message:"Unknown error occurred"}}}async function Ge8(J,Q){try{if(Q.length>0)return{success:!1,output:"",error:"Markdown commands do not accept arguments"};let Z=await qe8.readFile(J.filePath,"utf8");return{success:!0,output:(Z.length>XH?Z.slice(0,XH)+`
5803
5803
  ... (output truncated at ${XH} characters)`:Z).trim(),exitCode:0}}catch(Z){return{success:!1,output:"",error:Z instanceof Error?Z.message:"Failed to read markdown file"}}}async function ze8(J,Q,Z=P76,X){return new Promise((Y)=>{let[K,q]=Ue8(J,Q);l.debug("Spawning command",{spawnCommand:K,spawnArgs:q.slice(0,10),filePath:J.filePath,timeoutMs:Z});let G=Us1(X),z=!1,U=setTimeout(()=>{z=!0,G.abort(),l.warn("Command execution timed out",{commandName:J.name,timeoutMs:Z})},Z),W=Ke8(K,q,{stdio:["pipe","pipe","pipe"],signal:G.signal,detached:!0}),F=[],H=[],B=0;W.stdout?.on("data",(M)=>{let V=M.toString();if(B+=V.length,B<=XH)F.push(V);else{let N=XH-(B-V.length);if(N>0)F.push(V.slice(0,N))}}),W.stderr?.on("data",(M)=>{let V=M.toString();if(B+=V.length,B<=XH)H.push(V);else{let N=XH-(B-V.length);if(N>0)H.push(V.slice(0,N))}}),W.on("close",(M)=>{if(clearTimeout(U),z){Y({success:!1,output:F.join(""),error:`Command timed out after ${Z}ms`,exitCode:void 0});return}if(G.signal.aborted){Y({success:!1,output:F.join(""),error:"The command was aborted",exitCode:M??void 0});return}let V=M===0||M===1,N=F.join(""),L=H.join(""),A=N;if(!V&&!N.trim()&&L.trim())A=L;else if(L.trim())A+=N?`
5804
5804
  ${L}`:L;if(B>XH)A+=`
5805
- ... (output truncated at ${XH} characters)`;Y({success:V,output:A.trim(),error:!V?L.trim()||"Command failed":void 0,exitCode:M??void 0})}),W.on("error",(M)=>{clearTimeout(U);let V=M.message;if(z)V=`Command timed out after ${Z}ms`;else if(M.message.includes("operation was aborted")||M.name==="AbortError")V="The command was aborted";Y({success:!1,output:F.join(""),error:V})})})}function Ue8(J,Q){let{filePath:Z,interpreter:X,extension:Y}=J;if(process.platform==="win32")return Fe8(Z,X?[...X]:null,Y,Q);else return We8(Z,X?[...X]:null,Y,Q)}function We8(J,Q,Z,X){if(Q&&Q.length>0&&Q[0])return[Q[0],[...Q.slice(1),J,...X]];else return[J,X]}function Fe8(J,Q,Z,X){if(Q&&Q.length>0&&Q[0])return[Q[0],[...Q.slice(1),J,...X]];switch(Z.toLowerCase()){case".bat":case".cmd":return["cmd.exe",["/c",J,...X]];case".ps1":return["powershell.exe",["-ExecutionPolicy","Bypass","-File",J,...X]];case".exe":return[J,X];default:return[J,X]}}F0();Ew();O2();Iw();Y7();fV();dG();fB();n6();k0();import{mkdtemp as ie8,readFile as ae8,unlink as ne8,writeFile as _K2}from"fs/promises";var V41={};V6(V41,{scrollUp:()=>ve8,scrollDown:()=>ke8,link:()=>he8,image:()=>ge8,iTerm:()=>me8,exitAlternativeScreen:()=>ye8,eraseUp:()=>Se8,eraseStartLine:()=>Te8,eraseScreen:()=>Lb1,eraseLines:()=>$e8,eraseLine:()=>v76,eraseEndLine:()=>Pe8,eraseDown:()=>Ce8,enterAlternativeScreen:()=>xe8,cursorUp:()=>C76,cursorTo:()=>De8,cursorShow:()=>Ee8,cursorSavePosition:()=>Ae8,cursorRestorePosition:()=>Oe8,cursorPrevLine:()=>we8,cursorNextLine:()=>Re8,cursorMove:()=>Me8,cursorLeft:()=>S76,cursorHide:()=>Ie8,cursorGetPosition:()=>je8,cursorForward:()=>Ne8,cursorDown:()=>Ve8,cursorBackward:()=>Le8,clearTerminal:()=>be8,clearScreen:()=>_e8,beep:()=>fe8});import Ab1 from"node:process";var M41=globalThis.window?.document!==void 0,gY2=globalThis.process?.versions?.node!==void 0,mY2=globalThis.process?.versions?.bun!==void 0,uY2=globalThis.Deno?.version?.deno!==void 0,pY2=globalThis.process?.versions?.electron!==void 0,dY2=globalThis.navigator?.userAgent?.includes("jsdom")===!0,cY2=typeof WorkerGlobalScope<"u"&&globalThis instanceof WorkerGlobalScope,lY2=typeof DedicatedWorkerGlobalScope<"u"&&globalThis instanceof DedicatedWorkerGlobalScope,iY2=typeof SharedWorkerGlobalScope<"u"&&globalThis instanceof SharedWorkerGlobalScope,aY2=typeof ServiceWorkerGlobalScope<"u"&&globalThis instanceof ServiceWorkerGlobalScope,Nm=globalThis.navigator?.userAgentData?.platform,nY2=Nm==="macOS"||globalThis.navigator?.platform==="MacIntel"||globalThis.navigator?.userAgent?.includes(" Mac ")===!0||globalThis.process?.platform==="darwin",rY2=Nm==="Windows"||globalThis.navigator?.platform==="Win32"||globalThis.process?.platform==="win32",sY2=Nm==="Linux"||globalThis.navigator?.platform?.startsWith("Linux")===!0||globalThis.navigator?.userAgent?.includes(" Linux ")===!0||globalThis.process?.platform==="linux",oY2=Nm==="iOS"||globalThis.navigator?.platform==="MacIntel"&&globalThis.navigator?.maxTouchPoints>1||/iPad|iPhone|iPod/.test(globalThis.navigator?.platform),tY2=Nm==="Android"||globalThis.navigator?.platform==="Android"||globalThis.navigator?.userAgent?.includes(" Android ")===!0||globalThis.process?.platform==="android";var q2="\x1B[",Am="\x1B]",WT="\x07",Lm=";",T76=!M41&&Ab1.env.TERM_PROGRAM==="Apple_Terminal",He8=!M41&&Ab1.platform==="win32",Be8=M41?()=>{throw Error("`process.cwd()` only works in Node.js, not the browser.")}:Ab1.cwd,De8=(J,Q)=>{if(typeof J!=="number")throw TypeError("The `x` argument is required");if(typeof Q!=="number")return q2+(J+1)+"G";return q2+(Q+1)+Lm+(J+1)+"H"},Me8=(J,Q)=>{if(typeof J!=="number")throw TypeError("The `x` argument is required");let Z="";if(J<0)Z+=q2+-J+"D";else if(J>0)Z+=q2+J+"C";if(Q<0)Z+=q2+-Q+"A";else if(Q>0)Z+=q2+Q+"B";return Z},C76=(J=1)=>q2+J+"A",Ve8=(J=1)=>q2+J+"B",Ne8=(J=1)=>q2+J+"C",Le8=(J=1)=>q2+J+"D",S76=q2+"G",Ae8=T76?"\x1B7":q2+"s",Oe8=T76?"\x1B8":q2+"u",je8=q2+"6n",Re8=q2+"E",we8=q2+"F",Ie8=q2+"?25l",Ee8=q2+"?25h",$e8=(J)=>{let Q="";for(let Z=0;Z<J;Z++)Q+=v76+(Z<J-1?C76():"");if(J)Q+=S76;return Q},Pe8=q2+"K",Te8=q2+"1K",v76=q2+"2K",Ce8=q2+"J",Se8=q2+"1J",Lb1=q2+"2J",ve8=q2+"S",ke8=q2+"T",_e8="\x1Bc",be8=He8?`${Lb1}${q2}0f`:`${Lb1}${q2}3J${q2}H`,xe8=q2+"?1049h",ye8=q2+"?1049l",fe8=WT,he8=(J,Q)=>[Am,"8",Lm,Lm,Q,WT,J,Am,"8",Lm,Lm,WT].join(""),ge8=(J,Q={})=>{let Z=`${Am}1337;File=inline=1`;if(Q.width)Z+=`;width=${Q.width}`;if(Q.height)Z+=`;height=${Q.height}`;if(Q.preserveAspectRatio===!1)Z+=";preserveAspectRatio=0";return Z+":"+Buffer.from(J).toString("base64")+WT},me8={setCwd:(J=Be8())=>`${Am}50;CurrentDir=${J}${WT}`,annotation(J,Q={}){let Z=`${Am}1337;`,X=Q.x!==void 0,Y=Q.y!==void 0;if((X||Y)&&!(X&&Y&&Q.length!==void 0))throw Error("`x`, `y` and `length` must be defined when `x` or `y` is defined");if(J=J.replaceAll("|",""),Z+=Q.isHidden?"AddHiddenAnnotation=":"AddAnnotation=",Q.length>0)Z+=(X?[J,Q.length,Q.x,Q.y]:[Q.length,J]).join("|");else Z+=J;return Z+WT}};var N41=Y8(h76(),1);function JV(J,Q,{target:Z="stdout",...X}={}){if(!N41.default[Z]){if(X.fallback===!1)return J;return typeof X.fallback==="function"?X.fallback(J,Q):`${J} (​${Q}​)`}return V41.link(J,Q)}JV.isSupported=N41.default.stdout;JV.stderr=(J,Q,Z={})=>JV(J,Q,{target:"stderr",...Z});JV.stderr.isSupported=N41.default.stderr;F0();dG();class Ib1{enabled;commandCounts=new Map;timer=null;bufferTimeMs=1e4;constructor(J){this.enabled=J;this.startTimer()}startTimer(){this.timer=setInterval(()=>{this.flushEvents()},this.bufferTimeMs)}async flushEvents(){if(this.commandCounts.size===0||!await this.enabled())return;let J=Array.from(this.commandCounts.entries()).map(([Q,Z])=>({feature:"cli.command",action:Q,source:{client:"cli",clientVersion:"0.0.1759694482-g906de2"},parameters:{metadata:{count:Z}},timestamp:Date.now()*1000}));this.commandCounts.clear();try{let Q=JSON.stringify(J);await Ze1(Q)}catch(Q){l.error("Failed to export command telemetry events",Q)}}async submit(J){if(!await this.enabled()||this.timer===null)return;let Q=this.commandCounts.get(J)||0;this.commandCounts.set(J,Q+1)}async dispose(){if(await this.flushEvents(),this.timer!==null)clearInterval(this.timer),this.timer=null}}F0();class L41 extends Error{constructor(J="Thread has no messages to compact"){super(J);this.name="NoMessagesToCompactError"}}class oZ{message;name;constructor(J){this.message=J;this.name="InformationMessage"}}function g76(J){if(J instanceof L41)return{title:"Cannot compact thread",description:"Thread has no messages to compact.",type:"error"};if(J instanceof oZ)return{title:"Info",description:J.message,type:"info"};return l.warn("Unknown error type encountered",{name:J.name,message:J.message,stack:J.stack}),{title:"Error",description:J.message||"An unexpected error occurred.",type:"error"}}var re8={connect:{name:"connect",description:"Connect CLI to web interface for current thread access",execute:async(J,Q)=>{try{let{connectedClientsService:Z}=J;await Z.start({clientId:J.clientId,currentThreadID:J.worker.thread.id});let Y=Z.getCurrentStatus().clientID||"unknown",{connectBackground:K}=await Promise.resolve().then(() => (h_1(),L26));return(await K({worker:J.worker},{clientId:J.clientId,onUserDisconnect:()=>{Z.sendStatus({connected:!1,enabled:!1,errorMessage:"Disconnected by user via web interface"})}})).promise.then(()=>{Z.sendStatus({connected:!0,errorMessage:void 0})}).catch((G)=>{Z.sendStatus({connected:!1,errorMessage:G.message})}),new oZ(`Started connecting to Amp web interface
5805
+ ... (output truncated at ${XH} characters)`;Y({success:V,output:A.trim(),error:!V?L.trim()||"Command failed":void 0,exitCode:M??void 0})}),W.on("error",(M)=>{clearTimeout(U);let V=M.message;if(z)V=`Command timed out after ${Z}ms`;else if(M.message.includes("operation was aborted")||M.name==="AbortError")V="The command was aborted";Y({success:!1,output:F.join(""),error:V})})})}function Ue8(J,Q){let{filePath:Z,interpreter:X,extension:Y}=J;if(process.platform==="win32")return Fe8(Z,X?[...X]:null,Y,Q);else return We8(Z,X?[...X]:null,Y,Q)}function We8(J,Q,Z,X){if(Q&&Q.length>0&&Q[0])return[Q[0],[...Q.slice(1),J,...X]];else return[J,X]}function Fe8(J,Q,Z,X){if(Q&&Q.length>0&&Q[0])return[Q[0],[...Q.slice(1),J,...X]];switch(Z.toLowerCase()){case".bat":case".cmd":return["cmd.exe",["/c",J,...X]];case".ps1":return["powershell.exe",["-ExecutionPolicy","Bypass","-File",J,...X]];case".exe":return[J,X];default:return[J,X]}}F0();Ew();O2();Iw();Y7();fV();dG();fB();n6();k0();import{mkdtemp as ie8,readFile as ae8,unlink as ne8,writeFile as _K2}from"fs/promises";var V41={};V6(V41,{scrollUp:()=>ve8,scrollDown:()=>ke8,link:()=>he8,image:()=>ge8,iTerm:()=>me8,exitAlternativeScreen:()=>ye8,eraseUp:()=>Se8,eraseStartLine:()=>Te8,eraseScreen:()=>Lb1,eraseLines:()=>$e8,eraseLine:()=>v76,eraseEndLine:()=>Pe8,eraseDown:()=>Ce8,enterAlternativeScreen:()=>xe8,cursorUp:()=>C76,cursorTo:()=>De8,cursorShow:()=>Ee8,cursorSavePosition:()=>Ae8,cursorRestorePosition:()=>Oe8,cursorPrevLine:()=>we8,cursorNextLine:()=>Re8,cursorMove:()=>Me8,cursorLeft:()=>S76,cursorHide:()=>Ie8,cursorGetPosition:()=>je8,cursorForward:()=>Ne8,cursorDown:()=>Ve8,cursorBackward:()=>Le8,clearTerminal:()=>be8,clearScreen:()=>_e8,beep:()=>fe8});import Ab1 from"node:process";var M41=globalThis.window?.document!==void 0,gY2=globalThis.process?.versions?.node!==void 0,mY2=globalThis.process?.versions?.bun!==void 0,uY2=globalThis.Deno?.version?.deno!==void 0,pY2=globalThis.process?.versions?.electron!==void 0,dY2=globalThis.navigator?.userAgent?.includes("jsdom")===!0,cY2=typeof WorkerGlobalScope<"u"&&globalThis instanceof WorkerGlobalScope,lY2=typeof DedicatedWorkerGlobalScope<"u"&&globalThis instanceof DedicatedWorkerGlobalScope,iY2=typeof SharedWorkerGlobalScope<"u"&&globalThis instanceof SharedWorkerGlobalScope,aY2=typeof ServiceWorkerGlobalScope<"u"&&globalThis instanceof ServiceWorkerGlobalScope,Nm=globalThis.navigator?.userAgentData?.platform,nY2=Nm==="macOS"||globalThis.navigator?.platform==="MacIntel"||globalThis.navigator?.userAgent?.includes(" Mac ")===!0||globalThis.process?.platform==="darwin",rY2=Nm==="Windows"||globalThis.navigator?.platform==="Win32"||globalThis.process?.platform==="win32",sY2=Nm==="Linux"||globalThis.navigator?.platform?.startsWith("Linux")===!0||globalThis.navigator?.userAgent?.includes(" Linux ")===!0||globalThis.process?.platform==="linux",oY2=Nm==="iOS"||globalThis.navigator?.platform==="MacIntel"&&globalThis.navigator?.maxTouchPoints>1||/iPad|iPhone|iPod/.test(globalThis.navigator?.platform),tY2=Nm==="Android"||globalThis.navigator?.platform==="Android"||globalThis.navigator?.userAgent?.includes(" Android ")===!0||globalThis.process?.platform==="android";var q2="\x1B[",Am="\x1B]",WT="\x07",Lm=";",T76=!M41&&Ab1.env.TERM_PROGRAM==="Apple_Terminal",He8=!M41&&Ab1.platform==="win32",Be8=M41?()=>{throw Error("`process.cwd()` only works in Node.js, not the browser.")}:Ab1.cwd,De8=(J,Q)=>{if(typeof J!=="number")throw TypeError("The `x` argument is required");if(typeof Q!=="number")return q2+(J+1)+"G";return q2+(Q+1)+Lm+(J+1)+"H"},Me8=(J,Q)=>{if(typeof J!=="number")throw TypeError("The `x` argument is required");let Z="";if(J<0)Z+=q2+-J+"D";else if(J>0)Z+=q2+J+"C";if(Q<0)Z+=q2+-Q+"A";else if(Q>0)Z+=q2+Q+"B";return Z},C76=(J=1)=>q2+J+"A",Ve8=(J=1)=>q2+J+"B",Ne8=(J=1)=>q2+J+"C",Le8=(J=1)=>q2+J+"D",S76=q2+"G",Ae8=T76?"\x1B7":q2+"s",Oe8=T76?"\x1B8":q2+"u",je8=q2+"6n",Re8=q2+"E",we8=q2+"F",Ie8=q2+"?25l",Ee8=q2+"?25h",$e8=(J)=>{let Q="";for(let Z=0;Z<J;Z++)Q+=v76+(Z<J-1?C76():"");if(J)Q+=S76;return Q},Pe8=q2+"K",Te8=q2+"1K",v76=q2+"2K",Ce8=q2+"J",Se8=q2+"1J",Lb1=q2+"2J",ve8=q2+"S",ke8=q2+"T",_e8="\x1Bc",be8=He8?`${Lb1}${q2}0f`:`${Lb1}${q2}3J${q2}H`,xe8=q2+"?1049h",ye8=q2+"?1049l",fe8=WT,he8=(J,Q)=>[Am,"8",Lm,Lm,Q,WT,J,Am,"8",Lm,Lm,WT].join(""),ge8=(J,Q={})=>{let Z=`${Am}1337;File=inline=1`;if(Q.width)Z+=`;width=${Q.width}`;if(Q.height)Z+=`;height=${Q.height}`;if(Q.preserveAspectRatio===!1)Z+=";preserveAspectRatio=0";return Z+":"+Buffer.from(J).toString("base64")+WT},me8={setCwd:(J=Be8())=>`${Am}50;CurrentDir=${J}${WT}`,annotation(J,Q={}){let Z=`${Am}1337;`,X=Q.x!==void 0,Y=Q.y!==void 0;if((X||Y)&&!(X&&Y&&Q.length!==void 0))throw Error("`x`, `y` and `length` must be defined when `x` or `y` is defined");if(J=J.replaceAll("|",""),Z+=Q.isHidden?"AddHiddenAnnotation=":"AddAnnotation=",Q.length>0)Z+=(X?[J,Q.length,Q.x,Q.y]:[Q.length,J]).join("|");else Z+=J;return Z+WT}};var N41=Y8(h76(),1);function JV(J,Q,{target:Z="stdout",...X}={}){if(!N41.default[Z]){if(X.fallback===!1)return J;return typeof X.fallback==="function"?X.fallback(J,Q):`${J} (​${Q}​)`}return V41.link(J,Q)}JV.isSupported=N41.default.stdout;JV.stderr=(J,Q,Z={})=>JV(J,Q,{target:"stderr",...Z});JV.stderr.isSupported=N41.default.stderr;F0();dG();class Ib1{enabled;commandCounts=new Map;timer=null;bufferTimeMs=1e4;constructor(J){this.enabled=J;this.startTimer()}startTimer(){this.timer=setInterval(()=>{this.flushEvents()},this.bufferTimeMs)}async flushEvents(){if(this.commandCounts.size===0||!await this.enabled())return;let J=Array.from(this.commandCounts.entries()).map(([Q,Z])=>({feature:"cli.command",action:Q,source:{client:"cli",clientVersion:"0.0.1759723320-g18aba8"},parameters:{metadata:{count:Z}},timestamp:Date.now()*1000}));this.commandCounts.clear();try{let Q=JSON.stringify(J);await Ze1(Q)}catch(Q){l.error("Failed to export command telemetry events",Q)}}async submit(J){if(!await this.enabled()||this.timer===null)return;let Q=this.commandCounts.get(J)||0;this.commandCounts.set(J,Q+1)}async dispose(){if(await this.flushEvents(),this.timer!==null)clearInterval(this.timer),this.timer=null}}F0();class L41 extends Error{constructor(J="Thread has no messages to compact"){super(J);this.name="NoMessagesToCompactError"}}class oZ{message;name;constructor(J){this.message=J;this.name="InformationMessage"}}function g76(J){if(J instanceof L41)return{title:"Cannot compact thread",description:"Thread has no messages to compact.",type:"error"};if(J instanceof oZ)return{title:"Info",description:J.message,type:"info"};return l.warn("Unknown error type encountered",{name:J.name,message:J.message,stack:J.stack}),{title:"Error",description:J.message||"An unexpected error occurred.",type:"error"}}var re8={connect:{name:"connect",description:"Connect CLI to web interface for current thread access",execute:async(J,Q)=>{try{let{connectedClientsService:Z}=J;await Z.start({clientId:J.clientId,currentThreadID:J.worker.thread.id});let Y=Z.getCurrentStatus().clientID||"unknown",{connectBackground:K}=await Promise.resolve().then(() => (h_1(),L26));return(await K({worker:J.worker},{clientId:J.clientId,onUserDisconnect:()=>{Z.sendStatus({connected:!1,enabled:!1,errorMessage:"Disconnected by user via web interface"})}})).promise.then(()=>{Z.sendStatus({connected:!0,errorMessage:void 0})}).catch((G)=>{Z.sendStatus({connected:!1,errorMessage:G.message})}),new oZ(`Started connecting to Amp web interface
5806
5806
  Client ID: ${Y}
5807
5807
  You can now send messages from the web interface to this thread`)}catch(Z){return J.connectedClientsService.sendStatus({connected:!1,errorMessage:Z.message}),Error(`Failed to start connection: ${Z.message}`)}}}};class Eb1{commands;customRegistry;latestCustom=[];telemetrySubmitter;constructor(J=uT()){this.customRegistry=J,this._initBaseCommands(!1),this.customRegistry.commands.subscribe((Q)=>this.latestCustom=Q),this.telemetrySubmitter=new Ib1(async()=>{try{return(await d8()).settings["experimental.cli.commandTelemetry.enabled"]===!0}catch{return!1}}),j9.pipe(S0((Q)=>Q.settings["internal.modes"]),P8()).subscribe((Q)=>{this._initBaseCommands(Q??!1)})}_initBaseCommands(J){if(this.commands={...se8},process.env.AMP_CONNECT==="1")Object.assign(this.commands,re8);if(J)Object.assign(this.commands,oe8)}async execute(J,Q,Z=[],X){this.telemetrySubmitter.submit(J).catch((G)=>{l.debug("Failed to submit command telemetry",G)});let Y=this.commands[J];if(Y)return Y.execute(Q,Z);let K=this.latestCustom.find((G)=>G.name===J),q=await Nb1(J,Z,this.customRegistry,{signal:X});if(q.success)if(K?.kind==="markdown"){Q.editorDispatch({type:"set-input",input:q.output});return}else{Q.worker.handle({type:"user:message",message:{content:[{type:"text",text:q.output}]}});return}return Error(q.error??`Command '${J}' failed`)}query(J,Q,Z){let X=J.toLowerCase(),Y=Object.values(this.commands).filter((q)=>q.name.toLowerCase().includes(X)).filter((q)=>{if(!Q||!q.isVisible)return!0;return q.isVisible(Q,Z)}),K=this.latestCustom.filter((q)=>q.available&&q.name.toLowerCase().includes(X)).map((q)=>({name:q.name,description:"Custom command",requiresArgs:q.kind==="executable",execute:(G,z)=>this.execute(q.name,G,z??[])}));return[...Y,...K]}async cleanup(){await this.telemetrySubmitter.dispose()}get(J){let Q=this.commands[J];if(Q)return Q;let Z=this.latestCustom.find((X)=>X.name===J);return{name:J,description:"Custom command",requiresArgs:Z?.kind==="executable",execute:(X,Y)=>this.execute(J,X,Y??[])}}}var se8={"generate-agent-file":{name:"generate-agent-file",description:`Generate an ${JJ} file in the current workspace`,execute:async(J,Q)=>{J.worker.handle({type:"user:message",message:{content:[{type:"text",text:UX0}]}});return}},compact:{name:"compact",description:"Compact the thread. Optional: /compact [message] to queue a message after compaction",execute:async(J,Q)=>{if(J.thread.messages.length===0)return new L41;if(Q&&Q.length>0){let X=[{type:"text",text:Q.join(" ").trim()}],Y=J.takeImageAttachments?.()??[];if(Y.length>0)X.push(...Y);J.worker.handle({type:"user:message-queue:enqueue",message:{content:X}})}try{await J.worker.summarizeThread()}catch(Z){return Z instanceof Error?Z:Error("Failed to compact thread")}}},editor:{name:"editor",description:"Open $EDITOR to write a prompt",launchesWindow:!0,execute:async(J,Q)=>{try{let Z=process.env.EDITOR||process.env.VISUAL||"nano",X=await ie8(u76.join(le8(),"amp-edit-")),Y=u76.join(X,"message.amp.md");m76(`${Z} "${Y}"`,{stdio:"inherit"}),process.stdout.write("\x1B[?25l");try{let q=(await ae8(Y,"utf-8")).trim();if(q)J.editorDispatch({type:"set-input",input:q})}catch(K){if(K?.code==="ENOENT")return;return l.error("Failed to read temporary file",K),Error("Failed to read editor content")}try{await ne8(Y),await ce8(X)}catch(K){l.warn("Failed to clean up temporary file",K)}return}catch(Z){return l.error("Failed to open editor",Z),Error("Failed to open editor")}}},help:{name:"help",description:"Show help and hotkeys",execute:async(J,Q)=>{J.openHelp();return}},permissions:{name:"permissions",description:"Edit permission rules in $EDITOR, or `/permissions off|on` to toggle for this session",launchesWindow:!0,execute:async(J,Q)=>{if(Q&&Q.length>0){let Y=Q[0]?.trim().toLowerCase();switch(Y){case"on":try{return PH("dangerouslyAllowAll",!1),new oZ("Amp is now following permissions rules for this session")}catch(K){return l.error("Failed to set dangerously allow all setting",K),Error("Failed to enable permissions for this session")}case"off":try{return PH("dangerouslyAllowAll",!0),new oZ("Permissions disabled for this session - you will NOT be asked for confirmation before Amp runs a command.")}catch(K){return l.error("Failed to set dangerously allow all setting",K),Error("Failed to disable permissions for this session")}case"edit":break;default:return Error(`Invalid option: ${Y}. Use: on, off, or edit (or no argument for edit)`)}}let Z=await zT();if(Z===null)return Error("No editor found, please set $EDITOR to edit permissions");let X="";try{let Y={stdin:process.stdin,stdout:process.stdout,stderr:{write:(K)=>{return X=K.toString(),!0}},exit:(K)=>{if(K!==0)throw l.error("editPermissions exited with status",K),Error(X)},settingsFile:J.settingsFilePath,resolveEditor:zT};await B41(Y);return}catch(Y){l.error("failed to open permissions editor:",Y);let K=Y instanceof Error?`: ${Y.message}`:"";return Error(`Failed to open ${Z}${K}`)}finally{process.stdout.write("\x1B[?25l")}}},new:{name:"new",description:"Start a new thread",execute:async(J,Q)=>{try{await J.startNewThread();return}catch(Z){return l.error("Failed to start new thread",Z),Error("Failed to start new thread")}},isVisible:(J)=>J.messages.length!==0},continue:{name:"continue",description:"Continue an existing thread",requiresArgs:!1,requiresPicker:!0,execute:async(J,Q)=>{try{if(Q&&Q.length>0){let Z=Q[0]?.trim();if(!Z)return Error("Invalid thread ID provided");return await J.switchToThread(Z),new oZ(`Switched to existing thread: ${Z}`)}await J.pickAndContinueThread();return}catch(Z){return l.error("Failed to continue thread",Z),Error("Failed to continue thread")}}},queue:{name:"queue",description:"Queue a message to send when inference completes. If no inference running, sends immediately.",requiresArgs:!0,execute:async(J,Q)=>{if(!Q||Q.length===0)return Error("Queue command requires a message argument. Usage: /queue <message>");let X=[{type:"text",text:Q.join(" ").trim()}],Y=J.takeImageAttachments?.()??[];if(Y.length>0)X.push(...Y);J.worker.handle({type:"user:message-queue:enqueue",message:{content:X}})}},dequeue:{name:"dequeue",description:"Dequeue all messages and restore them to the prompt editor",execute:async(J,Q)=>{let Z=J.thread.queuedMessages??[];if(Z.length===0)return;let Y=Z.map((K)=>{return K.queuedMessage.content.filter((G)=>G.type==="text").map((G)=>G.text).join("").trim()}).filter(Boolean).join(`
5808
5808
  `).trim();await J.worker.handle({type:"user:message-queue:discard"}),J.editorDispatch({type:"set-input",input:Y})},isVisible:(J)=>(J.queuedMessages?.length??0)>0},share:{name:"share",description:"Set thread visibility - `/share private|workspace|group|public`",execute:async(J,Q)=>{let{thread:Z,threadSyncService:X,ampURL:Y}=J;if(!Q||Q.length===0)return Error("Please specify a visibility option: private, workspace, group, or public");let K=Rv(new URL(Y),Z.id).toString(),G=`Thread URL: ${JV(K,K,{fallback:()=>K})}`,z=Q[0]?.trim().toLowerCase(),U;switch(z){case"private":U={visibility:"private",sharedGroupIDs:[]};break;case"workspace":U={visibility:"thread_workspace_shared"};break;case"group":U={visibility:"private",sharedGroupIDs:[],shareWithAllCreatorGroups:!0};break;case"public":U={visibility:"public"};break;default:return Error(`Invalid visibility option: ${z}. Use: private, workspace, group, or public`)}try{return await X.updateThreadMeta(Z.id,U),new oZ(`${G}
@@ -5996,7 +5996,7 @@ ${Q}`),this.textController.clear(),this.textController.insertText(this.pendingTr
5996
5996
  `),J.stdout.write(`Thread: ${F}
5997
5997
  `),J.stdout.write(`Continue this thread with: amp threads continue ${U}
5998
5998
  `)}}function v49(J){let Q=0;for(let Y=0;Y<J.length;Y++){let K=J.charCodeAt(Y);Q=(Q<<5)-Q+K,Q=Q&Q}let Z=[9,10,11,12,13,14,15,208,209,210,211,212,213,214,215],X=Math.abs(Q)%Z.length;return h1.index(Z[X])}ib1();if(process.env.AMP_PWD)try{process.chdir(process.env.AMP_PWD),delete process.env.AMP_PWD}catch(J){o2.write(`Failed to change directory to ${process.env.AMP_PWD}: ${J}
5999
- `)}var cf1=df1.join(Ou1||df1.join(process.env.HOME||process.cwd(),".local","state"),"amp","last-thread-id");function y49(J){process.emitWarning=function(Q,Z,X,Y){let K=typeof Q==="string"?Q:Q.message||String(Q),q=Z||"Warning",G=!1;J.warn(K,{name:q,code:X})}}function MV(J,Q){if(J.getOptionValueSourceWithGlobals("dangerouslyAllowAll")==="cli")PH("dangerouslyAllowAll",Q.dangerouslyAllowAll);if(J.getOptionValueSourceWithGlobals("tryGpt5")==="cli")throw new N2("The --try-gpt5 flag has been removed.",1,`GPT-5 is now available as the oracle. Read why: ${e6.blue("https://ampcode.com/news/gpt-5-oracle")}`);if(J.getOptionValueSourceWithGlobals("agentMode")==="cli")PH("experimental.agentMode",Q.agentMode)}var f49=P0.union([P0.object({command:P0.string(),args:P0.array(P0.string()).optional(),env:P0.record(P0.string(),P0.string()).optional()}).strict(),P0.object({url:P0.string()}).strict()]),h49=P0.record(P0.string(),f49);async function if1(J){try{await _49(df1.dirname(cf1),{recursive:!0}),await b49(cf1,J,"utf-8")}catch(Q){l.debug("Failed to save last thread ID",Q)}}async function g49(){try{return(await wX6(cf1,"utf-8")).trim()}catch(J){return null}}async function m49(J){let Q;try{Q=JSON.parse(J)}catch(Z){throw Error(`Failed to parse --mcp-config as JSON: ${Z instanceof Error?Z.message:String(Z)}`)}try{return h49.parse(Q)}catch(Z){if(Z instanceof P0.ZodError){let X=Z.issues.map((Y)=>`${Y.path.join(".")}: ${Y.message}`).join(", ");throw Error(`Invalid MCP server configuration: ${X}`)}throw Error(`Failed to validate MCP server configuration: ${String(Z)}`)}}function u49(J,Q){return{...J,async get(Z){if(Z==="mcpServers"){let X=await J.get(Z)||{},Y={};if(typeof X==="object")for(let[K,q]of Object.entries(X))Y[K]={...q,_target:"global"};for(let[K,q]of Object.entries(Q))Y[K]={...q,_target:"workspace"};return Y}return J.get(Z)},async keys(){let Z=await J.keys();if(!Z.includes("mcpServers"))Z.push("mcpServers");return Z},[Symbol.dispose](){J[Symbol.dispose]()}}}var OX6=[{name:"notifications",long:"notifications",type:"flag",description:(J)=>`${J?"Enable":"Disable"} sound notifications (enabled by default when not in execute mode)`},{name:"color",long:"color",type:"flag",description:(J)=>`${J?"Enable":"Disable"} color output (enabled by default if stdout and stderr are sent to a TTY)`,deprecated:!0},{name:"settingsFile",long:"settings-file",type:"option",default:process.env.AMP_SETTINGS_FILE??qG,description:`Custom settings file path (overrides the default location ${qG})`},{name:"logLevel",long:"log-level",type:"option",description:`Set log level (${Object.keys(l).join(", ")})`},{name:"logFile",long:"log-file",type:"option",description:`Set log file location (overrides the default location ${P_1})`},{name:"format",long:"format",type:"option",description:"output using the standard or new-ui. Options: `ui`, `new-ui`",choices:["ui","jsonl","new-ui"],hidden:!0,deprecated:!0},{name:"dangerouslyAllowAll",long:"dangerously-allow-all",type:"switch",default:!1,description:"Disable all command confirmation prompts (agent will execute all commands without asking)"},{name:"jetbrains",long:"jetbrains",type:"flag",default:GG(),description:(J)=>J?"Enable JetBrains integration. When enabled, Amp automatically includes your open JetBrains file and text selection with every message.":"Disable JetBrains integration."},{name:"ide",long:"ide",type:"flag",default:qb1(),hidden:!0,description:(J)=>J?"Enable IDE connection. When enabled, Amp automatically includes your open IDE's file and text selection with every message.":"Disable IDE connection."},{name:"interactive",long:"interactive",type:"flag",description:(J)=>J?"Enable interactive mode. This will enable the interactive UI.":"Disable interactive mode. This will disable the interactive UI.",hidden:!0,deprecated:!0},{name:"mcpConfig",long:"mcp-config",type:"option",description:"JSON configuration or file path for MCP servers to merge with existing settings"},{name:"tryGpt5",long:"try-gpt5",type:"switch",default:!1,description:"[DEPRECATED] Try GPT-5 as the primary agent model (see https://ampcode.com/news/gpt-5-oracle)",deprecated:!0},{name:"agentMode",long:"agent-mode",type:"option",description:"Set the experimental agent mode configuration",hidden:!0,choices:Dj}],jX6=(J)=>("deprecated"in J)&&J.deprecated===!0,p49=(J)=>("hidden"in J)&&J.hidden===!0,d49=(J)=>("default"in J),c49=(J)=>("default"in J)?J.default:void 0;function l49(J,Q){let Z=Q.args[0],X=Q.commands.map((K)=>K.name());if(Z&&!Z.includes(" ")&&Z.length<30&&!/[./\\]/.test(Z)){let K=X.filter((G)=>Z.includes(G)||G.includes(Z)),q="Run amp --help for a list of available commands.";if(K.length>0)q=`Did you mean: ${K.join(", ")}? Or run amp --help for all commands.`;throw new N2(jK.unknownCommand(Z),1,q)}}var IX6=null;function zk2(){return IX6}function i71(J){return{...J,getThreadEnvironment:g21,vfs:et1({os:J.fileSystem}),fileChangeTrackerStorage:new Iv(J.fileSystem),generateThreadTitle:ia,deleteThread:(Q)=>J.threadHistoryService.delete(Q)}}var af1=b0.file(x49.homedir()),EX6=process.env.XDG_CONFIG_HOME?b0.file(process.env.XDG_CONFIG_HOME):p0.joinPath(af1,".config");async function VV(J,Q){Ed1("0.0.1759694482-g906de2");let Z=nJ1({storage:J.settings,secretStorage:J.secrets,workspaceRoots:J0.of([b0.file(process.cwd())]),defaultAmpURL:J.ampURL,defaultCacheDirectory:$_1,homeDir:af1,userConfigDir:EX6}),X=await d8();l.debug("Global configuration initialized",{hasCacheDirectory:!!X.settings.cacheDirectory,settingsKeys:Object.keys(X.settings)});let Y=Ol(zj()),K=_t1({configService:Z,toolService:Y}),q=L30(Y,b9,ro).catch((L)=>{l.warn("Toolbox registration failed, continuing anyway:",L)}),G=K.initialized.catch((L)=>{l.warn("MCP service initialization failed, continuing anyway:",L)});if(J.executeMode)await Promise.all([G,q]);if(Q.jetbrains)$d1(!0);if(Q.ide&&qb1())Pd1(!0);if(N16(Y),Q.jetbrains)Y.registerTool(Nn);else if(Q.ide)Y.registerTool(GY0);let z;if(!J.executeMode)z=new e21(process.cwd(),{},!0);else z=new class extends e21{async start(){}async query(){return[]}getStats(){return{state:"unstarted",stats:[]}}dispose(){}};if(!await J.secrets.get("apiKey",J.ampURL)){if(g2.write(`No API key found. Starting login flow...
5999
+ `)}var cf1=df1.join(Ou1||df1.join(process.env.HOME||process.cwd(),".local","state"),"amp","last-thread-id");function y49(J){process.emitWarning=function(Q,Z,X,Y){let K=typeof Q==="string"?Q:Q.message||String(Q),q=Z||"Warning",G=!1;J.warn(K,{name:q,code:X})}}function MV(J,Q){if(J.getOptionValueSourceWithGlobals("dangerouslyAllowAll")==="cli")PH("dangerouslyAllowAll",Q.dangerouslyAllowAll);if(J.getOptionValueSourceWithGlobals("tryGpt5")==="cli")throw new N2("The --try-gpt5 flag has been removed.",1,`GPT-5 is now available as the oracle. Read why: ${e6.blue("https://ampcode.com/news/gpt-5-oracle")}`);if(J.getOptionValueSourceWithGlobals("agentMode")==="cli")PH("experimental.agentMode",Q.agentMode)}var f49=P0.union([P0.object({command:P0.string(),args:P0.array(P0.string()).optional(),env:P0.record(P0.string(),P0.string()).optional()}).strict(),P0.object({url:P0.string()}).strict()]),h49=P0.record(P0.string(),f49);async function if1(J){try{await _49(df1.dirname(cf1),{recursive:!0}),await b49(cf1,J,"utf-8")}catch(Q){l.debug("Failed to save last thread ID",Q)}}async function g49(){try{return(await wX6(cf1,"utf-8")).trim()}catch(J){return null}}async function m49(J){let Q;try{Q=JSON.parse(J)}catch(Z){throw Error(`Failed to parse --mcp-config as JSON: ${Z instanceof Error?Z.message:String(Z)}`)}try{return h49.parse(Q)}catch(Z){if(Z instanceof P0.ZodError){let X=Z.issues.map((Y)=>`${Y.path.join(".")}: ${Y.message}`).join(", ");throw Error(`Invalid MCP server configuration: ${X}`)}throw Error(`Failed to validate MCP server configuration: ${String(Z)}`)}}function u49(J,Q){return{...J,async get(Z){if(Z==="mcpServers"){let X=await J.get(Z)||{},Y={};if(typeof X==="object")for(let[K,q]of Object.entries(X))Y[K]={...q,_target:"global"};for(let[K,q]of Object.entries(Q))Y[K]={...q,_target:"workspace"};return Y}return J.get(Z)},async keys(){let Z=await J.keys();if(!Z.includes("mcpServers"))Z.push("mcpServers");return Z},[Symbol.dispose](){J[Symbol.dispose]()}}}var OX6=[{name:"notifications",long:"notifications",type:"flag",description:(J)=>`${J?"Enable":"Disable"} sound notifications (enabled by default when not in execute mode)`},{name:"color",long:"color",type:"flag",description:(J)=>`${J?"Enable":"Disable"} color output (enabled by default if stdout and stderr are sent to a TTY)`,deprecated:!0},{name:"settingsFile",long:"settings-file",type:"option",default:process.env.AMP_SETTINGS_FILE??qG,description:`Custom settings file path (overrides the default location ${qG})`},{name:"logLevel",long:"log-level",type:"option",description:`Set log level (${Object.keys(l).join(", ")})`},{name:"logFile",long:"log-file",type:"option",description:`Set log file location (overrides the default location ${P_1})`},{name:"format",long:"format",type:"option",description:"output using the standard or new-ui. Options: `ui`, `new-ui`",choices:["ui","jsonl","new-ui"],hidden:!0,deprecated:!0},{name:"dangerouslyAllowAll",long:"dangerously-allow-all",type:"switch",default:!1,description:"Disable all command confirmation prompts (agent will execute all commands without asking)"},{name:"jetbrains",long:"jetbrains",type:"flag",default:GG(),description:(J)=>J?"Enable JetBrains integration. When enabled, Amp automatically includes your open JetBrains file and text selection with every message.":"Disable JetBrains integration."},{name:"ide",long:"ide",type:"flag",default:qb1(),hidden:!0,description:(J)=>J?"Enable IDE connection. When enabled, Amp automatically includes your open IDE's file and text selection with every message.":"Disable IDE connection."},{name:"interactive",long:"interactive",type:"flag",description:(J)=>J?"Enable interactive mode. This will enable the interactive UI.":"Disable interactive mode. This will disable the interactive UI.",hidden:!0,deprecated:!0},{name:"mcpConfig",long:"mcp-config",type:"option",description:"JSON configuration or file path for MCP servers to merge with existing settings"},{name:"tryGpt5",long:"try-gpt5",type:"switch",default:!1,description:"[DEPRECATED] Try GPT-5 as the primary agent model (see https://ampcode.com/news/gpt-5-oracle)",deprecated:!0},{name:"agentMode",long:"agent-mode",type:"option",description:"Set the experimental agent mode configuration",hidden:!0,choices:Dj}],jX6=(J)=>("deprecated"in J)&&J.deprecated===!0,p49=(J)=>("hidden"in J)&&J.hidden===!0,d49=(J)=>("default"in J),c49=(J)=>("default"in J)?J.default:void 0;function l49(J,Q){let Z=Q.args[0],X=Q.commands.map((K)=>K.name());if(Z&&!Z.includes(" ")&&Z.length<30&&!/[./\\]/.test(Z)){let K=X.filter((G)=>Z.includes(G)||G.includes(Z)),q="Run amp --help for a list of available commands.";if(K.length>0)q=`Did you mean: ${K.join(", ")}? Or run amp --help for all commands.`;throw new N2(jK.unknownCommand(Z),1,q)}}var IX6=null;function zk2(){return IX6}function i71(J){return{...J,getThreadEnvironment:g21,vfs:et1({os:J.fileSystem}),fileChangeTrackerStorage:new Iv(J.fileSystem),generateThreadTitle:ia,deleteThread:(Q)=>J.threadHistoryService.delete(Q)}}var af1=b0.file(x49.homedir()),EX6=process.env.XDG_CONFIG_HOME?b0.file(process.env.XDG_CONFIG_HOME):p0.joinPath(af1,".config");async function VV(J,Q){Ed1("0.0.1759723320-g18aba8");let Z=nJ1({storage:J.settings,secretStorage:J.secrets,workspaceRoots:J0.of([b0.file(process.cwd())]),defaultAmpURL:J.ampURL,defaultCacheDirectory:$_1,homeDir:af1,userConfigDir:EX6}),X=await d8();l.debug("Global configuration initialized",{hasCacheDirectory:!!X.settings.cacheDirectory,settingsKeys:Object.keys(X.settings)});let Y=Ol(zj()),K=_t1({configService:Z,toolService:Y}),q=L30(Y,b9,ro).catch((L)=>{l.warn("Toolbox registration failed, continuing anyway:",L)}),G=K.initialized.catch((L)=>{l.warn("MCP service initialization failed, continuing anyway:",L)});if(J.executeMode)await Promise.all([G,q]);if(Q.jetbrains)$d1(!0);if(Q.ide&&qb1())Pd1(!0);if(N16(Y),Q.jetbrains)Y.registerTool(Nn);else if(Q.ide)Y.registerTool(GY0);let z;if(!J.executeMode)z=new e21(process.cwd(),{},!0);else z=new class extends e21{async start(){}async query(){return[]}getStats(){return{state:"unstarted",stats:[]}}dispose(){}};if(!await J.secrets.get("apiKey",J.ampURL)){if(g2.write(`No API key found. Starting login flow...
6000
6000
  `),!await i49(J))await nA(),process.exit(1)}let U=await Ge1({isDevelopment:!1}),W=new ZU1(U),F=new JU1(U,{lazy:!0}),H=new aB1(W),B=Q.notifications!==void 0?Q.notifications:!J.executeMode,M=A16({playNotificationSound:async(L)=>{if(B){L16(L);let A=cb1(),O=lb1();if((!A||O)&&X.settings["notifications.system.enabled"]!==!1){if(L==="idle")process.stdout.write("\x1B]777;notify;Amp;Agent is ready\x1B\\");else if(L==="requires-user-input")process.stdout.write("\x1B]777;notify;Amp;Waiting for approval\x1B\\")}}},windowFocused:()=>Promise.resolve(!1),threadService:W});l.info("Starting Amp background services");let V=VX0({threadService:W,threadHistoryService:F,isExtensionDevelopment:!1}),N={configService:Z,toolService:Y,mcpService:K,threadService:W,threadHistoryService:F,threadSummaryService:H,threadSyncService:V,threadStorage:U,secretStorage:J.secrets,settingsStorage:J.settings,fuzzyServer:z,notificationService:M,fileSystem:Q.jetbrains||Q.ide?st1:b9};return{...N,async asyncDispose(){await N.mcpService.dispose(),await N.threadService.asyncDispose(),N.configService.unsubscribe(),N.toolService.dispose(),N.fuzzyServer.dispose(),N.threadSyncService.dispose(),N.settingsStorage[Symbol.dispose]()}}}async function i49(J){if(!J.executeMode){if(!await Bb1("Would you like to log in to Amp? [(y)es, (n)o]: "))return g2.write(`Login cancelled. Run the command again to retry.
6001
6001
  `),!1}return await $X6(J)}async function $X6(J){let Q=k49(32).toString("hex"),Z=await Hb1(J.ampURL,Q);try{await GT(Z)}catch(Y){l.error("Failed to open browser",{error:Y})}let X=await Hb1(J.ampURL,Q,!1);g2.write(`If your browser did not open automatically, visit:
6002
6002
 
@@ -6006,12 +6006,12 @@ ${e6.blue.bold(X)}
6006
6006
  Login successful! You can now use the Amp CLI.
6007
6007
  `),!0}catch(Y){return l.error("Login failed",{error:Y}),o2.write(`
6008
6008
  Login failed: ${Y instanceof Error?Y.message:String(Y)}
6009
- `),!1}}function a49(){let J=new Pg().name("amp").description("AI-powered coding assistant").option("--visibility <visibility>","Set thread visibility (private, public, workspace, group)").configureOutput({writeErr:()=>{}});J.exitOverride((F)=>{if(F.code==="commander.help"||F.code==="commander.version"||F.exitCode===0)sA(),process.exit(0);let H=F.originalError??F;j26(H)}),J.option("-V, --version","output the version number",()=>{g2.write(`0.0.1759694482-g906de2 (released 2025-10-05T20:07:30.957Z)
6010
- `),process.exit(0)}),J.addHelpText("after",R46()),J.configureHelp({formatHelp:w46}),J.command("logout").description("Log out by removing stored API key").action(async(F,H)=>{let B=H.optsWithGlobals(),M=await JY(B);await o49(M)}),J.command("login").description("Log in to Amp").addHelpText("after","If AMP_URL is set during login, it will be persisted to global settings for future CLI invocations, though AMP_URL will continue to take precedence.").action(async(F,H)=>{let B=H.optsWithGlobals(),M=await JY(B);await s49(M,await Jb1(B,M.settings))});let Q=async(F,H,B)=>{nJ1({storage:H.settings,secretStorage:H.secrets,workspaceRoots:J0.of([b0.file(process.cwd())]),defaultAmpURL:H.ampURL,homeDir:af1,userConfigDir:EX6});let M={...H,executeMode:!1};await lf1(M,{...F,startWithPicker:!0},B)},Z=J.command("threads").alias("t").alias("thread").summary("Manage threads").description("Thread management commands. When no subcommand is provided, defaults to listing threads.").action(async(F,H)=>{let B=H.optsWithGlobals(),M=await JY(B);await RX6(B,M,H)});Z.command("new").alias("n").summary("Create a new thread").description("Create a new thread and print its ID. The thread will be empty. You can set the visibility using the --visibility option.").option("--visibility <visibility>","Set thread visibility (private, public, workspace, group)").action(async(F,H)=>{let B=H.optsWithGlobals(),M=await JY(B);await Y79(B,M,H)}),Z.command("continue [threadId]").alias("c").summary("Continue an existing thread").description("Continue an existing thread by resuming the conversation. If no thread ID is provided, the most recently used thread will be continued.").option("--pick","Pick a thread interactively from a list").action(async(F,H,B)=>{let M=B.optsWithGlobals(),V=await JY(M);if(H.pick)await Q(M,V,B);else await X79(M,V,F,B)}),Z.command("fork [threadId]").alias("f").summary("Fork an existing thread").description("Create a new thread by forking an existing one. This copies the conversation history up to the current point and creates a new thread where you can explore different directions. If no thread ID is provided, the most recently used thread will be forked.").action(async(F,H,B)=>{let M=B.optsWithGlobals(),V=await JY(M);await Z79(M,V,F,B)}),Z.command("list").alias("l").alias("ls").summary("List all threads").description("List all your threads with their IDs, names, and last modified times.").action(async(F,H)=>{let B=H.optsWithGlobals(),M=await JY(B);await RX6(B,M,H)}),Z.command("share <threadId>").summary("Share a thread").description("Change thread visibility (private, public, workspace, group) or share with Amp support for debugging. Use --visibility to change who can access the thread, or --support to share with the Amp team for troubleshooting.").alias("s").option("--visibility <visibility>","Set thread visibility (private, public, workspace, group)").option("--support","Share thread with Amp support for debugging").action(async(F,H,B)=>{let M=B.optsWithGlobals(),V=await JY(M);await Q79(M,V,F,B,H.support)}),Z.command("compact <threadId>").alias("co").summary("Compact a thread").description("Compact a thread by creating a summary of the conversation history. This reduces the thread size while preserving the key information and context, making it more token efficient for future use.").action(async(F,H,B)=>{let M=B.optsWithGlobals(),V=await JY(M);await J79(M,V,F,B)}),O76(J,async(F,H)=>{let B=await JY(H);MV(F,H);let M=await VV(B,H);return{context:B,mcpService:M.mcpService,toolService:M.toolService,cleanupTerminal:sA,asyncDispose:M.asyncDispose.bind(M)}}),n46(J),u46(J,async(F)=>{return(await JY(F)).settings}),J.command("connect").description("Connect CLI to web interface for multi-thread management").action(async(F,H)=>{let B=H.optsWithGlobals(),M=await JY(B);MV(H,B);let V=await VV(M,B);try{await f_1(V,{})}finally{await V.asyncDispose(),await sA()}});let X=new Pg().name("install").description("Install required tools like ripgrep to $AMP_HOME/bin").option("--force","Force reinstallation even if already installed").option("--verbose","Show installation progress and results").action(async(F)=>{await zb1(F.force||!1,F.verbose||!1,"0.0.1759694482-g906de2"),process.exit()});J.addCommand(X,{hidden:!0});function Y(F,H,B){let V=typeof F.description==="string"?F.description:B===void 0?F.description(!0):F.description(B),N=new pM(H,V),L=c49(F);if(L)N.default(L);if(N.hidden=p49(F)||jX6(F),"choices"in F)N.choices([...F.choices]);return N}for(let F of OX6)switch(F.type){case"flag":{J.addOption(Y(F,`--${F.long}`)),J.addOption(Y(F,`--no-${F.long}`,!1));break}case"switch":{J.addOption(Y(F,`--${F.long}`,!0));break}default:{J.addOption(Y(F,`--${F.long} <value>`));break}}let K=new pM("-x, --execute [message]","Use execute mode, optionally with user message. In execute mode, agent will execute provided prompt (either as argument, or via stdin). Only last assistant message is printed. Enabled automatically when redirecting stdout.").default(!1);if(J.addOption(K),process.env.AMP_CLI_REMOTE){let F=new pM("-r, --remote","When used with -x/--execute, execute in an async agent on the Amp server.").default(!1);J.addOption(F)}let q=new pM("--stream-json","When used with --execute, output in Claude Code compatible stream JSON format instead of plain text.").default(!1).hideHelp(!0);J.addOption(q);let G=new pM("--stream-json-input","Read JSON Lines user messages from stdin. Requires both --execute and --stream-json.").default(!1).hideHelp(!0);J.addOption(G);let z=new pM("--stats","When used with --execute, output JSON with both result and token usage data (for /evals).").default(!1).hideHelp(!0);if(J.addOption(z),process.env.AMP_CONNECT==="1"){let F=new pM("--client-id <clientId>","Override the client ID for connect functionality (default: amp-<pid>@<hostname>)");J.addOption(F)}J.action(async(F,H)=>{let B=F,M=await JY(B);if(Object.keys(B).forEach((V)=>{let N=OX6.find((L)=>L.name===V);if(N&&jX6(N)&&!d49(N))o2.write(e6.yellow(`Warning: '--${V}' flag is deprecated
6009
+ `),!1}}function a49(){let J=new Pg().name("amp").description("AI-powered coding assistant").option("--visibility <visibility>","Set thread visibility (private, public, workspace, group)").configureOutput({writeErr:()=>{}});J.exitOverride((F)=>{if(F.code==="commander.help"||F.code==="commander.version"||F.exitCode===0)sA(),process.exit(0);let H=F.originalError??F;j26(H)}),J.option("-V, --version","output the version number",()=>{g2.write(`0.0.1759723320-g18aba8 (released 2025-10-06T04:07:47.717Z)
6010
+ `),process.exit(0)}),J.addHelpText("after",R46()),J.configureHelp({formatHelp:w46}),J.command("logout").description("Log out by removing stored API key").action(async(F,H)=>{let B=H.optsWithGlobals(),M=await JY(B);await o49(M)}),J.command("login").description("Log in to Amp").addHelpText("after","If AMP_URL is set during login, it will be persisted to global settings for future CLI invocations, though AMP_URL will continue to take precedence.").action(async(F,H)=>{let B=H.optsWithGlobals(),M=await JY(B);await s49(M,await Jb1(B,M.settings))});let Q=async(F,H,B)=>{nJ1({storage:H.settings,secretStorage:H.secrets,workspaceRoots:J0.of([b0.file(process.cwd())]),defaultAmpURL:H.ampURL,homeDir:af1,userConfigDir:EX6});let M={...H,executeMode:!1};await lf1(M,{...F,startWithPicker:!0},B)},Z=J.command("threads").alias("t").alias("thread").summary("Manage threads").description("Thread management commands. When no subcommand is provided, defaults to listing threads.").action(async(F,H)=>{let B=H.optsWithGlobals(),M=await JY(B);await RX6(B,M,H)});Z.command("new").alias("n").summary("Create a new thread").description("Create a new thread and print its ID. The thread will be empty. You can set the visibility using the --visibility option.").option("--visibility <visibility>","Set thread visibility (private, public, workspace, group)").action(async(F,H)=>{let B=H.optsWithGlobals(),M=await JY(B);await Y79(B,M,H)}),Z.command("continue [threadId]").alias("c").summary("Continue an existing thread").description("Continue an existing thread by resuming the conversation. If no thread ID is provided, the most recently used thread will be continued.").option("--pick","Pick a thread interactively from a list").action(async(F,H,B)=>{let M=B.optsWithGlobals(),V=await JY(M);if(H.pick)await Q(M,V,B);else await X79(M,V,F,B)}),Z.command("fork [threadId]").alias("f").summary("Fork an existing thread").description("Create a new thread by forking an existing one. This copies the conversation history up to the current point and creates a new thread where you can explore different directions. If no thread ID is provided, the most recently used thread will be forked.").action(async(F,H,B)=>{let M=B.optsWithGlobals(),V=await JY(M);await Z79(M,V,F,B)}),Z.command("list").alias("l").alias("ls").summary("List all threads").description("List all your threads with their IDs, names, and last modified times.").action(async(F,H)=>{let B=H.optsWithGlobals(),M=await JY(B);await RX6(B,M,H)}),Z.command("share <threadId>").summary("Share a thread").description("Change thread visibility (private, public, workspace, group) or share with Amp support for debugging. Use --visibility to change who can access the thread, or --support to share with the Amp team for troubleshooting.").alias("s").option("--visibility <visibility>","Set thread visibility (private, public, workspace, group)").option("--support","Share thread with Amp support for debugging").action(async(F,H,B)=>{let M=B.optsWithGlobals(),V=await JY(M);await Q79(M,V,F,B,H.support)}),Z.command("compact <threadId>").alias("co").summary("Compact a thread").description("Compact a thread by creating a summary of the conversation history. This reduces the thread size while preserving the key information and context, making it more token efficient for future use.").action(async(F,H,B)=>{let M=B.optsWithGlobals(),V=await JY(M);await J79(M,V,F,B)}),O76(J,async(F,H)=>{let B=await JY(H);MV(F,H);let M=await VV(B,H);return{context:B,mcpService:M.mcpService,toolService:M.toolService,cleanupTerminal:sA,asyncDispose:M.asyncDispose.bind(M)}}),n46(J),u46(J,async(F)=>{return(await JY(F)).settings}),J.command("connect").description("Connect CLI to web interface for multi-thread management").action(async(F,H)=>{let B=H.optsWithGlobals(),M=await JY(B);MV(H,B);let V=await VV(M,B);try{await f_1(V,{})}finally{await V.asyncDispose(),await sA()}});let X=new Pg().name("install").description("Install required tools like ripgrep to $AMP_HOME/bin").option("--force","Force reinstallation even if already installed").option("--verbose","Show installation progress and results").action(async(F)=>{await zb1(F.force||!1,F.verbose||!1,"0.0.1759723320-g18aba8"),process.exit()});J.addCommand(X,{hidden:!0});function Y(F,H,B){let V=typeof F.description==="string"?F.description:B===void 0?F.description(!0):F.description(B),N=new pM(H,V),L=c49(F);if(L)N.default(L);if(N.hidden=p49(F)||jX6(F),"choices"in F)N.choices([...F.choices]);return N}for(let F of OX6)switch(F.type){case"flag":{J.addOption(Y(F,`--${F.long}`)),J.addOption(Y(F,`--no-${F.long}`,!1));break}case"switch":{J.addOption(Y(F,`--${F.long}`,!0));break}default:{J.addOption(Y(F,`--${F.long} <value>`));break}}let K=new pM("-x, --execute [message]","Use execute mode, optionally with user message. In execute mode, agent will execute provided prompt (either as argument, or via stdin). Only last assistant message is printed. Enabled automatically when redirecting stdout.").default(!1);if(J.addOption(K),process.env.AMP_CLI_REMOTE){let F=new pM("-r, --remote","When used with -x/--execute, execute in an async agent on the Amp server.").default(!1);J.addOption(F)}let q=new pM("--stream-json","When used with --execute, output in Claude Code compatible stream JSON format instead of plain text.").default(!1).hideHelp(!0);J.addOption(q);let G=new pM("--stream-json-input","Read JSON Lines user messages from stdin. Requires both --execute and --stream-json.").default(!1).hideHelp(!0);J.addOption(G);let z=new pM("--stats","When used with --execute, output JSON with both result and token usage data (for /evals).").default(!1).hideHelp(!0);if(J.addOption(z),process.env.AMP_CONNECT==="1"){let F=new pM("--client-id <clientId>","Override the client ID for connect functionality (default: amp-<pid>@<hostname>)");J.addOption(F)}J.action(async(F,H)=>{let B=F,M=await JY(B);if(Object.keys(B).forEach((V)=>{let N=OX6.find((L)=>L.name===V);if(N&&jX6(N)&&!d49(N))o2.write(e6.yellow(`Warning: '--${V}' flag is deprecated
6011
6011
  `))}),H.args.length>0)l49(M,H);await lf1(M,B,H)});let U=new Pg("doctor").summary("Generate support bundle").description("Generate a support bundle for troubleshooting issues. This collects logs, configuration, and system information into a file that can be shared with Amp support for debugging.").option("--output-dir <path>","Directory to save the support bundle",process.cwd()).option("--include-full-logs","Include full log history",!1).allowUnknownOption(!1).action(async(F)=>{await e49(F.outputDir,F.includeFullLogs)});J.addCommand(U);let W=new Pg("update").summary("Update Amp CLI").description("Update Amp CLI to the latest version. You can specify a particular version to install, or leave blank to get the latest stable release.").option("--version <version>","Update to a specific version").allowUnknownOption(!1).action(async(F)=>{await t49(F.version)});return J.addCommand(W),J}async function l71(J,Q){let{thread:Z,visibility:X}=Q,Y=Z?.id??yK(),K=i71(J);if(Z)await J.threadStorage.set(Y,Z);let q=await vJ.getOrCreateForThread(K,Y);if(X)await J.threadSyncService.updateThreadMeta(Y,F41(X));let G=J.threadService.observe(Y).subscribe(async(z)=>{if(X7(z,"assistant"))await if1(Y),G.unsubscribe()});return await q.resume(),q}async function lf1(J,Q,Z){let X=process.stdin,Y=W41(Q);if(Y instanceof Error)tZ(Y.message);let K,q=null;if(Q.streamJsonInput)K="";else if(typeof Q.execute==="string"){K=Q.execute;let j=(await Db1()).trimEnd();if(j)q=j}else K=(await Db1()).trimEnd();if(Q.remote&&!J.executeMode)throw new N2("The -r/--remote flag currently only works with --execute mode",1,'Use: amp --remote --execute "your message"');if(Q.streamJson&&!J.executeMode)throw new N2("The --stream-json flag requires --execute mode",1,'Use: amp --execute "your message" --stream-json');if(Q.streamJsonInput&&!J.executeMode)throw new N2("The --stream-json-input flag requires --execute mode",1,"Use: amp --execute --stream-json --stream-json-input");if(Q.streamJsonInput&&!Q.streamJson)throw new N2("The --stream-json-input flag requires --stream-json",1,"Use: amp --execute --stream-json --stream-json-input");if(Q.stats&&!J.executeMode)throw new N2("The --stats flag requires --execute mode",1,'Use: amp --execute "your message" --stats');if(Q.streamJsonInput&&typeof Q.execute==="string"&&Q.execute.trim()!=="")throw new N2("Do not provide a message argument when using --stream-json-input",1,`Supply messages via stdin JSONL instead: echo '{"type":"user","message":{"role":"user","content":[{"type":"text","text":"your message"}]}}' | amp --execute --stream-json --stream-json-input`);if(J.executeMode&&K===""&&!Q.streamJsonInput)throw new N2("User message must be provided through stdin or as argument when using execute mode",1,`Either pass a message as an argument: amp --execute "your message"
6012
6012
  Or pipe via stdin: echo "your message" | amp --execute`);if(K!==""&&!J.executeMode&&!J.streamJsonMode&&typeof Q.execute!=="string")X=await J76();MV(Z,Q);let G=await VV(J,Q);IX6=G;let z=i71(G),U=async(j)=>{let R=await wX6(j,"utf-8"),I=JSON.parse(R);if(!SU(I.id))throw new N2(jK.invalidThreadId);return l71(G,{visibility:Y,thread:I})},W=async(j)=>{if(!SU(j))throw new N2(jK.invalidThreadId);let R=await G.threadService.get(j)??void 0;return l71(G,{visibility:Y,thread:R})},F=async()=>{try{if(Q.threadId)return W(Q.threadId);else return l71(G,{visibility:Y})}catch(j){if(j instanceof N2)throw j;throw await l21(j,Q.threadId),Error("handleError should have called process.exit()")}},H=async()=>{return l71(G,{visibility:Y})};if(Q.format==="jsonl")o2.write(`jsonl format is deprecated. Version "0.0.1752148945-gd8844f" or earlier is required to use jsonl format.
6013
- `),await nA(),process.exit(1);if(J.executeMode&&Q.remote)await r46(K,q),await G.asyncDispose(),process.exit(0);let B=await F();if(J.executeMode)await k26(B,B.threadID,K,q,G,!!Q.streamJson,!!Q.streamJsonInput,!!Q.stats,J.ampURL),await G.asyncDispose(),process.exit(0);let M=!1,V=!1;if(Q.jetbrains||Q.ide){await nl1();let j=await Tj({jetbrainsOnly:Q.jetbrains});if(j.length===0)if(Q.jetbrains)V=!await G.configService.get("jetbrains.skipInstall");else a5.sendStatus({enabled:!0,connected:!1,authenticated:!1});else if(j.length===1){let R=j[0];if(R)a5.selectConfig(R)}else M=!0}let N=Wb1("0.0.1759694482-g906de2",G.settingsStorage),L=J0.of([b0.file(process.cwd())]),A=uT(void 0,L);if(K)B.handle({type:"user:message",message:{content:[{type:"text",text:K}]}});let O=await d8();await AX6({stdin:X,stdout:process.stdout,history:new u_1,fuzzyServer:G.fuzzyServer,settingsStorage:G.settingsStorage,threadService:G.threadService,threadSyncService:G.threadSyncService,threadID:B.threadID,worker:B,workerDeps:z,configService:G.configService,internalAPIClient:EJ,ampURL:J.ampURL,useGpt5:O.settings.gpt5??!1,startNewThread:H,pickAndContinueThread:async()=>{l.info("Thread picker requested - not yet implemented in TUI")},switchToThread:W,ideClient:a5,connectedClientsService:new Wp,commandRegistry:A,showJetBrainsInstaller:V,showIdePicker:M,startWithPicker:Q.startWithPicker,updateService:N,debugWidgetTree:Q.debugWidgetTree,jetbrainsMode:Q.jetbrains,clientId:Q.clientId}),await G.asyncDispose(),process.exit(0)}async function JY(J){if(J.interactive)o2.write(`Warning: --interactive flag is deprecated. Interactive mode is now the default unless --execute is used or output is redirected.
6014
- `);let Q=!!J.execute||!process.stdout.isTTY&&!J.streamJson,Z=!1,X=process.stdout.isTTY&&process.stderr.isTTY,Y=LU({...J,getHook:process.env.AMP_URL?(G,z)=>{if(G==="url")return Promise.resolve(process.env.AMP_URL);return z()}:void 0});if(await o46(Y),await t46(Y),J.mcpConfig){let G=await m49(J.mcpConfig);Y=u49(Y,G)}let K=await Y.get("url","global");if(!K)K=oQ;if(!EH(K))l.info("Targeting custom Amp server",{ampURL:K});if(Y=pu1(Y),await Y.get("debug.httpLogging"))gu1();return{executeMode:Q,streamJsonMode:Z,isTTY:X,ampURL:K,settings:Y,secrets:s46(await Jb1(J,Y))}}function n49(J){let Q={};for(let Z=0;Z<J.length;Z++){let X=J[Z];if(X?.startsWith("--")){let K=X.slice(2).replace(/-([a-z])/g,(G,z)=>z.toUpperCase()),q=J[Z+1];if(q&&!q.startsWith("--"))Q[K]=q,Z++}}return Q}async function r49(){let J=n49(process.argv);if(X26({logLevel:J.logLevel||process.env.AMP_LOG_LEVEL,logFile:J.logFile||process.env.AMP_LOG_FILE}),y49(l),l.info("Starting Amp CLI.",{version:"0.0.1759694482-g906de2",buildTimestamp:"2025-10-05T20:07:30.957Z",buildType:"'release'"}),parseInt(process.version.slice(1).split(".")[0]??"")<20)throw new N2(jK.nodeVersion(process.version),1,"Please upgrade your Node.js installation from https://nodejs.org");await a49().parseAsync(process.argv)}r49().catch(l21);async function s49(J,Q){if(process.env.AMP_URL)await J.settings.set("url",process.env.AMP_URL,"global"),g2.write(`Saving custom server URL to settings: ${process.env.AMP_URL}
6013
+ `),await nA(),process.exit(1);if(J.executeMode&&Q.remote)await r46(K,q),await G.asyncDispose(),process.exit(0);let B=await F();if(J.executeMode)await k26(B,B.threadID,K,q,G,!!Q.streamJson,!!Q.streamJsonInput,!!Q.stats,J.ampURL),await G.asyncDispose(),process.exit(0);let M=!1,V=!1;if(Q.jetbrains||Q.ide){await nl1();let j=await Tj({jetbrainsOnly:Q.jetbrains});if(j.length===0)if(Q.jetbrains)V=!await G.configService.get("jetbrains.skipInstall");else a5.sendStatus({enabled:!0,connected:!1,authenticated:!1});else if(j.length===1){let R=j[0];if(R)a5.selectConfig(R)}else M=!0}let N=Wb1("0.0.1759723320-g18aba8",G.settingsStorage),L=J0.of([b0.file(process.cwd())]),A=uT(void 0,L);if(K)B.handle({type:"user:message",message:{content:[{type:"text",text:K}]}});let O=await d8();await AX6({stdin:X,stdout:process.stdout,history:new u_1,fuzzyServer:G.fuzzyServer,settingsStorage:G.settingsStorage,threadService:G.threadService,threadSyncService:G.threadSyncService,threadID:B.threadID,worker:B,workerDeps:z,configService:G.configService,internalAPIClient:EJ,ampURL:J.ampURL,useGpt5:O.settings.gpt5??!1,startNewThread:H,pickAndContinueThread:async()=>{l.info("Thread picker requested - not yet implemented in TUI")},switchToThread:W,ideClient:a5,connectedClientsService:new Wp,commandRegistry:A,showJetBrainsInstaller:V,showIdePicker:M,startWithPicker:Q.startWithPicker,updateService:N,debugWidgetTree:Q.debugWidgetTree,jetbrainsMode:Q.jetbrains,clientId:Q.clientId}),await G.asyncDispose(),process.exit(0)}async function JY(J){if(J.interactive)o2.write(`Warning: --interactive flag is deprecated. Interactive mode is now the default unless --execute is used or output is redirected.
6014
+ `);let Q=!!J.execute||!process.stdout.isTTY&&!J.streamJson,Z=!1,X=process.stdout.isTTY&&process.stderr.isTTY,Y=LU({...J,getHook:process.env.AMP_URL?(G,z)=>{if(G==="url")return Promise.resolve(process.env.AMP_URL);return z()}:void 0});if(await o46(Y),await t46(Y),J.mcpConfig){let G=await m49(J.mcpConfig);Y=u49(Y,G)}let K=await Y.get("url","global");if(!K)K=oQ;if(!EH(K))l.info("Targeting custom Amp server",{ampURL:K});if(Y=pu1(Y),await Y.get("debug.httpLogging"))gu1();return{executeMode:Q,streamJsonMode:Z,isTTY:X,ampURL:K,settings:Y,secrets:s46(await Jb1(J,Y))}}function n49(J){let Q={};for(let Z=0;Z<J.length;Z++){let X=J[Z];if(X?.startsWith("--")){let K=X.slice(2).replace(/-([a-z])/g,(G,z)=>z.toUpperCase()),q=J[Z+1];if(q&&!q.startsWith("--"))Q[K]=q,Z++}}return Q}async function r49(){let J=n49(process.argv);if(X26({logLevel:J.logLevel||process.env.AMP_LOG_LEVEL,logFile:J.logFile||process.env.AMP_LOG_FILE}),y49(l),l.info("Starting Amp CLI.",{version:"0.0.1759723320-g18aba8",buildTimestamp:"2025-10-06T04:07:47.717Z",buildType:"'release'"}),parseInt(process.version.slice(1).split(".")[0]??"")<20)throw new N2(jK.nodeVersion(process.version),1,"Please upgrade your Node.js installation from https://nodejs.org");await a49().parseAsync(process.argv)}r49().catch(l21);async function s49(J,Q){if(process.env.AMP_URL)await J.settings.set("url",process.env.AMP_URL,"global"),g2.write(`Saving custom server URL to settings: ${process.env.AMP_URL}
6015
6015
  `);else if(!EH(J.ampURL))g2.write(`Logging in to ${new URL(J.ampURL).hostname}
6016
6016
  `);let Z=process.env.AMP_API_KEY;if(Z)g2.write(`API key found in environment variable, storing...
6017
6017
  `),await Q.set("apiKey",Z,J.ampURL),g2.write(`API key successfully stored.
@@ -6027,7 +6027,7 @@ Or pipe via stdin: echo "your message" | amp --execute`);if(K!==""&&!J.executeMo
6027
6027
  `));try{let Q;if(J)Q=J,o2.write(e6.blue(`Updating to version ${J}...
6028
6028
  `)),await KT(J),o2.write(e6.green(`✓ Successfully updated to version ${J}
6029
6029
  `));else{o2.write(e6.blue(`Checking for updates...
6030
- `));let{hasUpdate:X,latestVersion:Y}=await AR("0.0.1759694482-g906de2");if(!X)o2.write(e6.green(`✓ Amp CLI is already up to date.
6030
+ `));let{hasUpdate:X,latestVersion:Y}=await AR("0.0.1759723320-g18aba8");if(!X)o2.write(e6.green(`✓ Amp CLI is already up to date.
6031
6031
  `)),process.exit(0);if(!Y)o2.write(e6.yellow("[WARN] could not find latest version")),process.exit(0);Q=Y,o2.write(e6.blue(`Updating to version ${Y}...
6032
6032
  `)),await KT(Y),o2.write(e6.green(`✓ Successfully updated to version ${Y}
6033
6033
  `))}let Z=await QO(Q);if(Z.warning)o2.write(`
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sourcegraph/amp",
3
- "version": "0.0.1759694482-g906de2",
3
+ "version": "0.0.1759723320-g18aba8",
4
4
  "description": "CLI for Amp, an agentic coding tool in research preview from Sourcegraph.",
5
5
  "homepage": "https://ampcode.com/",
6
6
  "author": {