@sourcegraph/amp 0.0.1754035272-gbb5b18 → 0.0.1754036264-ga0aa13
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 +4 -4
- package/package.json +1 -1
package/dist/main.js
CHANGED
@@ -268,7 +268,7 @@ Structure your response like this:
|
|
268
268
|
`].join("")}function F50(A){if(A.flags!==void 0)return A.flags;return[A.global?"g":"",A.ignoreCase?"i":"",A.multiline?"m":"",A.unicode?"u":"",A.sticky?"y":""].join("")}function exA(A){return RegExp("^(?:"+A.source+")",F50(A))}function _n(){var A=[].slice.call(arguments),Q=A.length;for(var B=0;B<Q;B+=1)zT(A[B]);return J6(function(J,D){var z,Z=new Array(Q);for(var G=0;G<Q;G+=1){if(z=hZ(A[G]._(J,D),z),!z.status)return z;Z[G]=z.value,D=z.index}return hZ(F7(D,Z),z)})}function AhA(){var A={},Q=0,B=uxA(arguments),J=B.length;for(var D=0;D<J;D+=1){var z=B[D];if(xy(z))continue;if(DT(z)){var Z=z.length===2&&typeof z[0]==="string"&&xy(z[1]);if(Z){var G=z[0];if(Object.prototype.hasOwnProperty.call(A,G))throw new Error("seqObj: duplicate key "+G);A[G]=!0,Q++;continue}}throw new Error("seqObj arguments must be parsers or [string, parser] array pairs.")}if(Q===0)throw new Error("seqObj expects at least one named parser, found zero");return J6(function(K,X){var Y,U={};for(var F=0;F<J;F+=1){var H,E;if(DT(B[F]))H=B[F][0],E=B[F][1];else H=null,E=B[F];if(Y=hZ(E._(K,X),Y),!Y.status)return Y;if(H)U[H]=Y.value;X=Y.index}return hZ(F7(X,U),Y)})}function gN(){var A=[].slice.call(arguments);if(A.length===0)throw new Error("seqMap needs at least one argument");var Q=A.pop();return yN(Q),_n.apply(null,A).map(function(B){return Q.apply(null,B)})}function QhA(A){var Q={};for(var B in A)if({}.hasOwnProperty.call(A,B))(function(J){var D=function(){return A[J](Q)};Q[J]=w50(D)})(B);return Q}function Pn(){var A=[].slice.call(arguments),Q=A.length;if(Q===0)return Sn("zero alternates");for(var B=0;B<Q;B+=1)zT(A[B]);return J6(function(J,D){var z;for(var Z=0;Z<A.length;Z+=1)if(z=hZ(A[Z]._(J,D),z),z.status)return z;return z})}function H50(A,Q){return MH1(A,Q).or(xN([]))}function MH1(A,Q){zT(A),zT(Q);var B=Q.then(A).many();return gN(A,B,function(J,D){return[J].concat(D)})}n2.parse=function(A){if(typeof A!=="string"&&!by(A))throw new Error(".parse must be called with a string or Buffer as its argument");var Q=this.skip(CH1)._(A,0),B;if(Q.status)B={status:!0,value:Q.value};else B={status:!1,index:U50(A,Q.furthest),expected:Q.expected};return delete Vn[A],B};n2.tryParse=function(A){var Q=this.parse(A);if(Q.status)return Q.value;else{var B=q50(A,Q),J=new Error(B);throw J.type="ParsimmonError",J.result=Q,J}};n2.assert=function(A,Q){return this.chain(function(B){return A(B)?xN(B):Sn(Q)})};n2.or=function(A){return Pn(this,A)};n2.trim=function(A){return this.wrap(A,A)};n2.wrap=function(A,Q){return gN(A,this,Q,function(B,J){return J})};n2.thru=function(A){return A(this)};n2.then=function(A){return zT(A),_n(this,A).map(function(Q){return Q[1]})};n2.many=function(){var A=this;return J6(function(Q,B){var J=[],D=void 0;for(;;)if(D=hZ(A._(Q,B),D),D.status){if(B===D.index)throw new Error("infinite loop detected in .many() parser --- calling .many() on a parser which can accept zero characters is usually the cause");B=D.index,J.push(D.value)}else return hZ(F7(B,J),D)})};n2.tieWith=function(A){return gy(A),this.map(function(Q){if(cxA(Q),Q.length){gy(Q[0]);var B=Q[0];for(var J=1;J<Q.length;J++)gy(Q[J]),B+=A+Q[J];return B}else return""})};n2.tie=function(){return this.tieWith("")};n2.times=function(A,Q){var B=this;if(arguments.length<2)Q=A;return ZT(A),ZT(Q),J6(function(J,D){var z=[],Z=void 0,G=void 0;for(var K=0;K<A;K+=1)if(Z=B._(J,D),G=hZ(Z,G),Z.status)D=Z.index,z.push(Z.value);else return G;for(;K<Q;K+=1)if(Z=B._(J,D),G=hZ(Z,G),Z.status)D=Z.index,z.push(Z.value);else break;return hZ(F7(D,z),G)})};n2.result=function(A){return this.map(function(){return A})};n2.atMost=function(A){return this.times(0,A)};n2.atLeast=function(A){return gN(this.times(A),this.many(),function(Q,B){return Q.concat(B)})};n2.map=function(A){yN(A);var Q=this;return J6(function(B,J){var D=Q._(B,J);if(!D.status)return D;return hZ(F7(D.index,A(D.value)),D)})};n2.contramap=function(A){yN(A);var Q=this;return J6(function(B,J){var D=Q.parse(A(B.slice(J)));if(!D.status)return D;return F7(J+B.length,D.value)})};n2.promap=function(A,Q){return yN(A),yN(Q),this.contramap(A).map(Q)};n2.skip=function(A){return _n(this,A).map(function(Q){return Q[0]})};n2.mark=function(){return gN(hy,this,hy,function(A,Q,B){return{start:A,value:Q,end:B}})};n2.node=function(A){return gN(hy,this,hy,function(Q,B,J){return{name:A,value:B,start:Q,end:J}})};n2.sepBy=function(A){return H50(this,A)};n2.sepBy1=function(A){return MH1(this,A)};n2.lookahead=function(A){return this.skip(Ln(A))};n2.notFollowedBy=function(A){return this.skip(E50(A))};n2.desc=function(A){if(!DT(A))A=[A];var Q=this;return J6(function(B,J){var D=Q._(B,J);if(!D.status)D.expected=A;return D})};n2.fallback=function(A){return this.or(xN(A))};n2.ap=function(A){return gN(A,this,function(Q,B){return Q(B)})};n2.chain=function(A){var Q=this;return J6(function(B,J){var D=Q._(B,J);if(!D.status)return D;var z=A(D.value);return hZ(z._(B,D.index),D)})};function my(A){gy(A);var Q="'"+A+"'";return J6(function(B,J){var D=J+A.length,z=B.slice(J,D);if(z===A)return F7(D,z);else return yz(J,Q)})}function BhA(A){if(Rn(),ZT(A),A>255)throw new Error("Value specified to byte constructor ("+A+"=0x"+A.toString(16)+") is larger in value than a single byte.");var Q=(A>15?"0x":"0x0")+A.toString(16);return J6(function(B,J){var D=jn(B,J);if(D===A)return F7(J+1,D);else return yz(J,Q)})}function KF(A,Q){if(dxA(A),arguments.length>=2)ZT(Q);else Q=0;var B=exA(A),J=""+A;return J6(function(D,z){var Z=B.exec(D.slice(z));if(Z){if(0<=Q&&Q<=Z.length){var G=Z[0],K=Z[Q];return F7(z+G.length,K)}var X="valid match group (0 to "+Z.length+") in "+J;return yz(z,X)}return yz(z,J)})}function xN(A){return J6(function(Q,B){return F7(B,A)})}function Sn(A){return J6(function(Q,B){return yz(B,A)})}function Ln(A){if(xy(A))return J6(function(Q,B){var J=A._(Q,B);return J.index=B,J.value="",J});else if(typeof A==="string")return Ln(my(A));else if(A instanceof RegExp)return Ln(KF(A));throw new Error("not a string, regexp, or parser: "+A)}function E50(A){return zT(A),J6(function(Q,B){var J=A._(Q,B),D=Q.slice(B,J.index);return J.status?yz(B,'not "'+D+'"'):F7(B,null)})}function $n(A){return yN(A),J6(function(Q,B){var J=jn(Q,B);if(B<Q.length&&A(J))return F7(B+1,J);else return yz(B,"a character/byte matching "+A)})}function JhA(A){var Q=A.split("");for(var B=0;B<Q.length;B++)Q[B]="'"+Q[B]+"'";return $n(function(J){return A.indexOf(J)>=0}).desc(Q)}function DhA(A){return $n(function(Q){return A.indexOf(Q)<0}).desc("none of '"+A+"'")}function zhA(A){return J6(A(F7,yz))}function ZhA(A,Q){return $n(function(B){return A<=B&&B<=Q}).desc(A+"-"+Q)}function GhA(A){return yN(A),J6(function(Q,B){var J=B;while(J<Q.length&&A(jn(Q,J)))J++;return F7(J,Q.slice(B,J))})}function w50(A,Q){if(arguments.length<2)Q=A,A=void 0;var B=J6(function(J,D){return B._=Q()._,B._(J,D)});if(A)return B.desc(A);else return B}function NH1(){return Sn("fantasy-land/empty")}n2.concat=n2.or;n2.empty=NH1;n2.of=xN;n2["fantasy-land/ap"]=n2.ap;n2["fantasy-land/chain"]=n2.chain;n2["fantasy-land/concat"]=n2.concat;n2["fantasy-land/empty"]=n2.empty;n2["fantasy-land/of"]=n2.of;n2["fantasy-land/map"]=n2.map;var hy=J6(function(A,Q){return F7(Q,U50(A,Q))}),KhA=J6(function(A,Q){if(Q>=A.length)return yz(Q,"any character/byte");return F7(Q+1,jn(A,Q))}),XhA=J6(function(A,Q){return F7(A.length,A.slice(Q))}),CH1=J6(function(A,Q){if(Q<A.length)return yz(Q,"EOF");return F7(Q,null)}),YhA=KF(/[0-9]/).desc("a digit"),UhA=KF(/[0-9]*/).desc("optional digits"),qhA=KF(/[a-z]/i).desc("a letter"),FhA=KF(/[a-z]*/i).desc("optional letters"),HhA=KF(/\s*/).desc("optional whitespace"),EhA=KF(/\s+/).desc("whitespace"),I50=my("\r"),W50=my(`
|
269
269
|
`),M50=my(`\r
|
270
270
|
`),N50=Pn(M50,W50,I50).desc("newline"),whA=Pn(N50,CH1);J6.all=XhA;J6.alt=Pn;J6.any=KhA;J6.cr=I50;J6.createLanguage=QhA;J6.crlf=M50;J6.custom=zhA;J6.digit=YhA;J6.digits=UhA;J6.empty=NH1;J6.end=whA;J6.eof=CH1;J6.fail=Sn;J6.formatError=q50;J6.index=hy;J6.isParser=xy;J6.lazy=w50;J6.letter=qhA;J6.letters=FhA;J6.lf=W50;J6.lookahead=Ln;J6.makeFailure=yz;J6.makeSuccess=F7;J6.newline=N50;J6.noneOf=DhA;J6.notFollowedBy=E50;J6.of=xN;J6.oneOf=JhA;J6.optWhitespace=HhA;J6.Parser=J6;J6.range=ZhA;J6.regex=KF;J6.regexp=KF;J6.sepBy=H50;J6.sepBy1=MH1;J6.seq=_n;J6.seqMap=gN;J6.seqObj=AhA;J6.string=my;J6.succeed=xN;J6.takeWhile=GhA;J6.test=$n;J6.whitespace=EhA;J6["fantasy-land/empty"]=NH1;J6["fantasy-land/of"]=xN;J6.Binary={bitSeq:Y50,bitSeqObj:kxA,byte:BhA,buffer:fxA,encodedString:yxA,uintBE:In,uint8BE:In(1),uint16BE:In(2),uint32BE:In(4),uintLE:Wn,uint8LE:Wn(1),uint16LE:Wn(2),uint32LE:Wn(4),intBE:Mn,int8BE:Mn(1),int16BE:Mn(2),int32BE:Mn(4),intLE:Nn,int8LE:Nn(1),int16LE:Nn(2),int32LE:Nn(4),floatBE:gxA(),floatLE:xxA(),doubleBE:hxA(),doubleLE:mxA()};C50.exports=J6});function L50(A,Q){return A.then(Q).skip(A)}function IhA(A){return NA.default((Q,B)=>{let J=Q.indexOf(A,B);if(J!==-1)return NA.default.makeSuccess(J+A.length,Q.substring(B,J));return NA.default.makeFailure(B,[A])})}function WhA(A,Q,B){return NA.default((J,D)=>{let z=[],Z=D;if(B._(J,Z).status)return NA.default.makeFailure(Z,["at least one match before terminator"]);let K=A._(J,Z);if(!K.status)return K;z.push(K.value),Z=K.index;while(!0){if(B._(J,Z).status)break;let Y=Q._(J,Z);if(!Y.status)break;Z=Y.index;let U=A._(J,Z);if(!U.status)break;z.push(U.value),Z=U.index}return NA.default.makeSuccess(Z,z)})}class VH1{platform;constructor(A){this.platform=A}whitespaceWithEscapes=NA.default.alt(NA.default.string(" "),NA.default.string("\t"),NA.default.string(`
|
271
|
-
`),NA.default.string("\r"),NA.default.string("\\").then(NA.default.whitespace)).many().tie();escapeSequences=NA.default.string("\\").then(NA.default.oneOf('\\|&<>();"'));unquotedEscapeSequences=NA.default.string("\\").then(NA.default.oneOf('\\|&<>(); "[]'));doubleQuotedString=L50(NA.default.string('"'),NA.default.alt(this.escapeSequences,NA.default.noneOf('"')).many().tie()).desc("double-quoted string");singleQuotedString=L50(NA.default.string("'"),NA.default.alt(NA.default.string("\\").then(NA.default.any),NA.default.noneOf("'\\")).many().tie()).desc("single-quoted string");braceExpansion=NA.default.lazy(()=>{let A=NA.default.lazy(()=>NA.default.alt(NA.default.string("{").then(A).skip(NA.default.string("}")).map((Q)=>`{${Q}}`),NA.default.noneOf("}")).many().tie());return NA.default.string("{").then(A).skip(NA.default.string("}")).map((Q)=>`{${Q}}`)}).desc("brace expansion");unquotedString=NA.default.lazy(()=>{if(this.platform==="win32")return NA.default.alt(NA.default.regexp(/[a-zA-Z]:[\\/]\S+/),NA.default.regexp(/\\\\\S+\\\S*/),NA.default.alt(this.unquotedEscapeSequences,NA.default.regexp(/[a-zA-Z0-9_\-:/.*~@=\\^,[\]#!]/),NA.default.regexp(/\$(?![A-Za-z_{(])/),NA.default.regexp(/\([a-zA-Z0-9_-]*\)/)).atLeast(1).tie()).desc("unquoted string");else return NA.default.alt(this.unquotedEscapeSequences,NA.default.regexp(/[a-zA-Z0-9_\-:/.*~@=+^,[\]#!]/),NA.default.regexp(/\$(?![A-Za-z_{(])/),NA.default.regexp(/\([a-zA-Z0-9_-]*\)/)).atLeast(1).tie().desc("unquoted string")});commandSubstitution=NA.default.lazy(()=>NA.default.string("$(").then(this.expression).skip(NA.default.string(")")).map((A)=>({type:"invocations",trees:A})));word=NA.default.lazy(()=>{return NA.default.alt(this.doubleQuotedString,this.singleQuotedString,this.braceExpansion,this.unquotedString,this.commandSubstitution,this.envVariable).sepBy1(NA.default.string("")).map((A)=>{let[Q,...B]=A;if(Q===void 0)throw new Error("Expect non-empty array of parts in argument: "+JSON.stringify(A));else if(B.length===0)return Q;else if(A.every((J)=>typeof J==="string"))return A.join("");else return{type:"concatenation",values:A}})}).node("word");envVariable=NA.default.regexp(/\$([A-Za-z_][A-Za-z0-9_]*|\{[A-Za-z_][A-Za-z0-9_]*\})/).map((A)=>mZ).desc("environment variable");envVarAssignment=NA.default.seqMap(NA.default.regexp(/[A-Za-z_][A-Za-z0-9_]*/),NA.default.string("="),NA.default.alt(this.doubleQuotedString,this.singleQuotedString,this.unquotedString).or(NA.default.succeed("")),(A,Q,B)=>({name:A,value:B})).desc("environment variable assignment");heredoc=NA.default.regex(/<<-?'?(\w+)'?/).chain((A)=>IhA(A)).desc("heredoc");operator=NA.default.alt(NA.default.regex(/&{1,2}/).desc("background|conjunction"),NA.default.regex(/\|{1,2}/).desc("pipe|disjunction"),NA.default.string(";").desc("semicolon")).map((A)=>{return});redirect=NA.default.lazy(()=>{let A=NA.default.alt(NA.default.string(">>"),NA.default.string(">")),Q=NA.default.alt(NA.default.string("&>>"),NA.default.string("&>")),B=NA.default.string("<"),J=NA.default.regexp(/\d+>(&\d+|\S+)/);return NA.default.alt(NA.default.seq(NA.default.alt(A,Q),NA.default.optWhitespace,this.word),NA.default.seq(A,NA.default.optWhitespace,this.word,NA.default.whitespace,NA.default.string("&>"),NA.default.optWhitespace,this.word),NA.default.seq(B,NA.default.optWhitespace,this.word),NA.default.seq(NA.default.digit,B,NA.default.optWhitespace,this.word),J,this.heredoc).map((D)=>{return}).desc("redirect")});args=WhA(NA.default.notFollowedBy(NA.default.alt(this.operator,this.redirect)).then(this.word),this.whitespaceWithEscapes,NA.default.alt(this.operator,this.redirect));invocationWithoutArgs=NA.default.lazy(()=>NA.default.seqMap(this.envVarAssignment.skip(this.whitespaceWithEscapes).many(),this.word,(A,Q)=>({program:Q,arguments:[],...A.length>0&&{envVars:A}})));invocationWithArgs=NA.default.lazy(()=>NA.default.seqMap(this.envVarAssignment.skip(this.whitespaceWithEscapes).many(),this.word.skip(this.whitespaceWithEscapes),this.args,(A,Q,B)=>({program:Q,arguments:B,...A.length>0&&{envVars:A}})));invocation=NA.default.lazy(()=>{let A=NA.default.alt(this.invocationWithArgs,this.invocationWithoutArgs);return NA.default.alt(A.skip(this.redirect.trim(O50).many()),A)});bareExpression=NA.default.lazy(()=>{let A=NA.default.sepBy1(this.invocation,this.operator.trim(NA.default.optWhitespace));return NA.default.alt(A.skip(NA.default.string("&").trim(O50)),A)});subshellExpression=NA.default.lazy(()=>NA.default.string("(").then(this.expression).skip(NA.default.string(")")));expression=NA.default.lazy(()=>NA.default.alt(this.bareExpression,this.subshellExpression));parseShellCommand(A){return this.expression.tryParse(A)}}function vn(A,Q){return(Q===void 0||Q===R50.platform?R50:new VH1(Q)).parseShellCommand(A)}function T50(A){let Q=[],B=[...A];while(B.length>0){let J=B.shift(),D=[],z;if(typeof J.program.value==="object"){if(J.program.value.type==="invocations")B.push(...J.program.value.trees);z=mZ}else z=J.program.value;for(let Z of J.arguments)if(Z.value===mZ||typeof Z.value==="string")D.push(Z.value);else if(Z.value.type==="invocations")B.push(...Z.value.trees),D.push(mZ);else for(let G of Z.value.values)if(typeof G==="object"&&G.type==="invocations")B.push(...G.trees),D.push(mZ);else if(G===mZ||typeof G==="string")D.push(G);else throw new Error("Unexpected word value: "+G);Q.push({program:z,arguments:D})}return Q}var NA,O50,R50,mZ;var OH1=_1(()=>{NA=kA(V50(),1),{optWhitespace:O50}=NA.default;R50=new VH1(typeof process!=="undefined"?process.platform:"browser");mZ=Symbol("Dynamic")});import uy from"path";function RH1(A,Q){if(!A)return!1;if(MhA.includes(A))return!1;if(A.endsWith(uy.sep))A=A.slice(0,-1);if(Q.includes(A))return!1;if(uy.isAbsolute(A))return!Q.some((D)=>NhA(D,A));let B=A.split("/"),J=0;for(let D of B)if(D===".."){if(J--,J<0)return!0}else if(D!==""&&D!==".")J++;return!1}function NhA(A,Q){let B=uy.relative(uy.normalize(A),uy.normalize(Q));return Boolean(B)&&!B.startsWith("..")&&!B.startsWith("/")}function ChA(A,Q){if(A.program!=="rm")return!1;let B=A.arguments.some((D)=>typeof D==="string"&&D.includes("r")&&D.startsWith("-")),J=A.arguments.some((D)=>typeof D==="string"&&D.includes("f")&&D.startsWith("-"));if(!B||!J)return!1;if(Q){let D=function(Z){return Z===mZ?"<dynamic>":Z},z=`${D(A.program)} ${A.arguments.map(D).join(" ")}`;for(let Z of Q)if(Z.endsWith(" *")){if(Z=Z.slice(0,-2),z===Z||z.startsWith(Z+" "))return!1}else if(Z.includes(" * ")&&!Z.startsWith(" * ")){let K=Z.split(" * ").map((Y)=>Y.replace(/[.*+?^${}()|[\]\\]/g,"\\$&"));if(new RegExp(`^${K.join(" .* ")}(\\s.*)?$`).test(z))return!1}}return!0}function j50(A){if(A.program!=="find")return!1;let Q=["-delete","-exec","-execdir"];return A.arguments.some((J)=>typeof J==="string"&&Q.some((D)=>J===D))}function LH1(A,Q,B){if(typeof A==="string")return!1;for(let J of A.arguments){if(typeof J!=="string")continue;if(J.startsWith("-")||J.includes("*")||J.startsWith('"')||J.startsWith("'"))continue;if(B&&!B.absolutePaths&&J.startsWith("//"))continue;if(J.includes("/")&&RH1(J,Q))return!0}return!1}function VhA(A,Q=!1){let B={absolutePaths:!0,environmentVariables:!0};if(Q)return B;if(typeof A==="string")return B;let J=typeof A.program==="string"?A.program.toLowerCase():"",D=A.arguments.filter((Z)=>typeof Z==="string").join(" "),z=`${J} ${D}`.toLowerCase();if(J.includes("bazel")||z.includes("bazel")||J==="ibazel")return{...B,absolutePaths:!1};return B}function OhA(A){for(let Q of TH1)if(A===Q||A.startsWith(Q+" "))return!0;return!1}function LhA(A){let Q=new Set,B=A.map((J)=>J.endsWith(" *")?J.slice(0,-2):J);for(let J of B)for(let D of cy){if(Q.has(D))continue;if(J!==D&&J.startsWith(D+" ")){Q.add(D);for(let z of cy)if(z.startsWith(D+" "))Q.add(z)}}return Q}function _50(A,Q,B){let J=[];try{let X=vn(A,B?.platform);J=T50(X)}catch(X){j1.warn("Failed to parse command",{cmd:A},X),J=[A]}let D=B?.config?.["commands.allowlist"]||[],z=B?.config?.["commands.strict"]??!1;if((B?.config?.dangerouslyAllowAll??!1)||D.includes("*"))return{requiresConfirmation:!1,parts:J.map((X)=>({command:X,requiresConfirmation:!1}))};let G=J.map((X)=>{if(typeof X==="string")return{command:X,requiresConfirmation:!0};if(typeof X.program==="string"&&py.includes(X.program)){if((X.program==="do"||X.program==="while")&&X.arguments.length>0){let w=X.arguments[0];if(typeof w==="string"&&!py.includes(w)&&!TH1.includes(w)&&!cy.some((I)=>w.startsWith(I))){if(D.includes(w))return{command:X,requiresConfirmation:!1};return{command:X,requiresConfirmation:!0}}}return{command:X,requiresConfirmation:!1}}if(ChA(X,D))return{command:X,requiresConfirmation:!0};let Y=VhA(X,z),U=X.arguments.some((w)=>typeof w!=="string");function F(w){return w===mZ?"<dynamic>":w}let H=`${F(X.program)} ${X.arguments.map(F).join(" ")}`;if(!U){for(let w of D)if(H===w)return{command:X,requiresConfirmation:!1}}if(j50(X))return{command:X,requiresConfirmation:!0};if(OhA(H)){let w=D.some((I)=>{if(I.endsWith(" *"))I=I.slice(0,-2);return H.startsWith(I)});if(typeof X.program==="string"&&X.program==="find"&&w&&!j50(X))return{command:X,requiresConfirmation:!1};if(LH1(X,Q,Y))return{command:X,requiresConfirmation:!0};return{command:X,requiresConfirmation:!1}}let E;if(z)E=D;else{let w=LhA(D);E=[...cy.filter((W)=>!w.has(W)),...D]}for(let w of E){if(w.endsWith(" *"))w=w.slice(0,-2);let I=" * ";if(w.includes(I)&&!w.startsWith(I)){let W=w.split(I).map((N)=>N.replace(/[.*+?^${}()|[\]\\]/g,"\\$&"));if(new RegExp(`^${W.join(" .* ")}(\\s.*)?$`).test(H)){if(LH1(X,Q,Y))return{command:X,requiresConfirmation:!0};return{command:X,requiresConfirmation:!1}}}else if(H===w||H.startsWith(w+" ")){if(LH1(X,Q,Y))return{command:X,requiresConfirmation:!0};return{command:X,requiresConfirmation:!1}}}return{command:X,requiresConfirmation:!0}});return{requiresConfirmation:G.some((X)=>X.requiresConfirmation),parts:G}}function P50(A,Q){if(A.toAllow)return[A.toAllow];let B=[];for(let J of A.parts){if(J.requiresConfirmation){if(typeof J.command!=="string"&&J.command.program!==mZ&&!Array.isArray(J.command.program)&&typeof J.command.program==="string"&&!py.includes(J.command.program)&&!J.command.arguments.some((D)=>D===mZ||typeof D==="string"&&RH1(D,Q)))B.push(J.command.program)}if(typeof J.command!=="string"&&typeof J.command.program==="string"&&py.includes(J.command.program)&&(J.command.program==="do"||J.command.program==="while")){if(J.command.arguments.length>0){let D=J.command.arguments[0];if(typeof D==="string"&&!py.includes(D)&&!TH1.includes(D)&&!cy.some((z)=>D.startsWith(z))){if(!J.command.arguments.slice(1).some((Z)=>Z===mZ||typeof Z==="string"&&RH1(Z,Q)))B.push(D)}}}}return B}var py,TH1,cy,MhA;var S50=_1(()=>{E6();OH1();py=["for","while","do","done","if","then","else","elif","fi","case","esac","in","function","select","until","{","}","[[","]]"],TH1=["ls","dir","find","cat","head","tail","less","more","grep","egrep","fgrep","tree","file","wc","pwd","stat","du","df","ps","top","htop","echo","printenv","id","which","whereis","date","cal","uptime","free","ping","dig","nslookup","host","netstat","ss","lsof","ifconfig","ip","man","info","mkdir","touch","uname","whoami","go version","go env","go help","cargo version","cargo --version","cargo help","rustc --version","rustc --help","rustc --explain","javac --version","javac -version","javac -help","javac --help","dotnet --info","dotnet --version","dotnet --help","dotnet help","gcc --version","gcc -v","gcc --help","gcc -dumpversion","g++ --version","g++ -v","g++ --help","g++ -dumpversion","clang --version","clang --help","clang++ --version","clang++ --help","python -V","python --version","python -h","python --help","python3 -V","python3 --version","python3 -h","python3 --help","ruby -v","ruby --version","ruby -h","ruby --help","node -v","node --version","node -h","node --help","npm --help","npm --version","npm -v","npm help","yarn --help","yarn --version","yarn -v","yarn help","pnpm --help","pnpm --version","pnpm -v","pnpm help","pytest -h","pytest --help","pytest --version","jest --help","jest --version","mocha --help","mocha --version","make --version","make --help","docker --version","docker --help","docker version","docker help","git --version","git --help","git help","git version"],cy=["go test","go run","go build","go vet","go fmt","go list","cargo test","cargo run","cargo build","cargo check","cargo fmt","cargo tree","make -n","make --dry-run","mvn test","mvn verify","mvn dependency:tree","gradle tasks","gradle dependencies","gradle properties","dotnet test","dotnet list","python -c","ruby -e","node -e","npm list","npm ls","npm outdated","npm test","npm run","npm view","npm info","yarn list","yarn ls","yarn info","yarn test","yarn run","yarn why","pnpm list","pnpm ls","pnpm outdated","pnpm test","pnpm run","pytest --collect-only","jest --listTests","jest --showConfig","mocha --list","git status","git show","git diff","git grep","git branch","git tag","git remote -v","git rev-parse --is-inside-work-tree","git rev-parse --show-toplevel","git config --list","git log"],MhA=["/dev/null","/dev/zero","/dev/stdout","/dev/stderr","/dev/stdin"]});async function jhA(){return{config:await V6($2),runGeminiSync:BT}}function PhA(A){let B=A.match(/```(?:xml|XML)?\s*\n([\s\S]*?)\n```/)?.[1]??A;B=B.replace(/</g,"<").replace(/>/g,">").replace(/&/g,"&").trim();let J=B.match(/<requires-approval>(true|false)<\/requires-approval>/s),D=B.match(/<analysis>(.*?)<\/analysis>/s),z=B.match(/<reason>(.*?)<\/reason>/s),Z=B.match(/<to-allow>(.*?)<\/to-allow>/s);if(!J||!z)return null;let G=J[1]==="true",K=z[1].trim();if(!K)return null;let X=Z?.[1]?.trim();return{analysis:D?.[1],requiresApproval:G,reason:K,toAllow:X||void 0}}async function ShA(A,Q,B,J){let D=performance.now();try{let Z=[{role:"user",parts:[{text:_hA.replace("{{COMMAND}}",A)}]}],G=new AbortController,K=setTimeout(()=>G.abort(),ThA);try{let X=await J.runGeminiSync(Z,[],"",B,RhA,G.signal,0);if(clearTimeout(K),!X.message)return j1.warn("Gemini risk assessment produced no response"),null;let Y=X["~debugUsage"]?.outputTokens??0,U=X.message?.candidates?.[0]?.content?.parts?.filter((E)=>E.text&&!E.thought).map((E)=>E.text).join(`
|
271
|
+
`),NA.default.string("\r"),NA.default.string("\\").then(NA.default.whitespace)).many().tie();escapeSequences=NA.default.string("\\").then(NA.default.oneOf('\\|&<>();"'));unquotedEscapeSequences=NA.default.string("\\").then(NA.default.oneOf('\\|&<>(); "[]'));doubleQuotedString=L50(NA.default.string('"'),NA.default.alt(this.escapeSequences,NA.default.noneOf('"')).many().tie()).desc("double-quoted string");singleQuotedString=L50(NA.default.string("'"),NA.default.alt(NA.default.string("\\").then(NA.default.any),NA.default.noneOf("'\\")).many().tie()).desc("single-quoted string");braceExpansion=NA.default.lazy(()=>{let A=NA.default.lazy(()=>NA.default.alt(NA.default.string("{").then(A).skip(NA.default.string("}")).map((Q)=>`{${Q}}`),NA.default.noneOf("}")).many().tie());return NA.default.string("{").then(A).skip(NA.default.string("}")).map((Q)=>`{${Q}}`)}).desc("brace expansion");unquotedString=NA.default.lazy(()=>{if(this.platform==="win32")return NA.default.alt(NA.default.regexp(/[a-zA-Z]:[\\/]\S+/),NA.default.regexp(/\\\\\S+\\\S*/),NA.default.alt(this.unquotedEscapeSequences,NA.default.regexp(/[a-zA-Z0-9_\-:/.*~@=\\^,[\]#!]/),NA.default.regexp(/\$(?![A-Za-z_{(])/),NA.default.regexp(/\([a-zA-Z0-9_-]*\)/)).atLeast(1).tie()).desc("unquoted string");else return NA.default.alt(this.unquotedEscapeSequences,NA.default.regexp(/[a-zA-Z0-9_\-:/.*~@=+^,[\]#!]/),NA.default.regexp(/\$(?![A-Za-z_{(])/),NA.default.regexp(/\([a-zA-Z0-9_-]*\)/)).atLeast(1).tie().desc("unquoted string")});commandSubstitution=NA.default.lazy(()=>NA.default.string("$(").then(this.expression).skip(NA.default.string(")")).map((A)=>({type:"invocations",trees:A})));word=NA.default.lazy(()=>{return NA.default.alt(this.doubleQuotedString,this.singleQuotedString,this.braceExpansion,this.unquotedString,this.commandSubstitution,this.envVariable).sepBy1(NA.default.string("")).map((A)=>{let[Q,...B]=A;if(Q===void 0)throw new Error("Expect non-empty array of parts in argument: "+JSON.stringify(A));else if(B.length===0)return Q;else if(A.every((J)=>typeof J==="string"))return A.join("");else return{type:"concatenation",values:A}})}).node("word");envVariable=NA.default.regexp(/\$([A-Za-z_][A-Za-z0-9_]*|\{[A-Za-z_][A-Za-z0-9_]*\})/).map((A)=>mZ).desc("environment variable");envVarAssignment=NA.default.seqMap(NA.default.regexp(/[A-Za-z_][A-Za-z0-9_]*/),NA.default.string("="),NA.default.alt(this.doubleQuotedString,this.singleQuotedString,this.unquotedString).or(NA.default.succeed("")),(A,Q,B)=>({name:A,value:B})).desc("environment variable assignment");heredoc=NA.default.regex(/<<-?'?(\w+)'?/).chain((A)=>IhA(A)).desc("heredoc");operator=NA.default.alt(NA.default.regex(/&{1,2}/).desc("background|conjunction"),NA.default.regex(/\|{1,2}/).desc("pipe|disjunction"),NA.default.string(";").desc("semicolon")).map((A)=>{return});redirect=NA.default.lazy(()=>{let A=NA.default.alt(NA.default.string(">>"),NA.default.string(">")),Q=NA.default.alt(NA.default.string("&>>"),NA.default.string("&>")),B=NA.default.string("<"),J=NA.default.regexp(/\d+>(&\d+|\S+)/);return NA.default.alt(NA.default.seq(NA.default.alt(A,Q),NA.default.optWhitespace,this.word),NA.default.seq(A,NA.default.optWhitespace,this.word,NA.default.whitespace,NA.default.string("&>"),NA.default.optWhitespace,this.word),NA.default.seq(B,NA.default.optWhitespace,this.word),NA.default.seq(NA.default.digit,B,NA.default.optWhitespace,this.word),J,this.heredoc).map((D)=>{return}).desc("redirect")});args=WhA(NA.default.notFollowedBy(NA.default.alt(this.operator,this.redirect)).then(this.word),this.whitespaceWithEscapes,NA.default.alt(this.operator,this.redirect));invocationWithoutArgs=NA.default.lazy(()=>NA.default.seqMap(this.envVarAssignment.skip(this.whitespaceWithEscapes).many(),this.word,(A,Q)=>({program:Q,arguments:[],...A.length>0&&{envVars:A}})));invocationWithArgs=NA.default.lazy(()=>NA.default.seqMap(this.envVarAssignment.skip(this.whitespaceWithEscapes).many(),this.word.skip(this.whitespaceWithEscapes),this.args,(A,Q,B)=>({program:Q,arguments:B,...A.length>0&&{envVars:A}})));invocation=NA.default.lazy(()=>{let A=NA.default.alt(this.invocationWithArgs,this.invocationWithoutArgs);return NA.default.alt(A.skip(this.redirect.trim(O50).many()),A)});bareExpression=NA.default.lazy(()=>{let A=NA.default.sepBy1(this.invocation,this.operator.trim(NA.default.optWhitespace));return NA.default.alt(A.skip(NA.default.string("&").trim(O50)),A)});subshellExpression=NA.default.lazy(()=>NA.default.string("(").then(this.expression).skip(NA.default.string(")")));expression=NA.default.lazy(()=>NA.default.alt(this.bareExpression,this.subshellExpression));parseShellCommand(A){return this.expression.tryParse(A)}}function vn(A,Q){return(Q===void 0||Q===R50.platform?R50:new VH1(Q)).parseShellCommand(A)}function T50(A){let Q=[],B=[...A];while(B.length>0){let J=B.shift(),D=[],z;if(typeof J.program.value==="object"){if(J.program.value.type==="invocations")B.push(...J.program.value.trees);z=mZ}else z=J.program.value;for(let Z of J.arguments)if(Z.value===mZ||typeof Z.value==="string")D.push(Z.value);else if(Z.value.type==="invocations")B.push(...Z.value.trees),D.push(mZ);else for(let G of Z.value.values)if(typeof G==="object"&&G.type==="invocations")B.push(...G.trees),D.push(mZ);else if(G===mZ||typeof G==="string")D.push(G);else throw new Error("Unexpected word value: "+G);Q.push({program:z,arguments:D})}return Q}var NA,O50,R50,mZ;var OH1=_1(()=>{NA=kA(V50(),1),{optWhitespace:O50}=NA.default;R50=new VH1(typeof process!=="undefined"?process.platform:"browser");mZ=Symbol("Dynamic")});import uy from"path";function RH1(A,Q){if(!A)return!1;if(MhA.includes(A))return!1;if(A.endsWith(uy.sep))A=A.slice(0,-1);if(Q.includes(A))return!1;if(uy.isAbsolute(A))return!Q.some((D)=>NhA(D,A));let B=A.split("/"),J=0;for(let D of B)if(D===".."){if(J--,J<0)return!0}else if(D!==""&&D!==".")J++;return!1}function NhA(A,Q){let B=uy.relative(uy.normalize(A),uy.normalize(Q));return Boolean(B)&&!B.startsWith("..")&&!B.startsWith("/")}function ChA(A,Q){if(A.program!=="rm")return!1;let B=A.arguments.some((D)=>typeof D==="string"&&D.includes("r")&&D.startsWith("-")),J=A.arguments.some((D)=>typeof D==="string"&&D.includes("f")&&D.startsWith("-"));if(!B||!J)return!1;if(Q){let D=function(Z){return Z===mZ?"<dynamic>":Z},z=`${D(A.program)} ${A.arguments.map(D).join(" ")}`;for(let Z of Q)if(Z.endsWith(" *")){if(Z=Z.slice(0,-2),z===Z||z.startsWith(Z+" "))return!1}else if(Z.includes(" * ")&&!Z.startsWith(" * ")){let K=Z.split(" * ").map((Y)=>Y.replace(/[.*+?^${}()|[\]\\]/g,"\\$&"));if(new RegExp(`^${K.join(" .* ")}(\\s.*)?$`).test(z))return!1}}return!0}function j50(A){if(A.program!=="find")return!1;let Q=["-delete","-exec","-execdir"];return A.arguments.some((J)=>typeof J==="string"&&Q.some((D)=>J===D))}function LH1(A,Q,B){if(typeof A==="string")return!1;for(let J of A.arguments){if(typeof J!=="string")continue;if(J.startsWith("-")||J.includes("*")||J.startsWith('"')||J.startsWith("'"))continue;if(B&&!B.absolutePaths&&J.startsWith("//"))continue;if(J.includes("/")&&RH1(J,Q))return!0}return!1}function VhA(A,Q=!1){let B={absolutePaths:!0,environmentVariables:!0};if(Q)return B;if(typeof A==="string")return B;let J=typeof A.program==="string"?A.program.toLowerCase():"",D=A.arguments.filter((Z)=>typeof Z==="string").join(" "),z=`${J} ${D}`.toLowerCase();if(J.includes("bazel")||z.includes("bazel")||J==="ibazel"||J==="buildozer")return{...B,absolutePaths:!1};return B}function OhA(A){for(let Q of TH1)if(A===Q||A.startsWith(Q+" "))return!0;return!1}function LhA(A){let Q=new Set,B=A.map((J)=>J.endsWith(" *")?J.slice(0,-2):J);for(let J of B)for(let D of cy){if(Q.has(D))continue;if(J!==D&&J.startsWith(D+" ")){Q.add(D);for(let z of cy)if(z.startsWith(D+" "))Q.add(z)}}return Q}function _50(A,Q,B){let J=[];try{let X=vn(A,B?.platform);J=T50(X)}catch(X){j1.warn("Failed to parse command",{cmd:A},X),J=[A]}let D=B?.config?.["commands.allowlist"]||[],z=B?.config?.["commands.strict"]??!1;if((B?.config?.dangerouslyAllowAll??!1)||D.includes("*"))return{requiresConfirmation:!1,parts:J.map((X)=>({command:X,requiresConfirmation:!1}))};let G=J.map((X)=>{if(typeof X==="string")return{command:X,requiresConfirmation:!0};if(typeof X.program==="string"&&py.includes(X.program)){if((X.program==="do"||X.program==="while")&&X.arguments.length>0){let w=X.arguments[0];if(typeof w==="string"&&!py.includes(w)&&!TH1.includes(w)&&!cy.some((I)=>w.startsWith(I))){if(D.includes(w))return{command:X,requiresConfirmation:!1};return{command:X,requiresConfirmation:!0}}}return{command:X,requiresConfirmation:!1}}if(ChA(X,D))return{command:X,requiresConfirmation:!0};let Y=VhA(X,z),U=X.arguments.some((w)=>typeof w!=="string");function F(w){return w===mZ?"<dynamic>":w}let H=`${F(X.program)} ${X.arguments.map(F).join(" ")}`;if(!U){for(let w of D)if(H===w)return{command:X,requiresConfirmation:!1}}if(j50(X))return{command:X,requiresConfirmation:!0};if(OhA(H)){let w=D.some((I)=>{if(I.endsWith(" *"))I=I.slice(0,-2);return H.startsWith(I)});if(typeof X.program==="string"&&X.program==="find"&&w&&!j50(X))return{command:X,requiresConfirmation:!1};if(LH1(X,Q,Y))return{command:X,requiresConfirmation:!0};return{command:X,requiresConfirmation:!1}}let E;if(z)E=D;else{let w=LhA(D);E=[...cy.filter((W)=>!w.has(W)),...D]}for(let w of E){if(w.endsWith(" *"))w=w.slice(0,-2);let I=" * ";if(w.includes(I)&&!w.startsWith(I)){let W=w.split(I).map((N)=>N.replace(/[.*+?^${}()|[\]\\]/g,"\\$&"));if(new RegExp(`^${W.join(" .* ")}(\\s.*)?$`).test(H)){if(LH1(X,Q,Y))return{command:X,requiresConfirmation:!0};return{command:X,requiresConfirmation:!1}}}else if(H===w||H.startsWith(w+" ")){if(LH1(X,Q,Y))return{command:X,requiresConfirmation:!0};return{command:X,requiresConfirmation:!1}}}return{command:X,requiresConfirmation:!0}});return{requiresConfirmation:G.some((X)=>X.requiresConfirmation),parts:G}}function P50(A,Q){if(A.toAllow)return[A.toAllow];let B=[];for(let J of A.parts){if(J.requiresConfirmation){if(typeof J.command!=="string"&&J.command.program!==mZ&&!Array.isArray(J.command.program)&&typeof J.command.program==="string"&&!py.includes(J.command.program)&&!J.command.arguments.some((D)=>D===mZ||typeof D==="string"&&RH1(D,Q)))B.push(J.command.program)}if(typeof J.command!=="string"&&typeof J.command.program==="string"&&py.includes(J.command.program)&&(J.command.program==="do"||J.command.program==="while")){if(J.command.arguments.length>0){let D=J.command.arguments[0];if(typeof D==="string"&&!py.includes(D)&&!TH1.includes(D)&&!cy.some((z)=>D.startsWith(z))){if(!J.command.arguments.slice(1).some((Z)=>Z===mZ||typeof Z==="string"&&RH1(Z,Q)))B.push(D)}}}}return B}var py,TH1,cy,MhA;var S50=_1(()=>{E6();OH1();py=["for","while","do","done","if","then","else","elif","fi","case","esac","in","function","select","until","{","}","[[","]]"],TH1=["ls","dir","find","cat","head","tail","less","more","grep","egrep","fgrep","tree","file","wc","pwd","stat","du","df","ps","top","htop","echo","printenv","id","which","whereis","date","cal","uptime","free","ping","dig","nslookup","host","netstat","ss","lsof","ifconfig","ip","man","info","mkdir","touch","uname","whoami","go version","go env","go help","cargo version","cargo --version","cargo help","rustc --version","rustc --help","rustc --explain","javac --version","javac -version","javac -help","javac --help","dotnet --info","dotnet --version","dotnet --help","dotnet help","gcc --version","gcc -v","gcc --help","gcc -dumpversion","g++ --version","g++ -v","g++ --help","g++ -dumpversion","clang --version","clang --help","clang++ --version","clang++ --help","python -V","python --version","python -h","python --help","python3 -V","python3 --version","python3 -h","python3 --help","ruby -v","ruby --version","ruby -h","ruby --help","node -v","node --version","node -h","node --help","npm --help","npm --version","npm -v","npm help","yarn --help","yarn --version","yarn -v","yarn help","pnpm --help","pnpm --version","pnpm -v","pnpm help","pytest -h","pytest --help","pytest --version","jest --help","jest --version","mocha --help","mocha --version","make --version","make --help","docker --version","docker --help","docker version","docker help","git --version","git --help","git help","git version"],cy=["go test","go run","go build","go vet","go fmt","go list","cargo test","cargo run","cargo build","cargo check","cargo fmt","cargo tree","make -n","make --dry-run","mvn test","mvn verify","mvn dependency:tree","gradle tasks","gradle dependencies","gradle properties","dotnet test","dotnet list","python -c","ruby -e","node -e","npm list","npm ls","npm outdated","npm test","npm run","npm view","npm info","yarn list","yarn ls","yarn info","yarn test","yarn run","yarn why","pnpm list","pnpm ls","pnpm outdated","pnpm test","pnpm run","pytest --collect-only","jest --listTests","jest --showConfig","mocha --list","git status","git show","git diff","git grep","git branch","git tag","git remote -v","git rev-parse --is-inside-work-tree","git rev-parse --show-toplevel","git config --list","git log"],MhA=["/dev/null","/dev/zero","/dev/stdout","/dev/stderr","/dev/stdin"]});async function jhA(){return{config:await V6($2),runGeminiSync:BT}}function PhA(A){let B=A.match(/```(?:xml|XML)?\s*\n([\s\S]*?)\n```/)?.[1]??A;B=B.replace(/</g,"<").replace(/>/g,">").replace(/&/g,"&").trim();let J=B.match(/<requires-approval>(true|false)<\/requires-approval>/s),D=B.match(/<analysis>(.*?)<\/analysis>/s),z=B.match(/<reason>(.*?)<\/reason>/s),Z=B.match(/<to-allow>(.*?)<\/to-allow>/s);if(!J||!z)return null;let G=J[1]==="true",K=z[1].trim();if(!K)return null;let X=Z?.[1]?.trim();return{analysis:D?.[1],requiresApproval:G,reason:K,toAllow:X||void 0}}async function ShA(A,Q,B,J){let D=performance.now();try{let Z=[{role:"user",parts:[{text:_hA.replace("{{COMMAND}}",A)}]}],G=new AbortController,K=setTimeout(()=>G.abort(),ThA);try{let X=await J.runGeminiSync(Z,[],"",B,RhA,G.signal,0);if(clearTimeout(K),!X.message)return j1.warn("Gemini risk assessment produced no response"),null;let Y=X["~debugUsage"]?.outputTokens??0,U=X.message?.candidates?.[0]?.content?.parts?.filter((E)=>E.text&&!E.thought).map((E)=>E.text).join(`
|
272
272
|
|
273
273
|
`).trimEnd()||"",F=PhA(U);if(!F)return j1.warn("Failed to parse Gemini risk response",{response:U}),null;let H=performance.now()-D;return j1.debug("Risk assessment completed",{cmd:A,outputTokens:Y,provider:"gemini",requiresApproval:F.requiresApproval,reason:F.reason,toAllow:F.toAllow,analysis:F.analysis,durationMs:Math.round(H)}),F}finally{clearTimeout(K)}}catch(z){let Z=performance.now()-D;return j1.warn("Gemini risk assessment failed",{error:z instanceof Error?z.message:String(z),durationMs:Math.round(Z)}),null}}async function $50(A,Q,B,J){let D=J??await jhA(),z=await ShA(A,Q,B,D);if(z&&!z.toAllow)return{...z,toAllow:A};return z}var RhA,ThA=3000,_hA=`<risk>
|
274
274
|
<context>
|
@@ -4735,7 +4735,7 @@ ${U0.dim('--- Content truncated, use "View diff" for complete file ---')}`:"";re
|
|
4735
4735
|
${F}`;if(B==="pnpm"&&F.includes("Unable to find the global bin directory"))H+=`
|
4736
4736
|
|
4737
4737
|
Hint: Try running "pnpm setup" to configure pnpm global directory, or use npm instead:
|
4738
|
-
npm install -g @sourcegraph/amp`;Z(new Error(H))}},error:(U)=>{if(!X)X=!0,Z(new Error(`Failed to spawn ${B}: ${U.message}`))},complete:()=>{if(!X)X=!0,z()}})})}var ub1=mb1.join(Bd0||mb1.join(process.env.HOME||process.cwd(),".local","state"),"amp","last-thread-id");async function pb1(A){try{await $22(mb1.dirname(ub1),{recursive:!0}),await k22(ub1,A,"utf-8")}catch(Q){j1.debug("Failed to save last thread ID",Q)}}async function f22(){try{return(await v22(ub1,"utf-8")).trim()}catch(A){return null}}async function y22(A){let Q=await fQ(`/api/threads/${A}`);if(!Q.ok){let B=await Q.text();if(Q.status===404||B.includes("not found"))throw new eJ(SG.threadNotFound(A));throw new eJ(`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 xJA=process.env.TERMINAL_EMULATOR?.includes("JetBrains")??!1,yJA=[{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??$W,description:`Custom settings file path (overrides the default location ${$W})`},{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:xJA,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}],bJA=(A)=>("deprecated"in A)&&A.deprecated===!0,b22=(A)=>("hidden"in A)&&A.hidden===!0,g22=(A)=>("default"in A),x22=(A)=>("default"in A)?A.default:void 0;function h22(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((G)=>B.includes(G)||G.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 eJ(SG.unknownCommand(B),1,Z)}}async function sS(A,Q){Zp1("0.0.
|
4738
|
+
npm install -g @sourcegraph/amp`;Z(new Error(H))}},error:(U)=>{if(!X)X=!0,Z(new Error(`Failed to spawn ${B}: ${U.message}`))},complete:()=>{if(!X)X=!0,z()}})})}var ub1=mb1.join(Bd0||mb1.join(process.env.HOME||process.cwd(),".local","state"),"amp","last-thread-id");async function pb1(A){try{await $22(mb1.dirname(ub1),{recursive:!0}),await k22(ub1,A,"utf-8")}catch(Q){j1.debug("Failed to save last thread ID",Q)}}async function f22(){try{return(await v22(ub1,"utf-8")).trim()}catch(A){return null}}async function y22(A){let Q=await fQ(`/api/threads/${A}`);if(!Q.ok){let B=await Q.text();if(Q.status===404||B.includes("not found"))throw new eJ(SG.threadNotFound(A));throw new eJ(`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 xJA=process.env.TERMINAL_EMULATOR?.includes("JetBrains")??!1,yJA=[{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??$W,description:`Custom settings file path (overrides the default location ${$W})`},{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:xJA,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}],bJA=(A)=>("deprecated"in A)&&A.deprecated===!0,b22=(A)=>("hidden"in A)&&A.hidden===!0,g22=(A)=>("default"in A),x22=(A)=>("default"in A)?A.default:void 0;function h22(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((G)=>B.includes(G)||G.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 eJ(SG.unknownCommand(B),1,Z)}}async function sS(A,Q){Zp1("0.0.1754036264-ga0aa13");let B=Vv1(Jc()),J=A.settings,D=MJ1({storage:J,secretStorage:B,workspaceRoots:UA.of([c6.file(process.cwd())]),defaultAmpURL:A.ampURL,defaultCacheDirectory:Wv1}),z=await V6($2);j1.debug("Global configuration initialized",{hasCacheDirectory:!!z.settings.cacheDirectory,settingsKeys:Object.keys(z.settings)});let Z=await bf(hv()),G=Zn1({configService:D,toolService:Z});try{await G.initialized}catch(V){j1.warn("Failed to wait for MCP servers, continuing anyway:",V)}if(Q.dangerouslyAllowAll)z.settings.dangerouslyAllowAll=!0;if(Q.jetbrains){if(z.settings["jetbrains.enabled"]=!0,di.subscribe((L)=>{j1.info("jetbrains-status",L)}),await xE(),!await Zl1())if(xJA)PB("JetBrains integration failed. Try again with `amp --no-jetbrains` or see setup: https://ampcode.com/manual#jetbrains");else PB("Cannot connect to JetBrains IDE. Check setup: https://ampcode.com/manual#jetbrains")}let K=z.settings["experimental.reviewTool"]??!1,X=z.settings["experimental.tools"]??[];NS1(Z,!1,K,X);let Y,U;if(!A.executeMode)Y=new Jf1(z.settings,process.cwd()),await Y.start(),U=r9A(Y,process.cwd());else Y=new class{async start(){}async query(){return[]}dispose(){}},U={[Symbol.dispose]:()=>{}};if(!await B.get("apiKey",A.ampURL)){if(Q4.write(`No API key found. Starting login flow...
|
4739
4739
|
`),!await m22(A,B))process.exit(1)}let F=_n1(),H=new xY1(F),E=new yY1(F),w=new WH1(H),I=Q.notifications!==void 0?Q.notifications:!A.executeMode,W=Tc0({playNotificationSound:async(V)=>{if(I){if(Rc0(V),!e4A()&&z.settings["notifications.system.enabled"]!==!1){if(V==="idle")process.stdout.write("\x1B]777;notify;Amp;Agent is ready\x1B\\");else if(V==="requires-user-input")process.stdout.write("\x1B]777;notify;Amp;Waiting for approval\x1B\\")}}},windowFocused:()=>Promise.resolve(!1),threadService:H});j1.info("Starting Amp background services");let M=z50({threadService:H,threadHistoryService:E,isExtensionDevelopment:!1}),N={configService:D,toolService:Z,mcpService:G,threadService:H,threadHistoryService:E,threadSummaryService:w,threadSyncService:M,threadStorage:F,secretStorage:B,settingsStorage:J,fileWatcher:U,fuzzyServer:Y,notificationService:W};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 m22(A,Q){if(!A.executeMode){if(await f41("Would you like to log in to Amp?",["(y)es","(n)o"])!="y")return Q4.write(`Login cancelled. Run the command again to retry.
|
4740
4740
|
`),!1}return await hJA(A,Q)}async function hJA(A,Q){let B=S22(32).toString("hex"),J=await T4A(A.ampURL,B);Q4.write(`If your browser doesn't open automatically, visit:
|
4741
4741
|
|
@@ -4749,7 +4749,7 @@ ${U0.blue.bold(J)}
|
|
4749
4749
|
Login successful! You can now use the Amp CLI.
|
4750
4750
|
`),!0}catch(D){return A4.write(`
|
4751
4751
|
Login failed: ${D instanceof Error?D.message:String(D)}
|
4752
|
-
`),!1}}function u22(){let A=new Qp().name("amp").description("AI-powered coding assistant").option("--visibility <visibility>","Set thread visibility (private, public, team)").configureOutput({writeErr:()=>{}});A.exitOverride((K)=>{if(K.code==="commander.help"||K.code==="commander.version"||K.exitCode===0)Tp(),process.exit(0);let X=K.originalError??K;jp(X)}),A.option("-V, --version","output the version number",()=>{Q4.write(`0.0.
|
4752
|
+
`),!1}}function u22(){let A=new Qp().name("amp").description("AI-powered coding assistant").option("--visibility <visibility>","Set thread visibility (private, public, team)").configureOutput({writeErr:()=>{}});A.exitOverride((K)=>{if(K.code==="commander.help"||K.code==="commander.version"||K.exitCode===0)Tp(),process.exit(0);let X=K.originalError??K;jp(X)}),A.option("-V, --version","output the version number",()=>{Q4.write(`0.0.1754036264-ga0aa13 (released 2025-08-01T08:22:11.373Z)
|
4753
4753
|
`),process.exit(0)}),A.addHelpText("after",V4A()),A.configureHelp({formatHelp:O4A}),A.command("logout").description("Log out by removing stored API key").action(async(K,X)=>{let Y=X.optsWithGlobals(),U=await fX(Y);await i22(U)}),A.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(K,X)=>{let Y=X.optsWithGlobals(),U=await fX(Y);await l22(U)}),b4A(A);let Q=A.command("threads").description("Thread management commands").action(async(K,X)=>{let Y=X.optsWithGlobals(),U=await fX(Y);await gJA(Y,U)});Q.command("new").description("Create a new thread and print its ID").option("--visibility <visibility>","Set thread visibility (private, public, team)").action(async(K,X)=>{let Y=X.optsWithGlobals(),U=await fX(Y);await e22(Y,U)}),Q.command("continue [threadId]").description("Continue an existing thread (uses last used thread if no ID provided)").action(async(K,X,Y)=>{let U=Y.optsWithGlobals(),F=await fX(U);await t22(U,F,K)}),Q.command("fork [threadId]").description("Create a new thread by forking an existing one and print its ID (uses last used thread if no ID provided)").action(async(K,X,Y)=>{let U=Y.optsWithGlobals(),F=await fX(U);await o22(U,F,K)}),Q.command("list").description("List all your threads with their titles and share status").action(async(K,X)=>{let Y=X.optsWithGlobals(),U=await fX(Y);await gJA(Y,U)}),Q.command("share <threadId>").description("Change thread visibility or share with support").option("--visibility <visibility>","Set thread visibility (private, public, team)").option("--support","Share thread with Amp support for debugging").action(async(K,X,Y)=>{let U=Y.optsWithGlobals(),F=await fX(U);await n22(U,F,K,X.support)}),Q.command("compact <threadId>").description("Compact a thread by creating a summary to reduce token usage").action(async(K,X,Y)=>{let U=Y.optsWithGlobals(),F=await fX(U);await s22(U,F,K)}),A.command("tools").description("Tool management commands").command("show").description("Show available tools").action(async(K,X)=>{let Y=X.optsWithGlobals(),U=await fX(Y);await d22(Y,U)});function J(K,X,Y){let F=typeof K.description==="string"?K.description:Y===void 0?K.description(!0):K.description(Y),H=new vS1(X,F),E=x22(K);if(E)H.default(E);return H.hidden=b22(K)||bJA(K),H}for(let K of yJA)switch(K.type){case"flag":{A.addOption(J(K,`--${K.long}`)),A.addOption(J(K,`--no-${K.long}`,!1));break}case"switch":{A.addOption(J(K,`--${K.long}`,!0));break}default:{A.addOption(J(K,`--${K.long} <value>`));break}}let D=new vS1("-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);A.addOption(D),A.action(async(K,X)=>{let Y=K,U=await fX(Y);if(Object.keys(Y).forEach((F)=>{if(F==="format"&&K.format==="jsonl"){A4.write(U0.yellow('jsonl format is deprecated. Version "0.0.1753194394-g45962a" is required to use jsonl format. We recommend disabling auto-updates with `"amp.updates.autoUpdate.enabled": false` when using the pinned version.\n'));return}let H=yJA.find((E)=>E.name===F);if(H&&bJA(H)&&!g22(H))A4.write(U0.yellow(`Warning: '--${F}' flag is deprecated
|
4754
4754
|
`))}),X.args.length>0)h22(U,X);await mJA(U,Y)});let z=new Qp("doctor").description("Generate a support bundle for troubleshooting").option("--output-dir <path>","Directory to save the support bundle",process.cwd()).option("--include-full-logs","Include full log history",!1).allowUnknownOption(!1).action(async(K)=>{await r22(K.outputDir,K.includeFullLogs)});A.addCommand(z);let Z=new Qp("update").description("Update Amp CLI to the latest version").option("--version <version>","Update to a specific version").allowUnknownOption(!1).action(async(K)=>{await a22(K.version)});A.addCommand(Z);let G=new Qp("fuzzy-server").description("Internal fuzzy server").action(()=>{new Hf1().start()});return A.addCommand(G),A}async function mJA(A,Q){let B=process.stdin,J=v41(Q);if(J instanceof Error)PB(J.message);let D,z=null;if(typeof Q.execute==="string"){D=Q.execute;let F=(await Mf1()).trimEnd();if(F)z=F}else D=(await Mf1()).trimEnd();if(A.executeMode&&D==="")throw new eJ("User message must be provided through stdin or as argument when using execute mode",1,`Either pass a message as an argument: amp -x "your message"
|
4755
4755
|
Or pipe via stdin: echo "your message" | amp -x`);if(D!==""&&!A.executeMode&&typeof Q.execute!=="string")B=await h4A();let Z=await sS(A,Q),G=WZ();if(!1)try{}catch(F){}else if(Q.threadId){if(!U3(Q.threadId))throw new eJ(SG.invalidThreadId);G=Q.threadId;try{let F=await y22(G);Z.threadStorage.set(G,F)}catch(F){if(F instanceof eJ)throw F;jp(F,G)}}let K=Z.threadService.observe(G).subscribe(async(F)=>{if(LJ(F,"assistant"))await pb1(G),K.unsubscribe()});if(!(await V6(Z.threadSyncService.threadSyncInfo([G])))[G])throw new Error(`Thread ${G} not found`);if(J)await Z.threadSyncService.updateThreadMeta(G,k41(J));if(Q.format==="jsonl")A4.write(`jsonl format is deprecated. Version "0.0.1752148945-gd8844f" or earlier is required to use jsonl format.
|
@@ -4775,7 +4775,7 @@ Or pipe via stdin: echo "your message" | amp -x`);if(D!==""&&!A.executeMode&&typ
|
|
4775
4775
|
`);process.exit(0)}async function a22(A){try{if(A)A4.write(U0.blue(`Updating to version ${A}...
|
4776
4776
|
`)),await Qb1(A),A4.write(U0.green(`✓ Successfully updated to version ${A}
|
4777
4777
|
`));else{A4.write(U0.blue(`Checking for updates...
|
4778
|
-
`));let Q=await Or("0.0.
|
4778
|
+
`));let Q=await Or("0.0.1754036264-ga0aa13");if(!Q.hasUpdate)A4.write(U0.green(`✓ Amp CLI is already up to date.
|
4779
4779
|
`)),process.exit(0);A4.write(U0.blue(`Updating to version ${Q.latestVersion}...
|
4780
4780
|
`)),await Qb1(Q.latestVersion),A4.write(U0.green(`✓ Successfully updated to version ${Q.latestVersion}
|
4781
4781
|
`))}process.exit(0)}catch(Q){PB(Q instanceof Error?Q.message:String(Q))}}async function r22(A,Q){try{A4.write(U0.green("Generating Amp support bundle...")+`
|
package/package.json
CHANGED