@gitlab/duo-cli 8.19.0 → 8.19.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
@@ -968,7 +968,7 @@ ${ToA(_)}`:""};if(typeof D==="string"){let F=Q?`
968
968
  ${B(Q)}`:"";this.#F(`${D}${F}${E(Q)}`,A)}else{let F=fP1(D);if(!F)return;this.#F(`${B(F)}${E(D)}`,A)}}#F(A,D){let Q=`${bP1.default().format("YYYY-MM-DDTHH:mm:ss:SSS")} [${D}]: `,B=(E)=>E.replace(/\n/g,`
969
969
  ${" ".repeat(PoA)}`);this.#A.write(`${Q}${B(A)}`)}setContext(A){this.#Q=A}debug(A,D){this.#B(V7.DEBUG,A,D)}info(A,D){this.#B(V7.INFO,A,D)}warn(A,D){this.#B(V7.WARNING,A,D)}error(A,D){this.#B(V7.ERROR,A,D)}withContext(A){let D=new _U(this.#A,this.#D);return D.setContext(A),D}}_U=U0([kP1.Injectable(p0,[FU,ER])],_U);function xP1(A){return(A.split(`
970
970
  `).find((D)=>D.trim())??A.replace(`
971
- `,"")).trim()}function SoA(A){return xP1(A).match(/^(query|mutation|subscription)\s+/)?.[1]}function joA(A){return xP1(A).match(/(?:query|mutation|subscription)\s+(\w+)/)?.[1]}function Fk(A){let D=SoA(A),Q=joA(A);if(D)return`${D}: ${Q??"anonymous"}`;return}var yoA=(A)=>{if(A.method==="GET"||A.method==="HEAD")return;if(!A.body)return;return sD("Body",JSON.stringify(A.body))},voA=(A)=>{if(A.method==="POST"||A.method==="PATCH"||A.method==="PUT")return;if(!A.searchParams)return;return sD("Search Params",JSON.stringify(A.searchParams))},foA=(A)=>{if(!A.headers)return;return sD("Headers",JSON.stringify(A.headers))},FR=(A)=>{switch(A.type){case"graphql":return XF("GraphQL Request",sD("Query",A.query.replace(/[\s\n]+/g," ").trim()),sD("Variables",JSON.stringify(A.variables)));case"rest":return XF("REST Request",sD("Method",A.method),sD("Path",A.path),foA(A),voA(A),yoA(A));default:return sD("Unknown request type",A.type)}};var mP1=(A)=>{try{return JSON.parse(A)?.error}catch{return}},boA=(A)=>{if(!A)return"";try{return JSON.parse(A)?.error_description??""}catch{return""}},ns=(A,D)=>Boolean(A.status===401&&D&&mP1(D)==="invalid_token"),os=(A,D)=>Boolean(A.status===400&&D&&mP1(D)==="invalid_grant");class _k extends Error{request;cause;constructor(A,D,Q){super(A);this.request=D,this.cause=Q?.cause}get sanitizedMessage(){return"API request failed"}}class rs extends _k{status;constructor(A,D,Q,B){super(A,D,B);this.status=Q}}class pP1 extends rs{type="rest";response;#A;constructor(A,D,Q,B){let E=`Fetching ${Q} from ${D.url} failed. ${boA(B)}`;if(ns(D,B))E=`Request for ${Q} failed because the token is expired or revoked.`;if(os(D,B))E="Request to refresh token failed, because it's revoked or already refreshed.";super(E,A,D.status);this.response=D,this.#A=B}isInvalidTokenOrInvalidRefresh(){return ns(this.response,this.#A)||os(this.response,this.#A)}get ctx(){return XF("Error details",FR(this.request),this.#D())}get sanitizedMessage(){if(ns(this.response,this.#A))return"Request failed because the token is expired or revoked.";if(os(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 XF("Response",sD("Status",String(this.status)),!hP1.default.isEmpty(A)?sD("Headers",JSON.stringify(A)):void 0,this.#A?sD("Response body",this.#A):void 0)}get body(){return this.#A}}var uP1=(A)=>A.errors?.map((D)=>D.message).join(",")||"";class ss extends rs{type="graphql";graphQlResponse;#A;constructor(A,D){let Q=Fk(A.query),B=`GraphQL request "${Q}" failed with ${uP1(D)}`;super(B,A,D.status);this.graphQlResponse=D,this.#A=Q}get sanitizedMessage(){return`GraphQL request "${this.#A}" failed with status ${this.graphQlResponse.status}`}get ctx(){return XF("Error details",FR(this.request),this.#D())}#D(){return XF("Response",sD("Status",String(this.graphQlResponse.status)),sD("Errors",uP1(this.graphQlResponse)))}}class zk extends _k{type="network";cause;constructor(A,D){let Q=D instanceof Error?D.message:`Network error occurred: ${D}`;super(Q,A);this.cause=D}get ctx(){return XF("Error details",FR(this.request),this.#A())}get sanitizedMessage(){let A=this.cause,D=A?.code||A?.errno,Q=this.#D(D);return`Network error occurred${Q?`: ${Q}`:""}`}#A(){if(!this.cause||!(this.cause instanceof Error))return;let A=this.cause;if(A.code||A.errno){let D=A.code||A.errno,Q=this.#D(D),B=Q?`${Q} (${D})`:`Error code: ${D}`;return sD("Network issue",B)}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 koA extends _k{type="timeout";#A;constructor(A,D){let Q=`Request timed out${D?` after ${D}ms`:""}`;super(Q,A);this.#A=Q}get ctx(){return XF("Error details",FR(this.request))}get sanitizedMessage(){return this.#A}}var cP1=pP1;var ts={type:"rest",method:"GET",path:"/api/v4/version"};var Jk=JSON;var dP1=(A)=>A.toUpperCase(),lP1=(A)=>{let D={};return A.forEach((Q,B)=>{D[B]=Q}),D};var iP1=(A,D,Q)=>{return A.document?A:{document:A,variables:D,requestHeaders:Q,signal:void 0}},aP1=(A,D,Q)=>{return A.query?A:{query:A,variables:D,requestHeaders:Q,signal:void 0}},nP1=(A,D)=>{return A.documents?A:{documents:A,requestHeaders:D,signal:void 0}};var _g=wA(mb1(),1),pb1=(A)=>{let D=void 0,Q=A.definitions.filter((B)=>B.kind==="OperationDefinition");if(Q.length===1)D=Q[0]?.name?.value;return D},OU=(A)=>{if(typeof A==="string"){let Q=void 0;try{let B=_g.parse(A);Q=pb1(B)}catch(B){}return{query:A,operationName:Q}}let D=pb1(A);return{query:_g.print(A),operationName:D}};class EE extends Error{constructor(A,D){let Q=`${EE.extractMessage(A)}: ${JSON.stringify({response:A,request:D})}`;super(Q);if(Object.setPrototypeOf(this,EE.prototype),this.response=A,this.request=D,typeof Error.captureStackTrace==="function")Error.captureStackTrace(this,EE)}static extractMessage(A){return A.errors?.[0]?.message??`GraphQL Error (Code: ${A.status})`}}var CC=wA(jk1(),1);var w70="connection_init",K70="connection_ack",vk1="ping",fk1="pong",U70="subscribe",H70="next",Z70="error",bk1="complete";class YC{get type(){return this._type}get id(){return this._id}get payload(){return this._payload}constructor(A,D,Q){this._type=A,this._payload=D,this._id=Q}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:Q,payload:B,id:E}=JSON.parse(A);return new YC(Q,D(B),E)}}class g11{constructor(A,{onInit:D,onAcknowledged:Q,onPing:B,onPong:E}){this.socketState={acknowledged:!1,lastRequestId:0,subscriptions:{}},this.socket=A,A.addEventListener("open",async(F)=>{this.socketState.acknowledged=!1,this.socketState.subscriptions={},A.send(q70(D?await D():null).text)}),A.addEventListener("close",(F)=>{this.socketState.acknowledged=!1,this.socketState.subscriptions={}}),A.addEventListener("error",(F)=>{console.error(F)}),A.addEventListener("message",(F)=>{try{let _=$70(F.data);switch(_.type){case K70:{if(this.socketState.acknowledged)console.warn("Duplicate CONNECTION_ACK message ignored");else if(this.socketState.acknowledged=!0,Q)Q(_.payload);return}case vk1:{if(B)B(_.payload).then((X)=>A.send(yk1(X).text));else A.send(yk1(null).text);return}case fk1:{if(E)E(_.payload);return}}if(!this.socketState.acknowledged)return;if(_.id===void 0||_.id===null||!this.socketState.subscriptions[_.id])return;let{query:z,variables:J,subscriber:G}=this.socketState.subscriptions[_.id];switch(_.type){case H70:{if(!_.payload.errors&&_.payload.data)G.next&&G.next(_.payload.data);if(_.payload.errors)G.error&&G.error(new EE({..._.payload,status:200},{query:z,variables:J}));return}case Z70:{G.error&&G.error(new EE({errors:_.payload,status:200},{query:z,variables:J}));return}case bk1:{G.complete&&G.complete(),delete this.socketState.subscriptions[_.id];return}}}catch(_){console.error(_),A.close(1006)}A.close(4400,"Unknown graphql-ws message.")})}makeSubscribe(A,D,Q,B){let E=(this.socketState.lastRequestId++).toString();return this.socketState.subscriptions[E]={query:A,variables:B,subscriber:Q},this.socket.send(M70(E,{query:A,operationName:D,variables:B}).text),()=>{this.socket.send(W70(E).text),delete this.socketState.subscriptions[E]}}rawRequest(A,D){return new Promise((Q,B)=>{let E;this.rawSubscribe(A,{next:(F,_)=>E={data:F,extensions:_},error:B,complete:()=>Q(E)},D)})}request(A,D){return new Promise((Q,B)=>{let E;this.subscribe(A,{next:(F)=>E=F,error:B,complete:()=>Q(E)},D)})}subscribe(A,D,Q){let{query:B,operationName:E}=OU(A);return this.makeSubscribe(B,E,D,Q)}rawSubscribe(A,D,Q){return this.makeSubscribe(A,void 0,D,Q)}ping(A){this.socket.send(V70(A).text)}close(){this.socket.close(1000)}}g11.PROTOCOL="graphql-transport-ws";function $70(A,D=(Q)=>Q){return YC.parse(A,D)}function q70(A){return new YC(w70,A)}function V70(A){return new YC(vk1,A,void 0)}function yk1(A){return new YC(fk1,A,void 0)}function M70(A,D){return new YC(U70,D,A)}function W70(A){return new YC(bk1,void 0,A)}var QV=(A)=>{let D={};if(A)if(typeof Headers<"u"&&A instanceof Headers||CC&&CC.Headers&&A instanceof CC.Headers)D=lP1(A);else if(Array.isArray(A))A.forEach(([Q,B])=>{if(Q&&B!==void 0)D[Q]=B});else D=A;return D},kk1=(A)=>A.replace(/([\s,]|#[^\n\r]+)+/g," ").trim(),O70=(A)=>{if(!Array.isArray(A.query)){let B=A,E=[`query=${encodeURIComponent(kk1(B.query))}`];if(A.variables)E.push(`variables=${encodeURIComponent(B.jsonSerializer.stringify(B.variables))}`);if(B.operationName)E.push(`operationName=${encodeURIComponent(B.operationName)}`);return E.join("&")}if(typeof A.variables<"u"&&!Array.isArray(A.variables))throw Error("Cannot create query with given variable type, array expected");let D=A,Q=A.query.reduce((B,E,F)=>{return B.push({query:kk1(E),variables:D.variables?D.jsonSerializer.stringify(D.variables[F]):void 0}),B},[]);return`query=${encodeURIComponent(D.jsonSerializer.stringify(Q))}`},N70=(A)=>async(D)=>{let{url:Q,query:B,variables:E,operationName:F,fetch:_,fetchOptions:z,middleware:J}=D,G={...D.headers},X="",Y=void 0;if(A==="POST"){if(Y=L70(B,E,F,z.jsonSerializer),typeof Y==="string")G["Content-Type"]="application/json"}else X=O70({query:B,variables:E,operationName:F,jsonSerializer:z.jsonSerializer??Jk});let w={method:A,headers:G,body:Y,...z},I=Q,C=w;if(J){let H=await Promise.resolve(J({...w,url:Q,operationName:F,variables:E})),{url:$,...M}=H;I=$,C=M}if(X)I=`${I}?${X}`;return await _(I,C)};class h11{constructor(A,D={}){this.url=A,this.requestConfig=D,this.rawRequest=async(...Q)=>{let[B,E,F]=Q,_=aP1(B,E,F),{headers:z,fetch:J=CC.default,method:G="POST",requestMiddleware:X,responseMiddleware:Y,...w}=this.requestConfig,{url:I}=this;if(_.signal!==void 0)w.signal=_.signal;let{operationName:C}=OU(_.query);return x11({url:I,query:_.query,variables:_.variables,headers:{...QV(u11(z)),...QV(_.requestHeaders)},operationName:C,fetch:J,method:G,fetchOptions:w,middleware:X}).then((H)=>{if(Y)Y(H);return H}).catch((H)=>{if(Y)Y(H);throw H})}}async request(A,...D){let[Q,B]=D,E=iP1(A,Q,B),{headers:F,fetch:_=CC.default,method:z="POST",requestMiddleware:J,responseMiddleware:G,...X}=this.requestConfig,{url:Y}=this;if(E.signal!==void 0)X.signal=E.signal;let{query:w,operationName:I}=OU(E.document);return x11({url:Y,query:w,variables:E.variables,headers:{...QV(u11(F)),...QV(E.requestHeaders)},operationName:I,fetch:_,method:z,fetchOptions:X,middleware:J}).then((C)=>{if(G)G(C);return C.data}).catch((C)=>{if(G)G(C);throw C})}batchRequests(A,D){let Q=nP1(A,D),{headers:B,...E}=this.requestConfig;if(Q.signal!==void 0)E.signal=Q.signal;let F=Q.documents.map(({document:z})=>OU(z).query),_=Q.documents.map(({variables:z})=>z);return x11({url:this.url,query:F,variables:_,headers:{...QV(u11(B)),...QV(Q.requestHeaders)},operationName:void 0,fetch:this.requestConfig.fetch??CC.default,method:this.requestConfig.method||"POST",fetchOptions:E,middleware:this.requestConfig.requestMiddleware}).then((z)=>{if(this.requestConfig.responseMiddleware)this.requestConfig.responseMiddleware(z);return z.data}).catch((z)=>{if(this.requestConfig.responseMiddleware)this.requestConfig.responseMiddleware(z);throw z})}setHeaders(A){return this.requestConfig.headers=A,this}setHeader(A,D){let{headers:Q}=this.requestConfig;if(Q)Q[A]=D;else this.requestConfig.headers={[A]:D};return this}setEndpoint(A){return this.url=A,this}}var x11=async(A)=>{let{query:D,variables:Q,fetchOptions:B}=A,E=N70(dP1(A.method??"post")),F=Array.isArray(A.query),_=await E(A),z=await R70(_,B.jsonSerializer??Jk),J=Array.isArray(z)?!z.some(({data:X})=>!X):Boolean(z.data),G=Array.isArray(z)||!z.errors||Array.isArray(z.errors)&&!z.errors.length||B.errorPolicy==="all"||B.errorPolicy==="ignore";if(_.ok&&G&&J){let{errors:X,...Y}=Array.isArray(z)?z:z,w=B.errorPolicy==="ignore"?Y:z;return{...F?{data:w}:w,headers:_.headers,status:_.status}}else throw new EE({...typeof z==="string"?{error:z}:z,status:_.status,headers:_.headers},{query:D,variables:Q})};var L70=(A,D,Q,B)=>{let E=B??Jk;if(!Array.isArray(A))return E.stringify({query:A,variables:D,operationName:Q});if(typeof D<"u"&&!Array.isArray(D))throw Error("Cannot create request body with given variable type, array expected");let F=A.reduce((_,z,J)=>{return _.push({query:z,variables:D?D[J]:void 0}),_},[]);return E.stringify(F)},R70=async(A,D)=>{let Q;if(A.headers.forEach((B,E)=>{if(E.toLowerCase()==="content-type")Q=B}),Q&&(Q.toLowerCase().startsWith("application/json")||Q.toLowerCase().startsWith("application/graphql+json")||Q.toLowerCase().startsWith("application/graphql-response+json")))return D.parse(await A.text());else return A.text()},u11=(A)=>{return typeof A==="function"?A():A},PU=(A,...D)=>{return A.reduce((Q,B,E)=>`${Q}${B}${E in D?String(D[E]):""}`,"")};var gk1=async(A,D,Q)=>{if(!D.ok){let B=await D.text().catch(()=>{return});throw new cP1(A,D,Q,B)}};function hJ(){return"8.19.0"}var xk1=(A)=>{let D=A?`${A?.name}:${A?.version}`:"missing client info";return`gitlab-language-server:${hJ()} (${D})`};function uk1(A){return A!==null&&A!==void 0}var m11=(A,D)=>{return Object.entries(D).forEach(([Q,B])=>{if(uk1(B))A.searchParams.append(Q,String(B))}),A},Cg=(A)=>A.toString().replace(/\/?$/,"/"),BV=(A)=>A.replace(/^\.?\/?/,"./");var P70=(A)=>A.split("/").pop()||"unknown resource";class p11{#A;#D;#Q;#B;#E;constructor(A,D,Q,B,E){this.#A=A,this.#D=D,this.#Q=new URL(Cg(B)),this.#B=E,this.#E=Q}getDefaultHeaders(){return{Authorization:`Bearer ${this.#B}`,"User-Agent":xk1(this.#E),"X-Gitlab-Language-Server-Version":hJ()}}async fetchFromApiRaw(A){try{let D=`Unknown request method "${A.method}", request type "${A.type}"`;switch(A.method){case"GET":return await this.#_(A);case"POST":return await this.#z(A);case"PATCH":return await this.#J(A);case"PUT":return await this.#G(A);case"HEAD":return await this.#X(A);default:throw Error(D)}}catch(D){throw new zk(A,D)}}async fetchFromApi(A){if(A.type==="graphql")return this.#F(A);let D=await this.fetchFromApiRaw(A);return await gk1(A,D,P70(A.path)),D.json()}fetchOperation=(A)=>(D)=>this.fetchFromApi({...A,signal:D});async#F(A){let D=new URL("./api/graphql",this.#Q),Q=Fk(A.query);if(Q)this.#A.debug(`[SimpleApiClient] Making GraphQL request: ${Q}`);let B=async(F,_)=>{let z=F instanceof URL?F.toString():F;return this.#D.post(z,{..._,headers:{..._?.headers},signal:A.signal})},E=new h11(D.href,{fetch:B,headers:{...this.getDefaultHeaders()}});try{return await E.request(A.query,A.variables)}catch(F){if(F instanceof EE)throw new ss(A,F.response);throw new zk(A,F)}}async#_(A){let D=BV(A.path),Q=new URL(D,this.#Q);return m11(Q,A.searchParams??{}),this.#D.get(Q,{headers:{...this.getDefaultHeaders(),...A.headers},signal:A.signal})}async#z(A){let D=BV(A.path),Q=new URL(D,this.#Q);return this.#D.post(Q,{headers:{"Content-Type":"application/json",...this.getDefaultHeaders(),...A.headers},body:JSON.stringify(A.body),signal:A.signal})}async#J(A){let D=BV(A.path),Q=new URL(D,this.#Q);return this.#D.patch(Q,{headers:{"Content-Type":"application/json",...this.getDefaultHeaders(),...A.headers},body:JSON.stringify(A.body),signal:A.signal})}async#G(A){let D=BV(A.path),Q=new URL(D,this.#Q);return this.#D.put(Q,{headers:{"Content-Type":"application/json",...this.getDefaultHeaders(),...A.headers},body:JSON.stringify(A.body),signal:A.signal})}async#X(A){let D=BV(A.path),Q=new URL(D,this.#Q);return m11(Q,A.searchParams??{}),this.#D.head(Q,{headers:{...this.getDefaultHeaders(),...A.headers},signal:A.signal})}}var hk1=wA(g0(),1),mk1=hk1.createInterfaceId("UserService");var pk1=1e4,ck1=4;import S70 from"events";class eR{#A="Closed";#D;#Q;#B=0;#E=new S70;#F=null;constructor(A=ck1,D=pk1){this.#D=A,this.#Q=D}error(){if(this.#B+=1,this.#B>=this.#D)this.#_()}#_(){this.#A="Open",this.#F=setTimeout(()=>this.#z(),this.#Q),this.#E.emit("open")}isOpen(){return this.#A==="Open"}#z(){if(this.#A==="Closed")return;if(this.#F)clearTimeout(this.#F);this.#A="Closed",this.#E.emit("close")}success(){this.#B=0,this.#z()}onOpen(A){return this.#E.on("open",A),{dispose:()=>this.#E.removeListener("open",A)}}onClose(A){return this.#E.on("close",A),{dispose:()=>this.#E.removeListener("close",A)}}}import j70 from"events";var y70=1000,v70=60000,f70=2;class b70{#A="Closed";#D;#Q;#B;#E=0;#F=new j70;#_=null;constructor({initialBackoffMs:A=y70,maxBackoffMs:D=v70,backoffMultiplier:Q=f70}={}){this.#D=A,this.#Q=D,this.#B=Q}error(){this.#E+=1,this.#z()}megaError(){this.#E+=3,this.#z()}#z(){if(this.#A==="Open")return;this.#A="Open",this.#_=setTimeout(()=>this.#J(),this.#G()),this.#F.emit("open")}#J(){if(this.#A==="Closed")return;if(this.#_)clearTimeout(this.#_);this.#A="Closed",this.#F.emit("close")}isOpen(){return this.#A==="Open"}success(){this.#E=0,this.#J()}onOpen(A){return this.#F.on("open",A),{dispose:()=>this.#F.removeListener("open",A)}}onClose(A){return this.#F.on("close",A),{dispose:()=>this.#F.removeListener("close",A)}}#G(){return Math.min(this.#D*this.#B**(this.#E-1),this.#Q)}}import k70 from"events";var c11="EVENT";class wC{#A;eventEmitter=new k70;event=(A,D={})=>{let Q=(B,E)=>A.bind(D)(B,E);return this.eventEmitter.on(c11,Q),{dispose:()=>this.eventEmitter.removeListener(c11,Q)}};fire(A){if(this.#A)this.#A.abort();this.#A=new AbortController,this.eventEmitter.emit(c11,A,this.#A.signal)}dispose(){this.#A?.abort(),this.eventEmitter.removeAllListeners()}}class AP{#A;#D=0;#Q;#B=new wC;constructor(A,D){this.#A=D,this.#Q=A}error(){if(this.#D+=1,this.#E){this.#B.fire();return}this.#Q.error()}success(){this.#D=0,this.#Q.success()}onOpen(A){return this.#Q.onOpen(A)}onClose(A){return this.#Q.onClose(A)}get#E(){return this.#D>=this.#A}onReachedMaxAttempts=this.#B.event;isOpen(){return this.#E||this.#Q.isOpen()}reset(){this.#D=0,this.#Q.success()}}var yg=wA(g0(),1);var gx1=wA(x_(),1);var _V=wA(EA1(),1);function pJ(A,D,Q,B){if(!_V.valid(D))throw Error(`minimumRequiredVersion argument ${D} isn't valid`);let E=_V.coerce(A);if(!E)return console.warn(`Could not parse version from "${A}", running logic for the latest GitLab version`),Q();if(_V.gte(E,D))return Q();return B()}import{Buffer as fx1}from"buffer";function vx1(A){return fx1.from(A).byteLength}function GP(A,D,Q={}){let{separator:B=/\s+/g,suffix:E}=Q;if(vx1(A)<=D)return A;let F=E?vx1(` ${E}`):0,_=Math.max(0,D-F);if(_===0&&E)return` ${E}`.slice(0,D);let z=fx1.from(A).subarray(0,_).toString(),J=[...z.matchAll(B)].pop();if(J)z=z.slice(0,J.index);return E?`${z} ${E}`:z}var Rg=(A)=>{};function FA1(A){let D=parseInt(A.replace(/gid:\/\/gitlab\/.*\//g,""),10);if(!D||Number.isNaN(D))return;return D}var _A1=wA(x_(),1),Pg=(A,D)=>{let Q,B=D||_A1.default.isEqual;return{event:A.event.bind(A),fire:(E)=>{if(!B(Q,E))Q=_A1.default.cloneDeep(E),A.fire(E)},dispose:A.dispose.bind(A)}};var zA1=wA(x_(),1);function Tg(A){if(zA1.default.isPlainObject(A)){let D={},Q=A;return Object.keys(Q).forEach((B)=>{D[zA1.default.camelCase(B)]=Tg(Q[B])}),D}if(Array.isArray(A))return A.map((D)=>Tg(D));return A}var Sg;((F)=>{F.EditorAdvancedContext="advanced_context_resolver";F.CodeSuggestionsContext="code_suggestions_context";F.UseDuoContextExclusion="use_duo_context_exclusion";F.DuoAgenticChat="duo_agentic_chat";F.DuoWorkflow="duo_workflow"})(Sg||={});var bx1={["duo_agentic_chat"]:"18.0.0",["duo_workflow"]:"17.2.0",["advanced_context_resolver"]:"17.1.0",["code_suggestions_context"]:"17.1.0",["use_duo_context_exclusion"]:"18.2.0"},kx1={["duo_agentic_chat"]:"18.5.0",["duo_workflow"]:"18.2.0",["advanced_context_resolver"]:"17.4.0",["code_suggestions_context"]:"17.4.0"};var TE0=PU`
971
+ `,"")).trim()}function SoA(A){return xP1(A).match(/^(query|mutation|subscription)\s+/)?.[1]}function joA(A){return xP1(A).match(/(?:query|mutation|subscription)\s+(\w+)/)?.[1]}function Fk(A){let D=SoA(A),Q=joA(A);if(D)return`${D}: ${Q??"anonymous"}`;return}var yoA=(A)=>{if(A.method==="GET"||A.method==="HEAD")return;if(!A.body)return;return sD("Body",JSON.stringify(A.body))},voA=(A)=>{if(A.method==="POST"||A.method==="PATCH"||A.method==="PUT")return;if(!A.searchParams)return;return sD("Search Params",JSON.stringify(A.searchParams))},foA=(A)=>{if(!A.headers)return;return sD("Headers",JSON.stringify(A.headers))},FR=(A)=>{switch(A.type){case"graphql":return XF("GraphQL Request",sD("Query",A.query.replace(/[\s\n]+/g," ").trim()),sD("Variables",JSON.stringify(A.variables)));case"rest":return XF("REST Request",sD("Method",A.method),sD("Path",A.path),foA(A),voA(A),yoA(A));default:return sD("Unknown request type",A.type)}};var mP1=(A)=>{try{return JSON.parse(A)?.error}catch{return}},boA=(A)=>{if(!A)return"";try{return JSON.parse(A)?.error_description??""}catch{return""}},ns=(A,D)=>Boolean(A.status===401&&D&&mP1(D)==="invalid_token"),os=(A,D)=>Boolean(A.status===400&&D&&mP1(D)==="invalid_grant");class _k extends Error{request;cause;constructor(A,D,Q){super(A);this.request=D,this.cause=Q?.cause}get sanitizedMessage(){return"API request failed"}}class rs extends _k{status;constructor(A,D,Q,B){super(A,D,B);this.status=Q}}class pP1 extends rs{type="rest";response;#A;constructor(A,D,Q,B){let E=`Fetching ${Q} from ${D.url} failed. ${boA(B)}`;if(ns(D,B))E=`Request for ${Q} failed because the token is expired or revoked.`;if(os(D,B))E="Request to refresh token failed, because it's revoked or already refreshed.";super(E,A,D.status);this.response=D,this.#A=B}isInvalidTokenOrInvalidRefresh(){return ns(this.response,this.#A)||os(this.response,this.#A)}get ctx(){return XF("Error details",FR(this.request),this.#D())}get sanitizedMessage(){if(ns(this.response,this.#A))return"Request failed because the token is expired or revoked.";if(os(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 XF("Response",sD("Status",String(this.status)),!hP1.default.isEmpty(A)?sD("Headers",JSON.stringify(A)):void 0,this.#A?sD("Response body",this.#A):void 0)}get body(){return this.#A}}var uP1=(A)=>A.errors?.map((D)=>D.message).join(",")||"";class ss extends rs{type="graphql";graphQlResponse;#A;constructor(A,D){let Q=Fk(A.query),B=`GraphQL request "${Q}" failed with ${uP1(D)}`;super(B,A,D.status);this.graphQlResponse=D,this.#A=Q}get sanitizedMessage(){return`GraphQL request "${this.#A}" failed with status ${this.graphQlResponse.status}`}get ctx(){return XF("Error details",FR(this.request),this.#D())}#D(){return XF("Response",sD("Status",String(this.graphQlResponse.status)),sD("Errors",uP1(this.graphQlResponse)))}}class zk extends _k{type="network";cause;constructor(A,D){let Q=D instanceof Error?D.message:`Network error occurred: ${D}`;super(Q,A);this.cause=D}get ctx(){return XF("Error details",FR(this.request),this.#A())}get sanitizedMessage(){let A=this.cause,D=A?.code||A?.errno,Q=this.#D(D);return`Network error occurred${Q?`: ${Q}`:""}`}#A(){if(!this.cause||!(this.cause instanceof Error))return;let A=this.cause;if(A.code||A.errno){let D=A.code||A.errno,Q=this.#D(D),B=Q?`${Q} (${D})`:`Error code: ${D}`;return sD("Network issue",B)}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 koA extends _k{type="timeout";#A;constructor(A,D){let Q=`Request timed out${D?` after ${D}ms`:""}`;super(Q,A);this.#A=Q}get ctx(){return XF("Error details",FR(this.request))}get sanitizedMessage(){return this.#A}}var cP1=pP1;var ts={type:"rest",method:"GET",path:"/api/v4/version"};var Jk=JSON;var dP1=(A)=>A.toUpperCase(),lP1=(A)=>{let D={};return A.forEach((Q,B)=>{D[B]=Q}),D};var iP1=(A,D,Q)=>{return A.document?A:{document:A,variables:D,requestHeaders:Q,signal:void 0}},aP1=(A,D,Q)=>{return A.query?A:{query:A,variables:D,requestHeaders:Q,signal:void 0}},nP1=(A,D)=>{return A.documents?A:{documents:A,requestHeaders:D,signal:void 0}};var _g=wA(mb1(),1),pb1=(A)=>{let D=void 0,Q=A.definitions.filter((B)=>B.kind==="OperationDefinition");if(Q.length===1)D=Q[0]?.name?.value;return D},OU=(A)=>{if(typeof A==="string"){let Q=void 0;try{let B=_g.parse(A);Q=pb1(B)}catch(B){}return{query:A,operationName:Q}}let D=pb1(A);return{query:_g.print(A),operationName:D}};class EE extends Error{constructor(A,D){let Q=`${EE.extractMessage(A)}: ${JSON.stringify({response:A,request:D})}`;super(Q);if(Object.setPrototypeOf(this,EE.prototype),this.response=A,this.request=D,typeof Error.captureStackTrace==="function")Error.captureStackTrace(this,EE)}static extractMessage(A){return A.errors?.[0]?.message??`GraphQL Error (Code: ${A.status})`}}var CC=wA(jk1(),1);var w70="connection_init",K70="connection_ack",vk1="ping",fk1="pong",U70="subscribe",H70="next",Z70="error",bk1="complete";class YC{get type(){return this._type}get id(){return this._id}get payload(){return this._payload}constructor(A,D,Q){this._type=A,this._payload=D,this._id=Q}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:Q,payload:B,id:E}=JSON.parse(A);return new YC(Q,D(B),E)}}class g11{constructor(A,{onInit:D,onAcknowledged:Q,onPing:B,onPong:E}){this.socketState={acknowledged:!1,lastRequestId:0,subscriptions:{}},this.socket=A,A.addEventListener("open",async(F)=>{this.socketState.acknowledged=!1,this.socketState.subscriptions={},A.send(q70(D?await D():null).text)}),A.addEventListener("close",(F)=>{this.socketState.acknowledged=!1,this.socketState.subscriptions={}}),A.addEventListener("error",(F)=>{console.error(F)}),A.addEventListener("message",(F)=>{try{let _=$70(F.data);switch(_.type){case K70:{if(this.socketState.acknowledged)console.warn("Duplicate CONNECTION_ACK message ignored");else if(this.socketState.acknowledged=!0,Q)Q(_.payload);return}case vk1:{if(B)B(_.payload).then((X)=>A.send(yk1(X).text));else A.send(yk1(null).text);return}case fk1:{if(E)E(_.payload);return}}if(!this.socketState.acknowledged)return;if(_.id===void 0||_.id===null||!this.socketState.subscriptions[_.id])return;let{query:z,variables:J,subscriber:G}=this.socketState.subscriptions[_.id];switch(_.type){case H70:{if(!_.payload.errors&&_.payload.data)G.next&&G.next(_.payload.data);if(_.payload.errors)G.error&&G.error(new EE({..._.payload,status:200},{query:z,variables:J}));return}case Z70:{G.error&&G.error(new EE({errors:_.payload,status:200},{query:z,variables:J}));return}case bk1:{G.complete&&G.complete(),delete this.socketState.subscriptions[_.id];return}}}catch(_){console.error(_),A.close(1006)}A.close(4400,"Unknown graphql-ws message.")})}makeSubscribe(A,D,Q,B){let E=(this.socketState.lastRequestId++).toString();return this.socketState.subscriptions[E]={query:A,variables:B,subscriber:Q},this.socket.send(M70(E,{query:A,operationName:D,variables:B}).text),()=>{this.socket.send(W70(E).text),delete this.socketState.subscriptions[E]}}rawRequest(A,D){return new Promise((Q,B)=>{let E;this.rawSubscribe(A,{next:(F,_)=>E={data:F,extensions:_},error:B,complete:()=>Q(E)},D)})}request(A,D){return new Promise((Q,B)=>{let E;this.subscribe(A,{next:(F)=>E=F,error:B,complete:()=>Q(E)},D)})}subscribe(A,D,Q){let{query:B,operationName:E}=OU(A);return this.makeSubscribe(B,E,D,Q)}rawSubscribe(A,D,Q){return this.makeSubscribe(A,void 0,D,Q)}ping(A){this.socket.send(V70(A).text)}close(){this.socket.close(1000)}}g11.PROTOCOL="graphql-transport-ws";function $70(A,D=(Q)=>Q){return YC.parse(A,D)}function q70(A){return new YC(w70,A)}function V70(A){return new YC(vk1,A,void 0)}function yk1(A){return new YC(fk1,A,void 0)}function M70(A,D){return new YC(U70,D,A)}function W70(A){return new YC(bk1,void 0,A)}var QV=(A)=>{let D={};if(A)if(typeof Headers<"u"&&A instanceof Headers||CC&&CC.Headers&&A instanceof CC.Headers)D=lP1(A);else if(Array.isArray(A))A.forEach(([Q,B])=>{if(Q&&B!==void 0)D[Q]=B});else D=A;return D},kk1=(A)=>A.replace(/([\s,]|#[^\n\r]+)+/g," ").trim(),O70=(A)=>{if(!Array.isArray(A.query)){let B=A,E=[`query=${encodeURIComponent(kk1(B.query))}`];if(A.variables)E.push(`variables=${encodeURIComponent(B.jsonSerializer.stringify(B.variables))}`);if(B.operationName)E.push(`operationName=${encodeURIComponent(B.operationName)}`);return E.join("&")}if(typeof A.variables<"u"&&!Array.isArray(A.variables))throw Error("Cannot create query with given variable type, array expected");let D=A,Q=A.query.reduce((B,E,F)=>{return B.push({query:kk1(E),variables:D.variables?D.jsonSerializer.stringify(D.variables[F]):void 0}),B},[]);return`query=${encodeURIComponent(D.jsonSerializer.stringify(Q))}`},N70=(A)=>async(D)=>{let{url:Q,query:B,variables:E,operationName:F,fetch:_,fetchOptions:z,middleware:J}=D,G={...D.headers},X="",Y=void 0;if(A==="POST"){if(Y=L70(B,E,F,z.jsonSerializer),typeof Y==="string")G["Content-Type"]="application/json"}else X=O70({query:B,variables:E,operationName:F,jsonSerializer:z.jsonSerializer??Jk});let w={method:A,headers:G,body:Y,...z},I=Q,C=w;if(J){let H=await Promise.resolve(J({...w,url:Q,operationName:F,variables:E})),{url:$,...M}=H;I=$,C=M}if(X)I=`${I}?${X}`;return await _(I,C)};class h11{constructor(A,D={}){this.url=A,this.requestConfig=D,this.rawRequest=async(...Q)=>{let[B,E,F]=Q,_=aP1(B,E,F),{headers:z,fetch:J=CC.default,method:G="POST",requestMiddleware:X,responseMiddleware:Y,...w}=this.requestConfig,{url:I}=this;if(_.signal!==void 0)w.signal=_.signal;let{operationName:C}=OU(_.query);return x11({url:I,query:_.query,variables:_.variables,headers:{...QV(u11(z)),...QV(_.requestHeaders)},operationName:C,fetch:J,method:G,fetchOptions:w,middleware:X}).then((H)=>{if(Y)Y(H);return H}).catch((H)=>{if(Y)Y(H);throw H})}}async request(A,...D){let[Q,B]=D,E=iP1(A,Q,B),{headers:F,fetch:_=CC.default,method:z="POST",requestMiddleware:J,responseMiddleware:G,...X}=this.requestConfig,{url:Y}=this;if(E.signal!==void 0)X.signal=E.signal;let{query:w,operationName:I}=OU(E.document);return x11({url:Y,query:w,variables:E.variables,headers:{...QV(u11(F)),...QV(E.requestHeaders)},operationName:I,fetch:_,method:z,fetchOptions:X,middleware:J}).then((C)=>{if(G)G(C);return C.data}).catch((C)=>{if(G)G(C);throw C})}batchRequests(A,D){let Q=nP1(A,D),{headers:B,...E}=this.requestConfig;if(Q.signal!==void 0)E.signal=Q.signal;let F=Q.documents.map(({document:z})=>OU(z).query),_=Q.documents.map(({variables:z})=>z);return x11({url:this.url,query:F,variables:_,headers:{...QV(u11(B)),...QV(Q.requestHeaders)},operationName:void 0,fetch:this.requestConfig.fetch??CC.default,method:this.requestConfig.method||"POST",fetchOptions:E,middleware:this.requestConfig.requestMiddleware}).then((z)=>{if(this.requestConfig.responseMiddleware)this.requestConfig.responseMiddleware(z);return z.data}).catch((z)=>{if(this.requestConfig.responseMiddleware)this.requestConfig.responseMiddleware(z);throw z})}setHeaders(A){return this.requestConfig.headers=A,this}setHeader(A,D){let{headers:Q}=this.requestConfig;if(Q)Q[A]=D;else this.requestConfig.headers={[A]:D};return this}setEndpoint(A){return this.url=A,this}}var x11=async(A)=>{let{query:D,variables:Q,fetchOptions:B}=A,E=N70(dP1(A.method??"post")),F=Array.isArray(A.query),_=await E(A),z=await R70(_,B.jsonSerializer??Jk),J=Array.isArray(z)?!z.some(({data:X})=>!X):Boolean(z.data),G=Array.isArray(z)||!z.errors||Array.isArray(z.errors)&&!z.errors.length||B.errorPolicy==="all"||B.errorPolicy==="ignore";if(_.ok&&G&&J){let{errors:X,...Y}=Array.isArray(z)?z:z,w=B.errorPolicy==="ignore"?Y:z;return{...F?{data:w}:w,headers:_.headers,status:_.status}}else throw new EE({...typeof z==="string"?{error:z}:z,status:_.status,headers:_.headers},{query:D,variables:Q})};var L70=(A,D,Q,B)=>{let E=B??Jk;if(!Array.isArray(A))return E.stringify({query:A,variables:D,operationName:Q});if(typeof D<"u"&&!Array.isArray(D))throw Error("Cannot create request body with given variable type, array expected");let F=A.reduce((_,z,J)=>{return _.push({query:z,variables:D?D[J]:void 0}),_},[]);return E.stringify(F)},R70=async(A,D)=>{let Q;if(A.headers.forEach((B,E)=>{if(E.toLowerCase()==="content-type")Q=B}),Q&&(Q.toLowerCase().startsWith("application/json")||Q.toLowerCase().startsWith("application/graphql+json")||Q.toLowerCase().startsWith("application/graphql-response+json")))return D.parse(await A.text());else return A.text()},u11=(A)=>{return typeof A==="function"?A():A},PU=(A,...D)=>{return A.reduce((Q,B,E)=>`${Q}${B}${E in D?String(D[E]):""}`,"")};var gk1=async(A,D,Q)=>{if(!D.ok){let B=await D.text().catch(()=>{return});throw new cP1(A,D,Q,B)}};function hJ(){return"8.19.1"}var xk1=(A)=>{let D=A?`${A?.name}:${A?.version}`:"missing client info";return`gitlab-language-server:${hJ()} (${D})`};function uk1(A){return A!==null&&A!==void 0}var m11=(A,D)=>{return Object.entries(D).forEach(([Q,B])=>{if(uk1(B))A.searchParams.append(Q,String(B))}),A},Cg=(A)=>A.toString().replace(/\/?$/,"/"),BV=(A)=>A.replace(/^\.?\/?/,"./");var P70=(A)=>A.split("/").pop()||"unknown resource";class p11{#A;#D;#Q;#B;#E;constructor(A,D,Q,B,E){this.#A=A,this.#D=D,this.#Q=new URL(Cg(B)),this.#B=E,this.#E=Q}getDefaultHeaders(){return{Authorization:`Bearer ${this.#B}`,"User-Agent":xk1(this.#E),"X-Gitlab-Language-Server-Version":hJ()}}async fetchFromApiRaw(A){try{let D=`Unknown request method "${A.method}", request type "${A.type}"`;switch(A.method){case"GET":return await this.#_(A);case"POST":return await this.#z(A);case"PATCH":return await this.#J(A);case"PUT":return await this.#G(A);case"HEAD":return await this.#X(A);default:throw Error(D)}}catch(D){throw new zk(A,D)}}async fetchFromApi(A){if(A.type==="graphql")return this.#F(A);let D=await this.fetchFromApiRaw(A);return await gk1(A,D,P70(A.path)),D.json()}fetchOperation=(A)=>(D)=>this.fetchFromApi({...A,signal:D});async#F(A){let D=new URL("./api/graphql",this.#Q),Q=Fk(A.query);if(Q)this.#A.debug(`[SimpleApiClient] Making GraphQL request: ${Q}`);let B=async(F,_)=>{let z=F instanceof URL?F.toString():F;return this.#D.post(z,{..._,headers:{..._?.headers},signal:A.signal})},E=new h11(D.href,{fetch:B,headers:{...this.getDefaultHeaders()}});try{return await E.request(A.query,A.variables)}catch(F){if(F instanceof EE)throw new ss(A,F.response);throw new zk(A,F)}}async#_(A){let D=BV(A.path),Q=new URL(D,this.#Q);return m11(Q,A.searchParams??{}),this.#D.get(Q,{headers:{...this.getDefaultHeaders(),...A.headers},signal:A.signal})}async#z(A){let D=BV(A.path),Q=new URL(D,this.#Q);return this.#D.post(Q,{headers:{"Content-Type":"application/json",...this.getDefaultHeaders(),...A.headers},body:JSON.stringify(A.body),signal:A.signal})}async#J(A){let D=BV(A.path),Q=new URL(D,this.#Q);return this.#D.patch(Q,{headers:{"Content-Type":"application/json",...this.getDefaultHeaders(),...A.headers},body:JSON.stringify(A.body),signal:A.signal})}async#G(A){let D=BV(A.path),Q=new URL(D,this.#Q);return this.#D.put(Q,{headers:{"Content-Type":"application/json",...this.getDefaultHeaders(),...A.headers},body:JSON.stringify(A.body),signal:A.signal})}async#X(A){let D=BV(A.path),Q=new URL(D,this.#Q);return m11(Q,A.searchParams??{}),this.#D.head(Q,{headers:{...this.getDefaultHeaders(),...A.headers},signal:A.signal})}}var hk1=wA(g0(),1),mk1=hk1.createInterfaceId("UserService");var pk1=1e4,ck1=4;import S70 from"events";class eR{#A="Closed";#D;#Q;#B=0;#E=new S70;#F=null;constructor(A=ck1,D=pk1){this.#D=A,this.#Q=D}error(){if(this.#B+=1,this.#B>=this.#D)this.#_()}#_(){this.#A="Open",this.#F=setTimeout(()=>this.#z(),this.#Q),this.#E.emit("open")}isOpen(){return this.#A==="Open"}#z(){if(this.#A==="Closed")return;if(this.#F)clearTimeout(this.#F);this.#A="Closed",this.#E.emit("close")}success(){this.#B=0,this.#z()}onOpen(A){return this.#E.on("open",A),{dispose:()=>this.#E.removeListener("open",A)}}onClose(A){return this.#E.on("close",A),{dispose:()=>this.#E.removeListener("close",A)}}}import j70 from"events";var y70=1000,v70=60000,f70=2;class b70{#A="Closed";#D;#Q;#B;#E=0;#F=new j70;#_=null;constructor({initialBackoffMs:A=y70,maxBackoffMs:D=v70,backoffMultiplier:Q=f70}={}){this.#D=A,this.#Q=D,this.#B=Q}error(){this.#E+=1,this.#z()}megaError(){this.#E+=3,this.#z()}#z(){if(this.#A==="Open")return;this.#A="Open",this.#_=setTimeout(()=>this.#J(),this.#G()),this.#F.emit("open")}#J(){if(this.#A==="Closed")return;if(this.#_)clearTimeout(this.#_);this.#A="Closed",this.#F.emit("close")}isOpen(){return this.#A==="Open"}success(){this.#E=0,this.#J()}onOpen(A){return this.#F.on("open",A),{dispose:()=>this.#F.removeListener("open",A)}}onClose(A){return this.#F.on("close",A),{dispose:()=>this.#F.removeListener("close",A)}}#G(){return Math.min(this.#D*this.#B**(this.#E-1),this.#Q)}}import k70 from"events";var c11="EVENT";class wC{#A;eventEmitter=new k70;event=(A,D={})=>{let Q=(B,E)=>A.bind(D)(B,E);return this.eventEmitter.on(c11,Q),{dispose:()=>this.eventEmitter.removeListener(c11,Q)}};fire(A){if(this.#A)this.#A.abort();this.#A=new AbortController,this.eventEmitter.emit(c11,A,this.#A.signal)}dispose(){this.#A?.abort(),this.eventEmitter.removeAllListeners()}}class AP{#A;#D=0;#Q;#B=new wC;constructor(A,D){this.#A=D,this.#Q=A}error(){if(this.#D+=1,this.#E){this.#B.fire();return}this.#Q.error()}success(){this.#D=0,this.#Q.success()}onOpen(A){return this.#Q.onOpen(A)}onClose(A){return this.#Q.onClose(A)}get#E(){return this.#D>=this.#A}onReachedMaxAttempts=this.#B.event;isOpen(){return this.#E||this.#Q.isOpen()}reset(){this.#D=0,this.#Q.success()}}var yg=wA(g0(),1);var gx1=wA(x_(),1);var _V=wA(EA1(),1);function pJ(A,D,Q,B){if(!_V.valid(D))throw Error(`minimumRequiredVersion argument ${D} isn't valid`);let E=_V.coerce(A);if(!E)return console.warn(`Could not parse version from "${A}", running logic for the latest GitLab version`),Q();if(_V.gte(E,D))return Q();return B()}import{Buffer as fx1}from"buffer";function vx1(A){return fx1.from(A).byteLength}function GP(A,D,Q={}){let{separator:B=/\s+/g,suffix:E}=Q;if(vx1(A)<=D)return A;let F=E?vx1(` ${E}`):0,_=Math.max(0,D-F);if(_===0&&E)return` ${E}`.slice(0,D);let z=fx1.from(A).subarray(0,_).toString(),J=[...z.matchAll(B)].pop();if(J)z=z.slice(0,J.index);return E?`${z} ${E}`:z}var Rg=(A)=>{};function FA1(A){let D=parseInt(A.replace(/gid:\/\/gitlab\/.*\//g,""),10);if(!D||Number.isNaN(D))return;return D}var _A1=wA(x_(),1),Pg=(A,D)=>{let Q,B=D||_A1.default.isEqual;return{event:A.event.bind(A),fire:(E)=>{if(!B(Q,E))Q=_A1.default.cloneDeep(E),A.fire(E)},dispose:A.dispose.bind(A)}};var zA1=wA(x_(),1);function Tg(A){if(zA1.default.isPlainObject(A)){let D={},Q=A;return Object.keys(Q).forEach((B)=>{D[zA1.default.camelCase(B)]=Tg(Q[B])}),D}if(Array.isArray(A))return A.map((D)=>Tg(D));return A}var Sg;((F)=>{F.EditorAdvancedContext="advanced_context_resolver";F.CodeSuggestionsContext="code_suggestions_context";F.UseDuoContextExclusion="use_duo_context_exclusion";F.DuoAgenticChat="duo_agentic_chat";F.DuoWorkflow="duo_workflow"})(Sg||={});var bx1={["duo_agentic_chat"]:"18.0.0",["duo_workflow"]:"17.2.0",["advanced_context_resolver"]:"17.1.0",["code_suggestions_context"]:"17.1.0",["use_duo_context_exclusion"]:"18.2.0"},kx1={["duo_agentic_chat"]:"18.5.0",["duo_workflow"]:"18.2.0",["advanced_context_resolver"]:"17.4.0",["code_suggestions_context"]:"17.4.0"};var TE0=PU`
972
972
  query featureFlagsEnabled($names: [String!]!) {
973
973
  metadata {
974
974
  featureFlags(names: $names) {
@@ -1373,5 +1373,5 @@ Searches recursively and respects .gitignore rules. Returns matching lines with
1373
1373
  `,input_schema:{type:"object",properties:{pattern:{type:"string",description:"The text pattern or regular expression to search for"},search_directory:{type:"string",description:'The directory to search in (relative to repository root). Defaults to "."'},case_insensitive:{type:"boolean",description:"Whether to perform case-insensitive search. Defaults to false"}},required:["pattern"]}};class nv{#A;#D;#Q;#B;constructor(A,D,Q,B){this.#A=A,this.#Q=D,this.#B=Q,this.#D=B}tools=[eK6,AU6,DU6,QU6,BU6,EU6,FU6];async executeTool(A){switch(this.#A.info(`Tool input: ${JSON.stringify(A.input)}`),A.name){case"list_dir":return this.#z(A);case"read_file":return this.#J(A);case"create_file_with_contents":return this.#G(A);case"find_files":return this.#X(A);case"mkdir":return this.#I(A);case"edit_file":return this.#Y(A);case"grep":return this.#w(A);default:return{result:"",error:`Unknown tool: ${A.name}`}}}#E(A,D){if(typeof A.input==="object"&&A.input!==null&&D in A.input){let Q=A.input[D];return typeof Q==="string"?Q:null}return null}#F(A,D){if(typeof A.input==="object"&&A.input!==null&&D in A.input){let Q=A.input[D];return typeof Q==="boolean"?Q:null}return null}async#_(A,D){this.#A.info(D);let Q=this.#D.find((E)=>E.canHandle(A));if(!Q)throw Error(`missing handler for action: ${D}`);let B=await Q.execute(A,{workflowToken:"",workflowId:"",fileStateTracker:this.#B,abortSignal:new AbortController().signal,workspaceFolderPath:this.#Q.cwd});return{result:B.response,error:B.error||void 0}}async#z(A){let D=this.#E(A,"directory");if(!D)return{result:"",error:`Invalid or missing directory in tool input: ${JSON.stringify(A.input)}`};let Q={requestID:"",listDirectory:{directory:D}};return this.#_(Q,`Executing list dir action: ${D}`)}async#J(A){let D=this.#E(A,"file_path");if(!D)return{result:"",error:`Invalid or missing file_path in tool input: ${JSON.stringify(A.input)}`};let Q={requestID:"",runReadFile:{filepath:D}};return this.#_(Q,`Executing read file action: ${D}`)}async#G(A){let D=this.#E(A,"file_path"),Q=this.#E(A,"contents");if(!D||Q===null)return{result:"",error:`Invalid or missing parameters in tool input: ${JSON.stringify(A.input)}`};let B={requestID:"",runWriteFile:{filepath:D,contents:Q}};return this.#_(B,`Executing write file action: ${D}`)}async#X(A){let D=this.#E(A,"name_pattern");if(!D)return{result:"",error:`Invalid or missing name_pattern in tool input: ${JSON.stringify(A.input)}`};let Q={requestID:"",findFiles:{namePattern:D}};return this.#_(Q,`Executing find files action: ${D}`)}async#I(A){let D=this.#E(A,"directory_path");if(!D)return{result:"",error:`Invalid or missing directory_path in tool input: ${JSON.stringify(A.input)}`};let Q={requestID:"",mkdir:{directoryPath:D}};return this.#_(Q,`Executing mkdir action: ${D}`)}async#Y(A){let D=this.#E(A,"file_path"),Q=this.#E(A,"old_str"),B=this.#E(A,"new_str");if(!D||Q===null||B===null)return{result:"",error:`Invalid or missing parameters in tool input: ${JSON.stringify(A.input)}`};let E={requestID:"",runEditFile:{filepath:D,oldString:Q,newString:B}};return this.#_(E,`Executing edit file action: ${D}`)}async#w(A){let D=this.#E(A,"pattern"),Q=this.#E(A,"search_directory")||".",B=this.#F(A,"case_insensitive")||!1;if(!D)return{result:"",error:`Invalid or missing pattern in tool input: ${JSON.stringify(A.input)}`};let E={requestID:"",grep:{searchDirectory:Q,pattern:D,caseInsensitive:B}};return this.#_(E,`Executing grep action: pattern=${D}, directory=${Q}`)}}nv=U0([wN.Injectable(FI1,[p0,uw,xj,wN.collection(i8)])],nv);class _I1{#A=[];#D;#Q;#B=5;constructor(A,D){this.#D=A,this.#Q=D}async*sendMessageStream(A){this.#A.push({role:"user",content:A}),yield*this.actStream()}async*actStream(){yield*this.#E(this.#B)}async*#E(A){if(A<=0){yield{id:`${Date.now()}`,type:"error",error:`The agent ran out of its ${this.#B} tool call allowance, you can say "go on" to make it continue.`};return}try{let D=`msg-${Date.now()}`,Q=this.#D.messages.stream({model:"claude-sonnet-4-20250514",max_tokens:4000,messages:this.#A,tools:this.#Q.tools});yield*this.#F(Q,D);let B=await Q.finalMessage();if(this.#A.push({role:"assistant",content:B.content}),yield*this.#_(B.content))yield*this.#E(A-1)}catch(D){throw yield{id:Date.now().toString(),type:"error",error:D instanceof Error?D.message:"Unknown error"},D}}async*#F(A,D){for await(let Q of A)if(Q.type==="content_block_delta"&&Q.delta.type==="text_delta")yield{id:D,type:"text_chunk",content:Q.delta.text}}async*#_(A){let D=!1;for(let Q of A)if(Q.type==="tool_use"){D=!0,yield{id:Q.id,type:"tool_start",name:Q.name,input:Q.input};let B=await this.#Q.executeTool(Q);yield{id:Q.id,type:"tool_complete",name:Q.name,result:B},this.#A.push({role:"user",content:[{type:"tool_result",tool_use_id:Q.id,content:B.result+(B.error?`
1374
1374
  Error: ${B.error}`:"")}]})}return D}clearContext(){this.#A=[]}}class ov{id="anthropic";#A;#D;#Q;#B;constructor(A,D,Q){this.#A=n0(A,"AnthropicSdkBackend"),this.#D=Q,this.#Q=D}async initialize(){try{await this.#E()}catch(A){throw this.#A.error("AnthropicSdkBackend initialization failed",A),A}}async*sendMessageStream(A){if(!this.#B)throw Error("Agent not initialized");try{for await(let D of this.#B.sendMessageStream(A.content))switch(D.type){case"text_chunk":yield{type:"text_chunk",messageId:D.id,content:D.content};break;case"tool_start":yield{type:"tool_start",toolId:D.id,name:D.name,input:D.input};break;case"tool_complete":yield{type:"tool_complete",toolId:D.id,result:D.result.result,error:D.result.error};break;case"error":yield{type:"error",message:D.error};return;default:break}}catch(D){yield{type:"error",message:D instanceof Error?D.message:"Unknown error"}}}async getWelcomeMessage(){return{id:"welcome",type:"message",role:"assistant",content:"Hi! I'm Claude running through GitLab proxy. What would you like to do?",timestamp:new Date}}async#E(){let A=await this.#F(),D=new rI({baseURL:"https://cloud.gitlab.com/ai/v1/proxy/anthropic/",defaultHeaders:A.headers,authToken:A.token});this.#B=new _I1(D,this.#D)}async#F(){try{return await this.#Q.fetchFromApi({type:"rest",method:"POST",path:"api/v4/ai/third_party_agents/direct_access",body:{}})}catch(A){throw Error(`Failed to fetch direct access token: ${A instanceof Error?A.message:"Unknown error"}`)}}}ov=U0([ELA.Injectable(hw,[p0,$D,FI1])],ov);var KN=wA(g0(),1);var zI1=KN.createInterfaceId("BackendResolver"),FLA="gitlab";class rv{backend;constructor(A,D){let Q=process.env.CLI_BACKEND,B=FLA;if(Q==="anthropic"||Q==="gitlab")B=Q;let E=D.find((F)=>F.id===B);if(!E)throw Error(`CLI backend with id ${B} was not found, this means the application has a critical bug, please report it, you can't fix it yourself.`);if(E.id!==FLA)A.info(`[BackendResolver] Picked alternative backend: ${E.id}`);this.backend=E}}rv=U0([KN.Injectable(zI1,[p0,KN.collection(hw)])],rv);async function Wa(A,D){let Q=new PE.ServiceCollection;if(Q.add(PE.createInstanceDescriptor({instance:D,aliases:[uw]})),A?.logDestination==="stdout")Q.addClass(Yv);else Q.addClass(Iv);Q.addClass(Xv,_U,AT,Jv),Q.add(PE.createFactoryDescriptor({aliases:[uy],factory:(F)=>new sl(F,F.getRequiredService(p0)),lifetime:PE.ServiceLifetime.Singleton})),Q.addClass(JT,pW,cW,dW,tO),Q.add(PE.createInstanceDescriptor({instance:{isEnabled:()=>!1,trackEvent:()=>{}},aliases:[CM]})),Q.add(PE.createFactoryDescriptor({aliases:[Iw],factory:()=>({reload:async()=>[]}),lifetime:PE.ServiceLifetime.Singleton})),Q.addClass(_v,eO,vO,fO,iW,kW,rO,lO,iO,cO,zv,aO,nO,sO,pO,dO,oO),Q.add(PE.createInstanceDescriptor({instance:{getDiagnostics:async()=>[]},aliases:[ay]})),Q.add(PE.createInstanceDescriptor({instance:{isClientFlagEnabled:()=>!1,isInstanceFlagEnabled:()=>!1,updateInstanceFeatureFlags:async()=>{}},aliases:[XP]})),Q.addClass(rv),Q.addClass(Gv),Q.addClass(ov,nv);let B=Q.build();return await B.getRequiredService(OC).initialize(),global.__logger=B.getRequiredService(p0),B}class JI1{#A;#D;constructor(){this.#A={elements:[],input:{value:"",cursorPosition:0,isLoading:!0}}}initialize(A){this.#D=A}getState(){return this.#A}setState(A){if(this.#A=A,!this.#D)throw Error("AppStore is not initialized");this.#D(this.#A)}}class GI1{#A;#D;#Q;#B;#E;#F;#_=new Map;constructor(A,D){this.#A=A,this.#E=D,this.#Q=new JI1}async initialize(){let A=await Wa({logDestination:"file"},this.#E),D=A.getRequiredService(zI1);this.#D=D.backend,this.#B=A.getRequiredService(p0),this.#Q.initialize((Q)=>this.#A(Q)),await this.#D.initialize(),await this.#z()}getCallbacks(){return{onKeyPress:this.#J.bind(this)}}async#z(){if(!this.#D)throw Error("Backend not initialized");let D={elements:[await this.#D.getWelcomeMessage()],input:{value:"",cursorPosition:0,isLoading:!1}};this.#Q.setState(D)}#J(A,D){if(!this.#Q)throw Error("Store not initialized");let Q=this.#Q.getState();if(D.return&&!Q.input.isLoading){this.#G(Q.input.value).catch((z)=>{this.#B?.error("Error handling send message",z)});return}if(D.ctrl&&A==="c"){this.#I();return}let B=Q.input.value,E=Q.input.cursorPosition,F=B,_=E;if(D.backspace||D.delete){if(E>0)F=B.slice(0,E-1)+B.slice(E),_=E-1}else if(A&&A.length===1&&!D.ctrl&&!D.meta)F=B.slice(0,E)+A+B.slice(E),_=E+1;if(F!==B||_!==E)this.#Q.setState({...Q,input:{...Q.input,value:F,cursorPosition:_}})}async#G(A){if(!this.#Q||!this.#D)throw Error("Services not initialized");let D=this.#Q.getState();if(!A.trim()||D.input.isLoading)return;this.#Q.setState({...D,input:{...D.input,value:"",cursorPosition:0,isLoading:!0}});let Q={id:Date.now().toString(),type:"message",role:"user",content:A,timestamp:new Date},B=this.#Q.getState();this.#Q.setState({...B,elements:[...B.elements,Q]});try{for await(let E of this.#D.sendMessageStream(Q))this.#X(E)}catch(E){this.#B?.error("Error in message streaming",E),this.#X({type:"error",message:"Sorry, there was an error processing your message. Please try again."})}finally{this.#F=void 0,this.#_.clear();let E=this.#Q.getState();this.#Q.setState({...E,input:{...E.input,isLoading:!1}})}}#X(A){if(!this.#Q)throw Error("Store not initialized");let D=this.#Q.getState();switch(A.type){case"text_chunk":{if(!this.#F||this.#F.id!==A.messageId)this.#F={id:A.messageId,type:"message",role:"assistant",content:A.content,timestamp:new Date},this.#Q.setState({...D,elements:[...D.elements,this.#F]});else{this.#F.content+=A.content;let Q=D.elements.map((B)=>B.type==="message"&&B.id===A.messageId&&this.#F?this.#F:B);this.#Q.setState({...D,elements:Q})}break}case"tool_start":{let Q={id:A.toolId,type:"tool",name:A.name,input:JSON.stringify(A.input,null,2),state:{type:"loading"}};this.#_.set(A.toolId,Q),this.#Q.setState({...D,elements:[...D.elements,Q]});break}case"tool_complete":{let Q=this.#_.get(A.toolId);if(Q){let B={...Q,state:A.error?{type:"error",error:A.error}:{type:"success",output:A.result}},E=D.elements.map((F)=>F.type==="tool"&&F.id===A.toolId?B:F);this.#Q.setState({...D,elements:E}),this.#_.delete(A.toolId)}break}case"error":{this.#B?.error("Agent error:",A.message);let Q={id:`error-${Date.now()}`,type:"message",role:"assistant",content:`❌ Error: ${A.message}`,timestamp:new Date};this.#Q.setState({...D,elements:[...D.elements,Q]});break}default:this.#B?.warn("Unknown agent event type:",A);break}}#I(){process.exit(0)}}var _U6=({runConfig:A,children:D})=>{if(A.environment==="development")return n4(dZ.StrictMode,{children:D});return n4(bs,{children:D})},zU6=({runConfig:A})=>{let[D,Q]=dZ.useState(void 0),[B]=dZ.useState(()=>new GI1(Q,A));if(dZ.useEffect(()=>{Rg(B.initialize())},[B]),!D)return n4(D8,{children:"Initializing..."});return n4(ks,{state:D,callbacks:B.getCallbacks()})},_LA=(A)=>{to(n4(_U6,{runConfig:A,children:n4(zU6,{runConfig:A})}))};class XI1{#A;#D;#Q;#B=null;constructor(A){this.#Q=A}async initialize(){let A=await Wa({logDestination:"stdout"},this.#Q);this.#A=A.getRequiredService(hw),this.#D=A.getRequiredService(p0),await this.#A.initialize()}async execute(A){if(!this.#A)throw Error("Controller not initialized. Call initialize() first.");let{goal:D}=A;this.#D?.info(`Executing workflow: ${JSON.stringify(A,null,4)}`);let Q={id:Date.now().toString(),type:"message",role:"user",content:D,timestamp:new Date};try{let B;for await(let E of this.#A.sendMessageStream(Q))this.#E(E),B=E;if(this.#B)this.#D?.info(JSON.stringify(this.#B,null,2));if(B?.type==="error")process.exit(1)}catch(B){throw this.#D?.error("Workflow failed:",B instanceof Error?B.message:String(B)),B}}#E(A){switch(A.type){case"text_chunk":{if(!this.#B||this.#B.id!==A.messageId){if(this.#B)this.#D?.info(JSON.stringify(this.#B,null,4));this.#B={id:A.messageId,type:"message",role:"assistant",content:A.content,timestamp:new Date}}else this.#B.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"error":{this.#D?.error(`Error: ${A.message}`);break}default:this.#D?.warn("Unexpected event received: ",A);break}}}var II1=()=>{return"production"};var JU6=process.platform==="win32",aw=new mI1,YI1=(A)=>{(global.__logger||console).error(A),process.exit(1)};process.on("unhandledRejection",YI1);process.on("uncaughtException",YI1);aw.name("duo").description("GitLab Duo for your command line");aw.name("duo").description("GitLab Duo for your command line").option("-C, --cwd <path>","change working directory",process.cwd()).addOption(new Qn("--gitlab-base-url <url>","Base URL of GitLab instance").env("GITLAB_URL").default(process.env.GITLAB_BASE_URL||"https://gitlab.com")).addOption(new Qn("--gitlab-auth-token <token>","Authentication token for GitLab instance").env("GITLAB_TOKEN").default(process.env.GITLAB_OAUTH_TOKEN).makeOptionMandatory());aw.action(()=>{let{cwd:A,gitlabBaseUrl:D,gitlabAuthToken:Q}=aw.opts(),B={cwd:A,gitlabBaseUrl:D,gitlabAuthToken:Q,environment:II1()};_LA(B)});var CI1=aw.command("log").description("log management commands");CI1.command("last").description("open the last log file").action(()=>{lI1()});CI1.command("list").description("list all log files").action(()=>{iI1()});CI1.command("tail [args...]").description(`tail the last log file. "args" can be any standard ${JU6?'PowerShell "Get-Content"':'"tail"'} arguments`).allowUnknownOption().action((A)=>aI1(A||[]));aw.command("run").description("Run a workflow in non-interactive / headless mode").requiredOption("-g, --goal <goal>","Workflow goal/prompt").action(async({goal:A})=>{let{cwd:D,gitlabBaseUrl:Q,gitlabAuthToken:B}=aw.opts(),E={cwd:D,gitlabBaseUrl:Q,gitlabAuthToken:B,environment:II1()},F={goal:A},_=new XI1(E);await _.initialize(),await _.execute(F)});try{await aw.parseAsync(process.argv)}catch(A){YI1(A)}
1375
1375
 
1376
- //# debugId=277B27A00955553964756E2164756E21
1376
+ //# debugId=1A7A9C544EB883FA64756E2164756E21
1377
1377
  //# sourceMappingURL=index.js.map