@gitlab/duo-cli 8.28.0 → 8.28.1

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/index.js CHANGED
@@ -1162,7 +1162,7 @@ Please report this to https://github.com/markedjs/marked.`,A){let Q="<p>An error
1162
1162
  `]},Y))})})()]})})};var ha=(A)=>{VJ((D,_)=>{if(_.return)A()})},bP=(A)=>{VJ((D,_)=>{if(_.ctrl&&D==="c")A()})},_10=(A)=>{VJ((D,_)=>{if(_.ctrl&&D==="o")A()})},Q10=(A)=>{VJ((D,_)=>{if(_.ctrl&&D==="s")A()})};var E10=({input:A,callbacks:D})=>{let[_,Q]=B10.useState(A.lines.join(`
1163
1163
  `));return ha(()=>{D.onSubmit(_),Q("")}),bP(()=>{if(_.trim())Q("");else D.onExit()}),_A(ma,{value:_,onChange:(E)=>{Q(E)},placeholder:"Type your message here... • Ctrl+C to exit"})};var z10=({input:A,callbacks:D})=>{let _=A.choiceOptions||[],Q=A.selectedChoiceIndex??0;return bP(()=>{D.onExit()}),F4(EA,{flexDirection:"column",children:[_A(EA,{borderStyle:"single",borderColor:"gray",paddingX:1,children:_A(S0,{color:"dim",children:"Select an option:"})}),_A(EA,{flexDirection:"column",paddingLeft:2,paddingY:1,children:_.map((B,E)=>{let z=E===Q;return F4(EA,{marginBottom:B.description?0:0,children:[F4(S0,{color:z?"cyan":"white",bold:z,children:[z?"› ":" ",B.label]}),B.description&&F4(S0,{color:"dim",children:[" - ",B.description]})]},E)})}),_A(S0,{dimColor:!0,children:"Use ↑/↓ arrows to navigate • Enter to select • Ctrl+C to exit"})]})};var Pq={TEXT:"text",CHOICE:"choice"};var J10=({input:A,callbacks:D})=>{switch(VJ((_,Q)=>{D.onKeyPress(_,Q)}),A.inputType){case Pq.TEXT:return _A(E10,{input:A,callbacks:D});case Pq.CHOICE:return _A(z10,{input:A,callbacks:D});default:return null}};var X10=()=>{return _A(EA,{paddingLeft:2,children:_A(S0,{color:"yellow",children:"\uD83E\uDD16 Duo is thinking..."})})};var G10=({error:A})=>{return F4(EA,{flexDirection:"column",marginY:0,children:[_A(EA,{children:_A(S0,{color:"red",children:"❌ Error:"})}),_A(EA,{paddingLeft:2,children:_A(S0,{color:"red",children:A})}),_A(KG,{})]})};var Y10=({state:A,callbacks:D})=>{return _10(D.toggleExpanded),F4(EA,{flexDirection:"column",height:"100%",children:[_A(EA,{flexDirection:"column",flexGrow:1,marginBottom:1,children:A.elements.map((_,Q)=>{if(_.type==="message")return _A(Vi1,{message:_},`${_.id}-${Q}`);if(_.type==="error")return _A(G10,{error:_.error},`${_.id}-${Q}`);return _A(D10,{tool:_,expanded:A.expanded},`${_.id}-${Q}`)})}),_A(J10,{input:A.input,callbacks:D}),A.isLoading&&_A(X10,{})]})};var T_1=({state:A,callbacks:D})=>{return _A(Y10,{state:A,callbacks:D})};var ca=C0(j2(),1);var pa={gitlabRed:"#e2432a",gitlabOrange:"#fc6d27",gitlabYellow:"#fca326",gitlabPurple:"#554488",gitlabGrey:"#8c929d",white:"#FFFFFF"};var F10=()=>{let{gitlabRed:A,gitlabOrange:D,gitlabYellow:_}=pa;return F4(EA,{flexDirection:"column",children:[_A(S0,{color:A,children:" .. .. "}),_A(S0,{color:A,children:" .+= =+. "}),F4(S0,{children:[" ",_A(S0,{color:A,children:".-+*"}),_A(S0,{color:A,children:"===="}),_A(S0,{color:A,children:"*+-."})]}),F4(S0,{children:[" ",_A(S0,{color:D,children:".=="}),_A(S0,{color:A,children:"+****+"}),_A(S0,{color:D,children:"==."})]}),F4(S0,{children:[_A(S0,{color:D,children:" .==*"}),_A(S0,{color:A,children:"++"}),_A(S0,{color:D,children:"*==. "})]}),F4(S0,{children:[_A(S0,{color:D,children:" '.="}),_A(S0,{color:_,children:"--"}),_A(S0,{color:D,children:"=.' "})]}),_A(S0,{color:_,children:" '**' "})]})};var $10=({version:A})=>{return F4(EA,{borderStyle:"round",children:[_A(EA,{children:_A(F10,{})}),F4(EA,{flexDirection:"column",children:[_A(db,{}),_A(S0,{children:"GitLab Duo CLI"}),_A(KG,{}),F4(S0,{children:["Version: ",A]}),_A(db,{})]})]})};var{gitlabPurple:MvA,white:OvA}=pa,NvA=({entry:A,isActive:D})=>{let _=D?MvA:void 0,Q=D?OvA:void 0,B=A.value?Lq(A.value,A.isSensitive):"Not set";return F4(EA,{paddingX:1,paddingY:1,children:[_A(EA,{flexGrow:2,flexShrink:0,flexBasis:0,children:F4(S0,{color:Q,backgroundColor:_,children:[D?"▸ ":" ",A.displayName]})}),_A(EA,{flexGrow:2,flexShrink:0,flexBasis:0,paddingLeft:2,children:_A(S0,{children:B})}),_A(EA,{flexGrow:3,flexShrink:0,flexBasis:0,paddingLeft:2,children:_A(S0,{dimColor:!0,children:A.description})})]})},K10=({state:A,configurationIndex:D})=>{let _=A.configurationEntries[D];return F4(EA,{flexDirection:"column",children:[F4(EA,{paddingX:1,paddingTop:1,children:[_A(EA,{flexGrow:2,flexShrink:0,flexBasis:0,children:_A(S0,{bold:!0,children:"Setting"})}),_A(EA,{flexGrow:2,flexShrink:0,flexBasis:0,paddingLeft:2,children:_A(S0,{bold:!0,children:"Current Value"})}),_A(EA,{flexGrow:3,flexShrink:0,flexBasis:0,paddingLeft:2,children:_A(S0,{bold:!0,children:"Description"})})]}),A.configurationEntries.map((Q)=>_A(NvA,{entry:Q,isActive:Q.key===_.key},Q.key))]})};var Z10=({initialState:A,controller:D,duoCliVersion:_})=>{let[Q,B]=ca.useState(0),[E,z]=ca.useState(A),J=E.configurationEntries[Q],[X,G]=ca.useState(J.value);bP(()=>D.exit());let Y=()=>{B((F)=>{let Z=Math.min(E.configurationEntries.length-1,F+1);return G(E.configurationEntries[Z].value),Z})};VJ((F,Z)=>{if(Z.tab&&!Z.shift)Y();if(Z.tab&&Z.shift)B((U)=>{let C=Math.max(0,U-1);return G(E.configurationEntries[C].value),C})}),Q10(async()=>{(await D.saveConfig(E)).match(()=>{D.exit()},(Z)=>{throw Z})}),ha(()=>{let F=[...E.configurationEntries];F[Q].value=X||F[Q].defaultValue,z({configurationEntries:F}),Y()});let $=(F)=>{G(F)},K=J.defaultValue===""?`Please enter your ${J.displayName}.`:`Please enter your ${J.displayName}. Press Enter to use ${J.defaultValue}.`;return F4(EA,{flexDirection:"column",children:[_A($10,{version:_}),_A(K10,{state:E,configurationIndex:Q,inputValue:X,onValueChange:$}),_A(ma,{value:X,onChange:$,placeholder:K,masked:J.isSensitive}),_A(EA,{paddingX:2,paddingTop:1,children:_A(S0,{dimColor:!0,children:_A(gL,{markdown:"Press *Enter* to apply • *Tab/Shift+Tab* to navigate forward/back • *Ctrl+S* to save and exit • *Ctrl+C* to exit without saving"})})})]})};var kP={inputType:"text",lines:[""],cursorLine:0,cursorColumn:0},v_1={elements:[],isLoading:!1,input:kP,expanded:!1};var uO=C0(j2(),1);var U10=C0(OA(),1),f8=U10.createInterfaceId("GitLabApiService");var I10=C0(GG(),1);function w10(A){return(A.split(`
1164
1164
  `).find((D)=>D.trim())??A.replace(`
1165
- `,"")).trim()}function LvA(A){return w10(A).match(/^(query|mutation|subscription)\s+/)?.[1]}function PvA(A){return w10(A).match(/(?:query|mutation|subscription)\s+(\w+)/)?.[1]}function da(A){let D=LvA(A),_=PvA(A);if(D)return`${D}: ${_??"anonymous"}`;return}var RvA=(A)=>{if(A.method==="GET"||A.method==="HEAD")return;if(!A.body)return;return a9("Body",JSON.stringify(A.body))},TvA=(A)=>{if(A.method==="POST"||A.method==="PATCH"||A.method==="PUT")return;if(!A.searchParams)return;return a9("Search Params",JSON.stringify(A.searchParams))},vvA=(A)=>{if(!A.headers)return;return a9("Headers",JSON.stringify(A.headers))},Yx=(A)=>{switch(A.type){case"graphql":return jB("GraphQL Request",a9("Query",A.query.replace(/[\s\n]+/g," ").trim()),a9("Variables",JSON.stringify(A.variables)));case"rest":return jB("REST Request",a9("Method",A.method),a9("Path",A.path),vvA(A),TvA(A),RvA(A));default:return a9("Unknown request type",A.type)}};var H10=(A)=>{try{return JSON.parse(A)?.error}catch{return}},yvA=(A)=>{if(!A)return"";try{return JSON.parse(A)?.error_description??""}catch{return""}},y_1=(A,D)=>Boolean(A.status===401&&D&&H10(D)==="invalid_token"),S_1=(A,D)=>Boolean(A.status===400&&D&&H10(D)==="invalid_grant");class la extends Error{request;cause;constructor(A,D,_){super(A);this.request=D,this.cause=_?.cause}get sanitizedMessage(){return"API request failed"}}class j_1 extends la{status;constructor(A,D,_,Q){super(A,D,Q);this.status=_}}class V10 extends j_1{type="rest";response;#A;constructor(A,D,_,Q){let B=`Fetching ${_} from ${D.url} failed. ${yvA(Q)}`;if(y_1(D,Q))B=`Request for ${_} failed because the token is expired or revoked.`;if(S_1(D,Q))B="Request to refresh token failed, because it's revoked or already refreshed.";super(B,A,D.status);this.response=D,this.#A=Q}isInvalidTokenOrInvalidRefresh(){return y_1(this.response,this.#A)||S_1(this.response,this.#A)}get ctx(){return jB("Error details",Yx(this.request),this.#D())}get sanitizedMessage(){if(y_1(this.response,this.#A))return"Request failed because the token is expired or revoked.";if(S_1(this.response,this.#A))return"Request to refresh token failed, because it's revoked or already refreshed.";return`Request failed with error code: ${this.response.status}`}#D(){let A=Object.fromEntries(this.response.headers.entries());return jB("Response",a9("Status",String(this.status)),!I10.default.isEmpty(A)?a9("Headers",JSON.stringify(A)):void 0,this.#A?a9("Response body",this.#A):void 0)}get body(){return this.#A}}var C10=(A)=>A.errors?.map((D)=>D.message).join(",")||"";class b_1 extends j_1{type="graphql";graphQlResponse;#A;constructor(A,D){let _=da(A.query),Q=`GraphQL request "${_}" failed with ${C10(D)}`;super(Q,A,D.status);this.graphQlResponse=D,this.#A=_}get sanitizedMessage(){return`GraphQL request "${this.#A}" failed with status ${this.graphQlResponse.status}`}get ctx(){return jB("Error details",Yx(this.request),this.#D())}#D(){return jB("Response",a9("Status",String(this.graphQlResponse.status)),a9("Errors",C10(this.graphQlResponse)))}}class ia extends la{type="network";cause;constructor(A,D){let _=D instanceof Error?D.message:`Network error occurred: ${D}`;super(_,A);this.cause=D}get ctx(){return jB("Error details",Yx(this.request),this.#A())}get sanitizedMessage(){let A=this.cause,D=A?.code||A?.errno,_=this.#D(D);return`Network error occurred${_?`: ${_}`:""}`}#A(){if(!this.cause||!(this.cause instanceof Error))return;let A=this.cause;if(A.code||A.errno){let D=A.code||A.errno,_=this.#D(D),Q=_?`${_} (${D})`:`Error code: ${D}`;return a9("Network issue",Q)}return}#D(A){return{ENOTFOUND:"DNS lookup failed - hostname could not be resolved",ECONNREFUSED:"Connection refused - server is not accepting connections",ECONNRESET:"Connection reset by peer - server closed the connection unexpectedly",ETIMEDOUT:"Connection timed out - server did not respond in time",EHOSTUNREACH:"Host unreachable - network route to server not available",ENETUNREACH:"Network unreachable - no network connectivity",ECONNABORTED:"Connection aborted - request was cancelled",EBADF:"Bad file descriptor - network connection issue",EPIPE:"Broken pipe - connection closed while writing data",EAI_AGAIN:"DNS lookup failed temporarily - try again later"}[A]}}class SvA extends la{type="timeout";#A;constructor(A,D){let _=`Request timed out${D?` after ${D}ms`:""}`;super(_,A);this.#A=_}get ctx(){return jB("Error details",Yx(this.request))}get sanitizedMessage(){return this.#A}}var q10=V10;var k_1={type:"rest",method:"GET",path:"/api/v4/version"};var aa=JSON;var W10=(A)=>A.toUpperCase(),M10=(A)=>{let D={};return A.forEach((_,Q)=>{D[Q]=_}),D};var O10=(A,D,_)=>{return A.document?A:{document:A,variables:D,requestHeaders:_,signal:void 0}},N10=(A,D,_)=>{return A.query?A:{query:A,variables:D,requestHeaders:_,signal:void 0}},L10=(A,D)=>{return A.documents?A:{documents:A,requestHeaders:D,signal:void 0}};var ln=C0(H90(),1),V90=(A)=>{let D=void 0,_=A.definitions.filter((Q)=>Q.kind==="OperationDefinition");if(_.length===1)D=_[0]?.name?.value;return D},lq=(A)=>{if(typeof A==="string"){let _=void 0;try{let Q=ln.parse(A);_=V90(Q)}catch(Q){}return{query:A,operationName:_}}let D=V90(A);return{query:ln.print(A),operationName:D}};class Kz extends Error{constructor(A,D){let _=`${Kz.extractMessage(A)}: ${JSON.stringify({response:A,request:D})}`;super(_);if(Object.setPrototypeOf(this,Kz.prototype),this.response=A,this.request=D,typeof Error.captureStackTrace==="function")Error.captureStackTrace(this,Kz)}static extractMessage(A){return A.errors?.[0]?.message??`GraphQL Error (Code: ${A.status})`}}var jC=C0(G50(),1);var YiA="connection_init",FiA="connection_ack",F50="ping",$50="pong",$iA="subscribe",KiA="next",ZiA="error",K50="complete";class SC{get type(){return this._type}get id(){return this._id}get payload(){return this._payload}constructor(A,D,_){this._type=A,this._payload=D,this._id=_}get text(){let A={type:this.type};if(this.id!=null&&this.id!=null)A.id=this.id;if(this.payload!=null&&this.payload!=null)A.payload=this.payload;return JSON.stringify(A)}static parse(A,D){let{type:_,payload:Q,id:B}=JSON.parse(A);return new SC(_,D(Q),B)}}class VE1{constructor(A,{onInit:D,onAcknowledged:_,onPing:Q,onPong:B}){this.socketState={acknowledged:!1,lastRequestId:0,subscriptions:{}},this.socket=A,A.addEventListener("open",async(E)=>{this.socketState.acknowledged=!1,this.socketState.subscriptions={},A.send(wiA(D?await D():null).text)}),A.addEventListener("close",(E)=>{this.socketState.acknowledged=!1,this.socketState.subscriptions={}}),A.addEventListener("error",(E)=>{console.error(E)}),A.addEventListener("message",(E)=>{try{let z=UiA(E.data);switch(z.type){case FiA:{if(this.socketState.acknowledged)console.warn("Duplicate CONNECTION_ACK message ignored");else if(this.socketState.acknowledged=!0,_)_(z.payload);return}case F50:{if(Q)Q(z.payload).then((Y)=>A.send(Y50(Y).text));else A.send(Y50(null).text);return}case $50:{if(B)B(z.payload);return}}if(!this.socketState.acknowledged)return;if(z.id===void 0||z.id===null||!this.socketState.subscriptions[z.id])return;let{query:J,variables:X,subscriber:G}=this.socketState.subscriptions[z.id];switch(z.type){case KiA:{if(!z.payload.errors&&z.payload.data)G.next&&G.next(z.payload.data);if(z.payload.errors)G.error&&G.error(new Kz({...z.payload,status:200},{query:J,variables:X}));return}case ZiA:{G.error&&G.error(new Kz({errors:z.payload,status:200},{query:J,variables:X}));return}case K50:{G.complete&&G.complete(),delete this.socketState.subscriptions[z.id];return}}}catch(z){console.error(z),A.close(1006)}A.close(4400,"Unknown graphql-ws message.")})}makeSubscribe(A,D,_,Q){let B=(this.socketState.lastRequestId++).toString();return this.socketState.subscriptions[B]={query:A,variables:Q,subscriber:_},this.socket.send(IiA(B,{query:A,operationName:D,variables:Q}).text),()=>{this.socket.send(HiA(B).text),delete this.socketState.subscriptions[B]}}rawRequest(A,D){return new Promise((_,Q)=>{let B;this.rawSubscribe(A,{next:(E,z)=>B={data:E,extensions:z},error:Q,complete:()=>_(B)},D)})}request(A,D){return new Promise((_,Q)=>{let B;this.subscribe(A,{next:(E)=>B=E,error:Q,complete:()=>_(B)},D)})}subscribe(A,D,_){let{query:Q,operationName:B}=lq(A);return this.makeSubscribe(Q,B,D,_)}rawSubscribe(A,D,_){return this.makeSubscribe(A,void 0,D,_)}ping(A){this.socket.send(CiA(A).text)}close(){this.socket.close(1000)}}VE1.PROTOCOL="graphql-transport-ws";function UiA(A,D=(_)=>_){return SC.parse(A,D)}function wiA(A){return new SC(YiA,A)}function CiA(A){return new SC(F50,A,void 0)}function Y50(A){return new SC($50,A,void 0)}function IiA(A,D){return new SC($iA,D,A)}function HiA(A){return new SC(K50,void 0,A)}var BR=(A)=>{let D={};if(A)if(typeof Headers!=="undefined"&&A instanceof Headers||jC&&jC.Headers&&A instanceof jC.Headers)D=M10(A);else if(Array.isArray(A))A.forEach(([_,Q])=>{if(_&&Q!==void 0)D[_]=Q});else D=A;return D},Z50=(A)=>A.replace(/([\s,]|#[^\n\r]+)+/g," ").trim(),ViA=(A)=>{if(!Array.isArray(A.query)){let Q=A,B=[`query=${encodeURIComponent(Z50(Q.query))}`];if(A.variables)B.push(`variables=${encodeURIComponent(Q.jsonSerializer.stringify(Q.variables))}`);if(Q.operationName)B.push(`operationName=${encodeURIComponent(Q.operationName)}`);return B.join("&")}if(typeof A.variables!=="undefined"&&!Array.isArray(A.variables))throw new Error("Cannot create query with given variable type, array expected");let D=A,_=A.query.reduce((Q,B,E)=>{return Q.push({query:Z50(B),variables:D.variables?D.jsonSerializer.stringify(D.variables[E]):void 0}),Q},[]);return`query=${encodeURIComponent(D.jsonSerializer.stringify(_))}`},qiA=(A)=>async(D)=>{let{url:_,query:Q,variables:B,operationName:E,fetch:z,fetchOptions:J,middleware:X}=D,G={...D.headers},Y="",$=void 0;if(A==="POST"){if($=WiA(Q,B,E,J.jsonSerializer),typeof $==="string")G["Content-Type"]="application/json"}else Y=ViA({query:Q,variables:B,operationName:E,jsonSerializer:J.jsonSerializer??aa});let K={method:A,headers:G,body:$,...J},F=_,Z=K;if(X){let U=await Promise.resolve(X({...K,url:_,operationName:E,variables:B})),{url:C,...V}=U;F=C,Z=V}if(Y)F=`${F}?${Y}`;return await z(F,Z)};class ME1{constructor(A,D={}){this.url=A,this.requestConfig=D,this.rawRequest=async(..._)=>{let[Q,B,E]=_,z=N10(Q,B,E),{headers:J,fetch:X=jC.default,method:G="POST",requestMiddleware:Y,responseMiddleware:$,...K}=this.requestConfig,{url:F}=this;if(z.signal!==void 0)K.signal=z.signal;let{operationName:Z}=lq(z.query);return qE1({url:F,query:z.query,variables:z.variables,headers:{...BR(WE1(J)),...BR(z.requestHeaders)},operationName:Z,fetch:X,method:G,fetchOptions:K,middleware:Y}).then((U)=>{if($)$(U);return U}).catch((U)=>{if($)$(U);throw U})}}async request(A,...D){let[_,Q]=D,B=O10(A,_,Q),{headers:E,fetch:z=jC.default,method:J="POST",requestMiddleware:X,responseMiddleware:G,...Y}=this.requestConfig,{url:$}=this;if(B.signal!==void 0)Y.signal=B.signal;let{query:K,operationName:F}=lq(B.document);return qE1({url:$,query:K,variables:B.variables,headers:{...BR(WE1(E)),...BR(B.requestHeaders)},operationName:F,fetch:z,method:J,fetchOptions:Y,middleware:X}).then((Z)=>{if(G)G(Z);return Z.data}).catch((Z)=>{if(G)G(Z);throw Z})}batchRequests(A,D){let _=L10(A,D),{headers:Q,...B}=this.requestConfig;if(_.signal!==void 0)B.signal=_.signal;let E=_.documents.map(({document:J})=>lq(J).query),z=_.documents.map(({variables:J})=>J);return qE1({url:this.url,query:E,variables:z,headers:{...BR(WE1(Q)),...BR(_.requestHeaders)},operationName:void 0,fetch:this.requestConfig.fetch??jC.default,method:this.requestConfig.method||"POST",fetchOptions:B,middleware:this.requestConfig.requestMiddleware}).then((J)=>{if(this.requestConfig.responseMiddleware)this.requestConfig.responseMiddleware(J);return J.data}).catch((J)=>{if(this.requestConfig.responseMiddleware)this.requestConfig.responseMiddleware(J);throw J})}setHeaders(A){return this.requestConfig.headers=A,this}setHeader(A,D){let{headers:_}=this.requestConfig;if(_)_[A]=D;else this.requestConfig.headers={[A]:D};return this}setEndpoint(A){return this.url=A,this}}var qE1=async(A)=>{let{query:D,variables:_,fetchOptions:Q}=A,B=qiA(W10(A.method??"post")),E=Array.isArray(A.query),z=await B(A),J=await MiA(z,Q.jsonSerializer??aa),X=Array.isArray(J)?!J.some(({data:Y})=>!Y):Boolean(J.data),G=Array.isArray(J)||!J.errors||Array.isArray(J.errors)&&!J.errors.length||Q.errorPolicy==="all"||Q.errorPolicy==="ignore";if(z.ok&&G&&X){let{errors:Y,...$}=Array.isArray(J)?J:J,K=Q.errorPolicy==="ignore"?$:J;return{...E?{data:K}:K,headers:z.headers,status:z.status}}else throw new Kz({...typeof J==="string"?{error:J}:J,status:z.status,headers:z.headers},{query:D,variables:_})};var WiA=(A,D,_,Q)=>{let B=Q??aa;if(!Array.isArray(A))return B.stringify({query:A,variables:D,operationName:_});if(typeof D!=="undefined"&&!Array.isArray(D))throw new Error("Cannot create request body with given variable type, array expected");let E=A.reduce((z,J,X)=>{return z.push({query:J,variables:D?D[X]:void 0}),z},[]);return B.stringify(E)},MiA=async(A,D)=>{let _;if(A.headers.forEach((Q,B)=>{if(B.toLowerCase()==="content-type")_=Q}),_&&(_.toLowerCase().startsWith("application/json")||_.toLowerCase().startsWith("application/graphql+json")||_.toLowerCase().startsWith("application/graphql-response+json")))return D.parse(await A.text());else return A.text()},WE1=(A)=>{return typeof A==="function"?A():A},fJ=(A,...D)=>{return A.reduce((_,Q,B)=>`${_}${Q}${B in D?String(D[B]):""}`,"")};var U50=async(A,D,_)=>{if(!D.ok){let Q=await D.text().catch(()=>{return});throw new q10(A,D,_,Q)}};function mQ(){return"8.28.0"}var w50=(A)=>{let D=A?`${A?.name}:${A?.version}`:"missing client info";return`gitlab-language-server:${mQ()} (${D})`};function C50(A){return A!==null&&A!==void 0}var OE1=(A,D)=>{return Object.entries(D).forEach(([_,Q])=>{if(C50(Q))A.searchParams.append(_,String(Q))}),A},en=(A)=>A.toString().replace(/\/?$/,"/"),ER=(A)=>A.replace(/^\.?\/?/,"./"),I50=(A)=>{if(A.startsWith("git@")){let D=A.match(/git@([^:]+):(.+)/);if(D){let[,_,Q]=D;return`https://${_}/${Q}`}}if(A.startsWith("git://"))return A.replace("git://","https://");if(A.startsWith("ssh://"))return A.replace("ssh://","https://").replace(/git@([^/]+)/,"$1");return A};var OiA=(A)=>A.split("/").pop()||"unknown resource";class NE1{#A;#D;#_;#Q;#B;constructor(A,D,_,Q,B){this.#A=A,this.#D=D,this.#_=new URL(en(Q)),this.#Q=B,this.#B=_}getDefaultHeaders(){return{Authorization:`Bearer ${this.#Q}`,"User-Agent":w50(this.#B),"X-Gitlab-Language-Server-Version":mQ()}}async fetchFromApiRaw(A){try{let D=`Unknown request method "${A.method}", request type "${A.type}"`;switch(A.method){case"GET":return await this.#z(A);case"POST":return await this.#J(A);case"PATCH":return await this.#X(A);case"PUT":return await this.#Y(A);case"HEAD":return await this.#G(A);default:throw new Error(D)}}catch(D){throw new ia(A,D)}}async fetchFromApi(A){if(A.type==="graphql")return this.#E(A);let D=await this.fetchFromApiRaw(A);return await U50(A,D,OiA(A.path)),D.json()}fetchOperation=(A)=>(D)=>this.fetchFromApi({...A,signal:D});async#E(A){let D=new URL("./api/graphql",this.#_),_=da(A.query);if(_)this.#A.debug(`[SimpleApiClient] Making GraphQL request: ${_}`);let Q=async(E,z)=>{let J=E instanceof URL?E.toString():E;return this.#D.post(J,{...z,headers:{...z?.headers},signal:A.signal})},B=new ME1(D.href,{fetch:Q,headers:{...this.getDefaultHeaders()}});try{return await B.request(A.query,A.variables)}catch(E){if(E instanceof Kz)throw new b_1(A,E.response);throw new ia(A,E)}}async#z(A){let D=ER(A.path),_=new URL(D,this.#_);return OE1(_,A.searchParams??{}),this.#D.get(_,{headers:{...this.getDefaultHeaders(),...A.headers},signal:A.signal})}async#J(A){let D=ER(A.path),_=new URL(D,this.#_);return this.#D.post(_,{headers:{"Content-Type":"application/json",...this.getDefaultHeaders(),...A.headers},body:JSON.stringify(A.body),signal:A.signal})}async#X(A){let D=ER(A.path),_=new URL(D,this.#_);return this.#D.patch(_,{headers:{"Content-Type":"application/json",...this.getDefaultHeaders(),...A.headers},body:JSON.stringify(A.body),signal:A.signal})}async#Y(A){let D=ER(A.path),_=new URL(D,this.#_);return this.#D.put(_,{headers:{"Content-Type":"application/json",...this.getDefaultHeaders(),...A.headers},body:JSON.stringify(A.body),signal:A.signal})}async#G(A){let D=ER(A.path),_=new URL(D,this.#_);return OE1(_,A.searchParams??{}),this.#D.head(_,{headers:{...this.getDefaultHeaders(),...A.headers},signal:A.signal})}}var Ao=C0(OA(),1);var LE1=Ao.createInterfaceId("ProjectService");class Bg{#A;#D;constructor(A,D){this.#A=D,this.#D=SA(A,"[ProjectService]")}async getProjectFromPathWithNamespace(A){return this.#D.debug(`Fetching details for project: ${A}`),this.#A.fetchFromApi({type:"rest",method:"GET",path:`/api/v4/projects/${encodeURIComponent(A)}`})}async getProjectIdsFromPaths(A){return(await this.#A.fetchFromApi({type:"graphql",query:fJ`
1165
+ `,"")).trim()}function LvA(A){return w10(A).match(/^(query|mutation|subscription)\s+/)?.[1]}function PvA(A){return w10(A).match(/(?:query|mutation|subscription)\s+(\w+)/)?.[1]}function da(A){let D=LvA(A),_=PvA(A);if(D)return`${D}: ${_??"anonymous"}`;return}var RvA=(A)=>{if(A.method==="GET"||A.method==="HEAD")return;if(!A.body)return;return a9("Body",JSON.stringify(A.body))},TvA=(A)=>{if(A.method==="POST"||A.method==="PATCH"||A.method==="PUT")return;if(!A.searchParams)return;return a9("Search Params",JSON.stringify(A.searchParams))},vvA=(A)=>{if(!A.headers)return;return a9("Headers",JSON.stringify(A.headers))},Yx=(A)=>{switch(A.type){case"graphql":return jB("GraphQL Request",a9("Query",A.query.replace(/[\s\n]+/g," ").trim()),a9("Variables",JSON.stringify(A.variables)));case"rest":return jB("REST Request",a9("Method",A.method),a9("Path",A.path),vvA(A),TvA(A),RvA(A));default:return a9("Unknown request type",A.type)}};var H10=(A)=>{try{return JSON.parse(A)?.error}catch{return}},yvA=(A)=>{if(!A)return"";try{return JSON.parse(A)?.error_description??""}catch{return""}},y_1=(A,D)=>Boolean(A.status===401&&D&&H10(D)==="invalid_token"),S_1=(A,D)=>Boolean(A.status===400&&D&&H10(D)==="invalid_grant");class la extends Error{request;cause;constructor(A,D,_){super(A);this.request=D,this.cause=_?.cause}get sanitizedMessage(){return"API request failed"}}class j_1 extends la{status;constructor(A,D,_,Q){super(A,D,Q);this.status=_}}class V10 extends j_1{type="rest";response;#A;constructor(A,D,_,Q){let B=`Fetching ${_} from ${D.url} failed. ${yvA(Q)}`;if(y_1(D,Q))B=`Request for ${_} failed because the token is expired or revoked.`;if(S_1(D,Q))B="Request to refresh token failed, because it's revoked or already refreshed.";super(B,A,D.status);this.response=D,this.#A=Q}isInvalidTokenOrInvalidRefresh(){return y_1(this.response,this.#A)||S_1(this.response,this.#A)}get ctx(){return jB("Error details",Yx(this.request),this.#D())}get sanitizedMessage(){if(y_1(this.response,this.#A))return"Request failed because the token is expired or revoked.";if(S_1(this.response,this.#A))return"Request to refresh token failed, because it's revoked or already refreshed.";return`Request failed with error code: ${this.response.status}`}#D(){let A=Object.fromEntries(this.response.headers.entries());return jB("Response",a9("Status",String(this.status)),!I10.default.isEmpty(A)?a9("Headers",JSON.stringify(A)):void 0,this.#A?a9("Response body",this.#A):void 0)}get body(){return this.#A}}var C10=(A)=>A.errors?.map((D)=>D.message).join(",")||"";class b_1 extends j_1{type="graphql";graphQlResponse;#A;constructor(A,D){let _=da(A.query),Q=`GraphQL request "${_}" failed with ${C10(D)}`;super(Q,A,D.status);this.graphQlResponse=D,this.#A=_}get sanitizedMessage(){return`GraphQL request "${this.#A}" failed with status ${this.graphQlResponse.status}`}get ctx(){return jB("Error details",Yx(this.request),this.#D())}#D(){return jB("Response",a9("Status",String(this.graphQlResponse.status)),a9("Errors",C10(this.graphQlResponse)))}}class ia extends la{type="network";cause;constructor(A,D){let _=D instanceof Error?D.message:`Network error occurred: ${D}`;super(_,A);this.cause=D}get ctx(){return jB("Error details",Yx(this.request),this.#A())}get sanitizedMessage(){let A=this.cause,D=A?.code||A?.errno,_=this.#D(D);return`Network error occurred${_?`: ${_}`:""}`}#A(){if(!this.cause||!(this.cause instanceof Error))return;let A=this.cause;if(A.code||A.errno){let D=A.code||A.errno,_=this.#D(D),Q=_?`${_} (${D})`:`Error code: ${D}`;return a9("Network issue",Q)}return}#D(A){return{ENOTFOUND:"DNS lookup failed - hostname could not be resolved",ECONNREFUSED:"Connection refused - server is not accepting connections",ECONNRESET:"Connection reset by peer - server closed the connection unexpectedly",ETIMEDOUT:"Connection timed out - server did not respond in time",EHOSTUNREACH:"Host unreachable - network route to server not available",ENETUNREACH:"Network unreachable - no network connectivity",ECONNABORTED:"Connection aborted - request was cancelled",EBADF:"Bad file descriptor - network connection issue",EPIPE:"Broken pipe - connection closed while writing data",EAI_AGAIN:"DNS lookup failed temporarily - try again later"}[A]}}class SvA extends la{type="timeout";#A;constructor(A,D){let _=`Request timed out${D?` after ${D}ms`:""}`;super(_,A);this.#A=_}get ctx(){return jB("Error details",Yx(this.request))}get sanitizedMessage(){return this.#A}}var q10=V10;var k_1={type:"rest",method:"GET",path:"/api/v4/version"};var aa=JSON;var W10=(A)=>A.toUpperCase(),M10=(A)=>{let D={};return A.forEach((_,Q)=>{D[Q]=_}),D};var O10=(A,D,_)=>{return A.document?A:{document:A,variables:D,requestHeaders:_,signal:void 0}},N10=(A,D,_)=>{return A.query?A:{query:A,variables:D,requestHeaders:_,signal:void 0}},L10=(A,D)=>{return A.documents?A:{documents:A,requestHeaders:D,signal:void 0}};var ln=C0(H90(),1),V90=(A)=>{let D=void 0,_=A.definitions.filter((Q)=>Q.kind==="OperationDefinition");if(_.length===1)D=_[0]?.name?.value;return D},lq=(A)=>{if(typeof A==="string"){let _=void 0;try{let Q=ln.parse(A);_=V90(Q)}catch(Q){}return{query:A,operationName:_}}let D=V90(A);return{query:ln.print(A),operationName:D}};class Kz extends Error{constructor(A,D){let _=`${Kz.extractMessage(A)}: ${JSON.stringify({response:A,request:D})}`;super(_);if(Object.setPrototypeOf(this,Kz.prototype),this.response=A,this.request=D,typeof Error.captureStackTrace==="function")Error.captureStackTrace(this,Kz)}static extractMessage(A){return A.errors?.[0]?.message??`GraphQL Error (Code: ${A.status})`}}var jC=C0(G50(),1);var YiA="connection_init",FiA="connection_ack",F50="ping",$50="pong",$iA="subscribe",KiA="next",ZiA="error",K50="complete";class SC{get type(){return this._type}get id(){return this._id}get payload(){return this._payload}constructor(A,D,_){this._type=A,this._payload=D,this._id=_}get text(){let A={type:this.type};if(this.id!=null&&this.id!=null)A.id=this.id;if(this.payload!=null&&this.payload!=null)A.payload=this.payload;return JSON.stringify(A)}static parse(A,D){let{type:_,payload:Q,id:B}=JSON.parse(A);return new SC(_,D(Q),B)}}class VE1{constructor(A,{onInit:D,onAcknowledged:_,onPing:Q,onPong:B}){this.socketState={acknowledged:!1,lastRequestId:0,subscriptions:{}},this.socket=A,A.addEventListener("open",async(E)=>{this.socketState.acknowledged=!1,this.socketState.subscriptions={},A.send(wiA(D?await D():null).text)}),A.addEventListener("close",(E)=>{this.socketState.acknowledged=!1,this.socketState.subscriptions={}}),A.addEventListener("error",(E)=>{console.error(E)}),A.addEventListener("message",(E)=>{try{let z=UiA(E.data);switch(z.type){case FiA:{if(this.socketState.acknowledged)console.warn("Duplicate CONNECTION_ACK message ignored");else if(this.socketState.acknowledged=!0,_)_(z.payload);return}case F50:{if(Q)Q(z.payload).then((Y)=>A.send(Y50(Y).text));else A.send(Y50(null).text);return}case $50:{if(B)B(z.payload);return}}if(!this.socketState.acknowledged)return;if(z.id===void 0||z.id===null||!this.socketState.subscriptions[z.id])return;let{query:J,variables:X,subscriber:G}=this.socketState.subscriptions[z.id];switch(z.type){case KiA:{if(!z.payload.errors&&z.payload.data)G.next&&G.next(z.payload.data);if(z.payload.errors)G.error&&G.error(new Kz({...z.payload,status:200},{query:J,variables:X}));return}case ZiA:{G.error&&G.error(new Kz({errors:z.payload,status:200},{query:J,variables:X}));return}case K50:{G.complete&&G.complete(),delete this.socketState.subscriptions[z.id];return}}}catch(z){console.error(z),A.close(1006)}A.close(4400,"Unknown graphql-ws message.")})}makeSubscribe(A,D,_,Q){let B=(this.socketState.lastRequestId++).toString();return this.socketState.subscriptions[B]={query:A,variables:Q,subscriber:_},this.socket.send(IiA(B,{query:A,operationName:D,variables:Q}).text),()=>{this.socket.send(HiA(B).text),delete this.socketState.subscriptions[B]}}rawRequest(A,D){return new Promise((_,Q)=>{let B;this.rawSubscribe(A,{next:(E,z)=>B={data:E,extensions:z},error:Q,complete:()=>_(B)},D)})}request(A,D){return new Promise((_,Q)=>{let B;this.subscribe(A,{next:(E)=>B=E,error:Q,complete:()=>_(B)},D)})}subscribe(A,D,_){let{query:Q,operationName:B}=lq(A);return this.makeSubscribe(Q,B,D,_)}rawSubscribe(A,D,_){return this.makeSubscribe(A,void 0,D,_)}ping(A){this.socket.send(CiA(A).text)}close(){this.socket.close(1000)}}VE1.PROTOCOL="graphql-transport-ws";function UiA(A,D=(_)=>_){return SC.parse(A,D)}function wiA(A){return new SC(YiA,A)}function CiA(A){return new SC(F50,A,void 0)}function Y50(A){return new SC($50,A,void 0)}function IiA(A,D){return new SC($iA,D,A)}function HiA(A){return new SC(K50,void 0,A)}var BR=(A)=>{let D={};if(A)if(typeof Headers!=="undefined"&&A instanceof Headers||jC&&jC.Headers&&A instanceof jC.Headers)D=M10(A);else if(Array.isArray(A))A.forEach(([_,Q])=>{if(_&&Q!==void 0)D[_]=Q});else D=A;return D},Z50=(A)=>A.replace(/([\s,]|#[^\n\r]+)+/g," ").trim(),ViA=(A)=>{if(!Array.isArray(A.query)){let Q=A,B=[`query=${encodeURIComponent(Z50(Q.query))}`];if(A.variables)B.push(`variables=${encodeURIComponent(Q.jsonSerializer.stringify(Q.variables))}`);if(Q.operationName)B.push(`operationName=${encodeURIComponent(Q.operationName)}`);return B.join("&")}if(typeof A.variables!=="undefined"&&!Array.isArray(A.variables))throw new Error("Cannot create query with given variable type, array expected");let D=A,_=A.query.reduce((Q,B,E)=>{return Q.push({query:Z50(B),variables:D.variables?D.jsonSerializer.stringify(D.variables[E]):void 0}),Q},[]);return`query=${encodeURIComponent(D.jsonSerializer.stringify(_))}`},qiA=(A)=>async(D)=>{let{url:_,query:Q,variables:B,operationName:E,fetch:z,fetchOptions:J,middleware:X}=D,G={...D.headers},Y="",$=void 0;if(A==="POST"){if($=WiA(Q,B,E,J.jsonSerializer),typeof $==="string")G["Content-Type"]="application/json"}else Y=ViA({query:Q,variables:B,operationName:E,jsonSerializer:J.jsonSerializer??aa});let K={method:A,headers:G,body:$,...J},F=_,Z=K;if(X){let U=await Promise.resolve(X({...K,url:_,operationName:E,variables:B})),{url:C,...V}=U;F=C,Z=V}if(Y)F=`${F}?${Y}`;return await z(F,Z)};class ME1{constructor(A,D={}){this.url=A,this.requestConfig=D,this.rawRequest=async(..._)=>{let[Q,B,E]=_,z=N10(Q,B,E),{headers:J,fetch:X=jC.default,method:G="POST",requestMiddleware:Y,responseMiddleware:$,...K}=this.requestConfig,{url:F}=this;if(z.signal!==void 0)K.signal=z.signal;let{operationName:Z}=lq(z.query);return qE1({url:F,query:z.query,variables:z.variables,headers:{...BR(WE1(J)),...BR(z.requestHeaders)},operationName:Z,fetch:X,method:G,fetchOptions:K,middleware:Y}).then((U)=>{if($)$(U);return U}).catch((U)=>{if($)$(U);throw U})}}async request(A,...D){let[_,Q]=D,B=O10(A,_,Q),{headers:E,fetch:z=jC.default,method:J="POST",requestMiddleware:X,responseMiddleware:G,...Y}=this.requestConfig,{url:$}=this;if(B.signal!==void 0)Y.signal=B.signal;let{query:K,operationName:F}=lq(B.document);return qE1({url:$,query:K,variables:B.variables,headers:{...BR(WE1(E)),...BR(B.requestHeaders)},operationName:F,fetch:z,method:J,fetchOptions:Y,middleware:X}).then((Z)=>{if(G)G(Z);return Z.data}).catch((Z)=>{if(G)G(Z);throw Z})}batchRequests(A,D){let _=L10(A,D),{headers:Q,...B}=this.requestConfig;if(_.signal!==void 0)B.signal=_.signal;let E=_.documents.map(({document:J})=>lq(J).query),z=_.documents.map(({variables:J})=>J);return qE1({url:this.url,query:E,variables:z,headers:{...BR(WE1(Q)),...BR(_.requestHeaders)},operationName:void 0,fetch:this.requestConfig.fetch??jC.default,method:this.requestConfig.method||"POST",fetchOptions:B,middleware:this.requestConfig.requestMiddleware}).then((J)=>{if(this.requestConfig.responseMiddleware)this.requestConfig.responseMiddleware(J);return J.data}).catch((J)=>{if(this.requestConfig.responseMiddleware)this.requestConfig.responseMiddleware(J);throw J})}setHeaders(A){return this.requestConfig.headers=A,this}setHeader(A,D){let{headers:_}=this.requestConfig;if(_)_[A]=D;else this.requestConfig.headers={[A]:D};return this}setEndpoint(A){return this.url=A,this}}var qE1=async(A)=>{let{query:D,variables:_,fetchOptions:Q}=A,B=qiA(W10(A.method??"post")),E=Array.isArray(A.query),z=await B(A),J=await MiA(z,Q.jsonSerializer??aa),X=Array.isArray(J)?!J.some(({data:Y})=>!Y):Boolean(J.data),G=Array.isArray(J)||!J.errors||Array.isArray(J.errors)&&!J.errors.length||Q.errorPolicy==="all"||Q.errorPolicy==="ignore";if(z.ok&&G&&X){let{errors:Y,...$}=Array.isArray(J)?J:J,K=Q.errorPolicy==="ignore"?$:J;return{...E?{data:K}:K,headers:z.headers,status:z.status}}else throw new Kz({...typeof J==="string"?{error:J}:J,status:z.status,headers:z.headers},{query:D,variables:_})};var WiA=(A,D,_,Q)=>{let B=Q??aa;if(!Array.isArray(A))return B.stringify({query:A,variables:D,operationName:_});if(typeof D!=="undefined"&&!Array.isArray(D))throw new Error("Cannot create request body with given variable type, array expected");let E=A.reduce((z,J,X)=>{return z.push({query:J,variables:D?D[X]:void 0}),z},[]);return B.stringify(E)},MiA=async(A,D)=>{let _;if(A.headers.forEach((Q,B)=>{if(B.toLowerCase()==="content-type")_=Q}),_&&(_.toLowerCase().startsWith("application/json")||_.toLowerCase().startsWith("application/graphql+json")||_.toLowerCase().startsWith("application/graphql-response+json")))return D.parse(await A.text());else return A.text()},WE1=(A)=>{return typeof A==="function"?A():A},fJ=(A,...D)=>{return A.reduce((_,Q,B)=>`${_}${Q}${B in D?String(D[B]):""}`,"")};var U50=async(A,D,_)=>{if(!D.ok){let Q=await D.text().catch(()=>{return});throw new q10(A,D,_,Q)}};function mQ(){return"8.28.1"}var w50=(A)=>{let D=A?`${A?.name}:${A?.version}`:"missing client info";return`gitlab-language-server:${mQ()} (${D})`};function C50(A){return A!==null&&A!==void 0}var OE1=(A,D)=>{return Object.entries(D).forEach(([_,Q])=>{if(C50(Q))A.searchParams.append(_,String(Q))}),A},en=(A)=>A.toString().replace(/\/?$/,"/"),ER=(A)=>A.replace(/^\.?\/?/,"./"),I50=(A)=>{if(A.startsWith("git@")){let D=A.match(/git@([^:]+):(.+)/);if(D){let[,_,Q]=D;return`https://${_}/${Q}`}}if(A.startsWith("git://"))return A.replace("git://","https://");if(A.startsWith("ssh://"))return A.replace("ssh://","https://").replace(/git@([^/]+)/,"$1");return A};var OiA=(A)=>A.split("/").pop()||"unknown resource";class NE1{#A;#D;#_;#Q;#B;constructor(A,D,_,Q,B){this.#A=A,this.#D=D,this.#_=new URL(en(Q)),this.#Q=B,this.#B=_}getDefaultHeaders(){return{Authorization:`Bearer ${this.#Q}`,"User-Agent":w50(this.#B),"X-Gitlab-Language-Server-Version":mQ()}}async fetchFromApiRaw(A){try{let D=`Unknown request method "${A.method}", request type "${A.type}"`;switch(A.method){case"GET":return await this.#z(A);case"POST":return await this.#J(A);case"PATCH":return await this.#X(A);case"PUT":return await this.#Y(A);case"HEAD":return await this.#G(A);default:throw new Error(D)}}catch(D){throw new ia(A,D)}}async fetchFromApi(A){if(A.type==="graphql")return this.#E(A);let D=await this.fetchFromApiRaw(A);return await U50(A,D,OiA(A.path)),D.json()}fetchOperation=(A)=>(D)=>this.fetchFromApi({...A,signal:D});async#E(A){let D=new URL("./api/graphql",this.#_),_=da(A.query);if(_)this.#A.debug(`[SimpleApiClient] Making GraphQL request: ${_}`);let Q=async(E,z)=>{let J=E instanceof URL?E.toString():E;return this.#D.post(J,{...z,headers:{...z?.headers},signal:A.signal})},B=new ME1(D.href,{fetch:Q,headers:{...this.getDefaultHeaders()}});try{return await B.request(A.query,A.variables)}catch(E){if(E instanceof Kz)throw new b_1(A,E.response);throw new ia(A,E)}}async#z(A){let D=ER(A.path),_=new URL(D,this.#_);return OE1(_,A.searchParams??{}),this.#D.get(_,{headers:{...this.getDefaultHeaders(),...A.headers},signal:A.signal})}async#J(A){let D=ER(A.path),_=new URL(D,this.#_);return this.#D.post(_,{headers:{"Content-Type":"application/json",...this.getDefaultHeaders(),...A.headers},body:JSON.stringify(A.body),signal:A.signal})}async#X(A){let D=ER(A.path),_=new URL(D,this.#_);return this.#D.patch(_,{headers:{"Content-Type":"application/json",...this.getDefaultHeaders(),...A.headers},body:JSON.stringify(A.body),signal:A.signal})}async#Y(A){let D=ER(A.path),_=new URL(D,this.#_);return this.#D.put(_,{headers:{"Content-Type":"application/json",...this.getDefaultHeaders(),...A.headers},body:JSON.stringify(A.body),signal:A.signal})}async#G(A){let D=ER(A.path),_=new URL(D,this.#_);return OE1(_,A.searchParams??{}),this.#D.head(_,{headers:{...this.getDefaultHeaders(),...A.headers},signal:A.signal})}}var Ao=C0(OA(),1);var LE1=Ao.createInterfaceId("ProjectService");class Bg{#A;#D;constructor(A,D){this.#A=D,this.#D=SA(A,"[ProjectService]")}async getProjectFromPathWithNamespace(A){return this.#D.debug(`Fetching details for project: ${A}`),this.#A.fetchFromApi({type:"rest",method:"GET",path:`/api/v4/projects/${encodeURIComponent(A)}`})}async getProjectIdsFromPaths(A){return(await this.#A.fetchFromApi({type:"graphql",query:fJ`
1166
1166
  query getProjectIds($fullPaths: [String!]!) {
1167
1167
  projects(fullPaths: $fullPaths) {
1168
1168
  nodes {
@@ -1449,7 +1449,7 @@ ${J}`}return this.#A.debug(E),{response:E,error:""}}async#z(A,D,_){try{let Q=awa
1449
1449
  ${z}`),{response:z,error:""}}catch(_){return this.#A.error("Git grep command execution error",_),{response:"",error:`${_ instanceof Error?_.message:_}`}}}#Q(A,D){let Q=[];for(let B of Object.values(D.results))for(let E of B){let z=`${ye0(A,E.path)}:${E.preview}`;if(z.length>5000)z=`${z.slice(0,5000)}... (trimmed)`;Q.push(z)}return Q.join(`
1450
1450
  `)+(Q.length>0?`
1451
1451
  `:"")}}GS=l0([g41.Injectable(m8,[ZA,W3,g41.collection(UE)])],GS);var je0=C0(OA(),1);import{promises as j84}from"node:fs";import{join as mN1,sep as b84}from"node:path";class YS{#A;#D;constructor(A,D){this.#A=SA(A,"[ListDirectoryActionHandler]"),this.#D=D}name="list_dir";canHandle(A){return Boolean(A.listDirectory)}async execute({listDirectory:A},{workspaceFolderPath:D}){let _=mN1(D,A.directory);this.#A.debug(`Listing contents in directory "${_}"`);let Q=await this.#D.getMatchingRepository(_,D);if(!Q){let B=`Directory is not in repository: "${_}"`;return this.#A.error(B),{error:B,response:""}}try{if((await Q.checkIgnore([_])).length>0){let G=`Directory is .gitignored: "${_}"`;return this.#A.error(G),{error:G,response:""}}let B=await j84.readdir(_,{withFileTypes:!0}),E=B.map((G)=>mN1(G.parentPath,G.name)),z=await Q.checkIgnore(E);return{response:B.filter((G)=>!z.includes(mN1(G.parentPath,G.name))).map((G)=>`${G.name}${G.isDirectory()?b84:""}`).join(`
1452
- `),error:""}}catch(B){let E=`Failed to read directory "${_}": ${B}`;return this.#A.error(E,B),{error:E,response:""}}}}YS=l0([je0.Injectable(m8,[ZA,W3])],YS);var f41=C0(OA(),1);import{mkdir as k84}from"node:fs/promises";import{join as x84}from"node:path";class FS{#A;#D;#_;constructor(A,D,_){this.#A=SA(A,"[MakeDirectoryActionHandler]"),this.#D=wE(this.#A,_),this.#_=D}name="mkdir";canHandle(A){return Boolean(A.mkdir)}async execute(A,{workspaceFolderPath:D,abortSignal:_}){let{directoryPath:Q}=A.mkdir,B=x84(D,Q);try{return await OX(Q,D,this.#D,this.#_,this.#A),this.#A.debug(`Creating directory "${Q}"`),_.throwIfAborted(),await k84(B,{recursive:!0}),{response:`Directory created successfully: "${Q}"`,error:""}}catch(E){let z=E instanceof Error?E.message:String(E);return this.#A.error(`Unable to create directory "${B}"`,E),{error:z,response:""}}}}FS=l0([f41.Injectable(m8,[ZA,W3,f41.collection(UE)])],FS);var u41=C0(OA(),1);import{join as g84}from"node:path";class $S{#A;#D;#_;constructor(A,D,_){this.#A=SA(A,"[ReadFileActionHandler]"),this.#D=D,this.#_=wE(this.#A,_)}name="read_file";canHandle(A){return Boolean(A.runReadFile)}async execute({runReadFile:A},{workspaceFolderPath:D,fileStateTracker:_}){let Q=A.filepath,B=g84(D,Q);this.#A.debug(`Reading file "${A.filepath}"`);try{await OX(Q,D,this.#_,this.#D,this.#A);let E=await this.#_.getText(B);return this.#Q(E,_,B,Q),{response:E,error:""}}catch(E){let z=E instanceof Error?E.message:String(E);return this.#A.error(`Error reading file "${B}"`,E),{response:"",error:`Error reading file: ${z}`}}}#Q(A,D,_,Q){try{D.recordFileRead(_,A)}catch(B){this.#A.warn(`Failed to update version cache after reading for "${Q}"`,B)}}}$S=l0([u41.Injectable(m8,[ZA,W3,u41.collection(UE)])],$S);var m41=C0(OA(),1);import{join as f84}from"node:path";class KS{#A;#D;#_;constructor(A,D,_){this.#A=SA(A,"[ReadFilesActionHandler]"),this.#D=D,this.#_=wE(this.#A,_)}name="read_files";canHandle(A){return Boolean(A.runReadFiles)}async execute({runReadFiles:A},{workspaceFolderPath:D}){let _=A.filepaths,Q={};return await Promise.allSettled(_.map(async(E)=>{let z=f84(D,E);try{await OX(E,D,this.#_,this.#D,this.#A);let J=await this.#_.getText(z);Q[E]={content:J},this.#A.debug(`Successfully read file "${E}"`)}catch(J){let X=J instanceof Error?J.message:String(J);Q[E]={error:`Error reading file: ${X}`},this.#A.error(`Error reading file "${z}"`,J)}})),{response:JSON.stringify(Q),error:""}}}KS=l0([m41.Injectable(m8,[ZA,W3,m41.collection(UE)])],KS);var h41=C0(OA(),1);var be0=C0(OA(),1),ke0=(A)=>{return Object.hasOwn(A,"error")},qp=be0.createInterfaceId("WorkflowCommandService");class ZS{#A;#D;constructor(A,D){this.#A=SA(A,"[RunCommandActionHandler]"),this.#D=wE(this.#A,D)}name="run_command";formatInput(A){let{program:D,args:_}=A;return{type:"text",value:_?`${D} ${_}`:D}}canHandle(A){return Boolean(A.runCommand)}async execute({runCommand:A},{workspaceFolderPath:D,workflowId:_,abortSignal:Q}){let{program:B,flags:E,arguments:z}=A;this.#A.debug(`Running command: "${B} ${[...E,...z].join(" ")}"`);let J=await this.#D.runCommand(_,D,B,!1,[...E,...z],Q);if(ke0(J))return{...J,response:""};if(J.exitCode===0)return this.#A.debug(`Command completed successfully with output: ${J.output}`),{response:J.output,error:""};let{output:X,exitCode:G}=J,Y=`Process exited with code ${G}. Output: ${X}`;return this.#A.error(Y),{error:Y,response:""}}}ZS=l0([h41.Injectable(m8,[ZA,h41.collection(qp)])],ZS);var c4A=C0(OA(),1);var v4A=C0(OA(),1);var y4A=C0(T4A(),1);import{spawn as qQ4}from"node:child_process";import{rm as WQ4,writeFile as MQ4}from"node:fs/promises";import{tmpdir as OQ4}from"node:os";import{join as NQ4}from"node:path";class mS{logger;#A;constructor(A,D){this.logger=A,this.#A=D}async buildGitArgs(A,D,_,Q){return[...await this.defaultGitArgs(_,Q),A,...D]}async defaultGitArgs(A,D){let _=[],Q="auth",E=this.#A.get("gitHttpUser")||"auth",z=!0,J="",X;try{X=this.extractBaseURL(A)}catch(Y){throw this.logger.error(`Failed to get baseURL for git repo from repositoryUrl "${A}"`,Y),Y}let G=X.replace(/^https?:\/\//,"");if(E)_.push("-c",`credential.${X}.username=${E}`);return _.push("-c",`safe.directory=${D}`),_.push("-c","user.email="),_.push("-c",`url.${X}/.insteadOf=git@${G}:`),_}extractBaseURL(A){try{let D=I50(A),_=new URL(D);if(_.protocol!=="http:"&&_.protocol!=="https:")throw new Error(`unsupported protocol: ${_.protocol}`);if(!_.origin)throw new Error(`invalid URL format: ${A}`);return _.origin}catch(D){throw new Error(`invalid URL: ${A}, ${D instanceof Error?D.message:"parsing failed"}`)}}async createGitAskPass(){let A=NQ4(OQ4(),`git-askpass-${BH()}`),D=`#!/bin/sh
1452
+ `),error:""}}catch(B){let E=`Failed to read directory "${_}": ${B}`;return this.#A.error(E,B),{error:E,response:""}}}}YS=l0([je0.Injectable(m8,[ZA,W3])],YS);var f41=C0(OA(),1);import{mkdir as k84}from"node:fs/promises";import{join as x84}from"node:path";class FS{#A;#D;#_;constructor(A,D,_){this.#A=SA(A,"[MakeDirectoryActionHandler]"),this.#D=wE(this.#A,_),this.#_=D}name="mkdir";canHandle(A){return Boolean(A.mkdir)}async execute(A,{workspaceFolderPath:D,abortSignal:_}){let{directoryPath:Q}=A.mkdir,B=x84(D,Q);try{return await OX(Q,D,this.#D,this.#_,this.#A),this.#A.debug(`Creating directory "${Q}"`),_.throwIfAborted(),await k84(B,{recursive:!0}),{response:`Directory created successfully: "${Q}"`,error:""}}catch(E){let z=E instanceof Error?E.message:String(E);return this.#A.error(`Unable to create directory "${B}"`,E),{error:z,response:""}}}}FS=l0([f41.Injectable(m8,[ZA,W3,f41.collection(UE)])],FS);var u41=C0(OA(),1);import{join as g84}from"node:path";class $S{#A;#D;#_;constructor(A,D,_){this.#A=SA(A,"[ReadFileActionHandler]"),this.#D=D,this.#_=wE(this.#A,_)}name="read_file";canHandle(A){return Boolean(A.runReadFile)}async execute({runReadFile:A},{workspaceFolderPath:D,fileStateTracker:_}){let Q=A.filepath,B=g84(D,Q);this.#A.debug(`Reading file "${A.filepath}"`);try{await OX(Q,D,this.#_,this.#D,this.#A);let E=await this.#_.getText(B);return this.#Q(E,_,B,Q),{response:E,error:""}}catch(E){let z=E instanceof Error?E.message:String(E);return this.#A.error(`Error reading file "${B}"`,E),{response:"",error:`Error reading file: ${z}`}}}#Q(A,D,_,Q){try{D.recordFileRead(_,A)}catch(B){this.#A.warn(`Failed to update version cache after reading for "${Q}"`,B)}}}$S=l0([u41.Injectable(m8,[ZA,W3,u41.collection(UE)])],$S);var m41=C0(OA(),1);import{join as f84}from"node:path";class KS{#A;#D;#_;constructor(A,D,_){this.#A=SA(A,"[ReadFilesActionHandler]"),this.#D=D,this.#_=wE(this.#A,_)}name="read_files";canHandle(A){return Boolean(A.runReadFiles)}async execute({runReadFiles:A},{workspaceFolderPath:D}){let _=A.filepaths,Q={};return await Promise.allSettled(_.map(async(E)=>{let z=f84(D,E);try{await OX(E,D,this.#_,this.#D,this.#A);let J=await this.#_.getText(z);Q[E]={content:J},this.#A.debug(`Successfully read file "${E}"`)}catch(J){let X=J instanceof Error?J.message:String(J);Q[E]={error:`Error reading file: ${X}`},this.#A.error(`Error reading file "${z}"`,J)}})),{response:JSON.stringify(Q),error:""}}}KS=l0([m41.Injectable(m8,[ZA,W3,m41.collection(UE)])],KS);var h41=C0(OA(),1);var be0=C0(OA(),1),ke0=(A)=>{return Object.hasOwn(A,"error")},qp=be0.createInterfaceId("WorkflowCommandService");class ZS{#A;#D;constructor(A,D){this.#A=SA(A,"[RunCommandActionHandler]"),this.#D=wE(this.#A,D)}name="run_command";formatInput(A){let{program:D,args:_}=A;return{type:"text",value:_?`${D} ${_}`:D}}canHandle(A){return Boolean(A.runCommand)}async execute({runCommand:A},{workspaceFolderPath:D,workflowId:_,abortSignal:Q}){let{program:B,flags:E,arguments:z}=A;this.#A.debug(`Running command: "${B} ${[...E,...z].join(" ")}"`);let J=await this.#D.runCommand(_,D,B,!1,[...E,...z],Q);if(ke0(J))return{...J,response:""};if(J.exitCode===0)return this.#A.debug(`Command completed successfully with output: ${J.output}`),{response:J.output,error:""};let{output:X,exitCode:G}=J,Y=`Process exited with code ${G}. Output: ${X}`;return this.#A.error(Y),{error:Y,response:""}}}ZS=l0([h41.Injectable(m8,[ZA,h41.collection(qp)])],ZS);var c4A=C0(OA(),1);var v4A=C0(OA(),1);var y4A=C0(T4A(),1);import{spawn as qQ4}from"node:child_process";import{rm as WQ4,writeFile as MQ4}from"node:fs/promises";import{tmpdir as OQ4}from"node:os";import{join as NQ4}from"node:path";class mS{logger;#A;constructor(A,D){this.logger=A,this.#A=D}async buildGitArgs(A,D,_,Q){return[...await this.defaultGitArgs(_,Q),A,...D]}async defaultGitArgs(A,D){let _=[],Q="auth",E=this.#A.get("gitHttpUser")||"auth",z=!0,J="",X;try{X=this.extractBaseURL(A)}catch(G){throw this.logger.error(`Failed to get baseURL for git repo from repositoryUrl "${A}"`,G),G}if(X.length){if(E)_.push("-c",`credential.${X}.username=${E}`);let G=X.replace(/^https?:\/\//,"");_.push("-c",`url.${X}/.insteadOf=git@${G}:`)}return _.push("-c",`safe.directory=${D}`),_.push("-c","user.email="),_}extractBaseURL(A){if(A==="")return"";try{let D=I50(A),_=new URL(D);if(_.protocol!=="http:"&&_.protocol!=="https:")throw new Error(`unsupported protocol: ${_.protocol}`);if(!_.origin)throw new Error(`invalid URL format: ${A}`);return _.origin}catch(D){throw new Error(`invalid URL: ${A}, ${D instanceof Error?D.message:"parsing failed"}`)}}async createGitAskPass(){let A=NQ4(OQ4(),`git-askpass-${BH()}`),D=`#!/bin/sh
1453
1453
  echo $GIT_PASSWORD`;return await MQ4(A,`#!/bin/sh
1454
1454
  echo $GIT_PASSWORD`,{mode:448}),A}async removeGitAskPass(A){if(!A)return;try{await WQ4(A,{force:!0})}catch(D){this.logger.warn(`Failed to clean up temporary git askpass file: "${A}"`,D)}}runGitCommand(A,D,_,Q,B){return this.logger.debug(`Running git command with the following argument: ${JSON.stringify(A)}`),new Promise((E,z)=>{let J=qQ4("git",A,{shell:!1,cwd:_,env:{PATH:process.env.PATH,HOME:process.env.HOME||process.env.USERPROFILE,GIT_EXEC_PATH:process.env.GIT_EXEC_PATH,GIT_PASSWORD:this.#A.get("gitHttpPassword")||Q,GIT_ASKPASS:D,GIT_CONFIG_NOSYSTEM:"1",GIT_CONFIG_NOGLOBAL:"1",GIT_CONFIG_GLOBAL:"/dev/null"},signal:B}),X="";J.stdout.on("data",(G)=>{X+=G}),J.stderr.on("data",(G)=>{X+=G}),J.on("error",(G)=>{this.logger.debug("Git command error spawning process",{error:G.message}),z(G)}),J.on("close",(G)=>{if(G!==0)this.logger.debug(`Git command failed with exit code ${G}`,{error:X}),z(new Error(`git command failed with exit code ${G}: ${X}`));else E(X)})})}}class W21 extends mS{#A;constructor(A,D,_){super(SA(A,"[NodeGitLsFiles]"),D);this.#A=_}async execute(A,D="",_=""){let Q="";try{return await y4A.listFiles({dir:A,fs:this.#A})}catch(B){if(aV0(B))this.logger.debug(`Repository "${A}" has an unsupported dircache version configured. "isomorphic-git" cannot work with anything other than dircache "2". Falling back to direct system git call`)}try{let E=[],z=await this.buildGitArgs("ls-files",E,D,A);Q=await this.createGitAskPass();let J=await this.runGitCommand(z,Q,A,_);return this.logger.debug("Command executed successfully"),J.split(`
1455
1455
  `).filter((X)=>X.trim()!=="")}catch(B){throw this.logger.error("Command execution error",B),B}finally{await this.removeGitAskPass(Q)}}}W21=l0([v4A.Injectable(iV0,[ZA,E_,Oe0])],W21);var bQ4=j4A(),XP1=m4A();var kQ4=1000,h4A=process.platform==="win32"?30000:1e6;function xQ4(A){return XP1(A).map((_)=>{if(typeof _==="string")return _;if(typeof _==="object"&&_!==null){if("pattern"in _)return _.pattern;if("op"in _)return _.op}return String(_)})}function gQ4(A){return A.length<=kQ4}function fQ4(A,D){let _=Buffer.from(A).length,Q=Buffer.from(D).length;return _+Q<h4A}function p4A(A,D=""){if(!fQ4(A,D))return{isValid:!1,error:`Command is too long: bytes exceed ${h4A} byte limit on ${process.platform}`};let _;try{_=xQ4(D)}catch(Q){return{isValid:!1,error:Q instanceof Error?Q.message:"Failed to parse arguments"}}for(let Q of _)if(!gQ4(Q))return{isValid:!1,error:`Argument too long: ${Q.substring(0,50)}...`};return{isValid:!0,args:_}}class hS extends mS{constructor(A,D){super(SA(A,"[RunGitCommandActionHandler]"),D)}name="run_git_command";canHandle(A){return Boolean(A.runGitCommand)}async execute({runGitCommand:A},{workspaceFolderPath:D,workflowToken:_,abortSignal:Q}){try{let B=p4A(A.command,A.arguments);if(!B.isValid)throw new Error(B.error);let E=await this.buildGitArgs(A.command,B.args??[],A.repositoryUrl,D),z=await this.createGitAskPass();try{let J=await this.runGitCommand(E,z,D,_.gitlab_rails.token,Q);return this.logger.debug(`Ran git command with result: ${J.substring(0,200)}${J.length>200?"...":""}`),{response:J,error:""}}finally{await this.removeGitAskPass(z)}}catch(B){return this.logger.error("Git command execution error",B),{response:"",error:`${B instanceof Error?B.message:B}`}}}}hS=l0([c4A.Injectable(m8,[ZA,E_])],hS);var cS=C0(OA(),1);class pS{#A;#D;constructor(A,D){this.#A=SA(A,"[RunMcpToolActionHandler]"),this.#D=D}name="run_mcp_tool";canHandle(A){return Boolean(A.runMCPTool)}async execute({runMCPTool:A},{abortSignal:D}){try{let{name:_,args:Q}=A;return this.#A.debug(`Running MCP tool: "${_}" with args: "${Q}"`),D.throwIfAborted(),{response:await this.#D.execute(_,Q),error:""}}catch(_){return{error:`${_ instanceof Error?_.message:_}`,response:""}}}}pS=l0([cS.Service({dependencies:[ZA,ZX],lifetime:cS.ServiceLifetime.Singleton}),cS.Implements(m8)],pS);var O21=C0(OA(),1);import{join as uQ4}from"node:path";class dS{#A;#D;#_;constructor(A,D,_){this.#A=SA(A,"[WriteFileActionHandler]"),this.#D=D,this.#_=wE(this.#A,_)}name="create_file_with_contents";formatInput(A){let{file_path:D,contents:_}=A;return{type:"file",filepath:D,content:_}}canHandle(A){return Boolean(A.runWriteFile)}async execute({runWriteFile:A},{workspaceFolderPath:D,fileStateTracker:_,abortSignal:Q}){let B=A.filepath,E=uQ4(D,B);try{let z=await this.#_.getText(E);_.assertFileNotModifiedSinceLastRead(E,z)}catch(z){if(z instanceof Hy||z instanceof Vy)return this.#A.debug(`Can't write file: "${z.message}"`),{error:z.message,response:""};if(z instanceof Vp);else this.#A.error(`Failed to verify if Duo has already read file before writing for: "${B}"`,z)}try{return await OX(B,D,this.#_,this.#D,this.#A),this.#A.debug(`Writing file "${B}"`),Q.throwIfAborted(),await this.#_.writeFile(E,A.contents),await this.#Q(_,E,B),{response:"File written successfully",error:""}}catch(z){let J=z instanceof Error?z.message:String(z);return this.#A.error(`Error writing file "${E}"`,z),{error:J,response:""}}}async#Q(A,D,_){try{let Q=await this.#_.getText(D);A.recordFileRead(D,Q)}catch(Q){this.#A.warn(`Failed to update version cache after edit for "${_}"`,Q)}}}dS=l0([O21.Injectable(m8,[ZA,W3,O21.collection(UE)])],dS);import{fileURLToPath as mQ4}from"url";var d4A=C0(OA(),1);class lS{#A;#D;#_;#Q;#B;#E;#z;#J;#X;#Y="grpc";constructor(A,D,_,Q,B){this.#Q=A.get("telemetry.enabled")??!0,this.#z=D,this.#E=SA(D,"[Duo Workflow Runner]"),this.#J=_,this.#X=Q,this.#B=B;let E=A.get();this.#G(E),A.onConfigChange((z)=>this.#G(z))}#G(A){this.#A=A.workspaceFolders||[],this.#D=A.projectPath||void 0,this.#_=this.#D?void 0:A.duo?.agentPlatform?.defaultNamespace;let D=A.telemetry?.enabled;if(typeof D!=="undefined"&&this.#Q!==D)this.#Q=D;this.#Y=this.#F(A)}#F(A){let _=A.duo?.agentPlatform?.connectionType?.toLowerCase();if(_&&UY1.includes(_))return _;return"grpc"}getProjectPath(){return this.#D||""}getNamespacePath(){return this.#_||""}async preCreateWorkflow(A,D,_,Q){if(!this.#A||this.#A.length===0)throw new Error("No workspace folders");this.#z.debug("Optimistically pre-creating workflow...");let B=await this.#K(A,D,_,Q);return this.#z.debug(`Workflow "${B}" + auth token pre-created, ready for the user to submit their prompt.`),B}async createWorkflow(A,D,_,Q){return this.#J.createWorkflow(A,{project_id:this.#D,namespace_id:this.#_},D,_?Eg(_):void 0,Q)}async*runWorkflow(A){if(!this.#A||this.#A.length===0)throw new Error("No workspace folders");let D=mQ4(this.#A[0].uri);if(this.#A.length>0)this.#E.info(`More than one workspace folder detected. Using workspace folder ${D}`);let{goal:_,existingWorkflowId:Q,preCreatedWorkflowId:B,type:E="software_development",aiCatalogItemVersionId:z}=A,J=Q||B;if(!J)J=await this.#K(_,E,z,void 0);let X=this.#B.getExecutorForWorkflow(J),G={...A,workspaceFolderPath:D,workflowId:J,connectionType:this.#Y};try{this.#B.clearExecutorDisposal(J),yield*X.runWorkflow(G)}finally{this.#B.setupExecutorDisposal(J)}}stopWorkflow(A){let D=this.#B.getExecutorForWorkflow(A);if(D)D.stopWorkflow()}async getGraphqlData(A){return this.#J.getGraphqlData(A)}async updateStatus(A){return this.#J.updateStatus(A)}async sendEvent(A,D,_){return this.#J.sendEvent(A,D,_)}async#K(A,D,_,Q){let B=this.#X.getTokenFromCache({workflowType:D}),E=[this.#J.createWorkflow(A,{project_id:this.#D,namespace_id:this.#_},D,_?Eg(_):void 0,Q)];if(!B)E.push(this.#J.getWorkflowToken(D));let[z,J]=await Promise.all(E);if(J)this.#X.cacheToken(z,D,J);return z}}lS=l0([d4A.Injectable(uT,[E_,ZA,fI,Cy,Up])],lS);var l4A=C0(OA(),1);import{spawn as hQ4}from"node:child_process";class iS{#A;constructor(A){this.#A=SA(A,"[RunCommandAsProcess]")}priority=1;async runCommand(A,D,_,Q,B,E=new AbortController().signal){return this.#A.debug(`Running command: ${_} ${B.join(" ")} in ${D} for workflowId: ${A}`),new Promise((z)=>{let J=hQ4(_,B,{cwd:D,signal:E}),X="";J.stdout.on("data",(G)=>{X+=G}),J.stderr.on("data",(G)=>{X+=G}),J.on("error",(G)=>{this.#A.error(`Command execution error: ${G.message}`),z({error:G.message})}),J.on("close",(G)=>{this.#A.debug(`Command exited with code ${G}. Output: ${X}`),z({output:X,exitCode:G})}),E.addEventListener("abort",()=>{if(ST(E.reason))this.#A.info("Command aborted due to signal"),z({error:"Operation was aborted because the workflow was cancelled or stopped"})})})}}iS=l0([l4A.Injectable(qp,[ZA])],iS);var i4A=C0(OA(),1);class Jc{#A;#D;#_;#Q=new zg;constructor(A,D,_){this.#A=A,this.#D=D,this.#_=SA(_,"[DuoWorkflowInstanceTracker]")}trackEvent(A,D){if(!this.isEnabled())return;this.#B(A,D).catch((_)=>this.#_.error("Could not track duo workflow telemetry event",_))}async#B(A,D){try{this.#_.debug(`Tracking workflow event: ${A} for workflow ${D.workflow_id}`),await this.#A.fetchFromApi({type:"rest",method:"POST",path:"/api/v4/usage_data/track_event",body:{event:A,additional_properties:{...D},send_to_snowplow:!0}}),this.#Q.success()}catch(_){this.#_.error(`Telemetry request for "${A}" failed`,_),this.#Q.error()}}isEnabled(){if(this.#Q.isOpen())return!1;let A=this.#D.get("telemetry.enabled");return Boolean(A)}}Jc=l0([i4A.Injectable(mT,[f8,E_,ZA])],Jc);var a4A=C0(OA(),1);class Xc{#A;constructor(A){this.#A=SA(A,"[OSContextProvider]")}async getItems(){try{let A=this.#_();if(!A)return this.#A.info("No OS information detected"),[];return[{category:"agent_user_environment",content:JSON.stringify(A),id:"agent_user_environment_os_info",metadata:{title:"Operating System",enabled:!0,subType:"os",icon:"monitor",secondaryText:this.#D(A),subTypeLabel:"System Information"}}]}catch(A){return this.#A.warn("Could not detect OS information",A),[]}}#D(A){let D=[];return D.push(`Platform: ${this.#Q(A.platform)}`),D.push(`Architecture: ${A.architecture}`),D.join(" • ")}#_(){try{let{platform:A,arch:D}=process;if(!A||!D)return this.#A.debug("Platform or architecture not available"),null;return{platform:A,architecture:D}}catch(A){return this.#A.warn("Error detecting OS information",A),null}}#Q(A){return{win32:"Windows",darwin:"macOS",linux:"Linux",freebsd:"FreeBSD",openbsd:"OpenBSD",netbsd:"NetBSD",aix:"AIX",sunos:"SunOS",android:"Android"}[A]||A}}Xc=l0([a4A.Injectable(JO,[ZA])],Xc);var u9A=C0(GG(),1);import{promises as mJ4}from"node:fs";import r21 from"node:path";var m21=C0(o4A(),1),g21=C0(E2A(),1),K9A=C0(KP1(),1),sS=C0(KP1(),1);import{Buffer as bB4}from"node:buffer";import{spawn as UE4}from"child_process";import{EventEmitter as yJ4}from"node:events";var{defineProperty:jP1,getOwnPropertyDescriptor:vB4,getOwnPropertyNames:bP1}=Object,yB4=Object.prototype.hasOwnProperty,K6=(A,D)=>function _(){return A&&(D=(0,A[bP1(A)[0]])(A=0)),D},SB4=(A,D)=>function _(){return D||(0,A[bP1(A)[0]])((D={exports:{}}).exports,D),D.exports},r3=(A,D)=>{for(var _ in D)jP1(A,_,{get:D[_],enumerable:!0})},jB4=(A,D,_,Q)=>{if(D&&typeof D==="object"||typeof D==="function"){for(let B of bP1(D))if(!yB4.call(A,B)&&B!==_)jP1(A,B,{get:()=>D[B],enumerable:!(Q=vB4(D,B))||Q.enumerable})}return A},L3=(A)=>jB4(jP1({},"__esModule",{value:!0}),A);function kP1(...A){let D=new String(A);return u21.set(D,A),D}function b21(A){return A instanceof String&&u21.has(A)}function X2A(A){return u21.get(A)||[]}var u21,Kc=K6({"src/lib/args/pathspec.ts"(){u21=new WeakMap}}),KU,qH=K6({"src/lib/errors/git-error.ts"(){KU=class extends Error{constructor(A,D){super(D);this.task=A,Object.setPrototypeOf(this,new.target.prototype)}}}}),Zc,eS=K6({"src/lib/errors/git-response-error.ts"(){qH(),Zc=class extends KU{constructor(A,D){super(void 0,D||String(A));this.git=A}}}}),u2A,m2A=K6({"src/lib/errors/task-configuration-error.ts"(){qH(),u2A=class extends KU{constructor(A){super(void 0,A)}}}});function h2A(A){if(typeof A!=="function")return vO;return A}function p2A(A){return typeof A==="function"&&A!==vO}function c2A(A,D){let _=A.indexOf(D);if(_<=0)return[A,""];return[A.substr(0,_),A.substr(_+1)]}function d2A(A,D=0){return l2A(A)&&A.length>D?A[D]:void 0}function TO(A,D=0){if(l2A(A)&&A.length>D)return A[A.length-1-D]}function l2A(A){return!!(A&&typeof A.length==="number")}function Uc(A="",D=!0,_=`
@@ -1458,7 +1458,7 @@ echo $GIT_PASSWORD`,{mode:448}),A}async removeGitAskPass(A){if(!A)return;try{awa
1458
1458
  `);J=X[0],z=X[1]}yield{file:E,key:J,value:z}}}var I8A,DE4=K6({"src/lib/responses/ConfigList.ts"(){L4(),I8A=class{constructor(){this.files=[],this.values=Object.create(null)}get all(){if(!this._all)this._all=this.files.reduce((A,D)=>{return Object.assign(A,this.values[D])},{});return this._all}addFile(A){if(!(A in this.values)){let D=TO(this.files);this.values[A]=D?Object.create(this.values[D]):{},this.files.push(A)}return this.values[A]}addValue(A,D,_){let Q=this.addFile(A);if(!Q.hasOwnProperty(D))Q[D]=_;else if(Array.isArray(Q[D]))Q[D].push(_);else Q[D]=[Q[D],_];this._all=void 0}}}});function ZP1(A,D){if(typeof A==="string"&&PP1.hasOwnProperty(A))return A;return D}function _E4(A,D,_,Q){let B=["config",`--${Q}`];if(_)B.push("--add");return B.push(A,D),{commands:B,format:"utf-8",parser(E){return E}}}function QE4(A,D){let _=["config","--null","--show-origin","--get-all",A];if(D)_.splice(1,0,`--${D}`);return{commands:_,format:"utf-8",parser(Q){return eB4(Q,A)}}}function BE4(A){let D=["config","--list","--show-origin","--null"];if(A)D.push(`--${A}`);return{commands:D,format:"utf-8",parser(_){return tB4(_)}}}function EE4(){return{addConfig(A,D,..._){return this._runTask(_E4(A,D,_[0]===!0,ZP1(_[1],"local")),P3(arguments))},getConfig(A,D){return this._runTask(QE4(A,ZP1(D,void 0)),P3(arguments))},listConfig(...A){return this._runTask(BE4(ZP1(A[0],void 0)),P3(arguments))}}}var PP1,H8A=K6({"src/lib/tasks/config.ts"(){DE4(),L4(),PP1=((A)=>{return A.system="system",A.global="global",A.local="local",A.worktree="worktree",A})(PP1||{})}});function zE4(A){return V8A.has(A)}var UP1,V8A,q8A=K6({"src/lib/tasks/diff-name-status.ts"(){UP1=((A)=>{return A.ADDED="A",A.COPIED="C",A.DELETED="D",A.MODIFIED="M",A.RENAMED="R",A.CHANGED="T",A.UNMERGED="U",A.UNKNOWN="X",A.BROKEN="B",A})(UP1||{}),V8A=new Set(Object.values(UP1))}});function JE4(...A){return new M8A().param(...A)}function XE4(A){let D=new Set,_={};return xP1(A,(Q)=>{let[B,E,z]=Q.split(tS);D.add(B),(_[B]=_[B]||[]).push({line:h9(E),path:B,preview:z})}),{paths:D,results:_}}function GE4(){return{grep(A){let D=P3(arguments),_=qE(arguments);for(let B of W8A)if(_.includes(B))return this._runTask(WE(`git.grep: use of "${B}" is not supported.`),D);if(typeof A==="string")A=JE4().param(A);let Q=["grep","--null","-n","--full-name",..._,...A];return this._runTask({commands:Q,format:"utf-8",parser(B){return XE4(B)}},D)}}}var W8A,Yc,G2A,M8A,O8A=K6({"src/lib/tasks/grep.ts"(){L4(),o3(),W8A=["-h"],Yc=Symbol("grepQuery"),M8A=class{constructor(){this[G2A]=[]}*[(G2A=Yc,Symbol.iterator)](){for(let A of this[Yc])yield A}and(...A){return A.length&&this[Yc].push("--and","(",...Fc(A,"-e"),")"),this}param(...A){return this[Yc].push(...Fc(A,"-e")),this}}}}),N8A={};r3(N8A,{ResetMode:()=>y21,getResetMode:()=>FE4,resetTask:()=>YE4});function YE4(A,D){let _=["reset"];if(L8A(A))_.push(`--${A}`);return _.push(...D),JB(_)}function FE4(A){if(L8A(A))return A;switch(typeof A){case"string":case"undefined":return"soft"}return}function L8A(A){return P8A.includes(A)}var y21,P8A,R8A=K6({"src/lib/tasks/reset.ts"(){o3(),y21=((A)=>{return A.MIXED="mixed",A.SOFT="soft",A.HARD="hard",A.MERGE="merge",A.KEEP="keep",A})(y21||{}),P8A=Array.from(Object.values(y21))}});function $E4(){return g21.default("simple-git")}function Y2A(A,D,_){if(!D||!String(D).replace(/\s*/,""))return!_?A:(Q,...B)=>{A(Q,...B),_(Q,...B)};return(Q,...B)=>{if(A(`%s ${Q}`,D,...B),_)_(Q,...B)}}function KE4(A,D,{namespace:_}){if(typeof A==="string")return A;let Q=D&&D.namespace||"";if(Q.startsWith(_))return Q.substr(_.length+1);return Q||_}function iP1(A,D,_,Q=$E4()){let B=A&&`[${A}]`||"",E=[],z=typeof D==="string"?Q.extend(D):D,J=KE4(o$(D,JQ),z,Q);return G(_);function X(Y,$){return I8(E,iP1(A,J.replace(/^[^:]+/,Y),$,Q))}function G(Y){let $=Y&&`[${Y}]`||"",K=z&&Y2A(z,$)||vO,F=Y2A(Q,`${B} ${$}`,K);return Object.assign(z?K:F,{label:A,sibling:X,info:F,step:G})}}var T8A=K6({"src/lib/git-logger.ts"(){L4(),g21.default.formatters.L=(A)=>String(fP1(A)?A.length:"-"),g21.default.formatters.B=(A)=>{if(Buffer.isBuffer(A))return A.toString("utf8");return wc(A)}}}),v8A,ZE4=K6({"src/lib/runners/tasks-pending-queue.ts"(){qH(),T8A(),v8A=class A{constructor(D="GitExecutor"){this.logLabel=D,this._queue=new Map}withProgress(D){return this._queue.get(D)}createProgress(D){let _=A.getName(D.commands[0]),Q=iP1(this.logLabel,_);return{task:D,logger:Q,name:_}}push(D){let _=this.createProgress(D);return _.logger("Adding task to the queue, commands = %o",D.commands),this._queue.set(D,_),_}fatal(D){for(let[_,{logger:Q}]of Array.from(this._queue.entries())){if(_===D.task)Q.info("Failed %o",D),Q("Fatal exception, any as-yet un-started tasks run through this executor will not be attempted");else Q.info("A fatal exception occurred in a previous task, the queue has been purged: %o",D.message);this.complete(_)}if(this._queue.size!==0)throw new Error(`Queue size should be zero after fatal: ${this._queue.size}`)}complete(D){if(this.withProgress(D))this._queue.delete(D)}attempt(D){let _=this.withProgress(D);if(!_)throw new KU(void 0,"TasksPendingQueue: attempt called for an unknown task");return _.logger("Starting task"),_}static getName(D="empty"){return`task:${D}:${++A.counter}`}static{this.counter=0}}}});function RO(A,D){return{method:d2A(A.commands)||"",commands:D}}function wE4(A,D){return(_)=>{D("[ERROR] child process exception %o",_),A.push(Buffer.from(String(_.stack),"ascii"))}}function F2A(A,D,_,Q){return(B)=>{_("%s received %L bytes",D,B),Q("%B",B),A.push(B)}}var RP1,CE4=K6({"src/lib/runners/git-executor-chain.ts"(){qH(),o3(),L4(),ZE4(),RP1=class{constructor(A,D,_){this._executor=A,this._scheduler=D,this._plugins=_,this._chain=Promise.resolve(),this._queue=new v8A}get cwd(){return this._cwd||this._executor.cwd}set cwd(A){this._cwd=A}get env(){return this._executor.env}get outputHandler(){return this._executor.outputHandler}chain(){return this}push(A){return this._queue.push(A),this._chain=this._chain.then(()=>this.attemptTask(A))}async attemptTask(A){let D=await this._scheduler.next(),_=()=>this._queue.complete(A);try{let{logger:Q}=this._queue.attempt(A);return await(K8A(A)?this.attemptEmptyTask(A,Q):this.attemptRemoteTask(A,Q))}catch(Q){throw this.onFatalException(A,Q)}finally{_(),D()}}onFatalException(A,D){let _=D instanceof KU?Object.assign(D,{task:A}):new KU(A,D&&String(D));return this._chain=Promise.resolve(),this._queue.fatal(_),_}async attemptRemoteTask(A,D){let _=this._plugins.exec("spawn.binary","",RO(A,A.commands)),Q=this._plugins.exec("spawn.args",[...A.commands],RO(A,A.commands)),B=await this.gitResponse(A,_,Q,this.outputHandler,D.step("SPAWN")),E=await this.handleTaskData(A,Q,B,D.step("HANDLE"));if(D("passing response to task's parser as a %s",A.format),$8A(A))return OP1(A.parser,E);return OP1(A.parser,E.asStrings())}async attemptEmptyTask(A,D){return D("empty task bypassing child process to call to task's parser"),A.parser(this)}handleTaskData(A,D,_,Q){let{exitCode:B,rejection:E,stdOut:z,stdErr:J}=_;return new Promise((X,G)=>{Q("Preparing to handle process response exitCode=%d stdOut=",B);let{error:Y}=this._plugins.exec("task.error",{error:E},{...RO(A,D),..._});if(Y&&A.onError)return Q.info("exitCode=%s handling with custom error handler"),A.onError(_,Y,($)=>{Q.info("custom error handler treated as success"),Q("custom error returned a %s",wc($)),X(new x21(Array.isArray($)?Buffer.concat($):$,Buffer.concat(J)))},G);if(Y)return Q.info("handling as error: exitCode=%s stdErr=%s rejection=%o",B,J.length,E),G(Y);Q.info("retrieving task output complete"),X(new x21(Buffer.concat(z),Buffer.concat(J)))})}async gitResponse(A,D,_,Q,B){let E=B.sibling("output"),z=this._plugins.exec("spawn.options",{cwd:this.cwd,env:this.env,windowsHide:!0},RO(A,A.commands));return new Promise((J)=>{let X=[],G=[];B.info("%s %o",D,_),B("%O",z);let Y=this._beforeSpawn(A,_);if(Y)return J({stdOut:X,stdErr:G,exitCode:9901,rejection:Y});this._plugins.exec("spawn.before",void 0,{...RO(A,_),kill(K){Y=K||Y}});let $=UE4(D,_,z);if($.stdout.on("data",F2A(X,"stdOut",B,E.step("stdOut"))),$.stderr.on("data",F2A(G,"stdErr",B,E.step("stdErr"))),$.on("error",wE4(G,B)),Q)B("Passing child process stdOut/stdErr to custom outputHandler"),Q(D,$.stdout,$.stderr,[..._]);this._plugins.exec("spawn.after",void 0,{...RO(A,_),spawned:$,close(K,F){J({stdOut:X,stdErr:G,exitCode:K,rejection:Y||F})},kill(K){if($.killed)return;Y=K,$.kill("SIGINT")}})})}_beforeSpawn(A,D){let _;return this._plugins.exec("spawn.before",void 0,{...RO(A,D),kill(Q){_=Q||_}}),_}}}}),y8A={};r3(y8A,{GitExecutor:()=>S8A});var S8A,IE4=K6({"src/lib/runners/git-executor.ts"(){CE4(),S8A=class{constructor(A,D,_){this.cwd=A,this._scheduler=D,this._plugins=_,this._chain=new RP1(this,this._scheduler,this._plugins)}chain(){return new RP1(this,this._scheduler,this._plugins)}push(A){return this._chain.push(A)}}}});function HE4(A,D,_=vO){let Q=(E)=>{_(null,E)},B=(E)=>{if(E?.task===A)_(E instanceof Zc?VE4(E):E,void 0)};D.then(Q,B)}function VE4(A){let D=(Q)=>{console.warn(`simple-git deprecation notice: accessing GitResponseError.${Q} should be GitResponseError.git.${Q}, this will no longer be available in version 3`),D=vO};return Object.create(A,Object.getOwnPropertyNames(A.git).reduce(_,{}));function _(Q,B){if(B in A)return Q;return Q[B]={enumerable:!1,configurable:!1,get(){return D(B),A.git[B]}},Q}}var qE4=K6({"src/lib/task-callback.ts"(){eS(),L4()}});function $2A(A,D){return Y8A((_)=>{if(!gP1(A))throw new Error(`Git.cwd: cannot change to non-directory "${A}"`);return(D||_).cwd=A})}var WE4=K6({"src/lib/tasks/change-working-directory.ts"(){L4(),o3()}});function wP1(A){let D=["checkout",...A];if(D[1]==="-b"&&D.includes("-B"))D[1]=h21(D,"-B");return JB(D)}function ME4(){return{checkout(){return this._runTask(wP1(qE(arguments,1)),P3(arguments))},checkoutBranch(A,D){return this._runTask(wP1(["-b",A,D,...qE(arguments)]),P3(arguments))},checkoutLocalBranch(A){return this._runTask(wP1(["-b",A,...qE(arguments)]),P3(arguments))}}}var OE4=K6({"src/lib/tasks/checkout.ts"(){L4(),o3()}});function NE4(){return{count:0,garbage:0,inPack:0,packs:0,prunePackable:0,size:0,sizeGarbage:0,sizePack:0}}function LE4(){return{countObjects(){return this._runTask({commands:["count-objects","--verbose"],format:"utf-8",parser(A){return ME(NE4(),[j8A],A)}})}}}var j8A,PE4=K6({"src/lib/tasks/count-objects.ts"(){L4(),j8A=new d4(/([a-z-]+): (\d+)$/,(A,[D,_])=>{let Q=a2A(D);if(A.hasOwnProperty(Q))A[Q]=h9(_)})}});function RE4(A){return ME({author:null,branch:"",commit:"",root:!1,summary:{changes:0,insertions:0,deletions:0}},b8A,A)}var b8A,TE4=K6({"src/lib/parsers/parse-commit.ts"(){L4(),b8A=[new d4(/^\[([^\s]+)( \([^)]+\))? ([^\]]+)/,(A,[D,_,Q])=>{A.branch=D,A.commit=Q,A.root=!!_}),new d4(/\s*Author:\s(.+)/i,(A,[D])=>{let _=D.split("<"),Q=_.pop();if(!Q||!Q.includes("@"))return;A.author={email:Q.substr(0,Q.length-1),name:_.join("<").trim()}}),new d4(/(\d+)[^,]*(?:,\s*(\d+)[^,]*)(?:,\s*(\d+))/g,(A,[D,_,Q])=>{A.summary.changes=parseInt(D,10)||0,A.summary.insertions=parseInt(_,10)||0,A.summary.deletions=parseInt(Q,10)||0}),new d4(/^(\d+)[^,]*(?:,\s*(\d+)[^(]+\(([+-]))?/,(A,[D,_,Q])=>{A.summary.changes=parseInt(D,10)||0;let B=parseInt(_,10)||0;if(Q==="-")A.summary.deletions=B;else if(Q==="+")A.summary.insertions=B})]}});function vE4(A,D,_){return{commands:["-c","core.abbrev=40","commit",...Fc(A,"-m"),...D,..._],format:"utf-8",parser:RE4}}function yE4(){return{commit(D,..._){let Q=P3(arguments),B=A(D)||vE4(n$(D),n$(o$(_[0],k21,[])),[...o$(_[1],Cc,[]),...qE(arguments,0,!0)]);return this._runTask(B,Q)}};function A(D){return!k21(D)&&WE("git.commit: requires the commit message to be supplied as a string/string[]")}}var SE4=K6({"src/lib/tasks/commit.ts"(){TE4(),L4(),o3()}});function jE4(){return{firstCommit(){return this._runTask(JB(["rev-list","--max-parents=0","HEAD"],!0),P3(arguments))}}}var bE4=K6({"src/lib/tasks/first-commit.ts"(){L4(),o3()}});function kE4(A,D){let _=["hash-object",A];if(D)_.push("-w");return JB(_,!0)}var xE4=K6({"src/lib/tasks/hash-object.ts"(){o3()}});function gE4(A,D,_){let Q=String(_).trim(),B;if(B=k8A.exec(Q))return new S21(A,D,!1,B[1]);if(B=x8A.exec(Q))return new S21(A,D,!0,B[1]);let E="",z=Q.split(" ");while(z.length)if(z.shift()==="in"){E=z.join(" ");break}return new S21(A,D,/^re/i.test(Q),E)}var S21,k8A,x8A,fE4=K6({"src/lib/responses/InitSummary.ts"(){S21=class{constructor(A,D,_,Q){this.bare=A,this.path=D,this.existing=_,this.gitDir=Q}},k8A=/^Init.+ repository in (.+)$/,x8A=/^Rein.+ in (.+)$/}});function uE4(A){return A.includes(aP1)}function mE4(A=!1,D,_){let Q=["init",..._];if(A&&!uE4(Q))Q.splice(1,0,aP1);return{commands:Q,format:"utf-8",parser(B){return gE4(Q.includes("--bare"),D,B)}}}var aP1,hE4=K6({"src/lib/tasks/init.ts"(){fE4(),aP1="--bare"}});function nP1(A){for(let D=0;D<A.length;D++){let _=oP1.exec(A[D]);if(_)return`--${_[1]}`}return""}function pE4(A){return oP1.test(A)}var oP1,Ic=K6({"src/lib/args/log-format.ts"(){oP1=/^--(stat|numstat|name-only|name-status)(=|$)/}}),g8A,cE4=K6({"src/lib/responses/DiffSummary.ts"(){g8A=class{constructor(){this.changed=0,this.deletions=0,this.insertions=0,this.files=[]}}}});function f8A(A=""){let D=u8A[A];return(_)=>ME(new g8A,D,_,!1)}var CP1,K2A,Z2A,U2A,u8A,m8A=K6({"src/lib/parsers/parse-diff-summary.ts"(){Ic(),cE4(),q8A(),L4(),CP1=[new d4(/^(.+)\s+\|\s+(\d+)(\s+[+\-]+)?$/,(A,[D,_,Q=""])=>{A.files.push({file:D.trim(),changes:h9(_),insertions:Q.replace(/[^+]/g,"").length,deletions:Q.replace(/[^-]/g,"").length,binary:!1})}),new d4(/^(.+) \|\s+Bin ([0-9.]+) -> ([0-9.]+) ([a-z]+)/,(A,[D,_,Q])=>{A.files.push({file:D.trim(),before:h9(_),after:h9(Q),binary:!0})}),new d4(/(\d+) files? changed\s*((?:, \d+ [^,]+){0,2})/,(A,[D,_])=>{let Q=/(\d+) i/.exec(_),B=/(\d+) d/.exec(_);A.changed=h9(D),A.insertions=h9(Q?.[1]),A.deletions=h9(B?.[1])})],K2A=[new d4(/(\d+)\t(\d+)\t(.+)$/,(A,[D,_,Q])=>{let B=h9(D),E=h9(_);A.changed++,A.insertions+=B,A.deletions+=E,A.files.push({file:Q,changes:B+E,insertions:B,deletions:E,binary:!1})}),new d4(/-\t-\t(.+)$/,(A,[D])=>{A.changed++,A.files.push({file:D,after:0,before:0,binary:!0})})],Z2A=[new d4(/(.+)$/,(A,[D])=>{A.changed++,A.files.push({file:D,changes:0,insertions:0,deletions:0,binary:!1})})],U2A=[new d4(/([ACDMRTUXB])([0-9]{0,3})\t(.[^\t]*)(\t(.[^\t]*))?$/,(A,[D,_,Q,B,E])=>{A.changed++,A.files.push({file:E??Q,changes:0,insertions:0,deletions:0,binary:!1,status:qP1(zE4(D)&&D),from:qP1(!!E&&Q!==E&&Q),similarity:h9(_)})})],u8A={[""]:CP1,["--stat"]:CP1,["--numstat"]:K2A,["--name-status"]:U2A,["--name-only"]:Z2A}}});function dE4(A,D){return D.reduce((_,Q,B)=>{return _[Q]=A[B]||"",_},Object.create({diff:null}))}function h8A(A=tP1,D=p8A,_=""){let Q=f8A(_);return function(B){let E=Uc(B.trim(),!1,rP1).map(function(z){let J=z.split(sP1),X=dE4(J[0].split(A),D);if(J.length>1&&!!J[1].trim())X.diff=Q(J[1]);return X});return{all:E,latest:E.length&&E[0]||null,total:E.length}}}var rP1,sP1,tP1,p8A,c8A=K6({"src/lib/parsers/parse-list-log-summary.ts"(){L4(),m8A(),Ic(),rP1="òòòòòò ",sP1=" òò",tP1=" ò ",p8A=["hash","date","message","refs","author_name","author_email"]}}),d8A={};r3(d8A,{diffSummaryTask:()=>lE4,validateLogFormatConfig:()=>i21});function lE4(A){let D=nP1(A),_=["diff"];if(D==="")D="--stat",_.push("--stat=4096");return _.push(...A),i21(_)||{commands:_,format:"utf-8",parser:f8A(D)}}function i21(A){let D=A.filter(pE4);if(D.length>1)return WE(`Summary flags are mutually exclusive - pick one of ${D.join(",")}`);if(D.length&&A.includes("-z"))return WE(`Summary flag ${D} parsing is not compatible with null termination option '-z'`)}var eP1=K6({"src/lib/tasks/diff.ts"(){Ic(),m8A(),o3()}});function iE4(A,D){let _=[],Q=[];return Object.keys(A).forEach((B)=>{_.push(B),Q.push(String(A[B]))}),[_,Q.join(D)]}function aE4(A){return Object.keys(A).reduce((D,_)=>{if(!(_ in TP1))D[_]=A[_];return D},{})}function l8A(A={},D=[]){let _=o$(A.splitter,JQ,tP1),Q=c21(A.format)?A.format:{hash:"%H",date:A.strictDate===!1?"%ai":"%aI",message:"%s",refs:"%D",body:A.multiLine?"%B":"%b",author_name:A.mailMap!==!1?"%aN":"%an",author_email:A.mailMap!==!1?"%aE":"%ae"},[B,E]=iE4(Q,_),z=[],J=[`--pretty=format:${rP1}${E}${sP1}`,...D],X=A.n||A["max-count"]||A.maxCount;if(X)J.push(`--max-count=${X}`);if(A.from||A.to){let G=A.symmetric!==!1?"...":"..";z.push(`${A.from||""}${G}${A.to||""}`)}if(JQ(A.file))J.push("--follow",kP1(A.file));return uP1(aE4(A),J),{fields:B,splitter:_,commands:[...J,...z]}}function nE4(A,D,_){let Q=h8A(A,D,nP1(_));return{commands:["log",..._],format:"utf-8",parser:Q}}function oE4(){return{log(..._){let Q=P3(arguments),B=l8A(mP1(arguments),o$(arguments[0],Cc)),E=D(..._)||i21(B.commands)||A(B);return this._runTask(E,Q)}};function A(_){return nE4(_.splitter,_.fields,_.commands)}function D(_,Q){return JQ(_)&&JQ(Q)&&WE("git.log(string, string) should be replaced with git.log({ from: string, to: string })")}}var TP1,i8A=K6({"src/lib/tasks/log.ts"(){Ic(),Kc(),c8A(),L4(),o3(),eP1(),TP1=((A)=>{return A[A["--pretty"]=0]="--pretty",A[A["max-count"]=1]="max-count",A[A.maxCount=2]="maxCount",A[A.n=3]="n",A[A.file=4]="file",A[A.format=5]="format",A[A.from=6]="from",A[A.to=7]="to",A[A.splitter=8]="splitter",A[A.symmetric=9]="symmetric",A[A.mailMap=10]="mailMap",A[A.multiLine=11]="multiLine",A[A.strictDate=12]="strictDate",A})(TP1||{})}}),j21,a8A,rE4=K6({"src/lib/responses/MergeSummary.ts"(){j21=class{constructor(A,D=null,_){this.reason=A,this.file=D,this.meta=_}toString(){return`${this.file}:${this.reason}`}},a8A=class{constructor(){this.conflicts=[],this.merges=[],this.result="success"}get failed(){return this.conflicts.length>0}get reason(){return this.result}toString(){if(this.conflicts.length)return`CONFLICTS: ${this.conflicts.join(", ")}`;return"OK"}}}}),vP1,n8A,sE4=K6({"src/lib/responses/PullSummary.ts"(){vP1=class{constructor(){this.remoteMessages={all:[]},this.created=[],this.deleted=[],this.files=[],this.deletions={},this.insertions={},this.summary={changes:0,deletions:0,insertions:0}}},n8A=class{constructor(){this.remote="",this.hash={local:"",remote:""},this.branch={local:"",remote:""},this.message=""}toString(){return this.message}}}});function IP1(A){return A.objects=A.objects||{compressing:0,counting:0,enumerating:0,packReused:0,reused:{count:0,delta:0},total:{count:0,delta:0}}}function w2A(A){let D=/^\s*(\d+)/.exec(A),_=/delta (\d+)/i.exec(A);return{count:h9(D&&D[1]||"0"),delta:h9(_&&_[1]||"0")}}var o8A,tE4=K6({"src/lib/parsers/parse-remote-objects.ts"(){L4(),o8A=[new VH(/^remote:\s*(enumerating|counting|compressing) objects: (\d+),/i,(A,[D,_])=>{let Q=D.toLowerCase(),B=IP1(A.remoteMessages);Object.assign(B,{[Q]:h9(_)})}),new VH(/^remote:\s*(enumerating|counting|compressing) objects: \d+% \(\d+\/(\d+)\),/i,(A,[D,_])=>{let Q=D.toLowerCase(),B=IP1(A.remoteMessages);Object.assign(B,{[Q]:h9(_)})}),new VH(/total ([^,]+), reused ([^,]+), pack-reused (\d+)/i,(A,[D,_,Q])=>{let B=IP1(A.remoteMessages);B.total=w2A(D),B.reused=w2A(_),B.packReused=h9(Q)})]}});function r8A(A,D){return ME({remoteMessages:new t8A},s8A,D)}var s8A,t8A,e8A=K6({"src/lib/parsers/parse-remote-messages.ts"(){L4(),tE4(),s8A=[new VH(/^remote:\s*(.+)$/,(A,[D])=>{return A.remoteMessages.all.push(D.trim()),!1}),...o8A,new VH([/create a (?:pull|merge) request/i,/\s(https?:\/\/\S+)$/],(A,[D])=>{A.remoteMessages.pullRequestUrl=D}),new VH([/found (\d+) vulnerabilities.+\(([^)]+)\)/i,/\s(https?:\/\/\S+)$/],(A,[D,_,Q])=>{A.remoteMessages.vulnerabilities={count:h9(D),summary:_,url:Q}})],t8A=class{constructor(){this.all=[]}}}});function eE4(A,D){let _=ME(new n8A,A9A,[A,D]);return _.message&&_}var C2A,I2A,H2A,V2A,A9A,q2A,AR1,D9A=K6({"src/lib/parsers/parse-pull.ts"(){sE4(),L4(),e8A(),C2A=/^\s*(.+?)\s+\|\s+\d+\s*(\+*)(-*)/,I2A=/(\d+)\D+((\d+)\D+\(\+\))?(\D+(\d+)\D+\(-\))?/,H2A=/^(create|delete) mode \d+ (.+)/,V2A=[new d4(C2A,(A,[D,_,Q])=>{if(A.files.push(D),_)A.insertions[D]=_.length;if(Q)A.deletions[D]=Q.length}),new d4(I2A,(A,[D,,_,,Q])=>{if(_!==void 0||Q!==void 0)return A.summary.changes=+D||0,A.summary.insertions=+_||0,A.summary.deletions=+Q||0,!0;return!1}),new d4(H2A,(A,[D,_])=>{I8(A.files,_),I8(D==="create"?A.created:A.deleted,_)})],A9A=[new d4(/^from\s(.+)$/i,(A,[D])=>void(A.remote=D)),new d4(/^fatal:\s(.+)$/,(A,[D])=>void(A.message=D)),new d4(/([a-z0-9]+)\.\.([a-z0-9]+)\s+(\S+)\s+->\s+(\S+)$/,(A,[D,_,Q,B])=>{A.branch.local=Q,A.hash.local=D,A.branch.remote=B,A.hash.remote=_})],q2A=(A,D)=>{return ME(new vP1,V2A,[A,D])},AR1=(A,D)=>{return Object.assign(new vP1,q2A(A,D),r8A(A,D))}}}),W2A,_9A,M2A,Az4=K6({"src/lib/parsers/parse-merge.ts"(){rE4(),L4(),D9A(),W2A=[new d4(/^Auto-merging\s+(.+)$/,(A,[D])=>{A.merges.push(D)}),new d4(/^CONFLICT\s+\((.+)\): Merge conflict in (.+)$/,(A,[D,_])=>{A.conflicts.push(new j21(D,_))}),new d4(/^CONFLICT\s+\((.+\/delete)\): (.+) deleted in (.+) and/,(A,[D,_,Q])=>{A.conflicts.push(new j21(D,_,{deleteRef:Q}))}),new d4(/^CONFLICT\s+\((.+)\):/,(A,[D])=>{A.conflicts.push(new j21(D,null))}),new d4(/^Automatic merge failed;\s+(.+)$/,(A,[D])=>{A.result=D})],_9A=(A,D)=>{return Object.assign(M2A(A,D),AR1(A,D))},M2A=(A)=>{return ME(new a8A,W2A,A)}}});function O2A(A){if(!A.length)return WE("Git.merge requires at least one option");return{commands:["merge",...A],format:"utf-8",parser(D,_){let Q=_9A(D,_);if(Q.failed)throw new Zc(Q);return Q}}}var Dz4=K6({"src/lib/tasks/merge.ts"(){eS(),Az4(),o3()}});function _z4(A,D,_){let Q=_.includes("deleted"),B=_.includes("tag")||/^refs\/tags/.test(A),E=!_.includes("new");return{deleted:Q,tag:B,branch:!B,new:!E,alreadyUpdated:E,local:A,remote:D}}var N2A,Q9A,L2A,Qz4=K6({"src/lib/parsers/parse-push.ts"(){L4(),e8A(),N2A=[new d4(/^Pushing to (.+)$/,(A,[D])=>{A.repo=D}),new d4(/^updating local tracking ref '(.+)'/,(A,[D])=>{A.ref={...A.ref||{},local:D}}),new d4(/^[=*-]\s+([^:]+):(\S+)\s+\[(.+)]$/,(A,[D,_,Q])=>{A.pushed.push(_z4(D,_,Q))}),new d4(/^Branch '([^']+)' set up to track remote branch '([^']+)' from '([^']+)'/,(A,[D,_,Q])=>{A.branch={...A.branch||{},local:D,remote:_,remoteName:Q}}),new d4(/^([^:]+):(\S+)\s+([a-z0-9]+)\.\.([a-z0-9]+)$/,(A,[D,_,Q,B])=>{A.update={head:{local:D,remote:_},hash:{from:Q,to:B}}})],Q9A=(A,D)=>{let _=L2A(A,D),Q=r8A(A,D);return{..._,...Q}},L2A=(A,D)=>{return ME({pushed:[]},N2A,[A,D])}}}),B9A={};r3(B9A,{pushTagsTask:()=>Bz4,pushTask:()=>DR1});function Bz4(A={},D){return I8(D,"--tags"),DR1(A,D)}function DR1(A={},D){let _=["push",...D];if(A.branch)_.splice(1,0,A.branch);if(A.remote)_.splice(1,0,A.remote);return h21(_,"-v"),I8(_,"--verbose"),I8(_,"--porcelain"),{commands:_,format:"utf-8",parser:Q9A}}var E9A=K6({"src/lib/tasks/push.ts"(){Qz4(),L4()}});function Ez4(){return{showBuffer(){let A=["show",...qE(arguments,1)];if(!A.includes("--binary"))A.splice(1,0,"--binary");return this._runTask(F8A(A),P3(arguments))},show(){let A=["show",...qE(arguments,1)];return this._runTask(JB(A),P3(arguments))}}}var zz4=K6({"src/lib/tasks/show.ts"(){L4(),o3()}}),P2A,z9A,Jz4=K6({"src/lib/responses/FileStatusSummary.ts"(){P2A=/^(.+)\0(.+)$/,z9A=class{constructor(A,D,_){if(this.path=A,this.index=D,this.working_dir=_,D==="R"||_==="R"){let Q=P2A.exec(A)||[null,A,A];this.from=Q[2]||"",this.path=Q[1]||""}}}}});function R2A(A){let[D,_]=A.split(tS);return{from:_||D,to:D}}function fz(A,D,_){return[`${A}${D}`,_]}function HP1(A,...D){return D.map((_)=>fz(A,_,(Q,B)=>I8(Q.conflicted,B)))}function Xz4(A,D){let _=D.trim();switch(" "){case _.charAt(2):return Q(_.charAt(0),_.charAt(1),_.substr(3));case _.charAt(1):return Q(" ",_.charAt(0),_.substr(2));default:return}function Q(B,E,z){let J=`${B}${E}`,X=J9A.get(J);if(X)X(A,z);if(J!=="##"&&J!=="!!")A.files.push(new z9A(z,B,E))}}var T2A,J9A,X9A,Gz4=K6({"src/lib/responses/StatusSummary.ts"(){L4(),Jz4(),T2A=class{constructor(){this.not_added=[],this.conflicted=[],this.created=[],this.deleted=[],this.ignored=void 0,this.modified=[],this.renamed=[],this.files=[],this.staged=[],this.ahead=0,this.behind=0,this.current=null,this.tracking=null,this.detached=!1,this.isClean=()=>{return!this.files.length}}},J9A=new Map([fz(" ","A",(A,D)=>I8(A.created,D)),fz(" ","D",(A,D)=>I8(A.deleted,D)),fz(" ","M",(A,D)=>I8(A.modified,D)),fz("A"," ",(A,D)=>I8(A.created,D)&&I8(A.staged,D)),fz("A","M",(A,D)=>I8(A.created,D)&&I8(A.staged,D)&&I8(A.modified,D)),fz("D"," ",(A,D)=>I8(A.deleted,D)&&I8(A.staged,D)),fz("M"," ",(A,D)=>I8(A.modified,D)&&I8(A.staged,D)),fz("M","M",(A,D)=>I8(A.modified,D)&&I8(A.staged,D)),fz("R"," ",(A,D)=>{I8(A.renamed,R2A(D))}),fz("R","M",(A,D)=>{let _=R2A(D);I8(A.renamed,_),I8(A.modified,_.to)}),fz("!","!",(A,D)=>{I8(A.ignored=A.ignored||[],D)}),fz("?","?",(A,D)=>I8(A.not_added,D)),...HP1("A","A","U"),...HP1("D","D","U"),...HP1("U","A","D","U"),["##",(A,D)=>{let _=/ahead (\d+)/,Q=/behind (\d+)/,B=/^(.+?(?=(?:\.{3}|\s|$)))/,E=/\.{3}(\S*)/,z=/\son\s([\S]+)$/,J;J=_.exec(D),A.ahead=J&&+J[1]||0,J=Q.exec(D),A.behind=J&&+J[1]||0,J=B.exec(D),A.current=J&&J[1],J=E.exec(D),A.tracking=J&&J[1],J=z.exec(D),A.current=J&&J[1]||A.current,A.detached=/\(no branch\)/.test(D)}]]),X9A=function(A){let D=A.split(tS),_=new T2A;for(let Q=0,B=D.length;Q<B;){let E=D[Q++].trim();if(!E)continue;if(E.charAt(0)==="R")E+=tS+(D[Q++]||"");Xz4(_,E)}return _}}});function Yz4(A){return{format:"utf-8",commands:["status","--porcelain","-b","-u","--null",...A.filter((_)=>!G9A.includes(_))],parser(_){return X9A(_)}}}var G9A,Fz4=K6({"src/lib/tasks/status.ts"(){Gz4(),G9A=["--null","-z"]}});function f21(A=0,D=0,_=0,Q="",B=!0){return Object.defineProperty({major:A,minor:D,patch:_,agent:Q,installed:B},"toString",{value(){return`${this.major}.${this.minor}.${this.patch}`},configurable:!1,enumerable:!1})}function $z4(){return f21(0,0,0,"",!1)}function Kz4(){return{version(){return this._runTask({commands:["--version"],format:"utf-8",parser:Zz4,onError(A,D,_,Q){if(A.exitCode===-2)return _(Buffer.from(_R1));Q(D)}})}}}function Zz4(A){if(A===_R1)return $z4();return ME(f21(0,0,0,A),Y9A,A)}var _R1,Y9A,Uz4=K6({"src/lib/tasks/version.ts"(){L4(),_R1="installed=false",Y9A=[new d4(/version (\d+)\.(\d+)\.(\d+)(?:\s*\((.+)\))?/,(A,[D,_,Q,B=""])=>{Object.assign(A,f21(h9(D),h9(_),h9(Q),B))}),new d4(/version (\d+)\.(\d+)\.(\D+)(.+)?$/,(A,[D,_,Q,B=""])=>{Object.assign(A,f21(h9(D),h9(_),Q,B))})]}}),F9A={};r3(F9A,{SimpleGitApi:()=>yP1});var yP1,wz4=K6({"src/lib/simple-git-api.ts"(){qE4(),WE4(),OE4(),PE4(),SE4(),H8A(),bE4(),O8A(),xE4(),hE4(),i8A(),Dz4(),E9A(),zz4(),Fz4(),o3(),Uz4(),L4(),yP1=class{constructor(A){this._executor=A}_runTask(A,D){let _=this._executor.chain(),Q=_.push(A);if(D)HE4(A,Q,D);return Object.create(this,{then:{value:Q.then.bind(Q)},catch:{value:Q.catch.bind(Q)},_executor:{value:_}})}add(A){return this._runTask(JB(["add",...n$(A)]),P3(arguments))}cwd(A){let D=P3(arguments);if(typeof A==="string")return this._runTask($2A(A,this._executor),D);if(typeof A?.path==="string")return this._runTask($2A(A.path,A.root&&this._executor||void 0),D);return this._runTask(WE("Git.cwd: workingDirectory must be supplied as a string"),D)}hashObject(A,D){return this._runTask(kE4(A,D===!0),P3(arguments))}init(A){return this._runTask(mE4(A===!0,this._executor.cwd,qE(arguments)),P3(arguments))}merge(){return this._runTask(O2A(qE(arguments)),P3(arguments))}mergeFromTo(A,D){if(!(JQ(A)&&JQ(D)))return this._runTask(WE("Git.mergeFromTo requires that the 'remote' and 'branch' arguments are supplied as strings"));return this._runTask(O2A([A,D,...qE(arguments)]),P3(arguments,!1))}outputHandler(A){return this._executor.outputHandler=A,this}push(){let A=DR1({remote:o$(arguments[0],JQ),branch:o$(arguments[1],JQ)},qE(arguments));return this._runTask(A,P3(arguments))}stash(){return this._runTask(JB(["stash",...qE(arguments)]),P3(arguments))}status(){return this._runTask(Yz4(qE(arguments)),P3(arguments))}},Object.assign(yP1.prototype,ME4(),yE4(),EE4(),LE4(),jE4(),GE4(),oE4(),Ez4(),Kz4())}}),$9A={};r3($9A,{Scheduler:()=>Z9A});var v2A,Z9A,Cz4=K6({"src/lib/runners/scheduler.ts"(){L4(),T8A(),v2A=(()=>{let A=0;return()=>{A++;let{promise:D,done:_}=K9A.createDeferred();return{promise:D,done:_,id:A}}})(),Z9A=class{constructor(A=2){this.concurrency=A,this.logger=iP1("","scheduler"),this.pending=[],this.running=[],this.logger("Constructed, concurrency=%s",A)}schedule(){if(!this.pending.length||this.running.length>=this.concurrency){this.logger("Schedule attempt ignored, pending=%s running=%s concurrency=%s",this.pending.length,this.running.length,this.concurrency);return}let A=I8(this.running,this.pending.shift());this.logger("Attempting id=%s",A.id),A.done(()=>{this.logger("Completing id=",A.id),h21(this.running,A),this.schedule()})}next(){let{promise:A,id:D}=I8(this.pending,v2A());return this.logger("Scheduling id=%s",D),this.schedule(),A}}}}),U9A={};r3(U9A,{applyPatchTask:()=>Iz4});function Iz4(A,D){return JB(["apply",...D,...A])}var Hz4=K6({"src/lib/tasks/apply-patch.ts"(){o3()}});function Vz4(A,D){return{branch:A,hash:D,success:!0}}function qz4(A){return{branch:A,hash:null,success:!1}}var w9A,Wz4=K6({"src/lib/responses/BranchDeleteSummary.ts"(){w9A=class{constructor(){this.all=[],this.branches={},this.errors=[]}get success(){return!this.errors.length}}}});function C9A(A,D){return D===1&&SP1.test(A)}var y2A,SP1,S2A,a21,Mz4=K6({"src/lib/parsers/parse-branch-delete.ts"(){Wz4(),L4(),y2A=/(\S+)\s+\(\S+\s([^)]+)\)/,SP1=/^error[^']+'([^']+)'/m,S2A=[new d4(y2A,(A,[D,_])=>{let Q=Vz4(D,_);A.all.push(Q),A.branches[D]=Q}),new d4(SP1,(A,[D])=>{let _=qz4(D);A.errors.push(_),A.all.push(_),A.branches[D]=_})],a21=(A,D)=>{return ME(new w9A,S2A,[A,D])}}}),I9A,Oz4=K6({"src/lib/responses/BranchSummary.ts"(){I9A=class{constructor(){this.all=[],this.branches={},this.current="",this.detached=!1}push(A,D,_,Q,B){if(A==="*")this.detached=D,this.current=_;this.all.push(_),this.branches[_]={current:A==="*",linkedWorkTree:A==="+",name:_,commit:Q,label:B}}}}});function j2A(A){return A?A.charAt(0):""}function H9A(A){return ME(new I9A,V9A,A)}var V9A,Nz4=K6({"src/lib/parsers/parse-branch.ts"(){Oz4(),L4(),V9A=[new d4(/^([*+]\s)?\((?:HEAD )?detached (?:from|at) (\S+)\)\s+([a-z0-9]+)\s(.*)$/,(A,[D,_,Q,B])=>{A.push(j2A(D),!0,_,Q,B)}),new d4(/^([*+]\s)?(\S+)\s+([a-z0-9]+)\s?(.*)$/s,(A,[D,_,Q,B])=>{A.push(j2A(D),!1,_,Q,B)})]}}),q9A={};r3(q9A,{branchLocalTask:()=>Pz4,branchTask:()=>Lz4,containsDeleteBranchCommand:()=>W9A,deleteBranchTask:()=>Tz4,deleteBranchesTask:()=>Rz4});function W9A(A){let D=["-d","-D","--delete"];return A.some((_)=>D.includes(_))}function Lz4(A){let D=W9A(A),_=["branch",...A];if(_.length===1)_.push("-a");if(!_.includes("-v"))_.splice(1,0,"-v");return{format:"utf-8",commands:_,parser(Q,B){if(D)return a21(Q,B).all[0];return H9A(Q)}}}function Pz4(){return{format:"utf-8",commands:["branch","-v"],parser:H9A}}function Rz4(A,D=!1){return{format:"utf-8",commands:["branch","-v",D?"-D":"-d",...A],parser(_,Q){return a21(_,Q)},onError({exitCode:_,stdOut:Q},B,E,z){if(!C9A(String(B),_))return z(B);E(Q)}}}function Tz4(A,D=!1){let _={format:"utf-8",commands:["branch","-v",D?"-D":"-d",A],parser(Q,B){return a21(Q,B).branches[A]},onError({exitCode:Q,stdErr:B,stdOut:E},z,J,X){if(!C9A(String(z),Q))return X(z);throw new Zc(_.parser($c(E),$c(B)),String(z))}};return _}var vz4=K6({"src/lib/tasks/branch.ts"(){eS(),Mz4(),Nz4(),L4()}}),M9A,yz4=K6({"src/lib/responses/CheckIgnore.ts"(){M9A=(A)=>{return A.split(/\n/g).map((D)=>D.trim()).filter((D)=>!!D)}}}),O9A={};r3(O9A,{checkIgnoreTask:()=>Sz4});function Sz4(A){return{commands:["check-ignore",...A],format:"utf-8",parser:M9A}}var jz4=K6({"src/lib/tasks/check-ignore.ts"(){yz4()}}),N9A={};r3(N9A,{cloneMirrorTask:()=>kz4,cloneTask:()=>L9A});function bz4(A){return/^--upload-pack(=|$)/.test(A)}function L9A(A,D,_){let Q=["clone",..._];if(JQ(A)&&Q.push(A),JQ(D)&&Q.push(D),Q.find(bz4))return WE("git.fetch: potential exploit argument blocked.");return JB(Q)}function kz4(A,D,_){return I8(_,"--mirror"),L9A(A,D,_)}var xz4=K6({"src/lib/tasks/clone.ts"(){o3(),L4()}});function gz4(A,D){return ME({raw:A,remote:null,branches:[],tags:[],updated:[],deleted:[]},P9A,[A,D])}var P9A,fz4=K6({"src/lib/parsers/parse-fetch.ts"(){L4(),P9A=[new d4(/From (.+)$/,(A,[D])=>{A.remote=D}),new d4(/\* \[new branch]\s+(\S+)\s*-> (.+)$/,(A,[D,_])=>{A.branches.push({name:D,tracking:_})}),new d4(/\* \[new tag]\s+(\S+)\s*-> (.+)$/,(A,[D,_])=>{A.tags.push({name:D,tracking:_})}),new d4(/- \[deleted]\s+\S+\s*-> (.+)$/,(A,[D])=>{A.deleted.push({tracking:D})}),new d4(/\s*([^.]+)\.\.(\S+)\s+(\S+)\s*-> (.+)$/,(A,[D,_,Q,B])=>{A.updated.push({name:Q,tracking:B,to:_,from:D})})]}}),R9A={};r3(R9A,{fetchTask:()=>mz4});function uz4(A){return/^--upload-pack(=|$)/.test(A)}function mz4(A,D,_){let Q=["fetch",..._];if(A&&D)Q.push(A,D);if(Q.find(uz4))return WE("git.fetch: potential exploit argument blocked.");return{commands:Q,format:"utf-8",parser:gz4}}var hz4=K6({"src/lib/tasks/fetch.ts"(){fz4(),o3()}});function pz4(A){return ME({moves:[]},T9A,A)}var T9A,cz4=K6({"src/lib/parsers/parse-move.ts"(){L4(),T9A=[new d4(/^Renaming (.+) to (.+)$/,(A,[D,_])=>{A.moves.push({from:D,to:_})})]}}),v9A={};r3(v9A,{moveTask:()=>dz4});function dz4(A,D){return{commands:["mv","-v",...n$(A),D],format:"utf-8",parser:pz4}}var lz4=K6({"src/lib/tasks/move.ts"(){cz4(),L4()}}),y9A={};r3(y9A,{pullTask:()=>iz4});function iz4(A,D,_){let Q=["pull",..._];if(A&&D)Q.splice(1,0,A,D);return{commands:Q,format:"utf-8",parser(B,E){return AR1(B,E)},onError(B,E,z,J){let X=eE4($c(B.stdOut),$c(B.stdErr));if(X)return J(new Zc(X));J(E)}}}var az4=K6({"src/lib/tasks/pull.ts"(){eS(),D9A(),L4()}});function nz4(A){let D={};return S9A(A,([_])=>D[_]={name:_}),Object.values(D)}function oz4(A){let D={};return S9A(A,([_,Q,B])=>{if(!D.hasOwnProperty(_))D[_]={name:_,refs:{fetch:"",push:""}};if(B&&Q)D[_].refs[B.replace(/[^a-z]/g,"")]=Q}),Object.values(D)}function S9A(A,D){xP1(A,(_)=>D(_.split(/\s+/)))}var rz4=K6({"src/lib/responses/GetRemoteSummary.ts"(){L4()}}),j9A={};r3(j9A,{addRemoteTask:()=>sz4,getRemotesTask:()=>tz4,listRemotesTask:()=>ez4,remoteTask:()=>AJ4,removeRemoteTask:()=>DJ4});function sz4(A,D,_){return JB(["remote","add",..._,A,D])}function tz4(A){let D=["remote"];if(A)D.push("-v");return{commands:D,format:"utf-8",parser:A?oz4:nz4}}function ez4(A){let D=[...A];if(D[0]!=="ls-remote")D.unshift("ls-remote");return JB(D)}function AJ4(A){let D=[...A];if(D[0]!=="remote")D.unshift("remote");return JB(D)}function DJ4(A){return JB(["remote","remove",A])}var _J4=K6({"src/lib/tasks/remote.ts"(){rz4(),o3()}}),b9A={};r3(b9A,{stashListTask:()=>QJ4});function QJ4(A={},D){let _=l8A(A),Q=["stash","list",..._.commands,...D],B=h8A(_.splitter,_.fields,nP1(Q));return i21(Q)||{commands:Q,format:"utf-8",parser:B}}var BJ4=K6({"src/lib/tasks/stash-list.ts"(){Ic(),c8A(),eP1(),i8A()}}),k9A={};r3(k9A,{addSubModuleTask:()=>EJ4,initSubModuleTask:()=>zJ4,subModuleTask:()=>n21,updateSubModuleTask:()=>JJ4});function EJ4(A,D){return n21(["add",A,D])}function zJ4(A){return n21(["init",...A])}function n21(A){let D=[...A];if(D[0]!=="submodule")D.unshift("submodule");return JB(D)}function JJ4(A){return n21(["update",...A])}var XJ4=K6({"src/lib/tasks/sub-module.ts"(){o3()}});function GJ4(A,D){let _=isNaN(A),Q=isNaN(D);if(_!==Q)return _?1:-1;return _?x9A(A,D):0}function x9A(A,D){return A===D?0:A>D?1:-1}function YJ4(A){return A.trim()}function T21(A){if(typeof A==="string")return parseInt(A.replace(/^\D+/g,""),10)||0;return 0}var b2A,g9A,FJ4=K6({"src/lib/responses/TagList.ts"(){b2A=class{constructor(A,D){this.all=A,this.latest=D}},g9A=function(A,D=!1){let _=A.split(`
1459
1459
  `).map(YJ4).filter(Boolean);if(!D)_.sort(function(B,E){let z=B.split("."),J=E.split(".");if(z.length===1||J.length===1)return GJ4(T21(z[0]),T21(J[0]));for(let X=0,G=Math.max(z.length,J.length);X<G;X++){let Y=x9A(T21(z[X]),T21(J[X]));if(Y)return Y}return 0});let Q=D?_[0]:[..._].reverse().find((B)=>B.indexOf(".")>=0);return new b2A(_,Q)}}}),f9A={};r3(f9A,{addAnnotatedTagTask:()=>ZJ4,addTagTask:()=>KJ4,tagListTask:()=>$J4});function $J4(A=[]){let D=A.some((_)=>/^--sort=/.test(_));return{format:"utf-8",commands:["tag","-l",...A],parser(_){return g9A(_,D)}}}function KJ4(A){return{format:"utf-8",commands:["tag",A],parser(){return{name:A}}}}function ZJ4(A,D){return{format:"utf-8",commands:["tag","-a","-m",D,A],parser(){return{name:A}}}}var UJ4=K6({"src/lib/tasks/tag.ts"(){FJ4()}}),wJ4=SB4({"src/git.js"(A,D){var{GitExecutor:_}=(IE4(),L3(y8A)),{SimpleGitApi:Q}=(wz4(),L3(F9A)),{Scheduler:B}=(Cz4(),L3($9A)),{configurationErrorTask:E}=(o3(),L3(LP1)),{asArray:z,filterArray:J,filterPrimitives:X,filterString:G,filterStringOrStringArray:Y,filterType:$,getTrailingOptions:K,trailingFunctionArgument:F,trailingOptionsArgument:Z}=(L4(),L3(D8A)),{applyPatchTask:U}=(Hz4(),L3(U9A)),{branchTask:C,branchLocalTask:V,deleteBranchesTask:q,deleteBranchTask:W}=(vz4(),L3(q9A)),{checkIgnoreTask:M}=(jz4(),L3(O9A)),{checkIsRepoTask:R}=(E8A(),L3(_8A)),{cloneTask:v,cloneMirrorTask:y}=(xz4(),L3(N9A)),{cleanWithOptionsTask:u,isCleanOptionsArray:S}=(w8A(),L3(Z8A)),{diffSummaryTask:o}=(eP1(),L3(d8A)),{fetchTask:m}=(hz4(),L3(R9A)),{moveTask:s}=(lz4(),L3(v9A)),{pullTask:c}=(az4(),L3(y9A)),{pushTagsTask:x}=(E9A(),L3(B9A)),{addRemoteTask:l,getRemotesTask:r,listRemotesTask:_1,remoteTask:I1,removeRemoteTask:U1}=(_J4(),L3(j9A)),{getResetMode:H1,resetTask:Y1}=(R8A(),L3(N8A)),{stashListTask:D1}=(BJ4(),L3(b9A)),{addSubModuleTask:e,initSubModuleTask:V1,subModuleTask:S1,updateSubModuleTask:l1}=(XJ4(),L3(k9A)),{addAnnotatedTagTask:B0,addTagTask:f0,tagListTask:H0}=(UJ4(),L3(f9A)),{straightThroughBufferTask:b0,straightThroughStringTask:y0}=(o3(),L3(LP1));function X1(O1,E1){this._plugins=E1,this._executor=new _(O1.baseDir,new B(O1.maxConcurrentProcesses),E1),this._trimmed=O1.trimmed}(X1.prototype=Object.create(Q.prototype)).constructor=X1,X1.prototype.customBinary=function(O1){return this._plugins.reconfigure("binary",O1),this},X1.prototype.env=function(O1,E1){if(arguments.length===1&&typeof O1==="object")this._executor.env=O1;else(this._executor.env=this._executor.env||{})[O1]=E1;return this},X1.prototype.stashList=function(O1){return this._runTask(D1(Z(arguments)||{},J(O1)&&O1||[]),F(arguments))};function P1(O1,E1,g1,_0){if(typeof g1!=="string")return E(`git.${O1}() requires a string 'repoPath'`);return E1(g1,$(_0,G),K(arguments))}X1.prototype.clone=function(){return this._runTask(P1("clone",v,...arguments),F(arguments))},X1.prototype.mirror=function(){return this._runTask(P1("mirror",y,...arguments),F(arguments))},X1.prototype.mv=function(O1,E1){return this._runTask(s(O1,E1),F(arguments))},X1.prototype.checkoutLatestTag=function(O1){var E1=this;return this.pull(function(){E1.tags(function(g1,_0){E1.checkout(_0.latest,O1)})})},X1.prototype.pull=function(O1,E1,g1,_0){return this._runTask(c($(O1,G),$(E1,G),K(arguments)),F(arguments))},X1.prototype.fetch=function(O1,E1){return this._runTask(m($(O1,G),$(E1,G),K(arguments)),F(arguments))},X1.prototype.silent=function(O1){return console.warn("simple-git deprecation notice: git.silent: logging should be configured using the `debug` library / `DEBUG` environment variable, this will be an error in version 3"),this},X1.prototype.tags=function(O1,E1){return this._runTask(H0(K(arguments)),F(arguments))},X1.prototype.rebase=function(){return this._runTask(y0(["rebase",...K(arguments)]),F(arguments))},X1.prototype.reset=function(O1){return this._runTask(Y1(H1(O1),K(arguments)),F(arguments))},X1.prototype.revert=function(O1){let E1=F(arguments);if(typeof O1!=="string")return this._runTask(E("Commit must be a string"),E1);return this._runTask(y0(["revert",...K(arguments,0,!0),O1]),E1)},X1.prototype.addTag=function(O1){let E1=typeof O1==="string"?f0(O1):E("Git.addTag requires a tag name");return this._runTask(E1,F(arguments))},X1.prototype.addAnnotatedTag=function(O1,E1){return this._runTask(B0(O1,E1),F(arguments))},X1.prototype.deleteLocalBranch=function(O1,E1,g1){return this._runTask(W(O1,typeof E1==="boolean"?E1:!1),F(arguments))},X1.prototype.deleteLocalBranches=function(O1,E1,g1){return this._runTask(q(O1,typeof E1==="boolean"?E1:!1),F(arguments))},X1.prototype.branch=function(O1,E1){return this._runTask(C(K(arguments)),F(arguments))},X1.prototype.branchLocal=function(O1){return this._runTask(V(),F(arguments))},X1.prototype.raw=function(O1){let E1=!Array.isArray(O1),g1=[].slice.call(E1?arguments:O1,0);for(let E0=0;E0<g1.length&&E1;E0++)if(!X(g1[E0])){g1.splice(E0,g1.length-E0);break}g1.push(...K(arguments,0,!0));var _0=F(arguments);if(!g1.length)return this._runTask(E("Raw: must supply one or more command to execute"),_0);return this._runTask(y0(g1,this._trimmed),_0)},X1.prototype.submoduleAdd=function(O1,E1,g1){return this._runTask(e(O1,E1),F(arguments))},X1.prototype.submoduleUpdate=function(O1,E1){return this._runTask(l1(K(arguments,!0)),F(arguments))},X1.prototype.submoduleInit=function(O1,E1){return this._runTask(V1(K(arguments,!0)),F(arguments))},X1.prototype.subModule=function(O1,E1){return this._runTask(S1(K(arguments)),F(arguments))},X1.prototype.listRemote=function(){return this._runTask(_1(K(arguments)),F(arguments))},X1.prototype.addRemote=function(O1,E1,g1){return this._runTask(l(O1,E1,K(arguments)),F(arguments))},X1.prototype.removeRemote=function(O1,E1){return this._runTask(U1(O1),F(arguments))},X1.prototype.getRemotes=function(O1,E1){return this._runTask(r(O1===!0),F(arguments))},X1.prototype.remote=function(O1,E1){return this._runTask(I1(K(arguments)),F(arguments))},X1.prototype.tag=function(O1,E1){let g1=K(arguments);if(g1[0]!=="tag")g1.unshift("tag");return this._runTask(y0(g1),F(arguments))},X1.prototype.updateServerInfo=function(O1){return this._runTask(y0(["update-server-info"]),F(arguments))},X1.prototype.pushTags=function(O1,E1){let g1=x({remote:$(O1,G)},K(arguments));return this._runTask(g1,F(arguments))},X1.prototype.rm=function(O1){return this._runTask(y0(["rm","-f",...z(O1)]),F(arguments))},X1.prototype.rmKeepLocal=function(O1){return this._runTask(y0(["rm","--cached",...z(O1)]),F(arguments))},X1.prototype.catFile=function(O1,E1){return this._catFile("utf-8",arguments)},X1.prototype.binaryCatFile=function(){return this._catFile("buffer",arguments)},X1.prototype._catFile=function(O1,E1){var g1=F(E1),_0=["cat-file"],E0=E1[0];if(typeof E0==="string")return this._runTask(E("Git.catFile: options must be supplied as an array of strings"),g1);if(Array.isArray(E0))_0.push.apply(_0,E0);let j0=O1==="buffer"?b0(_0):y0(_0);return this._runTask(j0,g1)},X1.prototype.diff=function(O1,E1){let g1=G(O1)?E("git.diff: supplying options as a single string is no longer supported, switch to an array of strings"):y0(["diff",...K(arguments)]);return this._runTask(g1,F(arguments))},X1.prototype.diffSummary=function(){return this._runTask(o(K(arguments,1)),F(arguments))},X1.prototype.applyPatch=function(O1){let E1=!Y(O1)?E("git.applyPatch requires one or more string patches as the first argument"):U(z(O1),K([].slice.call(arguments,1)));return this._runTask(E1,F(arguments))},X1.prototype.revparse=function(){let O1=["rev-parse",...K(arguments,!0)];return this._runTask(y0(O1,!0),F(arguments))},X1.prototype.clean=function(O1,E1,g1){let _0=S(O1),E0=_0&&O1.join("")||$(O1,G)||"",j0=K([].slice.call(arguments,_0?1:0));return this._runTask(u(E0,j0),F(arguments))},X1.prototype.exec=function(O1){let E1={commands:[],format:"utf-8",parser(){if(typeof O1==="function")O1()}};return this._runTask(E1)},X1.prototype.clearQueue=function(){return this},X1.prototype.checkIgnore=function(O1,E1){return this._runTask(M(z($(O1,Y,[]))),F(arguments))},X1.prototype.checkIsRepo=function(O1,E1){return this._runTask(R($(O1,G)),F(arguments))},D.exports=X1}});Kc();qH();var CJ4=class extends KU{constructor(A,D){super(void 0,D);this.config=A}};qH();qH();var $U=class extends KU{constructor(A,D,_){super(A,_);this.task=A,this.plugin=D,Object.setPrototypeOf(this,new.target.prototype)}};eS();m2A();E8A();w8A();H8A();q8A();O8A();R8A();function IJ4(A){if(!A)return;return[{type:"spawn.before",action(Q,B){if(A.aborted)B.kill(new $U(void 0,"abort","Abort already signaled"))}},{type:"spawn.after",action(Q,B){function E(){B.kill(new $U(void 0,"abort","Abort signal received"))}A.addEventListener("abort",E),B.spawned.on("close",()=>A.removeEventListener("abort",E))}}]}function HJ4(A){return typeof A==="string"&&A.trim().toLowerCase()==="-c"}function VJ4(A,D){if(!HJ4(A))return;if(!/^\s*protocol(.[a-z]+)?.allow/.test(D))return;throw new $U(void 0,"unsafe","Configuring protocol.allow is not permitted without enabling allowUnsafeExtProtocol")}function qJ4(A,D){if(/^\s*--(upload|receive)-pack/.test(A))throw new $U(void 0,"unsafe","Use of --upload-pack or --receive-pack is not permitted without enabling allowUnsafePack");if(D==="clone"&&/^\s*-u\b/.test(A))throw new $U(void 0,"unsafe","Use of clone with option -u is not permitted without enabling allowUnsafePack");if(D==="push"&&/^\s*--exec\b/.test(A))throw new $U(void 0,"unsafe","Use of push with option --exec is not permitted without enabling allowUnsafePack")}function WJ4({allowUnsafeProtocolOverride:A=!1,allowUnsafePack:D=!1}={}){return{type:"spawn.args",action(_,Q){return _.forEach((B,E)=>{let z=E<_.length?_[E+1]:"";A||VJ4(B,z),D||qJ4(B,Q.method)}),_}}}L4();function MJ4(A){let D=Fc(A,"-c");return{type:"spawn.args",action(_){return[...D,..._]}}}L4();var k2A=sS.deferred().promise;function OJ4({onClose:A=!0,onExit:D=50}={}){function _(){let B=-1,E={close:sS.deferred(),closeTimeout:sS.deferred(),exit:sS.deferred(),exitTimeout:sS.deferred()},z=Promise.race([A===!1?k2A:E.closeTimeout.promise,D===!1?k2A:E.exitTimeout.promise]);return Q(A,E.close,E.closeTimeout),Q(D,E.exit,E.exitTimeout),{close(J){B=J,E.close.done()},exit(J){B=J,E.exit.done()},get exitCode(){return B},result:z}}function Q(B,E,z){if(B===!1)return;(B===!0?E.promise:E.promise.then(()=>VP1(B))).then(z.done)}return{type:"spawn.after",async action(B,{spawned:E,close:z}){let J=_(),X=!0,G=()=>void(X=!1);E.stdout?.on("data",G),E.stderr?.on("data",G),E.on("error",G),E.on("close",(Y)=>J.close(Y)),E.on("exit",(Y)=>J.exit(Y));try{if(await J.result,X)await VP1(50);z(J.exitCode)}catch(Y){z(J.exitCode,Y)}}}}L4();var NJ4="Invalid value supplied for custom binary, requires a single string or an array containing either one or two strings",x2A="Invalid value supplied for custom binary, restricted characters must be removed or supply the unsafe.allowUnsafeCustomBinary option";function LJ4(A){return!A||!/^([a-z]:)?([a-z0-9/.\\_-]+)$/i.test(A)}function g2A(A,D){if(A.length<1||A.length>2)throw new $U(void 0,"binary",NJ4);if(A.some(LJ4))if(D)console.warn(x2A);else throw new $U(void 0,"binary",x2A);let[Q,B]=A;return{binary:Q,prefix:B}}function PJ4(A,D=["git"],_=!1){let Q=g2A(n$(D),_);A.on("binary",(B)=>{Q=g2A(n$(B),_)}),A.append("spawn.binary",()=>{return Q.binary}),A.append("spawn.args",(B)=>{return Q.prefix?[Q.prefix,...B]:B})}qH();function RJ4(A){return!!(A.exitCode&&A.stdErr.length)}function TJ4(A){return Buffer.concat([...A.stdOut,...A.stdErr])}function vJ4(A=!1,D=RJ4,_=TJ4){return(Q,B)=>{if(!A&&Q||!D(B))return Q;return _(B)}}function f2A(A){return{type:"task.error",action(D,_){let Q=A(D.error,{stdErr:_.stdErr,stdOut:_.stdOut,exitCode:_.exitCode});if(Buffer.isBuffer(Q))return{error:new KU(void 0,Q.toString("utf-8"))};return{error:Q}}}}L4();var SJ4=class{constructor(){this.plugins=new Set,this.events=new yJ4}on(A,D){this.events.on(A,D)}reconfigure(A,D){this.events.emit(A,D)}append(A,D){let _=I8(this.plugins,{type:A,action:D});return()=>this.plugins.delete(_)}add(A){let D=[];return n$(A).forEach((_)=>_&&this.plugins.add(I8(D,_))),()=>{D.forEach((_)=>this.plugins.delete(_))}}exec(A,D,_){let Q=D,B=Object.freeze(Object.create(_));for(let E of this.plugins)if(E.type===A)Q=E.action(Q,B);return Q}};L4();function jJ4(A){let _=["checkout","clone","fetch","pull","push"];return[{type:"spawn.args",action(E,z){if(!_.includes(z.method))return E;return i2A(E,"--progress")}},{type:"spawn.after",action(E,z){if(!z.commands.includes("--progress"))return;z.spawned.stderr?.on("data",(J)=>{let X=/^([\s\S]+?):\s*(\d+)% \((\d+)\/(\d+)\)/.exec(J.toString("utf8"));if(!X)return;A({method:z.method,stage:bJ4(X[1]),progress:h9(X[2]),processed:h9(X[3]),total:h9(X[4])})})}}]}function bJ4(A){return String(A.toLowerCase().split(" ",1))||"unknown"}L4();function kJ4(A){let D=o2A(A,["uid","gid"]);return{type:"spawn.options",action(_){return{...D,..._}}}}function xJ4({block:A,stdErr:D=!0,stdOut:_=!0}){if(A>0)return{type:"spawn.after",action(Q,B){let E;function z(){E&&clearTimeout(E),E=setTimeout(X,A)}function J(){B.spawned.stdout?.off("data",z),B.spawned.stderr?.off("data",z),B.spawned.off("exit",J),B.spawned.off("close",J),E&&clearTimeout(E)}function X(){J(),B.kill(new $U(void 0,"timeout","block timeout reached"))}_&&B.spawned.stdout?.on("data",z),D&&B.spawned.stderr?.on("data",z),B.spawned.on("exit",J),B.spawned.on("close",J),z()}}}Kc();function gJ4(){return{type:"spawn.args",action(A){let D=[],_;function Q(B){(_=_||[]).push(...B)}for(let B=0;B<A.length;B++){let E=A[B];if(b21(E)){Q(X2A(E));continue}if(E==="--"){Q(A.slice(B+1).flatMap((z)=>b21(z)&&X2A(z)||z));break}D.push(E)}return!_?D:[...D,"--",..._.map(String)]}}}L4();var fJ4=wJ4();function uJ4(A,D){let _=new SJ4,Q=e2A(A&&(typeof A==="string"?{baseDir:A}:A)||{},D);if(!gP1(Q.baseDir))throw new CJ4(Q,"Cannot use simple-git on a directory that does not exist");if(Array.isArray(Q.config))_.add(MJ4(Q.config));return _.add(WJ4(Q.unsafe)),_.add(gJ4()),_.add(OJ4(Q.completion)),Q.abort&&_.add(IJ4(Q.abort)),Q.progress&&_.add(jJ4(Q.progress)),Q.timeout&&_.add(xJ4(Q.timeout)),Q.spawnOptions&&_.add(kJ4(Q.spawnOptions)),_.add(f2A(vJ4(!0))),Q.errors&&_.add(f2A(Q.errors)),PJ4(_,Q.binary,Q.unsafe?.allowUnsafeCustomBinary),new fJ4(Q,_)}eS();var o21=uJ4;var m9A=C0(OA(),1);class QR1{fsPath;#A;constructor(A){this.fsPath=A,this.#A=o21(A)}async listRemotes(){try{return(await this.#A.getRemotes(!0)).map((D)=>({remote:D.name,url:D.refs.fetch||D.refs.push||""}))}catch(A){throw new Error(`Failed to list remotes: ${A}`)}}async getCurrentCommit(){try{return(await this.#A.revparse(["HEAD"])).trim()}catch(A){throw new Error(`Failed to get current commit: ${A}`)}}async checkIgnore(A){return this.#A.checkIgnore(A)}async getFiles(A){try{let D=["ls-files"];if(A)D.push(A);let _=await this.#A.raw(D),Q=["ls-files","--others","--exclude-standard"];if(A)Q.push(A);let B=await this.#A.raw(Q),E=[..._.split(`
1460
1460
  `).filter(Boolean),...B.split(`
1461
- `).filter(Boolean)];return[...new Set(E)]}catch(D){throw new Error(`Failed to get files: ${D}`)}}async getCurrentBranchName(){try{let A=["--abbrev-ref","HEAD"];return(await this.#A.revparse(A)).trim()}catch(A){throw new Error(`Failed to get current branch name: ${A}`)}}async getTrackingBranchName(){try{let A=["rev-parse","--abbrev-ref","@{u}"];return(await this.#A.raw(A)).trim()}catch(A){throw new Error(`Failed to get tracking branch name: ${A}`)}}async grep(A){let D={"--untracked":null,paths:kP1(A.searchDirectory)};if(A.caseInsensitive)D["-i"]=null;return this.#A.grep(A.pattern,D)}}var hJ4=2;class Hc{#A;constructor(A){this.#A=SA(A,"[StatelessRepositoryDiscoveryService]")}async getMatchingRepository(A,D){let _=await this.getRepositoriesForWorkspace(D),Q;for(let B of _){let E=B.fsPath;if(A===E||A.startsWith(E+r21.sep)){if(E.length>(Q?.fsPath.length??0))Q=B}}return Q}async getRepositoriesForWorkspace(A){try{let _=(await this.#D(A)).map(async(E)=>{let z=r21.dirname(E),J=await this.#_(z);return{repositoryPath:z,isValid:J}}),B=(await Promise.all(_)).filter(({isValid:E})=>E).map(({repositoryPath:E})=>new QR1(E));return u9A.default.sortBy(B,(E)=>E.fsPath)}catch(D){return this.#A.debug(`Failed to scan workspace ${A}`,D),[]}}async#D(A,D=0){try{let _=await mJ4.readdir(A,{withFileTypes:!0}),Q=_.filter((X)=>X.isDirectory()).map((X)=>({name:X.name,fullPath:r21.join(A,X.name)})),B=_.filter(({name:X})=>X===".git").map(({name:X})=>r21.join(A,X));if(D>=hJ4)return B;let z=Q.filter(({name:X})=>X!==".git"&&!rV0.includes(X)).map(({fullPath:X})=>X).map((X)=>this.#D(X,D+1)),J=await Promise.all(z);return[...B,...J.flat()]}catch(_){return this.#A.debug(`Failed to read directory ${A}`,_),[]}}async#_(A){try{return await o21(A).checkIsRepo()}catch(D){return this.#A.debug(`Invalid repository at ${A}`,D),!1}}}Hc=l0([m9A.Injectable(W3,[ZA])],Hc);import{readFile as pJ4,stat as cJ4,writeFile as h9A,mkdir as dJ4,lstat as lJ4,readlink as iJ4}from"node:fs/promises";import{realpathSync as aJ4}from"node:fs";import{dirname as nJ4}from"node:path";var c9A=C0(OA(),1);var p9A=(A)=>(D)=>{if(D instanceof Error&&"code"in D&&D.code==="ENOENT")throw new Vp(A,D);throw D};class Vc{priority=We0;async getText(A){return pJ4(A,"utf-8").catch(p9A(A))}async updateFile(A,D){let _=await this.getText(A);this.#D(_,D);let Q=this.#A(_,D),B=await cJ4(A).catch(p9A(A));await h9A(A,Q,{mode:B.mode})}async writeFile(A,D){await dJ4(nJ4(A),{recursive:!0}),await h9A(A,D)}#A(A,D){let _=[...D].sort((B,E)=>{let z=this.#_(A,B.range.start);return this.#_(A,E.range.start)-z}),Q=A;for(let B of _){let E=this.#_(Q,B.range.start),z=this.#_(Q,B.range.end);Q=Q.slice(0,E)+B.newText+Q.slice(z)}return Q}#D(A,D){if(D.length<=1)return;let _=D.map((Q)=>{let B=this.#_(A,Q.range.start),E=this.#_(A,Q.range.end);return{start:B,end:E,edit:Q}});_.sort((Q,B)=>Q.start-B.start);for(let Q=0;Q<_.length-1;Q++){let B=_[Q],E=_[Q+1];if(B.end>E.start)throw new Error(`Overlapping text edits detected: edit at ${B.start}-${B.end} overlaps with edit at ${E.start}-${E.end}`)}}#_(A,D){let _=A.split(/(\r\n|\r|\n)/),Q=0,B=0;if(D.line<0)return Math.max(0,D.character);for(let E=0;E<_.length;E++){let z=_[E],J=z===`
1461
+ `).filter(Boolean)];return[...new Set(E)]}catch(D){throw new Error(`Failed to get files: ${D}`)}}async grep(A){let D={"--untracked":null,paths:kP1(A.searchDirectory)};if(A.caseInsensitive)D["-i"]=null;return this.#A.grep(A.pattern,D)}}var hJ4=2;class Hc{#A;constructor(A){this.#A=SA(A,"[StatelessRepositoryDiscoveryService]")}async getMatchingRepository(A,D){let _=await this.getRepositoriesForWorkspace(D),Q;for(let B of _){let E=B.fsPath;if(A===E||A.startsWith(E+r21.sep)){if(E.length>(Q?.fsPath.length??0))Q=B}}return Q}async getRepositoriesForWorkspace(A){try{let _=(await this.#D(A)).map(async(E)=>{let z=r21.dirname(E),J=await this.#_(z);return{repositoryPath:z,isValid:J}}),B=(await Promise.all(_)).filter(({isValid:E})=>E).map(({repositoryPath:E})=>new QR1(E));return u9A.default.sortBy(B,(E)=>E.fsPath)}catch(D){return this.#A.debug(`Failed to scan workspace ${A}`,D),[]}}async#D(A,D=0){try{let _=await mJ4.readdir(A,{withFileTypes:!0}),Q=_.filter((X)=>X.isDirectory()).map((X)=>({name:X.name,fullPath:r21.join(A,X.name)})),B=_.filter(({name:X})=>X===".git").map(({name:X})=>r21.join(A,X));if(D>=hJ4)return B;let z=Q.filter(({name:X})=>X!==".git"&&!rV0.includes(X)).map(({fullPath:X})=>X).map((X)=>this.#D(X,D+1)),J=await Promise.all(z);return[...B,...J.flat()]}catch(_){return this.#A.debug(`Failed to read directory ${A}`,_),[]}}async#_(A){try{return await o21(A).checkIsRepo()}catch(D){return this.#A.debug(`Invalid repository at ${A}`,D),!1}}}Hc=l0([m9A.Injectable(W3,[ZA])],Hc);import{readFile as pJ4,stat as cJ4,writeFile as h9A,mkdir as dJ4,lstat as lJ4,readlink as iJ4}from"node:fs/promises";import{realpathSync as aJ4}from"node:fs";import{dirname as nJ4}from"node:path";var c9A=C0(OA(),1);var p9A=(A)=>(D)=>{if(D instanceof Error&&"code"in D&&D.code==="ENOENT")throw new Vp(A,D);throw D};class Vc{priority=We0;async getText(A){return pJ4(A,"utf-8").catch(p9A(A))}async updateFile(A,D){let _=await this.getText(A);this.#D(_,D);let Q=this.#A(_,D),B=await cJ4(A).catch(p9A(A));await h9A(A,Q,{mode:B.mode})}async writeFile(A,D){await dJ4(nJ4(A),{recursive:!0}),await h9A(A,D)}#A(A,D){let _=[...D].sort((B,E)=>{let z=this.#_(A,B.range.start);return this.#_(A,E.range.start)-z}),Q=A;for(let B of _){let E=this.#_(Q,B.range.start),z=this.#_(Q,B.range.end);Q=Q.slice(0,E)+B.newText+Q.slice(z)}return Q}#D(A,D){if(D.length<=1)return;let _=D.map((Q)=>{let B=this.#_(A,Q.range.start),E=this.#_(A,Q.range.end);return{start:B,end:E,edit:Q}});_.sort((Q,B)=>Q.start-B.start);for(let Q=0;Q<_.length-1;Q++){let B=_[Q],E=_[Q+1];if(B.end>E.start)throw new Error(`Overlapping text edits detected: edit at ${B.start}-${B.end} overlaps with edit at ${E.start}-${E.end}`)}}#_(A,D){let _=A.split(/(\r\n|\r|\n)/),Q=0,B=0;if(D.line<0)return Math.max(0,D.character);for(let E=0;E<_.length;E++){let z=_[E],J=z===`
1462
1462
  `||z===`\r
1463
1463
  `||z==="\r";if(B===D.line&&!J){let X=Math.max(0,Math.min(D.character,z.length));return Q+X}if(Q+=z.length,J)B++}if(B===D.line)return Q+Math.max(0,D.character);return A.length}async realPath(A,D=new Set){try{if(!D.has(A)&&await this.#Q(A)){D.add(A);let _=await iJ4(A);return await this.realPath(_,D)}return aJ4(A)}catch(_){let Q=_;if(Q.code==="ENOENT"||Q.code==="ENOTDIR")return Q.path??"";return""}}async#Q(A){try{return(await lJ4(A)).isSymbolicLink()}catch{return!1}}}Vc=l0([c9A.Injectable(UE,[])],Vc);var l9A=C0(OA(),1);var d9A=C0(OA(),1),RX=d9A.createInterfaceId("CliRunConfig");class qc{#A;constructor(A,D,_){let{gitlabBaseUrl:Q,gitlabAuthToken:B}=A;this.#A=new NE1(D,_,{name:"Duo Cli",version:mQ()},Q,B)}fetchFromApi(A){return this.#A.fetchFromApi(A)}fetchFromApiRaw(A){return this.#A.fetchFromApiRaw(A)}fetchOperation(A){return this.#A.fetchOperation(A)}connectToCable(){throw new Error("Method not implemented.")}onApiReconfigured(){return{dispose(){}}}getSimpleClient(){return this.#A}}qc=l0([l9A.Injectable(f8,[RX,ZA,tC])],qc);var a9A=C0(OA(),1);var i9A=C0(OA(),1);var Aj=i9A.createInterfaceId("CliBackend");var Dj=C0(OA(),1);var Mc=Dj.createInterfaceId("ToolInputFormatter");class Wc{#A;constructor(A){this.#A=new Map(A.map((D)=>[D.name,D]))}formatToolInput(A,D){let _=this.#A.get(A);if(_?.formatInput)return _.formatInput(D);return{type:"text",value:JSON.stringify(D,null,2)}}}Wc=l0([Dj.Injectable(Mc,[Dj.collection(m8)])],Wc);class Oc{id="gitlab";#A;#D;#_;#Q;#B;#E;#z;#J;#X;#Y="";#G="";#F;constructor(A,D,_,Q,B,E,z,J){this.#A=A,this.#D=D,this.#_=_,this.#Q=Q,this.#B=B,this.#E=E,this.#z=z,this.#J=J}async initialize(){this.#Q.set("workspaceFolders",[{uri:k41.file(this.#B.cwd).toString(),name:"current folder"}]),this.#Q.set("gitHttpUser",this.#B.gitHttpUser),this.#Q.set("gitHttpPassword",this.#B.gitHttpPassword);let A=await this.#U();if(A)this.#Q.set("projectPath",A.namespaceWithPath);else this.#Q.set("projectPath","gitlab-org/gitlab");if(this.#B.command.name==="run"&&this.#B.command.existingSessionId)this.#X=this.#B.command.existingSessionId;else try{this.#X=await this.#V()}catch(D){this.#D.error("Failed to initialize workflow",D)}}get#K(){let A="chat";if(this.#B.command.name==="run")A=this.#B.command.workflowType;return A}async#U(){let{cwd:A}=this.#B,D=await this.#E.getMatchingRepository(A,A);if(!D){this.#D.warn(`Failed to detect a repository at the cwd: "${A}". Some features may be unavailable.`);return}let _=await oV0(D,this.#B.gitlabBaseUrl);if(!_||!_.namespaceWithPath){this.#D.warn(`Failed to detect GitLab remote for repository at: "${A}". Some features may be unavailable.`);return}try{this.#F=await this.#z.getProjectFromPathWithNamespace(_.namespaceWithPath)}catch(Q){this.#D.error(`Error while fetching project details for repository "${A}" as "${_.namespaceWithPath}". Some features may be unavailable.`,Q);return}return _}#$(A,D){if("program"in A&&"program"in D)return A.program===D.program;return JSON.stringify(A)===JSON.stringify(D)}#H(A){let D=[],_=nH0(A);if(_.isErr())return this.#D.error("Failed to parse workflow checkpoint",_.error),D;let Q=_.value;if(Q.length===0)return D;let B=Q[Q.length-1],E=Q.length-1;switch(B.message_type){case"user":return D;case"agent":{let z=B.content,J=`${E}`;if(J===this.#G){if(!z.startsWith(this.#Y))this.#D.error(`Workflow Service replaced message content unexpectedly. Message ID: ${J} Previous message: "${this.#Y}", Current message: "${z}"`),D.push({type:"TEXT_CHUNK",messageId:J,content:z}),this.#Y=z;let X=z.slice(this.#Y.length);if(X.length>0)D.push({type:"TEXT_CHUNK",messageId:J,content:X}),this.#Y=z}else D.push({type:"TEXT_CHUNK",messageId:J,content:z}),this.#Y=z,this.#G=J;break}case"request":{D.push({type:"TOOL_AWAITING_APPROVAL",toolId:`${E}`,toolName:B.tool_info.name,input:this.#J.formatToolInput(B.tool_info.name,B.tool_info.args),content:B.content});break}case"tool":{let z;for(let Y=E-1;Y>=0;Y--){let $=Q[Y];if($.message_type==="request"&&$.tool_info!==null&&B.tool_info!==null&&$.tool_info.name===B.tool_info.name&&this.#$($.tool_info.args,B.tool_info.args)){z=Y;break}}let J=`${z??E}`;if(z===void 0)D.push({type:"TOOL_AWAITING_APPROVAL",toolId:J,toolName:B.tool_info?.name||"unknown tool",input:this.#J.formatToolInput(B.tool_info?.name||"unknown tool",B.tool_info?.args||{}),content:B.content});let X=B.tool_info?.tool_response,G=typeof X==="string"?X:X?.content??B.content;D.push({type:"TOOL_COMPLETE",toolId:J,result:G});break}default:break}return D}async#V(){let D;if(this.#B.command.name)D={allowAgentToRequestUser:!1,agentPrivileges:KY1,preApprovedAgentPrivileges:KY1};return this.#_.preCreateWorkflow("",this.#K,void 0,D)}async*sendMessageStream(A,D){let _,Q,B=[];if(this.#B.command.name==="run")_=this.#B.command.flowConfigSchemaVersion,Q=this.#B.command.flowConfig,B=this.#B.command.aiContextItems||[];this.#Y="",this.#G="";let E=this.#X;if(!E)try{E=await this.#V()}catch(J){this.#D.error("Error creating workflow",J),yield{type:"ERROR",message:TD(2)};return}let z=()=>{if(E)this.#D.info(`Aborting workflow ${E}`),this.#_.stopWorkflow(E)};D?.addEventListener("abort",z);try{let J={goal:A.type==="SEND_PROMPT"?A.prompt:"approve the tool call",metadata:{projectId:this.#F?.id||"",namespaceId:this.#F?.namespace.id?.toString()||""},type:this.#K,existingWorkflowId:E,additionalContext:B,toolApproval:A.type==="SEND_TOOL_APPROVAL"?{userApproved:A.approved,toolName:A.toolName,type:A.scope==="session"?"approve-for-session":"approve_once"}:void 0,flowConfig:Q,flowConfigSchemaVersion:_},X=this.#_.runWorkflow(J);for await(let G of X){if(D?.aborted){this.#D.info("Workflow cancelled by user - stopping event processing"),yield{type:"ERROR",message:"Request cancelled by user"};return}if(RW(G)){this.#D.error(`Workflow failed with status code "${G.statusCode}": ${G.message}`),yield{type:"ERROR",message:G.message};return}this.#D.debug(`[CLI/STREAM] ${JSON.stringify(G)}`);let Y=this.#H(G);for(let $ of Y)yield $}this.#D.info("Workflow completed successfully")}catch(J){this.#D.error("Workflow failed: ",J),yield{type:"ERROR",message:TD(1)}}finally{D?.removeEventListener("abort",z)}}async getWelcomeMessage(){let A={type:"graphql",query:fJ`
1464
1464
  query getUser {
@@ -1794,5 +1794,5 @@ Use this for any git operations like status, log, diff, branch operations, etc.
1794
1794
  <current_time>${_}</current_time>
1795
1795
  <user_timezone>${Q}</user_timezone>`}}Kd=l0([E3A.Injectable(JO,[ZA])],Kd);function z3A(A){A.addClass(Kd)}function J3A(A){}function X3A(A){if(P81()==="anthropic")z3A(A);else J3A(A)}async function R81(A,D){let _=new yY.ServiceCollection;if(_.add(yY.createInstanceDescriptor({instance:D,aliases:[RX]})),A?.logDestination==="stdout")_.addClass(Lc);else _.addClass(yO);_.addClass(Nc,RK,Rf,qc),_.add(yY.createFactoryDescriptor({aliases:[Up],factory:(E)=>new L41(E,E.getRequiredService(ZA)),lifetime:yY.ServiceLifetime.Singleton})),_.addClass(Tf,Ky,Zy,wy,lS,$h),_.addClass(Jc),_.addClass(Pc,pS),Sq1(_),_.addClass(Hc,iS,BS,ES,Iy,Fy,hS,YS,FS,JS,Vc,$S,KS,dS,zS,GS,ZS,XS),_.add(yY.createInstanceDescriptor({instance:{getDiagnostics:async()=>[]},aliases:[Hp]})),_.add(yY.createInstanceDescriptor({instance:{isClientFlagEnabled:()=>!1,isInstanceFlagEnabled:()=>!1,updateInstanceFeatureFlags:async()=>{}},aliases:[tq]})),_.addClass(Bg),_.addClass(uf),_.add(yY.createInstanceDescriptor({instance:{isChatFeatureEnabled:()=>Promise.resolve(!0),isSuggestionsFeatureEnabled:()=>Promise.resolve(!0)},aliases:[P41]})),_.addClass(wp,Xc),_.addClass(Fd),_.addClass(Wc),_.addClass(Oc),_.addClass(Yd,Gd),X3A(_);let Q=_.build();return await Q.getRequiredService(tC).initialize(),global.__logger=Q.getRequiredService(ZA),Q}class lR1{#A;#D;constructor(){this.#A={...v_1}}initialize(A){this.#D=A}getState(){return this.#A}setState(A){if(this.#A=A,!this.#D)throw new Error("AppStore is not initialized");this.#D(this.#A)}}class iR1{onSubmit=()=>{};onStateChange=()=>{};clear=()=>{};handleKeyPress=(A,D)=>{}}class aR1{onSubmit=()=>{};onStateChange=()=>{};#A=[];#D=0;setChoice(A){this.#A=A,this.#D=0,this.#_()}handleKeyPress=(A,D)=>{if(D.return){this.onSubmit(this.#A[this.#D]?.value);return}if(D.upArrow)this.#D=Math.max(0,this.#D-1);if(D.downArrow)this.#D=Math.min(this.#A.length-1,this.#D+1);this.#_()};#_(){this.onStateChange({inputType:Pq.CHOICE,choiceOptions:this.#A,selectedChoiceIndex:this.#D})}}class nR1{#A;#D;#_=new lR1;#Q;#B;#E;#z=new Map;#J=new iR1;#X=new aR1;#Y;#G;constructor(A,D){this.#A=A,this.#B=D,this.#J.onSubmit=(_)=>this.#H({type:"SEND_PROMPT",prompt:_}),this.#X.onSubmit=(_)=>this.#$(_),this.#J.onStateChange=(_)=>this.#_.setState({...this.#_.getState(),input:_}),this.#X.onStateChange=(_)=>this.#_.setState({...this.#_.getState(),input:_})}async initialize(){this.#_.initialize((A)=>this.#A(A)),this.#K(),this.#G=this.#F()}async#F(){let A=await R81({logDestination:"file"},this.#B),D=A.getRequiredService($d);this.#D=D.backend,this.#Q=A.getRequiredService(ZA),await this.#D.initialize(),await this.#U()}getCallbacks(){return{onKeyPress:(A,D)=>{if(D.escape&&this.#_.getState().isLoading&&this.#Y){this.#Q?.info("Cancelling stream due to ESC key press"),this.#Y.abort();return}if(this.#_.getState().input.inputType===Pq.TEXT)this.#J.handleKeyPress(A,D);else this.#X.handleKeyPress(A,D)},onSubmit:(A)=>{this.#J.onSubmit(A)},onExit:()=>this.#I(),toggleExpanded:()=>{let A=this.#_.getState();this.#_.setState({...A,expanded:!A.expanded})}}}#K(){let A={type:"message",id:"welcome",role:"assistant",content:"Hi!"};this.#_.setState({elements:[A],isLoading:!1,input:kP,expanded:!1})}async#U(){if(!this.#D)throw new Error("Backend not initialized");let A=await this.#D.getWelcomeMessage(),D=this.#_.getState();this.#_.setState({...D,elements:D.elements.map((_)=>{return _.id==="welcome"?{..._,content:A}:_}),isLoading:!1})}async#$(A){let D=this.#_.getState();if(D.isLoading)return;this.#_.setState({...D,input:kP}),await this.#V(A)}async#H(A){if(this.#_.getState().isLoading||!A.prompt.trim())return;this.#J.clear();let _={id:Date.now().toString(),type:"message",role:"user",content:A.prompt};this.#C(_),await this.#V(A)}async#V(A){if(this.#_.setState({...this.#_.getState(),input:kP,isLoading:!0}),await this.#G,!this.#D)throw new Error("Backend not initialized");this.#Y=new AbortController;try{let D;for await(let _ of this.#D.sendMessageStream(A,this.#Y.signal))D=_,this.#Z(_);if(D?.type==="TOOL_AWAITING_APPROVAL"){let _={type:"SEND_TOOL_APPROVAL",scope:"session",toolId:D.toolId,toolName:D.toolName};this.#X.setChoice([{label:"Approve",value:{..._,approved:!0}},{label:"Reject",value:{..._,approved:!1}}])}}catch(D){this.#Q?.error("Error in message streaming",D),this.#Z({type:"ERROR",message:"Sorry, there was an error processing your message. Please try again."})}finally{this.#E=void 0,this.#z.clear(),this.#Y=void 0,this.#_.setState({...this.#_.getState(),isLoading:!1})}}#C(A){let D=this.#_.getState();this.#_.setState({...D,elements:[...D.elements,A]})}#Z(A){if(!this.#_)throw new Error("Store not initialized");let D=this.#_.getState();switch(A.type){case"TEXT_CHUNK":{if(!this.#E||this.#E.id!==A.messageId)this.#E={id:A.messageId,type:"message",role:"assistant",content:A.content},this.#C(this.#E);else{this.#E.content+=A.content;let _=D.elements.map((Q)=>Q.type==="message"&&Q.id===A.messageId&&this.#E?this.#E:Q);this.#_.setState({...D,elements:_})}break}case"TOOL_START":{let _={id:A.toolId,type:"tool",name:A.name,input:A.input,state:{type:"loading"}};this.#z.set(A.toolId,_),this.#w(_);break}case"TOOL_AWAITING_APPROVAL":{let _={id:A.toolId,type:"tool",name:A.toolName,input:A.input,state:{type:"approval_request",content:""}};this.#z.set(A.toolId,_),this.#w(_);break}case"TOOL_COMPLETE":{let _=this.#z.get(A.toolId);if(_){let Q={..._,state:A.error?{type:"error",error:A.error}:{type:"success",output:A.result}};this.#w(Q),this.#z.delete(A.toolId)}break}case"ERROR":{this.#Q?.error("Agent error:",A.message);let _={id:`error-${Date.now()}`,type:"error",error:`${A.message}`};this.#C(_);break}default:this.#Q?.warn("Unknown agent event type:",A);break}}#w(A){let D=this.#_.getState(),_=D.elements.findIndex((B)=>B.type==="tool"&&B.id===A.id);if(_<0){this.#C(A);return}let Q=[...D.elements];Q[_]=A,this.#_.setState({...D,elements:Q})}#I(){process.exit(0)}}var ZG4=({runConfig:A,children:D})=>{if(A.environment==="development")return _A(uO.StrictMode,{children:D});return _A(rw,{children:D})},UG4=({runConfig:A})=>{let[D,_]=uO.useState(void 0),[Q]=uO.useState(()=>new nR1(_,A));if(uO.useEffect(()=>{Ug(Q.initialize())},[Q]),!D)return _A(S0,{children:"Initializing..."});return _A(T_1,{state:D,callbacks:Q.getCallbacks()})},G3A=(A)=>{process.stdout.write("\x1B[?2004h");let{waitUntilExit:D}=cb(_A(ZG4,{runConfig:A,children:_A(UG4,{runConfig:A})}),{exitOnCtrlC:!1});D().then(()=>{process.exit(0)}).catch((_)=>{console.error(_),process.exit(1)}),process.on("exit",()=>{process.stdout.write("\x1B[?2004l")})};class oR1{#A;#D;#_;#Q=null;constructor(A){this.#_=A}async initialize(){let A=await R81({logDestination:"stdout"},this.#_),D=A.getRequiredService($d);this.#A=D.backend,this.#D=A.getRequiredService(ZA),await this.#A.initialize()}async execute(){if(!this.#A||this.#_.command?.name!=="run")throw new Error("Controller not initialized. Call initialize() first.");let{goal:A}=this.#_.command;this.#D?.info(`Executing workflow: ${JSON.stringify({goal:A},null,4)}`);let D={id:Date.now().toString(),type:"message",role:"user",content:A};try{let _;for await(let Q of this.#A.sendMessageStream({type:"SEND_PROMPT",prompt:D.content}))this.#B(Q),_=Q;if(this.#Q)this.#D?.info(JSON.stringify(this.#Q,null,2));process.exit(_?.type==="ERROR"?1:0)}catch(_){throw this.#D?.error("Workflow failed:",_ instanceof Error?_.message:String(_)),_}}#B(A){switch(A.type){case"TEXT_CHUNK":{if(!this.#Q||this.#Q.id!==A.messageId){if(this.#Q)this.#D?.info(JSON.stringify(this.#Q,null,4));this.#Q={id:A.messageId,type:"message",role:"assistant",content:A.content}}else this.#Q.content+=A.content;break}case"TOOL_START":{this.#D?.info(`Tool started: ${A.name}`);break}case"TOOL_COMPLETE":{if(this.#D?.info(`Tool completed: ${A.toolId}`),A.error)this.#D?.error(`Tool error: ${A.error}`);break}case"TOOL_AWAITING_APPROVAL":break;case"ERROR":{this.#D?.error(`Error: ${A.message}`);break}default:{let D=A;this.#D?.warn(`Unexpected event received: ${JSON.stringify(D)}`);break}}}}var rR1=()=>{return"production"};import{statSync as wG4}from"node:fs";import{isAbsolute as CG4,normalize as IG4,resolve as HG4}from"node:path";function Y3A(A,D=process.cwd()){let _;if(CG4(A))_=IG4(A);else _=HG4(D,A);return VG4(_),_}function VG4(A){try{if(!wG4(A).isDirectory())throw new yw(`Path "${A}" exists but is not a directory`)}catch(D){if(D instanceof Error&&D.code==="ENOENT")throw new yw(`Directory "${A}" does not exist`);throw D}}function F3A(A){try{let D=JSON.parse(A);return qN1.array().parse(D).map((_)=>({..._,metadata:_.metadata||{}}))}catch(D){if(D instanceof SyntaxError)throw new yw(`Invalid JSON format: ${D.message}`);throw new yw(`AI Context Item schema error: ${D}`)}}var R3A=C0(L3A(),1),j81=C0(OA(),1);import{join as tG4,dirname as eG4}from"path";import{mkdirSync as AY4,existsSync as S81,writeFileSync as DY4,accessSync as P3A,constants as QT1,promises as wd}from"fs";import{homedir as _Y4}from"node:os";var b81=j81.createInterfaceId("PersistentStorage");class Kj{#A;#D;#_;constructor(A,D){this.#D=SA(A,"[PersistentStorage]");try{if(D)this.#A=D;else{let _=process.env.GITLAB_LSP_STORAGE_DIR||_Y4();this.#A=tG4(_,".gitlab","storage.json")}this.#D.info(`Initializing storage at: ${this.#A}`),this.#Q()}catch(_){this.#D.error("Failed to construct PersistentStorage:",_),this.#_={status:"failed",error:_}}}#Q(){try{let A=eG4(this.#A);if(this.#D.debug(`Creating directory: ${A}`),!S81(A))AY4(A,{recursive:!0}),this.#D.debug(`Directory created: ${A}`);try{P3A(A,QT1.W_OK)}catch(D){let _=new Error(`Cannot write to directory: ${A}`);throw this.#D.error("Directory write permission error:",D),_}if(!S81(this.#A))this.#D.debug("Creating initial storage file"),DY4(this.#A,JSON.stringify({}),"utf8");else try{P3A(this.#A,QT1.R_OK|QT1.W_OK),this.#D.debug("Storage file is accessible")}catch(D){let _=new Error(`Cannot access storage file: ${this.#A}`);throw this.#D.error("Storage access error:",D),_}this.#_={status:"initialized"},this.#D.info("Persistent storage initialized successfully")}catch(A){this.#_={status:"failed",error:A},this.#D.error("Failed to initialize persistent storage",A)}}isInitialized(){return this.#_?.status==="initialized"}async#B(){try{let A=await wd.readFile(this.#A,"utf8");return JSON.parse(A)}catch(A){this.#D.error("Failed to read storage file, recreating with empty data",A);try{if(S81(this.#A))await wd.unlink(this.#A),this.#D.info("Corrupted storage file removed");let D={};return await wd.writeFile(this.#A,JSON.stringify(D,null,2),"utf8"),this.#D.info("Storage file recreated with empty data"),D}catch(D){return this.#D.error("Failed to recreate storage file",D),{}}}}async#E(A){try{await wd.writeFile(this.#A,JSON.stringify(A,null,2),"utf8")}catch(D){throw this.#D.error("Failed to write storage file",D),D}}async#z(A){let D=null;try{if(!S81(this.#A))this.#D.debug("Storage file does not exist, creating it before locking"),await wd.writeFile(this.#A,JSON.stringify({}),"utf8");return D=await R3A.lock(this.#A,{retries:{retries:5,minTimeout:100,maxTimeout:1000},stale:5000}),await A()}catch(_){throw this.#D.error("Lock operation failed",_),_}finally{if(D)try{await D()}catch(_){this.#D.error("Failed to release lock",_)}}}async get(A){try{if(!this.isInitialized())throw this.#D.error(`Storage is not initialized: ${this.#_?.status==="failed"&&this.#_.error.message||"unknown error"}`),new Error("Storage is not initialized");this.#D.debug(`Getting value for key: ${A}`);let _=(await this.#B())[A];if(_===void 0){this.#D.debug(`No value found for key: ${A}`);return}return _}catch(D){throw this.#D.error(`Storage get error for key: ${A}`,D),D}}async set(A,D){if(!this.isInitialized())throw new Error("Storage is not initialized");this.#D.debug(`Setting value for key: ${A}`),await this.#z(async()=>{let _=await this.#B();_[A]=D,await this.#E(_),this.#D.debug(`Successfully set value for key: ${A}`)})}async delete(A){if(!this.isInitialized())throw new Error("Storage is not initialized");this.#D.debug(`Deleting value for key: ${A}`),await this.#z(async()=>{let D=await this.#B();if(D[A]!==void 0)delete D[A],await this.#E(D),this.#D.debug(`Successfully deleted value for key: ${A}`);else this.#D.debug(`Key not found for deletion: ${A}`)})}close(){this.#D.info("Storage closed"),this.#_={status:"closed"}}}Kj=l0([j81.Injectable(b81,[ZA])],Kj);var x81=C0(OA(),1);var T3A="selectedProjectInRepository",QY4=d.object({accountId:d.string(),namespaceWithPath:d.string(),remoteName:d.string(),remoteUrl:d.string(),repositoryRootPath:d.string()}),BT1={telemetry:d.object({enabled:d.boolean()})},ET1={telemetry:d.object({enabled:d.boolean()}),[T3A]:d.array(QY4)};var v3A=x81.createInterfaceId("UserPersistentStorage"),zT1="__global__";class k81{#A;#D;#_;#Q;constructor(A,D,_,Q){this.#A=A,this.#D=D,this.#_=_,this.#Q=SA(Q,"[UserPersistentStorage]")}#B(A,D,_){let Q=_.safeParse(D);if(Q.success)return Q.data;this.#Q.warn(`Validation failed for key: ${A} - error: ${JSON.stringify(Q.error.format())}, value: ${JSON.stringify(D)}`);return}#E(A,D,_){return`${A}:${D}:${_}`}async#z(A,D,_){try{let Q=this.#G;if(!Q){this.#Q.warn("No user ID available");return}let B=this.#E(Q,A,D);this.#Q.debug(`Getting value for key: ${D} - userId: ${Q}, client: ${A}`);let E=await this.#A.get(B);if(E===void 0){this.#Q.debug(`No value found for key: ${D}`);return}let z=this.#B(D,E,_);if(z===void 0)this.#Q.warn(`Stored value failed validation for key: ${D}`);return z}catch(Q){this.#Q.error(`Storage get error for key: ${D}`,Q);return}}async#J(A,D,_,Q){let B=this.#G;if(!B){this.#Q.warn("No user ID available, cannot set value");return}let E;try{E=Q.parse(_)}catch(J){throw this.#Q.error(`Validation failed for key: ${D}`,J),new Error(`Invalid value for key ${D}: ${J}`)}let z=this.#E(B,A,D);this.#Q.debug(`Setting value for key: ${D} - userId: ${B}, client: ${A}`),await this.#A.set(z,E),this.#Q.debug(`Successfully set value for key: ${D}`)}async#X(A,D){let _=this.#G;if(!_){this.#Q.warn("No user ID available, cannot delete value");return}let Q=this.#E(_,A,D);this.#Q.debug(`Deleting value for key: ${D} - userId: ${_}, client: ${A}`),await this.#A.delete(Q),this.#Q.debug(`Successfully deleted value for key: ${D}`)}async get(A){let D=this.#Y;if(!D)return;return await this.#z(D,A,ET1[A])}async set(A,D){let _=this.#Y;if(!_){this.#Q.warn("No client name available, cannot set value");return}await this.#J(_,A,D,ET1[A])}async delete(A){let D=this.#Y;if(!D){this.#Q.warn("No client name available, cannot delete value");return}await this.#X(D,A)}async getGlobal(A){return await this.#z(zT1,A,BT1[A])}async setGlobal(A,D){return this.#J(zT1,A,D,BT1[A])}async deleteGlobal(A){return this.#X(zT1,A)}get#Y(){let A=this.#D.get("clientInfo.name");if(!A){this.#Q.warn("No client name in config");return}return A}get#G(){let A=this.#_.user?.id;if(!A)this.#Q.debug("No user ID available from UserService");return A}}k81=l0([x81.Injectable(v3A,[b81,E_,oq,ZA])],k81);var BY4=d.object({gitlabBaseUrl:d.string().optional(),gitlabAuthToken:d.string().optional()}),y3A="duo-cli-config";class S3A{#A;#D;#_;constructor(A,D,_){this.#A=A,this.#_=_,this.#D=D}async saveConfig(A){try{let{configurationEntries:D}=A,_={gitlabAuthToken:"",gitlabBaseUrl:""};for(let Q of D){let B=Q.key;if(B in _)_[B]=Q.value}return this.#A=_,await this.#D.set(y3A,_),o_()}catch(D){return this.#_.error("Failed to save configuration:",D),Lz(D)}}exit(){process.exit(0)}getDuoConfiguration(){return this.#A}async initialize(){let A=await this.#D.get(y3A),D=BY4.safeParse(A);if(D.success)this.#A={...D.data,...this.#A}}isMissingConfiguration(){let{gitlabAuthToken:A,gitlabBaseUrl:D}=this.#A;return!A||!D}getConfigurationModel(){return{configurationEntries:[{key:"gitlabBaseUrl",value:this.#A.gitlabBaseUrl??"",displayName:"\uD83D\uDD17 GitLab Instance URL",description:"The URL of the GitLab instance to connect to.",defaultValue:"https://gitlab.com",isSensitive:!1},{key:"gitlabAuthToken",value:this.#A.gitlabAuthToken??"",displayName:"\uD83D\uDD16 GitLab Token",description:"GitLab access token with API permissions. Create one here: https://gitlab.com/-/user_settings/personal_access_tokens",defaultValue:"",isSensitive:!0}]}}}var JT1=async(A={})=>{let D=new yO,_=new t21("info"),Q=new RK(D,_),B=new Kj(Q),E=new S3A(A,B,Q);return await E.initialize(),E};var XT1=(A)=>{process.stdout.write("\x1B[?2004h");let D=A.getConfigurationModel(),_=mQ(),{waitUntilExit:Q}=cb(_A(Z10,{initialState:D,controller:A,duoCliVersion:_}),{exitOnCtrlC:!1});Q().then(()=>{process.exit(0)}).catch((B)=>{console.error(B),process.exit(1)}),process.on("exit",()=>{process.stdout.write("\x1B[?2004l")})};var EY4=process.platform==="win32",g81=B3A(),WU=new TT1,GT1=(A)=>{(global.__logger||console).error(A),process.exit(1)};process.on("unhandledRejection",GT1);process.on("uncaughtException",GT1);WU.name("duo").description("GitLab Duo for your command line");WU.name("duo").description("GitLab Duo for your command line").option("-C, --cwd <path>","change working directory",(A)=>Y3A(A),process.cwd()).addOption(new PQ("--gitlab-base-url <url>","Base URL of GitLab instance").env("GITLAB_URL").default(process.env.GITLAB_BASE_URL||"https://gitlab.com")).addOption(new PQ("--gitlab-auth-token <token>","Authentication token for GitLab instance").env("GITLAB_TOKEN").default(process.env.GITLAB_OAUTH_TOKEN)).addOption(new PQ("--log-level <level>","Set logging level").choices(Object.values(v_)).env("LOG_LEVEL").default(v_.DEBUG)).addOption(new PQ("--git-http-user <user>","Username for git HTTP authentication credentials").env("DUO_WORKFLOW_GIT_HTTP_USER")).addOption(new PQ("--git-http-password <password>","Password for git HTTP authentication credentials").env("DUO_WORKFLOW_GIT_HTTP_PASSWORD"));g81.registerOptions(WU.action(async(A)=>{let D=WU.opts(),{cwd:_,logLevel:Q,gitHttpUser:B,gitHttpPassword:E}=D,z=await JT1(D);if(z.isMissingConfiguration()){XT1(z);return}let X=z.getDuoConfiguration(),G=g81.mapConfig({cwd:_,logLevel:Q,gitlabBaseUrl:X.gitlabBaseUrl,gitlabAuthToken:X.gitlabAuthToken,environment:rR1(),gitHttpUser:B,gitHttpPassword:E,command:{name:"tui"}},{programConfig:D,commandConfig:A});G3A(G)}));var zY4=WU.command("config").description("configuration management commands");zY4.command("edit").description("edit duo CLI configuration").action(async()=>{let A=await JT1();XT1(A)});var f81=WU.command("log").description("log management commands");f81.command("last").description("open the last log file").action(()=>{Xv1()});f81.command("list").description("list all log files").action(()=>{Gv1()});f81.command("tail [args...]").description(`tail the last log file. "args" can be any standard ${EY4?'PowerShell "Get-Content"':'"tail"'} arguments`).allowUnknownOption().action((A)=>Yv1(A||[]));f81.command("clear").description("remove all existing log files").action(()=>{Fv1()});g81.registerOptions(WU.command("run").description("Run a workflow in non-interactive / headless mode").addOption(new PQ("-g, --goal <goal>","Goal/prompt for the session").default(process.env.DUO_WORKFLOW_GOAL).makeOptionMandatory()).addOption(new PQ("--ai-context-items <contextItems>","JSON encoded array of additional context items").default(process.env.DUO_WORKFLOW_ADDITIONAL_CONTEXT_CONTENT).argParser((A)=>F3A(A))).addOption(new PQ("--existing-session-id <sessionId>","ID of existing session to resume").default(process.env.DUO_WORKFLOW_WORKFLOW_ID)).action(async(A)=>{let D=WU.opts(),{cwd:_,gitlabBaseUrl:Q,gitlabAuthToken:B,logLevel:E,gitHttpUser:z,gitHttpPassword:J}=D,{goal:X,aiContextItems:G}=A;if(!B)throw new yw("--gitlab-auth-token / GITLAB_AUTH_TOKEN option is required.");let Y=g81.mapConfig({cwd:_,gitlabBaseUrl:Q,gitlabAuthToken:B,logLevel:E,environment:rR1(),gitHttpUser:z,gitHttpPassword:J,command:{name:"run",goal:X,aiContextItems:G}},{programConfig:D,commandConfig:A}),$=new oR1(Y);await $.initialize(),await $.execute()}));try{await WU.parseAsync(process.argv)}catch(A){GT1(A)}
1796
1796
 
1797
- //# debugId=F497CDE1895B142C64756E2164756E21
1797
+ //# debugId=CAD8B73EBCF2829264756E2164756E21
1798
1798
  //# sourceMappingURL=index.js.map