@sourcegraph/amp 0.0.1753905742-g3609e1 → 0.0.1753935310-gd618e6
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 +6 -6
- package/package.json +1 -1
package/dist/main.js
CHANGED
@@ -108,7 +108,7 @@ ${SEA(Q.progress)}
|
|
108
108
|
`)}];if(A===void 0)return[{type:"text",text:"undefined"}];if(A===null)return[{type:"text",text:"null"}];return[{type:"text",text:jR(A)}]}function kEA(A){return typeof A==="object"&&A!==null&&"type"in A&&(A.type==="text"&&("text"in A)&&typeof A.text==="string"||A.type==="image"&&("data"in A)&&typeof A.data==="string"&&("mimeType"in A)&&typeof A.mimeType==="string")}function gEA(A){return typeof A==="object"&&A!==null&&"type"in A&&"message"in A&&typeof A.type==="string"&&typeof A.message==="string"}var Ya1,Yf,Uf="claude-sonnet-4-20250514",qa1=32000,iG1,TEA=8000,lG1=4000,aG1,fEA,yEA,bEA,qf;var rM=$1(()=>{si1();Ya1=xA(jL(),1);x6();hG1();JY();R6();K7();Zf();_M();tL();_Q();vR();fR();qZ();Yf={fromNativeThread(A){let{summaryBlock:Q,index:B}=OE(A)??{summaryBlock:void 0,index:0},J=[];if(Q&&Q.summary.type==="message")J.push({role:"assistant",content:[{type:"text",text:Q.summary.summary.trimEnd()}]});for(let D=B+(Q?1:0);D<A.messages.length;D++){let z=A.messages[D];if(!z)continue;switch(z.role){case"user":{let Z=_EA(z);if(Z.length===0)continue;J.push({role:"user",content:Z});break}case"assistant":{let Z=z.content.filter((Y)=>{if(Y.type==="tool_use"&&Y.inputPartialJSON)return!1;return!0}).map((Y)=>{let U={...Y};return delete U.inputIncomplete,U}),K=wZ(A);for(let Y of Z)if(Y.type==="tool_use"){if(!K.get(Y.id)?.run)throw new Error(`(bug) corresponding tool_result not found for tool_use (id=${Y.id}, name=${Y.name})`)}if(Z.length===0)break;let G=jEA(Z),X=G.length-1;while(X>=0){let Y=G[X];if(!Y||Y.type!=="thinking"&&Y.type!=="redacted_thinking")break;X--}if(X<G.length-1)G=G.slice(0,X+1);if(G.length>0)J.push({role:"assistant",content:k9(G)});break}}}return J},toNativeThread(A){let Q=[];for(let B of A)if(B.role==="user"){let J=[];if(Array.isArray(B.content))for(let D of B.content){let z=WB1(Xa1(D));if(z&&(z.type==="text"||z.type==="image"||z.type==="tool_result"))J.push(z)}else J.push({type:"text",text:B.content});Q.push({role:"user",content:J})}else if(B.role==="assistant"){let J=[];if(Array.isArray(B.content))for(let D of B.content){let z=WB1(Xa1(D));if(z&&(z.type==="text"||z.type==="thinking"||z.type==="redacted_thinking"||z.type==="tool_use")){if(z.type==="tool_use"&&"id"in D)J.push({...z,id:D.id});else if(z.type!=="tool_use")J.push(z)}}else J.push({type:"text",text:B.content});Q.push({role:"assistant",content:J,state:{type:"complete",stopReason:"end_turn"}})}return{messages:Q}}};iG1=200000-qa1;aG1=Ya1.metrics.getMeter("inference"),fEA=aG1.createCounter("inference.count",{description:"Number of inferences made",unit:"inferences"}),yEA=aG1.createCounter("inference.message_count",{description:"Number of messages streamed from the model",unit:"messages"}),bEA=aG1.createHistogram("inference.latency",{description:"The time it took for the first message to be received",unit:"ms"});qf=class qf extends Error{constructor(A="Token limit exceeded"){super(A);this.name="TokenLimitError",Object.setPrototypeOf(this,qf.prototype)}}});var Ca1={};t6(Ca1,{loadProfileEnvironmentVariables:()=>Ff});import{spawn as xEA}from"node:child_process";import Sa from"node:os";function Na1(A){return{CLAUDECODE:"1",AGENT:"amp",AGENT_THREAD_ID:A?.thread?.id||"",AMP_CURRENT_THREAD_ID:A?.thread?.id||""}}function GY(A,Q){let B=Na1(Q);return{...A,...B}}function Ff(A,Q="always",B){if(Q==="never")return UA.of(GY(gq,B));return UA.of(GY(gq,B))}function Ma1(A,Q){if(Sa.platform()!=="darwin"&&Sa.platform()!=="linux")return UA.of(GY(gq,Q));let B=Date.now();return new UA((J)=>{let D=Sa.userInfo().shell??process.env.SHELL??"/bin/bash",z="AMP_SHELL_ENV_MARKER",K=`${A?`cd '${A.replace(/'/g,"\\'")}';`:""}printf '%s' AMP_SHELL_ENV_MARKER; /usr/bin/env;`,G=setTimeout(()=>{j1.error("Shell environment collection timed out"),Y.kill(),J.next(GY(gq,Q)),J.complete()},5000),X=["-l","-i","-c",K],Y=xEA(D,X,{stdio:["ignore","pipe","pipe"],detached:!0,env:{...process.env,NONINTERACTIVE:"1",DEBIAN_FRONTEND:"noninteractive"}}),U="",F="";if(Y.stdout)Y.stdout.on("data",(H)=>{U+=H.toString()});if(Y.stderr)Y.stderr.on("data",(H)=>{F+=H.toString()});return Y.on("error",(H)=>{j1.error("Failed to spawn shell:",{err:H}),clearTimeout(G),J.next(GY(gq,Q)),J.complete()}),Y.on("close",(H)=>{clearTimeout(G);let w=Date.now()-B;if(H!==0){j1.error(`Shell process exited with code ${H}`),J.next(GY(gq,Q)),J.complete();return}let W={},I=U.indexOf("AMP_SHELL_ENV_MARKER");if(I!==-1)U.substring(I+20).split(`
|
109
109
|
`).forEach((N)=>{let O=N.match(/^([^=]+)=(.*)$/);if(O&&O[1]&&O[2]){let L=O[1],T=O[2];W[L]=T}});else j1.warn("Failed to detect Amp marker while loading the login shell",{marker:"AMP_SHELL_ENV_MARKER"}),Object.assign(W,gq);j1.info("Loaded login shell environment",{shell:D,shellArgs:X,durationMillis:w,directory:A,loadedVariableCount:Object.keys(W).length}),J.next(GY(W,Q)),J.complete()}),()=>{clearTimeout(G),Y.kill()}})}function mEA(){for(let[A,Q]of Object.entries($a))if(uEA(Q))$a.delete(A)}function uEA(A){return A.timestamp+hEA>Date.now()}function cEA(){if(process.env.IN_NIX_SHELL==="false")return!1;if(process.env.IN_NIX_SHELL)return!0;return(process.env.PATH??"").split(pEA).some((Q)=>Q.startsWith("/nix/store"))}var hEA=86400000,$a,gq,pEA;var va=$1(()=>{x6();R6();$a=new Map,gq=process.env;pEA=Sa.platform()==="win32"?";":":"});var Ta1=o((ZD2,Ra1)=>{Ra1.exports=La1;La1.sync=lEA;var Oa1=v0("fs");function dEA(A,Q){var B=Q.pathExt!==void 0?Q.pathExt:process.env.PATHEXT;if(!B)return!0;if(B=B.split(";"),B.indexOf("")!==-1)return!0;for(var J=0;J<B.length;J++){var D=B[J].toLowerCase();if(D&&A.substr(-D.length).toLowerCase()===D)return!0}return!1}function Va1(A,Q,B){if(!A.isSymbolicLink()&&!A.isFile())return!1;return dEA(Q,B)}function La1(A,Q,B){Oa1.stat(A,function(J,D){B(J,J?!1:Va1(D,A,Q))})}function lEA(A,Q){return Va1(Oa1.statSync(A),A,Q)}});var $a1=o((KD2,Sa1)=>{Sa1.exports=Pa1;Pa1.sync=iEA;var ja1=v0("fs");function Pa1(A,Q,B){ja1.stat(A,function(J,D){B(J,J?!1:_a1(D,Q))})}function iEA(A,Q){return _a1(ja1.statSync(A),Q)}function _a1(A,Q){return A.isFile()&&aEA(A,Q)}function aEA(A,Q){var{mode:B,uid:J,gid:D}=A,z=Q.uid!==void 0?Q.uid:process.getuid&&process.getuid(),Z=Q.gid!==void 0?Q.gid:process.getgid&&process.getgid(),K=parseInt("100",8),G=parseInt("010",8),X=parseInt("001",8),Y=K|G,U=B&X||B&G&&D===Z||B&K&&J===z||B&Y&&z===0;return U}});var ka1=o((XD2,va1)=>{var GD2=v0("fs"),ka;if(process.platform==="win32"||global.TESTING_WINDOWS)ka=Ta1();else ka=$a1();va1.exports=rG1;rG1.sync=rEA;function rG1(A,Q,B){if(typeof Q==="function")B=Q,Q={};if(!B){if(typeof Promise!=="function")throw new TypeError("callback not provided");return new Promise(function(J,D){rG1(A,Q||{},function(z,Z){if(z)D(z);else J(Z)})})}ka(A,Q||{},function(J,D){if(J){if(J.code==="EACCES"||Q&&Q.ignoreErrors)J=null,D=!1}B(J,D)})}function rEA(A,Q){try{return ka.sync(A,Q||{})}catch(B){if(Q&&Q.ignoreErrors||B.code==="EACCES")return!1;else throw B}}});var ma1=o((YD2,ha1)=>{var bR=process.platform==="win32"||process.env.OSTYPE==="cygwin"||process.env.OSTYPE==="msys",fa1=v0("path"),nEA=bR?";":":",ya1=ka1(),ba1=(A)=>Object.assign(new Error(`not found: ${A}`),{code:"ENOENT"}),ga1=(A,Q)=>{let B=Q.colon||nEA,J=A.match(/\//)||bR&&A.match(/\\/)?[""]:[...bR?[process.cwd()]:[],...(Q.path||process.env.PATH||"").split(B)],D=bR?Q.pathExt||process.env.PATHEXT||".EXE;.CMD;.BAT;.COM":"",z=bR?D.split(B):[""];if(bR){if(A.indexOf(".")!==-1&&z[0]!=="")z.unshift("")}return{pathEnv:J,pathExt:z,pathExtExe:D}},xa1=(A,Q,B)=>{if(typeof Q==="function")B=Q,Q={};if(!Q)Q={};let{pathEnv:J,pathExt:D,pathExtExe:z}=ga1(A,Q),Z=[],K=(X)=>new Promise((Y,U)=>{if(X===J.length)return Q.all&&Z.length?Y(Z):U(ba1(A));let F=J[X],H=/^".*"$/.test(F)?F.slice(1,-1):F,E=fa1.join(H,A),w=!H&&/^\.[\\\/]/.test(A)?A.slice(0,2)+E:E;Y(G(w,X,0))}),G=(X,Y,U)=>new Promise((F,H)=>{if(U===D.length)return F(K(Y+1));let E=D[U];ya1(X+E,{pathExt:z},(w,W)=>{if(!w&&W)if(Q.all)Z.push(X+E);else return F(X+E);return F(G(X,Y,U+1))})});return B?K(0).then((X)=>B(null,X),B):K(0)},sEA=(A,Q)=>{Q=Q||{};let{pathEnv:B,pathExt:J,pathExtExe:D}=ga1(A,Q),z=[];for(let Z=0;Z<B.length;Z++){let K=B[Z],G=/^".*"$/.test(K)?K.slice(1,-1):K,X=fa1.join(G,A),Y=!G&&/^\.[\\\/]/.test(A)?A.slice(0,2)+X:X;for(let U=0;U<J.length;U++){let F=Y+J[U];try{if(ya1.sync(F,{pathExt:D}))if(Q.all)z.push(F);else return F}catch(H){}}}if(Q.all&&z.length)return z;if(Q.nothrow)return null;throw ba1(A)};ha1.exports=xa1;xa1.sync=sEA});var pa1=o((UD2,nG1)=>{var ua1=(A={})=>{let Q=A.env||process.env;if((A.platform||process.platform)!=="win32")return"PATH";return Object.keys(Q).reverse().find((J)=>J.toUpperCase()==="PATH")||"Path"};nG1.exports=ua1;nG1.exports.default=ua1});var ia1=o((qD2,la1)=>{var ca1=v0("path"),oEA=ma1(),tEA=pa1();function da1(A,Q){let B=A.options.env||process.env,J=process.cwd(),D=A.options.cwd!=null,z=D&&process.chdir!==void 0&&!process.chdir.disabled;if(z)try{process.chdir(A.options.cwd)}catch(K){}let Z;try{Z=oEA.sync(A.command,{path:B[tEA({env:B})],pathExt:Q?ca1.delimiter:void 0})}catch(K){}finally{if(z)process.chdir(J)}if(Z)Z=ca1.resolve(D?A.options.cwd:"",Z);return Z}function eEA(A){return da1(A)||da1(A,!0)}la1.exports=eEA});var aa1=o((BwA,oG1)=>{var sG1=/([()\][%!^"`<>&|;, *?])/g;function AwA(A){return A=A.replace(sG1,"^$1"),A}function QwA(A,Q){if(A=`${A}`,A=A.replace(/(?=(\\+?)?)\1"/g,"$1$1\\\""),A=A.replace(/(?=(\\+?)?)\1$/,"$1$1"),A=`"${A}"`,A=A.replace(sG1,"^$1"),Q)A=A.replace(sG1,"^$1");return A}BwA.command=AwA;BwA.argument=QwA});var na1=o((FD2,ra1)=>{ra1.exports=/^#!(.*)/});var oa1=o((HD2,sa1)=>{var zwA=na1();sa1.exports=(A="")=>{let Q=A.match(zwA);if(!Q)return null;let[B,J]=Q[0].replace(/#! ?/,"").split(" "),D=B.split("/").pop();if(D==="env")return J;return J?`${D} ${J}`:D}});var ea1=o((ED2,ta1)=>{var tG1=v0("fs"),ZwA=oa1();function KwA(A){let B=Buffer.alloc(150),J;try{J=tG1.openSync(A,"r"),tG1.readSync(J,B,0,150,0),tG1.closeSync(J)}catch(D){}return ZwA(B.toString())}ta1.exports=KwA});var Jr1=o((wD2,Br1)=>{var GwA=v0("path"),Ar1=ia1(),Qr1=aa1(),XwA=ea1(),YwA=process.platform==="win32",UwA=/\.(?:com|exe)$/i,qwA=/node_modules[\\/].bin[\\/][^\\/]+\.cmd$/i;function FwA(A){A.file=Ar1(A);let Q=A.file&&XwA(A.file);if(Q)return A.args.unshift(A.file),A.command=Q,Ar1(A);return A.file}function HwA(A){if(!YwA)return A;let Q=FwA(A),B=!UwA.test(Q);if(A.options.forceShell||B){let J=qwA.test(Q);A.command=GwA.normalize(A.command),A.command=Qr1.command(A.command),A.args=A.args.map((z)=>Qr1.argument(z,J));let D=[A.command].concat(A.args).join(" ");A.args=["/d","/s","/c",`"${D}"`],A.command=process.env.comspec||"cmd.exe",A.options.windowsVerbatimArguments=!0}return A}function EwA(A,Q,B){if(Q&&!Array.isArray(Q))B=Q,Q=null;Q=Q?Q.slice(0):[],B=Object.assign({},B);let J={command:A,args:Q,options:B,file:void 0,original:{command:A,args:Q}};return B.shell?J:HwA(J)}Br1.exports=EwA});var Zr1=o((WD2,zr1)=>{var eG1=process.platform==="win32";function AX1(A,Q){return Object.assign(new Error(`${Q} ${A.command} ENOENT`),{code:"ENOENT",errno:"ENOENT",syscall:`${Q} ${A.command}`,path:A.command,spawnargs:A.args})}function wwA(A,Q){if(!eG1)return;let B=A.emit;A.emit=function(J,D){if(J==="exit"){let z=Dr1(D,Q);if(z)return B.call(A,"error",z)}return B.apply(A,arguments)}}function Dr1(A,Q){if(eG1&&A===1&&!Q.file)return AX1(Q.original,"spawn");return null}function WwA(A,Q){if(eG1&&A===1&&!Q.file)return AX1(Q.original,"spawnSync");return null}zr1.exports={hookChildProcess:wwA,verifyENOENT:Dr1,verifyENOENTSync:WwA,notFoundError:AX1}});var Xr1=o((ID2,gR)=>{var Kr1=v0("child_process"),QX1=Jr1(),BX1=Zr1();function Gr1(A,Q,B){let J=QX1(A,Q,B),D=Kr1.spawn(J.command,J.args,J.options);return BX1.hookChildProcess(D,J),D}function IwA(A,Q,B){let J=QX1(A,Q,B),D=Kr1.spawnSync(J.command,J.args,J.options);return D.error=D.error||BX1.verifyENOENTSync(D.status,J),D}gR.exports=Gr1;gR.exports.spawn=Gr1;gR.exports.sync=IwA;gR.exports._parse=QX1;gR.exports._enoent=BX1});class JX1{append(A){this._buffer=this._buffer?Buffer.concat([this._buffer,A]):A}readMessage(){if(!this._buffer)return null;let A=this._buffer.indexOf(`
|
110
110
|
`);if(A===-1)return null;let Q=this._buffer.toString("utf8",0,A).replace(/\r$/,"");return this._buffer=this._buffer.subarray(A+1),MwA(Q)}clear(){this._buffer=void 0}}function MwA(A){return _E.parse(JSON.parse(A))}function Yr1(A){return JSON.stringify(A)+`
|
111
|
-
`}var Ur1=$1(()=>{jq()});var wr1={};t6(wr1,{getDefaultEnvironment:()=>Hr1,StdioClientTransport:()=>Er1,DEFAULT_INHERITED_ENV_VARS:()=>Fr1});import fa from"node:process";import{PassThrough as NwA}from"node:stream";function Hr1(){let A={};for(let Q of Fr1){let B=fa.env[Q];if(B===void 0)continue;if(B.startsWith("()"))continue;A[Q]=B}return A}class Er1{constructor(A){if(this._abortController=new AbortController,this._readBuffer=new JX1,this._stderrStream=null,this._serverParams=A,A.stderr==="pipe"||A.stderr==="overlapped")this._stderrStream=new NwA}async start(){if(this._process)throw new Error("StdioClientTransport already started! If using Client class, note that connect() calls start() automatically.");return new Promise((A,Q)=>{var B,J,D,z,Z,K;if(this._process=qr1.default(this._serverParams.command,(B=this._serverParams.args)!==null&&B!==void 0?B:[],{env:(J=this._serverParams.env)!==null&&J!==void 0?J:Hr1(),stdio:["pipe","pipe",(D=this._serverParams.stderr)!==null&&D!==void 0?D:"inherit"],shell:!1,signal:this._abortController.signal,windowsHide:fa.platform==="win32"&&CwA(),cwd:this._serverParams.cwd}),this._process.on("error",(G)=>{var X,Y;if(G.name==="AbortError"){(X=this.onclose)===null||X===void 0||X.call(this);return}Q(G),(Y=this.onerror)===null||Y===void 0||Y.call(this,G)}),this._process.on("spawn",()=>{A()}),this._process.on("close",(G)=>{var X;this._process=void 0,(X=this.onclose)===null||X===void 0||X.call(this)}),(z=this._process.stdin)===null||z===void 0||z.on("error",(G)=>{var X;(X=this.onerror)===null||X===void 0||X.call(this,G)}),(Z=this._process.stdout)===null||Z===void 0||Z.on("data",(G)=>{this._readBuffer.append(G),this.processReadBuffer()}),(K=this._process.stdout)===null||K===void 0||K.on("error",(G)=>{var X;(X=this.onerror)===null||X===void 0||X.call(this,G)}),this._stderrStream&&this._process.stderr)this._process.stderr.pipe(this._stderrStream)})}get stderr(){var A,Q;if(this._stderrStream)return this._stderrStream;return(Q=(A=this._process)===null||A===void 0?void 0:A.stderr)!==null&&Q!==void 0?Q:null}get pid(){var A,Q;return(Q=(A=this._process)===null||A===void 0?void 0:A.pid)!==null&&Q!==void 0?Q:null}processReadBuffer(){var A,Q;while(!0)try{let B=this._readBuffer.readMessage();if(B===null)break;(A=this.onmessage)===null||A===void 0||A.call(this,B)}catch(B){(Q=this.onerror)===null||Q===void 0||Q.call(this,B)}}async close(){this._abortController.abort(),this._process=void 0,this._readBuffer.clear()}send(A){return new Promise((Q)=>{var B;if(!((B=this._process)===null||B===void 0?void 0:B.stdin))throw new Error("Not connected");let J=Yr1(A);if(this._process.stdin.write(J))Q();else this._process.stdin.once("drain",Q)})}}function CwA(){return"type"in fa}var qr1,Fr1;var Wr1=$1(()=>{qr1=xA(Xr1(),1);Ur1();Fr1=fa.platform==="win32"?["APPDATA","HOMEDRIVE","HOMEPATH","LOCALAPPDATA","PATH","PROCESSOR_ARCHITECTURE","SYSTEMDRIVE","SYSTEMROOT","TEMP","USERNAME","USERPROFILE","PROGRAMFILES"]:["HOME","LOGNAME","PATH","SHELL","TERM","USER"]});function zX1(){for(let A of xR)Vr1(A);xR.clear()}function Vr1(A){if(!A.pid){try{A.kill("SIGKILL")}catch(Q){j1.error("Failed to kill process without PID",Q)}return}if(Hf.has(A.pid)){j1.debug(`Process ${A.pid} already being killed, skipping`);return}Hf.add(A.pid);try{if(process.platform==="win32"){let{spawn:Q}=v0("node:child_process"),B=Q("taskkill",["/F","/T","/PID",A.pid.toString()],{stdio:"ignore"});B.on("error",(J)=>{j1.error(`Failed to kill Windows process tree ${A.pid}`,J);try{A.kill("SIGKILL")}catch(D){j1.error(`Fallback kill also failed for ${A.pid}`,D)}}),B.on("exit",()=>{Hf.delete(A.pid)})}else{try{process.kill(A.pid,0),process.kill(-A.pid,"SIGKILL")}catch(Q){j1.debug(`Process ${A.pid} no longer exists, skipping kill`)}Hf.delete(A.pid)}}catch(Q){j1.error(`Failed to kill process ${A.pid}`,Q),Hf.delete(A.pid)}}function YG(...A){return new UA((Q)=>{let B=!1,J,D=!1;return(async()=>{try{let{spawn:Z}=await import("node:child_process");if(B)return;let K={...A[2],detached:process.platform!=="win32",env:{...process.env,...A[2]?.env||{},NONINTERACTIVE:"1",DEBIAN_FRONTEND:"noninteractive"}};if(!K.stdio)K.stdio=["pipe","pipe","pipe"];J=Z(A[0],A[1],K),xR.add(J);let G={stdout:"",stderr:"",combinedOutput:"",exitCode:null,exited:!1,pid:J.pid};J.on("spawn",()=>{Q.next({...G,process:J})}),J.stdout?.on("data",(X)=>{if(B)return;let Y=X.toString();G.stdout+=Y,G.combinedOutput+=Y,G.lastData=X,Q.next({...G,process:J})}),J.stderr?.on("data",(X)=>{if(B)return;let Y=X.toString();G.stderr+=Y,G.combinedOutput+=Y,G.lastData=X,Q.next({...G,process:J})}),J.on("exit",(X)=>{if(B)return;if(D)return;if(D=!0,G.exitCode=X??-1,G.exited=!0,G.lastData=void 0,Q.next({...G,process:J}),Q.complete(),J)xR.delete(J)}),J.on("error",(X)=>{if(B)return;if(Q.error(X),J)xR.delete(J)})}catch(Z){if(B)return;Q.error(Z)}})(),()=>{if(B=!0,J&&!D)Vr1(J),xR.delete(J)}})}function ya(A){if(typeof A!=="string")throw new Error("arg is not a string");if(A.startsWith("-"))throw new Error("arg is not safe")}function XY(A){if(!A)throw new Error("tool requires a working directory");if(A.scheme!=="file"&&A.scheme!=="vscode-vfs")throw new Error(`tool requires a dir with a file: URI (got ${JSON.stringify(A.scheme)})`)}var xR,Hf;var UG=$1(()=>{x6();R6();xR=new Set,Hf=new Set;if(typeof process!=="undefined")process.on("exit",()=>{zX1()}),process.on("SIGINT",()=>{j1.info("Received SIGINT signal, shutting down"),zX1(),process.exit(0)}),process.on("SIGTERM",()=>{j1.info("Received SIGTERM signal, shutting down"),zX1(),process.exit(0)})});function KX1(A){let Q=A;if(Q.startsWith("~/")){let B=process.env.HOME||process.env.USERPROFILE||"";Q=Q.replace("~/",`${B}/`)}else if(Q==="~")Q=process.env.HOME||process.env.USERPROFILE||"";if(Q=Q.replace(/%([^%]+)%/g,(B,J)=>{return process.env[J]||`%${J}%`}),Q.includes("%USERPROFILE%")&&process.env.USERPROFILE)Q=Q.replace(/%USERPROFILE%/g,process.env.USERPROFILE);return c6.file(Q)}function ZX1(A,Q){let B=Q.replace(/\./g,"\\.").replace(/\*\*/g,"§DOUBLESTAR§").replace(/\*/g,"[^/]*").replace(/§DOUBLESTAR§/g,".*");return new RegExp(`^${B}$`).test(A.toString())}function Lr1(A,Q){return Q.some((B)=>ZX1(A,B))}async function TwA(A,Q,B){let J=await B.realpath(A).catch(()=>null);if(!J)return!1;for(let D of Q)try{let z=KX1(D),Z=await B.realpath(z).catch(()=>null);if(Z&&J.toString()===Z.toString())return!0}catch{}return!1}async function jwA(A,Q,B){try{let J=await Q.realpath(A).catch(()=>A);for(let D of B)if(ZX1(J,D)||ZX1(A,D))return null;for(let[D,z]of Object.entries(RwA)){if(z.patterns?.length){if(Lr1(J,z.patterns)||Lr1(A,z.patterns))return{key:D,pattern:z}}if(z.envPaths?.length){if(await TwA(A,z.envPaths,Q))return{key:D,pattern:z}}}return null}catch{return null}}async function hR(A,Q,B){if(B?.dangerouslyAllowAll??!1)return{requiresConsent:!1};try{let D=await jwA(A,Q,B["guardedFiles.allowlist"]??[]);if(D)return{requiresConsent:!0,reason:`${D.pattern.description}`};return{requiresConsent:!1}}catch{return{requiresConsent:!0,reason:"Unable to resolve file path"}}}var RwA;var Ef=$1(()=>{o8();RwA={"vscode-user-settings":{description:"VS Code User Settings",patterns:[],envPaths:["~/Library/Application Support/Code/User/settings.json","~/.config/Code/User/settings.json","%APPDATA%/Code/User/settings.json"]},"vscode-workspace-settings":{description:"VS Code Workspace Settings",patterns:["**/.vscode/settings.json"]},"vscode-extensions":{description:"VS Code Extensions Configuration",patterns:["**/.vscode/extensions.json"]},"amp-settings":{description:"Amp Configuration Files",patterns:["**/amp.json","**/.amp/**"]},"shell-configs":{description:"Shell Configuration Files",patterns:["**/.bashrc","**/.zshrc","**/.fishrc","**/.cshrc","**/.tcshrc"],envPaths:["~/.bashrc","~/.zshrc","~/.fishrc","~/.cshrc","~/.tcshrc"]},"ssh-keys":{description:"SSH Keys and Configuration",patterns:["**/.ssh/**"],envPaths:["~/.ssh/**"]},"gnupg-keys":{description:"GnuPG Keys and Configuration",patterns:["**/.gnupg/**"],envPaths:["~/.gnupg/**"]},"environment-files":{description:"Environment Variable Files",patterns:["**/.env","**/.env.*"]},"user-config":{description:"User Configuration Directory",patterns:["**/.config/**"],envPaths:["~/.config/**"]},"claude-config":{description:"Claude AI Configuration",patterns:["**/.claude/**"],envPaths:["~/.claude/**"]},"git-internals":{description:"Git Internal Files",patterns:["**/.git/**"]},"kubernetes-config":{description:"Kubernetes Configuration",patterns:["**/.kube/**"],envPaths:["~/.kube/**"]},"cache-directories":{description:"Cache Directories",patterns:["**/.cache/**"],envPaths:["~/.cache/**"]},"hidden-files":{description:"Hidden Files and Directories",patterns:["**/.*","**/.*/**"]},"windows-appdata":{description:"Windows Application Data",patterns:["%APPDATA%/**"],envPaths:["%APPDATA%/**"]}}});function PwA(A,Q){if(Q==="")return!1;if(Q.length===1){if(Q==="*")return!0;return Q===A}if(A===Q)return!0;if(Q.includes("*")||Q.includes("?")||Q.includes("[")||Q.includes("{"))try{return Tr1.default(Q,{dot:!0})(A)}catch(B){return!1}return!1}function _wA(A,Q,B,J){if(!PwA(Q,A.tool))return!1;if(A.context&&A.context!==J)return!1;if(!A.matches||Object.keys(A.matches).length===0)return!0;return Object.entries(A.matches).every(([D,z])=>{let Z=B[D];return kwA(Z,z)})}async function SwA(A,Q,B,J){if(A.action!=="delegate")return{action:A.action,matchedEntry:A};if(!B||!A.to)return{action:null,matchedEntry:A,error:"No spawn function provided"};try{let D=await $wA(A.to,Q,B,J);return vwA(D,A)}catch(D){return{action:"reject",error:D instanceof Error?D.message:"Unknown error",matchedEntry:A}}}async function $wA(A,Q,B,J){let D={AGENT:"amp"};if(J)D.AMP_THREAD_ID=J;let Z=A.includes("~")||A.includes("%")?KX1(A).path:A,K=B(Z,[],{env:D}),G=ad(K,1e4);return new Promise((X,Y)=>{let U;G.subscribe({next:(F)=>{if(typeof F==="object"&&F!==null&&"status"in F&&F.status==="error"){Y(new Error("Delegate command timed out after 10 seconds"));return}if(F.process&&!F.exited)F.process.stdin?.write(JSON.stringify(Q)),F.process.stdin?.end();U=F},complete:()=>{if(U?.exited)X({exitCode:U.exitCode??-1,stdout:U.stdout,stderr:U.stderr});else Y(new Error("Process did not exit properly"))},error:(F)=>{Y(F)}})})}function vwA({exitCode:A,stderr:Q},B){switch(A){case 0:return{action:"allow",matchedEntry:B};case 1:return{action:"ask",matchedEntry:B};default:return{action:"reject",matchedEntry:B,error:Q}}}async function ga(A,Q,B,J,D,z){let Z=0;for(let K of B)try{if(!_wA(K,A,Q,J)){Z=Z+1;continue}let G=await SwA(K,Q,D,z);return G.matchIndex=Z,G}catch(G){return{action:null,error:G instanceof Error?G.message:"Unknown error"}}return{action:null}}function kwA(A,Q){if(typeof A!=="string")return!1;return jr1(A,Q)}function jr1(A,Q){if(typeof Q==="string")return Rr1(A,Q);if(Array.isArray(Q))return Q.some((B)=>Rr1(A,B));if(typeof Q==="object"&&Q!==null){if("$not"in Q)return!jr1(A,Q.$not);if("$rx"in Q)try{return new RegExp(Q.$rx).test(A)}catch(B){throw new Error(`Invalid regex: ${Q.$rx}`)}}return!1}function Rr1(A,Q){if(Q==="*")return!0;if(!Q.includes("*"))return A===Q;let B=Q.replace(/[.+?^${}()|[\]\\]/g,"\\$&").replace(/\*/g,".*");return new RegExp(`^${B}$`).test(A)}var Tr1,ba;var GX1=$1(()=>{UG();Ef();AB1();Tr1=xA(Wv(),1),ba=YG});class Pr1{input;position=0;line=1;column=1;tokens=[];constructor(A){this.input=A}current(){return this.position<this.input.length?this.input[this.position]:""}peek(){return this.position+1<this.input.length?this.input[this.position+1]:""}advance(){let A=this.current();if(this.position++,A===`
|
111
|
+
`}var Ur1=$1(()=>{jq()});var wr1={};t6(wr1,{getDefaultEnvironment:()=>Hr1,StdioClientTransport:()=>Er1,DEFAULT_INHERITED_ENV_VARS:()=>Fr1});import fa from"node:process";import{PassThrough as NwA}from"node:stream";function Hr1(){let A={};for(let Q of Fr1){let B=fa.env[Q];if(B===void 0)continue;if(B.startsWith("()"))continue;A[Q]=B}return A}class Er1{constructor(A){if(this._abortController=new AbortController,this._readBuffer=new JX1,this._stderrStream=null,this._serverParams=A,A.stderr==="pipe"||A.stderr==="overlapped")this._stderrStream=new NwA}async start(){if(this._process)throw new Error("StdioClientTransport already started! If using Client class, note that connect() calls start() automatically.");return new Promise((A,Q)=>{var B,J,D,z,Z,K;if(this._process=qr1.default(this._serverParams.command,(B=this._serverParams.args)!==null&&B!==void 0?B:[],{env:(J=this._serverParams.env)!==null&&J!==void 0?J:Hr1(),stdio:["pipe","pipe",(D=this._serverParams.stderr)!==null&&D!==void 0?D:"inherit"],shell:!1,signal:this._abortController.signal,windowsHide:fa.platform==="win32"&&CwA(),cwd:this._serverParams.cwd}),this._process.on("error",(G)=>{var X,Y;if(G.name==="AbortError"){(X=this.onclose)===null||X===void 0||X.call(this);return}Q(G),(Y=this.onerror)===null||Y===void 0||Y.call(this,G)}),this._process.on("spawn",()=>{A()}),this._process.on("close",(G)=>{var X;this._process=void 0,(X=this.onclose)===null||X===void 0||X.call(this)}),(z=this._process.stdin)===null||z===void 0||z.on("error",(G)=>{var X;(X=this.onerror)===null||X===void 0||X.call(this,G)}),(Z=this._process.stdout)===null||Z===void 0||Z.on("data",(G)=>{this._readBuffer.append(G),this.processReadBuffer()}),(K=this._process.stdout)===null||K===void 0||K.on("error",(G)=>{var X;(X=this.onerror)===null||X===void 0||X.call(this,G)}),this._stderrStream&&this._process.stderr)this._process.stderr.pipe(this._stderrStream)})}get stderr(){var A,Q;if(this._stderrStream)return this._stderrStream;return(Q=(A=this._process)===null||A===void 0?void 0:A.stderr)!==null&&Q!==void 0?Q:null}get pid(){var A,Q;return(Q=(A=this._process)===null||A===void 0?void 0:A.pid)!==null&&Q!==void 0?Q:null}processReadBuffer(){var A,Q;while(!0)try{let B=this._readBuffer.readMessage();if(B===null)break;(A=this.onmessage)===null||A===void 0||A.call(this,B)}catch(B){(Q=this.onerror)===null||Q===void 0||Q.call(this,B)}}async close(){this._abortController.abort(),this._process=void 0,this._readBuffer.clear()}send(A){return new Promise((Q)=>{var B;if(!((B=this._process)===null||B===void 0?void 0:B.stdin))throw new Error("Not connected");let J=Yr1(A);if(this._process.stdin.write(J))Q();else this._process.stdin.once("drain",Q)})}}function CwA(){return"type"in fa}var qr1,Fr1;var Wr1=$1(()=>{qr1=xA(Xr1(),1);Ur1();Fr1=fa.platform==="win32"?["APPDATA","HOMEDRIVE","HOMEPATH","LOCALAPPDATA","PATH","PROCESSOR_ARCHITECTURE","SYSTEMDRIVE","SYSTEMROOT","TEMP","USERNAME","USERPROFILE","PROGRAMFILES"]:["HOME","LOGNAME","PATH","SHELL","TERM","USER"]});function zX1(){for(let A of xR)Vr1(A);xR.clear()}function Vr1(A){if(!A.pid){try{A.kill("SIGKILL")}catch(Q){j1.error("Failed to kill process without PID",Q)}return}if(Hf.has(A.pid)){j1.debug(`Process ${A.pid} already being killed, skipping`);return}Hf.add(A.pid);try{if(process.platform==="win32"){let{spawn:Q}=v0("node:child_process"),B=Q("taskkill",["/F","/T","/PID",A.pid.toString()],{stdio:"ignore"});B.on("error",(J)=>{j1.error(`Failed to kill Windows process tree ${A.pid}`,J);try{A.kill("SIGKILL")}catch(D){j1.error(`Fallback kill also failed for ${A.pid}`,D)}}),B.on("exit",()=>{Hf.delete(A.pid)})}else{try{process.kill(A.pid,0),process.kill(-A.pid,"SIGKILL")}catch(Q){j1.debug(`Process ${A.pid} no longer exists, skipping kill`)}Hf.delete(A.pid)}}catch(Q){j1.error(`Failed to kill process ${A.pid}`,Q),Hf.delete(A.pid)}}function YG(...A){return new UA((Q)=>{let B=!1,J,D=!1;return(async()=>{try{let{spawn:Z}=await import("node:child_process");if(B)return;let K={...A[2],detached:process.platform!=="win32",env:{...process.env,...A[2]?.env||{},NONINTERACTIVE:"1",DEBIAN_FRONTEND:"noninteractive"}};if(!K.stdio)K.stdio=["pipe","pipe","pipe"];J=Z(A[0],A[1],K),xR.add(J);let G={stdout:"",stderr:"",combinedOutput:"",exitCode:null,exited:!1,pid:J.pid};J.on("spawn",()=>{Q.next({...G,process:J})}),J.stdout?.on("data",(X)=>{if(B)return;let Y=X.toString();G.stdout+=Y,G.combinedOutput+=Y,G.lastData=X,Q.next({...G,process:J})}),J.stderr?.on("data",(X)=>{if(B)return;let Y=X.toString();G.stderr+=Y,G.combinedOutput+=Y,G.lastData=X,Q.next({...G,process:J})}),J.on("exit",(X)=>{if(B)return;if(D)return;if(D=!0,G.exitCode=X??-1,G.exited=!0,G.lastData=void 0,Q.next({...G,process:J}),Q.complete(),J)xR.delete(J)}),J.on("error",(X)=>{if(B)return;if(Q.error(X),J)xR.delete(J)})}catch(Z){if(B)return;Q.error(Z)}})(),()=>{if(B=!0,J&&!D)Vr1(J),xR.delete(J)}})}function ya(A){if(typeof A!=="string")throw new Error("arg is not a string");if(A.startsWith("-"))throw new Error("arg is not safe")}function XY(A){if(!A)throw new Error("tool requires a working directory");if(A.scheme!=="file"&&A.scheme!=="vscode-vfs")throw new Error(`tool requires a dir with a file: URI (got ${JSON.stringify(A.scheme)})`)}var xR,Hf;var UG=$1(()=>{x6();R6();xR=new Set,Hf=new Set;if(typeof process!=="undefined")process.on("exit",()=>{zX1()}),process.on("SIGINT",()=>{j1.info("Received SIGINT signal, shutting down"),zX1(),process.exit(0)}),process.on("SIGTERM",()=>{j1.info("Received SIGTERM signal, shutting down"),zX1(),process.exit(0)})});function KX1(A){let Q=A;if(Q.startsWith("~/")){let B=process.env.HOME||process.env.USERPROFILE||"";Q=Q.replace("~/",`${B}/`)}else if(Q==="~")Q=process.env.HOME||process.env.USERPROFILE||"";if(Q=Q.replace(/%([^%]+)%/g,(B,J)=>{return process.env[J]||`%${J}%`}),Q.includes("%USERPROFILE%")&&process.env.USERPROFILE)Q=Q.replace(/%USERPROFILE%/g,process.env.USERPROFILE);return c6.file(Q)}function ZX1(A,Q){let B=Q.replace(/\./g,"\\.").replace(/\*\*/g,"§DOUBLESTAR§").replace(/\*/g,"[^/]*").replace(/§DOUBLESTAR§/g,".*");return new RegExp(`^${B}$`).test(A.toString())}function Lr1(A,Q){return Q.some((B)=>ZX1(A,B))}async function TwA(A,Q,B){let J=await B.realpath(A).catch(()=>null);if(!J)return!1;for(let D of Q)try{let z=KX1(D),Z=await B.realpath(z).catch(()=>null);if(Z&&J.toString()===Z.toString())return!0}catch{}return!1}async function jwA(A,Q,B){try{let J=await Q.realpath(A).catch(()=>A);for(let D of B)if(ZX1(J,D)||ZX1(A,D))return null;for(let[D,z]of Object.entries(RwA)){if(z.patterns?.length){if(Lr1(J,z.patterns)||Lr1(A,z.patterns))return{key:D,pattern:z}}if(z.envPaths?.length){if(await TwA(A,z.envPaths,Q))return{key:D,pattern:z}}}return null}catch{return null}}async function hR(A,Q,B){if(B?.dangerouslyAllowAll??!1)return{requiresConsent:!1};try{let D=await jwA(A,Q,B["guardedFiles.allowlist"]??[]);if(D)return{requiresConsent:!0,reason:`${D.pattern.description}`};return{requiresConsent:!1}}catch{return{requiresConsent:!0,reason:"Unable to resolve file path"}}}var RwA;var Ef=$1(()=>{o8();RwA={"vscode-user-settings":{description:"VS Code User Settings",patterns:[],envPaths:["~/Library/Application Support/Code/User/settings.json","~/.config/Code/User/settings.json","%APPDATA%/Code/User/settings.json"]},"vscode-workspace-settings":{description:"VS Code Workspace Settings",patterns:["**/.vscode/settings.json"]},"vscode-extensions":{description:"VS Code Extensions Configuration",patterns:["**/.vscode/extensions.json"]},"amp-settings":{description:"Amp Configuration Files",patterns:["**/amp.json","**/.amp/**"]},"shell-configs":{description:"Shell Configuration Files",envPaths:["~/.bashrc","~/.zshrc","~/.fishrc","~/.cshrc","~/.tcshrc"]},"ssh-keys":{description:"SSH Keys and Configuration",patterns:["**/.ssh/**"],envPaths:["~/.ssh/**"]},"gnupg-keys":{description:"GnuPG Keys and Configuration",patterns:["**/.gnupg/**"],envPaths:["~/.gnupg/**"]},"environment-files":{description:"Environment Variable Files",patterns:["**/.env","**/.env.*"]},"user-config":{description:"User Configuration Directory",patterns:["**/.config/**"],envPaths:["~/.config/**"]},"claude-config":{description:"Claude AI Configuration",patterns:["**/.claude/**"],envPaths:["~/.claude/**"]},"git-internals":{description:"Git Internal Files",patterns:["**/.git/**"]},"kubernetes-config":{description:"Kubernetes Configuration",patterns:["**/.kube/**"],envPaths:["~/.kube/**"]},"cache-directories":{description:"Cache Directories",patterns:["**/.cache/**"],envPaths:["~/.cache/**"]},"common-configuration-patterns":{description:"Configuration Directories",envPaths:["~/.randomagentconfig","~/.**/**","~/.config/**","~/Library/**","~/Libary/Preferences/**"]},"windows-appdata":{description:"Windows Application Data",patterns:["%APPDATA%/**"],envPaths:["%APPDATA%/**"]}}});function PwA(A,Q){if(Q==="")return!1;if(Q.length===1){if(Q==="*")return!0;return Q===A}if(A===Q)return!0;if(Q.includes("*")||Q.includes("?")||Q.includes("[")||Q.includes("{"))try{return Tr1.default(Q,{dot:!0})(A)}catch(B){return!1}return!1}function _wA(A,Q,B,J){if(!PwA(Q,A.tool))return!1;if(A.context&&A.context!==J)return!1;if(!A.matches||Object.keys(A.matches).length===0)return!0;return Object.entries(A.matches).every(([D,z])=>{let Z=B[D];return kwA(Z,z)})}async function SwA(A,Q,B,J){if(A.action!=="delegate")return{action:A.action,matchedEntry:A};if(!B||!A.to)return{action:null,matchedEntry:A,error:"No spawn function provided"};try{let D=await $wA(A.to,Q,B,J);return vwA(D,A)}catch(D){return{action:"reject",error:D instanceof Error?D.message:"Unknown error",matchedEntry:A}}}async function $wA(A,Q,B,J){let D={AGENT:"amp"};if(J)D.AMP_THREAD_ID=J;let Z=A.includes("~")||A.includes("%")?KX1(A).path:A,K=B(Z,[],{env:D}),G=ad(K,1e4);return new Promise((X,Y)=>{let U;G.subscribe({next:(F)=>{if(typeof F==="object"&&F!==null&&"status"in F&&F.status==="error"){Y(new Error("Delegate command timed out after 10 seconds"));return}if(F.process&&!F.exited)F.process.stdin?.write(JSON.stringify(Q)),F.process.stdin?.end();U=F},complete:()=>{if(U?.exited)X({exitCode:U.exitCode??-1,stdout:U.stdout,stderr:U.stderr});else Y(new Error("Process did not exit properly"))},error:(F)=>{Y(F)}})})}function vwA({exitCode:A,stderr:Q},B){switch(A){case 0:return{action:"allow",matchedEntry:B};case 1:return{action:"ask",matchedEntry:B};default:return{action:"reject",matchedEntry:B,error:Q}}}async function ga(A,Q,B,J,D,z){let Z=0;for(let K of B)try{if(!_wA(K,A,Q,J)){Z=Z+1;continue}let G=await SwA(K,Q,D,z);return G.matchIndex=Z,G}catch(G){return{action:null,error:G instanceof Error?G.message:"Unknown error"}}return{action:null}}function kwA(A,Q){if(typeof A!=="string")return!1;return jr1(A,Q)}function jr1(A,Q){if(typeof Q==="string")return Rr1(A,Q);if(Array.isArray(Q))return Q.some((B)=>Rr1(A,B));if(typeof Q==="object"&&Q!==null){if("$not"in Q)return!jr1(A,Q.$not);if("$rx"in Q)try{return new RegExp(Q.$rx).test(A)}catch(B){throw new Error(`Invalid regex: ${Q.$rx}`)}}return!1}function Rr1(A,Q){if(Q==="*")return!0;if(!Q.includes("*"))return A===Q;let B=Q.replace(/[.+?^${}()|[\]\\]/g,"\\$&").replace(/\*/g,".*");return new RegExp(`^${B}$`).test(A)}var Tr1,ba;var GX1=$1(()=>{UG();Ef();AB1();Tr1=xA(Wv(),1),ba=YG});class Pr1{input;position=0;line=1;column=1;tokens=[];constructor(A){this.input=A}current(){return this.position<this.input.length?this.input[this.position]:""}peek(){return this.position+1<this.input.length?this.input[this.position+1]:""}advance(){let A=this.current();if(this.position++,A===`
|
112
112
|
`)this.line++,this.column=1;else this.column++;return A}skipWhitespace(){while(this.current()&&/\s/.test(this.current())&&this.current()!==`
|
113
113
|
`)this.advance()}readString(){let A="",Q=this.current();this.advance();while(this.current()&&this.current()!==Q)if(this.current()==="\\"&&this.peek()===Q)this.advance(),A+=this.advance();else A+=this.advance();if(!this.current())throw new Error("Unterminated string");return this.advance(),A}readIdentifier(){let A="";while(this.current()&&/[a-zA-Z0-9_*-]/.test(this.current()))A+=this.advance();return A}readFlag(){let A="";this.advance(),this.advance();while(this.current()&&/[a-zA-Z0-9_:-]/.test(this.current()))A+=this.advance();return A}readComment(){let A="";this.advance();while(this.current()&&this.current()!==`
|
114
114
|
`)A+=this.advance();return A.trim()}tokenize(){this.tokens=[];while(this.position<this.input.length){let A={position:this.position,line:this.line,column:this.column};if(this.skipWhitespace(),!this.current())break;if(this.current()===`
|
@@ -1263,7 +1263,7 @@ According to [PR #3250](https://github.com/sourcegraph/amp/pull/3250), this feat
|
|
1263
1263
|
<response>
|
1264
1264
|
There are three steps to implement authentication:
|
1265
1265
|
1. [Configure the JWT secret](file:///Users/alice/project/config/auth.js#L15-L23) in the configuration file
|
1266
|
-
2. [Add middleware validation]file:///Users/alice/project/middleware/auth.js#L45-L67) to check tokens on protected routes
|
1266
|
+
2. [Add middleware validation](file:///Users/alice/project/middleware/auth.js#L45-L67) to check tokens on protected routes
|
1267
1267
|
3. [Update the login handler](file:///Users/alice/project/routes/login.js#L128-L145) to generate tokens after successful authentication
|
1268
1268
|
</response>
|
1269
1269
|
</example>
|
@@ -4727,7 +4727,7 @@ ${F0.dim('--- Content truncated, use "View diff" for complete file ---')}`:"";re
|
|
4727
4727
|
`});return}if(U.trim().length>0)P(U.trim());else return;return}if(!S.ctrl&&!S.meta&&!S.tab&&j)z({type:"insert-text",text:j})});let P=async(j)=>{W(null),Q.add(j),Q.reset();try{A(j)}catch(S){j1.error("Failed to submit message",S)}};return V6(DA,{flexDirection:"column",width:"100%",flexGrow:1,flexShrink:0,ref:X,children:[D.imageAttachments.length>0&&V6(DA,{flexDirection:"row",marginBottom:1,children:[M0(FA,{color:"gray",children:"Images: "}),D.imageAttachments.map((j,S)=>V6(FA,{color:"green",children:["[image ",S+1,"]",S<D.imageAttachments.length-1?" ":""]},S))]}),E.lines.map((j,S)=>M0(DA,{flexShrink:0,flexDirection:"row",children:M0(DA,{flexGrow:1,flexShrink:0,width:"100%",children:S===I.line?V6(BZ,{children:[M0(FA,{dimColor:B,children:jS.default.substr(j.content,0,I.column)||""}),M0(FA,{inverse:!B,dimColor:B,children:jS.default(j.content)[I.column]??" "}),M0(FA,{dimColor:B,children:jS.default.substr(j.content,I.column+1)||""})]}):M0(FA,{dimColor:B,children:j.content||" "})})},S))]})}function e12(A,Q){let B=jS.default(A),J=Q,D=Q;while(J>0&&/\S/.test(B[J-1]||""))J--;while(D<B.length&&/\S/.test(B[D]||""))D++;let z=B.slice(J,D).join("");if(!z.trim())return null;return{word:z,start:J,end:D}}var PS=xA(J8(),1);PE();var U51=xA(J8(),1);function v7A(){let[A,Q]=U51.useState(null);return U51.useEffect(()=>{let B=Yi.subscribe(Q);return()=>{B.unsubscribe()}},[]),{jetbrainsState:A}}DB1();var Qy1=xA(J8(),1);function k7A({viewState:A}){let Q=Qy1.useMemo(()=>{return A.state==="active"?A.fileChanges:void 0},[A]),B=Qy1.useMemo(()=>Am1(Q),[Q]);if(!Q||B.totalFiles===0)return null;let J=B.totalFiles-B.revertedFiles;return V6(DA,{gap:1,children:[V6(FA,{dimColor:!0,children:[J," ",J===1?"file":"files"," changed"]}),(B.totalAdded>0||B.totalModified>0||B.totalRemoved>0)&&V6(FA,{children:[V6(FA,{color:"green",children:["+",B.totalAdded]}),V6(FA,{color:"yellow",children:[" ~",B.totalModified]}),V6(FA,{color:"red",children:[" -",B.totalRemoved]})]})]})}import f7A from"node:path";function y7A({jetbrainsStatus:A}){if(!A||!A.enabled)return null;let Q=process.cwd(),B=A.productName&&A.openFile&&A.workspace===Q,J;if(!A.productName)J=" IDE Not Running. To fix this problem, start your JetBrains IDE, exit this session and run `amp threads continue`.";else if(!A.workspace&&!A.openFile)J=" No Open File. To fix this problem, open a project and open a file in your JetBrains IDE.";else if(!A.workspace&&A.openFile){let D=f7A.basename(A.openFile);if(A.openFile.includes("!/"))J=` External File Open. The open file '${A.openFile}' does not belong to your project root. To fix this problem, open a file in your project sources and try again.`;else J=` Project Detection Failed. Failed to map your open file '${D}' to a project root directory. Please note that multi-root projects are not supported at the moment. Please report a bug on https://ampcode.com/discord and include relevant logs from ~/.cache/amp/logs/cli.log`}else if(!A.openFile)J=" No Open File. To fix this problem, open a file in your project.";else if(A.workspace!==Q)J=` Project Mismatch. The currently open project "${A.workspace}" does not match the working directory of Amp CLI ("${Q}").`;return M0(DA,{gap:B?1:2,children:V6(FA,{color:B?"green":"red",children:[B?"✓":"×"," ",A.productName??"JetBrains"," ",B?"• "+f7A.basename(A.openFile??""):J]})})}var q51=xA(J8(),1);function b7A(){let[A,Q]=q51.useState(0);q51.useEffect(()=>{let D=setInterval(()=>{Q((z)=>z+1)},200);return()=>clearInterval(D)},[]);let B=[{char:"∿",dim:!1},{char:"∾",dim:!1},{char:"∽",dim:!1},{char:"≋",dim:!1},{char:"≈",dim:!1},{char:"∼",dim:!1}],J=B[A%B.length];return M0(FA,{dimColor:J.dim,children:J.char})}var A02=0.8,Q02=0.9;function g7A({tokenUsage:A}){let Q=A.totalInputTokens/A.maxInputTokens,B=Math.round(Q*100),D=`${Math.max(0,Math.min(B,100))}%`,z,Z=x7A(Q);if(Z==="danger")z="red";else if(Z==="warning")z="yellow";return M0(FA,{color:z,children:D})}function x7A(A){if(A>=Q02)return"danger";else if(A>=A02)return"warning";return!1}function h7A(A){let Q=A.totalInputTokens/A.maxInputTokens;return x7A(Q)}function m7A({threadViewState:A,tokenUsage:Q,waitingForConfirmation:B,showingEphemeralError:J}){let D=null,z=Q?h7A(Q):!1,Z=!1;if(A&&A.state==="active"){if(A.summaryState==="summarizing")D="Compacting...";else if(A.inferenceState==="running")D="Running inference...";else if(A.interactionState==="tool-running")D="Running tools...";else if(!J&&z==="warning")D="Context window is almost full. Use /compact to trim the thread.",Z=!0;else if(!J&&z==="danger")D="Context window is close to full. Use /compact to trim the thread.",Z=!0}let K=Boolean(A&&A.state==="active"&&A.inferenceState!=="cancelled"&&!Z&&!B);if(!A||A.state!=="active"||!D)return null;let X=()=>{if(A.inferenceState==="running"&&A.interactionState!=="tool-running")return"blueBright";if(A.interactionState==="tool-running")return"greenBright";return"default"},Y=()=>{if(Z&&z==="warning")return"yellow";if(Z&&z==="danger")return"red";if(A.inferenceState==="cancelled")return"dim";return"default"};return V6(DA,{flexDirection:"row",gap:1,children:[K&&M0(FA,{color:X(),children:M0(b7A,{})}),M0(FA,{italic:!Z&&A.inferenceState==="cancelled",color:Y(),children:D})]})}function u7A({view:A,threadViewState:Q,threadTokenUsage:B,hasCompletedMessages:J,width:D}){let{jetbrainsState:z}=v7A(),Z=PS.useRef(null),{stdout:K}=jX(),[G,X]=PS.useState(K.columns);PS.useEffect(()=>{if(Z.current){let{width:E}=LV(Z.current);X(E)}},[K.columns]);let Y=D||G,U=Y&&Y<60,F=A==="confirming"||A==="ephemeral-error",H=Q.state==="active"&&(Q.inferenceState==="running"||Q.interactionState==="tool-running")&&!F;return V6(DA,{gap:2,marginLeft:2,marginRight:2,ref:Z,children:[V6(DA,{flexGrow:1,flexDirection:"row",gap:2,children:[M0(m7A,{threadViewState:Q,tokenUsage:B,waitingForConfirmation:F,showingEphemeralError:A==="ephemeral-error"}),H&&M0(DA,{children:M0(FA,{dimColor:!0,children:"Esc to cancel"})}),V6(DA,{children:[A==="confirming-exit"&&M0(FA,{dimColor:!0,children:"Ctrl+C again to exit"}),A==="confirming-clear-input"&&M0(FA,{dimColor:!0,children:"Esc again to clear input"}),A==="help"&&M0(FA,{dimColor:!0,children:"Escape to close help"}),J&&A==="running"&&!U&&M0(FA,{dimColor:!0,children:"Ctrl+R to expand"})]})]}),V6(DA,{flexGrow:0,gap:2,children:[M0(y7A,{jetbrainsStatus:z}),!U&&M0(k7A,{viewState:Q}),B&&M0(g7A,{tokenUsage:B})]})]})}R6();F0.level=1;var B02={code:F0.white,codespan:F0.white,blockquote:F0.gray.italic,html:F0.gray,heading:F0.bold,firstHeading:F0.bold,hr:F0.reset,table:F0.reset,paragraph:F0.reset,strong:F0.bold,em:F0.italic,del:F0.dim.gray.strikethrough,link:F0.cyan,href:F0.cyan,unescape:!0,emoji:!0,showSectionPrefix:!0,reflowText:!1,tab:4,tableOptions:{wordWrap:!0,wrapOnWordBoundary:!1,style:{head:["bold"],border:["grey"],compact:!1}}},J02={keyword:F0.bold,built_in:F0.dim,type:F0.dim,literal:F0.italic,number:F0.reset,regexp:F0.dim.italic,string:F0.dim,subst:F0.reset,symbol:F0.reset,class:F0.bold,function:F0.reset,title:F0.reset,params:F0.reset,comment:F0.dim.italic,doctag:F0.dim.italic,meta:F0.dim,"meta-keyword":F0.reset,"meta-string":F0.reset,section:F0.reset,tag:F0.dim,name:F0.bold,"builtin-name":F0.reset,attr:F0.dim,attribute:F0.reset,variable:F0.reset,bullet:F0.reset,code:F0.reset,emphasis:F0.italic,strong:F0.bold,formula:F0.reset,link:F0.underline,quote:F0.reset,"selector-tag":F0.reset,"selector-id":F0.reset,"selector-class":F0.reset,"selector-attr":F0.reset,"selector-pseudo":F0.reset,"template-tag":F0.reset,"template-variable":F0.reset,addition:F0.bold.underline,deletion:F0.dim.strikethrough,default:F0.reset};D9.use(u2A({...B02,reflowText:!1},{ignoreIllegals:!0,theme:J02}));function F51({children:A}){let Q;try{Q=D9(A,{async:!1}).trimEnd()}catch(B){j1.error("Markdown rendering failed",B,{input:A}),Q=A}return M0(FA,{children:Q})}function p7A({message:A}){let Q=A.content.filter((B)=>B.type==="thinking"||B.type==="text");if(!Q.length)return null;return M0(DA,{flexDirection:"column",marginBottom:1,children:Q.map((B,J)=>{let D=J>0?1:0;if(B.type==="thinking")return M0(Y51,{thinking:B.thinking},J);else return M0(DA,{marginTop:D,children:M0(F51,{children:B.text})},J);return null})})}function c7A({message:A,marginTop:Q=0}){if(!A.content.some((X)=>X.type==="text"||X.type==="image"||X.type==="thinking"||X.type==="summary"&&X.summary.type==="message"))return null;let J=A.role==="assistant"&&A.state.type==="cancelled",D=A.content.filter((X)=>X.type==="text"),z=A.content.filter((X)=>X.type==="image"),Z=A.content.filter((X)=>X.type==="thinking"),K=A.content.filter((X)=>X.type==="summary"&&("summary"in X)&&X.summary.type==="message"),G=()=>{if(z.length===0)return null;return V6(DA,{flexDirection:"row",gap:1,marginBottom:1,children:[M0(FA,{color:"gray",children:"Images:"}),z.map((X,Y)=>{return V6(FA,{color:"green",children:["[image ",Y+1,"]"]},`img-${Y}`)})]})};return V6(DA,{flexDirection:"column",gap:1,marginTop:Q,children:[Z.map((X,Y)=>M0(Y51,{thinking:X.thinking},`thinking-${Y}`)),D.map((X,Y)=>{switch(A.role){case"assistant":return M0(DA,{flexDirection:"column",children:M0(F51,{children:X.text})},Y);case"user":return V6(DA,{borderStyle:"bold",borderColor:"green",borderLeft:!0,borderTop:!1,borderBottom:!1,borderRight:!1,paddingLeft:1,flexDirection:"column",children:[G(),M0(FA,{color:"green",italic:!0,children:X.text})]},Y);default:return null}}),K.map((X,Y)=>M0(DA,{children:V6(FA,{color:"grey",italic:!0,children:["Summary: ",X.summary.summary]})},`summary-${Y}`)),J&&M0(DA,{children:M0(FA,{italic:!0,dimColor:!0,children:"Cancelled"})})]})}function d7A({todos:A}){if(!Array.isArray(A)||A.length===0)return null;return V6(DA,{borderStyle:"round",borderColor:"dim",paddingX:1,flexDirection:"column",flexGrow:1,flexShrink:0,children:[M0(DA,{children:M0(FA,{dimColor:!0,bold:!0,children:"TODOs"})}),A.map((Q,B)=>M0(DA,{gap:1,children:V6(FA,{dimColor:!0,wrap:"truncate",children:[M0(FA,{children:"• "}),M0(FA,{bold:Q.status==="in-progress",strikethrough:Q.status==="completed",children:Q.content})]})},Q.id))]})}var _I=xA(J8(),1);function By1({children:A,dependencies:Q}){let{stdout:B}=jX(),J=_I.useRef(null),[D,z]=_I.useState(B.columns),Z=_I.useCallback(()=>{if(J.current){let{width:K}=LV(J.current);z(K)}},[J,z]);return _I.useLayoutEffect(Z,[Z,B.columns,...Q||[]]),M0(DA,{width:"100%",height:"100%",ref:J,children:A(D)})}R6();x6();var TB=xA(J8(),1),H51=Object.freeze({query:"",options:[]});function l7A(A){let[Q,B]=TB.useState(H51),[J,D]=TB.useState(""),[z,Z]=TB.useState(null),K=TB.useRef(0),[G]=TB.useState(()=>new y8),X=TB.useCallback((E)=>{if(D(E),E!==z)Z(null)},[z]),Y=TB.useCallback(()=>Z(J),[J]),U=TB.useCallback((E)=>{G.next(E)},[G]),F=TB.useMemo(()=>J.startsWith("@")?J.slice(1):null,[J]);TB.useEffect(()=>{if(F!==null&&J!==z){let w=++K.current;(async()=>{try{let I=await A.query(F);if(w===K.current)B({query:F,options:I})}catch(I){if(w===K.current)j1.error("Completion request failed",{query:F,error:I}),B(H51)}})()}else B(H51)},[J,z,A,F]),TB.useEffect(()=>{return()=>{G.complete()}},[G]);let H=TB.useMemo(()=>{if(F===null)return!1;return F.startsWith(Q.query)&&z!==J&&J!==""},[Q,J,z,F]);return{completions:H?Q:H51,hasCompletions:H?Q.options.length>0:!1,selectCompletion:U,completionSelected:G,onWordHighlight:X,ignore:Y}}var E51=xA(J8(),1);function i7A(A){let Q=E51.useMemo(()=>process.cwd().replace(process.env.HOME||"","~"),[]);E51.useEffect(()=>{if(A)process.stdout.write(`\x1B]0;amp - ${A} - ${Q}\x07`);return()=>{process.stdout.write("\x1B]0;\x07")}},[A,Q])}var w51=xA(J8(),1);function a7A(){return M0(DA,{flexDirection:"column",alignItems:"center",justifyContent:"center",minHeight:3,marginLeft:4,children:M0(DA,{children:M0(FA,{color:"green",bold:!0,children:"Welcome to Amp"})})})}function r7A(){let[A,Q]=w51.useState(0),B=["Amp","AMP","AmP","amP","aMP","AMp"];return w51.useEffect(()=>{let J=setInterval(()=>{Q((D)=>(D+1)%B.length)},50);return()=>clearInterval(J)},[B.length]),M0(DA,{flexDirection:"column",alignItems:"flex-start",justifyContent:"center",minHeight:3,marginLeft:4,children:M0(DA,{children:V6(FA,{color:"green",bold:!0,children:["Welcome to ",B[A]]})})})}var D02=200;function n7A({threadService:A,history:Q,worker:B,sendToolConfirmation:J,sendUserMessage:D,exit:z,cancel:Z,ampURL:K,commands:G,fuzzyClient:X}){let[Y]=X51(),{viewState:U,subagents:F,subagentActiveTools:H,transcript:E,streamingAssistantMessage:w,todosList:W,mainThread:I}=L5A(A,B),M=I?.title||"Untitled",N=B5.useMemo(()=>I?Fm1(I):void 0,[I]);i7A(I?.title);let O=B5.useRef(new y8),[L,T]=B5.useState({baseView:"running",rerendering:!1,resizeCounter:0,dismissedEphemeralError:null,slashCommandQuery:null,uiError:null}),R=B5.useRef(null),P=B5.useRef(null),j=B5.useRef(null),[S,v]=I7A(),g=B5.useCallback((K1)=>{T((X1)=>({...X1,slashCommandQuery:K1}))},[]),u=B5.useMemo(()=>{if(L.slashCommandQuery===null)return[];return G.query(L.slashCommandQuery)},[L.slashCommandQuery,G]),_=B5.useCallback(()=>{T((K1)=>({...K1,rerendering:!0})),process.stdout.write("\x1B[2J\x1B[3J\x1B[H"),O.current.next()},[T,O]),k=B5.useCallback(()=>{if(L.baseView==="confirming-clear-input"){if(P.current)clearTimeout(P.current),P.current=null;v({type:"clear"}),T((K1)=>({...K1,baseView:"running"}))}else{if(T((X1)=>({...X1,baseView:"confirming-clear-input"})),P.current)clearTimeout(P.current);let K1=setTimeout(()=>{T((X1)=>({...X1,baseView:"running"})),P.current=null},1000);P.current=K1}},[L.baseView,v,T]),b=B5.useCallback(async(K1)=>{if(T((E1)=>({...E1,slashCommandQuery:null})),!K1||!I)return;let X1=!1,R1=(E1)=>{X1=!0,v(E1)},I1=()=>{T((E1)=>({...E1,baseView:"help"}))},W1=await G.get(K1).execute({worker:B,thread:I,editorDispatch:R1,exitApp:z,openHelp:I1});if(T((E1)=>({...E1,uiError:W1||null})),!X1)v({type:"clear"})},[G,v,I,B,z]),m=B5.useCallback((K1)=>{let X1=[{type:"text",text:K1}];if(S.imageAttachments.length>0)X1.push(...S.imageAttachments);v({type:"clear"}),D(X1)},[v,S.imageAttachments,D]);B5.useEffect(()=>{return process.stdout.on("resize",_),()=>{process.stdout.off("resize",_)}},[_]),B5.useEffect(()=>{let K1=O.current.pipe(NJ(D02)).subscribe(()=>{T((X1)=>({...X1,rerendering:!1,resizeCounter:X1.resizeCounter+1}))});return()=>{K1.unsubscribe()}},[O,T]),B5.useEffect(()=>{let K1=O.current;return()=>{if(K1.complete(),R.current)clearTimeout(R.current);if(P.current)clearTimeout(P.current)}},[O]);let $=[...E.activeTools,...H],h=$.filter((K1)=>K1.toolRun.status==="blocked-on-user"),d=B5.useMemo(()=>B7A(h),[h]),l=l7A(X),{hasCompletions:B1,completions:n,selectCompletion:z1}=l,Q1=B5.useMemo(()=>{if(U.state!=="active"||!U.ephemeralError)return null;if(L.dismissedEphemeralError===U.ephemeralError)return null;return U.ephemeralError},[U,L.dismissedEphemeralError]),G1=L.uiError!==null?"ui-error":Q1!==null?"ephemeral-error":d!==null?"confirming":L.baseView,D1=(K1)=>{if(!d||d.type!=="tool-use")return;if(K1==="view-diff"){z7A(d).catch((X1)=>{j1.error("failed to handle view-diff action:",X1)});return}if(d.tools.length>0){let X1=d.tools[0],R1=Array.from(K1==="always"?X1.toAllow??[]:[]);J(X1.useBlock.id,K1==="yes"||K1==="always",R1,d.subthreadID)}},L1=(K1)=>{switch(K1){case"compact":T((X1)=>({...X1,dismissedEphemeralError:null})),B.summarizeThread();break;case"dismiss":T((X1)=>({...X1,dismissedEphemeralError:Q1}));break;case"retry":T((X1)=>({...X1,dismissedEphemeralError:null})),B.retry();break;default:j1.warn("action:",{action:K1})}},a=()=>{T((K1)=>({...K1,uiError:null}))};dH((K1,X1)=>{if(X1.ctrlC){if(L.baseView==="confirming-exit"){if(R.current)clearTimeout(R.current),R.current=null;z()}else{if(T((I1)=>({...I1,baseView:"confirming-exit"})),R.current)clearTimeout(R.current);let R1=setTimeout(()=>{T((I1)=>({...I1,baseView:"running"})),R.current=null},1000);R.current=R1}return}if(G1==="help"){if(X1.escape)T((R1)=>({...R1,baseView:"running"}));return}if(G1==="expanded-view"||G1==="confirming"||G1==="ephemeral-error")return;if(G1==="ui-error")return;if(X1.escape){if(B1||u.length>0)return;if(U.state==="active"&&U.inferenceState==="running"){Z();return}if(S.input.trim().length>0){k();return}}else if(X1.ctrl&&K1.toLowerCase()==="r")T((R1)=>({...R1,baseView:"expanded-view"}));else if(X1.ctrlL)_()});let r=Y>100,s=L.rerendering&&E.items.length===0?1:"auto",J1="resize-key"+L.resizeCounter,Z1=[{type:"welcome",id:"welcome"},...E.items];if(L.baseView==="expanded-view")return M0(O7A,{threadName:M,transcriptItems:E.items,onExit:()=>T((K1)=>({...K1,baseView:"running"}))});return V6(DA,{flexDirection:"column",minHeight:"100%",flexGrow:1,height:s,children:[M0(p41,{items:Z1,children:(K1,X1)=>{if(K1.type==="welcome")return M0(a7A,{},"welcome");let R1=X1===0?0:1;return K1.type==="message"?M0(c7A,{message:K1.message,marginTop:R1},K1.id):M0(e5A,{toolUse:K1.toolUse,toolResult:K1.toolResult,marginTop:R1},K1.id)}},J1),V6(DA,{flexDirection:"column",marginTop:Z1.length>1?1:0,children:[w&&M0(p7A,{message:w}),M0(v5A,{activeTools:$,subagents:F}),V6(DA,{flexDirection:r?"row-reverse":"column",children:[W.length>0&&M0(DA,{ref:j,flexGrow:0,flexShrink:0,width:r?"50%":"100%",children:M0(d7A,{todos:W})}),G1==="ui-error"&&L.uiError?M0(K51,{title:gf1(L.uiError).title,description:gf1(L.uiError).description,options:[{value:"dismiss",label:"Dismiss"}],onSelect:a}):G1==="ephemeral-error"&&Q1?M0(N7A,{error:Q1,onResponse:L1,ampURL:K}):G1==="confirming"&&d?M0(K7A,{currentConfirmation:d,onConfirmationResponse:D1}):G1==="help"?M0(By1,{dependencies:[W],children:(K1)=>M0(T7A,{width:K1})}):M0(DA,{flexGrow:1,borderStyle:"round",paddingX:1,children:M0(By1,{dependencies:[W],children:(K1)=>M0($7A,{onSubmit:m,history:Q,disabled:G1==="confirming"||G1==="ephemeral-error"||U.state==="active"&&U.summaryState==="summarizing",viewState:U,editorState:S,editorDispatch:v,onSlashCommandQuery:g,width:K1,completionsState:l})})})]}),M0(u7A,{view:G1,threadViewState:U,threadTokenUsage:N,hasCompletedMessages:E.items.length>0}),M0(z02,{commands:u,onSelect:b}),M0(Z02,{completions:n.options,onSelect:z1})]})]})}function z02({commands:A,onSelect:Q}){let J=B5.useMemo(()=>A.slice(0,10).map((D)=>({value:D.name,label:D.name,description:D.description})),[A]);return M0(DA,{marginBottom:1,children:M0(_V,{title:"Select command:",options:J,onSelect:Q})})}function Z02({completions:A,onSelect:Q}){let B=Math.min(10),J=B5.useMemo(()=>A.slice(0,B).map((z)=>({value:z,label:z})),[A,B]),D=B5.useCallback((z)=>{if(z===null)return;let Z=A.find((K)=>K===z);if(!Z)return;Q(Z)},[A,Q]);if(J.length===0)return null;return M0(DA,{marginBottom:1,children:M0(_V,{title:"Insert file name:",options:J,onSelect:D})})}function s7A(A){let{worker:Q,threadID:B,settingsStorage:J,pipedInput:D,workerDeps:z,configService:Z,fuzzyServer:K}=A,[G,X]=PX.useState(!1);N5A();let Y=PX.useCallback((W,I,M,N)=>{return K02(W,I,M,N,J,Q,z)},[J,Q,z]),U=PX.useCallback(async(W)=>{await Q.handle({type:"user:message",message:{content:W}})},[Q]),{exit:F}=yf1(),H=PX.useCallback(()=>{xZ.cancel(B)},[B]);PX.useEffect(()=>{let W=setTimeout(()=>{X(!0)},500);return()=>clearTimeout(W)},[]);let E=PX.useRef(!1);if(PX.useEffect(()=>{if(E.current)return;if(D)E.current=!0,U([{type:"text",text:D}]),X(!0)},[D,U]),!G)return M0(r7A,{});let w=new xf1;return M0(F5A,{configService:Z,children:M0(n7A,{history:A.history,threadService:A.threadService,worker:Q,sendToolConfirmation:Y,sendUserMessage:U,exit:F,cancel:H,ampURL:A.ampURL,commands:w,fuzzyClient:K})})}async function K02(A,Q,B,J,D,z,Z){let K=B&&B.length>0||!1;if(B&&B.length>0)await C6($2).then((X)=>X.settings["experimental.commandApproval.enabled"]?"experimental.commandApproval.allow":"commands.allowlist").then((X)=>{D.get(X,"global").then((Y)=>{let U=[...Y??[],...B];return D.set(X,U,"global")}).catch((Y)=>{j1.error("Failed to update allowlist",Y)})});let G={type:"user:tool-input",toolUse:A,value:{accepted:Q||K}};if(J)(await xZ.getOrCreateForThread(Z,J)).handle(G);else z.handle(G)}global.React=Jy1.default;function o7A(A){return F0.level=1,ff1(Jy1.default.createElement(s7A,{...A}),{patchConsole:!0,exitOnCtrlC:!1,stdout:A.stdout,stdin:A.stdin}).waitUntilExit().then(async()=>{let{threadID:B,ampURL:J,threadService:D}=A;if((await D.get(B))?.messages.length!==0){let Z=`${J.replace(/\/$/,"")}/threads/${B}`;A.stdout.write(`
|
4728
4728
|
`),A.stdout.write(`${F0.dim("Thread:")} ${Z}
|
4729
4729
|
`),A.stdout.write(`${F0.dim("Continue this thread with:")} amp threads continue ${B}
|
4730
|
-
`)}})}var Ky1=Zy1.join(Np0||Zy1.join(process.env.HOME||process.cwd(),".local","state"),"amp","last-thread-id");async function Gy1(A){try{await E02(Zy1.dirname(Ky1),{recursive:!0}),await W02(Ky1,A,"utf-8")}catch(Q){j1.debug("Failed to save last thread ID",Q)}}async function BQA(){try{return(await w02(Ky1,"utf-8")).trim()}catch(A){return null}}async function I02(A){let Q=await vQ(`/api/threads/${A}`);if(!Q.ok){let B=await Q.text();if(Q.status===404||B.includes("not found"))throw new eD(TK.threadNotFound(A));throw new eD(`Failed to load thread ${A}`,1,`Use 'amp threads share ${A} --support' to share this with the Amp team if this persists.`)}return await Q.json()}var KQA=process.env.TERMINAL_EMULATOR?.includes("JetBrains")??!1,JQA=[{name:"notifications",long:"notifications",type:"flag",description:(A)=>`${A?"Enable":"Disable"} sound notifications (enabled by default when not in execute mode)`},{name:"color",long:"color",type:"flag",description:(A)=>`${A?"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??NI,description:`Custom settings file path (overrides the default location ${NI})`},{name:"logLevel",long:"log-level",type:"option",description:`Set log level (${Object.keys(j1).join(", ")})`},{name:"logFile",long:"log-file",type:"option",description:"Set log file location"},{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:KQA,description:(A)=>A?"Enable JetBrains integration. Requires the JetBrains MCP plugin to be installed and you must start Amp in the same directory as your JetBrains project. When enabled, Amp automatically includes your open JetBrains file and text selection with every message, just like it does in VS Code.":"Disable JetBrains integration.",hidden:!0},{name:"interactive",long:"interactive",type:"flag",description:(A)=>A?"Enable interactive mode. This will enable the interactive UI.":"Disable interactive mode. This will disable the interactive UI.",hidden:!0,deprecated:!0}],DQA=(A)=>("deprecated"in A)&&A.deprecated===!0,M02=(A)=>("hidden"in A)&&A.hidden===!0,N02=(A)=>("default"in A),C02=(A)=>("default"in A)?A.default:void 0;function O02(A,Q){let B=Q.args[0],J=Q.commands.map((z)=>z.name());if(B&&!B.includes(" ")&&B.length<30&&!/[./\\]/.test(B)){let z=J.filter((K)=>B.includes(K)||K.includes(B)),Z="Run amp --help for a list of available commands.";if(z.length>0)Z=`Did you mean: ${z.join(", ")}? Or run amp --help for all commands.`;throw new eD(TK.unknownCommand(B),1,Z)}}async function _S(A,Q){Cm1("0.0.
|
4730
|
+
`)}})}var Ky1=Zy1.join(Np0||Zy1.join(process.env.HOME||process.cwd(),".local","state"),"amp","last-thread-id");async function Gy1(A){try{await E02(Zy1.dirname(Ky1),{recursive:!0}),await W02(Ky1,A,"utf-8")}catch(Q){j1.debug("Failed to save last thread ID",Q)}}async function BQA(){try{return(await w02(Ky1,"utf-8")).trim()}catch(A){return null}}async function I02(A){let Q=await vQ(`/api/threads/${A}`);if(!Q.ok){let B=await Q.text();if(Q.status===404||B.includes("not found"))throw new eD(TK.threadNotFound(A));throw new eD(`Failed to load thread ${A}`,1,`Use 'amp threads share ${A} --support' to share this with the Amp team if this persists.`)}return await Q.json()}var KQA=process.env.TERMINAL_EMULATOR?.includes("JetBrains")??!1,JQA=[{name:"notifications",long:"notifications",type:"flag",description:(A)=>`${A?"Enable":"Disable"} sound notifications (enabled by default when not in execute mode)`},{name:"color",long:"color",type:"flag",description:(A)=>`${A?"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??NI,description:`Custom settings file path (overrides the default location ${NI})`},{name:"logLevel",long:"log-level",type:"option",description:`Set log level (${Object.keys(j1).join(", ")})`},{name:"logFile",long:"log-file",type:"option",description:"Set log file location"},{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:KQA,description:(A)=>A?"Enable JetBrains integration. Requires the JetBrains MCP plugin to be installed and you must start Amp in the same directory as your JetBrains project. When enabled, Amp automatically includes your open JetBrains file and text selection with every message, just like it does in VS Code.":"Disable JetBrains integration.",hidden:!0},{name:"interactive",long:"interactive",type:"flag",description:(A)=>A?"Enable interactive mode. This will enable the interactive UI.":"Disable interactive mode. This will disable the interactive UI.",hidden:!0,deprecated:!0}],DQA=(A)=>("deprecated"in A)&&A.deprecated===!0,M02=(A)=>("hidden"in A)&&A.hidden===!0,N02=(A)=>("default"in A),C02=(A)=>("default"in A)?A.default:void 0;function O02(A,Q){let B=Q.args[0],J=Q.commands.map((z)=>z.name());if(B&&!B.includes(" ")&&B.length<30&&!/[./\\]/.test(B)){let z=J.filter((K)=>B.includes(K)||K.includes(B)),Z="Run amp --help for a list of available commands.";if(z.length>0)Z=`Did you mean: ${z.join(", ")}? Or run amp --help for all commands.`;throw new eD(TK.unknownCommand(B),1,Z)}}async function _S(A,Q){Cm1("0.0.1753935310-gd618e6");let B=j$1(gp()),J=A.settings,D=VB1({storage:J,secretStorage:B,workspaceRoots:UA.of([c6.file(process.cwd())]),defaultAmpURL:A.ampURL,defaultCacheDirectory:V$1}),z=await C6($2);j1.debug("Global configuration initialized",{hasCacheDirectory:!!z.settings.cacheDirectory,settingsKeys:Object.keys(z.settings)});let Z=await wf(Mv()),K=Cr1({configService:D,toolService:Z});try{await K.initialized}catch(O){j1.warn("Failed to wait for MCP servers, continuing anyway:",O)}if(Q.dangerouslyAllowAll)z.settings.dangerouslyAllowAll=!0;if(Q.jetbrains){if(z.settings["jetbrains.enabled"]=!0,Yi.subscribe((L)=>{j1.info("jetbrains-status",L)}),await jE(),!await Cc1())if(KQA)MQ("JetBrains integration failed. Try again with `amp --no-jetbrains` or see setup: https://ampcode.com/manual#jetbrains");else MQ("Cannot connect to JetBrains IDE. Check setup: https://ampcode.com/manual#jetbrains")}let G=z.settings["experimental.reviewTool"]??!1,X=z.settings["experimental.tools"]??[];R_1(Z,!1,G,X);let Y,U;if(!A.executeMode)Y=new Gk1(z.settings,process.cwd()),await Y.start(),U=q8A(Y,process.cwd());else Y=new class{async start(){}async query(){return[]}dispose(){}},U={[Symbol.dispose]:()=>{}};if(!await B.get("apiKey",A.ampURL)){if(A4.write(`No API key found. Starting login flow...
|
4731
4731
|
`),!await V02(A,B))process.exit(1)}let F=dr1(),H=new cX1(F),E=new mX1(F),w=new VF1(H),W=Q.notifications!==void 0?Q.notifications:!A.executeMode,I=du0({playNotificationSound:async(O)=>{if(W)cu0(O)},windowFocused:()=>Promise.resolve(!1),threadService:H});j1.info("Starting Amp background services");let M=V90({threadService:H,threadHistoryService:E,isExtensionDevelopment:!1}),N={configService:D,toolService:Z,mcpService:K,threadService:H,threadHistoryService:E,threadSummaryService:w,threadSyncService:M,threadStorage:F,secretStorage:B,settingsStorage:J,fileWatcher:U,fuzzyServer:Y,notificationService:I};return{...N,async dispose(){await N.mcpService.dispose(),N.configService.unsubscribe(),N.toolService.dispose(),N.fileWatcher[Symbol.dispose](),N.fuzzyServer.dispose(),N.threadSyncService.dispose(),N.settingsStorage[Symbol.dispose]()}}}async function V02(A,Q){if(!A.executeMode){if(await e91("Would you like to log in to Amp?",["(y)es","(n)o"])!="y")return A4.write(`Login cancelled. Run the command again to retry.
|
4732
4732
|
`),!1}return await GQA(A,Q)}async function GQA(A,Q){let B=H02(32).toString("hex"),J=await d8A(A.ampURL,B);A4.write(`If your browser doesn't open automatically, visit:
|
4733
4733
|
|
@@ -4741,7 +4741,7 @@ ${F0.blue.bold(J)}
|
|
4741
4741
|
Login successful! You can now use the Amp CLI.
|
4742
4742
|
`),!0}catch(D){return i9.write(`
|
4743
4743
|
Login failed: ${D instanceof Error?D.message:String(D)}
|
4744
|
-
`),!1}}function L02(){let A=new yu().name("amp").description("AI-powered coding assistant").option("--visibility <visibility>","Set thread visibility (private, public, team)").configureOutput({writeErr:()=>{}});A.exitOverride((G)=>{if(G.code==="commander.help"||G.code==="commander.version"||G.exitCode===0)Zp(),process.exit(0);let X=G.originalError??G;Kp(X)}),A.option("-V, --version","output the version number",()=>{A4.write(`0.0.
|
4744
|
+
`),!1}}function L02(){let A=new yu().name("amp").description("AI-powered coding assistant").option("--visibility <visibility>","Set thread visibility (private, public, team)").configureOutput({writeErr:()=>{}});A.exitOverride((G)=>{if(G.code==="commander.help"||G.code==="commander.version"||G.exitCode===0)Zp(),process.exit(0);let X=G.originalError??G;Kp(X)}),A.option("-V, --version","output the version number",()=>{A4.write(`0.0.1753935310-gd618e6 (released 2025-07-31T04:19:47.248Z)
|
4745
4745
|
`),process.exit(0)}),A.addHelpText("after",m8A()),A.configureHelp({formatHelp:u8A}),A.command("logout").description("Log out by removing stored API key").action(async(G,X)=>{let Y=X.optsWithGlobals(),U=await _X(Y),F=gp();if(process.env.AMP_API_KEY)A4.write(`API key found in environment variable AMP_API_KEY, unset first before running 'amp logout'
|
4746
4746
|
`),process.exit(0);if(!await F.get("apiKey",U.ampURL)){if(Uq(U.ampURL))A4.write(`Already logged out.
|
4747
4747
|
`);else A4.write(`Already logged out from ${new URL(U.ampURL).hostname}.
|
@@ -4778,10 +4778,10 @@ Summary: ${O}
|
|
4778
4778
|
`),i9.write(`
|
4779
4779
|
`),i9.write(`Secrets have been automatically redacted, but please review the file before attaching
|
4780
4780
|
`),i9.write(`it to support requests. Learn more at https://ampcode.com/manual/appendix#support-bundles
|
4781
|
-
`),process.exit(0)}catch(Y){MQ(Y instanceof Error?Y.message:String(Y))}}),A.addCommand(z);let Z=new yu("update").description("Update Amp CLI to the latest version").option("--version <version>","Update to a specific version").allowUnknownOption(!1);Z.action(async(G,X)=>{try{let Y=X.optsWithGlobals(),{update:U}=await Promise.resolve().then(() => (QQA(),AQA)),{checkNpmUpdate:F}=await Promise.resolve().then(() => (NX1(),ir1)),H="0.0.
|
4781
|
+
`),process.exit(0)}catch(Y){MQ(Y instanceof Error?Y.message:String(Y))}}),A.addCommand(z);let Z=new yu("update").description("Update Amp CLI to the latest version").option("--version <version>","Update to a specific version").allowUnknownOption(!1);Z.action(async(G,X)=>{try{let Y=X.optsWithGlobals(),{update:U}=await Promise.resolve().then(() => (QQA(),AQA)),{checkNpmUpdate:F}=await Promise.resolve().then(() => (NX1(),ir1)),H="0.0.1753935310-gd618e6";if(Y.version)i9.write(F0.blue(`Updating to version ${Y.version}...
|
4782
4782
|
`)),await U(Y.version),i9.write(F0.green(`✓ Successfully updated to version ${Y.version}
|
4783
4783
|
`));else{i9.write(F0.blue(`Checking for updates...
|
4784
|
-
`));let E=await F("0.0.
|
4784
|
+
`));let E=await F("0.0.1753935310-gd618e6");if(!E.hasUpdate)i9.write(F0.green(`✓ Amp CLI is already up to date.
|
4785
4785
|
`)),process.exit(0);i9.write(F0.blue(`Updating to version ${E.latestVersion}...
|
4786
4786
|
`)),await U(E.latestVersion),i9.write(F0.green(`✓ Successfully updated to version ${E.latestVersion}
|
4787
4787
|
`))}process.exit(0)}catch(Y){i9.write(F0.red("Error updating: ")+`${Y instanceof Error?Y.message:String(Y)}
|
package/package.json
CHANGED