@sourcegraph/amp 0.0.1760904103-gf9d96f → 0.0.1760918500-g57ad23
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/main.js +7 -7
- package/package.json +1 -1
package/dist/main.js
CHANGED
|
@@ -6129,7 +6129,7 @@ See https://ampcode.com/manual#toolboxes`);return Q[0]||uR}function hZ6(J,Q){let
|
|
|
6129
6129
|
`;async function pZ6(J,Q,Z,X){let Y=performance.now(),K=[...d_(fM1(J)),{role:"user",parts:[{text:j59.replace("{USER_GOAL}",Q)}]}],q=await C$(Cr,K,[],J,Z,X,{responseMimeType:"application/json",responseJsonSchema:M0.toJSONSchema(uZ6)}),G=uZ6.parse(JSON.parse(q.message.text??"")),z=performance.now()-Y;return l.debug("Thread handoff prepared",{threadId:J.id,goalLength:Q.length,instructionsLength:G.instructions.length,fileCount:G.relevantFiles.length,durationMs:Math.round(z)}),{instructions:G.instructions,relevantFiles:G.relevantFiles}}UL();_6();function dZ6(J){let Q=J.trim();if(Q==="quit"||Q==="exit")return"/quit";return J}function cZ6(J,Q,Z){if(J.agentMode)return J.agentMode;if(Q?.agentMode){let X=Q.agentMode;if(X==="free"){if(Z?.canUseAmpFree??!1)return"free";return"smart"}return X}return"smart"}z0();iB();import $59 from"node:fs";import lZ6 from"node:path";function iZ6(J){let Q=J.trim().replace(/^["']|["']$/g,"");if(Q=Q.replace(/\\(.)/g,"$1"),!/\.(png|jpe?g|gif|webp)$/i.test(Q))return null;if(!lZ6.isAbsolute(Q))return null;return l.debug("Extracted image path",{original:J,extracted:Q}),Q}function nZ6(J){try{let Q=lZ6.extname(J).toLowerCase(),Z=Ie1(Q);if(!Z)return l.warn("Unsupported image file extension",{ext:Q}),null;try{let X=$59.readFileSync(J);return E59(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 E59(J,Q){if(J.length>OF)return l.warn(`Image file too large: ${J.length} bytes (max: ${OF})`),null;return{type:"image",source:{type:"base64",data:J.toString("base64"),mediaType:Q}}}import{execSync as LK6}from"node:child_process";import{rmdir as AY9}from"node:fs/promises";import{tmpdir as wY9}from"node:os";import AK6 from"node:path";aO();z0();import{spawn as I59}from"node:child_process";import{promises as P59}from"node:fs";function aZ6(J){return J.kind==="executable"}function rZ6(J){return J.kind==="markdown"}var pH=50000,sZ6=300000;async function Ly1(J,Q,Z,X={}){let{timeoutMs:Y=sZ6,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}),rZ6(q))return await T59(q,Q);else if(aZ6(q))return await C59(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 T59(J,Q){try{if(Q.length>0)return{success:!1,output:"",error:"Markdown commands do not accept arguments"};let Z=await P59.readFile(J.filePath,"utf8");return{success:!0,output:(Z.length>pH?Z.slice(0,pH)+`
|
|
6130
6130
|
... (output truncated at ${pH} characters)`:Z).trim(),exitCode:0}}catch(Z){return{success:!1,output:"",error:Z instanceof Error?Z.message:"Failed to read markdown file"}}}async function C59(J,Q,Z=sZ6,X){return new Promise((Y)=>{let[K,q]=S59(J,Q);l.debug("Spawning command",{spawnCommand:K,spawnArgs:q.slice(0,10),filePath:J.filePath,timeoutMs:Z});let G=Oe1(X),z=!1,U=setTimeout(()=>{z=!0,G.abort(),l.warn("Command execution timed out",{commandName:J.name,timeoutMs:Z})},Z),F=I59(K,q,{stdio:["pipe","pipe","pipe"],signal:G.signal,detached:!0}),W=[],H=[],B=0;F.stdout?.on("data",(M)=>{let V=M.toString();if(B+=V.length,B<=pH)W.push(V);else{let N=pH-(B-V.length);if(N>0)W.push(V.slice(0,N))}}),F.stderr?.on("data",(M)=>{let V=M.toString();if(B+=V.length,B<=pH)H.push(V);else{let N=pH-(B-V.length);if(N>0)H.push(V.slice(0,N))}}),F.on("close",(M)=>{if(clearTimeout(U),z){Y({success:!1,output:W.join(""),error:`Command timed out after ${Z}ms`,exitCode:void 0});return}if(G.signal.aborted){Y({success:!1,output:W.join(""),error:"The command was aborted",exitCode:M??void 0});return}let V=M===0||M===1,N=W.join(""),L=H.join(""),A=N;if(!V&&!N.trim()&&L.trim())A=L;else if(L.trim())A+=N?`
|
|
6131
6131
|
${L}`:L;if(B>pH)A+=`
|
|
6132
|
-
... (output truncated at ${pH} characters)`;Y({success:V,output:A.trim(),error:!V?L.trim()||"Command failed":void 0,exitCode:M??void 0})}),F.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:W.join(""),error:V})})})}function S59(J,Q){let{filePath:Z,interpreter:X,extension:Y}=J;if(process.platform==="win32")return k59(Z,X?[...X]:null,Y,Q);else return v59(Z,X?[...X]:null,Y,Q)}function v59(J,Q,Z,X){if(Q&&Q.length>0&&Q[0])return[Q[0],[...Q.slice(1),J,...X]];else return[J,X]}function k59(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]}}z0();Tj();z2();PB();CY();bF();_6();T0();import{mkdtemp as RY9,readFile as OY9,unlink as jY9,writeFile as iw2}from"fs/promises";var X51={};R6(X51,{scrollUp:()=>t59,scrollDown:()=>e59,link:()=>KJ9,image:()=>qJ9,iTerm:()=>GJ9,exitAlternativeScreen:()=>XJ9,eraseUp:()=>o59,eraseStartLine:()=>r59,eraseScreen:()=>Ay1,eraseLines:()=>n59,eraseLine:()=>JX6,eraseEndLine:()=>a59,eraseDown:()=>s59,enterAlternativeScreen:()=>ZJ9,cursorUp:()=>tZ6,cursorTo:()=>b59,cursorShow:()=>i59,cursorSavePosition:()=>m59,cursorRestorePosition:()=>u59,cursorPrevLine:()=>c59,cursorNextLine:()=>d59,cursorMove:()=>y59,cursorLeft:()=>eZ6,cursorHide:()=>l59,cursorGetPosition:()=>p59,cursorForward:()=>h59,cursorDown:()=>f59,cursorBackward:()=>g59,clearTerminal:()=>QJ9,clearScreen:()=>JJ9,beep:()=>YJ9});import wy1 from"node:process";var Z51=globalThis.window?.document!==void 0,iL2=globalThis.process?.versions?.node!==void 0,nL2=globalThis.process?.versions?.bun!==void 0,aL2=globalThis.Deno?.version?.deno!==void 0,rL2=globalThis.process?.versions?.electron!==void 0,sL2=globalThis.navigator?.userAgent?.includes("jsdom")===!0,oL2=typeof WorkerGlobalScope<"u"&&globalThis instanceof WorkerGlobalScope,tL2=typeof DedicatedWorkerGlobalScope<"u"&&globalThis instanceof DedicatedWorkerGlobalScope,eL2=typeof SharedWorkerGlobalScope<"u"&&globalThis instanceof SharedWorkerGlobalScope,JA2=typeof ServiceWorkerGlobalScope<"u"&&globalThis instanceof ServiceWorkerGlobalScope,Tu=globalThis.navigator?.userAgentData?.platform,QA2=Tu==="macOS"||globalThis.navigator?.platform==="MacIntel"||globalThis.navigator?.userAgent?.includes(" Mac ")===!0||globalThis.process?.platform==="darwin",ZA2=Tu==="Windows"||globalThis.navigator?.platform==="Win32"||globalThis.process?.platform==="win32",XA2=Tu==="Linux"||globalThis.navigator?.platform?.startsWith("Linux")===!0||globalThis.navigator?.userAgent?.includes(" Linux ")===!0||globalThis.process?.platform==="linux",YA2=Tu==="iOS"||globalThis.navigator?.platform==="MacIntel"&&globalThis.navigator?.maxTouchPoints>1||/iPad|iPhone|iPod/.test(globalThis.navigator?.platform),KA2=Tu==="Android"||globalThis.navigator?.platform==="Android"||globalThis.navigator?.userAgent?.includes(" Android ")===!0||globalThis.process?.platform==="android";var V2="\x1B[",Su="\x1B]",FC="\x07",Cu=";",oZ6=!Z51&&wy1.env.TERM_PROGRAM==="Apple_Terminal",_59=!Z51&&wy1.platform==="win32",x59=Z51?()=>{throw Error("`process.cwd()` only works in Node.js, not the browser.")}:wy1.cwd,b59=(J,Q)=>{if(typeof J!=="number")throw TypeError("The `x` argument is required");if(typeof Q!=="number")return V2+(J+1)+"G";return V2+(Q+1)+Cu+(J+1)+"H"},y59=(J,Q)=>{if(typeof J!=="number")throw TypeError("The `x` argument is required");let Z="";if(J<0)Z+=V2+-J+"D";else if(J>0)Z+=V2+J+"C";if(Q<0)Z+=V2+-Q+"A";else if(Q>0)Z+=V2+Q+"B";return Z},tZ6=(J=1)=>V2+J+"A",f59=(J=1)=>V2+J+"B",h59=(J=1)=>V2+J+"C",g59=(J=1)=>V2+J+"D",eZ6=V2+"G",m59=oZ6?"\x1B7":V2+"s",u59=oZ6?"\x1B8":V2+"u",p59=V2+"6n",d59=V2+"E",c59=V2+"F",l59=V2+"?25l",i59=V2+"?25h",n59=(J)=>{let Q="";for(let Z=0;Z<J;Z++)Q+=JX6+(Z<J-1?tZ6():"");if(J)Q+=eZ6;return Q},a59=V2+"K",r59=V2+"1K",JX6=V2+"2K",s59=V2+"J",o59=V2+"1J",Ay1=V2+"2J",t59=V2+"S",e59=V2+"T",JJ9="\x1Bc",QJ9=_59?`${Ay1}${V2}0f`:`${Ay1}${V2}3J${V2}H`,ZJ9=V2+"?1049h",XJ9=V2+"?1049l",YJ9=FC,KJ9=(J,Q)=>[Su,"8",Cu,Cu,Q,FC,J,Su,"8",Cu,Cu,FC].join(""),qJ9=(J,Q={})=>{let Z=`${Su}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")+FC},GJ9={setCwd:(J=x59())=>`${Su}50;CurrentDir=${J}${FC}`,annotation(J,Q={}){let Z=`${Su}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+FC}};var Y51=m6(GX6(),1);function aV(J,Q,{target:Z="stdout",...X}={}){if(!Y51.default[Z]){if(X.fallback===!1)return J;return typeof X.fallback==="function"?X.fallback(J,Q):`${J} (${Q})`}return X51.link(J,Q)}aV.isSupported=Y51.default.stdout;aV.stderr=(J,Q,Z={})=>aV(J,Q,{target:"stderr",...Z});aV.stderr.isSupported=Y51.default.stderr;z0();CY();class Ey1{enabled;configService;commandCounts=new Map;timer=null;bufferTimeMs=1e4;constructor(J,Q){this.enabled=J;this.configService=Q;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.1760904103-gf9d96f"},parameters:{metadata:{count:Z}},timestamp:Date.now()*1000}));this.commandCounts.clear();try{let Q=JSON.stringify(J);await cn(Q,this.configService)}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}}import{execFile as q51}from"node:child_process";import{platform as Iy1}from"node:os";import{promisify as WJ9}from"node:util";var K51=WJ9(q51),HJ9=(J)=>`\x1B]52;c;${J}\x1B\\`,BJ9="\x1B]52;c;?\x1B\\",DJ9="\x1B]52;p;?\x1B\\";class zX6{capabilities=null;pendingReadPromise=null;readResolve=null;readTimeout=null;setCapabilities(J){this.capabilities=J}isOsc52Supported(){return this.capabilities?.osc52??!1}async commandExists(J){try{return await K51("which",[J]),!0}catch{return!1}}async writeToPbcopy(J){try{let Q=q51("pbcopy");return Q.stdin?.write(J),Q.stdin?.end(),await new Promise((Z,X)=>{Q.on("close",(Y)=>{if(Y===0)Z();else X(Error(`pbcopy exited with code ${Y}`))})}),!0}catch{return!1}}async writeToWlCopy(J){try{let Q=q51("wl-copy");return Q.stdin?.write(J),Q.stdin?.end(),await new Promise((Z,X)=>{Q.on("close",(Y)=>{if(Y===0)Z();else X(Error(`wl-copy exited with code ${Y}`))})}),!0}catch{return!1}}async writeToXclip(J){try{let Q=q51("xclip",["-selection","clipboard"]);return Q.stdin?.write(J),Q.stdin?.end(),await new Promise((Z,X)=>{Q.on("close",(Y)=>{if(Y===0)Z();else X(Error(`xclip exited with code ${Y}`))})}),!0}catch{return!1}}async readFromOSC52WithQuery(J){if(!this.isOsc52Supported())return null;if(this.pendingReadPromise)return this.pendingReadPromise;this.pendingReadPromise=new Promise((Z)=>{this.readResolve=Z,this.readTimeout=setTimeout(()=>{this.readResolve=null,this.pendingReadPromise=null,Z(null)},2000),process.stdout.write(J)});let Q=await this.pendingReadPromise;return this.pendingReadPromise=null,Q}async readFromOSC52(){return this.readFromOSC52WithQuery(BJ9)}handleOSC52Response(J){if(this.readResolve&&this.readTimeout){clearTimeout(this.readTimeout),this.readTimeout=null;try{let Q=Buffer.from(J,"base64").toString("utf8");this.readResolve(Q)}catch{this.readResolve(null)}this.readResolve=null,this.pendingReadPromise=null}}async readFromPbpaste(){try{let{stdout:J}=await K51("pbpaste");return J}catch{return null}}async readFromWlPaste(J){try{let Q=["--no-newline"];if(J==="primary")Q.push("--primary");let{stdout:Z}=await K51("wl-paste",Q);return Z}catch{return null}}async readFromXclip(J){try{let{stdout:Q}=await K51("xclip",["-selection",J,"-o"]);return Q}catch{return null}}async readFromOSC52Primary(){return this.readFromOSC52WithQuery(DJ9)}async readText(){if(this.isOsc52Supported()){let Q=await this.readFromOSC52();if(Q!==null)return Q}if(Iy1()==="darwin"){let Q=await this.readFromPbpaste();if(Q!==null)return Q}else{if(await this.commandExists("wl-paste")){let Q=await this.readFromWlPaste("clipboard");if(Q!==null)return Q}if(await this.commandExists("xclip")){let Q=await this.readFromXclip("clipboard");if(Q!==null)return Q}}return null}async readPrimarySelection(){if(Iy1()==="darwin")return this.readText();if(this.isOsc52Supported()){let Q=await this.readFromOSC52Primary();if(Q!==null)return Q}if(await this.commandExists("wl-paste")){let Q=await this.readFromWlPaste("primary");if(Q!==null)return Q}if(await this.commandExists("xclip")){let Q=await this.readFromXclip("primary");if(Q!==null)return Q}return null}async writeText(J){if(this.isOsc52Supported()){let Z=Buffer.from(J).toString("base64"),X=HJ9(Z);process.stdout.write(X);return}if(Iy1()==="darwin"){if(await this.writeToPbcopy(J))return}else{if(await this.commandExists("wl-copy")&&await this.writeToWlCopy(J))return;if(await this.commandExists("xclip")&&await this.writeToXclip(J))return}}}var zY=new zX6;z0();class G51 extends Error{constructor(J="Thread has no messages to compact"){super(J);this.name="NoMessagesToCompactError"}}class p7{message;name;constructor(J){this.message=J;this.name="InformationMessage"}}function UX6(J){if(J instanceof G51)return{title:"Cannot compact thread",description:"Thread has no messages to compact.",type:"error"};if(J instanceof p7)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 QN=null,$Y9={connect:{name:"connect",description:"Connect CLI to web interface for current thread access",execute:async(J,Q)=>{try{if(QN)return Error("Already connected. Use /disconnect first to reconnect.");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(() => (bb1(),SJ6)),q=await K({worker:J.worker},J.configService,{clientId:J.clientId,onUserDisconnect:()=>{QN=null,Z.sendStatus({connected:!1,enabled:!1,errorMessage:"Disconnected by user via web interface"})}});QN=q,q.promise.then(()=>{Z.sendStatus({connected:!0,errorMessage:void 0})}).catch((M)=>{QN=null,Z.sendStatus({connected:!1,errorMessage:M.message})});let z=(await J.configService.getLatest()).settings.url,U=J.worker.thread.id,F=new URL(`/clients/${Y}/${U}`,z).toString(),W=new URL("/clients",z).toString(),H="";try{H=await(await Promise.resolve().then(() => m6(wf1(),1))).toString(F,{type:"utf8",margin:2,color:{dark:"#000000",light:"#FFFFFF"}})}catch(M){l.error("Failed to generate QR code:",M)}if((process.stdout.rows||24)>=30&&H&&J.onShowQRCodeOverlay)J.onShowQRCodeOverlay({url:W,qrCode:H});else return new p7(`Continue at ${W}`)}catch(Z){return J.connectedClientsService.sendStatus({connected:!1,errorMessage:Z.message}),Error(`Failed to start connection: ${Z.message}`)}}},disconnect:{name:"disconnect",description:"Disconnect from web interface",execute:async(J,Q)=>{if(!QN)return new p7("Not connected to Amp web interface");try{QN.disconnect();let Z=QN.clientID;return QN=null,J.connectedClientsService.sendStatus({connected:!1,enabled:!1,errorMessage:void 0}),new p7(`Disconnected from Amp web interface
|
|
6132
|
+
... (output truncated at ${pH} characters)`;Y({success:V,output:A.trim(),error:!V?L.trim()||"Command failed":void 0,exitCode:M??void 0})}),F.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:W.join(""),error:V})})})}function S59(J,Q){let{filePath:Z,interpreter:X,extension:Y}=J;if(process.platform==="win32")return k59(Z,X?[...X]:null,Y,Q);else return v59(Z,X?[...X]:null,Y,Q)}function v59(J,Q,Z,X){if(Q&&Q.length>0&&Q[0])return[Q[0],[...Q.slice(1),J,...X]];else return[J,X]}function k59(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]}}z0();Tj();z2();PB();CY();bF();_6();T0();import{mkdtemp as RY9,readFile as OY9,unlink as jY9,writeFile as iw2}from"fs/promises";var X51={};R6(X51,{scrollUp:()=>t59,scrollDown:()=>e59,link:()=>KJ9,image:()=>qJ9,iTerm:()=>GJ9,exitAlternativeScreen:()=>XJ9,eraseUp:()=>o59,eraseStartLine:()=>r59,eraseScreen:()=>Ay1,eraseLines:()=>n59,eraseLine:()=>JX6,eraseEndLine:()=>a59,eraseDown:()=>s59,enterAlternativeScreen:()=>ZJ9,cursorUp:()=>tZ6,cursorTo:()=>b59,cursorShow:()=>i59,cursorSavePosition:()=>m59,cursorRestorePosition:()=>u59,cursorPrevLine:()=>c59,cursorNextLine:()=>d59,cursorMove:()=>y59,cursorLeft:()=>eZ6,cursorHide:()=>l59,cursorGetPosition:()=>p59,cursorForward:()=>h59,cursorDown:()=>f59,cursorBackward:()=>g59,clearTerminal:()=>QJ9,clearScreen:()=>JJ9,beep:()=>YJ9});import wy1 from"node:process";var Z51=globalThis.window?.document!==void 0,iL2=globalThis.process?.versions?.node!==void 0,nL2=globalThis.process?.versions?.bun!==void 0,aL2=globalThis.Deno?.version?.deno!==void 0,rL2=globalThis.process?.versions?.electron!==void 0,sL2=globalThis.navigator?.userAgent?.includes("jsdom")===!0,oL2=typeof WorkerGlobalScope<"u"&&globalThis instanceof WorkerGlobalScope,tL2=typeof DedicatedWorkerGlobalScope<"u"&&globalThis instanceof DedicatedWorkerGlobalScope,eL2=typeof SharedWorkerGlobalScope<"u"&&globalThis instanceof SharedWorkerGlobalScope,JA2=typeof ServiceWorkerGlobalScope<"u"&&globalThis instanceof ServiceWorkerGlobalScope,Tu=globalThis.navigator?.userAgentData?.platform,QA2=Tu==="macOS"||globalThis.navigator?.platform==="MacIntel"||globalThis.navigator?.userAgent?.includes(" Mac ")===!0||globalThis.process?.platform==="darwin",ZA2=Tu==="Windows"||globalThis.navigator?.platform==="Win32"||globalThis.process?.platform==="win32",XA2=Tu==="Linux"||globalThis.navigator?.platform?.startsWith("Linux")===!0||globalThis.navigator?.userAgent?.includes(" Linux ")===!0||globalThis.process?.platform==="linux",YA2=Tu==="iOS"||globalThis.navigator?.platform==="MacIntel"&&globalThis.navigator?.maxTouchPoints>1||/iPad|iPhone|iPod/.test(globalThis.navigator?.platform),KA2=Tu==="Android"||globalThis.navigator?.platform==="Android"||globalThis.navigator?.userAgent?.includes(" Android ")===!0||globalThis.process?.platform==="android";var V2="\x1B[",Su="\x1B]",FC="\x07",Cu=";",oZ6=!Z51&&wy1.env.TERM_PROGRAM==="Apple_Terminal",_59=!Z51&&wy1.platform==="win32",x59=Z51?()=>{throw Error("`process.cwd()` only works in Node.js, not the browser.")}:wy1.cwd,b59=(J,Q)=>{if(typeof J!=="number")throw TypeError("The `x` argument is required");if(typeof Q!=="number")return V2+(J+1)+"G";return V2+(Q+1)+Cu+(J+1)+"H"},y59=(J,Q)=>{if(typeof J!=="number")throw TypeError("The `x` argument is required");let Z="";if(J<0)Z+=V2+-J+"D";else if(J>0)Z+=V2+J+"C";if(Q<0)Z+=V2+-Q+"A";else if(Q>0)Z+=V2+Q+"B";return Z},tZ6=(J=1)=>V2+J+"A",f59=(J=1)=>V2+J+"B",h59=(J=1)=>V2+J+"C",g59=(J=1)=>V2+J+"D",eZ6=V2+"G",m59=oZ6?"\x1B7":V2+"s",u59=oZ6?"\x1B8":V2+"u",p59=V2+"6n",d59=V2+"E",c59=V2+"F",l59=V2+"?25l",i59=V2+"?25h",n59=(J)=>{let Q="";for(let Z=0;Z<J;Z++)Q+=JX6+(Z<J-1?tZ6():"");if(J)Q+=eZ6;return Q},a59=V2+"K",r59=V2+"1K",JX6=V2+"2K",s59=V2+"J",o59=V2+"1J",Ay1=V2+"2J",t59=V2+"S",e59=V2+"T",JJ9="\x1Bc",QJ9=_59?`${Ay1}${V2}0f`:`${Ay1}${V2}3J${V2}H`,ZJ9=V2+"?1049h",XJ9=V2+"?1049l",YJ9=FC,KJ9=(J,Q)=>[Su,"8",Cu,Cu,Q,FC,J,Su,"8",Cu,Cu,FC].join(""),qJ9=(J,Q={})=>{let Z=`${Su}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")+FC},GJ9={setCwd:(J=x59())=>`${Su}50;CurrentDir=${J}${FC}`,annotation(J,Q={}){let Z=`${Su}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+FC}};var Y51=m6(GX6(),1);function aV(J,Q,{target:Z="stdout",...X}={}){if(!Y51.default[Z]){if(X.fallback===!1)return J;return typeof X.fallback==="function"?X.fallback(J,Q):`${J} (${Q})`}return X51.link(J,Q)}aV.isSupported=Y51.default.stdout;aV.stderr=(J,Q,Z={})=>aV(J,Q,{target:"stderr",...Z});aV.stderr.isSupported=Y51.default.stderr;z0();CY();class Ey1{enabled;configService;commandCounts=new Map;timer=null;bufferTimeMs=1e4;constructor(J,Q){this.enabled=J;this.configService=Q;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.1760918500-g57ad23"},parameters:{metadata:{count:Z}},timestamp:Date.now()*1000}));this.commandCounts.clear();try{let Q=JSON.stringify(J);await cn(Q,this.configService)}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}}import{execFile as q51}from"node:child_process";import{platform as Iy1}from"node:os";import{promisify as WJ9}from"node:util";var K51=WJ9(q51),HJ9=(J)=>`\x1B]52;c;${J}\x1B\\`,BJ9="\x1B]52;c;?\x1B\\",DJ9="\x1B]52;p;?\x1B\\";class zX6{capabilities=null;pendingReadPromise=null;readResolve=null;readTimeout=null;setCapabilities(J){this.capabilities=J}isOsc52Supported(){return this.capabilities?.osc52??!1}async commandExists(J){try{return await K51("which",[J]),!0}catch{return!1}}async writeToPbcopy(J){try{let Q=q51("pbcopy");return Q.stdin?.write(J),Q.stdin?.end(),await new Promise((Z,X)=>{Q.on("close",(Y)=>{if(Y===0)Z();else X(Error(`pbcopy exited with code ${Y}`))})}),!0}catch{return!1}}async writeToWlCopy(J){try{let Q=q51("wl-copy");return Q.stdin?.write(J),Q.stdin?.end(),await new Promise((Z,X)=>{Q.on("close",(Y)=>{if(Y===0)Z();else X(Error(`wl-copy exited with code ${Y}`))})}),!0}catch{return!1}}async writeToXclip(J){try{let Q=q51("xclip",["-selection","clipboard"]);return Q.stdin?.write(J),Q.stdin?.end(),await new Promise((Z,X)=>{Q.on("close",(Y)=>{if(Y===0)Z();else X(Error(`xclip exited with code ${Y}`))})}),!0}catch{return!1}}async readFromOSC52WithQuery(J){if(!this.isOsc52Supported())return null;if(this.pendingReadPromise)return this.pendingReadPromise;this.pendingReadPromise=new Promise((Z)=>{this.readResolve=Z,this.readTimeout=setTimeout(()=>{this.readResolve=null,this.pendingReadPromise=null,Z(null)},2000),process.stdout.write(J)});let Q=await this.pendingReadPromise;return this.pendingReadPromise=null,Q}async readFromOSC52(){return this.readFromOSC52WithQuery(BJ9)}handleOSC52Response(J){if(this.readResolve&&this.readTimeout){clearTimeout(this.readTimeout),this.readTimeout=null;try{let Q=Buffer.from(J,"base64").toString("utf8");this.readResolve(Q)}catch{this.readResolve(null)}this.readResolve=null,this.pendingReadPromise=null}}async readFromPbpaste(){try{let{stdout:J}=await K51("pbpaste");return J}catch{return null}}async readFromWlPaste(J){try{let Q=["--no-newline"];if(J==="primary")Q.push("--primary");let{stdout:Z}=await K51("wl-paste",Q);return Z}catch{return null}}async readFromXclip(J){try{let{stdout:Q}=await K51("xclip",["-selection",J,"-o"]);return Q}catch{return null}}async readFromOSC52Primary(){return this.readFromOSC52WithQuery(DJ9)}async readText(){if(this.isOsc52Supported()){let Q=await this.readFromOSC52();if(Q!==null)return Q}if(Iy1()==="darwin"){let Q=await this.readFromPbpaste();if(Q!==null)return Q}else{if(await this.commandExists("wl-paste")){let Q=await this.readFromWlPaste("clipboard");if(Q!==null)return Q}if(await this.commandExists("xclip")){let Q=await this.readFromXclip("clipboard");if(Q!==null)return Q}}return null}async readPrimarySelection(){if(Iy1()==="darwin")return this.readText();if(this.isOsc52Supported()){let Q=await this.readFromOSC52Primary();if(Q!==null)return Q}if(await this.commandExists("wl-paste")){let Q=await this.readFromWlPaste("primary");if(Q!==null)return Q}if(await this.commandExists("xclip")){let Q=await this.readFromXclip("primary");if(Q!==null)return Q}return null}async writeText(J){if(this.isOsc52Supported()){let Z=Buffer.from(J).toString("base64"),X=HJ9(Z);process.stdout.write(X);return}if(Iy1()==="darwin"){if(await this.writeToPbcopy(J))return}else{if(await this.commandExists("wl-copy")&&await this.writeToWlCopy(J))return;if(await this.commandExists("xclip")&&await this.writeToXclip(J))return}}}var zY=new zX6;z0();class G51 extends Error{constructor(J="Thread has no messages to compact"){super(J);this.name="NoMessagesToCompactError"}}class p7{message;name;constructor(J){this.message=J;this.name="InformationMessage"}}function UX6(J){if(J instanceof G51)return{title:"Cannot compact thread",description:"Thread has no messages to compact.",type:"error"};if(J instanceof p7)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 QN=null,$Y9={connect:{name:"connect",description:"Connect CLI to web interface for current thread access",execute:async(J,Q)=>{try{if(QN)return Error("Already connected. Use /disconnect first to reconnect.");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(() => (bb1(),SJ6)),q=await K({worker:J.worker},J.configService,{clientId:J.clientId,onUserDisconnect:()=>{QN=null,Z.sendStatus({connected:!1,enabled:!1,errorMessage:"Disconnected by user via web interface"})}});QN=q,q.promise.then(()=>{Z.sendStatus({connected:!0,errorMessage:void 0})}).catch((M)=>{QN=null,Z.sendStatus({connected:!1,errorMessage:M.message})});let z=(await J.configService.getLatest()).settings.url,U=J.worker.thread.id,F=new URL(`/clients/${Y}/${U}`,z).toString(),W=new URL("/clients",z).toString(),H="";try{H=await(await Promise.resolve().then(() => m6(wf1(),1))).toString(F,{type:"utf8",margin:2,color:{dark:"#000000",light:"#FFFFFF"}})}catch(M){l.error("Failed to generate QR code:",M)}if((process.stdout.rows||24)>=30&&H&&J.onShowQRCodeOverlay)J.onShowQRCodeOverlay({url:W,qrCode:H});else return new p7(`Continue at ${W}`)}catch(Z){return J.connectedClientsService.sendStatus({connected:!1,errorMessage:Z.message}),Error(`Failed to start connection: ${Z.message}`)}}},disconnect:{name:"disconnect",description:"Disconnect from web interface",execute:async(J,Q)=>{if(!QN)return new p7("Not connected to Amp web interface");try{QN.disconnect();let Z=QN.clientID;return QN=null,J.connectedClientsService.sendStatus({connected:!1,enabled:!1,errorMessage:void 0}),new p7(`Disconnected from Amp web interface
|
|
6133
6133
|
Client ID: ${Z}
|
|
6134
6134
|
Server will clean up automatically within 60 seconds`)}catch(Z){return Error(`Failed to disconnect: ${Z.message}`)}}}};class Rf1{configService;commands;customRegistry;latestCustom=[];telemetrySubmitter;constructor(J=oC(),Q){this.configService=Q;this.customRegistry=J,this._initBaseCommands(!1),this.customRegistry.commands.subscribe((Z)=>this.latestCustom=Z),this.telemetrySubmitter=new Ey1(async()=>{try{return(await this.configService.getLatest()).settings["experimental.cli.commandTelemetry.enabled"]===!0}catch{return!1}},this.configService),this.configService.config.pipe(C0((Z)=>LB(Z.settings)),o6()).subscribe((Z)=>{this._initBaseCommands(Z.length>1)})}_initBaseCommands(J){if(this.commands={...EY9},process.env.AMP_CONNECT==="1")Object.assign(this.commands,$Y9);if(J)Object.assign(this.commands,IY9)}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 Ly1(J,Z,this.customRegistry,{signal:X});if(q.success)if(K?.kind==="markdown"){Q.editorDispatch({type:"set-input",input:q.output});return}else{Q.submitMessage(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 EY9={"generate-agent-file":{name:"generate-agent-file",description:`Generate an ${Z5} file in the current workspace`,execute:async(J,Q)=>{let Z=await J.configService.getLatest(),X=xq(Z.settings),K=J.getInMemoryAgentModeOverride()??X;J.worker.handle({type:"user:message",message:{content:[{type:"text",text:X90}],agentMode:K}});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 G51;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(new AbortController().signal)}catch(Z){return Z instanceof Error?Z:Error("Failed to compact thread")}},isVisible:(J)=>J.agentMode!=="free"},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 RY9(AK6.join(wY9(),"amp-edit-")),Y=AK6.join(X,"message.amp.md");LK6(`${Z} "${Y}"`,{stdio:"inherit"}),process.stdout.write("\x1B[?25l");try{let q=(await OY9(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 jY9(Y),await AY9(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 aG("dangerouslyAllowAll",!1),new p7("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 aG("dangerouslyAllowAll",!0),new p7("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 zC();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:zC};await e71(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},handoff:{name:"handoff",description:"Start new focused thread with relevant files and prompt: /handoff <your goal>",statusMessage:"Handing off...",requiresArgs:!0,execute:async()=>{return},isVisible:(J)=>J.messages.length!==0&&J.agentMode!=="free"},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 p7(`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(`
|
|
6135
6135
|
`).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=Cj(new URL(Y),Z.id).toString(),G=`Thread URL: ${aV(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 p7(`${G}
|
|
@@ -6334,7 +6334,7 @@ ${Q}`),this.textController.clear(),this.textController.insertText(this.pendingTr
|
|
|
6334
6334
|
`),J.stdout.write(`Thread: ${H}
|
|
6335
6335
|
`),J.stdout.write(`Continue this thread with: amp threads continue ${F}
|
|
6336
6336
|
`)}}function Fu1(J){return J==="smart"?k1.rgb(3,197,97):J==="fast"?k1.rgb(228,180,2):J==="free"?k1.rgb(0,184,255):DW9(J)}function DW9(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 k1.index(Z[X])}uf1();if(process.env.AMP_PWD)try{process.chdir(process.env.AMP_PWD),delete process.env.AMP_PWD}catch(J){n7.write(`Failed to change directory to ${process.env.AMP_PWD}: ${J}
|
|
6337
|
-
`)}var Hu1=Wu1.join(mc1||Wu1.join(process.env.HOME||process.cwd(),".local","state"),"amp","last-thread-id");function AW9(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 KB(J,Q){if(J.getOptionValueSourceWithGlobals("dangerouslyAllowAll")==="cli")aG("dangerouslyAllowAll",Q.dangerouslyAllowAll);if(J.getOptionValueSourceWithGlobals("tryGpt5")==="cli")throw new g9("The --try-gpt5 flag has been removed.",1,`GPT-5 is now available as the oracle. Read why: ${M8.blue("https://ampcode.com/news/gpt-5-oracle")}`);if(J.getOptionValueSourceWithGlobals("agentMode")==="cli")aG("experimental.agentMode",Q.agentMode)}async function Du1(J){try{await VW9(Wu1.dirname(Hu1),{recursive:!0}),await NW9(Hu1,J,"utf-8")}catch(Q){l.debug("Failed to save last thread ID",Q)}}async function wW9(){try{return(await _F6(Hu1,"utf-8")).trim()}catch(J){return null}}function RW9(J,Q){return{...J,async get(Z){if(Z==="mcpServers"){let X=await J.get(Z);return ml1("mcpServers",{global:X,workspace:Q})}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 SF6=[{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??GY,description:`Custom settings file path (overrides the default location ${GY})`},{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 ${$b1})`},{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:hK(),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:!0,description:(J)=>J?"Enable IDE connection (default). 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:jd}],vF6=(J)=>("deprecated"in J)&&J.deprecated===!0,OW9=(J)=>("hidden"in J)&&J.hidden===!0,jW9=(J)=>("default"in J),$W9=(J)=>("default"in J)?J.default:void 0;function EW9(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 g9(fK.unknownCommand(Z),1,q)}}var xF6=null;function Qt2(){return xF6}function iJ1(J){return{...J,getThreadEnvironment:I71,vfs:u20({os:J.fileSystem},J.configService.config),fileChangeTrackerStorage:new U_(J.fileSystem),generateThreadTitle:ZG0,deleteThread:(Q)=>J.threadHistoryService.delete(Q)}}var Mu1=j0.file(LW9.homedir()),bF6=process.env.XDG_CONFIG_HOME?j0.file(process.env.XDG_CONFIG_HOME):y0.joinPath(Mu1,".config");async function qB(J,Q){ci1("0.0.
|
|
6337
|
+
`)}var Hu1=Wu1.join(mc1||Wu1.join(process.env.HOME||process.cwd(),".local","state"),"amp","last-thread-id");function AW9(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 KB(J,Q){if(J.getOptionValueSourceWithGlobals("dangerouslyAllowAll")==="cli")aG("dangerouslyAllowAll",Q.dangerouslyAllowAll);if(J.getOptionValueSourceWithGlobals("tryGpt5")==="cli")throw new g9("The --try-gpt5 flag has been removed.",1,`GPT-5 is now available as the oracle. Read why: ${M8.blue("https://ampcode.com/news/gpt-5-oracle")}`);if(J.getOptionValueSourceWithGlobals("agentMode")==="cli")aG("experimental.agentMode",Q.agentMode)}async function Du1(J){try{await VW9(Wu1.dirname(Hu1),{recursive:!0}),await NW9(Hu1,J,"utf-8")}catch(Q){l.debug("Failed to save last thread ID",Q)}}async function wW9(){try{return(await _F6(Hu1,"utf-8")).trim()}catch(J){return null}}function RW9(J,Q){return{...J,async get(Z){if(Z==="mcpServers"){let X=await J.get(Z);return ml1("mcpServers",{global:X,workspace:Q})}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 SF6=[{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??GY,description:`Custom settings file path (overrides the default location ${GY})`},{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 ${$b1})`},{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:hK(),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:!0,description:(J)=>J?"Enable IDE connection (default). 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:jd}],vF6=(J)=>("deprecated"in J)&&J.deprecated===!0,OW9=(J)=>("hidden"in J)&&J.hidden===!0,jW9=(J)=>("default"in J),$W9=(J)=>("default"in J)?J.default:void 0;function EW9(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 g9(fK.unknownCommand(Z),1,q)}}var xF6=null;function Qt2(){return xF6}function iJ1(J){return{...J,getThreadEnvironment:I71,vfs:u20({os:J.fileSystem},J.configService.config),fileChangeTrackerStorage:new U_(J.fileSystem),generateThreadTitle:ZG0,deleteThread:(Q)=>J.threadHistoryService.delete(Q)}}var Mu1=j0.file(LW9.homedir()),bF6=process.env.XDG_CONFIG_HOME?j0.file(process.env.XDG_CONFIG_HOME):y0.joinPath(Mu1,".config");async function qB(J,Q){ci1("0.0.1760918500-g57ad23");let Z=aZ1({storage:J.settings,secretStorage:J.secrets,workspaceRoots:e1.of([j0.file(process.cwd())]),defaultAmpURL:J.ampURL,homeDir:Mu1,userConfigDir:bF6}),{initializeCLITelemetry:X}=await Promise.resolve().then(() => (cJ1(),dJ1));X(Z);let Y=await Z.getLatest();l.debug("Global configuration initialized",{settingsKeys:Object.keys(Y.settings)});let K=Ga(zO({configService:Z})),q=N20({configService:Z,toolService:K}),G=OR0(K,T9,xe).catch((w)=>{l.warn("Toolbox registration failed, continuing anyway:",w)}),z=q.initialized.catch((w)=>{l.warn("MCP service initialization failed, continuing anyway:",w)});if(J.executeMode)await Promise.all([z,G]);if(Q.jetbrains)WO("JetBrains");else if(Q.ide&&yQ6())WO("VS Code");else if(Q.ide&&fQ6())WO("Neovim");if(J.executeMode)li1(!0);T96(K,{configService:Z});let U,F=S5.status.pipe(C0((w)=>Boolean(w.connected&&w.authenticated)),o6()).subscribe((w)=>{if(w){if(!U)U=K.registerTool(er)}else U?.dispose(),U=void 0}),W;if(!J.executeMode)W=new m71(process.cwd(),{},!0);else W=new class extends m71{async start(){}async query(){return[]}getStats(){return{state:"unstarted",stats:[]}}dispose(){}};if(!await J.secrets.get("apiKey",J.ampURL)){if(s2.write(`No API key found. Starting login flow...
|
|
6338
6338
|
`),!await IW9(J))await tw(),process.exit(1)}let H=await i20({isDevelopment:!1}),B=new OH1(H),M=new wH1(H,Z,{lazy:!0}),V=Q.notifications!==void 0?Q.notifications:!J.executeMode,N=S96({playNotificationSound:async(w)=>{if(V){C96(w);let R=gf1(),O=mf1();if((!R||O)&&Y.settings["notifications.system.enabled"]!==!1){if(w==="idle")process.stdout.write("\x1B]777;notify;Amp;Agent is ready\x1B\\");else if(w==="requires-user-input")process.stdout.write("\x1B]777;notify;Amp;Waiting for approval\x1B\\")}}},windowFocused:()=>Promise.resolve(!1),threadService:B,configService:Z});l.info("Starting Amp background services");let L=s20({threadService:B,threadHistoryService:M,configService:Z,isExtensionDevelopment:!1}),A={configService:Z,toolService:K,mcpService:q,threadService:B,threadHistoryService:M,threadSyncService:L,threadStorage:H,secretStorage:J.secrets,settingsStorage:J.settings,fuzzyServer:W,notificationService:N,fileSystem:Q.jetbrains||Q.ide?h20:T9};return{...A,async asyncDispose(){await A.mcpService.dispose(),await A.threadService.asyncDispose(),A.configService.unsubscribe(),A.toolService.dispose(),A.fuzzyServer.dispose(),A.threadSyncService.dispose(),A.settingsStorage[Symbol.dispose](),F.unsubscribe(),U?.dispose()}}}async function IW9(J){if(!J.executeMode){if(!await Wy1("Would you like to log in to Amp? [(y)es, (n)o]: "))return s2.write(`Login cancelled. Run the command again to retry.
|
|
6339
6339
|
`),!1}return await yF6(J)}async function yF6(J){let Q=MW9(32).toString("hex"),Z=await Fy1(J.ampURL,Q);try{await mK(Z)}catch(Y){l.error("Failed to open browser",{error:Y})}let X=await Fy1(J.ampURL,Q,!1);s2.write(`If your browser did not open automatically, visit:
|
|
6340
6340
|
|
|
@@ -6344,12 +6344,12 @@ ${M8.blue.bold(X)}
|
|
|
6344
6344
|
Login successful! You can now use the Amp CLI.
|
|
6345
6345
|
`),!0}catch(Y){return l.error("Login failed",{error:Y}),n7.write(`
|
|
6346
6346
|
Login failed: ${Y instanceof Error?Y.message:String(Y)}
|
|
6347
|
-
`),!1}}function PW9(){let J=new o41().name("amp").description("AI-powered coding assistant").option("--visibility <visibility>","Set thread visibility (private, public, workspace, group)").configureOutput({writeErr:()=>{}});J.exitOverride((W)=>{if(W.code==="commander.help"||W.code==="commander.version"||W.exitCode===0)ZR(),process.exit(0);let H=W.originalError??W;_J6(H)}),J.option("-V, --version","output the version number",()=>{s2.write(`0.0.
|
|
6348
|
-
`),process.exit(0)}),J.addHelpText("after",_Q6()),J.configureHelp({formatHelp:xQ6}),J.command("logout").description("Log out by removing stored API key").action(async(W,H)=>{let B=H.optsWithGlobals(),M=await DY(B);await vW9(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(W,H)=>{let B=H.optsWithGlobals(),M=await DY(B);await SW9(M,await tb1(B,M.settings))});let Q=async(W,H,B)=>{aZ1({storage:H.settings,secretStorage:H.secrets,workspaceRoots:e1.of([j0.file(process.cwd())]),defaultAmpURL:H.ampURL,homeDir:Mu1,userConfigDir:bF6});let M={...H,executeMode:!1};await Bu1(M,{...W,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(W,H)=>{let B=H.optsWithGlobals(),M=await DY(B);await kF6(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(W,H)=>{let B=H.optsWithGlobals(),M=await DY(B);await fW9(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(W,H,B)=>{let M=B.optsWithGlobals(),V=await DY(M);if(H.pick)await Q(M,V,B);else await yW9(M,V,W,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(W,H,B)=>{let M=B.optsWithGlobals(),V=await DY(M);await bW9(M,V,W,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(W,H)=>{let B=H.optsWithGlobals(),M=await DY(B);await kF6(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(W,H,B)=>{let M=B.optsWithGlobals(),V=await DY(M);await xW9(M,V,W,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(W,H,B)=>{let M=B.optsWithGlobals(),V=await DY(M);await _W9(M,V,W,B)}),hZ6(J,async(W,H)=>{let B=await DY(H);KB(W,H);let M=await qB(B,H);return{context:B,mcpService:M.mcpService,toolService:M.toolService,configService:M.configService,cleanupTerminal:ZR,asyncDispose:M.asyncDispose.bind(M)}}),WZ6(J),XZ6(J,async(W)=>{let H=await DY(W);return{settings:H.settings,getThreadDeps:async(B)=>{KB(B,W);let M=await qB(H,W);return{mcpService:M.mcpService,asyncDispose:M.asyncDispose.bind(M)}}}}),J.command("connect").description("Connect CLI to web interface for multi-thread management").action(async(W,H)=>{let B=H.optsWithGlobals(),M=await DY(B);KB(H,B);let V=await qB(M,B);try{await xb1(V,V.configService,{})}finally{await V.asyncDispose(),await ZR()}});let X=new o41().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(W)=>{await Ky1(W.force||!1,W.verbose||!1,"0.0.
|
|
6347
|
+
`),!1}}function PW9(){let J=new o41().name("amp").description("AI-powered coding assistant").option("--visibility <visibility>","Set thread visibility (private, public, workspace, group)").configureOutput({writeErr:()=>{}});J.exitOverride((W)=>{if(W.code==="commander.help"||W.code==="commander.version"||W.exitCode===0)ZR(),process.exit(0);let H=W.originalError??W;_J6(H)}),J.option("-V, --version","output the version number",()=>{s2.write(`0.0.1760918500-g57ad23 (released 2025-10-20T00:06:59.028Z)
|
|
6348
|
+
`),process.exit(0)}),J.addHelpText("after",_Q6()),J.configureHelp({formatHelp:xQ6}),J.command("logout").description("Log out by removing stored API key").action(async(W,H)=>{let B=H.optsWithGlobals(),M=await DY(B);await vW9(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(W,H)=>{let B=H.optsWithGlobals(),M=await DY(B);await SW9(M,await tb1(B,M.settings))});let Q=async(W,H,B)=>{aZ1({storage:H.settings,secretStorage:H.secrets,workspaceRoots:e1.of([j0.file(process.cwd())]),defaultAmpURL:H.ampURL,homeDir:Mu1,userConfigDir:bF6});let M={...H,executeMode:!1};await Bu1(M,{...W,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(W,H)=>{let B=H.optsWithGlobals(),M=await DY(B);await kF6(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(W,H)=>{let B=H.optsWithGlobals(),M=await DY(B);await fW9(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(W,H,B)=>{let M=B.optsWithGlobals(),V=await DY(M);if(H.pick)await Q(M,V,B);else await yW9(M,V,W,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(W,H,B)=>{let M=B.optsWithGlobals(),V=await DY(M);await bW9(M,V,W,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(W,H)=>{let B=H.optsWithGlobals(),M=await DY(B);await kF6(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(W,H,B)=>{let M=B.optsWithGlobals(),V=await DY(M);await xW9(M,V,W,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(W,H,B)=>{let M=B.optsWithGlobals(),V=await DY(M);await _W9(M,V,W,B)}),hZ6(J,async(W,H)=>{let B=await DY(H);KB(W,H);let M=await qB(B,H);return{context:B,mcpService:M.mcpService,toolService:M.toolService,configService:M.configService,cleanupTerminal:ZR,asyncDispose:M.asyncDispose.bind(M)}}),WZ6(J),XZ6(J,async(W)=>{let H=await DY(W);return{settings:H.settings,getThreadDeps:async(B)=>{KB(B,W);let M=await qB(H,W);return{mcpService:M.mcpService,asyncDispose:M.asyncDispose.bind(M)}}}}),J.command("connect").description("Connect CLI to web interface for multi-thread management").action(async(W,H)=>{let B=H.optsWithGlobals(),M=await DY(B);KB(H,B);let V=await qB(M,B);try{await xb1(V,V.configService,{})}finally{await V.asyncDispose(),await ZR()}});let X=new o41().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(W)=>{await Ky1(W.force||!1,W.verbose||!1,"0.0.1760918500-g57ad23"),process.exit()});J.addCommand(X,{hidden:!0});function Y(W,H,B){let V=typeof W.description==="string"?W.description:B===void 0?W.description(!0):W.description(B),N=new fV(H,V),L=$W9(W);if(L)N.default(L);if(N.hidden=OW9(W)||vF6(W),"choices"in W)N.choices([...W.choices]);return N}for(let W of SF6)switch(W.type){case"flag":{J.addOption(Y(W,`--${W.long}`)),J.addOption(Y(W,`--no-${W.long}`,!1));break}case"switch":{J.addOption(Y(W,`--${W.long}`,!0));break}default:{J.addOption(Y(W,`--${W.long} <value>`));break}}let K=new fV("-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);J.addOption(K);let q=new fV("-r, --remote","When used with -x/--execute, execute in an async agent on the Amp server.").default(!1).hideHelp();J.addOption(q);let G=new fV("--stream-json","When used with --execute, output in Claude Code compatible stream JSON format instead of plain text.").default(!1);J.addOption(G);let z=new fV("--stream-json-input","Read JSON Lines user messages from stdin. Requires both --execute and --stream-json.").default(!1);J.addOption(z);let U=new fV("--stats","When used with --execute, output JSON with both result and token usage data (for /evals).").default(!1).hideHelp(!0);if(J.addOption(U),process.env.AMP_CONNECT==="1"){let W=new fV("--client-id <clientId>","Override the client ID for connect functionality (default: amp-<pid>@<hostname>)");J.addOption(W)}J.action(async(W,H)=>{let B=W,M=await DY(B);if(Object.keys(B).forEach((V)=>{let N=SF6.find((L)=>L.name===V);if(N&&vF6(N)&&!jW9(N))n7.write(M8.yellow(`Warning: '--${V}' flag is deprecated
|
|
6349
6349
|
`))}),H.args.length>0)EW9(M,H);await Bu1(M,B,H)});let F=new o41("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(W)=>{await kW9(W.version)});return J.addCommand(F),J}async function lJ1(J,Q){let{thread:Z,visibility:X}=Q,Y=Z?.id??Zq(),K=iJ1(J);if(Z)await J.threadStorage.set(Y,Z);let q=await mJ.getOrCreateForThread(K,Y);if(X)await J.threadSyncService.updateThreadMeta(Y,o71(X));let G=J.threadService.observe(Y).subscribe(async(z)=>{if(a7(z,"assistant"))await Du1(Y),G.unsubscribe()});return await q.resume(),q}async function Bu1(J,Q,Z){let X=s71(Q);if(X instanceof Error)MY(X.message);let Y,K=null;if(Q.streamJsonInput)Y="";else if(typeof Q.execute==="string"){Y=Q.execute;let R=(await By1()).trimEnd();if(R)K=R}else Y=(await By1()).trimEnd();if(Q.remote&&!J.executeMode)throw new g9("The -r/--remote flag currently only works with --execute mode",1,'Use: amp --remote --execute "your message"');if(Q.streamJson&&!J.executeMode)throw new g9("The --stream-json flag requires --execute mode",1,'Use: amp --execute "your message" --stream-json');if(Q.streamJsonInput&&!J.executeMode)throw new g9("The --stream-json-input flag requires --execute mode",1,"Use: amp --execute --stream-json --stream-json-input");if(Q.streamJsonInput&&!Q.streamJson)throw new g9("The --stream-json-input flag requires --stream-json",1,"Use: amp --execute --stream-json --stream-json-input");if((J.executeMode||Q.streamJson)&&Q.agentMode&&Q.agentMode!=="smart")throw new g9(`Execute mode is not permitted with --agent-mode '${Q.agentMode}'`,1);if(Q.stats&&!J.executeMode)throw new g9("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 g9("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&&Y===""&&!Q.streamJsonInput)throw new g9("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"
|
|
6350
6350
|
Or pipe via stdin: echo "your message" | amp --execute`);KB(Z,Q);let q=await qB(J,Q);xF6=q;let G=iJ1(q),z=async(R)=>{let O=await _F6(R,"utf-8"),j=JSON.parse(O);if(!zF(j.id))throw new g9(fK.invalidThreadId);return lJ1(q,{visibility:X,thread:j})},U=async(R)=>{if(!zF(R))throw new g9(fK.invalidThreadId);let O=await q.threadService.get(R)??void 0;if(l.info(`[fetchAndStartThread] Loaded thread ${R}, agentMode: ${O?.agentMode??"undefined"}`),O?.agentMode)l.info(`[fetchAndStartThread] Setting runtime override for agentMode to: ${O.agentMode}`),aG("experimental.agentMode",O.agentMode);else l.info("[fetchAndStartThread] No agentMode on thread, not setting override");return lJ1(q,{visibility:X,thread:O})},F=async()=>{try{if(Q.threadId)return U(Q.threadId);else return lJ1(q,{visibility:X})}catch(R){if(R instanceof g9)throw R;throw await k71(R,Q.threadId),Error("handleError should have called process.exit()")}},W=async()=>{return lJ1(q,{visibility:X})};if(Q.format==="jsonl")n7.write(`jsonl format is deprecated. Version "0.0.1752148945-gd8844f" or earlier is required to use jsonl format.
|
|
6351
|
-
`),await tw(),process.exit(1);if(J.executeMode&&Q.remote)await HZ6(Y,K,q.configService),await q.asyncDispose(),process.exit(0);let H=await F();if(J.executeMode)await iJ6(H,H.threadID,Y,K,q,!!Q.streamJson,!!Q.streamJsonInput,!!Q.stats,J.ampURL),await q.asyncDispose(),process.exit(0);let B=!1,M=!1;if(Q.jetbrains||Q.ide){await Gr1();let R=await EO({jetbrainsOnly:Q.jetbrains});if(R.length===0){if(Q.jetbrains)M=!await q.configService.get("jetbrains.skipInstall")}else if(R.length===1){let O=R[0];if(O)S5.selectConfig(O)}else B=!0}let V=zy1("0.0.
|
|
6352
|
-
`);let Q=!!J.execute||!process.stdout.isTTY&&!J.streamJson,Z=process.stdout.isTTY&&process.stderr.isTTY,X=await uU(J.settingsFile),Y=pU({...J,settingsFile:X,getHook:process.env.AMP_URL?(G,z)=>{if(G==="url")return Promise.resolve(process.env.AMP_URL);return z()}:void 0});if(await NZ6(Y),await LZ6(Y),J.mcpConfig){let G=await YZ6(J.mcpConfig);Y=RW9(Y,G)}let K=await Y.get("url","global");if(!K)K=zZ;if(!AB(K))l.info("Targeting custom Amp server",{ampURL:K});if(Y=ql1(Y),await Y.get("debug.httpLogging"))Xl1();return{executeMode:Q,isTTY:Z,ampURL:K,settings:Y,secrets:BZ6(await tb1(J,Y))}}function TW9(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 CW9(){let J=TW9(process.argv);if(DJ6({logLevel:J.logLevel||process.env.AMP_LOG_LEVEL,logFile:J.logFile||process.env.AMP_LOG_FILE}),AW9(l),l.info("Starting Amp CLI.",{version:"0.0.
|
|
6351
|
+
`),await tw(),process.exit(1);if(J.executeMode&&Q.remote)await HZ6(Y,K,q.configService),await q.asyncDispose(),process.exit(0);let H=await F();if(J.executeMode)await iJ6(H,H.threadID,Y,K,q,!!Q.streamJson,!!Q.streamJsonInput,!!Q.stats,J.ampURL),await q.asyncDispose(),process.exit(0);let B=!1,M=!1;if(Q.jetbrains||Q.ide){await Gr1();let R=await EO({jetbrainsOnly:Q.jetbrains});if(R.length===0){if(Q.jetbrains)M=!await q.configService.get("jetbrains.skipInstall")}else if(R.length===1){let O=R[0];if(O)S5.selectConfig(O)}else B=!0}let V=zy1("0.0.1760918500-g57ad23",q.settingsStorage),N=e1.of([j0.file(process.cwd())]),L=oC(void 0,N);if(Y)H.handle({type:"user:message",message:{content:[{type:"text",text:Y}]}});let A=await XJ.getUserFreeTierStatus({},{config:q.configService});l.info("User free tier status:",A);let w=await VZ6();l.info("Loaded session state:",w),await CF6({stdout:process.stdout,history:new gb1,fuzzyServer:q.fuzzyServer,settingsStorage:q.settingsStorage,threadService:q.threadService,threadSyncService:q.threadSyncService,threadID:H.threadID,worker:H,workerDeps:G,configService:q.configService,internalAPIClient:XJ,ampURL:J.ampURL,startNewThread:W,pickAndContinueThread:async()=>{l.info("Thread picker requested - not yet implemented in TUI")},switchToThread:U,ideClient:S5,connectedClientsService:new sd,commandRegistry:L,showJetBrainsInstaller:M,showIdePicker:B,startWithPicker:Q.startWithPicker,updateService:V,inspector:Q.inspector,inspectorPort:Q.inspectorPort,jetbrainsMode:Q.jetbrains,clientId:Q.clientId,sessionState:w,freeTierStatus:A.ok?A.result:void 0}),await q.asyncDispose(),process.exit(0)}async function DY(J){if(J.interactive)n7.write(`Warning: --interactive flag is deprecated. Interactive mode is now the default unless --execute is used or output is redirected.
|
|
6352
|
+
`);let Q=!!J.execute||!process.stdout.isTTY&&!J.streamJson,Z=process.stdout.isTTY&&process.stderr.isTTY,X=await uU(J.settingsFile),Y=pU({...J,settingsFile:X,getHook:process.env.AMP_URL?(G,z)=>{if(G==="url")return Promise.resolve(process.env.AMP_URL);return z()}:void 0});if(await NZ6(Y),await LZ6(Y),J.mcpConfig){let G=await YZ6(J.mcpConfig);Y=RW9(Y,G)}let K=await Y.get("url","global");if(!K)K=zZ;if(!AB(K))l.info("Targeting custom Amp server",{ampURL:K});if(Y=ql1(Y),await Y.get("debug.httpLogging"))Xl1();return{executeMode:Q,isTTY:Z,ampURL:K,settings:Y,secrets:BZ6(await tb1(J,Y))}}function TW9(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 CW9(){let J=TW9(process.argv);if(DJ6({logLevel:J.logLevel||process.env.AMP_LOG_LEVEL,logFile:J.logFile||process.env.AMP_LOG_FILE}),AW9(l),l.info("Starting Amp CLI.",{version:"0.0.1760918500-g57ad23",buildTimestamp:"2025-10-20T00:06:59.028Z",buildType:"'release'"}),parseInt(process.version.slice(1).split(".")[0]??"")<20)throw new g9(fK.nodeVersion(process.version),1,"Please upgrade your Node.js installation from https://nodejs.org");await PW9().parseAsync(process.argv)}CW9().catch(k71);async function SW9(J,Q){if(process.env.AMP_URL)await J.settings.set("url",process.env.AMP_URL,"global"),s2.write(`Saving custom server URL to settings: ${process.env.AMP_URL}
|
|
6353
6353
|
`);else if(!AB(J.ampURL))s2.write(`Logging in to ${new URL(J.ampURL).hostname}
|
|
6354
6354
|
`);let Z=process.env.AMP_API_KEY;if(Z)s2.write(`API key found in environment variable, storing...
|
|
6355
6355
|
`),await Q.set("apiKey",Z,J.ampURL),s2.write(`API key successfully stored.
|
|
@@ -6365,7 +6365,7 @@ Or pipe via stdin: echo "your message" | amp --execute`);KB(Z,Q);let q=await qB(
|
|
|
6365
6365
|
`));try{let Q;if(J)Q=J,n7.write(M8.blue(`Updating to version ${J}...
|
|
6366
6366
|
`)),await qC(J),n7.write(M8.green(`✓ Successfully updated to version ${J}
|
|
6367
6367
|
`));else{n7.write(M8.blue(`Checking for updates...
|
|
6368
|
-
`));let{hasUpdate:X,latestVersion:Y}=await n41("0.0.
|
|
6368
|
+
`));let{hasUpdate:X,latestVersion:Y}=await n41("0.0.1760918500-g57ad23");if(!X)n7.write(M8.green(`✓ Amp CLI is already up to date.
|
|
6369
6369
|
`)),process.exit(0);if(!Y)n7.write(M8.yellow("[WARN] could not find latest version")),process.exit(0);Q=Y,n7.write(M8.blue(`Updating to version ${Y}...
|
|
6370
6370
|
`)),await qC(Y),n7.write(M8.green(`✓ Successfully updated to version ${Y}
|
|
6371
6371
|
`))}let Z=await qR(Q);if(Z.warning)n7.write(`
|
package/package.json
CHANGED